@strapi/utils 5.30.0 → 5.31.0

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.
Files changed (49) hide show
  1. package/dist/convert-query-params.js.map +1 -1
  2. package/dist/convert-query-params.mjs.map +1 -1
  3. package/dist/env-helper.js.map +1 -1
  4. package/dist/env-helper.mjs.map +1 -1
  5. package/dist/errors.js.map +1 -1
  6. package/dist/errors.mjs.map +1 -1
  7. package/dist/file.d.ts +4 -0
  8. package/dist/file.d.ts.map +1 -1
  9. package/dist/file.js.map +1 -1
  10. package/dist/file.mjs.map +1 -1
  11. package/dist/install-id.js.map +1 -1
  12. package/dist/install-id.mjs.map +1 -1
  13. package/dist/parse-type.js.map +1 -1
  14. package/dist/parse-type.mjs.map +1 -1
  15. package/dist/print-value.js.map +1 -1
  16. package/dist/print-value.mjs.map +1 -1
  17. package/dist/provider-factory.js.map +1 -1
  18. package/dist/provider-factory.mjs.map +1 -1
  19. package/dist/sanitize/visitors/remove-disallowed-fields.js.map +1 -1
  20. package/dist/sanitize/visitors/remove-disallowed-fields.mjs.map +1 -1
  21. package/dist/sanitize/visitors/remove-restricted-fields.js.map +1 -1
  22. package/dist/sanitize/visitors/remove-restricted-fields.mjs.map +1 -1
  23. package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -1
  24. package/dist/sanitize/visitors/remove-restricted-relations.mjs.map +1 -1
  25. package/dist/traverse/factory.js.map +1 -1
  26. package/dist/traverse/factory.mjs.map +1 -1
  27. package/dist/traverse/query-filters.js.map +1 -1
  28. package/dist/traverse/query-filters.mjs.map +1 -1
  29. package/dist/traverse/query-populate.js.map +1 -1
  30. package/dist/traverse/query-populate.mjs.map +1 -1
  31. package/dist/traverse/query-sort.js.map +1 -1
  32. package/dist/traverse/query-sort.mjs.map +1 -1
  33. package/dist/traverse-entity.js.map +1 -1
  34. package/dist/traverse-entity.mjs.map +1 -1
  35. package/dist/validate/utils.js.map +1 -1
  36. package/dist/validate/utils.mjs.map +1 -1
  37. package/dist/validate/validators.js.map +1 -1
  38. package/dist/validate/validators.mjs.map +1 -1
  39. package/dist/validate/visitors/throw-disallowed-fields.js.map +1 -1
  40. package/dist/validate/visitors/throw-disallowed-fields.mjs.map +1 -1
  41. package/dist/validate/visitors/throw-restricted-fields.js.map +1 -1
  42. package/dist/validate/visitors/throw-restricted-fields.mjs.map +1 -1
  43. package/dist/validate/visitors/throw-restricted-relations.js.map +1 -1
  44. package/dist/validate/visitors/throw-restricted-relations.mjs.map +1 -1
  45. package/dist/validation/utilities.js.map +1 -1
  46. package/dist/validation/utilities.mjs.map +1 -1
  47. package/dist/yup.js.map +1 -1
  48. package/dist/yup.mjs.map +1 -1
  49. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"query-filters.js","sources":["../../src/traverse/query-filters.ts"],"sourcesContent":["import { curry, isObject, isEmpty, isArray, isNil, cloneDeep, omit } from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst filters = traverseFactory()\n .intercept(\n // Intercept filters arrays and apply the traversal to each one individually\n isArray,\n async (visitor, options, filters, { recurse }) => {\n return Promise.all(\n filters.map((filter, i) => {\n // In filters, only operators such as $and, $in, $notIn or $or and implicit operators like [...]\n // can have a value array, thus we can update the raw path but not the attribute one\n const newPath = options.path\n ? { ...options.path, raw: `${options.path.raw}[${i}]` }\n : options.path;\n\n return recurse(visitor, { ...options, path: newPath }, filter);\n })\n // todo: move that to the visitors\n ).then((res) => res.filter((val) => !(isObject(val) && isEmpty(val))));\n }\n )\n .intercept(\n // Ignore non object filters and return the value as-is\n (filters): filters is unknown => !isObject(filters),\n (_, __, filters) => {\n return filters;\n }\n )\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n return omit(key, data);\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n // Ignore null or undefined values\n .ignore(({ value }) => isNil(value))\n // Recursion on operators (non attributes)\n .on(\n ({ attribute }) => isNil(attribute),\n async ({ key, visitor, path, value, schema, getModel, attribute }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n set(key, await recurse(visitor, { schema, path, getModel, parent }, value));\n }\n )\n // Handle relation recursion\n .onRelation(\n async ({ key, attribute, visitor, path, value, schema, getModel }, { set, recurse }) => {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n if (isMorphRelation) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n .onComponent(\n async ({ key, attribute, visitor, path, schema, value, getModel }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle media recursion\n .onMedia(async ({ key, visitor, path, schema, attribute, value, getModel }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n });\n\nexport default curry(filters.traverse);\n"],"names":["isObj","value","isObject","filters","traverseFactory","intercept","isArray","visitor","options","recurse","Promise","all","map","filter","i","newPath","path","raw","then","res","val","isEmpty","_","__","parse","transform","cloneDeep","remove","key","data","omit","set","keys","Object","get","ignore","isNil","on","attribute","schema","getModel","parent","onRelation","isMorphRelation","relation","toLowerCase","startsWith","targetSchemaUID","target","targetSchema","newValue","onComponent","component","onMedia","curry","traverse"],"mappings":"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"}
