payload 4.0.0-beta.3 → 4.0.0-beta.4

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.
Files changed (79) hide show
  1. package/dist/admin/adapters/router.d.ts +1 -1
  2. package/dist/admin/adapters/router.d.ts.map +1 -1
  3. package/dist/admin/adapters/router.js.map +1 -1
  4. package/dist/admin/initAdminContext.js.map +1 -1
  5. package/dist/auth/getFieldsToSign.js.map +1 -1
  6. package/dist/auth/loginWithCookie.js.map +1 -1
  7. package/dist/auth/serverFunctions/cookies.js.map +1 -1
  8. package/dist/auth/serverFunctions/login.js.map +1 -1
  9. package/dist/cli/defineCLICommand.js +1 -1
  10. package/dist/cli/defineCLICommand.js.map +1 -1
  11. package/dist/collections/config/client.js.map +1 -1
  12. package/dist/collections/operations/findByID.js.map +1 -1
  13. package/dist/collections/operations/findVersionByID.js.map +1 -1
  14. package/dist/collections/operations/findVersions.js.map +1 -1
  15. package/dist/collections/operations/local/findDistinct.js.map +1 -1
  16. package/dist/collections/operations/renameFile.js +1 -1
  17. package/dist/collections/operations/renameFile.js.map +1 -1
  18. package/dist/collections/operations/utilities/update.js +1 -1
  19. package/dist/collections/operations/utilities/update.js.map +1 -1
  20. package/dist/collections/operations/validate.js +4 -4
  21. package/dist/collections/operations/validate.js.map +1 -1
  22. package/dist/config/definePlugin.js.map +1 -1
  23. package/dist/config/sanitize.js +2 -2
  24. package/dist/config/sanitize.js.map +1 -1
  25. package/dist/exports/build-config.d.ts +9 -0
  26. package/dist/exports/build-config.d.ts.map +1 -0
  27. package/dist/exports/build-config.js +38 -0
  28. package/dist/exports/build-config.js.map +1 -0
  29. package/dist/fields/config/client.js.map +1 -1
  30. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  31. package/dist/fields/validations.d.ts.map +1 -1
  32. package/dist/fields/validations.js +4 -1
  33. package/dist/fields/validations.js.map +1 -1
  34. package/dist/globals/operations/local/findOne.js.map +1 -1
  35. package/dist/globals/operations/local/update.js.map +1 -1
  36. package/dist/globals/operations/restoreVersion.d.ts +2 -3
  37. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  38. package/dist/globals/operations/restoreVersion.js +22 -15
  39. package/dist/globals/operations/restoreVersion.js.map +1 -1
  40. package/dist/globals/operations/validate.js +1 -1
  41. package/dist/globals/operations/validate.js.map +1 -1
  42. package/dist/hierarchy/createFolderField.js.map +1 -1
  43. package/dist/hierarchy/resolveHierarchyCollections.js +2 -2
  44. package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -1
  45. package/dist/hierarchy/utils/computePaths.d.ts.map +1 -1
  46. package/dist/hierarchy/utils/computePaths.js.map +1 -1
  47. package/dist/index.bundled.d.ts +12 -3
  48. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +1 -1
  49. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
  50. package/dist/uploads/fileVersioning/archive.js.map +1 -1
  51. package/dist/uploads/fileVersioning/resolveHistoricalFile.js.map +1 -1
  52. package/dist/uploads/generateFileData.d.ts.map +1 -1
  53. package/dist/uploads/generateFileData.js.map +1 -1
  54. package/dist/uploads/getFileFromUploadInstructions.js.map +1 -1
  55. package/dist/uploads/safeFetch.js.map +1 -1
  56. package/dist/uploads/stagedUpload.js.map +1 -1
  57. package/dist/uploads/transformers/handleDynamicFileRequest.js +11 -2
  58. package/dist/uploads/transformers/handleDynamicFileRequest.js.map +1 -1
  59. package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
  60. package/dist/utilities/addSelectGenericsToGeneretedTypes.js +0 -1
  61. package/dist/utilities/addSelectGenericsToGeneretedTypes.js.map +1 -1
  62. package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
  63. package/dist/utilities/cloneValidationRequest.js.map +1 -1
  64. package/dist/utilities/createPayloadRequest.js.map +1 -1
  65. package/dist/utilities/deepCopyObject.js.map +1 -1
  66. package/dist/utilities/documentMatchingWhereExists.js +1 -1
  67. package/dist/utilities/documentMatchingWhereExists.js.map +1 -1
  68. package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
  69. package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
  70. package/dist/utilities/getEntityPermissions/getEntityPermissions.js +1 -0
  71. package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
  72. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
  73. package/dist/utilities/parseParams/index.js.map +1 -1
  74. package/dist/utilities/parseValidationLocale.js.map +1 -1
  75. package/dist/utilities/sanitizePopulateParam.js.map +1 -1
  76. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -1
  77. package/dist/versions/allLocalesPublicationStatus.js.map +1 -1
  78. package/package.json +11 -9
  79. package/skills/payload/reference/PLUGIN-DEVELOPMENT.md +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/sanitize.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\n\nimport { en } from '@payloadcms/translations/languages/en'\n\nimport type { RichTextSanitizer } from '../fields/config/sanitize.js'\nimport type { OrderableJoinInfo } from '../fields/config/sanitizeJoinField.js'\nimport type { CollectionSlug, GlobalSlug, SanitizedCollectionConfig } from '../index.js'\nimport type { SanitizedJobsConfig } from '../queues/config/types/index.js'\nimport type {\n Config,\n DashboardConfig,\n LocalizationConfigWithLabels,\n LocalizationConfigWithNoLabels,\n SanitizedConfig,\n Timezone,\n Widget,\n WidgetInstance,\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 { sanitizeGlobal } from '../globals/config/sanitize.js'\nimport { resolveHierarchyCollections } from '../hierarchy/resolveHierarchyCollections.js'\nimport { baseBlockFields, formatLabels, sanitizeFields } from '../index.js'\nimport { addLLMInstructions } from '../llm-instructions/addLLMInstructions.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/collection.js'\nimport { getJobStatsGlobal } from '../queues/config/global.js'\nimport {\n stagedUploadEndpoints,\n uploadInstructionsEndpoint,\n} from '../uploads/endpoints/uploadInstructions.js'\nimport { flattenAllFields, flattenBlock } from '../utilities/flattenAllFields.js'\nimport { hasScheduledPublishEnabled } from '../utilities/getVersionsConfig.js'\nimport { validateTimezones } from '../utilities/validateTimezones.js'\nimport { getSchedulePublishTask } from '../versions/schedule/job.js'\nimport { addDefaultsToConfig } from './defaults.js'\nimport { addOrderableEndpoint, addOrderableFieldsAndHook } from './orderable/index.js'\n\nconst sanitizeAdminConfig = (configToSanitize: Config): Partial<SanitizedConfig> => {\n const sanitizedConfig = { ...configToSanitize }\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 // 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 authCollections = sanitizedConfig.collections!.filter(({ auth }) => Boolean(auth))\n\n const userCollection = authCollections.find(({ slug }) => slug === sanitizedConfig.admin!.user)\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 configToSanitize?.admin?.timezones?.supportedTimezones === 'function') {\n sanitizedConfig.admin.timezones.supportedTimezones =\n configToSanitize.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\n validateTimezones({\n source: 'admin.timezones.supportedTimezones',\n timezones: sanitizedConfig.admin!.timezones.supportedTimezones as Timezone[],\n })\n\n return sanitizedConfig as unknown as Partial<SanitizedConfig>\n}\n\nconst addDefaultDashboardWidgets = ({\n config,\n richTextSanitizers,\n validRelationships,\n}: {\n config: Partial<SanitizedConfig>\n richTextSanitizers: RichTextSanitizer[]\n validRelationships: string[]\n}): void => {\n const collectionQueryFields: NonNullable<Widget['fields']> = [\n {\n name: 'title',\n type: 'text',\n label: ({ t }) => t('dashboard:widgetTitleLabel'),\n },\n {\n name: 'relatedCollection',\n type: 'select',\n label: ({ t }) => t('general:collection'),\n // Only offer collections that are visible in the admin UI. Collections hidden via a function\n // are kept since they may still be visible for some users.\n options: (config.collections ?? [])\n .filter((collection) => collection.admin?.hidden !== true)\n .map((collection) => ({\n label: collection.labels?.plural || collection.slug,\n value: collection.slug,\n })),\n required: true,\n },\n {\n name: 'where',\n type: 'json',\n admin: {\n components: {\n Field: '@payloadcms/ui#QueryPresetsWhereField',\n },\n },\n label: ({ t }) => t('general:filters'),\n },\n {\n name: 'sortField',\n type: 'text',\n admin: {\n components: {\n Field: '@payloadcms/ui#CollectionQuerySortField',\n },\n },\n label: ({ t }) => t('dashboard:widgetSortFieldLabel'),\n },\n {\n name: 'sortDirection',\n type: 'select',\n defaultValue: 'desc',\n label: ({ t }) => t('dashboard:widgetSortDirectionLabel'),\n options: [\n {\n label: ({ t }) => t('general:ascending'),\n value: 'asc',\n },\n {\n label: ({ t }) => t('general:descending'),\n value: 'desc',\n },\n ],\n },\n {\n name: 'limit',\n type: 'number',\n defaultValue: 5,\n label: ({ t }) => t('dashboard:widgetLimitLabel'),\n max: 25,\n min: 1,\n },\n ]\n\n const recentlyViewedFields: NonNullable<Widget['fields']> = [\n {\n name: 'excludedCollections',\n type: 'select',\n admin: {\n components: {\n // Presents an inclusion filter (all collections checked by default) while persisting the\n // inverse as an exclusion list, so collections added later stay visible by default.\n Field: '@payloadcms/ui#RecentlyViewedCollectionsField',\n },\n description: ({ t }) => t('dashboard:widgetRecentlyViewedFilterDescription'),\n },\n hasMany: true,\n label: ({ t }) => t('general:collections'),\n // Exclusion list, so an empty value shows every collection and newly added collections are\n // included by default. Hidden collections are never offered as options.\n options: (config.collections ?? [])\n .filter((collection) => collection.admin?.hidden !== true)\n .map((collection) => ({\n label: collection.labels?.plural || collection.slug,\n value: collection.slug,\n })),\n },\n ]\n\n const uploadCollections = (config.collections ?? []).filter(\n (collection) =>\n collection.upload &&\n collection.upload.bulkUpload !== false &&\n collection.admin?.hidden !== true,\n )\n\n const adminConfig: NonNullable<Config['admin']> = config.admin ?? { dashboard: { widgets: [] } }\n const dashboard: DashboardConfig = (adminConfig.dashboard ??= { widgets: [] })\n\n dashboard.widgets.push({\n slug: 'welcome',\n Component: '@payloadcms/ui/rsc#WelcomeWidget',\n label: ({ t }) => t('general:welcome'),\n maxWidth: 'full',\n minWidth: 'full',\n })\n dashboard.widgets.push({\n slug: 'collections',\n Component: '@payloadcms/ui/rsc#CollectionCards',\n minWidth: 'full',\n })\n dashboard.widgets.push({\n slug: 'collection-query',\n Component: '@payloadcms/ui/rsc#CollectionQueryWidget',\n fields: sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: collectionQueryFields,\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n }),\n minWidth: 'x-small',\n })\n dashboard.widgets.push({\n slug: 'activity',\n Component: '@payloadcms/ui/rsc#RecentlyViewedWidget',\n fields: sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: recentlyViewedFields,\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n }),\n label: ({ t }) => t('dashboard:widgetRecentsAndPinned'),\n minWidth: 'small',\n })\n if (uploadCollections.length > 0) {\n dashboard.widgets.push({\n slug: 'upload-dropzone',\n Component: '@payloadcms/ui/rsc#UploadDropzoneWidget',\n fields: sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: [\n {\n name: 'excludedCollections',\n type: 'select',\n admin: {\n components: {\n Field: '@payloadcms/ui#UploadDropzoneCollectionsField',\n },\n },\n hasMany: true,\n label: ({ t }) => t('general:collections'),\n options: uploadCollections.map((collection) => ({\n label: collection.labels?.plural || collection.slug,\n value: collection.slug,\n })),\n },\n ],\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n }),\n label: ({ t }) => t('dashboard:widgetUploadFiles'),\n minWidth: 'x-small',\n })\n }\n dashboard.defaultLayout ??= [\n {\n widgetSlug: 'welcome',\n width: 'full',\n } satisfies WidgetInstance,\n {\n widgetSlug: 'activity',\n width: 'full',\n } satisfies WidgetInstance,\n {\n widgetSlug: 'collections',\n width: 'full',\n } satisfies WidgetInstance,\n ]\n}\n\nexport const sanitizeConfig = (incomingConfig: Config): SanitizedConfig => {\n const configWithDefaults = addDefaultsToConfig(incomingConfig)\n const { duration, safetyBuffer } = configWithDefaults.jobs!.processingLease!\n if (!(safetyBuffer! >= 0 && safetyBuffer! < duration!)) {\n throw new InvalidConfiguration(\n '`jobs.processingLease.safetyBuffer` must be non-negative and less than `jobs.processingLease.duration`.',\n )\n }\n\n const config: Partial<SanitizedConfig> = sanitizeAdminConfig(configWithDefaults)\n\n if (!config.endpoints) {\n config.endpoints = []\n }\n\n if (configWithDefaults.collections?.some(({ upload }) => upload)) {\n config.endpoints.push(uploadInstructionsEndpoint, ...stagedUploadEndpoints)\n }\n\n for (const endpoint of authRootEndpoints) {\n config.endpoints.push(endpoint)\n }\n\n if (config.localization) {\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 richTextSanitizers: RichTextSanitizer[] = []\n\n const schedulePublishCollections: CollectionSlug[] = []\n\n const queryPresetsCollections: CollectionSlug[] = []\n\n const schedulePublishGlobals: GlobalSlug[] = []\n\n const collectionSlugs = new Set<CollectionSlug>()\n\n const validRelationships = [\n ...(config.collections?.map((c) => c.slug) ?? []),\n jobsCollectionSlug,\n lockedDocumentsCollectionSlug,\n preferencesCollectionSlug,\n ]\n\n const dashboardWidgets = config.admin?.dashboard?.widgets ?? ([] as Widget[])\n\n for (const widget of dashboardWidgets) {\n if (widget.fields?.length) {\n widget.fields = sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: widget.fields,\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n })\n }\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 = sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: sanitizedBlock.fields,\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n })\n\n const flattenedSanitizedBlock = flattenBlock({ block })\n\n config.blocks.push(flattenedSanitizedBlock)\n }\n }\n\n // Track orderable join fields during sanitization\n const orderableJoins: OrderableJoinInfo[] = []\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] = sanitizeCollection(\n config as unknown as Config,\n config.collections![i]!,\n richTextSanitizers,\n validRelationships,\n orderableJoins,\n )\n }\n\n // Process orderable features after all collections are sanitized\n const fieldsToAdd = new Map<SanitizedCollectionConfig, string[]>()\n const joinFieldPathsByCollection = new Map<string, Map<string, string>>()\n\n // Handle collection.orderable\n for (const collection of config.collections!) {\n if (collection.orderable) {\n const currentFields = fieldsToAdd.get(collection) || []\n fieldsToAdd.set(collection, [...currentFields, '_order'])\n collection.defaultSort = collection.defaultSort ?? '_order'\n }\n }\n\n // Handle orderable join fields (tracked during sanitization)\n for (const joinInfo of orderableJoins) {\n const targetCollection = config.collections!.find(\n (c) => c.slug === joinInfo.targetCollectionSlug,\n )\n if (targetCollection) {\n const currentFields = fieldsToAdd.get(targetCollection) || []\n fieldsToAdd.set(targetCollection, [...currentFields, joinInfo.orderFieldName])\n\n const currentJoinFieldPaths =\n joinFieldPathsByCollection.get(targetCollection.slug) || new Map<string, string>()\n currentJoinFieldPaths.set(joinInfo.orderFieldName, joinInfo.joinFieldOn)\n joinFieldPathsByCollection.set(targetCollection.slug, currentJoinFieldPaths)\n }\n }\n\n // Add fields, hooks, and update flattenedFields\n for (const [collection, orderableFields] of fieldsToAdd) {\n addOrderableFieldsAndHook(\n collection,\n config as unknown as Config,\n orderableFields,\n joinFieldPathsByCollection,\n )\n // Regenerate flattenedFields since we added new fields\n collection.flattenedFields = flattenAllFields({ fields: collection.fields })\n }\n\n // Add endpoint if any orderable features exist\n if (fieldsToAdd.size > 0) {\n addOrderableEndpoint(config as SanitizedConfig, joinFieldPathsByCollection)\n }\n\n if (config.globals!.length > 0) {\n for (let i = 0; i < config.globals!.length; i++) {\n if (hasScheduledPublishEnabled(config.globals![i]!)) {\n schedulePublishGlobals.push(config.globals![i]!.slug)\n }\n\n config.globals![i] = sanitizeGlobal(\n config as unknown as Config,\n config.globals![i]!,\n richTextSanitizers,\n validRelationships,\n )\n }\n }\n\n // Resolve hierarchy relationships across collections (also adds sidebar tabs)\n resolveHierarchyCollections(config as unknown as Config)\n\n if (schedulePublishCollections.length || schedulePublishGlobals.length) {\n ;((config.jobs ??= {} as SanitizedJobsConfig).tasks ??= []).push(\n getSchedulePublishTask({\n authCollectionSlugs: config\n .collections!.filter(({ auth }) => Boolean(auth))\n .map(({ slug }) => slug),\n collections: schedulePublishCollections,\n globals: schedulePublishGlobals,\n }),\n )\n }\n\n ;(config.jobs ??= {} as SanitizedJobsConfig).enabled = Boolean(\n (Array.isArray(configWithDefaults.jobs?.tasks) && configWithDefaults.jobs?.tasks?.length) ||\n (Array.isArray(configWithDefaults.jobs?.workflows) &&\n configWithDefaults.jobs?.workflows?.length),\n )\n config.jobs.hasConcurrency = Boolean(\n config.jobs.tasks?.some((task) => task.concurrency) ||\n config.jobs.workflows?.some((workflow) => workflow.concurrency),\n )\n\n // Need to add default jobs collection before locked documents collections\n if (config.jobs.enabled) {\n // Check for schedule property in both tasks and workflows\n const hasScheduleProperty =\n (config?.jobs?.tasks?.length && config.jobs.tasks.some((task) => task.schedule)) ||\n (config?.jobs?.workflows?.length &&\n config.jobs.workflows.some((workflow) => workflow.schedule))\n\n if (hasScheduleProperty) {\n config.jobs.scheduling = true\n }\n\n // Add payload-jobs-stats global for tracking job system metadata.\n ;(config.globals ??= []).push(\n sanitizeGlobal(\n config as unknown as Config,\n getJobStatsGlobal(),\n richTextSanitizers,\n validRelationships,\n ),\n )\n\n let defaultJobsCollection = getDefaultJobsCollection(config.jobs)\n\n if (typeof config.jobs.jobsCollectionOverrides === 'function') {\n defaultJobsCollection = config.jobs.jobsCollectionOverrides({\n defaultJobsCollection,\n })\n }\n const sanitizedJobsCollection = sanitizeCollection(\n config as unknown as Config,\n defaultJobsCollection,\n richTextSanitizers,\n validRelationships,\n )\n\n ;(config.collections ??= []).push(sanitizedJobsCollection)\n }\n\n const lockedDocumentsCollection = getLockedDocumentsCollection(config as unknown as Config)\n\n if (lockedDocumentsCollection) {\n configWithDefaults.collections!.push(\n sanitizeCollection(\n config as unknown as Config,\n lockedDocumentsCollection,\n richTextSanitizers,\n validRelationships,\n ),\n )\n }\n\n configWithDefaults.collections!.push(\n sanitizeCollection(\n config as unknown as Config,\n getPreferencesCollection(config as unknown as Config),\n richTextSanitizers,\n validRelationships,\n ),\n )\n\n const migrations = sanitizeCollection(\n config as unknown as Config,\n migrationsCollection,\n richTextSanitizers,\n validRelationships,\n )\n\n // @ts-expect-error indexSortableFields is only valid for @payloadcms/db-mongodb\n if (config?.db?.indexSortableFields) {\n migrations.indexes = [\n {\n fields: ['batch', 'name'],\n unique: false,\n },\n ]\n }\n configWithDefaults.collections!.push(migrations)\n\n if (queryPresetsCollections.length > 0) {\n configWithDefaults.collections!.push(\n sanitizeCollection(\n config as unknown as Config,\n getQueryPresetsConfig(config as unknown as Config),\n richTextSanitizers,\n validRelationships,\n ),\n )\n }\n\n addDefaultDashboardWidgets({\n config,\n richTextSanitizers,\n validRelationships,\n })\n\n if (config.serverURL !== '') {\n config.csrf!.push(config.serverURL!)\n }\n\n if (!config.storage) {\n config.storage = []\n }\n\n if (!config.upload) {\n config.upload = { adapters: [], transformers: [] }\n }\n\n config.upload.adapters = Array.from(\n new Set(config.collections!.map((c) => c.upload?.adapter).filter(Boolean) as string[]),\n )\n config.upload.transformers = config.upload.transformers ?? []\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 if (typeof incomingConfig.editor === 'function') {\n config.editor = incomingConfig.editor({\n config: config as SanitizedConfig,\n isRoot: true,\n parentIsLocalized: false,\n })\n }\n\n if (config.llmInstructions !== false) {\n const instructionsCollection = addLLMInstructions({ config: config as SanitizedConfig })\n\n config.collections!.push(\n sanitizeCollection(\n config as unknown as Config,\n instructionsCollection,\n richTextSanitizers,\n validRelationships,\n ),\n )\n }\n\n for (const sanitizeRichText of richTextSanitizers) {\n sanitizeRichText(config as SanitizedConfig)\n }\n\n return config as SanitizedConfig\n}\n"],"names":["en","defaultUserCollection","authRootEndpoints","sanitizeCollection","migrationsCollection","DuplicateCollection","InvalidConfiguration","defaultTimezones","sanitizeGlobal","resolveHierarchyCollections","baseBlockFields","formatLabels","sanitizeFields","addLLMInstructions","getLockedDocumentsCollection","lockedDocumentsCollectionSlug","getPreferencesCollection","preferencesCollectionSlug","getQueryPresetsConfig","queryPresetsCollectionSlug","getDefaultJobsCollection","jobsCollectionSlug","getJobStatsGlobal","stagedUploadEndpoints","uploadInstructionsEndpoint","flattenAllFields","flattenBlock","hasScheduledPublishEnabled","validateTimezones","getSchedulePublishTask","addDefaultsToConfig","addOrderableEndpoint","addOrderableFieldsAndHook","sanitizeAdminConfig","configToSanitize","sanitizedConfig","loggingLevels","Forbidden","Locked","MissingFile","NotFound","ValidationError","admin","user","firstCollectionWithAuth","collections","find","auth","Boolean","slug","push","authCollections","filter","userCollection","timezones","supportedTimezones","source","addDefaultDashboardWidgets","config","richTextSanitizers","validRelationships","collectionQueryFields","name","type","label","t","options","collection","hidden","map","labels","plural","value","required","components","Field","defaultValue","max","min","recentlyViewedFields","description","hasMany","uploadCollections","upload","bulkUpload","adminConfig","dashboard","widgets","Component","maxWidth","minWidth","fields","existingFieldNames","Set","parentIsLocalized","length","defaultLayout","widgetSlug","width","sanitizeConfig","incomingConfig","configWithDefaults","duration","safetyBuffer","jobs","processingLease","endpoints","some","endpoint","localization","firstLocale","locales","localeCodes","locale","code","rtl","toString","fallback","i18nConfig","fallbackLanguage","supportedLanguages","translations","i18n","supportedLangKeys","Object","keys","fallbackLang","includes","schedulePublishCollections","queryPresetsCollections","schedulePublishGlobals","collectionSlugs","c","dashboardWidgets","widget","blocks","block","sanitizedBlock","_sanitized","concat","flattenedSanitizedBlock","orderableJoins","i","has","add","draftsConfig","versions","drafts","schedulePublish","enableQueryPresets","fieldsToAdd","Map","joinFieldPathsByCollection","orderable","currentFields","get","set","defaultSort","joinInfo","targetCollection","targetCollectionSlug","orderFieldName","currentJoinFieldPaths","joinFieldOn","orderableFields","flattenedFields","size","globals","tasks","authCollectionSlugs","enabled","Array","isArray","workflows","hasConcurrency","task","concurrency","workflow","hasScheduleProperty","schedule","scheduling","defaultJobsCollection","jobsCollectionOverrides","sanitizedJobsCollection","lockedDocumentsCollection","migrations","db","indexSortableFields","indexes","unique","serverURL","csrf","storage","adapters","transformers","from","adapter","email","editor","isRoot","llmInstructions","instructionsCollection","sanitizeRichText"],"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'\n\nimport type { RichTextSanitizer } from '../fields/config/sanitize.js'\nimport type { OrderableJoinInfo } from '../fields/config/sanitizeJoinField.js'\nimport type { CollectionSlug, GlobalSlug, SanitizedCollectionConfig } from '../index.js'\nimport type { SanitizedJobsConfig } from '../queues/config/types/index.js'\nimport type {\n Config,\n DashboardConfig,\n LocalizationConfigWithLabels,\n LocalizationConfigWithNoLabels,\n SanitizedConfig,\n Timezone,\n Widget,\n WidgetInstance,\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 { sanitizeGlobal } from '../globals/config/sanitize.js'\nimport { resolveHierarchyCollections } from '../hierarchy/resolveHierarchyCollections.js'\nimport { baseBlockFields, formatLabels, sanitizeFields } from '../index.js'\nimport { addLLMInstructions } from '../llm-instructions/addLLMInstructions.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/collection.js'\nimport { getJobStatsGlobal } from '../queues/config/global.js'\nimport {\n stagedUploadEndpoints,\n uploadInstructionsEndpoint,\n} from '../uploads/endpoints/uploadInstructions.js'\nimport { flattenAllFields, flattenBlock } from '../utilities/flattenAllFields.js'\nimport { hasScheduledPublishEnabled } from '../utilities/getVersionsConfig.js'\nimport { validateTimezones } from '../utilities/validateTimezones.js'\nimport { getSchedulePublishTask } from '../versions/schedule/job.js'\nimport { addDefaultsToConfig } from './defaults.js'\nimport { addOrderableEndpoint, addOrderableFieldsAndHook } from './orderable/index.js'\n\nconst sanitizeAdminConfig = (configToSanitize: Config): Partial<SanitizedConfig> => {\n const sanitizedConfig = { ...configToSanitize }\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 // 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 authCollections = sanitizedConfig.collections!.filter(({ auth }) => Boolean(auth))\n\n const userCollection = authCollections.find(({ slug }) => slug === sanitizedConfig.admin!.user)\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 configToSanitize?.admin?.timezones?.supportedTimezones === 'function') {\n sanitizedConfig.admin.timezones.supportedTimezones =\n configToSanitize.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\n validateTimezones({\n source: 'admin.timezones.supportedTimezones',\n timezones: sanitizedConfig.admin!.timezones.supportedTimezones as Timezone[],\n })\n\n return sanitizedConfig as unknown as Partial<SanitizedConfig>\n}\n\nconst addDefaultDashboardWidgets = ({\n config,\n richTextSanitizers,\n validRelationships,\n}: {\n config: Partial<SanitizedConfig>\n richTextSanitizers: RichTextSanitizer[]\n validRelationships: string[]\n}): void => {\n const collectionQueryFields: NonNullable<Widget['fields']> = [\n {\n name: 'title',\n type: 'text',\n label: ({ t }) => t('dashboard:widgetTitleLabel'),\n },\n {\n name: 'relatedCollection',\n type: 'select',\n label: ({ t }) => t('general:collection'),\n // Only offer collections that are visible in the admin UI. Collections hidden via a function\n // are kept since they may still be visible for some users.\n options: (config.collections ?? [])\n .filter((collection) => collection.admin?.hidden !== true)\n .map((collection) => ({\n label: collection.labels?.plural || collection.slug,\n value: collection.slug,\n })),\n required: true,\n },\n {\n name: 'where',\n type: 'json',\n admin: {\n components: {\n Field: '@payloadcms/ui#QueryPresetsWhereField',\n },\n },\n label: ({ t }) => t('general:filters'),\n },\n {\n name: 'sortField',\n type: 'text',\n admin: {\n components: {\n Field: '@payloadcms/ui#CollectionQuerySortField',\n },\n },\n label: ({ t }) => t('dashboard:widgetSortFieldLabel'),\n },\n {\n name: 'sortDirection',\n type: 'select',\n defaultValue: 'desc',\n label: ({ t }) => t('dashboard:widgetSortDirectionLabel'),\n options: [\n {\n label: ({ t }) => t('general:ascending'),\n value: 'asc',\n },\n {\n label: ({ t }) => t('general:descending'),\n value: 'desc',\n },\n ],\n },\n {\n name: 'limit',\n type: 'number',\n defaultValue: 5,\n label: ({ t }) => t('dashboard:widgetLimitLabel'),\n max: 25,\n min: 1,\n },\n ]\n\n const recentlyViewedFields: NonNullable<Widget['fields']> = [\n {\n name: 'excludedCollections',\n type: 'select',\n admin: {\n components: {\n // Presents an inclusion filter (all collections checked by default) while persisting the\n // inverse as an exclusion list, so collections added later stay visible by default.\n Field: '@payloadcms/ui#CollectionFilter',\n },\n description: ({ t }) => t('dashboard:widgetRecentlyViewedFilterDescription'),\n },\n hasMany: true,\n label: ({ t }) => t('general:collections'),\n // Exclusion list, so an empty value shows every collection and newly added collections are\n // included by default. Hidden collections are never offered as options.\n options: (config.collections ?? [])\n .filter((collection) => collection.admin?.hidden !== true)\n .map((collection) => ({\n label: collection.labels?.plural || collection.slug,\n value: collection.slug,\n })),\n },\n ]\n\n const uploadCollections = (config.collections ?? []).filter(\n (collection) =>\n collection.upload &&\n collection.upload.bulkUpload !== false &&\n collection.admin?.hidden !== true,\n )\n\n const adminConfig: NonNullable<Config['admin']> = config.admin ?? { dashboard: { widgets: [] } }\n const dashboard: DashboardConfig = (adminConfig.dashboard ??= { widgets: [] })\n\n dashboard.widgets.push({\n slug: 'welcome',\n Component: '@payloadcms/ui/rsc#WelcomeWidget',\n label: ({ t }) => t('general:welcome'),\n maxWidth: 'full',\n minWidth: 'full',\n })\n dashboard.widgets.push({\n slug: 'collections',\n Component: '@payloadcms/ui/rsc#CollectionCards',\n minWidth: 'full',\n })\n dashboard.widgets.push({\n slug: 'collection-query',\n Component: '@payloadcms/ui/rsc#CollectionQueryWidget',\n fields: sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: collectionQueryFields,\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n }),\n minWidth: 'x-small',\n })\n dashboard.widgets.push({\n slug: 'activity',\n Component: '@payloadcms/ui/rsc#ActivityWidget',\n fields: sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: recentlyViewedFields,\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n }),\n label: ({ t }) => t('dashboard:widgetRecentsAndPinned'),\n minWidth: 'small',\n })\n if (uploadCollections.length > 0) {\n dashboard.widgets.push({\n slug: 'upload-dropzone',\n Component: '@payloadcms/ui/rsc#UploadDropzoneWidget',\n fields: sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: [\n {\n name: 'excludedCollections',\n type: 'select',\n admin: {\n components: {\n Field: '@payloadcms/ui#UploadDropzoneCollectionsField',\n },\n },\n hasMany: true,\n label: ({ t }) => t('general:collections'),\n options: uploadCollections.map((collection) => ({\n label: collection.labels?.plural || collection.slug,\n value: collection.slug,\n })),\n },\n ],\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n }),\n label: ({ t }) => t('dashboard:widgetUploadFiles'),\n minWidth: 'x-small',\n })\n }\n dashboard.defaultLayout ??= [\n {\n widgetSlug: 'welcome',\n width: 'full',\n } satisfies WidgetInstance,\n {\n widgetSlug: 'activity',\n width: 'full',\n } satisfies WidgetInstance,\n {\n widgetSlug: 'collections',\n width: 'full',\n } satisfies WidgetInstance,\n ]\n}\n\nexport const sanitizeConfig = (incomingConfig: Config): SanitizedConfig => {\n const configWithDefaults = addDefaultsToConfig(incomingConfig)\n const { duration, safetyBuffer } = configWithDefaults.jobs!.processingLease!\n if (!(safetyBuffer! >= 0 && safetyBuffer! < duration!)) {\n throw new InvalidConfiguration(\n '`jobs.processingLease.safetyBuffer` must be non-negative and less than `jobs.processingLease.duration`.',\n )\n }\n\n const config: Partial<SanitizedConfig> = sanitizeAdminConfig(configWithDefaults)\n\n if (!config.endpoints) {\n config.endpoints = []\n }\n\n if (configWithDefaults.collections?.some(({ upload }) => upload)) {\n config.endpoints.push(uploadInstructionsEndpoint, ...stagedUploadEndpoints)\n }\n\n for (const endpoint of authRootEndpoints) {\n config.endpoints.push(endpoint)\n }\n\n if (config.localization) {\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 richTextSanitizers: RichTextSanitizer[] = []\n\n const schedulePublishCollections: CollectionSlug[] = []\n\n const queryPresetsCollections: CollectionSlug[] = []\n\n const schedulePublishGlobals: GlobalSlug[] = []\n\n const collectionSlugs = new Set<CollectionSlug>()\n\n const validRelationships = [\n ...(config.collections?.map((c) => c.slug) ?? []),\n jobsCollectionSlug,\n lockedDocumentsCollectionSlug,\n preferencesCollectionSlug,\n ]\n\n const dashboardWidgets = config.admin?.dashboard?.widgets ?? ([] as Widget[])\n\n for (const widget of dashboardWidgets) {\n if (widget.fields?.length) {\n widget.fields = sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: widget.fields,\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n })\n }\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 = sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: sanitizedBlock.fields,\n parentIsLocalized: false,\n richTextSanitizers,\n validRelationships,\n })\n\n const flattenedSanitizedBlock = flattenBlock({ block })\n\n config.blocks.push(flattenedSanitizedBlock)\n }\n }\n\n // Track orderable join fields during sanitization\n const orderableJoins: OrderableJoinInfo[] = []\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] = sanitizeCollection(\n config as unknown as Config,\n config.collections![i]!,\n richTextSanitizers,\n validRelationships,\n orderableJoins,\n )\n }\n\n // Process orderable features after all collections are sanitized\n const fieldsToAdd = new Map<SanitizedCollectionConfig, string[]>()\n const joinFieldPathsByCollection = new Map<string, Map<string, string>>()\n\n // Handle collection.orderable\n for (const collection of config.collections!) {\n if (collection.orderable) {\n const currentFields = fieldsToAdd.get(collection) || []\n fieldsToAdd.set(collection, [...currentFields, '_order'])\n collection.defaultSort = collection.defaultSort ?? '_order'\n }\n }\n\n // Handle orderable join fields (tracked during sanitization)\n for (const joinInfo of orderableJoins) {\n const targetCollection = config.collections!.find(\n (c) => c.slug === joinInfo.targetCollectionSlug,\n )\n if (targetCollection) {\n const currentFields = fieldsToAdd.get(targetCollection) || []\n fieldsToAdd.set(targetCollection, [...currentFields, joinInfo.orderFieldName])\n\n const currentJoinFieldPaths =\n joinFieldPathsByCollection.get(targetCollection.slug) || new Map<string, string>()\n currentJoinFieldPaths.set(joinInfo.orderFieldName, joinInfo.joinFieldOn)\n joinFieldPathsByCollection.set(targetCollection.slug, currentJoinFieldPaths)\n }\n }\n\n // Add fields, hooks, and update flattenedFields\n for (const [collection, orderableFields] of fieldsToAdd) {\n addOrderableFieldsAndHook(\n collection,\n config as unknown as Config,\n orderableFields,\n joinFieldPathsByCollection,\n )\n // Regenerate flattenedFields since we added new fields\n collection.flattenedFields = flattenAllFields({ fields: collection.fields })\n }\n\n // Add endpoint if any orderable features exist\n if (fieldsToAdd.size > 0) {\n addOrderableEndpoint(config as SanitizedConfig, joinFieldPathsByCollection)\n }\n\n if (config.globals!.length > 0) {\n for (let i = 0; i < config.globals!.length; i++) {\n if (hasScheduledPublishEnabled(config.globals![i]!)) {\n schedulePublishGlobals.push(config.globals![i]!.slug)\n }\n\n config.globals![i] = sanitizeGlobal(\n config as unknown as Config,\n config.globals![i]!,\n richTextSanitizers,\n validRelationships,\n )\n }\n }\n\n // Resolve hierarchy relationships across collections (also adds sidebar tabs)\n resolveHierarchyCollections(config as unknown as Config)\n\n if (schedulePublishCollections.length || schedulePublishGlobals.length) {\n ;((config.jobs ??= {} as SanitizedJobsConfig).tasks ??= []).push(\n getSchedulePublishTask({\n authCollectionSlugs: config\n .collections!.filter(({ auth }) => Boolean(auth))\n .map(({ slug }) => slug),\n collections: schedulePublishCollections,\n globals: schedulePublishGlobals,\n }),\n )\n }\n\n ;(config.jobs ??= {} as SanitizedJobsConfig).enabled = Boolean(\n (Array.isArray(configWithDefaults.jobs?.tasks) && configWithDefaults.jobs?.tasks?.length) ||\n (Array.isArray(configWithDefaults.jobs?.workflows) &&\n configWithDefaults.jobs?.workflows?.length),\n )\n config.jobs.hasConcurrency = Boolean(\n config.jobs.tasks?.some((task) => task.concurrency) ||\n config.jobs.workflows?.some((workflow) => workflow.concurrency),\n )\n\n // Need to add default jobs collection before locked documents collections\n if (config.jobs.enabled) {\n // Check for schedule property in both tasks and workflows\n const hasScheduleProperty =\n (config?.jobs?.tasks?.length && config.jobs.tasks.some((task) => task.schedule)) ||\n (config?.jobs?.workflows?.length &&\n config.jobs.workflows.some((workflow) => workflow.schedule))\n\n if (hasScheduleProperty) {\n config.jobs.scheduling = true\n }\n\n // Add payload-jobs-stats global for tracking job system metadata.\n ;(config.globals ??= []).push(\n sanitizeGlobal(\n config as unknown as Config,\n getJobStatsGlobal(),\n richTextSanitizers,\n validRelationships,\n ),\n )\n\n let defaultJobsCollection = getDefaultJobsCollection(config.jobs)\n\n if (typeof config.jobs.jobsCollectionOverrides === 'function') {\n defaultJobsCollection = config.jobs.jobsCollectionOverrides({\n defaultJobsCollection,\n })\n }\n const sanitizedJobsCollection = sanitizeCollection(\n config as unknown as Config,\n defaultJobsCollection,\n richTextSanitizers,\n validRelationships,\n )\n\n ;(config.collections ??= []).push(sanitizedJobsCollection)\n }\n\n const lockedDocumentsCollection = getLockedDocumentsCollection(config as unknown as Config)\n\n if (lockedDocumentsCollection) {\n configWithDefaults.collections!.push(\n sanitizeCollection(\n config as unknown as Config,\n lockedDocumentsCollection,\n richTextSanitizers,\n validRelationships,\n ),\n )\n }\n\n configWithDefaults.collections!.push(\n sanitizeCollection(\n config as unknown as Config,\n getPreferencesCollection(config as unknown as Config),\n richTextSanitizers,\n validRelationships,\n ),\n )\n\n const migrations = sanitizeCollection(\n config as unknown as Config,\n migrationsCollection,\n richTextSanitizers,\n validRelationships,\n )\n\n // @ts-expect-error indexSortableFields is only valid for @payloadcms/db-mongodb\n if (config?.db?.indexSortableFields) {\n migrations.indexes = [\n {\n fields: ['batch', 'name'],\n unique: false,\n },\n ]\n }\n configWithDefaults.collections!.push(migrations)\n\n if (queryPresetsCollections.length > 0) {\n configWithDefaults.collections!.push(\n sanitizeCollection(\n config as unknown as Config,\n getQueryPresetsConfig(config as unknown as Config),\n richTextSanitizers,\n validRelationships,\n ),\n )\n }\n\n addDefaultDashboardWidgets({\n config,\n richTextSanitizers,\n validRelationships,\n })\n\n if (config.serverURL !== '') {\n config.csrf!.push(config.serverURL!)\n }\n\n if (!config.storage) {\n config.storage = []\n }\n\n if (!config.upload) {\n config.upload = { adapters: [], transformers: [] }\n }\n\n config.upload.adapters = Array.from(\n new Set(config.collections!.map((c) => c.upload?.adapter).filter(Boolean) as string[]),\n )\n config.upload.transformers = config.upload.transformers ?? []\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 if (typeof incomingConfig.editor === 'function') {\n config.editor = incomingConfig.editor({\n config: config as SanitizedConfig,\n isRoot: true,\n parentIsLocalized: false,\n })\n }\n\n if (config.llmInstructions !== false) {\n const instructionsCollection = addLLMInstructions({ config: config as SanitizedConfig })\n\n config.collections!.push(\n sanitizeCollection(\n config as unknown as Config,\n instructionsCollection,\n richTextSanitizers,\n validRelationships,\n ),\n )\n }\n\n for (const sanitizeRichText of richTextSanitizers) {\n sanitizeRichText(config as SanitizedConfig)\n }\n\n return config as SanitizedConfig\n}\n"],"names":["en","defaultUserCollection","authRootEndpoints","sanitizeCollection","migrationsCollection","DuplicateCollection","InvalidConfiguration","defaultTimezones","sanitizeGlobal","resolveHierarchyCollections","baseBlockFields","formatLabels","sanitizeFields","addLLMInstructions","getLockedDocumentsCollection","lockedDocumentsCollectionSlug","getPreferencesCollection","preferencesCollectionSlug","getQueryPresetsConfig","queryPresetsCollectionSlug","getDefaultJobsCollection","jobsCollectionSlug","getJobStatsGlobal","stagedUploadEndpoints","uploadInstructionsEndpoint","flattenAllFields","flattenBlock","hasScheduledPublishEnabled","validateTimezones","getSchedulePublishTask","addDefaultsToConfig","addOrderableEndpoint","addOrderableFieldsAndHook","sanitizeAdminConfig","configToSanitize","sanitizedConfig","loggingLevels","Forbidden","Locked","MissingFile","NotFound","ValidationError","admin","user","firstCollectionWithAuth","collections","find","auth","Boolean","slug","push","authCollections","filter","userCollection","timezones","supportedTimezones","source","addDefaultDashboardWidgets","config","richTextSanitizers","validRelationships","collectionQueryFields","name","type","label","t","options","collection","hidden","map","labels","plural","value","required","components","Field","defaultValue","max","min","recentlyViewedFields","description","hasMany","uploadCollections","upload","bulkUpload","adminConfig","dashboard","widgets","Component","maxWidth","minWidth","fields","existingFieldNames","Set","parentIsLocalized","length","defaultLayout","widgetSlug","width","sanitizeConfig","incomingConfig","configWithDefaults","duration","safetyBuffer","jobs","processingLease","endpoints","some","endpoint","localization","firstLocale","locales","localeCodes","locale","code","rtl","toString","fallback","i18nConfig","fallbackLanguage","supportedLanguages","translations","i18n","supportedLangKeys","Object","keys","fallbackLang","includes","schedulePublishCollections","queryPresetsCollections","schedulePublishGlobals","collectionSlugs","c","dashboardWidgets","widget","blocks","block","sanitizedBlock","_sanitized","concat","flattenedSanitizedBlock","orderableJoins","i","has","add","draftsConfig","versions","drafts","schedulePublish","enableQueryPresets","fieldsToAdd","Map","joinFieldPathsByCollection","orderable","currentFields","get","set","defaultSort","joinInfo","targetCollection","targetCollectionSlug","orderFieldName","currentJoinFieldPaths","joinFieldOn","orderableFields","flattenedFields","size","globals","tasks","authCollectionSlugs","enabled","Array","isArray","workflows","hasConcurrency","task","concurrency","workflow","hasScheduleProperty","schedule","scheduling","defaultJobsCollection","jobsCollectionOverrides","sanitizedJobsCollection","lockedDocumentsCollection","migrations","db","indexSortableFields","indexes","unique","serverURL","csrf","storage","adapters","transformers","from","adapter","email","editor","isRoot","llmInstructions","instructionsCollection","sanitizeRichText"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Server-only Payload packages that can skip development transforms.
3
+ * Packages with client components loaded by the import map must remain bundled.
4
+ * Production bundling preserves tree-shaking and avoids duplicate dependencies.
5
+ */
6
+ export declare const devServerExternalPackages: string[];
7
+ /** Third-party packages that both framework adapters externalize in development and production. */
8
+ export declare const serverExternalPackages: string[];
9
+ //# sourceMappingURL=build-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../../src/exports/build-config.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,UAmBrC,CAAA;AAED,mGAAmG;AACnG,eAAO,MAAM,sBAAsB,UAWlC,CAAA"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Server-only Payload packages that can skip development transforms.
3
+ * Packages with client components loaded by the import map must remain bundled.
4
+ * Production bundling preserves tree-shaking and avoids duplicate dependencies.
5
+ */ export const devServerExternalPackages = [
6
+ 'payload',
7
+ '@payloadcms/db-mongodb',
8
+ '@payloadcms/db-postgres',
9
+ '@payloadcms/db-sqlite',
10
+ '@payloadcms/db-vercel-postgres',
11
+ '@payloadcms/db-d1-sqlite',
12
+ '@payloadcms/drizzle',
13
+ '@payloadcms/email-nodemailer',
14
+ '@payloadcms/email-resend',
15
+ '@payloadcms/graphql',
16
+ '@payloadcms/kv-redis',
17
+ '@payloadcms/payload-cloud',
18
+ // Its `/client` entry has no exports, so the import map never loads anything from it.
19
+ '@payloadcms/plugin-mcp',
20
+ '@payloadcms/plugin-nested-docs',
21
+ '@payloadcms/plugin-redirects',
22
+ '@payloadcms/transformer-sharp',
23
+ '@payloadcms/translations'
24
+ ];
25
+ /** Third-party packages that both framework adapters externalize in development and production. */ export const serverExternalPackages = [
26
+ // GraphQL requires a single runtime instance across bundled and external packages.
27
+ 'graphql',
28
+ 'drizzle-kit',
29
+ 'drizzle-kit/api',
30
+ 'sharp',
31
+ 'libsql',
32
+ 'require-in-the-middle',
33
+ 'json-schema-to-typescript',
34
+ // Bundling pino's thread-stream dependency causes Turbopack build errors.
35
+ 'pino'
36
+ ];
37
+
38
+ //# sourceMappingURL=build-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/exports/build-config.js"],"sourcesContent":["/**\n * Server-only Payload packages that can skip development transforms.\n * Packages with client components loaded by the import map must remain bundled.\n * Production bundling preserves tree-shaking and avoids duplicate dependencies.\n */\nexport const devServerExternalPackages = [\n 'payload',\n '@payloadcms/db-mongodb',\n '@payloadcms/db-postgres',\n '@payloadcms/db-sqlite',\n '@payloadcms/db-vercel-postgres',\n '@payloadcms/db-d1-sqlite',\n '@payloadcms/drizzle',\n '@payloadcms/email-nodemailer',\n '@payloadcms/email-resend',\n '@payloadcms/graphql',\n '@payloadcms/kv-redis',\n '@payloadcms/payload-cloud',\n // Its `/client` entry has no exports, so the import map never loads anything from it.\n '@payloadcms/plugin-mcp',\n '@payloadcms/plugin-nested-docs',\n '@payloadcms/plugin-redirects',\n '@payloadcms/transformer-sharp',\n '@payloadcms/translations',\n]\n\n/** Third-party packages that both framework adapters externalize in development and production. */\nexport const serverExternalPackages = [\n // GraphQL requires a single runtime instance across bundled and external packages.\n 'graphql',\n 'drizzle-kit',\n 'drizzle-kit/api',\n 'sharp',\n 'libsql',\n 'require-in-the-middle',\n 'json-schema-to-typescript',\n // Bundling pino's thread-stream dependency causes Turbopack build errors.\n 'pino',\n]\n"],"names":["devServerExternalPackages","serverExternalPackages"],"mappings":"AAAA;;;;CAIC,GACD,OAAO,MAAMA,4BAA4B;IACvC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,sFAAsF;IACtF;IACA;IACA;IACA;IACA;CACD,CAAA;AAED,iGAAiG,GACjG,OAAO,MAAMC,yBAAyB;IACpC,mFAAmF;IACnF;IACA;IACA;IACA;IACA;IACA;IACA;IACA,0EAA0E;IAC1E;CACD,CAAA"}
@@ -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 { ClientTranslationKeys, I18nClient, TFunction } from '@payloadcms/translations'\n\nimport type { ImportMap } from '../../cli/commands/generateImportMap/generateImportMap.js'\nimport type { LabelFunction } from '../../config/types.js'\nimport type {\n AdminClient,\n ArrayFieldClient,\n Block,\n BlockJSX,\n BlocksFieldClient,\n ClientBlock,\n ClientField,\n DateFieldClient,\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 '../../cli/commands/generateImportMap/utilities/getFromImportMap.js'\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { flattenTopLevelFields } from '../../utilities/flattenTopLevelFields.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 | 'jsonSchema'\n | 'label'\n | 'slugify' // This is a `slug` only property — a function, cannot cross the RSC boundary\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 'jsonSchema',\n 'dbName', // can be a function\n 'enumName', // can be a function\n 'graphQL', // client does not need graphQL\n 'slugify', // `slug` field — a function, cannot cross the RSC boundary (server resolves it via `custom.slugify`)\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)[] => {\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 || block.admin?.images) {\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 if (block.admin.images) {\n clientBlock.admin.images = block.admin.images\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 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 'options':\n // Skip - we handle options in the radio/select switch below to avoid mutating the global config\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.blocks?.length) {\n field.blocks = createClientBlocks({\n blocks: incomingField.blocks,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n break\n }\n\n case 'date': {\n // Strip the `override` function from timezone config as it cannot be serialized\n if (\n incomingField.timezone &&\n typeof incomingField.timezone === 'object' &&\n 'override' in incomingField.timezone\n ) {\n const field = clientField as DateFieldClient\n const { override: _, ...timezoneConfigWithoutOverride } = incomingField.timezone\n field.timezone = timezoneConfigWithoutOverride\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 field.options = [] // Create new array to avoid mutating global config\n\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 field.options[i] = {\n label: option.label({ i18n, t: i18n.t as TFunction }),\n value: option.value,\n }\n } else if (typeof option === 'object') {\n field.options[i] = {\n label: option.label,\n value: option.value,\n }\n } else if (typeof option === 'string') {\n field.options[i] = option\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 (key === 'label' && typeof tabProp === 'function') {\n const label = tabProp as LabelFunction\n\n clientTab.label = label({\n i18n,\n t: i18n.t,\n })\n } else if (key === 'description' && typeof tabProp === 'function') {\n const description = tabProp as LabelFunction\n\n clientTab.description = description({\n i18n,\n t: i18n.t,\n })\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,\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 disabled: { bulkEdit: 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","images","jsx","jsxResolved","PayloadComponent","schemaPath","disableBlockName","labels","singular","t","plural","createClientFields","createClientField","field","incomingField","clientField","key","includes","adminKey","description","label","type","disableAddingID","timezone","override","_","timezoneConfigWithoutOverride","targetField","relationTo","options","option","value","editor","Error","tabs","tab","clientTab","tabProp","clientFields","hasID","some","f","name","disabled","bulkEdit","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 { ClientTranslationKeys, I18nClient, TFunction } from '@payloadcms/translations'\n\nimport type { ImportMap } from '../../cli/commands/generateImportMap/generateImportMap.js'\nimport type { LabelFunction } from '../../config/types.js'\nimport type {\n AdminClient,\n ArrayFieldClient,\n Block,\n BlockJSX,\n BlocksFieldClient,\n ClientBlock,\n ClientField,\n DateFieldClient,\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 '../../cli/commands/generateImportMap/utilities/getFromImportMap.js'\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { flattenTopLevelFields } from '../../utilities/flattenTopLevelFields.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 | 'jsonSchema'\n | 'label'\n | 'slugify' // This is a `slug` only property — a function, cannot cross the RSC boundary\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 'jsonSchema',\n 'dbName', // can be a function\n 'enumName', // can be a function\n 'graphQL', // client does not need graphQL\n 'slugify', // `slug` field — a function, cannot cross the RSC boundary (server resolves it via `custom.slugify`)\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)[] => {\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 || block.admin?.images) {\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 if (block.admin.images) {\n clientBlock.admin.images = block.admin.images\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 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 = {}\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 'options':\n // Skip - we handle options in the radio/select switch below to avoid mutating the global config\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.blocks?.length) {\n field.blocks = createClientBlocks({\n blocks: incomingField.blocks,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n break\n }\n\n case 'date': {\n // Strip the `override` function from timezone config as it cannot be serialized\n if (\n incomingField.timezone &&\n typeof incomingField.timezone === 'object' &&\n 'override' in incomingField.timezone\n ) {\n const field = clientField as DateFieldClient\n const { override: _, ...timezoneConfigWithoutOverride } = incomingField.timezone\n field.timezone = timezoneConfigWithoutOverride\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 field.options = [] // Create new array to avoid mutating global config\n\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 field.options[i] = {\n label: option.label({ i18n, t: i18n.t as TFunction }),\n value: option.value,\n }\n } else if (typeof option === 'object') {\n field.options[i] = {\n label: option.label,\n value: option.value,\n }\n } else if (typeof option === 'string') {\n field.options[i] = option\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 (key === 'label' && typeof tabProp === 'function') {\n const label = tabProp as LabelFunction\n\n clientTab.label = label({\n i18n,\n t: i18n.t,\n })\n } else if (key === 'description' && typeof tabProp === 'function') {\n const description = tabProp as LabelFunction\n\n clientTab.description = description({\n i18n,\n t: i18n.t,\n })\n } else if (key === 'admin') {\n clientTab.admin = {}\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,\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 disabled: { bulkEdit: 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","images","jsx","jsxResolved","PayloadComponent","schemaPath","disableBlockName","labels","singular","t","plural","createClientFields","createClientField","field","incomingField","clientField","key","includes","adminKey","description","label","type","disableAddingID","timezone","override","_","timezoneConfigWithoutOverride","targetField","relationTo","options","option","value","editor","Error","tabs","tab","clientTab","tabProp","clientFields","hasID","some","f","name","disabled","bulkEdit","hidden"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/afterChange/promise.ts"],"sourcesContent":["import type { RichTextAdapter } from '../../../admin/RichText.js'\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Block, Field, TabAsField } from '../../config/types.js'\n\nimport { MissingEditorProp } from '../../../errors/index.js'\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n /**\n * Data of the nearest parent block. If no parent block exists, this will be the `undefined`\n */\n blockData?: JsonObject\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: JsonObject\n doc: JsonObject\n field: Field | TabAsField\n fieldIndex: number\n global: null | SanitizedGlobalConfig\n operation: 'create' | 'update'\n parentIndexPath: string\n parentIsLocalized: boolean\n parentPath: string\n parentSchemaPath: string\n previousDoc: JsonObject\n previousSiblingDoc: JsonObject\n req: PayloadRequest\n siblingData: JsonObject\n siblingDoc: JsonObject\n siblingFields?: (Field | TabAsField)[]\n}\n\n// This function is responsible for the following actions, in order:\n// - Execute field hooks\n\nexport const promise = async ({\n blockData,\n collection,\n context,\n data,\n doc,\n field,\n fieldIndex,\n global,\n operation,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n previousDoc,\n previousSiblingDoc,\n req,\n siblingData,\n siblingDoc,\n siblingFields,\n}: Args): Promise<void> => {\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n const pathSegments = path ? path.split('.') : []\n const schemaPathSegments = schemaPath ? schemaPath.split('.') : []\n const indexPathSegments = indexPath ? indexPath.split('-').filter(Boolean)?.map(Number) : []\n const getNestedValue = (data: JsonObject, path: string[]) =>\n path.reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), data)\n const previousValData =\n previousSiblingDoc && Object.keys(previousSiblingDoc).length > 0\n ? previousSiblingDoc\n : previousDoc\n\n if (fieldAffectsData(field)) {\n // Execute hooks\n if ('hooks' in field && field.hooks?.afterChange) {\n for (const hook of field.hooks.afterChange) {\n const hookedValue = await hook({\n blockData,\n collection,\n context,\n data,\n field,\n global,\n indexPath: indexPathSegments,\n operation,\n originalDoc: doc,\n path: pathSegments,\n previousDoc,\n previousSiblingDoc,\n previousValue:\n getNestedValue(previousValData, pathSegments) ?? previousValData?.[field.name],\n req,\n schemaPath: schemaPathSegments,\n siblingData,\n siblingFields: siblingFields!,\n value: getNestedValue(siblingDoc, pathSegments) ?? siblingDoc?.[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingDoc[field.name] = hookedValue\n }\n }\n }\n }\n\n // Traverse subfields\n switch (field.type) {\n case 'array': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n rows.forEach((row, rowIndex) => {\n promises.push(\n traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: previousDoc?.[field.name]?.[rowIndex] || ({} as JsonObject),\n req,\n siblingData: siblingData?.[field.name]?.[rowIndex] || {},\n siblingDoc: row ? { ...row } : {},\n }),\n )\n })\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n const blockTypeToMatch = (row as JsonObject).blockType\n\n const block: Block | undefined =\n req.payload.blocks[blockTypeToMatch] ??\n (field.blocks.find(\n (curBlock) => typeof curBlock !== 'string' && curBlock.slug === blockTypeToMatch,\n ) as Block | undefined)\n\n if (block) {\n promises.push(\n traverseFields({\n blockData: siblingData?.[field.name]?.[rowIndex],\n collection,\n context,\n data,\n doc,\n fields: block.fields,\n global,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath + '.' + block.slug,\n previousDoc,\n previousSiblingDoc: previousValData?.[field.name]?.[rowIndex] || ({} as JsonObject),\n req,\n siblingData: siblingData?.[field.name]?.[rowIndex] || {},\n siblingDoc: row ? { ...row } : {},\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'collapsible':\n case 'row': {\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: { ...previousSiblingDoc },\n req,\n siblingData: siblingData || {},\n siblingDoc: { ...siblingDoc },\n })\n\n break\n }\n\n case 'group': {\n if (fieldAffectsData(field)) {\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: (previousDoc?.[field.name] as JsonObject) || {},\n req,\n siblingData: (siblingData?.[field.name] as JsonObject) || {},\n siblingDoc: (siblingDoc?.[field.name] as JsonObject) || {},\n })\n } else {\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: { ...previousSiblingDoc },\n req,\n siblingData: siblingData || {},\n siblingDoc: { ...siblingDoc },\n })\n }\n\n break\n }\n\n case 'richText': {\n if (!field?.editor) {\n throw new MissingEditorProp(field) // 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 field.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = field.editor\n\n if (editor?.hooks?.afterChange?.length) {\n for (const hook of editor.hooks.afterChange) {\n const hookedValue = await hook({\n collection,\n context,\n data,\n field,\n global,\n indexPath: indexPathSegments,\n operation,\n originalDoc: doc,\n parentIsLocalized,\n path: pathSegments,\n previousDoc,\n previousSiblingDoc,\n previousValue:\n getNestedValue(previousValData, pathSegments) ?? previousValData?.[field.name],\n req,\n schemaPath: schemaPathSegments,\n siblingData,\n value: siblingDoc?.[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingDoc[field.name] = hookedValue\n }\n }\n }\n break\n }\n\n case 'tab': {\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabPreviousSiblingDoc = { ...previousDoc }\n\n const isNamedTab = tabHasName(field)\n\n if (isNamedTab) {\n tabSiblingData = (siblingData?.[field.name] ?? {}) as JsonObject\n tabSiblingDoc = (siblingDoc?.[field.name] ?? {}) as JsonObject\n tabPreviousSiblingDoc = (previousSiblingDoc?.[field.name] ?? {}) as JsonObject\n }\n\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: isNamedTab ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: isNamedTab ? path : parentPath,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: tabPreviousSiblingDoc,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: { ...previousSiblingDoc },\n req,\n siblingData: siblingData || {},\n siblingDoc: { ...siblingDoc },\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["MissingEditorProp","fieldAffectsData","tabHasName","getFieldPaths","traverseFields","promise","blockData","collection","context","data","doc","field","fieldIndex","global","operation","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","previousDoc","previousSiblingDoc","req","siblingData","siblingDoc","siblingFields","indexPath","path","schemaPath","index","pathSegments","split","schemaPathSegments","indexPathSegments","filter","Boolean","map","Number","getNestedValue","reduce","acc","key","undefined","previousValData","Object","keys","length","hooks","afterChange","hook","hookedValue","originalDoc","previousValue","name","value","type","rows","Array","isArray","promises","forEach","row","rowIndex","push","fields","localized","Promise","all","blockTypeToMatch","blockType","block","payload","blocks","find","curBlock","slug","editor","Error","tabSiblingData","tabSiblingDoc","tabPreviousSiblingDoc","isNamedTab","tabs","tab"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/afterChange/promise.ts"],"sourcesContent":["import type { RichTextAdapter } from '../../../admin/RichText.js'\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Block, Field, TabAsField } from '../../config/types.js'\n\nimport { MissingEditorProp } from '../../../errors/index.js'\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n /**\n * Data of the nearest parent block. If no parent block exists, this will be the `undefined`\n */\n blockData?: JsonObject\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: JsonObject\n doc: JsonObject\n field: Field | TabAsField\n fieldIndex: number\n global: null | SanitizedGlobalConfig\n operation: 'create' | 'update'\n parentIndexPath: string\n parentIsLocalized: boolean\n parentPath: string\n parentSchemaPath: string\n previousDoc: JsonObject\n previousSiblingDoc: JsonObject\n req: PayloadRequest\n siblingData: JsonObject\n siblingDoc: JsonObject\n siblingFields?: (Field | TabAsField)[]\n}\n\n// This function is responsible for the following actions, in order:\n// - Execute field hooks\n\nexport const promise = async ({\n blockData,\n collection,\n context,\n data,\n doc,\n field,\n fieldIndex,\n global,\n operation,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n previousDoc,\n previousSiblingDoc,\n req,\n siblingData,\n siblingDoc,\n siblingFields,\n}: Args): Promise<void> => {\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n const pathSegments = path ? path.split('.') : []\n const schemaPathSegments = schemaPath ? schemaPath.split('.') : []\n const indexPathSegments = indexPath ? indexPath.split('-').filter(Boolean)?.map(Number) : []\n const getNestedValue = (data: JsonObject, path: string[]) =>\n path.reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), data)\n const previousValData =\n previousSiblingDoc && Object.keys(previousSiblingDoc).length > 0\n ? previousSiblingDoc\n : previousDoc\n\n if (fieldAffectsData(field)) {\n // Execute hooks\n if ('hooks' in field && field.hooks?.afterChange) {\n for (const hook of field.hooks.afterChange) {\n const hookedValue = await hook({\n blockData,\n collection,\n context,\n data,\n field,\n global,\n indexPath: indexPathSegments,\n operation,\n originalDoc: doc,\n path: pathSegments,\n previousDoc,\n previousSiblingDoc,\n previousValue:\n getNestedValue(previousValData, pathSegments) ?? previousValData?.[field.name],\n req,\n schemaPath: schemaPathSegments,\n siblingData,\n siblingFields: siblingFields!,\n value: getNestedValue(siblingDoc, pathSegments) ?? siblingDoc?.[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingDoc[field.name] = hookedValue\n }\n }\n }\n }\n\n // Traverse subfields\n switch (field.type) {\n case 'array': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n rows.forEach((row, rowIndex) => {\n promises.push(\n traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: previousDoc?.[field.name]?.[rowIndex] || {},\n req,\n siblingData: siblingData?.[field.name]?.[rowIndex] || {},\n siblingDoc: row ? { ...row } : {},\n }),\n )\n })\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n const blockTypeToMatch = (row as JsonObject).blockType\n\n const block: Block | undefined =\n req.payload.blocks[blockTypeToMatch] ??\n (field.blocks.find(\n (curBlock) => typeof curBlock !== 'string' && curBlock.slug === blockTypeToMatch,\n ) as Block | undefined)\n\n if (block) {\n promises.push(\n traverseFields({\n blockData: siblingData?.[field.name]?.[rowIndex],\n collection,\n context,\n data,\n doc,\n fields: block.fields,\n global,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath + '.' + block.slug,\n previousDoc,\n previousSiblingDoc: previousValData?.[field.name]?.[rowIndex] || {},\n req,\n siblingData: siblingData?.[field.name]?.[rowIndex] || {},\n siblingDoc: row ? { ...row } : {},\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'collapsible':\n case 'row': {\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: { ...previousSiblingDoc },\n req,\n siblingData: siblingData || {},\n siblingDoc: { ...siblingDoc },\n })\n\n break\n }\n\n case 'group': {\n if (fieldAffectsData(field)) {\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: (previousDoc?.[field.name] as JsonObject) || {},\n req,\n siblingData: (siblingData?.[field.name] as JsonObject) || {},\n siblingDoc: (siblingDoc?.[field.name] as JsonObject) || {},\n })\n } else {\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: { ...previousSiblingDoc },\n req,\n siblingData: siblingData || {},\n siblingDoc: { ...siblingDoc },\n })\n }\n\n break\n }\n\n case 'richText': {\n if (!field?.editor) {\n throw new MissingEditorProp(field) // 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 field.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = field.editor\n\n if (editor?.hooks?.afterChange?.length) {\n for (const hook of editor.hooks.afterChange) {\n const hookedValue = await hook({\n collection,\n context,\n data,\n field,\n global,\n indexPath: indexPathSegments,\n operation,\n originalDoc: doc,\n parentIsLocalized,\n path: pathSegments,\n previousDoc,\n previousSiblingDoc,\n previousValue:\n getNestedValue(previousValData, pathSegments) ?? previousValData?.[field.name],\n req,\n schemaPath: schemaPathSegments,\n siblingData,\n value: siblingDoc?.[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingDoc[field.name] = hookedValue\n }\n }\n }\n break\n }\n\n case 'tab': {\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabPreviousSiblingDoc = { ...previousDoc }\n\n const isNamedTab = tabHasName(field)\n\n if (isNamedTab) {\n tabSiblingData = (siblingData?.[field.name] ?? {}) as JsonObject\n tabSiblingDoc = (siblingDoc?.[field.name] ?? {}) as JsonObject\n tabPreviousSiblingDoc = (previousSiblingDoc?.[field.name] ?? {}) as JsonObject\n }\n\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n parentIndexPath: isNamedTab ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || field.localized,\n parentPath: isNamedTab ? path : parentPath,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: tabPreviousSiblingDoc,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n blockData,\n collection,\n context,\n data,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n operation,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n previousDoc,\n previousSiblingDoc: { ...previousSiblingDoc },\n req,\n siblingData: siblingData || {},\n siblingDoc: { ...siblingDoc },\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["MissingEditorProp","fieldAffectsData","tabHasName","getFieldPaths","traverseFields","promise","blockData","collection","context","data","doc","field","fieldIndex","global","operation","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","previousDoc","previousSiblingDoc","req","siblingData","siblingDoc","siblingFields","indexPath","path","schemaPath","index","pathSegments","split","schemaPathSegments","indexPathSegments","filter","Boolean","map","Number","getNestedValue","reduce","acc","key","undefined","previousValData","Object","keys","length","hooks","afterChange","hook","hookedValue","originalDoc","previousValue","name","value","type","rows","Array","isArray","promises","forEach","row","rowIndex","push","fields","localized","Promise","all","blockTypeToMatch","blockType","block","payload","blocks","find","curBlock","slug","editor","Error","tabSiblingData","tabSiblingDoc","tabPreviousSiblingDoc","isNamedTab","tabs","tab"],"mappings":"AAOA,SAASA,iBAAiB,QAAQ,2BAA0B;AAC5D,SAASC,gBAAgB,EAAEC,UAAU,QAAQ,wBAAuB;AACpE,SAASC,aAAa,QAAQ,yBAAwB;AACtD,SAASC,cAAc,QAAQ,sBAAqB;AA2BpD,oEAAoE;AACpE,wBAAwB;AAExB,OAAO,MAAMC,UAAU,OAAO,EAC5BC,SAAS,EACTC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,KAAK,EACLC,UAAU,EACVC,MAAM,EACNC,SAAS,EACTC,eAAe,EACfC,iBAAiB,EACjBC,UAAU,EACVC,gBAAgB,EAChBC,WAAW,EACXC,kBAAkB,EAClBC,GAAG,EACHC,WAAW,EACXC,UAAU,EACVC,aAAa,EACR;IACL,MAAM,EAAEC,SAAS,EAAEC,IAAI,EAAEC,UAAU,EAAE,GAAGxB,cAAc;QACpDQ;QACAiB,OAAOhB;QACPG;QACAE;QACAC;IACF;IAEA,MAAMW,eAAeH,OAAOA,KAAKI,KAAK,CAAC,OAAO,EAAE;IAChD,MAAMC,qBAAqBJ,aAAaA,WAAWG,KAAK,CAAC,OAAO,EAAE;IAClE,MAAME,oBAAoBP,YAAYA,UAAUK,KAAK,CAAC,KAAKG,MAAM,CAACC,UAAUC,IAAIC,UAAU,EAAE;IAC5F,MAAMC,iBAAiB,CAAC5B,MAAkBiB,OACxCA,KAAKY,MAAM,CAAC,CAACC,KAAKC,MAASD,OAAOA,GAAG,CAACC,IAAI,KAAKC,YAAYF,GAAG,CAACC,IAAI,GAAGC,WAAYhC;IACpF,MAAMiC,kBACJtB,sBAAsBuB,OAAOC,IAAI,CAACxB,oBAAoByB,MAAM,GAAG,IAC3DzB,qBACAD;IAEN,IAAIlB,iBAAiBU,QAAQ;QAC3B,gBAAgB;QAChB,IAAI,WAAWA,SAASA,MAAMmC,KAAK,EAAEC,aAAa;YAChD,KAAK,MAAMC,QAAQrC,MAAMmC,KAAK,CAACC,WAAW,CAAE;gBAC1C,MAAME,cAAc,MAAMD,KAAK;oBAC7B1C;oBACAC;oBACAC;oBACAC;oBACAE;oBACAE;oBACAY,WAAWO;oBACXlB;oBACAoC,aAAaxC;oBACbgB,MAAMG;oBACNV;oBACAC;oBACA+B,eACEd,eAAeK,iBAAiBb,iBAAiBa,iBAAiB,CAAC/B,MAAMyC,IAAI,CAAC;oBAChF/B;oBACAM,YAAYI;oBACZT;oBACAE,eAAeA;oBACf6B,OAAOhB,eAAed,YAAYM,iBAAiBN,YAAY,CAACZ,MAAMyC,IAAI,CAAC;gBAC7E;gBAEA,IAAIH,gBAAgBR,WAAW;oBAC7BlB,UAAU,CAACZ,MAAMyC,IAAI,CAAC,GAAGH;gBAC3B;YACF;QACF;IACF;IAEA,qBAAqB;IACrB,OAAQtC,MAAM2C,IAAI;QAChB,KAAK;YAAS;gBACZ,MAAMC,OAAOhC,UAAU,CAACZ,MAAMyC,IAAI,CAAC;gBAEnC,IAAII,MAAMC,OAAO,CAACF,OAAO;oBACvB,MAAMG,WAA4B,EAAE;oBACpCH,KAAKI,OAAO,CAAC,CAACC,KAAKC;wBACjBH,SAASI,IAAI,CACX1D,eAAe;4BACbE;4BACAC;4BACAC;4BACAC;4BACAC;4BACAqD,QAAQpD,MAAMoD,MAAM;4BACpBlD;4BACAC;4BACAC,iBAAiB;4BACjBC,mBAAmBA,qBAAqBL,MAAMqD,SAAS;4BACvD/C,YAAYS,OAAO,MAAMmC;4BACzB3C,kBAAkBS;4BAClBR;4BACAC,oBAAoBD,aAAa,CAACR,MAAMyC,IAAI,CAAC,EAAE,CAACS,SAAS,IAAI,CAAC;4BAC9DxC;4BACAC,aAAaA,aAAa,CAACX,MAAMyC,IAAI,CAAC,EAAE,CAACS,SAAS,IAAI,CAAC;4BACvDtC,YAAYqC,MAAM;gCAAE,GAAGA,GAAG;4BAAC,IAAI,CAAC;wBAClC;oBAEJ;oBACA,MAAMK,QAAQC,GAAG,CAACR;gBACpB;gBAEA;YACF;QAEA,KAAK;YAAU;gBACb,MAAMH,OAAOhC,UAAU,CAACZ,MAAMyC,IAAI,CAAC;gBAEnC,IAAII,MAAMC,OAAO,CAACF,OAAO;oBACvB,MAAMG,WAA4B,EAAE;oBAEpCH,KAAKI,OAAO,CAAC,CAACC,KAAKC;wBACjB,MAAMM,mBAAmB,AAACP,IAAmBQ,SAAS;wBAEtD,MAAMC,QACJhD,IAAIiD,OAAO,CAACC,MAAM,CAACJ,iBAAiB,IACnCxD,MAAM4D,MAAM,CAACC,IAAI,CAChB,CAACC,WAAa,OAAOA,aAAa,YAAYA,SAASC,IAAI,KAAKP;wBAGpE,IAAIE,OAAO;4BACTX,SAASI,IAAI,CACX1D,eAAe;gCACbE,WAAWgB,aAAa,CAACX,MAAMyC,IAAI,CAAC,EAAE,CAACS,SAAS;gCAChDtD;gCACAC;gCACAC;gCACAC;gCACAqD,QAAQM,MAAMN,MAAM;gCACpBlD;gCACAC;gCACAC,iBAAiB;gCACjBC,mBAAmBA,qBAAqBL,MAAMqD,SAAS;gCACvD/C,YAAYS,OAAO,MAAMmC;gCACzB3C,kBAAkBS,aAAa,MAAM0C,MAAMK,IAAI;gCAC/CvD;gCACAC,oBAAoBsB,iBAAiB,CAAC/B,MAAMyC,IAAI,CAAC,EAAE,CAACS,SAAS,IAAI,CAAC;gCAClExC;gCACAC,aAAaA,aAAa,CAACX,MAAMyC,IAAI,CAAC,EAAE,CAACS,SAAS,IAAI,CAAC;gCACvDtC,YAAYqC,MAAM;oCAAE,GAAGA,GAAG;gCAAC,IAAI,CAAC;4BAClC;wBAEJ;oBACF;oBAEA,MAAMK,QAAQC,GAAG,CAACR;gBACpB;gBAEA;YACF;QAEA,KAAK;QACL,KAAK;YAAO;gBACV,MAAMtD,eAAe;oBACnBE;oBACAC;oBACAC;oBACAC;oBACAC;oBACAqD,QAAQpD,MAAMoD,MAAM;oBACpBlD;oBACAC;oBACAC,iBAAiBU;oBACjBT;oBACAC;oBACAC,kBAAkBS;oBAClBR;oBACAC,oBAAoB;wBAAE,GAAGA,kBAAkB;oBAAC;oBAC5CC;oBACAC,aAAaA,eAAe,CAAC;oBAC7BC,YAAY;wBAAE,GAAGA,UAAU;oBAAC;gBAC9B;gBAEA;YACF;QAEA,KAAK;YAAS;gBACZ,IAAItB,iBAAiBU,QAAQ;oBAC3B,MAAMP,eAAe;wBACnBE;wBACAC;wBACAC;wBACAC;wBACAC;wBACAqD,QAAQpD,MAAMoD,MAAM;wBACpBlD;wBACAC;wBACAC,iBAAiB;wBACjBC,mBAAmBA,qBAAqBL,MAAMqD,SAAS;wBACvD/C,YAAYS;wBACZR,kBAAkBS;wBAClBR;wBACAC,oBAAoB,AAACD,aAAa,CAACR,MAAMyC,IAAI,CAAC,IAAmB,CAAC;wBAClE/B;wBACAC,aAAa,AAACA,aAAa,CAACX,MAAMyC,IAAI,CAAC,IAAmB,CAAC;wBAC3D7B,YAAY,AAACA,YAAY,CAACZ,MAAMyC,IAAI,CAAC,IAAmB,CAAC;oBAC3D;gBACF,OAAO;oBACL,MAAMhD,eAAe;wBACnBE;wBACAC;wBACAC;wBACAC;wBACAC;wBACAqD,QAAQpD,MAAMoD,MAAM;wBACpBlD;wBACAC;wBACAC,iBAAiBU;wBACjBT;wBACAC;wBACAC,kBAAkBS;wBAClBR;wBACAC,oBAAoB;4BAAE,GAAGA,kBAAkB;wBAAC;wBAC5CC;wBACAC,aAAaA,eAAe,CAAC;wBAC7BC,YAAY;4BAAE,GAAGA,UAAU;wBAAC;oBAC9B;gBACF;gBAEA;YACF;QAEA,KAAK;YAAY;gBACf,IAAI,CAACZ,OAAOgE,QAAQ;oBAClB,MAAM,IAAI3E,kBAAkBW,OAAO,8HAA8H;;gBACnK;gBAEA,IAAI,OAAOA,MAAMgE,MAAM,KAAK,YAAY;oBACtC,MAAM,IAAIC,MAAM;gBAClB;gBAEA,MAAMD,SAA0BhE,MAAMgE,MAAM;gBAE5C,IAAIA,QAAQ7B,OAAOC,aAAaF,QAAQ;oBACtC,KAAK,MAAMG,QAAQ2B,OAAO7B,KAAK,CAACC,WAAW,CAAE;wBAC3C,MAAME,cAAc,MAAMD,KAAK;4BAC7BzC;4BACAC;4BACAC;4BACAE;4BACAE;4BACAY,WAAWO;4BACXlB;4BACAoC,aAAaxC;4BACbM;4BACAU,MAAMG;4BACNV;4BACAC;4BACA+B,eACEd,eAAeK,iBAAiBb,iBAAiBa,iBAAiB,CAAC/B,MAAMyC,IAAI,CAAC;4BAChF/B;4BACAM,YAAYI;4BACZT;4BACA+B,OAAO9B,YAAY,CAACZ,MAAMyC,IAAI,CAAC;wBACjC;wBAEA,IAAIH,gBAAgBR,WAAW;4BAC7BlB,UAAU,CAACZ,MAAMyC,IAAI,CAAC,GAAGH;wBAC3B;oBACF;gBACF;gBACA;YACF;QAEA,KAAK;YAAO;gBACV,IAAI4B,iBAAiBvD;gBACrB,IAAIwD,gBAAgBvD;gBACpB,IAAIwD,wBAAwB;oBAAE,GAAG5D,WAAW;gBAAC;gBAE7C,MAAM6D,aAAa9E,WAAWS;gBAE9B,IAAIqE,YAAY;oBACdH,iBAAkBvD,aAAa,CAACX,MAAMyC,IAAI,CAAC,IAAI,CAAC;oBAChD0B,gBAAiBvD,YAAY,CAACZ,MAAMyC,IAAI,CAAC,IAAI,CAAC;oBAC9C2B,wBAAyB3D,oBAAoB,CAACT,MAAMyC,IAAI,CAAC,IAAI,CAAC;gBAChE;gBAEA,MAAMhD,eAAe;oBACnBE;oBACAC;oBACAC;oBACAC;oBACAC;oBACAqD,QAAQpD,MAAMoD,MAAM;oBACpBlD;oBACAC;oBACAC,iBAAiBiE,aAAa,KAAKvD;oBACnCT,mBAAmBA,qBAAqBL,MAAMqD,SAAS;oBACvD/C,YAAY+D,aAAatD,OAAOT;oBAChCC,kBAAkBS;oBAClBR;oBACAC,oBAAoB2D;oBACpB1D;oBACAC,aAAauD;oBACbtD,YAAYuD;gBACd;gBAEA;YACF;QAEA,KAAK;YAAQ;gBACX,MAAM1E,eAAe;oBACnBE;oBACAC;oBACAC;oBACAC;oBACAC;oBACAqD,QAAQpD,MAAMsE,IAAI,CAAC9C,GAAG,CAAC,CAAC+C,MAAS,CAAA;4BAAE,GAAGA,GAAG;4BAAE5B,MAAM;wBAAM,CAAA;oBACvDzC;oBACAC;oBACAC,iBAAiBU;oBACjBT;oBACAC,YAAYS;oBACZR,kBAAkBS;oBAClBR;oBACAC,oBAAoB;wBAAE,GAAGA,kBAAkB;oBAAC;oBAC5CC;oBACAC,aAAaA,eAAe,CAAC;oBAC7BC,YAAY;wBAAE,GAAGA,UAAU;oBAAC;gBAC9B;gBAEA;YACF;QAEA;YAAS;gBACP;YACF;IACF;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/fields/validations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/fields/validations.ts"],"names":[],"mappings":"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"}
@@ -110,7 +110,10 @@ export const email = (value, { collectionSlug, req: { payload: { collections, co
110
110
  * Allows domains with consecutive hyphens as long as they are not leading/trailing (e.g., user@ex--ample.com)
111
111
  * Supports multiple subdomains (e.g., user@sub.domain.example.com)
112
112
  */ const emailRegex = /^(?!.*\.\.)[\w!#$%&'*+/=?^`{|}~-](?:[\w!#$%&'*+/=?^`{|}~.-]*[\w!#$%&'*+/=?^`{|}~-])?@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*\.[a-z]{2,}$/i;
113
- if (value && !emailRegex.test(value) || !value && required) {
113
+ if (!value && required) {
114
+ return t('validation:required');
115
+ }
116
+ if (value && !emailRegex.test(value)) {
114
117
  return t('validation:emailAddress');
115
118
  }
116
119
  return true;