Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
1 line
7.3 KiB
Plaintext
1 line
7.3 KiB
Plaintext
{"version":3,"sources":["../../src/utilities/sanitizeSelect.ts"],"sourcesContent":["import { deepMergeSimple } from '@payloadcms/translations/utilities'\n\nimport type { FlattenedField } from '../fields/config/types.js'\nimport type { SelectIncludeType, SelectType } from '../types/index.js'\n\nimport { getSelectMode } from './getSelectMode.js'\n\n// Transform post.title -> post, post.category.title -> post\nconst stripVirtualPathToCurrentCollection = ({\n fields,\n path,\n versions,\n}: {\n fields: FlattenedField[]\n path: string\n versions: boolean\n}) => {\n const resultSegments: string[] = []\n\n if (versions) {\n resultSegments.push('version')\n const versionField = fields.find((each) => each.name === 'version')\n\n if (versionField && versionField.type === 'group') {\n fields = versionField.flattenedFields\n }\n }\n\n for (const segment of path.split('.')) {\n const field = fields.find((each) => each.name === segment)\n\n if (!field) {\n continue\n }\n\n resultSegments.push(segment)\n\n if (field.type === 'relationship' || field.type === 'upload') {\n return resultSegments.join('.')\n }\n }\n\n return resultSegments.join('.')\n}\n\nconst getAllVirtualRelations = ({ fields }: { fields: FlattenedField[] }) => {\n const result: string[] = []\n\n for (const field of fields) {\n if ('virtual' in field && typeof field.virtual === 'string') {\n result.push(field.virtual)\n } else if (field.type === 'group' || field.type === 'tab') {\n const nestedResult = getAllVirtualRelations({ fields: field.flattenedFields })\n\n for (const nestedItem of nestedResult) {\n result.push(nestedItem)\n }\n }\n }\n\n return result\n}\n\nconst resolveVirtualRelationsToSelect = ({\n fields,\n selectValue,\n topLevelFields,\n versions,\n}: {\n fields: FlattenedField[]\n selectValue: SelectIncludeType | true\n topLevelFields: FlattenedField[]\n versions: boolean\n}) => {\n const result: string[] = []\n if (selectValue === true) {\n for (const item of getAllVirtualRelations({ fields })) {\n result.push(\n stripVirtualPathToCurrentCollection({ fields: topLevelFields, path: item, versions }),\n )\n }\n } else {\n for (const fieldName in selectValue) {\n const field = fields.find((each) => each.name === fieldName)\n if (!field) {\n continue\n }\n\n if ('virtual' in field && typeof field.virtual === 'string') {\n result.push(\n stripVirtualPathToCurrentCollection({\n fields: topLevelFields,\n path: field.virtual,\n versions,\n }),\n )\n } else if (field.type === 'group' || field.type === 'tab') {\n for (const item of resolveVirtualRelationsToSelect({\n fields: field.flattenedFields,\n selectValue: selectValue[fieldName]!,\n topLevelFields,\n versions,\n })) {\n result.push(\n stripVirtualPathToCurrentCollection({ fields: topLevelFields, path: item, versions }),\n )\n }\n }\n }\n }\n\n return result\n}\n\nexport const sanitizeSelect = ({\n fields,\n forceSelect,\n select,\n versions,\n}: {\n fields: FlattenedField[]\n forceSelect?: SelectType\n select?: SelectType\n versions?: boolean\n}): SelectType | undefined => {\n if (!select) {\n return select\n }\n\n const selectMode = getSelectMode(select)\n\n if (selectMode === 'exclude') {\n return select\n }\n\n if (forceSelect) {\n select = deepMergeSimple(select, forceSelect)\n }\n\n if (select) {\n const virtualRelations = resolveVirtualRelationsToSelect({\n fields,\n selectValue: select as SelectIncludeType,\n topLevelFields: fields,\n versions: versions ?? false,\n })\n\n for (const path of virtualRelations) {\n let currentRef = select\n const segments = path.split('.')\n for (let i = 0; i < segments.length; i++) {\n const isLast = segments.length - 1 === i\n const segment = segments[i]!\n\n if (isLast) {\n currentRef[segment] = true\n } else {\n if (!(segment in currentRef)) {\n currentRef[segment] = {}\n currentRef = currentRef[segment]\n }\n }\n }\n }\n }\n\n return select\n}\n"],"names":["deepMergeSimple","getSelectMode","stripVirtualPathToCurrentCollection","fields","path","versions","resultSegments","push","versionField","find","each","name","type","flattenedFields","segment","split","field","join","getAllVirtualRelations","result","virtual","nestedResult","nestedItem","resolveVirtualRelationsToSelect","selectValue","topLevelFields","item","fieldName","sanitizeSelect","forceSelect","select","selectMode","virtualRelations","currentRef","segments","i","length","isLast"],"mappings":"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"} |