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,197 +0,0 @@
|
|
|
1
|
-
import { loadBranchRow, resolveBranch, setBranchRow } from './resolveBranch.js';
|
|
2
|
-
import { branchChangesCollectionSlug, branchesCollectionSlug, branchField, MAIN_BRANCH } from './types.js';
|
|
3
|
-
const bypassed = (branch, req)=>branch === false || !req?.payload || Boolean(req.context?._branchBypass);
|
|
4
|
-
const recordedGlobalsKey = '_branchRecordedGlobals';
|
|
5
|
-
const activeBranch = ({ branch, globalSlug, req })=>{
|
|
6
|
-
if (bypassed(branch, req)) {
|
|
7
|
-
return null;
|
|
8
|
-
}
|
|
9
|
-
const branching = req.payload.config?.branching;
|
|
10
|
-
if (!branching?.enabled || !branching.branchableGlobals.has(globalSlug)) {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
return branch === false ? null : branch ?? resolveBranch(req);
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Branch predicate for reading a global.
|
|
17
|
-
*
|
|
18
|
-
* Unlike collections, this does not have to resolve everything inside one
|
|
19
|
-
* query: a global is a single document, so there is no result set to paginate
|
|
20
|
-
* or count and nothing a post-query step could get wrong. The query fetches the
|
|
21
|
-
* branch's row and main's row together and `pickBranchGlobal` prefers the
|
|
22
|
-
* branch's — one round trip, at most two rows.
|
|
23
|
-
*/ export const resolveBranchGlobalQuery = ({ branch, globalSlug, req, where })=>{
|
|
24
|
-
const active = activeBranch({
|
|
25
|
-
branch,
|
|
26
|
-
globalSlug,
|
|
27
|
-
req
|
|
28
|
-
});
|
|
29
|
-
if (!active) {
|
|
30
|
-
return where;
|
|
31
|
-
}
|
|
32
|
-
const base = where && Object.keys(where).length ? [
|
|
33
|
-
where
|
|
34
|
-
] : [];
|
|
35
|
-
if (active === MAIN_BRANCH) {
|
|
36
|
-
return {
|
|
37
|
-
and: [
|
|
38
|
-
...base,
|
|
39
|
-
{
|
|
40
|
-
[branchField]: {
|
|
41
|
-
equals: MAIN_BRANCH
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
and: [
|
|
49
|
-
...base,
|
|
50
|
-
{
|
|
51
|
-
[branchField]: {
|
|
52
|
-
in: [
|
|
53
|
-
active,
|
|
54
|
-
MAIN_BRANCH
|
|
55
|
-
]
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
]
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
/** True when the read should fetch two rows so the branch's copy can win. */ export const branchGlobalNeedsBothRows = (args)=>{
|
|
62
|
-
const active = activeBranch(args);
|
|
63
|
-
return Boolean(active) && active !== MAIN_BRANCH;
|
|
64
|
-
};
|
|
65
|
-
/** Picks the branch's copy of a global when it has one, else main's. */ export const pickBranchGlobal = (docs, branch)=>docs.find((doc)=>doc?.[branchField] === branch) ?? docs[0];
|
|
66
|
-
/**
|
|
67
|
-
* The branch a global write should be scoped to, or `null` on main.
|
|
68
|
-
*
|
|
69
|
-
* Storage differs too much between adapters to upsert the branch's copy here —
|
|
70
|
-
* Mongo keeps every global in one discriminated collection and Drizzle gives each
|
|
71
|
-
* its own table, so each adapter performs the upsert. The global operation records
|
|
72
|
-
* the change after that adapter write succeeds.
|
|
73
|
-
*/ export const resolveBranchGlobalWrite = (args)=>{
|
|
74
|
-
const active = activeBranch(args);
|
|
75
|
-
return active && active !== MAIN_BRANCH ? active : null;
|
|
76
|
-
};
|
|
77
|
-
/** Registers a global as changed on a branch, if it is not already. */ export const recordBranchGlobalChange = async ({ branch, globalSlug, req })=>{
|
|
78
|
-
// Every write to a branched global asks whether it is already registered. The answer
|
|
79
|
-
// cannot change within a request except by this function, so it is remembered — which
|
|
80
|
-
// matters for a request that writes several globals, or one global repeatedly.
|
|
81
|
-
const context = req.context;
|
|
82
|
-
const recorded = context?.[recordedGlobalsKey] ?? new Set();
|
|
83
|
-
const key = `${branch}:${globalSlug}`;
|
|
84
|
-
if (context && !context[recordedGlobalsKey]) {
|
|
85
|
-
context[recordedGlobalsKey] = recorded;
|
|
86
|
-
}
|
|
87
|
-
if (recorded.has(key)) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
if (req.payload.db.upsertBranchGlobalChange) {
|
|
91
|
-
await req.payload.db.upsertBranchGlobalChange({
|
|
92
|
-
branch,
|
|
93
|
-
globalSlug,
|
|
94
|
-
req
|
|
95
|
-
});
|
|
96
|
-
await reopenBranchForGlobalChange({
|
|
97
|
-
branch,
|
|
98
|
-
req: req
|
|
99
|
-
});
|
|
100
|
-
recorded.add(key);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
const existing = await req.payload.find({
|
|
104
|
-
collection: branchChangesCollectionSlug,
|
|
105
|
-
limit: 1,
|
|
106
|
-
overrideAccess: true,
|
|
107
|
-
pagination: false,
|
|
108
|
-
req: req,
|
|
109
|
-
where: {
|
|
110
|
-
and: [
|
|
111
|
-
{
|
|
112
|
-
branch: {
|
|
113
|
-
equals: branch
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
globalSlug: {
|
|
118
|
-
equals: globalSlug
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
]
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
if (existing.docs.length) {
|
|
125
|
-
recorded.add(key);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
await req.payload.create({
|
|
129
|
-
collection: branchChangesCollectionSlug,
|
|
130
|
-
data: {
|
|
131
|
-
branch,
|
|
132
|
-
entityType: 'global',
|
|
133
|
-
globalSlug,
|
|
134
|
-
operation: 'update'
|
|
135
|
-
},
|
|
136
|
-
overrideAccess: true,
|
|
137
|
-
req: req
|
|
138
|
-
});
|
|
139
|
-
recorded.add(key);
|
|
140
|
-
};
|
|
141
|
-
const reopenBranchForGlobalChange = async ({ branch, req })=>{
|
|
142
|
-
const row = await loadBranchRow({
|
|
143
|
-
branch,
|
|
144
|
-
req
|
|
145
|
-
});
|
|
146
|
-
if (row?.status !== 'merged') {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
const reopened = await req.payload.update({
|
|
150
|
-
id: row.id,
|
|
151
|
-
collection: branchesCollectionSlug,
|
|
152
|
-
data: {
|
|
153
|
-
mergedAt: null,
|
|
154
|
-
status: 'open'
|
|
155
|
-
},
|
|
156
|
-
overrideAccess: true,
|
|
157
|
-
req
|
|
158
|
-
});
|
|
159
|
-
setBranchRow({
|
|
160
|
-
branch,
|
|
161
|
-
req,
|
|
162
|
-
row: reopened
|
|
163
|
-
});
|
|
164
|
-
};
|
|
165
|
-
/**
|
|
166
|
-
* Branch predicate for global version reads.
|
|
167
|
-
*
|
|
168
|
-
* Strict equality rather than the read-through used for the global itself: a
|
|
169
|
-
* version list must not interleave two branches' histories, and ordering by
|
|
170
|
-
* timestamp would pick between them nondeterministically. A branch that has
|
|
171
|
-
* never touched the global simply has no versions of it, and the global read
|
|
172
|
-
* still falls back to main.
|
|
173
|
-
*/ export const resolveBranchGlobalVersionQuery = ({ branch, globalSlug, req, where })=>{
|
|
174
|
-
const active = activeBranch({
|
|
175
|
-
branch,
|
|
176
|
-
globalSlug,
|
|
177
|
-
req
|
|
178
|
-
});
|
|
179
|
-
if (!active) {
|
|
180
|
-
return where;
|
|
181
|
-
}
|
|
182
|
-
const base = where && Object.keys(where).length ? [
|
|
183
|
-
where
|
|
184
|
-
] : [];
|
|
185
|
-
return {
|
|
186
|
-
and: [
|
|
187
|
-
...base,
|
|
188
|
-
{
|
|
189
|
-
[branchField]: {
|
|
190
|
-
equals: active
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
]
|
|
194
|
-
};
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
//# sourceMappingURL=globals.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/branching/globals.ts"],"sourcesContent":["import type { PayloadRequest, Where } from '../types/index.js'\n\nimport { loadBranchRow, resolveBranch, setBranchRow } from './resolveBranch.js'\nimport {\n branchChangesCollectionSlug,\n branchesCollectionSlug,\n branchField,\n MAIN_BRANCH,\n} from './types.js'\n\ntype BaseArgs = {\n branch?: false | string\n globalSlug: string\n req?: Partial<PayloadRequest>\n}\n\nconst bypassed = (branch: false | string | undefined, req?: Partial<PayloadRequest>): boolean =>\n branch === false ||\n !req?.payload ||\n Boolean((req.context as Record<string, unknown> | undefined)?._branchBypass)\n\nconst recordedGlobalsKey = '_branchRecordedGlobals'\n\nconst activeBranch = ({ branch, globalSlug, req }: BaseArgs): null | string => {\n if (bypassed(branch, req)) {\n return null\n }\n\n const branching = req!.payload!.config?.branching\n\n if (!branching?.enabled || !branching.branchableGlobals.has(globalSlug)) {\n return null\n }\n\n return branch === false ? null : (branch ?? resolveBranch(req as PayloadRequest))\n}\n\n/**\n * Branch predicate for reading a global.\n *\n * Unlike collections, this does not have to resolve everything inside one\n * query: a global is a single document, so there is no result set to paginate\n * or count and nothing a post-query step could get wrong. The query fetches the\n * branch's row and main's row together and `pickBranchGlobal` prefers the\n * branch's — one round trip, at most two rows.\n */\nexport const resolveBranchGlobalQuery = ({\n branch,\n globalSlug,\n req,\n where,\n}: { where: undefined | Where } & BaseArgs): undefined | Where => {\n const active = activeBranch({ branch, globalSlug, req })\n\n if (!active) {\n return where\n }\n\n const base = where && Object.keys(where).length ? [where] : []\n\n if (active === MAIN_BRANCH) {\n return { and: [...base, { [branchField]: { equals: MAIN_BRANCH } }] }\n }\n\n return { and: [...base, { [branchField]: { in: [active, MAIN_BRANCH] } }] }\n}\n\n/** True when the read should fetch two rows so the branch's copy can win. */\nexport const branchGlobalNeedsBothRows = (args: BaseArgs): boolean => {\n const active = activeBranch(args)\n\n return Boolean(active) && active !== MAIN_BRANCH\n}\n\n/** Picks the branch's copy of a global when it has one, else main's. */\nexport const pickBranchGlobal = <T extends Record<string, any>>(\n docs: T[],\n branch: string,\n): T | undefined => docs.find((doc) => doc?.[branchField] === branch) ?? docs[0]\n\n/**\n * The branch a global write should be scoped to, or `null` on main.\n *\n * Storage differs too much between adapters to upsert the branch's copy here —\n * Mongo keeps every global in one discriminated collection and Drizzle gives each\n * its own table, so each adapter performs the upsert. The global operation records\n * the change after that adapter write succeeds.\n */\nexport const resolveBranchGlobalWrite = (args: BaseArgs): null | string => {\n const active = activeBranch(args)\n\n return active && active !== MAIN_BRANCH ? active : null\n}\n\n/** Registers a global as changed on a branch, if it is not already. */\nexport const recordBranchGlobalChange = async ({\n branch,\n globalSlug,\n req,\n}: { branch: string } & BaseArgs): Promise<void> => {\n // Every write to a branched global asks whether it is already registered. The answer\n // cannot change within a request except by this function, so it is remembered — which\n // matters for a request that writes several globals, or one global repeatedly.\n const context = req!.context as Record<string, unknown> | undefined\n const recorded = (context?.[recordedGlobalsKey] as Set<string> | undefined) ?? new Set<string>()\n const key = `${branch}:${globalSlug}`\n\n if (context && !context[recordedGlobalsKey]) {\n context[recordedGlobalsKey] = recorded\n }\n\n if (recorded.has(key)) {\n return\n }\n\n if (req!.payload!.db.upsertBranchGlobalChange) {\n await req!.payload!.db.upsertBranchGlobalChange({ branch, globalSlug, req })\n await reopenBranchForGlobalChange({ branch, req: req as PayloadRequest })\n recorded.add(key)\n\n return\n }\n\n const existing = await req!.payload!.find({\n collection: branchChangesCollectionSlug,\n limit: 1,\n overrideAccess: true,\n pagination: false,\n req: req as PayloadRequest,\n where: {\n and: [{ branch: { equals: branch } }, { globalSlug: { equals: globalSlug } }],\n },\n })\n\n if (existing.docs.length) {\n recorded.add(key)\n\n return\n }\n\n await req!.payload!.create({\n collection: branchChangesCollectionSlug,\n data: {\n branch,\n entityType: 'global',\n globalSlug,\n operation: 'update',\n },\n overrideAccess: true,\n req: req as PayloadRequest,\n })\n\n recorded.add(key)\n}\n\nconst reopenBranchForGlobalChange = async ({\n branch,\n req,\n}: {\n branch: string\n req: PayloadRequest\n}): Promise<void> => {\n const row = await loadBranchRow({ branch, req })\n\n if (row?.status !== 'merged') {\n return\n }\n\n const reopened = await req.payload.update({\n id: row.id as number | string,\n collection: branchesCollectionSlug,\n data: { mergedAt: null, status: 'open' },\n overrideAccess: true,\n req,\n })\n\n setBranchRow({ branch, req, row: reopened as Record<string, unknown> })\n}\n\n/**\n * Branch predicate for global version reads.\n *\n * Strict equality rather than the read-through used for the global itself: a\n * version list must not interleave two branches' histories, and ordering by\n * timestamp would pick between them nondeterministically. A branch that has\n * never touched the global simply has no versions of it, and the global read\n * still falls back to main.\n */\nexport const resolveBranchGlobalVersionQuery = ({\n branch,\n globalSlug,\n req,\n where,\n}: { where: undefined | Where } & BaseArgs): undefined | Where => {\n const active = activeBranch({ branch, globalSlug, req })\n\n if (!active) {\n return where\n }\n\n const base = where && Object.keys(where).length ? [where] : []\n\n return { and: [...base, { [branchField]: { equals: active } }] }\n}\n"],"names":["loadBranchRow","resolveBranch","setBranchRow","branchChangesCollectionSlug","branchesCollectionSlug","branchField","MAIN_BRANCH","bypassed","branch","req","payload","Boolean","context","_branchBypass","recordedGlobalsKey","activeBranch","globalSlug","branching","config","enabled","branchableGlobals","has","resolveBranchGlobalQuery","where","active","base","Object","keys","length","and","equals","in","branchGlobalNeedsBothRows","args","pickBranchGlobal","docs","find","doc","resolveBranchGlobalWrite","recordBranchGlobalChange","recorded","Set","key","db","upsertBranchGlobalChange","reopenBranchForGlobalChange","add","existing","collection","limit","overrideAccess","pagination","create","data","entityType","operation","row","status","reopened","update","id","mergedAt","resolveBranchGlobalVersionQuery"],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { CollectionAfterChangeHook, CollectionBeforeChangeHook, CollectionBeforeOperationHook, GlobalBeforeOperationHook } from '../index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Stamps documents created on a branch so the read predicate can find them.
|
|
4
|
-
*
|
|
5
|
-
* `_branchDocID` is deliberately left null. For a document created on a branch
|
|
6
|
-
* the canonical ID *is* the row's own ID, and the ID rewrite treats a null
|
|
7
|
-
* `_branchDocID` as "self" — so setting it would mean an extra write after
|
|
8
|
-
* insert to learn the generated ID, for no gain. Only forked rows, which point
|
|
9
|
-
* at a different main row, need it populated.
|
|
10
|
-
*/
|
|
11
|
-
export declare const stampBranchOnCreate: CollectionBeforeChangeHook;
|
|
12
|
-
/**
|
|
13
|
-
* Records a branch-created document in the changeset registry.
|
|
14
|
-
*
|
|
15
|
-
* The registry is not consulted to *read* branch-created documents — those are
|
|
16
|
-
* found by `_branch` alone. It exists so merge and the changed-documents view
|
|
17
|
-
* can enumerate what a branch has done.
|
|
18
|
-
*/
|
|
19
|
-
export declare const recordBranchCreate: CollectionAfterChangeHook;
|
|
20
|
-
/** Refuses collection writes before they can make changes on a closed branch. */
|
|
21
|
-
export declare const assertBranchWritableBeforeCollectionWrite: CollectionBeforeOperationHook;
|
|
22
|
-
/** Refuses global writes before they can make changes on a closed branch. */
|
|
23
|
-
export declare const assertBranchWritableBeforeGlobalWrite: GlobalBeforeOperationHook;
|
|
24
|
-
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/branching/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,aAAa,CAAA;AAMpB;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,0BAWjC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,yBAqChC,CAAA;AAED,iFAAiF;AACjF,eAAO,MAAM,yCAAyC,EAAE,6BAkBvD,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,qCAAqC,EAAE,yBAwBnD,CAAA"}
|
package/dist/branching/hooks.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { assertBranchWritable } from './assertBranchWritable.js';
|
|
2
|
-
import { addToBranchManifest, refreshRequestDataLoader, resolveBranch } from './resolveBranch.js';
|
|
3
|
-
import { branchChangesCollectionSlug, branchField, MAIN_BRANCH } from './types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Stamps documents created on a branch so the read predicate can find them.
|
|
6
|
-
*
|
|
7
|
-
* `_branchDocID` is deliberately left null. For a document created on a branch
|
|
8
|
-
* the canonical ID *is* the row's own ID, and the ID rewrite treats a null
|
|
9
|
-
* `_branchDocID` as "self" — so setting it would mean an extra write after
|
|
10
|
-
* insert to learn the generated ID, for no gain. Only forked rows, which point
|
|
11
|
-
* at a different main row, need it populated.
|
|
12
|
-
*/ export const stampBranchOnCreate = ({ data, operation, req })=>{
|
|
13
|
-
const branch = resolveBranch(req);
|
|
14
|
-
if (branch === MAIN_BRANCH || operation !== 'create') {
|
|
15
|
-
return data;
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
...data,
|
|
19
|
-
[branchField]: branch
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* Records a branch-created document in the changeset registry.
|
|
24
|
-
*
|
|
25
|
-
* The registry is not consulted to *read* branch-created documents — those are
|
|
26
|
-
* found by `_branch` alone. It exists so merge and the changed-documents view
|
|
27
|
-
* can enumerate what a branch has done.
|
|
28
|
-
*/ export const recordBranchCreate = async ({ collection, doc, operation, req })=>{
|
|
29
|
-
const branch = resolveBranch(req);
|
|
30
|
-
if (branch === MAIN_BRANCH || operation !== 'create') {
|
|
31
|
-
return doc;
|
|
32
|
-
}
|
|
33
|
-
await assertBranchWritable({
|
|
34
|
-
branch,
|
|
35
|
-
req
|
|
36
|
-
});
|
|
37
|
-
await req.payload.create({
|
|
38
|
-
collection: branchChangesCollectionSlug,
|
|
39
|
-
data: {
|
|
40
|
-
branch,
|
|
41
|
-
collectionSlug: collection.slug,
|
|
42
|
-
doc: {
|
|
43
|
-
relationTo: collection.slug,
|
|
44
|
-
value: doc.id
|
|
45
|
-
},
|
|
46
|
-
documentID: String(doc.id),
|
|
47
|
-
entityType: 'collection',
|
|
48
|
-
operation: 'create'
|
|
49
|
-
},
|
|
50
|
-
overrideAccess: true,
|
|
51
|
-
req
|
|
52
|
-
});
|
|
53
|
-
addToBranchManifest({
|
|
54
|
-
collectionSlug: collection.slug,
|
|
55
|
-
docID: doc.id,
|
|
56
|
-
operation: 'create',
|
|
57
|
-
req
|
|
58
|
-
});
|
|
59
|
-
refreshRequestDataLoader(req);
|
|
60
|
-
return doc;
|
|
61
|
-
};
|
|
62
|
-
/** Refuses collection writes before they can make changes on a closed branch. */ export const assertBranchWritableBeforeCollectionWrite = async ({ args, operation, req })=>{
|
|
63
|
-
if (operation !== 'create' && operation !== 'restoreVersion' && operation !== 'update') {
|
|
64
|
-
return args;
|
|
65
|
-
}
|
|
66
|
-
const branch = resolveBranch(req);
|
|
67
|
-
if (branch === MAIN_BRANCH) {
|
|
68
|
-
return args;
|
|
69
|
-
}
|
|
70
|
-
await assertBranchWritable({
|
|
71
|
-
branch,
|
|
72
|
-
req
|
|
73
|
-
});
|
|
74
|
-
return args;
|
|
75
|
-
};
|
|
76
|
-
/** Refuses global writes before they can make changes on a closed branch. */ export const assertBranchWritableBeforeGlobalWrite = async ({ args, global, operation, req })=>{
|
|
77
|
-
if (operation !== 'restoreVersion' && operation !== 'update') {
|
|
78
|
-
return args;
|
|
79
|
-
}
|
|
80
|
-
const branch = resolveBranch(req);
|
|
81
|
-
const branching = req.payload.config.branching;
|
|
82
|
-
if (branch === MAIN_BRANCH || !branching?.enabled || !branching.branchableGlobals.has(global.slug)) {
|
|
83
|
-
return args;
|
|
84
|
-
}
|
|
85
|
-
await assertBranchWritable({
|
|
86
|
-
branch,
|
|
87
|
-
req
|
|
88
|
-
});
|
|
89
|
-
return args;
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/branching/hooks.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionBeforeChangeHook,\n CollectionBeforeOperationHook,\n GlobalBeforeOperationHook,\n} from '../index.js'\n\nimport { assertBranchWritable } from './assertBranchWritable.js'\nimport { addToBranchManifest, refreshRequestDataLoader, resolveBranch } from './resolveBranch.js'\nimport { branchChangesCollectionSlug, branchField, MAIN_BRANCH } from './types.js'\n\n/**\n * Stamps documents created on a branch so the read predicate can find them.\n *\n * `_branchDocID` is deliberately left null. For a document created on a branch\n * the canonical ID *is* the row's own ID, and the ID rewrite treats a null\n * `_branchDocID` as \"self\" — so setting it would mean an extra write after\n * insert to learn the generated ID, for no gain. Only forked rows, which point\n * at a different main row, need it populated.\n */\nexport const stampBranchOnCreate: CollectionBeforeChangeHook = ({ data, operation, req }) => {\n const branch = resolveBranch(req)\n\n if (branch === MAIN_BRANCH || operation !== 'create') {\n return data\n }\n\n return {\n ...data,\n [branchField]: branch,\n }\n}\n\n/**\n * Records a branch-created document in the changeset registry.\n *\n * The registry is not consulted to *read* branch-created documents — those are\n * found by `_branch` alone. It exists so merge and the changed-documents view\n * can enumerate what a branch has done.\n */\nexport const recordBranchCreate: CollectionAfterChangeHook = async ({\n collection,\n doc,\n operation,\n req,\n}) => {\n const branch = resolveBranch(req)\n\n if (branch === MAIN_BRANCH || operation !== 'create') {\n return doc\n }\n\n await assertBranchWritable({ branch, req })\n\n await req.payload.create({\n collection: branchChangesCollectionSlug,\n data: {\n branch,\n collectionSlug: collection.slug,\n doc: { relationTo: collection.slug, value: doc.id },\n documentID: String(doc.id),\n entityType: 'collection',\n operation: 'create',\n },\n overrideAccess: true,\n req,\n })\n\n addToBranchManifest({\n collectionSlug: collection.slug,\n docID: doc.id,\n operation: 'create',\n req,\n })\n refreshRequestDataLoader(req)\n\n return doc\n}\n\n/** Refuses collection writes before they can make changes on a closed branch. */\nexport const assertBranchWritableBeforeCollectionWrite: CollectionBeforeOperationHook = async ({\n args,\n operation,\n req,\n}) => {\n if (operation !== 'create' && operation !== 'restoreVersion' && operation !== 'update') {\n return args\n }\n\n const branch = resolveBranch(req)\n\n if (branch === MAIN_BRANCH) {\n return args\n }\n\n await assertBranchWritable({ branch, req })\n\n return args\n}\n\n/** Refuses global writes before they can make changes on a closed branch. */\nexport const assertBranchWritableBeforeGlobalWrite: GlobalBeforeOperationHook = async ({\n args,\n global,\n operation,\n req,\n}) => {\n if (operation !== 'restoreVersion' && operation !== 'update') {\n return args\n }\n\n const branch = resolveBranch(req)\n const branching = req.payload.config.branching\n\n if (\n branch === MAIN_BRANCH ||\n !branching?.enabled ||\n !branching.branchableGlobals.has(global.slug)\n ) {\n return args\n }\n\n await assertBranchWritable({ branch, req })\n\n return args\n}\n"],"names":["assertBranchWritable","addToBranchManifest","refreshRequestDataLoader","resolveBranch","branchChangesCollectionSlug","branchField","MAIN_BRANCH","stampBranchOnCreate","data","operation","req","branch","recordBranchCreate","collection","doc","payload","create","collectionSlug","slug","relationTo","value","id","documentID","String","entityType","overrideAccess","docID","assertBranchWritableBeforeCollectionWrite","args","assertBranchWritableBeforeGlobalWrite","global","branching","config","enabled","branchableGlobals","has"],"mappings":"AAOA,SAASA,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,mBAAmB,EAAEC,wBAAwB,EAAEC,aAAa,QAAQ,qBAAoB;AACjG,SAASC,2BAA2B,EAAEC,WAAW,EAAEC,WAAW,QAAQ,aAAY;AAElF;;;;;;;;CAQC,GACD,OAAO,MAAMC,sBAAkD,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEC,GAAG,EAAE;IACtF,MAAMC,SAASR,cAAcO;IAE7B,IAAIC,WAAWL,eAAeG,cAAc,UAAU;QACpD,OAAOD;IACT;IAEA,OAAO;QACL,GAAGA,IAAI;QACP,CAACH,YAAY,EAAEM;IACjB;AACF,EAAC;AAED;;;;;;CAMC,GACD,OAAO,MAAMC,qBAAgD,OAAO,EAClEC,UAAU,EACVC,GAAG,EACHL,SAAS,EACTC,GAAG,EACJ;IACC,MAAMC,SAASR,cAAcO;IAE7B,IAAIC,WAAWL,eAAeG,cAAc,UAAU;QACpD,OAAOK;IACT;IAEA,MAAMd,qBAAqB;QAAEW;QAAQD;IAAI;IAEzC,MAAMA,IAAIK,OAAO,CAACC,MAAM,CAAC;QACvBH,YAAYT;QACZI,MAAM;YACJG;YACAM,gBAAgBJ,WAAWK,IAAI;YAC/BJ,KAAK;gBAAEK,YAAYN,WAAWK,IAAI;gBAAEE,OAAON,IAAIO,EAAE;YAAC;YAClDC,YAAYC,OAAOT,IAAIO,EAAE;YACzBG,YAAY;YACZf,WAAW;QACb;QACAgB,gBAAgB;QAChBf;IACF;IAEAT,oBAAoB;QAClBgB,gBAAgBJ,WAAWK,IAAI;QAC/BQ,OAAOZ,IAAIO,EAAE;QACbZ,WAAW;QACXC;IACF;IACAR,yBAAyBQ;IAEzB,OAAOI;AACT,EAAC;AAED,+EAA+E,GAC/E,OAAO,MAAMa,4CAA2E,OAAO,EAC7FC,IAAI,EACJnB,SAAS,EACTC,GAAG,EACJ;IACC,IAAID,cAAc,YAAYA,cAAc,oBAAoBA,cAAc,UAAU;QACtF,OAAOmB;IACT;IAEA,MAAMjB,SAASR,cAAcO;IAE7B,IAAIC,WAAWL,aAAa;QAC1B,OAAOsB;IACT;IAEA,MAAM5B,qBAAqB;QAAEW;QAAQD;IAAI;IAEzC,OAAOkB;AACT,EAAC;AAED,2EAA2E,GAC3E,OAAO,MAAMC,wCAAmE,OAAO,EACrFD,IAAI,EACJE,MAAM,EACNrB,SAAS,EACTC,GAAG,EACJ;IACC,IAAID,cAAc,oBAAoBA,cAAc,UAAU;QAC5D,OAAOmB;IACT;IAEA,MAAMjB,SAASR,cAAcO;IAC7B,MAAMqB,YAAYrB,IAAIK,OAAO,CAACiB,MAAM,CAACD,SAAS;IAE9C,IACEpB,WAAWL,eACX,CAACyB,WAAWE,WACZ,CAACF,UAAUG,iBAAiB,CAACC,GAAG,CAACL,OAAOZ,IAAI,GAC5C;QACA,OAAOU;IACT;IAEA,MAAM5B,qBAAqB;QAAEW;QAAQD;IAAI;IAEzC,OAAOkB;AACT,EAAC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import type { CollectionConfig } from '../collections/config/types.js';
|
|
2
|
-
import type { Field, TextField } from '../fields/config/types.js';
|
|
3
|
-
import type { GlobalConfig } from '../globals/config/types.js';
|
|
4
|
-
/**
|
|
5
|
-
* `_branch` — which branch a row belongs to. `'main'` is a non-null sentinel
|
|
6
|
-
* rather than NULL so that compound `(field, _branch)` unique indexes keep
|
|
7
|
-
* enforcing uniqueness among main rows on Postgres, which treats NULLs as
|
|
8
|
-
* distinct.
|
|
9
|
-
*/
|
|
10
|
-
export declare const buildBranchField: () => TextField;
|
|
11
|
-
/**
|
|
12
|
-
* `_branchDocID` — the canonical document this row represents. Null on main
|
|
13
|
-
* rows, meaning "self".
|
|
14
|
-
*
|
|
15
|
-
* Declared as a self-referential `relationship` rather than `text` for two
|
|
16
|
-
* reasons: it inherits the collection's own ID type (which may be text,
|
|
17
|
-
* number, or a custom ID), and Payload's Drizzle builder special-cases
|
|
18
|
-
* `not_in` for relationship fields to emit `(col NOT IN (...) OR col IS NULL)`,
|
|
19
|
-
* without which every main row would be excluded from a branch read.
|
|
20
|
-
*/
|
|
21
|
-
export declare const buildBranchDocIDField: (slug: string) => Field;
|
|
22
|
-
/** `_branchParent` — the canonical parent document, for version rows. */
|
|
23
|
-
export declare const buildBranchParentField: (slug: string) => Field;
|
|
24
|
-
/**
|
|
25
|
-
* Injects the branch discriminator fields and rewrites `unique: true` fields
|
|
26
|
-
* into branch-scoped compound indexes.
|
|
27
|
-
*
|
|
28
|
-
* A branch holds a full copy of a document, so an unscoped unique index would
|
|
29
|
-
* reject the copy outright. Scoping by `_branch` lets two branches each hold a
|
|
30
|
-
* document with the same value while preserving uniqueness within a branch.
|
|
31
|
-
*/
|
|
32
|
-
export declare const injectBranchFields: (collection: CollectionConfig) => CollectionConfig;
|
|
33
|
-
/**
|
|
34
|
-
* Globals need only the discriminator.
|
|
35
|
-
*
|
|
36
|
-
* No `_branchDocID`, because a global's identity is its slug and is stable
|
|
37
|
-
* across branches — the whole canonical-ID translation problem does not arise.
|
|
38
|
-
*/
|
|
39
|
-
export declare const injectGlobalBranchFields: (global: GlobalConfig) => GlobalConfig;
|
|
40
|
-
//# sourceMappingURL=injectBranchFields.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injectBranchFields.d.ts","sourceRoot":"","sources":["../../src/branching/injectBranchFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,gCAAgC,CAAA;AACrF,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAkD9D;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAAO,SAQlC,CAAA;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,SAAU,MAAM,KAAG,KAQnD,CAAA;AAEF,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,SAAU,MAAM,KAAG,KAQpD,CAAA;AAkDF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,eAAgB,gBAAgB,KAAG,gBAyDjE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,WAAY,YAAY,KAAG,YAe/D,CAAA"}
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { fieldAffectsData, tabHasName } from '../fields/config/types.js';
|
|
2
|
-
import { assertBranchWritableBeforeCollectionWrite, assertBranchWritableBeforeGlobalWrite, recordBranchCreate, stampBranchOnCreate } from './hooks.js';
|
|
3
|
-
import { branchDocIDField, branchField, branchParentField, MAIN_BRANCH } from './types.js';
|
|
4
|
-
/**
|
|
5
|
-
* These columns are branch bookkeeping, not content. They are `admin.hidden`,
|
|
6
|
-
* but hidden is not the same as read-only: the admin form round-trips every
|
|
7
|
-
* field it loaded, so an edit made on a branch would submit the `_branch` it
|
|
8
|
-
* was read with and stamp it back onto the shadow row — quietly moving that
|
|
9
|
-
* row onto `main` and duplicating the document in production.
|
|
10
|
-
*
|
|
11
|
-
* Denying field-level create/update makes them internally writable only.
|
|
12
|
-
* Field access is skipped under `overrideAccess: true`, which is exactly the
|
|
13
|
-
* exemption merge needs to flip `_branch` to `'main'` (§16), and the
|
|
14
|
-
* copy-on-write paths write through `payload.db` directly, below field access
|
|
15
|
-
* entirely.
|
|
16
|
-
*/ const internalOnly = {
|
|
17
|
-
access: {
|
|
18
|
-
create: ()=>false,
|
|
19
|
-
update: ()=>false
|
|
20
|
-
},
|
|
21
|
-
admin: {
|
|
22
|
-
disabled: {
|
|
23
|
-
bulkEdit: true
|
|
24
|
-
},
|
|
25
|
-
hidden: true
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* `hidden` on top of that, for the columns nothing outside the branching engine
|
|
30
|
-
* ever reads back.
|
|
31
|
-
*
|
|
32
|
-
* `admin.hidden` only keeps a field out of the edit form — it still ships in every
|
|
33
|
-
* API response, which muddies the shape of every branched document. `hidden`
|
|
34
|
-
* removes it from responses altogether. Reads that legitimately need to inspect
|
|
35
|
-
* these columns pass `showHiddenFields: true`; the engine itself is unaffected,
|
|
36
|
-
* because copy-on-write, merge and tombstoning all read through `payload.db`
|
|
37
|
-
* directly, below the `afterRead` layer that does the stripping.
|
|
38
|
-
*
|
|
39
|
-
* Writes must never take these from round-tripped data: a read strips them, the
|
|
40
|
-
* field default silently refills `_branch` with `main`, and writing that back
|
|
41
|
-
* would flip a branch's row onto main. Both adapters set `_branch` explicitly on
|
|
42
|
-
* global writes for exactly this reason.
|
|
43
|
-
*/ const bookkeepingOnly = {
|
|
44
|
-
...internalOnly,
|
|
45
|
-
hidden: true
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* `_branch` — which branch a row belongs to. `'main'` is a non-null sentinel
|
|
49
|
-
* rather than NULL so that compound `(field, _branch)` unique indexes keep
|
|
50
|
-
* enforcing uniqueness among main rows on Postgres, which treats NULLs as
|
|
51
|
-
* distinct.
|
|
52
|
-
*/ export const buildBranchField = ()=>({
|
|
53
|
-
name: branchField,
|
|
54
|
-
type: 'text',
|
|
55
|
-
...bookkeepingOnly,
|
|
56
|
-
defaultValue: MAIN_BRANCH,
|
|
57
|
-
index: true,
|
|
58
|
-
label: 'Branch',
|
|
59
|
-
required: true
|
|
60
|
-
});
|
|
61
|
-
/**
|
|
62
|
-
* `_branchDocID` — the canonical document this row represents. Null on main
|
|
63
|
-
* rows, meaning "self".
|
|
64
|
-
*
|
|
65
|
-
* Declared as a self-referential `relationship` rather than `text` for two
|
|
66
|
-
* reasons: it inherits the collection's own ID type (which may be text,
|
|
67
|
-
* number, or a custom ID), and Payload's Drizzle builder special-cases
|
|
68
|
-
* `not_in` for relationship fields to emit `(col NOT IN (...) OR col IS NULL)`,
|
|
69
|
-
* without which every main row would be excluded from a branch read.
|
|
70
|
-
*/ export const buildBranchDocIDField = (slug)=>({
|
|
71
|
-
name: branchDocIDField,
|
|
72
|
-
type: 'relationship',
|
|
73
|
-
...bookkeepingOnly,
|
|
74
|
-
index: true,
|
|
75
|
-
label: 'Branch Document',
|
|
76
|
-
maxDepth: 0,
|
|
77
|
-
relationTo: slug
|
|
78
|
-
});
|
|
79
|
-
/** `_branchParent` — the canonical parent document, for version rows. */ export const buildBranchParentField = (slug)=>({
|
|
80
|
-
name: branchParentField,
|
|
81
|
-
type: 'relationship',
|
|
82
|
-
...bookkeepingOnly,
|
|
83
|
-
index: true,
|
|
84
|
-
label: 'Branch Parent Document',
|
|
85
|
-
maxDepth: 0,
|
|
86
|
-
relationTo: slug
|
|
87
|
-
});
|
|
88
|
-
const hasField = (fields, name)=>fields.some((field)=>'name' in field && field.name === name);
|
|
89
|
-
const joinFieldPath = ({ name, parentPath })=>parentPath ? `${parentPath}.${name}` : name;
|
|
90
|
-
const rewriteUniqueFields = ({ fields, indexes, parentPath = '' })=>{
|
|
91
|
-
for (const field of fields){
|
|
92
|
-
if (fieldAffectsData(field) && 'unique' in field && field.unique) {
|
|
93
|
-
const fieldPath = joinFieldPath({
|
|
94
|
-
name: field.name,
|
|
95
|
-
parentPath
|
|
96
|
-
});
|
|
97
|
-
field.unique = false;
|
|
98
|
-
indexes.push({
|
|
99
|
-
fields: [
|
|
100
|
-
fieldPath,
|
|
101
|
-
branchField
|
|
102
|
-
],
|
|
103
|
-
...field.required === true ? {} : {
|
|
104
|
-
requireExists: [
|
|
105
|
-
fieldPath
|
|
106
|
-
]
|
|
107
|
-
},
|
|
108
|
-
unique: true
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
if (field.type === 'collapsible' || field.type === 'group' || field.type === 'row') {
|
|
112
|
-
rewriteUniqueFields({
|
|
113
|
-
fields: field.fields,
|
|
114
|
-
indexes,
|
|
115
|
-
parentPath: field.type === 'group' && fieldAffectsData(field) ? joinFieldPath({
|
|
116
|
-
name: field.name,
|
|
117
|
-
parentPath
|
|
118
|
-
}) : parentPath
|
|
119
|
-
});
|
|
120
|
-
} else if (field.type === 'tabs') {
|
|
121
|
-
for (const tab of field.tabs){
|
|
122
|
-
rewriteUniqueFields({
|
|
123
|
-
fields: tab.fields,
|
|
124
|
-
indexes,
|
|
125
|
-
parentPath: tabHasName(tab) ? joinFieldPath({
|
|
126
|
-
name: tab.name,
|
|
127
|
-
parentPath
|
|
128
|
-
}) : parentPath
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
/**
|
|
135
|
-
* Injects the branch discriminator fields and rewrites `unique: true` fields
|
|
136
|
-
* into branch-scoped compound indexes.
|
|
137
|
-
*
|
|
138
|
-
* A branch holds a full copy of a document, so an unscoped unique index would
|
|
139
|
-
* reject the copy outright. Scoping by `_branch` lets two branches each hold a
|
|
140
|
-
* document with the same value while preserving uniqueness within a branch.
|
|
141
|
-
*/ export const injectBranchFields = (collection)=>{
|
|
142
|
-
if (!hasField(collection.fields, branchField)) {
|
|
143
|
-
collection.fields.push(buildBranchField());
|
|
144
|
-
}
|
|
145
|
-
if (!hasField(collection.fields, branchDocIDField)) {
|
|
146
|
-
collection.fields.push(buildBranchDocIDField(collection.slug));
|
|
147
|
-
}
|
|
148
|
-
const indexes = (collection.indexes ?? []).map((index)=>index.unique && !index.fields.includes(branchField) ? {
|
|
149
|
-
...index,
|
|
150
|
-
fields: [
|
|
151
|
-
...index.fields,
|
|
152
|
-
branchField
|
|
153
|
-
]
|
|
154
|
-
} : index);
|
|
155
|
-
// Catches two concurrent first-edits of the same document on the same branch:
|
|
156
|
-
// whichever write loses the race gets a constraint violation from the
|
|
157
|
-
// database instead of a second, silently duplicate shadow row. Scoped to rows
|
|
158
|
-
// that have a `_branchDocID` at all — a main row's is null, and a unique
|
|
159
|
-
// index would otherwise treat every main row as colliding with every other.
|
|
160
|
-
indexes.push({
|
|
161
|
-
fields: [
|
|
162
|
-
branchDocIDField,
|
|
163
|
-
branchField
|
|
164
|
-
],
|
|
165
|
-
requireExists: [
|
|
166
|
-
branchDocIDField
|
|
167
|
-
],
|
|
168
|
-
unique: true
|
|
169
|
-
});
|
|
170
|
-
rewriteUniqueFields({
|
|
171
|
-
fields: collection.fields,
|
|
172
|
-
indexes
|
|
173
|
-
});
|
|
174
|
-
collection.indexes = indexes;
|
|
175
|
-
// `filename` is unique on upload collections, but it is added by upload
|
|
176
|
-
// sanitization — which runs *after* this — so the loop above cannot reach it and
|
|
177
|
-
// it would keep a global unique index. A branch's copy of an upload then
|
|
178
|
-
// collides with main's on filename, and forking or tombstoning it fails
|
|
179
|
-
// outright. Declaring the compound index up front is the supported way to scope
|
|
180
|
-
// it: `getBaseUploadFields` leaves `filename.unique` unset when it is present.
|
|
181
|
-
if (collection.upload) {
|
|
182
|
-
const upload = collection.upload === true ? {} : collection.upload;
|
|
183
|
-
upload.filenameCompoundIndex ??= [
|
|
184
|
-
'filename'
|
|
185
|
-
];
|
|
186
|
-
if (!upload.filenameCompoundIndex.includes(branchField)) {
|
|
187
|
-
upload.filenameCompoundIndex.push(branchField);
|
|
188
|
-
}
|
|
189
|
-
collection.upload = upload;
|
|
190
|
-
}
|
|
191
|
-
collection.hooks = collection.hooks ?? {};
|
|
192
|
-
collection.hooks.beforeChange = [
|
|
193
|
-
...collection.hooks.beforeChange ?? [],
|
|
194
|
-
stampBranchOnCreate
|
|
195
|
-
];
|
|
196
|
-
collection.hooks.afterChange = [
|
|
197
|
-
...collection.hooks.afterChange ?? [],
|
|
198
|
-
recordBranchCreate
|
|
199
|
-
];
|
|
200
|
-
collection.hooks.beforeOperation = [
|
|
201
|
-
assertBranchWritableBeforeCollectionWrite,
|
|
202
|
-
...collection.hooks.beforeOperation ?? []
|
|
203
|
-
];
|
|
204
|
-
return collection;
|
|
205
|
-
};
|
|
206
|
-
/**
|
|
207
|
-
* Globals need only the discriminator.
|
|
208
|
-
*
|
|
209
|
-
* No `_branchDocID`, because a global's identity is its slug and is stable
|
|
210
|
-
* across branches — the whole canonical-ID translation problem does not arise.
|
|
211
|
-
*/ export const injectGlobalBranchFields = (global)=>{
|
|
212
|
-
if (!hasField(global.fields, branchField)) {
|
|
213
|
-
// Each global has at most one row on a branch. Besides expressing that
|
|
214
|
-
// invariant, the unique key is the conflict target used by adapter upserts
|
|
215
|
-
// when concurrent requests make the first branch write.
|
|
216
|
-
global.fields.push({
|
|
217
|
-
...buildBranchField(),
|
|
218
|
-
unique: true
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
global.hooks = global.hooks ?? {};
|
|
222
|
-
global.hooks.beforeOperation = [
|
|
223
|
-
assertBranchWritableBeforeGlobalWrite,
|
|
224
|
-
...global.hooks.beforeOperation ?? []
|
|
225
|
-
];
|
|
226
|
-
return global;
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
//# sourceMappingURL=injectBranchFields.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/branching/injectBranchFields.ts"],"sourcesContent":["import type { CollectionConfig, CompoundIndex } from '../collections/config/types.js'\nimport type { Field, TextField } from '../fields/config/types.js'\nimport type { GlobalConfig } from '../globals/config/types.js'\n\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\nimport {\n assertBranchWritableBeforeCollectionWrite,\n assertBranchWritableBeforeGlobalWrite,\n recordBranchCreate,\n stampBranchOnCreate,\n} from './hooks.js'\nimport { branchDocIDField, branchField, branchParentField, MAIN_BRANCH } from './types.js'\n\n/**\n * These columns are branch bookkeeping, not content. They are `admin.hidden`,\n * but hidden is not the same as read-only: the admin form round-trips every\n * field it loaded, so an edit made on a branch would submit the `_branch` it\n * was read with and stamp it back onto the shadow row — quietly moving that\n * row onto `main` and duplicating the document in production.\n *\n * Denying field-level create/update makes them internally writable only.\n * Field access is skipped under `overrideAccess: true`, which is exactly the\n * exemption merge needs to flip `_branch` to `'main'` (§16), and the\n * copy-on-write paths write through `payload.db` directly, below field access\n * entirely.\n */\nconst internalOnly = {\n access: { create: () => false, update: () => false },\n admin: { disabled: { bulkEdit: true }, hidden: true },\n} as const\n\n/**\n * `hidden` on top of that, for the columns nothing outside the branching engine\n * ever reads back.\n *\n * `admin.hidden` only keeps a field out of the edit form — it still ships in every\n * API response, which muddies the shape of every branched document. `hidden`\n * removes it from responses altogether. Reads that legitimately need to inspect\n * these columns pass `showHiddenFields: true`; the engine itself is unaffected,\n * because copy-on-write, merge and tombstoning all read through `payload.db`\n * directly, below the `afterRead` layer that does the stripping.\n *\n * Writes must never take these from round-tripped data: a read strips them, the\n * field default silently refills `_branch` with `main`, and writing that back\n * would flip a branch's row onto main. Both adapters set `_branch` explicitly on\n * global writes for exactly this reason.\n */\nconst bookkeepingOnly = {\n ...internalOnly,\n hidden: true,\n} as const\n\n/**\n * `_branch` — which branch a row belongs to. `'main'` is a non-null sentinel\n * rather than NULL so that compound `(field, _branch)` unique indexes keep\n * enforcing uniqueness among main rows on Postgres, which treats NULLs as\n * distinct.\n */\nexport const buildBranchField = (): TextField => ({\n name: branchField,\n type: 'text',\n ...bookkeepingOnly,\n defaultValue: MAIN_BRANCH,\n index: true,\n label: 'Branch',\n required: true,\n})\n\n/**\n * `_branchDocID` — the canonical document this row represents. Null on main\n * rows, meaning \"self\".\n *\n * Declared as a self-referential `relationship` rather than `text` for two\n * reasons: it inherits the collection's own ID type (which may be text,\n * number, or a custom ID), and Payload's Drizzle builder special-cases\n * `not_in` for relationship fields to emit `(col NOT IN (...) OR col IS NULL)`,\n * without which every main row would be excluded from a branch read.\n */\nexport const buildBranchDocIDField = (slug: string): Field => ({\n name: branchDocIDField,\n type: 'relationship',\n ...bookkeepingOnly,\n index: true,\n label: 'Branch Document',\n maxDepth: 0,\n relationTo: slug,\n})\n\n/** `_branchParent` — the canonical parent document, for version rows. */\nexport const buildBranchParentField = (slug: string): Field => ({\n name: branchParentField,\n type: 'relationship',\n ...bookkeepingOnly,\n index: true,\n label: 'Branch Parent Document',\n maxDepth: 0,\n relationTo: slug,\n})\n\nconst hasField = (fields: Field[], name: string): boolean =>\n fields.some((field) => 'name' in field && field.name === name)\n\nconst joinFieldPath = ({ name, parentPath }: { name: string; parentPath: string }): string =>\n parentPath ? `${parentPath}.${name}` : name\n\nconst rewriteUniqueFields = ({\n fields,\n indexes,\n parentPath = '',\n}: {\n fields: Field[]\n indexes: CompoundIndex[]\n parentPath?: string\n}): void => {\n for (const field of fields) {\n if (fieldAffectsData(field) && 'unique' in field && field.unique) {\n const fieldPath = joinFieldPath({ name: field.name, parentPath })\n\n field.unique = false\n indexes.push({\n fields: [fieldPath, branchField],\n ...(field.required === true ? {} : { requireExists: [fieldPath] }),\n unique: true,\n })\n }\n\n if (field.type === 'collapsible' || field.type === 'group' || field.type === 'row') {\n rewriteUniqueFields({\n fields: field.fields,\n indexes,\n parentPath:\n field.type === 'group' && fieldAffectsData(field)\n ? joinFieldPath({ name: field.name, parentPath })\n : parentPath,\n })\n } else if (field.type === 'tabs') {\n for (const tab of field.tabs) {\n rewriteUniqueFields({\n fields: tab.fields,\n indexes,\n parentPath: tabHasName(tab) ? joinFieldPath({ name: tab.name, parentPath }) : parentPath,\n })\n }\n }\n }\n}\n\n/**\n * Injects the branch discriminator fields and rewrites `unique: true` fields\n * into branch-scoped compound indexes.\n *\n * A branch holds a full copy of a document, so an unscoped unique index would\n * reject the copy outright. Scoping by `_branch` lets two branches each hold a\n * document with the same value while preserving uniqueness within a branch.\n */\nexport const injectBranchFields = (collection: CollectionConfig): CollectionConfig => {\n if (!hasField(collection.fields, branchField)) {\n collection.fields.push(buildBranchField())\n }\n\n if (!hasField(collection.fields, branchDocIDField)) {\n collection.fields.push(buildBranchDocIDField(collection.slug))\n }\n\n const indexes = (collection.indexes ?? []).map((index) =>\n index.unique && !index.fields.includes(branchField)\n ? { ...index, fields: [...index.fields, branchField] }\n : index,\n )\n\n // Catches two concurrent first-edits of the same document on the same branch:\n // whichever write loses the race gets a constraint violation from the\n // database instead of a second, silently duplicate shadow row. Scoped to rows\n // that have a `_branchDocID` at all — a main row's is null, and a unique\n // index would otherwise treat every main row as colliding with every other.\n indexes.push({\n fields: [branchDocIDField, branchField],\n requireExists: [branchDocIDField],\n unique: true,\n })\n\n rewriteUniqueFields({ fields: collection.fields, indexes })\n\n collection.indexes = indexes\n\n // `filename` is unique on upload collections, but it is added by upload\n // sanitization — which runs *after* this — so the loop above cannot reach it and\n // it would keep a global unique index. A branch's copy of an upload then\n // collides with main's on filename, and forking or tombstoning it fails\n // outright. Declaring the compound index up front is the supported way to scope\n // it: `getBaseUploadFields` leaves `filename.unique` unset when it is present.\n if (collection.upload) {\n const upload = collection.upload === true ? {} : collection.upload\n\n upload.filenameCompoundIndex ??= ['filename']\n\n if (!upload.filenameCompoundIndex.includes(branchField)) {\n upload.filenameCompoundIndex.push(branchField)\n }\n\n collection.upload = upload\n }\n\n collection.hooks = collection.hooks ?? {}\n collection.hooks.beforeChange = [...(collection.hooks.beforeChange ?? []), stampBranchOnCreate]\n collection.hooks.afterChange = [...(collection.hooks.afterChange ?? []), recordBranchCreate]\n collection.hooks.beforeOperation = [\n assertBranchWritableBeforeCollectionWrite,\n ...(collection.hooks.beforeOperation ?? []),\n ]\n\n return collection\n}\n\n/**\n * Globals need only the discriminator.\n *\n * No `_branchDocID`, because a global's identity is its slug and is stable\n * across branches — the whole canonical-ID translation problem does not arise.\n */\nexport const injectGlobalBranchFields = (global: GlobalConfig): GlobalConfig => {\n if (!hasField(global.fields, branchField)) {\n // Each global has at most one row on a branch. Besides expressing that\n // invariant, the unique key is the conflict target used by adapter upserts\n // when concurrent requests make the first branch write.\n global.fields.push({ ...buildBranchField(), unique: true })\n }\n\n global.hooks = global.hooks ?? {}\n global.hooks.beforeOperation = [\n assertBranchWritableBeforeGlobalWrite,\n ...(global.hooks.beforeOperation ?? []),\n ]\n\n return global\n}\n"],"names":["fieldAffectsData","tabHasName","assertBranchWritableBeforeCollectionWrite","assertBranchWritableBeforeGlobalWrite","recordBranchCreate","stampBranchOnCreate","branchDocIDField","branchField","branchParentField","MAIN_BRANCH","internalOnly","access","create","update","admin","disabled","bulkEdit","hidden","bookkeepingOnly","buildBranchField","name","type","defaultValue","index","label","required","buildBranchDocIDField","slug","maxDepth","relationTo","buildBranchParentField","hasField","fields","some","field","joinFieldPath","parentPath","rewriteUniqueFields","indexes","unique","fieldPath","push","requireExists","tab","tabs","injectBranchFields","collection","map","includes","upload","filenameCompoundIndex","hooks","beforeChange","afterChange","beforeOperation","injectGlobalBranchFields","global"],"mappings":"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"}
|