payload 3.89.0-internal.95c9cba → 3.90.0
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/forms/Field.d.ts +2 -0
- package/dist/admin/forms/Field.d.ts.map +1 -1
- package/dist/admin/forms/Field.js.map +1 -1
- package/dist/admin/forms/Form.d.ts +2 -0
- package/dist/admin/forms/Form.d.ts.map +1 -1
- package/dist/admin/forms/Form.js.map +1 -1
- package/dist/admin/functions/index.d.ts +3 -1
- package/dist/admin/functions/index.d.ts.map +1 -1
- package/dist/admin/functions/index.js.map +1 -1
- package/dist/admin/views/dashboard.d.ts +1 -1
- package/dist/admin/views/dashboard.d.ts.map +1 -1
- package/dist/admin/views/dashboard.js.map +1 -1
- package/dist/auth/applyUserReadAccess.d.ts +15 -0
- package/dist/auth/applyUserReadAccess.d.ts.map +1 -0
- package/dist/auth/applyUserReadAccess.js +41 -0
- package/dist/auth/applyUserReadAccess.js.map +1 -0
- package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js +20 -0
- package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js.map +1 -0
- package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/encryptAPIKey.js +16 -0
- package/dist/auth/baseFields/apiKey/encryptAPIKey.js.map +1 -0
- package/dist/auth/baseFields/apiKey/index.d.ts +6 -0
- package/dist/auth/baseFields/apiKey/index.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/index.js +112 -0
- package/dist/auth/baseFields/apiKey/index.js.map +1 -0
- package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/omitAPIKey.js +8 -0
- package/dist/auth/baseFields/apiKey/omitAPIKey.js.map +1 -0
- package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js +5 -0
- package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js.map +1 -0
- package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js +5 -0
- package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js.map +1 -0
- package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts +4 -0
- package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts.map +1 -0
- package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js +17 -0
- package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js.map +1 -0
- package/dist/auth/baseFields/auth.d.ts +1 -0
- package/dist/auth/baseFields/auth.d.ts.map +1 -1
- package/dist/auth/baseFields/auth.js +9 -0
- package/dist/auth/baseFields/auth.js.map +1 -1
- package/dist/auth/defaultUnlockAccess.d.ts +3 -0
- package/dist/auth/defaultUnlockAccess.d.ts.map +1 -0
- package/dist/auth/defaultUnlockAccess.js +8 -0
- package/dist/auth/defaultUnlockAccess.js.map +1 -0
- package/dist/auth/endpoints/index.d.ts +1 -0
- package/dist/auth/endpoints/index.d.ts.map +1 -1
- package/dist/auth/endpoints/index.js +8 -0
- package/dist/auth/endpoints/index.js.map +1 -1
- package/dist/auth/endpoints/revealAPIKey.d.ts +7 -0
- package/dist/auth/endpoints/revealAPIKey.d.ts.map +1 -0
- package/dist/auth/endpoints/revealAPIKey.js +120 -0
- package/dist/auth/endpoints/revealAPIKey.js.map +1 -0
- package/dist/auth/executeAccess.d.ts +3 -1
- package/dist/auth/executeAccess.d.ts.map +1 -1
- package/dist/auth/executeAccess.js +2 -1
- package/dist/auth/executeAccess.js.map +1 -1
- package/dist/auth/getAuthFields.d.ts +1 -1
- package/dist/auth/getAuthFields.d.ts.map +1 -1
- package/dist/auth/getAuthFields.js +7 -4
- package/dist/auth/getAuthFields.js.map +1 -1
- package/dist/auth/getFieldsToSign.d.ts.map +1 -1
- package/dist/auth/getFieldsToSign.js +17 -10
- package/dist/auth/getFieldsToSign.js.map +1 -1
- package/dist/auth/getFieldsToSign.spec.js +114 -0
- package/dist/auth/getFieldsToSign.spec.js.map +1 -0
- package/dist/auth/jwt.d.ts.map +1 -1
- package/dist/auth/jwt.js +2 -0
- package/dist/auth/jwt.js.map +1 -1
- package/dist/auth/jwt.spec.js +24 -0
- package/dist/auth/jwt.spec.js.map +1 -0
- package/dist/auth/jwtAuth.d.ts +9 -0
- package/dist/auth/jwtAuth.d.ts.map +1 -0
- package/dist/auth/jwtAuth.js +8 -0
- package/dist/auth/jwtAuth.js.map +1 -0
- package/dist/auth/operations/auth.d.ts.map +1 -1
- package/dist/auth/operations/auth.js +2 -1
- package/dist/auth/operations/auth.js.map +1 -1
- package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
- package/dist/auth/operations/forgotPassword.js +95 -7
- package/dist/auth/operations/forgotPassword.js.map +1 -1
- package/dist/auth/operations/local/auth.js +3 -1
- package/dist/auth/operations/local/auth.js.map +1 -1
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/login.js +48 -26
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/operations/refresh.d.ts.map +1 -1
- package/dist/auth/operations/refresh.js +32 -9
- package/dist/auth/operations/refresh.js.map +1 -1
- package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
- package/dist/auth/operations/registerFirstUser.js +3 -4
- package/dist/auth/operations/registerFirstUser.js.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.js +31 -22
- package/dist/auth/operations/resetPassword.js.map +1 -1
- package/dist/auth/operations/unlock.d.ts.map +1 -1
- package/dist/auth/operations/unlock.js +1 -0
- package/dist/auth/operations/unlock.js.map +1 -1
- package/dist/auth/strategies/apiKey.d.ts.map +1 -1
- package/dist/auth/strategies/apiKey.js +15 -1
- package/dist/auth/strategies/apiKey.js.map +1 -1
- package/dist/auth/strategies/jwt.d.ts.map +1 -1
- package/dist/auth/strategies/jwt.js +61 -10
- package/dist/auth/strategies/jwt.js.map +1 -1
- package/dist/auth/strategies/jwt.spec.js +281 -0
- package/dist/auth/strategies/jwt.spec.js.map +1 -0
- package/dist/auth/strategies/local/authenticate.d.ts +5 -1
- package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
- package/dist/auth/strategies/local/authenticate.js +8 -3
- package/dist/auth/strategies/local/authenticate.js.map +1 -1
- package/dist/auth/strategies/local/authenticate.spec.js +37 -10
- package/dist/auth/strategies/local/authenticate.spec.js.map +1 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts +9 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.js +61 -34
- package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
- package/dist/auth/types.d.ts +16 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/collections/config/client.d.ts +1 -0
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +3 -0
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/defaults.d.ts.map +1 -1
- package/dist/collections/config/defaults.js +4 -2
- 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 +17 -6
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/endpoints/index.d.ts +1 -0
- package/dist/collections/endpoints/index.d.ts.map +1 -1
- package/dist/collections/endpoints/index.js +6 -5
- package/dist/collections/endpoints/index.js.map +1 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +105 -8
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/deleteByID.js +13 -13
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/findDistinct.js +96 -18
- package/dist/collections/operations/findDistinct.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/restoreVersion.js +47 -13
- 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 +123 -23
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +62 -2
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +71 -15
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/config/orderable/index.d.ts.map +1 -1
- package/dist/config/orderable/index.js +67 -14
- package/dist/config/orderable/index.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +1 -1
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +13 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/getLocalizedPaths.d.ts +2 -1
- package/dist/database/getLocalizedPaths.d.ts.map +1 -1
- package/dist/database/getLocalizedPaths.js +12 -3
- package/dist/database/getLocalizedPaths.js.map +1 -1
- package/dist/database/isNestedRelationshipQuery.d.ts +9 -0
- package/dist/database/isNestedRelationshipQuery.d.ts.map +1 -0
- package/dist/database/isNestedRelationshipQuery.js +14 -0
- package/dist/database/isNestedRelationshipQuery.js.map +1 -0
- package/dist/database/prefixWherePaths.d.ts +6 -0
- package/dist/database/prefixWherePaths.d.ts.map +1 -0
- package/dist/database/prefixWherePaths.js +19 -0
- package/dist/database/prefixWherePaths.js.map +1 -0
- package/dist/database/prefixWherePaths.spec.js +46 -0
- package/dist/database/prefixWherePaths.spec.js.map +1 -0
- package/dist/database/queryValidation/validateQueryPaths.d.ts +2 -1
- package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
- package/dist/database/queryValidation/validateQueryPaths.js +4 -1
- package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
- package/dist/database/queryValidation/validateSearchParams.d.ts +2 -1
- package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
- package/dist/database/queryValidation/validateSearchParams.js +82 -4
- package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
- package/dist/database/types.d.ts +5 -0
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js.map +1 -1
- package/dist/email/normalizeSendEmailOptions.js.map +1 -1
- package/dist/email/types.d.ts +4 -1
- package/dist/email/types.d.ts.map +1 -1
- package/dist/email/types.js.map +1 -1
- package/dist/exports/internal.d.ts +7 -0
- package/dist/exports/internal.d.ts.map +1 -1
- package/dist/exports/internal.js +7 -1
- package/dist/exports/internal.js.map +1 -1
- package/dist/exports/shared.d.ts +3 -0
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +3 -0
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/config/types.d.ts +7 -5
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/beforeChange/index.d.ts +7 -1
- package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/index.js +4 -2
- package/dist/fields/hooks/beforeChange/index.js.map +1 -1
- package/dist/fields/hooks/beforeChange/index.spec.js +206 -0
- package/dist/fields/hooks/beforeChange/index.spec.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 +51 -9
- 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 +3 -2
- package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.js +4 -0
- package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts +2 -1
- package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/getFallbackValue.js +2 -2
- package/dist/fields/hooks/beforeValidate/getFallbackValue.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.d.ts +6 -1
- package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.js +3 -1
- package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/index.spec.js +90 -0
- package/dist/fields/hooks/beforeValidate/index.spec.js.map +1 -0
- package/dist/fields/hooks/beforeValidate/promise.d.ts +6 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.js +23 -8
- package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +6 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.js +3 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +3 -1
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/restoreVersion.js +45 -11
- 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 +95 -16
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/index.bundled.d.ts +146 -48
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/preferences/config.d.ts.map +1 -1
- package/dist/preferences/config.js +2 -1
- package/dist/preferences/config.js.map +1 -1
- package/dist/query-presets/access.d.ts.map +1 -1
- package/dist/query-presets/access.js +2 -1
- package/dist/query-presets/access.js.map +1 -1
- package/dist/queues/config/collection.d.ts.map +1 -1
- package/dist/queues/config/collection.js +6 -0
- package/dist/queues/config/collection.js.map +1 -1
- package/dist/queues/config/types/index.d.ts +4 -1
- package/dist/queues/config/types/index.d.ts.map +1 -1
- package/dist/queues/config/types/index.js.map +1 -1
- package/dist/queues/endpoints/handleSchedules.d.ts.map +1 -1
- package/dist/queues/endpoints/handleSchedules.js +2 -1
- package/dist/queues/endpoints/handleSchedules.js.map +1 -1
- package/dist/queues/endpoints/run.d.ts.map +1 -1
- package/dist/queues/endpoints/run.js +2 -1
- package/dist/queues/endpoints/run.js.map +1 -1
- package/dist/uploads/assertClientUploadAccess.d.ts +7 -0
- package/dist/uploads/assertClientUploadAccess.d.ts.map +1 -0
- package/dist/uploads/assertClientUploadAccess.js +27 -0
- package/dist/uploads/assertClientUploadAccess.js.map +1 -0
- package/dist/uploads/assertClientUploadAllowed.d.ts +11 -0
- package/dist/uploads/assertClientUploadAllowed.d.ts.map +1 -0
- package/dist/uploads/assertClientUploadAllowed.js +46 -0
- package/dist/uploads/assertClientUploadAllowed.js.map +1 -0
- package/dist/uploads/assertClientUploadAllowed.spec.js +91 -0
- package/dist/uploads/assertClientUploadAllowed.spec.js.map +1 -0
- package/dist/uploads/checkFileRestrictions.d.ts +4 -1
- package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
- package/dist/uploads/checkFileRestrictions.js +66 -26
- package/dist/uploads/checkFileRestrictions.js.map +1 -1
- package/dist/uploads/clientUploadReceipt.d.ts +23 -0
- package/dist/uploads/clientUploadReceipt.d.ts.map +1 -0
- package/dist/uploads/clientUploadReceipt.js +55 -0
- package/dist/uploads/clientUploadReceipt.js.map +1 -0
- package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
- package/dist/uploads/deleteAssociatedFiles.js +33 -8
- package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
- package/dist/uploads/deleteAssociatedFiles.spec.js +124 -0
- package/dist/uploads/deleteAssociatedFiles.spec.js.map +1 -0
- package/dist/uploads/detectSvgFromXml.d.ts +1 -3
- package/dist/uploads/detectSvgFromXml.d.ts.map +1 -1
- package/dist/uploads/detectSvgFromXml.js +3 -40
- package/dist/uploads/detectSvgFromXml.js.map +1 -1
- package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFile.js +5 -3
- package/dist/uploads/endpoints/getFile.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/handlers.d.ts +2 -2
- package/dist/uploads/fetchAPI-multipart/handlers.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/handlers.js +18 -5
- package/dist/uploads/fetchAPI-multipart/handlers.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/index.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/index.js +24 -2
- package/dist/uploads/fetchAPI-multipart/index.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts +0 -6
- package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.js +146 -126
- package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
- package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js +663 -0
- package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js.map +1 -0
- package/dist/uploads/generateFileData.d.ts +3 -1
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +29 -16
- package/dist/uploads/generateFileData.js.map +1 -1
- package/dist/uploads/getBaseFields.d.ts.map +1 -1
- package/dist/uploads/getBaseFields.js +3 -1
- package/dist/uploads/getBaseFields.js.map +1 -1
- package/dist/uploads/getExternalFile.d.ts +1 -1
- package/dist/uploads/getExternalFile.d.ts.map +1 -1
- package/dist/uploads/getExternalFile.js +60 -15
- package/dist/uploads/getExternalFile.js.map +1 -1
- package/dist/uploads/getFileFromClientUpload.d.ts +2 -2
- package/dist/uploads/getFileFromClientUpload.d.ts.map +1 -1
- package/dist/uploads/getFileFromClientUpload.js +4 -4
- package/dist/uploads/getFileFromClientUpload.js.map +1 -1
- package/dist/uploads/getFileFromClientUpload.spec.js +62 -0
- package/dist/uploads/getFileFromClientUpload.spec.js.map +1 -1
- package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
- package/dist/uploads/getFileTypeFallback.js +3 -1
- package/dist/uploads/getFileTypeFallback.js.map +1 -1
- package/dist/uploads/getFileTypeIdentity.d.ts +19 -0
- package/dist/uploads/getFileTypeIdentity.d.ts.map +1 -0
- package/dist/uploads/getFileTypeIdentity.js +34 -0
- package/dist/uploads/getFileTypeIdentity.js.map +1 -0
- package/dist/uploads/getFileTypeIdentity.spec.js +43 -0
- package/dist/uploads/getFileTypeIdentity.spec.js.map +1 -0
- package/dist/uploads/isProcessableImage.d.ts +2 -0
- package/dist/uploads/isProcessableImage.d.ts.map +1 -0
- package/dist/uploads/isProcessableImage.js +7 -0
- package/dist/uploads/isProcessableImage.js.map +1 -0
- package/dist/uploads/safeFetch.d.ts.map +1 -1
- package/dist/uploads/safeFetch.js +3 -2
- package/dist/uploads/safeFetch.js.map +1 -1
- package/dist/uploads/sanitizeUploadData.d.ts +26 -0
- package/dist/uploads/sanitizeUploadData.d.ts.map +1 -0
- package/dist/uploads/sanitizeUploadData.js +159 -0
- package/dist/uploads/sanitizeUploadData.js.map +1 -0
- package/dist/uploads/sanitizeUploadData.spec.js +255 -0
- package/dist/uploads/sanitizeUploadData.spec.js.map +1 -0
- package/dist/uploads/types.d.ts +11 -3
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js.map +1 -1
- package/dist/uploads/unlinkClientUploadTempFile.d.ts +20 -0
- package/dist/uploads/unlinkClientUploadTempFile.d.ts.map +1 -0
- package/dist/uploads/unlinkClientUploadTempFile.js +30 -0
- package/dist/uploads/unlinkClientUploadTempFile.js.map +1 -0
- package/dist/uploads/unlinkTempFiles.d.ts.map +1 -1
- package/dist/uploads/unlinkTempFiles.js +7 -9
- package/dist/uploads/unlinkTempFiles.js.map +1 -1
- package/dist/uploads/unlinkTempFiles.spec.js +61 -1
- package/dist/uploads/unlinkTempFiles.spec.js.map +1 -1
- package/dist/uploads/uploadContentSecurityPolicy.d.ts +2 -0
- package/dist/uploads/uploadContentSecurityPolicy.d.ts.map +1 -0
- package/dist/uploads/uploadContentSecurityPolicy.js +3 -0
- package/dist/uploads/uploadContentSecurityPolicy.js.map +1 -0
- package/dist/uploads/validateISOBaseMediaFile.d.ts +4 -0
- package/dist/uploads/validateISOBaseMediaFile.d.ts.map +1 -0
- package/dist/uploads/validateISOBaseMediaFile.js +91 -0
- package/dist/uploads/validateISOBaseMediaFile.js.map +1 -0
- package/dist/uploads/validateISOBaseMediaFile.spec.js +130 -0
- package/dist/uploads/validateISOBaseMediaFile.spec.js.map +1 -0
- package/dist/uploads/validateSvg.d.ts +10 -4
- package/dist/uploads/validateSvg.d.ts.map +1 -1
- package/dist/uploads/validateSvg.js +280 -40
- package/dist/uploads/validateSvg.js.map +1 -1
- package/dist/uploads/validateSvg.spec.js +123 -0
- package/dist/uploads/validateSvg.spec.js.map +1 -0
- package/dist/uploads/validateUploadFilename.d.ts +3 -0
- package/dist/uploads/validateUploadFilename.d.ts.map +1 -0
- package/dist/uploads/validateUploadFilename.js +13 -0
- package/dist/uploads/validateUploadFilename.js.map +1 -0
- package/dist/uploads/validateUploadFilename.spec.js +24 -0
- package/dist/uploads/validateUploadFilename.spec.js.map +1 -0
- package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.js +28 -1
- package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.spec.js +158 -0
- package/dist/utilities/addDataAndFileToRequest.spec.js.map +1 -1
- package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
- package/dist/utilities/createPayloadRequest.js +2 -1
- package/dist/utilities/createPayloadRequest.js.map +1 -1
- package/dist/utilities/deepCopyObject.d.ts.map +1 -1
- package/dist/utilities/deepCopyObject.js +110 -19
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/dist/utilities/deepCopyObject.spec.js +216 -0
- package/dist/utilities/deepCopyObject.spec.js.map +1 -0
- package/dist/utilities/fieldPath.d.ts +13 -0
- package/dist/utilities/fieldPath.d.ts.map +1 -0
- package/dist/utilities/fieldPath.js +51 -0
- package/dist/utilities/fieldPath.js.map +1 -0
- package/dist/utilities/fieldPath.spec.js +155 -0
- package/dist/utilities/fieldPath.spec.js.map +1 -0
- package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js +2 -0
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
- package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
- package/dist/utilities/getObjectDotNotation.js +7 -1
- package/dist/utilities/getObjectDotNotation.js.map +1 -1
- package/dist/utilities/getObjectDotNotation.spec.js +33 -0
- package/dist/utilities/getObjectDotNotation.spec.js.map +1 -0
- package/dist/utilities/getSafeRedirect.spec.js +14 -0
- package/dist/utilities/getSafeRedirect.spec.js.map +1 -1
- package/dist/utilities/getTopLevelFieldNames.d.ts +2 -0
- package/dist/utilities/getTopLevelFieldNames.d.ts.map +1 -0
- package/dist/utilities/getTopLevelFieldNames.js +3 -0
- package/dist/utilities/getTopLevelFieldNames.js.map +1 -0
- package/dist/utilities/getTopLevelFieldNames.spec.js +18 -0
- package/dist/utilities/getTopLevelFieldNames.spec.js.map +1 -0
- package/dist/utilities/handleEndpoints.js +1 -1
- package/dist/utilities/handleEndpoints.js.map +1 -1
- package/dist/utilities/parseParams/index.d.ts.map +1 -1
- package/dist/utilities/parseParams/index.js +3 -1
- package/dist/utilities/parseParams/index.js.map +1 -1
- package/dist/utilities/parseParams/index.spec.js +8 -0
- package/dist/utilities/parseParams/index.spec.js.map +1 -1
- package/dist/utilities/traverseFields.d.ts.map +1 -1
- package/dist/utilities/traverseFields.js +5 -14
- package/dist/utilities/traverseFields.js.map +1 -1
- package/dist/utilities/unflatten.d.ts.map +1 -1
- package/dist/utilities/unflatten.js +21 -9
- package/dist/utilities/unflatten.js.map +1 -1
- package/dist/utilities/unflatten.spec.js +38 -0
- package/dist/utilities/unflatten.spec.js.map +1 -0
- package/dist/utilities/wrapInternalEndpoints.d.ts.map +1 -1
- package/dist/utilities/wrapInternalEndpoints.js +10 -3
- package/dist/utilities/wrapInternalEndpoints.js.map +1 -1
- package/dist/utilities/wrapInternalEndpoints.spec.js +124 -0
- package/dist/utilities/wrapInternalEndpoints.spec.js.map +1 -0
- package/dist/versions/allLocalesPublicationStatus.d.ts +38 -0
- package/dist/versions/allLocalesPublicationStatus.d.ts.map +1 -0
- package/dist/versions/allLocalesPublicationStatus.js +57 -0
- package/dist/versions/allLocalesPublicationStatus.js.map +1 -0
- package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
- package/dist/versions/getLatestGlobalVersion.js +10 -2
- package/dist/versions/getLatestGlobalVersion.js.map +1 -1
- package/dist/versions/getRestoredStatusesToAuthorize.d.ts +9 -0
- package/dist/versions/getRestoredStatusesToAuthorize.d.ts.map +1 -0
- package/dist/versions/getRestoredStatusesToAuthorize.js +22 -0
- package/dist/versions/getRestoredStatusesToAuthorize.js.map +1 -0
- package/dist/versions/getRestoredStatusesToAuthorize.spec.js +50 -0
- package/dist/versions/getRestoredStatusesToAuthorize.spec.js.map +1 -0
- package/dist/versions/schedule/job.d.ts +2 -2
- package/dist/versions/schedule/job.d.ts.map +1 -1
- package/dist/versions/schedule/job.js +11 -7
- package/dist/versions/schedule/job.js.map +1 -1
- package/dist/versions/schedule/types.d.ts +5 -1
- package/dist/versions/schedule/types.d.ts.map +1 -1
- package/dist/versions/schedule/types.js.map +1 -1
- package/package.json +4 -2
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { executeAccess } from '../../auth/executeAccess.js';
|
|
2
|
-
import {
|
|
2
|
+
import { hasWhereAccessResult } from '../../auth/types.js';
|
|
3
|
+
import { combineQueries } from '../../database/combineQueries.js';
|
|
4
|
+
import { Forbidden, NotFound } from '../../errors/index.js';
|
|
3
5
|
import { afterChange } from '../../fields/hooks/afterChange/index.js';
|
|
4
6
|
import { afterRead } from '../../fields/hooks/afterRead/index.js';
|
|
5
7
|
import { commitTransaction } from '../../utilities/commitTransaction.js';
|
|
6
8
|
import { initTransaction } from '../../utilities/initTransaction.js';
|
|
7
9
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
10
|
+
import { getRestoredStatusesToAuthorize } from '../../versions/getRestoredStatusesToAuthorize.js';
|
|
8
11
|
export const restoreVersionOperation = async (args)=>{
|
|
9
12
|
const { id, depth, draft, globalConfig, overrideAccess, populate, showHiddenFields } = args;
|
|
10
13
|
const req = args.req;
|
|
@@ -27,27 +30,26 @@ export const restoreVersionOperation = async (args)=>{
|
|
|
27
30
|
}
|
|
28
31
|
}
|
|
29
32
|
// /////////////////////////////////////
|
|
30
|
-
// Access
|
|
31
|
-
// /////////////////////////////////////
|
|
32
|
-
if (!overrideAccess) {
|
|
33
|
-
await executeAccess({
|
|
34
|
-
req
|
|
35
|
-
}, globalConfig.access.update);
|
|
36
|
-
}
|
|
37
|
-
// /////////////////////////////////////
|
|
38
33
|
// Retrieve original raw version
|
|
39
34
|
// /////////////////////////////////////
|
|
35
|
+
// The selected version must satisfy read-version access.
|
|
36
|
+
const readVersionsAccessResult = overrideAccess ? true : await executeAccess({
|
|
37
|
+
req
|
|
38
|
+
}, globalConfig.access.readVersions);
|
|
40
39
|
const { docs: versionDocs } = await payload.db.findGlobalVersions({
|
|
41
40
|
global: globalConfig.slug,
|
|
42
41
|
limit: 1,
|
|
43
42
|
req,
|
|
44
|
-
where: {
|
|
43
|
+
where: combineQueries({
|
|
45
44
|
id: {
|
|
46
45
|
equals: id
|
|
47
46
|
}
|
|
48
|
-
}
|
|
47
|
+
}, readVersionsAccessResult)
|
|
49
48
|
});
|
|
50
49
|
if (!versionDocs || versionDocs.length === 0) {
|
|
50
|
+
if (hasWhereAccessResult(readVersionsAccessResult)) {
|
|
51
|
+
throw new Forbidden(req.t);
|
|
52
|
+
}
|
|
51
53
|
throw new NotFound(req.t);
|
|
52
54
|
}
|
|
53
55
|
const rawVersion = versionDocs[0];
|
|
@@ -57,6 +59,25 @@ export const restoreVersionOperation = async (args)=>{
|
|
|
57
59
|
if (draft) {
|
|
58
60
|
rawVersion.version._status = 'draft';
|
|
59
61
|
}
|
|
62
|
+
// A localized `_status` can publish and unpublish locales in one restore, so authorize every
|
|
63
|
+
// status it writes. executeAccess throws Forbidden on the first denial.
|
|
64
|
+
const restoredStatuses = getRestoredStatusesToAuthorize(rawVersion.version._status);
|
|
65
|
+
const updateAccessResults = [];
|
|
66
|
+
if (overrideAccess) {
|
|
67
|
+
updateAccessResults.push(true);
|
|
68
|
+
} else {
|
|
69
|
+
const statusesToAuthorize = restoredStatuses.length > 0 ? restoredStatuses : [
|
|
70
|
+
undefined
|
|
71
|
+
];
|
|
72
|
+
for (const status of statusesToAuthorize){
|
|
73
|
+
updateAccessResults.push(await executeAccess({
|
|
74
|
+
data: {
|
|
75
|
+
_status: status
|
|
76
|
+
},
|
|
77
|
+
req
|
|
78
|
+
}, globalConfig.access.update));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
60
81
|
// /////////////////////////////////////
|
|
61
82
|
// fetch previousDoc
|
|
62
83
|
// /////////////////////////////////////
|
|
@@ -69,6 +90,19 @@ export const restoreVersionOperation = async (args)=>{
|
|
|
69
90
|
// /////////////////////////////////////
|
|
70
91
|
// Update global
|
|
71
92
|
// /////////////////////////////////////
|
|
93
|
+
for (const updateAccessResult of updateAccessResults){
|
|
94
|
+
if (!hasWhereAccessResult(updateAccessResult)) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const constrainedGlobal = await payload.db.findGlobal({
|
|
98
|
+
slug: globalConfig.slug,
|
|
99
|
+
req,
|
|
100
|
+
where: updateAccessResult
|
|
101
|
+
});
|
|
102
|
+
if (!constrainedGlobal || Object.keys(constrainedGlobal).length === 0) {
|
|
103
|
+
throw new Forbidden(req.t);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
72
106
|
const global = await payload.db.findGlobal({
|
|
73
107
|
slug: globalConfig.slug,
|
|
74
108
|
req
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/globals/operations/restoreVersion.ts"],"sourcesContent":["import type { PayloadRequest, PopulateType } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { SanitizedGlobalConfig } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\n\nexport type Arguments = {\n depth?: number\n draft?: boolean\n globalConfig: SanitizedGlobalConfig\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req?: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const restoreVersionOperation = async <T extends TypeWithVersion<T> = any>(\n args: Arguments,\n): Promise<T> => {\n const { id, depth, draft, globalConfig, overrideAccess, populate, showHiddenFields } = args\n const req = args.req!\n const { fallbackLocale, locale, payload } = req\n\n try {\n const shouldCommit = await initTransaction(req)\n\n // /////////////////////////////////////\n // beforeOperation - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.beforeOperation?.length) {\n for (const hook of globalConfig.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n context: req.context,\n global: globalConfig,\n operation: 'restoreVersion',\n overrideAccess,\n req,\n })) || args\n }\n }\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n if (!overrideAccess) {\n await executeAccess({ req }, globalConfig.access.update)\n }\n\n // /////////////////////////////////////\n // Retrieve original raw version\n // /////////////////////////////////////\n\n const { docs: versionDocs } = await payload.db.findGlobalVersions<any>({\n global: globalConfig.slug,\n limit: 1,\n req,\n where: { id: { equals: id } },\n })\n\n if (!versionDocs || versionDocs.length === 0) {\n throw new NotFound(req.t)\n }\n\n const rawVersion = versionDocs[0]!\n\n // Patch globalType onto version doc\n rawVersion.version.globalType = globalConfig.slug\n\n // Overwrite draft status if draft is true\n\n if (draft) {\n rawVersion.version._status = 'draft'\n }\n // /////////////////////////////////////\n // fetch previousDoc\n // /////////////////////////////////////\n\n const previousDoc = await payload.findGlobal({\n slug: globalConfig.slug,\n depth,\n req,\n })\n\n req.context.isRestoringVersion = true\n\n // /////////////////////////////////////\n // Update global\n // /////////////////////////////////////\n\n const global = await payload.db.findGlobal({\n slug: globalConfig.slug,\n req,\n })\n\n let result = rawVersion.version\n\n if (global) {\n // Ensure updatedAt date is always updated\n result.updatedAt = new Date().toISOString()\n result = await payload.db.updateGlobal({\n slug: globalConfig.slug,\n data: result,\n req,\n })\n\n const now = new Date().toISOString()\n\n result = await payload.db.createGlobalVersion({\n autosave: false,\n createdAt: result.createdAt ? new Date(result.createdAt).toISOString() : now,\n globalSlug: globalConfig.slug,\n req,\n updatedAt: draft ? now : new Date(result.updatedAt).toISOString(),\n versionData: result,\n })\n } else {\n result = await payload.db.createGlobal({\n slug: globalConfig.slug,\n data: result,\n req,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: null,\n context: req.context,\n depth: depth!,\n doc: result,\n draft: undefined!,\n fallbackLocale: fallbackLocale!,\n global: globalConfig,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterRead?.length) {\n for (const hook of globalConfig.hooks.afterRead) {\n result =\n (await hook({\n context: req.context,\n doc: result,\n global: globalConfig,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: null,\n context: req.context,\n data: result,\n doc: result,\n global: globalConfig,\n operation: 'update',\n previousDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterChange?.length) {\n for (const hook of globalConfig.hooks.afterChange) {\n result =\n (await hook({\n context: req.context,\n data: result,\n doc: result,\n global: globalConfig,\n overrideAccess,\n previousDoc,\n req,\n })) || result\n }\n }\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["executeAccess","NotFound","afterChange","afterRead","commitTransaction","initTransaction","killTransaction","restoreVersionOperation","args","id","depth","draft","globalConfig","overrideAccess","populate","showHiddenFields","req","fallbackLocale","locale","payload","shouldCommit","hooks","beforeOperation","length","hook","context","global","operation","access","update","docs","versionDocs","db","findGlobalVersions","slug","limit","where","equals","t","rawVersion","version","globalType","_status","previousDoc","findGlobal","isRestoringVersion","result","updatedAt","Date","toISOString","updateGlobal","data","now","createGlobalVersion","autosave","createdAt","globalSlug","versionData","createGlobal","collection","doc","undefined","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/globals/operations/restoreVersion.ts"],"sourcesContent":["import type { PayloadRequest, PopulateType, Where } from '../../types/index.js'\nimport type { TypeWithVersion } from '../../versions/types.js'\nimport type { SanitizedGlobalConfig } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { getRestoredStatusesToAuthorize } from '../../versions/getRestoredStatusesToAuthorize.js'\n\nexport type Arguments = {\n depth?: number\n draft?: boolean\n globalConfig: SanitizedGlobalConfig\n id: number | string\n overrideAccess?: boolean\n populate?: PopulateType\n req?: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const restoreVersionOperation = async <T extends TypeWithVersion<T> = any>(\n args: Arguments,\n): Promise<T> => {\n const { id, depth, draft, globalConfig, overrideAccess, populate, showHiddenFields } = args\n const req = args.req!\n const { fallbackLocale, locale, payload } = req\n\n try {\n const shouldCommit = await initTransaction(req)\n\n // /////////////////////////////////////\n // beforeOperation - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.beforeOperation?.length) {\n for (const hook of globalConfig.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n context: req.context,\n global: globalConfig,\n operation: 'restoreVersion',\n overrideAccess,\n req,\n })) || args\n }\n }\n\n // /////////////////////////////////////\n // Retrieve original raw version\n // /////////////////////////////////////\n\n // The selected version must satisfy read-version access.\n const readVersionsAccessResult = overrideAccess\n ? true\n : await executeAccess({ req }, globalConfig.access.readVersions)\n\n const { docs: versionDocs } = await payload.db.findGlobalVersions<any>({\n global: globalConfig.slug,\n limit: 1,\n req,\n where: combineQueries({ id: { equals: id } }, readVersionsAccessResult),\n })\n\n if (!versionDocs || versionDocs.length === 0) {\n if (hasWhereAccessResult(readVersionsAccessResult)) {\n throw new Forbidden(req.t)\n }\n throw new NotFound(req.t)\n }\n\n const rawVersion = versionDocs[0]!\n\n // Patch globalType onto version doc\n rawVersion.version.globalType = globalConfig.slug\n\n // Overwrite draft status if draft is true\n if (draft) {\n rawVersion.version._status = 'draft'\n }\n\n // A localized `_status` can publish and unpublish locales in one restore, so authorize every\n // status it writes. executeAccess throws Forbidden on the first denial.\n const restoredStatuses = getRestoredStatusesToAuthorize(rawVersion.version._status)\n\n const updateAccessResults: Array<boolean | Where> = []\n\n if (overrideAccess) {\n updateAccessResults.push(true)\n } else {\n const statusesToAuthorize = restoredStatuses.length > 0 ? restoredStatuses : [undefined]\n\n for (const status of statusesToAuthorize) {\n updateAccessResults.push(\n await executeAccess({ data: { _status: status }, req }, globalConfig.access.update),\n )\n }\n }\n\n // /////////////////////////////////////\n // fetch previousDoc\n // /////////////////////////////////////\n\n const previousDoc = await payload.findGlobal({\n slug: globalConfig.slug,\n depth,\n req,\n })\n\n req.context.isRestoringVersion = true\n\n // /////////////////////////////////////\n // Update global\n // /////////////////////////////////////\n\n for (const updateAccessResult of updateAccessResults) {\n if (!hasWhereAccessResult(updateAccessResult)) {\n continue\n }\n\n const constrainedGlobal = await payload.db.findGlobal({\n slug: globalConfig.slug,\n req,\n where: updateAccessResult,\n })\n\n if (!constrainedGlobal || Object.keys(constrainedGlobal).length === 0) {\n throw new Forbidden(req.t)\n }\n }\n\n const global = await payload.db.findGlobal({\n slug: globalConfig.slug,\n req,\n })\n\n let result = rawVersion.version\n\n if (global) {\n // Ensure updatedAt date is always updated\n result.updatedAt = new Date().toISOString()\n result = await payload.db.updateGlobal({\n slug: globalConfig.slug,\n data: result,\n req,\n })\n\n const now = new Date().toISOString()\n\n result = await payload.db.createGlobalVersion({\n autosave: false,\n createdAt: result.createdAt ? new Date(result.createdAt).toISOString() : now,\n globalSlug: globalConfig.slug,\n req,\n updatedAt: draft ? now : new Date(result.updatedAt).toISOString(),\n versionData: result,\n })\n } else {\n result = await payload.db.createGlobal({\n slug: globalConfig.slug,\n data: result,\n req,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: null,\n context: req.context,\n depth: depth!,\n doc: result,\n draft: undefined!,\n fallbackLocale: fallbackLocale!,\n global: globalConfig,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterRead?.length) {\n for (const hook of globalConfig.hooks.afterRead) {\n result =\n (await hook({\n context: req.context,\n doc: result,\n global: globalConfig,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: null,\n context: req.context,\n data: result,\n doc: result,\n global: globalConfig,\n operation: 'update',\n previousDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterChange?.length) {\n for (const hook of globalConfig.hooks.afterChange) {\n result =\n (await hook({\n context: req.context,\n data: result,\n doc: result,\n global: globalConfig,\n overrideAccess,\n previousDoc,\n req,\n })) || result\n }\n }\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["executeAccess","hasWhereAccessResult","combineQueries","Forbidden","NotFound","afterChange","afterRead","commitTransaction","initTransaction","killTransaction","getRestoredStatusesToAuthorize","restoreVersionOperation","args","id","depth","draft","globalConfig","overrideAccess","populate","showHiddenFields","req","fallbackLocale","locale","payload","shouldCommit","hooks","beforeOperation","length","hook","context","global","operation","readVersionsAccessResult","access","readVersions","docs","versionDocs","db","findGlobalVersions","slug","limit","where","equals","t","rawVersion","version","globalType","_status","restoredStatuses","updateAccessResults","push","statusesToAuthorize","undefined","status","data","update","previousDoc","findGlobal","isRestoringVersion","updateAccessResult","constrainedGlobal","Object","keys","result","updatedAt","Date","toISOString","updateGlobal","now","createGlobalVersion","autosave","createdAt","globalSlug","versionData","createGlobal","collection","doc","error"],"mappings":"AAIA,SAASA,aAAa,QAAQ,8BAA6B;AAC3D,SAASC,oBAAoB,QAAQ,sBAAqB;AAC1D,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,SAAS,EAAEC,QAAQ,QAAQ,wBAAuB;AAC3D,SAASC,WAAW,QAAQ,0CAAyC;AACrE,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,8BAA8B,QAAQ,mDAAkD;AAajG,OAAO,MAAMC,0BAA0B,OACrCC;IAEA,MAAM,EAAEC,EAAE,EAAEC,KAAK,EAAEC,KAAK,EAAEC,YAAY,EAAEC,cAAc,EAAEC,QAAQ,EAAEC,gBAAgB,EAAE,GAAGP;IACvF,MAAMQ,MAAMR,KAAKQ,GAAG;IACpB,MAAM,EAAEC,cAAc,EAAEC,MAAM,EAAEC,OAAO,EAAE,GAAGH;IAE5C,IAAI;QACF,MAAMI,eAAe,MAAMhB,gBAAgBY;QAE3C,wCAAwC;QACxC,2BAA2B;QAC3B,wCAAwC;QAExC,IAAIJ,aAAaS,KAAK,EAAEC,iBAAiBC,QAAQ;YAC/C,KAAK,MAAMC,QAAQZ,aAAaS,KAAK,CAACC,eAAe,CAAE;gBACrDd,OACE,AAAC,MAAMgB,KAAK;oBACVhB;oBACAiB,SAAST,IAAIS,OAAO;oBACpBC,QAAQd;oBACRe,WAAW;oBACXd;oBACAG;gBACF,MAAOR;YACX;QACF;QAEA,wCAAwC;QACxC,gCAAgC;QAChC,wCAAwC;QAExC,yDAAyD;QACzD,MAAMoB,2BAA2Bf,iBAC7B,OACA,MAAMjB,cAAc;YAAEoB;QAAI,GAAGJ,aAAaiB,MAAM,CAACC,YAAY;QAEjE,MAAM,EAAEC,MAAMC,WAAW,EAAE,GAAG,MAAMb,QAAQc,EAAE,CAACC,kBAAkB,CAAM;YACrER,QAAQd,aAAauB,IAAI;YACzBC,OAAO;YACPpB;YACAqB,OAAOvC,eAAe;gBAAEW,IAAI;oBAAE6B,QAAQ7B;gBAAG;YAAE,GAAGmB;QAChD;QAEA,IAAI,CAACI,eAAeA,YAAYT,MAAM,KAAK,GAAG;YAC5C,IAAI1B,qBAAqB+B,2BAA2B;gBAClD,MAAM,IAAI7B,UAAUiB,IAAIuB,CAAC;YAC3B;YACA,MAAM,IAAIvC,SAASgB,IAAIuB,CAAC;QAC1B;QAEA,MAAMC,aAAaR,WAAW,CAAC,EAAE;QAEjC,oCAAoC;QACpCQ,WAAWC,OAAO,CAACC,UAAU,GAAG9B,aAAauB,IAAI;QAEjD,0CAA0C;QAC1C,IAAIxB,OAAO;YACT6B,WAAWC,OAAO,CAACE,OAAO,GAAG;QAC/B;QAEA,6FAA6F;QAC7F,wEAAwE;QACxE,MAAMC,mBAAmBtC,+BAA+BkC,WAAWC,OAAO,CAACE,OAAO;QAElF,MAAME,sBAA8C,EAAE;QAEtD,IAAIhC,gBAAgB;YAClBgC,oBAAoBC,IAAI,CAAC;QAC3B,OAAO;YACL,MAAMC,sBAAsBH,iBAAiBrB,MAAM,GAAG,IAAIqB,mBAAmB;gBAACI;aAAU;YAExF,KAAK,MAAMC,UAAUF,oBAAqB;gBACxCF,oBAAoBC,IAAI,CACtB,MAAMlD,cAAc;oBAAEsD,MAAM;wBAAEP,SAASM;oBAAO;oBAAGjC;gBAAI,GAAGJ,aAAaiB,MAAM,CAACsB,MAAM;YAEtF;QACF;QAEA,wCAAwC;QACxC,oBAAoB;QACpB,wCAAwC;QAExC,MAAMC,cAAc,MAAMjC,QAAQkC,UAAU,CAAC;YAC3ClB,MAAMvB,aAAauB,IAAI;YACvBzB;YACAM;QACF;QAEAA,IAAIS,OAAO,CAAC6B,kBAAkB,GAAG;QAEjC,wCAAwC;QACxC,gBAAgB;QAChB,wCAAwC;QAExC,KAAK,MAAMC,sBAAsBV,oBAAqB;YACpD,IAAI,CAAChD,qBAAqB0D,qBAAqB;gBAC7C;YACF;YAEA,MAAMC,oBAAoB,MAAMrC,QAAQc,EAAE,CAACoB,UAAU,CAAC;gBACpDlB,MAAMvB,aAAauB,IAAI;gBACvBnB;gBACAqB,OAAOkB;YACT;YAEA,IAAI,CAACC,qBAAqBC,OAAOC,IAAI,CAACF,mBAAmBjC,MAAM,KAAK,GAAG;gBACrE,MAAM,IAAIxB,UAAUiB,IAAIuB,CAAC;YAC3B;QACF;QAEA,MAAMb,SAAS,MAAMP,QAAQc,EAAE,CAACoB,UAAU,CAAC;YACzClB,MAAMvB,aAAauB,IAAI;YACvBnB;QACF;QAEA,IAAI2C,SAASnB,WAAWC,OAAO;QAE/B,IAAIf,QAAQ;YACV,0CAA0C;YAC1CiC,OAAOC,SAAS,GAAG,IAAIC,OAAOC,WAAW;YACzCH,SAAS,MAAMxC,QAAQc,EAAE,CAAC8B,YAAY,CAAC;gBACrC5B,MAAMvB,aAAauB,IAAI;gBACvBe,MAAMS;gBACN3C;YACF;YAEA,MAAMgD,MAAM,IAAIH,OAAOC,WAAW;YAElCH,SAAS,MAAMxC,QAAQc,EAAE,CAACgC,mBAAmB,CAAC;gBAC5CC,UAAU;gBACVC,WAAWR,OAAOQ,SAAS,GAAG,IAAIN,KAAKF,OAAOQ,SAAS,EAAEL,WAAW,KAAKE;gBACzEI,YAAYxD,aAAauB,IAAI;gBAC7BnB;gBACA4C,WAAWjD,QAAQqD,MAAM,IAAIH,KAAKF,OAAOC,SAAS,EAAEE,WAAW;gBAC/DO,aAAaV;YACf;QACF,OAAO;YACLA,SAAS,MAAMxC,QAAQc,EAAE,CAACqC,YAAY,CAAC;gBACrCnC,MAAMvB,aAAauB,IAAI;gBACvBe,MAAMS;gBACN3C;YACF;QACF;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExC2C,SAAS,MAAMzD,UAAU;YACvBqE,YAAY;YACZ9C,SAAST,IAAIS,OAAO;YACpBf,OAAOA;YACP8D,KAAKb;YACLhD,OAAOqC;YACP/B,gBAAgBA;YAChBS,QAAQd;YACRM,QAAQA;YACRL,gBAAgBA;YAChBC;YACAE;YACAD,kBAAkBA;QACpB;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExC,IAAIH,aAAaS,KAAK,EAAEnB,WAAWqB,QAAQ;YACzC,KAAK,MAAMC,QAAQZ,aAAaS,KAAK,CAACnB,SAAS,CAAE;gBAC/CyD,SACE,AAAC,MAAMnC,KAAK;oBACVC,SAAST,IAAIS,OAAO;oBACpB+C,KAAKb;oBACLjC,QAAQd;oBACRC;oBACAG;gBACF,MAAO2C;YACX;QACF;QAEA,wCAAwC;QACxC,uBAAuB;QACvB,wCAAwC;QAExCA,SAAS,MAAM1D,YAAY;YACzBsE,YAAY;YACZ9C,SAAST,IAAIS,OAAO;YACpByB,MAAMS;YACNa,KAAKb;YACLjC,QAAQd;YACRe,WAAW;YACXyB;YACApC;QACF;QAEA,wCAAwC;QACxC,uBAAuB;QACvB,wCAAwC;QAExC,IAAIJ,aAAaS,KAAK,EAAEpB,aAAasB,QAAQ;YAC3C,KAAK,MAAMC,QAAQZ,aAAaS,KAAK,CAACpB,WAAW,CAAE;gBACjD0D,SACE,AAAC,MAAMnC,KAAK;oBACVC,SAAST,IAAIS,OAAO;oBACpByB,MAAMS;oBACNa,KAAKb;oBACLjC,QAAQd;oBACRC;oBACAuC;oBACApC;gBACF,MAAO2C;YACX;QACF;QAEA,IAAIvC,cAAc;YAChB,MAAMjB,kBAAkBa;QAC1B;QAEA,OAAO2C;IACT,EAAE,OAAOc,OAAgB;QACvB,MAAMpE,gBAAgBW;QACtB,MAAMyD;IACR;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/globals/operations/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAA;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAEV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,yBAAyB,EAE1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/globals/operations/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAA;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAEV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,yBAAyB,EAE1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAiC3B,KAAK,IAAI,CAAC,KAAK,SAAS,UAAU,IAAI;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,qBAAqB,CAAA;IACnC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEnD,eAAO,MAAM,eAAe,GAC1B,KAAK,SAAS,UAAU,EACxB,OAAO,SAAS,oBAAoB,CAAC,KAAK,CAAC,QAErC,IAAI,CAAC,KAAK,CAAC,KAChB,OAAO,CAAC,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,CAghBnD,CAAA"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { executeAccess } from '../../auth/executeAccess.js';
|
|
2
|
+
import { hasWhereAccessResult } from '../../auth/types.js';
|
|
3
|
+
import { Forbidden } from '../../errors/index.js';
|
|
2
4
|
import { afterChange } from '../../fields/hooks/afterChange/index.js';
|
|
3
5
|
import { afterRead } from '../../fields/hooks/afterRead/index.js';
|
|
4
6
|
import { beforeChange } from '../../fields/hooks/beforeChange/index.js';
|
|
@@ -7,42 +9,78 @@ import { deepCopyObjectSimple } from '../../index.js';
|
|
|
7
9
|
import { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js';
|
|
8
10
|
import { commitTransaction } from '../../utilities/commitTransaction.js';
|
|
9
11
|
import { getSelectMode } from '../../utilities/getSelectMode.js';
|
|
12
|
+
import { getTopLevelFieldNames } from '../../utilities/getTopLevelFieldNames.js';
|
|
10
13
|
import { hasDraftsEnabled, hasDraftValidationEnabled, hasLocalizeStatusEnabled } from '../../utilities/getVersionsConfig.js';
|
|
11
14
|
import { initTransaction } from '../../utilities/initTransaction.js';
|
|
12
15
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
13
16
|
import { mergeLocalizedData } from '../../utilities/mergeLocalizedData.js';
|
|
14
17
|
import { sanitizeSelect } from '../../utilities/sanitizeSelect.js';
|
|
18
|
+
import { buildAllLocalesPublicationHookDoc, getAllLocalesPublicationStatus, hasAuthorizedAllLocalesPublicationStatus, normalizeAllLocalesPublicationStatus, reconcileAllLocalesPublicationStatus, validateAllLocalesPublicationFlags } from '../../versions/allLocalesPublicationStatus.js';
|
|
15
19
|
import { getLatestGlobalVersion } from '../../versions/getLatestGlobalVersion.js';
|
|
16
20
|
import { saveVersion } from '../../versions/saveVersion.js';
|
|
17
21
|
export const updateOperation = async (args)=>{
|
|
18
22
|
if (args.publishSpecificLocale) {
|
|
19
23
|
args.req.locale = args.publishSpecificLocale;
|
|
20
24
|
}
|
|
21
|
-
const
|
|
25
|
+
const req = args.req;
|
|
26
|
+
const initialGlobalConfig = args.globalConfig;
|
|
27
|
+
validateAllLocalesPublicationFlags({
|
|
28
|
+
publishAllLocales: args.publishAllLocales,
|
|
29
|
+
unpublishAllLocales: args.unpublishAllLocales
|
|
30
|
+
});
|
|
31
|
+
const initialAllLocalesPublicationStatus = getAllLocalesPublicationStatus({
|
|
32
|
+
hasLocalizedStatus: Boolean(req.payload.config.localization && hasLocalizeStatusEnabled(initialGlobalConfig)),
|
|
33
|
+
publishAllLocales: !args.draft && (args.publishAllLocales ?? !hasLocalizeStatusEnabled(initialGlobalConfig)),
|
|
34
|
+
unpublishAllLocales: Boolean(args.unpublishAllLocales)
|
|
35
|
+
});
|
|
36
|
+
const initialAllLocalesPublicationIntent = normalizeAllLocalesPublicationStatus({
|
|
37
|
+
data: args.data,
|
|
38
|
+
status: initialAllLocalesPublicationStatus
|
|
39
|
+
});
|
|
22
40
|
try {
|
|
23
|
-
const shouldCommit = !disableTransaction && await initTransaction(req);
|
|
41
|
+
const shouldCommit = !args.disableTransaction && await initTransaction(req);
|
|
24
42
|
// /////////////////////////////////////
|
|
25
43
|
// beforeOperation - Global
|
|
26
44
|
// /////////////////////////////////////
|
|
27
|
-
if (
|
|
28
|
-
for (const hook of
|
|
45
|
+
if (initialGlobalConfig.hooks?.beforeOperation?.length) {
|
|
46
|
+
for (const hook of initialGlobalConfig.hooks.beforeOperation){
|
|
29
47
|
args = await hook({
|
|
30
48
|
args,
|
|
31
49
|
context: args.req.context,
|
|
32
|
-
global:
|
|
50
|
+
global: initialGlobalConfig,
|
|
33
51
|
operation: 'update',
|
|
34
|
-
overrideAccess,
|
|
52
|
+
overrideAccess: args.overrideAccess,
|
|
35
53
|
req: args.req
|
|
36
54
|
}) || args;
|
|
37
55
|
}
|
|
38
56
|
}
|
|
57
|
+
const { slug, autosave, depth, draft: draftArg, globalConfig, overrideAccess, overrideLock, populate, publishAllLocales: publishAllLocalesArg, publishSpecificLocale, req: { fallbackLocale, locale, payload, payload: { config } = {} }, select: incomingSelect, showHiddenFields, unpublishAllLocales: unpublishAllLocalesArg } = args;
|
|
39
58
|
let { data } = args;
|
|
40
|
-
|
|
41
|
-
|
|
59
|
+
validateAllLocalesPublicationFlags({
|
|
60
|
+
publishAllLocales: publishAllLocalesArg,
|
|
61
|
+
unpublishAllLocales: unpublishAllLocalesArg
|
|
62
|
+
});
|
|
63
|
+
let publishAllLocales = !draftArg && (publishAllLocalesArg ?? !hasLocalizeStatusEnabled(globalConfig));
|
|
64
|
+
let unpublishAllLocales = typeof unpublishAllLocalesArg === 'string' ? unpublishAllLocalesArg === 'true' : !!unpublishAllLocalesArg;
|
|
65
|
+
const requestedAllLocalesPublicationStatus = getAllLocalesPublicationStatus({
|
|
66
|
+
hasLocalizedStatus: Boolean(config?.localization && hasLocalizeStatusEnabled(globalConfig)),
|
|
67
|
+
publishAllLocales,
|
|
68
|
+
unpublishAllLocales
|
|
69
|
+
});
|
|
70
|
+
const allLocalesPublicationStatus = reconcileAllLocalesPublicationStatus({
|
|
71
|
+
data,
|
|
72
|
+
intent: initialAllLocalesPublicationIntent,
|
|
73
|
+
status: requestedAllLocalesPublicationStatus
|
|
74
|
+
});
|
|
75
|
+
if (requestedAllLocalesPublicationStatus && !allLocalesPublicationStatus) {
|
|
76
|
+
publishAllLocales = false;
|
|
77
|
+
unpublishAllLocales = false;
|
|
78
|
+
}
|
|
42
79
|
const isSavingDraft = Boolean(draftArg && hasDraftsEnabled(globalConfig)) && data._status !== 'published' && !publishAllLocales;
|
|
43
80
|
if (isSavingDraft) {
|
|
44
81
|
data._status = 'draft';
|
|
45
82
|
}
|
|
83
|
+
const submittedTopLevelFieldNames = unpublishAllLocales ? getTopLevelFieldNames(data) : undefined;
|
|
46
84
|
// /////////////////////////////////////
|
|
47
85
|
// 1. Retrieve and execute access
|
|
48
86
|
// /////////////////////////////////////
|
|
@@ -66,6 +104,9 @@ export const updateOperation = async (args)=>{
|
|
|
66
104
|
where: query
|
|
67
105
|
});
|
|
68
106
|
const { global, globalExists } = globalVersionResult || {};
|
|
107
|
+
if (hasWhereAccessResult(accessResults) && globalExists && (!global || Object.keys(global).length === 0)) {
|
|
108
|
+
throw new Forbidden(req.t);
|
|
109
|
+
}
|
|
69
110
|
let globalJSON = {};
|
|
70
111
|
if (globalVersionResult && globalVersionResult.global) {
|
|
71
112
|
globalJSON = deepCopyObjectSimple(global);
|
|
@@ -98,16 +139,34 @@ export const updateOperation = async (args)=>{
|
|
|
98
139
|
// /////////////////////////////////////
|
|
99
140
|
// beforeValidate - Fields
|
|
100
141
|
// /////////////////////////////////////
|
|
142
|
+
let statusFieldAccess = false;
|
|
143
|
+
const publicationFieldPolicyDoc = buildAllLocalesPublicationHookDoc({
|
|
144
|
+
doc: originalDoc,
|
|
145
|
+
docWithLocales: globalJSON,
|
|
146
|
+
status: allLocalesPublicationStatus
|
|
147
|
+
});
|
|
101
148
|
data = await beforeValidate({
|
|
102
149
|
collection: null,
|
|
103
150
|
context: req.context,
|
|
104
151
|
data,
|
|
105
152
|
doc: originalDoc,
|
|
153
|
+
docForHooks: publicationFieldPolicyDoc,
|
|
106
154
|
global: globalConfig,
|
|
155
|
+
onFieldAccess: ({ accessResult, path })=>{
|
|
156
|
+
if (path === '_status') {
|
|
157
|
+
statusFieldAccess = accessResult;
|
|
158
|
+
}
|
|
159
|
+
},
|
|
107
160
|
operation: 'update',
|
|
108
161
|
overrideAccess: overrideAccess,
|
|
109
162
|
req
|
|
110
163
|
});
|
|
164
|
+
const publicationStatusIsAuthorized = statusFieldAccess && data._status === allLocalesPublicationStatus;
|
|
165
|
+
const publicationHookDoc = buildAllLocalesPublicationHookDoc({
|
|
166
|
+
doc: originalDoc,
|
|
167
|
+
docWithLocales: globalJSON,
|
|
168
|
+
status: publicationStatusIsAuthorized ? allLocalesPublicationStatus : undefined
|
|
169
|
+
});
|
|
111
170
|
// /////////////////////////////////////
|
|
112
171
|
// beforeValidate - Global
|
|
113
172
|
// /////////////////////////////////////
|
|
@@ -117,7 +176,7 @@ export const updateOperation = async (args)=>{
|
|
|
117
176
|
context: req.context,
|
|
118
177
|
data,
|
|
119
178
|
global: globalConfig,
|
|
120
|
-
originalDoc,
|
|
179
|
+
originalDoc: publicationHookDoc,
|
|
121
180
|
overrideAccess,
|
|
122
181
|
req
|
|
123
182
|
}) || data;
|
|
@@ -132,12 +191,15 @@ export const updateOperation = async (args)=>{
|
|
|
132
191
|
context: req.context,
|
|
133
192
|
data,
|
|
134
193
|
global: globalConfig,
|
|
135
|
-
originalDoc,
|
|
194
|
+
originalDoc: publicationHookDoc,
|
|
136
195
|
overrideAccess,
|
|
137
196
|
req
|
|
138
197
|
}) || data;
|
|
139
198
|
}
|
|
140
199
|
}
|
|
200
|
+
const publicationData = {
|
|
201
|
+
...data
|
|
202
|
+
};
|
|
141
203
|
// /////////////////////////////////////
|
|
142
204
|
// beforeChange - Fields
|
|
143
205
|
// /////////////////////////////////////
|
|
@@ -145,15 +207,32 @@ export const updateOperation = async (args)=>{
|
|
|
145
207
|
collection: null,
|
|
146
208
|
context: req.context,
|
|
147
209
|
data,
|
|
148
|
-
doc:
|
|
210
|
+
doc: publicationHookDoc,
|
|
149
211
|
docWithLocales: globalJSON,
|
|
212
|
+
fieldsToValidate: submittedTopLevelFieldNames,
|
|
150
213
|
global: globalConfig,
|
|
151
214
|
operation: 'update',
|
|
152
215
|
req,
|
|
153
|
-
skipValidation: isSavingDraft && !hasDraftValidationEnabled(globalConfig)
|
|
154
|
-
unpublishAllLocales
|
|
216
|
+
skipValidation: isSavingDraft && !hasDraftValidationEnabled(globalConfig)
|
|
155
217
|
};
|
|
156
|
-
let
|
|
218
|
+
let statusFieldValue;
|
|
219
|
+
let result = await beforeChange({
|
|
220
|
+
...beforeChangeArgs,
|
|
221
|
+
onDataProcessed: (processedData)=>{
|
|
222
|
+
statusFieldValue = processedData._status;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
const hasAuthorizedPublicationStatus = hasAuthorizedAllLocalesPublicationStatus({
|
|
226
|
+
data: publicationData,
|
|
227
|
+
fieldAccessDenied: !statusFieldAccess,
|
|
228
|
+
fieldValue: statusFieldValue,
|
|
229
|
+
status: allLocalesPublicationStatus
|
|
230
|
+
});
|
|
231
|
+
if (allLocalesPublicationStatus && !hasAuthorizedPublicationStatus && typeof statusFieldValue === 'undefined' && typeof globalJSON._status === 'object' && globalJSON._status !== null) {
|
|
232
|
+
result._status = {
|
|
233
|
+
...globalJSON._status
|
|
234
|
+
};
|
|
235
|
+
}
|
|
157
236
|
let snapshotToSave;
|
|
158
237
|
// /////////////////////////////////////
|
|
159
238
|
// Handle Localized Data Merging
|
|
@@ -161,8 +240,8 @@ export const updateOperation = async (args)=>{
|
|
|
161
240
|
if (config && config.localization && globalConfig.versions) {
|
|
162
241
|
let currentGlobal = null;
|
|
163
242
|
let snapshotData;
|
|
164
|
-
if (globalConfig
|
|
165
|
-
if (
|
|
243
|
+
if (hasLocalizeStatusEnabled(globalConfig)) {
|
|
244
|
+
if (hasAuthorizedPublicationStatus) {
|
|
166
245
|
let accessibleLocaleCodes = config.localization.localeCodes;
|
|
167
246
|
if (config.localization.filterAvailableLocales) {
|
|
168
247
|
const filteredLocales = await config.localization.filterAvailableLocales({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/globals/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { FindOptions } from '../../collections/operations/local/find.js'\nimport type { GlobalSlug, JsonObject } from '../../index.js'\nimport type {\n Operation,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformGlobalWithSelect,\n Where,\n} from '../../types/index.js'\nimport type {\n DataFromGlobalSlug,\n SanitizedGlobalConfig,\n SelectFromGlobalSlug,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deepCopyObjectSimple } from '../../index.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { getSelectMode } from '../../utilities/getSelectMode.js'\nimport {\n hasDraftsEnabled,\n hasDraftValidationEnabled,\n hasLocalizeStatusEnabled,\n} from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { mergeLocalizedData } from '../../utilities/mergeLocalizedData.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestGlobalVersion } from '../../versions/getLatestGlobalVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\ntype Args<TSlug extends GlobalSlug> = {\n autosave?: boolean\n data: DeepPartial<Omit<DataFromGlobalSlug<TSlug>, 'id'>>\n depth?: number\n disableTransaction?: boolean\n draft?: boolean\n globalConfig: SanitizedGlobalConfig\n overrideAccess?: boolean\n overrideLock?: boolean\n populate?: PopulateType\n publishAllLocales?: boolean\n publishSpecificLocale?: string\n req: PayloadRequest\n showHiddenFields?: boolean\n slug: string\n unpublishAllLocales?: boolean\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const updateOperation = async <\n TSlug extends GlobalSlug,\n TSelect extends SelectFromGlobalSlug<TSlug>,\n>(\n args: Args<TSlug>,\n): Promise<TransformGlobalWithSelect<TSlug, TSelect>> => {\n if (args.publishSpecificLocale) {\n args.req.locale = args.publishSpecificLocale\n }\n\n const {\n slug,\n autosave,\n depth,\n disableTransaction,\n draft: draftArg,\n globalConfig,\n overrideAccess,\n overrideLock,\n populate,\n publishAllLocales: publishAllLocalesArg,\n publishSpecificLocale,\n req: { fallbackLocale, locale, payload, payload: { config } = {} },\n req,\n select: incomingSelect,\n showHiddenFields,\n unpublishAllLocales: unpublishAllLocalesArg,\n } = args\n\n try {\n const shouldCommit = !disableTransaction && (await initTransaction(req))\n\n // /////////////////////////////////////\n // beforeOperation - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.beforeOperation?.length) {\n for (const hook of globalConfig.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n context: args.req.context,\n global: globalConfig,\n operation: 'update',\n overrideAccess,\n req: args.req,\n })) || args\n }\n }\n\n let { data } = args\n\n const publishAllLocales =\n !draftArg && (publishAllLocalesArg ?? (hasLocalizeStatusEnabled(globalConfig) ? false : true))\n const unpublishAllLocales =\n typeof unpublishAllLocalesArg === 'string'\n ? unpublishAllLocalesArg === 'true'\n : !!unpublishAllLocalesArg\n const isSavingDraft =\n Boolean(draftArg && hasDraftsEnabled(globalConfig)) &&\n data._status !== 'published' &&\n !publishAllLocales\n\n if (isSavingDraft) {\n data._status = 'draft'\n }\n\n // /////////////////////////////////////\n // 1. Retrieve and execute access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess(\n {\n data,\n req,\n },\n globalConfig.access.update,\n )\n : true\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const query: Where = overrideAccess ? undefined! : (accessResults as Where)\n\n // /////////////////////////////////////\n // 2. Retrieve document\n // /////////////////////////////////////\n const globalVersionResult = await getLatestGlobalVersion({\n slug,\n config: globalConfig,\n locale: locale!,\n payload,\n req,\n where: query,\n })\n const { global, globalExists } = globalVersionResult || {}\n\n let globalJSON: JsonObject = {}\n\n if (globalVersionResult && globalVersionResult.global) {\n globalJSON = deepCopyObjectSimple(global)\n\n if (globalJSON._id) {\n delete globalJSON._id\n }\n }\n\n const originalDoc = await afterRead({\n collection: null,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(globalJSON),\n draft: draftArg!,\n fallbackLocale: fallbackLocale!,\n global: globalConfig,\n locale: locale!,\n overrideAccess: true,\n req,\n showHiddenFields: showHiddenFields!,\n })\n\n // ///////////////////////////////////////////\n // Handle potentially locked global documents\n // ///////////////////////////////////////////\n\n await checkDocumentLockStatus({\n globalSlug: slug,\n lockErrorMessage: `Global with slug \"${slug}\" is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate({\n collection: null,\n context: req.context,\n data,\n doc: originalDoc,\n global: globalConfig,\n operation: 'update',\n overrideAccess: overrideAccess!,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.beforeValidate?.length) {\n for (const hook of globalConfig.hooks.beforeValidate) {\n data =\n (await hook({\n context: req.context,\n data,\n global: globalConfig,\n originalDoc,\n overrideAccess,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.beforeChange?.length) {\n for (const hook of globalConfig.hooks.beforeChange) {\n data =\n (await hook({\n context: req.context,\n data,\n global: globalConfig,\n originalDoc,\n overrideAccess,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n const beforeChangeArgs = {\n collection: null,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales: globalJSON,\n global: globalConfig,\n operation: 'update' as Operation,\n req,\n skipValidation:\n (isSavingDraft && !hasDraftValidationEnabled(globalConfig)) ||\n // Skip validation for unpublish operations — they only change _status, not document data\n unpublishAllLocales,\n }\n\n let result: JsonObject = await beforeChange(beforeChangeArgs)\n let snapshotToSave: JsonObject | undefined\n\n // /////////////////////////////////////\n // Handle Localized Data Merging\n // /////////////////////////////////////\n\n if (config && config.localization && globalConfig.versions) {\n let currentGlobal: JsonObject | null = null\n let snapshotData: JsonObject | undefined\n\n if (globalConfig.versions.drafts && globalConfig.versions.drafts.localizeStatus) {\n if (publishAllLocales || unpublishAllLocales) {\n let accessibleLocaleCodes = config.localization.localeCodes\n\n if (config.localization.filterAvailableLocales) {\n const filteredLocales = await config.localization.filterAvailableLocales({\n locales: config.localization.locales,\n req,\n })\n accessibleLocaleCodes = filteredLocales.map((locale) =>\n typeof locale === 'string' ? locale : locale.code,\n )\n }\n\n if (typeof result._status !== 'object' || result._status === null) {\n result._status = {}\n }\n\n for (const localeCode of accessibleLocaleCodes) {\n result._status[localeCode] = unpublishAllLocales ? 'draft' : 'published'\n }\n } else if (!isSavingDraft) {\n // publishing a single locale\n currentGlobal = await payload.db.findGlobal({\n slug: globalConfig.slug,\n req,\n where: query,\n })\n snapshotData = result\n }\n } else if (publishSpecificLocale) {\n // previous way of publishing a single locale\n currentGlobal = (\n await getLatestGlobalVersion({\n slug,\n config: globalConfig,\n payload,\n published: true,\n req,\n where: query,\n })\n ).global\n snapshotData = {\n ...result,\n _status: 'draft',\n }\n }\n\n if (snapshotData) {\n snapshotToSave = deepCopyObjectSimple(snapshotData)\n\n result = mergeLocalizedData({\n configBlockReferences: config.blocks,\n dataWithLocales: result || {},\n docWithLocales: currentGlobal || {},\n fields: globalConfig.fields,\n selectedLocales: [locale!],\n })\n }\n }\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: globalConfig.flattenedFields,\n forceSelect: globalConfig.forceSelect,\n select: incomingSelect,\n })\n\n if (!isSavingDraft) {\n const now = new Date().toISOString()\n // Ensure global has createdAt\n if (!result.createdAt) {\n result.createdAt = now\n }\n\n // Ensure updatedAt date is always updated\n result.updatedAt = now\n\n if (globalExists) {\n result = await payload.db.updateGlobal({\n slug,\n data: result,\n req,\n select,\n })\n } else {\n result = await payload.db.createGlobal({\n slug,\n data: result,\n req,\n })\n }\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n if (globalConfig.versions) {\n const { globalType } = result\n result = await saveVersion({\n autosave,\n docWithLocales: result,\n draft: isSavingDraft,\n global: globalConfig,\n operation: 'update',\n payload,\n publishSpecificLocale,\n req,\n select,\n snapshot: snapshotToSave,\n unpublish: unpublishAllLocales,\n })\n\n result = {\n ...result,\n globalType,\n }\n }\n\n // /////////////////////////////////////\n // Execute globalType field if not selected\n // /////////////////////////////////////\n if (select && result.globalType) {\n const selectMode = getSelectMode(select)\n if (\n (selectMode === 'include' && !select['globalType']) ||\n (selectMode === 'exclude' && select['globalType'] === false)\n ) {\n delete result['globalType']\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: null,\n context: req.context,\n depth: depth!,\n doc: result,\n draft: draftArg!,\n fallbackLocale: null,\n global: globalConfig,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterRead?.length) {\n for (const hook of globalConfig.hooks.afterRead) {\n result =\n (await hook({\n context: req.context,\n doc: result,\n global: globalConfig,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: null,\n context: req.context,\n data,\n doc: result,\n global: globalConfig,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterChange?.length) {\n for (const hook of globalConfig.hooks.afterChange) {\n result =\n (await hook({\n context: req.context,\n data,\n doc: result,\n global: globalConfig,\n overrideAccess,\n previousDoc: originalDoc,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result as TransformGlobalWithSelect<TSlug, TSelect>\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["executeAccess","afterChange","afterRead","beforeChange","beforeValidate","deepCopyObjectSimple","checkDocumentLockStatus","commitTransaction","getSelectMode","hasDraftsEnabled","hasDraftValidationEnabled","hasLocalizeStatusEnabled","initTransaction","killTransaction","mergeLocalizedData","sanitizeSelect","getLatestGlobalVersion","saveVersion","updateOperation","args","publishSpecificLocale","req","locale","slug","autosave","depth","disableTransaction","draft","draftArg","globalConfig","overrideAccess","overrideLock","populate","publishAllLocales","publishAllLocalesArg","fallbackLocale","payload","config","select","incomingSelect","showHiddenFields","unpublishAllLocales","unpublishAllLocalesArg","shouldCommit","hooks","beforeOperation","length","hook","context","global","operation","data","isSavingDraft","Boolean","_status","accessResults","access","update","query","undefined","globalVersionResult","where","globalExists","globalJSON","_id","originalDoc","collection","doc","globalSlug","lockErrorMessage","beforeChangeArgs","docWithLocales","skipValidation","result","snapshotToSave","localization","versions","currentGlobal","snapshotData","drafts","localizeStatus","accessibleLocaleCodes","localeCodes","filterAvailableLocales","filteredLocales","locales","map","code","localeCode","db","findGlobal","published","configBlockReferences","blocks","dataWithLocales","fields","selectedLocales","flattenedFields","forceSelect","now","Date","toISOString","createdAt","updatedAt","updateGlobal","createGlobal","globalType","snapshot","unpublish","selectMode","previousDoc","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/globals/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { FindOptions } from '../../collections/operations/local/find.js'\nimport type { GlobalSlug, JsonObject } from '../../index.js'\nimport type {\n Operation,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformGlobalWithSelect,\n Where,\n} from '../../types/index.js'\nimport type {\n DataFromGlobalSlug,\n SanitizedGlobalConfig,\n SelectFromGlobalSlug,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { Forbidden } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deepCopyObjectSimple } from '../../index.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { getSelectMode } from '../../utilities/getSelectMode.js'\nimport { getTopLevelFieldNames } from '../../utilities/getTopLevelFieldNames.js'\nimport {\n hasDraftsEnabled,\n hasDraftValidationEnabled,\n hasLocalizeStatusEnabled,\n} from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { mergeLocalizedData } from '../../utilities/mergeLocalizedData.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport {\n buildAllLocalesPublicationHookDoc,\n getAllLocalesPublicationStatus,\n hasAuthorizedAllLocalesPublicationStatus,\n normalizeAllLocalesPublicationStatus,\n reconcileAllLocalesPublicationStatus,\n validateAllLocalesPublicationFlags,\n} from '../../versions/allLocalesPublicationStatus.js'\nimport { getLatestGlobalVersion } from '../../versions/getLatestGlobalVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\ntype Args<TSlug extends GlobalSlug> = {\n autosave?: boolean\n data: DeepPartial<Omit<DataFromGlobalSlug<TSlug>, 'id'>>\n depth?: number\n disableTransaction?: boolean\n draft?: boolean\n globalConfig: SanitizedGlobalConfig\n overrideAccess?: boolean\n overrideLock?: boolean\n populate?: PopulateType\n publishAllLocales?: boolean\n publishSpecificLocale?: string\n req: PayloadRequest\n showHiddenFields?: boolean\n slug: string\n unpublishAllLocales?: boolean\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const updateOperation = async <\n TSlug extends GlobalSlug,\n TSelect extends SelectFromGlobalSlug<TSlug>,\n>(\n args: Args<TSlug>,\n): Promise<TransformGlobalWithSelect<TSlug, TSelect>> => {\n if (args.publishSpecificLocale) {\n args.req.locale = args.publishSpecificLocale\n }\n\n const req = args.req\n const initialGlobalConfig = args.globalConfig\n\n validateAllLocalesPublicationFlags({\n publishAllLocales: args.publishAllLocales,\n unpublishAllLocales: args.unpublishAllLocales,\n })\n\n const initialAllLocalesPublicationStatus = getAllLocalesPublicationStatus({\n hasLocalizedStatus: Boolean(\n req.payload.config.localization && hasLocalizeStatusEnabled(initialGlobalConfig),\n ),\n publishAllLocales:\n !args.draft && (args.publishAllLocales ?? !hasLocalizeStatusEnabled(initialGlobalConfig)),\n unpublishAllLocales: Boolean(args.unpublishAllLocales),\n })\n\n const initialAllLocalesPublicationIntent = normalizeAllLocalesPublicationStatus({\n data: args.data,\n status: initialAllLocalesPublicationStatus,\n })\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(req))\n\n // /////////////////////////////////////\n // beforeOperation - Global\n // /////////////////////////////////////\n\n if (initialGlobalConfig.hooks?.beforeOperation?.length) {\n for (const hook of initialGlobalConfig.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n context: args.req.context,\n global: initialGlobalConfig,\n operation: 'update',\n overrideAccess: args.overrideAccess,\n req: args.req,\n })) || args\n }\n }\n\n const {\n slug,\n autosave,\n depth,\n draft: draftArg,\n globalConfig,\n overrideAccess,\n overrideLock,\n populate,\n publishAllLocales: publishAllLocalesArg,\n publishSpecificLocale,\n req: { fallbackLocale, locale, payload, payload: { config } = {} },\n select: incomingSelect,\n showHiddenFields,\n unpublishAllLocales: unpublishAllLocalesArg,\n } = args\n\n let { data } = args\n\n validateAllLocalesPublicationFlags({\n publishAllLocales: publishAllLocalesArg,\n unpublishAllLocales: unpublishAllLocalesArg,\n })\n\n let publishAllLocales =\n !draftArg && (publishAllLocalesArg ?? !hasLocalizeStatusEnabled(globalConfig))\n let unpublishAllLocales =\n typeof unpublishAllLocalesArg === 'string'\n ? unpublishAllLocalesArg === 'true'\n : !!unpublishAllLocalesArg\n const requestedAllLocalesPublicationStatus = getAllLocalesPublicationStatus({\n hasLocalizedStatus: Boolean(config?.localization && hasLocalizeStatusEnabled(globalConfig)),\n publishAllLocales,\n unpublishAllLocales,\n })\n const allLocalesPublicationStatus = reconcileAllLocalesPublicationStatus({\n data,\n intent: initialAllLocalesPublicationIntent,\n status: requestedAllLocalesPublicationStatus,\n })\n\n if (requestedAllLocalesPublicationStatus && !allLocalesPublicationStatus) {\n publishAllLocales = false\n unpublishAllLocales = false\n }\n\n const isSavingDraft =\n Boolean(draftArg && hasDraftsEnabled(globalConfig)) &&\n data._status !== 'published' &&\n !publishAllLocales\n\n if (isSavingDraft) {\n data._status = 'draft'\n }\n\n const submittedTopLevelFieldNames = unpublishAllLocales\n ? getTopLevelFieldNames(data)\n : undefined\n\n // /////////////////////////////////////\n // 1. Retrieve and execute access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess(\n {\n data,\n req,\n },\n globalConfig.access.update,\n )\n : true\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const query: Where = overrideAccess ? undefined! : (accessResults as Where)\n\n // /////////////////////////////////////\n // 2. Retrieve document\n // /////////////////////////////////////\n const globalVersionResult = await getLatestGlobalVersion({\n slug,\n config: globalConfig,\n locale: locale!,\n payload,\n req,\n where: query,\n })\n const { global, globalExists } = globalVersionResult || {}\n\n if (\n hasWhereAccessResult(accessResults) &&\n globalExists &&\n (!global || Object.keys(global).length === 0)\n ) {\n throw new Forbidden(req.t)\n }\n\n let globalJSON: JsonObject = {}\n\n if (globalVersionResult && globalVersionResult.global) {\n globalJSON = deepCopyObjectSimple(global)\n\n if (globalJSON._id) {\n delete globalJSON._id\n }\n }\n\n const originalDoc = await afterRead({\n collection: null,\n context: req.context,\n depth: 0,\n doc: deepCopyObjectSimple(globalJSON),\n draft: draftArg!,\n fallbackLocale: fallbackLocale!,\n global: globalConfig,\n locale: locale!,\n overrideAccess: true,\n req,\n showHiddenFields: showHiddenFields!,\n })\n\n // ///////////////////////////////////////////\n // Handle potentially locked global documents\n // ///////////////////////////////////////////\n\n await checkDocumentLockStatus({\n globalSlug: slug,\n lockErrorMessage: `Global with slug \"${slug}\" is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n let statusFieldAccess = false\n const publicationFieldPolicyDoc = buildAllLocalesPublicationHookDoc({\n doc: originalDoc,\n docWithLocales: globalJSON,\n status: allLocalesPublicationStatus,\n })\n\n data = await beforeValidate({\n collection: null,\n context: req.context,\n data,\n doc: originalDoc,\n docForHooks: publicationFieldPolicyDoc,\n global: globalConfig,\n onFieldAccess: ({ accessResult, path }) => {\n if (path === '_status') {\n statusFieldAccess = accessResult\n }\n },\n operation: 'update',\n overrideAccess: overrideAccess!,\n req,\n })\n\n const publicationStatusIsAuthorized =\n statusFieldAccess && data._status === allLocalesPublicationStatus\n\n const publicationHookDoc = buildAllLocalesPublicationHookDoc({\n doc: originalDoc,\n docWithLocales: globalJSON,\n status: publicationStatusIsAuthorized ? allLocalesPublicationStatus : undefined,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.beforeValidate?.length) {\n for (const hook of globalConfig.hooks.beforeValidate) {\n data =\n (await hook({\n context: req.context,\n data,\n global: globalConfig,\n originalDoc: publicationHookDoc,\n overrideAccess,\n req,\n })) || data\n }\n }\n\n // /////////////////////////////////////\n // beforeChange - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.beforeChange?.length) {\n for (const hook of globalConfig.hooks.beforeChange) {\n data =\n (await hook({\n context: req.context,\n data,\n global: globalConfig,\n originalDoc: publicationHookDoc,\n overrideAccess,\n req,\n })) || data\n }\n }\n\n const publicationData = { ...data }\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n const beforeChangeArgs = {\n collection: null,\n context: req.context,\n data,\n doc: publicationHookDoc,\n docWithLocales: globalJSON,\n fieldsToValidate: submittedTopLevelFieldNames,\n global: globalConfig,\n operation: 'update' as Operation,\n req,\n skipValidation: isSavingDraft && !hasDraftValidationEnabled(globalConfig),\n }\n\n let statusFieldValue: unknown\n\n let result: JsonObject = await beforeChange({\n ...beforeChangeArgs,\n onDataProcessed: (processedData) => {\n statusFieldValue = processedData._status\n },\n })\n\n const hasAuthorizedPublicationStatus = hasAuthorizedAllLocalesPublicationStatus({\n data: publicationData,\n fieldAccessDenied: !statusFieldAccess,\n fieldValue: statusFieldValue,\n status: allLocalesPublicationStatus,\n })\n if (\n allLocalesPublicationStatus &&\n !hasAuthorizedPublicationStatus &&\n typeof statusFieldValue === 'undefined' &&\n typeof globalJSON._status === 'object' &&\n globalJSON._status !== null\n ) {\n result._status = { ...globalJSON._status }\n }\n\n let snapshotToSave: JsonObject | undefined\n\n // /////////////////////////////////////\n // Handle Localized Data Merging\n // /////////////////////////////////////\n\n if (config && config.localization && globalConfig.versions) {\n let currentGlobal: JsonObject | null = null\n let snapshotData: JsonObject | undefined\n\n if (hasLocalizeStatusEnabled(globalConfig)) {\n if (hasAuthorizedPublicationStatus) {\n let accessibleLocaleCodes = config.localization.localeCodes\n\n if (config.localization.filterAvailableLocales) {\n const filteredLocales = await config.localization.filterAvailableLocales({\n locales: config.localization.locales,\n req,\n })\n accessibleLocaleCodes = filteredLocales.map((locale) =>\n typeof locale === 'string' ? locale : locale.code,\n )\n }\n\n if (typeof result._status !== 'object' || result._status === null) {\n result._status = {}\n }\n\n for (const localeCode of accessibleLocaleCodes) {\n result._status[localeCode] = unpublishAllLocales ? 'draft' : 'published'\n }\n } else if (!isSavingDraft) {\n // publishing a single locale\n currentGlobal = await payload.db.findGlobal({\n slug: globalConfig.slug,\n req,\n where: query,\n })\n snapshotData = result\n }\n } else if (publishSpecificLocale) {\n // previous way of publishing a single locale\n currentGlobal = (\n await getLatestGlobalVersion({\n slug,\n config: globalConfig,\n payload,\n published: true,\n req,\n where: query,\n })\n ).global\n snapshotData = {\n ...result,\n _status: 'draft',\n }\n }\n\n if (snapshotData) {\n snapshotToSave = deepCopyObjectSimple(snapshotData)\n\n result = mergeLocalizedData({\n configBlockReferences: config.blocks,\n dataWithLocales: result || {},\n docWithLocales: currentGlobal || {},\n fields: globalConfig.fields,\n selectedLocales: [locale!],\n })\n }\n }\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n const select = sanitizeSelect({\n fields: globalConfig.flattenedFields,\n forceSelect: globalConfig.forceSelect,\n select: incomingSelect,\n })\n\n if (!isSavingDraft) {\n const now = new Date().toISOString()\n // Ensure global has createdAt\n if (!result.createdAt) {\n result.createdAt = now\n }\n\n // Ensure updatedAt date is always updated\n result.updatedAt = now\n\n if (globalExists) {\n result = await payload.db.updateGlobal({\n slug,\n data: result,\n req,\n select,\n })\n } else {\n result = await payload.db.createGlobal({\n slug,\n data: result,\n req,\n })\n }\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n if (globalConfig.versions) {\n const { globalType } = result\n result = await saveVersion({\n autosave,\n docWithLocales: result,\n draft: isSavingDraft,\n global: globalConfig,\n operation: 'update',\n payload,\n publishSpecificLocale,\n req,\n select,\n snapshot: snapshotToSave,\n unpublish: unpublishAllLocales,\n })\n\n result = {\n ...result,\n globalType,\n }\n }\n\n // /////////////////////////////////////\n // Execute globalType field if not selected\n // /////////////////////////////////////\n if (select && result.globalType) {\n const selectMode = getSelectMode(select)\n if (\n (selectMode === 'include' && !select['globalType']) ||\n (selectMode === 'exclude' && select['globalType'] === false)\n ) {\n delete result['globalType']\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: null,\n context: req.context,\n depth: depth!,\n doc: result,\n draft: draftArg!,\n fallbackLocale: null,\n global: globalConfig,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterRead?.length) {\n for (const hook of globalConfig.hooks.afterRead) {\n result =\n (await hook({\n context: req.context,\n doc: result,\n global: globalConfig,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: null,\n context: req.context,\n data,\n doc: result,\n global: globalConfig,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Global\n // /////////////////////////////////////\n\n if (globalConfig.hooks?.afterChange?.length) {\n for (const hook of globalConfig.hooks.afterChange) {\n result =\n (await hook({\n context: req.context,\n data,\n doc: result,\n global: globalConfig,\n overrideAccess,\n previousDoc: originalDoc,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result as TransformGlobalWithSelect<TSlug, TSelect>\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["executeAccess","hasWhereAccessResult","Forbidden","afterChange","afterRead","beforeChange","beforeValidate","deepCopyObjectSimple","checkDocumentLockStatus","commitTransaction","getSelectMode","getTopLevelFieldNames","hasDraftsEnabled","hasDraftValidationEnabled","hasLocalizeStatusEnabled","initTransaction","killTransaction","mergeLocalizedData","sanitizeSelect","buildAllLocalesPublicationHookDoc","getAllLocalesPublicationStatus","hasAuthorizedAllLocalesPublicationStatus","normalizeAllLocalesPublicationStatus","reconcileAllLocalesPublicationStatus","validateAllLocalesPublicationFlags","getLatestGlobalVersion","saveVersion","updateOperation","args","publishSpecificLocale","req","locale","initialGlobalConfig","globalConfig","publishAllLocales","unpublishAllLocales","initialAllLocalesPublicationStatus","hasLocalizedStatus","Boolean","payload","config","localization","draft","initialAllLocalesPublicationIntent","data","status","shouldCommit","disableTransaction","hooks","beforeOperation","length","hook","context","global","operation","overrideAccess","slug","autosave","depth","draftArg","overrideLock","populate","publishAllLocalesArg","fallbackLocale","select","incomingSelect","showHiddenFields","unpublishAllLocalesArg","requestedAllLocalesPublicationStatus","allLocalesPublicationStatus","intent","isSavingDraft","_status","submittedTopLevelFieldNames","undefined","accessResults","access","update","query","globalVersionResult","where","globalExists","Object","keys","t","globalJSON","_id","originalDoc","collection","doc","globalSlug","lockErrorMessage","statusFieldAccess","publicationFieldPolicyDoc","docWithLocales","docForHooks","onFieldAccess","accessResult","path","publicationStatusIsAuthorized","publicationHookDoc","publicationData","beforeChangeArgs","fieldsToValidate","skipValidation","statusFieldValue","result","onDataProcessed","processedData","hasAuthorizedPublicationStatus","fieldAccessDenied","fieldValue","snapshotToSave","versions","currentGlobal","snapshotData","accessibleLocaleCodes","localeCodes","filterAvailableLocales","filteredLocales","locales","map","code","localeCode","db","findGlobal","published","configBlockReferences","blocks","dataWithLocales","fields","selectedLocales","flattenedFields","forceSelect","now","Date","toISOString","createdAt","updatedAt","updateGlobal","createGlobal","globalType","snapshot","unpublish","selectMode","previousDoc","error"],"mappings":"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"}
|