payload 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ee5d8bd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/adapters/router.d.ts +1 -1
- package/dist/admin/adapters/router.d.ts.map +1 -1
- package/dist/admin/adapters/router.js.map +1 -1
- package/dist/admin/forms/Diff.d.ts +0 -4
- package/dist/admin/forms/Diff.d.ts.map +1 -1
- package/dist/admin/forms/Diff.js.map +1 -1
- package/dist/admin/forms/Form.d.ts +0 -2
- package/dist/admin/forms/Form.d.ts.map +1 -1
- package/dist/admin/forms/Form.js.map +1 -1
- package/dist/admin/initAdminContext.d.ts.map +1 -1
- package/dist/admin/initAdminContext.js +0 -10
- package/dist/admin/initAdminContext.js.map +1 -1
- package/dist/auth/createAuthToken.d.ts +26 -0
- package/dist/auth/createAuthToken.d.ts.map +1 -0
- package/dist/auth/createAuthToken.js +39 -0
- package/dist/auth/createAuthToken.js.map +1 -0
- package/dist/auth/endpoints/refresh.d.ts.map +1 -1
- package/dist/auth/endpoints/refresh.js +2 -1
- package/dist/auth/endpoints/refresh.js.map +1 -1
- package/dist/auth/getFieldsToSign.js.map +1 -1
- package/dist/auth/loginWithCookie.d.ts.map +1 -1
- package/dist/auth/loginWithCookie.js +1 -0
- package/dist/auth/loginWithCookie.js.map +1 -1
- package/dist/auth/operations/local/login.d.ts.map +1 -1
- package/dist/auth/operations/local/login.js +1 -0
- package/dist/auth/operations/local/login.js.map +1 -1
- package/dist/auth/operations/login.d.ts +2 -0
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/login.js +6 -19
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/operations/refresh.d.ts +8 -0
- package/dist/auth/operations/refresh.d.ts.map +1 -1
- package/dist/auth/operations/refresh.js +50 -19
- package/dist/auth/operations/refresh.js.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.js +54 -20
- package/dist/auth/operations/resetPassword.js.map +1 -1
- package/dist/auth/refreshAuthToken.d.ts +32 -0
- package/dist/auth/refreshAuthToken.d.ts.map +1 -0
- package/dist/auth/refreshAuthToken.js +113 -0
- package/dist/auth/refreshAuthToken.js.map +1 -0
- package/dist/auth/serverFunctions/cookies.js.map +1 -1
- package/dist/auth/serverFunctions/login.js.map +1 -1
- package/dist/auth/sessions.d.ts +9 -2
- package/dist/auth/sessions.d.ts.map +1 -1
- package/dist/auth/sessions.js +6 -5
- package/dist/auth/sessions.js.map +1 -1
- package/dist/auth/types.d.ts +25 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/cli/commands/data/utilities.d.ts +1 -1
- package/dist/cli/commands/data/utilities.d.ts.map +1 -1
- package/dist/cli/commands/data/utilities.js.map +1 -1
- package/dist/cli/defineCLICommand.js +1 -1
- package/dist/cli/defineCLICommand.js.map +1 -1
- package/dist/collections/config/client.d.ts +1 -1
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +0 -1
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/defaults.d.ts +2 -0
- package/dist/collections/config/defaults.d.ts.map +1 -1
- package/dist/collections/config/defaults.js +4 -0
- package/dist/collections/config/defaults.js.map +1 -1
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +3 -0
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/sanitizeCompoundIndexes.d.ts.map +1 -1
- package/dist/collections/config/sanitizeCompoundIndexes.js +0 -9
- package/dist/collections/config/sanitizeCompoundIndexes.js.map +1 -1
- package/dist/collections/config/types.d.ts +4 -21
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/dataloader.d.ts +1 -10
- package/dist/collections/dataloader.d.ts.map +1 -1
- package/dist/collections/dataloader.js +6 -14
- package/dist/collections/dataloader.js.map +1 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +0 -13
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/delete.d.ts.map +1 -1
- package/dist/collections/operations/delete.js +121 -638
- package/dist/collections/operations/delete.js.map +1 -1
- package/dist/collections/operations/deleteByID.d.ts.map +1 -1
- package/dist/collections/operations/deleteByID.js +32 -238
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/findByID.d.ts.map +1 -1
- package/dist/collections/operations/findByID.js +0 -6
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/findDistinct.js +6 -7
- package/dist/collections/operations/findDistinct.js.map +1 -1
- package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.js +7 -0
- package/dist/collections/operations/findVersionByID.js.map +1 -1
- package/dist/collections/operations/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/findVersions.js +5 -0
- package/dist/collections/operations/findVersions.js.map +1 -1
- package/dist/collections/operations/local/count.d.ts +4 -9
- package/dist/collections/operations/local/count.d.ts.map +1 -1
- package/dist/collections/operations/local/count.js.map +1 -1
- package/dist/collections/operations/local/countVersions.d.ts +0 -4
- package/dist/collections/operations/local/countVersions.d.ts.map +1 -1
- package/dist/collections/operations/local/countVersions.js.map +1 -1
- package/dist/collections/operations/local/create.d.ts +4 -9
- package/dist/collections/operations/local/create.d.ts.map +1 -1
- package/dist/collections/operations/local/create.js.map +1 -1
- package/dist/collections/operations/local/delete.d.ts +4 -9
- package/dist/collections/operations/local/delete.d.ts.map +1 -1
- package/dist/collections/operations/local/delete.js.map +1 -1
- package/dist/collections/operations/local/duplicate.d.ts +0 -5
- package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
- package/dist/collections/operations/local/duplicate.js.map +1 -1
- package/dist/collections/operations/local/find.d.ts +4 -9
- package/dist/collections/operations/local/find.d.ts.map +1 -1
- package/dist/collections/operations/local/find.js.map +1 -1
- package/dist/collections/operations/local/findByID.d.ts +4 -9
- package/dist/collections/operations/local/findByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findByID.js.map +1 -1
- package/dist/collections/operations/local/findDistinct.d.ts +0 -5
- package/dist/collections/operations/local/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/local/findDistinct.js.map +1 -1
- package/dist/collections/operations/local/findVersionByID.d.ts +0 -5
- package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersionByID.js.map +1 -1
- package/dist/collections/operations/local/findVersions.d.ts +0 -5
- package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersions.js.map +1 -1
- package/dist/collections/operations/local/restoreVersion.d.ts +0 -5
- package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/local/restoreVersion.js.map +1 -1
- package/dist/collections/operations/local/update.d.ts +4 -9
- package/dist/collections/operations/local/update.d.ts.map +1 -1
- package/dist/collections/operations/local/update.js.map +1 -1
- package/dist/collections/operations/renameFile.js +1 -1
- package/dist/collections/operations/renameFile.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/restoreVersion.js +76 -157
- package/dist/collections/operations/restoreVersion.js.map +1 -1
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +171 -357
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts +0 -15
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +60 -265
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/buildBeforeOperation.d.ts.map +1 -1
- package/dist/collections/operations/utilities/buildBeforeOperation.js +0 -7
- package/dist/collections/operations/utilities/buildBeforeOperation.js.map +1 -1
- package/dist/collections/operations/utilities/update.d.ts +1 -14
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +20 -92
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/collections/operations/validate.js +4 -4
- package/dist/collections/operations/validate.js.map +1 -1
- package/dist/config/client.d.ts +1 -3
- package/dist/config/client.d.ts.map +1 -1
- package/dist/config/client.js +1 -9
- package/dist/config/client.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +1 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/definePlugin.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +2 -40
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +13 -21
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/defaultCopy.d.ts.map +1 -1
- package/dist/database/defaultCopy.js +0 -1
- package/dist/database/defaultCopy.js.map +1 -1
- package/dist/database/types.d.ts +4 -75
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js.map +1 -1
- package/dist/exports/build-config.d.ts +9 -0
- package/dist/exports/build-config.d.ts.map +1 -0
- package/dist/exports/build-config.js +38 -0
- package/dist/exports/build-config.js.map +1 -0
- package/dist/exports/shared.d.ts +0 -2
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +0 -2
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/baseFields/authorship/index.d.ts +1 -2
- package/dist/fields/baseFields/authorship/index.d.ts.map +1 -1
- package/dist/fields/baseFields/authorship/index.js +0 -12
- package/dist/fields/baseFields/authorship/index.js.map +1 -1
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/config/reservedFieldNames.d.ts.map +1 -1
- package/dist/fields/config/reservedFieldNames.js.map +1 -1
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/afterChange/promise.js.map +1 -1
- package/dist/fields/hooks/afterRead/index.d.ts +0 -8
- package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/index.js +2 -6
- package/dist/fields/hooks/afterRead/index.js.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts +1 -3
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.js +17 -41
- package/dist/fields/hooks/afterRead/promise.js.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +0 -2
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts +1 -3
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.js +2 -4
- package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
- package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.js +0 -3
- package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts +14 -0
- package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts.map +1 -0
- package/dist/fields/hooks/beforeChange/flattenValidationData.js +36 -0
- package/dist/fields/hooks/beforeChange/flattenValidationData.js.map +1 -0
- package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +96 -22
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js +2 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.js +0 -8
- package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +4 -1
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/config/types.d.ts +2 -6
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js.map +1 -1
- package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
- package/dist/globals/operations/countGlobalVersions.js +0 -7
- package/dist/globals/operations/countGlobalVersions.js.map +1 -1
- package/dist/globals/operations/findOne.d.ts.map +1 -1
- package/dist/globals/operations/findOne.js +0 -7
- package/dist/globals/operations/findOne.js.map +1 -1
- package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/findVersionByID.js +6 -6
- package/dist/globals/operations/findVersionByID.js.map +1 -1
- package/dist/globals/operations/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/findVersions.js +4 -6
- package/dist/globals/operations/findVersions.js.map +1 -1
- package/dist/globals/operations/local/countVersions.d.ts +0 -5
- package/dist/globals/operations/local/countVersions.d.ts.map +1 -1
- package/dist/globals/operations/local/countVersions.js.map +1 -1
- package/dist/globals/operations/local/findOne.d.ts +0 -5
- package/dist/globals/operations/local/findOne.d.ts.map +1 -1
- package/dist/globals/operations/local/findOne.js.map +1 -1
- package/dist/globals/operations/local/findVersionByID.d.ts +0 -5
- package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/local/findVersionByID.js.map +1 -1
- package/dist/globals/operations/local/findVersions.d.ts +0 -5
- package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/local/findVersions.js.map +1 -1
- package/dist/globals/operations/local/restoreVersion.d.ts +0 -5
- package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/local/restoreVersion.js.map +1 -1
- package/dist/globals/operations/local/update.d.ts +0 -5
- package/dist/globals/operations/local/update.d.ts.map +1 -1
- package/dist/globals/operations/local/update.js +18 -61
- package/dist/globals/operations/local/update.js.map +1 -1
- package/dist/globals/operations/restoreVersion.d.ts +2 -3
- package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/restoreVersion.js +24 -61
- package/dist/globals/operations/restoreVersion.js.map +1 -1
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +8 -86
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/globals/operations/validate.js +1 -1
- package/dist/globals/operations/validate.js.map +1 -1
- package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -1
- package/dist/hierarchy/addHierarchyToCollection.js +32 -21
- package/dist/hierarchy/addHierarchyToCollection.js.map +1 -1
- package/dist/hierarchy/createFolderField.js.map +1 -1
- package/dist/hierarchy/getInitialTreeData.d.ts +1 -3
- package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -1
- package/dist/hierarchy/getInitialTreeData.js +1 -4
- package/dist/hierarchy/getInitialTreeData.js.map +1 -1
- package/dist/hierarchy/resolveHierarchyCollections.js +9 -3
- package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -1
- package/dist/hierarchy/utils/computePaths.d.ts.map +1 -1
- package/dist/hierarchy/utils/computePaths.js.map +1 -1
- package/dist/index.bundled.d.ts +4336 -5501
- package/dist/index.d.ts +27 -51
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -37
- package/dist/index.js.map +1 -1
- package/dist/llm-instructions/getInstructionsCollection.d.ts.map +1 -1
- package/dist/llm-instructions/getInstructionsCollection.js +2 -0
- package/dist/llm-instructions/getInstructionsCollection.js.map +1 -1
- package/dist/preferences/keys.d.ts +4 -11
- package/dist/preferences/keys.d.ts.map +1 -1
- package/dist/preferences/keys.js +3 -10
- package/dist/preferences/keys.js.map +1 -1
- package/dist/preferences/types.d.ts +0 -19
- package/dist/preferences/types.d.ts.map +1 -1
- package/dist/preferences/types.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
- package/dist/types/index.d.ts +0 -13
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
- package/dist/uploads/deleteAssociatedFiles.js +29 -108
- package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
- package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFile.js +0 -5
- package/dist/uploads/endpoints/getFile.js.map +1 -1
- package/dist/uploads/fileExists.d.ts.map +1 -1
- package/dist/uploads/fileExists.js +2 -5
- package/dist/uploads/fileExists.js.map +1 -1
- package/dist/uploads/fileVersioning/archive.d.ts.map +1 -1
- package/dist/uploads/fileVersioning/archive.js +1 -15
- package/dist/uploads/fileVersioning/archive.js.map +1 -1
- package/dist/uploads/fileVersioning/cleanup.d.ts +0 -7
- package/dist/uploads/fileVersioning/cleanup.d.ts.map +1 -1
- package/dist/uploads/fileVersioning/cleanup.js +0 -12
- package/dist/uploads/fileVersioning/cleanup.js.map +1 -1
- package/dist/uploads/fileVersioning/cloudStorage.d.ts.map +1 -1
- package/dist/uploads/fileVersioning/cloudStorage.js +1 -16
- package/dist/uploads/fileVersioning/cloudStorage.js.map +1 -1
- package/dist/uploads/fileVersioning/resolveHistoricalFile.js.map +1 -1
- package/dist/uploads/formatFilesize.js +1 -1
- package/dist/uploads/formatFilesize.js.map +1 -1
- package/dist/uploads/generateFileData.d.ts +0 -5
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +2 -74
- package/dist/uploads/generateFileData.js.map +1 -1
- package/dist/uploads/getBaseFields.d.ts.map +1 -1
- package/dist/uploads/getBaseFields.js +29 -46
- package/dist/uploads/getBaseFields.js.map +1 -1
- package/dist/uploads/getFileContentRequirement.js.map +1 -1
- package/dist/uploads/getFileFromUploadInstructions.js.map +1 -1
- package/dist/uploads/getSafeFilename.d.ts.map +1 -1
- package/dist/uploads/getSafeFilename.js +3 -5
- package/dist/uploads/getSafeFilename.js.map +1 -1
- package/dist/uploads/safeFetch.js.map +1 -1
- package/dist/uploads/stagedUpload.js.map +1 -1
- package/dist/uploads/transformers/handleDynamicFileRequest.js +11 -2
- package/dist/uploads/transformers/handleDynamicFileRequest.js.map +1 -1
- package/dist/uploads/types.d.ts +0 -11
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js.map +1 -1
- package/dist/uploads/uploadFiles.d.ts +1 -4
- package/dist/uploads/uploadFiles.d.ts.map +1 -1
- package/dist/uploads/uploadFiles.js +5 -29
- package/dist/uploads/uploadFiles.js.map +1 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.js +0 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.js.map +1 -1
- package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
- package/dist/utilities/assertNoValidationWrite.d.ts.map +1 -1
- package/dist/utilities/assertNoValidationWrite.js +0 -4
- package/dist/utilities/assertNoValidationWrite.js.map +1 -1
- package/dist/utilities/checkDocumentLockStatus.d.ts +6 -15
- package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -1
- package/dist/utilities/checkDocumentLockStatus.js +11 -44
- package/dist/utilities/checkDocumentLockStatus.js.map +1 -1
- package/dist/utilities/cloneValidationRequest.js.map +1 -1
- package/dist/utilities/commitTransaction.d.ts +0 -4
- package/dist/utilities/commitTransaction.d.ts.map +1 -1
- package/dist/utilities/commitTransaction.js +1 -41
- package/dist/utilities/commitTransaction.js.map +1 -1
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +2 -18
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/createPayloadRequest.d.ts +0 -5
- package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
- package/dist/utilities/createPayloadRequest.js +3 -50
- package/dist/utilities/createPayloadRequest.js.map +1 -1
- package/dist/utilities/createPayloadRequestFromWebRequest.d.ts +12 -1
- package/dist/utilities/createPayloadRequestFromWebRequest.d.ts.map +1 -1
- package/dist/utilities/createPayloadRequestFromWebRequest.js +9 -5
- package/dist/utilities/createPayloadRequestFromWebRequest.js.map +1 -1
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/dist/utilities/documentMatchingWhereExists.js +1 -1
- package/dist/utilities/documentMatchingWhereExists.js.map +1 -1
- package/dist/utilities/entityInputSchema/validateEntityData.d.ts.map +1 -1
- package/dist/utilities/entityInputSchema/validateEntityData.js.map +1 -1
- package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js +1 -0
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
- package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
- package/dist/utilities/getVersionsConfig.d.ts +4 -0
- package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
- package/dist/utilities/getVersionsConfig.js +5 -0
- package/dist/utilities/getVersionsConfig.js.map +1 -1
- package/dist/utilities/handleEndpoints.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.js +10 -9
- package/dist/utilities/handleEndpoints.js.map +1 -1
- package/dist/utilities/httpStatus.d.ts +0 -2
- package/dist/utilities/httpStatus.d.ts.map +1 -1
- package/dist/utilities/httpStatus.js +1 -3
- package/dist/utilities/httpStatus.js.map +1 -1
- package/dist/utilities/initTransaction.d.ts.map +1 -1
- package/dist/utilities/initTransaction.js +7 -35
- package/dist/utilities/initTransaction.js.map +1 -1
- package/dist/utilities/killTransaction.d.ts.map +1 -1
- package/dist/utilities/killTransaction.js +0 -27
- package/dist/utilities/killTransaction.js.map +1 -1
- package/dist/utilities/parseParams/index.js.map +1 -1
- package/dist/utilities/parseValidationLocale.js.map +1 -1
- package/dist/utilities/sanitizePopulateParam.js.map +1 -1
- package/dist/utilities/telemetry/conf/index.d.ts +4 -1
- package/dist/utilities/telemetry/conf/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/conf/index.js.map +1 -1
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -1
- package/dist/versions/allLocalesPublicationStatus.js.map +1 -1
- package/dist/versions/buildCollectionFields.d.ts.map +1 -1
- package/dist/versions/buildCollectionFields.js +0 -23
- package/dist/versions/buildCollectionFields.js.map +1 -1
- package/dist/versions/buildGlobalFields.d.ts.map +1 -1
- package/dist/versions/buildGlobalFields.js +0 -14
- package/dist/versions/buildGlobalFields.js.map +1 -1
- package/dist/versions/buildVersionCompoundIndexes.d.ts.map +1 -1
- package/dist/versions/buildVersionCompoundIndexes.js +2 -8
- package/dist/versions/buildVersionCompoundIndexes.js.map +1 -1
- package/dist/versions/deleteCollectionVersions.d.ts +1 -2
- package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
- package/dist/versions/deleteCollectionVersions.js +8 -37
- package/dist/versions/deleteCollectionVersions.js.map +1 -1
- package/dist/versions/deleteScheduledPublishJobs.d.ts.map +1 -1
- package/dist/versions/deleteScheduledPublishJobs.js +0 -4
- package/dist/versions/deleteScheduledPublishJobs.js.map +1 -1
- package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
- package/dist/versions/drafts/appendVersionToQueryKey.js +1 -9
- package/dist/versions/drafts/appendVersionToQueryKey.js.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js +1 -8
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
- package/dist/versions/enforceMaxVersions.d.ts +0 -1
- package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
- package/dist/versions/enforceMaxVersions.js +6 -22
- package/dist/versions/enforceMaxVersions.js.map +1 -1
- package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
- package/dist/versions/getLatestCollectionVersion.js +2 -10
- package/dist/versions/getLatestCollectionVersion.js.map +1 -1
- package/dist/versions/getLatestGlobalVersion.d.ts +2 -6
- package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
- package/dist/versions/getLatestGlobalVersion.js +21 -65
- package/dist/versions/getLatestGlobalVersion.js.map +1 -1
- package/dist/versions/isInheritedReadVersionsAccess.js.map +1 -1
- package/dist/versions/saveVersion.d.ts +0 -7
- package/dist/versions/saveVersion.d.ts.map +1 -1
- package/dist/versions/saveVersion.js +4 -27
- package/dist/versions/saveVersion.js.map +1 -1
- package/dist/versions/updateLatestVersion.d.ts +0 -1
- package/dist/versions/updateLatestVersion.d.ts.map +1 -1
- package/dist/versions/updateLatestVersion.js +7 -24
- package/dist/versions/updateLatestVersion.js.map +1 -1
- package/package.json +30 -28
- package/skills/payload/reference/ENDPOINTS.md +3 -9
- package/skills/payload/reference/PLUGIN-DEVELOPMENT.md +4 -4
- package/dist/admin/getAdminPreferences.d.ts +0 -10
- package/dist/admin/getAdminPreferences.d.ts.map +0 -1
- package/dist/admin/getAdminPreferences.js +0 -53
- package/dist/admin/getAdminPreferences.js.map +0 -1
- package/dist/admin/getRequestBranch.d.ts +0 -6
- package/dist/admin/getRequestBranch.d.ts.map +0 -1
- package/dist/admin/getRequestBranch.js +0 -17
- package/dist/admin/getRequestBranch.js.map +0 -1
- package/dist/branching/appendBranchFilter.d.ts +0 -30
- package/dist/branching/appendBranchFilter.d.ts.map +0 -1
- package/dist/branching/appendBranchFilter.js +0 -105
- package/dist/branching/appendBranchFilter.js.map +0 -1
- package/dist/branching/assertBranchAccess.d.ts +0 -10
- package/dist/branching/assertBranchAccess.d.ts.map +0 -1
- package/dist/branching/assertBranchAccess.js +0 -36
- package/dist/branching/assertBranchAccess.js.map +0 -1
- package/dist/branching/assertBranchActionAccess.d.ts +0 -10
- package/dist/branching/assertBranchActionAccess.d.ts.map +0 -1
- package/dist/branching/assertBranchActionAccess.js +0 -15
- package/dist/branching/assertBranchActionAccess.js.map +0 -1
- package/dist/branching/assertBranchCreatedDocumentsUnreferenced.d.ts +0 -53
- package/dist/branching/assertBranchCreatedDocumentsUnreferenced.d.ts.map +0 -1
- package/dist/branching/assertBranchCreatedDocumentsUnreferenced.js +0 -833
- package/dist/branching/assertBranchCreatedDocumentsUnreferenced.js.map +0 -1
- package/dist/branching/assertBranchReadable.d.ts +0 -36
- package/dist/branching/assertBranchReadable.d.ts.map +0 -1
- package/dist/branching/assertBranchReadable.js +0 -83
- package/dist/branching/assertBranchReadable.js.map +0 -1
- package/dist/branching/assertBranchUpdateAccess.d.ts +0 -8
- package/dist/branching/assertBranchUpdateAccess.d.ts.map +0 -1
- package/dist/branching/assertBranchUpdateAccess.js +0 -12
- package/dist/branching/assertBranchUpdateAccess.js.map +0 -1
- package/dist/branching/assertBranchWritable.d.ts +0 -18
- package/dist/branching/assertBranchWritable.d.ts.map +0 -1
- package/dist/branching/assertBranchWritable.js +0 -46
- package/dist/branching/assertBranchWritable.js.map +0 -1
- package/dist/branching/branchIDs.d.ts +0 -38
- package/dist/branching/branchIDs.d.ts.map +0 -1
- package/dist/branching/branchIDs.js +0 -113
- package/dist/branching/branchIDs.js.map +0 -1
- package/dist/branching/branchSelect.d.ts +0 -42
- package/dist/branching/branchSelect.d.ts.map +0 -1
- package/dist/branching/branchSelect.js +0 -97
- package/dist/branching/branchSelect.js.map +0 -1
- package/dist/branching/checkFieldAccess.d.ts +0 -21
- package/dist/branching/checkFieldAccess.d.ts.map +0 -1
- package/dist/branching/checkFieldAccess.js +0 -238
- package/dist/branching/checkFieldAccess.js.map +0 -1
- package/dist/branching/collections.d.ts +0 -14
- package/dist/branching/collections.d.ts.map +0 -1
- package/dist/branching/collections.js +0 -713
- package/dist/branching/collections.js.map +0 -1
- package/dist/branching/combineBranchAccess.d.ts +0 -6
- package/dist/branching/combineBranchAccess.d.ts.map +0 -1
- package/dist/branching/combineBranchAccess.js +0 -22
- package/dist/branching/combineBranchAccess.js.map +0 -1
- package/dist/branching/copyUploadFilesToBranch.d.ts +0 -9
- package/dist/branching/copyUploadFilesToBranch.d.ts.map +0 -1
- package/dist/branching/copyUploadFilesToBranch.js +0 -126
- package/dist/branching/copyUploadFilesToBranch.js.map +0 -1
- package/dist/branching/createShadowRow.d.ts +0 -70
- package/dist/branching/createShadowRow.d.ts.map +0 -1
- package/dist/branching/createShadowRow.js +0 -296
- package/dist/branching/createShadowRow.js.map +0 -1
- package/dist/branching/discard.d.ts +0 -52
- package/dist/branching/discard.d.ts.map +0 -1
- package/dist/branching/discard.js +0 -428
- package/dist/branching/discard.js.map +0 -1
- package/dist/branching/effectiveOperations.d.ts +0 -55
- package/dist/branching/effectiveOperations.d.ts.map +0 -1
- package/dist/branching/effectiveOperations.js +0 -472
- package/dist/branching/effectiveOperations.js.map +0 -1
- package/dist/branching/endpoints/discard.d.ts +0 -15
- package/dist/branching/endpoints/discard.d.ts.map +0 -1
- package/dist/branching/endpoints/discard.js +0 -55
- package/dist/branching/endpoints/discard.js.map +0 -1
- package/dist/branching/endpoints/merge.d.ts +0 -34
- package/dist/branching/endpoints/merge.d.ts.map +0 -1
- package/dist/branching/endpoints/merge.js +0 -119
- package/dist/branching/endpoints/merge.js.map +0 -1
- package/dist/branching/forkDocument.d.ts +0 -20
- package/dist/branching/forkDocument.d.ts.map +0 -1
- package/dist/branching/forkDocument.js +0 -169
- package/dist/branching/forkDocument.js.map +0 -1
- package/dist/branching/globalMergeWrites.d.ts +0 -21
- package/dist/branching/globalMergeWrites.d.ts.map +0 -1
- package/dist/branching/globalMergeWrites.js +0 -146
- package/dist/branching/globalMergeWrites.js.map +0 -1
- package/dist/branching/globals.d.ts +0 -49
- package/dist/branching/globals.d.ts.map +0 -1
- package/dist/branching/globals.js +0 -197
- package/dist/branching/globals.js.map +0 -1
- package/dist/branching/hooks.d.ts +0 -24
- package/dist/branching/hooks.d.ts.map +0 -1
- package/dist/branching/hooks.js +0 -92
- package/dist/branching/hooks.js.map +0 -1
- package/dist/branching/injectBranchFields.d.ts +0 -40
- package/dist/branching/injectBranchFields.d.ts.map +0 -1
- package/dist/branching/injectBranchFields.js +0 -229
- package/dist/branching/injectBranchFields.js.map +0 -1
- package/dist/branching/merge/applyMergeChange.d.ts +0 -27
- package/dist/branching/merge/applyMergeChange.d.ts.map +0 -1
- package/dist/branching/merge/applyMergeChange.js +0 -853
- package/dist/branching/merge/applyMergeChange.js.map +0 -1
- package/dist/branching/merge/branchMergeStatus.d.ts +0 -12
- package/dist/branching/merge/branchMergeStatus.d.ts.map +0 -1
- package/dist/branching/merge/branchMergeStatus.js +0 -74
- package/dist/branching/merge/branchMergeStatus.js.map +0 -1
- package/dist/branching/merge/executeMerge.d.ts +0 -22
- package/dist/branching/merge/executeMerge.d.ts.map +0 -1
- package/dist/branching/merge/executeMerge.js +0 -600
- package/dist/branching/merge/executeMerge.js.map +0 -1
- package/dist/branching/merge/finalizeMerge.d.ts +0 -40
- package/dist/branching/merge/finalizeMerge.d.ts.map +0 -1
- package/dist/branching/merge/finalizeMerge.js +0 -237
- package/dist/branching/merge/finalizeMerge.js.map +0 -1
- package/dist/branching/merge/mergeLedger.d.ts +0 -40
- package/dist/branching/merge/mergeLedger.d.ts.map +0 -1
- package/dist/branching/merge/mergeLedger.js +0 -130
- package/dist/branching/merge/mergeLedger.js.map +0 -1
- package/dist/branching/merge/prepareMerge.d.ts +0 -41
- package/dist/branching/merge/prepareMerge.d.ts.map +0 -1
- package/dist/branching/merge/prepareMerge.js +0 -234
- package/dist/branching/merge/prepareMerge.js.map +0 -1
- package/dist/branching/merge/recoverMerge.d.ts +0 -16
- package/dist/branching/merge/recoverMerge.d.ts.map +0 -1
- package/dist/branching/merge/recoverMerge.js +0 -199
- package/dist/branching/merge/recoverMerge.js.map +0 -1
- package/dist/branching/merge/retryFailedCleanups.d.ts +0 -36
- package/dist/branching/merge/retryFailedCleanups.d.ts.map +0 -1
- package/dist/branching/merge/retryFailedCleanups.js +0 -335
- package/dist/branching/merge/retryFailedCleanups.js.map +0 -1
- package/dist/branching/merge/utilities.d.ts +0 -35
- package/dist/branching/merge/utilities.d.ts.map +0 -1
- package/dist/branching/merge/utilities.js +0 -54
- package/dist/branching/merge/utilities.js.map +0 -1
- package/dist/branching/merge.d.ts +0 -88
- package/dist/branching/merge.d.ts.map +0 -1
- package/dist/branching/merge.js +0 -163
- package/dist/branching/merge.js.map +0 -1
- package/dist/branching/mergeWriteGuard.d.ts +0 -20
- package/dist/branching/mergeWriteGuard.d.ts.map +0 -1
- package/dist/branching/mergeWriteGuard.js +0 -27
- package/dist/branching/mergeWriteGuard.js.map +0 -1
- package/dist/branching/preflight.d.ts +0 -71
- package/dist/branching/preflight.d.ts.map +0 -1
- package/dist/branching/preflight.js +0 -757
- package/dist/branching/preflight.js.map +0 -1
- package/dist/branching/readLocalizedBranchWrite.d.ts +0 -14
- package/dist/branching/readLocalizedBranchWrite.d.ts.map +0 -1
- package/dist/branching/readLocalizedBranchWrite.js +0 -90
- package/dist/branching/readLocalizedBranchWrite.js.map +0 -1
- package/dist/branching/readMergeSnapshot.d.ts +0 -18
- package/dist/branching/readMergeSnapshot.d.ts.map +0 -1
- package/dist/branching/readMergeSnapshot.js +0 -99
- package/dist/branching/readMergeSnapshot.js.map +0 -1
- package/dist/branching/resolveBranch.d.ts +0 -153
- package/dist/branching/resolveBranch.d.ts.map +0 -1
- package/dist/branching/resolveBranch.js +0 -363
- package/dist/branching/resolveBranch.js.map +0 -1
- package/dist/branching/resolveBranchActionAccess.d.ts +0 -8
- package/dist/branching/resolveBranchActionAccess.d.ts.map +0 -1
- package/dist/branching/resolveBranchActionAccess.js +0 -9
- package/dist/branching/resolveBranchActionAccess.js.map +0 -1
- package/dist/branching/resolveBranchQuery.d.ts +0 -48
- package/dist/branching/resolveBranchQuery.d.ts.map +0 -1
- package/dist/branching/resolveBranchQuery.js +0 -115
- package/dist/branching/resolveBranchQuery.js.map +0 -1
- package/dist/branching/resolveBranchRowID.d.ts +0 -22
- package/dist/branching/resolveBranchRowID.d.ts.map +0 -1
- package/dist/branching/resolveBranchRowID.js +0 -70
- package/dist/branching/resolveBranchRowID.js.map +0 -1
- package/dist/branching/sanitizeBranchingConfig.d.ts +0 -31
- package/dist/branching/sanitizeBranchingConfig.d.ts.map +0 -1
- package/dist/branching/sanitizeBranchingConfig.js +0 -110
- package/dist/branching/sanitizeBranchingConfig.js.map +0 -1
- package/dist/branching/schedule/job.d.ts +0 -51
- package/dist/branching/schedule/job.d.ts.map +0 -1
- package/dist/branching/schedule/job.js +0 -151
- package/dist/branching/schedule/job.js.map +0 -1
- package/dist/branching/selectBranchChanges.d.ts +0 -8
- package/dist/branching/selectBranchChanges.d.ts.map +0 -1
- package/dist/branching/selectBranchChanges.js +0 -9
- package/dist/branching/selectBranchChanges.js.map +0 -1
- package/dist/branching/stripBranchMergeData.d.ts +0 -11
- package/dist/branching/stripBranchMergeData.d.ts.map +0 -1
- package/dist/branching/stripBranchMergeData.js +0 -20
- package/dist/branching/stripBranchMergeData.js.map +0 -1
- package/dist/branching/tombstone.d.ts +0 -91
- package/dist/branching/tombstone.d.ts.map +0 -1
- package/dist/branching/tombstone.js +0 -546
- package/dist/branching/tombstone.js.map +0 -1
- package/dist/branching/types.d.ts +0 -158
- package/dist/branching/types.d.ts.map +0 -1
- package/dist/branching/types.js +0 -54
- package/dist/branching/types.js.map +0 -1
- package/dist/branching/validation.d.ts +0 -47
- package/dist/branching/validation.d.ts.map +0 -1
- package/dist/branching/validation.js +0 -272
- package/dist/branching/validation.js.map +0 -1
- package/dist/branching/versions.d.ts +0 -131
- package/dist/branching/versions.d.ts.map +0 -1
- package/dist/branching/versions.js +0 -572
- package/dist/branching/versions.js.map +0 -1
- package/dist/collections/operations/utilities/createOperationRetryRequest.d.ts +0 -23
- package/dist/collections/operations/utilities/createOperationRetryRequest.d.ts.map +0 -1
- package/dist/collections/operations/utilities/createOperationRetryRequest.js +0 -683
- package/dist/collections/operations/utilities/createOperationRetryRequest.js.map +0 -1
- package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.d.ts +0 -3
- package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.d.ts.map +0 -1
- package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.js +0 -3
- package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.js.map +0 -1
- package/dist/uploads/appendBranchToFileURL.d.ts +0 -6
- package/dist/uploads/appendBranchToFileURL.d.ts.map +0 -1
- package/dist/uploads/appendBranchToFileURL.js +0 -24
- package/dist/uploads/appendBranchToFileURL.js.map +0 -1
- package/dist/uploads/deleteUploadFilesExclusiveToDocument.d.ts +0 -15
- package/dist/uploads/deleteUploadFilesExclusiveToDocument.d.ts.map +0 -1
- package/dist/uploads/deleteUploadFilesExclusiveToDocument.js +0 -62
- package/dist/uploads/deleteUploadFilesExclusiveToDocument.js.map +0 -1
- package/dist/uploads/fileIdentity.d.ts +0 -24
- package/dist/uploads/fileIdentity.d.ts.map +0 -1
- package/dist/uploads/fileIdentity.js +0 -36
- package/dist/uploads/fileIdentity.js.map +0 -1
- package/dist/uploads/fileQuarantine.d.ts +0 -17
- package/dist/uploads/fileQuarantine.d.ts.map +0 -1
- package/dist/uploads/fileQuarantine.js +0 -52
- package/dist/uploads/fileQuarantine.js.map +0 -1
- package/dist/uploads/linkFileWithoutOverwrite.d.ts +0 -13
- package/dist/uploads/linkFileWithoutOverwrite.d.ts.map +0 -1
- package/dist/uploads/linkFileWithoutOverwrite.js +0 -13
- package/dist/uploads/linkFileWithoutOverwrite.js.map +0 -1
- package/dist/uploads/uploadFileRollback.d.ts +0 -31
- package/dist/uploads/uploadFileRollback.d.ts.map +0 -1
- package/dist/uploads/uploadFileRollback.js +0 -269
- package/dist/uploads/uploadFileRollback.js.map +0 -1
- package/dist/utilities/extractRelationshipID.d.ts +0 -4
- package/dist/utilities/extractRelationshipID.d.ts.map +0 -1
- package/dist/utilities/extractRelationshipID.js +0 -14
- package/dist/utilities/extractRelationshipID.js.map +0 -1
- package/dist/utilities/transactionCallbacks.d.ts +0 -77
- package/dist/utilities/transactionCallbacks.d.ts.map +0 -1
- package/dist/utilities/transactionCallbacks.js +0 -299
- package/dist/utilities/transactionCallbacks.js.map +0 -1
- package/dist/utilities/transactionMutationTracker.d.ts +0 -21
- package/dist/utilities/transactionMutationTracker.d.ts.map +0 -1
- package/dist/utilities/transactionMutationTracker.js +0 -71
- package/dist/utilities/transactionMutationTracker.js.map +0 -1
|
@@ -2,40 +2,16 @@ import fs from 'fs/promises';
|
|
|
2
2
|
import { FileUploadError } from '../errors/index.js';
|
|
3
3
|
import { assertNoValidationWrite } from '../utilities/assertNoValidationWrite.js';
|
|
4
4
|
import { saveBufferToFile } from './saveBufferToFile.js';
|
|
5
|
-
|
|
6
|
-
export const uploadFiles = async (payload, files, req, { uploadFileRollbacks } = {})=>{
|
|
5
|
+
export const uploadFiles = async (payload, files, req)=>{
|
|
7
6
|
assertNoValidationWrite(req);
|
|
8
7
|
try {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
file,
|
|
13
|
-
stagedFile: uploadFileRollbacks ? await stageUploadFileRollback({
|
|
14
|
-
file,
|
|
15
|
-
rollbacks: uploadFileRollbacks
|
|
16
|
-
}) : file
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
const uploadResults = await Promise.allSettled(filesToUpload.map(async ({ stagedFile })=>{
|
|
20
|
-
if ('sourcePath' in stagedFile) {
|
|
21
|
-
await fs.copyFile(stagedFile.sourcePath, stagedFile.path);
|
|
8
|
+
await Promise.all(files.map(async (file)=>{
|
|
9
|
+
if ('sourcePath' in file) {
|
|
10
|
+
await fs.copyFile(file.sourcePath, file.path);
|
|
22
11
|
} else {
|
|
23
|
-
await saveBufferToFile(
|
|
12
|
+
await saveBufferToFile(file.buffer, file.path);
|
|
24
13
|
}
|
|
25
14
|
}));
|
|
26
|
-
const failedUpload = uploadResults.find((result)=>result.status === 'rejected');
|
|
27
|
-
if (failedUpload) {
|
|
28
|
-
throw failedUpload.reason;
|
|
29
|
-
}
|
|
30
|
-
if (uploadFileRollbacks) {
|
|
31
|
-
for (const { file, stagedFile } of filesToUpload){
|
|
32
|
-
await publishUploadedFile({
|
|
33
|
-
file,
|
|
34
|
-
rollbacks: uploadFileRollbacks,
|
|
35
|
-
stagedFile
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
15
|
} catch (err) {
|
|
40
16
|
payload.logger.error(err);
|
|
41
17
|
throw new FileUploadError(req.t);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/uploads/uploadFiles.ts"],"sourcesContent":["import fs from 'fs/promises'\n\nimport type { Payload } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { FileToSave } from './types.js'\
|
|
1
|
+
{"version":3,"sources":["../../src/uploads/uploadFiles.ts"],"sourcesContent":["import fs from 'fs/promises'\n\nimport type { Payload } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { FileToSave } from './types.js'\n\nimport { FileUploadError } from '../errors/index.js'\nimport { assertNoValidationWrite } from '../utilities/assertNoValidationWrite.js'\nimport { saveBufferToFile } from './saveBufferToFile.js'\n\nexport const uploadFiles = async (\n payload: Payload,\n files: FileToSave[],\n req: PayloadRequest,\n): Promise<void> => {\n assertNoValidationWrite(req)\n\n try {\n await Promise.all(\n files.map(async (file) => {\n if ('sourcePath' in file) {\n await fs.copyFile(file.sourcePath, file.path)\n } else {\n await saveBufferToFile(file.buffer, file.path)\n }\n }),\n )\n } catch (err) {\n payload.logger.error(err)\n throw new FileUploadError(req.t)\n }\n}\n"],"names":["fs","FileUploadError","assertNoValidationWrite","saveBufferToFile","uploadFiles","payload","files","req","Promise","all","map","file","copyFile","sourcePath","path","buffer","err","logger","error","t"],"mappings":"AAAA,OAAOA,QAAQ,cAAa;AAM5B,SAASC,eAAe,QAAQ,qBAAoB;AACpD,SAASC,uBAAuB,QAAQ,0CAAyC;AACjF,SAASC,gBAAgB,QAAQ,wBAAuB;AAExD,OAAO,MAAMC,cAAc,OACzBC,SACAC,OACAC;IAEAL,wBAAwBK;IAExB,IAAI;QACF,MAAMC,QAAQC,GAAG,CACfH,MAAMI,GAAG,CAAC,OAAOC;YACf,IAAI,gBAAgBA,MAAM;gBACxB,MAAMX,GAAGY,QAAQ,CAACD,KAAKE,UAAU,EAAEF,KAAKG,IAAI;YAC9C,OAAO;gBACL,MAAMX,iBAAiBQ,KAAKI,MAAM,EAAEJ,KAAKG,IAAI;YAC/C;QACF;IAEJ,EAAE,OAAOE,KAAK;QACZX,QAAQY,MAAM,CAACC,KAAK,CAACF;QACrB,MAAM,IAAIf,gBAAgBM,IAAIY,CAAC;IACjC;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addSelectGenericsToGeneretedTypes.d.ts","sourceRoot":"","sources":["../../src/utilities/addSelectGenericsToGeneretedTypes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,gCAE3C;IACD,sBAAsB,EAAE,MAAM,CAAA;CAC/B,
|
|
1
|
+
{"version":3,"file":"addSelectGenericsToGeneretedTypes.d.ts","sourceRoot":"","sources":["../../src/utilities/addSelectGenericsToGeneretedTypes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,gCAE3C;IACD,sBAAsB,EAAE,MAAM,CAAA;CAC/B,WAmDA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/addSelectGenericsToGeneretedTypes.ts"],"sourcesContent":["export const addSelectGenericsToGeneratedTypes = ({\n compiledGeneratedTypes,\n}: {\n compiledGeneratedTypes: string\n}) => {\n const modifiedLines: string[] = []\n\n let isCollectionsSelectToken = false\n let isSelectTypeToken = false\n\n for (const line of compiledGeneratedTypes.split('\\n')) {\n let newLine = line\n if (line === ` collectionsSelect: {` || line === ` globalsSelect: {`) {\n isCollectionsSelectToken = true\n }\n\n if (isCollectionsSelectToken) {\n if (line === ' };') {\n isCollectionsSelectToken = false\n } else {\n // replace <posts: PostsSelect;> with <posts: PostsSelect<true> | PostsSelect<false;>\n newLine = line.replace(/(['\"]?\\w+['\"]?):\\s*(\\w+);/g, (_, variable, type) => {\n return `${variable}: ${type}<false> | ${type}<true>;`\n })\n }\n }\n\n
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/addSelectGenericsToGeneretedTypes.ts"],"sourcesContent":["export const addSelectGenericsToGeneratedTypes = ({\n compiledGeneratedTypes,\n}: {\n compiledGeneratedTypes: string\n}) => {\n const modifiedLines: string[] = []\n\n let isCollectionsSelectToken = false\n let isSelectTypeToken = false\n\n for (const line of compiledGeneratedTypes.split('\\n')) {\n let newLine = line\n if (line === ` collectionsSelect: {` || line === ` globalsSelect: {`) {\n isCollectionsSelectToken = true\n }\n\n if (isCollectionsSelectToken) {\n if (line === ' };') {\n isCollectionsSelectToken = false\n } else {\n // replace <posts: PostsSelect;> with <posts: PostsSelect<true> | PostsSelect<false;>\n newLine = line.replace(/(['\"]?\\w+['\"]?):\\s*(\\w+);/g, (_, variable, type) => {\n return `${variable}: ${type}<false> | ${type}<true>;`\n })\n }\n }\n\n if (line.match(/via the `definition` \"([\\w-]+_select)\"/g)) {\n isSelectTypeToken = true\n }\n\n if (isSelectTypeToken) {\n if (line.startsWith('export interface')) {\n // add generic to the interface\n newLine = line.replace(/(export interface\\s+\\w+)(\\s*\\{)/g, '$1<T extends boolean = true>$2')\n } else {\n newLine = line\n // replace booleans with T on the line\n .replace(/(?<!\\?)\\bboolean\\b/g, 'T')\n // replace interface names like CtaBlock to CtaBlock<T>\n .replace(\n /\\b(\\w+)\\s*\\|\\s*(\\w+)\\b/g,\n (_match, left, right) => `${left} | ${right}<${left}>`,\n )\n\n if (line === '}') {\n isSelectTypeToken = false\n }\n }\n }\n\n modifiedLines.push(newLine)\n }\n\n return modifiedLines.join('\\n')\n}\n"],"names":["addSelectGenericsToGeneratedTypes","compiledGeneratedTypes","modifiedLines","isCollectionsSelectToken","isSelectTypeToken","line","split","newLine","replace","_","variable","type","match","startsWith","_match","left","right","push","join"],"mappings":"AAAA,OAAO,MAAMA,oCAAoC,CAAC,EAChDC,sBAAsB,EAGvB;IACC,MAAMC,gBAA0B,EAAE;IAElC,IAAIC,2BAA2B;IAC/B,IAAIC,oBAAoB;IAExB,KAAK,MAAMC,QAAQJ,uBAAuBK,KAAK,CAAC,MAAO;QACrD,IAAIC,UAAUF;QACd,IAAIA,SAAS,CAAC,sBAAsB,CAAC,IAAIA,SAAS,CAAC,kBAAkB,CAAC,EAAE;YACtEF,2BAA2B;QAC7B;QAEA,IAAIA,0BAA0B;YAC5B,IAAIE,SAAS,QAAQ;gBACnBF,2BAA2B;YAC7B,OAAO;gBACL,qFAAqF;gBACrFI,UAAUF,KAAKG,OAAO,CAAC,8BAA8B,CAACC,GAAGC,UAAUC;oBACjE,OAAO,GAAGD,SAAS,EAAE,EAAEC,KAAK,UAAU,EAAEA,KAAK,OAAO,CAAC;gBACvD;YACF;QACF;QAEA,IAAIN,KAAKO,KAAK,CAAC,4CAA4C;YACzDR,oBAAoB;QACtB;QAEA,IAAIA,mBAAmB;YACrB,IAAIC,KAAKQ,UAAU,CAAC,qBAAqB;gBACvC,+BAA+B;gBAC/BN,UAAUF,KAAKG,OAAO,CAAC,oCAAoC;YAC7D,OAAO;gBACLD,UAAUF,IACR,sCAAsC;iBACrCG,OAAO,CAAC,uBAAuB,IAChC,uDAAuD;iBACtDA,OAAO,CACN,2BACA,CAACM,QAAQC,MAAMC,QAAU,GAAGD,KAAK,GAAG,EAAEC,MAAM,CAAC,EAAED,KAAK,CAAC,CAAC;gBAG1D,IAAIV,SAAS,KAAK;oBAChBD,oBAAoB;gBACtB;YACF;QACF;QAEAF,cAAce,IAAI,CAACV;IACrB;IAEA,OAAOL,cAAcgB,IAAI,CAAC;AAC5B,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/appendDateTimezoneSelectFields.ts"],"sourcesContent":["import type { FlattenedField } from '../fields/config/types.js'\nimport type { SelectType } from '../types/index.js'\n\n/**\n * Mutates the incoming select object to append `{name}_tz` siblings for any date\n * field with `timezone` enabled that has been requested in the select. Without\n * this, the List View's Select API would omit the timezone sibling and\n * cells would render dates in the server's timezone.\n */\nexport const appendDateTimezoneSelectFields = ({\n fields,\n select,\n}: {\n fields: FlattenedField[]\n select: SelectType\n}) => {\n if (!select) {\n return\n }\n\n for (const field of fields) {\n if (!('name' in field)) {\n continue\n }\n\n const value = select[field.name]\n\n if (field.type === 'date' && field.timezone && value) {\n select[`${field.name}_tz`] = true\n continue\n }\n\n if (!value || typeof value !== 'object') {\n continue\n }\n\n if ('flattenedFields' in field) {\n appendDateTimezoneSelectFields({\n fields: field.flattenedFields,\n select: value
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/appendDateTimezoneSelectFields.ts"],"sourcesContent":["import type { FlattenedField } from '../fields/config/types.js'\nimport type { SelectType } from '../types/index.js'\n\n/**\n * Mutates the incoming select object to append `{name}_tz` siblings for any date\n * field with `timezone` enabled that has been requested in the select. Without\n * this, the List View's Select API would omit the timezone sibling and\n * cells would render dates in the server's timezone.\n */\nexport const appendDateTimezoneSelectFields = ({\n fields,\n select,\n}: {\n fields: FlattenedField[]\n select: SelectType\n}) => {\n if (!select) {\n return\n }\n\n for (const field of fields) {\n if (!('name' in field)) {\n continue\n }\n\n const value = select[field.name]\n\n if (field.type === 'date' && field.timezone && value) {\n select[`${field.name}_tz`] = true\n continue\n }\n\n if (!value || typeof value !== 'object') {\n continue\n }\n\n if ('flattenedFields' in field) {\n appendDateTimezoneSelectFields({\n fields: field.flattenedFields,\n select: value,\n })\n continue\n }\n\n if (field.type === 'blocks') {\n const blocks = field.blocks as Array<\n | {\n flattenedFields: FlattenedField[]\n slug: string\n }\n | string\n >\n\n for (const block of blocks) {\n if (typeof block === 'string') {\n continue\n }\n const blockSelect = value[block.slug]\n if (blockSelect && typeof blockSelect === 'object') {\n appendDateTimezoneSelectFields({\n fields: block.flattenedFields,\n select: blockSelect,\n })\n }\n }\n }\n }\n}\n"],"names":["appendDateTimezoneSelectFields","fields","select","field","value","name","type","timezone","flattenedFields","blocks","block","blockSelect","slug"],"mappings":"AAGA;;;;;CAKC,GACD,OAAO,MAAMA,iCAAiC,CAAC,EAC7CC,MAAM,EACNC,MAAM,EAIP;IACC,IAAI,CAACA,QAAQ;QACX;IACF;IAEA,KAAK,MAAMC,SAASF,OAAQ;QAC1B,IAAI,CAAE,CAAA,UAAUE,KAAI,GAAI;YACtB;QACF;QAEA,MAAMC,QAAQF,MAAM,CAACC,MAAME,IAAI,CAAC;QAEhC,IAAIF,MAAMG,IAAI,KAAK,UAAUH,MAAMI,QAAQ,IAAIH,OAAO;YACpDF,MAAM,CAAC,GAAGC,MAAME,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG;YAC7B;QACF;QAEA,IAAI,CAACD,SAAS,OAAOA,UAAU,UAAU;YACvC;QACF;QAEA,IAAI,qBAAqBD,OAAO;YAC9BH,+BAA+B;gBAC7BC,QAAQE,MAAMK,eAAe;gBAC7BN,QAAQE;YACV;YACA;QACF;QAEA,IAAID,MAAMG,IAAI,KAAK,UAAU;YAC3B,MAAMG,SAASN,MAAMM,MAAM;YAQ3B,KAAK,MAAMC,SAASD,OAAQ;gBAC1B,IAAI,OAAOC,UAAU,UAAU;oBAC7B;gBACF;gBACA,MAAMC,cAAcP,KAAK,CAACM,MAAME,IAAI,CAAC;gBACrC,IAAID,eAAe,OAAOA,gBAAgB,UAAU;oBAClDX,+BAA+B;wBAC7BC,QAAQS,MAAMF,eAAe;wBAC7BN,QAAQS;oBACV;gBACF;YACF;QACF;IACF;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertNoValidationWrite.d.ts","sourceRoot":"","sources":["../../src/utilities/assertNoValidationWrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"assertNoValidationWrite.d.ts","sourceRoot":"","sources":["../../src/utilities/assertNoValidationWrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIvD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAI3E"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { assertBranchMergeValidationWriteAllowed } from '../branching/mergeWriteGuard.js';
|
|
2
1
|
import { APIError } from '../errors/index.js';
|
|
3
2
|
/**
|
|
4
3
|
* Prevents guarded document, global, upload, and version mutation entry points from writing
|
|
@@ -6,9 +5,6 @@ import { APIError } from '../errors/index.js';
|
|
|
6
5
|
* intentionally unaffected.
|
|
7
6
|
*/ export function assertNoValidationWrite(req) {
|
|
8
7
|
if (req?.operation === 'validate') {
|
|
9
|
-
assertBranchMergeValidationWriteAllowed({
|
|
10
|
-
req
|
|
11
|
-
});
|
|
12
8
|
throw new APIError('Payload writes are not allowed during validation.');
|
|
13
9
|
}
|
|
14
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/assertNoValidationWrite.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/assertNoValidationWrite.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\nimport { APIError } from '../errors/index.js'\n\n/**\n * Prevents guarded document, global, upload, and version mutation entry points from writing\n * through an active validation request. Reads and writes made with a separate request are\n * intentionally unaffected.\n */\nexport function assertNoValidationWrite(req?: Partial<PayloadRequest>): void {\n if (req?.operation === 'validate') {\n throw new APIError('Payload writes are not allowed during validation.')\n }\n}\n"],"names":["APIError","assertNoValidationWrite","req","operation"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,qBAAoB;AAE7C;;;;CAIC,GACD,OAAO,SAASC,wBAAwBC,GAA6B;IACnE,IAAIA,KAAKC,cAAc,YAAY;QACjC,MAAM,IAAIH,SAAS;IACrB;AACF"}
|
|
@@ -7,35 +7,26 @@ type CheckDocumentLockStatusArgs = {
|
|
|
7
7
|
lockErrorMessage?: string;
|
|
8
8
|
overrideLock?: boolean;
|
|
9
9
|
req: PayloadRequest;
|
|
10
|
-
shouldDeleteLock?: boolean;
|
|
11
10
|
};
|
|
12
|
-
export declare const checkDocumentLockStatus: ({ id, collectionSlug, globalSlug, lockDurationDefault, lockErrorMessage, overrideLock, req,
|
|
11
|
+
export declare const checkDocumentLockStatus: ({ id, collectionSlug, globalSlug, lockDurationDefault, lockErrorMessage, overrideLock, req, }: CheckDocumentLockStatusArgs) => Promise<void>;
|
|
13
12
|
type BulkLockArgs = {
|
|
14
13
|
collectionSlug: string;
|
|
15
14
|
ids: (number | string)[];
|
|
16
15
|
req: PayloadRequest;
|
|
17
16
|
};
|
|
18
|
-
type DocumentLockState = {
|
|
19
|
-
lockDocumentIDsByDocumentID: Map<string, (number | string)[]>;
|
|
20
|
-
lockedDocumentIDs: Set<string>;
|
|
21
|
-
};
|
|
22
|
-
type GetDocumentLockStateArgs = {
|
|
23
|
-
lockDurationDefault?: number;
|
|
24
|
-
overrideLock?: boolean;
|
|
25
|
-
} & BulkLockArgs;
|
|
26
17
|
/**
|
|
27
18
|
* Batched counterpart to `checkDocumentLockStatus`. Resolves the lock state of every id with a
|
|
28
19
|
* single query instead of one per document, and returns the ids that are locked by another user.
|
|
29
20
|
* Callers are expected to report those ids as errors and leave them alone.
|
|
30
21
|
*/
|
|
31
|
-
export declare const
|
|
32
|
-
|
|
22
|
+
export declare const getLockedDocumentIds: ({ collectionSlug, ids, lockDurationDefault, overrideLock, req, }: {
|
|
23
|
+
lockDurationDefault?: number;
|
|
24
|
+
overrideLock?: boolean;
|
|
25
|
+
} & BulkLockArgs) => Promise<Set<string>>;
|
|
33
26
|
/**
|
|
34
27
|
* Batched counterpart to the lock cleanup `checkDocumentLockStatus` performs, so that bulk
|
|
35
28
|
* operations release every lock in one query instead of one per document.
|
|
36
29
|
*/
|
|
37
|
-
export declare const deleteDocumentLocks: ({ collectionSlug, ids,
|
|
38
|
-
lockDocumentIDs?: (number | string)[];
|
|
39
|
-
} & BulkLockArgs) => Promise<void>;
|
|
30
|
+
export declare const deleteDocumentLocks: ({ collectionSlug, ids, req, }: BulkLockArgs) => Promise<void>;
|
|
40
31
|
export {};
|
|
41
32
|
//# sourceMappingURL=checkDocumentLockStatus.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkDocumentLockStatus.d.ts","sourceRoot":"","sources":["../../src/utilities/checkDocumentLockStatus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,cAAc,EAAS,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"checkDocumentLockStatus.d.ts","sourceRoot":"","sources":["../../src/utilities/checkDocumentLockStatus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,cAAc,EAAS,MAAM,mBAAmB,CAAA;AAK1E,KAAK,2BAA2B,GAAG;IACjC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,uBAAuB,kGAQjC,2BAA2B,KAAG,OAAO,CAAC,IAAI,CAgF5C,CAAA;AAED,KAAK,YAAY,GAAG;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAgBD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,qEAM9B;IACD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,YAAY,KAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CA+CrC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,kCAI7B,YAAY,KAAG,OAAO,CAAC,IAAI,CAa7B,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Locked } from '../errors/index.js';
|
|
2
2
|
import { lockedDocumentsCollectionSlug } from '../locked-documents/config.js';
|
|
3
|
-
|
|
4
|
-
export const checkDocumentLockStatus = async ({ id, collectionSlug, globalSlug, lockDurationDefault = 300, lockErrorMessage, overrideLock = true, req, shouldDeleteLock = true })=>{
|
|
3
|
+
export const checkDocumentLockStatus = async ({ id, collectionSlug, globalSlug, lockDurationDefault = 300, lockErrorMessage, overrideLock = true, req })=>{
|
|
5
4
|
const { payload } = req;
|
|
6
5
|
// Check if the locked-documents collection exists
|
|
7
6
|
if (!payload.collections?.[lockedDocumentsCollectionSlug]) {
|
|
@@ -47,7 +46,6 @@ export const checkDocumentLockStatus = async ({ id, collectionSlug, globalSlug,
|
|
|
47
46
|
collection: lockedDocumentsCollectionSlug,
|
|
48
47
|
limit: 1,
|
|
49
48
|
pagination: false,
|
|
50
|
-
req: payload.db.name === 'mongoose' ? undefined : req,
|
|
51
49
|
sort: '-updatedAt',
|
|
52
50
|
where: lockedDocumentQuery
|
|
53
51
|
});
|
|
@@ -65,9 +63,6 @@ export const checkDocumentLockStatus = async ({ id, collectionSlug, globalSlug,
|
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
65
|
}
|
|
68
|
-
if (!shouldDeleteLock) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
66
|
// Perform the delete operation regardless of overrideLock status
|
|
72
67
|
await payload.db.deleteMany({
|
|
73
68
|
collection: lockedDocumentsCollectionSlug,
|
|
@@ -75,9 +70,6 @@ export const checkDocumentLockStatus = async ({ id, collectionSlug, globalSlug,
|
|
|
75
70
|
req: payload.db.name === 'mongoose' ? undefined : req,
|
|
76
71
|
where: lockedDocumentQuery
|
|
77
72
|
});
|
|
78
|
-
markTransactionWrite({
|
|
79
|
-
req: payload.db.name === 'mongoose' ? undefined : req
|
|
80
|
-
});
|
|
81
73
|
};
|
|
82
74
|
const buildBulkLockedDocumentQuery = (collectionSlug, ids)=>({
|
|
83
75
|
and: [
|
|
@@ -104,13 +96,10 @@ const isLockingAvailable = (collectionSlug, req)=>{
|
|
|
104
96
|
* Batched counterpart to `checkDocumentLockStatus`. Resolves the lock state of every id with a
|
|
105
97
|
* single query instead of one per document, and returns the ids that are locked by another user.
|
|
106
98
|
* Callers are expected to report those ids as errors and leave them alone.
|
|
107
|
-
*/ export const
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
};
|
|
112
|
-
if (!ids.length || !isLockingAvailable(collectionSlug, req)) {
|
|
113
|
-
return lockState;
|
|
99
|
+
*/ export const getLockedDocumentIds = async ({ collectionSlug, ids, lockDurationDefault = 300, overrideLock = true, req })=>{
|
|
100
|
+
const lockedIds = new Set();
|
|
101
|
+
if (overrideLock || !ids.length || !isLockingAvailable(collectionSlug, req)) {
|
|
102
|
+
return lockedIds;
|
|
114
103
|
}
|
|
115
104
|
const { payload } = req;
|
|
116
105
|
const lockDocumentsProp = payload.collections?.[collectionSlug]?.config?.lockDocuments;
|
|
@@ -118,7 +107,6 @@ const isLockingAvailable = (collectionSlug, req)=>{
|
|
|
118
107
|
collection: lockedDocumentsCollectionSlug,
|
|
119
108
|
limit: 0,
|
|
120
109
|
pagination: false,
|
|
121
|
-
req: payload.db.name === 'mongoose' ? undefined : req,
|
|
122
110
|
sort: '-updatedAt',
|
|
123
111
|
where: buildBulkLockedDocumentQuery(collectionSlug, ids)
|
|
124
112
|
});
|
|
@@ -129,14 +117,6 @@ const isLockingAvailable = (collectionSlug, req)=>{
|
|
|
129
117
|
const resolved = new Set();
|
|
130
118
|
for (const lockedDoc of lockedDocumentResult?.docs ?? []){
|
|
131
119
|
const documentId = String(lockedDoc.document?.value);
|
|
132
|
-
const lockDocumentIDs = lockState.lockDocumentIDsByDocumentID.get(documentId);
|
|
133
|
-
if (lockDocumentIDs) {
|
|
134
|
-
lockDocumentIDs.push(lockedDoc.id);
|
|
135
|
-
} else {
|
|
136
|
-
lockState.lockDocumentIDsByDocumentID.set(documentId, [
|
|
137
|
-
lockedDoc.id
|
|
138
|
-
]);
|
|
139
|
-
}
|
|
140
120
|
// Sorted by -updatedAt, so the first row seen for an id is its most recent lock
|
|
141
121
|
if (resolved.has(documentId)) {
|
|
142
122
|
continue;
|
|
@@ -144,38 +124,25 @@ const isLockingAvailable = (collectionSlug, req)=>{
|
|
|
144
124
|
resolved.add(documentId);
|
|
145
125
|
const lastEditedAt = new Date(lockedDoc?.updatedAt).getTime();
|
|
146
126
|
// document is locked by another user and the lock hasn't expired
|
|
147
|
-
if (
|
|
148
|
-
|
|
127
|
+
if (lockedDoc.user?.value !== currentUserId && now - lastEditedAt <= lockDurationInMilliseconds) {
|
|
128
|
+
lockedIds.add(documentId);
|
|
149
129
|
}
|
|
150
130
|
}
|
|
151
|
-
return
|
|
152
|
-
};
|
|
153
|
-
export const getLockedDocumentIds = async (args)=>{
|
|
154
|
-
if (args.overrideLock ?? true) {
|
|
155
|
-
return new Set();
|
|
156
|
-
}
|
|
157
|
-
return (await getDocumentLockState(args)).lockedDocumentIDs;
|
|
131
|
+
return lockedIds;
|
|
158
132
|
};
|
|
159
133
|
/**
|
|
160
134
|
* Batched counterpart to the lock cleanup `checkDocumentLockStatus` performs, so that bulk
|
|
161
135
|
* operations release every lock in one query instead of one per document.
|
|
162
|
-
*/ export const deleteDocumentLocks = async ({ collectionSlug, ids,
|
|
136
|
+
*/ export const deleteDocumentLocks = async ({ collectionSlug, ids, req })=>{
|
|
163
137
|
const { payload } = req;
|
|
164
|
-
if (!ids.length ||
|
|
138
|
+
if (!ids.length || !isLockingAvailable(collectionSlug, req)) {
|
|
165
139
|
return;
|
|
166
140
|
}
|
|
167
141
|
await payload.db.deleteMany({
|
|
168
142
|
collection: lockedDocumentsCollectionSlug,
|
|
169
143
|
// Not passing req fails on postgres
|
|
170
144
|
req: payload.db.name === 'mongoose' ? undefined : req,
|
|
171
|
-
where:
|
|
172
|
-
id: {
|
|
173
|
-
in: lockDocumentIDs
|
|
174
|
-
}
|
|
175
|
-
} : buildBulkLockedDocumentQuery(collectionSlug, ids)
|
|
176
|
-
});
|
|
177
|
-
markTransactionWrite({
|
|
178
|
-
req: payload.db.name === 'mongoose' ? undefined : req
|
|
145
|
+
where: buildBulkLockedDocumentQuery(collectionSlug, ids)
|
|
179
146
|
});
|
|
180
147
|
};
|
|
181
148
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/checkDocumentLockStatus.ts"],"sourcesContent":["import type { TypeWithID } from '../collections/config/types.js'\nimport type { PaginatedDocs } from '../database/types.js'\nimport type { JsonObject, PayloadRequest, Where } from '../types/index.js'\n\nimport { Locked } from '../errors/index.js'\nimport { lockedDocumentsCollectionSlug } from '../locked-documents/config.js'\nimport { markTransactionWrite } from './transactionMutationTracker.js'\n\ntype CheckDocumentLockStatusArgs = {\n collectionSlug?: string\n globalSlug?: string\n id?: number | string\n lockDurationDefault?: number\n lockErrorMessage?: string\n overrideLock?: boolean\n req: PayloadRequest\n shouldDeleteLock?: boolean\n}\n\nexport const checkDocumentLockStatus = async ({\n id,\n collectionSlug,\n globalSlug,\n lockDurationDefault = 300, // Default 5 minutes in seconds\n lockErrorMessage,\n overrideLock = true,\n req,\n shouldDeleteLock = true,\n}: CheckDocumentLockStatusArgs): Promise<void> => {\n const { payload } = req\n\n // Check if the locked-documents collection exists\n if (!payload.collections?.[lockedDocumentsCollectionSlug]) {\n // If the collection doesn't exist, locking is not available\n return\n }\n\n // Retrieve the lockDocuments property for either collection or global\n const lockDocumentsProp = collectionSlug\n ? payload.collections?.[collectionSlug]?.config?.lockDocuments\n : payload.config?.globals?.find((g) => g.slug === globalSlug)?.lockDocuments\n\n const isLockingEnabled = lockDocumentsProp !== false\n\n let lockedDocumentQuery = {}\n\n if (collectionSlug) {\n lockedDocumentQuery = {\n and: [\n { 'document.relationTo': { equals: collectionSlug } },\n { 'document.value': { equals: id } },\n ],\n }\n } else if (globalSlug) {\n lockedDocumentQuery = { globalSlug: { equals: globalSlug } }\n } else {\n throw new Error('Either collectionSlug or globalSlug must be provided.')\n }\n\n if (!isLockingEnabled) {\n return\n }\n\n // Only perform lock checks if overrideLock is false and locking is enabled\n if (!overrideLock) {\n const defaultLockErrorMessage = collectionSlug\n ? `Document with ID ${id} is currently locked by another user and cannot be modified.`\n : `Global document with slug \"${globalSlug}\" is currently locked by another user and cannot be modified.`\n\n const finalLockErrorMessage = lockErrorMessage || defaultLockErrorMessage\n\n const lockedDocumentResult: PaginatedDocs<JsonObject & TypeWithID> = await payload.db.find({\n collection: lockedDocumentsCollectionSlug,\n limit: 1,\n pagination: false,\n req: payload.db.name === 'mongoose' ? undefined : req,\n sort: '-updatedAt',\n where: lockedDocumentQuery,\n })\n\n // If there's a locked document, check lock conditions\n const lockedDoc = lockedDocumentResult?.docs[0]\n if (lockedDoc) {\n const lastEditedAt = new Date(lockedDoc?.updatedAt).getTime()\n const now = new Date().getTime()\n\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n\n const lockDurationInMilliseconds = lockDuration * 1000\n const currentUserId = req.user?.id\n\n // document is locked by another user and the lock hasn't expired\n if (\n lockedDoc.user?.value !== currentUserId &&\n now - lastEditedAt <= lockDurationInMilliseconds\n ) {\n throw new Locked(finalLockErrorMessage)\n }\n }\n }\n\n if (!shouldDeleteLock) {\n return\n }\n\n // Perform the delete operation regardless of overrideLock status\n await payload.db.deleteMany({\n collection: lockedDocumentsCollectionSlug,\n // Not passing req fails on postgres\n req: payload.db.name === 'mongoose' ? undefined : req,\n where: lockedDocumentQuery,\n })\n markTransactionWrite({ req: payload.db.name === 'mongoose' ? undefined : req })\n}\n\ntype BulkLockArgs = {\n collectionSlug: string\n ids: (number | string)[]\n req: PayloadRequest\n}\n\ntype DocumentLockState = {\n lockDocumentIDsByDocumentID: Map<string, (number | string)[]>\n lockedDocumentIDs: Set<string>\n}\n\ntype GetDocumentLockStateArgs = {\n lockDurationDefault?: number\n overrideLock?: boolean\n} & BulkLockArgs\n\nconst buildBulkLockedDocumentQuery = (collectionSlug: string, ids: (number | string)[]): Where => ({\n and: [{ 'document.relationTo': { equals: collectionSlug } }, { 'document.value': { in: ids } }],\n})\n\nconst isLockingAvailable = (collectionSlug: string, req: PayloadRequest): boolean => {\n const { payload } = req\n\n if (!payload.collections?.[lockedDocumentsCollectionSlug]) {\n return false\n }\n\n return payload.collections?.[collectionSlug]?.config?.lockDocuments !== false\n}\n\n/**\n * Batched counterpart to `checkDocumentLockStatus`. Resolves the lock state of every id with a\n * single query instead of one per document, and returns the ids that are locked by another user.\n * Callers are expected to report those ids as errors and leave them alone.\n */\nexport const getDocumentLockState = async ({\n collectionSlug,\n ids,\n lockDurationDefault = 300, // Default 5 minutes in seconds\n overrideLock = true,\n req,\n}: GetDocumentLockStateArgs): Promise<DocumentLockState> => {\n const lockState: DocumentLockState = {\n lockDocumentIDsByDocumentID: new Map<string, (number | string)[]>(),\n lockedDocumentIDs: new Set<string>(),\n }\n\n if (!ids.length || !isLockingAvailable(collectionSlug, req)) {\n return lockState\n }\n\n const { payload } = req\n const lockDocumentsProp = payload.collections?.[collectionSlug]?.config?.lockDocuments\n\n const lockedDocumentResult: PaginatedDocs<JsonObject & TypeWithID> = await payload.db.find({\n collection: lockedDocumentsCollectionSlug,\n limit: 0,\n pagination: false,\n req: payload.db.name === 'mongoose' ? undefined : req,\n sort: '-updatedAt',\n where: buildBulkLockedDocumentQuery(collectionSlug, ids),\n })\n\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n\n const lockDurationInMilliseconds = lockDuration * 1000\n const currentUserId = req.user?.id\n const now = new Date().getTime()\n const resolved = new Set<string>()\n\n for (const lockedDoc of lockedDocumentResult?.docs ?? []) {\n const documentId = String(lockedDoc.document?.value)\n const lockDocumentIDs = lockState.lockDocumentIDsByDocumentID.get(documentId)\n\n if (lockDocumentIDs) {\n lockDocumentIDs.push(lockedDoc.id)\n } else {\n lockState.lockDocumentIDsByDocumentID.set(documentId, [lockedDoc.id])\n }\n\n // Sorted by -updatedAt, so the first row seen for an id is its most recent lock\n if (resolved.has(documentId)) {\n continue\n }\n resolved.add(documentId)\n\n const lastEditedAt = new Date(lockedDoc?.updatedAt).getTime()\n\n // document is locked by another user and the lock hasn't expired\n if (\n !overrideLock &&\n lockedDoc.user?.value !== currentUserId &&\n now - lastEditedAt <= lockDurationInMilliseconds\n ) {\n lockState.lockedDocumentIDs.add(documentId)\n }\n }\n\n return lockState\n}\n\nexport const getLockedDocumentIds = async (\n args: GetDocumentLockStateArgs,\n): Promise<Set<string>> => {\n if (args.overrideLock ?? true) {\n return new Set<string>()\n }\n\n return (await getDocumentLockState(args)).lockedDocumentIDs\n}\n\n/**\n * Batched counterpart to the lock cleanup `checkDocumentLockStatus` performs, so that bulk\n * operations release every lock in one query instead of one per document.\n */\nexport const deleteDocumentLocks = async ({\n collectionSlug,\n ids,\n lockDocumentIDs,\n req,\n}: { lockDocumentIDs?: (number | string)[] } & BulkLockArgs): Promise<void> => {\n const { payload } = req\n\n if (\n !ids.length ||\n (lockDocumentIDs && !lockDocumentIDs.length) ||\n !isLockingAvailable(collectionSlug, req)\n ) {\n return\n }\n\n await payload.db.deleteMany({\n collection: lockedDocumentsCollectionSlug,\n // Not passing req fails on postgres\n req: payload.db.name === 'mongoose' ? undefined : req,\n where: lockDocumentIDs\n ? { id: { in: lockDocumentIDs } }\n : buildBulkLockedDocumentQuery(collectionSlug, ids),\n })\n markTransactionWrite({ req: payload.db.name === 'mongoose' ? undefined : req })\n}\n"],"names":["Locked","lockedDocumentsCollectionSlug","markTransactionWrite","checkDocumentLockStatus","id","collectionSlug","globalSlug","lockDurationDefault","lockErrorMessage","overrideLock","req","shouldDeleteLock","payload","collections","lockDocumentsProp","config","lockDocuments","globals","find","g","slug","isLockingEnabled","lockedDocumentQuery","and","equals","Error","defaultLockErrorMessage","finalLockErrorMessage","lockedDocumentResult","db","collection","limit","pagination","name","undefined","sort","where","lockedDoc","docs","lastEditedAt","Date","updatedAt","getTime","now","lockDuration","duration","lockDurationInMilliseconds","currentUserId","user","value","deleteMany","buildBulkLockedDocumentQuery","ids","in","isLockingAvailable","getDocumentLockState","lockState","lockDocumentIDsByDocumentID","Map","lockedDocumentIDs","Set","length","resolved","documentId","String","document","lockDocumentIDs","get","push","set","has","add","getLockedDocumentIds","args","deleteDocumentLocks"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/checkDocumentLockStatus.ts"],"sourcesContent":["import type { TypeWithID } from '../collections/config/types.js'\nimport type { PaginatedDocs } from '../database/types.js'\nimport type { JsonObject, PayloadRequest, Where } from '../types/index.js'\n\nimport { Locked } from '../errors/index.js'\nimport { lockedDocumentsCollectionSlug } from '../locked-documents/config.js'\n\ntype CheckDocumentLockStatusArgs = {\n collectionSlug?: string\n globalSlug?: string\n id?: number | string\n lockDurationDefault?: number\n lockErrorMessage?: string\n overrideLock?: boolean\n req: PayloadRequest\n}\n\nexport const checkDocumentLockStatus = async ({\n id,\n collectionSlug,\n globalSlug,\n lockDurationDefault = 300, // Default 5 minutes in seconds\n lockErrorMessage,\n overrideLock = true,\n req,\n}: CheckDocumentLockStatusArgs): Promise<void> => {\n const { payload } = req\n\n // Check if the locked-documents collection exists\n if (!payload.collections?.[lockedDocumentsCollectionSlug]) {\n // If the collection doesn't exist, locking is not available\n return\n }\n\n // Retrieve the lockDocuments property for either collection or global\n const lockDocumentsProp = collectionSlug\n ? payload.collections?.[collectionSlug]?.config?.lockDocuments\n : payload.config?.globals?.find((g) => g.slug === globalSlug)?.lockDocuments\n\n const isLockingEnabled = lockDocumentsProp !== false\n\n let lockedDocumentQuery = {}\n\n if (collectionSlug) {\n lockedDocumentQuery = {\n and: [\n { 'document.relationTo': { equals: collectionSlug } },\n { 'document.value': { equals: id } },\n ],\n }\n } else if (globalSlug) {\n lockedDocumentQuery = { globalSlug: { equals: globalSlug } }\n } else {\n throw new Error('Either collectionSlug or globalSlug must be provided.')\n }\n\n if (!isLockingEnabled) {\n return\n }\n\n // Only perform lock checks if overrideLock is false and locking is enabled\n if (!overrideLock) {\n const defaultLockErrorMessage = collectionSlug\n ? `Document with ID ${id} is currently locked by another user and cannot be modified.`\n : `Global document with slug \"${globalSlug}\" is currently locked by another user and cannot be modified.`\n\n const finalLockErrorMessage = lockErrorMessage || defaultLockErrorMessage\n\n const lockedDocumentResult: PaginatedDocs<JsonObject & TypeWithID> = await payload.db.find({\n collection: lockedDocumentsCollectionSlug,\n limit: 1,\n pagination: false,\n sort: '-updatedAt',\n where: lockedDocumentQuery,\n })\n\n // If there's a locked document, check lock conditions\n const lockedDoc = lockedDocumentResult?.docs[0]\n if (lockedDoc) {\n const lastEditedAt = new Date(lockedDoc?.updatedAt).getTime()\n const now = new Date().getTime()\n\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n\n const lockDurationInMilliseconds = lockDuration * 1000\n const currentUserId = req.user?.id\n\n // document is locked by another user and the lock hasn't expired\n if (\n lockedDoc.user?.value !== currentUserId &&\n now - lastEditedAt <= lockDurationInMilliseconds\n ) {\n throw new Locked(finalLockErrorMessage)\n }\n }\n }\n\n // Perform the delete operation regardless of overrideLock status\n await payload.db.deleteMany({\n collection: lockedDocumentsCollectionSlug,\n // Not passing req fails on postgres\n req: payload.db.name === 'mongoose' ? undefined : req,\n where: lockedDocumentQuery,\n })\n}\n\ntype BulkLockArgs = {\n collectionSlug: string\n ids: (number | string)[]\n req: PayloadRequest\n}\n\nconst buildBulkLockedDocumentQuery = (collectionSlug: string, ids: (number | string)[]): Where => ({\n and: [{ 'document.relationTo': { equals: collectionSlug } }, { 'document.value': { in: ids } }],\n})\n\nconst isLockingAvailable = (collectionSlug: string, req: PayloadRequest): boolean => {\n const { payload } = req\n\n if (!payload.collections?.[lockedDocumentsCollectionSlug]) {\n return false\n }\n\n return payload.collections?.[collectionSlug]?.config?.lockDocuments !== false\n}\n\n/**\n * Batched counterpart to `checkDocumentLockStatus`. Resolves the lock state of every id with a\n * single query instead of one per document, and returns the ids that are locked by another user.\n * Callers are expected to report those ids as errors and leave them alone.\n */\nexport const getLockedDocumentIds = async ({\n collectionSlug,\n ids,\n lockDurationDefault = 300, // Default 5 minutes in seconds\n overrideLock = true,\n req,\n}: {\n lockDurationDefault?: number\n overrideLock?: boolean\n} & BulkLockArgs): Promise<Set<string>> => {\n const lockedIds = new Set<string>()\n\n if (overrideLock || !ids.length || !isLockingAvailable(collectionSlug, req)) {\n return lockedIds\n }\n\n const { payload } = req\n const lockDocumentsProp = payload.collections?.[collectionSlug]?.config?.lockDocuments\n\n const lockedDocumentResult: PaginatedDocs<JsonObject & TypeWithID> = await payload.db.find({\n collection: lockedDocumentsCollectionSlug,\n limit: 0,\n pagination: false,\n sort: '-updatedAt',\n where: buildBulkLockedDocumentQuery(collectionSlug, ids),\n })\n\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n\n const lockDurationInMilliseconds = lockDuration * 1000\n const currentUserId = req.user?.id\n const now = new Date().getTime()\n const resolved = new Set<string>()\n\n for (const lockedDoc of lockedDocumentResult?.docs ?? []) {\n const documentId = String(lockedDoc.document?.value)\n\n // Sorted by -updatedAt, so the first row seen for an id is its most recent lock\n if (resolved.has(documentId)) {\n continue\n }\n resolved.add(documentId)\n\n const lastEditedAt = new Date(lockedDoc?.updatedAt).getTime()\n\n // document is locked by another user and the lock hasn't expired\n if (\n lockedDoc.user?.value !== currentUserId &&\n now - lastEditedAt <= lockDurationInMilliseconds\n ) {\n lockedIds.add(documentId)\n }\n }\n\n return lockedIds\n}\n\n/**\n * Batched counterpart to the lock cleanup `checkDocumentLockStatus` performs, so that bulk\n * operations release every lock in one query instead of one per document.\n */\nexport const deleteDocumentLocks = async ({\n collectionSlug,\n ids,\n req,\n}: BulkLockArgs): Promise<void> => {\n const { payload } = req\n\n if (!ids.length || !isLockingAvailable(collectionSlug, req)) {\n return\n }\n\n await payload.db.deleteMany({\n collection: lockedDocumentsCollectionSlug,\n // Not passing req fails on postgres\n req: payload.db.name === 'mongoose' ? undefined : req,\n where: buildBulkLockedDocumentQuery(collectionSlug, ids),\n })\n}\n"],"names":["Locked","lockedDocumentsCollectionSlug","checkDocumentLockStatus","id","collectionSlug","globalSlug","lockDurationDefault","lockErrorMessage","overrideLock","req","payload","collections","lockDocumentsProp","config","lockDocuments","globals","find","g","slug","isLockingEnabled","lockedDocumentQuery","and","equals","Error","defaultLockErrorMessage","finalLockErrorMessage","lockedDocumentResult","db","collection","limit","pagination","sort","where","lockedDoc","docs","lastEditedAt","Date","updatedAt","getTime","now","lockDuration","duration","lockDurationInMilliseconds","currentUserId","user","value","deleteMany","name","undefined","buildBulkLockedDocumentQuery","ids","in","isLockingAvailable","getLockedDocumentIds","lockedIds","Set","length","resolved","documentId","String","document","has","add","deleteDocumentLocks"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/cloneValidationRequest.ts"],"sourcesContent":["import type { RequestContext, User } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nconst sharedValidationRequestProperties = new Set([\n 'i18n',\n 'payload',\n 'server',\n 'signal',\n 't',\n 'transactionID',\n])\n\nexport function cloneValidationContext({\n context,\n}: {\n context: RequestContext | undefined\n}): RequestContext | undefined {\n return cloneValidationValue(context)\n}\n\nexport function cloneValidationData<TData>({ data }: { data: TData }): TData {\n return cloneValidationValue(data)\n}\n\nexport function cloneValidationRequest({\n request,\n}: {\n request: Partial<PayloadRequest> | undefined\n}): Partial<PayloadRequest> {\n if (!request) {\n return {}\n }\n\n const payloadRequest: Partial<PayloadRequest> = request\n const fetchRequest: Request | undefined =\n typeof Request !== 'undefined' && request instanceof Request ? request : undefined\n const canCloneFetchRequest = fetchRequest && !fetchRequest.bodyUsed\n let clonedRequest: Record<string, unknown>\n\n if (canCloneFetchRequest) {\n clonedRequest = fetchRequest.clone() as unknown as Record<string, unknown>\n } else {\n clonedRequest = {}\n }\n\n for (const [key, value] of Object.entries(payloadRequest)) {\n if (key === 'payloadDataLoader') {\n continue\n }\n\n if (key === 'file') {\n clonedRequest.file = cloneValidationFile(payloadRequest.file)\n continue\n }\n\n if (key === 'files') {\n clonedRequest.files = cloneValidationFiles(payloadRequest.files)\n continue\n }\n\n clonedRequest[key] = sharedValidationRequestProperties.has(key)\n ? value\n : cloneValidationValue(value)\n }\n\n Object.assign(clonedRequest, {\n context: cloneValidationValue(payloadRequest.context ?? {}),\n query: cloneValidationValue(payloadRequest.query ?? {}),\n routeParams: cloneValidationValue(payloadRequest.routeParams ?? {}),\n })\n\n if (!canCloneFetchRequest) {\n Object.assign(clonedRequest, {\n headers: cloneValidationValue(payloadRequest.headers),\n method: payloadRequest.method,\n signal: payloadRequest.signal,\n url: payloadRequest.url,\n })\n }\n\n return clonedRequest as Partial<PayloadRequest>\n}\n\nexport function cloneValidationUser({\n user,\n}: {\n user: null | undefined | User\n}): null | undefined | User {\n return cloneValidationValue(user)\n}\n\nfunction cloneValidationFile(file: PayloadRequest['file']): PayloadRequest['file'] {\n if (!file) {\n return file\n }\n\n const { data, ...metadata } = file\n\n return {\n ...cloneValidationValue(metadata),\n data,\n }\n}\n\nfunction cloneValidationFiles(files: PayloadRequest['files']): PayloadRequest['files'] {\n if (!files) {\n return files\n }\n\n return Object.fromEntries(\n Object.entries(files).map(([fieldName, fileOrFiles]) => [\n fieldName,\n Array.isArray(fileOrFiles)\n ? fileOrFiles.map((file) => cloneValidationFile(file)!)\n : cloneValidationFile(fileOrFiles)!,\n ]),\n )\n}\n\nfunction cloneValidationValue<T>(value: T, cache = new WeakMap<object, unknown>()): T {\n if ((typeof value !== 'object' && typeof value !== 'function') || value === null) {\n return value\n }\n\n if (typeof value === 'function' || value instanceof Promise) {\n return value\n }\n\n const objectValue = value as object\n const cachedValue = cache.get(objectValue)\n\n if (cachedValue) {\n return cachedValue as T\n }\n\n if (value instanceof Headers) {\n return new Headers(value) as T\n }\n\n if (value instanceof URLSearchParams) {\n return new URLSearchParams(value) as T\n }\n\n if (value instanceof URL) {\n return new URL(value) as T\n }\n\n if (value instanceof Date) {\n return new Date(value) as T\n }\n\n if (value instanceof RegExp) {\n return new RegExp(value.source, value.flags) as T\n }\n\n if (value instanceof ArrayBuffer) {\n return value.slice(0) as T\n }\n\n if (ArrayBuffer.isView(value)) {\n if (Buffer.isBuffer(value)) {\n return Buffer.from(value) as T\n }\n\n if (value instanceof DataView) {\n return new DataView(value.buffer.slice(0), value.byteOffset, value.byteLength) as T\n }\n\n return new (value.constructor as new (input: typeof value) => typeof value)(value)\n }\n\n if (value instanceof Map) {\n const clonedMap = new Map()\n cache.set(objectValue, clonedMap)\n for (const [key, mapValue] of value) {\n clonedMap.set(cloneValidationValue(key, cache), cloneValidationValue(mapValue, cache))\n }\n return clonedMap as T\n }\n\n if (value instanceof Set) {\n const clonedSet = new Set()\n cache.set(objectValue, clonedSet)\n for (const setValue of value) {\n clonedSet.add(cloneValidationValue(setValue, cache))\n }\n return clonedSet as T\n }\n\n if (typeof Blob !== 'undefined' && value instanceof Blob) {\n return value\n }\n\n const prototype = Object.getPrototypeOf(value)\n\n if (!Array.isArray(value) && prototype !== Object.prototype && prototype !== null) {\n return value\n }\n\n const clonedValue: Record<PropertyKey, unknown> | unknown[] = Array.isArray(value)\n ? []\n : Object.create(prototype)\n cache.set(objectValue, clonedValue)\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key)\n\n if (descriptor?.enumerable) {\n ;(clonedValue as Record<PropertyKey, unknown>)[key] = cloneValidationValue(\n (value as Record<PropertyKey, unknown>)[key],\n cache,\n )\n }\n }\n\n return clonedValue as T\n}\n"],"names":["sharedValidationRequestProperties","Set","cloneValidationContext","context","cloneValidationValue","cloneValidationData","data","cloneValidationRequest","request","payloadRequest","fetchRequest","Request","undefined","canCloneFetchRequest","bodyUsed","clonedRequest","clone","key","value","Object","entries","file","cloneValidationFile","files","cloneValidationFiles","has","assign","query","routeParams","headers","method","signal","url","cloneValidationUser","user","metadata","fromEntries","map","fieldName","fileOrFiles","Array","isArray","cache","WeakMap","Promise","objectValue","cachedValue","get","Headers","URLSearchParams","URL","Date","RegExp","source","flags","ArrayBuffer","slice","isView","Buffer","isBuffer","from","DataView","buffer","byteOffset","byteLength","Map","clonedMap","set","mapValue","clonedSet","setValue","add","Blob","prototype","getPrototypeOf","clonedValue","create","Reflect","ownKeys","descriptor","getOwnPropertyDescriptor","enumerable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/cloneValidationRequest.ts"],"sourcesContent":["import type { RequestContext, User } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nconst sharedValidationRequestProperties = new Set([\n 'i18n',\n 'payload',\n 'server',\n 'signal',\n 't',\n 'transactionID',\n])\n\nexport function cloneValidationContext({\n context,\n}: {\n context: RequestContext | undefined\n}): RequestContext | undefined {\n return cloneValidationValue(context)\n}\n\nexport function cloneValidationData<TData>({ data }: { data: TData }): TData {\n return cloneValidationValue(data)\n}\n\nexport function cloneValidationRequest({\n request,\n}: {\n request: Partial<PayloadRequest> | undefined\n}): Partial<PayloadRequest> {\n if (!request) {\n return {}\n }\n\n const payloadRequest: Partial<PayloadRequest> = request\n const fetchRequest: Request | undefined =\n typeof Request !== 'undefined' && request instanceof Request ? request : undefined\n const canCloneFetchRequest = fetchRequest && !fetchRequest.bodyUsed\n let clonedRequest: Record<string, unknown>\n\n if (canCloneFetchRequest) {\n clonedRequest = fetchRequest.clone() as unknown as Record<string, unknown>\n } else {\n clonedRequest = {}\n }\n\n for (const [key, value] of Object.entries(payloadRequest)) {\n if (key === 'payloadDataLoader') {\n continue\n }\n\n if (key === 'file') {\n clonedRequest.file = cloneValidationFile(payloadRequest.file)\n continue\n }\n\n if (key === 'files') {\n clonedRequest.files = cloneValidationFiles(payloadRequest.files)\n continue\n }\n\n clonedRequest[key] = sharedValidationRequestProperties.has(key)\n ? value\n : cloneValidationValue(value)\n }\n\n Object.assign(clonedRequest, {\n context: cloneValidationValue(payloadRequest.context ?? {}),\n query: cloneValidationValue(payloadRequest.query ?? {}),\n routeParams: cloneValidationValue(payloadRequest.routeParams ?? {}),\n })\n\n if (!canCloneFetchRequest) {\n Object.assign(clonedRequest, {\n headers: cloneValidationValue(payloadRequest.headers),\n method: payloadRequest.method,\n signal: payloadRequest.signal,\n url: payloadRequest.url,\n })\n }\n\n return clonedRequest\n}\n\nexport function cloneValidationUser({\n user,\n}: {\n user: null | undefined | User\n}): null | undefined | User {\n return cloneValidationValue(user)\n}\n\nfunction cloneValidationFile(file: PayloadRequest['file']): PayloadRequest['file'] {\n if (!file) {\n return file\n }\n\n const { data, ...metadata } = file\n\n return {\n ...cloneValidationValue(metadata),\n data,\n }\n}\n\nfunction cloneValidationFiles(files: PayloadRequest['files']): PayloadRequest['files'] {\n if (!files) {\n return files\n }\n\n return Object.fromEntries(\n Object.entries(files).map(([fieldName, fileOrFiles]) => [\n fieldName,\n Array.isArray(fileOrFiles)\n ? fileOrFiles.map((file) => cloneValidationFile(file)!)\n : cloneValidationFile(fileOrFiles)!,\n ]),\n )\n}\n\nfunction cloneValidationValue<T>(value: T, cache = new WeakMap<object, unknown>()): T {\n if ((typeof value !== 'object' && typeof value !== 'function') || value === null) {\n return value\n }\n\n if (typeof value === 'function' || value instanceof Promise) {\n return value\n }\n\n const objectValue = value as object\n const cachedValue = cache.get(objectValue)\n\n if (cachedValue) {\n return cachedValue as T\n }\n\n if (value instanceof Headers) {\n return new Headers(value) as T\n }\n\n if (value instanceof URLSearchParams) {\n return new URLSearchParams(value) as T\n }\n\n if (value instanceof URL) {\n return new URL(value) as T\n }\n\n if (value instanceof Date) {\n return new Date(value) as T\n }\n\n if (value instanceof RegExp) {\n return new RegExp(value.source, value.flags) as T\n }\n\n if (value instanceof ArrayBuffer) {\n return value.slice(0) as T\n }\n\n if (ArrayBuffer.isView(value)) {\n if (Buffer.isBuffer(value)) {\n return Buffer.from(value) as T\n }\n\n if (value instanceof DataView) {\n return new DataView(value.buffer.slice(0), value.byteOffset, value.byteLength) as T\n }\n\n return new (value.constructor as new (input: typeof value) => typeof value)(value)\n }\n\n if (value instanceof Map) {\n const clonedMap = new Map()\n cache.set(objectValue, clonedMap)\n for (const [key, mapValue] of value) {\n clonedMap.set(cloneValidationValue(key, cache), cloneValidationValue(mapValue, cache))\n }\n return clonedMap as T\n }\n\n if (value instanceof Set) {\n const clonedSet = new Set()\n cache.set(objectValue, clonedSet)\n for (const setValue of value) {\n clonedSet.add(cloneValidationValue(setValue, cache))\n }\n return clonedSet as T\n }\n\n if (typeof Blob !== 'undefined' && value instanceof Blob) {\n return value\n }\n\n const prototype = Object.getPrototypeOf(value)\n\n if (!Array.isArray(value) && prototype !== Object.prototype && prototype !== null) {\n return value\n }\n\n const clonedValue: Record<PropertyKey, unknown> | unknown[] = Array.isArray(value)\n ? []\n : Object.create(prototype)\n cache.set(objectValue, clonedValue)\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key)\n\n if (descriptor?.enumerable) {\n ;(clonedValue as Record<PropertyKey, unknown>)[key] = cloneValidationValue(\n (value as Record<PropertyKey, unknown>)[key],\n cache,\n )\n }\n }\n\n return clonedValue as T\n}\n"],"names":["sharedValidationRequestProperties","Set","cloneValidationContext","context","cloneValidationValue","cloneValidationData","data","cloneValidationRequest","request","payloadRequest","fetchRequest","Request","undefined","canCloneFetchRequest","bodyUsed","clonedRequest","clone","key","value","Object","entries","file","cloneValidationFile","files","cloneValidationFiles","has","assign","query","routeParams","headers","method","signal","url","cloneValidationUser","user","metadata","fromEntries","map","fieldName","fileOrFiles","Array","isArray","cache","WeakMap","Promise","objectValue","cachedValue","get","Headers","URLSearchParams","URL","Date","RegExp","source","flags","ArrayBuffer","slice","isView","Buffer","isBuffer","from","DataView","buffer","byteOffset","byteLength","Map","clonedMap","set","mapValue","clonedSet","setValue","add","Blob","prototype","getPrototypeOf","clonedValue","create","Reflect","ownKeys","descriptor","getOwnPropertyDescriptor","enumerable"],"mappings":"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"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import type { MarkRequired } from 'ts-essentials';
|
|
2
2
|
import type { PayloadRequest } from '../types/index.js';
|
|
3
|
-
export declare const isUnknownTransactionCommitResult: (error: unknown) => boolean;
|
|
4
|
-
export declare const shouldRollbackTransactionArtifacts: ({ error }: {
|
|
5
|
-
error: unknown;
|
|
6
|
-
}) => boolean;
|
|
7
3
|
/**
|
|
8
4
|
* complete a transaction calling adapter db.commitTransaction and delete the transactionID from req
|
|
9
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/utilities/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/utilities/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIvD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,GACpD,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -1,53 +1,13 @@
|
|
|
1
1
|
import { commitFileOperations } from '../uploads/fileVersioning/fileOperationManager.js';
|
|
2
|
-
import { clearTransactionCommitCallbacks, clearTransactionRollbackCallbacks, runTransactionCommitCallbacks } from './transactionCallbacks.js';
|
|
3
|
-
export const isUnknownTransactionCommitResult = (error)=>{
|
|
4
|
-
if (!error || typeof error !== 'object') {
|
|
5
|
-
return false;
|
|
6
|
-
}
|
|
7
|
-
const labeledError = error;
|
|
8
|
-
return labeledError.hasErrorLabel?.('UnknownTransactionCommitResult') === true || labeledError.errorLabels?.includes('UnknownTransactionCommitResult') === true;
|
|
9
|
-
};
|
|
10
|
-
export const shouldRollbackTransactionArtifacts = ({ error })=>!isUnknownTransactionCommitResult(error);
|
|
11
2
|
/**
|
|
12
3
|
* complete a transaction calling adapter db.commitTransaction and delete the transactionID from req
|
|
13
4
|
*/ export async function commitTransaction(req) {
|
|
14
5
|
const { payload, transactionID } = req;
|
|
15
|
-
|
|
16
|
-
try {
|
|
17
|
-
await payload.db.commitTransaction(resolvedTransactionID);
|
|
18
|
-
} catch (error) {
|
|
19
|
-
if (isUnknownTransactionCommitResult(error)) {
|
|
20
|
-
delete req.transactionID;
|
|
21
|
-
clearTransactionCommitCallbacks({
|
|
22
|
-
req,
|
|
23
|
-
transactionID: resolvedTransactionID
|
|
24
|
-
});
|
|
25
|
-
clearTransactionRollbackCallbacks({
|
|
26
|
-
req,
|
|
27
|
-
transactionID: resolvedTransactionID
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
throw error;
|
|
31
|
-
}
|
|
6
|
+
await payload.db.commitTransaction(transactionID);
|
|
32
7
|
delete req.transactionID;
|
|
33
8
|
await commitFileOperations({
|
|
34
9
|
req: req
|
|
35
10
|
});
|
|
36
|
-
clearTransactionRollbackCallbacks({
|
|
37
|
-
req,
|
|
38
|
-
transactionID: resolvedTransactionID
|
|
39
|
-
});
|
|
40
|
-
try {
|
|
41
|
-
await runTransactionCommitCallbacks({
|
|
42
|
-
req,
|
|
43
|
-
transactionID: resolvedTransactionID
|
|
44
|
-
});
|
|
45
|
-
} catch (err) {
|
|
46
|
-
payload.logger.error({
|
|
47
|
-
err,
|
|
48
|
-
msg: 'A post-commit cleanup task failed.'
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
11
|
}
|
|
52
12
|
|
|
53
13
|
//# sourceMappingURL=commitTransaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/commitTransaction.ts"],"sourcesContent":["import type { MarkRequired } from 'ts-essentials'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { commitFileOperations } from '../uploads/fileVersioning/fileOperationManager.js'\
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/commitTransaction.ts"],"sourcesContent":["import type { MarkRequired } from 'ts-essentials'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { commitFileOperations } from '../uploads/fileVersioning/fileOperationManager.js'\n\n/**\n * complete a transaction calling adapter db.commitTransaction and delete the transactionID from req\n */\nexport async function commitTransaction(\n req: MarkRequired<Partial<PayloadRequest>, 'payload'>,\n): Promise<void> {\n const { payload, transactionID } = req\n\n await payload.db.commitTransaction(transactionID!)\n delete req.transactionID\n await commitFileOperations({ req: req as PayloadRequest })\n}\n"],"names":["commitFileOperations","commitTransaction","req","payload","transactionID","db"],"mappings":"AAIA,SAASA,oBAAoB,QAAQ,oDAAmD;AAExF;;CAEC,GACD,OAAO,eAAeC,kBACpBC,GAAqD;IAErD,MAAM,EAAEC,OAAO,EAAEC,aAAa,EAAE,GAAGF;IAEnC,MAAMC,QAAQE,EAAE,CAACJ,iBAAiB,CAACG;IACnC,OAAOF,IAAIE,aAAa;IACxB,MAAMJ,qBAAqB;QAAEE,KAAKA;IAAsB;AAC1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configToJSONSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/configToJSONSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAKnE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAsB,cAAc,EAAU,MAAM,2BAA2B,CAAA;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAUvE,0FAA0F;AAC1F,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAA;AAiU9C;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,OAAO,GAClB,mBAAmB,GAAG,mBAAmB,EAAE,CAO7C;AA4BD,KAAK,yBAAyB,GAAG;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;;OAKG;IACH,sBAAsB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAA;IAC9D,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,8FAA8F;IAC9F,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAClD;;;;OAIG;IACH,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAClC,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,sBAAsB,EACtB,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,IAAI,EACJ,wBAAwB,EACxB,qBAAqB,EACrB,OAAkB,GACnB,EAAE,sBAAsB,GAAG;IAC1B,UAAU,EAAE;QACV,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;KACzB,CAAA;IACD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,
|
|
1
|
+
{"version":3,"file":"configToJSONSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/configToJSONSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -547,15 +547,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
547
547
|
}
|
|
548
548
|
case 'json':
|
|
549
549
|
{
|
|
550
|
-
|
|
551
|
-
fieldSchema = jsonFieldSchema ? isRequired ? jsonFieldSchema : {
|
|
552
|
-
anyOf: [
|
|
553
|
-
jsonFieldSchema,
|
|
554
|
-
{
|
|
555
|
-
type: 'null'
|
|
556
|
-
}
|
|
557
|
-
]
|
|
558
|
-
} : {
|
|
550
|
+
fieldSchema = field.jsonSchema?.schema || {
|
|
559
551
|
...baseFieldSchema,
|
|
560
552
|
type: [
|
|
561
553
|
'object',
|
|
@@ -726,7 +718,7 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
726
718
|
throw new Error('Attempted to access unsanitized rich text editor.');
|
|
727
719
|
}
|
|
728
720
|
if (field.editor.jsonSchema) {
|
|
729
|
-
|
|
721
|
+
fieldSchema = {
|
|
730
722
|
...baseFieldSchema,
|
|
731
723
|
...field.editor.jsonSchema({
|
|
732
724
|
collectionIDFieldTypes,
|
|
@@ -739,14 +731,6 @@ export function fieldsToJSONSchema({ collectionIDFieldTypes, config, fields, for
|
|
|
739
731
|
variant
|
|
740
732
|
})
|
|
741
733
|
};
|
|
742
|
-
fieldSchema = isRequired ? richTextSchema : {
|
|
743
|
-
anyOf: [
|
|
744
|
-
richTextSchema,
|
|
745
|
-
{
|
|
746
|
-
type: 'null'
|
|
747
|
-
}
|
|
748
|
-
]
|
|
749
|
-
};
|
|
750
734
|
} else {
|
|
751
735
|
// Maintain backwards compatibility with existing rich text editors
|
|
752
736
|
fieldSchema = {
|