1
+ {"version":3,"file":"query-filters.js","sources":["../../src/traverse/query-filters.ts"],"sourcesContent":["import { curry, isObject, isEmpty, isArray, isNil, cloneDeep, omit } from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst filters = traverseFactory()\n .intercept(\n // Intercept filters arrays and apply the traversal to each one individually\n isArray,\n async (visitor, options, filters, { recurse }) => {\n return Promise.all(\n filters.map((filter, i) => {\n // In filters, only operators such as $and, $in, $notIn or $or and implicit operators like [...]\n // can have a value array, thus we can update the raw path but not the attribute one\n const newPath = options.path\n ? { ...options.path, raw: `${options.path.raw}[${i}]` }\n : options.path;\n\n return recurse(visitor, { ...options, path: newPath }, filter);\n })\n // todo: move that to the visitors\n ).then((res) => res.filter((val) => !(isObject(val) && isEmpty(val))));\n }\n )\n .intercept(\n // Ignore non object filters and return the value as-is\n (filters): filters is unknown => !isObject(filters),\n (_, __, filters) => {\n return filters;\n }\n )\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n return omit(key, data);\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n // Ignore null or undefined values\n .ignore(({ value }) => isNil(value))\n // Recursion on operators (non attributes)\n .on(\n ({ attribute }) => isNil(attribute),\n async ({ key, visitor, path, value, schema, getModel, attribute }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n set(key, await recurse(visitor, { schema, path, getModel, parent }, value));\n }\n )\n // Handle relation recursion\n .onRelation(\n async ({ key, attribute, visitor, path, value, schema, getModel }, { set, recurse }) => {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n if (isMorphRelation) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n .onComponent(\n async ({ key, attribute, visitor, path, schema, value, getModel }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle media recursion\n .onMedia(async ({ key, visitor, path, schema, attribute, value, getModel }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n });\n\nexport default curry(filters.traverse);\n"],"names":["isObj","value","isObject","filters","traverseFactory","intercept","isArray","visitor","options","recurse","Promise","all","map","filter","i","newPath","path","raw","then","res","val","isEmpty","_","__","parse","transform","cloneDeep","remove","key","data","omit","set","keys","Object","get","ignore","isNil","on","attribute","schema","getModel","parent","onRelation","isMorphRelation","relation","toLowerCase","startsWith","targetSchemaUID","target","targetSchema","newValue","onComponent","component","onMedia","curry","traverse"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-filters.mjs","sources":["../../src/traverse/query-filters.ts"],"sourcesContent":["import { curry, isObject, isEmpty, isArray, isNil, cloneDeep, omit } from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst filters = traverseFactory()\n .intercept(\n // Intercept filters arrays and apply the traversal to each one individually\n isArray,\n async (visitor, options, filters, { recurse }) => {\n return Promise.all(\n filters.map((filter, i) => {\n // In filters, only operators such as $and, $in, $notIn or $or and implicit operators like [...]\n // can have a value array, thus we can update the raw path but not the attribute one\n const newPath = options.path\n ? { ...options.path, raw: `${options.path.raw}[${i}]` }\n : options.path;\n\n return recurse(visitor, { ...options, path: newPath }, filter);\n })\n // todo: move that to the visitors\n ).then((res) => res.filter((val) => !(isObject(val) && isEmpty(val))));\n }\n )\n .intercept(\n // Ignore non object filters and return the value as-is\n (filters): filters is unknown => !isObject(filters),\n (_, __, filters) => {\n return filters;\n }\n )\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n return omit(key, data);\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n // Ignore null or undefined values\n .ignore(({ value }) => isNil(value))\n // Recursion on operators (non attributes)\n .on(\n ({ attribute }) => isNil(attribute),\n async ({ key, visitor, path, value, schema, getModel, attribute }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n set(key, await recurse(visitor, { schema, path, getModel, parent }, value));\n }\n )\n // Handle relation recursion\n .onRelation(\n async ({ key, attribute, visitor, path, value, schema, getModel }, { set, recurse }) => {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n if (isMorphRelation) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n .onComponent(\n async ({ key, attribute, visitor, path, schema, value, getModel }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle media recursion\n .onMedia(async ({ key, visitor, path, schema, attribute, value, getModel }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n });\n\nexport default curry(filters.traverse);\n"],"names":["isObj","value","isObject","filters","traverseFactory","intercept","isArray","visitor","options","recurse","Promise","all","map","filter","i","newPath","path","raw","then","res","val","isEmpty","_","__","parse","transform","cloneDeep","remove","key","data","omit","set","keys","Object","get","ignore","isNil","on","attribute","schema","getModel","parent","onRelation","isMorphRelation","relation","toLowerCase","startsWith","targetSchemaUID","target","targetSchema","newValue","onComponent","component","onMedia","curry","traverse"],"mappings":"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"}
1
+ {"version":3,"file":"query-filters.mjs","sources":["../../src/traverse/query-filters.ts"],"sourcesContent":["import { curry, isObject, isEmpty, isArray, isNil, cloneDeep, omit } from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst filters = traverseFactory()\n .intercept(\n // Intercept filters arrays and apply the traversal to each one individually\n isArray,\n async (visitor, options, filters, { recurse }) => {\n return Promise.all(\n filters.map((filter, i) => {\n // In filters, only operators such as $and, $in, $notIn or $or and implicit operators like [...]\n // can have a value array, thus we can update the raw path but not the attribute one\n const newPath = options.path\n ? { ...options.path, raw: `${options.path.raw}[${i}]` }\n : options.path;\n\n return recurse(visitor, { ...options, path: newPath }, filter);\n })\n // todo: move that to the visitors\n ).then((res) => res.filter((val) => !(isObject(val) && isEmpty(val))));\n }\n )\n .intercept(\n // Ignore non object filters and return the value as-is\n (filters): filters is unknown => !isObject(filters),\n (_, __, filters) => {\n return filters;\n }\n )\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n return omit(key, data);\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n // Ignore null or undefined values\n .ignore(({ value }) => isNil(value))\n // Recursion on operators (non attributes)\n .on(\n ({ attribute }) => isNil(attribute),\n async ({ key, visitor, path, value, schema, getModel, attribute }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n set(key, await recurse(visitor, { schema, path, getModel, parent }, value));\n }\n )\n // Handle relation recursion\n .onRelation(\n async ({ key, attribute, visitor, path, value, schema, getModel }, { set, recurse }) => {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n if (isMorphRelation) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n .onComponent(\n async ({ key, attribute, visitor, path, schema, value, getModel }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle media recursion\n .onMedia(async ({ key, visitor, path, schema, attribute, value, getModel }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n });\n\nexport default curry(filters.traverse);\n"],"names":["isObj","value","isObject","filters","traverseFactory","intercept","isArray","visitor","options","recurse","Promise","all","map","filter","i","newPath","path","raw","then","res","val","isEmpty","_","__","parse","transform","cloneDeep","remove","key","data","omit","set","keys","Object","get","ignore","isNil","on","attribute","schema","getModel","parent","onRelation","isMorphRelation","relation","toLowerCase","startsWith","targetSchemaUID","target","targetSchema","newValue","onComponent","component","onMedia","curry","traverse"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-populate.js","sources":["../../src/traverse/query-populate.ts"],"sourcesContent":["import {\n curry,\n isString,\n isArray,\n isEmpty,\n split,\n isObject,\n trim,\n constant,\n isNil,\n identity,\n cloneDeep,\n join,\n first,\n} from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\nimport { Attribute } from '../types';\nimport { isMorphToRelationalAttribute } from '../content-types';\n\nconst isKeyword = (keyword: string) => {\n return ({ key, attribute }: { key: string; attribute: Attribute }) => {\n return !attribute && keyword === key;\n };\n};\n\nconst isWildcard = (value: unknown): value is '*' => value === '*';\n\nconst isPopulateString = (value: unknown): value is string => {\n return isString(value) && !isWildcard(value);\n};\n\nconst isStringArray = (value: unknown): value is string[] =>\n isArray(value) && value.every(isString);\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst populate = traverseFactory()\n .intercept(isPopulateString, async (visitor, options, populate, { recurse }) => {\n /**\n * Ensure the populate clause its in the extended format ( { populate: { ... } }, and not just a string)\n * This gives a consistent structure to track the \"parent\" node of each nested populate clause\n */\n const populateObject = pathsToObjectPopulate([populate]);\n const traversedPopulate = (await recurse(visitor, options, populateObject)) as PopulateObject;\n const [result] = objectPopulateToPaths(traversedPopulate);\n\n return result;\n })\n // Array of strings ['foo', 'bar.baz'] => map(recurse), then filter out empty items\n .intercept(isStringArray, async (visitor, options, populate, { recurse }) => {\n const paths = await Promise.all(\n populate.map((subClause) => recurse(visitor, options, subClause))\n );\n\n return paths.filter((item) => !isNil(item));\n })\n // for wildcard, generate custom utilities to modify the values\n .parse(isWildcard, () => ({\n /**\n * Since value is '*', we don't need to transform it\n */\n transform: identity,\n\n /**\n * '*' isn't a key/value structure, so regardless\n * of the given key, it returns the data ('*')\n */\n get: (_key, data) => data,\n\n /**\n * '*' isn't a key/value structure, so regardless\n * of the given `key`, use `value` as the new `data`\n */\n set: (_key, value) => value,\n\n /**\n * '*' isn't a key/value structure, but we need to simulate at least one to enable\n * the data traversal. We're using '' since it represents a falsy string value\n */\n keys: constant(['']),\n\n /**\n * Removing '*' means setting it to undefined, regardless of the given key\n */\n remove: constant(undefined),\n }))\n\n // Parse string values\n .parse(isString, () => {\n const tokenize = split('.');\n const recompose = join('.');\n\n return {\n transform: trim,\n\n remove(key, data) {\n const [root] = tokenize(data);\n\n return root === key ? undefined : data;\n },\n\n set(key, value, data) {\n const [root] = tokenize(data);\n\n if (root !== key) {\n return data;\n }\n\n return isNil(value) || isEmpty(value) ? root : `${root}.${value}`;\n },\n\n keys(data) {\n const v = first(tokenize(data));\n return v ? [v] : [];\n },\n\n get(key, data) {\n const [root, ...rest] = tokenize(data);\n\n return key === root ? recompose(rest) : undefined;\n },\n };\n })\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n // eslint-disable-next-line no-unused-vars\n const { [key]: ignored, ...rest } = data;\n\n return rest;\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n .ignore(({ key, attribute }) => {\n // we don't want to recurse using traversePopulate and instead let\n // the visitors recurse with the appropriate traversal (sort, filters, etc...)\n return ['sort', 'filters', 'fields'].includes(key) && !attribute;\n })\n .on(\n // Handle recursion on populate.\"populate\"\n isKeyword('populate'),\n async ({ key, visitor, path, value, schema, getModel, attribute }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const newValue = await recurse(visitor, { schema, path, getModel, parent }, value);\n\n set(key, newValue);\n }\n )\n .on(\n isKeyword('on'),\n async ({ key, visitor, path, value, getModel, parent }, { set, recurse }) => {\n const newOn: Record<string, unknown> = {};\n\n if (!isObj(value)) {\n return;\n }\n\n for (const [uid, subPopulate] of Object.entries(value)) {\n const model = getModel(uid);\n const newPath = { ...path, raw: `${path.raw}[${uid}]` };\n\n newOn[uid] = await recurse(\n visitor,\n { schema: model, path: newPath, getModel, parent },\n subPopulate\n );\n }\n\n set(key, newOn);\n }\n )\n // Handle populate on relation\n .onRelation(\n async ({ key, value, attribute, visitor, path, schema, getModel }, { set, recurse }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n if (isMorphToRelationalAttribute(attribute)) {\n // Don't traverse values that cannot be parsed\n if (!isObject(value) || !('on' in value && isObject(value?.on))) {\n return;\n }\n\n // If there is a populate fragment defined, traverse it\n const newValue = await recurse(\n visitor,\n { schema, path, getModel, parent },\n { on: value?.on }\n );\n\n set(key, newValue);\n\n return;\n }\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle populate on media\n .onMedia(async ({ key, path, schema, attribute, visitor, value, getModel }, { recurse, set }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n })\n // Handle populate on components\n .onComponent(\n async ({ key, value, schema, visitor, path, attribute, getModel }, { recurse, set }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle populate on dynamic zones\n .onDynamicZone(\n async ({ key, value, schema, visitor, path, attribute, getModel }, { set, recurse }) => {\n if (isNil(value) || !isObject(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n // Handle fragment syntax\n if ('on' in value && value.on) {\n const newOn = await recurse(visitor, { schema, path, getModel, parent }, { on: value.on });\n\n set(key, newOn);\n }\n }\n );\n\nexport default curry(populate.traverse);\n\ntype PopulateObject = {\n [key: string]: true | { populate: PopulateObject };\n};\n\nconst objectPopulateToPaths = (input: PopulateObject): string[] => {\n const paths: string[] = [];\n\n function traverse(currentObj: PopulateObject, parentPath: string) {\n for (const [key, value] of Object.entries(currentObj)) {\n const currentPath = parentPath ? `${parentPath}.${key}` : key;\n if (value === true) {\n paths.push(currentPath);\n } else {\n traverse((value as { populate: PopulateObject }).populate, currentPath);\n }\n }\n }\n\n traverse(input, '');\n\n return paths;\n};\n\nconst pathsToObjectPopulate = (input: string[]): PopulateObject => {\n const result: PopulateObject = {};\n\n function traverse(object: PopulateObject, keys: string[]): void {\n const [first, ...rest] = keys;\n if (rest.length === 0) {\n object[first] = true;\n } else {\n if (!object[first] || typeof object[first] === 'boolean') {\n object[first] = { populate: {} };\n }\n traverse((object[first] as { populate: PopulateObject }).populate, rest);\n }\n }\n\n input.forEach((clause) => traverse(result, clause.split('.')));\n\n return result;\n};\n"],"names":["isKeyword","keyword","key","attribute","isWildcard","value","isPopulateString","isString","isStringArray","isArray","every","isObj","isObject","populate","traverseFactory","intercept","visitor","options","recurse","populateObject","pathsToObjectPopulate","traversedPopulate","result","objectPopulateToPaths","paths","Promise","all","map","subClause","filter","item","isNil","parse","transform","identity","get","_key","data","set","keys","constant","remove","undefined","tokenize","split","recompose","join","trim","root","isEmpty","v","first","rest","cloneDeep","ignored","Object","ignore","includes","on","path","schema","getModel","parent","newValue","newOn","uid","subPopulate","entries","model","newPath","raw","onRelation","isMorphToRelationalAttribute","targetSchemaUID","target","targetSchema","onMedia","onComponent","component","onDynamicZone","curry","traverse","input","currentObj","parentPath","currentPath","push","object","length","forEach","clause"],"mappings":"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"}
1
+ {"version":3,"file":"query-populate.js","sources":["../../src/traverse/query-populate.ts"],"sourcesContent":["import {\n curry,\n isString,\n isArray,\n isEmpty,\n split,\n isObject,\n trim,\n constant,\n isNil,\n identity,\n cloneDeep,\n join,\n first,\n} from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\nimport { Attribute } from '../types';\nimport { isMorphToRelationalAttribute } from '../content-types';\n\nconst isKeyword = (keyword: string) => {\n return ({ key, attribute }: { key: string; attribute: Attribute }) => {\n return !attribute && keyword === key;\n };\n};\n\nconst isWildcard = (value: unknown): value is '*' => value === '*';\n\nconst isPopulateString = (value: unknown): value is string => {\n return isString(value) && !isWildcard(value);\n};\n\nconst isStringArray = (value: unknown): value is string[] =>\n isArray(value) && value.every(isString);\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst populate = traverseFactory()\n .intercept(isPopulateString, async (visitor, options, populate, { recurse }) => {\n /**\n * Ensure the populate clause its in the extended format ( { populate: { ... } }, and not just a string)\n * This gives a consistent structure to track the \"parent\" node of each nested populate clause\n */\n const populateObject = pathsToObjectPopulate([populate]);\n const traversedPopulate = (await recurse(visitor, options, populateObject)) as PopulateObject;\n const [result] = objectPopulateToPaths(traversedPopulate);\n\n return result;\n })\n // Array of strings ['foo', 'bar.baz'] => map(recurse), then filter out empty items\n .intercept(isStringArray, async (visitor, options, populate, { recurse }) => {\n const paths = await Promise.all(\n populate.map((subClause) => recurse(visitor, options, subClause))\n );\n\n return paths.filter((item) => !isNil(item));\n })\n // for wildcard, generate custom utilities to modify the values\n .parse(isWildcard, () => ({\n /**\n * Since value is '*', we don't need to transform it\n */\n transform: identity,\n\n /**\n * '*' isn't a key/value structure, so regardless\n * of the given key, it returns the data ('*')\n */\n get: (_key, data) => data,\n\n /**\n * '*' isn't a key/value structure, so regardless\n * of the given `key`, use `value` as the new `data`\n */\n set: (_key, value) => value,\n\n /**\n * '*' isn't a key/value structure, but we need to simulate at least one to enable\n * the data traversal. We're using '' since it represents a falsy string value\n */\n keys: constant(['']),\n\n /**\n * Removing '*' means setting it to undefined, regardless of the given key\n */\n remove: constant(undefined),\n }))\n\n // Parse string values\n .parse(isString, () => {\n const tokenize = split('.');\n const recompose = join('.');\n\n return {\n transform: trim,\n\n remove(key, data) {\n const [root] = tokenize(data);\n\n return root === key ? undefined : data;\n },\n\n set(key, value, data) {\n const [root] = tokenize(data);\n\n if (root !== key) {\n return data;\n }\n\n return isNil(value) || isEmpty(value) ? root : `${root}.${value}`;\n },\n\n keys(data) {\n const v = first(tokenize(data));\n return v ? [v] : [];\n },\n\n get(key, data) {\n const [root, ...rest] = tokenize(data);\n\n return key === root ? recompose(rest) : undefined;\n },\n };\n })\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n // eslint-disable-next-line no-unused-vars\n const { [key]: ignored, ...rest } = data;\n\n return rest;\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n .ignore(({ key, attribute }) => {\n // we don't want to recurse using traversePopulate and instead let\n // the visitors recurse with the appropriate traversal (sort, filters, etc...)\n return ['sort', 'filters', 'fields'].includes(key) && !attribute;\n })\n .on(\n // Handle recursion on populate.\"populate\"\n isKeyword('populate'),\n async ({ key, visitor, path, value, schema, getModel, attribute }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const newValue = await recurse(visitor, { schema, path, getModel, parent }, value);\n\n set(key, newValue);\n }\n )\n .on(\n isKeyword('on'),\n async ({ key, visitor, path, value, getModel, parent }, { set, recurse }) => {\n const newOn: Record<string, unknown> = {};\n\n if (!isObj(value)) {\n return;\n }\n\n for (const [uid, subPopulate] of Object.entries(value)) {\n const model = getModel(uid);\n const newPath = { ...path, raw: `${path.raw}[${uid}]` };\n\n newOn[uid] = await recurse(\n visitor,\n { schema: model, path: newPath, getModel, parent },\n subPopulate\n );\n }\n\n set(key, newOn);\n }\n )\n // Handle populate on relation\n .onRelation(\n async ({ key, value, attribute, visitor, path, schema, getModel }, { set, recurse }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n if (isMorphToRelationalAttribute(attribute)) {\n // Don't traverse values that cannot be parsed\n if (!isObject(value) || !('on' in value && isObject(value?.on))) {\n return;\n }\n\n // If there is a populate fragment defined, traverse it\n const newValue = await recurse(\n visitor,\n { schema, path, getModel, parent },\n { on: value?.on }\n );\n\n set(key, newValue);\n\n return;\n }\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle populate on media\n .onMedia(async ({ key, path, schema, attribute, visitor, value, getModel }, { recurse, set }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n })\n // Handle populate on components\n .onComponent(\n async ({ key, value, schema, visitor, path, attribute, getModel }, { recurse, set }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle populate on dynamic zones\n .onDynamicZone(\n async ({ key, value, schema, visitor, path, attribute, getModel }, { set, recurse }) => {\n if (isNil(value) || !isObject(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n // Handle fragment syntax\n if ('on' in value && value.on) {\n const newOn = await recurse(visitor, { schema, path, getModel, parent }, { on: value.on });\n\n set(key, newOn);\n }\n }\n );\n\nexport default curry(populate.traverse);\n\ntype PopulateObject = {\n [key: string]: true | { populate: PopulateObject };\n};\n\nconst objectPopulateToPaths = (input: PopulateObject): string[] => {\n const paths: string[] = [];\n\n function traverse(currentObj: PopulateObject, parentPath: string) {\n for (const [key, value] of Object.entries(currentObj)) {\n const currentPath = parentPath ? `${parentPath}.${key}` : key;\n if (value === true) {\n paths.push(currentPath);\n } else {\n traverse((value as { populate: PopulateObject }).populate, currentPath);\n }\n }\n }\n\n traverse(input, '');\n\n return paths;\n};\n\nconst pathsToObjectPopulate = (input: string[]): PopulateObject => {\n const result: PopulateObject = {};\n\n function traverse(object: PopulateObject, keys: string[]): void {\n const [first, ...rest] = keys;\n if (rest.length === 0) {\n object[first] = true;\n } else {\n if (!object[first] || typeof object[first] === 'boolean') {\n object[first] = { populate: {} };\n }\n traverse((object[first] as { populate: PopulateObject }).populate, rest);\n }\n }\n\n input.forEach((clause) => traverse(result, clause.split('.')));\n\n return result;\n};\n"],"names":["isKeyword","keyword","key","attribute","isWildcard","value","isPopulateString","isString","isStringArray","isArray","every","isObj","isObject","populate","traverseFactory","intercept","visitor","options","recurse","populateObject","pathsToObjectPopulate","traversedPopulate","result","objectPopulateToPaths","paths","Promise","all","map","subClause","filter","item","isNil","parse","transform","identity","get","_key","data","set","keys","constant","remove","undefined","tokenize","split","recompose","join","trim","root","isEmpty","v","first","rest","cloneDeep","ignored","Object","ignore","includes","on","path","schema","getModel","parent","newValue","newOn","uid","subPopulate","entries","model","newPath","raw","onRelation","isMorphToRelationalAttribute","targetSchemaUID","target","targetSchema","onMedia","onComponent","component","onDynamicZone","curry","traverse","input","currentObj","parentPath","currentPath","push","object","length","forEach","clause"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-populate.mjs","sources":["../../src/traverse/query-populate.ts"],"sourcesContent":["import {\n curry,\n isString,\n isArray,\n isEmpty,\n split,\n isObject,\n trim,\n constant,\n isNil,\n identity,\n cloneDeep,\n join,\n first,\n} from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\nimport { Attribute } from '../types';\nimport { isMorphToRelationalAttribute } from '../content-types';\n\nconst isKeyword = (keyword: string) => {\n return ({ key, attribute }: { key: string; attribute: Attribute }) => {\n return !attribute && keyword === key;\n };\n};\n\nconst isWildcard = (value: unknown): value is '*' => value === '*';\n\nconst isPopulateString = (value: unknown): value is string => {\n return isString(value) && !isWildcard(value);\n};\n\nconst isStringArray = (value: unknown): value is string[] =>\n isArray(value) && value.every(isString);\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst populate = traverseFactory()\n .intercept(isPopulateString, async (visitor, options, populate, { recurse }) => {\n /**\n * Ensure the populate clause its in the extended format ( { populate: { ... } }, and not just a string)\n * This gives a consistent structure to track the \"parent\" node of each nested populate clause\n */\n const populateObject = pathsToObjectPopulate([populate]);\n const traversedPopulate = (await recurse(visitor, options, populateObject)) as PopulateObject;\n const [result] = objectPopulateToPaths(traversedPopulate);\n\n return result;\n })\n // Array of strings ['foo', 'bar.baz'] => map(recurse), then filter out empty items\n .intercept(isStringArray, async (visitor, options, populate, { recurse }) => {\n const paths = await Promise.all(\n populate.map((subClause) => recurse(visitor, options, subClause))\n );\n\n return paths.filter((item) => !isNil(item));\n })\n // for wildcard, generate custom utilities to modify the values\n .parse(isWildcard, () => ({\n /**\n * Since value is '*', we don't need to transform it\n */\n transform: identity,\n\n /**\n * '*' isn't a key/value structure, so regardless\n * of the given key, it returns the data ('*')\n */\n get: (_key, data) => data,\n\n /**\n * '*' isn't a key/value structure, so regardless\n * of the given `key`, use `value` as the new `data`\n */\n set: (_key, value) => value,\n\n /**\n * '*' isn't a key/value structure, but we need to simulate at least one to enable\n * the data traversal. We're using '' since it represents a falsy string value\n */\n keys: constant(['']),\n\n /**\n * Removing '*' means setting it to undefined, regardless of the given key\n */\n remove: constant(undefined),\n }))\n\n // Parse string values\n .parse(isString, () => {\n const tokenize = split('.');\n const recompose = join('.');\n\n return {\n transform: trim,\n\n remove(key, data) {\n const [root] = tokenize(data);\n\n return root === key ? undefined : data;\n },\n\n set(key, value, data) {\n const [root] = tokenize(data);\n\n if (root !== key) {\n return data;\n }\n\n return isNil(value) || isEmpty(value) ? root : `${root}.${value}`;\n },\n\n keys(data) {\n const v = first(tokenize(data));\n return v ? [v] : [];\n },\n\n get(key, data) {\n const [root, ...rest] = tokenize(data);\n\n return key === root ? recompose(rest) : undefined;\n },\n };\n })\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n // eslint-disable-next-line no-unused-vars\n const { [key]: ignored, ...rest } = data;\n\n return rest;\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n .ignore(({ key, attribute }) => {\n // we don't want to recurse using traversePopulate and instead let\n // the visitors recurse with the appropriate traversal (sort, filters, etc...)\n return ['sort', 'filters', 'fields'].includes(key) && !attribute;\n })\n .on(\n // Handle recursion on populate.\"populate\"\n isKeyword('populate'),\n async ({ key, visitor, path, value, schema, getModel, attribute }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const newValue = await recurse(visitor, { schema, path, getModel, parent }, value);\n\n set(key, newValue);\n }\n )\n .on(\n isKeyword('on'),\n async ({ key, visitor, path, value, getModel, parent }, { set, recurse }) => {\n const newOn: Record<string, unknown> = {};\n\n if (!isObj(value)) {\n return;\n }\n\n for (const [uid, subPopulate] of Object.entries(value)) {\n const model = getModel(uid);\n const newPath = { ...path, raw: `${path.raw}[${uid}]` };\n\n newOn[uid] = await recurse(\n visitor,\n { schema: model, path: newPath, getModel, parent },\n subPopulate\n );\n }\n\n set(key, newOn);\n }\n )\n // Handle populate on relation\n .onRelation(\n async ({ key, value, attribute, visitor, path, schema, getModel }, { set, recurse }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n if (isMorphToRelationalAttribute(attribute)) {\n // Don't traverse values that cannot be parsed\n if (!isObject(value) || !('on' in value && isObject(value?.on))) {\n return;\n }\n\n // If there is a populate fragment defined, traverse it\n const newValue = await recurse(\n visitor,\n { schema, path, getModel, parent },\n { on: value?.on }\n );\n\n set(key, newValue);\n\n return;\n }\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle populate on media\n .onMedia(async ({ key, path, schema, attribute, visitor, value, getModel }, { recurse, set }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n })\n // Handle populate on components\n .onComponent(\n async ({ key, value, schema, visitor, path, attribute, getModel }, { recurse, set }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle populate on dynamic zones\n .onDynamicZone(\n async ({ key, value, schema, visitor, path, attribute, getModel }, { set, recurse }) => {\n if (isNil(value) || !isObject(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n // Handle fragment syntax\n if ('on' in value && value.on) {\n const newOn = await recurse(visitor, { schema, path, getModel, parent }, { on: value.on });\n\n set(key, newOn);\n }\n }\n );\n\nexport default curry(populate.traverse);\n\ntype PopulateObject = {\n [key: string]: true | { populate: PopulateObject };\n};\n\nconst objectPopulateToPaths = (input: PopulateObject): string[] => {\n const paths: string[] = [];\n\n function traverse(currentObj: PopulateObject, parentPath: string) {\n for (const [key, value] of Object.entries(currentObj)) {\n const currentPath = parentPath ? `${parentPath}.${key}` : key;\n if (value === true) {\n paths.push(currentPath);\n } else {\n traverse((value as { populate: PopulateObject }).populate, currentPath);\n }\n }\n }\n\n traverse(input, '');\n\n return paths;\n};\n\nconst pathsToObjectPopulate = (input: string[]): PopulateObject => {\n const result: PopulateObject = {};\n\n function traverse(object: PopulateObject, keys: string[]): void {\n const [first, ...rest] = keys;\n if (rest.length === 0) {\n object[first] = true;\n } else {\n if (!object[first] || typeof object[first] === 'boolean') {\n object[first] = { populate: {} };\n }\n traverse((object[first] as { populate: PopulateObject }).populate, rest);\n }\n }\n\n input.forEach((clause) => traverse(result, clause.split('.')));\n\n return result;\n};\n"],"names":["isKeyword","keyword","key","attribute","isWildcard","value","isPopulateString","isString","isStringArray","isArray","every","isObj","isObject","populate","traverseFactory","intercept","visitor","options","recurse","populateObject","pathsToObjectPopulate","traversedPopulate","result","objectPopulateToPaths","paths","Promise","all","map","subClause","filter","item","isNil","parse","transform","identity","get","_key","data","set","keys","constant","remove","undefined","tokenize","split","recompose","join","trim","root","isEmpty","v","first","rest","cloneDeep","ignored","Object","ignore","includes","on","path","schema","getModel","parent","newValue","newOn","uid","subPopulate","entries","model","newPath","raw","onRelation","isMorphToRelationalAttribute","targetSchemaUID","target","targetSchema","onMedia","onComponent","component","onDynamicZone","curry","traverse","input","currentObj","parentPath","currentPath","push","object","length","forEach","clause"],"mappings":"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"}
1
+ {"version":3,"file":"query-populate.mjs","sources":["../../src/traverse/query-populate.ts"],"sourcesContent":["import {\n curry,\n isString,\n isArray,\n isEmpty,\n split,\n isObject,\n trim,\n constant,\n isNil,\n identity,\n cloneDeep,\n join,\n first,\n} from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\nimport { Attribute } from '../types';\nimport { isMorphToRelationalAttribute } from '../content-types';\n\nconst isKeyword = (keyword: string) => {\n return ({ key, attribute }: { key: string; attribute: Attribute }) => {\n return !attribute && keyword === key;\n };\n};\n\nconst isWildcard = (value: unknown): value is '*' => value === '*';\n\nconst isPopulateString = (value: unknown): value is string => {\n return isString(value) && !isWildcard(value);\n};\n\nconst isStringArray = (value: unknown): value is string[] =>\n isArray(value) && value.every(isString);\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst populate = traverseFactory()\n .intercept(isPopulateString, async (visitor, options, populate, { recurse }) => {\n /**\n * Ensure the populate clause its in the extended format ( { populate: { ... } }, and not just a string)\n * This gives a consistent structure to track the \"parent\" node of each nested populate clause\n */\n const populateObject = pathsToObjectPopulate([populate]);\n const traversedPopulate = (await recurse(visitor, options, populateObject)) as PopulateObject;\n const [result] = objectPopulateToPaths(traversedPopulate);\n\n return result;\n })\n // Array of strings ['foo', 'bar.baz'] => map(recurse), then filter out empty items\n .intercept(isStringArray, async (visitor, options, populate, { recurse }) => {\n const paths = await Promise.all(\n populate.map((subClause) => recurse(visitor, options, subClause))\n );\n\n return paths.filter((item) => !isNil(item));\n })\n // for wildcard, generate custom utilities to modify the values\n .parse(isWildcard, () => ({\n /**\n * Since value is '*', we don't need to transform it\n */\n transform: identity,\n\n /**\n * '*' isn't a key/value structure, so regardless\n * of the given key, it returns the data ('*')\n */\n get: (_key, data) => data,\n\n /**\n * '*' isn't a key/value structure, so regardless\n * of the given `key`, use `value` as the new `data`\n */\n set: (_key, value) => value,\n\n /**\n * '*' isn't a key/value structure, but we need to simulate at least one to enable\n * the data traversal. We're using '' since it represents a falsy string value\n */\n keys: constant(['']),\n\n /**\n * Removing '*' means setting it to undefined, regardless of the given key\n */\n remove: constant(undefined),\n }))\n\n // Parse string values\n .parse(isString, () => {\n const tokenize = split('.');\n const recompose = join('.');\n\n return {\n transform: trim,\n\n remove(key, data) {\n const [root] = tokenize(data);\n\n return root === key ? undefined : data;\n },\n\n set(key, value, data) {\n const [root] = tokenize(data);\n\n if (root !== key) {\n return data;\n }\n\n return isNil(value) || isEmpty(value) ? root : `${root}.${value}`;\n },\n\n keys(data) {\n const v = first(tokenize(data));\n return v ? [v] : [];\n },\n\n get(key, data) {\n const [root, ...rest] = tokenize(data);\n\n return key === root ? recompose(rest) : undefined;\n },\n };\n })\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n // eslint-disable-next-line no-unused-vars\n const { [key]: ignored, ...rest } = data;\n\n return rest;\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n .ignore(({ key, attribute }) => {\n // we don't want to recurse using traversePopulate and instead let\n // the visitors recurse with the appropriate traversal (sort, filters, etc...)\n return ['sort', 'filters', 'fields'].includes(key) && !attribute;\n })\n .on(\n // Handle recursion on populate.\"populate\"\n isKeyword('populate'),\n async ({ key, visitor, path, value, schema, getModel, attribute }, { set, recurse }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const newValue = await recurse(visitor, { schema, path, getModel, parent }, value);\n\n set(key, newValue);\n }\n )\n .on(\n isKeyword('on'),\n async ({ key, visitor, path, value, getModel, parent }, { set, recurse }) => {\n const newOn: Record<string, unknown> = {};\n\n if (!isObj(value)) {\n return;\n }\n\n for (const [uid, subPopulate] of Object.entries(value)) {\n const model = getModel(uid);\n const newPath = { ...path, raw: `${path.raw}[${uid}]` };\n\n newOn[uid] = await recurse(\n visitor,\n { schema: model, path: newPath, getModel, parent },\n subPopulate\n );\n }\n\n set(key, newOn);\n }\n )\n // Handle populate on relation\n .onRelation(\n async ({ key, value, attribute, visitor, path, schema, getModel }, { set, recurse }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n if (isMorphToRelationalAttribute(attribute)) {\n // Don't traverse values that cannot be parsed\n if (!isObject(value) || !('on' in value && isObject(value?.on))) {\n return;\n }\n\n // If there is a populate fragment defined, traverse it\n const newValue = await recurse(\n visitor,\n { schema, path, getModel, parent },\n { on: value?.on }\n );\n\n set(key, newValue);\n\n return;\n }\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle populate on media\n .onMedia(async ({ key, path, schema, attribute, visitor, value, getModel }, { recurse, set }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n })\n // Handle populate on components\n .onComponent(\n async ({ key, value, schema, visitor, path, attribute, getModel }, { recurse, set }) => {\n if (isNil(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle populate on dynamic zones\n .onDynamicZone(\n async ({ key, value, schema, visitor, path, attribute, getModel }, { set, recurse }) => {\n if (isNil(value) || !isObject(value)) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n // Handle fragment syntax\n if ('on' in value && value.on) {\n const newOn = await recurse(visitor, { schema, path, getModel, parent }, { on: value.on });\n\n set(key, newOn);\n }\n }\n );\n\nexport default curry(populate.traverse);\n\ntype PopulateObject = {\n [key: string]: true | { populate: PopulateObject };\n};\n\nconst objectPopulateToPaths = (input: PopulateObject): string[] => {\n const paths: string[] = [];\n\n function traverse(currentObj: PopulateObject, parentPath: string) {\n for (const [key, value] of Object.entries(currentObj)) {\n const currentPath = parentPath ? `${parentPath}.${key}` : key;\n if (value === true) {\n paths.push(currentPath);\n } else {\n traverse((value as { populate: PopulateObject }).populate, currentPath);\n }\n }\n }\n\n traverse(input, '');\n\n return paths;\n};\n\nconst pathsToObjectPopulate = (input: string[]): PopulateObject => {\n const result: PopulateObject = {};\n\n function traverse(object: PopulateObject, keys: string[]): void {\n const [first, ...rest] = keys;\n if (rest.length === 0) {\n object[first] = true;\n } else {\n if (!object[first] || typeof object[first] === 'boolean') {\n object[first] = { populate: {} };\n }\n traverse((object[first] as { populate: PopulateObject }).populate, rest);\n }\n }\n\n input.forEach((clause) => traverse(result, clause.split('.')));\n\n return result;\n};\n"],"names":["isKeyword","keyword","key","attribute","isWildcard","value","isPopulateString","isString","isStringArray","isArray","every","isObj","isObject","populate","traverseFactory","intercept","visitor","options","recurse","populateObject","pathsToObjectPopulate","traversedPopulate","result","objectPopulateToPaths","paths","Promise","all","map","subClause","filter","item","isNil","parse","transform","identity","get","_key","data","set","keys","constant","remove","undefined","tokenize","split","recompose","join","trim","root","isEmpty","v","first","rest","cloneDeep","ignored","Object","ignore","includes","on","path","schema","getModel","parent","newValue","newOn","uid","subPopulate","entries","model","newPath","raw","onRelation","isMorphToRelationalAttribute","targetSchemaUID","target","targetSchema","onMedia","onComponent","component","onDynamicZone","curry","traverse","input","currentObj","parentPath","currentPath","push","object","length","forEach","clause"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-sort.js","sources":["../../src/traverse/query-sort.ts"],"sourcesContent":["import {\n curry,\n isString,\n isObject,\n map,\n trim,\n split,\n isEmpty,\n flatten,\n pipe,\n isNil,\n first,\n cloneDeep,\n} from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\n\nconst ORDERS = { asc: 'asc', desc: 'desc' };\nconst ORDER_VALUES = Object.values(ORDERS);\n\nconst isSortOrder = (value: string) => ORDER_VALUES.includes(value.toLowerCase());\nconst isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every(isString);\nconst isObjectArray = (value: unknown): value is object[] =>\n Array.isArray(value) && value.every(isObject);\nconst isNestedSorts = (value: unknown): value is string =>\n isString(value) && value.split(',').length > 1;\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst sort = traverseFactory()\n .intercept(\n // String with chained sorts (foo,bar,foobar) => split, map(recurse), then recompose\n isNestedSorts,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(\n sort\n .split(',')\n .map(trim)\n .map((nestedSort) => recurse(visitor, options, nestedSort))\n ).then((res) => res.filter((part) => !isEmpty(part)).join(','));\n }\n )\n .intercept(\n // Array of strings ['foo', 'foo,bar'] => map(recurse), then filter out empty items\n isStringArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n .intercept(\n // Array of objects [{ foo: 'asc' }, { bar: 'desc', baz: 'asc' }] => map(recurse), then filter out empty items\n isObjectArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n // Parse string values\n .parse(isString, () => {\n const tokenize = pipe(split('.'), map(split(':')), flatten);\n const recompose = (parts: string[]) => {\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.reduce((acc, part) => {\n if (isEmpty(part)) {\n return acc;\n }\n\n if (acc === '') {\n return part;\n }\n\n return isSortOrder(part) ? `${acc}:${part}` : `${acc}.${part}`;\n }, '');\n };\n\n return {\n transform: trim,\n\n remove(key, data) {\n const [root] = tokenize(data);\n\n return root === key ? undefined : data;\n },\n\n set(key, value, data) {\n const [root] = tokenize(data);\n\n if (root !== key) {\n return data;\n }\n\n return isNil(value) ? root : `${root}.${value}`;\n },\n\n keys(data) {\n const v = first(tokenize(data));\n return v ? [v] : [];\n },\n\n get(key, data) {\n const [root, ...rest] = tokenize(data);\n\n return key === root ? recompose(rest) : undefined;\n },\n };\n })\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n // eslint-disable-next-line no-unused-vars\n const { [key]: ignored, ...rest } = data;\n\n return rest;\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n // Handle deep sort on relation\n .onRelation(\n async ({ key, value, attribute, visitor, path, getModel, schema }, { set, recurse }) => {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n if (isMorphRelation) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle deep sort on media\n .onMedia(async ({ key, path, schema, attribute, visitor, value, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n })\n // Handle deep sort on components\n .onComponent(\n async ({ key, value, visitor, path, schema, attribute, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n );\n\nexport default curry(sort.traverse);\n"],"names":["ORDERS","asc","desc","ORDER_VALUES","Object","values","isSortOrder","value","includes","toLowerCase","isStringArray","Array","isArray","every","isString","isObjectArray","isObject","isNestedSorts","split","length","isObj","sort","traverseFactory","intercept","visitor","options","recurse","Promise","all","map","trim","nestedSort","then","res","filter","part","isEmpty","join","parse","tokenize","pipe","flatten","recompose","parts","undefined","reduce","acc","transform","remove","key","data","root","set","isNil","keys","v","first","get","rest","cloneDeep","ignored","onRelation","attribute","path","getModel","schema","isMorphRelation","relation","startsWith","parent","targetSchemaUID","target","targetSchema","newValue","onMedia","onComponent","component","curry","traverse"],"mappings":"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"}
1
+ {"version":3,"file":"query-sort.js","sources":["../../src/traverse/query-sort.ts"],"sourcesContent":["import {\n curry,\n isString,\n isObject,\n map,\n trim,\n split,\n isEmpty,\n flatten,\n pipe,\n isNil,\n first,\n cloneDeep,\n} from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\n\nconst ORDERS = { asc: 'asc', desc: 'desc' };\nconst ORDER_VALUES = Object.values(ORDERS);\n\nconst isSortOrder = (value: string) => ORDER_VALUES.includes(value.toLowerCase());\nconst isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every(isString);\nconst isObjectArray = (value: unknown): value is object[] =>\n Array.isArray(value) && value.every(isObject);\nconst isNestedSorts = (value: unknown): value is string =>\n isString(value) && value.split(',').length > 1;\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst sort = traverseFactory()\n .intercept(\n // String with chained sorts (foo,bar,foobar) => split, map(recurse), then recompose\n isNestedSorts,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(\n sort\n .split(',')\n .map(trim)\n .map((nestedSort) => recurse(visitor, options, nestedSort))\n ).then((res) => res.filter((part) => !isEmpty(part)).join(','));\n }\n )\n .intercept(\n // Array of strings ['foo', 'foo,bar'] => map(recurse), then filter out empty items\n isStringArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n .intercept(\n // Array of objects [{ foo: 'asc' }, { bar: 'desc', baz: 'asc' }] => map(recurse), then filter out empty items\n isObjectArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n // Parse string values\n .parse(isString, () => {\n const tokenize = pipe(split('.'), map(split(':')), flatten);\n const recompose = (parts: string[]) => {\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.reduce((acc, part) => {\n if (isEmpty(part)) {\n return acc;\n }\n\n if (acc === '') {\n return part;\n }\n\n return isSortOrder(part) ? `${acc}:${part}` : `${acc}.${part}`;\n }, '');\n };\n\n return {\n transform: trim,\n\n remove(key, data) {\n const [root] = tokenize(data);\n\n return root === key ? undefined : data;\n },\n\n set(key, value, data) {\n const [root] = tokenize(data);\n\n if (root !== key) {\n return data;\n }\n\n return isNil(value) ? root : `${root}.${value}`;\n },\n\n keys(data) {\n const v = first(tokenize(data));\n return v ? [v] : [];\n },\n\n get(key, data) {\n const [root, ...rest] = tokenize(data);\n\n return key === root ? recompose(rest) : undefined;\n },\n };\n })\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n // eslint-disable-next-line no-unused-vars\n const { [key]: ignored, ...rest } = data;\n\n return rest;\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n // Handle deep sort on relation\n .onRelation(\n async ({ key, value, attribute, visitor, path, getModel, schema }, { set, recurse }) => {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n if (isMorphRelation) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle deep sort on media\n .onMedia(async ({ key, path, schema, attribute, visitor, value, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n })\n // Handle deep sort on components\n .onComponent(\n async ({ key, value, visitor, path, schema, attribute, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n );\n\nexport default curry(sort.traverse);\n"],"names":["ORDERS","asc","desc","ORDER_VALUES","Object","values","isSortOrder","value","includes","toLowerCase","isStringArray","Array","isArray","every","isString","isObjectArray","isObject","isNestedSorts","split","length","isObj","sort","traverseFactory","intercept","visitor","options","recurse","Promise","all","map","trim","nestedSort","then","res","filter","part","isEmpty","join","parse","tokenize","pipe","flatten","recompose","parts","undefined","reduce","acc","transform","remove","key","data","root","set","isNil","keys","v","first","get","rest","cloneDeep","ignored","onRelation","attribute","path","getModel","schema","isMorphRelation","relation","startsWith","parent","targetSchemaUID","target","targetSchema","newValue","onMedia","onComponent","component","curry","traverse"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-sort.mjs","sources":["../../src/traverse/query-sort.ts"],"sourcesContent":["import {\n curry,\n isString,\n isObject,\n map,\n trim,\n split,\n isEmpty,\n flatten,\n pipe,\n isNil,\n first,\n cloneDeep,\n} from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\n\nconst ORDERS = { asc: 'asc', desc: 'desc' };\nconst ORDER_VALUES = Object.values(ORDERS);\n\nconst isSortOrder = (value: string) => ORDER_VALUES.includes(value.toLowerCase());\nconst isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every(isString);\nconst isObjectArray = (value: unknown): value is object[] =>\n Array.isArray(value) && value.every(isObject);\nconst isNestedSorts = (value: unknown): value is string =>\n isString(value) && value.split(',').length > 1;\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst sort = traverseFactory()\n .intercept(\n // String with chained sorts (foo,bar,foobar) => split, map(recurse), then recompose\n isNestedSorts,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(\n sort\n .split(',')\n .map(trim)\n .map((nestedSort) => recurse(visitor, options, nestedSort))\n ).then((res) => res.filter((part) => !isEmpty(part)).join(','));\n }\n )\n .intercept(\n // Array of strings ['foo', 'foo,bar'] => map(recurse), then filter out empty items\n isStringArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n .intercept(\n // Array of objects [{ foo: 'asc' }, { bar: 'desc', baz: 'asc' }] => map(recurse), then filter out empty items\n isObjectArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n // Parse string values\n .parse(isString, () => {\n const tokenize = pipe(split('.'), map(split(':')), flatten);\n const recompose = (parts: string[]) => {\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.reduce((acc, part) => {\n if (isEmpty(part)) {\n return acc;\n }\n\n if (acc === '') {\n return part;\n }\n\n return isSortOrder(part) ? `${acc}:${part}` : `${acc}.${part}`;\n }, '');\n };\n\n return {\n transform: trim,\n\n remove(key, data) {\n const [root] = tokenize(data);\n\n return root === key ? undefined : data;\n },\n\n set(key, value, data) {\n const [root] = tokenize(data);\n\n if (root !== key) {\n return data;\n }\n\n return isNil(value) ? root : `${root}.${value}`;\n },\n\n keys(data) {\n const v = first(tokenize(data));\n return v ? [v] : [];\n },\n\n get(key, data) {\n const [root, ...rest] = tokenize(data);\n\n return key === root ? recompose(rest) : undefined;\n },\n };\n })\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n // eslint-disable-next-line no-unused-vars\n const { [key]: ignored, ...rest } = data;\n\n return rest;\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n // Handle deep sort on relation\n .onRelation(\n async ({ key, value, attribute, visitor, path, getModel, schema }, { set, recurse }) => {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n if (isMorphRelation) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle deep sort on media\n .onMedia(async ({ key, path, schema, attribute, visitor, value, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n })\n // Handle deep sort on components\n .onComponent(\n async ({ key, value, visitor, path, schema, attribute, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n );\n\nexport default curry(sort.traverse);\n"],"names":["ORDERS","asc","desc","ORDER_VALUES","Object","values","isSortOrder","value","includes","toLowerCase","isStringArray","Array","isArray","every","isString","isObjectArray","isObject","isNestedSorts","split","length","isObj","sort","traverseFactory","intercept","visitor","options","recurse","Promise","all","map","trim","nestedSort","then","res","filter","part","isEmpty","join","parse","tokenize","pipe","flatten","recompose","parts","undefined","reduce","acc","transform","remove","key","data","root","set","isNil","keys","v","first","get","rest","cloneDeep","ignored","onRelation","attribute","path","getModel","schema","isMorphRelation","relation","startsWith","parent","targetSchemaUID","target","targetSchema","newValue","onMedia","onComponent","component","curry","traverse"],"mappings":"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"}
1
+ {"version":3,"file":"query-sort.mjs","sources":["../../src/traverse/query-sort.ts"],"sourcesContent":["import {\n curry,\n isString,\n isObject,\n map,\n trim,\n split,\n isEmpty,\n flatten,\n pipe,\n isNil,\n first,\n cloneDeep,\n} from 'lodash/fp';\n\nimport traverseFactory, { type Parent } from './factory';\n\nconst ORDERS = { asc: 'asc', desc: 'desc' };\nconst ORDER_VALUES = Object.values(ORDERS);\n\nconst isSortOrder = (value: string) => ORDER_VALUES.includes(value.toLowerCase());\nconst isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every(isString);\nconst isObjectArray = (value: unknown): value is object[] =>\n Array.isArray(value) && value.every(isObject);\nconst isNestedSorts = (value: unknown): value is string =>\n isString(value) && value.split(',').length > 1;\n\nconst isObj = (value: unknown): value is Record<string, unknown> => isObject(value);\n\nconst sort = traverseFactory()\n .intercept(\n // String with chained sorts (foo,bar,foobar) => split, map(recurse), then recompose\n isNestedSorts,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(\n sort\n .split(',')\n .map(trim)\n .map((nestedSort) => recurse(visitor, options, nestedSort))\n ).then((res) => res.filter((part) => !isEmpty(part)).join(','));\n }\n )\n .intercept(\n // Array of strings ['foo', 'foo,bar'] => map(recurse), then filter out empty items\n isStringArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n .intercept(\n // Array of objects [{ foo: 'asc' }, { bar: 'desc', baz: 'asc' }] => map(recurse), then filter out empty items\n isObjectArray,\n async (visitor, options, sort, { recurse }) => {\n return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then(\n (res) => res.filter((nestedSort) => !isEmpty(nestedSort))\n );\n }\n )\n // Parse string values\n .parse(isString, () => {\n const tokenize = pipe(split('.'), map(split(':')), flatten);\n const recompose = (parts: string[]) => {\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.reduce((acc, part) => {\n if (isEmpty(part)) {\n return acc;\n }\n\n if (acc === '') {\n return part;\n }\n\n return isSortOrder(part) ? `${acc}:${part}` : `${acc}.${part}`;\n }, '');\n };\n\n return {\n transform: trim,\n\n remove(key, data) {\n const [root] = tokenize(data);\n\n return root === key ? undefined : data;\n },\n\n set(key, value, data) {\n const [root] = tokenize(data);\n\n if (root !== key) {\n return data;\n }\n\n return isNil(value) ? root : `${root}.${value}`;\n },\n\n keys(data) {\n const v = first(tokenize(data));\n return v ? [v] : [];\n },\n\n get(key, data) {\n const [root, ...rest] = tokenize(data);\n\n return key === root ? recompose(rest) : undefined;\n },\n };\n })\n // Parse object values\n .parse(isObj, () => ({\n transform: cloneDeep,\n\n remove(key, data) {\n // eslint-disable-next-line no-unused-vars\n const { [key]: ignored, ...rest } = data;\n\n return rest;\n },\n\n set(key, value, data) {\n return { ...data, [key]: value };\n },\n\n keys(data) {\n return Object.keys(data);\n },\n\n get(key, data) {\n return data[key];\n },\n }))\n // Handle deep sort on relation\n .onRelation(\n async ({ key, value, attribute, visitor, path, getModel, schema }, { set, recurse }) => {\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n\n if (isMorphRelation) {\n return;\n }\n\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = attribute.target;\n const targetSchema = getModel(targetSchemaUID!);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n )\n // Handle deep sort on media\n .onMedia(async ({ key, path, schema, attribute, visitor, value, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchemaUID = 'plugin::upload.file';\n const targetSchema = getModel(targetSchemaUID);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n })\n // Handle deep sort on components\n .onComponent(\n async ({ key, value, visitor, path, schema, attribute, getModel }, { recurse, set }) => {\n const parent: Parent = { key, path, schema, attribute };\n\n const targetSchema = getModel(attribute.component);\n\n const newValue = await recurse(\n visitor,\n { schema: targetSchema, path, getModel, parent },\n value\n );\n\n set(key, newValue);\n }\n );\n\nexport default curry(sort.traverse);\n"],"names":["ORDERS","asc","desc","ORDER_VALUES","Object","values","isSortOrder","value","includes","toLowerCase","isStringArray","Array","isArray","every","isString","isObjectArray","isObject","isNestedSorts","split","length","isObj","sort","traverseFactory","intercept","visitor","options","recurse","Promise","all","map","trim","nestedSort","then","res","filter","part","isEmpty","join","parse","tokenize","pipe","flatten","recompose","parts","undefined","reduce","acc","transform","remove","key","data","root","set","isNil","keys","v","first","get","rest","cloneDeep","ignored","onRelation","attribute","path","getModel","schema","isMorphRelation","relation","startsWith","parent","targetSchemaUID","target","targetSchema","newValue","onMedia","onComponent","component","curry","traverse"],"mappings":"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"}
@@ -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 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 if (isRelationalAttribute(attribute)) {\n parent = { schema, key, attribute, path: newPath };\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 parent = { schema, key, attribute, path: newPath };\n\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 parent = { schema, key, attribute, path: newPath };\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 parent = { schema, key, attribute, path: newPath };\n\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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"}
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 if (isRelationalAttribute(attribute)) {\n parent = { schema, key, attribute, path: newPath };\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 parent = { schema, key, attribute, path: newPath };\n\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 parent = { schema, key, attribute, path: newPath };\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 parent = { schema, key, attribute, path: newPath };\n\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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"}
@@ -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 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 if (isRelationalAttribute(attribute)) {\n parent = { schema, key, attribute, path: newPath };\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 parent = { schema, key, attribute, path: newPath };\n\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 parent = { schema, key, attribute, path: newPath };\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 parent = { schema, key, attribute, path: newPath };\n\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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"}
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 if (isRelationalAttribute(attribute)) {\n parent = { schema, key, attribute, path: newPath };\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 parent = { schema, key, attribute, path: newPath };\n\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 parent = { schema, key, attribute, path: newPath };\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 parent = { schema, key, attribute, path: newPath };\n\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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../src/validate/utils.ts"],"sourcesContent":["// lodash/fp curry does not handle async functions properly, and creates very \"ugly\" types,\n// so we will use our own version to ensure curried functions are typed correctly\n// TODO: Export this from root @strapi/utils so we don't have copies of it between packages\n\nimport { ValidationError } from '../errors';\n\nexport const throwInvalidKey = ({ key, path }: { key: string; path?: string | null }): never => {\n const msg = path && path !== key ? `Invalid key ${key} at ${path}` : `Invalid key ${key}`;\n\n throw new ValidationError(msg, {\n key,\n path,\n });\n};\n\nexport const asyncCurry = <A extends unknown[], R>(\n fn: (...args: A) => Promise<R>\n): ((...args: Partial<A>) => any) => {\n const curried = (...args: unknown[]): unknown => {\n if (args.length >= fn.length) {\n return fn(...(args as A));\n }\n return (...moreArgs: unknown[]) => curried(...args, ...moreArgs);\n };\n\n return curried;\n};\n"],"names":["throwInvalidKey","key","path","msg","ValidationError","asyncCurry","fn","curried","args","length","moreArgs"],"mappings":";;;;AAAA;AACA;AACA;MAIaA,eAAkB,GAAA,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAyC,GAAA;AAClF,IAAA,MAAMC,MAAMD,IAAQA,IAAAA,IAAAA,KAASD,GAAM,GAAA,CAAC,YAAY,EAAEA,GAAAA,CAAI,IAAI,EAAEC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAED,IAAI,CAAC;IAEzF,MAAM,IAAIG,uBAAgBD,GAAK,EAAA;AAC7BF,QAAAA,GAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;AACF;AAEO,MAAMG,aAAa,CACxBC,EAAAA,GAAAA;IAEA,MAAMC,OAAAA,GAAU,CAAC,GAAGC,IAAAA,GAAAA;AAClB,QAAA,IAAIA,IAAKC,CAAAA,MAAM,IAAIH,EAAAA,CAAGG,MAAM,EAAE;AAC5B,YAAA,OAAOH,EAAOE,CAAAA,GAAAA,IAAAA,CAAAA;AAChB;AACA,QAAA,OAAO,CAAC,GAAGE,QAAwBH,GAAAA,OAAAA,CAAAA,GAAWC,IAASE,EAAAA,GAAAA,QAAAA,CAAAA;AACzD,KAAA;IAEA,OAAOH,OAAAA;AACT;;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../src/validate/utils.ts"],"sourcesContent":["// lodash/fp curry does not handle async functions properly, and creates very \"ugly\" types,\n// so we will use our own version to ensure curried functions are typed correctly\n// TODO: Export this from root @strapi/utils so we don't have copies of it between packages\n\nimport { ValidationError } from '../errors';\n\nexport const throwInvalidKey = ({ key, path }: { key: string; path?: string | null }): never => {\n const msg = path && path !== key ? `Invalid key ${key} at ${path}` : `Invalid key ${key}`;\n\n throw new ValidationError(msg, {\n key,\n path,\n });\n};\n\nexport const asyncCurry = <A extends unknown[], R>(\n fn: (...args: A) => Promise<R>\n): ((...args: Partial<A>) => any) => {\n const curried = (...args: unknown[]): unknown => {\n if (args.length >= fn.length) {\n return fn(...(args as A));\n }\n return (...moreArgs: unknown[]) => curried(...args, ...moreArgs);\n };\n\n return curried;\n};\n"],"names":["throwInvalidKey","key","path","msg","ValidationError","asyncCurry","fn","curried","args","length","moreArgs"],"mappings":";;;;AAAA;AACA;AACA;MAIaA,eAAkB,GAAA,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAyC,GAAA;AAClF,IAAA,MAAMC,GAAMD,GAAAA,IAAAA,IAAQA,IAASD,KAAAA,GAAAA,GAAM,CAAC,YAAY,EAAEA,GAAI,CAAA,IAAI,EAAEC,IAAM,CAAA,CAAA,GAAG,CAAC,YAAY,EAAED,GAAK,CAAA,CAAA;IAEzF,MAAM,IAAIG,uBAAgBD,GAAK,EAAA;AAC7BF,QAAAA,GAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;AACF;AAEO,MAAMG,aAAa,CACxBC,EAAAA,GAAAA;IAEA,MAAMC,OAAAA,GAAU,CAAC,GAAGC,IAAAA,GAAAA;AAClB,QAAA,IAAIA,IAAKC,CAAAA,MAAM,IAAIH,EAAAA,CAAGG,MAAM,EAAE;AAC5B,YAAA,OAAOH,EAAOE,CAAAA,GAAAA,IAAAA,CAAAA;AAChB;AACA,QAAA,OAAO,CAAC,GAAGE,QAAwBH,GAAAA,OAAAA,CAAAA,GAAWC,IAASE,EAAAA,GAAAA,QAAAA,CAAAA;AACzD,KAAA;IAEA,OAAOH,OAAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../src/validate/utils.ts"],"sourcesContent":["// lodash/fp curry does not handle async functions properly, and creates very \"ugly\" types,\n// so we will use our own version to ensure curried functions are typed correctly\n// TODO: Export this from root @strapi/utils so we don't have copies of it between packages\n\nimport { ValidationError } from '../errors';\n\nexport const throwInvalidKey = ({ key, path }: { key: string; path?: string | null }): never => {\n const msg = path && path !== key ? `Invalid key ${key} at ${path}` : `Invalid key ${key}`;\n\n throw new ValidationError(msg, {\n key,\n path,\n });\n};\n\nexport const asyncCurry = <A extends unknown[], R>(\n fn: (...args: A) => Promise<R>\n): ((...args: Partial<A>) => any) => {\n const curried = (...args: unknown[]): unknown => {\n if (args.length >= fn.length) {\n return fn(...(args as A));\n }\n return (...moreArgs: unknown[]) => curried(...args, ...moreArgs);\n };\n\n return curried;\n};\n"],"names":["throwInvalidKey","key","path","msg","ValidationError","asyncCurry","fn","curried","args","length","moreArgs"],"mappings":";;AAAA;AACA;AACA;MAIaA,eAAkB,GAAA,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAyC,GAAA;AAClF,IAAA,MAAMC,MAAMD,IAAQA,IAAAA,IAAAA,KAASD,GAAM,GAAA,CAAC,YAAY,EAAEA,GAAAA,CAAI,IAAI,EAAEC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAED,IAAI,CAAC;IAEzF,MAAM,IAAIG,gBAAgBD,GAAK,EAAA;AAC7BF,QAAAA,GAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;AACF;AAEO,MAAMG,aAAa,CACxBC,EAAAA,GAAAA;IAEA,MAAMC,OAAAA,GAAU,CAAC,GAAGC,IAAAA,GAAAA;AAClB,QAAA,IAAIA,IAAKC,CAAAA,MAAM,IAAIH,EAAAA,CAAGG,MAAM,EAAE;AAC5B,YAAA,OAAOH,EAAOE,CAAAA,GAAAA,IAAAA,CAAAA;AAChB;AACA,QAAA,OAAO,CAAC,GAAGE,QAAwBH,GAAAA,OAAAA,CAAAA,GAAWC,IAASE,EAAAA,GAAAA,QAAAA,CAAAA;AACzD,KAAA;IAEA,OAAOH,OAAAA;AACT;;;;"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../src/validate/utils.ts"],"sourcesContent":["// lodash/fp curry does not handle async functions properly, and creates very \"ugly\" types,\n// so we will use our own version to ensure curried functions are typed correctly\n// TODO: Export this from root @strapi/utils so we don't have copies of it between packages\n\nimport { ValidationError } from '../errors';\n\nexport const throwInvalidKey = ({ key, path }: { key: string; path?: string | null }): never => {\n const msg = path && path !== key ? `Invalid key ${key} at ${path}` : `Invalid key ${key}`;\n\n throw new ValidationError(msg, {\n key,\n path,\n });\n};\n\nexport const asyncCurry = <A extends unknown[], R>(\n fn: (...args: A) => Promise<R>\n): ((...args: Partial<A>) => any) => {\n const curried = (...args: unknown[]): unknown => {\n if (args.length >= fn.length) {\n return fn(...(args as A));\n }\n return (...moreArgs: unknown[]) => curried(...args, ...moreArgs);\n };\n\n return curried;\n};\n"],"names":["throwInvalidKey","key","path","msg","ValidationError","asyncCurry","fn","curried","args","length","moreArgs"],"mappings":";;AAAA;AACA;AACA;MAIaA,eAAkB,GAAA,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAyC,GAAA;AAClF,IAAA,MAAMC,GAAMD,GAAAA,IAAAA,IAAQA,IAASD,KAAAA,GAAAA,GAAM,CAAC,YAAY,EAAEA,GAAI,CAAA,IAAI,EAAEC,IAAM,CAAA,CAAA,GAAG,CAAC,YAAY,EAAED,GAAK,CAAA,CAAA;IAEzF,MAAM,IAAIG,gBAAgBD,GAAK,EAAA;AAC7BF,QAAAA,GAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;AACF;AAEO,MAAMG,aAAa,CACxBC,EAAAA,GAAAA;IAEA,MAAMC,OAAAA,GAAU,CAAC,GAAGC,IAAAA,GAAAA;AAClB,QAAA,IAAIA,IAAKC,CAAAA,MAAM,IAAIH,EAAAA,CAAGG,MAAM,EAAE;AAC5B,YAAA,OAAOH,EAAOE,CAAAA,GAAAA,IAAAA,CAAAA;AAChB;AACA,QAAA,OAAO,CAAC,GAAGE,QAAwBH,GAAAA,OAAAA,CAAAA,GAAWC,IAASE,EAAAA,GAAAA,QAAAA,CAAAA;AACzD,KAAA;IAEA,OAAOH,OAAAA;AACT;;;;"}