{"version":3,"sources":["../../../../src/fields/hooks/afterRead/virtualFieldPopulationPromise.ts"],"sourcesContent":["import type { TypedFallbackLocale } from '../../../index.js'\nimport type { PayloadRequest } from '../../../types/index.js'\nimport type { FlattenedField } from '../../config/types.js'\n\nimport { createDataloaderCacheKey } from '../../../collections/dataloader.js'\n\nexport const virtualFieldPopulationPromise = async ({\n name,\n draft,\n fallbackLocale,\n fields,\n hasMany,\n locale,\n overrideAccess,\n ref,\n req,\n segments,\n showHiddenFields,\n siblingDoc,\n}: {\n draft: boolean\n fallbackLocale: TypedFallbackLocale\n fields: FlattenedField[]\n hasMany?: boolean\n locale: string\n name: string\n overrideAccess: boolean\n ref: any\n req: PayloadRequest\n segments: string[]\n shift?: boolean\n showHiddenFields: boolean\n siblingDoc: Record\n}): Promise => {\n const currentSegment = segments.shift()\n\n if (!currentSegment) {\n return\n }\n\n const currentValue = ref[currentSegment]\n\n if (typeof currentValue === 'undefined') {\n return\n }\n\n // Final step\n if (segments.length === 0) {\n if (hasMany) {\n if (!Array.isArray(siblingDoc[name])) {\n siblingDoc[name] = []\n }\n ;(siblingDoc[name] as any[]).push(currentValue)\n } else {\n siblingDoc[name] = currentValue\n }\n return\n }\n\n const currentField = fields.find((each) => each.name === currentSegment)\n\n if (!currentField) {\n return\n }\n\n if (currentField.type === 'group' || currentField.type === 'tab') {\n if (!currentValue || typeof currentValue !== 'object') {\n return\n }\n\n return virtualFieldPopulationPromise({\n name,\n draft,\n fallbackLocale,\n fields: currentField.flattenedFields,\n locale,\n overrideAccess,\n ref: currentValue,\n req,\n segments,\n showHiddenFields,\n siblingDoc,\n })\n }\n\n if (\n (currentField.type === 'relationship' || currentField.type === 'upload') &&\n typeof currentField.relationTo === 'string'\n ) {\n const select = {}\n let currentSelectRef: any = select\n const currentFields = req.payload.collections[currentField.relationTo]?.config.flattenedFields\n\n for (let i = 0; i < segments.length; i++) {\n const field = currentFields?.find((each) => each.name === segments[i])\n\n const shouldBreak =\n i === segments.length - 1 || field?.type === 'relationship' || field?.type === 'upload'\n\n currentSelectRef[segments[i]!] = shouldBreak ? true : {}\n currentSelectRef = currentSelectRef[segments[i]!]\n\n if (shouldBreak) {\n break\n }\n }\n\n if (currentField.hasMany) {\n if (!Array.isArray(currentValue)) {\n return\n }\n\n const docIDs = currentValue\n .map((e) => {\n if (!e) {\n return null\n }\n if (typeof e === 'object') {\n return e.id\n }\n return e\n })\n .filter((e) => typeof e === 'string' || typeof e === 'number')\n\n if (segments[0] === 'id' && segments.length === 0) {\n siblingDoc[name] = docIDs\n return\n }\n\n const collectionSlug = currentField.relationTo\n\n const populatedDocs = await Promise.all(\n docIDs.map((docID) => {\n return req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug,\n currentDepth: 0,\n depth: 0,\n docID,\n draft,\n fallbackLocale,\n locale,\n overrideAccess,\n select,\n showHiddenFields,\n transactionID: req.transactionID as number,\n }),\n )\n }),\n )\n\n for (const doc of populatedDocs) {\n if (!doc) {\n continue\n }\n\n await virtualFieldPopulationPromise({\n name,\n draft,\n fallbackLocale,\n fields: req.payload.collections[currentField.relationTo]!.config.flattenedFields,\n hasMany: true,\n locale,\n overrideAccess,\n ref: doc,\n req,\n segments: [...segments],\n showHiddenFields,\n siblingDoc,\n })\n }\n\n return\n }\n\n let docID: number | string\n\n if (typeof currentValue === 'object' && currentValue) {\n docID = currentValue.id\n } else {\n docID = currentValue\n }\n\n if (segments[0] === 'id' && segments.length === 0) {\n siblingDoc[name] = docID\n return\n }\n\n if (typeof docID !== 'string' && typeof docID !== 'number') {\n return\n }\n\n const populatedDoc = await req.payloadDataLoader.load(\n createDataloaderCacheKey({\n collectionSlug: currentField.relationTo,\n currentDepth: 0,\n depth: 0,\n docID,\n draft,\n fallbackLocale,\n locale,\n overrideAccess,\n select,\n showHiddenFields,\n transactionID: req.transactionID as number,\n }),\n )\n\n if (!populatedDoc) {\n return\n }\n\n return virtualFieldPopulationPromise({\n name,\n draft,\n fallbackLocale,\n fields: req.payload.collections[currentField.relationTo]!.config.flattenedFields,\n hasMany,\n locale,\n overrideAccess,\n ref: populatedDoc,\n req,\n segments,\n showHiddenFields,\n siblingDoc,\n })\n }\n}\n"],"names":["createDataloaderCacheKey","virtualFieldPopulationPromise","name","draft","fallbackLocale","fields","hasMany","locale","overrideAccess","ref","req","segments","showHiddenFields","siblingDoc","currentSegment","shift","currentValue","length","Array","isArray","push","currentField","find","each","type","flattenedFields","relationTo","select","currentSelectRef","currentFields","payload","collections","config","i","field","shouldBreak","docIDs","map","e","id","filter","collectionSlug","populatedDocs","Promise","all","docID","payloadDataLoader","load","currentDepth","depth","transactionID","doc","populatedDoc"],"mappings":"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"}