{"version":3,"file":"traverse-entity.mjs","sources":["../src/traverse-entity.ts"],"sourcesContent":["import { clone, isObject } from 'lodash';\n\nimport { curry } from './curry';\nimport type { Attribute, AnyAttribute, Model, Data } from './types';\nimport { isRelationalAttribute, isMediaAttribute } from './content-types';\n\n/**\n * Execute promises in parallel but throw errors in array index order.\n */\nconst parallelWithOrderedErrors = async <T>(promises: Promise<T>[]): Promise<T[]> => {\n  const results = await Promise.allSettled(promises);\n\n  // Throw first error in array index order (matches sequential behavior)\n  for (let i = 0; i < results.length; i += 1) {\n    const result = results[i];\n    if (result.status === 'rejected') {\n      throw result.reason;\n    }\n  }\n\n  return results.map((r) => (r as PromiseFulfilledResult<T>).value);\n};\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  /** Extra root-level keys allowed (e.g. registered input params). Only used when path.attribute === null. */\n  allowedExtraRootKeys?: string[];\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  /** Extra root-level keys allowed (e.g. registered input params). Only used when path.attribute === null. */\n  allowedExtraRootKeys?: string[];\n}\n\nexport interface Parent {\n  attribute?: Attribute;\n  key: string | null;\n  path: Path;\n  schema: Model;\n}\n\nconst traverseEntity = async (\n  visitor: Visitor,\n  options: TraverseOptions,\n  entity: Data\n): Promise<Data> => {\n  const {\n    path = { raw: null, attribute: null, rawWithIndices: null },\n    schema,\n    getModel,\n    allowedExtraRootKeys,\n  } = 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 = {\n      schema: targetSchema,\n      path,\n      getModel,\n      parent,\n      allowedExtraRootKeys,\n    };\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 = {\n        schema,\n        path,\n        getModel,\n        parent,\n        allowedExtraRootKeys,\n      };\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 = {\n      schema: targetSchema,\n      path,\n      getModel,\n      parent,\n      allowedExtraRootKeys,\n    };\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 = {\n      schema,\n      path,\n      getModel,\n      parent,\n      allowedExtraRootKeys,\n    };\n\n    return traverseEntity(visitor, traverseOptions, entry);\n  };\n\n  const visitDynamicZoneEntry = async (visitor: Visitor, path: Path, entry: Data) => {\n    // A dynamic zone array can contain a `null` entry (for example a relation\n    // created inline inside a dynamic zone component can leave a null item).\n    // Reading `__component` on it crashed traversal; pass nil entries through\n    // untouched, consistent with how `traverseEntity` ends recursion on nil. (#24303)\n    if (entry == null) {\n      return entry;\n    }\n\n    const targetSchema = getModel(entry.__component!);\n    const traverseOptions: TraverseOptions = {\n      schema: targetSchema,\n      path,\n      getModel,\n      parent,\n      allowedExtraRootKeys,\n    };\n\n    return traverseEntity(visitor, traverseOptions, entry);\n  };\n\n  // End recursion\n  if (!isObject(entity) || schema == null) {\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 = path.raw == null ? key : `${path.raw}.${key}`;\n    newPath.rawWithIndices = path.rawWithIndices == null ? key : `${path.rawWithIndices}.${key}`;\n\n    if (attribute != null) {\n      newPath.attribute = path.attribute == null ? 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      allowedExtraRootKeys,\n    };\n\n    // Awaited only when the visitor actually returns something thenable. Most visitors\n    // finish synchronously for most keys — a scalar is not a relation, so the relation\n    // visitor returns immediately — and `await` on a non-thenable still allocates a\n    // promise and defers the rest of the loop to a microtask. Over every key of every\n    // node of every entity in a page that was the largest single source of promise churn.\n    const visited = visitor(visitorOptions, visitorUtils) as unknown;\n\n    if (visited != null && typeof (visited as PromiseLike<void>).then === 'function') {\n      await visited;\n    }\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 (value == null || attribute == null) {\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 (Array.isArray(value)) {\n        // Process array items in parallel with ordered error handling\n        copy[key] = await parallelWithOrderedErrors(\n          value.map((item, i) => {\n            const arrayPath = {\n              ...newPath,\n              rawWithIndices:\n                newPath.rawWithIndices == null ? `${i}` : `${newPath.rawWithIndices}.${i}`,\n            };\n            return method(visitor, arrayPath, item);\n          })\n        );\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      if (Array.isArray(value)) {\n        // Process media array items in parallel with ordered error handling\n        copy[key] = await parallelWithOrderedErrors(\n          value.map((item, i) => {\n            const arrayPath = {\n              ...newPath,\n              rawWithIndices:\n                newPath.rawWithIndices == null ? `${i}` : `${newPath.rawWithIndices}.${i}`,\n            };\n            return traverseMediaTarget(visitor, arrayPath, item);\n          })\n        );\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 (Array.isArray(value)) {\n        // Process component array items in parallel with ordered error handling\n        copy[key] = await parallelWithOrderedErrors(\n          value.map((item, i) => {\n            const arrayPath = {\n              ...newPath,\n              rawWithIndices:\n                newPath.rawWithIndices == null ? `${i}` : `${newPath.rawWithIndices}.${i}`,\n            };\n            return traverseComponent(visitor, arrayPath, targetSchema, item);\n          })\n        );\n      } else {\n        copy[key] = await traverseComponent(visitor, newPath, targetSchema, value as Data);\n      }\n\n      continue;\n    }\n\n    if (attribute.type === 'dynamiczone' && Array.isArray(value)) {\n      parent = { schema, key, attribute, path: newPath };\n\n      // Process dynamic zone items in parallel with ordered error handling\n      copy[key] = await parallelWithOrderedErrors(\n        value.map((item, i) => {\n          const arrayPath = {\n            ...newPath,\n            rawWithIndices:\n              newPath.rawWithIndices == null ? `${i}` : `${newPath.rawWithIndices}.${i}`,\n          };\n          return visitDynamicZoneEntry(visitor, arrayPath, item);\n        })\n      );\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":["parallelWithOrderedErrors","promises","results","Promise","allSettled","i","length","result","status","reason","map","r","value","traverseEntity","visitor","options","entity","path","raw","attribute","rawWithIndices","schema","getModel","allowedExtraRootKeys","parent","traverseMorphRelationTarget","entry","targetSchema","__type","traverseOptions","traverseRelationTarget","traverseMediaTarget","targetSchemaUID","traverseComponent","visitDynamicZoneEntry","__component","isObject","copy","clone","visitorUtils","createVisitorUtils","data","keys","Object","key","attributes","newPath","visitorOptions","visited","then","isRelationalAttribute","isMorphRelation","relation","toLowerCase","startsWith","method","target","Array","isArray","item","arrayPath","isMediaAttribute","type","component","remove","set","curry"],"mappings":"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"}