{"version":3,"file":"fill-from-locale.mjs","sources":["../../../server/src/services/fill-from-locale.ts"],"sourcesContent":["import { isArray } from 'lodash/fp';\nimport { contentTypes } from '@strapi/utils';\nimport type { UID, Schema, Core } from '@strapi/types';\n\nconst READ_ACTION = 'plugin::content-manager.explorer.read';\n\n/**\n * Returns the main display field for a model (e.g. title, name).\n * Uses content-manager configuration when available, falls back to first string attribute or 'id'.\n */\nconst getMainField = async (targetUid: UID.Schema): Promise => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n const configuration = await contentManagerContentTypeService.findConfiguration({\n uid: targetUid,\n });\n return configuration.settings.mainField;\n};\n\n/**\n * Returns the display label for a relation.\n * Matches the logic of the getRelationLabel function in the content-manager plugin.\n */\nconst getRelationLabel = (relation: Record, mainField: string): string => {\n const label = relation[mainField];\n if (typeof label === 'string') return label;\n return String(relation.documentId ?? '');\n};\n\nconst FIELDS_TO_IGNORE = new Set([\n 'createdAt',\n 'createdBy',\n 'updatedAt',\n 'updatedBy',\n 'id',\n 'documentId',\n 'publishedAt',\n 'strapi_stage',\n 'strapi_assignee',\n 'locale',\n 'status',\n 'localizations',\n]);\n\nconst STATUS_FIELDS = new Set(['id', 'documentId', 'locale', 'updatedAt', 'publishedAt']);\n\n/**\n * Normalizes a value to an array: arrays pass through, single values become [value], null/undefined become [].\n */\nconst normalizeToArray = (value: unknown): unknown[] => {\n if (isArray(value)) return value;\n if (value) return [value];\n return [];\n};\n\n/**\n * Type guard: returns true if the value is a valid relation object with documentId.\n */\nconst isValidRelation = (\n rel: unknown\n): rel is { documentId: string; id?: number; locale?: string } =>\n typeof rel === 'object' && rel !== null && 'documentId' in rel && !!(rel as any).documentId;\n\n/**\n * Maps relations from the source locale to target locale (batched for better performance).\n */\nconst resolveRelationsForLocaleBatch = async (\n relations: Array<{ documentId: string; id?: number; locale?: string }>,\n targetUid: UID.Schema,\n targetLocale: string\n): Promise> => {\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n\n if (!isTargetLocalized) {\n return relations.map((rel) => {\n if (rel.id === undefined) return null;\n return { documentId: rel.documentId, id: rel.id };\n });\n }\n\n const documentIds = [...new Set(relations.map((r) => r.documentId))];\n const targetEntriesQuery = {\n where: { documentId: { $in: documentIds }, locale: targetLocale },\n select: [...STATUS_FIELDS],\n };\n const targetEntries = await strapi.db.query(targetUid).findMany(targetEntriesQuery);\n const byDocumentId = new Map();\n for (const e of targetEntries) {\n const existing = byDocumentId.get(e.documentId);\n if (!existing || (e.publishedAt === null && existing.publishedAt !== null)) {\n byDocumentId.set(e.documentId, e);\n }\n }\n\n return relations.map((rel) => {\n const entry = byDocumentId.get(rel.documentId);\n if (!entry) return null;\n return {\n documentId: entry.documentId,\n id: entry.id,\n locale: entry.locale,\n };\n });\n};\n\n/**\n * Builds the where clause for relation queries: documentIds + locales (when target model is localized).\n */\nconst buildWhereForRelations = (\n relations: Array<{ documentId: string; locale?: string }>,\n documentIds: string[],\n targetUid: UID.Schema\n): { documentId: { $in: string[] }; locale?: { $in: string[] } } => {\n const where: { documentId: { $in: string[] }; locale?: { $in: string[] } } = {\n documentId: { $in: documentIds },\n };\n const i18nContentTypesService = strapi.plugin('i18n')?.service('content-types');\n const isTargetLocalized = i18nContentTypesService?.isLocalizedContentType(\n strapi.getModel(targetUid)\n );\n if (isTargetLocalized) {\n const locales = [...new Set(relations.map((r) => r.locale).filter(Boolean))] as string[];\n if (locales.length > 0) {\n where.locale = { $in: locales };\n }\n }\n return where;\n};\n\n// ---------------------------------------------------------------------------\n// Batch pre-resolution\n// ---------------------------------------------------------------------------\n\ntype ValidRelation = { documentId: string; id?: number; locale?: string };\ntype ResolvedRelation = { documentId: string; id: number | string; locale?: string };\ntype RelationsByUid = Map;\n\ninterface UidResolutionData {\n blocked: boolean;\n mainField: string;\n /** sourceDocumentId → resolved entry in targetLocale (null if not found) */\n bySourceDocumentId: Map;\n /** resolvedEntry.id → status string */\n statusById: Map;\n /** resolvedEntry.id → mainField value */\n labelById: Map;\n}\n\n/**\n * Walk the full document tree and collect all valid relation objects grouped by targetUid.\n */\nconst collectRelationsByUid = (\n data: Record,\n schema: Schema.ContentType | Schema.Component,\n components: Record\n): RelationsByUid => {\n const result: RelationsByUid = new Map();\n\n const addRels = (uid: string, rels: ValidRelation[]) => {\n const existing = result.get(uid) ?? [];\n result.set(uid, existing.concat(rels));\n };\n\n const collect = (d: Record, s: Schema.ContentType | Schema.Component) => {\n if (!d || typeof d !== 'object') return;\n for (const [key, value] of Object.entries(d)) {\n const attribute = s?.attributes?.[key];\n if (!attribute) continue;\n\n if (attribute.type === 'relation') {\n const attr = attribute as Schema.Attribute.Relation & {\n relation?: string;\n target?: string;\n };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) continue;\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length > 0) addRels(attr.target, validRels);\n } else if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] ?? {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n for (const item of value as Record[]) {\n collect(item, compSchema);\n }\n } else if (value) {\n collect(value as Record, compSchema);\n }\n } else if (attribute.type === 'dynamiczone' && isArray(value)) {\n for (const item of value as Record[]) {\n const compUid = (item as any)?.__component as string;\n const compSchema = (components[compUid] ?? { attributes: {} }) as Schema.Component;\n collect(item as Record, compSchema);\n }\n }\n }\n };\n\n collect(data, schema);\n return result;\n};\n\n/**\n * Resolves all relation targets for the requested locale in batches (per related content-type UID):\n * locale mapping, permissions, status, and labels.\n */\nconst resolveAllRelationsBatched = async (\n relationsByUid: RelationsByUid,\n targetLocale: string,\n userAbility: any\n): Promise> => {\n const result = new Map();\n await Promise.all(\n [...relationsByUid.entries()].map(async ([targetUid, allRels]) => {\n const empty: UidResolutionData = {\n blocked: !userAbility.can(READ_ACTION, targetUid),\n mainField: '',\n bySourceDocumentId: new Map(),\n statusById: new Map(),\n labelById: new Map(),\n };\n\n if (empty.blocked) {\n result.set(targetUid, empty);\n return;\n }\n\n const mainField = await getMainField(targetUid as UID.Schema);\n const validRels = allRels.filter(isValidRelation);\n\n if (validRels.length === 0) {\n result.set(targetUid, { ...empty, mainField });\n return;\n }\n\n // Deduplicate by documentId before querying\n const uniqueRels = [...new Map(validRels.map((r) => [r.documentId, r])).values()];\n const resolvedList = await resolveRelationsForLocaleBatch(\n uniqueRels,\n targetUid as UID.Schema,\n targetLocale\n );\n\n const bySourceDocumentId = new Map();\n for (let i = 0; i < uniqueRels.length; i += 1) {\n bySourceDocumentId.set(uniqueRels[i].documentId, resolvedList[i]);\n }\n\n const resolvedEntries = resolvedList.filter((r): r is ResolvedRelation => r !== null);\n\n if (resolvedEntries.length === 0) {\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById: new Map(),\n labelById: new Map(),\n });\n return;\n }\n\n const documentIds = [...new Set(resolvedEntries.map((r) => r.documentId))];\n const where = buildWhereForRelations(resolvedEntries, documentIds, targetUid as UID.Schema);\n\n const [allStatusEntries, labelEntries] = await Promise.all([\n contentTypes.hasDraftAndPublish(strapi.getModel(targetUid as UID.Schema))\n ? strapi.db.query(targetUid).findMany({ where, select: [...STATUS_FIELDS] })\n : Promise.resolve([]),\n strapi.db.query(targetUid).findMany({\n where,\n select: ['documentId', 'id', 'locale', mainField],\n }),\n ]);\n\n // Build status map\n const statusById = new Map();\n if (allStatusEntries.length > 0) {\n const documentMetadata = strapi.plugin('content-manager')?.service('document-metadata');\n if (documentMetadata) {\n const model = strapi.getModel(targetUid as UID.Schema);\n const isLocalized = strapi\n .plugin('i18n')\n ?.service('content-types')\n ?.isLocalizedContentType(model);\n const groupKey = (e: { documentId: string; locale?: string }) =>\n isLocalized && e.locale ? `${e.documentId}:${e.locale}` : e.documentId;\n\n const byGroup = new Map();\n for (const e of allStatusEntries) {\n const key = groupKey(e);\n const list = byGroup.get(key) ?? [];\n list.push(e);\n byGroup.set(key, list);\n }\n\n for (const entry of resolvedEntries) {\n const key = groupKey(entry);\n const entries = byGroup.get(key) ?? [];\n if (!entries.length) continue;\n const version = entries.find((e) => e.id === entry.id) ?? entries[0];\n const otherVersions = entries.filter((e) => e.id !== version.id);\n statusById.set(entry.id, documentMetadata.getStatus(version, otherVersions));\n }\n }\n }\n\n // Build label map\n const labelById = new Map();\n for (const entry of labelEntries) {\n labelById.set(entry.id, entry[mainField]);\n }\n\n result.set(targetUid, {\n blocked: false,\n mainField,\n bySourceDocumentId,\n statusById,\n labelById,\n });\n })\n );\n\n return result;\n};\n\n/**\n * Build the { connect, disconnect } for a single relation attribute using pre-fetched data.\n */\nconst buildConnectFromPreResolved = (\n value: unknown,\n attribute: Schema.Attribute.Relation,\n preResolved: Map\n): { connect: unknown[]; disconnect: unknown[] } => {\n const attr = attribute as Schema.Attribute.Relation & { relation?: string; target?: string };\n if (attr.relation?.toLowerCase().includes('morph') || !attr.target) {\n return { connect: [], disconnect: [] };\n }\n\n const uidData = preResolved.get(attr.target);\n if (!uidData || uidData.blocked) {\n return { connect: [], disconnect: [] };\n }\n\n const validRels = normalizeToArray(value).filter(isValidRelation);\n if (validRels.length === 0) {\n return { connect: [], disconnect: [] };\n }\n\n const connect = validRels\n .map((rel, index) => {\n const resolved = uidData.bySourceDocumentId.get(rel.documentId);\n if (!resolved) return null;\n\n const status = uidData.statusById.get(resolved.id);\n const mainFieldValue = uidData.labelById.get(resolved.id);\n const relationWithMainField: Record = {\n ...resolved,\n [uidData.mainField]: mainFieldValue,\n };\n if (status !== undefined) {\n relationWithMainField.status = status;\n }\n\n return {\n ...relationWithMainField,\n __temp_key__: `a${index}`,\n label: getRelationLabel(relationWithMainField, uidData.mainField),\n };\n })\n .filter((r): r is NonNullable => r !== null);\n\n return { connect, disconnect: [] };\n};\n\n/**\n * Recursively process document data: remove internal fields and resolve relations using\n * pre-fetched resolution data (no additional DB calls).\n */\nconst processDocumentData = async (\n data: Record,\n schema: Schema.ContentType | Schema.Component,\n components: Record,\n preResolved: Map\n): Promise> => {\n if (!data) {\n return {};\n }\n\n const result: Record = {};\n\n for (const [key, value] of Object.entries(data)) {\n if (FIELDS_TO_IGNORE.has(key)) {\n continue;\n }\n\n const attribute = schema?.attributes?.[key];\n if (!attribute) {\n result[key] = value;\n continue;\n }\n\n if (attribute.type === 'password') {\n continue;\n }\n\n if (attribute.type === 'relation') {\n result[key] = buildConnectFromPreResolved(\n value,\n attribute as Schema.Attribute.Relation,\n preResolved\n );\n continue;\n }\n\n if (attribute.type === 'component') {\n const compSchema = (components[attribute.component] || {\n attributes: {},\n }) as Schema.Component;\n if (attribute.repeatable && isArray(value)) {\n result[key] = await Promise.all(\n value.map(async (item: Record, index: number) => {\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: index + 1 };\n })\n );\n } else if (value) {\n const processed = await processDocumentData(\n value as Record,\n compSchema,\n components,\n preResolved\n );\n result[key] = processed;\n } else {\n result[key] = value;\n }\n continue;\n }\n\n if (attribute.type === 'dynamiczone' && isArray(value)) {\n result[key] = await Promise.all(\n value.map(async (item: Record, index: number) => {\n const compSchema = (components[item?.__component as string] || {\n attributes: {},\n }) as Schema.Component;\n const processed = await processDocumentData(item, compSchema, components, preResolved);\n return { ...processed, __temp_key__: index + 1 };\n })\n );\n continue;\n }\n\n result[key] = value;\n }\n\n return result;\n};\n\nexport const createFillFromLocaleService = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n /**\n * Fetch the raw populated document for the given locale without any transformation.\n * The caller is responsible for sanitizing the output before passing it to transformDocument.\n */\n async fetchRawDocument(model: UID.ContentType, sourceLocale: string, documentId?: string) {\n const populateBuilderService = strapi\n .plugin('content-manager')\n .service('populate-builder') as (uid: UID.ContentType) => {\n populateDeep: (level: number) => { build: () => Promise };\n };\n const modelDef = strapi.getModel(model);\n\n if (!modelDef) {\n throw new Error(`Model ${model} not found`);\n }\n\n // Build populate WITHOUT countRelations so we get full relation objects\n const populate = await populateBuilderService(model).populateDeep(Infinity).build();\n\n const docs = strapi.documents(model);\n const baseParams = {\n locale: sourceLocale,\n populate: populate as never,\n };\n\n return documentId\n ? docs.findOne({ ...baseParams, documentId })\n : docs.findFirst({ ...baseParams });\n },\n\n /**\n * Transform a (sanitized) document: strip internal fields, resolve relations to the target\n * locale, and skip relations to content types the user cannot read.\n */\n async transformDocument(\n document: Record,\n model: UID.ContentType,\n targetLocale: string,\n userAbility: any\n ) {\n const schema = strapi.getModel(model) as Schema.ContentType;\n const getComponentSchema = (uid: string) =>\n (strapi.getModel(uid as UID.Schema) ?? { attributes: {} }) as Schema.Component;\n const components = new Proxy({} as Record, {\n get(_, uid: string) {\n return getComponentSchema(uid);\n },\n });\n\n const relsByUid = collectRelationsByUid(document, schema, components);\n const preResolved = await resolveAllRelationsBatched(relsByUid, targetLocale, userAbility);\n return processDocumentData(document, schema, components, preResolved);\n },\n };\n};\n"],"names":["READ_ACTION","getMainField","targetUid","contentManagerContentTypeService","strapi","plugin","service","configuration","findConfiguration","uid","settings","mainField","getRelationLabel","relation","label","String","documentId","FIELDS_TO_IGNORE","Set","STATUS_FIELDS","normalizeToArray","value","isArray","isValidRelation","rel","resolveRelationsForLocaleBatch","relations","targetLocale","i18nContentTypesService","isTargetLocalized","isLocalizedContentType","getModel","map","id","undefined","documentIds","r","targetEntriesQuery","where","$in","locale","select","targetEntries","db","query","findMany","byDocumentId","Map","e","existing","get","publishedAt","set","entry","buildWhereForRelations","locales","filter","Boolean","length","collectRelationsByUid","data","schema","components","result","addRels","rels","concat","collect","d","s","key","Object","entries","attribute","attributes","type","attr","toLowerCase","includes","target","validRels","compSchema","component","repeatable","item","compUid","__component","resolveAllRelationsBatched","relationsByUid","userAbility","Promise","all","allRels","empty","blocked","can","bySourceDocumentId","statusById","labelById","uniqueRels","values","resolvedList","i","resolvedEntries","allStatusEntries","labelEntries","contentTypes","hasDraftAndPublish","resolve","documentMetadata","model","isLocalized","groupKey","byGroup","list","push","version","find","otherVersions","getStatus","buildConnectFromPreResolved","preResolved","connect","disconnect","uidData","index","resolved","status","mainFieldValue","relationWithMainField","__temp_key__","processDocumentData","has","processed","createFillFromLocaleService","fetchRawDocument","sourceLocale","populateBuilderService","modelDef","Error","populate","populateDeep","Infinity","build","docs","documents","baseParams","findOne","findFirst","transformDocument","document","getComponentSchema","Proxy","_","relsByUid"],"mappings":"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"}