{"version":3,"file":"homepage-query-utils.mjs","sources":["../../../../server/src/homepage/services/homepage-query-utils.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\nimport { getDefaultMainField } from '../../services/utils/configuration/attributes';\n\nexport const FALLBACK_MAIN_FIELD = 'documentId';\n\nexport type HomepagePermissionChecker = {\n cannot: {\n read: (entity: null, field: string) => boolean;\n };\n};\n\n/**\n * Removes invalid entries left in the fields array after permission sanitization.\n */\nexport const compactSanitizedFields = (fields: unknown): string[] | undefined => {\n if (!Array.isArray(fields)) {\n return undefined;\n }\n\n return fields.filter((field): field is string => typeof field === 'string');\n};\n\n/**\n * Resolves the main field used for homepage widgets, falling back when the user cannot read it.\n */\nexport const resolveReadableMainField = (\n contentType: Schema.ContentType,\n configuration: { settings?: { mainField?: string } } | undefined,\n permissionChecker: HomepagePermissionChecker\n): string => {\n const candidateMainField = configuration?.settings?.mainField ?? getDefaultMainField(contentType);\n\n if (permissionChecker.cannot.read(null, candidateMainField)) {\n return FALLBACK_MAIN_FIELD;\n }\n\n return candidateMainField;\n};\n\n/**\n * Builds the fields array requested before permission sanitization.\n */\nexport const buildHomepageQueryFields = (\n contentType: Schema.ContentType,\n mainField: string\n): string[] => {\n const fields = [FALLBACK_MAIN_FIELD, 'updatedAt'];\n\n if (contentTypes.hasDraftAndPublish(contentType)) {\n fields.push('publishedAt');\n }\n\n if (mainField !== FALLBACK_MAIN_FIELD && !fields.includes(mainField)) {\n fields.push(mainField);\n }\n\n if ((contentType.pluginOptions?.i18n as { localized?: boolean } | undefined)?.localized) {\n fields.push('locale');\n }\n\n return fields;\n};\n\n/**\n * Picks a main field that is present in the sanitized fields selection.\n */\nexport const resolveTitleField = (\n mainField: string,\n sanitizedFields: string[] | undefined\n): string => {\n if (sanitizedFields?.includes(mainField)) {\n return mainField;\n }\n\n return FALLBACK_MAIN_FIELD;\n};\n"],"names":["FALLBACK_MAIN_FIELD","compactSanitizedFields","fields","Array","isArray","undefined","filter","field","resolveReadableMainField","contentType","configuration","permissionChecker","candidateMainField","settings","mainField","getDefaultMainField","cannot","read","buildHomepageQueryFields","contentTypes","hasDraftAndPublish","push","includes","pluginOptions","i18n","localized","resolveTitleField","sanitizedFields"],"mappings":";;;AAKO,MAAMA,sBAAsB;AAQnC;;IAGO,MAAMC,sBAAAA,GAAyB,CAACC,MAAAA,GAAAA;AACrC,IAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAACF,MAAAA,CAAAA,EAAS;QAC1B,OAAOG,SAAAA;AACT,IAAA;AAEA,IAAA,OAAOH,OAAOI,MAAM,CAAC,CAACC,KAAAA,GAA2B,OAAOA,KAAAA,KAAU,QAAA,CAAA;AACpE;AAEA;;AAEC,IACM,MAAMC,wBAAAA,GAA2B,CACtCC,aACAC,aAAAA,EACAC,iBAAAA,GAAAA;AAEA,IAAA,MAAMC,kBAAAA,GAAqBF,aAAAA,EAAeG,QAAAA,EAAUC,SAAAA,IAAaC,mBAAAA,CAAoBN,WAAAA,CAAAA;AAErF,IAAA,IAAIE,kBAAkBK,MAAM,CAACC,IAAI,CAAC,MAAML,kBAAAA,CAAAA,EAAqB;QAC3D,OAAOZ,mBAAAA;AACT,IAAA;IAEA,OAAOY,kBAAAA;AACT;AAEA;;AAEC,IACM,MAAMM,wBAAAA,GAA2B,CACtCT,WAAAA,EACAK,SAAAA,GAAAA;AAEA,IAAA,MAAMZ,MAAAA,GAAS;AAACF,QAAAA,mBAAAA;AAAqB,QAAA;AAAY,KAAA;IAEjD,IAAImB,YAAAA,CAAaC,kBAAkB,CAACX,WAAAA,CAAAA,EAAc;AAChDP,QAAAA,MAAAA,CAAOmB,IAAI,CAAC,aAAA,CAAA;AACd,IAAA;AAEA,IAAA,IAAIP,cAAcd,mBAAAA,IAAuB,CAACE,MAAAA,CAAOoB,QAAQ,CAACR,SAAAA,CAAAA,EAAY;AACpEZ,QAAAA,MAAAA,CAAOmB,IAAI,CAACP,SAAAA,CAAAA;AACd,IAAA;AAEA,IAAA,IAAKL,WAAAA,CAAYc,aAAa,EAAEC,IAAAA,EAA8CC,SAAAA,EAAW;AACvFvB,QAAAA,MAAAA,CAAOmB,IAAI,CAAC,QAAA,CAAA;AACd,IAAA;IAEA,OAAOnB,MAAAA;AACT;AAEA;;AAEC,IACM,MAAMwB,iBAAAA,GAAoB,CAC/BZ,SAAAA,EACAa,eAAAA,GAAAA;IAEA,IAAIA,eAAAA,EAAiBL,SAASR,SAAAA,CAAAA,EAAY;QACxC,OAAOA,SAAAA;AACT,IAAA;IAEA,OAAOd,mBAAAA;AACT;;;;"}