{"version":3,"file":"populate.mjs","sources":["../../../../src/services/document-service/utils/populate.ts"],"sourcesContent":["import type { UID } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ninterface Options {\n /**\n * Fields to select when populating relations\n */\n relationalFields?: string[];\n}\n\nconst { CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } = contentTypes.constants;\n\n// We want to build a populate object based on the schema\nexport const getDeepPopulate = (uid: UID.Schema, opts: Options = {}) => {\n const model = strapi.getModel(uid);\n const attributes = Object.entries(model.attributes);\n\n return 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 // Ignore not visible fields other than createdBy and updatedBy\n const isVisible = contentTypes.isVisibleAttribute(model, attributeName);\n const isCreatorField = [CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE].includes(attributeName);\n\n if (isVisible || isCreatorField) {\n acc[attributeName] = { select: opts.relationalFields };\n }\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"],"names":["CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","contentTypes","constants","getDeepPopulate","uid","opts","model","strapi","getModel","attributes","Object","entries","reduce","acc","attributeName","attribute","type","isMorphRelation","relation","toLowerCase","startsWith","isVisible","isVisibleAttribute","isCreatorField","includes","select","relationalFields","populate","component","populatedComponents","components","componentUID","on"],"mappings":";;AAUA,MAAM,EAAEA,oBAAoB,EAAEC,oBAAoB,EAAE,GAAGC,aAAaC,SAAS;AAE7E;MACaC,eAAkB,GAAA,CAACC,GAAiBC,EAAAA,IAAAA,GAAgB,EAAE,GAAA;IACjE,MAAMC,KAAAA,GAAQC,MAAOC,CAAAA,QAAQ,CAACJ,GAAAA,CAAAA;AAC9B,IAAA,MAAMK,UAAaC,GAAAA,MAAAA,CAAOC,OAAO,CAACL,MAAMG,UAAU,CAAA;AAElD,IAAA,OAAOA,WAAWG,MAAM,CAAC,CAACC,GAAU,EAAA,CAACC,eAAeC,SAAU,CAAA,GAAA;AAC5D,QAAA,OAAQA,UAAUC,IAAI;YACpB,KAAK,UAAA;AAAY,gBAAA;;AAEf,oBAAA,MAAMC,kBAAkBF,SAAUG,CAAAA,QAAQ,CAACC,WAAW,EAAA,CAAGC,UAAU,CAAC,OAAA,CAAA;AACpE,oBAAA,IAAIH,eAAiB,EAAA;AACnB,wBAAA;AACF;;AAGA,oBAAA,MAAMI,SAAYpB,GAAAA,YAAAA,CAAaqB,kBAAkB,CAAChB,KAAOQ,EAAAA,aAAAA,CAAAA;AACzD,oBAAA,MAAMS,cAAiB,GAAA;AAACxB,wBAAAA,oBAAAA;AAAsBC,wBAAAA;AAAqB,qBAAA,CAACwB,QAAQ,CAACV,aAAAA,CAAAA;AAE7E,oBAAA,IAAIO,aAAaE,cAAgB,EAAA;wBAC/BV,GAAG,CAACC,cAAc,GAAG;AAAEW,4BAAAA,MAAAA,EAAQpB,KAAKqB;AAAiB,yBAAA;AACvD;AAEA,oBAAA;AACF;YAEA,KAAK,OAAA;AAAS,gBAAA;;;oBAGZb,GAAG,CAACC,cAAc,GAAG;wBAAEW,MAAQ,EAAA;AAAC,4BAAA;AAAI;AAAC,qBAAA;AACrC,oBAAA;AACF;YAEA,KAAK,WAAA;AAAa,gBAAA;AAChB,oBAAA,MAAME,QAAWxB,GAAAA,eAAAA,CAAgBY,SAAUa,CAAAA,SAAS,EAAEvB,IAAAA,CAAAA;oBACtDQ,GAAG,CAACC,cAAc,GAAG;AAAEa,wBAAAA;AAAS,qBAAA;AAChC,oBAAA;AACF;YAEA,KAAK,aAAA;AAAe,gBAAA;;AAElB,oBAAA,MAAME,mBAAsB,GAACd,CAAAA,SAAAA,CAAUe,UAAU,IAAI,EAAC,EAAGlB,MAAM,CAC7D,CAACC,GAAUkB,EAAAA,YAAAA,GAAAA;wBACTlB,GAAG,CAACkB,aAAa,GAAG;AAAEJ,4BAAAA,QAAAA,EAAUxB,gBAAgB4B,YAAc1B,EAAAA,IAAAA;AAAM,yBAAA;wBACpE,OAAOQ,GAAAA;AACT,qBAAA,EACA,EAAC,CAAA;oBAGHA,GAAG,CAACC,cAAc,GAAG;wBAAEkB,EAAIH,EAAAA;AAAoB,qBAAA;AAC/C,oBAAA;AACF;AAGF;QAEA,OAAOhB,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN;;;;"}