payload 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ee5d8bd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/adapters/router.d.ts +1 -1
- package/dist/admin/adapters/router.d.ts.map +1 -1
- package/dist/admin/adapters/router.js.map +1 -1
- package/dist/admin/forms/Diff.d.ts +0 -4
- package/dist/admin/forms/Diff.d.ts.map +1 -1
- package/dist/admin/forms/Diff.js.map +1 -1
- package/dist/admin/forms/Form.d.ts +0 -2
- package/dist/admin/forms/Form.d.ts.map +1 -1
- package/dist/admin/forms/Form.js.map +1 -1
- package/dist/admin/initAdminContext.d.ts.map +1 -1
- package/dist/admin/initAdminContext.js +0 -10
- package/dist/admin/initAdminContext.js.map +1 -1
- package/dist/auth/createAuthToken.d.ts +26 -0
- package/dist/auth/createAuthToken.d.ts.map +1 -0
- package/dist/auth/createAuthToken.js +39 -0
- package/dist/auth/createAuthToken.js.map +1 -0
- package/dist/auth/endpoints/refresh.d.ts.map +1 -1
- package/dist/auth/endpoints/refresh.js +2 -1
- package/dist/auth/endpoints/refresh.js.map +1 -1
- package/dist/auth/getFieldsToSign.js.map +1 -1
- package/dist/auth/loginWithCookie.d.ts.map +1 -1
- package/dist/auth/loginWithCookie.js +1 -0
- package/dist/auth/loginWithCookie.js.map +1 -1
- package/dist/auth/operations/local/login.d.ts.map +1 -1
- package/dist/auth/operations/local/login.js +1 -0
- package/dist/auth/operations/local/login.js.map +1 -1
- package/dist/auth/operations/login.d.ts +2 -0
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/login.js +6 -19
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/operations/refresh.d.ts +8 -0
- package/dist/auth/operations/refresh.d.ts.map +1 -1
- package/dist/auth/operations/refresh.js +50 -19
- package/dist/auth/operations/refresh.js.map +1 -1
- package/dist/auth/operations/resetPassword.d.ts.map +1 -1
- package/dist/auth/operations/resetPassword.js +54 -20
- package/dist/auth/operations/resetPassword.js.map +1 -1
- package/dist/auth/refreshAuthToken.d.ts +32 -0
- package/dist/auth/refreshAuthToken.d.ts.map +1 -0
- package/dist/auth/refreshAuthToken.js +113 -0
- package/dist/auth/refreshAuthToken.js.map +1 -0
- package/dist/auth/serverFunctions/cookies.js.map +1 -1
- package/dist/auth/serverFunctions/login.js.map +1 -1
- package/dist/auth/sessions.d.ts +9 -2
- package/dist/auth/sessions.d.ts.map +1 -1
- package/dist/auth/sessions.js +6 -5
- package/dist/auth/sessions.js.map +1 -1
- package/dist/auth/types.d.ts +25 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/cli/commands/data/utilities.d.ts +1 -1
- package/dist/cli/commands/data/utilities.d.ts.map +1 -1
- package/dist/cli/commands/data/utilities.js.map +1 -1
- package/dist/cli/defineCLICommand.js +1 -1
- package/dist/cli/defineCLICommand.js.map +1 -1
- package/dist/collections/config/client.d.ts +1 -1
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +0 -1
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/defaults.d.ts +2 -0
- package/dist/collections/config/defaults.d.ts.map +1 -1
- package/dist/collections/config/defaults.js +4 -0
- package/dist/collections/config/defaults.js.map +1 -1
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +3 -0
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/sanitizeCompoundIndexes.d.ts.map +1 -1
- package/dist/collections/config/sanitizeCompoundIndexes.js +0 -9
- package/dist/collections/config/sanitizeCompoundIndexes.js.map +1 -1
- package/dist/collections/config/types.d.ts +4 -21
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/dataloader.d.ts +1 -10
- package/dist/collections/dataloader.d.ts.map +1 -1
- package/dist/collections/dataloader.js +6 -14
- package/dist/collections/dataloader.js.map +1 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +0 -13
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/delete.d.ts.map +1 -1
- package/dist/collections/operations/delete.js +121 -638
- package/dist/collections/operations/delete.js.map +1 -1
- package/dist/collections/operations/deleteByID.d.ts.map +1 -1
- package/dist/collections/operations/deleteByID.js +32 -238
- package/dist/collections/operations/deleteByID.js.map +1 -1
- package/dist/collections/operations/findByID.d.ts.map +1 -1
- package/dist/collections/operations/findByID.js +0 -6
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/findDistinct.js +6 -7
- package/dist/collections/operations/findDistinct.js.map +1 -1
- package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/findVersionByID.js +7 -0
- package/dist/collections/operations/findVersionByID.js.map +1 -1
- package/dist/collections/operations/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/findVersions.js +5 -0
- package/dist/collections/operations/findVersions.js.map +1 -1
- package/dist/collections/operations/local/count.d.ts +4 -9
- package/dist/collections/operations/local/count.d.ts.map +1 -1
- package/dist/collections/operations/local/count.js.map +1 -1
- package/dist/collections/operations/local/countVersions.d.ts +0 -4
- package/dist/collections/operations/local/countVersions.d.ts.map +1 -1
- package/dist/collections/operations/local/countVersions.js.map +1 -1
- package/dist/collections/operations/local/create.d.ts +4 -9
- package/dist/collections/operations/local/create.d.ts.map +1 -1
- package/dist/collections/operations/local/create.js.map +1 -1
- package/dist/collections/operations/local/delete.d.ts +4 -9
- package/dist/collections/operations/local/delete.d.ts.map +1 -1
- package/dist/collections/operations/local/delete.js.map +1 -1
- package/dist/collections/operations/local/duplicate.d.ts +0 -5
- package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
- package/dist/collections/operations/local/duplicate.js.map +1 -1
- package/dist/collections/operations/local/find.d.ts +4 -9
- package/dist/collections/operations/local/find.d.ts.map +1 -1
- package/dist/collections/operations/local/find.js.map +1 -1
- package/dist/collections/operations/local/findByID.d.ts +4 -9
- package/dist/collections/operations/local/findByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findByID.js.map +1 -1
- package/dist/collections/operations/local/findDistinct.d.ts +0 -5
- package/dist/collections/operations/local/findDistinct.d.ts.map +1 -1
- package/dist/collections/operations/local/findDistinct.js.map +1 -1
- package/dist/collections/operations/local/findVersionByID.d.ts +0 -5
- package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersionByID.js.map +1 -1
- package/dist/collections/operations/local/findVersions.d.ts +0 -5
- package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
- package/dist/collections/operations/local/findVersions.js.map +1 -1
- package/dist/collections/operations/local/restoreVersion.d.ts +0 -5
- package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/local/restoreVersion.js.map +1 -1
- package/dist/collections/operations/local/update.d.ts +4 -9
- package/dist/collections/operations/local/update.d.ts.map +1 -1
- package/dist/collections/operations/local/update.js.map +1 -1
- package/dist/collections/operations/renameFile.js +1 -1
- package/dist/collections/operations/renameFile.js.map +1 -1
- package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
- package/dist/collections/operations/restoreVersion.js +76 -157
- package/dist/collections/operations/restoreVersion.js.map +1 -1
- package/dist/collections/operations/update.d.ts.map +1 -1
- package/dist/collections/operations/update.js +171 -357
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/collections/operations/updateByID.d.ts +0 -15
- package/dist/collections/operations/updateByID.d.ts.map +1 -1
- package/dist/collections/operations/updateByID.js +60 -265
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/collections/operations/utilities/buildBeforeOperation.d.ts.map +1 -1
- package/dist/collections/operations/utilities/buildBeforeOperation.js +0 -7
- package/dist/collections/operations/utilities/buildBeforeOperation.js.map +1 -1
- package/dist/collections/operations/utilities/update.d.ts +1 -14
- package/dist/collections/operations/utilities/update.d.ts.map +1 -1
- package/dist/collections/operations/utilities/update.js +20 -92
- package/dist/collections/operations/utilities/update.js.map +1 -1
- package/dist/collections/operations/validate.js +4 -4
- package/dist/collections/operations/validate.js.map +1 -1
- package/dist/config/client.d.ts +1 -3
- package/dist/config/client.d.ts.map +1 -1
- package/dist/config/client.js +1 -9
- package/dist/config/client.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +1 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/definePlugin.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +2 -40
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +13 -21
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/defaultCopy.d.ts.map +1 -1
- package/dist/database/defaultCopy.js +0 -1
- package/dist/database/defaultCopy.js.map +1 -1
- package/dist/database/types.d.ts +4 -75
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js.map +1 -1
- package/dist/exports/build-config.d.ts +9 -0
- package/dist/exports/build-config.d.ts.map +1 -0
- package/dist/exports/build-config.js +38 -0
- package/dist/exports/build-config.js.map +1 -0
- package/dist/exports/shared.d.ts +0 -2
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +0 -2
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/baseFields/authorship/index.d.ts +1 -2
- package/dist/fields/baseFields/authorship/index.d.ts.map +1 -1
- package/dist/fields/baseFields/authorship/index.js +0 -12
- package/dist/fields/baseFields/authorship/index.js.map +1 -1
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/config/reservedFieldNames.d.ts.map +1 -1
- package/dist/fields/config/reservedFieldNames.js.map +1 -1
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/afterChange/promise.js.map +1 -1
- package/dist/fields/hooks/afterRead/index.d.ts +0 -8
- package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/index.js +2 -6
- package/dist/fields/hooks/afterRead/index.js.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts +1 -3
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.js +17 -41
- package/dist/fields/hooks/afterRead/promise.js.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +0 -2
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts +1 -3
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.js +2 -4
- package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
- package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.js +0 -3
- package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts +14 -0
- package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts.map +1 -0
- package/dist/fields/hooks/beforeChange/flattenValidationData.js +36 -0
- package/dist/fields/hooks/beforeChange/flattenValidationData.js.map +1 -0
- package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +96 -22
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js +2 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.js +0 -8
- package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +4 -1
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/config/types.d.ts +2 -6
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js.map +1 -1
- package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
- package/dist/globals/operations/countGlobalVersions.js +0 -7
- package/dist/globals/operations/countGlobalVersions.js.map +1 -1
- package/dist/globals/operations/findOne.d.ts.map +1 -1
- package/dist/globals/operations/findOne.js +0 -7
- package/dist/globals/operations/findOne.js.map +1 -1
- package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/findVersionByID.js +6 -6
- package/dist/globals/operations/findVersionByID.js.map +1 -1
- package/dist/globals/operations/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/findVersions.js +4 -6
- package/dist/globals/operations/findVersions.js.map +1 -1
- package/dist/globals/operations/local/countVersions.d.ts +0 -5
- package/dist/globals/operations/local/countVersions.d.ts.map +1 -1
- package/dist/globals/operations/local/countVersions.js.map +1 -1
- package/dist/globals/operations/local/findOne.d.ts +0 -5
- package/dist/globals/operations/local/findOne.d.ts.map +1 -1
- package/dist/globals/operations/local/findOne.js.map +1 -1
- package/dist/globals/operations/local/findVersionByID.d.ts +0 -5
- package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
- package/dist/globals/operations/local/findVersionByID.js.map +1 -1
- package/dist/globals/operations/local/findVersions.d.ts +0 -5
- package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
- package/dist/globals/operations/local/findVersions.js.map +1 -1
- package/dist/globals/operations/local/restoreVersion.d.ts +0 -5
- package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/local/restoreVersion.js.map +1 -1
- package/dist/globals/operations/local/update.d.ts +0 -5
- package/dist/globals/operations/local/update.d.ts.map +1 -1
- package/dist/globals/operations/local/update.js +18 -61
- package/dist/globals/operations/local/update.js.map +1 -1
- package/dist/globals/operations/restoreVersion.d.ts +2 -3
- package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
- package/dist/globals/operations/restoreVersion.js +24 -61
- package/dist/globals/operations/restoreVersion.js.map +1 -1
- package/dist/globals/operations/update.d.ts.map +1 -1
- package/dist/globals/operations/update.js +8 -86
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/globals/operations/validate.js +1 -1
- package/dist/globals/operations/validate.js.map +1 -1
- package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -1
- package/dist/hierarchy/addHierarchyToCollection.js +32 -21
- package/dist/hierarchy/addHierarchyToCollection.js.map +1 -1
- package/dist/hierarchy/createFolderField.js.map +1 -1
- package/dist/hierarchy/getInitialTreeData.d.ts +1 -3
- package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -1
- package/dist/hierarchy/getInitialTreeData.js +1 -4
- package/dist/hierarchy/getInitialTreeData.js.map +1 -1
- package/dist/hierarchy/resolveHierarchyCollections.js +9 -3
- package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -1
- package/dist/hierarchy/utils/computePaths.d.ts.map +1 -1
- package/dist/hierarchy/utils/computePaths.js.map +1 -1
- package/dist/index.bundled.d.ts +4336 -5501
- package/dist/index.d.ts +27 -51
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -37
- package/dist/index.js.map +1 -1
- package/dist/llm-instructions/getInstructionsCollection.d.ts.map +1 -1
- package/dist/llm-instructions/getInstructionsCollection.js +2 -0
- package/dist/llm-instructions/getInstructionsCollection.js.map +1 -1
- package/dist/preferences/keys.d.ts +4 -11
- package/dist/preferences/keys.d.ts.map +1 -1
- package/dist/preferences/keys.js +3 -10
- package/dist/preferences/keys.js.map +1 -1
- package/dist/preferences/types.d.ts +0 -19
- package/dist/preferences/types.d.ts.map +1 -1
- package/dist/preferences/types.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
- package/dist/types/index.d.ts +0 -13
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
- package/dist/uploads/deleteAssociatedFiles.js +29 -108
- package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
- package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
- package/dist/uploads/endpoints/getFile.js +0 -5
- package/dist/uploads/endpoints/getFile.js.map +1 -1
- package/dist/uploads/fileExists.d.ts.map +1 -1
- package/dist/uploads/fileExists.js +2 -5
- package/dist/uploads/fileExists.js.map +1 -1
- package/dist/uploads/fileVersioning/archive.d.ts.map +1 -1
- package/dist/uploads/fileVersioning/archive.js +1 -15
- package/dist/uploads/fileVersioning/archive.js.map +1 -1
- package/dist/uploads/fileVersioning/cleanup.d.ts +0 -7
- package/dist/uploads/fileVersioning/cleanup.d.ts.map +1 -1
- package/dist/uploads/fileVersioning/cleanup.js +0 -12
- package/dist/uploads/fileVersioning/cleanup.js.map +1 -1
- package/dist/uploads/fileVersioning/cloudStorage.d.ts.map +1 -1
- package/dist/uploads/fileVersioning/cloudStorage.js +1 -16
- package/dist/uploads/fileVersioning/cloudStorage.js.map +1 -1
- package/dist/uploads/fileVersioning/resolveHistoricalFile.js.map +1 -1
- package/dist/uploads/formatFilesize.js +1 -1
- package/dist/uploads/formatFilesize.js.map +1 -1
- package/dist/uploads/generateFileData.d.ts +0 -5
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +2 -74
- package/dist/uploads/generateFileData.js.map +1 -1
- package/dist/uploads/getBaseFields.d.ts.map +1 -1
- package/dist/uploads/getBaseFields.js +29 -46
- package/dist/uploads/getBaseFields.js.map +1 -1
- package/dist/uploads/getFileContentRequirement.js.map +1 -1
- package/dist/uploads/getFileFromUploadInstructions.js.map +1 -1
- package/dist/uploads/getSafeFilename.d.ts.map +1 -1
- package/dist/uploads/getSafeFilename.js +3 -5
- package/dist/uploads/getSafeFilename.js.map +1 -1
- package/dist/uploads/safeFetch.js.map +1 -1
- package/dist/uploads/stagedUpload.js.map +1 -1
- package/dist/uploads/transformers/handleDynamicFileRequest.js +11 -2
- package/dist/uploads/transformers/handleDynamicFileRequest.js.map +1 -1
- package/dist/uploads/types.d.ts +0 -11
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js.map +1 -1
- package/dist/uploads/uploadFiles.d.ts +1 -4
- package/dist/uploads/uploadFiles.d.ts.map +1 -1
- package/dist/uploads/uploadFiles.js +5 -29
- package/dist/uploads/uploadFiles.js.map +1 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.js +0 -1
- package/dist/utilities/addSelectGenericsToGeneretedTypes.js.map +1 -1
- package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
- package/dist/utilities/assertNoValidationWrite.d.ts.map +1 -1
- package/dist/utilities/assertNoValidationWrite.js +0 -4
- package/dist/utilities/assertNoValidationWrite.js.map +1 -1
- package/dist/utilities/checkDocumentLockStatus.d.ts +6 -15
- package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -1
- package/dist/utilities/checkDocumentLockStatus.js +11 -44
- package/dist/utilities/checkDocumentLockStatus.js.map +1 -1
- package/dist/utilities/cloneValidationRequest.js.map +1 -1
- package/dist/utilities/commitTransaction.d.ts +0 -4
- package/dist/utilities/commitTransaction.d.ts.map +1 -1
- package/dist/utilities/commitTransaction.js +1 -41
- package/dist/utilities/commitTransaction.js.map +1 -1
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +2 -18
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/createPayloadRequest.d.ts +0 -5
- package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
- package/dist/utilities/createPayloadRequest.js +3 -50
- package/dist/utilities/createPayloadRequest.js.map +1 -1
- package/dist/utilities/createPayloadRequestFromWebRequest.d.ts +12 -1
- package/dist/utilities/createPayloadRequestFromWebRequest.d.ts.map +1 -1
- package/dist/utilities/createPayloadRequestFromWebRequest.js +9 -5
- package/dist/utilities/createPayloadRequestFromWebRequest.js.map +1 -1
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/dist/utilities/documentMatchingWhereExists.js +1 -1
- package/dist/utilities/documentMatchingWhereExists.js.map +1 -1
- package/dist/utilities/entityInputSchema/validateEntityData.d.ts.map +1 -1
- package/dist/utilities/entityInputSchema/validateEntityData.js.map +1 -1
- package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js +1 -0
- package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
- package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
- package/dist/utilities/getVersionsConfig.d.ts +4 -0
- package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
- package/dist/utilities/getVersionsConfig.js +5 -0
- package/dist/utilities/getVersionsConfig.js.map +1 -1
- package/dist/utilities/handleEndpoints.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.js +10 -9
- package/dist/utilities/handleEndpoints.js.map +1 -1
- package/dist/utilities/httpStatus.d.ts +0 -2
- package/dist/utilities/httpStatus.d.ts.map +1 -1
- package/dist/utilities/httpStatus.js +1 -3
- package/dist/utilities/httpStatus.js.map +1 -1
- package/dist/utilities/initTransaction.d.ts.map +1 -1
- package/dist/utilities/initTransaction.js +7 -35
- package/dist/utilities/initTransaction.js.map +1 -1
- package/dist/utilities/killTransaction.d.ts.map +1 -1
- package/dist/utilities/killTransaction.js +0 -27
- package/dist/utilities/killTransaction.js.map +1 -1
- package/dist/utilities/parseParams/index.js.map +1 -1
- package/dist/utilities/parseValidationLocale.js.map +1 -1
- package/dist/utilities/sanitizePopulateParam.js.map +1 -1
- package/dist/utilities/telemetry/conf/index.d.ts +4 -1
- package/dist/utilities/telemetry/conf/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/conf/index.js.map +1 -1
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -1
- package/dist/versions/allLocalesPublicationStatus.js.map +1 -1
- package/dist/versions/buildCollectionFields.d.ts.map +1 -1
- package/dist/versions/buildCollectionFields.js +0 -23
- package/dist/versions/buildCollectionFields.js.map +1 -1
- package/dist/versions/buildGlobalFields.d.ts.map +1 -1
- package/dist/versions/buildGlobalFields.js +0 -14
- package/dist/versions/buildGlobalFields.js.map +1 -1
- package/dist/versions/buildVersionCompoundIndexes.d.ts.map +1 -1
- package/dist/versions/buildVersionCompoundIndexes.js +2 -8
- package/dist/versions/buildVersionCompoundIndexes.js.map +1 -1
- package/dist/versions/deleteCollectionVersions.d.ts +1 -2
- package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
- package/dist/versions/deleteCollectionVersions.js +8 -37
- package/dist/versions/deleteCollectionVersions.js.map +1 -1
- package/dist/versions/deleteScheduledPublishJobs.d.ts.map +1 -1
- package/dist/versions/deleteScheduledPublishJobs.js +0 -4
- package/dist/versions/deleteScheduledPublishJobs.js.map +1 -1
- package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
- package/dist/versions/drafts/appendVersionToQueryKey.js +1 -9
- package/dist/versions/drafts/appendVersionToQueryKey.js.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js +1 -8
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
- package/dist/versions/enforceMaxVersions.d.ts +0 -1
- package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
- package/dist/versions/enforceMaxVersions.js +6 -22
- package/dist/versions/enforceMaxVersions.js.map +1 -1
- package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
- package/dist/versions/getLatestCollectionVersion.js +2 -10
- package/dist/versions/getLatestCollectionVersion.js.map +1 -1
- package/dist/versions/getLatestGlobalVersion.d.ts +2 -6
- package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
- package/dist/versions/getLatestGlobalVersion.js +21 -65
- package/dist/versions/getLatestGlobalVersion.js.map +1 -1
- package/dist/versions/isInheritedReadVersionsAccess.js.map +1 -1
- package/dist/versions/saveVersion.d.ts +0 -7
- package/dist/versions/saveVersion.d.ts.map +1 -1
- package/dist/versions/saveVersion.js +4 -27
- package/dist/versions/saveVersion.js.map +1 -1
- package/dist/versions/updateLatestVersion.d.ts +0 -1
- package/dist/versions/updateLatestVersion.d.ts.map +1 -1
- package/dist/versions/updateLatestVersion.js +7 -24
- package/dist/versions/updateLatestVersion.js.map +1 -1
- package/package.json +30 -28
- package/skills/payload/reference/ENDPOINTS.md +3 -9
- package/skills/payload/reference/PLUGIN-DEVELOPMENT.md +4 -4
- package/dist/admin/getAdminPreferences.d.ts +0 -10
- package/dist/admin/getAdminPreferences.d.ts.map +0 -1
- package/dist/admin/getAdminPreferences.js +0 -53
- package/dist/admin/getAdminPreferences.js.map +0 -1
- package/dist/admin/getRequestBranch.d.ts +0 -6
- package/dist/admin/getRequestBranch.d.ts.map +0 -1
- package/dist/admin/getRequestBranch.js +0 -17
- package/dist/admin/getRequestBranch.js.map +0 -1
- package/dist/branching/appendBranchFilter.d.ts +0 -30
- package/dist/branching/appendBranchFilter.d.ts.map +0 -1
- package/dist/branching/appendBranchFilter.js +0 -105
- package/dist/branching/appendBranchFilter.js.map +0 -1
- package/dist/branching/assertBranchAccess.d.ts +0 -10
- package/dist/branching/assertBranchAccess.d.ts.map +0 -1
- package/dist/branching/assertBranchAccess.js +0 -36
- package/dist/branching/assertBranchAccess.js.map +0 -1
- package/dist/branching/assertBranchActionAccess.d.ts +0 -10
- package/dist/branching/assertBranchActionAccess.d.ts.map +0 -1
- package/dist/branching/assertBranchActionAccess.js +0 -15
- package/dist/branching/assertBranchActionAccess.js.map +0 -1
- package/dist/branching/assertBranchCreatedDocumentsUnreferenced.d.ts +0 -53
- package/dist/branching/assertBranchCreatedDocumentsUnreferenced.d.ts.map +0 -1
- package/dist/branching/assertBranchCreatedDocumentsUnreferenced.js +0 -833
- package/dist/branching/assertBranchCreatedDocumentsUnreferenced.js.map +0 -1
- package/dist/branching/assertBranchReadable.d.ts +0 -36
- package/dist/branching/assertBranchReadable.d.ts.map +0 -1
- package/dist/branching/assertBranchReadable.js +0 -83
- package/dist/branching/assertBranchReadable.js.map +0 -1
- package/dist/branching/assertBranchUpdateAccess.d.ts +0 -8
- package/dist/branching/assertBranchUpdateAccess.d.ts.map +0 -1
- package/dist/branching/assertBranchUpdateAccess.js +0 -12
- package/dist/branching/assertBranchUpdateAccess.js.map +0 -1
- package/dist/branching/assertBranchWritable.d.ts +0 -18
- package/dist/branching/assertBranchWritable.d.ts.map +0 -1
- package/dist/branching/assertBranchWritable.js +0 -46
- package/dist/branching/assertBranchWritable.js.map +0 -1
- package/dist/branching/branchIDs.d.ts +0 -38
- package/dist/branching/branchIDs.d.ts.map +0 -1
- package/dist/branching/branchIDs.js +0 -113
- package/dist/branching/branchIDs.js.map +0 -1
- package/dist/branching/branchSelect.d.ts +0 -42
- package/dist/branching/branchSelect.d.ts.map +0 -1
- package/dist/branching/branchSelect.js +0 -97
- package/dist/branching/branchSelect.js.map +0 -1
- package/dist/branching/checkFieldAccess.d.ts +0 -21
- package/dist/branching/checkFieldAccess.d.ts.map +0 -1
- package/dist/branching/checkFieldAccess.js +0 -238
- package/dist/branching/checkFieldAccess.js.map +0 -1
- package/dist/branching/collections.d.ts +0 -14
- package/dist/branching/collections.d.ts.map +0 -1
- package/dist/branching/collections.js +0 -713
- package/dist/branching/collections.js.map +0 -1
- package/dist/branching/combineBranchAccess.d.ts +0 -6
- package/dist/branching/combineBranchAccess.d.ts.map +0 -1
- package/dist/branching/combineBranchAccess.js +0 -22
- package/dist/branching/combineBranchAccess.js.map +0 -1
- package/dist/branching/copyUploadFilesToBranch.d.ts +0 -9
- package/dist/branching/copyUploadFilesToBranch.d.ts.map +0 -1
- package/dist/branching/copyUploadFilesToBranch.js +0 -126
- package/dist/branching/copyUploadFilesToBranch.js.map +0 -1
- package/dist/branching/createShadowRow.d.ts +0 -70
- package/dist/branching/createShadowRow.d.ts.map +0 -1
- package/dist/branching/createShadowRow.js +0 -296
- package/dist/branching/createShadowRow.js.map +0 -1
- package/dist/branching/discard.d.ts +0 -52
- package/dist/branching/discard.d.ts.map +0 -1
- package/dist/branching/discard.js +0 -428
- package/dist/branching/discard.js.map +0 -1
- package/dist/branching/effectiveOperations.d.ts +0 -55
- package/dist/branching/effectiveOperations.d.ts.map +0 -1
- package/dist/branching/effectiveOperations.js +0 -472
- package/dist/branching/effectiveOperations.js.map +0 -1
- package/dist/branching/endpoints/discard.d.ts +0 -15
- package/dist/branching/endpoints/discard.d.ts.map +0 -1
- package/dist/branching/endpoints/discard.js +0 -55
- package/dist/branching/endpoints/discard.js.map +0 -1
- package/dist/branching/endpoints/merge.d.ts +0 -34
- package/dist/branching/endpoints/merge.d.ts.map +0 -1
- package/dist/branching/endpoints/merge.js +0 -119
- package/dist/branching/endpoints/merge.js.map +0 -1
- package/dist/branching/forkDocument.d.ts +0 -20
- package/dist/branching/forkDocument.d.ts.map +0 -1
- package/dist/branching/forkDocument.js +0 -169
- package/dist/branching/forkDocument.js.map +0 -1
- package/dist/branching/globalMergeWrites.d.ts +0 -21
- package/dist/branching/globalMergeWrites.d.ts.map +0 -1
- package/dist/branching/globalMergeWrites.js +0 -146
- package/dist/branching/globalMergeWrites.js.map +0 -1
- package/dist/branching/globals.d.ts +0 -49
- package/dist/branching/globals.d.ts.map +0 -1
- package/dist/branching/globals.js +0 -197
- package/dist/branching/globals.js.map +0 -1
- package/dist/branching/hooks.d.ts +0 -24
- package/dist/branching/hooks.d.ts.map +0 -1
- package/dist/branching/hooks.js +0 -92
- package/dist/branching/hooks.js.map +0 -1
- package/dist/branching/injectBranchFields.d.ts +0 -40
- package/dist/branching/injectBranchFields.d.ts.map +0 -1
- package/dist/branching/injectBranchFields.js +0 -229
- package/dist/branching/injectBranchFields.js.map +0 -1
- package/dist/branching/merge/applyMergeChange.d.ts +0 -27
- package/dist/branching/merge/applyMergeChange.d.ts.map +0 -1
- package/dist/branching/merge/applyMergeChange.js +0 -853
- package/dist/branching/merge/applyMergeChange.js.map +0 -1
- package/dist/branching/merge/branchMergeStatus.d.ts +0 -12
- package/dist/branching/merge/branchMergeStatus.d.ts.map +0 -1
- package/dist/branching/merge/branchMergeStatus.js +0 -74
- package/dist/branching/merge/branchMergeStatus.js.map +0 -1
- package/dist/branching/merge/executeMerge.d.ts +0 -22
- package/dist/branching/merge/executeMerge.d.ts.map +0 -1
- package/dist/branching/merge/executeMerge.js +0 -600
- package/dist/branching/merge/executeMerge.js.map +0 -1
- package/dist/branching/merge/finalizeMerge.d.ts +0 -40
- package/dist/branching/merge/finalizeMerge.d.ts.map +0 -1
- package/dist/branching/merge/finalizeMerge.js +0 -237
- package/dist/branching/merge/finalizeMerge.js.map +0 -1
- package/dist/branching/merge/mergeLedger.d.ts +0 -40
- package/dist/branching/merge/mergeLedger.d.ts.map +0 -1
- package/dist/branching/merge/mergeLedger.js +0 -130
- package/dist/branching/merge/mergeLedger.js.map +0 -1
- package/dist/branching/merge/prepareMerge.d.ts +0 -41
- package/dist/branching/merge/prepareMerge.d.ts.map +0 -1
- package/dist/branching/merge/prepareMerge.js +0 -234
- package/dist/branching/merge/prepareMerge.js.map +0 -1
- package/dist/branching/merge/recoverMerge.d.ts +0 -16
- package/dist/branching/merge/recoverMerge.d.ts.map +0 -1
- package/dist/branching/merge/recoverMerge.js +0 -199
- package/dist/branching/merge/recoverMerge.js.map +0 -1
- package/dist/branching/merge/retryFailedCleanups.d.ts +0 -36
- package/dist/branching/merge/retryFailedCleanups.d.ts.map +0 -1
- package/dist/branching/merge/retryFailedCleanups.js +0 -335
- package/dist/branching/merge/retryFailedCleanups.js.map +0 -1
- package/dist/branching/merge/utilities.d.ts +0 -35
- package/dist/branching/merge/utilities.d.ts.map +0 -1
- package/dist/branching/merge/utilities.js +0 -54
- package/dist/branching/merge/utilities.js.map +0 -1
- package/dist/branching/merge.d.ts +0 -88
- package/dist/branching/merge.d.ts.map +0 -1
- package/dist/branching/merge.js +0 -163
- package/dist/branching/merge.js.map +0 -1
- package/dist/branching/mergeWriteGuard.d.ts +0 -20
- package/dist/branching/mergeWriteGuard.d.ts.map +0 -1
- package/dist/branching/mergeWriteGuard.js +0 -27
- package/dist/branching/mergeWriteGuard.js.map +0 -1
- package/dist/branching/preflight.d.ts +0 -71
- package/dist/branching/preflight.d.ts.map +0 -1
- package/dist/branching/preflight.js +0 -757
- package/dist/branching/preflight.js.map +0 -1
- package/dist/branching/readLocalizedBranchWrite.d.ts +0 -14
- package/dist/branching/readLocalizedBranchWrite.d.ts.map +0 -1
- package/dist/branching/readLocalizedBranchWrite.js +0 -90
- package/dist/branching/readLocalizedBranchWrite.js.map +0 -1
- package/dist/branching/readMergeSnapshot.d.ts +0 -18
- package/dist/branching/readMergeSnapshot.d.ts.map +0 -1
- package/dist/branching/readMergeSnapshot.js +0 -99
- package/dist/branching/readMergeSnapshot.js.map +0 -1
- package/dist/branching/resolveBranch.d.ts +0 -153
- package/dist/branching/resolveBranch.d.ts.map +0 -1
- package/dist/branching/resolveBranch.js +0 -363
- package/dist/branching/resolveBranch.js.map +0 -1
- package/dist/branching/resolveBranchActionAccess.d.ts +0 -8
- package/dist/branching/resolveBranchActionAccess.d.ts.map +0 -1
- package/dist/branching/resolveBranchActionAccess.js +0 -9
- package/dist/branching/resolveBranchActionAccess.js.map +0 -1
- package/dist/branching/resolveBranchQuery.d.ts +0 -48
- package/dist/branching/resolveBranchQuery.d.ts.map +0 -1
- package/dist/branching/resolveBranchQuery.js +0 -115
- package/dist/branching/resolveBranchQuery.js.map +0 -1
- package/dist/branching/resolveBranchRowID.d.ts +0 -22
- package/dist/branching/resolveBranchRowID.d.ts.map +0 -1
- package/dist/branching/resolveBranchRowID.js +0 -70
- package/dist/branching/resolveBranchRowID.js.map +0 -1
- package/dist/branching/sanitizeBranchingConfig.d.ts +0 -31
- package/dist/branching/sanitizeBranchingConfig.d.ts.map +0 -1
- package/dist/branching/sanitizeBranchingConfig.js +0 -110
- package/dist/branching/sanitizeBranchingConfig.js.map +0 -1
- package/dist/branching/schedule/job.d.ts +0 -51
- package/dist/branching/schedule/job.d.ts.map +0 -1
- package/dist/branching/schedule/job.js +0 -151
- package/dist/branching/schedule/job.js.map +0 -1
- package/dist/branching/selectBranchChanges.d.ts +0 -8
- package/dist/branching/selectBranchChanges.d.ts.map +0 -1
- package/dist/branching/selectBranchChanges.js +0 -9
- package/dist/branching/selectBranchChanges.js.map +0 -1
- package/dist/branching/stripBranchMergeData.d.ts +0 -11
- package/dist/branching/stripBranchMergeData.d.ts.map +0 -1
- package/dist/branching/stripBranchMergeData.js +0 -20
- package/dist/branching/stripBranchMergeData.js.map +0 -1
- package/dist/branching/tombstone.d.ts +0 -91
- package/dist/branching/tombstone.d.ts.map +0 -1
- package/dist/branching/tombstone.js +0 -546
- package/dist/branching/tombstone.js.map +0 -1
- package/dist/branching/types.d.ts +0 -158
- package/dist/branching/types.d.ts.map +0 -1
- package/dist/branching/types.js +0 -54
- package/dist/branching/types.js.map +0 -1
- package/dist/branching/validation.d.ts +0 -47
- package/dist/branching/validation.d.ts.map +0 -1
- package/dist/branching/validation.js +0 -272
- package/dist/branching/validation.js.map +0 -1
- package/dist/branching/versions.d.ts +0 -131
- package/dist/branching/versions.d.ts.map +0 -1
- package/dist/branching/versions.js +0 -572
- package/dist/branching/versions.js.map +0 -1
- package/dist/collections/operations/utilities/createOperationRetryRequest.d.ts +0 -23
- package/dist/collections/operations/utilities/createOperationRetryRequest.d.ts.map +0 -1
- package/dist/collections/operations/utilities/createOperationRetryRequest.js +0 -683
- package/dist/collections/operations/utilities/createOperationRetryRequest.js.map +0 -1
- package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.d.ts +0 -3
- package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.d.ts.map +0 -1
- package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.js +0 -3
- package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.js.map +0 -1
- package/dist/uploads/appendBranchToFileURL.d.ts +0 -6
- package/dist/uploads/appendBranchToFileURL.d.ts.map +0 -1
- package/dist/uploads/appendBranchToFileURL.js +0 -24
- package/dist/uploads/appendBranchToFileURL.js.map +0 -1
- package/dist/uploads/deleteUploadFilesExclusiveToDocument.d.ts +0 -15
- package/dist/uploads/deleteUploadFilesExclusiveToDocument.d.ts.map +0 -1
- package/dist/uploads/deleteUploadFilesExclusiveToDocument.js +0 -62
- package/dist/uploads/deleteUploadFilesExclusiveToDocument.js.map +0 -1
- package/dist/uploads/fileIdentity.d.ts +0 -24
- package/dist/uploads/fileIdentity.d.ts.map +0 -1
- package/dist/uploads/fileIdentity.js +0 -36
- package/dist/uploads/fileIdentity.js.map +0 -1
- package/dist/uploads/fileQuarantine.d.ts +0 -17
- package/dist/uploads/fileQuarantine.d.ts.map +0 -1
- package/dist/uploads/fileQuarantine.js +0 -52
- package/dist/uploads/fileQuarantine.js.map +0 -1
- package/dist/uploads/linkFileWithoutOverwrite.d.ts +0 -13
- package/dist/uploads/linkFileWithoutOverwrite.d.ts.map +0 -1
- package/dist/uploads/linkFileWithoutOverwrite.js +0 -13
- package/dist/uploads/linkFileWithoutOverwrite.js.map +0 -1
- package/dist/uploads/uploadFileRollback.d.ts +0 -31
- package/dist/uploads/uploadFileRollback.d.ts.map +0 -1
- package/dist/uploads/uploadFileRollback.js +0 -269
- package/dist/uploads/uploadFileRollback.js.map +0 -1
- package/dist/utilities/extractRelationshipID.d.ts +0 -4
- package/dist/utilities/extractRelationshipID.d.ts.map +0 -1
- package/dist/utilities/extractRelationshipID.js +0 -14
- package/dist/utilities/extractRelationshipID.js.map +0 -1
- package/dist/utilities/transactionCallbacks.d.ts +0 -77
- package/dist/utilities/transactionCallbacks.d.ts.map +0 -1
- package/dist/utilities/transactionCallbacks.js +0 -299
- package/dist/utilities/transactionCallbacks.js.map +0 -1
- package/dist/utilities/transactionMutationTracker.d.ts +0 -21
- package/dist/utilities/transactionMutationTracker.d.ts.map +0 -1
- package/dist/utilities/transactionMutationTracker.js +0 -71
- package/dist/utilities/transactionMutationTracker.js.map +0 -1
|
@@ -1,472 +0,0 @@
|
|
|
1
|
-
import { APIError } from '../errors/index.js';
|
|
2
|
-
import { batchProcessing } from '../utilities/batchProcessing.js';
|
|
3
|
-
import { extractRelationshipID } from '../utilities/extractRelationshipID.js';
|
|
4
|
-
import { traverseForLocalizedFields } from '../utilities/traverseForLocalizedFields.js';
|
|
5
|
-
import { branchDocIDField, branchField, MAIN_BRANCH } from './types.js';
|
|
6
|
-
const effectiveOperationReadBatchSize = 400;
|
|
7
|
-
/**
|
|
8
|
-
* Resolves what each pending change will do to main.
|
|
9
|
-
*
|
|
10
|
-
* The shadow row alone cannot answer this. A fork copies main's row wholesale, so
|
|
11
|
-
* a document forked from a published main row carries `_status: 'published'` even
|
|
12
|
-
* when every edit made on the branch was a draft save — and draft saves never
|
|
13
|
-
* touch the main row (§7), so the row still holds main's own pre-fork values.
|
|
14
|
-
* Reading only the row therefore reports a `publish` of values main already has:
|
|
15
|
-
* a merge that claims success and changes nothing.
|
|
16
|
-
*
|
|
17
|
-
* The branch's newest *version* is the missing half. `baseUpdatedAt`, recorded on
|
|
18
|
-
* the registry row at fork time, separates the two cases the row cannot: the
|
|
19
|
-
* shadow row's `updatedAt` still matching it means the branch never published,
|
|
20
|
-
* because only a publish rewrites that row.
|
|
21
|
-
*/ export const resolveEffectiveOperations = async ({ branch, changes, payload, req })=>{
|
|
22
|
-
const shadowsByChange = await readChangeShadows({
|
|
23
|
-
branch,
|
|
24
|
-
changes,
|
|
25
|
-
payload,
|
|
26
|
-
req
|
|
27
|
-
});
|
|
28
|
-
const resolved = [];
|
|
29
|
-
for (const change of changes){
|
|
30
|
-
const collectionSlug = change.collectionSlug;
|
|
31
|
-
const docID = getBranchChangeDocumentID({
|
|
32
|
-
change,
|
|
33
|
-
collectionSlug
|
|
34
|
-
});
|
|
35
|
-
const shadow = shadowsByChange.get(changeKey({
|
|
36
|
-
collectionSlug,
|
|
37
|
-
docID
|
|
38
|
-
})) ?? null;
|
|
39
|
-
if (!shadow) {
|
|
40
|
-
throw new APIError(`The ${collectionSlug} branch row for document ${String(docID)} is missing.`, 409);
|
|
41
|
-
}
|
|
42
|
-
resolved.push({
|
|
43
|
-
change,
|
|
44
|
-
collectionSlug,
|
|
45
|
-
docID,
|
|
46
|
-
shadow,
|
|
47
|
-
writes: await resolveWrites({
|
|
48
|
-
branch,
|
|
49
|
-
change,
|
|
50
|
-
collectionSlug,
|
|
51
|
-
docID,
|
|
52
|
-
payload,
|
|
53
|
-
req,
|
|
54
|
-
shadow
|
|
55
|
-
})
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
return resolved;
|
|
59
|
-
};
|
|
60
|
-
const changeKey = ({ collectionSlug, docID })=>`${collectionSlug}:${String(docID)}`;
|
|
61
|
-
const readChangeShadows = async ({ branch, changes, payload, req })=>{
|
|
62
|
-
const changesByCollection = new Map();
|
|
63
|
-
const shadowsByChange = new Map();
|
|
64
|
-
for (const change of changes){
|
|
65
|
-
const collectionSlug = change.collectionSlug;
|
|
66
|
-
const collectionChanges = changesByCollection.get(collectionSlug) ?? [];
|
|
67
|
-
collectionChanges.push(change);
|
|
68
|
-
changesByCollection.set(collectionSlug, collectionChanges);
|
|
69
|
-
}
|
|
70
|
-
for (const [collectionSlug, collectionChanges] of changesByCollection){
|
|
71
|
-
await batchProcessing({
|
|
72
|
-
batchSize: effectiveOperationReadBatchSize,
|
|
73
|
-
input: collectionChanges,
|
|
74
|
-
processBatch: async ({ batch })=>{
|
|
75
|
-
const createdDocumentIDs = batch.filter(({ operation })=>operation === 'create').map((change)=>getBranchChangeDocumentID({
|
|
76
|
-
change,
|
|
77
|
-
collectionSlug
|
|
78
|
-
}));
|
|
79
|
-
const existingDocumentIDs = batch.filter(({ operation })=>operation !== 'create').map((change)=>getBranchChangeDocumentID({
|
|
80
|
-
change,
|
|
81
|
-
collectionSlug
|
|
82
|
-
}));
|
|
83
|
-
const identityQueries = [];
|
|
84
|
-
if (createdDocumentIDs.length) {
|
|
85
|
-
identityQueries.push({
|
|
86
|
-
id: {
|
|
87
|
-
in: createdDocumentIDs
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
if (existingDocumentIDs.length) {
|
|
92
|
-
identityQueries.push({
|
|
93
|
-
[branchDocIDField]: {
|
|
94
|
-
in: existingDocumentIDs
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
const identityQuery = identityQueries.length === 1 ? identityQueries[0] : {
|
|
99
|
-
or: identityQueries
|
|
100
|
-
};
|
|
101
|
-
const { docs } = await payload.db.find({
|
|
102
|
-
branch: false,
|
|
103
|
-
collection: collectionSlug,
|
|
104
|
-
limit: batch.length,
|
|
105
|
-
pagination: false,
|
|
106
|
-
req,
|
|
107
|
-
where: {
|
|
108
|
-
and: [
|
|
109
|
-
{
|
|
110
|
-
[branchField]: {
|
|
111
|
-
equals: branch
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
identityQuery
|
|
115
|
-
]
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
for (const shadow of docs){
|
|
119
|
-
const docID = extractRelationshipID({
|
|
120
|
-
relationship: shadow[branchDocIDField] ?? shadow.id
|
|
121
|
-
});
|
|
122
|
-
if (docID === undefined) {
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
shadowsByChange.set(changeKey({
|
|
126
|
-
collectionSlug,
|
|
127
|
-
docID
|
|
128
|
-
}), shadow);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
return shadowsByChange;
|
|
134
|
-
};
|
|
135
|
-
const getBranchChangeDocumentID = ({ change, collectionSlug })=>{
|
|
136
|
-
const docID = extractRelationshipID({
|
|
137
|
-
relationship: change.doc
|
|
138
|
-
});
|
|
139
|
-
if (docID === undefined) {
|
|
140
|
-
throw new APIError(`The ${collectionSlug} branch change has no document ID.`, 409);
|
|
141
|
-
}
|
|
142
|
-
return docID;
|
|
143
|
-
};
|
|
144
|
-
const resolveWrites = async ({ branch, change, collectionSlug, docID, payload, req, shadow })=>{
|
|
145
|
-
if (change.operation === 'delete') {
|
|
146
|
-
return [
|
|
147
|
-
{
|
|
148
|
-
data: {},
|
|
149
|
-
draft: false,
|
|
150
|
-
operation: 'delete'
|
|
151
|
-
}
|
|
152
|
-
];
|
|
153
|
-
}
|
|
154
|
-
if (!shadow) {
|
|
155
|
-
return [];
|
|
156
|
-
}
|
|
157
|
-
const collectionConfig = payload.collections[collectionSlug]?.config;
|
|
158
|
-
const hasDrafts = Boolean(collectionConfig?.versions?.drafts);
|
|
159
|
-
// Without drafts there is no publish to distinguish: every row is live, so the
|
|
160
|
-
// row itself is the whole change and ordinary update permission covers it.
|
|
161
|
-
if (!hasDrafts) {
|
|
162
|
-
return [
|
|
163
|
-
...getTrashAccessWrites({
|
|
164
|
-
collectionSlug,
|
|
165
|
-
payload,
|
|
166
|
-
shadow
|
|
167
|
-
}),
|
|
168
|
-
{
|
|
169
|
-
data: shadow,
|
|
170
|
-
draft: false,
|
|
171
|
-
operation: change.operation === 'create' ? 'create' : 'update'
|
|
172
|
-
}
|
|
173
|
-
];
|
|
174
|
-
}
|
|
175
|
-
const rowIsPublished = isPublished(shadow._status);
|
|
176
|
-
const newerDraft = await findNewerDraft({
|
|
177
|
-
collectionSlug,
|
|
178
|
-
payload,
|
|
179
|
-
req,
|
|
180
|
-
shadow
|
|
181
|
-
});
|
|
182
|
-
if (change.operation === 'create') {
|
|
183
|
-
// Only the latest source state is applied. If a branch published and then
|
|
184
|
-
// drafted, the draft creates an unpublished target without replaying the
|
|
185
|
-
// earlier publication first.
|
|
186
|
-
return [
|
|
187
|
-
...getTrashAccessWrites({
|
|
188
|
-
collectionSlug,
|
|
189
|
-
payload,
|
|
190
|
-
shadow
|
|
191
|
-
}),
|
|
192
|
-
{
|
|
193
|
-
data: newerDraft ?? shadow,
|
|
194
|
-
draft: Boolean(newerDraft) || !rowIsPublished,
|
|
195
|
-
operation: 'create'
|
|
196
|
-
}
|
|
197
|
-
];
|
|
198
|
-
}
|
|
199
|
-
// Forked. Only a publish rewrites the shadow row, so a row still carrying the
|
|
200
|
-
// `updatedAt` it was forked with means nothing was published on this branch —
|
|
201
|
-
// whatever the branch changed lives entirely in its draft chain, and main's
|
|
202
|
-
// published row must survive the merge untouched.
|
|
203
|
-
//
|
|
204
|
-
// The timestamp is a fast path, not the answer. A fork and the publish that follows it
|
|
205
|
-
// can land in the same millisecond, and then the two are equal for a branch that really
|
|
206
|
-
// did publish — which made the merge apply *nothing at all* while still reporting the
|
|
207
|
-
// change as merged, and consume it. So an equal timestamp falls through to the question
|
|
208
|
-
// it was standing in for: did this branch publish a version of its own?
|
|
209
|
-
const publishedOnBranch = rowIsPublished && (!matchesForkPoint({
|
|
210
|
-
baseUpdatedAt: change.baseUpdatedAt,
|
|
211
|
-
shadow
|
|
212
|
-
}) || await hasBranchPublishedVersion({
|
|
213
|
-
branch,
|
|
214
|
-
collectionSlug,
|
|
215
|
-
payload,
|
|
216
|
-
req,
|
|
217
|
-
shadow
|
|
218
|
-
}));
|
|
219
|
-
const trashStateWrite = await resolveTrashStateWrite({
|
|
220
|
-
collectionSlug,
|
|
221
|
-
docID,
|
|
222
|
-
payload,
|
|
223
|
-
req,
|
|
224
|
-
shadow
|
|
225
|
-
});
|
|
226
|
-
if (newerDraft) {
|
|
227
|
-
return [
|
|
228
|
-
...trashStateWrite ? [
|
|
229
|
-
{
|
|
230
|
-
...trashStateWrite,
|
|
231
|
-
trashState: 'apply'
|
|
232
|
-
}
|
|
233
|
-
] : getTrashAccessWrites({
|
|
234
|
-
collectionSlug,
|
|
235
|
-
payload,
|
|
236
|
-
shadow
|
|
237
|
-
}),
|
|
238
|
-
{
|
|
239
|
-
data: newerDraft,
|
|
240
|
-
draft: true,
|
|
241
|
-
operation: 'update'
|
|
242
|
-
}
|
|
243
|
-
];
|
|
244
|
-
}
|
|
245
|
-
if (!publishedOnBranch) {
|
|
246
|
-
// Nothing to apply when the branch has neither published nor drafted: the
|
|
247
|
-
// fork itself is not a change to main.
|
|
248
|
-
return [
|
|
249
|
-
...trashStateWrite ? [
|
|
250
|
-
{
|
|
251
|
-
...trashStateWrite,
|
|
252
|
-
trashState: 'apply'
|
|
253
|
-
}
|
|
254
|
-
] : getTrashAccessWrites({
|
|
255
|
-
collectionSlug,
|
|
256
|
-
payload,
|
|
257
|
-
shadow
|
|
258
|
-
})
|
|
259
|
-
];
|
|
260
|
-
}
|
|
261
|
-
const writes = [
|
|
262
|
-
...trashStateWrite ? [
|
|
263
|
-
{
|
|
264
|
-
...trashStateWrite,
|
|
265
|
-
trashState: 'access'
|
|
266
|
-
}
|
|
267
|
-
] : getTrashAccessWrites({
|
|
268
|
-
collectionSlug,
|
|
269
|
-
payload,
|
|
270
|
-
shadow
|
|
271
|
-
}),
|
|
272
|
-
{
|
|
273
|
-
data: shadow,
|
|
274
|
-
draft: false,
|
|
275
|
-
operation: 'publish'
|
|
276
|
-
}
|
|
277
|
-
];
|
|
278
|
-
return writes;
|
|
279
|
-
};
|
|
280
|
-
const getTrashAccessWrites = ({ collectionSlug, payload, shadow })=>{
|
|
281
|
-
if (!payload.collections[collectionSlug]?.config.trash || shadow.deletedAt == null) {
|
|
282
|
-
return [];
|
|
283
|
-
}
|
|
284
|
-
return [
|
|
285
|
-
{
|
|
286
|
-
data: shadow,
|
|
287
|
-
draft: false,
|
|
288
|
-
operation: 'delete',
|
|
289
|
-
trashState: 'access'
|
|
290
|
-
}
|
|
291
|
-
];
|
|
292
|
-
};
|
|
293
|
-
const resolveTrashStateWrite = async ({ collectionSlug, docID, payload, req, shadow })=>{
|
|
294
|
-
if (!payload.collections[collectionSlug]?.config.trash) {
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
const main = await payload.db.findOne({
|
|
298
|
-
branch: false,
|
|
299
|
-
collection: collectionSlug,
|
|
300
|
-
req,
|
|
301
|
-
where: {
|
|
302
|
-
and: [
|
|
303
|
-
{
|
|
304
|
-
[branchField]: {
|
|
305
|
-
equals: MAIN_BRANCH
|
|
306
|
-
}
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
id: {
|
|
310
|
-
equals: docID
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
]
|
|
314
|
-
}
|
|
315
|
-
});
|
|
316
|
-
if (!main || toTrashState(main.deletedAt) === toTrashState(shadow.deletedAt)) {
|
|
317
|
-
return null;
|
|
318
|
-
}
|
|
319
|
-
return {
|
|
320
|
-
data: shadow,
|
|
321
|
-
draft: false,
|
|
322
|
-
operation: shadow.deletedAt == null ? 'update' : 'delete'
|
|
323
|
-
};
|
|
324
|
-
};
|
|
325
|
-
const toTrashState = (value)=>{
|
|
326
|
-
if (value == null) {
|
|
327
|
-
return null;
|
|
328
|
-
}
|
|
329
|
-
if (value instanceof Date) {
|
|
330
|
-
return value.getTime();
|
|
331
|
-
}
|
|
332
|
-
if (typeof value !== 'number' && typeof value !== 'string') {
|
|
333
|
-
return null;
|
|
334
|
-
}
|
|
335
|
-
const time = new Date(value).getTime();
|
|
336
|
-
return Number.isNaN(time) ? value : time;
|
|
337
|
-
};
|
|
338
|
-
/**
|
|
339
|
-
* Whether a row is published, whether or not its status is localized.
|
|
340
|
-
*
|
|
341
|
-
* With localization enabled, `_status` is stored per locale, so a raw row carries an
|
|
342
|
-
* object rather than a string. Read as a scalar it is never `'published'` — which made
|
|
343
|
-
* every publish on a branch look like a fork nobody had touched, so merging a localized
|
|
344
|
-
* document applied **nothing** to main while consuming the change and reporting success.
|
|
345
|
-
*
|
|
346
|
-
* Published in any locale counts. The per-locale writes that follow carry each locale's own
|
|
347
|
-
* status, so this only decides whether a publish is part of the merge at all.
|
|
348
|
-
*/ const isPublished = (status)=>{
|
|
349
|
-
if (typeof status === 'object' && status !== null) {
|
|
350
|
-
return Object.values(status).includes('published');
|
|
351
|
-
}
|
|
352
|
-
return status === 'published';
|
|
353
|
-
};
|
|
354
|
-
/**
|
|
355
|
-
* Whether this branch published a version of its own for the document.
|
|
356
|
-
*
|
|
357
|
-
* A fork copies the row, not its version chain, so a branch that has only forked owns no
|
|
358
|
-
* versions at all. One carrying a published version of its own has published on the
|
|
359
|
-
* branch, whatever the row's timestamp says.
|
|
360
|
-
*/ const hasBranchPublishedVersion = async ({ branch, collectionSlug, payload, req, shadow })=>{
|
|
361
|
-
if (!payload.collections[collectionSlug]?.config.versions) {
|
|
362
|
-
return false;
|
|
363
|
-
}
|
|
364
|
-
const locales = payload.config.localization ? payload.config.localization.localeCodes : [
|
|
365
|
-
undefined
|
|
366
|
-
];
|
|
367
|
-
for (const locale of locales){
|
|
368
|
-
const { docs } = await payload.db.findVersions({
|
|
369
|
-
branch: false,
|
|
370
|
-
collection: collectionSlug,
|
|
371
|
-
limit: 1,
|
|
372
|
-
locale,
|
|
373
|
-
pagination: false,
|
|
374
|
-
req,
|
|
375
|
-
where: {
|
|
376
|
-
and: [
|
|
377
|
-
{
|
|
378
|
-
parent: {
|
|
379
|
-
equals: shadow.id
|
|
380
|
-
}
|
|
381
|
-
},
|
|
382
|
-
{
|
|
383
|
-
[branchField]: {
|
|
384
|
-
equals: branch
|
|
385
|
-
}
|
|
386
|
-
},
|
|
387
|
-
{
|
|
388
|
-
'version._status': {
|
|
389
|
-
equals: 'published'
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
]
|
|
393
|
-
}
|
|
394
|
-
});
|
|
395
|
-
if (docs.length > 0) {
|
|
396
|
-
return true;
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
return false;
|
|
400
|
-
};
|
|
401
|
-
/**
|
|
402
|
-
* The branch's newest version when it sits above the branch's published row.
|
|
403
|
-
*
|
|
404
|
-
* Returns null when the newest version *is* the published state, so that a
|
|
405
|
-
* publish is not applied twice — once as the row and again as its own version.
|
|
406
|
-
*/ const findNewerDraft = async ({ collectionSlug, payload, req, shadow })=>{
|
|
407
|
-
const collectionConfig = payload.collections[collectionSlug].config;
|
|
408
|
-
const localization = payload.config.localization;
|
|
409
|
-
const hasLocalizedFields = traverseForLocalizedFields(collectionConfig.fields);
|
|
410
|
-
const locale = localization ? hasLocalizedFields ? 'all' : req.locale && req.locale !== 'all' ? req.locale : localization.defaultLocale : undefined;
|
|
411
|
-
const { docs } = await payload.db.findVersions({
|
|
412
|
-
branch: false,
|
|
413
|
-
collection: collectionSlug,
|
|
414
|
-
limit: 1,
|
|
415
|
-
locale,
|
|
416
|
-
pagination: false,
|
|
417
|
-
req,
|
|
418
|
-
sort: '-updatedAt',
|
|
419
|
-
where: {
|
|
420
|
-
and: [
|
|
421
|
-
{
|
|
422
|
-
latest: {
|
|
423
|
-
equals: true
|
|
424
|
-
}
|
|
425
|
-
},
|
|
426
|
-
{
|
|
427
|
-
parent: {
|
|
428
|
-
equals: shadow.id
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
]
|
|
432
|
-
}
|
|
433
|
-
});
|
|
434
|
-
const latest = docs?.[0];
|
|
435
|
-
const version = latest?.version;
|
|
436
|
-
if (!version || !isDraft({
|
|
437
|
-
locale,
|
|
438
|
-
status: version._status
|
|
439
|
-
})) {
|
|
440
|
-
return null;
|
|
441
|
-
}
|
|
442
|
-
return version;
|
|
443
|
-
};
|
|
444
|
-
const isDraft = ({ locale, status })=>{
|
|
445
|
-
if (typeof status === 'object' && status !== null) {
|
|
446
|
-
if (locale && locale !== 'all') {
|
|
447
|
-
return status[locale] === 'draft';
|
|
448
|
-
}
|
|
449
|
-
return Object.values(status).includes('draft');
|
|
450
|
-
}
|
|
451
|
-
return status === 'draft';
|
|
452
|
-
};
|
|
453
|
-
/**
|
|
454
|
-
* Whether the shadow row is still exactly as forked.
|
|
455
|
-
*
|
|
456
|
-
* `baseUpdatedAt` is stored as a date and may come back as a `Date` or a string
|
|
457
|
-
* depending on the adapter, so both sides are normalised before comparing.
|
|
458
|
-
*/ const matchesForkPoint = ({ baseUpdatedAt, shadow })=>{
|
|
459
|
-
if (!baseUpdatedAt || !shadow.updatedAt) {
|
|
460
|
-
return false;
|
|
461
|
-
}
|
|
462
|
-
return toTime(baseUpdatedAt) === toTime(shadow.updatedAt);
|
|
463
|
-
};
|
|
464
|
-
const toTime = (value)=>{
|
|
465
|
-
const time = new Date(value).getTime();
|
|
466
|
-
return Number.isNaN(time) ? null : time;
|
|
467
|
-
};
|
|
468
|
-
/** The distinct operations a change needs permission for. */ export const operationsForChange = (resolved)=>[
|
|
469
|
-
...new Set(resolved.writes.map((write)=>write.operation))
|
|
470
|
-
];
|
|
471
|
-
|
|
472
|
-
//# sourceMappingURL=effectiveOperations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/branching/effectiveOperations.ts"],"sourcesContent":["import type { Payload, PayloadRequest, Where } from '../types/index.js'\n\nimport { APIError } from '../errors/index.js'\nimport { batchProcessing } from '../utilities/batchProcessing.js'\nimport { extractRelationshipID } from '../utilities/extractRelationshipID.js'\nimport { traverseForLocalizedFields } from '../utilities/traverseForLocalizedFields.js'\nimport { branchDocIDField, branchField, MAIN_BRANCH } from './types.js'\n\nconst effectiveOperationReadBatchSize = 400\n\n/**\n * What a change will actually do to `main` when merged, which is not always what\n * it did on the branch. Editing a published document on a branch is a `publish`\n * against main and needs publish permission; saving a draft on that same\n * document is an ordinary `update` that must leave main's published row alone.\n */\nexport type EffectiveOperation = 'create' | 'delete' | 'publish' | 'update'\n\n/** One write against main for the selected source state or its Trash transition. */\nexport type EffectiveWrite = {\n /** The document state to write. */\n data: Record<string, unknown>\n /** Whether the write is a draft save rather than a publish. */\n draft: boolean\n operation: EffectiveOperation\n /**\n * A row-level Trash transition that accompanies versioned content.\n *\n * `apply` updates main. `access` only adds the required permission check\n * because a later published write already carries the same `deletedAt` state.\n */\n trashState?: 'access' | 'apply'\n}\n\nexport type ResolvedChange = {\n change: Record<string, any>\n collectionSlug: string\n docID: number | string\n shadow: null | Record<string, unknown>\n /** The latest source-state write and any separate Trash transition. */\n writes: EffectiveWrite[]\n}\n\n/**\n * Resolves what each pending change will do to main.\n *\n * The shadow row alone cannot answer this. A fork copies main's row wholesale, so\n * a document forked from a published main row carries `_status: 'published'` even\n * when every edit made on the branch was a draft save — and draft saves never\n * touch the main row (§7), so the row still holds main's own pre-fork values.\n * Reading only the row therefore reports a `publish` of values main already has:\n * a merge that claims success and changes nothing.\n *\n * The branch's newest *version* is the missing half. `baseUpdatedAt`, recorded on\n * the registry row at fork time, separates the two cases the row cannot: the\n * shadow row's `updatedAt` still matching it means the branch never published,\n * because only a publish rewrites that row.\n */\nexport const resolveEffectiveOperations = async ({\n branch,\n changes,\n payload,\n req,\n}: {\n branch: string\n changes: Record<string, any>[]\n payload: Payload\n req: PayloadRequest\n}): Promise<ResolvedChange[]> => {\n const shadowsByChange = await readChangeShadows({ branch, changes, payload, req })\n const resolved: ResolvedChange[] = []\n\n for (const change of changes) {\n const collectionSlug = change.collectionSlug as string\n const docID = getBranchChangeDocumentID({ change, collectionSlug })\n const shadow = shadowsByChange.get(changeKey({ collectionSlug, docID })) ?? null\n\n if (!shadow) {\n throw new APIError(\n `The ${collectionSlug} branch row for document ${String(docID)} is missing.`,\n 409,\n )\n }\n\n resolved.push({\n change,\n collectionSlug,\n docID,\n shadow,\n writes: await resolveWrites({ branch, change, collectionSlug, docID, payload, req, shadow }),\n })\n }\n\n return resolved\n}\n\nconst changeKey = ({\n collectionSlug,\n docID,\n}: {\n collectionSlug: string\n docID: number | string\n}): string => `${collectionSlug}:${String(docID)}`\n\nconst readChangeShadows = async ({\n branch,\n changes,\n payload,\n req,\n}: {\n branch: string\n changes: Record<string, any>[]\n payload: Payload\n req: PayloadRequest\n}): Promise<Map<string, Record<string, unknown>>> => {\n const changesByCollection = new Map<string, Record<string, any>[]>()\n const shadowsByChange = new Map<string, Record<string, unknown>>()\n\n for (const change of changes) {\n const collectionSlug = change.collectionSlug as string\n const collectionChanges = changesByCollection.get(collectionSlug) ?? []\n\n collectionChanges.push(change)\n changesByCollection.set(collectionSlug, collectionChanges)\n }\n\n for (const [collectionSlug, collectionChanges] of changesByCollection) {\n await batchProcessing({\n batchSize: effectiveOperationReadBatchSize,\n input: collectionChanges,\n processBatch: async ({ batch }) => {\n const createdDocumentIDs = batch\n .filter(({ operation }) => operation === 'create')\n .map((change) => getBranchChangeDocumentID({ change, collectionSlug }))\n const existingDocumentIDs = batch\n .filter(({ operation }) => operation !== 'create')\n .map((change) => getBranchChangeDocumentID({ change, collectionSlug }))\n const identityQueries: Where[] = []\n\n if (createdDocumentIDs.length) {\n identityQueries.push({ id: { in: createdDocumentIDs } })\n }\n\n if (existingDocumentIDs.length) {\n identityQueries.push({ [branchDocIDField]: { in: existingDocumentIDs } })\n }\n\n const identityQuery: Where =\n identityQueries.length === 1 ? identityQueries[0]! : { or: identityQueries }\n const { docs } = await payload.db.find({\n branch: false,\n collection: collectionSlug,\n limit: batch.length,\n pagination: false,\n req,\n where: {\n and: [{ [branchField]: { equals: branch } }, identityQuery],\n },\n })\n\n for (const shadow of docs as Record<string, unknown>[]) {\n const docID = extractRelationshipID({\n relationship: shadow[branchDocIDField] ?? shadow.id,\n })\n\n if (docID === undefined) {\n continue\n }\n\n shadowsByChange.set(changeKey({ collectionSlug, docID }), shadow)\n }\n },\n })\n }\n\n return shadowsByChange\n}\n\nconst getBranchChangeDocumentID = ({\n change,\n collectionSlug,\n}: {\n change: Record<string, any>\n collectionSlug: string\n}): number | string => {\n const docID = extractRelationshipID({ relationship: change.doc })\n\n if (docID === undefined) {\n throw new APIError(`The ${collectionSlug} branch change has no document ID.`, 409)\n }\n\n return docID\n}\n\nconst resolveWrites = async ({\n branch,\n change,\n collectionSlug,\n docID,\n payload,\n req,\n shadow,\n}: {\n branch: string\n change: Record<string, any>\n collectionSlug: string\n docID: number | string\n payload: Payload\n req: PayloadRequest\n shadow: null | Record<string, unknown>\n}): Promise<EffectiveWrite[]> => {\n if (change.operation === 'delete') {\n return [{ data: {}, draft: false, operation: 'delete' }]\n }\n\n if (!shadow) {\n return []\n }\n\n const collectionConfig = payload.collections[collectionSlug]?.config\n const hasDrafts = Boolean(collectionConfig?.versions?.drafts)\n\n // Without drafts there is no publish to distinguish: every row is live, so the\n // row itself is the whole change and ordinary update permission covers it.\n if (!hasDrafts) {\n return [\n ...getTrashAccessWrites({ collectionSlug, payload, shadow }),\n {\n data: shadow,\n draft: false,\n operation: change.operation === 'create' ? 'create' : 'update',\n },\n ]\n }\n\n const rowIsPublished = isPublished(shadow._status)\n const newerDraft = await findNewerDraft({ collectionSlug, payload, req, shadow })\n\n if (change.operation === 'create') {\n // Only the latest source state is applied. If a branch published and then\n // drafted, the draft creates an unpublished target without replaying the\n // earlier publication first.\n return [\n ...getTrashAccessWrites({ collectionSlug, payload, shadow }),\n {\n data: newerDraft ?? shadow,\n draft: Boolean(newerDraft) || !rowIsPublished,\n operation: 'create',\n },\n ]\n }\n\n // Forked. Only a publish rewrites the shadow row, so a row still carrying the\n // `updatedAt` it was forked with means nothing was published on this branch —\n // whatever the branch changed lives entirely in its draft chain, and main's\n // published row must survive the merge untouched.\n //\n // The timestamp is a fast path, not the answer. A fork and the publish that follows it\n // can land in the same millisecond, and then the two are equal for a branch that really\n // did publish — which made the merge apply *nothing at all* while still reporting the\n // change as merged, and consume it. So an equal timestamp falls through to the question\n // it was standing in for: did this branch publish a version of its own?\n const publishedOnBranch =\n rowIsPublished &&\n (!matchesForkPoint({ baseUpdatedAt: change.baseUpdatedAt, shadow }) ||\n (await hasBranchPublishedVersion({ branch, collectionSlug, payload, req, shadow })))\n const trashStateWrite = await resolveTrashStateWrite({\n collectionSlug,\n docID,\n payload,\n req,\n shadow,\n })\n\n if (newerDraft) {\n return [\n ...(trashStateWrite\n ? [{ ...trashStateWrite, trashState: 'apply' as const }]\n : getTrashAccessWrites({ collectionSlug, payload, shadow })),\n { data: newerDraft, draft: true, operation: 'update' },\n ]\n }\n\n if (!publishedOnBranch) {\n // Nothing to apply when the branch has neither published nor drafted: the\n // fork itself is not a change to main.\n return [\n ...(trashStateWrite\n ? [{ ...trashStateWrite, trashState: 'apply' as const }]\n : getTrashAccessWrites({ collectionSlug, payload, shadow })),\n ]\n }\n\n const writes: EffectiveWrite[] = [\n ...(trashStateWrite\n ? [{ ...trashStateWrite, trashState: 'access' as const }]\n : getTrashAccessWrites({ collectionSlug, payload, shadow })),\n { data: shadow, draft: false, operation: 'publish' },\n ]\n\n return writes\n}\n\nconst getTrashAccessWrites = ({\n collectionSlug,\n payload,\n shadow,\n}: {\n collectionSlug: string\n payload: Payload\n shadow: Record<string, unknown>\n}): EffectiveWrite[] => {\n if (!payload.collections[collectionSlug]?.config.trash || shadow.deletedAt == null) {\n return []\n }\n\n return [\n {\n data: shadow,\n draft: false,\n operation: 'delete',\n trashState: 'access',\n },\n ]\n}\n\nconst resolveTrashStateWrite = async ({\n collectionSlug,\n docID,\n payload,\n req,\n shadow,\n}: {\n collectionSlug: string\n docID: number | string\n payload: Payload\n req: PayloadRequest\n shadow: Record<string, unknown>\n}): Promise<EffectiveWrite | null> => {\n if (!payload.collections[collectionSlug]?.config.trash) {\n return null\n }\n\n const main = (await payload.db.findOne({\n branch: false,\n collection: collectionSlug,\n req,\n where: {\n and: [{ [branchField]: { equals: MAIN_BRANCH } }, { id: { equals: docID } }],\n },\n })) as null | Record<string, unknown>\n\n if (!main || toTrashState(main.deletedAt) === toTrashState(shadow.deletedAt)) {\n return null\n }\n\n return {\n data: shadow,\n draft: false,\n operation: shadow.deletedAt == null ? 'update' : 'delete',\n }\n}\n\nconst toTrashState = (value: unknown): null | number | string => {\n if (value == null) {\n return null\n }\n\n if (value instanceof Date) {\n return value.getTime()\n }\n\n if (typeof value !== 'number' && typeof value !== 'string') {\n return null\n }\n\n const time = new Date(value).getTime()\n\n return Number.isNaN(time) ? value : time\n}\n\n/**\n * Whether a row is published, whether or not its status is localized.\n *\n * With localization enabled, `_status` is stored per locale, so a raw row carries an\n * object rather than a string. Read as a scalar it is never `'published'` — which made\n * every publish on a branch look like a fork nobody had touched, so merging a localized\n * document applied **nothing** to main while consuming the change and reporting success.\n *\n * Published in any locale counts. The per-locale writes that follow carry each locale's own\n * status, so this only decides whether a publish is part of the merge at all.\n */\nconst isPublished = (status: unknown): boolean => {\n if (typeof status === 'object' && status !== null) {\n return Object.values(status as Record<string, unknown>).includes('published')\n }\n\n return status === 'published'\n}\n\n/**\n * Whether this branch published a version of its own for the document.\n *\n * A fork copies the row, not its version chain, so a branch that has only forked owns no\n * versions at all. One carrying a published version of its own has published on the\n * branch, whatever the row's timestamp says.\n */\nconst hasBranchPublishedVersion = async ({\n branch,\n collectionSlug,\n payload,\n req,\n shadow,\n}: {\n branch: string\n collectionSlug: string\n payload: Payload\n req: PayloadRequest\n shadow: Record<string, unknown>\n}): Promise<boolean> => {\n if (!payload.collections[collectionSlug]?.config.versions) {\n return false\n }\n\n const locales = payload.config.localization\n ? payload.config.localization.localeCodes\n : [undefined]\n\n for (const locale of locales) {\n const { docs } = await payload.db.findVersions({\n branch: false,\n collection: collectionSlug,\n limit: 1,\n locale,\n pagination: false,\n req,\n where: {\n and: [\n { parent: { equals: shadow.id } },\n { [branchField]: { equals: branch } },\n { 'version._status': { equals: 'published' } },\n ],\n },\n })\n\n if (docs.length > 0) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * The branch's newest version when it sits above the branch's published row.\n *\n * Returns null when the newest version *is* the published state, so that a\n * publish is not applied twice — once as the row and again as its own version.\n */\nconst findNewerDraft = async ({\n collectionSlug,\n payload,\n req,\n shadow,\n}: {\n collectionSlug: string\n payload: Payload\n req: PayloadRequest\n shadow: Record<string, unknown>\n}): Promise<null | Record<string, unknown>> => {\n const collectionConfig = payload.collections[collectionSlug]!.config\n const localization = payload.config.localization\n const hasLocalizedFields = traverseForLocalizedFields(collectionConfig.fields)\n const locale = localization\n ? hasLocalizedFields\n ? 'all'\n : req.locale && req.locale !== 'all'\n ? req.locale\n : localization.defaultLocale\n : undefined\n const { docs } = await payload.db.findVersions({\n branch: false,\n collection: collectionSlug,\n limit: 1,\n locale,\n pagination: false,\n req,\n sort: '-updatedAt',\n where: { and: [{ latest: { equals: true } }, { parent: { equals: shadow.id } }] },\n })\n\n const latest = docs?.[0] as { version?: Record<string, unknown> } | undefined\n const version = latest?.version\n\n if (!version || !isDraft({ locale, status: version._status })) {\n return null\n }\n\n return version\n}\n\nconst isDraft = ({ locale, status }: { locale?: string; status: unknown }): boolean => {\n if (typeof status === 'object' && status !== null) {\n if (locale && locale !== 'all') {\n return (status as Record<string, unknown>)[locale] === 'draft'\n }\n\n return Object.values(status as Record<string, unknown>).includes('draft')\n }\n\n return status === 'draft'\n}\n\n/**\n * Whether the shadow row is still exactly as forked.\n *\n * `baseUpdatedAt` is stored as a date and may come back as a `Date` or a string\n * depending on the adapter, so both sides are normalised before comparing.\n */\nconst matchesForkPoint = ({\n baseUpdatedAt,\n shadow,\n}: {\n baseUpdatedAt: unknown\n shadow: Record<string, unknown>\n}): boolean => {\n if (!baseUpdatedAt || !shadow.updatedAt) {\n return false\n }\n\n return toTime(baseUpdatedAt) === toTime(shadow.updatedAt)\n}\n\nconst toTime = (value: unknown): null | number => {\n const time = new Date(value as string).getTime()\n\n return Number.isNaN(time) ? null : time\n}\n\n/** The distinct operations a change needs permission for. */\nexport const operationsForChange = (resolved: ResolvedChange): EffectiveOperation[] => [\n ...new Set(resolved.writes.map((write) => write.operation)),\n]\n"],"names":["APIError","batchProcessing","extractRelationshipID","traverseForLocalizedFields","branchDocIDField","branchField","MAIN_BRANCH","effectiveOperationReadBatchSize","resolveEffectiveOperations","branch","changes","payload","req","shadowsByChange","readChangeShadows","resolved","change","collectionSlug","docID","getBranchChangeDocumentID","shadow","get","changeKey","String","push","writes","resolveWrites","changesByCollection","Map","collectionChanges","set","batchSize","input","processBatch","batch","createdDocumentIDs","filter","operation","map","existingDocumentIDs","identityQueries","length","id","in","identityQuery","or","docs","db","find","collection","limit","pagination","where","and","equals","relationship","undefined","doc","data","draft","collectionConfig","collections","config","hasDrafts","Boolean","versions","drafts","getTrashAccessWrites","rowIsPublished","isPublished","_status","newerDraft","findNewerDraft","publishedOnBranch","matchesForkPoint","baseUpdatedAt","hasBranchPublishedVersion","trashStateWrite","resolveTrashStateWrite","trashState","trash","deletedAt","main","findOne","toTrashState","value","Date","getTime","time","Number","isNaN","status","Object","values","includes","locales","localization","localeCodes","locale","findVersions","parent","hasLocalizedFields","fields","defaultLocale","sort","latest","version","isDraft","updatedAt","toTime","operationsForChange","Set","write"],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { PayloadHandler } from '../../config/types.js';
|
|
2
|
-
/**
|
|
3
|
-
* `POST /<branches>/:id/discard`
|
|
4
|
-
*
|
|
5
|
-
* Throws away pending changes, or the subset named in `changes`.
|
|
6
|
-
*
|
|
7
|
-
* No per-document preflight, unlike merge: discarding touches only the branch's own
|
|
8
|
-
* rows and leaves `main` exactly as it was, so there is no production permission to
|
|
9
|
-
* check on the collections those rows belong to. Reaching the branch still requires
|
|
10
|
-
* being able to read it, a closed branch refuses outright, and — because discard
|
|
11
|
-
* permanently destroys the branch's pending work, including documents that exist
|
|
12
|
-
* only on this branch — it also requires discard access, not merely read access.
|
|
13
|
-
*/
|
|
14
|
-
export declare const discardBranchHandler: PayloadHandler;
|
|
15
|
-
//# sourceMappingURL=discard.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discard.d.ts","sourceRoot":"","sources":["../../../src/branching/endpoints/discard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAS3D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAmClC,CAAA"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Forbidden, NotFound } from '../../errors/index.js';
|
|
2
|
-
import { headersWithCors } from '../../utilities/headersWithCors.js';
|
|
3
|
-
import { httpStatus } from '../../utilities/httpStatus.js';
|
|
4
|
-
import { assertBranchActionAccess } from '../assertBranchActionAccess.js';
|
|
5
|
-
import { discardBranchChanges } from '../discard.js';
|
|
6
|
-
import { branchesCollectionSlug } from '../types.js';
|
|
7
|
-
/**
|
|
8
|
-
* `POST /<branches>/:id/discard`
|
|
9
|
-
*
|
|
10
|
-
* Throws away pending changes, or the subset named in `changes`.
|
|
11
|
-
*
|
|
12
|
-
* No per-document preflight, unlike merge: discarding touches only the branch's own
|
|
13
|
-
* rows and leaves `main` exactly as it was, so there is no production permission to
|
|
14
|
-
* check on the collections those rows belong to. Reaching the branch still requires
|
|
15
|
-
* being able to read it, a closed branch refuses outright, and — because discard
|
|
16
|
-
* permanently destroys the branch's pending work, including documents that exist
|
|
17
|
-
* only on this branch — it also requires discard access, not merely read access.
|
|
18
|
-
*/ export const discardBranchHandler = async (req)=>{
|
|
19
|
-
const { payload, routeParams } = req;
|
|
20
|
-
const id = routeParams?.id;
|
|
21
|
-
if (!req.user) {
|
|
22
|
-
throw new Forbidden(req.t);
|
|
23
|
-
}
|
|
24
|
-
const branchDoc = await payload.findByID({
|
|
25
|
-
id,
|
|
26
|
-
collection: branchesCollectionSlug,
|
|
27
|
-
disableErrors: true,
|
|
28
|
-
overrideAccess: false,
|
|
29
|
-
req
|
|
30
|
-
});
|
|
31
|
-
if (!branchDoc) {
|
|
32
|
-
throw new NotFound(req.t);
|
|
33
|
-
}
|
|
34
|
-
await assertBranchActionAccess({
|
|
35
|
-
action: 'discardBranch',
|
|
36
|
-
branchDoc,
|
|
37
|
-
req
|
|
38
|
-
});
|
|
39
|
-
const body = req.data ?? {};
|
|
40
|
-
const result = await discardBranchChanges(payload, {
|
|
41
|
-
branch: branchDoc.slug,
|
|
42
|
-
changes: body.changes,
|
|
43
|
-
overrideAccess: true,
|
|
44
|
-
req
|
|
45
|
-
});
|
|
46
|
-
return Response.json(result, {
|
|
47
|
-
headers: headersWithCors({
|
|
48
|
-
headers: new Headers(),
|
|
49
|
-
req
|
|
50
|
-
}),
|
|
51
|
-
status: httpStatus.OK
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=discard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/branching/endpoints/discard.ts"],"sourcesContent":["import type { PayloadHandler } from '../../config/types.js'\n\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { headersWithCors } from '../../utilities/headersWithCors.js'\nimport { httpStatus } from '../../utilities/httpStatus.js'\nimport { assertBranchActionAccess } from '../assertBranchActionAccess.js'\nimport { discardBranchChanges } from '../discard.js'\nimport { branchesCollectionSlug } from '../types.js'\n\n/**\n * `POST /<branches>/:id/discard`\n *\n * Throws away pending changes, or the subset named in `changes`.\n *\n * No per-document preflight, unlike merge: discarding touches only the branch's own\n * rows and leaves `main` exactly as it was, so there is no production permission to\n * check on the collections those rows belong to. Reaching the branch still requires\n * being able to read it, a closed branch refuses outright, and — because discard\n * permanently destroys the branch's pending work, including documents that exist\n * only on this branch — it also requires discard access, not merely read access.\n */\nexport const discardBranchHandler: PayloadHandler = async (req) => {\n const { payload, routeParams } = req\n const id = routeParams?.id as number | string\n\n if (!req.user) {\n throw new Forbidden(req.t)\n }\n\n const branchDoc = await payload.findByID({\n id,\n collection: branchesCollectionSlug,\n disableErrors: true,\n overrideAccess: false,\n req,\n })\n\n if (!branchDoc) {\n throw new NotFound(req.t)\n }\n\n await assertBranchActionAccess({ action: 'discardBranch', branchDoc, req })\n\n const body = (req.data ?? {}) as { changes?: (number | string)[] }\n\n const result = await discardBranchChanges(payload, {\n branch: branchDoc.slug as string,\n changes: body.changes,\n overrideAccess: true,\n req,\n })\n\n return Response.json(result, {\n headers: headersWithCors({ headers: new Headers(), req }),\n status: httpStatus.OK,\n })\n}\n"],"names":["Forbidden","NotFound","headersWithCors","httpStatus","assertBranchActionAccess","discardBranchChanges","branchesCollectionSlug","discardBranchHandler","req","payload","routeParams","id","user","t","branchDoc","findByID","collection","disableErrors","overrideAccess","action","body","data","result","branch","slug","changes","Response","json","headers","Headers","status","OK"],"mappings":"AAEA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,wBAAuB;AAC3D,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,UAAU,QAAQ,gCAA+B;AAC1D,SAASC,wBAAwB,QAAQ,iCAAgC;AACzE,SAASC,oBAAoB,QAAQ,gBAAe;AACpD,SAASC,sBAAsB,QAAQ,cAAa;AAEpD;;;;;;;;;;;CAWC,GACD,OAAO,MAAMC,uBAAuC,OAAOC;IACzD,MAAM,EAAEC,OAAO,EAAEC,WAAW,EAAE,GAAGF;IACjC,MAAMG,KAAKD,aAAaC;IAExB,IAAI,CAACH,IAAII,IAAI,EAAE;QACb,MAAM,IAAIZ,UAAUQ,IAAIK,CAAC;IAC3B;IAEA,MAAMC,YAAY,MAAML,QAAQM,QAAQ,CAAC;QACvCJ;QACAK,YAAYV;QACZW,eAAe;QACfC,gBAAgB;QAChBV;IACF;IAEA,IAAI,CAACM,WAAW;QACd,MAAM,IAAIb,SAASO,IAAIK,CAAC;IAC1B;IAEA,MAAMT,yBAAyB;QAAEe,QAAQ;QAAiBL;QAAWN;IAAI;IAEzE,MAAMY,OAAQZ,IAAIa,IAAI,IAAI,CAAC;IAE3B,MAAMC,SAAS,MAAMjB,qBAAqBI,SAAS;QACjDc,QAAQT,UAAUU,IAAI;QACtBC,SAASL,KAAKK,OAAO;QACrBP,gBAAgB;QAChBV;IACF;IAEA,OAAOkB,SAASC,IAAI,CAACL,QAAQ;QAC3BM,SAAS1B,gBAAgB;YAAE0B,SAAS,IAAIC;YAAWrB;QAAI;QACvDsB,QAAQ3B,WAAW4B,EAAE;IACvB;AACF,EAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { PayloadHandler } from '../../config/types.js';
|
|
2
|
-
import type { MergeResult } from '../merge.js';
|
|
3
|
-
import type { MergeProgress } from '../types.js';
|
|
4
|
-
/**
|
|
5
|
-
* One line of the streamed merge response.
|
|
6
|
-
*
|
|
7
|
-
* NDJSON rather than server-sent events: the client is a `fetch` reading a
|
|
8
|
-
* `ReadableStream`, not an `EventSource`, so the framing SSE adds buys nothing —
|
|
9
|
-
* and one JSON object per line is trivially parseable from a reader loop.
|
|
10
|
-
*/
|
|
11
|
-
export type MergeStreamEvent = {
|
|
12
|
-
message: string;
|
|
13
|
-
type: 'error';
|
|
14
|
-
} | {
|
|
15
|
-
result: MergeResult;
|
|
16
|
-
type: 'complete';
|
|
17
|
-
} | ({
|
|
18
|
-
type: 'progress';
|
|
19
|
-
} & MergeProgress);
|
|
20
|
-
/**
|
|
21
|
-
* `POST /<branches>/:id/merge`
|
|
22
|
-
*
|
|
23
|
-
* Runs with `overrideAccess: false` and the authenticated user, so the
|
|
24
|
-
* per-document preflight applies. This is the boundary at which branching's
|
|
25
|
-
* access model is actually enforced. The Local API uses the same secure default;
|
|
26
|
-
* trusted server-side callers must opt in to bypassing it.
|
|
27
|
-
*
|
|
28
|
-
* `stream: true` switches the response to NDJSON progress events. A merge walks
|
|
29
|
-
* an arbitrary number of documents one at a time, so the admin panel needs to
|
|
30
|
-
* report where it is; streaming the loop it already runs avoids inventing a job
|
|
31
|
-
* and a polling endpoint to carry that state.
|
|
32
|
-
*/
|
|
33
|
-
export declare const mergeBranchHandler: PayloadHandler;
|
|
34
|
-
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/branching/endpoints/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAShD;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAClC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACzC,CAAC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG,aAAa,CAAC,CAAA;AAE1C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,cA4DhC,CAAA"}
|