{"version":3,"file":"populate.mjs","sources":["../../../../src/services/document-service/utils/populate.ts"],"sourcesContent":["import type { UID } from '@strapi/types';\n\ninterface Options {\n  /**\n   * Fields to select when populating relations\n   */\n  relationalFields?: string[];\n}\n\nconst deepPopulateCache = new Map<string, any>();\n\n// We want to build a populate object based on the schema\nexport const getDeepPopulate = (uid: UID.Schema, opts: Options = {}) => {\n  const cacheKey = `${uid}::${JSON.stringify(opts)}`;\n  const cached = deepPopulateCache.get(cacheKey);\n  if (cached) {\n    return cached;\n  }\n\n  const model = strapi.getModel(uid);\n  const attributes = Object.entries(model.attributes);\n\n  const result = attributes.reduce((acc: any, [attributeName, attribute]) => {\n    switch (attribute.type) {\n      case 'relation': {\n        // TODO: Support polymorphic relations\n        const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n        if (isMorphRelation) {\n          break;\n        }\n\n        if ('unstable_virtual' in attribute && attribute.unstable_virtual) {\n          // skip relations not managed by the DB layer\n          break;\n        }\n\n        // Include all non-morph relations (including visible: false) so publish / discardDraft /\n        // clone preserve links—same idea as content-manager getPopulateForRelation for invisible attrs.\n        acc[attributeName] = { select: opts.relationalFields };\n\n        break;\n      }\n\n      case 'media': {\n        // We populate all media fields for completeness of webhook responses\n        // see https://github.com/strapi/strapi/issues/21546\n        acc[attributeName] = { select: ['*'] };\n        break;\n      }\n\n      case 'component': {\n        const populate = getDeepPopulate(attribute.component, opts);\n        acc[attributeName] = { populate };\n        break;\n      }\n\n      case 'dynamiczone': {\n        // Use fragments to populate the dynamic zone components\n        const populatedComponents = (attribute.components || []).reduce(\n          (acc: any, componentUID: UID.Component) => {\n            acc[componentUID] = { populate: getDeepPopulate(componentUID, opts) };\n            return acc;\n          },\n          {}\n        );\n\n        acc[attributeName] = { on: populatedComponents };\n        break;\n      }\n      default:\n        break;\n    }\n\n    return acc;\n  }, {});\n\n  deepPopulateCache.set(cacheKey, result);\n  return result;\n};\n"],"names":["deepPopulateCache","Map","getDeepPopulate","uid","opts","cacheKey","JSON","stringify","cached","get","model","strapi","getModel","attributes","Object","entries","result","reduce","acc","attributeName","attribute","type","isMorphRelation","relation","toLowerCase","startsWith","unstable_virtual","select","relationalFields","populate","component","populatedComponents","components","componentUID","on","set"],"mappings":"AASA,MAAMA,oBAAoB,IAAIC,GAAAA,EAAAA;AAE9B;MACaC,eAAAA,GAAkB,CAACC,GAAAA,EAAiBC,IAAAA,GAAgB,EAAE,GAAA;IACjE,MAAMC,QAAAA,GAAW,GAAGF,GAAAA,CAAI,EAAE,EAAEG,IAAAA,CAAKC,SAAS,CAACH,IAAAA,CAAAA,CAAAA,CAAO;IAClD,MAAMI,MAAAA,GAASR,iBAAAA,CAAkBS,GAAG,CAACJ,QAAAA,CAAAA;AACrC,IAAA,IAAIG,MAAAA,EAAQ;QACV,OAAOA,MAAAA;AACT,IAAA;IAEA,MAAME,KAAAA,GAAQC,MAAAA,CAAOC,QAAQ,CAACT,GAAAA,CAAAA;AAC9B,IAAA,MAAMU,UAAAA,GAAaC,MAAAA,CAAOC,OAAO,CAACL,MAAMG,UAAU,CAAA;IAElD,MAAMG,MAAAA,GAASH,WAAWI,MAAM,CAAC,CAACC,GAAAA,EAAU,CAACC,eAAeC,SAAAA,CAAU,GAAA;AACpE,QAAA,OAAQA,UAAUC,IAAI;YACpB,KAAK,UAAA;AAAY,gBAAA;;AAEf,oBAAA,MAAMC,kBAAkBF,SAAAA,CAAUG,QAAQ,CAACC,WAAW,EAAA,CAAGC,UAAU,CAAC,OAAA,CAAA;AACpE,oBAAA,IAAIH,eAAAA,EAAiB;AACnB,wBAAA;AACF,oBAAA;AAEA,oBAAA,IAAI,kBAAA,IAAsBF,SAAAA,IAAaA,SAAAA,CAAUM,gBAAgB,EAAE;AAEjE,wBAAA;AACF,oBAAA;;;oBAIAR,GAAG,CAACC,cAAc,GAAG;AAAEQ,wBAAAA,MAAAA,EAAQvB,KAAKwB;AAAiB,qBAAA;AAErD,oBAAA;AACF,gBAAA;YAEA,KAAK,OAAA;AAAS,gBAAA;;;oBAGZV,GAAG,CAACC,cAAc,GAAG;wBAAEQ,MAAAA,EAAQ;AAAC,4BAAA;AAAI;AAAC,qBAAA;AACrC,oBAAA;AACF,gBAAA;YAEA,KAAK,WAAA;AAAa,gBAAA;AAChB,oBAAA,MAAME,QAAAA,GAAW3B,eAAAA,CAAgBkB,SAAAA,CAAUU,SAAS,EAAE1B,IAAAA,CAAAA;oBACtDc,GAAG,CAACC,cAAc,GAAG;AAAEU,wBAAAA;AAAS,qBAAA;AAChC,oBAAA;AACF,gBAAA;YAEA,KAAK,aAAA;AAAe,gBAAA;;AAElB,oBAAA,MAAME,mBAAAA,GAAuBX,CAAAA,SAAAA,CAAUY,UAAU,IAAI,EAAC,EAAGf,MAAM,CAC7D,CAACC,GAAAA,EAAUe,YAAAA,GAAAA;wBACTf,GAAG,CAACe,aAAa,GAAG;AAAEJ,4BAAAA,QAAAA,EAAU3B,gBAAgB+B,YAAAA,EAAc7B,IAAAA;AAAM,yBAAA;wBACpE,OAAOc,GAAAA;AACT,oBAAA,CAAA,EACA,EAAC,CAAA;oBAGHA,GAAG,CAACC,cAAc,GAAG;wBAAEe,EAAAA,EAAIH;AAAoB,qBAAA;AAC/C,oBAAA;AACF,gBAAA;AAGF;QAEA,OAAOb,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;IAEJlB,iBAAAA,CAAkBmC,GAAG,CAAC9B,QAAAA,EAAUW,MAAAA,CAAAA;IAChC,OAAOA,MAAAA;AACT;;;;"}