payload 3.42.0 → 3.43.0-internal.c5bbc84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/functions/index.d.ts +8 -0
- package/dist/admin/functions/index.d.ts.map +1 -1
- package/dist/admin/functions/index.js.map +1 -1
- package/dist/admin/types.d.ts +1 -1
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/admin/views/folderList.d.ts +14 -5
- package/dist/admin/views/folderList.d.ts.map +1 -1
- package/dist/admin/views/folderList.js.map +1 -1
- package/dist/auth/crypto.d.ts.map +1 -1
- package/dist/auth/crypto.js +6 -3
- package/dist/auth/crypto.js.map +1 -1
- package/dist/auth/operations/unlock.d.ts.map +1 -1
- package/dist/auth/operations/unlock.js +1 -2
- package/dist/auth/operations/unlock.js.map +1 -1
- package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
- package/dist/auth/strategies/local/authenticate.js +1 -0
- package/dist/auth/strategies/local/authenticate.js.map +1 -1
- package/dist/bin/index.js.map +1 -1
- package/dist/bin/migrate.d.ts.map +1 -1
- package/dist/bin/migrate.js +2 -2
- package/dist/bin/migrate.js.map +1 -1
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +3 -1
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/dataloader.d.ts.map +1 -1
- package/dist/collections/dataloader.js +0 -1
- package/dist/collections/dataloader.js.map +1 -1
- package/dist/collections/operations/delete.d.ts.map +1 -1
- package/dist/collections/operations/delete.js +1 -2
- package/dist/collections/operations/delete.js.map +1 -1
- package/dist/collections/operations/findVersions.js +0 -1
- package/dist/collections/operations/findVersions.js.map +1 -1
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +3 -2
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/config/client.d.ts.map +1 -1
- package/dist/config/client.js +1 -1
- package/dist/config/client.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +1 -2
- package/dist/config/sanitize.js.map +1 -1
- package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
- package/dist/database/queryValidation/validateQueryPaths.js +0 -1
- package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
- package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
- package/dist/database/queryValidation/validateSearchParams.js +0 -1
- package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
- package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
- package/dist/database/sanitizeJoinQuery.js +3 -1
- package/dist/database/sanitizeJoinQuery.js.map +1 -1
- package/dist/fields/config/client.d.ts.map +1 -1
- package/dist/fields/config/client.js +6 -1
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/config/sanitize.d.ts.map +1 -1
- package/dist/fields/config/sanitize.js +0 -1
- package/dist/fields/config/sanitize.js.map +1 -1
- package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/index.js +0 -1
- package/dist/fields/hooks/afterRead/index.js.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +1 -2
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +0 -1
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +1 -2
- package/dist/fields/validations.js.map +1 -1
- package/dist/folders/types.d.ts +2 -0
- package/dist/folders/types.d.ts.map +1 -1
- package/dist/folders/types.js.map +1 -1
- package/dist/globals/config/client.d.ts.map +1 -1
- package/dist/globals/config/client.js +2 -1
- package/dist/globals/config/client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/index.js +0 -1
- package/dist/queues/operations/runJobs/index.js.map +1 -1
- package/dist/queues/operations/runJobs/runJSONJob/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJSONJob/index.js +2 -2
- package/dist/queues/operations/runJobs/runJSONJob/index.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +0 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/importHandlerPath.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/importHandlerPath.js +1 -2
- package/dist/queues/operations/runJobs/runJob/importHandlerPath.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/index.js +2 -2
- package/dist/queues/operations/runJobs/runJob/index.js.map +1 -1
- package/dist/uploads/cropImage.d.ts +0 -1
- package/dist/uploads/cropImage.d.ts.map +1 -1
- package/dist/uploads/cropImage.js +2 -3
- package/dist/uploads/cropImage.js.map +1 -1
- package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFile.js +0 -1
- package/dist/uploads/endpoints/getFile.js.map +1 -1
- package/dist/uploads/endpoints/getFileFromURL.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFileFromURL.js +2 -3
- package/dist/uploads/endpoints/getFileFromURL.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/fileFactory.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/fileFactory.js +1 -0
- package/dist/uploads/fetchAPI-multipart/fileFactory.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts +6 -0
- package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.js +0 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processNested.d.ts +1 -1
- package/dist/uploads/fetchAPI-multipart/processNested.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processNested.js +0 -1
- package/dist/uploads/fetchAPI-multipart/processNested.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/utilities.d.ts +1 -1
- package/dist/uploads/fetchAPI-multipart/utilities.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/utilities.js +0 -1
- package/dist/uploads/fetchAPI-multipart/utilities.js.map +1 -1
- package/dist/uploads/fetchAPI-stream-file/index.d.ts +1 -1
- package/dist/uploads/fetchAPI-stream-file/index.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-stream-file/index.js +0 -1
- package/dist/uploads/fetchAPI-stream-file/index.js.map +1 -1
- package/dist/uploads/tempFile.d.ts +1 -1
- package/dist/uploads/tempFile.d.ts.map +1 -1
- package/dist/uploads/tempFile.js +0 -1
- package/dist/uploads/tempFile.js.map +1 -1
- package/dist/utilities/addLocalesToRequest.d.ts.map +1 -1
- package/dist/utilities/addLocalesToRequest.js +0 -1
- package/dist/utilities/addLocalesToRequest.js.map +1 -1
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +2 -1
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/deepCopyObject.js +1 -2
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
- package/dist/utilities/fieldSchemaToJSON.js +0 -1
- package/dist/utilities/fieldSchemaToJSON.js.map +1 -1
- package/dist/utilities/flattenTopLevelFields.d.ts.map +1 -1
- package/dist/utilities/flattenTopLevelFields.js +0 -1
- package/dist/utilities/flattenTopLevelFields.js.map +1 -1
- package/dist/utilities/formatErrors.d.ts.map +1 -1
- package/dist/utilities/formatErrors.js +0 -1
- package/dist/utilities/formatErrors.js.map +1 -1
- package/dist/utilities/getCollectionIDFieldTypes.d.ts.map +1 -1
- package/dist/utilities/getCollectionIDFieldTypes.js +0 -1
- package/dist/utilities/getCollectionIDFieldTypes.js.map +1 -1
- package/dist/utilities/getDataByPath.d.ts.map +1 -1
- package/dist/utilities/getDataByPath.js +0 -1
- package/dist/utilities/getDataByPath.js.map +1 -1
- package/dist/utilities/getEntityPolicies.d.ts.map +1 -1
- package/dist/utilities/getEntityPolicies.js +3 -2
- package/dist/utilities/getEntityPolicies.js.map +1 -1
- package/dist/utilities/getFieldPermissions.d.ts.map +1 -1
- package/dist/utilities/getFieldPermissions.js +2 -3
- package/dist/utilities/getFieldPermissions.js.map +1 -1
- package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
- package/dist/utilities/getObjectDotNotation.js +0 -1
- package/dist/utilities/getObjectDotNotation.js.map +1 -1
- package/dist/utilities/getSiblingData.d.ts.map +1 -1
- package/dist/utilities/getSiblingData.js +0 -1
- package/dist/utilities/getSiblingData.js.map +1 -1
- package/dist/utilities/getUniqueListBy.d.ts.map +1 -1
- package/dist/utilities/getUniqueListBy.js +0 -1
- package/dist/utilities/getUniqueListBy.js.map +1 -1
- package/dist/utilities/handleEndpoints.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.js +2 -2
- package/dist/utilities/handleEndpoints.js.map +1 -1
- package/dist/utilities/logError.d.ts.map +1 -1
- package/dist/utilities/logError.js +0 -1
- package/dist/utilities/logError.js.map +1 -1
- package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -1
- package/dist/utilities/reduceFieldsToValues.js +0 -1
- package/dist/utilities/reduceFieldsToValues.js.map +1 -1
- package/dist/utilities/sanitizeJoinParams.d.ts +1 -1
- package/dist/utilities/sanitizeJoinParams.d.ts.map +1 -1
- package/dist/utilities/sanitizeJoinParams.js +2 -2
- package/dist/utilities/sanitizeJoinParams.js.map +1 -1
- package/dist/utilities/sanitizePermissions.d.ts.map +1 -1
- package/dist/utilities/sanitizePermissions.js +2 -2
- package/dist/utilities/sanitizePermissions.js.map +1 -1
- package/dist/utilities/sanitizePopulateParam.d.ts.map +1 -1
- package/dist/utilities/sanitizePopulateParam.js +1 -1
- package/dist/utilities/sanitizePopulateParam.js.map +1 -1
- package/dist/utilities/sanitizeSelectParam.d.ts.map +1 -1
- package/dist/utilities/sanitizeSelectParam.js +4 -2
- package/dist/utilities/sanitizeSelectParam.js.map +1 -1
- package/dist/utilities/telemetry/conf/envPaths.d.ts +1 -1
- package/dist/utilities/telemetry/conf/envPaths.d.ts.map +1 -1
- package/dist/utilities/telemetry/conf/envPaths.js.map +1 -1
- package/dist/utilities/timestamp.d.ts +1 -1
- package/dist/utilities/timestamp.d.ts.map +1 -1
- package/dist/utilities/timestamp.js +0 -1
- package/dist/utilities/timestamp.js.map +1 -1
- package/dist/utilities/traverseFields.d.ts.map +1 -1
- package/dist/utilities/traverseFields.js +6 -1
- package/dist/utilities/traverseFields.js.map +1 -1
- package/dist/utilities/unflatten.d.ts.map +1 -1
- package/dist/utilities/unflatten.js +1 -2
- package/dist/utilities/unflatten.js.map +1 -1
- package/dist/utilities/wait.d.ts +1 -1
- package/dist/utilities/wait.d.ts.map +1 -1
- package/dist/utilities/wait.js +0 -1
- package/dist/utilities/wait.js.map +1 -1
- package/dist/versions/baseFields.d.ts +2 -7
- package/dist/versions/baseFields.d.ts.map +1 -1
- package/dist/versions/baseFields.js.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js +1 -0
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
- package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
- package/dist/versions/getLatestGlobalVersion.js +3 -1
- package/dist/versions/getLatestGlobalVersion.js.map +1 -1
- package/dist/versions/saveVersion.js +1 -1
- package/dist/versions/saveVersion.js.map +1 -1
- package/package.json +3 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/sanitize.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { AcceptedLanguages } from '@payloadcms/translations'\n\nimport { en } from '@payloadcms/translations/languages/en'\nimport { deepMergeSimple } from '@payloadcms/translations/utilities'\n\nimport type {\n Config,\n LocalizationConfigWithLabels,\n LocalizationConfigWithNoLabels,\n SanitizedConfig,\n Timezone,\n} from './types.js'\n\nimport { defaultUserCollection } from '../auth/defaultUser.js'\nimport { authRootEndpoints } from '../auth/endpoints/index.js'\nimport { sanitizeCollection } from '../collections/config/sanitize.js'\nimport { migrationsCollection } from '../database/migrations/migrationsCollection.js'\nimport { DuplicateCollection, InvalidConfiguration } from '../errors/index.js'\nimport { defaultTimezones } from '../fields/baseFields/timezone/defaultTimezones.js'\nimport { addFolderCollections } from '../folders/addFolderCollections.js'\nimport { sanitizeGlobal } from '../globals/config/sanitize.js'\nimport {\n baseBlockFields,\n type CollectionSlug,\n formatLabels,\n type GlobalSlug,\n sanitizeFields,\n} from '../index.js'\nimport {\n getLockedDocumentsCollection,\n lockedDocumentsCollectionSlug,\n} from '../locked-documents/config.js'\nimport { getPreferencesCollection, preferencesCollectionSlug } from '../preferences/config.js'\nimport { getQueryPresetsConfig, queryPresetsCollectionSlug } from '../query-presets/config.js'\nimport { getDefaultJobsCollection, jobsCollectionSlug } from '../queues/config/index.js'\nimport { flattenBlock } from '../utilities/flattenAllFields.js'\nimport { getSchedulePublishTask } from '../versions/schedule/job.js'\nimport { addDefaultsToConfig } from './defaults.js'\nimport { setupOrderable } from './orderable/index.js'\n\nconst sanitizeAdminConfig = (configToSanitize: Config): Partial<SanitizedConfig> => {\n const sanitizedConfig = { ...configToSanitize }\n\n if (configToSanitize?.compatibility?.allowLocalizedWithinLocalized) {\n process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized = 'true'\n }\n\n // default logging level will be 'error' if not provided\n sanitizedConfig.loggingLevels = {\n Forbidden: 'info',\n Locked: 'info',\n MissingFile: 'info',\n NotFound: 'info',\n ValidationError: 'info',\n ...(sanitizedConfig.loggingLevels || {}),\n }\n\n // add default user collection if none provided\n if (!sanitizedConfig?.admin?.user) {\n const firstCollectionWithAuth = sanitizedConfig.collections!.find(({ auth }) => Boolean(auth))\n\n if (firstCollectionWithAuth) {\n sanitizedConfig.admin!.user = firstCollectionWithAuth.slug\n } else {\n sanitizedConfig.admin!.user = defaultUserCollection.slug\n sanitizedConfig.collections!.push(defaultUserCollection)\n }\n }\n\n const userCollection = sanitizedConfig.collections!.find(\n ({ slug }) => slug === sanitizedConfig.admin!.user,\n )\n\n if (!userCollection || !userCollection.auth) {\n throw new InvalidConfiguration(\n `${sanitizedConfig.admin!.user} is not a valid admin user collection`,\n )\n }\n\n if (sanitizedConfig?.admin?.timezones) {\n if (typeof sanitizedConfig?.admin?.timezones?.supportedTimezones === 'function') {\n sanitizedConfig.admin.timezones.supportedTimezones =\n sanitizedConfig.admin.timezones.supportedTimezones({ defaultTimezones })\n }\n\n if (!sanitizedConfig?.admin?.timezones?.supportedTimezones) {\n sanitizedConfig.admin.timezones.supportedTimezones = defaultTimezones\n }\n } else {\n sanitizedConfig.admin!.timezones = {\n supportedTimezones: defaultTimezones,\n }\n }\n // Timezones supported by the Intl API\n const _internalSupportedTimezones = Intl.supportedValuesOf('timeZone')\n\n // We're casting here because it's already been sanitised above but TS still thinks it could be a function\n ;(sanitizedConfig.admin!.timezones.supportedTimezones as Timezone[]).forEach((timezone) => {\n if (!_internalSupportedTimezones.includes(timezone.value)) {\n throw new InvalidConfiguration(\n `Timezone ${timezone.value} is not supported by the current runtime via the Intl API.`,\n )\n }\n })\n\n return sanitizedConfig as unknown as Partial<SanitizedConfig>\n}\n\nexport const sanitizeConfig = async (incomingConfig: Config): Promise<SanitizedConfig> => {\n const configWithDefaults = addDefaultsToConfig(incomingConfig)\n\n const config: Partial<SanitizedConfig> = sanitizeAdminConfig(configWithDefaults)\n\n // Add orderable fields\n setupOrderable(config as SanitizedConfig)\n\n if (!config.endpoints) {\n config.endpoints = []\n }\n\n for (const endpoint of authRootEndpoints) {\n config.endpoints.push(endpoint)\n }\n\n if (config.localization && config.localization.locales?.length > 0) {\n // clone localization config so to not break everything\n const firstLocale = config.localization.locales[0]\n if (typeof firstLocale === 'string') {\n config.localization.localeCodes = [\n ...(config.localization as unknown as LocalizationConfigWithNoLabels).locales,\n ]\n\n // is string[], so convert to Locale[]\n config.localization.locales = (\n config.localization as unknown as LocalizationConfigWithNoLabels\n ).locales.map((locale) => ({\n code: locale,\n label: locale,\n rtl: false,\n toString: () => locale,\n }))\n } else {\n // is Locale[], so convert to string[] for localeCodes\n config.localization.localeCodes = config.localization.locales.map((locale) => locale.code)\n\n config.localization.locales = (\n config.localization as LocalizationConfigWithLabels\n ).locales.map((locale) => ({\n ...locale,\n toString: () => locale.code,\n }))\n }\n\n // Default fallback to true if not provided\n config.localization.fallback = config.localization?.fallback ?? true\n }\n\n const i18nConfig: SanitizedConfig['i18n'] = {\n fallbackLanguage: 'en',\n supportedLanguages: {\n en,\n },\n translations: {},\n }\n\n if (incomingConfig?.i18n) {\n i18nConfig.supportedLanguages =\n incomingConfig.i18n?.supportedLanguages || i18nConfig.supportedLanguages\n\n const supportedLangKeys = <AcceptedLanguages[]>Object.keys(i18nConfig.supportedLanguages)\n const fallbackLang = incomingConfig.i18n?.fallbackLanguage || i18nConfig.fallbackLanguage\n\n i18nConfig.fallbackLanguage = supportedLangKeys.includes(fallbackLang)\n ? fallbackLang\n : supportedLangKeys[0]!\n i18nConfig.translations =\n (incomingConfig.i18n?.translations as SanitizedConfig['i18n']['translations']) ||\n i18nConfig.translations\n }\n\n config.i18n = i18nConfig\n\n const richTextSanitizationPromises: Array<(config: SanitizedConfig) => Promise<void>> = []\n\n const schedulePublishCollections: CollectionSlug[] = []\n\n const queryPresetsCollections: CollectionSlug[] = []\n\n const schedulePublishGlobals: GlobalSlug[] = []\n\n const collectionSlugs = new Set<CollectionSlug>()\n\n await addFolderCollections(config as unknown as Config)\n\n const validRelationships = [\n ...(config.collections?.map((c) => c.slug) ?? []),\n jobsCollectionSlug,\n lockedDocumentsCollectionSlug,\n preferencesCollectionSlug,\n ]\n\n /**\n * Blocks sanitization needs to happen before collections, as collection/global join field sanitization needs config.blocks\n * to be populated with the sanitized blocks\n */\n config.blocks = []\n\n if (incomingConfig.blocks?.length) {\n for (const block of incomingConfig.blocks) {\n const sanitizedBlock = block\n\n if (sanitizedBlock._sanitized === true) {\n continue\n }\n sanitizedBlock._sanitized = true\n\n sanitizedBlock.fields = sanitizedBlock.fields.concat(baseBlockFields)\n\n sanitizedBlock.labels = !sanitizedBlock.labels\n ? formatLabels(sanitizedBlock.slug)\n : sanitizedBlock.labels\n\n sanitizedBlock.fields = await sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: sanitizedBlock.fields,\n parentIsLocalized: false,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n const flattenedSanitizedBlock = flattenBlock({ block })\n\n config.blocks.push(flattenedSanitizedBlock)\n }\n }\n\n for (let i = 0; i < config.collections!.length; i++) {\n if (collectionSlugs.has(config.collections![i]!.slug)) {\n throw new DuplicateCollection('slug', config.collections![i]!.slug)\n }\n\n collectionSlugs.add(config.collections![i]!.slug)\n\n const draftsConfig = config.collections![i]?.versions?.drafts\n\n if (typeof draftsConfig === 'object' && draftsConfig.schedulePublish) {\n schedulePublishCollections.push(config.collections![i]!.slug)\n }\n\n if (config.collections![i]!.enableQueryPresets) {\n queryPresetsCollections.push(config.collections![i]!.slug)\n\n if (!validRelationships.includes(queryPresetsCollectionSlug)) {\n validRelationships.push(queryPresetsCollectionSlug)\n }\n }\n\n config.collections![i] = await sanitizeCollection(\n config as unknown as Config,\n config.collections![i]!,\n richTextSanitizationPromises,\n validRelationships,\n )\n }\n\n if (config.globals!.length > 0) {\n for (let i = 0; i < config.globals!.length; i++) {\n const draftsConfig = config.globals![i]?.versions?.drafts\n\n if (typeof draftsConfig === 'object' && draftsConfig.schedulePublish) {\n schedulePublishGlobals.push(config.globals![i]!.slug)\n }\n\n config.globals![i] = await sanitizeGlobal(\n config as unknown as Config,\n config.globals![i]!,\n richTextSanitizationPromises,\n validRelationships,\n )\n }\n }\n\n if (schedulePublishCollections.length > 0 || schedulePublishGlobals.length > 0) {\n if (!Array.isArray(configWithDefaults.jobs?.tasks)) {\n configWithDefaults.jobs!.tasks = []\n }\n\n configWithDefaults.jobs!.tasks.push(\n getSchedulePublishTask({\n adminUserSlug: config.admin!.user,\n collections: schedulePublishCollections,\n globals: schedulePublishGlobals,\n }),\n )\n }\n\n // Need to add default jobs collection before locked documents collections\n if (\n (Array.isArray(configWithDefaults.jobs?.tasks) && configWithDefaults.jobs?.tasks?.length) ||\n (Array.isArray(configWithDefaults.jobs?.workflows) &&\n configWithDefaults.jobs?.workflows?.length)\n ) {\n let defaultJobsCollection = getDefaultJobsCollection(config as unknown as Config)\n\n if (defaultJobsCollection) {\n if (typeof configWithDefaults.jobs.jobsCollectionOverrides === 'function') {\n defaultJobsCollection = configWithDefaults.jobs.jobsCollectionOverrides({\n defaultJobsCollection,\n })\n\n const hooks = defaultJobsCollection?.hooks\n // @todo - delete this check in 4.0\n if (hooks && config?.jobs?.runHooks !== true) {\n for (const hook of Object.keys(hooks)) {\n const defaultAmount = hook === 'afterRead' || hook === 'beforeChange' ? 1 : 0\n if (hooks[hook]?.length > defaultAmount) {\n // eslint-disable-next-line no-console\n console.warn(\n `The jobsCollectionOverrides function is returning a collection with an additional ${hook} hook defined. These hooks will not run unless the jobs.runHooks option is set to true. Setting this option to true will negatively impact performance.`,\n )\n break\n }\n }\n }\n }\n const sanitizedJobsCollection = await sanitizeCollection(\n config as unknown as Config,\n defaultJobsCollection,\n richTextSanitizationPromises,\n validRelationships,\n )\n\n configWithDefaults.collections!.push(sanitizedJobsCollection)\n }\n }\n\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getLockedDocumentsCollection(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getPreferencesCollection(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n migrationsCollection,\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n if (queryPresetsCollections.length > 0) {\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getQueryPresetsConfig(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n }\n\n if (config.serverURL !== '') {\n config.csrf!.push(config.serverURL!)\n }\n\n const uploadAdapters = new Set<string>()\n // interact with all collections\n for (const collection of config.collections!) {\n // deduped upload adapters\n if (collection.upload?.adapter) {\n uploadAdapters.add(collection.upload.adapter)\n }\n }\n\n if (!config.upload) {\n config.upload = { adapters: [] }\n }\n\n config.upload.adapters = Array.from(\n new Set(config.collections!.map((c) => c.upload?.adapter).filter(Boolean) as string[]),\n )\n\n // Pass through the email config as is so adapters don't break\n if (incomingConfig.email) {\n config.email = incomingConfig.email\n }\n\n /*\n Execute richText sanitization\n */\n if (typeof incomingConfig.editor === 'function') {\n config.editor = await incomingConfig.editor({\n config: config as SanitizedConfig,\n isRoot: true,\n parentIsLocalized: false,\n })\n if (config.editor.i18n && Object.keys(config.editor.i18n).length >= 0) {\n config.i18n.translations = deepMergeSimple(config.i18n.translations, config.editor.i18n)\n }\n }\n\n const promises: Promise<void>[] = []\n\n for (const sanitizeFunction of richTextSanitizationPromises) {\n promises.push(sanitizeFunction(config as SanitizedConfig))\n }\n\n await Promise.all(promises)\n\n return config as SanitizedConfig\n}\n"],"names":["en","deepMergeSimple","defaultUserCollection","authRootEndpoints","sanitizeCollection","migrationsCollection","DuplicateCollection","InvalidConfiguration","defaultTimezones","addFolderCollections","sanitizeGlobal","baseBlockFields","formatLabels","sanitizeFields","getLockedDocumentsCollection","lockedDocumentsCollectionSlug","getPreferencesCollection","preferencesCollectionSlug","getQueryPresetsConfig","queryPresetsCollectionSlug","getDefaultJobsCollection","jobsCollectionSlug","flattenBlock","getSchedulePublishTask","addDefaultsToConfig","setupOrderable","sanitizeAdminConfig","configToSanitize","sanitizedConfig","compatibility","allowLocalizedWithinLocalized","process","env","NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized","loggingLevels","Forbidden","Locked","MissingFile","NotFound","ValidationError","admin","user","firstCollectionWithAuth","collections","find","auth","Boolean","slug","push","userCollection","timezones","supportedTimezones","_internalSupportedTimezones","Intl","supportedValuesOf","forEach","timezone","includes","value","sanitizeConfig","incomingConfig","configWithDefaults","config","endpoints","endpoint","localization","locales","length","firstLocale","localeCodes","map","locale","code","label","rtl","toString","fallback","i18nConfig","fallbackLanguage","supportedLanguages","translations","i18n","supportedLangKeys","Object","keys","fallbackLang","richTextSanitizationPromises","schedulePublishCollections","queryPresetsCollections","schedulePublishGlobals","collectionSlugs","Set","validRelationships","c","blocks","block","sanitizedBlock","_sanitized","fields","concat","labels","existingFieldNames","parentIsLocalized","flattenedSanitizedBlock","i","has","add","draftsConfig","versions","drafts","schedulePublish","enableQueryPresets","globals","Array","isArray","jobs","tasks","adminUserSlug","workflows","defaultJobsCollection","jobsCollectionOverrides","hooks","runHooks","hook","defaultAmount","console","warn","sanitizedJobsCollection","serverURL","csrf","uploadAdapters","collection","upload","adapter","adapters","from","filter","email","editor","isRoot","promises","sanitizeFunction","Promise","all"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/config/sanitize.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\n\nimport { en } from '@payloadcms/translations/languages/en'\nimport { deepMergeSimple } from '@payloadcms/translations/utilities'\n\nimport type {\n Config,\n LocalizationConfigWithLabels,\n LocalizationConfigWithNoLabels,\n SanitizedConfig,\n Timezone,\n} from './types.js'\n\nimport { defaultUserCollection } from '../auth/defaultUser.js'\nimport { authRootEndpoints } from '../auth/endpoints/index.js'\nimport { sanitizeCollection } from '../collections/config/sanitize.js'\nimport { migrationsCollection } from '../database/migrations/migrationsCollection.js'\nimport { DuplicateCollection, InvalidConfiguration } from '../errors/index.js'\nimport { defaultTimezones } from '../fields/baseFields/timezone/defaultTimezones.js'\nimport { addFolderCollections } from '../folders/addFolderCollections.js'\nimport { sanitizeGlobal } from '../globals/config/sanitize.js'\nimport {\n baseBlockFields,\n type CollectionSlug,\n formatLabels,\n type GlobalSlug,\n sanitizeFields,\n} from '../index.js'\nimport {\n getLockedDocumentsCollection,\n lockedDocumentsCollectionSlug,\n} from '../locked-documents/config.js'\nimport { getPreferencesCollection, preferencesCollectionSlug } from '../preferences/config.js'\nimport { getQueryPresetsConfig, queryPresetsCollectionSlug } from '../query-presets/config.js'\nimport { getDefaultJobsCollection, jobsCollectionSlug } from '../queues/config/index.js'\nimport { flattenBlock } from '../utilities/flattenAllFields.js'\nimport { getSchedulePublishTask } from '../versions/schedule/job.js'\nimport { addDefaultsToConfig } from './defaults.js'\nimport { setupOrderable } from './orderable/index.js'\n\nconst sanitizeAdminConfig = (configToSanitize: Config): Partial<SanitizedConfig> => {\n const sanitizedConfig = { ...configToSanitize }\n\n if (configToSanitize?.compatibility?.allowLocalizedWithinLocalized) {\n process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized = 'true'\n }\n\n // default logging level will be 'error' if not provided\n sanitizedConfig.loggingLevels = {\n Forbidden: 'info',\n Locked: 'info',\n MissingFile: 'info',\n NotFound: 'info',\n ValidationError: 'info',\n ...(sanitizedConfig.loggingLevels || {}),\n }\n\n // add default user collection if none provided\n if (!sanitizedConfig?.admin?.user) {\n const firstCollectionWithAuth = sanitizedConfig.collections!.find(({ auth }) => Boolean(auth))\n\n if (firstCollectionWithAuth) {\n sanitizedConfig.admin!.user = firstCollectionWithAuth.slug\n } else {\n sanitizedConfig.admin!.user = defaultUserCollection.slug\n sanitizedConfig.collections!.push(defaultUserCollection)\n }\n }\n\n const userCollection = sanitizedConfig.collections!.find(\n ({ slug }) => slug === sanitizedConfig.admin!.user,\n )\n\n if (!userCollection || !userCollection.auth) {\n throw new InvalidConfiguration(\n `${sanitizedConfig.admin!.user} is not a valid admin user collection`,\n )\n }\n\n if (sanitizedConfig?.admin?.timezones) {\n if (typeof sanitizedConfig?.admin?.timezones?.supportedTimezones === 'function') {\n sanitizedConfig.admin.timezones.supportedTimezones =\n sanitizedConfig.admin.timezones.supportedTimezones({ defaultTimezones })\n }\n\n if (!sanitizedConfig?.admin?.timezones?.supportedTimezones) {\n sanitizedConfig.admin.timezones.supportedTimezones = defaultTimezones\n }\n } else {\n sanitizedConfig.admin!.timezones = {\n supportedTimezones: defaultTimezones,\n }\n }\n // Timezones supported by the Intl API\n const _internalSupportedTimezones = Intl.supportedValuesOf('timeZone')\n\n // We're casting here because it's already been sanitised above but TS still thinks it could be a function\n ;(sanitizedConfig.admin!.timezones.supportedTimezones as Timezone[]).forEach((timezone) => {\n if (!_internalSupportedTimezones.includes(timezone.value)) {\n throw new InvalidConfiguration(\n `Timezone ${timezone.value} is not supported by the current runtime via the Intl API.`,\n )\n }\n })\n\n return sanitizedConfig as unknown as Partial<SanitizedConfig>\n}\n\nexport const sanitizeConfig = async (incomingConfig: Config): Promise<SanitizedConfig> => {\n const configWithDefaults = addDefaultsToConfig(incomingConfig)\n\n const config: Partial<SanitizedConfig> = sanitizeAdminConfig(configWithDefaults)\n\n // Add orderable fields\n setupOrderable(config as SanitizedConfig)\n\n if (!config.endpoints) {\n config.endpoints = []\n }\n\n for (const endpoint of authRootEndpoints) {\n config.endpoints.push(endpoint)\n }\n\n if (config.localization && config.localization.locales?.length > 0) {\n // clone localization config so to not break everything\n const firstLocale = config.localization.locales[0]\n if (typeof firstLocale === 'string') {\n config.localization.localeCodes = [\n ...(config.localization as unknown as LocalizationConfigWithNoLabels).locales,\n ]\n\n // is string[], so convert to Locale[]\n config.localization.locales = (\n config.localization as unknown as LocalizationConfigWithNoLabels\n ).locales.map((locale) => ({\n code: locale,\n label: locale,\n rtl: false,\n toString: () => locale,\n }))\n } else {\n // is Locale[], so convert to string[] for localeCodes\n config.localization.localeCodes = config.localization.locales.map((locale) => locale.code)\n\n config.localization.locales = (\n config.localization as LocalizationConfigWithLabels\n ).locales.map((locale) => ({\n ...locale,\n toString: () => locale.code,\n }))\n }\n\n // Default fallback to true if not provided\n config.localization.fallback = config.localization?.fallback ?? true\n }\n\n const i18nConfig: SanitizedConfig['i18n'] = {\n fallbackLanguage: 'en',\n supportedLanguages: {\n en,\n },\n translations: {},\n }\n\n if (incomingConfig?.i18n) {\n i18nConfig.supportedLanguages =\n incomingConfig.i18n?.supportedLanguages || i18nConfig.supportedLanguages\n\n const supportedLangKeys = <AcceptedLanguages[]>Object.keys(i18nConfig.supportedLanguages)\n const fallbackLang = incomingConfig.i18n?.fallbackLanguage || i18nConfig.fallbackLanguage\n\n i18nConfig.fallbackLanguage = supportedLangKeys.includes(fallbackLang)\n ? fallbackLang\n : supportedLangKeys[0]!\n i18nConfig.translations =\n (incomingConfig.i18n?.translations as SanitizedConfig['i18n']['translations']) ||\n i18nConfig.translations\n }\n\n config.i18n = i18nConfig\n\n const richTextSanitizationPromises: Array<(config: SanitizedConfig) => Promise<void>> = []\n\n const schedulePublishCollections: CollectionSlug[] = []\n\n const queryPresetsCollections: CollectionSlug[] = []\n\n const schedulePublishGlobals: GlobalSlug[] = []\n\n const collectionSlugs = new Set<CollectionSlug>()\n\n await addFolderCollections(config as unknown as Config)\n\n const validRelationships = [\n ...(config.collections?.map((c) => c.slug) ?? []),\n jobsCollectionSlug,\n lockedDocumentsCollectionSlug,\n preferencesCollectionSlug,\n ]\n\n /**\n * Blocks sanitization needs to happen before collections, as collection/global join field sanitization needs config.blocks\n * to be populated with the sanitized blocks\n */\n config.blocks = []\n\n if (incomingConfig.blocks?.length) {\n for (const block of incomingConfig.blocks) {\n const sanitizedBlock = block\n\n if (sanitizedBlock._sanitized === true) {\n continue\n }\n sanitizedBlock._sanitized = true\n\n sanitizedBlock.fields = sanitizedBlock.fields.concat(baseBlockFields)\n\n sanitizedBlock.labels = !sanitizedBlock.labels\n ? formatLabels(sanitizedBlock.slug)\n : sanitizedBlock.labels\n\n sanitizedBlock.fields = await sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: sanitizedBlock.fields,\n parentIsLocalized: false,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n const flattenedSanitizedBlock = flattenBlock({ block })\n\n config.blocks.push(flattenedSanitizedBlock)\n }\n }\n\n for (let i = 0; i < config.collections!.length; i++) {\n if (collectionSlugs.has(config.collections![i]!.slug)) {\n throw new DuplicateCollection('slug', config.collections![i]!.slug)\n }\n\n collectionSlugs.add(config.collections![i]!.slug)\n\n const draftsConfig = config.collections![i]?.versions?.drafts\n\n if (typeof draftsConfig === 'object' && draftsConfig.schedulePublish) {\n schedulePublishCollections.push(config.collections![i]!.slug)\n }\n\n if (config.collections![i]!.enableQueryPresets) {\n queryPresetsCollections.push(config.collections![i]!.slug)\n\n if (!validRelationships.includes(queryPresetsCollectionSlug)) {\n validRelationships.push(queryPresetsCollectionSlug)\n }\n }\n\n config.collections![i] = await sanitizeCollection(\n config as unknown as Config,\n config.collections![i]!,\n richTextSanitizationPromises,\n validRelationships,\n )\n }\n\n if (config.globals!.length > 0) {\n for (let i = 0; i < config.globals!.length; i++) {\n const draftsConfig = config.globals![i]?.versions?.drafts\n\n if (typeof draftsConfig === 'object' && draftsConfig.schedulePublish) {\n schedulePublishGlobals.push(config.globals![i]!.slug)\n }\n\n config.globals![i] = await sanitizeGlobal(\n config as unknown as Config,\n config.globals![i]!,\n richTextSanitizationPromises,\n validRelationships,\n )\n }\n }\n\n if (schedulePublishCollections.length > 0 || schedulePublishGlobals.length > 0) {\n if (!Array.isArray(configWithDefaults.jobs?.tasks)) {\n configWithDefaults.jobs!.tasks = []\n }\n\n configWithDefaults.jobs!.tasks.push(\n getSchedulePublishTask({\n adminUserSlug: config.admin!.user,\n collections: schedulePublishCollections,\n globals: schedulePublishGlobals,\n }),\n )\n }\n\n // Need to add default jobs collection before locked documents collections\n if (\n (Array.isArray(configWithDefaults.jobs?.tasks) && configWithDefaults.jobs?.tasks?.length) ||\n (Array.isArray(configWithDefaults.jobs?.workflows) &&\n configWithDefaults.jobs?.workflows?.length)\n ) {\n let defaultJobsCollection = getDefaultJobsCollection(config as unknown as Config)\n\n if (defaultJobsCollection) {\n if (typeof configWithDefaults.jobs.jobsCollectionOverrides === 'function') {\n defaultJobsCollection = configWithDefaults.jobs.jobsCollectionOverrides({\n defaultJobsCollection,\n })\n\n const hooks = defaultJobsCollection?.hooks\n // @todo - delete this check in 4.0\n if (hooks && config?.jobs?.runHooks !== true) {\n for (const hook of Object.keys(hooks)) {\n const defaultAmount = hook === 'afterRead' || hook === 'beforeChange' ? 1 : 0\n if (hooks[hook as keyof typeof hooks]!.length > defaultAmount) {\n // eslint-disable-next-line no-console\n console.warn(\n `The jobsCollectionOverrides function is returning a collection with an additional ${hook} hook defined. These hooks will not run unless the jobs.runHooks option is set to true. Setting this option to true will negatively impact performance.`,\n )\n break\n }\n }\n }\n }\n const sanitizedJobsCollection = await sanitizeCollection(\n config as unknown as Config,\n defaultJobsCollection,\n richTextSanitizationPromises,\n validRelationships,\n )\n\n configWithDefaults.collections!.push(sanitizedJobsCollection)\n }\n }\n\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getLockedDocumentsCollection(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getPreferencesCollection(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n migrationsCollection,\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n if (queryPresetsCollections.length > 0) {\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getQueryPresetsConfig(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n }\n\n if (config.serverURL !== '') {\n config.csrf!.push(config.serverURL!)\n }\n\n const uploadAdapters = new Set<string>()\n // interact with all collections\n for (const collection of config.collections!) {\n // deduped upload adapters\n if (collection.upload?.adapter) {\n uploadAdapters.add(collection.upload.adapter)\n }\n }\n\n if (!config.upload) {\n config.upload = { adapters: [] }\n }\n\n config.upload.adapters = Array.from(\n new Set(config.collections!.map((c) => c.upload?.adapter).filter(Boolean) as string[]),\n )\n\n // Pass through the email config as is so adapters don't break\n if (incomingConfig.email) {\n config.email = incomingConfig.email\n }\n\n /*\n Execute richText sanitization\n */\n if (typeof incomingConfig.editor === 'function') {\n config.editor = await incomingConfig.editor({\n config: config as SanitizedConfig,\n isRoot: true,\n parentIsLocalized: false,\n })\n if (config.editor.i18n && Object.keys(config.editor.i18n).length >= 0) {\n config.i18n.translations = deepMergeSimple(config.i18n.translations, config.editor.i18n)\n }\n }\n\n const promises: Promise<void>[] = []\n\n for (const sanitizeFunction of richTextSanitizationPromises) {\n promises.push(sanitizeFunction(config as SanitizedConfig))\n }\n\n await Promise.all(promises)\n\n return config as SanitizedConfig\n}\n"],"names":["en","deepMergeSimple","defaultUserCollection","authRootEndpoints","sanitizeCollection","migrationsCollection","DuplicateCollection","InvalidConfiguration","defaultTimezones","addFolderCollections","sanitizeGlobal","baseBlockFields","formatLabels","sanitizeFields","getLockedDocumentsCollection","lockedDocumentsCollectionSlug","getPreferencesCollection","preferencesCollectionSlug","getQueryPresetsConfig","queryPresetsCollectionSlug","getDefaultJobsCollection","jobsCollectionSlug","flattenBlock","getSchedulePublishTask","addDefaultsToConfig","setupOrderable","sanitizeAdminConfig","configToSanitize","sanitizedConfig","compatibility","allowLocalizedWithinLocalized","process","env","NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized","loggingLevels","Forbidden","Locked","MissingFile","NotFound","ValidationError","admin","user","firstCollectionWithAuth","collections","find","auth","Boolean","slug","push","userCollection","timezones","supportedTimezones","_internalSupportedTimezones","Intl","supportedValuesOf","forEach","timezone","includes","value","sanitizeConfig","incomingConfig","configWithDefaults","config","endpoints","endpoint","localization","locales","length","firstLocale","localeCodes","map","locale","code","label","rtl","toString","fallback","i18nConfig","fallbackLanguage","supportedLanguages","translations","i18n","supportedLangKeys","Object","keys","fallbackLang","richTextSanitizationPromises","schedulePublishCollections","queryPresetsCollections","schedulePublishGlobals","collectionSlugs","Set","validRelationships","c","blocks","block","sanitizedBlock","_sanitized","fields","concat","labels","existingFieldNames","parentIsLocalized","flattenedSanitizedBlock","i","has","add","draftsConfig","versions","drafts","schedulePublish","enableQueryPresets","globals","Array","isArray","jobs","tasks","adminUserSlug","workflows","defaultJobsCollection","jobsCollectionOverrides","hooks","runHooks","hook","defaultAmount","console","warn","sanitizedJobsCollection","serverURL","csrf","uploadAdapters","collection","upload","adapter","adapters","from","filter","email","editor","isRoot","promises","sanitizeFunction","Promise","all"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateQueryPaths.d.ts","sourceRoot":"","sources":["../../../src/database/queryValidation/validateQueryPaths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateQueryPaths.d.ts","sourceRoot":"","sources":["../../../src/database/queryValidation/validateQueryPaths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,KAAK,EAAY,cAAc,EAAE,KAAK,EAAc,MAAM,sBAAsB,CAAA;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD,KAAK,IAAI,GAAG;IACV,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC3B,cAAc,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAA;IAChC,KAAK,EAAE,KAAK,CAAA;CACb,GAAG,CACA;IACE,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,YAAY,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;CACjC,GACD;IACE,gBAAgB,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IACpC,YAAY,EAAE,qBAAqB,CAAA;CACpC,CACJ,CAAA;AAED,wBAAsB,kBAAkB,CAAC,EACvC,gBAAgB,EAChB,MAAW,EACX,YAAY,EACZ,cAAc,EACd,QAGC,EACD,eAAe,EACf,GAAG,EACH,aAAa,EACb,KAAK,GACN,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/database/queryValidation/validateQueryPaths.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/database/queryValidation/validateQueryPaths.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { FlattenedField } from '../../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../globals/config/types.js'\nimport type { Operator, PayloadRequest, Where, WhereField } from '../../types/index.js'\nimport type { EntityPolicies } from './types.js'\n\nimport { QueryError } from '../../errors/QueryError.js'\nimport { validOperatorSet } from '../../types/constants.js'\nimport { validateSearchParam } from './validateSearchParams.js'\n\ntype Args = {\n errors?: { path: string }[]\n overrideAccess: boolean\n policies?: EntityPolicies\n polymorphicJoin?: boolean\n req: PayloadRequest\n versionFields?: FlattenedField[]\n where: Where\n} & (\n | {\n collectionConfig: SanitizedCollectionConfig\n globalConfig?: never | undefined\n }\n | {\n collectionConfig?: never | undefined\n globalConfig: SanitizedGlobalConfig\n }\n)\n\nexport async function validateQueryPaths({\n collectionConfig,\n errors = [],\n globalConfig,\n overrideAccess,\n policies = {\n collections: {},\n globals: {},\n },\n polymorphicJoin,\n req,\n versionFields,\n where,\n}: Args): Promise<void> {\n const fields = versionFields || (globalConfig || collectionConfig).flattenedFields\n\n if (typeof where === 'object') {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n const promises: Promise<void>[] = []\n for (const path in where) {\n const constraint = where[path]\n\n if ((path === 'and' || path === 'or') && Array.isArray(constraint)) {\n for (const item of constraint) {\n if (collectionConfig) {\n promises.push(\n validateQueryPaths({\n collectionConfig,\n errors,\n overrideAccess,\n policies,\n polymorphicJoin,\n req,\n versionFields,\n where: item,\n }),\n )\n } else {\n promises.push(\n validateQueryPaths({\n errors,\n globalConfig,\n overrideAccess,\n policies,\n polymorphicJoin,\n req,\n versionFields,\n where: item,\n }),\n )\n }\n }\n } else if (!Array.isArray(constraint)) {\n for (const operator in constraint) {\n const val = constraint[operator as keyof typeof constraint]\n if (validOperatorSet.has(operator as Operator)) {\n promises.push(\n validateSearchParam({\n collectionConfig,\n constraint: where as WhereField,\n errors,\n fields,\n globalConfig,\n operator,\n overrideAccess,\n path,\n policies,\n polymorphicJoin,\n req,\n val,\n versionFields,\n }),\n )\n }\n }\n }\n }\n\n await Promise.all(promises)\n if (errors.length > 0) {\n throw new QueryError(errors)\n }\n }\n}\n"],"names":["QueryError","validOperatorSet","validateSearchParam","validateQueryPaths","collectionConfig","errors","globalConfig","overrideAccess","policies","collections","globals","polymorphicJoin","req","versionFields","where","fields","flattenedFields","promises","path","constraint","Array","isArray","item","push","operator","val","has","Promise","all","length"],"mappings":"AAMA,SAASA,UAAU,QAAQ,6BAA4B;AACvD,SAASC,gBAAgB,QAAQ,2BAA0B;AAC3D,SAASC,mBAAmB,QAAQ,4BAA2B;AAqB/D,OAAO,eAAeC,mBAAmB,EACvCC,gBAAgB,EAChBC,SAAS,EAAE,EACXC,YAAY,EACZC,cAAc,EACdC,WAAW;IACTC,aAAa,CAAC;IACdC,SAAS,CAAC;AACZ,CAAC,EACDC,eAAe,EACfC,GAAG,EACHC,aAAa,EACbC,KAAK,EACA;IACL,MAAMC,SAASF,iBAAiB,AAACP,CAAAA,gBAAgBF,gBAAe,EAAGY,eAAe;IAElF,IAAI,OAAOF,UAAU,UAAU;QAC7B,uEAAuE;QACvE,MAAMG,WAA4B,EAAE;QACpC,IAAK,MAAMC,QAAQJ,MAAO;YACxB,MAAMK,aAAaL,KAAK,CAACI,KAAK;YAE9B,IAAI,AAACA,CAAAA,SAAS,SAASA,SAAS,IAAG,KAAME,MAAMC,OAAO,CAACF,aAAa;gBAClE,KAAK,MAAMG,QAAQH,WAAY;oBAC7B,IAAIf,kBAAkB;wBACpBa,SAASM,IAAI,CACXpB,mBAAmB;4BACjBC;4BACAC;4BACAE;4BACAC;4BACAG;4BACAC;4BACAC;4BACAC,OAAOQ;wBACT;oBAEJ,OAAO;wBACLL,SAASM,IAAI,CACXpB,mBAAmB;4BACjBE;4BACAC;4BACAC;4BACAC;4BACAG;4BACAC;4BACAC;4BACAC,OAAOQ;wBACT;oBAEJ;gBACF;YACF,OAAO,IAAI,CAACF,MAAMC,OAAO,CAACF,aAAa;gBACrC,IAAK,MAAMK,YAAYL,WAAY;oBACjC,MAAMM,MAAMN,UAAU,CAACK,SAAoC;oBAC3D,IAAIvB,iBAAiByB,GAAG,CAACF,WAAuB;wBAC9CP,SAASM,IAAI,CACXrB,oBAAoB;4BAClBE;4BACAe,YAAYL;4BACZT;4BACAU;4BACAT;4BACAkB;4BACAjB;4BACAW;4BACAV;4BACAG;4BACAC;4BACAa;4BACAZ;wBACF;oBAEJ;gBACF;YACF;QACF;QAEA,MAAMc,QAAQC,GAAG,CAACX;QAClB,IAAIZ,OAAOwB,MAAM,GAAG,GAAG;YACrB,MAAM,IAAI7B,WAAWK;QACvB;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateSearchParams.d.ts","sourceRoot":"","sources":["../../../src/database/queryValidation/validateSearchParams.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateSearchParams.d.ts","sourceRoot":"","sources":["../../../src/database/queryValidation/validateSearchParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,YAAY,CAAA;AAQ7D,KAAK,IAAI,GAAG;IACV,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,OAAO,CAAA;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,cAAc,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,GAAG,EAAE,cAAc,CAAA;IACnB,GAAG,EAAE,OAAO,CAAA;IACZ,aAAa,CAAC,EAAE,cAAc,EAAE,CAAA;CACjC,CAAA;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,IAAI,EAAE,YAAY,EAClB,QAAQ,EACR,eAAe,EACf,GAAG,EACH,GAAG,EACH,aAAa,GACd,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA6KtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/database/queryValidation/validateSearchParams.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { FlattenedField } from '../../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../globals/config/types.js'\nimport type { PayloadRequest, WhereField } from '../../types/index.js'\nimport type { EntityPolicies, PathToQuery } from './types.js'\n\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { getEntityPolicies } from '../../utilities/getEntityPolicies.js'\nimport isolateObjectProperty from '../../utilities/isolateObjectProperty.js'\nimport { getLocalizedPaths } from '../getLocalizedPaths.js'\nimport { validateQueryPaths } from './validateQueryPaths.js'\n\ntype Args = {\n collectionConfig?: SanitizedCollectionConfig\n constraint: WhereField\n errors: { path: string }[]\n fields: FlattenedField[]\n globalConfig?: SanitizedGlobalConfig\n operator: string\n overrideAccess: boolean\n parentIsLocalized?: boolean\n path: string\n policies: EntityPolicies\n polymorphicJoin?: boolean\n req: PayloadRequest\n val: unknown\n versionFields?: FlattenedField[]\n}\n\n/**\n * Validate the Payload key / value / operator\n */\nexport async function validateSearchParam({\n collectionConfig,\n constraint,\n errors,\n fields,\n globalConfig,\n operator,\n overrideAccess,\n parentIsLocalized,\n path: incomingPath,\n policies,\n polymorphicJoin,\n req,\n val,\n versionFields,\n}: Args): Promise<void> {\n // Replace GraphQL nested field double underscore formatting\n let sanitizedPath\n if (incomingPath === '_id') {\n sanitizedPath = 'id'\n } else {\n sanitizedPath = incomingPath.replace(/__/g, '.')\n }\n let paths: PathToQuery[] = []\n const { slug } = (collectionConfig || globalConfig)!\n\n const blockPolicies = {}\n\n if (globalConfig && !policies.globals![slug]) {\n policies.globals![slug] = await getEntityPolicies({\n type: 'global',\n blockPolicies,\n entity: globalConfig,\n operations: ['read'],\n req,\n })\n }\n\n if (sanitizedPath !== 'id') {\n paths = getLocalizedPaths({\n collectionSlug: collectionConfig?.slug,\n fields,\n globalSlug: globalConfig?.slug,\n incomingPath: sanitizedPath,\n locale: req.locale!,\n overrideAccess,\n parentIsLocalized,\n payload: req.payload,\n })\n }\n const promises: Promise<void>[] = []\n\n // Sanitize relation.otherRelation.id to relation.otherRelation\n if (paths.at(-1)?.path === 'id') {\n const previousField = paths.at(-2)?.field\n if (\n previousField &&\n (previousField.type === 'relationship' || previousField.type === 'upload') &&\n typeof previousField.relationTo === 'string'\n ) {\n paths.pop()\n }\n }\n\n promises.push(\n ...paths.map(async ({ collectionSlug, field, invalid, path }, i) => {\n if (invalid) {\n if (!polymorphicJoin) {\n errors.push({ path })\n }\n\n return\n }\n\n if ('virtual' in field && field.virtual) {\n if (field.virtual === true) {\n errors.push({ path })\n } else {\n constraint[`${field.virtual}`] = constraint[path]\n delete constraint[path]\n }\n }\n\n if (polymorphicJoin && path === 'relationTo') {\n return\n }\n\n if (!overrideAccess && fieldAffectsData(field)) {\n if (collectionSlug) {\n if (!policies.collections![collectionSlug]) {\n policies.collections![collectionSlug] = await getEntityPolicies({\n type: 'collection',\n blockPolicies,\n entity: req.payload.collections[collectionSlug]!.config,\n operations: ['read'],\n req: isolateObjectProperty(req, 'transactionID'),\n })\n }\n\n if (\n ['hash', 'salt'].includes(incomingPath) &&\n collectionConfig!.auth &&\n !collectionConfig!.auth?.disableLocalStrategy\n ) {\n errors.push({ path: incomingPath })\n }\n }\n let fieldPath = path\n // remove locale from end of path\n if (path.endsWith(`.${req.locale}`)) {\n fieldPath = path.slice(0, -(req.locale!.length + 1))\n }\n // remove \".value\" from ends of polymorphic relationship paths\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(field.relationTo)\n ) {\n fieldPath = fieldPath.replace('.value', '')\n }\n\n const entityType: 'collections' | 'globals' = globalConfig ? 'globals' : 'collections'\n const entitySlug = collectionSlug || globalConfig!.slug\n const segments = fieldPath.split('.')\n\n let fieldAccess\n\n if (versionFields) {\n fieldAccess = policies[entityType]![entitySlug]!\n\n if (segments[0] === 'parent' || segments[0] === 'version') {\n segments.shift()\n }\n } else {\n fieldAccess = policies[entityType]![entitySlug]!.fields\n }\n\n segments.forEach((segment) => {\n if (fieldAccess[segment]) {\n if ('fields' in fieldAccess[segment]) {\n fieldAccess = fieldAccess[segment].fields\n } else if (\n 'blocks' in fieldAccess[segment] ||\n 'blockReferences' in fieldAccess[segment]\n ) {\n fieldAccess = fieldAccess[segment]\n } else {\n fieldAccess = fieldAccess[segment]\n }\n }\n })\n\n if (!fieldAccess?.read?.permission) {\n errors.push({ path: fieldPath })\n }\n }\n\n if (i > 1) {\n // Remove top collection and reverse array\n // to work backwards from top\n const pathsToQuery = paths.slice(1).reverse()\n\n pathsToQuery.forEach(\n ({ collectionSlug: pathCollectionSlug, path: subPath }, pathToQueryIndex) => {\n // On the \"deepest\" collection,\n // validate query of the relationship\n if (pathToQueryIndex === 0) {\n promises.push(\n validateQueryPaths({\n collectionConfig: req.payload.collections[pathCollectionSlug!]!.config,\n errors,\n globalConfig: undefined,\n overrideAccess,\n policies,\n req,\n where: {\n [subPath]: {\n [operator]: val,\n },\n },\n }),\n )\n }\n },\n )\n }\n }),\n )\n await Promise.all(promises)\n}\n"],"names":["fieldAffectsData","getEntityPolicies","isolateObjectProperty","getLocalizedPaths","validateQueryPaths","validateSearchParam","collectionConfig","constraint","errors","fields","globalConfig","operator","overrideAccess","parentIsLocalized","path","incomingPath","policies","polymorphicJoin","req","val","versionFields","sanitizedPath","replace","paths","slug","blockPolicies","globals","type","entity","operations","collectionSlug","globalSlug","locale","payload","promises","at","previousField","field","relationTo","pop","push","map","invalid","i","virtual","collections","config","includes","auth","disableLocalStrategy","fieldPath","endsWith","slice","length","Array","isArray","entityType","entitySlug","segments","split","fieldAccess","shift","forEach","segment","read","permission","pathsToQuery","reverse","pathCollectionSlug","subPath","pathToQueryIndex","undefined","where","Promise","all"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/database/queryValidation/validateSearchParams.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { FlattenedField } from '../../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../globals/config/types.js'\nimport type { PayloadRequest, WhereField } from '../../types/index.js'\nimport type { EntityPolicies, PathToQuery } from './types.js'\n\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { getEntityPolicies } from '../../utilities/getEntityPolicies.js'\nimport isolateObjectProperty from '../../utilities/isolateObjectProperty.js'\nimport { getLocalizedPaths } from '../getLocalizedPaths.js'\nimport { validateQueryPaths } from './validateQueryPaths.js'\n\ntype Args = {\n collectionConfig?: SanitizedCollectionConfig\n constraint: WhereField\n errors: { path: string }[]\n fields: FlattenedField[]\n globalConfig?: SanitizedGlobalConfig\n operator: string\n overrideAccess: boolean\n parentIsLocalized?: boolean\n path: string\n policies: EntityPolicies\n polymorphicJoin?: boolean\n req: PayloadRequest\n val: unknown\n versionFields?: FlattenedField[]\n}\n\n/**\n * Validate the Payload key / value / operator\n */\nexport async function validateSearchParam({\n collectionConfig,\n constraint,\n errors,\n fields,\n globalConfig,\n operator,\n overrideAccess,\n parentIsLocalized,\n path: incomingPath,\n policies,\n polymorphicJoin,\n req,\n val,\n versionFields,\n}: Args): Promise<void> {\n // Replace GraphQL nested field double underscore formatting\n let sanitizedPath\n if (incomingPath === '_id') {\n sanitizedPath = 'id'\n } else {\n sanitizedPath = incomingPath.replace(/__/g, '.')\n }\n let paths: PathToQuery[] = []\n const { slug } = (collectionConfig || globalConfig)!\n\n const blockPolicies = {}\n\n if (globalConfig && !policies.globals![slug]) {\n policies.globals![slug] = await getEntityPolicies({\n type: 'global',\n blockPolicies,\n entity: globalConfig,\n operations: ['read'],\n req,\n })\n }\n\n if (sanitizedPath !== 'id') {\n paths = getLocalizedPaths({\n collectionSlug: collectionConfig?.slug,\n fields,\n globalSlug: globalConfig?.slug,\n incomingPath: sanitizedPath,\n locale: req.locale!,\n overrideAccess,\n parentIsLocalized,\n payload: req.payload,\n })\n }\n const promises: Promise<void>[] = []\n\n // Sanitize relation.otherRelation.id to relation.otherRelation\n if (paths.at(-1)?.path === 'id') {\n const previousField = paths.at(-2)?.field\n if (\n previousField &&\n (previousField.type === 'relationship' || previousField.type === 'upload') &&\n typeof previousField.relationTo === 'string'\n ) {\n paths.pop()\n }\n }\n\n promises.push(\n ...paths.map(async ({ collectionSlug, field, invalid, path }, i) => {\n if (invalid) {\n if (!polymorphicJoin) {\n errors.push({ path })\n }\n\n return\n }\n\n if ('virtual' in field && field.virtual) {\n if (field.virtual === true) {\n errors.push({ path })\n } else {\n constraint[`${field.virtual}` as keyof WhereField] = constraint[path as keyof WhereField]\n delete constraint[path as keyof WhereField]\n }\n }\n\n if (polymorphicJoin && path === 'relationTo') {\n return\n }\n\n if (!overrideAccess && fieldAffectsData(field)) {\n if (collectionSlug) {\n if (!policies.collections![collectionSlug]) {\n policies.collections![collectionSlug] = await getEntityPolicies({\n type: 'collection',\n blockPolicies,\n entity: req.payload.collections[collectionSlug]!.config,\n operations: ['read'],\n req: isolateObjectProperty(req, 'transactionID'),\n })\n }\n\n if (\n ['hash', 'salt'].includes(incomingPath) &&\n collectionConfig!.auth &&\n !collectionConfig!.auth?.disableLocalStrategy\n ) {\n errors.push({ path: incomingPath })\n }\n }\n let fieldPath = path\n // remove locale from end of path\n if (path.endsWith(`.${req.locale}`)) {\n fieldPath = path.slice(0, -(req.locale!.length + 1))\n }\n // remove \".value\" from ends of polymorphic relationship paths\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(field.relationTo)\n ) {\n fieldPath = fieldPath.replace('.value', '')\n }\n\n const entityType: 'collections' | 'globals' = globalConfig ? 'globals' : 'collections'\n const entitySlug = collectionSlug || globalConfig!.slug\n const segments = fieldPath.split('.')\n\n let fieldAccess: any\n\n if (versionFields) {\n fieldAccess = policies[entityType]![entitySlug]!\n\n if (segments[0] === 'parent' || segments[0] === 'version') {\n segments.shift()\n }\n } else {\n fieldAccess = policies[entityType]![entitySlug]!.fields\n }\n\n segments.forEach((segment) => {\n if (fieldAccess[segment]) {\n if ('fields' in fieldAccess[segment]) {\n fieldAccess = fieldAccess[segment].fields\n } else if (\n 'blocks' in fieldAccess[segment] ||\n 'blockReferences' in fieldAccess[segment]\n ) {\n fieldAccess = fieldAccess[segment]\n } else {\n fieldAccess = fieldAccess[segment]\n }\n }\n })\n\n if (!fieldAccess?.read?.permission) {\n errors.push({ path: fieldPath })\n }\n }\n\n if (i > 1) {\n // Remove top collection and reverse array\n // to work backwards from top\n const pathsToQuery = paths.slice(1).reverse()\n\n pathsToQuery.forEach(\n ({ collectionSlug: pathCollectionSlug, path: subPath }, pathToQueryIndex) => {\n // On the \"deepest\" collection,\n // validate query of the relationship\n if (pathToQueryIndex === 0) {\n promises.push(\n validateQueryPaths({\n collectionConfig: req.payload.collections[pathCollectionSlug!]!.config,\n errors,\n globalConfig: undefined,\n overrideAccess,\n policies,\n req,\n where: {\n [subPath]: {\n [operator]: val,\n },\n },\n }),\n )\n }\n },\n )\n }\n }),\n )\n await Promise.all(promises)\n}\n"],"names":["fieldAffectsData","getEntityPolicies","isolateObjectProperty","getLocalizedPaths","validateQueryPaths","validateSearchParam","collectionConfig","constraint","errors","fields","globalConfig","operator","overrideAccess","parentIsLocalized","path","incomingPath","policies","polymorphicJoin","req","val","versionFields","sanitizedPath","replace","paths","slug","blockPolicies","globals","type","entity","operations","collectionSlug","globalSlug","locale","payload","promises","at","previousField","field","relationTo","pop","push","map","invalid","i","virtual","collections","config","includes","auth","disableLocalStrategy","fieldPath","endsWith","slice","length","Array","isArray","entityType","entitySlug","segments","split","fieldAccess","shift","forEach","segment","read","permission","pathsToQuery","reverse","pathCollectionSlug","subPath","pathToQueryIndex","undefined","where","Promise","all"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeJoinQuery.d.ts","sourceRoot":"","sources":["../../src/database/sanitizeJoinQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sanitizeJoinQuery.d.ts","sourceRoot":"","sources":["../../src/database/sanitizeJoinQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAiB,MAAM,gCAAgC,CAAA;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAOlE,KAAK,IAAI,GAAG;IACV,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAqED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,kEAK3B,IAAI;;;;;;;;GA+CN,CAAA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// @ts-strict-ignore
|
|
2
1
|
import executeAccess from '../auth/executeAccess.js';
|
|
3
2
|
import { QueryError } from '../errors/QueryError.js';
|
|
4
3
|
import { combineQueries } from './combineQueries.js';
|
|
5
4
|
import { validateQueryPaths } from './queryValidation/validateQueryPaths.js';
|
|
6
5
|
const sanitizeJoinFieldQuery = async ({ collectionSlug, errors, join, joinsQuery, overrideAccess, promises, req })=>{
|
|
7
6
|
const { joinPath } = join;
|
|
7
|
+
// TODO: fix any's in joinsQuery[joinPath]
|
|
8
8
|
if (joinsQuery[joinPath] === false) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
@@ -14,10 +14,12 @@ const sanitizeJoinFieldQuery = async ({ collectionSlug, errors, join, joinsQuery
|
|
|
14
14
|
req
|
|
15
15
|
}, joinCollectionConfig.access.read) : true;
|
|
16
16
|
if (accessResult === false) {
|
|
17
|
+
;
|
|
17
18
|
joinsQuery[joinPath] = false;
|
|
18
19
|
return;
|
|
19
20
|
}
|
|
20
21
|
if (!joinsQuery[joinPath]) {
|
|
22
|
+
;
|
|
21
23
|
joinsQuery[joinPath] = {};
|
|
22
24
|
}
|
|
23
25
|
const joinQuery = joinsQuery[joinPath];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/database/sanitizeJoinQuery.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/database/sanitizeJoinQuery.ts"],"sourcesContent":["import type { SanitizedCollectionConfig, SanitizedJoin } from '../collections/config/types.js'\nimport type { JoinQuery, PayloadRequest } from '../types/index.js'\n\nimport executeAccess from '../auth/executeAccess.js'\nimport { QueryError } from '../errors/QueryError.js'\nimport { combineQueries } from './combineQueries.js'\nimport { validateQueryPaths } from './queryValidation/validateQueryPaths.js'\n\ntype Args = {\n collectionConfig: SanitizedCollectionConfig\n joins?: JoinQuery\n overrideAccess: boolean\n req: PayloadRequest\n}\n\nconst sanitizeJoinFieldQuery = async ({\n collectionSlug,\n errors,\n join,\n joinsQuery,\n overrideAccess,\n promises,\n req,\n}: {\n collectionSlug: string\n errors: { path: string }[]\n join: SanitizedJoin\n joinsQuery: JoinQuery\n overrideAccess: boolean\n promises: Promise<void>[]\n req: PayloadRequest\n}) => {\n const { joinPath } = join\n\n // TODO: fix any's in joinsQuery[joinPath]\n\n if ((joinsQuery as any)[joinPath] === false) {\n return\n }\n\n const joinCollectionConfig = req.payload.collections[collectionSlug]!.config\n\n const accessResult = !overrideAccess\n ? await executeAccess({ disableErrors: true, req }, joinCollectionConfig.access.read)\n : true\n\n if (accessResult === false) {\n ;(joinsQuery as any)[joinPath] = false\n return\n }\n\n if (!(joinsQuery as any)[joinPath]) {\n ;(joinsQuery as any)[joinPath] = {}\n }\n\n const joinQuery = (joinsQuery as any)[joinPath]\n\n if (!joinQuery.where) {\n joinQuery.where = {}\n }\n\n if (join.field.where) {\n joinQuery.where = combineQueries(joinQuery.where, join.field.where)\n }\n\n promises.push(\n validateQueryPaths({\n collectionConfig: joinCollectionConfig,\n errors,\n overrideAccess,\n polymorphicJoin: Array.isArray(join.field.collection),\n req,\n // incoming where input, but we shouldn't validate generated from the access control.\n where: joinQuery.where,\n }),\n )\n\n if (typeof accessResult === 'object') {\n joinQuery.where = combineQueries(joinQuery.where, accessResult)\n }\n}\n\n/**\n * * Validates `where` for each join\n * * Combines the access result for joined collection\n * * Combines the default join's `where`\n */\nexport const sanitizeJoinQuery = async ({\n collectionConfig,\n joins: joinsQuery,\n overrideAccess,\n req,\n}: Args) => {\n if (joinsQuery === false) {\n return false\n }\n\n if (!joinsQuery) {\n joinsQuery = {}\n }\n\n const errors: { path: string }[] = []\n const promises: Promise<void>[] = []\n\n for (const collectionSlug in collectionConfig.joins) {\n for (const join of collectionConfig.joins[collectionSlug]!) {\n await sanitizeJoinFieldQuery({\n collectionSlug,\n errors,\n join,\n joinsQuery,\n overrideAccess,\n promises,\n req,\n })\n }\n }\n\n for (const join of collectionConfig.polymorphicJoins) {\n for (const collectionSlug of join.field.collection) {\n await sanitizeJoinFieldQuery({\n collectionSlug,\n errors,\n join,\n joinsQuery,\n overrideAccess,\n promises,\n req,\n })\n }\n }\n\n await Promise.all(promises)\n\n if (errors.length > 0) {\n throw new QueryError(errors)\n }\n\n return joinsQuery\n}\n"],"names":["executeAccess","QueryError","combineQueries","validateQueryPaths","sanitizeJoinFieldQuery","collectionSlug","errors","join","joinsQuery","overrideAccess","promises","req","joinPath","joinCollectionConfig","payload","collections","config","accessResult","disableErrors","access","read","joinQuery","where","field","push","collectionConfig","polymorphicJoin","Array","isArray","collection","sanitizeJoinQuery","joins","polymorphicJoins","Promise","all","length"],"mappings":"AAGA,OAAOA,mBAAmB,2BAA0B;AACpD,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,kBAAkB,QAAQ,0CAAyC;AAS5E,MAAMC,yBAAyB,OAAO,EACpCC,cAAc,EACdC,MAAM,EACNC,IAAI,EACJC,UAAU,EACVC,cAAc,EACdC,QAAQ,EACRC,GAAG,EASJ;IACC,MAAM,EAAEC,QAAQ,EAAE,GAAGL;IAErB,0CAA0C;IAE1C,IAAI,AAACC,UAAkB,CAACI,SAAS,KAAK,OAAO;QAC3C;IACF;IAEA,MAAMC,uBAAuBF,IAAIG,OAAO,CAACC,WAAW,CAACV,eAAe,CAAEW,MAAM;IAE5E,MAAMC,eAAe,CAACR,iBAClB,MAAMT,cAAc;QAAEkB,eAAe;QAAMP;IAAI,GAAGE,qBAAqBM,MAAM,CAACC,IAAI,IAClF;IAEJ,IAAIH,iBAAiB,OAAO;;QACxBT,UAAkB,CAACI,SAAS,GAAG;QACjC;IACF;IAEA,IAAI,CAAC,AAACJ,UAAkB,CAACI,SAAS,EAAE;;QAChCJ,UAAkB,CAACI,SAAS,GAAG,CAAC;IACpC;IAEA,MAAMS,YAAY,AAACb,UAAkB,CAACI,SAAS;IAE/C,IAAI,CAACS,UAAUC,KAAK,EAAE;QACpBD,UAAUC,KAAK,GAAG,CAAC;IACrB;IAEA,IAAIf,KAAKgB,KAAK,CAACD,KAAK,EAAE;QACpBD,UAAUC,KAAK,GAAGpB,eAAemB,UAAUC,KAAK,EAAEf,KAAKgB,KAAK,CAACD,KAAK;IACpE;IAEAZ,SAASc,IAAI,CACXrB,mBAAmB;QACjBsB,kBAAkBZ;QAClBP;QACAG;QACAiB,iBAAiBC,MAAMC,OAAO,CAACrB,KAAKgB,KAAK,CAACM,UAAU;QACpDlB;QACA,qFAAqF;QACrFW,OAAOD,UAAUC,KAAK;IACxB;IAGF,IAAI,OAAOL,iBAAiB,UAAU;QACpCI,UAAUC,KAAK,GAAGpB,eAAemB,UAAUC,KAAK,EAAEL;IACpD;AACF;AAEA;;;;CAIC,GACD,OAAO,MAAMa,oBAAoB,OAAO,EACtCL,gBAAgB,EAChBM,OAAOvB,UAAU,EACjBC,cAAc,EACdE,GAAG,EACE;IACL,IAAIH,eAAe,OAAO;QACxB,OAAO;IACT;IAEA,IAAI,CAACA,YAAY;QACfA,aAAa,CAAC;IAChB;IAEA,MAAMF,SAA6B,EAAE;IACrC,MAAMI,WAA4B,EAAE;IAEpC,IAAK,MAAML,kBAAkBoB,iBAAiBM,KAAK,CAAE;QACnD,KAAK,MAAMxB,QAAQkB,iBAAiBM,KAAK,CAAC1B,eAAe,CAAG;YAC1D,MAAMD,uBAAuB;gBAC3BC;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;YACF;QACF;IACF;IAEA,KAAK,MAAMJ,QAAQkB,iBAAiBO,gBAAgB,CAAE;QACpD,KAAK,MAAM3B,kBAAkBE,KAAKgB,KAAK,CAACM,UAAU,CAAE;YAClD,MAAMzB,uBAAuB;gBAC3BC;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;YACF;QACF;IACF;IAEA,MAAMsB,QAAQC,GAAG,CAACxB;IAElB,IAAIJ,OAAO6B,MAAM,GAAG,GAAG;QACrB,MAAM,IAAIlC,WAAWK;IACvB;IAEA,OAAOE;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/fields/config/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/fields/config/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAA;AAErE,OAAO,KAAK,EAGV,KAAK,EAGL,WAAW,EACX,WAAW,EACX,KAAK,EACL,SAAS,EAOV,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAKnD,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAKtE,OAAO,EAAE,WAAW,EAAE,CAAA;AAEtB,MAAM,MAAM,yBAAyB,GACjC,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,eAAe,GACf,SAAS,GACT,OAAO,GACP,kBAAkB,GAClB,UAAU,GACV,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,CAAC,CAAA;AAEzE,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,SAAS,CAAC,OAAO,CAAC,EAElB,YAAY,GAAG,WAAW,CAC3B,CAAA;AA+BD,eAAO,MAAM,kBAAkB,gDAK5B;IACD,MAAM,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,GAAG,WAAW,EAgFzC,CAAA;AAED,eAAO,MAAM,iBAAiB,8DAK3B;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WA4QH,CAAA;AAED,eAAO,MAAM,kBAAkB,iEAM5B;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WAAW,EAkCd,CAAA"}
|
|
@@ -126,6 +126,7 @@ export const createClientField = ({ defaultIDType, field: incomingField, i18n, i
|
|
|
126
126
|
}
|
|
127
127
|
break;
|
|
128
128
|
default:
|
|
129
|
+
;
|
|
129
130
|
clientField.admin[adminKey] = incomingField.admin[adminKey];
|
|
130
131
|
}
|
|
131
132
|
}
|
|
@@ -148,6 +149,7 @@ export const createClientField = ({ defaultIDType, field: incomingField, i18n, i
|
|
|
148
149
|
}
|
|
149
150
|
break;
|
|
150
151
|
default:
|
|
152
|
+
;
|
|
151
153
|
clientField[key] = incomingField[key];
|
|
152
154
|
}
|
|
153
155
|
}
|
|
@@ -302,6 +304,7 @@ export const createClientField = ({ defaultIDType, field: incomingField, i18n, i
|
|
|
302
304
|
importMap
|
|
303
305
|
});
|
|
304
306
|
} else if ((key === 'label' || key === 'description') && typeof tabProp === 'function') {
|
|
307
|
+
// @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve
|
|
305
308
|
clientTab[key] = tabProp({
|
|
306
309
|
t: i18n.t
|
|
307
310
|
});
|
|
@@ -325,10 +328,12 @@ export const createClientField = ({ defaultIDType, field: incomingField, i18n, i
|
|
|
325
328
|
}
|
|
326
329
|
break;
|
|
327
330
|
default:
|
|
328
|
-
|
|
331
|
+
;
|
|
332
|
+
clientTab.admin[adminKey] = tab.admin[adminKey];
|
|
329
333
|
}
|
|
330
334
|
}
|
|
331
335
|
} else {
|
|
336
|
+
;
|
|
332
337
|
clientTab[key] = tabProp;
|
|
333
338
|
}
|
|
334
339
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/config/client.ts"],"sourcesContent":["// @ts-strict-ignore\n/* eslint-disable perfectionist/sort-switch-case */\n// Keep perfectionist/sort-switch-case disabled - it incorrectly messes up the ordering of the switch cases, causing it to break\nimport type { I18nClient } from '@payloadcms/translations'\n\nimport type {\n AdminClient,\n ArrayFieldClient,\n Block,\n BlockJSX,\n BlocksFieldClient,\n ClientBlock,\n ClientField,\n Field,\n FieldBase,\n JoinFieldClient,\n LabelsClient,\n RadioFieldClient,\n RowFieldClient,\n SelectFieldClient,\n TabsFieldClient,\n} from '../../fields/config/types.js'\nimport type { Payload } from '../../types/index.js'\n\nimport { getFromImportMap } from '../../bin/generateImportMap/utilities/getFromImportMap.js'\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { flattenTopLevelFields, type ImportMap } from '../../index.js'\n\n// Should not be used - ClientField should be used instead. This is why we don't export ClientField, we don't want people\n// to accidentally use it instead of ClientField and get confused\n\nexport { ClientField }\n\nexport type ServerOnlyFieldProperties =\n | 'dbName' // can be a function\n | 'editor' // This is a `richText` only property\n | 'enumName' // can be a function\n | 'filterOptions' // This is a `relationship`, `upload`, and `select` only property\n | 'graphQL'\n | 'label'\n | 'typescriptSchema'\n | 'validate'\n | keyof Pick<FieldBase, 'access' | 'custom' | 'defaultValue' | 'hooks'>\n\nexport type ServerOnlyFieldAdminProperties = keyof Pick<\n FieldBase['admin'],\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n 'components' | 'condition'\n>\n\nconst serverOnlyFieldProperties: Partial<ServerOnlyFieldProperties>[] = [\n 'hooks',\n 'access',\n 'validate',\n 'defaultValue',\n 'filterOptions', // This is a `relationship`, `upload`, and `select` only property\n 'editor', // This is a `richText` only property\n 'custom',\n 'typescriptSchema',\n 'dbName', // can be a function\n 'enumName', // can be a function\n 'graphQL', // client does not need graphQL\n // the following props are handled separately (see below):\n // `label`\n // `fields`\n // `blocks`\n // `tabs`\n // `admin`\n]\n\nconst serverOnlyFieldAdminProperties: Partial<ServerOnlyFieldAdminProperties>[] = [\n 'condition',\n 'components',\n]\n\ntype FieldWithDescription = {\n admin: AdminClient\n} & ClientField\n\nexport const createClientBlocks = ({\n blocks,\n defaultIDType,\n i18n,\n importMap,\n}: {\n blocks: (Block | string)[]\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): (ClientBlock | string)[] | ClientBlock[] => {\n const clientBlocks: (ClientBlock | string)[] = []\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i]!\n\n if (typeof block === 'string') {\n // Do not process blocks that are just strings - they are processed once in the client config\n clientBlocks.push(block)\n continue\n }\n\n const clientBlock: ClientBlock = {\n slug: block.slug,\n fields: [],\n }\n if (block.imageAltText) {\n clientBlock.imageAltText = block.imageAltText\n }\n if (block.imageURL) {\n clientBlock.imageURL = block.imageURL\n }\n\n if (block.admin?.custom || block.admin?.group) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n clientBlock.admin = {}\n if (block.admin.custom) {\n clientBlock.admin!.custom = block.admin.custom\n }\n if (block.admin.group) {\n clientBlock.admin!.group = block.admin.group\n }\n }\n\n if (block?.admin?.jsx) {\n const jsxResolved = getFromImportMap<BlockJSX>({\n importMap,\n PayloadComponent: block.admin.jsx,\n schemaPath: '',\n })\n clientBlock.jsx = jsxResolved\n }\n\n if (block?.admin?.disableBlockName) {\n // Check for existing admin object, this way we don't have to spread it in\n if (clientBlock.admin) {\n clientBlock.admin.disableBlockName = block.admin.disableBlockName\n } else {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n clientBlock.admin = { disableBlockName: block.admin.disableBlockName }\n }\n }\n\n if (block.labels) {\n clientBlock.labels = {} as unknown as LabelsClient\n\n if (block.labels.singular) {\n if (typeof block.labels.singular === 'function') {\n clientBlock.labels.singular = block.labels.singular({ i18n, t: i18n.t })\n } else {\n clientBlock.labels.singular = block.labels.singular\n }\n if (typeof block.labels.plural === 'function') {\n clientBlock.labels.plural = block.labels.plural({ i18n, t: i18n.t })\n } else {\n clientBlock.labels.plural = block.labels.plural\n }\n }\n }\n\n clientBlock.fields = createClientFields({\n defaultIDType,\n fields: block.fields,\n i18n,\n importMap,\n })\n\n clientBlocks.push(clientBlock)\n }\n\n return clientBlocks\n}\n\nexport const createClientField = ({\n defaultIDType,\n field: incomingField,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n field: Field\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField => {\n const clientField: ClientField = {} as ClientField\n\n for (const key in incomingField) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n if (!incomingField.admin) {\n break\n }\n\n clientField.admin = {} as AdminClient\n\n for (const adminKey in incomingField.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in incomingField.admin) {\n if (typeof incomingField.admin?.description !== 'function') {\n ;(clientField as FieldWithDescription).admin.description =\n incomingField.admin.description\n }\n }\n\n break\n\n default:\n clientField.admin[adminKey] = incomingField.admin[adminKey]\n }\n }\n\n break\n\n case 'blocks':\n case 'fields':\n case 'tabs':\n // Skip - we handle sub-fields in the switch below\n break\n\n case 'label':\n //@ts-expect-error - would need to type narrow\n if (typeof incomingField.label === 'function') {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label({ i18n, t: i18n.t })\n } else {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label\n }\n\n break\n\n default:\n clientField[key] = incomingField[key]\n }\n }\n\n switch (incomingField.type) {\n case 'array': {\n if (incomingField.labels) {\n const field = clientField as unknown as ArrayFieldClient\n\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n }\n // falls through\n case 'collapsible':\n case 'group':\n case 'row': {\n const field = clientField as unknown as RowFieldClient\n\n if (!field.fields) {\n field.fields = []\n }\n\n field.fields = createClientFields({\n defaultIDType,\n disableAddingID: incomingField.type !== 'array',\n fields: incomingField.fields,\n i18n,\n importMap,\n })\n\n break\n }\n\n case 'blocks': {\n const field = clientField as unknown as BlocksFieldClient\n\n if (incomingField.labels) {\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n\n if (incomingField.blockReferences?.length) {\n field.blockReferences = createClientBlocks({\n blocks: incomingField.blockReferences,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n if (incomingField.blocks?.length) {\n field.blocks = createClientBlocks({\n blocks: incomingField.blocks,\n defaultIDType,\n i18n,\n importMap,\n }) as ClientBlock[]\n }\n\n break\n }\n\n case 'join': {\n const field = clientField as JoinFieldClient\n\n field.targetField = {\n relationTo: field.targetField?.relationTo,\n }\n\n break\n }\n\n case 'radio':\n // falls through\n case 'select': {\n const field = clientField as RadioFieldClient | SelectFieldClient\n\n if (incomingField.options?.length) {\n for (let i = 0; i < incomingField.options.length; i++) {\n const option = incomingField.options[i]\n\n if (typeof option === 'object' && typeof option.label === 'function') {\n if (!field.options) {\n field.options = []\n }\n\n field.options[i] = {\n label: option.label({ i18n, t: i18n.t }),\n value: option.value,\n }\n }\n }\n }\n\n break\n }\n\n case 'richText': {\n if (!incomingField?.editor) {\n throw new MissingEditorProp(incomingField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof incomingField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n break\n }\n\n case 'tabs': {\n const field = clientField as unknown as TabsFieldClient\n\n if (incomingField.tabs?.length) {\n field.tabs = []\n\n for (let i = 0; i < incomingField.tabs.length; i++) {\n const tab = incomingField.tabs[i]\n const clientTab = {} as unknown as TabsFieldClient['tabs'][0]\n\n for (const key in tab) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n const tabProp = tab[key]\n\n if (key === 'fields') {\n clientTab.fields = createClientFields({\n defaultIDType,\n disableAddingID: true,\n fields: tab.fields,\n i18n,\n importMap,\n })\n } else if (\n (key === 'label' || key === 'description') &&\n typeof tabProp === 'function'\n ) {\n clientTab[key] = tabProp({ t: i18n.t })\n } else if (key === 'admin') {\n clientTab.admin = {} as AdminClient\n\n for (const adminKey in tab.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in tab.admin) {\n if (typeof tab.admin?.description === 'function') {\n clientTab.admin.description = tab.admin.description({ i18n, t: i18n.t })\n } else {\n clientTab.admin.description = tab.admin.description\n }\n }\n\n break\n\n default:\n clientField.admin![adminKey] = tab.admin[adminKey]\n }\n }\n } else {\n clientTab[key] = tabProp\n }\n }\n field.tabs[i] = clientTab\n }\n }\n\n break\n }\n\n default:\n break\n }\n\n return clientField\n}\n\nexport const createClientFields = ({\n defaultIDType,\n disableAddingID,\n fields,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n disableAddingID?: boolean\n fields: Field[]\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField[] => {\n const clientFields: ClientField[] = []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n const clientField = createClientField({\n defaultIDType,\n field,\n i18n,\n importMap,\n })\n\n clientFields.push(clientField)\n }\n\n const hasID = flattenTopLevelFields(fields).some((f) => fieldAffectsData(f) && f.name === 'id')\n\n if (!disableAddingID && !hasID) {\n clientFields.push({\n name: 'id',\n type: defaultIDType,\n admin: {\n description: 'The unique identifier for this document',\n disableBulkEdit: true,\n disabled: true,\n hidden: true,\n },\n hidden: true,\n label: 'ID',\n } as ClientField)\n }\n\n return clientFields\n}\n"],"names":["getFromImportMap","MissingEditorProp","fieldAffectsData","flattenTopLevelFields","serverOnlyFieldProperties","serverOnlyFieldAdminProperties","createClientBlocks","blocks","defaultIDType","i18n","importMap","clientBlocks","i","length","block","push","clientBlock","slug","fields","imageAltText","imageURL","admin","custom","group","jsx","jsxResolved","PayloadComponent","schemaPath","disableBlockName","labels","singular","t","plural","createClientFields","createClientField","field","incomingField","clientField","key","includes","adminKey","description","label","type","disableAddingID","blockReferences","targetField","relationTo","options","option","value","editor","Error","tabs","tab","clientTab","tabProp","clientFields","hasID","some","f","name","disableBulkEdit","disabled","hidden"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/config/client.ts"],"sourcesContent":["// @ts-strict-ignore\n/* eslint-disable perfectionist/sort-switch-case */\n// Keep perfectionist/sort-switch-case disabled - it incorrectly messes up the ordering of the switch cases, causing it to break\nimport type { I18nClient, TFunction } from '@payloadcms/translations'\n\nimport type {\n AdminClient,\n ArrayFieldClient,\n Block,\n BlockJSX,\n BlocksFieldClient,\n ClientBlock,\n ClientField,\n Field,\n FieldBase,\n JoinFieldClient,\n LabelsClient,\n RadioFieldClient,\n RowFieldClient,\n SelectFieldClient,\n TabsFieldClient,\n} from '../../fields/config/types.js'\nimport type { Payload } from '../../types/index.js'\n\nimport { getFromImportMap } from '../../bin/generateImportMap/utilities/getFromImportMap.js'\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { flattenTopLevelFields, type ImportMap } from '../../index.js'\n\n// Should not be used - ClientField should be used instead. This is why we don't export ClientField, we don't want people\n// to accidentally use it instead of ClientField and get confused\n\nexport { ClientField }\n\nexport type ServerOnlyFieldProperties =\n | 'dbName' // can be a function\n | 'editor' // This is a `richText` only property\n | 'enumName' // can be a function\n | 'filterOptions' // This is a `relationship`, `upload`, and `select` only property\n | 'graphQL'\n | 'label'\n | 'typescriptSchema'\n | 'validate'\n | keyof Pick<FieldBase, 'access' | 'custom' | 'defaultValue' | 'hooks'>\n\nexport type ServerOnlyFieldAdminProperties = keyof Pick<\n FieldBase['admin'],\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n 'components' | 'condition'\n>\n\nconst serverOnlyFieldProperties: Partial<ServerOnlyFieldProperties>[] = [\n 'hooks',\n 'access',\n 'validate',\n 'defaultValue',\n 'filterOptions', // This is a `relationship`, `upload`, and `select` only property\n 'editor', // This is a `richText` only property\n 'custom',\n 'typescriptSchema',\n 'dbName', // can be a function\n 'enumName', // can be a function\n 'graphQL', // client does not need graphQL\n // the following props are handled separately (see below):\n // `label`\n // `fields`\n // `blocks`\n // `tabs`\n // `admin`\n]\n\nconst serverOnlyFieldAdminProperties: Partial<ServerOnlyFieldAdminProperties>[] = [\n 'condition',\n 'components',\n]\n\ntype FieldWithDescription = {\n admin: AdminClient\n} & ClientField\n\nexport const createClientBlocks = ({\n blocks,\n defaultIDType,\n i18n,\n importMap,\n}: {\n blocks: (Block | string)[]\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): (ClientBlock | string)[] | ClientBlock[] => {\n const clientBlocks: (ClientBlock | string)[] = []\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i]!\n\n if (typeof block === 'string') {\n // Do not process blocks that are just strings - they are processed once in the client config\n clientBlocks.push(block)\n continue\n }\n\n const clientBlock: ClientBlock = {\n slug: block.slug,\n fields: [],\n }\n if (block.imageAltText) {\n clientBlock.imageAltText = block.imageAltText\n }\n if (block.imageURL) {\n clientBlock.imageURL = block.imageURL\n }\n\n if (block.admin?.custom || block.admin?.group) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n clientBlock.admin = {}\n if (block.admin.custom) {\n clientBlock.admin!.custom = block.admin.custom\n }\n if (block.admin.group) {\n clientBlock.admin!.group = block.admin.group\n }\n }\n\n if (block?.admin?.jsx) {\n const jsxResolved = getFromImportMap<BlockJSX>({\n importMap,\n PayloadComponent: block.admin.jsx,\n schemaPath: '',\n })\n clientBlock.jsx = jsxResolved\n }\n\n if (block?.admin?.disableBlockName) {\n // Check for existing admin object, this way we don't have to spread it in\n if (clientBlock.admin) {\n clientBlock.admin.disableBlockName = block.admin.disableBlockName\n } else {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n clientBlock.admin = { disableBlockName: block.admin.disableBlockName }\n }\n }\n\n if (block.labels) {\n clientBlock.labels = {} as unknown as LabelsClient\n\n if (block.labels.singular) {\n if (typeof block.labels.singular === 'function') {\n clientBlock.labels.singular = block.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.singular = block.labels.singular\n }\n if (typeof block.labels.plural === 'function') {\n clientBlock.labels.plural = block.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.plural = block.labels.plural\n }\n }\n }\n\n clientBlock.fields = createClientFields({\n defaultIDType,\n fields: block.fields,\n i18n,\n importMap,\n })\n\n clientBlocks.push(clientBlock)\n }\n\n return clientBlocks\n}\n\nexport const createClientField = ({\n defaultIDType,\n field: incomingField,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n field: Field\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField => {\n const clientField: ClientField = {} as ClientField\n\n for (const key in incomingField) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n if (!incomingField.admin) {\n break\n }\n\n clientField.admin = {} as AdminClient\n\n for (const adminKey in incomingField.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in incomingField.admin) {\n if (typeof incomingField.admin?.description !== 'function') {\n ;(clientField as FieldWithDescription).admin.description =\n incomingField.admin.description\n }\n }\n\n break\n\n default:\n ;(clientField.admin as any)[adminKey] =\n incomingField.admin[adminKey as keyof typeof incomingField.admin]\n }\n }\n\n break\n\n case 'blocks':\n case 'fields':\n case 'tabs':\n // Skip - we handle sub-fields in the switch below\n break\n\n case 'label':\n //@ts-expect-error - would need to type narrow\n if (typeof incomingField.label === 'function') {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label({ i18n, t: i18n.t })\n } else {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label\n }\n\n break\n\n default:\n ;(clientField as any)[key] = incomingField[key as keyof Field]\n }\n }\n\n switch (incomingField.type) {\n case 'array': {\n if (incomingField.labels) {\n const field = clientField as unknown as ArrayFieldClient\n\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n }\n // falls through\n case 'collapsible':\n case 'group':\n case 'row': {\n const field = clientField as unknown as RowFieldClient\n\n if (!field.fields) {\n field.fields = []\n }\n\n field.fields = createClientFields({\n defaultIDType,\n disableAddingID: incomingField.type !== 'array',\n fields: incomingField.fields,\n i18n,\n importMap,\n })\n\n break\n }\n\n case 'blocks': {\n const field = clientField as unknown as BlocksFieldClient\n\n if (incomingField.labels) {\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n\n if (incomingField.blockReferences?.length) {\n field.blockReferences = createClientBlocks({\n blocks: incomingField.blockReferences,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n if (incomingField.blocks?.length) {\n field.blocks = createClientBlocks({\n blocks: incomingField.blocks,\n defaultIDType,\n i18n,\n importMap,\n }) as ClientBlock[]\n }\n\n break\n }\n\n case 'join': {\n const field = clientField as JoinFieldClient\n\n field.targetField = {\n relationTo: field.targetField?.relationTo,\n }\n\n break\n }\n\n case 'radio':\n // falls through\n case 'select': {\n const field = clientField as RadioFieldClient | SelectFieldClient\n\n if (incomingField.options?.length) {\n for (let i = 0; i < incomingField.options.length; i++) {\n const option = incomingField.options[i]\n\n if (typeof option === 'object' && typeof option.label === 'function') {\n if (!field.options) {\n field.options = []\n }\n\n field.options[i] = {\n label: option.label({ i18n, t: i18n.t as TFunction }),\n value: option.value,\n }\n }\n }\n }\n\n break\n }\n\n case 'richText': {\n if (!incomingField?.editor) {\n throw new MissingEditorProp(incomingField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof incomingField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n break\n }\n\n case 'tabs': {\n const field = clientField as unknown as TabsFieldClient\n\n if (incomingField.tabs?.length) {\n field.tabs = []\n\n for (let i = 0; i < incomingField.tabs.length; i++) {\n const tab = incomingField.tabs[i]\n const clientTab = {} as unknown as TabsFieldClient['tabs'][0]\n\n for (const key in tab) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n const tabProp = tab[key as keyof typeof tab]\n\n if (key === 'fields') {\n clientTab.fields = createClientFields({\n defaultIDType,\n disableAddingID: true,\n fields: tab.fields,\n i18n,\n importMap,\n })\n } else if (\n (key === 'label' || key === 'description') &&\n typeof tabProp === 'function'\n ) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n clientTab[key] = tabProp({ t: i18n.t })\n } else if (key === 'admin') {\n clientTab.admin = {} as AdminClient\n\n for (const adminKey in tab.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in tab.admin) {\n if (typeof tab.admin?.description === 'function') {\n clientTab.admin.description = tab.admin.description({\n i18n,\n t: i18n.t as TFunction,\n })\n } else {\n clientTab.admin.description = tab.admin.description\n }\n }\n\n break\n\n default:\n ;(clientTab.admin as any)[adminKey] =\n tab.admin[adminKey as keyof typeof tab.admin]\n }\n }\n } else {\n ;(clientTab as any)[key] = tabProp\n }\n }\n field.tabs[i] = clientTab\n }\n }\n\n break\n }\n\n default:\n break\n }\n\n return clientField\n}\n\nexport const createClientFields = ({\n defaultIDType,\n disableAddingID,\n fields,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n disableAddingID?: boolean\n fields: Field[]\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField[] => {\n const clientFields: ClientField[] = []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n const clientField = createClientField({\n defaultIDType,\n field,\n i18n,\n importMap,\n })\n\n clientFields.push(clientField)\n }\n\n const hasID = flattenTopLevelFields(fields).some((f) => fieldAffectsData(f) && f.name === 'id')\n\n if (!disableAddingID && !hasID) {\n clientFields.push({\n name: 'id',\n type: defaultIDType,\n admin: {\n description: 'The unique identifier for this document',\n disableBulkEdit: true,\n disabled: true,\n hidden: true,\n },\n hidden: true,\n label: 'ID',\n } as ClientField)\n }\n\n return clientFields\n}\n"],"names":["getFromImportMap","MissingEditorProp","fieldAffectsData","flattenTopLevelFields","serverOnlyFieldProperties","serverOnlyFieldAdminProperties","createClientBlocks","blocks","defaultIDType","i18n","importMap","clientBlocks","i","length","block","push","clientBlock","slug","fields","imageAltText","imageURL","admin","custom","group","jsx","jsxResolved","PayloadComponent","schemaPath","disableBlockName","labels","singular","t","plural","createClientFields","createClientField","field","incomingField","clientField","key","includes","adminKey","description","label","type","disableAddingID","blockReferences","targetField","relationTo","options","option","value","editor","Error","tabs","tab","clientTab","tabProp","clientFields","hasID","some","f","name","disableBulkEdit","disabled","hidden"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,cAAc,EACf,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AA0BvC,KAAK,IAAI,GAAG;IACV,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC;;;OAGG;IACH,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChF;;;OAGG;IACH,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,wNAaxB,IAAI,KAAG,OAAO,CAAC,KAAK,EAAE,CAgVxB,CAAA"}
|