payload 4.0.0-internal.cd69eef → 4.0.0-internal.d1cc1d3
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/RichText.d.ts +1 -1
- package/dist/admin/RichText.d.ts.map +1 -1
- package/dist/admin/RichText.js.map +1 -1
- package/dist/admin/functions/index.d.ts +10 -8
- package/dist/admin/functions/index.d.ts.map +1 -1
- package/dist/admin/functions/index.js.map +1 -1
- package/dist/admin/types.d.ts +2 -2
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/auth/endpoints/login.d.ts.map +1 -1
- package/dist/auth/endpoints/login.js +2 -11
- package/dist/auth/endpoints/login.js.map +1 -1
- package/dist/auth/loginWithCookie.d.ts +33 -0
- package/dist/auth/loginWithCookie.d.ts.map +1 -0
- package/dist/auth/loginWithCookie.js +34 -0
- package/dist/auth/loginWithCookie.js.map +1 -0
- package/dist/auth/serverFunctions/cookies.d.ts +47 -0
- package/dist/auth/serverFunctions/cookies.d.ts.map +1 -0
- package/dist/auth/serverFunctions/cookies.js +52 -0
- package/dist/auth/serverFunctions/cookies.js.map +1 -0
- package/dist/auth/serverFunctions/login.d.ts +29 -0
- package/dist/auth/serverFunctions/login.d.ts.map +1 -0
- package/dist/auth/serverFunctions/login.js +63 -0
- package/dist/auth/serverFunctions/login.js.map +1 -0
- package/dist/auth/serverFunctions/logout.d.ts +17 -0
- package/dist/auth/serverFunctions/logout.d.ts.map +1 -0
- package/dist/auth/serverFunctions/logout.js +58 -0
- package/dist/auth/serverFunctions/logout.js.map +1 -0
- package/dist/auth/serverFunctions/refresh.d.ts +17 -0
- package/dist/auth/serverFunctions/refresh.d.ts.map +1 -0
- package/dist/auth/serverFunctions/refresh.js +61 -0
- package/dist/auth/serverFunctions/refresh.js.map +1 -0
- package/dist/collections/config/client.d.ts +2 -3
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +5 -7
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/defaults.d.ts.map +1 -1
- package/dist/collections/config/defaults.js +1 -0
- package/dist/collections/config/defaults.js.map +1 -1
- package/dist/collections/config/sanitize.d.ts +3 -8
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +2 -6
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/types.d.ts +1 -1
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/config/useAsTitle.spec.js +27 -27
- package/dist/collections/config/useAsTitle.spec.js.map +1 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +10 -0
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/restoreVersion.js +7 -4
- package/dist/collections/operations/restoreVersion.js.map +1 -1
- package/dist/collections/operations/updateByID.js +1 -0
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/config/build.js +1 -1
- package/dist/config/build.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +5 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/orderable/index.d.ts +1 -1
- package/dist/config/orderable/index.d.ts.map +1 -1
- package/dist/config/orderable/index.js +2 -2
- package/dist/config/orderable/index.js.map +1 -1
- package/dist/config/sanitize.d.ts +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +33 -40
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/createDatabaseAdapter.d.ts +1 -1
- package/dist/database/createDatabaseAdapter.d.ts.map +1 -1
- package/dist/database/createDatabaseAdapter.js +0 -2
- package/dist/database/createDatabaseAdapter.js.map +1 -1
- package/dist/database/types.d.ts +6 -0
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js.map +1 -1
- package/dist/exports/auth.d.ts +5 -0
- package/dist/exports/auth.d.ts.map +1 -0
- package/dist/exports/auth.js +6 -0
- package/dist/exports/auth.js.map +1 -0
- package/dist/exports/internal.d.ts +2 -0
- package/dist/exports/internal.d.ts.map +1 -1
- package/dist/exports/internal.js +3 -1
- package/dist/exports/internal.js.map +1 -1
- package/dist/fields/baseFields/slug/duplicateContext.d.ts +11 -0
- package/dist/fields/baseFields/slug/duplicateContext.d.ts.map +1 -0
- package/dist/fields/baseFields/slug/duplicateContext.js +21 -0
- package/dist/fields/baseFields/slug/duplicateContext.js.map +1 -0
- package/dist/fields/baseFields/slug/fillEmptyLocalizedSlugs.d.ts +22 -0
- package/dist/fields/baseFields/slug/fillEmptyLocalizedSlugs.d.ts.map +1 -0
- package/dist/fields/baseFields/slug/fillEmptyLocalizedSlugs.js +63 -0
- package/dist/fields/baseFields/slug/fillEmptyLocalizedSlugs.js.map +1 -0
- package/dist/fields/baseFields/slug/generateSlug.d.ts +13 -8
- package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.js +98 -45
- package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
- package/dist/fields/baseFields/slug/generateSlugBeforeDuplicate.d.ts +18 -0
- package/dist/fields/baseFields/slug/generateSlugBeforeDuplicate.d.ts.map +1 -0
- package/dist/fields/baseFields/slug/generateSlugBeforeDuplicate.js +20 -0
- package/dist/fields/baseFields/slug/generateSlugBeforeDuplicate.js.map +1 -0
- package/dist/fields/baseFields/slug/getSlugFallbackValue.d.ts +22 -0
- package/dist/fields/baseFields/slug/getSlugFallbackValue.d.ts.map +1 -0
- package/dist/fields/baseFields/slug/getSlugFallbackValue.js +23 -0
- package/dist/fields/baseFields/slug/getSlugFallbackValue.js.map +1 -0
- package/dist/fields/baseFields/slug/hasValue.d.ts +3 -0
- package/dist/fields/baseFields/slug/hasValue.d.ts.map +1 -0
- package/dist/fields/baseFields/slug/hasValue.js +3 -0
- package/dist/fields/baseFields/slug/hasValue.js.map +1 -0
- package/dist/fields/config/reservedFieldNames.spec.js +18 -18
- package/dist/fields/config/reservedFieldNames.spec.js.map +1 -1
- package/dist/fields/config/sanitize.d.ts +3 -9
- package/dist/fields/config/sanitize.d.ts.map +1 -1
- package/dist/fields/config/sanitize.js +33 -34
- package/dist/fields/config/sanitize.js.map +1 -1
- package/dist/fields/config/sanitize.spec.js +128 -105
- package/dist/fields/config/sanitize.spec.js.map +1 -1
- package/dist/fields/config/types.d.ts +4 -3
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.js +5 -3
- package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/stripNullRows.d.ts +10 -0
- package/dist/fields/hooks/beforeValidate/stripNullRows.d.ts.map +1 -0
- package/dist/fields/hooks/beforeValidate/stripNullRows.js +18 -0
- package/dist/fields/hooks/beforeValidate/stripNullRows.js.map +1 -0
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +7 -8
- package/dist/fields/validations.js.map +1 -1
- package/dist/fields/validations.spec.js +61 -37
- package/dist/fields/validations.spec.js.map +1 -1
- package/dist/globals/config/sanitize.d.ts +2 -7
- package/dist/globals/config/sanitize.d.ts.map +1 -1
- package/dist/globals/config/sanitize.js +2 -6
- package/dist/globals/config/sanitize.js.map +1 -1
- package/dist/globals/config/sanitize.spec.js +6 -6
- package/dist/globals/config/sanitize.spec.js.map +1 -1
- package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
- package/dist/globals/operations/countGlobalVersions.js +1 -0
- package/dist/globals/operations/countGlobalVersions.js.map +1 -1
- package/dist/index.bundled.d.ts +247 -178
- package/dist/index.d.ts +49 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/query-presets/constraints.js +1 -1
- package/dist/query-presets/constraints.js.map +1 -1
- package/dist/queues/config/collection.d.ts.map +1 -1
- package/dist/queues/config/collection.js +37 -43
- package/dist/queues/config/collection.js.map +1 -1
- package/dist/queues/config/global.d.ts +5 -6
- package/dist/queues/config/global.d.ts.map +1 -1
- package/dist/queues/config/global.js +1 -1
- package/dist/queues/config/global.js.map +1 -1
- package/dist/queues/config/types/index.d.ts +29 -24
- package/dist/queues/config/types/index.d.ts.map +1 -1
- package/dist/queues/config/types/index.js.map +1 -1
- package/dist/queues/config/types/taskTypes.d.ts +4 -7
- package/dist/queues/config/types/taskTypes.d.ts.map +1 -1
- package/dist/queues/config/types/taskTypes.js.map +1 -1
- package/dist/queues/config/types/workflowJSONTypes.d.ts +10 -9
- package/dist/queues/config/types/workflowJSONTypes.d.ts.map +1 -1
- package/dist/queues/config/types/workflowJSONTypes.js.map +1 -1
- package/dist/queues/config/types/workflowTypes.d.ts +11 -58
- package/dist/queues/config/types/workflowTypes.d.ts.map +1 -1
- package/dist/queues/config/types/workflowTypes.js.map +1 -1
- package/dist/queues/endpoints/handleSchedules.js +1 -1
- package/dist/queues/endpoints/handleSchedules.js.map +1 -1
- package/dist/queues/errors/handleTaskError.js +4 -4
- package/dist/queues/errors/handleTaskError.js.map +1 -1
- package/dist/queues/errors/handleWorkflowError.js +1 -1
- package/dist/queues/errors/handleWorkflowError.js.map +1 -1
- package/dist/queues/errors/index.d.ts +6 -0
- package/dist/queues/errors/index.d.ts.map +1 -1
- package/dist/queues/errors/index.js +5 -0
- package/dist/queues/errors/index.js.map +1 -1
- package/dist/queues/localAPI.d.ts +4 -4
- package/dist/queues/localAPI.d.ts.map +1 -1
- package/dist/queues/localAPI.js +63 -66
- package/dist/queues/localAPI.js.map +1 -1
- package/dist/queues/operations/handleSchedules/countRunnableOrActiveJobsForQueue.d.ts +4 -4
- package/dist/queues/operations/handleSchedules/countRunnableOrActiveJobsForQueue.d.ts.map +1 -1
- package/dist/queues/operations/handleSchedules/countRunnableOrActiveJobsForQueue.js.map +1 -1
- package/dist/queues/operations/handleSchedules/index.d.ts +1 -1
- package/dist/queues/operations/handleSchedules/index.d.ts.map +1 -1
- package/dist/queues/operations/handleSchedules/index.js +1 -1
- package/dist/queues/operations/handleSchedules/index.js.map +1 -1
- package/dist/queues/operations/runJobs/heartbeat.d.ts +13 -0
- package/dist/queues/operations/runJobs/heartbeat.d.ts.map +1 -0
- package/dist/queues/operations/runJobs/heartbeat.js +66 -0
- package/dist/queues/operations/runJobs/heartbeat.js.map +1 -0
- package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/index.js +133 -84
- package/dist/queues/operations/runJobs/index.js.map +1 -1
- package/dist/queues/operations/runJobs/runJSONJob/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJSONJob/index.js +6 -3
- package/dist/queues/operations/runJobs/runJSONJob/index.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +5 -5
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts +2 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +39 -8
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/importHandlerPath.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/index.js +4 -4
- package/dist/queues/operations/runJobs/runJob/index.js.map +1 -1
- package/dist/queues/utilities/updateJob.d.ts.map +1 -1
- package/dist/queues/utilities/updateJob.js +3 -0
- package/dist/queues/utilities/updateJob.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/uploads/checkFileRestrictions.d.ts +1 -1
- package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
- package/dist/uploads/checkFileRestrictions.js +15 -1
- package/dist/uploads/checkFileRestrictions.js.map +1 -1
- package/dist/uploads/endpoints/uploadInstructions.d.ts +12 -0
- package/dist/uploads/endpoints/uploadInstructions.d.ts.map +1 -1
- package/dist/uploads/endpoints/uploadInstructions.js +66 -20
- package/dist/uploads/endpoints/uploadInstructions.js.map +1 -1
- package/dist/uploads/generateFileData.js +4 -1
- package/dist/uploads/generateFileData.js.map +1 -1
- package/dist/uploads/getFileFromUploadInstructions.d.ts +8 -0
- package/dist/uploads/getFileFromUploadInstructions.d.ts.map +1 -0
- package/dist/uploads/getFileFromUploadInstructions.js +62 -0
- package/dist/uploads/getFileFromUploadInstructions.js.map +1 -0
- package/dist/uploads/getImageSize.d.ts +12 -1
- package/dist/uploads/getImageSize.d.ts.map +1 -1
- package/dist/uploads/getImageSize.js +20 -18
- package/dist/uploads/getImageSize.js.map +1 -1
- package/dist/uploads/getImageSize.spec.js +298 -0
- package/dist/uploads/getImageSize.spec.js.map +1 -0
- package/dist/uploads/probeImageSize.d.ts +39 -0
- package/dist/uploads/probeImageSize.d.ts.map +1 -0
- package/dist/uploads/probeImageSize.js +374 -0
- package/dist/uploads/probeImageSize.js.map +1 -0
- package/dist/uploads/probeImageSize.spec.js +366 -0
- package/dist/uploads/probeImageSize.spec.js.map +1 -0
- package/dist/uploads/stagedUpload.d.ts +27 -0
- package/dist/uploads/stagedUpload.d.ts.map +1 -0
- package/dist/uploads/stagedUpload.js +197 -0
- package/dist/uploads/stagedUpload.js.map +1 -0
- package/dist/uploads/types.d.ts +41 -13
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.js +12 -46
- package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
- package/dist/utilities/configToJSONSchema.spec.js +33 -33
- package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
- package/dist/utilities/fieldValueExists.d.ts +29 -0
- package/dist/utilities/fieldValueExists.d.ts.map +1 -0
- package/dist/utilities/fieldValueExists.js +27 -0
- package/dist/utilities/fieldValueExists.js.map +1 -0
- package/dist/utilities/getUniqueFieldValue.d.ts +27 -0
- package/dist/utilities/getUniqueFieldValue.d.ts.map +1 -0
- package/dist/utilities/getUniqueFieldValue.js +26 -0
- package/dist/utilities/getUniqueFieldValue.js.map +1 -0
- package/dist/versions/deleteScheduledPublishJobs.js +2 -2
- package/dist/versions/deleteScheduledPublishJobs.js.map +1 -1
- package/dist/versions/payloadPackageList.d.ts.map +1 -1
- package/dist/versions/payloadPackageList.js +0 -1
- package/dist/versions/payloadPackageList.js.map +1 -1
- package/package.json +8 -3
- package/dist/database/defaultUpdateJobs.d.ts +0 -3
- package/dist/database/defaultUpdateJobs.d.ts.map +0 -1
- package/dist/database/defaultUpdateJobs.js +0 -41
- package/dist/database/defaultUpdateJobs.js.map +0 -1
- package/dist/fields/baseFields/slug/countVersions.d.ts +0 -13
- package/dist/fields/baseFields/slug/countVersions.d.ts.map +0 -1
- package/dist/fields/baseFields/slug/countVersions.js +0 -27
- package/dist/fields/baseFields/slug/countVersions.js.map +0 -1
- package/dist/uploads/tempFile.d.ts +0 -7
- package/dist/uploads/tempFile.d.ts.map +0 -1
- package/dist/uploads/tempFile.js +0 -39
- package/dist/uploads/tempFile.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/create.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport type { CollectionSlug, FindOptions, JsonObject } from '../../index.js'\nimport type {\n Document,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { sendVerificationEmail } from '../../auth/sendVerificationEmail.js'\nimport { registerLocalStrategy } from '../../auth/strategies/local/register.js'\nimport { getDuplicateDocumentData } from '../../duplicateDocument/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 { saveVersion } from '../../index.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport {\n hasDraftsEnabled,\n hasDraftValidationEnabled,\n hasLocalizeStatusEnabled,\n} from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeInternalFields } from '../../utilities/sanitizeInternalFields.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: RequiredDataFromCollectionSlug<TSlug>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n duplicateFromID?: DataFromCollectionSlug<TSlug>['id']\n overrideAccess?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n publishAllLocales?: boolean\n req: PayloadRequest\n selectedLocales?: string[]\n showHiddenFields?: boolean\n} & Pick<FindOptions<TSlug, SelectType>, 'select'>\n\nexport const createOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'create',\n req: args.req,\n })\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'create',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n disableVerificationEmail,\n draft = false,\n duplicateFromID,\n overrideAccess,\n overwriteExistingFiles = false,\n populate,\n publishAllLocales: publishAllLocalesArg,\n req: {\n fallbackLocale,\n locale,\n payload,\n payload: { config },\n },\n req,\n select: incomingSelect,\n selectedLocales,\n showHiddenFields,\n } = args\n\n let { data } = args\n\n // For creates there is no existing doc — always publish all locales when not a draft.\n const publishAllLocales =\n !draft &&\n (publishAllLocalesArg ?? (hasLocalizeStatusEnabled(collectionConfig) ? false : true))\n const isSavingDraft = Boolean(draft && hasDraftsEnabled(collectionConfig) && !publishAllLocales)\n\n if (isSavingDraft) {\n data._status = 'draft'\n }\n\n let duplicatedFromDocWithLocales: JsonObject = {}\n let duplicatedFromDoc: JsonObject = {}\n\n if (duplicateFromID) {\n const duplicateResult = await getDuplicateDocumentData({\n id: duplicateFromID,\n collectionConfig,\n draftArg: isSavingDraft,\n overrideAccess,\n req,\n selectedLocales,\n })\n\n duplicatedFromDoc = duplicateResult.duplicatedFromDoc\n duplicatedFromDocWithLocales = duplicateResult.duplicatedFromDocWithLocales\n }\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n if (!overrideAccess) {\n await executeAccess({ data, req }, collectionConfig.access.create)\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n draft: isSavingDraft,\n isDuplicating: Boolean(duplicateFromID),\n operation: 'create',\n originalDoc: duplicatedFromDoc,\n overwriteExistingFiles,\n req,\n throwOnMissingFile:\n !isSavingDraft && collection.config.upload.filesRequiredOnCreate !== false,\n })\n\n data = newFileData\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: duplicatedFromDoc,\n global: null,\n operation: 'create',\n overrideAccess: overrideAccess!,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collections\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: 'create',\n originalDoc: duplicatedFromDoc,\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: 'create',\n originalDoc: duplicatedFromDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n const dataWithLocales = await beforeChange<JsonObject>({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: duplicatedFromDoc,\n docWithLocales: duplicatedFromDocWithLocales,\n global: null,\n operation: 'create',\n overrideAccess,\n req,\n skipValidation: isSavingDraft && !hasDraftValidationEnabled(collectionConfig),\n })\n\n // When locale='all' or when beforeChange doesn't convert the string (e.g. no locale hook ran),\n // the localized _status remains a plain string. Expand it to a per-locale object so MongoDB\n // doesn't reject the write. This covers both draft and non-draft operations.\n if (\n config.localization &&\n hasLocalizeStatusEnabled(collectionConfig) &&\n typeof dataWithLocales._status === 'string'\n ) {\n const statusStr = dataWithLocales._status\n dataWithLocales._status = {}\n for (const localeCode of config.localization.localeCodes) {\n ;(dataWithLocales._status as Record<string, unknown>)[localeCode] = statusStr\n }\n }\n\n if (config.localization && hasLocalizeStatusEnabled(collectionConfig) && publishAllLocales) {\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 dataWithLocales._status !== 'object' || dataWithLocales._status === null) {\n dataWithLocales._status = {}\n }\n\n for (const localeCode of accessibleLocaleCodes) {\n dataWithLocales._status[localeCode] = 'published'\n }\n }\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // Create\n // /////////////////////////////////////\n\n let doc\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'create',\n req,\n select: incomingSelect,\n }),\n })\n\n if (collectionConfig.auth && !collectionConfig.auth.disableLocalStrategy) {\n if (collectionConfig.auth.verify) {\n dataWithLocales._verified = Boolean(dataWithLocales._verified) || false\n dataWithLocales._verificationToken = crypto.randomBytes(20).toString('hex')\n }\n\n doc = await registerLocalStrategy({\n collection: collectionConfig,\n doc: dataWithLocales,\n password: data.password as string,\n payload: req.payload,\n req,\n })\n } else {\n doc = await payload.db.create({\n collection: collectionConfig.slug,\n data: dataWithLocales,\n req,\n })\n }\n\n const verificationToken = doc._verificationToken\n let resultWithLocales: Document = sanitizeInternalFields(doc)\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n resultWithLocales = { ...resultWithLocales, collection: collectionConfig.slug }\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n await saveVersion({\n id: resultWithLocales.id,\n autosave,\n collection: collectionConfig,\n docWithLocales: resultWithLocales,\n operation: 'create',\n payload,\n req,\n returning: false,\n })\n }\n\n // /////////////////////////////////////\n // Send verification email if applicable\n // /////////////////////////////////////\n\n if (collectionConfig.auth && collectionConfig.auth.verify && resultWithLocales.email) {\n await sendVerificationEmail({\n collection: { config: collectionConfig },\n config: payload.config,\n disableEmail: disableVerificationEmail!,\n email: payload.email,\n req,\n token: verificationToken,\n user: resultWithLocales,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n let result: Document = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: resultWithLocales,\n draft,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: 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: 'create',\n previousDoc: {},\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: 'create',\n overrideAccess,\n previousDoc: {},\n req: args.req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation<TSlug>({\n args,\n collection: collectionConfig,\n operation: 'create',\n overrideAccess: args.overrideAccess!,\n result,\n })\n\n await unlinkTempFiles({ collectionConfig, config, req })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["crypto","ensureUsernameOrEmail","executeAccess","sendVerificationEmail","registerLocalStrategy","getDuplicateDocumentData","afterChange","afterRead","beforeChange","beforeValidate","saveVersion","generateFileData","unlinkTempFiles","uploadFiles","commitTransaction","hasDraftsEnabled","hasDraftValidationEnabled","hasLocalizeStatusEnabled","initTransaction","killTransaction","resolveSelect","sanitizeInternalFields","sanitizeSelect","buildAfterOperation","buildBeforeOperation","createOperation","incomingArgs","args","shouldCommit","disableTransaction","req","authOptions","collection","config","auth","collectionSlug","slug","data","operation","overrideAccess","autosave","collectionConfig","depth","disableVerificationEmail","draft","duplicateFromID","overwriteExistingFiles","populate","publishAllLocales","publishAllLocalesArg","fallbackLocale","locale","payload","select","incomingSelect","selectedLocales","showHiddenFields","isSavingDraft","Boolean","_status","duplicatedFromDocWithLocales","duplicatedFromDoc","duplicateResult","id","draftArg","access","create","newFileData","files","filesToUpload","isDuplicating","originalDoc","throwOnMissingFile","upload","filesRequiredOnCreate","context","doc","global","hooks","length","hook","dataWithLocales","docWithLocales","skipValidation","localization","statusStr","localeCode","localeCodes","accessibleLocaleCodes","filterAvailableLocales","filteredLocales","locales","map","code","disableLocalStorage","fields","flattenedFields","disableLocalStrategy","verify","_verified","_verificationToken","randomBytes","toString","password","db","verificationToken","resultWithLocales","versions","returning","email","disableEmail","token","user","result","previousDoc","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/create.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport type { CollectionSlug, FindOptions, JsonObject } from '../../index.js'\nimport type {\n Document,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { sendVerificationEmail } from '../../auth/sendVerificationEmail.js'\nimport { registerLocalStrategy } from '../../auth/strategies/local/register.js'\nimport { getDuplicateDocumentData } from '../../duplicateDocument/index.js'\nimport { fillEmptyLocalizedSlugs } from '../../fields/baseFields/slug/fillEmptyLocalizedSlugs.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 { saveVersion } from '../../index.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport {\n hasDraftsEnabled,\n hasDraftValidationEnabled,\n hasLocalizeStatusEnabled,\n} from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeInternalFields } from '../../utilities/sanitizeInternalFields.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: RequiredDataFromCollectionSlug<TSlug>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n duplicateFromID?: DataFromCollectionSlug<TSlug>['id']\n overrideAccess?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n publishAllLocales?: boolean\n req: PayloadRequest\n selectedLocales?: string[]\n showHiddenFields?: boolean\n} & Pick<FindOptions<TSlug, SelectType>, 'select'>\n\nexport const createOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'create',\n req: args.req,\n })\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'create',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n disableVerificationEmail,\n draft = false,\n duplicateFromID,\n overrideAccess,\n overwriteExistingFiles = false,\n populate,\n publishAllLocales: publishAllLocalesArg,\n req: {\n fallbackLocale,\n locale,\n payload,\n payload: { config },\n },\n req,\n select: incomingSelect,\n selectedLocales,\n showHiddenFields,\n } = args\n\n let { data } = args\n\n // For creates there is no existing doc — always publish all locales when not a draft.\n const publishAllLocales =\n !draft &&\n (publishAllLocalesArg ?? (hasLocalizeStatusEnabled(collectionConfig) ? false : true))\n const isSavingDraft = Boolean(draft && hasDraftsEnabled(collectionConfig) && !publishAllLocales)\n\n if (isSavingDraft) {\n data._status = 'draft'\n }\n\n let duplicatedFromDocWithLocales: JsonObject = {}\n let duplicatedFromDoc: JsonObject = {}\n\n if (duplicateFromID) {\n const duplicateResult = await getDuplicateDocumentData({\n id: duplicateFromID,\n collectionConfig,\n draftArg: isSavingDraft,\n overrideAccess,\n req,\n selectedLocales,\n })\n\n duplicatedFromDoc = duplicateResult.duplicatedFromDoc\n duplicatedFromDocWithLocales = duplicateResult.duplicatedFromDocWithLocales\n }\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n if (!overrideAccess) {\n await executeAccess({ data, req }, collectionConfig.access.create)\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n draft: isSavingDraft,\n isDuplicating: Boolean(duplicateFromID),\n operation: 'create',\n originalDoc: duplicatedFromDoc,\n overwriteExistingFiles,\n req,\n throwOnMissingFile:\n !isSavingDraft && collection.config.upload.filesRequiredOnCreate !== false,\n })\n\n data = newFileData\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: duplicatedFromDoc,\n global: null,\n operation: 'create',\n overrideAccess: overrideAccess!,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collections\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: 'create',\n originalDoc: duplicatedFromDoc,\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: 'create',\n originalDoc: duplicatedFromDoc,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n const dataWithLocales = await beforeChange<JsonObject>({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: duplicatedFromDoc,\n docWithLocales: duplicatedFromDocWithLocales,\n global: null,\n operation: 'create',\n overrideAccess,\n req,\n skipValidation: isSavingDraft && !hasDraftValidationEnabled(collectionConfig),\n })\n\n // When locale='all' or when beforeChange doesn't convert the string (e.g. no locale hook ran),\n // the localized _status remains a plain string. Expand it to a per-locale object so MongoDB\n // doesn't reject the write. This covers both draft and non-draft operations.\n if (\n config.localization &&\n hasLocalizeStatusEnabled(collectionConfig) &&\n typeof dataWithLocales._status === 'string'\n ) {\n const statusStr = dataWithLocales._status\n dataWithLocales._status = {}\n for (const localeCode of config.localization.localeCodes) {\n ;(dataWithLocales._status as Record<string, unknown>)[localeCode] = statusStr\n }\n }\n\n if (config.localization && hasLocalizeStatusEnabled(collectionConfig) && publishAllLocales) {\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 dataWithLocales._status !== 'object' || dataWithLocales._status === null) {\n dataWithLocales._status = {}\n }\n\n for (const localeCode of accessibleLocaleCodes) {\n dataWithLocales._status[localeCode] = 'published'\n }\n }\n\n // Fill every locale of a localized slug so switching locales never lands on an empty slug. The\n // slug field hook only sees the active locale, so the rest are seeded here on create.\n if (config.localization) {\n await fillEmptyLocalizedSlugs({ collection: collectionConfig, data: dataWithLocales, req })\n }\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // Create\n // /////////////////////////////////////\n\n let doc\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'create',\n req,\n select: incomingSelect,\n }),\n })\n\n if (collectionConfig.auth && !collectionConfig.auth.disableLocalStrategy) {\n if (collectionConfig.auth.verify) {\n dataWithLocales._verified = Boolean(dataWithLocales._verified) || false\n dataWithLocales._verificationToken = crypto.randomBytes(20).toString('hex')\n }\n\n doc = await registerLocalStrategy({\n collection: collectionConfig,\n doc: dataWithLocales,\n password: data.password as string,\n payload: req.payload,\n req,\n })\n } else {\n doc = await payload.db.create({\n collection: collectionConfig.slug,\n data: dataWithLocales,\n req,\n })\n }\n\n const verificationToken = doc._verificationToken\n let resultWithLocales: Document = sanitizeInternalFields(doc)\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n resultWithLocales = { ...resultWithLocales, collection: collectionConfig.slug }\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n await saveVersion({\n id: resultWithLocales.id,\n autosave,\n collection: collectionConfig,\n docWithLocales: resultWithLocales,\n operation: 'create',\n payload,\n req,\n returning: false,\n })\n }\n\n // /////////////////////////////////////\n // Send verification email if applicable\n // /////////////////////////////////////\n\n if (collectionConfig.auth && collectionConfig.auth.verify && resultWithLocales.email) {\n await sendVerificationEmail({\n collection: { config: collectionConfig },\n config: payload.config,\n disableEmail: disableVerificationEmail!,\n email: payload.email,\n req,\n token: verificationToken,\n user: resultWithLocales,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n let result: Document = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: resultWithLocales,\n draft,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: 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: 'create',\n previousDoc: {},\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: 'create',\n overrideAccess,\n previousDoc: {},\n req: args.req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation<TSlug>({\n args,\n collection: collectionConfig,\n operation: 'create',\n overrideAccess: args.overrideAccess!,\n result,\n })\n\n await unlinkTempFiles({ collectionConfig, config, req })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["crypto","ensureUsernameOrEmail","executeAccess","sendVerificationEmail","registerLocalStrategy","getDuplicateDocumentData","fillEmptyLocalizedSlugs","afterChange","afterRead","beforeChange","beforeValidate","saveVersion","generateFileData","unlinkTempFiles","uploadFiles","commitTransaction","hasDraftsEnabled","hasDraftValidationEnabled","hasLocalizeStatusEnabled","initTransaction","killTransaction","resolveSelect","sanitizeInternalFields","sanitizeSelect","buildAfterOperation","buildBeforeOperation","createOperation","incomingArgs","args","shouldCommit","disableTransaction","req","authOptions","collection","config","auth","collectionSlug","slug","data","operation","overrideAccess","autosave","collectionConfig","depth","disableVerificationEmail","draft","duplicateFromID","overwriteExistingFiles","populate","publishAllLocales","publishAllLocalesArg","fallbackLocale","locale","payload","select","incomingSelect","selectedLocales","showHiddenFields","isSavingDraft","Boolean","_status","duplicatedFromDocWithLocales","duplicatedFromDoc","duplicateResult","id","draftArg","access","create","newFileData","files","filesToUpload","isDuplicating","originalDoc","throwOnMissingFile","upload","filesRequiredOnCreate","context","doc","global","hooks","length","hook","dataWithLocales","docWithLocales","skipValidation","localization","statusStr","localeCode","localeCodes","accessibleLocaleCodes","filterAvailableLocales","filteredLocales","locales","map","code","disableLocalStorage","fields","flattenedFields","disableLocalStrategy","verify","_verified","_verificationToken","randomBytes","toString","password","db","verificationToken","resultWithLocales","versions","returning","email","disableEmail","token","user","result","previousDoc","error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restoreVersion.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/restoreVersion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"restoreVersion.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/restoreVersion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAsBlD,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEnD,eAAO,MAAM,uBAAuB,GAClC,KAAK,SAAS,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,QAEzD,SAAS,KACd,OAAO,CAAC,KAAK,CA6Vf,CAAA"}
|
|
@@ -11,6 +11,7 @@ import { commitTransaction } from '../../utilities/commitTransaction.js';
|
|
|
11
11
|
import { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js';
|
|
12
12
|
import { hasDraftValidationEnabled } from '../../utilities/getVersionsConfig.js';
|
|
13
13
|
import { initTransaction } from '../../utilities/initTransaction.js';
|
|
14
|
+
import { isolateObjectProperty } from '../../utilities/isolateObjectProperty.js';
|
|
14
15
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
15
16
|
import { resolveSelect } from '../../utilities/resolveSelect.js';
|
|
16
17
|
import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
|
|
@@ -129,10 +130,12 @@ export const restoreVersionOperation = async (args)=>{
|
|
|
129
130
|
// beforeValidate - Fields
|
|
130
131
|
// /////////////////////////////////////
|
|
131
132
|
req.context.isRestoringVersion = true;
|
|
132
|
-
const reqWithValidationLocale =
|
|
133
|
-
fallbackLocale
|
|
134
|
-
locale
|
|
135
|
-
|
|
133
|
+
const reqWithValidationLocale = isolateObjectProperty(req, [
|
|
134
|
+
'fallbackLocale',
|
|
135
|
+
'locale'
|
|
136
|
+
]);
|
|
137
|
+
reqWithValidationLocale.fallbackLocale = null;
|
|
138
|
+
reqWithValidationLocale.locale = validationLocale;
|
|
136
139
|
let data = await beforeValidate({
|
|
137
140
|
id: parentDocID,
|
|
138
141
|
collection: collectionConfig,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/restoreVersion.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { JsonObject, PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { Collection, TypeWithID } from '../config/types.js'\nimport type { FindOptions } from './local/find.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } 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 { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js'\nimport { hasDraftValidationEnabled } from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n disableTransaction?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const restoreVersionOperation = async <\n TData extends JsonObject & TypeWithID = JsonObject & TypeWithID,\n>(\n args: Arguments,\n): Promise<TData> => {\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n draft: draftArg = false,\n overrideAccess = false,\n populate,\n req,\n req: { fallbackLocale, locale, payload },\n select: incomingSelect,\n showHiddenFields,\n } = args\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'restoreVersion',\n overrideAccess,\n })\n\n if (!id) {\n throw new APIError('Missing ID of version to restore.', httpStatus.BAD_REQUEST)\n }\n\n // /////////////////////////////////////\n // Retrieve original raw version\n // /////////////////////////////////////\n\n const { docs: versionDocs } = await req.payload.db.findVersions({\n collection: collectionConfig.slug,\n limit: 1,\n locale: 'all',\n pagination: false,\n req,\n where: { id: { equals: id } },\n })\n\n const [rawVersionToRestore] = versionDocs\n\n if (!rawVersionToRestore) {\n throw new NotFound(req.t)\n }\n\n const { parent: parentDocID, version: versionToRestoreWithLocales } = rawVersionToRestore\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id: parentDocID, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: 'all',\n req,\n where: combineQueries({ id: { equals: parentDocID } }, accessResults),\n }\n\n // Get the document from the non versioned collection\n const doc = await req.payload.db.findOne<TData>(findOneArgs)\n\n if (!doc && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!doc && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n if (collectionConfig.trash && doc?.deletedAt) {\n throw new APIError(\n `Cannot restore a version of a trashed document (ID: ${parentDocID}). Restore the document first.`,\n httpStatus.FORBIDDEN,\n )\n }\n\n // /////////////////////////////////////\n // fetch previousDoc\n // /////////////////////////////////////\n const prevDocWithLocales = await getLatestCollectionVersion({\n id: parentDocID,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n // originalDoc with hoisted localized data\n const validationLocale = payload.config.localization\n ? payload.config.localization.defaultLocale\n : locale!\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(prevDocWithLocales),\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: validationLocale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n // Use locale-hoisted version data for validation while preserving all locales in docWithLocales.\n const prevVersionDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(rawVersionToRestore.version),\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: validationLocale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n req.context.isRestoringVersion = true\n\n const reqWithValidationLocale = Object.assign(Object.create(req), req, {\n fallbackLocale: null,\n locale: validationLocale,\n })\n\n let data = await beforeValidate({\n id: parentDocID,\n collection: collectionConfig,\n context: req.context,\n data: deepCopyObjectSimple(prevVersionDoc),\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req: reqWithValidationLocale,\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: 'update',\n originalDoc,\n req: reqWithValidationLocale,\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: 'update',\n originalDoc,\n req: reqWithValidationLocale,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id: parentDocID,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id: parentDocID },\n doc: originalDoc,\n docWithLocales: versionToRestoreWithLocales,\n global: null,\n operation: 'update',\n overrideAccess,\n req: reqWithValidationLocale,\n skipValidation: draftArg && !hasDraftValidationEnabled(collectionConfig),\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'restoreVersion',\n req,\n select: incomingSelect,\n }),\n })\n\n // Ensure updatedAt date is always updated\n result.updatedAt = new Date().toISOString()\n // Ensure status respects restoreAsDraft arg\n result._status = draftArg ? 'draft' : result._status\n if (!draftArg) {\n result = await req.payload.db.updateOne({\n id: parentDocID,\n collection: collectionConfig.slug,\n data: result,\n req: reqWithValidationLocale,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Save restored doc as a new version\n // /////////////////////////////////////\n\n result = await saveVersion({\n id: parentDocID,\n autosave: false,\n collection: collectionConfig,\n docWithLocales: result,\n draft: draftArg,\n operation: 'restoreVersion',\n payload,\n req: reqWithValidationLocale,\n select,\n })\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: result,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields: 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: result,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: prevDocWithLocales,\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: result,\n doc: result,\n operation: 'update',\n overrideAccess,\n previousDoc: prevDocWithLocales,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'restoreVersion',\n overrideAccess,\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeValidate","commitTransaction","deepCopyObjectSimple","hasDraftValidationEnabled","initTransaction","killTransaction","resolveSelect","sanitizeSelect","getLatestCollectionVersion","saveVersion","buildAfterOperation","buildBeforeOperation","restoreVersionOperation","args","id","collection","config","collectionConfig","depth","draft","draftArg","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","shouldCommit","disableTransaction","operation","BAD_REQUEST","docs","versionDocs","db","findVersions","slug","limit","pagination","where","equals","rawVersionToRestore","t","parent","parentDocID","version","versionToRestoreWithLocales","accessResults","access","update","hasWherePolicy","findOneArgs","doc","findOne","trash","deletedAt","FORBIDDEN","prevDocWithLocales","query","validationLocale","localization","defaultLocale","originalDoc","context","global","prevVersionDoc","isRestoringVersion","reqWithValidationLocale","Object","assign","create","data","hooks","length","hook","result","docWithLocales","skipValidation","fields","flattenedFields","updatedAt","Date","toISOString","_status","updateOne","autosave","undefined","previousDoc","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/restoreVersion.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { JsonObject, PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { Collection, TypeWithID } from '../config/types.js'\nimport type { FindOptions } from './local/find.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } 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 { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js'\nimport { hasDraftValidationEnabled } from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { isolateObjectProperty } from '../../utilities/isolateObjectProperty.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n disableTransaction?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const restoreVersionOperation = async <\n TData extends JsonObject & TypeWithID = JsonObject & TypeWithID,\n>(\n args: Arguments,\n): Promise<TData> => {\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n draft: draftArg = false,\n overrideAccess = false,\n populate,\n req,\n req: { fallbackLocale, locale, payload },\n select: incomingSelect,\n showHiddenFields,\n } = args\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'restoreVersion',\n overrideAccess,\n })\n\n if (!id) {\n throw new APIError('Missing ID of version to restore.', httpStatus.BAD_REQUEST)\n }\n\n // /////////////////////////////////////\n // Retrieve original raw version\n // /////////////////////////////////////\n\n const { docs: versionDocs } = await req.payload.db.findVersions({\n collection: collectionConfig.slug,\n limit: 1,\n locale: 'all',\n pagination: false,\n req,\n where: { id: { equals: id } },\n })\n\n const [rawVersionToRestore] = versionDocs\n\n if (!rawVersionToRestore) {\n throw new NotFound(req.t)\n }\n\n const { parent: parentDocID, version: versionToRestoreWithLocales } = rawVersionToRestore\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id: parentDocID, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: 'all',\n req,\n where: combineQueries({ id: { equals: parentDocID } }, accessResults),\n }\n\n // Get the document from the non versioned collection\n const doc = await req.payload.db.findOne<TData>(findOneArgs)\n\n if (!doc && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!doc && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n if (collectionConfig.trash && doc?.deletedAt) {\n throw new APIError(\n `Cannot restore a version of a trashed document (ID: ${parentDocID}). Restore the document first.`,\n httpStatus.FORBIDDEN,\n )\n }\n\n // /////////////////////////////////////\n // fetch previousDoc\n // /////////////////////////////////////\n const prevDocWithLocales = await getLatestCollectionVersion({\n id: parentDocID,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n // originalDoc with hoisted localized data\n const validationLocale = payload.config.localization\n ? payload.config.localization.defaultLocale\n : locale!\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(prevDocWithLocales),\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: validationLocale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n // Use locale-hoisted version data for validation while preserving all locales in docWithLocales.\n const prevVersionDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(rawVersionToRestore.version),\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale: validationLocale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n req.context.isRestoringVersion = true\n\n const reqWithValidationLocale = isolateObjectProperty(req, ['fallbackLocale', 'locale'])\n reqWithValidationLocale.fallbackLocale = null\n reqWithValidationLocale.locale = validationLocale\n\n let data = await beforeValidate({\n id: parentDocID,\n collection: collectionConfig,\n context: req.context,\n data: deepCopyObjectSimple(prevVersionDoc),\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req: reqWithValidationLocale,\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: 'update',\n originalDoc,\n req: reqWithValidationLocale,\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: 'update',\n originalDoc,\n req: reqWithValidationLocale,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id: parentDocID,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id: parentDocID },\n doc: originalDoc,\n docWithLocales: versionToRestoreWithLocales,\n global: null,\n operation: 'update',\n overrideAccess,\n req: reqWithValidationLocale,\n skipValidation: draftArg && !hasDraftValidationEnabled(collectionConfig),\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'restoreVersion',\n req,\n select: incomingSelect,\n }),\n })\n\n // Ensure updatedAt date is always updated\n result.updatedAt = new Date().toISOString()\n // Ensure status respects restoreAsDraft arg\n result._status = draftArg ? 'draft' : result._status\n if (!draftArg) {\n result = await req.payload.db.updateOne({\n id: parentDocID,\n collection: collectionConfig.slug,\n data: result,\n req: reqWithValidationLocale,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Save restored doc as a new version\n // /////////////////////////////////////\n\n result = await saveVersion({\n id: parentDocID,\n autosave: false,\n collection: collectionConfig,\n docWithLocales: result,\n draft: draftArg,\n operation: 'restoreVersion',\n payload,\n req: reqWithValidationLocale,\n select,\n })\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: result,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields: 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: result,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: prevDocWithLocales,\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: result,\n doc: result,\n operation: 'update',\n overrideAccess,\n previousDoc: prevDocWithLocales,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'restoreVersion',\n overrideAccess,\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeValidate","commitTransaction","deepCopyObjectSimple","hasDraftValidationEnabled","initTransaction","isolateObjectProperty","killTransaction","resolveSelect","sanitizeSelect","getLatestCollectionVersion","saveVersion","buildAfterOperation","buildBeforeOperation","restoreVersionOperation","args","id","collection","config","collectionConfig","depth","draft","draftArg","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","shouldCommit","disableTransaction","operation","BAD_REQUEST","docs","versionDocs","db","findVersions","slug","limit","pagination","where","equals","rawVersionToRestore","t","parent","parentDocID","version","versionToRestoreWithLocales","accessResults","access","update","hasWherePolicy","findOneArgs","doc","findOne","trash","deletedAt","FORBIDDEN","prevDocWithLocales","query","validationLocale","localization","defaultLocale","originalDoc","context","global","prevVersionDoc","isRestoringVersion","reqWithValidationLocale","data","hooks","length","hook","result","docWithLocales","skipValidation","fields","flattenedFields","updatedAt","Date","toISOString","_status","updateOne","autosave","undefined","previousDoc","error"],"mappings":"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"}
|
|
@@ -56,6 +56,7 @@ export const updateByIDOperation = async (incomingArgs)=>{
|
|
|
56
56
|
if (isTrashAttempt && !overrideAccess) {
|
|
57
57
|
// Pass data so access function can check data.deletedAt to know it's a trash attempt
|
|
58
58
|
const deleteAccessResult = await executeAccess({
|
|
59
|
+
id,
|
|
59
60
|
data,
|
|
60
61
|
req
|
|
61
62
|
}, collectionConfig.access.delete);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/updateByID.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport { status as httpStatus } from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { type CollectionSlug, deepCopyObjectSimple, type FindOptions } from '../../index.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nimport { updateDocument } from './utilities/update.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n publishAllLocales?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n unpublishAllLocales?: boolean\n} & Pick<FindOptions<TSlug, SelectType>, 'select'>\n\nexport const updateByIDOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'update',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n id,\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n populate,\n publishAllLocales,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n unpublishAllLocales,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST)\n }\n\n const { data } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, data, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResults)\n\n const isTrashAttempt =\n collectionConfig.trash &&\n typeof data === 'object' &&\n data !== null &&\n 'deletedAt' in data &&\n data.deletedAt != null\n\n if (isTrashAttempt && !overrideAccess) {\n // Pass data so access function can check data.deletedAt to know it's a trash attempt\n const deleteAccessResult = await executeAccess({ data, req }, collectionConfig.access.delete)\n fullWhere = combineQueries(fullWhere, deleteAccessResult)\n }\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: locale!,\n req,\n where: fullWhere,\n }\n\n const docWithLocales = await getLatestCollectionVersion<\n RequiredDataFromCollectionSlug<TSlug> & TypeWithID\n >({\n id,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n if (!docWithLocales && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!docWithLocales && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n if (!docWithLocales) {\n throw new NotFound(req.t)\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'update',\n req,\n select: incomingSelect,\n }),\n })\n\n // ///////////////////////////////////////////////\n // Update document, runs all document level hooks\n // ///////////////////////////////////////////////\n\n let result = await updateDocument<TSlug, TSelect>({\n id,\n autosave,\n collectionConfig,\n config,\n data: deepCopyObjectSimple(newFileData),\n depth: depth!,\n docWithLocales,\n draftArg,\n fallbackLocale: fallbackLocale!,\n filesToUpload,\n locale: locale!,\n overrideAccess: overrideAccess!,\n overrideLock: overrideLock!,\n payload,\n populate,\n publishAllLocales,\n req,\n select: select!,\n showHiddenFields: showHiddenFields!,\n unpublishAllLocales,\n })\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\n }\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = (await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'updateByID',\n overrideAccess,\n result,\n })) as TransformCollectionWithSelect<TSlug, TSelect>\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","deepCopyObjectSimple","generateFileData","unlinkTempFiles","appendNonTrashedFilter","commitTransaction","initTransaction","killTransaction","resolveSelect","sanitizeSelect","getLatestCollectionVersion","buildAfterOperation","buildBeforeOperation","updateDocument","updateByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","operation","overrideAccess","id","autosave","collectionConfig","depth","draft","draftArg","overrideLock","overwriteExistingFiles","populate","publishAllLocales","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","trash","unpublishAllLocales","BAD_REQUEST","data","accessResults","access","update","hasWherePolicy","where","equals","fullWhere","isTrashAttempt","deletedAt","deleteAccessResult","delete","enableTrash","findOneArgs","slug","docWithLocales","query","t","newFileData","files","filesToUpload","throwOnMissingFile","fields","flattenedFields","result","auth","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/updateByID.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport { status as httpStatus } from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n TypeWithID,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { type CollectionSlug, deepCopyObjectSimple, type FindOptions } from '../../index.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nimport { updateDocument } from './utilities/update.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n publishAllLocales?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n unpublishAllLocales?: boolean\n} & Pick<FindOptions<TSlug, SelectType>, 'select'>\n\nexport const updateByIDOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'update',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n id,\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n populate,\n publishAllLocales,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n unpublishAllLocales,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST)\n }\n\n const { data } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, data, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const where = { id: { equals: id } }\n\n let fullWhere = combineQueries(where, accessResults)\n\n const isTrashAttempt =\n collectionConfig.trash &&\n typeof data === 'object' &&\n data !== null &&\n 'deletedAt' in data &&\n data.deletedAt != null\n\n if (isTrashAttempt && !overrideAccess) {\n // Pass data so access function can check data.deletedAt to know it's a trash attempt\n const deleteAccessResult = await executeAccess({ id, data, req }, collectionConfig.access.delete)\n fullWhere = combineQueries(fullWhere, deleteAccessResult)\n }\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale: locale!,\n req,\n where: fullWhere,\n }\n\n const docWithLocales = await getLatestCollectionVersion<\n RequiredDataFromCollectionSlug<TSlug> & TypeWithID\n >({\n id,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n if (!docWithLocales && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!docWithLocales && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n if (!docWithLocales) {\n throw new NotFound(req.t)\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'update',\n req,\n select: incomingSelect,\n }),\n })\n\n // ///////////////////////////////////////////////\n // Update document, runs all document level hooks\n // ///////////////////////////////////////////////\n\n let result = await updateDocument<TSlug, TSelect>({\n id,\n autosave,\n collectionConfig,\n config,\n data: deepCopyObjectSimple(newFileData),\n depth: depth!,\n docWithLocales,\n draftArg,\n fallbackLocale: fallbackLocale!,\n filesToUpload,\n locale: locale!,\n overrideAccess: overrideAccess!,\n overrideLock: overrideLock!,\n payload,\n populate,\n publishAllLocales,\n req,\n select: select!,\n showHiddenFields: showHiddenFields!,\n unpublishAllLocales,\n })\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\n }\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = (await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'updateByID',\n overrideAccess,\n result,\n })) as TransformCollectionWithSelect<TSlug, TSelect>\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["status","httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","deepCopyObjectSimple","generateFileData","unlinkTempFiles","appendNonTrashedFilter","commitTransaction","initTransaction","killTransaction","resolveSelect","sanitizeSelect","getLatestCollectionVersion","buildAfterOperation","buildBeforeOperation","updateDocument","updateByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","operation","overrideAccess","id","autosave","collectionConfig","depth","draft","draftArg","overrideLock","overwriteExistingFiles","populate","publishAllLocales","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","trash","unpublishAllLocales","BAD_REQUEST","data","accessResults","access","update","hasWherePolicy","where","equals","fullWhere","isTrashAttempt","deletedAt","deleteAccessResult","delete","enableTrash","findOneArgs","slug","docWithLocales","query","t","newFileData","files","filesToUpload","throwOnMissingFile","fields","flattenedFields","result","auth","error"],"mappings":"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"}
|
package/dist/config/build.js
CHANGED
package/dist/config/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/build.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from './types.js'\n\nimport { sanitizeConfig } from './sanitize.js'\n\n/**\n * @description Builds and validates Payload configuration\n * @param config Payload Config\n * @returns Built and sanitized Payload Config\n */\nexport async function buildConfig(config: Config): Promise<SanitizedConfig> {\n if (Array.isArray(config.plugins)) {\n const sorted = [...config.plugins].sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n\n for (const plugin of sorted) {\n config = await plugin(config)\n }\n }\n\n if (Array.isArray(config.storage)) {\n for (const adapter of config.storage) {\n if (typeof adapter?.init !== 'function') {\n throw new Error(\n `storage contains an invalid entry: expected an object with an \\`init\\` function. ` +\n `Ensure you are passing the result of a storage adapter factory (e.g. s3Storage({…})) ` +\n `to \\`storage\\`, not to \\`plugins\\`.`,\n )\n }\n config = await adapter.init(config)\n }\n }\n\n return
|
|
1
|
+
{"version":3,"sources":["../../src/config/build.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from './types.js'\n\nimport { sanitizeConfig } from './sanitize.js'\n\n/**\n * @description Builds and validates Payload configuration\n * @param config Payload Config\n * @returns Built and sanitized Payload Config\n */\nexport async function buildConfig(config: Config): Promise<SanitizedConfig> {\n if (Array.isArray(config.plugins)) {\n const sorted = [...config.plugins].sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n\n for (const plugin of sorted) {\n config = await plugin(config)\n }\n }\n\n if (Array.isArray(config.storage)) {\n for (const adapter of config.storage) {\n if (typeof adapter?.init !== 'function') {\n throw new Error(\n `storage contains an invalid entry: expected an object with an \\`init\\` function. ` +\n `Ensure you are passing the result of a storage adapter factory (e.g. s3Storage({…})) ` +\n `to \\`storage\\`, not to \\`plugins\\`.`,\n )\n }\n config = await adapter.init(config)\n }\n }\n\n return sanitizeConfig(config)\n}\n"],"names":["sanitizeConfig","buildConfig","config","Array","isArray","plugins","sorted","sort","a","b","order","plugin","storage","adapter","init","Error"],"mappings":"AAEA,SAASA,cAAc,QAAQ,gBAAe;AAE9C;;;;CAIC,GACD,OAAO,eAAeC,YAAYC,MAAc;IAC9C,IAAIC,MAAMC,OAAO,CAACF,OAAOG,OAAO,GAAG;QACjC,MAAMC,SAAS;eAAIJ,OAAOG,OAAO;SAAC,CAACE,IAAI,CAAC,CAACC,GAAGC,IAAM,AAACD,CAAAA,EAAEE,KAAK,IAAI,CAAA,IAAMD,CAAAA,EAAEC,KAAK,IAAI,CAAA;QAE/E,KAAK,MAAMC,UAAUL,OAAQ;YAC3BJ,SAAS,MAAMS,OAAOT;QACxB;IACF;IAEA,IAAIC,MAAMC,OAAO,CAACF,OAAOU,OAAO,GAAG;QACjC,KAAK,MAAMC,WAAWX,OAAOU,OAAO,CAAE;YACpC,IAAI,OAAOC,SAASC,SAAS,YAAY;gBACvC,MAAM,IAAIC,MACR,CAAC,iFAAiF,CAAC,GACjF,CAAC,qFAAqF,CAAC,GACvF,CAAC,mCAAmC,CAAC;YAE3C;YACAb,SAAS,MAAMW,QAAQC,IAAI,CAACZ;QAC9B;IACF;IAEA,OAAOF,eAAeE;AACxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAKxC,eAAO,MAAM,mBAAmB,WAAY,MAAM,KAAG,MA+FpD,CAAA"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -37,7 +37,7 @@ export const addDefaultsToConfig = (config)=>{
|
|
|
37
37
|
config.cors = config.cors ?? [];
|
|
38
38
|
config.csrf = config.csrf ?? [];
|
|
39
39
|
config.custom = config.custom ?? {};
|
|
40
|
-
config.defaultDepth = config.defaultDepth ??
|
|
40
|
+
config.defaultDepth = config.defaultDepth ?? 1;
|
|
41
41
|
config.defaultMaxTextLength = config.defaultMaxTextLength ?? 40000;
|
|
42
42
|
config.endpoints = config.endpoints ?? [];
|
|
43
43
|
config.globals = config.globals ?? [];
|
|
@@ -52,13 +52,16 @@ export const addDefaultsToConfig = (config)=>{
|
|
|
52
52
|
config.i18n = config.i18n ?? {};
|
|
53
53
|
config.jobs = {
|
|
54
54
|
deleteJobOnComplete: true,
|
|
55
|
-
depth: 0,
|
|
56
55
|
...config.jobs || {},
|
|
57
56
|
access: {
|
|
58
57
|
cancel: defaultAccess,
|
|
59
58
|
queue: defaultAccess,
|
|
60
59
|
run: defaultAccess,
|
|
61
60
|
...config.jobs?.access || {}
|
|
61
|
+
},
|
|
62
|
+
processingLease: {
|
|
63
|
+
duration: config.jobs?.processingLease?.duration ?? 20 * 60 * 1000,
|
|
64
|
+
safetyBuffer: config.jobs?.processingLease?.safetyBuffer ?? 30 * 1000
|
|
62
65
|
}
|
|
63
66
|
};
|
|
64
67
|
config.localization = config.localization ?? false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/defaults.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"sources":["../../src/config/defaults.ts"],"sourcesContent":["import type { Config } from './types.js'\n\nimport { defaultAccess } from '../auth/defaultAccess.js'\nimport { databaseKVAdapter } from '../kv/adapters/DatabaseKVAdapter.js'\n\nexport const addDefaultsToConfig = (config: Config): Config => {\n config.admin = {\n avatar: 'gravatar',\n components: {},\n custom: {},\n dateFormat: 'MMMM do yyyy, h:mm a',\n dependencies: {},\n theme: 'all',\n ...(config.admin || {}),\n importMap: {\n baseDir: `${typeof process?.cwd === 'function' ? process.cwd() : ''}`,\n ...(config?.admin?.importMap || {}),\n },\n meta: {\n defaultOGImageType: 'dynamic',\n robots: 'noindex, nofollow',\n titleSuffix: '- Payload',\n ...(config?.admin?.meta || {}),\n },\n routes: {\n account: '/account',\n createFirstUser: '/create-first-user',\n forgot: '/forgot',\n inactivity: '/logout-inactivity',\n login: '/login',\n logout: '/logout',\n reset: '/reset',\n unauthorized: '/unauthorized',\n ...(config?.admin?.routes || {}),\n },\n }\n\n config.bin = config.bin ?? []\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 config.graphQL = {\n disableIntrospectionInProduction: true,\n disablePlaygroundInProduction: true,\n maxComplexity: 1000,\n schemaOutputFile: `${typeof process?.cwd === 'function' ? process.cwd() : ''}/schema.graphql`,\n ...(config.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 config.routes = {\n admin: '/admin',\n api: '/api',\n graphQL: '/graphql',\n graphQLPlayground: '/graphql-playground',\n ...(config.routes || {}),\n }\n config.serverURL = config.serverURL ?? ''\n config.telemetry = config.telemetry ?? true\n config.typescript = {\n autoGenerate: true,\n outputFile: `${typeof process?.cwd === 'function' ? process.cwd() : ''}/payload-types.ts`,\n ...(config.typescript || {}),\n }\n config.upload = config.upload ?? {}\n\n config.auth = {\n jwtOrder: ['JWT', 'Bearer', 'cookie'],\n ...(config.auth || {}),\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","addDefaultsToConfig","config","admin","avatar","components","custom","dateFormat","dependencies","theme","importMap","baseDir","process","cwd","meta","defaultOGImageType","robots","titleSuffix","routes","account","createFirstUser","forgot","inactivity","login","logout","reset","unauthorized","bin","collections","cookiePrefix","cors","csrf","defaultDepth","defaultMaxTextLength","endpoints","globals","graphQL","disableIntrospectionInProduction","disablePlaygroundInProduction","maxComplexity","schemaOutputFile","hooks","i18n","jobs","deleteJobOnComplete","access","cancel","queue","run","processingLease","duration","safetyBuffer","localization","maxDepth","api","graphQLPlayground","serverURL","telemetry","typescript","autoGenerate","outputFile","upload","auth","jwtOrder","kv","kvCollection","push"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CollectionConfig } from '../../collections/config/types.js';
|
|
2
2
|
import type { Config } from '../../config/types.js';
|
|
3
3
|
import type { SanitizedConfig } from '../types.js';
|
|
4
|
-
export declare const addOrderableFieldsAndHook: (collection: CollectionConfig, config: Config, orderableFieldNames: string[], joinFieldPathsByCollection?: Map<string, Map<string, string>>) =>
|
|
4
|
+
export declare const addOrderableFieldsAndHook: (collection: CollectionConfig, config: Config, orderableFieldNames: string[], joinFieldPathsByCollection?: Map<string, Map<string, string>>) => void;
|
|
5
5
|
/**
|
|
6
6
|
* The body of the reorder endpoint.
|
|
7
7
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/orderable/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAC3F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EAA4B,eAAe,EAAE,MAAM,aAAa,CAAA;AAgB5E,eAAO,MAAM,yBAAyB,eACxB,gBAAgB,UACpB,MAAM,uBACO,MAAM,EAAE,+BACA,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/orderable/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAC3F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EAA4B,eAAe,EAAE,MAAM,aAAa,CAAA;AAgB5E,eAAO,MAAM,yBAAyB,eACxB,gBAAgB,UACpB,MAAM,uBACO,MAAM,EAAE,+BACA,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAC5D,IAsFF,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,YAAY,EAAE,SAAS,GAAG,MAAM,CAAA;IAChC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;CACF,CAAA;AAED,eAAO,MAAM,oBAAoB,WACvB,eAAe,8BACK,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,SAiN7D,CAAA"}
|
|
@@ -12,7 +12,7 @@ import { generateKeyBetween, generateNKeysBetween } from './fractional-indexing.
|
|
|
12
12
|
import { getJoinScopeContext } from './utils/getJoinScopeContext.js';
|
|
13
13
|
import { getJoinScopeWhereFromDocData } from './utils/getJoinScopeWhereFromDocData.js';
|
|
14
14
|
import { resolvePendingTargetKey } from './utils/resolvePendingTargetKey.js';
|
|
15
|
-
export const addOrderableFieldsAndHook =
|
|
15
|
+
export const addOrderableFieldsAndHook = (collection, config, orderableFieldNames, joinFieldPathsByCollection)=>{
|
|
16
16
|
// 1. Add fields
|
|
17
17
|
for (const orderableFieldName of orderableFieldNames){
|
|
18
18
|
const orderField = {
|
|
@@ -33,7 +33,7 @@ export const addOrderableFieldsAndHook = async (collection, config, orderableFie
|
|
|
33
33
|
index: true
|
|
34
34
|
};
|
|
35
35
|
// Sanitize the field using the standard sanitization logic
|
|
36
|
-
|
|
36
|
+
sanitizeField({
|
|
37
37
|
collectionConfig: collection,
|
|
38
38
|
config,
|
|
39
39
|
existingFieldNames: new Set(),
|