@strapi/utils 5.23.3 → 5.23.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,6 +15,7 @@ export type Visitor = (visitorOptions: VisitorOptions, visitorUtils: VisitorUtil
15
15
  export interface Path {
16
16
  raw: string | null;
17
17
  attribute: string | null;
18
+ rawWithIndices?: string | null;
18
19
  }
19
20
  export interface TraverseOptions {
20
21
  schema: Model;
@@ -1 +1 @@
1
- {"version":3,"file":"traverse-entity.d.ts","sourceRoot":"","sources":["../src/traverse-entity.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAGpE,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;AAE3F,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;CAC9B;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,KAAK,CAAC;CACf;AA8JD,QAAA,MAAM,kBAAkB,aAAc;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE;gBACtC,MAAM;aAIT,MAAM,SAAS,IAAI;CAG5B,CAAC;;AAEH,wBAAqC"}
1
+ {"version":3,"file":"traverse-entity.d.ts","sourceRoot":"","sources":["../src/traverse-entity.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAGpE,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;AAE3F,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;CAC9B;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,KAAK,CAAC;CACf;AAqLD,QAAA,MAAM,kBAAkB,aAAc;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE;gBACtC,MAAM;aAIT,MAAM,SAAS,IAAI;CAG5B,CAAC;;AAEH,wBAAqC"}
@@ -6,7 +6,8 @@ var contentTypes = require('./content-types.js');
6
6
  const traverseEntity = async (visitor, options, entity)=>{
7
7
  const { path = {
8
8
  raw: null,
9
- attribute: null
9
+ attribute: null,
10
+ rawWithIndices: null
10
11
  }, schema, getModel } = options;
11
12
  let parent = options.parent;
12
13
  const traverseMorphRelationTarget = async (visitor, path, entry)=>{
@@ -77,6 +78,7 @@ const traverseEntity = async (visitor, options, entity)=>{
77
78
  ...path
78
79
  };
79
80
  newPath.raw = fp.isNil(path.raw) ? key : `${path.raw}.${key}`;
81
+ newPath.rawWithIndices = fp.isNil(path.rawWithIndices) ? key : `${path.rawWithIndices}.${key}`;
80
82
  if (!fp.isNil(attribute)) {
81
83
  newPath.attribute = fp.isNil(path.attribute) ? key : `${path.attribute}.${key}`;
82
84
  }
@@ -111,7 +113,11 @@ const traverseEntity = async (visitor, options, entity)=>{
111
113
  if (fp.isArray(value)) {
112
114
  const res = new Array(value.length);
113
115
  for(let i = 0; i < value.length; i += 1){
114
- res[i] = await method(visitor, newPath, value[i]);
116
+ const arrayPath = {
117
+ ...newPath,
118
+ rawWithIndices: fp.isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`
119
+ };
120
+ res[i] = await method(visitor, arrayPath, value[i]);
115
121
  }
116
122
  copy[key] = res;
117
123
  } else {
@@ -124,7 +130,11 @@ const traverseEntity = async (visitor, options, entity)=>{
124
130
  if (fp.isArray(value)) {
125
131
  const res = new Array(value.length);
126
132
  for(let i = 0; i < value.length; i += 1){
127
- res[i] = await traverseMediaTarget(visitor, newPath, value[i]);
133
+ const arrayPath = {
134
+ ...newPath,
135
+ rawWithIndices: fp.isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`
136
+ };
137
+ res[i] = await traverseMediaTarget(visitor, arrayPath, value[i]);
128
138
  }
129
139
  copy[key] = res;
130
140
  } else {
@@ -137,7 +147,11 @@ const traverseEntity = async (visitor, options, entity)=>{
137
147
  if (fp.isArray(value)) {
138
148
  const res = new Array(value.length);
139
149
  for(let i = 0; i < value.length; i += 1){
140
- res[i] = await traverseComponent(visitor, newPath, targetSchema, value[i]);
150
+ const arrayPath = {
151
+ ...newPath,
152
+ rawWithIndices: fp.isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`
153
+ };
154
+ res[i] = await traverseComponent(visitor, arrayPath, targetSchema, value[i]);
141
155
  }
142
156
  copy[key] = res;
143
157
  } else {
@@ -148,7 +162,11 @@ const traverseEntity = async (visitor, options, entity)=>{
148
162
  if (attribute.type === 'dynamiczone' && fp.isArray(value)) {
149
163
  const res = new Array(value.length);
150
164
  for(let i = 0; i < value.length; i += 1){
151
- res[i] = await visitDynamicZoneEntry(visitor, newPath, value[i]);
165
+ const arrayPath = {
166
+ ...newPath,
167
+ rawWithIndices: fp.isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`
168
+ };
169
+ res[i] = await visitDynamicZoneEntry(visitor, arrayPath, value[i]);
152
170
  }
153
171
  copy[key] = res;
154
172
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"traverse-entity.js","sources":["../src/traverse-entity.ts"],"sourcesContent":["import { clone, isObject, isArray, isNil, curry } from 'lodash/fp';\n\nimport type { Attribute, AnyAttribute, Model, Data } from './types';\nimport { isRelationalAttribute, isMediaAttribute } from './content-types';\n\nexport type VisitorUtils = ReturnType<typeof createVisitorUtils>;\n\nexport interface VisitorOptions {\n data: Record<string, unknown>;\n schema: Model;\n key: string;\n value: Data[keyof Data];\n attribute?: AnyAttribute;\n path: Path;\n getModel(uid: string): Model;\n parent?: Parent;\n}\n\nexport type Visitor = (visitorOptions: VisitorOptions, visitorUtils: VisitorUtils) => void;\n\nexport interface Path {\n raw: string | null;\n attribute: string | null;\n}\n\nexport interface TraverseOptions {\n schema: Model;\n path?: Path;\n parent?: Parent;\n getModel(uid: string): Model;\n}\n\nexport interface Parent {\n attribute?: Attribute;\n key: string | null;\n path: Path;\n schema: Model;\n}\n\nconst traverseEntity = async (visitor: Visitor, options: TraverseOptions, entity: Data) => {\n const { path = { raw: null, attribute: null }, schema, getModel } = options;\n\n let parent = options.parent;\n\n const traverseMorphRelationTarget = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchema = getModel(entry.__type!);\n\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseRelationTarget =\n (schema: Model) => async (visitor: Visitor, path: Path, entry: Data) => {\n const traverseOptions: TraverseOptions = { schema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseMediaTarget = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseComponent = async (visitor: Visitor, path: Path, schema: Model, entry: Data) => {\n const traverseOptions: TraverseOptions = { schema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const visitDynamicZoneEntry = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchema = getModel(entry.__component!);\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n // End recursion\n if (!isObject(entity) || isNil(schema)) {\n return entity;\n }\n\n // Don't mutate the original entity object\n // only clone at 1st level as the next level will get clone when traversed\n const copy = clone(entity);\n const visitorUtils = createVisitorUtils({ data: copy });\n\n const keys = Object.keys(copy);\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n // Retrieve the attribute definition associated to the key from the schema\n const attribute = schema.attributes[key] as AnyAttribute | undefined;\n\n const newPath = { ...path };\n\n newPath.raw = isNil(path.raw) ? key : `${path.raw}.${key}`;\n\n if (!isNil(attribute)) {\n newPath.attribute = isNil(path.attribute) ? key : `${path.attribute}.${key}`;\n }\n\n // Visit the current attribute\n const visitorOptions: VisitorOptions = {\n data: copy,\n schema,\n key,\n value: copy[key],\n attribute,\n path: newPath,\n getModel,\n parent,\n };\n\n await visitor(visitorOptions, visitorUtils);\n\n // Extract the value for the current key (after calling the visitor)\n const value = copy[key];\n\n // Ignore Nil values or attributes\n if (isNil(value) || isNil(attribute)) {\n continue;\n }\n\n // The current attribute becomes the parent once visited\n parent = { schema, key, attribute, path: newPath };\n\n if (isRelationalAttribute(attribute)) {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n const method = isMorphRelation\n ? traverseMorphRelationTarget\n : traverseRelationTarget(getModel(attribute.target!));\n\n if (isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n res[i] = await method(visitor, newPath, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await method(visitor, newPath, value as Data);\n }\n\n continue;\n }\n\n if (isMediaAttribute(attribute)) {\n // need to update copy\n if (isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n res[i] = await traverseMediaTarget(visitor, newPath, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await traverseMediaTarget(visitor, newPath, value as Data);\n }\n\n continue;\n }\n\n if (attribute.type === 'component') {\n const targetSchema = getModel(attribute.component);\n\n if (isArray(value)) {\n const res: Data[] = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n res[i] = await traverseComponent(visitor, newPath, targetSchema, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await traverseComponent(visitor, newPath, targetSchema, value as Data);\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone' && isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n res[i] = await visitDynamicZoneEntry(visitor, newPath, value[i]);\n }\n copy[key] = res;\n\n continue;\n }\n }\n\n return copy;\n};\n\nconst createVisitorUtils = ({ data }: { data: Data }) => ({\n remove(key: string) {\n delete data[key];\n },\n\n set(key: string, value: Data) {\n data[key] = value;\n },\n});\n\nexport default curry(traverseEntity);\n"],"names":["traverseEntity","visitor","options","entity","path","raw","attribute","schema","getModel","parent","traverseMorphRelationTarget","entry","targetSchema","__type","traverseOptions","traverseRelationTarget","traverseMediaTarget","targetSchemaUID","traverseComponent","visitDynamicZoneEntry","__component","isObject","isNil","copy","clone","visitorUtils","createVisitorUtils","data","keys","Object","i","length","key","attributes","newPath","visitorOptions","value","isRelationalAttribute","isMorphRelation","relation","toLowerCase","startsWith","method","target","isArray","res","Array","isMediaAttribute","type","component","remove","set","curry"],"mappings":"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"}
1
+ {"version":3,"file":"traverse-entity.js","sources":["../src/traverse-entity.ts"],"sourcesContent":["import { clone, isObject, isArray, isNil, curry } from 'lodash/fp';\n\nimport type { Attribute, AnyAttribute, Model, Data } from './types';\nimport { isRelationalAttribute, isMediaAttribute } from './content-types';\n\nexport type VisitorUtils = ReturnType<typeof createVisitorUtils>;\n\nexport interface VisitorOptions {\n data: Record<string, unknown>;\n schema: Model;\n key: string;\n value: Data[keyof Data];\n attribute?: AnyAttribute;\n path: Path;\n getModel(uid: string): Model;\n parent?: Parent;\n}\n\nexport type Visitor = (visitorOptions: VisitorOptions, visitorUtils: VisitorUtils) => void;\n\nexport interface Path {\n raw: string | null;\n attribute: string | null;\n rawWithIndices?: string | null;\n}\n\nexport interface TraverseOptions {\n schema: Model;\n path?: Path;\n parent?: Parent;\n getModel(uid: string): Model;\n}\n\nexport interface Parent {\n attribute?: Attribute;\n key: string | null;\n path: Path;\n schema: Model;\n}\n\nconst traverseEntity = async (visitor: Visitor, options: TraverseOptions, entity: Data) => {\n const { path = { raw: null, attribute: null, rawWithIndices: null }, schema, getModel } = options;\n\n let parent = options.parent;\n\n const traverseMorphRelationTarget = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchema = getModel(entry.__type!);\n\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseRelationTarget =\n (schema: Model) => async (visitor: Visitor, path: Path, entry: Data) => {\n const traverseOptions: TraverseOptions = { schema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseMediaTarget = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseComponent = async (visitor: Visitor, path: Path, schema: Model, entry: Data) => {\n const traverseOptions: TraverseOptions = { schema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const visitDynamicZoneEntry = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchema = getModel(entry.__component!);\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n // End recursion\n if (!isObject(entity) || isNil(schema)) {\n return entity;\n }\n\n // Don't mutate the original entity object\n // only clone at 1st level as the next level will get clone when traversed\n const copy = clone(entity);\n const visitorUtils = createVisitorUtils({ data: copy });\n\n const keys = Object.keys(copy);\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n // Retrieve the attribute definition associated to the key from the schema\n const attribute = schema.attributes[key] as AnyAttribute | undefined;\n\n const newPath = { ...path };\n\n newPath.raw = isNil(path.raw) ? key : `${path.raw}.${key}`;\n newPath.rawWithIndices = isNil(path.rawWithIndices) ? key : `${path.rawWithIndices}.${key}`;\n\n if (!isNil(attribute)) {\n newPath.attribute = isNil(path.attribute) ? key : `${path.attribute}.${key}`;\n }\n\n // Visit the current attribute\n const visitorOptions: VisitorOptions = {\n data: copy,\n schema,\n key,\n value: copy[key],\n attribute,\n path: newPath,\n getModel,\n parent,\n };\n\n await visitor(visitorOptions, visitorUtils);\n\n // Extract the value for the current key (after calling the visitor)\n const value = copy[key];\n\n // Ignore Nil values or attributes\n if (isNil(value) || isNil(attribute)) {\n continue;\n }\n\n // The current attribute becomes the parent once visited\n parent = { schema, key, attribute, path: newPath };\n\n if (isRelationalAttribute(attribute)) {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n const method = isMorphRelation\n ? traverseMorphRelationTarget\n : traverseRelationTarget(getModel(attribute.target!));\n\n if (isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n const arrayPath = {\n ...newPath,\n rawWithIndices: isNil(newPath.rawWithIndices)\n ? `${i}`\n : `${newPath.rawWithIndices}.${i}`,\n };\n res[i] = await method(visitor, arrayPath, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await method(visitor, newPath, value as Data);\n }\n\n continue;\n }\n\n if (isMediaAttribute(attribute)) {\n // need to update copy\n if (isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n const arrayPath = {\n ...newPath,\n rawWithIndices: isNil(newPath.rawWithIndices)\n ? `${i}`\n : `${newPath.rawWithIndices}.${i}`,\n };\n res[i] = await traverseMediaTarget(visitor, arrayPath, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await traverseMediaTarget(visitor, newPath, value as Data);\n }\n\n continue;\n }\n\n if (attribute.type === 'component') {\n const targetSchema = getModel(attribute.component);\n\n if (isArray(value)) {\n const res: Data[] = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n const arrayPath = {\n ...newPath,\n rawWithIndices: isNil(newPath.rawWithIndices)\n ? `${i}`\n : `${newPath.rawWithIndices}.${i}`,\n };\n res[i] = await traverseComponent(visitor, arrayPath, targetSchema, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await traverseComponent(visitor, newPath, targetSchema, value as Data);\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone' && isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n const arrayPath = {\n ...newPath,\n rawWithIndices: isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`,\n };\n res[i] = await visitDynamicZoneEntry(visitor, arrayPath, value[i]);\n }\n copy[key] = res;\n\n continue;\n }\n }\n\n return copy;\n};\n\nconst createVisitorUtils = ({ data }: { data: Data }) => ({\n remove(key: string) {\n delete data[key];\n },\n\n set(key: string, value: Data) {\n data[key] = value;\n },\n});\n\nexport default curry(traverseEntity);\n"],"names":["traverseEntity","visitor","options","entity","path","raw","attribute","rawWithIndices","schema","getModel","parent","traverseMorphRelationTarget","entry","targetSchema","__type","traverseOptions","traverseRelationTarget","traverseMediaTarget","targetSchemaUID","traverseComponent","visitDynamicZoneEntry","__component","isObject","isNil","copy","clone","visitorUtils","createVisitorUtils","data","keys","Object","i","length","key","attributes","newPath","visitorOptions","value","isRelationalAttribute","isMorphRelation","relation","toLowerCase","startsWith","method","target","isArray","res","Array","arrayPath","isMediaAttribute","type","component","remove","set","curry"],"mappings":"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"}
@@ -4,7 +4,8 @@ import { isRelationalAttribute, isMediaAttribute } from './content-types.mjs';
4
4
  const traverseEntity = async (visitor, options, entity)=>{
5
5
  const { path = {
6
6
  raw: null,
7
- attribute: null
7
+ attribute: null,
8
+ rawWithIndices: null
8
9
  }, schema, getModel } = options;
9
10
  let parent = options.parent;
10
11
  const traverseMorphRelationTarget = async (visitor, path, entry)=>{
@@ -75,6 +76,7 @@ const traverseEntity = async (visitor, options, entity)=>{
75
76
  ...path
76
77
  };
77
78
  newPath.raw = isNil(path.raw) ? key : `${path.raw}.${key}`;
79
+ newPath.rawWithIndices = isNil(path.rawWithIndices) ? key : `${path.rawWithIndices}.${key}`;
78
80
  if (!isNil(attribute)) {
79
81
  newPath.attribute = isNil(path.attribute) ? key : `${path.attribute}.${key}`;
80
82
  }
@@ -109,7 +111,11 @@ const traverseEntity = async (visitor, options, entity)=>{
109
111
  if (isArray(value)) {
110
112
  const res = new Array(value.length);
111
113
  for(let i = 0; i < value.length; i += 1){
112
- res[i] = await method(visitor, newPath, value[i]);
114
+ const arrayPath = {
115
+ ...newPath,
116
+ rawWithIndices: isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`
117
+ };
118
+ res[i] = await method(visitor, arrayPath, value[i]);
113
119
  }
114
120
  copy[key] = res;
115
121
  } else {
@@ -122,7 +128,11 @@ const traverseEntity = async (visitor, options, entity)=>{
122
128
  if (isArray(value)) {
123
129
  const res = new Array(value.length);
124
130
  for(let i = 0; i < value.length; i += 1){
125
- res[i] = await traverseMediaTarget(visitor, newPath, value[i]);
131
+ const arrayPath = {
132
+ ...newPath,
133
+ rawWithIndices: isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`
134
+ };
135
+ res[i] = await traverseMediaTarget(visitor, arrayPath, value[i]);
126
136
  }
127
137
  copy[key] = res;
128
138
  } else {
@@ -135,7 +145,11 @@ const traverseEntity = async (visitor, options, entity)=>{
135
145
  if (isArray(value)) {
136
146
  const res = new Array(value.length);
137
147
  for(let i = 0; i < value.length; i += 1){
138
- res[i] = await traverseComponent(visitor, newPath, targetSchema, value[i]);
148
+ const arrayPath = {
149
+ ...newPath,
150
+ rawWithIndices: isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`
151
+ };
152
+ res[i] = await traverseComponent(visitor, arrayPath, targetSchema, value[i]);
139
153
  }
140
154
  copy[key] = res;
141
155
  } else {
@@ -146,7 +160,11 @@ const traverseEntity = async (visitor, options, entity)=>{
146
160
  if (attribute.type === 'dynamiczone' && isArray(value)) {
147
161
  const res = new Array(value.length);
148
162
  for(let i = 0; i < value.length; i += 1){
149
- res[i] = await visitDynamicZoneEntry(visitor, newPath, value[i]);
163
+ const arrayPath = {
164
+ ...newPath,
165
+ rawWithIndices: isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`
166
+ };
167
+ res[i] = await visitDynamicZoneEntry(visitor, arrayPath, value[i]);
150
168
  }
151
169
  copy[key] = res;
152
170
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"traverse-entity.mjs","sources":["../src/traverse-entity.ts"],"sourcesContent":["import { clone, isObject, isArray, isNil, curry } from 'lodash/fp';\n\nimport type { Attribute, AnyAttribute, Model, Data } from './types';\nimport { isRelationalAttribute, isMediaAttribute } from './content-types';\n\nexport type VisitorUtils = ReturnType<typeof createVisitorUtils>;\n\nexport interface VisitorOptions {\n data: Record<string, unknown>;\n schema: Model;\n key: string;\n value: Data[keyof Data];\n attribute?: AnyAttribute;\n path: Path;\n getModel(uid: string): Model;\n parent?: Parent;\n}\n\nexport type Visitor = (visitorOptions: VisitorOptions, visitorUtils: VisitorUtils) => void;\n\nexport interface Path {\n raw: string | null;\n attribute: string | null;\n}\n\nexport interface TraverseOptions {\n schema: Model;\n path?: Path;\n parent?: Parent;\n getModel(uid: string): Model;\n}\n\nexport interface Parent {\n attribute?: Attribute;\n key: string | null;\n path: Path;\n schema: Model;\n}\n\nconst traverseEntity = async (visitor: Visitor, options: TraverseOptions, entity: Data) => {\n const { path = { raw: null, attribute: null }, schema, getModel } = options;\n\n let parent = options.parent;\n\n const traverseMorphRelationTarget = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchema = getModel(entry.__type!);\n\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseRelationTarget =\n (schema: Model) => async (visitor: Visitor, path: Path, entry: Data) => {\n const traverseOptions: TraverseOptions = { schema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseMediaTarget = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseComponent = async (visitor: Visitor, path: Path, schema: Model, entry: Data) => {\n const traverseOptions: TraverseOptions = { schema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const visitDynamicZoneEntry = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchema = getModel(entry.__component!);\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n // End recursion\n if (!isObject(entity) || isNil(schema)) {\n return entity;\n }\n\n // Don't mutate the original entity object\n // only clone at 1st level as the next level will get clone when traversed\n const copy = clone(entity);\n const visitorUtils = createVisitorUtils({ data: copy });\n\n const keys = Object.keys(copy);\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n // Retrieve the attribute definition associated to the key from the schema\n const attribute = schema.attributes[key] as AnyAttribute | undefined;\n\n const newPath = { ...path };\n\n newPath.raw = isNil(path.raw) ? key : `${path.raw}.${key}`;\n\n if (!isNil(attribute)) {\n newPath.attribute = isNil(path.attribute) ? key : `${path.attribute}.${key}`;\n }\n\n // Visit the current attribute\n const visitorOptions: VisitorOptions = {\n data: copy,\n schema,\n key,\n value: copy[key],\n attribute,\n path: newPath,\n getModel,\n parent,\n };\n\n await visitor(visitorOptions, visitorUtils);\n\n // Extract the value for the current key (after calling the visitor)\n const value = copy[key];\n\n // Ignore Nil values or attributes\n if (isNil(value) || isNil(attribute)) {\n continue;\n }\n\n // The current attribute becomes the parent once visited\n parent = { schema, key, attribute, path: newPath };\n\n if (isRelationalAttribute(attribute)) {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n const method = isMorphRelation\n ? traverseMorphRelationTarget\n : traverseRelationTarget(getModel(attribute.target!));\n\n if (isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n res[i] = await method(visitor, newPath, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await method(visitor, newPath, value as Data);\n }\n\n continue;\n }\n\n if (isMediaAttribute(attribute)) {\n // need to update copy\n if (isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n res[i] = await traverseMediaTarget(visitor, newPath, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await traverseMediaTarget(visitor, newPath, value as Data);\n }\n\n continue;\n }\n\n if (attribute.type === 'component') {\n const targetSchema = getModel(attribute.component);\n\n if (isArray(value)) {\n const res: Data[] = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n res[i] = await traverseComponent(visitor, newPath, targetSchema, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await traverseComponent(visitor, newPath, targetSchema, value as Data);\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone' && isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n res[i] = await visitDynamicZoneEntry(visitor, newPath, value[i]);\n }\n copy[key] = res;\n\n continue;\n }\n }\n\n return copy;\n};\n\nconst createVisitorUtils = ({ data }: { data: Data }) => ({\n remove(key: string) {\n delete data[key];\n },\n\n set(key: string, value: Data) {\n data[key] = value;\n },\n});\n\nexport default curry(traverseEntity);\n"],"names":["traverseEntity","visitor","options","entity","path","raw","attribute","schema","getModel","parent","traverseMorphRelationTarget","entry","targetSchema","__type","traverseOptions","traverseRelationTarget","traverseMediaTarget","targetSchemaUID","traverseComponent","visitDynamicZoneEntry","__component","isObject","isNil","copy","clone","visitorUtils","createVisitorUtils","data","keys","Object","i","length","key","attributes","newPath","visitorOptions","value","isRelationalAttribute","isMorphRelation","relation","toLowerCase","startsWith","method","target","isArray","res","Array","isMediaAttribute","type","component","remove","set","curry"],"mappings":"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"}
1
+ {"version":3,"file":"traverse-entity.mjs","sources":["../src/traverse-entity.ts"],"sourcesContent":["import { clone, isObject, isArray, isNil, curry } from 'lodash/fp';\n\nimport type { Attribute, AnyAttribute, Model, Data } from './types';\nimport { isRelationalAttribute, isMediaAttribute } from './content-types';\n\nexport type VisitorUtils = ReturnType<typeof createVisitorUtils>;\n\nexport interface VisitorOptions {\n data: Record<string, unknown>;\n schema: Model;\n key: string;\n value: Data[keyof Data];\n attribute?: AnyAttribute;\n path: Path;\n getModel(uid: string): Model;\n parent?: Parent;\n}\n\nexport type Visitor = (visitorOptions: VisitorOptions, visitorUtils: VisitorUtils) => void;\n\nexport interface Path {\n raw: string | null;\n attribute: string | null;\n rawWithIndices?: string | null;\n}\n\nexport interface TraverseOptions {\n schema: Model;\n path?: Path;\n parent?: Parent;\n getModel(uid: string): Model;\n}\n\nexport interface Parent {\n attribute?: Attribute;\n key: string | null;\n path: Path;\n schema: Model;\n}\n\nconst traverseEntity = async (visitor: Visitor, options: TraverseOptions, entity: Data) => {\n const { path = { raw: null, attribute: null, rawWithIndices: null }, schema, getModel } = options;\n\n let parent = options.parent;\n\n const traverseMorphRelationTarget = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchema = getModel(entry.__type!);\n\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseRelationTarget =\n (schema: Model) => async (visitor: Visitor, path: Path, entry: Data) => {\n const traverseOptions: TraverseOptions = { schema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseMediaTarget = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const traverseComponent = async (visitor: Visitor, path: Path, schema: Model, entry: Data) => {\n const traverseOptions: TraverseOptions = { schema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n const visitDynamicZoneEntry = async (visitor: Visitor, path: Path, entry: Data) => {\n const targetSchema = getModel(entry.__component!);\n const traverseOptions: TraverseOptions = { schema: targetSchema, path, getModel, parent };\n\n return traverseEntity(visitor, traverseOptions, entry);\n };\n\n // End recursion\n if (!isObject(entity) || isNil(schema)) {\n return entity;\n }\n\n // Don't mutate the original entity object\n // only clone at 1st level as the next level will get clone when traversed\n const copy = clone(entity);\n const visitorUtils = createVisitorUtils({ data: copy });\n\n const keys = Object.keys(copy);\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n // Retrieve the attribute definition associated to the key from the schema\n const attribute = schema.attributes[key] as AnyAttribute | undefined;\n\n const newPath = { ...path };\n\n newPath.raw = isNil(path.raw) ? key : `${path.raw}.${key}`;\n newPath.rawWithIndices = isNil(path.rawWithIndices) ? key : `${path.rawWithIndices}.${key}`;\n\n if (!isNil(attribute)) {\n newPath.attribute = isNil(path.attribute) ? key : `${path.attribute}.${key}`;\n }\n\n // Visit the current attribute\n const visitorOptions: VisitorOptions = {\n data: copy,\n schema,\n key,\n value: copy[key],\n attribute,\n path: newPath,\n getModel,\n parent,\n };\n\n await visitor(visitorOptions, visitorUtils);\n\n // Extract the value for the current key (after calling the visitor)\n const value = copy[key];\n\n // Ignore Nil values or attributes\n if (isNil(value) || isNil(attribute)) {\n continue;\n }\n\n // The current attribute becomes the parent once visited\n parent = { schema, key, attribute, path: newPath };\n\n if (isRelationalAttribute(attribute)) {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n const method = isMorphRelation\n ? traverseMorphRelationTarget\n : traverseRelationTarget(getModel(attribute.target!));\n\n if (isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n const arrayPath = {\n ...newPath,\n rawWithIndices: isNil(newPath.rawWithIndices)\n ? `${i}`\n : `${newPath.rawWithIndices}.${i}`,\n };\n res[i] = await method(visitor, arrayPath, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await method(visitor, newPath, value as Data);\n }\n\n continue;\n }\n\n if (isMediaAttribute(attribute)) {\n // need to update copy\n if (isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n const arrayPath = {\n ...newPath,\n rawWithIndices: isNil(newPath.rawWithIndices)\n ? `${i}`\n : `${newPath.rawWithIndices}.${i}`,\n };\n res[i] = await traverseMediaTarget(visitor, arrayPath, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await traverseMediaTarget(visitor, newPath, value as Data);\n }\n\n continue;\n }\n\n if (attribute.type === 'component') {\n const targetSchema = getModel(attribute.component);\n\n if (isArray(value)) {\n const res: Data[] = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n const arrayPath = {\n ...newPath,\n rawWithIndices: isNil(newPath.rawWithIndices)\n ? `${i}`\n : `${newPath.rawWithIndices}.${i}`,\n };\n res[i] = await traverseComponent(visitor, arrayPath, targetSchema, value[i]);\n }\n copy[key] = res;\n } else {\n copy[key] = await traverseComponent(visitor, newPath, targetSchema, value as Data);\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone' && isArray(value)) {\n const res = new Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n const arrayPath = {\n ...newPath,\n rawWithIndices: isNil(newPath.rawWithIndices) ? `${i}` : `${newPath.rawWithIndices}.${i}`,\n };\n res[i] = await visitDynamicZoneEntry(visitor, arrayPath, value[i]);\n }\n copy[key] = res;\n\n continue;\n }\n }\n\n return copy;\n};\n\nconst createVisitorUtils = ({ data }: { data: Data }) => ({\n remove(key: string) {\n delete data[key];\n },\n\n set(key: string, value: Data) {\n data[key] = value;\n },\n});\n\nexport default curry(traverseEntity);\n"],"names":["traverseEntity","visitor","options","entity","path","raw","attribute","rawWithIndices","schema","getModel","parent","traverseMorphRelationTarget","entry","targetSchema","__type","traverseOptions","traverseRelationTarget","traverseMediaTarget","targetSchemaUID","traverseComponent","visitDynamicZoneEntry","__component","isObject","isNil","copy","clone","visitorUtils","createVisitorUtils","data","keys","Object","i","length","key","attributes","newPath","visitorOptions","value","isRelationalAttribute","isMorphRelation","relation","toLowerCase","startsWith","method","target","isArray","res","Array","arrayPath","isMediaAttribute","type","component","remove","set","curry"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/utils",
3
- "version": "5.23.3",
3
+ "version": "5.23.4",
4
4
  "description": "Shared utilities for the Strapi packages",
5
5
  "keywords": [
6
6
  "strapi",
@@ -61,10 +61,10 @@
61
61
  "@types/http-errors": "2.0.4",
62
62
  "@types/koa": "2.13.4",
63
63
  "@types/node": "18.19.24",
64
- "eslint-config-custom": "5.23.3",
64
+ "eslint-config-custom": "5.23.4",
65
65
  "koa": "2.16.1",
66
66
  "koa-body": "6.0.1",
67
- "tsconfig": "5.23.3"
67
+ "tsconfig": "5.23.4"
68
68
  },
69
69
  "engines": {
70
70
  "node": ">=18.0.0 <=22.x.x",