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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/branching/assertBranchCreatedDocumentsUnreferenced.ts"],"sourcesContent":["import type { Field, FlattenedField } from '../fields/config/types.js'\nimport type { PayloadRequest, Where } from '../types/index.js'\n\nimport { APIError } from '../errors/index.js'\nimport { fieldIsVirtual, fieldShouldBeLocalized } from '../fields/config/types.js'\nimport { flattenAllFields } from '../utilities/flattenAllFields.js'\nimport { corePayloadCollectionSlugs, hardExcludedSlugs } from './sanitizeBranchingConfig.js'\nimport { branchesCollectionSlug, branchField, MAIN_BRANCH } from './types.js'\n\nexport type BranchCreatedTarget = {\n collectionSlug: string\n docID: number | string\n}\n\ntype BranchCreatedReferenceArgs = {\n data: unknown\n dataShape: 'flattened' | 'withLocales'\n fields: FlattenedField[]\n payloadBlocks: PayloadRequest['payload']['blocks']\n req: PayloadRequest\n target: BranchCreatedTarget\n}\n\ntype Args = {\n /** Individual branch-global owners that the same selected discard will remove. */\n ignoredGlobalOwnerBranches?: Map<string, Set<string>>\n /** Branch rows and version chains that the same operation will remove. */\n ignoredOwnerBranch?: string\n /** Individual owner rows that the same selected discard will remove. */\n ignoredOwnerRowIDs?: Map<string, Set<number | string>>\n req: PayloadRequest\n targets: BranchCreatedTarget[]\n}\n\ntype DataPath = {\n path: string\n}\n\ntype RelationshipPath = {\n hasBlockAncestor: boolean\n hasLocalizedAncestor: boolean\n isPolymorphic: boolean\n} & DataPath\n\n/**\n * Refuses to hard-delete branch-created documents while surviving content refers to them.\n *\n * Reads through the database adapter so access, hooks, hidden fields and configured selects\n * cannot hide a relationship that the database would remove or leave dangling.\n */\nexport const assertBranchCreatedDocumentsUnreferenced = async ({\n ignoredGlobalOwnerBranches,\n ignoredOwnerBranch,\n ignoredOwnerRowIDs,\n req,\n targets,\n}: Args): Promise<void> => {\n const excludedCollectionSlugs = new Set<string>([\n ...corePayloadCollectionSlugs,\n ...hardExcludedSlugs,\n ])\n let globalOwnerBranches: string[] | undefined\n\n const getGlobalOwnerBranches = async (): Promise<string[]> => {\n if (globalOwnerBranches) {\n return globalOwnerBranches\n }\n\n const { docs } = await req.payload.db.find({\n branch: false,\n collection: branchesCollectionSlug,\n limit: 0,\n pagination: false,\n req,\n where: {},\n })\n\n globalOwnerBranches = [\n MAIN_BRANCH,\n ...docs.flatMap((doc) => {\n const branchSlug = (doc as Record<string, unknown>).slug\n\n return typeof branchSlug === 'string' ? [branchSlug] : []\n }),\n ]\n\n return globalOwnerBranches\n }\n\n for (const target of deduplicateTargets(targets)) {\n for (const ownerCollection of req.payload.config.collections) {\n if (excludedCollectionSlugs.has(ownerCollection.slug)) {\n continue\n }\n\n const relationshipPaths = getRelationshipPaths({\n fields: ownerCollection.flattenedFields,\n payloadBlocks: req.payload.blocks,\n targetCollectionSlug: target.collectionSlug,\n })\n const richTextPaths = getRichTextPaths({\n fields: ownerCollection.flattenedFields,\n payloadBlocks: req.payload.blocks,\n })\n const hasRecursiveBlockReferences = hasRecursiveBlocks({\n fields: ownerCollection.flattenedFields,\n payloadBlocks: req.payload.blocks,\n })\n\n if (!relationshipPaths.length && !richTextPaths.length) {\n continue\n }\n\n const ignoredRowIDs = ignoredOwnerRowIDs?.get(ownerCollection.slug)\n const liveConditions: Where[] = []\n\n if (\n ignoredOwnerBranch &&\n req.payload.config.branching.branchableCollections.has(ownerCollection.slug)\n ) {\n liveConditions.push({ [branchField]: { not_equals: ignoredOwnerBranch } })\n }\n\n if (ignoredRowIDs?.size) {\n liveConditions.push({ id: { not_in: [...ignoredRowIDs] } })\n }\n\n const shouldScanEveryDocument =\n richTextPaths.length > 0 ||\n hasRecursiveBlockReferences ||\n relationshipPaths.some(\n ({ hasBlockAncestor, hasLocalizedAncestor }) => hasBlockAncestor || hasLocalizedAncestor,\n )\n const possibleOwners = await req.payload.db.find({\n branch: false,\n collection: ownerCollection.slug,\n limit: 0,\n locale: 'all',\n pagination: false,\n req,\n where: shouldScanEveryDocument\n ? liveConditions.length\n ? combineConditions(liveConditions)\n : {}\n : combineConditions([\n buildRelationshipWhere({ relationshipPaths, target }),\n ...liveConditions,\n ]),\n })\n\n if (\n possibleOwners.docs.some((doc) =>\n hasBranchCreatedDocumentReference({\n data: doc,\n dataShape: 'withLocales',\n fields: ownerCollection.flattenedFields,\n payloadBlocks: req.payload.blocks,\n req,\n target,\n }),\n )\n ) {\n throwReferenceError()\n }\n\n if (!ownerCollection.versions) {\n continue\n }\n\n const versionConditions: Where[] = []\n\n if (\n ignoredOwnerBranch &&\n req.payload.config.branching.branchableCollections.has(ownerCollection.slug)\n ) {\n versionConditions.push({ [branchField]: { not_equals: ignoredOwnerBranch } })\n }\n\n if (ignoredRowIDs?.size) {\n versionConditions.push({ parent: { not_in: [...ignoredRowIDs] } })\n }\n\n const possibleVersions = await req.payload.db.findVersions({\n branch: false,\n collection: ownerCollection.slug,\n limit: 0,\n locale: 'all',\n pagination: false,\n req,\n where: shouldScanEveryDocument\n ? versionConditions.length\n ? combineConditions(versionConditions)\n : {}\n : combineConditions([\n buildRelationshipWhere({\n pathPrefix: 'version',\n relationshipPaths,\n target,\n }),\n ...versionConditions,\n ]),\n })\n\n if (\n possibleVersions.docs.some((version) =>\n hasBranchCreatedDocumentReference({\n data: version.version,\n dataShape: 'withLocales',\n fields: ownerCollection.flattenedFields,\n payloadBlocks: req.payload.blocks,\n req,\n target,\n }),\n )\n ) {\n throwReferenceError()\n }\n }\n\n for (const ownerGlobal of req.payload.globals.config) {\n const relationshipPaths = getRelationshipPaths({\n fields: ownerGlobal.flattenedFields,\n payloadBlocks: req.payload.blocks,\n targetCollectionSlug: target.collectionSlug,\n })\n const richTextPaths = getRichTextPaths({\n fields: ownerGlobal.flattenedFields,\n payloadBlocks: req.payload.blocks,\n })\n const hasRecursiveBlockReferences = hasRecursiveBlocks({\n fields: ownerGlobal.flattenedFields,\n payloadBlocks: req.payload.blocks,\n })\n\n if (!relationshipPaths.length && !richTextPaths.length) {\n continue\n }\n\n const ignoredGlobalBranches = new Set(ignoredGlobalOwnerBranches?.get(ownerGlobal.slug) ?? [])\n\n if (\n ignoredOwnerBranch &&\n req.payload.config.branching.branchableGlobals.has(ownerGlobal.slug)\n ) {\n ignoredGlobalBranches.add(ignoredOwnerBranch)\n }\n\n const isBranchableGlobal = req.payload.config.branching.branchableGlobals.has(\n ownerGlobal.slug,\n )\n const shouldScanEveryGlobal =\n richTextPaths.length > 0 ||\n hasRecursiveBlockReferences ||\n relationshipPaths.some(\n ({ hasBlockAncestor, hasLocalizedAncestor }) => hasBlockAncestor || hasLocalizedAncestor,\n )\n const ownerBranches = isBranchableGlobal ? await getGlobalOwnerBranches() : [MAIN_BRANCH]\n\n for (const ownerBranch of ownerBranches) {\n if (ignoredGlobalBranches.has(ownerBranch)) {\n continue\n }\n\n const ownerConditions: Where[] = []\n\n if (isBranchableGlobal) {\n ownerConditions.push({ [branchField]: { equals: ownerBranch } })\n }\n\n if (!shouldScanEveryGlobal) {\n ownerConditions.unshift(buildRelationshipWhere({ relationshipPaths, target }))\n }\n\n const possibleOwner = await req.payload.db.findGlobal({\n slug: ownerGlobal.slug,\n branch: false,\n locale: 'all',\n req,\n where: ownerConditions.length ? combineConditions(ownerConditions) : undefined,\n })\n\n if (\n possibleOwner &&\n hasBranchCreatedDocumentReference({\n data: possibleOwner,\n dataShape: 'withLocales',\n fields: ownerGlobal.flattenedFields,\n payloadBlocks: req.payload.blocks,\n req,\n target,\n })\n ) {\n throwReferenceError()\n }\n }\n\n if (!ownerGlobal.versions) {\n continue\n }\n\n const versionConditions: Where[] = []\n\n if (\n ignoredGlobalBranches.size &&\n req.payload.config.branching.branchableGlobals.has(ownerGlobal.slug)\n ) {\n versionConditions.push({ [branchField]: { not_in: [...ignoredGlobalBranches] } })\n }\n\n const possibleVersions = await req.payload.db.findGlobalVersions({\n branch: false,\n global: ownerGlobal.slug,\n limit: 0,\n locale: 'all',\n pagination: false,\n req,\n where: shouldScanEveryGlobal\n ? versionConditions.length\n ? combineConditions(versionConditions)\n : {}\n : combineConditions([\n buildRelationshipWhere({\n pathPrefix: 'version',\n relationshipPaths,\n target,\n }),\n ...versionConditions,\n ]),\n })\n\n if (\n possibleVersions.docs.some((version) =>\n hasBranchCreatedDocumentReference({\n data: version.version,\n dataShape: 'withLocales',\n fields: ownerGlobal.flattenedFields,\n payloadBlocks: req.payload.blocks,\n req,\n target,\n }),\n )\n ) {\n throwReferenceError()\n }\n }\n }\n}\n\n/** Checks persisted field data for a direct or serialized reference to one document. */\nexport const hasBranchCreatedDocumentReference = ({\n data,\n dataShape,\n fields,\n payloadBlocks,\n req,\n target,\n}: BranchCreatedReferenceArgs): boolean =>\n hasReferenceInFields({ data, dataShape, fields, payloadBlocks, req, target })\n\n/**\n * Returns the collection types that a configured field tree can reference.\n *\n * `undefined` means the field tree can contain references that are not described by static field\n * configuration. Rich text is intentionally unbounded because serialized nodes and editor-provided\n * subfields can reference collections at runtime.\n */\nexport const getPossibleRelationshipCollectionSlugs = ({\n fields,\n payloadBlocks,\n}: {\n fields: FlattenedField[]\n payloadBlocks: PayloadRequest['payload']['blocks']\n}): Set<string> | undefined =>\n collectPossibleRelationshipCollectionSlugs({\n fields,\n payloadBlocks,\n visitedBlockSlugs: new Set(),\n })\n\nconst collectPossibleRelationshipCollectionSlugs = ({\n fields,\n payloadBlocks,\n visitedBlockSlugs,\n}: {\n fields: FlattenedField[]\n payloadBlocks: PayloadRequest['payload']['blocks']\n visitedBlockSlugs: Set<string>\n}): Set<string> | undefined => {\n const collectionSlugs = new Set<string>()\n\n for (const field of fields) {\n if (fieldIsVirtual(field)) {\n continue\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n for (const relationTo of Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]) {\n collectionSlugs.add(relationTo)\n }\n\n continue\n }\n\n if (field.type === 'richText') {\n return undefined\n }\n\n if (field.type === 'array' || field.type === 'group' || field.type === 'tab') {\n const nestedCollectionSlugs = collectPossibleRelationshipCollectionSlugs({\n fields: field.flattenedFields,\n payloadBlocks,\n visitedBlockSlugs,\n })\n\n if (!nestedCollectionSlugs) {\n return undefined\n }\n\n for (const collectionSlug of nestedCollectionSlugs) {\n collectionSlugs.add(collectionSlug)\n }\n\n continue\n }\n\n if (field.type !== 'blocks') {\n continue\n }\n\n for (const blockReference of field.blocks) {\n const block =\n typeof blockReference === 'string' ? payloadBlocks[blockReference] : blockReference\n\n if (!block) {\n return undefined\n }\n\n if (visitedBlockSlugs.has(block.slug)) {\n continue\n }\n\n visitedBlockSlugs.add(block.slug)\n\n const nestedCollectionSlugs = collectPossibleRelationshipCollectionSlugs({\n fields: block.flattenedFields,\n payloadBlocks,\n visitedBlockSlugs,\n })\n\n if (!nestedCollectionSlugs) {\n return undefined\n }\n\n for (const collectionSlug of nestedCollectionSlugs) {\n collectionSlugs.add(collectionSlug)\n }\n }\n }\n\n return collectionSlugs\n}\n\n/** Returns whether configured relationship or upload fields contain any stored value. */\nexport const hasConfiguredRelationshipValue = ({\n data,\n dataShape,\n fields,\n payloadBlocks,\n}: {\n data: unknown\n dataShape: BranchCreatedReferenceArgs['dataShape']\n fields: FlattenedField[]\n payloadBlocks: PayloadRequest['payload']['blocks']\n}): boolean =>\n hasConfiguredRelationshipValueInFields({\n data,\n dataShape,\n fields,\n parentIsLocalized: false,\n payloadBlocks,\n })\n\nconst hasConfiguredRelationshipValueInFields = ({\n data,\n dataShape,\n fields,\n parentIsLocalized,\n payloadBlocks,\n}: {\n data: unknown\n dataShape: BranchCreatedReferenceArgs['dataShape']\n fields: FlattenedField[]\n parentIsLocalized: boolean\n payloadBlocks: PayloadRequest['payload']['blocks']\n}): boolean => {\n if (Array.isArray(data)) {\n return data.some((entry) =>\n hasConfiguredRelationshipValueInFields({\n data: entry,\n dataShape,\n fields,\n parentIsLocalized,\n payloadBlocks,\n }),\n )\n }\n\n if (!data || typeof data !== 'object') {\n return false\n }\n\n const record = data as Record<string, unknown>\n\n for (const field of fields) {\n if (fieldIsVirtual(field)) {\n continue\n }\n\n const fieldValues = getFieldValues({ dataShape, field, parentIsLocalized, record })\n const nestedParentIsLocalized =\n parentIsLocalized || ('localized' in field && Boolean(field.localized))\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (\n fieldValues.some((value) =>\n nestedValueMatches({\n matches: (nestedValue) =>\n nestedValue !== undefined && nestedValue !== null && nestedValue !== '',\n value,\n }),\n )\n ) {\n return true\n }\n\n continue\n }\n\n if (field.type === 'richText') {\n if (fieldValues.some((value) => value !== undefined && value !== null)) {\n return true\n }\n\n continue\n }\n\n if (field.type === 'array' || field.type === 'group' || field.type === 'tab') {\n if (\n fieldValues.some((value) =>\n hasConfiguredRelationshipValueInFields({\n data: value,\n dataShape,\n fields: field.flattenedFields,\n parentIsLocalized: nestedParentIsLocalized,\n payloadBlocks,\n }),\n )\n ) {\n return true\n }\n\n continue\n }\n\n if (field.type !== 'blocks') {\n continue\n }\n\n if (\n fieldValues.some((value) =>\n nestedValueMatches({\n matches: (row) => {\n if (!row || typeof row !== 'object') {\n return false\n }\n\n const rowRecord = row as Record<string, unknown>\n const block = resolveBlock({ blockType: rowRecord.blockType, field, payloadBlocks })\n\n return block\n ? hasConfiguredRelationshipValueInFields({\n data: rowRecord,\n dataShape,\n fields: block.flattenedFields,\n parentIsLocalized: nestedParentIsLocalized,\n payloadBlocks,\n })\n : true\n },\n value,\n }),\n )\n ) {\n return true\n }\n }\n\n return false\n}\n\ntype ReferenceFieldScanArgs = {\n parentIsLocalized?: boolean\n} & BranchCreatedReferenceArgs\n\ntype RichTextSubFieldAdapter = {\n editorConfig?: {\n features?: {\n getSubFields?: Map<\n string,\n (args: { node: Record<string, unknown>; req: PayloadRequest }) => Field[] | null\n >\n getSubFieldsData?: Map<\n string,\n (args: {\n node: Record<string, unknown>\n req: PayloadRequest\n }) => null | Record<string, unknown>\n >\n }\n }\n}\n\nconst hasReferenceInFields = ({\n data,\n dataShape,\n fields,\n parentIsLocalized = false,\n payloadBlocks,\n req,\n target,\n}: ReferenceFieldScanArgs): boolean => {\n if (Array.isArray(data)) {\n return data.some((entry) =>\n hasReferenceInFields({\n data: entry,\n dataShape,\n fields,\n parentIsLocalized,\n payloadBlocks,\n req,\n target,\n }),\n )\n }\n\n if (!data || typeof data !== 'object') {\n return false\n }\n\n const record = data as Record<string, unknown>\n\n for (const field of fields) {\n if (fieldIsVirtual(field)) {\n continue\n }\n\n const fieldValues = getFieldValues({ dataShape, field, parentIsLocalized, record })\n const nestedParentIsLocalized =\n parentIsLocalized || ('localized' in field && Boolean(field.localized))\n\n if (field.type === 'relationship' || field.type === 'upload') {\n const isPolymorphic = Array.isArray(field.relationTo)\n const relationTargets = isPolymorphic ? field.relationTo : [field.relationTo]\n\n if (\n relationTargets.includes(target.collectionSlug as never) &&\n fieldValues.some((value) =>\n nestedValueMatches({\n matches: (nestedValue) =>\n isRelationshipReference({ isPolymorphic, target, value: nestedValue }),\n value,\n }),\n )\n ) {\n return true\n }\n\n continue\n }\n\n if (field.type === 'richText') {\n if (\n fieldValues.some((value) =>\n hasRichTextReferenceValue({\n dataShape,\n editor:\n typeof field.editor === 'function'\n ? undefined\n : (field.editor as RichTextSubFieldAdapter | undefined),\n parentIsLocalized: nestedParentIsLocalized,\n payloadBlocks,\n req,\n target,\n value,\n }),\n )\n ) {\n return true\n }\n\n continue\n }\n\n if (field.type === 'array' || field.type === 'group' || field.type === 'tab') {\n if (\n fieldValues.some((value) =>\n hasReferenceInFields({\n data: value,\n dataShape,\n fields: field.flattenedFields,\n parentIsLocalized: nestedParentIsLocalized,\n payloadBlocks,\n req,\n target,\n }),\n )\n ) {\n return true\n }\n\n continue\n }\n\n if (field.type === 'blocks') {\n if (\n fieldValues.some((value) =>\n nestedValueMatches({\n matches: (row) => {\n if (!row || typeof row !== 'object') {\n return false\n }\n\n const rowRecord = row as Record<string, unknown>\n const block = resolveBlock({ blockType: rowRecord.blockType, field, payloadBlocks })\n\n return block\n ? hasReferenceInFields({\n data: rowRecord,\n dataShape,\n fields: block.flattenedFields,\n parentIsLocalized: nestedParentIsLocalized,\n payloadBlocks,\n req,\n target,\n })\n : false\n },\n value,\n }),\n )\n ) {\n return true\n }\n }\n }\n\n return false\n}\n\nconst getFieldValues = ({\n dataShape,\n field,\n parentIsLocalized,\n record,\n}: {\n dataShape: BranchCreatedReferenceArgs['dataShape']\n field: FlattenedField\n parentIsLocalized: boolean\n record: Record<string, unknown>\n}): unknown[] => {\n const value = record[field.name]\n const shouldReadLocaleMap =\n dataShape === 'withLocales' && fieldShouldBeLocalized({ field, parentIsLocalized })\n\n if (!shouldReadLocaleMap) {\n return [value]\n }\n\n return value && typeof value === 'object' && !Array.isArray(value) ? Object.values(value) : []\n}\n\nconst nestedValueMatches = ({\n matches,\n value,\n}: {\n matches: (value: unknown) => boolean\n value: unknown\n}): boolean =>\n Array.isArray(value)\n ? value.some((entry) => nestedValueMatches({ matches, value: entry }))\n : matches(value)\n\nconst resolveBlock = ({\n blockType,\n field,\n payloadBlocks,\n}: {\n blockType: unknown\n field: Extract<FlattenedField, { type: 'blocks' }>\n payloadBlocks: PayloadRequest['payload']['blocks']\n}) => {\n if (typeof blockType !== 'string') {\n return undefined\n }\n\n const blockReference = field.blocks.find((block) =>\n typeof block === 'string' ? block === blockType : block.slug === blockType,\n )\n\n return typeof blockReference === 'string' ? payloadBlocks[blockReference] : blockReference\n}\n\nconst hasRichTextReferenceValue = ({\n dataShape,\n editor,\n parentIsLocalized,\n payloadBlocks,\n req,\n target,\n value,\n}: {\n dataShape: BranchCreatedReferenceArgs['dataShape']\n editor?: RichTextSubFieldAdapter\n parentIsLocalized: boolean\n payloadBlocks: PayloadRequest['payload']['blocks']\n req: PayloadRequest\n target: BranchCreatedTarget\n value: unknown\n}): boolean => {\n const features = editor?.editorConfig?.features\n\n if (!features) {\n return containsSerializedReference({ target, value })\n }\n\n if (Array.isArray(value)) {\n return value.some((entry) =>\n hasRichTextReferenceValue({\n dataShape,\n editor,\n parentIsLocalized,\n payloadBlocks,\n req,\n target,\n value: entry,\n }),\n )\n }\n\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const node = value as Record<string, unknown>\n const nodeType = node.type\n\n if (\n (nodeType === 'relationship' || nodeType === 'upload') &&\n node.relationTo === target.collectionSlug &&\n relationshipIDEquals({ targetID: target.docID, value: node.value })\n ) {\n return true\n }\n\n if (typeof nodeType === 'string') {\n const getSubFields = features?.getSubFields?.get(nodeType)\n const getSubFieldsData = features?.getSubFieldsData?.get(nodeType)\n\n if (getSubFields && getSubFieldsData) {\n const subFields = getSubFields({ node, req })\n const subFieldData = getSubFieldsData({ node, req })\n\n if (\n subFields?.length &&\n subFieldData &&\n hasReferenceInFields({\n data: subFieldData,\n dataShape,\n fields: flattenAllFields({ fields: subFields }),\n parentIsLocalized,\n payloadBlocks,\n req,\n target,\n })\n ) {\n return true\n }\n }\n }\n\n return [node.root, node.children].some((nestedValue) =>\n hasRichTextReferenceValue({\n dataShape,\n editor,\n parentIsLocalized,\n payloadBlocks,\n req,\n target,\n value: nestedValue,\n }),\n )\n}\n\nconst deduplicateTargets = (targets: BranchCreatedTarget[]): BranchCreatedTarget[] => {\n const seen = new Set<string>()\n\n return targets.filter(({ collectionSlug, docID }) => {\n const key = `${collectionSlug}:${String(docID)}`\n\n if (seen.has(key)) {\n return false\n }\n\n seen.add(key)\n\n return true\n })\n}\n\nconst combineConditions = (conditions: Where[]): Where =>\n conditions.length === 1 ? conditions[0]! : { and: conditions }\n\nconst buildRelationshipWhere = ({\n pathPrefix,\n relationshipPaths,\n target,\n}: {\n pathPrefix?: string\n relationshipPaths: RelationshipPath[]\n target: BranchCreatedTarget\n}): Where => ({\n or: relationshipPaths.map(({ isPolymorphic, path }) => ({\n [pathPrefix ? `${pathPrefix}.${path}` : path]: {\n equals: isPolymorphic\n ? { relationTo: target.collectionSlug, value: target.docID }\n : target.docID,\n },\n })),\n})\n\nconst hasRecursiveBlocks = ({\n activeBlockSlugs = new Set(),\n fields,\n payloadBlocks,\n}: {\n activeBlockSlugs?: Set<string>\n fields: FlattenedField[]\n payloadBlocks: PayloadRequest['payload']['blocks']\n}): boolean => {\n for (const field of fields) {\n if (fieldIsVirtual(field)) {\n continue\n }\n\n if (field.type === 'array' || field.type === 'group' || field.type === 'tab') {\n if (hasRecursiveBlocks({ activeBlockSlugs, fields: field.flattenedFields, payloadBlocks })) {\n return true\n }\n\n continue\n }\n\n if (field.type !== 'blocks') {\n continue\n }\n\n for (const blockReference of field.blocks) {\n const block =\n typeof blockReference === 'string' ? payloadBlocks[blockReference] : blockReference\n\n if (!block) {\n continue\n }\n\n if (activeBlockSlugs.has(block.slug)) {\n return true\n }\n\n const nestedActiveBlockSlugs = new Set(activeBlockSlugs)\n\n nestedActiveBlockSlugs.add(block.slug)\n\n if (\n hasRecursiveBlocks({\n activeBlockSlugs: nestedActiveBlockSlugs,\n fields: block.flattenedFields,\n payloadBlocks,\n })\n ) {\n return true\n }\n }\n }\n\n return false\n}\n\nconst getRelationshipPaths = ({\n activeBlockSlugs = new Set(),\n fields,\n hasBlockAncestor = false,\n parentIsLocalized = false,\n parentPath = '',\n payloadBlocks,\n targetCollectionSlug,\n}: {\n activeBlockSlugs?: Set<string>\n fields: FlattenedField[]\n hasBlockAncestor?: boolean\n parentIsLocalized?: boolean\n parentPath?: string\n payloadBlocks: PayloadRequest['payload']['blocks']\n targetCollectionSlug: string\n}): RelationshipPath[] => {\n const paths: RelationshipPath[] = []\n\n for (const field of fields) {\n if (fieldIsVirtual(field)) {\n continue\n }\n\n const path = parentPath ? `${parentPath}.${field.name}` : field.name\n const isLocalized = parentIsLocalized || fieldShouldBeLocalized({ field, parentIsLocalized })\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if ('virtual' in field && field.virtual) {\n continue\n }\n\n const relationTargets = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n\n if (relationTargets.includes(targetCollectionSlug as never)) {\n paths.push({\n hasBlockAncestor,\n hasLocalizedAncestor: isLocalized,\n isPolymorphic: Array.isArray(field.relationTo),\n path,\n })\n }\n\n continue\n }\n\n if (field.type === 'array' || field.type === 'group' || field.type === 'tab') {\n paths.push(\n ...getRelationshipPaths({\n activeBlockSlugs,\n fields: field.flattenedFields,\n hasBlockAncestor,\n parentIsLocalized: isLocalized,\n parentPath: path,\n payloadBlocks,\n targetCollectionSlug,\n }),\n )\n continue\n }\n\n if (field.type === 'blocks') {\n for (const blockReference of field.blocks) {\n const block =\n typeof blockReference === 'string' ? payloadBlocks[blockReference] : blockReference\n\n if (!block || activeBlockSlugs.has(block.slug)) {\n continue\n }\n\n const nestedActiveBlockSlugs = new Set(activeBlockSlugs)\n\n nestedActiveBlockSlugs.add(block.slug)\n\n paths.push(\n ...getRelationshipPaths({\n activeBlockSlugs: nestedActiveBlockSlugs,\n fields: block.flattenedFields,\n hasBlockAncestor: true,\n parentIsLocalized: isLocalized,\n parentPath: path,\n payloadBlocks,\n targetCollectionSlug,\n }),\n )\n }\n }\n }\n\n return paths\n}\n\nconst getRichTextPaths = ({\n activeBlockSlugs = new Set(),\n fields,\n parentPath = '',\n payloadBlocks,\n}: {\n activeBlockSlugs?: Set<string>\n fields: FlattenedField[]\n parentPath?: string\n payloadBlocks: PayloadRequest['payload']['blocks']\n}): DataPath[] => {\n const paths: DataPath[] = []\n\n for (const field of fields) {\n if (fieldIsVirtual(field)) {\n continue\n }\n\n const path = parentPath ? `${parentPath}.${field.name}` : field.name\n\n if (field.type === 'richText') {\n paths.push({ path })\n continue\n }\n\n if (field.type === 'array' || field.type === 'group' || field.type === 'tab') {\n paths.push(\n ...getRichTextPaths({\n activeBlockSlugs,\n fields: field.flattenedFields,\n parentPath: path,\n payloadBlocks,\n }),\n )\n continue\n }\n\n if (field.type === 'blocks') {\n for (const blockReference of field.blocks) {\n const block =\n typeof blockReference === 'string' ? payloadBlocks[blockReference] : blockReference\n\n if (!block || activeBlockSlugs.has(block.slug)) {\n continue\n }\n\n const nestedActiveBlockSlugs = new Set(activeBlockSlugs)\n\n nestedActiveBlockSlugs.add(block.slug)\n\n paths.push(\n ...getRichTextPaths({\n activeBlockSlugs: nestedActiveBlockSlugs,\n fields: block.flattenedFields,\n parentPath: path,\n payloadBlocks,\n }),\n )\n }\n }\n }\n\n return [...new Set(paths)]\n}\n\nconst isRelationshipReference = ({\n isPolymorphic,\n target,\n value,\n}: {\n isPolymorphic: boolean\n target: BranchCreatedTarget\n value: unknown\n}): boolean => {\n if (isPolymorphic) {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const relation = value as Record<string, unknown>\n\n return (\n relation.relationTo === target.collectionSlug &&\n relationshipIDEquals({ targetID: target.docID, value: relation.value })\n )\n }\n\n return relationshipIDEquals({ targetID: target.docID, value })\n}\n\nconst relationshipIDEquals = ({\n targetID,\n value,\n}: {\n targetID: number | string\n value: unknown\n}): boolean => {\n const relatedID =\n value && typeof value === 'object' && 'id' in value ? (value as { id: unknown }).id : value\n\n return (\n (typeof relatedID === 'number' || typeof relatedID === 'string') &&\n String(relatedID) === String(targetID)\n )\n}\n\nconst containsSerializedReference = ({\n target,\n value,\n}: {\n target: BranchCreatedTarget\n value: unknown\n}): boolean => {\n if (Array.isArray(value)) {\n return value.some((entry) => containsSerializedReference({ target, value: entry }))\n }\n\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const record = value as Record<string, unknown>\n\n if (record.relationTo === target.collectionSlug) {\n if (relationshipIDEquals({ targetID: target.docID, value: record.value })) {\n return true\n }\n }\n\n return Object.values(record).some((nestedValue) =>\n containsSerializedReference({ target, value: nestedValue }),\n )\n}\n\nconst throwReferenceError = (): never => {\n throw new APIError(\n 'Branch-created content cannot be deleted while a surviving document or version references it.',\n 409,\n )\n}\n"],"names":["APIError","fieldIsVirtual","fieldShouldBeLocalized","flattenAllFields","corePayloadCollectionSlugs","hardExcludedSlugs","branchesCollectionSlug","branchField","MAIN_BRANCH","assertBranchCreatedDocumentsUnreferenced","ignoredGlobalOwnerBranches","ignoredOwnerBranch","ignoredOwnerRowIDs","req","targets","excludedCollectionSlugs","Set","globalOwnerBranches","getGlobalOwnerBranches","docs","payload","db","find","branch","collection","limit","pagination","where","flatMap","doc","branchSlug","slug","target","deduplicateTargets","ownerCollection","config","collections","has","relationshipPaths","getRelationshipPaths","fields","flattenedFields","payloadBlocks","blocks","targetCollectionSlug","collectionSlug","richTextPaths","getRichTextPaths","hasRecursiveBlockReferences","hasRecursiveBlocks","length","ignoredRowIDs","get","liveConditions","branching","branchableCollections","push","not_equals","size","id","not_in","shouldScanEveryDocument","some","hasBlockAncestor","hasLocalizedAncestor","possibleOwners","locale","combineConditions","buildRelationshipWhere","hasBranchCreatedDocumentReference","data","dataShape","throwReferenceError","versions","versionConditions","parent","possibleVersions","findVersions","pathPrefix","version","ownerGlobal","globals","ignoredGlobalBranches","branchableGlobals","add","isBranchableGlobal","shouldScanEveryGlobal","ownerBranches","ownerBranch","ownerConditions","equals","unshift","possibleOwner","findGlobal","undefined","findGlobalVersions","global","hasReferenceInFields","getPossibleRelationshipCollectionSlugs","collectPossibleRelationshipCollectionSlugs","visitedBlockSlugs","collectionSlugs","field","type","relationTo","Array","isArray","nestedCollectionSlugs","blockReference","block","hasConfiguredRelationshipValue","hasConfiguredRelationshipValueInFields","parentIsLocalized","entry","record","fieldValues","getFieldValues","nestedParentIsLocalized","Boolean","localized","value","nestedValueMatches","matches","nestedValue","row","rowRecord","resolveBlock","blockType","isPolymorphic","relationTargets","includes","isRelationshipReference","hasRichTextReferenceValue","editor","name","shouldReadLocaleMap","Object","values","features","editorConfig","containsSerializedReference","node","nodeType","relationshipIDEquals","targetID","docID","getSubFields","getSubFieldsData","subFields","subFieldData","root","children","seen","filter","key","String","conditions","and","or","map","path","activeBlockSlugs","nestedActiveBlockSlugs","parentPath","paths","isLocalized","virtual","relation","relatedID"],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { PayloadRequest } from '../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Refuses a request that names a branch the caller cannot see.
|
|
4
|
-
*
|
|
5
|
-
* This is the one thing a document's own access control cannot express. Collection
|
|
6
|
-
* rules answer "who may read this content"; they are branch-agnostic on purpose, and
|
|
7
|
-
* `req.branch` being in scope means a project can already vary them per branch. What
|
|
8
|
-
* they cannot answer is whether this reader should be looking at a *proposal* rather
|
|
9
|
-
* than production — and that answer is the same for every collection in the project,
|
|
10
|
-
* which is why it belongs here rather than repeated in each of them.
|
|
11
|
-
*
|
|
12
|
-
* Concretely, the canonical public-site rule `read: () => ({ _status: { equals:
|
|
13
|
-
* 'published' } })` is *true* of a branch's copy of a published document, because that
|
|
14
|
-
* copy really is published — on the branch. Without this gate, adding `?branch=x` to a
|
|
15
|
-
* public URL serves unreleased content to anonymous callers.
|
|
16
|
-
*
|
|
17
|
-
* Three properties keep this from becoming a second permission system:
|
|
18
|
-
*
|
|
19
|
-
* - **It only ever narrows.** Branch access is ANDed with document access, so reading a
|
|
20
|
-
* branch never grants a document the caller could not read on `main`.
|
|
21
|
-
* - **The safe default is free.** `payload-branches` read access falls back to
|
|
22
|
-
* `defaultAccess` (an authenticated admin user), so anonymous requests can only ever
|
|
23
|
-
* reach `main` with no configuration at all.
|
|
24
|
-
* - **One query per branched request, none for `main`.** An unbranched request still
|
|
25
|
-
* touches nothing, which is §15's central constraint.
|
|
26
|
-
*
|
|
27
|
-
* Enforced at the HTTP boundary rather than at the database layer, because the request
|
|
28
|
-
* the operations hand to the adapter is narrowed to `branch`, `context`, `payload` and
|
|
29
|
-
* `transactionID` — it has no `user`, so an access check there has nobody to check.
|
|
30
|
-
*/
|
|
31
|
-
export declare const assertBranchReadable: ({ collectionSlug, globalSlug, req, }: {
|
|
32
|
-
collectionSlug?: string;
|
|
33
|
-
globalSlug?: string;
|
|
34
|
-
req: PayloadRequest;
|
|
35
|
-
}) => Promise<void>;
|
|
36
|
-
//# sourceMappingURL=assertBranchReadable.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assertBranchReadable.d.ts","sourceRoot":"","sources":["../../src/branching/assertBranchReadable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAcvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,oBAAoB,yCAI9B;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;CACpB,KAAG,OAAO,CAAC,IAAI,CA2Df,CAAA"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Forbidden } from '../errors/Forbidden.js';
|
|
2
|
-
import { resolveBranch } from './resolveBranch.js';
|
|
3
|
-
import { branchesCollectionSlug, MAIN_BRANCH } from './types.js';
|
|
4
|
-
const checkedKey = '_branchReadableChecked';
|
|
5
|
-
/**
|
|
6
|
-
* Refuses a request that names a branch the caller cannot see.
|
|
7
|
-
*
|
|
8
|
-
* This is the one thing a document's own access control cannot express. Collection
|
|
9
|
-
* rules answer "who may read this content"; they are branch-agnostic on purpose, and
|
|
10
|
-
* `req.branch` being in scope means a project can already vary them per branch. What
|
|
11
|
-
* they cannot answer is whether this reader should be looking at a *proposal* rather
|
|
12
|
-
* than production — and that answer is the same for every collection in the project,
|
|
13
|
-
* which is why it belongs here rather than repeated in each of them.
|
|
14
|
-
*
|
|
15
|
-
* Concretely, the canonical public-site rule `read: () => ({ _status: { equals:
|
|
16
|
-
* 'published' } })` is *true* of a branch's copy of a published document, because that
|
|
17
|
-
* copy really is published — on the branch. Without this gate, adding `?branch=x` to a
|
|
18
|
-
* public URL serves unreleased content to anonymous callers.
|
|
19
|
-
*
|
|
20
|
-
* Three properties keep this from becoming a second permission system:
|
|
21
|
-
*
|
|
22
|
-
* - **It only ever narrows.** Branch access is ANDed with document access, so reading a
|
|
23
|
-
* branch never grants a document the caller could not read on `main`.
|
|
24
|
-
* - **The safe default is free.** `payload-branches` read access falls back to
|
|
25
|
-
* `defaultAccess` (an authenticated admin user), so anonymous requests can only ever
|
|
26
|
-
* reach `main` with no configuration at all.
|
|
27
|
-
* - **One query per branched request, none for `main`.** An unbranched request still
|
|
28
|
-
* touches nothing, which is §15's central constraint.
|
|
29
|
-
*
|
|
30
|
-
* Enforced at the HTTP boundary rather than at the database layer, because the request
|
|
31
|
-
* the operations hand to the adapter is narrowed to `branch`, `context`, `payload` and
|
|
32
|
-
* `transactionID` — it has no `user`, so an access check there has nobody to check.
|
|
33
|
-
*/ export const assertBranchReadable = async ({ collectionSlug, globalSlug, req })=>{
|
|
34
|
-
const branching = req.payload?.config?.branching;
|
|
35
|
-
if (!branching?.enabled) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (collectionSlug && !branching.branchableCollections.has(collectionSlug)) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (globalSlug && !branching.branchableGlobals.has(globalSlug)) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
const branch = resolveBranch(req);
|
|
45
|
-
if (branch === MAIN_BRANCH) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const context = req.context;
|
|
49
|
-
const checked = context?.[checkedKey];
|
|
50
|
-
if (checked?.branch === branch && checked.userCollection === req.user?.collection && checked.userID === req.user?.id) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
// Read through the ordinary operation so `readBranch` access gets its usual
|
|
54
|
-
// treatment — including a `Where` return, which is how "editors see only their own
|
|
55
|
-
// branches" is expressed.
|
|
56
|
-
const { docs } = await req.payload.find({
|
|
57
|
-
collection: branchesCollectionSlug,
|
|
58
|
-
depth: 0,
|
|
59
|
-
limit: 1,
|
|
60
|
-
overrideAccess: false,
|
|
61
|
-
pagination: false,
|
|
62
|
-
req,
|
|
63
|
-
where: {
|
|
64
|
-
slug: {
|
|
65
|
-
equals: branch
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
if (!docs.length) {
|
|
70
|
-
// Unreadable and non-existent are deliberately the same answer: distinguishing
|
|
71
|
-
// them would tell an anonymous caller which branch names exist.
|
|
72
|
-
throw new Forbidden(req.t);
|
|
73
|
-
}
|
|
74
|
-
if (context) {
|
|
75
|
-
context[checkedKey] = {
|
|
76
|
-
branch,
|
|
77
|
-
userCollection: req.user?.collection,
|
|
78
|
-
userID: req.user?.id
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
//# sourceMappingURL=assertBranchReadable.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/branching/assertBranchReadable.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\nimport { Forbidden } from '../errors/Forbidden.js'\nimport { resolveBranch } from './resolveBranch.js'\nimport { branchesCollectionSlug, MAIN_BRANCH } from './types.js'\n\nconst checkedKey = '_branchReadableChecked'\n\ntype BranchReadableCheck = {\n branch: string\n userCollection?: string\n userID?: number | string\n}\n\n/**\n * Refuses a request that names a branch the caller cannot see.\n *\n * This is the one thing a document's own access control cannot express. Collection\n * rules answer \"who may read this content\"; they are branch-agnostic on purpose, and\n * `req.branch` being in scope means a project can already vary them per branch. What\n * they cannot answer is whether this reader should be looking at a *proposal* rather\n * than production — and that answer is the same for every collection in the project,\n * which is why it belongs here rather than repeated in each of them.\n *\n * Concretely, the canonical public-site rule `read: () => ({ _status: { equals:\n * 'published' } })` is *true* of a branch's copy of a published document, because that\n * copy really is published — on the branch. Without this gate, adding `?branch=x` to a\n * public URL serves unreleased content to anonymous callers.\n *\n * Three properties keep this from becoming a second permission system:\n *\n * - **It only ever narrows.** Branch access is ANDed with document access, so reading a\n * branch never grants a document the caller could not read on `main`.\n * - **The safe default is free.** `payload-branches` read access falls back to\n * `defaultAccess` (an authenticated admin user), so anonymous requests can only ever\n * reach `main` with no configuration at all.\n * - **One query per branched request, none for `main`.** An unbranched request still\n * touches nothing, which is §15's central constraint.\n *\n * Enforced at the HTTP boundary rather than at the database layer, because the request\n * the operations hand to the adapter is narrowed to `branch`, `context`, `payload` and\n * `transactionID` — it has no `user`, so an access check there has nobody to check.\n */\nexport const assertBranchReadable = async ({\n collectionSlug,\n globalSlug,\n req,\n}: {\n collectionSlug?: string\n globalSlug?: string\n req: PayloadRequest\n}): Promise<void> => {\n const branching = req.payload?.config?.branching\n\n if (!branching?.enabled) {\n return\n }\n\n if (collectionSlug && !branching.branchableCollections.has(collectionSlug)) {\n return\n }\n\n if (globalSlug && !branching.branchableGlobals.has(globalSlug)) {\n return\n }\n\n const branch = resolveBranch(req)\n\n if (branch === MAIN_BRANCH) {\n return\n }\n\n const context = req.context as Record<string, unknown> | undefined\n\n const checked = context?.[checkedKey] as BranchReadableCheck | undefined\n\n if (\n checked?.branch === branch &&\n checked.userCollection === req.user?.collection &&\n checked.userID === req.user?.id\n ) {\n return\n }\n\n // Read through the ordinary operation so `readBranch` access gets its usual\n // treatment — including a `Where` return, which is how \"editors see only their own\n // branches\" is expressed.\n const { docs } = await req.payload.find({\n collection: branchesCollectionSlug,\n depth: 0,\n limit: 1,\n overrideAccess: false,\n pagination: false,\n req,\n where: { slug: { equals: branch } },\n })\n\n if (!docs.length) {\n // Unreadable and non-existent are deliberately the same answer: distinguishing\n // them would tell an anonymous caller which branch names exist.\n throw new Forbidden(req.t)\n }\n\n if (context) {\n context[checkedKey] = {\n branch,\n userCollection: req.user?.collection,\n userID: req.user?.id,\n } satisfies BranchReadableCheck\n }\n}\n"],"names":["Forbidden","resolveBranch","branchesCollectionSlug","MAIN_BRANCH","checkedKey","assertBranchReadable","collectionSlug","globalSlug","req","branching","payload","config","enabled","branchableCollections","has","branchableGlobals","branch","context","checked","userCollection","user","collection","userID","id","docs","find","depth","limit","overrideAccess","pagination","where","slug","equals","length","t"],"mappings":"AAEA,SAASA,SAAS,QAAQ,yBAAwB;AAClD,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,sBAAsB,EAAEC,WAAW,QAAQ,aAAY;AAEhE,MAAMC,aAAa;AAQnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC,GACD,OAAO,MAAMC,uBAAuB,OAAO,EACzCC,cAAc,EACdC,UAAU,EACVC,GAAG,EAKJ;IACC,MAAMC,YAAYD,IAAIE,OAAO,EAAEC,QAAQF;IAEvC,IAAI,CAACA,WAAWG,SAAS;QACvB;IACF;IAEA,IAAIN,kBAAkB,CAACG,UAAUI,qBAAqB,CAACC,GAAG,CAACR,iBAAiB;QAC1E;IACF;IAEA,IAAIC,cAAc,CAACE,UAAUM,iBAAiB,CAACD,GAAG,CAACP,aAAa;QAC9D;IACF;IAEA,MAAMS,SAASf,cAAcO;IAE7B,IAAIQ,WAAWb,aAAa;QAC1B;IACF;IAEA,MAAMc,UAAUT,IAAIS,OAAO;IAE3B,MAAMC,UAAUD,SAAS,CAACb,WAAW;IAErC,IACEc,SAASF,WAAWA,UACpBE,QAAQC,cAAc,KAAKX,IAAIY,IAAI,EAAEC,cACrCH,QAAQI,MAAM,KAAKd,IAAIY,IAAI,EAAEG,IAC7B;QACA;IACF;IAEA,4EAA4E;IAC5E,mFAAmF;IACnF,0BAA0B;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAMhB,IAAIE,OAAO,CAACe,IAAI,CAAC;QACtCJ,YAAYnB;QACZwB,OAAO;QACPC,OAAO;QACPC,gBAAgB;QAChBC,YAAY;QACZrB;QACAsB,OAAO;YAAEC,MAAM;gBAAEC,QAAQhB;YAAO;QAAE;IACpC;IAEA,IAAI,CAACQ,KAAKS,MAAM,EAAE;QAChB,+EAA+E;QAC/E,gEAAgE;QAChE,MAAM,IAAIjC,UAAUQ,IAAI0B,CAAC;IAC3B;IAEA,IAAIjB,SAAS;QACXA,OAAO,CAACb,WAAW,GAAG;YACpBY;YACAG,gBAAgBX,IAAIY,IAAI,EAAEC;YAC1BC,QAAQd,IAAIY,IAAI,EAAEG;QACpB;IACF;AACF,EAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { PayloadRequest } from '../types/index.js';
|
|
2
|
-
export declare const assertBranchUpdateAccess: ({ branchDoc, req, }: {
|
|
3
|
-
branchDoc: {
|
|
4
|
-
id: number | string;
|
|
5
|
-
};
|
|
6
|
-
req: PayloadRequest;
|
|
7
|
-
}) => Promise<void>;
|
|
8
|
-
//# sourceMappingURL=assertBranchUpdateAccess.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assertBranchUpdateAccess.d.ts","sourceRoot":"","sources":["../../src/branching/assertBranchUpdateAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKvD,eAAO,MAAM,wBAAwB,wBAGlC;IACD,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IAClC,GAAG,EAAE,cAAc,CAAA;CACpB,KAAG,OAAO,CAAC,IAAI,CAIf,CAAA"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { assertBranchAccess } from './assertBranchAccess.js';
|
|
2
|
-
import { branchesCollectionSlug } from './types.js';
|
|
3
|
-
export const assertBranchUpdateAccess = async ({ branchDoc, req })=>{
|
|
4
|
-
const branchesCollection = req.payload.collections[branchesCollectionSlug].config;
|
|
5
|
-
await assertBranchAccess({
|
|
6
|
-
access: branchesCollection.access.update,
|
|
7
|
-
branchDoc,
|
|
8
|
-
req
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=assertBranchUpdateAccess.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/branching/assertBranchUpdateAccess.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\nimport { assertBranchAccess } from './assertBranchAccess.js'\nimport { branchesCollectionSlug } from './types.js'\n\nexport const assertBranchUpdateAccess = async ({\n branchDoc,\n req,\n}: {\n branchDoc: { id: number | string }\n req: PayloadRequest\n}): Promise<void> => {\n const branchesCollection = req.payload.collections[branchesCollectionSlug]!.config\n\n await assertBranchAccess({ access: branchesCollection.access.update, branchDoc, req })\n}\n"],"names":["assertBranchAccess","branchesCollectionSlug","assertBranchUpdateAccess","branchDoc","req","branchesCollection","payload","collections","config","access","update"],"mappings":"AAEA,SAASA,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,sBAAsB,QAAQ,aAAY;AAEnD,OAAO,MAAMC,2BAA2B,OAAO,EAC7CC,SAAS,EACTC,GAAG,EAIJ;IACC,MAAMC,qBAAqBD,IAAIE,OAAO,CAACC,WAAW,CAACN,uBAAuB,CAAEO,MAAM;IAElF,MAAMR,mBAAmB;QAAES,QAAQJ,mBAAmBI,MAAM,CAACC,MAAM;QAAEP;QAAWC;IAAI;AACtF,EAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { PayloadRequest } from '../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Refuses a write when the branch it targets is merging or has been closed.
|
|
4
|
-
*
|
|
5
|
-
* Closing is the terminal state a merge can put a branch into, and it has to be
|
|
6
|
-
* enforced rather than merely displayed: the switcher already hides closed
|
|
7
|
-
* branches, but a `branch=<slug>` query param reaches the write path regardless,
|
|
8
|
-
* and so does a client that was already on the branch when it closed. Without this
|
|
9
|
-
* a closed branch keeps accepting edits nobody can navigate to.
|
|
10
|
-
*
|
|
11
|
-
* Memoized per request, keyed by branch, so a write touching many documents costs
|
|
12
|
-
* one lookup rather than one per document.
|
|
13
|
-
*/
|
|
14
|
-
export declare const assertBranchWritable: ({ branch, req, }: {
|
|
15
|
-
branch: string;
|
|
16
|
-
req: PayloadRequest;
|
|
17
|
-
}) => Promise<void>;
|
|
18
|
-
//# sourceMappingURL=assertBranchWritable.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assertBranchWritable.d.ts","sourceRoot":"","sources":["../../src/branching/assertBranchWritable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAQvD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,qBAG9B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,cAAc,CAAA;CACpB,KAAG,OAAO,CAAC,IAAI,CAiCf,CAAA"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Forbidden } from '../errors/index.js';
|
|
2
|
-
import { loadBranchRow } from './resolveBranch.js';
|
|
3
|
-
import { MAIN_BRANCH } from './types.js';
|
|
4
|
-
const stateKey = '_branchWritable';
|
|
5
|
-
/**
|
|
6
|
-
* Refuses a write when the branch it targets is merging or has been closed.
|
|
7
|
-
*
|
|
8
|
-
* Closing is the terminal state a merge can put a branch into, and it has to be
|
|
9
|
-
* enforced rather than merely displayed: the switcher already hides closed
|
|
10
|
-
* branches, but a `branch=<slug>` query param reaches the write path regardless,
|
|
11
|
-
* and so does a client that was already on the branch when it closed. Without this
|
|
12
|
-
* a closed branch keeps accepting edits nobody can navigate to.
|
|
13
|
-
*
|
|
14
|
-
* Memoized per request, keyed by branch, so a write touching many documents costs
|
|
15
|
-
* one lookup rather than one per document.
|
|
16
|
-
*/ export const assertBranchWritable = async ({ branch, req })=>{
|
|
17
|
-
if (branch === MAIN_BRANCH) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
const context = req.context;
|
|
21
|
-
const cache = context?.[stateKey] ?? new Map();
|
|
22
|
-
if (context && !context[stateKey]) {
|
|
23
|
-
context[stateKey] = cache;
|
|
24
|
-
}
|
|
25
|
-
if (cache.has(branch)) {
|
|
26
|
-
if (!cache.get(branch)) {
|
|
27
|
-
throw new Forbidden(req.t);
|
|
28
|
-
}
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const row = await loadBranchRow({
|
|
32
|
-
branch,
|
|
33
|
-
req
|
|
34
|
-
});
|
|
35
|
-
// A branch that does not exist is left alone: creating rows against an unknown
|
|
36
|
-
// slug is a separate problem, and failing here would make this the place that
|
|
37
|
-
// decides branch existence.
|
|
38
|
-
const status = row?.status;
|
|
39
|
-
const isWritable = status !== 'closed' && status !== 'merging';
|
|
40
|
-
cache.set(branch, isWritable);
|
|
41
|
-
if (!isWritable) {
|
|
42
|
-
throw new Forbidden(req.t);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
//# sourceMappingURL=assertBranchWritable.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/branching/assertBranchWritable.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\nimport { Forbidden } from '../errors/index.js'\nimport { loadBranchRow } from './resolveBranch.js'\nimport { MAIN_BRANCH } from './types.js'\n\nconst stateKey = '_branchWritable'\n\n/**\n * Refuses a write when the branch it targets is merging or has been closed.\n *\n * Closing is the terminal state a merge can put a branch into, and it has to be\n * enforced rather than merely displayed: the switcher already hides closed\n * branches, but a `branch=<slug>` query param reaches the write path regardless,\n * and so does a client that was already on the branch when it closed. Without this\n * a closed branch keeps accepting edits nobody can navigate to.\n *\n * Memoized per request, keyed by branch, so a write touching many documents costs\n * one lookup rather than one per document.\n */\nexport const assertBranchWritable = async ({\n branch,\n req,\n}: {\n branch: string\n req: PayloadRequest\n}): Promise<void> => {\n if (branch === MAIN_BRANCH) {\n return\n }\n\n const context = req.context as Record<string, unknown> | undefined\n const cache = (context?.[stateKey] as Map<string, boolean> | undefined) ?? new Map()\n\n if (context && !context[stateKey]) {\n context[stateKey] = cache\n }\n\n if (cache.has(branch)) {\n if (!cache.get(branch)) {\n throw new Forbidden(req.t)\n }\n\n return\n }\n\n const row = await loadBranchRow({ branch, req })\n\n // A branch that does not exist is left alone: creating rows against an unknown\n // slug is a separate problem, and failing here would make this the place that\n // decides branch existence.\n const status = (row as { status?: string } | null)?.status\n const isWritable = status !== 'closed' && status !== 'merging'\n\n cache.set(branch, isWritable)\n\n if (!isWritable) {\n throw new Forbidden(req.t)\n }\n}\n"],"names":["Forbidden","loadBranchRow","MAIN_BRANCH","stateKey","assertBranchWritable","branch","req","context","cache","Map","has","get","t","row","status","isWritable","set"],"mappings":"AAEA,SAASA,SAAS,QAAQ,qBAAoB;AAC9C,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,WAAW,QAAQ,aAAY;AAExC,MAAMC,WAAW;AAEjB;;;;;;;;;;;CAWC,GACD,OAAO,MAAMC,uBAAuB,OAAO,EACzCC,MAAM,EACNC,GAAG,EAIJ;IACC,IAAID,WAAWH,aAAa;QAC1B;IACF;IAEA,MAAMK,UAAUD,IAAIC,OAAO;IAC3B,MAAMC,QAAQ,AAACD,SAAS,CAACJ,SAAS,IAAyC,IAAIM;IAE/E,IAAIF,WAAW,CAACA,OAAO,CAACJ,SAAS,EAAE;QACjCI,OAAO,CAACJ,SAAS,GAAGK;IACtB;IAEA,IAAIA,MAAME,GAAG,CAACL,SAAS;QACrB,IAAI,CAACG,MAAMG,GAAG,CAACN,SAAS;YACtB,MAAM,IAAIL,UAAUM,IAAIM,CAAC;QAC3B;QAEA;IACF;IAEA,MAAMC,MAAM,MAAMZ,cAAc;QAAEI;QAAQC;IAAI;IAE9C,+EAA+E;IAC/E,8EAA8E;IAC9E,4BAA4B;IAC5B,MAAMQ,SAAUD,KAAoCC;IACpD,MAAMC,aAAaD,WAAW,YAAYA,WAAW;IAErDN,MAAMQ,GAAG,CAACX,QAAQU;IAElB,IAAI,CAACA,YAAY;QACf,MAAM,IAAIf,UAAUM,IAAIM,CAAC;IAC3B;AACF,EAAC"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { PayloadRequest, Where } from '../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Rewrites `id` constraints on a collection read.
|
|
4
|
-
*
|
|
5
|
-
* Runs only in branch context; on main the query is untouched.
|
|
6
|
-
*/
|
|
7
|
-
export declare const rewriteBranchIDs: (where: undefined | Where) => undefined | Where;
|
|
8
|
-
/**
|
|
9
|
-
* Rewrites `parent` constraints on a version read.
|
|
10
|
-
*
|
|
11
|
-
* A branch version hangs off the shadow row, so its `parent` is that row's primary
|
|
12
|
-
* key while the document it belongs to is in `_branchParent`. Asking for the
|
|
13
|
-
* history of a document has to match both that and main's own versions, whose
|
|
14
|
-
* `parent` is already the canonical ID.
|
|
15
|
-
*/
|
|
16
|
-
export declare const rewriteBranchVersionParents: (where: undefined | Where) => undefined | Where;
|
|
17
|
-
/**
|
|
18
|
-
* Restores canonical IDs on documents read from a branch.
|
|
19
|
-
*
|
|
20
|
-
* Shadow rows surface their own primary key, which no API consumer knows about.
|
|
21
|
-
* `_branchDocID` holds the canonical ID for forked rows and is null for
|
|
22
|
-
* branch-created rows, whose own ID is already canonical.
|
|
23
|
-
*/
|
|
24
|
-
export declare const projectBranchIDs: <T extends Record<string, any>>(docs: T[]) => T[];
|
|
25
|
-
/**
|
|
26
|
-
* Guarded entry point for adapters.
|
|
27
|
-
*
|
|
28
|
-
* Skipped entirely when the caller opted out with `branch: false`. Internal
|
|
29
|
-
* reads made by the fork and write-target resolution address rows by their real
|
|
30
|
-
* primary key and would be corrupted by having canonical IDs projected over it.
|
|
31
|
-
*/
|
|
32
|
-
export declare const applyBranchIDProjection: ({ branch, collectionSlug, docs, req, }: {
|
|
33
|
-
branch?: false | string;
|
|
34
|
-
collectionSlug: string;
|
|
35
|
-
docs: Record<string, unknown>[];
|
|
36
|
-
req?: Partial<PayloadRequest>;
|
|
37
|
-
}) => void;
|
|
38
|
-
//# sourceMappingURL=branchIDs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"branchIDs.d.ts","sourceRoot":"","sources":["../../src/branching/branchIDs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAc,MAAM,mBAAmB,CAAA;AAiE1E;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,UAAW,SAAS,GAAG,KAAK,KAAG,SAAS,GAAG,KACS,CAAA;AAEjF;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,UAAW,SAAS,GAAG,KAAK,KAAG,SAAS,GAAG,KAQ/E,CAAA;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAG,CAAC,EAU5E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,2CAKjC;IACD,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAC9B,KAAG,IAMH,CAAA"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { extractRelationshipID } from '../utilities/extractRelationshipID.js';
|
|
2
|
-
import { isBranchProjectionActive } from './branchSelect.js';
|
|
3
|
-
import { branchDocIDField, branchParentField } from './types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Rewrites constraints on an identity key so they resolve against canonical
|
|
6
|
-
* document identity rather than raw primary keys.
|
|
7
|
-
*
|
|
8
|
-
* A branch row's primary key is not the document's canonical ID — that lives in a
|
|
9
|
-
* companion column, which main rows leave null to mean "self". So a constraint on
|
|
10
|
-
* the identity key has to match either.
|
|
11
|
-
*/ const rewriteIdentity = ({ canonicalField, identityKey, matchRawIdentity, where })=>{
|
|
12
|
-
if (!where || typeof where !== 'object') {
|
|
13
|
-
return where;
|
|
14
|
-
}
|
|
15
|
-
const result = {};
|
|
16
|
-
for (const [key, value] of Object.entries(where)){
|
|
17
|
-
if ((key === 'and' || key === 'or') && Array.isArray(value)) {
|
|
18
|
-
result[key] = value.map((clause)=>rewriteIdentity({
|
|
19
|
-
canonicalField,
|
|
20
|
-
identityKey,
|
|
21
|
-
matchRawIdentity,
|
|
22
|
-
where: clause
|
|
23
|
-
}));
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
if (key === identityKey) {
|
|
27
|
-
const constraint = value;
|
|
28
|
-
result.or = [
|
|
29
|
-
...result.or ?? [],
|
|
30
|
-
{
|
|
31
|
-
[canonicalField]: constraint
|
|
32
|
-
},
|
|
33
|
-
matchRawIdentity ? {
|
|
34
|
-
[identityKey]: constraint
|
|
35
|
-
} : {
|
|
36
|
-
and: [
|
|
37
|
-
{
|
|
38
|
-
[canonicalField]: {
|
|
39
|
-
exists: false
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
[identityKey]: constraint
|
|
44
|
-
}
|
|
45
|
-
]
|
|
46
|
-
}
|
|
47
|
-
];
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
result[key] = value;
|
|
51
|
-
}
|
|
52
|
-
return result;
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Rewrites `id` constraints on a collection read.
|
|
56
|
-
*
|
|
57
|
-
* Runs only in branch context; on main the query is untouched.
|
|
58
|
-
*/ export const rewriteBranchIDs = (where)=>rewriteIdentity({
|
|
59
|
-
canonicalField: branchDocIDField,
|
|
60
|
-
identityKey: 'id',
|
|
61
|
-
where
|
|
62
|
-
});
|
|
63
|
-
/**
|
|
64
|
-
* Rewrites `parent` constraints on a version read.
|
|
65
|
-
*
|
|
66
|
-
* A branch version hangs off the shadow row, so its `parent` is that row's primary
|
|
67
|
-
* key while the document it belongs to is in `_branchParent`. Asking for the
|
|
68
|
-
* history of a document has to match both that and main's own versions, whose
|
|
69
|
-
* `parent` is already the canonical ID.
|
|
70
|
-
*/ export const rewriteBranchVersionParents = (where)=>rewriteIdentity({
|
|
71
|
-
canonicalField: branchParentField,
|
|
72
|
-
identityKey: 'parent',
|
|
73
|
-
// Internal reads resolve the branch's shadow row first and then ask for its
|
|
74
|
-
// versions by that row's primary key, so `parent` has to match raw as well.
|
|
75
|
-
matchRawIdentity: true,
|
|
76
|
-
where
|
|
77
|
-
});
|
|
78
|
-
/**
|
|
79
|
-
* Restores canonical IDs on documents read from a branch.
|
|
80
|
-
*
|
|
81
|
-
* Shadow rows surface their own primary key, which no API consumer knows about.
|
|
82
|
-
* `_branchDocID` holds the canonical ID for forked rows and is null for
|
|
83
|
-
* branch-created rows, whose own ID is already canonical.
|
|
84
|
-
*/ export const projectBranchIDs = (docs)=>{
|
|
85
|
-
for (const doc of docs){
|
|
86
|
-
const canonical = doc?.[branchDocIDField];
|
|
87
|
-
if (canonical !== undefined && canonical !== null) {
|
|
88
|
-
;
|
|
89
|
-
doc.id = extractRelationshipID({
|
|
90
|
-
relationship: canonical
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return docs;
|
|
95
|
-
};
|
|
96
|
-
/**
|
|
97
|
-
* Guarded entry point for adapters.
|
|
98
|
-
*
|
|
99
|
-
* Skipped entirely when the caller opted out with `branch: false`. Internal
|
|
100
|
-
* reads made by the fork and write-target resolution address rows by their real
|
|
101
|
-
* primary key and would be corrupted by having canonical IDs projected over it.
|
|
102
|
-
*/ export const applyBranchIDProjection = ({ branch, collectionSlug, docs, req })=>{
|
|
103
|
-
if (!docs?.length || !isBranchProjectionActive({
|
|
104
|
-
branch,
|
|
105
|
-
collectionSlug,
|
|
106
|
-
req
|
|
107
|
-
})) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
projectBranchIDs(docs);
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
//# sourceMappingURL=branchIDs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/branching/branchIDs.ts"],"sourcesContent":["import type { PayloadRequest, Where, WhereField } from '../types/index.js'\n\nimport { extractRelationshipID } from '../utilities/extractRelationshipID.js'\nimport { isBranchProjectionActive } from './branchSelect.js'\nimport { branchDocIDField, branchParentField } from './types.js'\n\n/**\n * Rewrites constraints on an identity key so they resolve against canonical\n * document identity rather than raw primary keys.\n *\n * A branch row's primary key is not the document's canonical ID — that lives in a\n * companion column, which main rows leave null to mean \"self\". So a constraint on\n * the identity key has to match either.\n */\nconst rewriteIdentity = ({\n canonicalField,\n identityKey,\n matchRawIdentity,\n where,\n}: {\n canonicalField: string\n identityKey: string\n /**\n * Also match the identity key directly, without requiring the canonical column\n * to be null. Needed where callers address a row by its real primary key as well\n * as by canonical ID; not wanted for collection reads, where the visibility\n * predicate is what chooses between the branch's row and main's.\n */\n matchRawIdentity?: boolean\n where: undefined | Where\n}): undefined | Where => {\n if (!where || typeof where !== 'object') {\n return where\n }\n\n const result: Where = {}\n\n for (const [key, value] of Object.entries(where)) {\n if ((key === 'and' || key === 'or') && Array.isArray(value)) {\n result[key] = value.map((clause) =>\n rewriteIdentity({ canonicalField, identityKey, matchRawIdentity, where: clause }),\n ) as Where[]\n continue\n }\n\n if (key === identityKey) {\n const constraint = value as WhereField\n\n result.or = [\n ...((result.or as Where[]) ?? []),\n { [canonicalField]: constraint },\n matchRawIdentity\n ? { [identityKey]: constraint }\n : { and: [{ [canonicalField]: { exists: false } }, { [identityKey]: constraint }] },\n ]\n\n continue\n }\n\n result[key] = value as WhereField\n }\n\n return result\n}\n\n/**\n * Rewrites `id` constraints on a collection read.\n *\n * Runs only in branch context; on main the query is untouched.\n */\nexport const rewriteBranchIDs = (where: undefined | Where): undefined | Where =>\n rewriteIdentity({ canonicalField: branchDocIDField, identityKey: 'id', where })\n\n/**\n * Rewrites `parent` constraints on a version read.\n *\n * A branch version hangs off the shadow row, so its `parent` is that row's primary\n * key while the document it belongs to is in `_branchParent`. Asking for the\n * history of a document has to match both that and main's own versions, whose\n * `parent` is already the canonical ID.\n */\nexport const rewriteBranchVersionParents = (where: undefined | Where): undefined | Where =>\n rewriteIdentity({\n canonicalField: branchParentField,\n identityKey: 'parent',\n // Internal reads resolve the branch's shadow row first and then ask for its\n // versions by that row's primary key, so `parent` has to match raw as well.\n matchRawIdentity: true,\n where,\n })\n\n/**\n * Restores canonical IDs on documents read from a branch.\n *\n * Shadow rows surface their own primary key, which no API consumer knows about.\n * `_branchDocID` holds the canonical ID for forked rows and is null for\n * branch-created rows, whose own ID is already canonical.\n */\nexport const projectBranchIDs = <T extends Record<string, any>>(docs: T[]): T[] => {\n for (const doc of docs) {\n const canonical = doc?.[branchDocIDField]\n\n if (canonical !== undefined && canonical !== null) {\n ;(doc as Record<string, unknown>).id = extractRelationshipID({ relationship: canonical })\n }\n }\n\n return docs\n}\n\n/**\n * Guarded entry point for adapters.\n *\n * Skipped entirely when the caller opted out with `branch: false`. Internal\n * reads made by the fork and write-target resolution address rows by their real\n * primary key and would be corrupted by having canonical IDs projected over it.\n */\nexport const applyBranchIDProjection = ({\n branch,\n collectionSlug,\n docs,\n req,\n}: {\n branch?: false | string\n collectionSlug: string\n docs: Record<string, unknown>[]\n req?: Partial<PayloadRequest>\n}): void => {\n if (!docs?.length || !isBranchProjectionActive({ branch, collectionSlug, req })) {\n return\n }\n\n projectBranchIDs(docs)\n}\n"],"names":["extractRelationshipID","isBranchProjectionActive","branchDocIDField","branchParentField","rewriteIdentity","canonicalField","identityKey","matchRawIdentity","where","result","key","value","Object","entries","Array","isArray","map","clause","constraint","or","and","exists","rewriteBranchIDs","rewriteBranchVersionParents","projectBranchIDs","docs","doc","canonical","undefined","id","relationship","applyBranchIDProjection","branch","collectionSlug","req","length"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,wCAAuC;AAC7E,SAASC,wBAAwB,QAAQ,oBAAmB;AAC5D,SAASC,gBAAgB,EAAEC,iBAAiB,QAAQ,aAAY;AAEhE;;;;;;;CAOC,GACD,MAAMC,kBAAkB,CAAC,EACvBC,cAAc,EACdC,WAAW,EACXC,gBAAgB,EAChBC,KAAK,EAYN;IACC,IAAI,CAACA,SAAS,OAAOA,UAAU,UAAU;QACvC,OAAOA;IACT;IAEA,MAAMC,SAAgB,CAAC;IAEvB,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACL,OAAQ;QAChD,IAAI,AAACE,CAAAA,QAAQ,SAASA,QAAQ,IAAG,KAAMI,MAAMC,OAAO,CAACJ,QAAQ;YAC3DF,MAAM,CAACC,IAAI,GAAGC,MAAMK,GAAG,CAAC,CAACC,SACvBb,gBAAgB;oBAAEC;oBAAgBC;oBAAaC;oBAAkBC,OAAOS;gBAAO;YAEjF;QACF;QAEA,IAAIP,QAAQJ,aAAa;YACvB,MAAMY,aAAaP;YAEnBF,OAAOU,EAAE,GAAG;mBACN,AAACV,OAAOU,EAAE,IAAgB,EAAE;gBAChC;oBAAE,CAACd,eAAe,EAAEa;gBAAW;gBAC/BX,mBACI;oBAAE,CAACD,YAAY,EAAEY;gBAAW,IAC5B;oBAAEE,KAAK;wBAAC;4BAAE,CAACf,eAAe,EAAE;gCAAEgB,QAAQ;4BAAM;wBAAE;wBAAG;4BAAE,CAACf,YAAY,EAAEY;wBAAW;qBAAE;gBAAC;aACrF;YAED;QACF;QAEAT,MAAM,CAACC,IAAI,GAAGC;IAChB;IAEA,OAAOF;AACT;AAEA;;;;CAIC,GACD,OAAO,MAAMa,mBAAmB,CAACd,QAC/BJ,gBAAgB;QAAEC,gBAAgBH;QAAkBI,aAAa;QAAME;IAAM,GAAE;AAEjF;;;;;;;CAOC,GACD,OAAO,MAAMe,8BAA8B,CAACf,QAC1CJ,gBAAgB;QACdC,gBAAgBF;QAChBG,aAAa;QACb,4EAA4E;QAC5E,4EAA4E;QAC5EC,kBAAkB;QAClBC;IACF,GAAE;AAEJ;;;;;;CAMC,GACD,OAAO,MAAMgB,mBAAmB,CAAgCC;IAC9D,KAAK,MAAMC,OAAOD,KAAM;QACtB,MAAME,YAAYD,KAAK,CAACxB,iBAAiB;QAEzC,IAAIyB,cAAcC,aAAaD,cAAc,MAAM;;YAC/CD,IAAgCG,EAAE,GAAG7B,sBAAsB;gBAAE8B,cAAcH;YAAU;QACzF;IACF;IAEA,OAAOF;AACT,EAAC;AAED;;;;;;CAMC,GACD,OAAO,MAAMM,0BAA0B,CAAC,EACtCC,MAAM,EACNC,cAAc,EACdR,IAAI,EACJS,GAAG,EAMJ;IACC,IAAI,CAACT,MAAMU,UAAU,CAAClC,yBAAyB;QAAE+B;QAAQC;QAAgBC;IAAI,IAAI;QAC/E;IACF;IAEAV,iBAAiBC;AACnB,EAAC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { PayloadRequest, SelectType } from '../types/index.js';
|
|
2
|
-
type ActiveArgs = {
|
|
3
|
-
branch?: false | string;
|
|
4
|
-
collectionSlug: string;
|
|
5
|
-
req?: Partial<PayloadRequest>;
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* Whether canonical-ID projection applies to a read.
|
|
9
|
-
*
|
|
10
|
-
* Shared by the projection itself and by the `select` guards below, so the two
|
|
11
|
-
* can never disagree about when a row's ID needs translating — a mismatch there
|
|
12
|
-
* would either leak shadow-row primary keys or strip IDs on main.
|
|
13
|
-
*/
|
|
14
|
-
export declare const isBranchProjectionActive: ({ branch, collectionSlug, req }: ActiveArgs) => boolean;
|
|
15
|
-
type SelectArgs = {
|
|
16
|
-
select?: SelectType;
|
|
17
|
-
} & ActiveArgs;
|
|
18
|
-
/**
|
|
19
|
-
* Keeps `_branchDocID` in a collection read's `select`.
|
|
20
|
-
*
|
|
21
|
-
* An include-mode `select` narrows the row to exactly the fields named, which
|
|
22
|
-
* drops `_branchDocID` — and without it there is nothing for the canonical-ID
|
|
23
|
-
* projection to map from, so the read silently returns shadow-row primary keys
|
|
24
|
-
* instead of document IDs. The admin list view selects only its visible columns,
|
|
25
|
-
* which is how this surfaces: correct IDs over the plain REST API, wrong ones in
|
|
26
|
-
* the list, and an unopenable edit view behind every row.
|
|
27
|
-
*/
|
|
28
|
-
export declare const withBranchIDSelect: (args: SelectArgs) => SelectType | undefined;
|
|
29
|
-
/**
|
|
30
|
-
* Keeps `_branchParent` in a version read's `select`, for the same reason
|
|
31
|
-
* {@link withBranchIDSelect} keeps `_branchDocID` in a collection read's.
|
|
32
|
-
*/
|
|
33
|
-
export declare const withBranchVersionSelect: (args: SelectArgs) => SelectType | undefined;
|
|
34
|
-
/** Keeps `_branch` available while choosing between a branch global and main. */
|
|
35
|
-
export declare const withBranchGlobalSelect: ({ branch, globalSlug, req, select, }: {
|
|
36
|
-
branch?: false | string;
|
|
37
|
-
globalSlug: string;
|
|
38
|
-
req?: Partial<PayloadRequest>;
|
|
39
|
-
select?: SelectType;
|
|
40
|
-
}) => SelectType | undefined;
|
|
41
|
-
export {};
|
|
42
|
-
//# sourceMappingURL=branchSelect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"branchSelect.d.ts","sourceRoot":"","sources":["../../src/branching/branchSelect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAOnE,KAAK,UAAU,GAAG;IAChB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAC9B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,oCAAqC,UAAU,KAAG,OAgBtF,CAAA;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,GAAG,UAAU,CAAA;AAiDd;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,SAAU,UAAU,KAAG,UAAU,GAAG,SACZ,CAAA;AAEvD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,SAAU,UAAU,KAAG,UAAU,GAAG,SAChB,CAAA;AAExD,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,yCAKhC;IACD,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,KAAG,UAAU,GAAG,SAMhB,CAAA"}
|