payload 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ec73d44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/adapters/router.d.ts +1 -1
- package/dist/admin/adapters/router.d.ts.map +1 -1
- package/dist/admin/adapters/router.js.map +1 -1
- package/dist/admin/forms/Diff.d.ts +0 -4
- package/dist/admin/forms/Diff.d.ts.map +1 -1
- package/dist/admin/forms/Diff.js.map +1 -1
- package/dist/admin/getAdminPreferences.js +1 -1
- package/dist/admin/getAdminPreferences.js.map +1 -1
- package/dist/admin/initAdminContext.js.map +1 -1
- package/dist/auth/getFieldsToSign.js.map +1 -1
- package/dist/auth/loginWithCookie.js.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.js +50 -1
- package/dist/auth/operations/resetPassword.js.map +1 -1
- package/dist/auth/serverFunctions/cookies.js.map +1 -1
- package/dist/auth/serverFunctions/login.js.map +1 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/branching/discard.js +1 -1
- package/dist/branching/discard.js.map +1 -1
- package/dist/branching/merge/prepareMerge.js +1 -1
- package/dist/branching/merge/prepareMerge.js.map +1 -1
- package/dist/branching/merge/retryFailedCleanups.js.map +1 -1
- package/dist/branching/resolveBranchQuery.d.ts.map +1 -1
- package/dist/branching/resolveBranchQuery.js +0 -3
- package/dist/branching/resolveBranchQuery.js.map +1 -1
- package/dist/branching/sanitizeBranchingConfig.d.ts.map +1 -1
- package/dist/branching/sanitizeBranchingConfig.js +0 -3
- package/dist/branching/sanitizeBranchingConfig.js.map +1 -1
- package/dist/branching/schedule/job.d.ts.map +1 -1
- package/dist/branching/schedule/job.js +7 -0
- package/dist/branching/schedule/job.js.map +1 -1
- package/dist/branching/types.d.ts +4 -13
- package/dist/branching/types.d.ts.map +1 -1
- package/dist/branching/types.js.map +1 -1
- package/dist/cli/commands/data/utilities.d.ts +1 -1
- package/dist/cli/commands/data/utilities.d.ts.map +1 -1
- package/dist/cli/commands/data/utilities.js.map +1 -1
- package/dist/cli/defineCLICommand.js +1 -1
- package/dist/cli/defineCLICommand.js.map +1 -1
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/types.d.ts +4 -1
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/operations/delete.js.map +1 -1
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.js +11 -0
- package/dist/collections/operations/findVersionByID.js.map +1 -1
- package/dist/collections/operations/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/findVersions.js +11 -0
- package/dist/collections/operations/findVersions.js.map +1 -1
- package/dist/collections/operations/local/findDistinct.js.map +1 -1
- package/dist/collections/operations/renameFile.js +1 -1
- package/dist/collections/operations/renameFile.js.map +1 -1
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/update.js +1 -1
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/collections/operations/validate.js +4 -4
- package/dist/collections/operations/validate.js.map +1 -1
- package/dist/config/client.d.ts.map +1 -1
- package/dist/config/client.js +1 -0
- package/dist/config/client.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +1 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/definePlugin.js.map +1 -1
- package/dist/config/sanitize.js +2 -2
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +8 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/types.d.ts +4 -0
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js.map +1 -1
- package/dist/exports/build-config.d.ts +9 -0
- package/dist/exports/build-config.d.ts.map +1 -0
- package/dist/exports/build-config.js +38 -0
- package/dist/exports/build-config.js.map +1 -0
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/config/reservedFieldNames.d.ts.map +1 -1
- package/dist/fields/config/reservedFieldNames.js.map +1 -1
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/afterChange/promise.js.map +1 -1
- package/dist/fields/hooks/afterRead/promise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts +14 -0
- package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts.map +1 -0
- package/dist/fields/hooks/beforeChange/flattenValidationData.js +36 -0
- package/dist/fields/hooks/beforeChange/flattenValidationData.js.map +1 -0
- package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +96 -22
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js +2 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +4 -1
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/config/types.d.ts +2 -1
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js.map +1 -1
- package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/findVersionByID.js +7 -0
- package/dist/globals/operations/findVersionByID.js.map +1 -1
- package/dist/globals/operations/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/findVersions.js +5 -0
- package/dist/globals/operations/findVersions.js.map +1 -1
- package/dist/globals/operations/local/findOne.js.map +1 -1
- package/dist/globals/operations/local/update.js.map +1 -1
- package/dist/globals/operations/restoreVersion.d.ts +2 -3
- package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/restoreVersion.js +24 -20
- package/dist/globals/operations/restoreVersion.js.map +1 -1
- package/dist/globals/operations/validate.js +1 -1
- package/dist/globals/operations/validate.js.map +1 -1
- package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -1
- package/dist/hierarchy/addHierarchyToCollection.js +32 -21
- package/dist/hierarchy/addHierarchyToCollection.js.map +1 -1
- package/dist/hierarchy/createFolderField.js.map +1 -1
- package/dist/hierarchy/resolveHierarchyCollections.js +9 -3
- package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -1
- package/dist/hierarchy/utils/computePaths.d.ts.map +1 -1
- package/dist/hierarchy/utils/computePaths.js.map +1 -1
- package/dist/index.bundled.d.ts +47 -27
- package/dist/llm-instructions/getInstructionsCollection.d.ts.map +1 -1
- package/dist/llm-instructions/getInstructionsCollection.js +2 -0
- package/dist/llm-instructions/getInstructionsCollection.js.map +1 -1
- package/dist/preferences/keys.d.ts +3 -9
- package/dist/preferences/keys.d.ts.map +1 -1
- package/dist/preferences/keys.js +3 -9
- package/dist/preferences/keys.js.map +1 -1
- package/dist/preferences/types.d.ts +1 -1
- package/dist/preferences/types.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
- package/dist/types/index.d.ts +9 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/uploads/fileVersioning/archive.js.map +1 -1
- package/dist/uploads/fileVersioning/cloudStorage.js.map +1 -1
- package/dist/uploads/fileVersioning/resolveHistoricalFile.js.map +1 -1
- package/dist/uploads/formatFilesize.js +1 -1
- package/dist/uploads/formatFilesize.js.map +1 -1
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js.map +1 -1
- package/dist/uploads/getFileContentRequirement.js.map +1 -1
- package/dist/uploads/getFileFromUploadInstructions.js.map +1 -1
- package/dist/uploads/safeFetch.js.map +1 -1
- package/dist/uploads/stagedUpload.js.map +1 -1
- package/dist/uploads/transformers/handleDynamicFileRequest.js +11 -2
- package/dist/uploads/transformers/handleDynamicFileRequest.js.map +1 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.js +0 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.js.map +1 -1
- package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
- package/dist/utilities/cloneValidationRequest.js.map +1 -1
- package/dist/utilities/createPayloadRequest.js.map +1 -1
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/dist/utilities/documentMatchingWhereExists.js +1 -1
- package/dist/utilities/documentMatchingWhereExists.js.map +1 -1
- package/dist/utilities/entityInputSchema/validateEntityData.d.ts.map +1 -1
- package/dist/utilities/entityInputSchema/validateEntityData.js.map +1 -1
- package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js +1 -0
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
- package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
- package/dist/utilities/getVersionsConfig.d.ts +4 -0
- package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
- package/dist/utilities/getVersionsConfig.js +5 -0
- package/dist/utilities/getVersionsConfig.js.map +1 -1
- package/dist/utilities/parseParams/index.js.map +1 -1
- package/dist/utilities/parseValidationLocale.js.map +1 -1
- package/dist/utilities/sanitizePopulateParam.js.map +1 -1
- package/dist/utilities/telemetry/conf/index.d.ts +4 -1
- package/dist/utilities/telemetry/conf/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/conf/index.js.map +1 -1
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -1
- package/dist/versions/allLocalesPublicationStatus.js.map +1 -1
- package/dist/versions/isInheritedReadVersionsAccess.js.map +1 -1
- package/dist/versions/types.d.ts +2 -0
- package/dist/versions/types.d.ts.map +1 -1
- package/dist/versions/types.js.map +1 -1
- package/package.json +30 -28
- package/skills/payload/reference/ENDPOINTS.md +3 -9
- package/skills/payload/reference/PLUGIN-DEVELOPMENT.md +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/collections/operations/utilities/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { UserSession } from '../../../auth/types.js'\nimport type { Args } from '../../../fields/hooks/beforeChange/index.js'\nimport type {\n CollectionSlug,\n FileToSave,\n SanitizedConfig,\n TypedFallbackLocale,\n} from '../../../index.js'\nimport type {\n JsonObject,\n Payload,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../../types/index.js'\nimport type { SharedLocalAPIOptions } from '../../../types/operations.js'\nimport type { UploadFileRollbacks } from '../../../uploads/uploadFileRollback.js'\nimport type {\n DataFromCollectionSlug,\n SanitizedCollectionConfig,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../../auth/ensureUsernameOrEmail.js'\nimport { removeExpiredSessions } from '../../../auth/sessions.js'\nimport { generatePasswordSaltHash } from '../../../auth/strategies/local/generatePasswordSaltHash.js'\nimport { runBranchMergeWriteGuard } from '../../../branching/mergeWriteGuard.js'\nimport { branchDocIDField, branchField, MAIN_BRANCH } from '../../../branching/types.js'\nimport { ValidationError } from '../../../errors/index.js'\nimport { afterChange } from '../../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../../fields/hooks/beforeValidate/index.js'\nimport { deepCopyObjectSimple, saveVersion } from '../../../index.js'\nimport { deleteAssociatedFiles } from '../../../uploads/deleteAssociatedFiles.js'\nimport { deleteUploadFilesExclusiveToDocument } from '../../../uploads/deleteUploadFilesExclusiveToDocument.js'\nimport { runLocalFileUpdate } from '../../../uploads/fileVersioning/archive.js'\nimport { uploadFiles } from '../../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../../utilities/checkDocumentLockStatus.js'\nimport { getTopLevelFieldNames } from '../../../utilities/getTopLevelFieldNames.js'\nimport {\n hasDraftsEnabled,\n hasDraftValidationEnabled,\n hasLocalizeStatusEnabled,\n} from '../../../utilities/getVersionsConfig.js'\nimport { resolvePublishAllLocales } from '../../../utilities/resolvePublishAllLocales.js'\nimport { markTransactionWrite } from '../../../utilities/transactionMutationTracker.js'\nimport {\n buildAllLocalesPublicationHookDoc,\n getAllLocalesPublicationStatus,\n hasAuthorizedAllLocalesPublicationStatus,\n validateAllLocalesPublicationFlags,\n} from '../../../versions/allLocalesPublicationStatus.js'\nimport { buildLocalizedPublishData } from '../../../versions/buildSingleLocalePublishData.js'\nimport { validateLocalWithLocaleKeyedData } from '../local/validate.js'\nexport type SharedUpdateDocumentArgs<TSlug extends CollectionSlug> = {\n autosave: boolean\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n data: DeepPartial<DataFromCollectionSlug<TSlug>>\n /** @internal Request used only for database reads and writes during branch promotion. */\n databaseReq?: PayloadRequest\n depth: number\n docWithLocales: JsonObject & TypeWithID\n draftArg: boolean\n fallbackLocale: TypedFallbackLocale\n filesToUpload: FileToSave[]\n id: number | string\n locale: string\n onBeforeDocumentWrite?: () => void\n /**\n * Hook `operation` label. Merge reports a branch-created document as a\n * `create` on main even though the row is updated in place, since deleting\n * and recreating it would cascade away every inbound relationship.\n *\n * @default 'update'\n */\n operation?: 'create' | 'update'\n overrideLock: boolean\n payload: Payload\n populate?: PopulateType\n publishAllLocales?: boolean\n req: PayloadRequest\n select: SelectType\n shouldManageLocalFiles: boolean\n showHiddenFields: boolean\n unpublishAllLocales?: boolean\n uploadFileRollbacks?: UploadFileRollbacks\n} & Pick<Required<SharedLocalAPIOptions>, 'overrideAccess'>\n\n/**\n * This function is used to update a document in the DB and return the result.\n *\n * It runs the following hooks in order:\n * - beforeValidate - Fields\n * - beforeValidate - Collection\n * - beforeChange - Collection\n * - beforeChange - Fields\n * - afterRead - Fields\n * - afterRead - Collection\n * - afterChange - Fields\n * - afterChange - Collection\n */\nexport const updateDocument = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>({\n id,\n autosave,\n collectionConfig,\n config,\n data,\n databaseReq,\n depth,\n docWithLocales,\n draftArg,\n fallbackLocale,\n filesToUpload,\n locale,\n onBeforeDocumentWrite,\n operation = 'update',\n overrideAccess,\n overrideLock,\n payload,\n populate,\n publishAllLocales: publishAllLocalesArg,\n req,\n select,\n shouldManageLocalFiles,\n showHiddenFields,\n unpublishAllLocales: unpublishAllLocalesArg,\n uploadFileRollbacks,\n}: SharedUpdateDocumentArgs<TSlug>): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const databaseRequest = databaseReq ?? req\n const nextFileData =\n collectionConfig.upload && shouldManageLocalFiles && !collectionConfig.upload.fileOperations\n ? deepCopyObjectSimple(data)\n : undefined\n\n validateAllLocalesPublicationFlags({\n publishAllLocales: publishAllLocalesArg,\n unpublishAllLocales: unpublishAllLocalesArg,\n })\n\n const publishAllLocales = resolvePublishAllLocales({\n draft: draftArg,\n hasLocalizeStatusEnabled: hasLocalizeStatusEnabled(collectionConfig),\n locale,\n publishAllLocalesArg,\n })\n const unpublishAllLocales =\n typeof unpublishAllLocalesArg === 'string'\n ? unpublishAllLocalesArg === 'true'\n : !!unpublishAllLocalesArg\n const allLocalesPublicationStatus = getAllLocalesPublicationStatus({\n hasLocalizedStatus: Boolean(config.localization && hasLocalizeStatusEnabled(collectionConfig)),\n publishAllLocales,\n unpublishAllLocales,\n })\n const isSavingDraft =\n Boolean(draftArg && hasDraftsEnabled(collectionConfig)) &&\n data._status !== 'published' &&\n !publishAllLocales\n if (allLocalesPublicationStatus || isSavingDraft) {\n data._status = allLocalesPublicationStatus ?? 'draft'\n }\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n shouldDeleteLock: false,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(docWithLocales),\n draft: draftArg,\n fallbackLocale: id ? null : fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n const isRestoringDraftFromTrash = Boolean(originalDoc?.deletedAt) && data?._status !== 'published'\n const shouldLimitValidationToSubmittedFields =\n (collectionConfig.trash && (Boolean(data?.deletedAt) || isRestoringDraftFromTrash)) ||\n unpublishAllLocales\n const submittedTopLevelFieldNames = shouldLimitValidationToSubmittedFields\n ? getTopLevelFieldNames(data)\n : undefined\n\n if (collectionConfig.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data,\n operation: 'update',\n originalDoc,\n req,\n })\n }\n\n // When saving a draft on a document whose latest version is published, the file\n // referenced by docWithLocales is still actively used by the published main document.\n // Deleting it during the update would break the published document's file even though no publish\n // is happening. Only skip deletion in this case; when the latest version is already a\n // draft, it is safe to delete the old draft file as it is being replaced.\n const isDraftOverPublished = isSavingDraft && docWithLocales._status === 'published'\n\n const hasManagedLocalUpload =\n filesToUpload.length > 0 &&\n Boolean(data.original) &&\n !collectionConfig.upload.disableLocalStorage\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n let statusFieldAccess = false\n const publicationFieldPolicyDoc = buildAllLocalesPublicationHookDoc({\n doc: originalDoc,\n docWithLocales,\n status: data._status === allLocalesPublicationStatus ? allLocalesPublicationStatus : undefined,\n })\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docForHooks: publicationFieldPolicyDoc,\n global: null,\n onFieldAccess: ({ accessResult, path }) => {\n if (path === '_status') {\n statusFieldAccess = accessResult\n }\n },\n operation,\n overrideAccess,\n req,\n })\n\n const password = data?.password\n const shouldSavePassword = Boolean(\n password &&\n collectionConfig.auth &&\n (!collectionConfig.auth.disableLocalStrategy ||\n (typeof collectionConfig.auth.disableLocalStrategy === 'object' &&\n collectionConfig.auth.disableLocalStrategy.enableFields)) &&\n !isSavingDraft,\n )\n\n const publicationHookDoc = buildAllLocalesPublicationHookDoc({\n doc: originalDoc,\n docWithLocales,\n status:\n statusFieldAccess && data._status === allLocalesPublicationStatus\n ? allLocalesPublicationStatus\n : undefined,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation,\n originalDoc: publicationHookDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeChange?.length) {\n for (const hook of collectionConfig.hooks.beforeChange) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation,\n originalDoc: publicationHookDoc,\n req,\n })) || data\n }\n }\n\n const publicationData = { ...data }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: publicationHookDoc,\n docWithLocales,\n fieldsToValidate: submittedTopLevelFieldNames,\n global: null,\n operation,\n overrideAccess,\n req,\n // only skip validation for drafts when draft validation is false\n skipValidation: isSavingDraft && !hasDraftValidationEnabled(collectionConfig),\n }\n\n // /////////////////////////////////////\n // Handle Localized Data Merging\n // /////////////////////////////////////\n\n let statusFieldValue: unknown\n\n let result: JsonObject = await beforeChange({\n ...beforeChangeArgs,\n onDataProcessed: (processedData) => {\n statusFieldValue = processedData._status\n },\n })\n\n const hasAuthorizedPublicationStatus = hasAuthorizedAllLocalesPublicationStatus({\n data: publicationData,\n fieldAccessDenied: !statusFieldAccess,\n fieldValue: statusFieldValue,\n status: allLocalesPublicationStatus,\n })\n\n if (\n allLocalesPublicationStatus &&\n !hasAuthorizedPublicationStatus &&\n typeof statusFieldValue === 'undefined' &&\n typeof docWithLocales._status === 'object' &&\n docWithLocales._status !== null\n ) {\n result._status = { ...docWithLocales._status }\n }\n\n if (\n config.localization &&\n hasLocalizeStatusEnabled(collectionConfig) &&\n typeof result._status === 'string'\n ) {\n const statusStr = result._status\n\n if (\n hasAuthorizedPublicationStatus &&\n typeof docWithLocales._status === 'object' &&\n docWithLocales._status !== null\n ) {\n result._status = { ...docWithLocales._status }\n } else {\n result._status = {}\n }\n\n if (!hasAuthorizedPublicationStatus) {\n for (const localeCode of config.localization.localeCodes) {\n ;(result._status as Record<string, unknown>)[localeCode] = statusStr\n }\n }\n }\n\n let localizedPublishData: JsonObject | null = null\n\n if (config.localization && collectionConfig.versions) {\n if (hasLocalizeStatusEnabled(collectionConfig)) {\n if (hasAuthorizedPublicationStatus) {\n let accessibleLocaleCodes = config.localization.localeCodes\n\n if (config.localization.filterAvailableLocales) {\n const filteredLocales = await config.localization.filterAvailableLocales({\n locales: config.localization.locales,\n req,\n })\n accessibleLocaleCodes = filteredLocales.map((locale) =>\n typeof locale === 'string' ? locale : locale.code,\n )\n }\n\n if (typeof result._status !== 'object' || result._status === null) {\n result._status = {}\n }\n\n for (const localeCode of accessibleLocaleCodes) {\n result._status[localeCode] = unpublishAllLocales ? 'draft' : 'published'\n }\n } else if (\n !isSavingDraft &&\n result._status &&\n typeof result._status === 'object' &&\n !Array.isArray(result._status) &&\n (result._status as Record<string, unknown>)[locale] === 'published'\n ) {\n const currentDoc = await payload.db.findOne<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n locale: 'all',\n req: databaseRequest,\n where: { id: { equals: id } },\n })\n\n localizedPublishData = buildLocalizedPublishData({\n config,\n currentDoc: currentDoc as JsonObject,\n fields: collectionConfig.fields,\n locale,\n result,\n })\n }\n }\n }\n\n if (\n config.localization &&\n hasDraftsEnabled(collectionConfig) &&\n publishAllLocales &&\n !unpublishAllLocales &&\n (!hasLocalizeStatusEnabled(collectionConfig) || hasAuthorizedPublicationStatus)\n ) {\n const validationResult = await validateLocalWithLocaleKeyedData({\n operation: 'update',\n options: {\n id,\n collection: collectionConfig.slug,\n data: result,\n draft: true,\n locale: 'all',\n overrideAccess,\n req,\n },\n payload,\n sourceData: {\n docWithLocales,\n originalDoc: publicationHookDoc,\n originalLocale: locale,\n },\n trash: Boolean(originalDoc?.deletedAt),\n })\n\n if (!validationResult.valid) {\n throw new ValidationError(\n {\n id,\n collection: collectionConfig.slug,\n errors: validationResult.errors,\n req,\n },\n req.t,\n )\n }\n }\n\n // File deletion and writes must occur after the final publish validation. Validation failures\n // leave both the persisted upload and local files untouched.\n if (!isDraftOverPublished && !hasManagedLocalUpload) {\n const documentBranch = docWithLocales[branchField]\n const isBranchUploadReplacement =\n filesToUpload.length > 0 &&\n typeof documentBranch === 'string' &&\n documentBranch !== MAIN_BRANCH\n\n if (isBranchUploadReplacement) {\n const canonicalDocument = docWithLocales[branchDocIDField]\n const canonicalDocumentID =\n canonicalDocument && typeof canonicalDocument === 'object' && 'value' in canonicalDocument\n ? canonicalDocument.value\n : canonicalDocument\n const retainedDoc =\n typeof canonicalDocumentID === 'number' || typeof canonicalDocumentID === 'string'\n ? ((await payload.db.findOne({\n branch: false,\n collection: collectionConfig.slug,\n req,\n where: {\n and: [\n { [branchField]: { equals: MAIN_BRANCH } },\n { id: { equals: canonicalDocumentID } },\n ],\n },\n })) as null | Record<string, unknown>)\n : null\n\n await deleteUploadFilesExclusiveToDocument({\n collectionConfig,\n config,\n deleteFromAdapter: false,\n req,\n retainedDoc,\n sourceDoc: docWithLocales,\n })\n } else {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n }\n }\n\n if (!collectionConfig.upload.disableLocalStorage && !hasManagedLocalUpload) {\n await uploadFiles(payload, filesToUpload, req, { uploadFileRollbacks })\n }\n\n const writeDocument = async (): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const dataToUpdate: JsonObject = { ...(localizedPublishData ?? result) }\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n\n if (collectionConfig.auth?.useSessions) {\n const currentSid =\n req.user?.collection === collectionConfig.slug && String(req.user.id) === String(id)\n ? req.user._sid\n : undefined\n const existingSessions = removeExpiredSessions(\n (docWithLocales.sessions as undefined | UserSession[]) ?? [],\n )\n\n dataToUpdate.sessions = currentSid\n ? existingSessions.filter((session) => session.id === currentSid)\n : []\n }\n }\n\n await runBranchMergeWriteGuard({\n collectionSlug: collectionConfig.slug,\n data: dataToUpdate,\n req,\n })\n\n if (localizedPublishData) {\n await runBranchMergeWriteGuard({\n collectionSlug: collectionConfig.slug,\n data: result,\n req,\n })\n }\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n let resultWithLocales: JsonObject = result\n\n if (!isSavingDraft) {\n // Ensure updatedAt date is always updated\n dataToUpdate.updatedAt = new Date().toISOString()\n onBeforeDocumentWrite?.()\n if (localizedPublishData) {\n // Single-locale publish: save filtered data to main doc but keep full locale data for\n // the version so draft fetches (replaceWithDraftIfAvailable) return complete data.\n await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req: databaseRequest,\n })\n markTransactionWrite({ req })\n resultWithLocales = { ...result, updatedAt: dataToUpdate.updatedAt }\n } else {\n resultWithLocales = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req: databaseRequest,\n })\n markTransactionWrite({ req })\n }\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n onBeforeDocumentWrite?.()\n resultWithLocales = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: resultWithLocales,\n draft: isSavingDraft,\n operation: 'update',\n payload,\n req: databaseRequest,\n unpublish: unpublishAllLocales,\n })\n markTransactionWrite({ req })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: resultWithLocales,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation,\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterChange?.length) {\n for (const hook of collectionConfig.hooks.afterChange) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n operation,\n overrideAccess,\n previousDoc: originalDoc,\n req,\n select,\n })) || result\n }\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n }\n\n if (!nextFileData) {\n return writeDocument()\n }\n\n return runLocalFileUpdate({\n id,\n collection: collectionConfig,\n current: docWithLocales,\n files: hasManagedLocalUpload ? filesToUpload : [],\n next: nextFileData as JsonObject,\n req,\n write: writeDocument,\n })\n}\n"],"names":["ensureUsernameOrEmail","removeExpiredSessions","generatePasswordSaltHash","runBranchMergeWriteGuard","branchDocIDField","branchField","MAIN_BRANCH","ValidationError","afterChange","afterRead","beforeChange","beforeValidate","deepCopyObjectSimple","saveVersion","deleteAssociatedFiles","deleteUploadFilesExclusiveToDocument","runLocalFileUpdate","uploadFiles","checkDocumentLockStatus","getTopLevelFieldNames","hasDraftsEnabled","hasDraftValidationEnabled","hasLocalizeStatusEnabled","resolvePublishAllLocales","markTransactionWrite","buildAllLocalesPublicationHookDoc","getAllLocalesPublicationStatus","hasAuthorizedAllLocalesPublicationStatus","validateAllLocalesPublicationFlags","buildLocalizedPublishData","validateLocalWithLocaleKeyedData","updateDocument","id","autosave","collectionConfig","config","data","databaseReq","depth","docWithLocales","draftArg","fallbackLocale","filesToUpload","locale","onBeforeDocumentWrite","operation","overrideAccess","overrideLock","payload","populate","publishAllLocales","publishAllLocalesArg","req","select","shouldManageLocalFiles","showHiddenFields","unpublishAllLocales","unpublishAllLocalesArg","uploadFileRollbacks","databaseRequest","nextFileData","upload","fileOperations","undefined","draft","allLocalesPublicationStatus","hasLocalizedStatus","Boolean","localization","isSavingDraft","_status","collectionSlug","slug","lockErrorMessage","shouldDeleteLock","originalDoc","collection","context","doc","global","isRestoringDraftFromTrash","deletedAt","shouldLimitValidationToSubmittedFields","trash","submittedTopLevelFieldNames","auth","authOptions","isDraftOverPublished","hasManagedLocalUpload","length","original","disableLocalStorage","statusFieldAccess","publicationFieldPolicyDoc","status","docForHooks","onFieldAccess","accessResult","path","password","shouldSavePassword","disableLocalStrategy","enableFields","publicationHookDoc","hooks","hook","publicationData","beforeChangeArgs","fieldsToValidate","skipValidation","statusFieldValue","result","onDataProcessed","processedData","hasAuthorizedPublicationStatus","fieldAccessDenied","fieldValue","statusStr","localeCode","localeCodes","localizedPublishData","versions","accessibleLocaleCodes","filterAvailableLocales","filteredLocales","locales","map","code","Array","isArray","currentDoc","db","findOne","where","equals","fields","validationResult","options","sourceData","originalLocale","valid","errors","t","documentBranch","isBranchUploadReplacement","canonicalDocument","canonicalDocumentID","value","retainedDoc","branch","and","deleteFromAdapter","sourceDoc","files","overrideDelete","writeDocument","dataToUpdate","hash","salt","useSessions","currentSid","user","String","_sid","existingSessions","sessions","filter","session","resultWithLocales","updatedAt","Date","toISOString","updateOne","unpublish","previousDoc","current","next","write"],"mappings":"AA2BA,SAASA,qBAAqB,QAAQ,yCAAwC;AAC9E,SAASC,qBAAqB,QAAQ,4BAA2B;AACjE,SAASC,wBAAwB,QAAQ,6DAA4D;AACrG,SAASC,wBAAwB,QAAQ,wCAAuC;AAChF,SAASC,gBAAgB,EAAEC,WAAW,EAAEC,WAAW,QAAQ,8BAA6B;AACxF,SAASC,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,WAAW,QAAQ,6CAA4C;AACxE,SAASC,SAAS,QAAQ,2CAA0C;AACpE,SAASC,YAAY,QAAQ,8CAA6C;AAC1E,SAASC,cAAc,QAAQ,gDAA+C;AAC9E,SAASC,oBAAoB,EAAEC,WAAW,QAAQ,oBAAmB;AACrE,SAASC,qBAAqB,QAAQ,4CAA2C;AACjF,SAASC,oCAAoC,QAAQ,2DAA0D;AAC/G,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,WAAW,QAAQ,kCAAiC;AAC7D,SAASC,uBAAuB,QAAQ,gDAA+C;AACvF,SAASC,qBAAqB,QAAQ,8CAA6C;AACnF,SACEC,gBAAgB,EAChBC,yBAAyB,EACzBC,wBAAwB,QACnB,0CAAyC;AAChD,SAASC,wBAAwB,QAAQ,iDAAgD;AACzF,SAASC,oBAAoB,QAAQ,mDAAkD;AACvF,SACEC,iCAAiC,EACjCC,8BAA8B,EAC9BC,wCAAwC,EACxCC,kCAAkC,QAC7B,mDAAkD;AACzD,SAASC,yBAAyB,QAAQ,oDAAmD;AAC7F,SAASC,gCAAgC,QAAQ,uBAAsB;AAoCvE;;;;;;;;;;;;CAYC,GACD,OAAO,MAAMC,iBAAiB,OAG5B,EACAC,EAAE,EACFC,QAAQ,EACRC,gBAAgB,EAChBC,MAAM,EACNC,IAAI,EACJC,WAAW,EACXC,KAAK,EACLC,cAAc,EACdC,QAAQ,EACRC,cAAc,EACdC,aAAa,EACbC,MAAM,EACNC,qBAAqB,EACrBC,YAAY,QAAQ,EACpBC,cAAc,EACdC,YAAY,EACZC,OAAO,EACPC,QAAQ,EACRC,mBAAmBC,oBAAoB,EACvCC,GAAG,EACHC,MAAM,EACNC,sBAAsB,EACtBC,gBAAgB,EAChBC,qBAAqBC,sBAAsB,EAC3CC,mBAAmB,EACa;IAChC,MAAMC,kBAAkBtB,eAAee;IACvC,MAAMQ,eACJ1B,iBAAiB2B,MAAM,IAAIP,0BAA0B,CAACpB,iBAAiB2B,MAAM,CAACC,cAAc,GACxFlD,qBAAqBwB,QACrB2B;IAENnC,mCAAmC;QACjCsB,mBAAmBC;QACnBK,qBAAqBC;IACvB;IAEA,MAAMP,oBAAoB3B,yBAAyB;QACjDyC,OAAOxB;QACPlB,0BAA0BA,yBAAyBY;QACnDS;QACAQ;IACF;IACA,MAAMK,sBACJ,OAAOC,2BAA2B,WAC9BA,2BAA2B,SAC3B,CAAC,CAACA;IACR,MAAMQ,8BAA8BvC,+BAA+B;QACjEwC,oBAAoBC,QAAQhC,OAAOiC,YAAY,IAAI9C,yBAAyBY;QAC5EgB;QACAM;IACF;IACA,MAAMa,gBACJF,QAAQ3B,YAAYpB,iBAAiBc,sBACrCE,KAAKkC,OAAO,KAAK,eACjB,CAACpB;IACH,IAAIe,+BAA+BI,eAAe;QAChDjC,KAAKkC,OAAO,GAAGL,+BAA+B;IAChD;IAEA,wCAAwC;IACxC,sCAAsC;IACtC,wCAAwC;IAExC,MAAM/C,wBAAwB;QAC5Bc;QACAuC,gBAAgBrC,iBAAiBsC,IAAI;QACrCC,kBAAkB,CAAC,iBAAiB,EAAEzC,GAAG,2DAA2D,CAAC;QACrGe;QACAK;QACAsB,kBAAkB;IACpB;IAEA,MAAMC,cAAc,MAAMlE,UAAU;QAClCmE,YAAY1C;QACZ2C,SAASzB,IAAIyB,OAAO;QACpBvC,OAAO;QACPwC,KAAKlE,qBAAqB2B;QAC1ByB,OAAOxB;QACPC,gBAAgBT,KAAK,OAAOS;QAC5BsC,QAAQ;QACRpC;QACAG,gBAAgB;QAChBM;QACAG,kBAAkB;IACpB;IACA,MAAMyB,4BAA4Bb,QAAQQ,aAAaM,cAAc7C,MAAMkC,YAAY;IACvF,MAAMY,yCACJ,AAAChD,iBAAiBiD,KAAK,IAAKhB,CAAAA,QAAQ/B,MAAM6C,cAAcD,yBAAwB,KAChFxB;IACF,MAAM4B,8BAA8BF,yCAChC/D,sBAAsBiB,QACtB2B;IAEJ,IAAI7B,iBAAiBmD,IAAI,EAAE;QACzBrF,sBAA6B;YAC3BsF,aAAapD,iBAAiBmD,IAAI;YAClCd,gBAAgBrC,iBAAiBsC,IAAI;YACrCpC;YACAS,WAAW;YACX8B;YACAvB;QACF;IACF;IAEA,gFAAgF;IAChF,sFAAsF;IACtF,iGAAiG;IACjG,sFAAsF;IACtF,0EAA0E;IAC1E,MAAMmC,uBAAuBlB,iBAAiB9B,eAAe+B,OAAO,KAAK;IAEzE,MAAMkB,wBACJ9C,cAAc+C,MAAM,GAAG,KACvBtB,QAAQ/B,KAAKsD,QAAQ,KACrB,CAACxD,iBAAiB2B,MAAM,CAAC8B,mBAAmB;IAE9C,wCAAwC;IACxC,0BAA0B;IAC1B,wCAAwC;IAExC,IAAIC,oBAAoB;IACxB,MAAMC,4BAA4BpE,kCAAkC;QAClEqD,KAAKH;QACLpC;QACAuD,QAAQ1D,KAAKkC,OAAO,KAAKL,8BAA8BA,8BAA8BF;IACvF;IAEA3B,OAAO,MAAMzB,eAA2D;QACtEqB;QACA4C,YAAY1C;QACZ2C,SAASzB,IAAIyB,OAAO;QACpBzC;QACA0C,KAAKH;QACLoB,aAAaF;QACbd,QAAQ;QACRiB,eAAe,CAAC,EAAEC,YAAY,EAAEC,IAAI,EAAE;YACpC,IAAIA,SAAS,WAAW;gBACtBN,oBAAoBK;YACtB;QACF;QACApD;QACAC;QACAM;IACF;IAEA,MAAM+C,WAAW/D,MAAM+D;IACvB,MAAMC,qBAAqBjC,QACzBgC,YACEjE,iBAAiBmD,IAAI,IACpB,CAAA,CAACnD,iBAAiBmD,IAAI,CAACgB,oBAAoB,IACzC,OAAOnE,iBAAiBmD,IAAI,CAACgB,oBAAoB,KAAK,YACrDnE,iBAAiBmD,IAAI,CAACgB,oBAAoB,CAACC,YAAY,KAC3D,CAACjC;IAGL,MAAMkC,qBAAqB9E,kCAAkC;QAC3DqD,KAAKH;QACLpC;QACAuD,QACEF,qBAAqBxD,KAAKkC,OAAO,KAAKL,8BAClCA,8BACAF;IACR;IAEA,wCAAwC;IACxC,8BAA8B;IAC9B,wCAAwC;IAExC,IAAI7B,iBAAiBsE,KAAK,EAAE7F,gBAAgB8E,QAAQ;QAClD,KAAK,MAAMgB,QAAQvE,iBAAiBsE,KAAK,CAAC7F,cAAc,CAAE;YACxDyB,OACE,AAAC,MAAMqE,KAAK;gBACV7B,YAAY1C;gBACZ2C,SAASzB,IAAIyB,OAAO;gBACpBzC;gBACAS;gBACA8B,aAAa4B;gBACbnD;YACF,MAAOhB;QACX;IACF;IAEA,wCAAwC;IACxC,4BAA4B;IAC5B,wCAAwC;IAExC,IAAIF,iBAAiBsE,KAAK,EAAE9F,cAAc+E,QAAQ;QAChD,KAAK,MAAMgB,QAAQvE,iBAAiBsE,KAAK,CAAC9F,YAAY,CAAE;YACtD0B,OACE,AAAC,MAAMqE,KAAK;gBACV7B,YAAY1C;gBACZ2C,SAASzB,IAAIyB,OAAO;gBACpBzC;gBACAS;gBACA8B,aAAa4B;gBACbnD;YACF,MAAOhB;QACX;IACF;IAEA,MAAMsE,kBAAkB;QAAE,GAAGtE,IAAI;IAAC;IAElC,wCAAwC;IACxC,wBAAwB;IACxB,wCAAwC;IAExC,MAAMuE,mBAAwD;QAC5D3E;QACA4C,YAAY1C;QACZ2C,SAASzB,IAAIyB,OAAO;QACpBzC,MAAM;YAAE,GAAGA,IAAI;YAAEJ;QAAG;QACpB8C,KAAKyB;QACLhE;QACAqE,kBAAkBxB;QAClBL,QAAQ;QACRlC;QACAC;QACAM;QACA,iEAAiE;QACjEyD,gBAAgBxC,iBAAiB,CAAChD,0BAA0Ba;IAC9D;IAEA,wCAAwC;IACxC,gCAAgC;IAChC,wCAAwC;IAExC,IAAI4E;IAEJ,IAAIC,SAAqB,MAAMrG,aAAa;QAC1C,GAAGiG,gBAAgB;QACnBK,iBAAiB,CAACC;YAChBH,mBAAmBG,cAAc3C,OAAO;QAC1C;IACF;IAEA,MAAM4C,iCAAiCvF,yCAAyC;QAC9ES,MAAMsE;QACNS,mBAAmB,CAACvB;QACpBwB,YAAYN;QACZhB,QAAQ7B;IACV;IAEA,IACEA,+BACA,CAACiD,kCACD,OAAOJ,qBAAqB,eAC5B,OAAOvE,eAAe+B,OAAO,KAAK,YAClC/B,eAAe+B,OAAO,KAAK,MAC3B;QACAyC,OAAOzC,OAAO,GAAG;YAAE,GAAG/B,eAAe+B,OAAO;QAAC;IAC/C;IAEA,IACEnC,OAAOiC,YAAY,IACnB9C,yBAAyBY,qBACzB,OAAO6E,OAAOzC,OAAO,KAAK,UAC1B;QACA,MAAM+C,YAAYN,OAAOzC,OAAO;QAEhC,IACE4C,kCACA,OAAO3E,eAAe+B,OAAO,KAAK,YAClC/B,eAAe+B,OAAO,KAAK,MAC3B;YACAyC,OAAOzC,OAAO,GAAG;gBAAE,GAAG/B,eAAe+B,OAAO;YAAC;QAC/C,OAAO;YACLyC,OAAOzC,OAAO,GAAG,CAAC;QACpB;QAEA,IAAI,CAAC4C,gCAAgC;YACnC,KAAK,MAAMI,cAAcnF,OAAOiC,YAAY,CAACmD,WAAW,CAAE;;gBACtDR,OAAOzC,OAAO,AAA4B,CAACgD,WAAW,GAAGD;YAC7D;QACF;IACF;IAEA,IAAIG,uBAA0C;IAE9C,IAAIrF,OAAOiC,YAAY,IAAIlC,iBAAiBuF,QAAQ,EAAE;QACpD,IAAInG,yBAAyBY,mBAAmB;YAC9C,IAAIgF,gCAAgC;gBAClC,IAAIQ,wBAAwBvF,OAAOiC,YAAY,CAACmD,WAAW;gBAE3D,IAAIpF,OAAOiC,YAAY,CAACuD,sBAAsB,EAAE;oBAC9C,MAAMC,kBAAkB,MAAMzF,OAAOiC,YAAY,CAACuD,sBAAsB,CAAC;wBACvEE,SAAS1F,OAAOiC,YAAY,CAACyD,OAAO;wBACpCzE;oBACF;oBACAsE,wBAAwBE,gBAAgBE,GAAG,CAAC,CAACnF,SAC3C,OAAOA,WAAW,WAAWA,SAASA,OAAOoF,IAAI;gBAErD;gBAEA,IAAI,OAAOhB,OAAOzC,OAAO,KAAK,YAAYyC,OAAOzC,OAAO,KAAK,MAAM;oBACjEyC,OAAOzC,OAAO,GAAG,CAAC;gBACpB;gBAEA,KAAK,MAAMgD,cAAcI,sBAAuB;oBAC9CX,OAAOzC,OAAO,CAACgD,WAAW,GAAG9D,sBAAsB,UAAU;gBAC/D;YACF,OAAO,IACL,CAACa,iBACD0C,OAAOzC,OAAO,IACd,OAAOyC,OAAOzC,OAAO,KAAK,YAC1B,CAAC0D,MAAMC,OAAO,CAAClB,OAAOzC,OAAO,KAC7B,AAACyC,OAAOzC,OAAO,AAA4B,CAAC3B,OAAO,KAAK,aACxD;gBACA,MAAMuF,aAAa,MAAMlF,QAAQmF,EAAE,CAACC,OAAO,CAAgC;oBACzExD,YAAY1C,iBAAiBsC,IAAI;oBACjC7B,QAAQ;oBACRS,KAAKO;oBACL0E,OAAO;wBAAErG,IAAI;4BAAEsG,QAAQtG;wBAAG;oBAAE;gBAC9B;gBAEAwF,uBAAuB3F,0BAA0B;oBAC/CM;oBACA+F,YAAYA;oBACZK,QAAQrG,iBAAiBqG,MAAM;oBAC/B5F;oBACAoE;gBACF;YACF;QACF;IACF;IAEA,IACE5E,OAAOiC,YAAY,IACnBhD,iBAAiBc,qBACjBgB,qBACA,CAACM,uBACA,CAAA,CAAClC,yBAAyBY,qBAAqBgF,8BAA6B,GAC7E;QACA,MAAMsB,mBAAmB,MAAM1G,iCAAiC;YAC9De,WAAW;YACX4F,SAAS;gBACPzG;gBACA4C,YAAY1C,iBAAiBsC,IAAI;gBACjCpC,MAAM2E;gBACN/C,OAAO;gBACPrB,QAAQ;gBACRG;gBACAM;YACF;YACAJ;YACA0F,YAAY;gBACVnG;gBACAoC,aAAa4B;gBACboC,gBAAgBhG;YAClB;YACAwC,OAAOhB,QAAQQ,aAAaM;QAC9B;QAEA,IAAI,CAACuD,iBAAiBI,KAAK,EAAE;YAC3B,MAAM,IAAIrI,gBACR;gBACEyB;gBACA4C,YAAY1C,iBAAiBsC,IAAI;gBACjCqE,QAAQL,iBAAiBK,MAAM;gBAC/BzF;YACF,GACAA,IAAI0F,CAAC;QAET;IACF;IAEA,8FAA8F;IAC9F,6DAA6D;IAC7D,IAAI,CAACvD,wBAAwB,CAACC,uBAAuB;QACnD,MAAMuD,iBAAiBxG,cAAc,CAAClC,YAAY;QAClD,MAAM2I,4BACJtG,cAAc+C,MAAM,GAAG,KACvB,OAAOsD,mBAAmB,YAC1BA,mBAAmBzI;QAErB,IAAI0I,2BAA2B;YAC7B,MAAMC,oBAAoB1G,cAAc,CAACnC,iBAAiB;YAC1D,MAAM8I,sBACJD,qBAAqB,OAAOA,sBAAsB,YAAY,WAAWA,oBACrEA,kBAAkBE,KAAK,GACvBF;YACN,MAAMG,cACJ,OAAOF,wBAAwB,YAAY,OAAOA,wBAAwB,WACpE,MAAMlG,QAAQmF,EAAE,CAACC,OAAO,CAAC;gBACzBiB,QAAQ;gBACRzE,YAAY1C,iBAAiBsC,IAAI;gBACjCpB;gBACAiF,OAAO;oBACLiB,KAAK;wBACH;4BAAE,CAACjJ,YAAY,EAAE;gCAAEiI,QAAQhI;4BAAY;wBAAE;wBACzC;4BAAE0B,IAAI;gCAAEsG,QAAQY;4BAAoB;wBAAE;qBACvC;gBACH;YACF,KACA;YAEN,MAAMnI,qCAAqC;gBACzCmB;gBACAC;gBACAoH,mBAAmB;gBACnBnG;gBACAgG;gBACAI,WAAWjH;YACb;QACF,OAAO;YACL,MAAMzB,sBAAsB;gBAC1BoB;gBACAC;gBACA2C,KAAKvC;gBACLkH,OAAO/G;gBACPgH,gBAAgB;gBAChBtG;YACF;QACF;IACF;IAEA,IAAI,CAAClB,iBAAiB2B,MAAM,CAAC8B,mBAAmB,IAAI,CAACH,uBAAuB;QAC1E,MAAMvE,YAAY+B,SAASN,eAAeU,KAAK;YAAEM;QAAoB;IACvE;IAEA,MAAMiG,gBAAgB;QACpB,MAAMC,eAA2B;YAAE,GAAIpC,wBAAwBT,MAAM;QAAE;QAEvE,wCAAwC;QACxC,mCAAmC;QACnC,wCAAwC;QAExC,IAAIX,sBAAsB,OAAOD,aAAa,UAAU;YACtD,MAAM,EAAE0D,IAAI,EAAEC,IAAI,EAAE,GAAG,MAAM5J,yBAAyB;gBACpD0E,YAAY1C;gBACZiE;gBACA/C;YACF;YACAwG,aAAaE,IAAI,GAAGA;YACpBF,aAAaC,IAAI,GAAGA;YACpB,OAAOD,aAAazD,QAAQ;YAC5B,OAAO/D,KAAK+D,QAAQ;YAEpB,IAAIjE,iBAAiBmD,IAAI,EAAE0E,aAAa;gBACtC,MAAMC,aACJ5G,IAAI6G,IAAI,EAAErF,eAAe1C,iBAAiBsC,IAAI,IAAI0F,OAAO9G,IAAI6G,IAAI,CAACjI,EAAE,MAAMkI,OAAOlI,MAC7EoB,IAAI6G,IAAI,CAACE,IAAI,GACbpG;gBACN,MAAMqG,mBAAmBnK,sBACvB,AAACsC,eAAe8H,QAAQ,IAAkC,EAAE;gBAG9DT,aAAaS,QAAQ,GAAGL,aACpBI,iBAAiBE,MAAM,CAAC,CAACC,UAAYA,QAAQvI,EAAE,KAAKgI,cACpD,EAAE;YACR;QACF;QAEA,MAAM7J,yBAAyB;YAC7BoE,gBAAgBrC,iBAAiBsC,IAAI;YACrCpC,MAAMwH;YACNxG;QACF;QAEA,IAAIoE,sBAAsB;YACxB,MAAMrH,yBAAyB;gBAC7BoE,gBAAgBrC,iBAAiBsC,IAAI;gBACrCpC,MAAM2E;gBACN3D;YACF;QACF;QAEA,MAAMlC,wBAAwB;YAC5Bc;YACAuC,gBAAgBrC,iBAAiBsC,IAAI;YACrCC,kBAAkB,CAAC,iBAAiB,EAAEzC,GAAG,2DAA2D,CAAC;YACrGe;YACAK;QACF;QAEA,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,IAAIoH,oBAAgCzD;QAEpC,IAAI,CAAC1C,eAAe;YAClB,0CAA0C;YAC1CuF,aAAaa,SAAS,GAAG,IAAIC,OAAOC,WAAW;YAC/C/H;YACA,IAAI4E,sBAAsB;gBACxB,sFAAsF;gBACtF,mFAAmF;gBACnF,MAAMpE,IAAIJ,OAAO,CAACmF,EAAE,CAACyC,SAAS,CAAC;oBAC7B5I;oBACA4C,YAAY1C,iBAAiBsC,IAAI;oBACjCpC,MAAMwH;oBACNjH;oBACAS,KAAKO;gBACP;gBACAnC,qBAAqB;oBAAE4B;gBAAI;gBAC3BoH,oBAAoB;oBAAE,GAAGzD,MAAM;oBAAE0D,WAAWb,aAAaa,SAAS;gBAAC;YACrE,OAAO;gBACLD,oBAAoB,MAAMpH,IAAIJ,OAAO,CAACmF,EAAE,CAACyC,SAAS,CAAC;oBACjD5I;oBACA4C,YAAY1C,iBAAiBsC,IAAI;oBACjCpC,MAAMwH;oBACNjH;oBACAS,KAAKO;gBACP;gBACAnC,qBAAqB;oBAAE4B;gBAAI;YAC7B;QACF;QAEA,wCAAwC;QACxC,iBAAiB;QACjB,wCAAwC;QAExC,IAAIlB,iBAAiBuF,QAAQ,EAAE;YAC7B7E;YACA4H,oBAAoB,MAAM3J,YAAY;gBACpCmB;gBACAC;gBACA2C,YAAY1C;gBACZK,gBAAgBiI;gBAChBxG,OAAOK;gBACPxB,WAAW;gBACXG;gBACAI,KAAKO;gBACLkH,WAAWrH;YACb;YACAhC,qBAAqB;gBAAE4B;YAAI;QAC7B;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExC2D,SAAS,MAAMtG,UAAU;YACvBmE,YAAY1C;YACZ2C,SAASzB,IAAIyB,OAAO;YACpBvC;YACAwC,KAAK0F;YACLxG,OAAOxB;YACPC;YACAsC,QAAQ;YACRpC;YACAG;YACAG;YACAG;YACAC;YACAE;QACF;QAEA,wCAAwC;QACxC,yBAAyB;QACzB,wCAAwC;QAExC,IAAIrB,iBAAiBsE,KAAK,EAAE/F,WAAWgF,QAAQ;YAC7C,KAAK,MAAMgB,QAAQvE,iBAAiBsE,KAAK,CAAC/F,SAAS,CAAE;gBACnDsG,SACE,AAAC,MAAMN,KAAK;oBACV7B,YAAY1C;oBACZ2C,SAASzB,IAAIyB,OAAO;oBACpBC,KAAKiC;oBACLjE;oBACAM;gBACF,MAAO2D;YACX;QACF;QAEA,wCAAwC;QACxC,uBAAuB;QACvB,wCAAwC;QAExCA,SAAS,MAAMvG,YAAY;YACzBoE,YAAY1C;YACZ2C,SAASzB,IAAIyB,OAAO;YACpBzC;YACA0C,KAAKiC;YACLhC,QAAQ;YACRlC;YACAiI,aAAanG;YACbvB;QACF;QAEA,wCAAwC;QACxC,2BAA2B;QAC3B,wCAAwC;QAExC,IAAIlB,iBAAiBsE,KAAK,EAAEhG,aAAaiF,QAAQ;YAC/C,KAAK,MAAMgB,QAAQvE,iBAAiBsE,KAAK,CAAChG,WAAW,CAAE;gBACrDuG,SACE,AAAC,MAAMN,KAAK;oBACV7B,YAAY1C;oBACZ2C,SAASzB,IAAIyB,OAAO;oBACpBzC;oBACA0C,KAAKiC;oBACLlE;oBACAC;oBACAgI,aAAanG;oBACbvB;oBACAC;gBACF,MAAO0D;YACX;QACF;QAEA,OAAOA;IACT;IAEA,IAAI,CAACnD,cAAc;QACjB,OAAO+F;IACT;IAEA,OAAO3I,mBAAmB;QACxBgB;QACA4C,YAAY1C;QACZ6I,SAASxI;QACTkH,OAAOjE,wBAAwB9C,gBAAgB,EAAE;QACjDsI,MAAMpH;QACNR;QACA6H,OAAOtB;IACT;AACF,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/operations/utilities/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { UserSession } from '../../../auth/types.js'\nimport type { Args } from '../../../fields/hooks/beforeChange/index.js'\nimport type {\n CollectionSlug,\n FileToSave,\n SanitizedConfig,\n TypedFallbackLocale,\n} from '../../../index.js'\nimport type {\n JsonObject,\n Payload,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../../types/index.js'\nimport type { SharedLocalAPIOptions } from '../../../types/operations.js'\nimport type { UploadFileRollbacks } from '../../../uploads/uploadFileRollback.js'\nimport type {\n DataFromCollectionSlug,\n SanitizedCollectionConfig,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../../auth/ensureUsernameOrEmail.js'\nimport { removeExpiredSessions } from '../../../auth/sessions.js'\nimport { generatePasswordSaltHash } from '../../../auth/strategies/local/generatePasswordSaltHash.js'\nimport { runBranchMergeWriteGuard } from '../../../branching/mergeWriteGuard.js'\nimport { branchDocIDField, branchField, MAIN_BRANCH } from '../../../branching/types.js'\nimport { ValidationError } from '../../../errors/index.js'\nimport { afterChange } from '../../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../../fields/hooks/beforeValidate/index.js'\nimport { deepCopyObjectSimple, saveVersion } from '../../../index.js'\nimport { deleteAssociatedFiles } from '../../../uploads/deleteAssociatedFiles.js'\nimport { deleteUploadFilesExclusiveToDocument } from '../../../uploads/deleteUploadFilesExclusiveToDocument.js'\nimport { runLocalFileUpdate } from '../../../uploads/fileVersioning/archive.js'\nimport { uploadFiles } from '../../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../../utilities/checkDocumentLockStatus.js'\nimport { getTopLevelFieldNames } from '../../../utilities/getTopLevelFieldNames.js'\nimport {\n hasDraftsEnabled,\n hasDraftValidationEnabled,\n hasLocalizeStatusEnabled,\n} from '../../../utilities/getVersionsConfig.js'\nimport { resolvePublishAllLocales } from '../../../utilities/resolvePublishAllLocales.js'\nimport { markTransactionWrite } from '../../../utilities/transactionMutationTracker.js'\nimport {\n buildAllLocalesPublicationHookDoc,\n getAllLocalesPublicationStatus,\n hasAuthorizedAllLocalesPublicationStatus,\n validateAllLocalesPublicationFlags,\n} from '../../../versions/allLocalesPublicationStatus.js'\nimport { buildLocalizedPublishData } from '../../../versions/buildSingleLocalePublishData.js'\nimport { validateLocalWithLocaleKeyedData } from '../local/validate.js'\nexport type SharedUpdateDocumentArgs<TSlug extends CollectionSlug> = {\n autosave: boolean\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n data: DeepPartial<DataFromCollectionSlug<TSlug>>\n /** @internal Request used only for database reads and writes during branch promotion. */\n databaseReq?: PayloadRequest\n depth: number\n docWithLocales: JsonObject & TypeWithID\n draftArg: boolean\n fallbackLocale: TypedFallbackLocale\n filesToUpload: FileToSave[]\n id: number | string\n locale: string\n onBeforeDocumentWrite?: () => void\n /**\n * Hook `operation` label. Merge reports a branch-created document as a\n * `create` on main even though the row is updated in place, since deleting\n * and recreating it would cascade away every inbound relationship.\n *\n * @default 'update'\n */\n operation?: 'create' | 'update'\n overrideLock: boolean\n payload: Payload\n populate?: PopulateType\n publishAllLocales?: boolean\n req: PayloadRequest\n select: SelectType\n shouldManageLocalFiles: boolean\n showHiddenFields: boolean\n unpublishAllLocales?: boolean\n uploadFileRollbacks?: UploadFileRollbacks\n} & Pick<Required<SharedLocalAPIOptions>, 'overrideAccess'>\n\n/**\n * This function is used to update a document in the DB and return the result.\n *\n * It runs the following hooks in order:\n * - beforeValidate - Fields\n * - beforeValidate - Collection\n * - beforeChange - Collection\n * - beforeChange - Fields\n * - afterRead - Fields\n * - afterRead - Collection\n * - afterChange - Fields\n * - afterChange - Collection\n */\nexport const updateDocument = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>({\n id,\n autosave,\n collectionConfig,\n config,\n data,\n databaseReq,\n depth,\n docWithLocales,\n draftArg,\n fallbackLocale,\n filesToUpload,\n locale,\n onBeforeDocumentWrite,\n operation = 'update',\n overrideAccess,\n overrideLock,\n payload,\n populate,\n publishAllLocales: publishAllLocalesArg,\n req,\n select,\n shouldManageLocalFiles,\n showHiddenFields,\n unpublishAllLocales: unpublishAllLocalesArg,\n uploadFileRollbacks,\n}: SharedUpdateDocumentArgs<TSlug>): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const databaseRequest = databaseReq ?? req\n const nextFileData =\n collectionConfig.upload && shouldManageLocalFiles && !collectionConfig.upload.fileOperations\n ? deepCopyObjectSimple(data)\n : undefined\n\n validateAllLocalesPublicationFlags({\n publishAllLocales: publishAllLocalesArg,\n unpublishAllLocales: unpublishAllLocalesArg,\n })\n\n const publishAllLocales = resolvePublishAllLocales({\n draft: draftArg,\n hasLocalizeStatusEnabled: hasLocalizeStatusEnabled(collectionConfig),\n locale,\n publishAllLocalesArg,\n })\n const unpublishAllLocales =\n typeof unpublishAllLocalesArg === 'string'\n ? unpublishAllLocalesArg === 'true'\n : !!unpublishAllLocalesArg\n const allLocalesPublicationStatus = getAllLocalesPublicationStatus({\n hasLocalizedStatus: Boolean(config.localization && hasLocalizeStatusEnabled(collectionConfig)),\n publishAllLocales,\n unpublishAllLocales,\n })\n const isSavingDraft =\n Boolean(draftArg && hasDraftsEnabled(collectionConfig)) &&\n data._status !== 'published' &&\n !publishAllLocales\n if (allLocalesPublicationStatus || isSavingDraft) {\n data._status = allLocalesPublicationStatus ?? 'draft'\n }\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n shouldDeleteLock: false,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(docWithLocales),\n draft: draftArg,\n fallbackLocale: id ? null : fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n const isRestoringDraftFromTrash = Boolean(originalDoc?.deletedAt) && data?._status !== 'published'\n const shouldLimitValidationToSubmittedFields =\n (collectionConfig.trash && (Boolean(data?.deletedAt) || isRestoringDraftFromTrash)) ||\n unpublishAllLocales\n const submittedTopLevelFieldNames = shouldLimitValidationToSubmittedFields\n ? getTopLevelFieldNames(data)\n : undefined\n\n if (collectionConfig.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data,\n operation: 'update',\n originalDoc,\n req,\n })\n }\n\n // When saving a draft on a document whose latest version is published, the file\n // referenced by docWithLocales is still actively used by the published main document.\n // Deleting it during the update would break the published document's file even though no publish\n // is happening. Only skip deletion in this case; when the latest version is already a\n // draft, it is safe to delete the old draft file as it is being replaced.\n const isDraftOverPublished = isSavingDraft && docWithLocales._status === 'published'\n\n const hasManagedLocalUpload =\n filesToUpload.length > 0 &&\n Boolean(data.original) &&\n !collectionConfig.upload.disableLocalStorage\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n let statusFieldAccess = false\n const publicationFieldPolicyDoc = buildAllLocalesPublicationHookDoc({\n doc: originalDoc,\n docWithLocales,\n status: data._status === allLocalesPublicationStatus ? allLocalesPublicationStatus : undefined,\n })\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docForHooks: publicationFieldPolicyDoc,\n global: null,\n onFieldAccess: ({ accessResult, path }) => {\n if (path === '_status') {\n statusFieldAccess = accessResult\n }\n },\n operation,\n overrideAccess,\n req,\n })\n\n const password = data?.password\n const shouldSavePassword = Boolean(\n password &&\n collectionConfig.auth &&\n (!collectionConfig.auth.disableLocalStrategy ||\n (typeof collectionConfig.auth.disableLocalStrategy === 'object' &&\n collectionConfig.auth.disableLocalStrategy.enableFields)) &&\n !isSavingDraft,\n )\n\n const publicationHookDoc = buildAllLocalesPublicationHookDoc({\n doc: originalDoc,\n docWithLocales,\n status:\n statusFieldAccess && data._status === allLocalesPublicationStatus\n ? allLocalesPublicationStatus\n : undefined,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation,\n originalDoc: publicationHookDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeChange?.length) {\n for (const hook of collectionConfig.hooks.beforeChange) {\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation,\n originalDoc: publicationHookDoc,\n req,\n })) || data\n }\n }\n\n const publicationData = { ...data }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: publicationHookDoc,\n docWithLocales,\n fieldsToValidate: submittedTopLevelFieldNames,\n global: null,\n operation,\n overrideAccess,\n req,\n // only skip validation for drafts when draft validation is false\n skipValidation: isSavingDraft && !hasDraftValidationEnabled(collectionConfig),\n }\n\n // /////////////////////////////////////\n // Handle Localized Data Merging\n // /////////////////////////////////////\n\n let statusFieldValue: unknown\n\n let result: JsonObject = await beforeChange({\n ...beforeChangeArgs,\n onDataProcessed: (processedData) => {\n statusFieldValue = processedData._status\n },\n })\n\n const hasAuthorizedPublicationStatus = hasAuthorizedAllLocalesPublicationStatus({\n data: publicationData,\n fieldAccessDenied: !statusFieldAccess,\n fieldValue: statusFieldValue,\n status: allLocalesPublicationStatus,\n })\n\n if (\n allLocalesPublicationStatus &&\n !hasAuthorizedPublicationStatus &&\n typeof statusFieldValue === 'undefined' &&\n typeof docWithLocales._status === 'object' &&\n docWithLocales._status !== null\n ) {\n result._status = { ...docWithLocales._status }\n }\n\n if (\n config.localization &&\n hasLocalizeStatusEnabled(collectionConfig) &&\n typeof result._status === 'string'\n ) {\n const statusStr = result._status\n\n if (\n hasAuthorizedPublicationStatus &&\n typeof docWithLocales._status === 'object' &&\n docWithLocales._status !== null\n ) {\n result._status = { ...docWithLocales._status }\n } else {\n result._status = {}\n }\n\n if (!hasAuthorizedPublicationStatus) {\n for (const localeCode of config.localization.localeCodes) {\n ;(result._status as Record<string, unknown>)[localeCode] = statusStr\n }\n }\n }\n\n let localizedPublishData: JsonObject | null = null\n\n if (config.localization && collectionConfig.versions) {\n if (hasLocalizeStatusEnabled(collectionConfig)) {\n if (hasAuthorizedPublicationStatus) {\n let accessibleLocaleCodes = config.localization.localeCodes\n\n if (config.localization.filterAvailableLocales) {\n const filteredLocales = await config.localization.filterAvailableLocales({\n locales: config.localization.locales,\n req,\n })\n accessibleLocaleCodes = filteredLocales.map((locale) =>\n typeof locale === 'string' ? locale : locale.code,\n )\n }\n\n if (typeof result._status !== 'object' || result._status === null) {\n result._status = {}\n }\n\n for (const localeCode of accessibleLocaleCodes) {\n result._status[localeCode] = unpublishAllLocales ? 'draft' : 'published'\n }\n } else if (\n !isSavingDraft &&\n result._status &&\n typeof result._status === 'object' &&\n !Array.isArray(result._status) &&\n (result._status as Record<string, unknown>)[locale] === 'published'\n ) {\n const currentDoc = await payload.db.findOne<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n locale: 'all',\n req: databaseRequest,\n where: { id: { equals: id } },\n })\n\n localizedPublishData = buildLocalizedPublishData({\n config,\n currentDoc,\n fields: collectionConfig.fields,\n locale,\n result,\n })\n }\n }\n }\n\n if (\n config.localization &&\n hasDraftsEnabled(collectionConfig) &&\n publishAllLocales &&\n !unpublishAllLocales &&\n (!hasLocalizeStatusEnabled(collectionConfig) || hasAuthorizedPublicationStatus)\n ) {\n const validationResult = await validateLocalWithLocaleKeyedData({\n operation: 'update',\n options: {\n id,\n collection: collectionConfig.slug,\n data: result,\n draft: true,\n locale: 'all',\n overrideAccess,\n req,\n },\n payload,\n sourceData: {\n docWithLocales,\n originalDoc: publicationHookDoc,\n originalLocale: locale,\n },\n trash: Boolean(originalDoc?.deletedAt),\n })\n\n if (!validationResult.valid) {\n throw new ValidationError(\n {\n id,\n collection: collectionConfig.slug,\n errors: validationResult.errors,\n req,\n },\n req.t,\n )\n }\n }\n\n // File deletion and writes must occur after the final publish validation. Validation failures\n // leave both the persisted upload and local files untouched.\n if (!isDraftOverPublished && !hasManagedLocalUpload) {\n const documentBranch = docWithLocales[branchField]\n const isBranchUploadReplacement =\n filesToUpload.length > 0 &&\n typeof documentBranch === 'string' &&\n documentBranch !== MAIN_BRANCH\n\n if (isBranchUploadReplacement) {\n const canonicalDocument = docWithLocales[branchDocIDField]\n const canonicalDocumentID =\n canonicalDocument && typeof canonicalDocument === 'object' && 'value' in canonicalDocument\n ? canonicalDocument.value\n : canonicalDocument\n const retainedDoc =\n typeof canonicalDocumentID === 'number' || typeof canonicalDocumentID === 'string'\n ? ((await payload.db.findOne({\n branch: false,\n collection: collectionConfig.slug,\n req,\n where: {\n and: [\n { [branchField]: { equals: MAIN_BRANCH } },\n { id: { equals: canonicalDocumentID } },\n ],\n },\n })) as null | Record<string, unknown>)\n : null\n\n await deleteUploadFilesExclusiveToDocument({\n collectionConfig,\n config,\n deleteFromAdapter: false,\n req,\n retainedDoc,\n sourceDoc: docWithLocales,\n })\n } else {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n }\n }\n\n if (!collectionConfig.upload.disableLocalStorage && !hasManagedLocalUpload) {\n await uploadFiles(payload, filesToUpload, req, { uploadFileRollbacks })\n }\n\n const writeDocument = async (): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const dataToUpdate: JsonObject = { ...(localizedPublishData ?? result) }\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n\n if (collectionConfig.auth?.useSessions) {\n const currentSid =\n req.user?.collection === collectionConfig.slug && String(req.user.id) === String(id)\n ? req.user._sid\n : undefined\n const existingSessions = removeExpiredSessions(\n (docWithLocales.sessions as undefined | UserSession[]) ?? [],\n )\n\n dataToUpdate.sessions = currentSid\n ? existingSessions.filter((session) => session.id === currentSid)\n : []\n }\n }\n\n await runBranchMergeWriteGuard({\n collectionSlug: collectionConfig.slug,\n data: dataToUpdate,\n req,\n })\n\n if (localizedPublishData) {\n await runBranchMergeWriteGuard({\n collectionSlug: collectionConfig.slug,\n data: result,\n req,\n })\n }\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n let resultWithLocales: JsonObject = result\n\n if (!isSavingDraft) {\n // Ensure updatedAt date is always updated\n dataToUpdate.updatedAt = new Date().toISOString()\n onBeforeDocumentWrite?.()\n if (localizedPublishData) {\n // Single-locale publish: save filtered data to main doc but keep full locale data for\n // the version so draft fetches (replaceWithDraftIfAvailable) return complete data.\n await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req: databaseRequest,\n })\n markTransactionWrite({ req })\n resultWithLocales = { ...result, updatedAt: dataToUpdate.updatedAt }\n } else {\n resultWithLocales = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req: databaseRequest,\n })\n markTransactionWrite({ req })\n }\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n onBeforeDocumentWrite?.()\n resultWithLocales = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: resultWithLocales,\n draft: isSavingDraft,\n operation: 'update',\n payload,\n req: databaseRequest,\n unpublish: unpublishAllLocales,\n })\n markTransactionWrite({ req })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: resultWithLocales,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation,\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterChange?.length) {\n for (const hook of collectionConfig.hooks.afterChange) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n operation,\n overrideAccess,\n previousDoc: originalDoc,\n req,\n select,\n })) || result\n }\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n }\n\n if (!nextFileData) {\n return writeDocument()\n }\n\n return runLocalFileUpdate({\n id,\n collection: collectionConfig,\n current: docWithLocales,\n files: hasManagedLocalUpload ? filesToUpload : [],\n next: nextFileData,\n req,\n write: writeDocument,\n })\n}\n"],"names":["ensureUsernameOrEmail","removeExpiredSessions","generatePasswordSaltHash","runBranchMergeWriteGuard","branchDocIDField","branchField","MAIN_BRANCH","ValidationError","afterChange","afterRead","beforeChange","beforeValidate","deepCopyObjectSimple","saveVersion","deleteAssociatedFiles","deleteUploadFilesExclusiveToDocument","runLocalFileUpdate","uploadFiles","checkDocumentLockStatus","getTopLevelFieldNames","hasDraftsEnabled","hasDraftValidationEnabled","hasLocalizeStatusEnabled","resolvePublishAllLocales","markTransactionWrite","buildAllLocalesPublicationHookDoc","getAllLocalesPublicationStatus","hasAuthorizedAllLocalesPublicationStatus","validateAllLocalesPublicationFlags","buildLocalizedPublishData","validateLocalWithLocaleKeyedData","updateDocument","id","autosave","collectionConfig","config","data","databaseReq","depth","docWithLocales","draftArg","fallbackLocale","filesToUpload","locale","onBeforeDocumentWrite","operation","overrideAccess","overrideLock","payload","populate","publishAllLocales","publishAllLocalesArg","req","select","shouldManageLocalFiles","showHiddenFields","unpublishAllLocales","unpublishAllLocalesArg","uploadFileRollbacks","databaseRequest","nextFileData","upload","fileOperations","undefined","draft","allLocalesPublicationStatus","hasLocalizedStatus","Boolean","localization","isSavingDraft","_status","collectionSlug","slug","lockErrorMessage","shouldDeleteLock","originalDoc","collection","context","doc","global","isRestoringDraftFromTrash","deletedAt","shouldLimitValidationToSubmittedFields","trash","submittedTopLevelFieldNames","auth","authOptions","isDraftOverPublished","hasManagedLocalUpload","length","original","disableLocalStorage","statusFieldAccess","publicationFieldPolicyDoc","status","docForHooks","onFieldAccess","accessResult","path","password","shouldSavePassword","disableLocalStrategy","enableFields","publicationHookDoc","hooks","hook","publicationData","beforeChangeArgs","fieldsToValidate","skipValidation","statusFieldValue","result","onDataProcessed","processedData","hasAuthorizedPublicationStatus","fieldAccessDenied","fieldValue","statusStr","localeCode","localeCodes","localizedPublishData","versions","accessibleLocaleCodes","filterAvailableLocales","filteredLocales","locales","map","code","Array","isArray","currentDoc","db","findOne","where","equals","fields","validationResult","options","sourceData","originalLocale","valid","errors","t","documentBranch","isBranchUploadReplacement","canonicalDocument","canonicalDocumentID","value","retainedDoc","branch","and","deleteFromAdapter","sourceDoc","files","overrideDelete","writeDocument","dataToUpdate","hash","salt","useSessions","currentSid","user","String","_sid","existingSessions","sessions","filter","session","resultWithLocales","updatedAt","Date","toISOString","updateOne","unpublish","previousDoc","current","next","write"],"mappings":"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"}
|
|
@@ -128,7 +128,7 @@ async function validateOperationWithScopedRequest({ id, collection, data: incomi
|
|
|
128
128
|
ensureUsernameOrEmail({
|
|
129
129
|
authOptions: collectionConfig.auth,
|
|
130
130
|
collectionSlug: collectionConfig.slug,
|
|
131
|
-
data
|
|
131
|
+
data,
|
|
132
132
|
operation: 'create',
|
|
133
133
|
req
|
|
134
134
|
});
|
|
@@ -136,9 +136,9 @@ async function validateOperationWithScopedRequest({ id, collection, data: incomi
|
|
|
136
136
|
ensureUsernameOrEmail({
|
|
137
137
|
authOptions: collectionConfig.auth,
|
|
138
138
|
collectionSlug: collectionConfig.slug,
|
|
139
|
-
data
|
|
139
|
+
data,
|
|
140
140
|
operation: 'update',
|
|
141
|
-
originalDoc
|
|
141
|
+
originalDoc,
|
|
142
142
|
req
|
|
143
143
|
});
|
|
144
144
|
}
|
|
@@ -146,7 +146,7 @@ async function validateOperationWithScopedRequest({ id, collection, data: incomi
|
|
|
146
146
|
collection: collectionConfig,
|
|
147
147
|
docWithLocales,
|
|
148
148
|
global: null,
|
|
149
|
-
incomingData
|
|
149
|
+
incomingData,
|
|
150
150
|
onValidationData,
|
|
151
151
|
originalDoc,
|
|
152
152
|
overrideAccess,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/validate.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug, JsonObject } from '../../index.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type { ValidationResult } from '../../types/validation.js'\nimport type { ValidationSourceData } from '../../utilities/runValidationLifecycle.js'\nimport type { Collection, RequiredDataFromCollectionSlug, TypeWithID } from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js'\nimport { flattenDataByLocale } from '../../utilities/flattenDataByLocale.js'\nimport { runValidationLifecycle } from '../../utilities/runValidationLifecycle.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { validateUniqueConstraints } from './utilities/validateUniqueConstraints.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data?: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n draft: boolean\n id?: number | string\n onValidationData?: (data: JsonObject) => void\n overrideAccess: boolean\n req: PayloadRequest\n skipAccessControl?: boolean\n skipMutationHooks?: boolean\n sourceData?: ValidationSourceData\n trash?: boolean\n validationOperation?: 'create' | 'update' | 'validate'\n}\n\nexport async function validateOperation<TSlug extends CollectionSlug>(\n args: Arguments<TSlug>,\n): Promise<ValidationResult> {\n const previousOperation = args.req.operation\n args.req.operation = args.validationOperation ?? 'validate'\n\n try {\n return await validateOperationWithScopedRequest(args)\n } finally {\n args.req.operation = previousOperation\n }\n}\n\nasync function validateOperationWithScopedRequest<TSlug extends CollectionSlug>({\n id,\n collection,\n data: incomingData,\n draft,\n onValidationData,\n overrideAccess,\n req,\n skipAccessControl = false,\n skipMutationHooks = false,\n sourceData,\n trash = false,\n validationOperation = 'validate',\n}: Arguments<TSlug>): Promise<ValidationResult> {\n const collectionConfig = collection.config\n\n const accessResult =\n !skipAccessControl && !overrideAccess\n ? await executeAccess(\n { id, slug: collectionConfig.slug, data: incomingData, req },\n collectionConfig.access.validate,\n )\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResult)\n\n if (id === undefined && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n let docWithLocales: JsonObject = sourceData ? deepCopyObjectSimple(sourceData.docWithLocales) : {}\n\n if (id !== undefined && !sourceData) {\n const idWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: { id: { equals: id } },\n })\n const where = combineQueries(idWhere, accessResult)\n const query: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: req.locale!,\n req,\n where,\n }\n\n let storedDocument: (RequiredDataFromCollectionSlug<TSlug> & TypeWithID) | undefined\n\n if (draft && collectionConfig.versions?.drafts) {\n const { docs } = await req.payload.db.queryDrafts<\n RequiredDataFromCollectionSlug<TSlug> & TypeWithID\n >({\n collection: collectionConfig.slug,\n limit: 1,\n locale: req.locale!,\n pagination: false,\n req,\n where: appendVersionToQueryKey(where),\n })\n\n storedDocument = docs[0]\n\n if (!storedDocument && hasWherePolicy) {\n const { docs: existingVersions } = await req.payload.db.queryDrafts({\n collection: collectionConfig.slug,\n limit: 1,\n locale: req.locale!,\n pagination: false,\n req,\n select: { parent: true },\n where: appendVersionToQueryKey(idWhere),\n })\n\n if (existingVersions[0]) {\n throw new Forbidden(req.t)\n }\n }\n }\n\n if (!storedDocument) {\n storedDocument =\n (await req.payload.db.findOne<RequiredDataFromCollectionSlug<TSlug> & TypeWithID>({\n ...query,\n req,\n })) ?? undefined\n }\n\n if (!storedDocument && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n if (!storedDocument) {\n throw new NotFound(req.t)\n }\n\n docWithLocales = deepCopyObjectSimple(storedDocument)\n }\n\n let originalDoc: JsonObject\n\n if (id === undefined) {\n originalDoc = docWithLocales\n } else if (!sourceData) {\n originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(docWithLocales),\n draft,\n fallbackLocale: null,\n global: null,\n locale: req.locale!,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n } else if (req.locale === sourceData.originalLocale) {\n originalDoc = deepCopyObjectSimple(sourceData.originalDoc)\n } else {\n originalDoc = flattenDataByLocale({\n configBlockReferences: req.payload.config.blocks,\n docWithLocales,\n fields: collectionConfig.fields,\n locale: req.locale!,\n })\n }\n\n return runValidationLifecycle({\n id,\n beforeValidation: ({ data }) => {\n if (!collectionConfig.auth) {\n return\n }\n\n if (id === undefined) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data: data as RequiredDataFromCollectionSlug<TSlug>,\n operation: 'create',\n req,\n })\n } else {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data: data as RequiredDataFromCollectionSlug<TSlug>,\n operation: 'update',\n originalDoc: originalDoc as RequiredDataFromCollectionSlug<TSlug>,\n req,\n })\n }\n },\n collection: collectionConfig,\n docWithLocales,\n global: null,\n incomingData: incomingData as JsonObject | undefined,\n onValidationData,\n originalDoc,\n overrideAccess,\n req,\n skipMutationHooks,\n validateData: ({ data }) =>\n validateUniqueConstraints({\n id,\n collection: collectionConfig,\n data,\n req,\n }),\n validationOperation,\n })\n}\n"],"names":["ensureUsernameOrEmail","executeAccess","hasWhereAccessResult","combineQueries","Forbidden","NotFound","afterRead","appendNonTrashedFilter","deepCopyObjectSimple","flattenDataByLocale","runValidationLifecycle","appendVersionToQueryKey","validateUniqueConstraints","validateOperation","args","previousOperation","req","operation","validationOperation","validateOperationWithScopedRequest","id","collection","data","incomingData","draft","onValidationData","overrideAccess","skipAccessControl","skipMutationHooks","sourceData","trash","collectionConfig","config","accessResult","slug","access","validate","hasWherePolicy","undefined","t","docWithLocales","idWhere","enableTrash","where","equals","query","locale","storedDocument","versions","drafts","docs","payload","db","queryDrafts","limit","pagination","existingVersions","select","parent","findOne","originalDoc","context","depth","doc","fallbackLocale","global","showHiddenFields","originalLocale","configBlockReferences","blocks","fields","beforeValidation","auth","authOptions","collectionSlug","validateData"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/validate.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug, JsonObject } from '../../index.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type { ValidationResult } from '../../types/validation.js'\nimport type { ValidationSourceData } from '../../utilities/runValidationLifecycle.js'\nimport type { Collection, RequiredDataFromCollectionSlug, TypeWithID } from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js'\nimport { flattenDataByLocale } from '../../utilities/flattenDataByLocale.js'\nimport { runValidationLifecycle } from '../../utilities/runValidationLifecycle.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { validateUniqueConstraints } from './utilities/validateUniqueConstraints.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data?: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n draft: boolean\n id?: number | string\n onValidationData?: (data: JsonObject) => void\n overrideAccess: boolean\n req: PayloadRequest\n skipAccessControl?: boolean\n skipMutationHooks?: boolean\n sourceData?: ValidationSourceData\n trash?: boolean\n validationOperation?: 'create' | 'update' | 'validate'\n}\n\nexport async function validateOperation<TSlug extends CollectionSlug>(\n args: Arguments<TSlug>,\n): Promise<ValidationResult> {\n const previousOperation = args.req.operation\n args.req.operation = args.validationOperation ?? 'validate'\n\n try {\n return await validateOperationWithScopedRequest(args)\n } finally {\n args.req.operation = previousOperation\n }\n}\n\nasync function validateOperationWithScopedRequest<TSlug extends CollectionSlug>({\n id,\n collection,\n data: incomingData,\n draft,\n onValidationData,\n overrideAccess,\n req,\n skipAccessControl = false,\n skipMutationHooks = false,\n sourceData,\n trash = false,\n validationOperation = 'validate',\n}: Arguments<TSlug>): Promise<ValidationResult> {\n const collectionConfig = collection.config\n\n const accessResult =\n !skipAccessControl && !overrideAccess\n ? await executeAccess(\n { id, slug: collectionConfig.slug, data: incomingData, req },\n collectionConfig.access.validate,\n )\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResult)\n\n if (id === undefined && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n let docWithLocales: JsonObject = sourceData ? deepCopyObjectSimple(sourceData.docWithLocales) : {}\n\n if (id !== undefined && !sourceData) {\n const idWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: { id: { equals: id } },\n })\n const where = combineQueries(idWhere, accessResult)\n const query: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: req.locale!,\n req,\n where,\n }\n\n let storedDocument: (RequiredDataFromCollectionSlug<TSlug> & TypeWithID) | undefined\n\n if (draft && collectionConfig.versions?.drafts) {\n const { docs } = await req.payload.db.queryDrafts<\n RequiredDataFromCollectionSlug<TSlug> & TypeWithID\n >({\n collection: collectionConfig.slug,\n limit: 1,\n locale: req.locale!,\n pagination: false,\n req,\n where: appendVersionToQueryKey(where),\n })\n\n storedDocument = docs[0]\n\n if (!storedDocument && hasWherePolicy) {\n const { docs: existingVersions } = await req.payload.db.queryDrafts({\n collection: collectionConfig.slug,\n limit: 1,\n locale: req.locale!,\n pagination: false,\n req,\n select: { parent: true },\n where: appendVersionToQueryKey(idWhere),\n })\n\n if (existingVersions[0]) {\n throw new Forbidden(req.t)\n }\n }\n }\n\n if (!storedDocument) {\n storedDocument =\n (await req.payload.db.findOne<RequiredDataFromCollectionSlug<TSlug> & TypeWithID>({\n ...query,\n req,\n })) ?? undefined\n }\n\n if (!storedDocument && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n if (!storedDocument) {\n throw new NotFound(req.t)\n }\n\n docWithLocales = deepCopyObjectSimple(storedDocument)\n }\n\n let originalDoc: JsonObject\n\n if (id === undefined) {\n originalDoc = docWithLocales\n } else if (!sourceData) {\n originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(docWithLocales),\n draft,\n fallbackLocale: null,\n global: null,\n locale: req.locale!,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n } else if (req.locale === sourceData.originalLocale) {\n originalDoc = deepCopyObjectSimple(sourceData.originalDoc)\n } else {\n originalDoc = flattenDataByLocale({\n configBlockReferences: req.payload.config.blocks,\n docWithLocales,\n fields: collectionConfig.fields,\n locale: req.locale!,\n })\n }\n\n return runValidationLifecycle({\n id,\n beforeValidation: ({ data }) => {\n if (!collectionConfig.auth) {\n return\n }\n\n if (id === undefined) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data,\n operation: 'create',\n req,\n })\n } else {\n ensureUsernameOrEmail<TSlug>({\n authOptions: collectionConfig.auth,\n collectionSlug: collectionConfig.slug,\n data,\n operation: 'update',\n originalDoc,\n req,\n })\n }\n },\n collection: collectionConfig,\n docWithLocales,\n global: null,\n incomingData,\n onValidationData,\n originalDoc,\n overrideAccess,\n req,\n skipMutationHooks,\n validateData: ({ data }) =>\n validateUniqueConstraints({\n id,\n collection: collectionConfig,\n data,\n req,\n }),\n validationOperation,\n })\n}\n"],"names":["ensureUsernameOrEmail","executeAccess","hasWhereAccessResult","combineQueries","Forbidden","NotFound","afterRead","appendNonTrashedFilter","deepCopyObjectSimple","flattenDataByLocale","runValidationLifecycle","appendVersionToQueryKey","validateUniqueConstraints","validateOperation","args","previousOperation","req","operation","validationOperation","validateOperationWithScopedRequest","id","collection","data","incomingData","draft","onValidationData","overrideAccess","skipAccessControl","skipMutationHooks","sourceData","trash","collectionConfig","config","accessResult","slug","access","validate","hasWherePolicy","undefined","t","docWithLocales","idWhere","enableTrash","where","equals","query","locale","storedDocument","versions","drafts","docs","payload","db","queryDrafts","limit","pagination","existingVersions","select","parent","findOne","originalDoc","context","depth","doc","fallbackLocale","global","showHiddenFields","originalLocale","configBlockReferences","blocks","fields","beforeValidation","auth","authOptions","collectionSlug","validateData"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/config/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/config/client.ts"],"names":[],"mappings":"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"}
|
package/dist/config/client.js
CHANGED
|
@@ -60,6 +60,7 @@ export const createClientConfig = ({ config, i18n, importMap })=>{
|
|
|
60
60
|
autoLogin: config.admin.autoLogin,
|
|
61
61
|
autoRefresh: config.admin.autoRefresh,
|
|
62
62
|
avatar: config.admin.avatar,
|
|
63
|
+
constrainWidth: config.admin.constrainWidth,
|
|
63
64
|
custom: config.admin.custom,
|
|
64
65
|
dateFormat: config.admin.dateFormat,
|
|
65
66
|
importMap: config.admin.importMap,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/client.ts"],"sourcesContent":["import type { I18nClient, TFunction } from '@payloadcms/translations'\nimport type { DeepPartial } from 'ts-essentials'\n\nimport type { ClientBranchingConfig } from '../branching/types.js'\nimport type { ImportMap } from '../cli/commands/generateImportMap/generateImportMap.js'\nimport type { ClientBlock } from '../fields/config/types.js'\nimport type { BlockSlug, User } from '../index.js'\nimport type {\n ClientWidget,\n RootLivePreviewConfig,\n SanitizedConfig,\n ServerOnlyLivePreviewProperties,\n} from './types.js'\n\nimport {\n type ClientCollectionConfig,\n createClientCollectionConfigs,\n} from '../collections/config/client.js'\nimport { createClientBlocks, createClientFields } from '../fields/config/client.js'\nimport { type ClientGlobalConfig, createClientGlobalConfigs } from '../globals/config/client.js'\n\nexport type ServerOnlyRootProperties = keyof Pick<\n SanitizedConfig,\n | 'baseAccess'\n | 'cli'\n | 'cors'\n | 'csrf'\n | 'custom'\n | 'db'\n | 'editor'\n | 'email'\n | 'endpoints'\n | 'graphQL'\n | 'hooks'\n | 'i18n'\n | 'jobs'\n | 'kv'\n | 'llmInstructions'\n | 'logger'\n | 'onInit'\n | 'plugins'\n | 'queryPresets'\n | 'secret'\n | 'storage'\n | 'typescript'\n | 'upload'\n>\n\nexport type ServerOnlyRootAdminProperties = keyof Pick<SanitizedConfig['admin'], 'components'>\n\nexport type ClientConfig = {\n admin: {\n dashboard?: {\n widgets: ClientWidget[]\n }\n livePreview?: Omit<RootLivePreviewConfig, ServerOnlyLivePreviewProperties>\n } & Omit<SanitizedConfig['admin'], 'components' | 'dashboard' | 'dependencies' | 'livePreview'>\n blocks: ClientBlock[]\n blocksMap: Record<BlockSlug, ClientBlock>\n branching: ClientBranchingConfig\n collections: ClientCollectionConfig[]\n custom?: Record<string, any>\n globals: ClientGlobalConfig[]\n unauthenticated?: boolean\n} & Omit<\n SanitizedConfig,\n 'admin' | 'branching' | 'collections' | 'globals' | 'i18n' | ServerOnlyRootProperties\n>\n\nexport type UnauthenticatedClientConfig = {\n admin: {\n routes: ClientConfig['admin']['routes']\n user: ClientConfig['admin']['user']\n }\n collections: [\n {\n auth: ClientCollectionConfig['auth']\n slug: string\n },\n ]\n globals: []\n routes: ClientConfig['routes']\n serverURL: ClientConfig['serverURL']\n unauthenticated: true\n}\n\nexport const serverOnlyAdminConfigProperties: readonly Partial<ServerOnlyRootAdminProperties>[] = []\n\nexport const serverOnlyConfigProperties: readonly Partial<ServerOnlyRootProperties>[] = [\n 'baseAccess',\n 'endpoints',\n 'db',\n 'editor',\n 'plugins',\n 'onInit',\n 'secret',\n 'hooks',\n 'cli',\n 'i18n',\n 'typescript',\n 'cors',\n 'csrf',\n 'email',\n 'custom',\n 'graphQL',\n 'jobs',\n 'logger',\n 'kv',\n 'llmInstructions',\n 'queryPresets',\n 'storage',\n 'upload',\n // `admin`, `onInit`, `localization`, `collections`, and `globals` are all handled separately\n]\n\nexport type CreateClientConfigArgs = {\n config: SanitizedConfig\n i18n: I18nClient\n importMap: ImportMap\n /**\n * If unauthenticated, the client config will omit some sensitive properties\n * such as field schemas, etc. This is useful for login and error pages where\n * the page source should not contain this information.\n *\n * For example, allow `true` to generate a client config for the \"create first user\" page\n * where there is no user yet, but the config should still be complete.\n */\n user: true | User\n}\n\nexport const createUnauthenticatedClientConfig = ({\n clientConfig,\n}: {\n /**\n * Send the previously generated client config to share memory when applicable.\n * E.g. the admin-enabled collection config can reference the existing collection rather than creating a new object.\n */\n clientConfig: ClientConfig\n}): UnauthenticatedClientConfig => {\n /**\n * To share memory, find the admin user collection from the existing client config.\n */\n const adminUserCollection = clientConfig.collections.find(\n ({ slug }) => slug === clientConfig.admin.user,\n )!\n\n return {\n admin: {\n routes: clientConfig.admin.routes,\n user: clientConfig.admin.user,\n },\n collections: [\n {\n slug: adminUserCollection.slug,\n auth: adminUserCollection.auth,\n },\n ],\n globals: [],\n routes: clientConfig.routes,\n serverURL: clientConfig.serverURL,\n unauthenticated: true,\n }\n}\n\nexport const createClientConfig = ({\n config,\n i18n,\n importMap,\n}: CreateClientConfigArgs): ClientConfig => {\n const clientConfig = {} as DeepPartial<ClientConfig>\n\n for (const key in config) {\n if (serverOnlyConfigProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n clientConfig.admin = {\n autoLogin: config.admin.autoLogin,\n autoRefresh: config.admin.autoRefresh,\n avatar: config.admin.avatar,\n custom: config.admin.custom,\n dateFormat: config.admin.dateFormat,\n importMap: config.admin.importMap,\n meta: config.admin.meta,\n routes: config.admin.routes,\n theme: config.admin.theme,\n timezones: config.admin.timezones,\n toast: config.admin.toast,\n user: config.admin.user,\n }\n\n if (config.admin.dashboard?.widgets) {\n ;(clientConfig.admin.dashboard ??= {}).widgets = config.admin.dashboard.widgets.map(\n (widget) => {\n const { Component: _, fields, label, ...rest } = widget\n return {\n ...rest,\n ...(fields?.length\n ? {\n fields: createClientFields({\n defaultIDType: config.db.defaultIDType,\n fields,\n i18n,\n importMap,\n }),\n }\n : {}),\n // Resolve label function to string for client\n label:\n typeof label === 'function' ? label({ i18n, t: i18n.t as TFunction }) : label,\n }\n },\n )\n }\n\n if (config.admin.livePreview) {\n clientConfig.admin.livePreview = {}\n\n if (config.admin.livePreview.breakpoints) {\n clientConfig.admin.livePreview.breakpoints = config.admin.livePreview.breakpoints\n }\n\n if (config.admin.livePreview.collections) {\n clientConfig.admin.livePreview.collections = config.admin.livePreview.collections\n }\n\n if (config.admin.livePreview.globals) {\n clientConfig.admin.livePreview.globals = config.admin.livePreview.globals\n }\n }\n\n break\n\n case 'blocks': {\n ;(clientConfig.blocks as ClientBlock[]) = createClientBlocks({\n blocks: config.blocks,\n defaultIDType: config.db.defaultIDType,\n i18n,\n importMap,\n }).filter((block) => typeof block !== 'string')\n\n clientConfig.blocksMap = {}\n if (clientConfig.blocks?.length) {\n for (const block of clientConfig.blocks) {\n if (!block?.slug) {\n continue\n }\n\n clientConfig.blocksMap[block.slug] = block as ClientBlock\n }\n }\n\n break\n }\n\n // Only which entities branch — access functions, merge hooks and the\n // shadowed-ID ceiling are server concerns and aren't serializable.\n case 'branching':\n clientConfig.branching = {\n branchableCollections: Array.from(config.branching.branchableCollections),\n branchableGlobals: Array.from(config.branching.branchableGlobals),\n enabled: config.branching.enabled,\n }\n\n break\n\n case 'collections':\n ;(clientConfig.collections as ClientCollectionConfig[]) = createClientCollectionConfigs({\n collections: config.collections,\n defaultIDType: config.db.defaultIDType,\n i18n,\n importMap,\n })\n\n break\n\n case 'globals':\n ;(clientConfig.globals as ClientGlobalConfig[]) = createClientGlobalConfigs({\n defaultIDType: config.db.defaultIDType,\n globals: config.globals,\n i18n,\n importMap,\n })\n\n break\n\n case 'localization':\n if (typeof config.localization === 'object' && config.localization) {\n clientConfig.localization = {}\n\n if (config.localization.defaultLocale) {\n clientConfig.localization.defaultLocale = config.localization.defaultLocale\n }\n\n if (config.localization.fallback) {\n clientConfig.localization.fallback = config.localization.fallback\n }\n\n if (config.localization.localeCodes) {\n clientConfig.localization.localeCodes = config.localization.localeCodes\n }\n\n if (config.localization.locales) {\n clientConfig.localization.locales = []\n\n for (const locale of config.localization.locales) {\n if (locale) {\n const clientLocale: Partial<(typeof config.localization.locales)[0]> = {}\n\n if (locale.code) {\n clientLocale.code = locale.code\n }\n\n if (locale.fallbackLocale) {\n clientLocale.fallbackLocale = locale.fallbackLocale\n }\n\n if (locale.label) {\n clientLocale.label = locale.label\n }\n\n if (locale.rtl) {\n clientLocale.rtl = locale.rtl\n }\n\n clientConfig.localization.locales.push(clientLocale)\n }\n }\n }\n }\n\n break\n\n default:\n ;(clientConfig as any)[key] = config[key as keyof SanitizedConfig]\n }\n }\n\n return clientConfig as ClientConfig\n}\n"],"names":["createClientCollectionConfigs","createClientBlocks","createClientFields","createClientGlobalConfigs","serverOnlyAdminConfigProperties","serverOnlyConfigProperties","createUnauthenticatedClientConfig","clientConfig","adminUserCollection","collections","find","slug","admin","user","routes","auth","globals","serverURL","unauthenticated","createClientConfig","config","i18n","importMap","key","includes","autoLogin","autoRefresh","avatar","custom","dateFormat","meta","theme","timezones","toast","dashboard","widgets","map","widget","Component","_","fields","label","rest","length","defaultIDType","db","t","livePreview","breakpoints","blocks","filter","block","blocksMap","branching","branchableCollections","Array","from","branchableGlobals","enabled","localization","defaultLocale","fallback","localeCodes","locales","locale","clientLocale","code","fallbackLocale","rtl","push"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/config/client.ts"],"sourcesContent":["import type { I18nClient, TFunction } from '@payloadcms/translations'\nimport type { DeepPartial } from 'ts-essentials'\n\nimport type { ClientBranchingConfig } from '../branching/types.js'\nimport type { ImportMap } from '../cli/commands/generateImportMap/generateImportMap.js'\nimport type { ClientBlock } from '../fields/config/types.js'\nimport type { BlockSlug, User } from '../index.js'\nimport type {\n ClientWidget,\n RootLivePreviewConfig,\n SanitizedConfig,\n ServerOnlyLivePreviewProperties,\n} from './types.js'\n\nimport {\n type ClientCollectionConfig,\n createClientCollectionConfigs,\n} from '../collections/config/client.js'\nimport { createClientBlocks, createClientFields } from '../fields/config/client.js'\nimport { type ClientGlobalConfig, createClientGlobalConfigs } from '../globals/config/client.js'\n\nexport type ServerOnlyRootProperties = keyof Pick<\n SanitizedConfig,\n | 'baseAccess'\n | 'cli'\n | 'cors'\n | 'csrf'\n | 'custom'\n | 'db'\n | 'editor'\n | 'email'\n | 'endpoints'\n | 'graphQL'\n | 'hooks'\n | 'i18n'\n | 'jobs'\n | 'kv'\n | 'llmInstructions'\n | 'logger'\n | 'onInit'\n | 'plugins'\n | 'queryPresets'\n | 'secret'\n | 'storage'\n | 'typescript'\n | 'upload'\n>\n\nexport type ServerOnlyRootAdminProperties = keyof Pick<SanitizedConfig['admin'], 'components'>\n\nexport type ClientConfig = {\n admin: {\n dashboard?: {\n widgets: ClientWidget[]\n }\n livePreview?: Omit<RootLivePreviewConfig, ServerOnlyLivePreviewProperties>\n } & Omit<SanitizedConfig['admin'], 'components' | 'dashboard' | 'dependencies' | 'livePreview'>\n blocks: ClientBlock[]\n blocksMap: Record<BlockSlug, ClientBlock>\n branching: ClientBranchingConfig\n collections: ClientCollectionConfig[]\n custom?: Record<string, any>\n globals: ClientGlobalConfig[]\n unauthenticated?: boolean\n} & Omit<\n SanitizedConfig,\n 'admin' | 'branching' | 'collections' | 'globals' | 'i18n' | ServerOnlyRootProperties\n>\n\nexport type UnauthenticatedClientConfig = {\n admin: {\n routes: ClientConfig['admin']['routes']\n user: ClientConfig['admin']['user']\n }\n collections: [\n {\n auth: ClientCollectionConfig['auth']\n slug: string\n },\n ]\n globals: []\n routes: ClientConfig['routes']\n serverURL: ClientConfig['serverURL']\n unauthenticated: true\n}\n\nexport const serverOnlyAdminConfigProperties: readonly Partial<ServerOnlyRootAdminProperties>[] = []\n\nexport const serverOnlyConfigProperties: readonly Partial<ServerOnlyRootProperties>[] = [\n 'baseAccess',\n 'endpoints',\n 'db',\n 'editor',\n 'plugins',\n 'onInit',\n 'secret',\n 'hooks',\n 'cli',\n 'i18n',\n 'typescript',\n 'cors',\n 'csrf',\n 'email',\n 'custom',\n 'graphQL',\n 'jobs',\n 'logger',\n 'kv',\n 'llmInstructions',\n 'queryPresets',\n 'storage',\n 'upload',\n // `admin`, `onInit`, `localization`, `collections`, and `globals` are all handled separately\n]\n\nexport type CreateClientConfigArgs = {\n config: SanitizedConfig\n i18n: I18nClient\n importMap: ImportMap\n /**\n * If unauthenticated, the client config will omit some sensitive properties\n * such as field schemas, etc. This is useful for login and error pages where\n * the page source should not contain this information.\n *\n * For example, allow `true` to generate a client config for the \"create first user\" page\n * where there is no user yet, but the config should still be complete.\n */\n user: true | User\n}\n\nexport const createUnauthenticatedClientConfig = ({\n clientConfig,\n}: {\n /**\n * Send the previously generated client config to share memory when applicable.\n * E.g. the admin-enabled collection config can reference the existing collection rather than creating a new object.\n */\n clientConfig: ClientConfig\n}): UnauthenticatedClientConfig => {\n /**\n * To share memory, find the admin user collection from the existing client config.\n */\n const adminUserCollection = clientConfig.collections.find(\n ({ slug }) => slug === clientConfig.admin.user,\n )!\n\n return {\n admin: {\n routes: clientConfig.admin.routes,\n user: clientConfig.admin.user,\n },\n collections: [\n {\n slug: adminUserCollection.slug,\n auth: adminUserCollection.auth,\n },\n ],\n globals: [],\n routes: clientConfig.routes,\n serverURL: clientConfig.serverURL,\n unauthenticated: true,\n }\n}\n\nexport const createClientConfig = ({\n config,\n i18n,\n importMap,\n}: CreateClientConfigArgs): ClientConfig => {\n const clientConfig = {} as DeepPartial<ClientConfig>\n\n for (const key in config) {\n if (serverOnlyConfigProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n clientConfig.admin = {\n autoLogin: config.admin.autoLogin,\n autoRefresh: config.admin.autoRefresh,\n avatar: config.admin.avatar,\n constrainWidth: config.admin.constrainWidth,\n custom: config.admin.custom,\n dateFormat: config.admin.dateFormat,\n importMap: config.admin.importMap,\n meta: config.admin.meta,\n routes: config.admin.routes,\n theme: config.admin.theme,\n timezones: config.admin.timezones,\n toast: config.admin.toast,\n user: config.admin.user,\n }\n\n if (config.admin.dashboard?.widgets) {\n ;(clientConfig.admin.dashboard ??= {}).widgets = config.admin.dashboard.widgets.map(\n (widget) => {\n const { Component: _, fields, label, ...rest } = widget\n return {\n ...rest,\n ...(fields?.length\n ? {\n fields: createClientFields({\n defaultIDType: config.db.defaultIDType,\n fields,\n i18n,\n importMap,\n }),\n }\n : {}),\n // Resolve label function to string for client\n label:\n typeof label === 'function' ? label({ i18n, t: i18n.t as TFunction }) : label,\n }\n },\n )\n }\n\n if (config.admin.livePreview) {\n clientConfig.admin.livePreview = {}\n\n if (config.admin.livePreview.breakpoints) {\n clientConfig.admin.livePreview.breakpoints = config.admin.livePreview.breakpoints\n }\n\n if (config.admin.livePreview.collections) {\n clientConfig.admin.livePreview.collections = config.admin.livePreview.collections\n }\n\n if (config.admin.livePreview.globals) {\n clientConfig.admin.livePreview.globals = config.admin.livePreview.globals\n }\n }\n\n break\n\n case 'blocks': {\n ;(clientConfig.blocks as ClientBlock[]) = createClientBlocks({\n blocks: config.blocks,\n defaultIDType: config.db.defaultIDType,\n i18n,\n importMap,\n }).filter((block) => typeof block !== 'string')\n\n clientConfig.blocksMap = {}\n if (clientConfig.blocks?.length) {\n for (const block of clientConfig.blocks) {\n if (!block?.slug) {\n continue\n }\n\n clientConfig.blocksMap[block.slug] = block as ClientBlock\n }\n }\n\n break\n }\n\n // Only which entities branch — access functions, merge hooks and the\n // shadowed-ID ceiling are server concerns and aren't serializable.\n case 'branching':\n clientConfig.branching = {\n branchableCollections: Array.from(config.branching.branchableCollections),\n branchableGlobals: Array.from(config.branching.branchableGlobals),\n enabled: config.branching.enabled,\n }\n\n break\n\n case 'collections':\n ;(clientConfig.collections as ClientCollectionConfig[]) = createClientCollectionConfigs({\n collections: config.collections,\n defaultIDType: config.db.defaultIDType,\n i18n,\n importMap,\n })\n\n break\n\n case 'globals':\n ;(clientConfig.globals as ClientGlobalConfig[]) = createClientGlobalConfigs({\n defaultIDType: config.db.defaultIDType,\n globals: config.globals,\n i18n,\n importMap,\n })\n\n break\n\n case 'localization':\n if (typeof config.localization === 'object' && config.localization) {\n clientConfig.localization = {}\n\n if (config.localization.defaultLocale) {\n clientConfig.localization.defaultLocale = config.localization.defaultLocale\n }\n\n if (config.localization.fallback) {\n clientConfig.localization.fallback = config.localization.fallback\n }\n\n if (config.localization.localeCodes) {\n clientConfig.localization.localeCodes = config.localization.localeCodes\n }\n\n if (config.localization.locales) {\n clientConfig.localization.locales = []\n\n for (const locale of config.localization.locales) {\n if (locale) {\n const clientLocale: Partial<(typeof config.localization.locales)[0]> = {}\n\n if (locale.code) {\n clientLocale.code = locale.code\n }\n\n if (locale.fallbackLocale) {\n clientLocale.fallbackLocale = locale.fallbackLocale\n }\n\n if (locale.label) {\n clientLocale.label = locale.label\n }\n\n if (locale.rtl) {\n clientLocale.rtl = locale.rtl\n }\n\n clientConfig.localization.locales.push(clientLocale)\n }\n }\n }\n }\n\n break\n\n default:\n ;(clientConfig as any)[key] = config[key as keyof SanitizedConfig]\n }\n }\n\n return clientConfig as ClientConfig\n}\n"],"names":["createClientCollectionConfigs","createClientBlocks","createClientFields","createClientGlobalConfigs","serverOnlyAdminConfigProperties","serverOnlyConfigProperties","createUnauthenticatedClientConfig","clientConfig","adminUserCollection","collections","find","slug","admin","user","routes","auth","globals","serverURL","unauthenticated","createClientConfig","config","i18n","importMap","key","includes","autoLogin","autoRefresh","avatar","constrainWidth","custom","dateFormat","meta","theme","timezones","toast","dashboard","widgets","map","widget","Component","_","fields","label","rest","length","defaultIDType","db","t","livePreview","breakpoints","blocks","filter","block","blocksMap","branching","branchableCollections","Array","from","branchableGlobals","enabled","localization","defaultLocale","fallback","localeCodes","locales","locale","clientLocale","code","fallbackLocale","rtl","push"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,MAAM,EAAE,MAAM,YAAY,CAAA;AA4CrD,eAAO,MAAM,mBAAmB,WAAY,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,MAAM,EAAE,MAAM,YAAY,CAAA;AA4CrD,eAAO,MAAM,mBAAmB,WAAY,MAAM,KAAG,MAqHpD,CAAA"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -44,6 +44,7 @@ export const addDefaultsToConfig = (config)=>{
|
|
|
44
44
|
...admin,
|
|
45
45
|
avatar: admin?.avatar ?? 'gravatar',
|
|
46
46
|
components: admin?.components ?? {},
|
|
47
|
+
constrainWidth: admin?.constrainWidth ?? false,
|
|
47
48
|
custom: admin?.custom ?? {},
|
|
48
49
|
dateFormat: admin?.dateFormat ?? 'MMMM do yyyy, h:mm a',
|
|
49
50
|
dependencies: admin?.dependencies ?? {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/defaults.ts"],"sourcesContent":["import type { CLICommands, Config } from './types.js'\n\nimport { defaultAccess } from '../auth/defaultAccess.js'\nimport { databaseKVAdapter } from '../kv/adapters/DatabaseKVAdapter.js'\n\nconst defaultCLICommands: CLICommands = {\n build: 'payload/cli/builtin#createBuildCommand',\n countDocuments: 'payload/cli/builtin#createCountDocumentsCommand',\n countGlobalVersions: 'payload/cli/builtin#createCountGlobalVersionsCommand',\n countVersions: 'payload/cli/builtin#createCountVersionsCommand',\n createDocuments: 'payload/cli/builtin#createCreateDocumentsCommand',\n deleteDocuments: 'payload/cli/builtin#createDeleteDocumentsCommand',\n duplicateDocument: 'payload/cli/builtin#createDuplicateDocumentCommand',\n findDistinct: 'payload/cli/builtin#createFindDistinctCommand',\n findDocuments: 'payload/cli/builtin#createFindDocumentsCommand',\n findGlobal: 'payload/cli/builtin#createFindGlobalCommand',\n findGlobalVersionByID: 'payload/cli/builtin#createFindGlobalVersionByIDCommand',\n findGlobalVersions: 'payload/cli/builtin#createFindGlobalVersionsCommand',\n findVersionByID: 'payload/cli/builtin#createFindVersionByIDCommand',\n findVersions: 'payload/cli/builtin#createFindVersionsCommand',\n 'generate:db-schema': 'payload/cli/builtin#createGenerateDBSchemaCommand',\n 'generate:importmap': 'payload/cli/builtin#createGenerateImportMapCommand',\n 'generate:types': 'payload/cli/builtin#createGenerateTypesCommand',\n getCollectionSchema: 'payload/cli/builtin#createGetCollectionSchemaCommand',\n getConfigInfo: 'payload/cli/builtin#createGetConfigInfoCommand',\n getGlobalSchema: 'payload/cli/builtin#createGetGlobalSchemaCommand',\n help: 'payload/cli/builtin#createHelpCommand',\n info: 'payload/cli/builtin#createInfoCommand',\n 'jobs:handle-schedules': 'payload/cli/builtin#createJobsHandleSchedulesCommand',\n 'jobs:run': 'payload/cli/builtin#createJobsRunCommand',\n migrate: 'payload/cli/builtin#createMigrateCommand',\n 'migrate:create': 'payload/cli/builtin#createMigrateCreateCommand',\n 'migrate:down': 'payload/cli/builtin#createMigrateDownCommand',\n 'migrate:fresh': 'payload/cli/builtin#createMigrateFreshCommand',\n 'migrate:refresh': 'payload/cli/builtin#createMigrateRefreshCommand',\n 'migrate:reset': 'payload/cli/builtin#createMigrateResetCommand',\n 'migrate:status': 'payload/cli/builtin#createMigrateStatusCommand',\n restoreGlobalVersion: 'payload/cli/builtin#createRestoreGlobalVersionCommand',\n restoreVersion: 'payload/cli/builtin#createRestoreVersionCommand',\n run: 'payload/cli/builtin#createRunCommand',\n updateDocument: 'payload/cli/builtin#createUpdateDocumentCommand',\n updateGlobal: 'payload/cli/builtin#createUpdateGlobalCommand',\n}\n\nexport const addDefaultsToConfig = (config: Config): Config => {\n const admin = config.admin\n\n config.admin = {\n ...admin,\n avatar: admin?.avatar ?? 'gravatar',\n components: admin?.components ?? {},\n custom: admin?.custom ?? {},\n dateFormat: admin?.dateFormat ?? 'MMMM do yyyy, h:mm a',\n dependencies: admin?.dependencies ?? {},\n importMap: {\n ...admin?.importMap,\n baseDir:\n admin?.importMap?.baseDir ?? `${typeof process?.cwd === 'function' ? process.cwd() : ''}`,\n },\n meta: {\n ...admin?.meta,\n defaultOGImageType: admin?.meta?.defaultOGImageType ?? 'dynamic',\n robots: admin?.meta?.robots === undefined ? 'noindex, nofollow' : admin.meta.robots,\n titleSuffix: admin?.meta?.titleSuffix ?? '- Payload',\n },\n routes: {\n ...admin?.routes,\n account: admin?.routes?.account ?? '/account',\n createFirstUser: admin?.routes?.createFirstUser ?? '/create-first-user',\n forgot: admin?.routes?.forgot ?? '/forgot',\n inactivity: admin?.routes?.inactivity ?? '/logout-inactivity',\n login: admin?.routes?.login ?? '/login',\n logout: admin?.routes?.logout ?? '/logout',\n reset: admin?.routes?.reset ?? '/reset',\n unauthorized: admin?.routes?.unauthorized ?? '/unauthorized',\n },\n theme: admin?.theme ?? 'all',\n }\n\n if (config.cli !== false) {\n config.cli = {\n ...config.cli,\n commands: {\n ...defaultCLICommands,\n ...config.cli?.commands,\n },\n }\n }\n config.collections = config.collections ?? []\n config.cookiePrefix = config.cookiePrefix ?? 'payload'\n config.cors = config.cors ?? []\n config.csrf = config.csrf ?? []\n config.custom = config.custom ?? {}\n config.defaultDepth = config.defaultDepth ?? 1\n config.defaultMaxTextLength = config.defaultMaxTextLength ?? 40000\n config.endpoints = config.endpoints ?? []\n config.globals = config.globals ?? []\n const graphQL = config.graphQL\n\n config.graphQL = {\n ...graphQL,\n disableIntrospectionInProduction: graphQL?.disableIntrospectionInProduction ?? true,\n disablePlaygroundInProduction: graphQL?.disablePlaygroundInProduction ?? true,\n maxComplexity: graphQL?.maxComplexity ?? 1000,\n schemaOutputFile:\n graphQL?.schemaOutputFile ??\n `${typeof process?.cwd === 'function' ? process.cwd() : ''}/schema.graphql`,\n }\n config.hooks = config.hooks ?? {}\n config.i18n = config.i18n ?? {}\n config.jobs = {\n deleteJobOnComplete: true,\n ...(config.jobs || {}),\n access: {\n cancel: defaultAccess,\n queue: defaultAccess,\n run: defaultAccess,\n ...(config.jobs?.access || {}),\n },\n processingLease: {\n duration: config.jobs?.processingLease?.duration ?? 20 * 60 * 1000,\n safetyBuffer: config.jobs?.processingLease?.safetyBuffer ?? 30 * 1000,\n },\n }\n config.localization = config.localization ?? false\n config.maxDepth = config.maxDepth ?? 10\n const routes = config.routes\n\n config.routes = {\n ...routes,\n admin: routes?.admin ?? '/admin',\n api: routes?.api ?? '/api',\n graphQL: routes?.graphQL ?? '/graphql',\n graphQLPlayground: routes?.graphQLPlayground ?? '/graphql-playground',\n }\n config.serverURL = config.serverURL ?? ''\n config.telemetry = config.telemetry ?? true\n const typescript = config.typescript\n\n config.typescript = {\n ...typescript,\n autoGenerate: typescript?.autoGenerate ?? true,\n outputFile:\n typescript?.outputFile ??\n `${typeof process?.cwd === 'function' ? process.cwd() : ''}/payload-types.ts`,\n }\n config.upload = config.upload ?? { transformers: [] }\n\n config.auth = {\n ...(config.auth || {}),\n jwtOrder: config.auth?.jwtOrder ?? ['JWT', 'Bearer', 'cookie'],\n }\n\n config.kv = config.kv ?? databaseKVAdapter()\n\n if (config.kv?.kvCollection) {\n config.collections.push(config.kv.kvCollection)\n }\n\n return config\n}\n"],"names":["defaultAccess","databaseKVAdapter","defaultCLICommands","build","countDocuments","countGlobalVersions","countVersions","createDocuments","deleteDocuments","duplicateDocument","findDistinct","findDocuments","findGlobal","findGlobalVersionByID","findGlobalVersions","findVersionByID","findVersions","getCollectionSchema","getConfigInfo","getGlobalSchema","help","info","migrate","restoreGlobalVersion","restoreVersion","run","updateDocument","updateGlobal","addDefaultsToConfig","config","admin","avatar","components","custom","dateFormat","dependencies","importMap","baseDir","process","cwd","meta","defaultOGImageType","robots","undefined","titleSuffix","routes","account","createFirstUser","forgot","inactivity","login","logout","reset","unauthorized","theme","cli","commands","collections","cookiePrefix","cors","csrf","defaultDepth","defaultMaxTextLength","endpoints","globals","graphQL","disableIntrospectionInProduction","disablePlaygroundInProduction","maxComplexity","schemaOutputFile","hooks","i18n","jobs","deleteJobOnComplete","access","cancel","queue","processingLease","duration","safetyBuffer","localization","maxDepth","api","graphQLPlayground","serverURL","telemetry","typescript","autoGenerate","outputFile","upload","transformers","auth","jwtOrder","kv","kvCollection","push"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/config/defaults.ts"],"sourcesContent":["import type { CLICommands, Config } from './types.js'\n\nimport { defaultAccess } from '../auth/defaultAccess.js'\nimport { databaseKVAdapter } from '../kv/adapters/DatabaseKVAdapter.js'\n\nconst defaultCLICommands: CLICommands = {\n build: 'payload/cli/builtin#createBuildCommand',\n countDocuments: 'payload/cli/builtin#createCountDocumentsCommand',\n countGlobalVersions: 'payload/cli/builtin#createCountGlobalVersionsCommand',\n countVersions: 'payload/cli/builtin#createCountVersionsCommand',\n createDocuments: 'payload/cli/builtin#createCreateDocumentsCommand',\n deleteDocuments: 'payload/cli/builtin#createDeleteDocumentsCommand',\n duplicateDocument: 'payload/cli/builtin#createDuplicateDocumentCommand',\n findDistinct: 'payload/cli/builtin#createFindDistinctCommand',\n findDocuments: 'payload/cli/builtin#createFindDocumentsCommand',\n findGlobal: 'payload/cli/builtin#createFindGlobalCommand',\n findGlobalVersionByID: 'payload/cli/builtin#createFindGlobalVersionByIDCommand',\n findGlobalVersions: 'payload/cli/builtin#createFindGlobalVersionsCommand',\n findVersionByID: 'payload/cli/builtin#createFindVersionByIDCommand',\n findVersions: 'payload/cli/builtin#createFindVersionsCommand',\n 'generate:db-schema': 'payload/cli/builtin#createGenerateDBSchemaCommand',\n 'generate:importmap': 'payload/cli/builtin#createGenerateImportMapCommand',\n 'generate:types': 'payload/cli/builtin#createGenerateTypesCommand',\n getCollectionSchema: 'payload/cli/builtin#createGetCollectionSchemaCommand',\n getConfigInfo: 'payload/cli/builtin#createGetConfigInfoCommand',\n getGlobalSchema: 'payload/cli/builtin#createGetGlobalSchemaCommand',\n help: 'payload/cli/builtin#createHelpCommand',\n info: 'payload/cli/builtin#createInfoCommand',\n 'jobs:handle-schedules': 'payload/cli/builtin#createJobsHandleSchedulesCommand',\n 'jobs:run': 'payload/cli/builtin#createJobsRunCommand',\n migrate: 'payload/cli/builtin#createMigrateCommand',\n 'migrate:create': 'payload/cli/builtin#createMigrateCreateCommand',\n 'migrate:down': 'payload/cli/builtin#createMigrateDownCommand',\n 'migrate:fresh': 'payload/cli/builtin#createMigrateFreshCommand',\n 'migrate:refresh': 'payload/cli/builtin#createMigrateRefreshCommand',\n 'migrate:reset': 'payload/cli/builtin#createMigrateResetCommand',\n 'migrate:status': 'payload/cli/builtin#createMigrateStatusCommand',\n restoreGlobalVersion: 'payload/cli/builtin#createRestoreGlobalVersionCommand',\n restoreVersion: 'payload/cli/builtin#createRestoreVersionCommand',\n run: 'payload/cli/builtin#createRunCommand',\n updateDocument: 'payload/cli/builtin#createUpdateDocumentCommand',\n updateGlobal: 'payload/cli/builtin#createUpdateGlobalCommand',\n}\n\nexport const addDefaultsToConfig = (config: Config): Config => {\n const admin = config.admin\n\n config.admin = {\n ...admin,\n avatar: admin?.avatar ?? 'gravatar',\n components: admin?.components ?? {},\n constrainWidth: admin?.constrainWidth ?? false,\n custom: admin?.custom ?? {},\n dateFormat: admin?.dateFormat ?? 'MMMM do yyyy, h:mm a',\n dependencies: admin?.dependencies ?? {},\n importMap: {\n ...admin?.importMap,\n baseDir:\n admin?.importMap?.baseDir ?? `${typeof process?.cwd === 'function' ? process.cwd() : ''}`,\n },\n meta: {\n ...admin?.meta,\n defaultOGImageType: admin?.meta?.defaultOGImageType ?? 'dynamic',\n robots: admin?.meta?.robots === undefined ? 'noindex, nofollow' : admin.meta.robots,\n titleSuffix: admin?.meta?.titleSuffix ?? '- Payload',\n },\n routes: {\n ...admin?.routes,\n account: admin?.routes?.account ?? '/account',\n createFirstUser: admin?.routes?.createFirstUser ?? '/create-first-user',\n forgot: admin?.routes?.forgot ?? '/forgot',\n inactivity: admin?.routes?.inactivity ?? '/logout-inactivity',\n login: admin?.routes?.login ?? '/login',\n logout: admin?.routes?.logout ?? '/logout',\n reset: admin?.routes?.reset ?? '/reset',\n unauthorized: admin?.routes?.unauthorized ?? '/unauthorized',\n },\n theme: admin?.theme ?? 'all',\n }\n\n if (config.cli !== false) {\n config.cli = {\n ...config.cli,\n commands: {\n ...defaultCLICommands,\n ...config.cli?.commands,\n },\n }\n }\n config.collections = config.collections ?? []\n config.cookiePrefix = config.cookiePrefix ?? 'payload'\n config.cors = config.cors ?? []\n config.csrf = config.csrf ?? []\n config.custom = config.custom ?? {}\n config.defaultDepth = config.defaultDepth ?? 1\n config.defaultMaxTextLength = config.defaultMaxTextLength ?? 40000\n config.endpoints = config.endpoints ?? []\n config.globals = config.globals ?? []\n const graphQL = config.graphQL\n\n config.graphQL = {\n ...graphQL,\n disableIntrospectionInProduction: graphQL?.disableIntrospectionInProduction ?? true,\n disablePlaygroundInProduction: graphQL?.disablePlaygroundInProduction ?? true,\n maxComplexity: graphQL?.maxComplexity ?? 1000,\n schemaOutputFile:\n graphQL?.schemaOutputFile ??\n `${typeof process?.cwd === 'function' ? process.cwd() : ''}/schema.graphql`,\n }\n config.hooks = config.hooks ?? {}\n config.i18n = config.i18n ?? {}\n config.jobs = {\n deleteJobOnComplete: true,\n ...(config.jobs || {}),\n access: {\n cancel: defaultAccess,\n queue: defaultAccess,\n run: defaultAccess,\n ...(config.jobs?.access || {}),\n },\n processingLease: {\n duration: config.jobs?.processingLease?.duration ?? 20 * 60 * 1000,\n safetyBuffer: config.jobs?.processingLease?.safetyBuffer ?? 30 * 1000,\n },\n }\n config.localization = config.localization ?? false\n config.maxDepth = config.maxDepth ?? 10\n const routes = config.routes\n\n config.routes = {\n ...routes,\n admin: routes?.admin ?? '/admin',\n api: routes?.api ?? '/api',\n graphQL: routes?.graphQL ?? '/graphql',\n graphQLPlayground: routes?.graphQLPlayground ?? '/graphql-playground',\n }\n config.serverURL = config.serverURL ?? ''\n config.telemetry = config.telemetry ?? true\n const typescript = config.typescript\n\n config.typescript = {\n ...typescript,\n autoGenerate: typescript?.autoGenerate ?? true,\n outputFile:\n typescript?.outputFile ??\n `${typeof process?.cwd === 'function' ? process.cwd() : ''}/payload-types.ts`,\n }\n config.upload = config.upload ?? { transformers: [] }\n\n config.auth = {\n ...(config.auth || {}),\n jwtOrder: config.auth?.jwtOrder ?? ['JWT', 'Bearer', 'cookie'],\n }\n\n config.kv = config.kv ?? databaseKVAdapter()\n\n if (config.kv?.kvCollection) {\n config.collections.push(config.kv.kvCollection)\n }\n\n return config\n}\n"],"names":["defaultAccess","databaseKVAdapter","defaultCLICommands","build","countDocuments","countGlobalVersions","countVersions","createDocuments","deleteDocuments","duplicateDocument","findDistinct","findDocuments","findGlobal","findGlobalVersionByID","findGlobalVersions","findVersionByID","findVersions","getCollectionSchema","getConfigInfo","getGlobalSchema","help","info","migrate","restoreGlobalVersion","restoreVersion","run","updateDocument","updateGlobal","addDefaultsToConfig","config","admin","avatar","components","constrainWidth","custom","dateFormat","dependencies","importMap","baseDir","process","cwd","meta","defaultOGImageType","robots","undefined","titleSuffix","routes","account","createFirstUser","forgot","inactivity","login","logout","reset","unauthorized","theme","cli","commands","collections","cookiePrefix","cors","csrf","defaultDepth","defaultMaxTextLength","endpoints","globals","graphQL","disableIntrospectionInProduction","disablePlaygroundInProduction","maxComplexity","schemaOutputFile","hooks","i18n","jobs","deleteJobOnComplete","access","cancel","queue","processingLease","duration","safetyBuffer","localization","maxDepth","api","graphQLPlayground","serverURL","telemetry","typescript","autoGenerate","outputFile","upload","transformers","auth","jwtOrder","kv","kvCollection","push"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/definePlugin.ts"],"sourcesContent":["import type { Config, Plugin, PluginsMap } from './types.js'\n\nfunction buildPluginsMap(plugins: Plugin[] | undefined): PluginsMap {\n const map: Record<string, Plugin | undefined> = {}\n if (plugins) {\n for (const p of plugins) {\n if (p.slug) {\n map[p.slug] = p\n }\n }\n }\n return map
|
|
1
|
+
{"version":3,"sources":["../../src/config/definePlugin.ts"],"sourcesContent":["import type { Config, Plugin, PluginsMap } from './types.js'\n\nfunction buildPluginsMap(plugins: Plugin[] | undefined): PluginsMap {\n const map: Record<string, Plugin | undefined> = {}\n if (plugins) {\n for (const p of plugins) {\n if (p.slug) {\n map[p.slug] = p\n }\n }\n }\n return map\n}\n\n/**\n * Helper for authoring plugins with order, slug, and typed options.\n * Eliminates boilerplate and ensures metadata is always set consistently.\n *\n * The `plugin` function receives `config`, `plugins` (a slug-keyed map of other\n * plugins), and the user-provided `options`.\n *\n * @experimental\n *\n * @example\n * // With options:\n * export const seoPlugin = definePlugin<SEOPluginConfig>({\n * slug: 'plugin-seo',\n * plugin: ({ config, options }) => ({ ...config }),\n * })\n *\n * // Without options:\n * export const myPlugin = definePlugin({\n * slug: 'my-plugin',\n * plugin: ({ config }) => ({ ...config }),\n * })\n */\nexport function definePlugin(descriptor: {\n order?: number\n plugin: (args: { config: Config; plugins: PluginsMap }) => Config | Promise<Config>\n slug: string\n}): () => Plugin\nexport function definePlugin<TOptions>(descriptor: {\n order?: number\n plugin: (args: {\n config: Config\n options: TOptions\n plugins: PluginsMap\n }) => Config | Promise<Config>\n slug: string\n}): undefined extends TOptions ? (options?: TOptions) => Plugin : (options: TOptions) => Plugin\nexport function definePlugin<TOptions>(descriptor: {\n order?: number\n plugin: (args: {\n config: Config\n options: TOptions\n plugins: PluginsMap\n }) => Config | Promise<Config>\n slug: string\n}): (options: TOptions) => Plugin {\n return (options?: TOptions): Plugin => {\n const pluginFn: Plugin = (config) =>\n descriptor.plugin({\n config,\n options: options as TOptions,\n plugins: buildPluginsMap(config.plugins),\n })\n\n if (options !== undefined) {\n pluginFn.options = options as Record<string, unknown>\n }\n pluginFn.slug = descriptor.slug\n if (descriptor.order !== undefined) {\n pluginFn.order = descriptor.order\n }\n\n return pluginFn\n }\n}\n"],"names":["buildPluginsMap","plugins","map","p","slug","definePlugin","descriptor","options","pluginFn","config","plugin","undefined","order"],"mappings":"AAEA,SAASA,gBAAgBC,OAA6B;IACpD,MAAMC,MAA0C,CAAC;IACjD,IAAID,SAAS;QACX,KAAK,MAAME,KAAKF,QAAS;YACvB,IAAIE,EAAEC,IAAI,EAAE;gBACVF,GAAG,CAACC,EAAEC,IAAI,CAAC,GAAGD;YAChB;QACF;IACF;IACA,OAAOD;AACT;AAsCA,OAAO,SAASG,aAAuBC,UAQtC;IACC,OAAO,CAACC;QACN,MAAMC,WAAmB,CAACC,SACxBH,WAAWI,MAAM,CAAC;gBAChBD;gBACAF,SAASA;gBACTN,SAASD,gBAAgBS,OAAOR,OAAO;YACzC;QAEF,IAAIM,YAAYI,WAAW;YACzBH,SAASD,OAAO,GAAGA;QACrB;QACAC,SAASJ,IAAI,GAAGE,WAAWF,IAAI;QAC/B,IAAIE,WAAWM,KAAK,KAAKD,WAAW;YAClCH,SAASI,KAAK,GAAGN,WAAWM,KAAK;QACnC;QAEA,OAAOJ;IACT;AACF"}
|
package/dist/config/sanitize.js
CHANGED
|
@@ -145,7 +145,7 @@ const addDefaultDashboardWidgets = ({ config, richTextSanitizers, validRelations
|
|
|
145
145
|
components: {
|
|
146
146
|
// Presents an inclusion filter (all collections checked by default) while persisting the
|
|
147
147
|
// inverse as an exclusion list, so collections added later stay visible by default.
|
|
148
|
-
Field: '@payloadcms/ui#
|
|
148
|
+
Field: '@payloadcms/ui#CollectionFilter'
|
|
149
149
|
},
|
|
150
150
|
description: ({ t })=>t('dashboard:widgetRecentlyViewedFilterDescription')
|
|
151
151
|
},
|
|
@@ -195,7 +195,7 @@ const addDefaultDashboardWidgets = ({ config, richTextSanitizers, validRelations
|
|
|
195
195
|
});
|
|
196
196
|
dashboard.widgets.push({
|
|
197
197
|
slug: 'activity',
|
|
198
|
-
Component: '@payloadcms/ui/rsc#
|
|
198
|
+
Component: '@payloadcms/ui/rsc#ActivityWidget',
|
|
199
199
|
fields: sanitizeFields({
|
|
200
200
|
config: config,
|
|
201
201
|
existingFieldNames: new Set(),
|