payload 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ec73d44

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.
Files changed (191) hide show
  1. package/dist/admin/adapters/router.d.ts +1 -1
  2. package/dist/admin/adapters/router.d.ts.map +1 -1
  3. package/dist/admin/adapters/router.js.map +1 -1
  4. package/dist/admin/forms/Diff.d.ts +0 -4
  5. package/dist/admin/forms/Diff.d.ts.map +1 -1
  6. package/dist/admin/forms/Diff.js.map +1 -1
  7. package/dist/admin/getAdminPreferences.js +1 -1
  8. package/dist/admin/getAdminPreferences.js.map +1 -1
  9. package/dist/admin/initAdminContext.js.map +1 -1
  10. package/dist/auth/getFieldsToSign.js.map +1 -1
  11. package/dist/auth/loginWithCookie.js.map +1 -1
  12. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  13. package/dist/auth/operations/resetPassword.js +50 -1
  14. package/dist/auth/operations/resetPassword.js.map +1 -1
  15. package/dist/auth/serverFunctions/cookies.js.map +1 -1
  16. package/dist/auth/serverFunctions/login.js.map +1 -1
  17. package/dist/auth/types.d.ts.map +1 -1
  18. package/dist/auth/types.js.map +1 -1
  19. package/dist/branching/discard.js +1 -1
  20. package/dist/branching/discard.js.map +1 -1
  21. package/dist/branching/merge/prepareMerge.js +1 -1
  22. package/dist/branching/merge/prepareMerge.js.map +1 -1
  23. package/dist/branching/merge/retryFailedCleanups.js.map +1 -1
  24. package/dist/branching/resolveBranchQuery.d.ts.map +1 -1
  25. package/dist/branching/resolveBranchQuery.js +0 -3
  26. package/dist/branching/resolveBranchQuery.js.map +1 -1
  27. package/dist/branching/sanitizeBranchingConfig.d.ts.map +1 -1
  28. package/dist/branching/sanitizeBranchingConfig.js +0 -3
  29. package/dist/branching/sanitizeBranchingConfig.js.map +1 -1
  30. package/dist/branching/schedule/job.d.ts.map +1 -1
  31. package/dist/branching/schedule/job.js +7 -0
  32. package/dist/branching/schedule/job.js.map +1 -1
  33. package/dist/branching/types.d.ts +4 -13
  34. package/dist/branching/types.d.ts.map +1 -1
  35. package/dist/branching/types.js.map +1 -1
  36. package/dist/cli/commands/data/utilities.d.ts +1 -1
  37. package/dist/cli/commands/data/utilities.d.ts.map +1 -1
  38. package/dist/cli/commands/data/utilities.js.map +1 -1
  39. package/dist/cli/defineCLICommand.js +1 -1
  40. package/dist/cli/defineCLICommand.js.map +1 -1
  41. package/dist/collections/config/client.js.map +1 -1
  42. package/dist/collections/config/types.d.ts +4 -1
  43. package/dist/collections/config/types.d.ts.map +1 -1
  44. package/dist/collections/config/types.js.map +1 -1
  45. package/dist/collections/operations/delete.js.map +1 -1
  46. package/dist/collections/operations/deleteByID.js.map +1 -1
  47. package/dist/collections/operations/findByID.js.map +1 -1
  48. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  49. package/dist/collections/operations/findVersionByID.js +11 -0
  50. package/dist/collections/operations/findVersionByID.js.map +1 -1
  51. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  52. package/dist/collections/operations/findVersions.js +11 -0
  53. package/dist/collections/operations/findVersions.js.map +1 -1
  54. package/dist/collections/operations/local/findDistinct.js.map +1 -1
  55. package/dist/collections/operations/renameFile.js +1 -1
  56. package/dist/collections/operations/renameFile.js.map +1 -1
  57. package/dist/collections/operations/update.js.map +1 -1
  58. package/dist/collections/operations/updateByID.js.map +1 -1
  59. package/dist/collections/operations/utilities/update.js +1 -1
  60. package/dist/collections/operations/utilities/update.js.map +1 -1
  61. package/dist/collections/operations/validate.js +4 -4
  62. package/dist/collections/operations/validate.js.map +1 -1
  63. package/dist/config/client.d.ts.map +1 -1
  64. package/dist/config/client.js +1 -0
  65. package/dist/config/client.js.map +1 -1
  66. package/dist/config/defaults.d.ts.map +1 -1
  67. package/dist/config/defaults.js +1 -0
  68. package/dist/config/defaults.js.map +1 -1
  69. package/dist/config/definePlugin.js.map +1 -1
  70. package/dist/config/sanitize.js +2 -2
  71. package/dist/config/sanitize.js.map +1 -1
  72. package/dist/config/types.d.ts +8 -1
  73. package/dist/config/types.d.ts.map +1 -1
  74. package/dist/config/types.js.map +1 -1
  75. package/dist/database/types.d.ts +4 -0
  76. package/dist/database/types.d.ts.map +1 -1
  77. package/dist/database/types.js.map +1 -1
  78. package/dist/exports/build-config.d.ts +9 -0
  79. package/dist/exports/build-config.d.ts.map +1 -0
  80. package/dist/exports/build-config.js +38 -0
  81. package/dist/exports/build-config.js.map +1 -0
  82. package/dist/fields/config/client.js.map +1 -1
  83. package/dist/fields/config/reservedFieldNames.d.ts.map +1 -1
  84. package/dist/fields/config/reservedFieldNames.js.map +1 -1
  85. package/dist/fields/config/types.d.ts.map +1 -1
  86. package/dist/fields/config/types.js.map +1 -1
  87. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  88. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  89. package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts +14 -0
  90. package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts.map +1 -0
  91. package/dist/fields/hooks/beforeChange/flattenValidationData.js +36 -0
  92. package/dist/fields/hooks/beforeChange/flattenValidationData.js.map +1 -0
  93. package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
  94. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  95. package/dist/fields/hooks/beforeChange/promise.js +96 -22
  96. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  97. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
  98. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  99. package/dist/fields/hooks/beforeChange/traverseFields.js +2 -1
  100. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  101. package/dist/fields/validations.d.ts.map +1 -1
  102. package/dist/fields/validations.js +4 -1
  103. package/dist/fields/validations.js.map +1 -1
  104. package/dist/globals/config/types.d.ts +2 -1
  105. package/dist/globals/config/types.d.ts.map +1 -1
  106. package/dist/globals/config/types.js.map +1 -1
  107. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  108. package/dist/globals/operations/findVersionByID.js +7 -0
  109. package/dist/globals/operations/findVersionByID.js.map +1 -1
  110. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  111. package/dist/globals/operations/findVersions.js +5 -0
  112. package/dist/globals/operations/findVersions.js.map +1 -1
  113. package/dist/globals/operations/local/findOne.js.map +1 -1
  114. package/dist/globals/operations/local/update.js.map +1 -1
  115. package/dist/globals/operations/restoreVersion.d.ts +2 -3
  116. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  117. package/dist/globals/operations/restoreVersion.js +24 -20
  118. package/dist/globals/operations/restoreVersion.js.map +1 -1
  119. package/dist/globals/operations/validate.js +1 -1
  120. package/dist/globals/operations/validate.js.map +1 -1
  121. package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -1
  122. package/dist/hierarchy/addHierarchyToCollection.js +32 -21
  123. package/dist/hierarchy/addHierarchyToCollection.js.map +1 -1
  124. package/dist/hierarchy/createFolderField.js.map +1 -1
  125. package/dist/hierarchy/resolveHierarchyCollections.js +9 -3
  126. package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -1
  127. package/dist/hierarchy/utils/computePaths.d.ts.map +1 -1
  128. package/dist/hierarchy/utils/computePaths.js.map +1 -1
  129. package/dist/index.bundled.d.ts +47 -27
  130. package/dist/llm-instructions/getInstructionsCollection.d.ts.map +1 -1
  131. package/dist/llm-instructions/getInstructionsCollection.js +2 -0
  132. package/dist/llm-instructions/getInstructionsCollection.js.map +1 -1
  133. package/dist/preferences/keys.d.ts +3 -9
  134. package/dist/preferences/keys.d.ts.map +1 -1
  135. package/dist/preferences/keys.js +3 -9
  136. package/dist/preferences/keys.js.map +1 -1
  137. package/dist/preferences/types.d.ts +1 -1
  138. package/dist/preferences/types.js.map +1 -1
  139. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +1 -1
  140. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
  141. package/dist/types/index.d.ts +9 -3
  142. package/dist/types/index.d.ts.map +1 -1
  143. package/dist/types/index.js.map +1 -1
  144. package/dist/uploads/fileVersioning/archive.js.map +1 -1
  145. package/dist/uploads/fileVersioning/cloudStorage.js.map +1 -1
  146. package/dist/uploads/fileVersioning/resolveHistoricalFile.js.map +1 -1
  147. package/dist/uploads/formatFilesize.js +1 -1
  148. package/dist/uploads/formatFilesize.js.map +1 -1
  149. package/dist/uploads/generateFileData.d.ts.map +1 -1
  150. package/dist/uploads/generateFileData.js.map +1 -1
  151. package/dist/uploads/getFileContentRequirement.js.map +1 -1
  152. package/dist/uploads/getFileFromUploadInstructions.js.map +1 -1
  153. package/dist/uploads/safeFetch.js.map +1 -1
  154. package/dist/uploads/stagedUpload.js.map +1 -1
  155. package/dist/uploads/transformers/handleDynamicFileRequest.js +11 -2
  156. package/dist/uploads/transformers/handleDynamicFileRequest.js.map +1 -1
  157. package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
  158. package/dist/utilities/addSelectGenericsToGeneretedTypes.js +0 -1
  159. package/dist/utilities/addSelectGenericsToGeneretedTypes.js.map +1 -1
  160. package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
  161. package/dist/utilities/cloneValidationRequest.js.map +1 -1
  162. package/dist/utilities/createPayloadRequest.js.map +1 -1
  163. package/dist/utilities/deepCopyObject.js.map +1 -1
  164. package/dist/utilities/documentMatchingWhereExists.js +1 -1
  165. package/dist/utilities/documentMatchingWhereExists.js.map +1 -1
  166. package/dist/utilities/entityInputSchema/validateEntityData.d.ts.map +1 -1
  167. package/dist/utilities/entityInputSchema/validateEntityData.js.map +1 -1
  168. package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
  169. package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
  170. package/dist/utilities/getEntityPermissions/getEntityPermissions.js +1 -0
  171. package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
  172. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
  173. package/dist/utilities/getVersionsConfig.d.ts +4 -0
  174. package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
  175. package/dist/utilities/getVersionsConfig.js +5 -0
  176. package/dist/utilities/getVersionsConfig.js.map +1 -1
  177. package/dist/utilities/parseParams/index.js.map +1 -1
  178. package/dist/utilities/parseValidationLocale.js.map +1 -1
  179. package/dist/utilities/sanitizePopulateParam.js.map +1 -1
  180. package/dist/utilities/telemetry/conf/index.d.ts +4 -1
  181. package/dist/utilities/telemetry/conf/index.d.ts.map +1 -1
  182. package/dist/utilities/telemetry/conf/index.js.map +1 -1
  183. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -1
  184. package/dist/versions/allLocalesPublicationStatus.js.map +1 -1
  185. package/dist/versions/isInheritedReadVersionsAccess.js.map +1 -1
  186. package/dist/versions/types.d.ts +2 -0
  187. package/dist/versions/types.d.ts.map +1 -1
  188. package/dist/versions/types.js.map +1 -1
  189. package/package.json +30 -28
  190. package/skills/payload/reference/ENDPOINTS.md +3 -9
  191. package/skills/payload/reference/PLUGIN-DEVELOPMENT.md +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/operations/delete.ts"],"sourcesContent":["import type { BranchDeleteOutcome } from '../../branching/tombstone.js'\nimport type { AccessResult } from '../../config/types.js'\nimport type { CollectionSlug, FindOptions } from '../../index.js'\nimport type { PayloadRequest, PopulateType, SelectType, Where } from '../../types/index.js'\nimport type { StoredFileList } from '../../uploads/fileVersioning/types.js'\nimport type { DeferredCleanupScope } from '../../utilities/transactionCallbacks.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { assertBranchMergeValidationWriteAllowed } from '../../branching/mergeWriteGuard.js'\nimport {\n refreshBranchState,\n resetBranchState,\n resolveBranch,\n} from '../../branching/resolveBranch.js'\nimport {\n assertBranchCreatedDeleteUnreferenced,\n assertBranchDeleteCanUseCallerTransaction,\n requireBranchDeleteOutcome,\n setBranchDeleteOperation,\n willBranchAbsorbDelete,\n} from '../../branching/tombstone.js'\nimport { MAIN_BRANCH } from '../../branching/types.js'\nimport { resolveBranchOwnVersions } from '../../branching/versions.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { APIError, Locked } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { deleteUserPreferences } from '../../preferences/deleteUserPreferences.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport {\n collectDocumentDeleteFileCandidates,\n scheduleUnreferencedFileCleanup,\n} from '../../uploads/fileVersioning/cleanup.js'\nimport {\n abortFileOperationScope,\n beginFileOperationScope,\n completeFileOperationScope,\n} from '../../uploads/fileVersioning/fileOperationManager.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { assertNoValidationWrite } from '../../utilities/assertNoValidationWrite.js'\nimport {\n deleteDocumentLocks,\n getDocumentLockState,\n} from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { hasScheduledPublishEnabled } from '../../utilities/getVersionsConfig.js'\nimport { httpStatus } from '../../utilities/httpStatus.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { isErrorPublic } from '../../utilities/isErrorPublic.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport {\n beginDeferredCleanupScope,\n clearDeferredCleanupScope,\n flushDeferredCleanupScope,\n flushDeferredCleanupScopeAfterOperation,\n} from '../../utilities/transactionCallbacks.js'\nimport { markTransactionWrite } from '../../utilities/transactionMutationTracker.js'\nimport { deleteCollectionVersions } from '../../versions/deleteCollectionVersions.js'\nimport { deleteScheduledPublishJobs } from '../../versions/deleteScheduledPublishJobs.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n disableTransaction?: boolean\n overrideAccess?: boolean\n overrideLock?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n where: Where\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const deleteOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<BulkOperationResult<TSlug, TSelect>> => {\n let args = incomingArgs\n let cleanupScope: DeferredCleanupScope | null = null\n let hasCallerTransaction = false\n let shouldCommit = false\n\n assertBranchMergeValidationWriteAllowed({ req: args.req })\n\n assertNoValidationWrite(args.req)\n\n if (args.collection.config.disableBulkDelete && !args.overrideAccess) {\n throw new APIError(`Collection ${args.collection.config.slug} has disabled bulk delete`, 403)\n }\n\n const hasFileOperationScope =\n Boolean(args.collection.config.upload) && !args.req.payload.db.bulkOperationsSingleTransaction\n const markedManagedDeletes = new Set<string>()\n\n if (hasFileOperationScope) {\n beginFileOperationScope({ req: args.req })\n }\n\n try {\n hasCallerTransaction = Boolean(await args.req.transactionID)\n shouldCommit =\n !args.disableTransaction &&\n !args.req.payload.db.bulkOperationsSingleTransaction &&\n (await initTransaction(args.req))\n const hasSharedTransaction = hasCallerTransaction || shouldCommit\n cleanupScope = await beginDeferredCleanupScope({ req: args.req })\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'delete',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n collection: { config: collectionConfig },\n depth,\n overrideAccess,\n overrideLock,\n populate,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to delete.\", httpStatus.BAD_REQUEST)\n }\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n\n if (!overrideAccess) {\n accessResult = await executeAccess(\n { slug: collectionConfig.slug, req },\n collectionConfig.access.delete,\n )\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n where,\n })\n\n let fullWhere = combineQueries(where, accessResult!)\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({ fields: collectionConfig.flattenedFields, payload, where: fullWhere })\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'delete',\n req,\n select: incomingSelect,\n }),\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n const { docs } = await payload.db.find<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n locale: locale!,\n req,\n // File cleanup needs every stored representation even when the response selects only an ID.\n select: collectionConfig.upload ? undefined : select,\n where: fullWhere,\n })\n\n const errors: BulkOperationResult<TSlug, TSelect>['errors'] = []\n let didBatchDeleteFail = false\n const deletedFilesByID = new Map<number | string, StoredFileList>()\n req.context ??= {}\n const managedDeletedUploads = (req.context._payloadManagedDeletedUploads ??=\n new Set()) as Set<string>\n\n type Doc = DataFromCollectionSlug<TSlug>\n type ResultDoc = BulkOperationResult<TSlug, TSelect>['docs'][number]\n type CheckedDeleteEntry = {\n doc: Doc\n fullDocument: Doc\n index: number\n lockDocumentIDs: (number | string)[]\n }\n type DeleteEntry = {\n absorbedByBranch: boolean\n } & CheckedDeleteEntry\n type BranchDeleteEntry = {\n branchVersionIDs: (number | string)[]\n } & DeleteEntry\n\n const deletedDocumentIDs = new Map<string, number | string>()\n const hasWriteCapableBeforeDeleteHooks = Boolean(collectionConfig.hooks?.beforeDelete?.length)\n const branch = resolveBranch(req)\n const isDeletingFromBranch =\n Boolean(\n config.branching?.enabled &&\n config.branching.branchableCollections.has(collectionConfig.slug),\n ) && branch !== MAIN_BRANCH\n const hasBranchSharedTransaction = isDeletingFromBranch && hasSharedTransaction\n\n const pushError = (id: number | string, error: unknown, message?: string) => {\n errors.push({\n id,\n isPublic: error instanceof Error ? isErrorPublic(error, config) : false,\n message: message ?? (error instanceof Error ? error.message : 'Unknown error'),\n })\n }\n\n // /////////////////////////////////////\n // beforeDelete - Collection, and associated files\n // /////////////////////////////////////\n\n const assertDeleteUnreferenced = async ({ doc }: { doc: Doc }): Promise<Doc> =>\n (await assertBranchCreatedDeleteUnreferenced({\n collectionSlug: collectionConfig.slug,\n doc,\n req,\n })) as Doc\n\n const runBeforeDeleteHooks = async ({ doc }: { doc: Doc }): Promise<void> => {\n if (collectionConfig.hooks?.beforeDelete?.length) {\n for (const hook of collectionConfig.hooks.beforeDelete) {\n await hook({\n id: doc.id,\n collection: collectionConfig,\n context: req.context,\n req,\n })\n }\n }\n }\n\n const storeDeleteFileCandidates = async ({\n fullDocument,\n }: {\n fullDocument: Doc\n }): Promise<void> => {\n const documentID = fullDocument.id\n\n if (!collectionConfig.upload || deletedFilesByID.has(documentID)) {\n return\n }\n\n const candidates = await collectDocumentDeleteFileCandidates({\n collection: collectionConfig,\n doc: fullDocument,\n parentID: documentID,\n req,\n })\n\n deletedFilesByID.set(documentID, candidates)\n\n if (candidates.length) {\n const identity = JSON.stringify([collectionConfig.slug, String(documentID)])\n\n managedDeletedUploads.add(identity)\n markedManagedDeletes.add(identity)\n }\n }\n\n const findBranchVersionIDs = async ({\n fullDocument,\n }: {\n fullDocument: Doc\n }): Promise<(number | string)[]> => {\n if (!collectionConfig.versions) {\n return []\n }\n\n const where = await resolveBranchOwnVersions({\n id: fullDocument.id,\n collectionSlug: collectionConfig.slug,\n req,\n })\n const { docs: versions } = await payload.db.findVersions({\n branch: false,\n collection: collectionConfig.slug,\n limit: 0,\n pagination: false,\n req,\n where,\n })\n\n return versions.map(({ id }) => id)\n }\n\n const runDeleteCleanup = async ({\n fullDocument,\n isTombstone,\n }: {\n fullDocument: Doc\n isTombstone?: boolean\n }): Promise<boolean> => {\n const absorbedByBranch =\n isTombstone ??\n (await willBranchAbsorbDelete({\n collectionSlug: collectionConfig.slug,\n doc: fullDocument,\n req,\n }))\n\n await storeDeleteFileCandidates({ fullDocument })\n\n if (!absorbedByBranch) {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: fullDocument,\n overrideDelete: true,\n req,\n })\n }\n\n return absorbedByBranch\n }\n\n const runBeforeDeleteHooksInDocumentTransaction = async ({\n entry,\n }: {\n entry: CheckedDeleteEntry\n }): Promise<CheckedDeleteEntry | null> => {\n let hookCleanupScope: DeferredCleanupScope | null = null\n let hookShouldCommit = false\n\n try {\n hookShouldCommit = await initTransaction(req)\n hookCleanupScope = await beginDeferredCleanupScope({ req })\n\n await runBeforeDeleteHooks({ doc: entry.doc })\n await flushDeferredCleanupScope({ req, scope: hookCleanupScope })\n\n if (hookShouldCommit) {\n await commitTransaction(req)\n }\n\n return entry\n } catch (error) {\n if (hookCleanupScope) {\n clearDeferredCleanupScope({ req, scope: hookCleanupScope })\n }\n\n if (hookShouldCommit) {\n await killTransaction(req)\n }\n\n if (hasCallerTransaction) {\n throw error\n }\n\n pushError(entry.doc.id, error)\n\n return null\n }\n }\n\n const prepareDocumentsForDelete = async (): Promise<CheckedDeleteEntry[]> => {\n const { lockDocumentIDsByDocumentID, lockedDocumentIDs } = await getDocumentLockState({\n collectionSlug: collectionConfig.slug,\n ids: docs.map(({ id }) => id),\n overrideLock,\n req,\n })\n\n const unlocked: { doc: Doc; index: number }[] = []\n\n docs.forEach((doc, index) => {\n if (lockedDocumentIDs.has(String(doc.id))) {\n pushError(\n doc.id,\n new Locked(`Document with ID ${doc.id} is currently locked and cannot be deleted.`),\n )\n\n return\n }\n\n unlocked.push({ doc, index })\n })\n\n const initialCheckResults = await Promise.all(\n unlocked.map(async (entry): Promise<CheckedDeleteEntry | null> => {\n try {\n const fullDocument = await assertDeleteUnreferenced({ doc: entry.doc })\n\n if (hasCallerTransaction && isDeletingFromBranch) {\n await assertBranchDeleteCanUseCallerTransaction({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: entry.doc.id,\n req,\n })\n }\n\n return {\n ...entry,\n fullDocument,\n lockDocumentIDs: lockDocumentIDsByDocumentID.get(String(entry.doc.id)) ?? [],\n }\n } catch (error) {\n pushError(entry.doc.id, error)\n\n return null\n }\n }),\n )\n const initiallyChecked = initialCheckResults.filter(\n (entry): entry is CheckedDeleteEntry => entry !== null,\n )\n\n const hookResults: (CheckedDeleteEntry | null)[] = []\n\n if (req.payload.db.bulkOperationsSingleTransaction) {\n for (const entry of initiallyChecked) {\n hookResults.push(\n hasWriteCapableBeforeDeleteHooks\n ? await runBeforeDeleteHooksInDocumentTransaction({ entry })\n : entry,\n )\n }\n } else if (hasBranchSharedTransaction) {\n for (const entry of initiallyChecked) {\n try {\n await runBeforeDeleteHooks({ doc: entry.doc })\n hookResults.push(entry)\n } catch (error) {\n if (hasCallerTransaction) {\n throw error\n }\n\n didBatchDeleteFail = true\n await killTransaction(req)\n\n for (const rolledBackEntry of initiallyChecked) {\n pushError(\n rolledBackEntry.doc.id,\n error,\n rolledBackEntry === entry\n ? undefined\n : `Bulk delete was rolled back because the beforeDelete hook failed for document ${entry.doc.id}.`,\n )\n }\n\n return []\n }\n }\n } else {\n hookResults.push(\n ...(await Promise.all(\n initiallyChecked.map(async (entry): Promise<CheckedDeleteEntry | null> => {\n try {\n await runBeforeDeleteHooks({ doc: entry.doc })\n\n return entry\n } catch (error) {\n pushError(entry.doc.id, error)\n\n return null\n }\n }),\n )),\n )\n }\n\n const hookCompleted = hookResults.filter(\n (entry): entry is CheckedDeleteEntry => entry !== null,\n )\n const {\n lockDocumentIDsByDocumentID: refreshedLockDocumentIDsByDocumentID,\n lockedDocumentIDs: refreshedLockedDocumentIDs,\n } = await getDocumentLockState({\n collectionSlug: collectionConfig.slug,\n ids: hookCompleted.map(({ doc }) => doc.id),\n overrideLock,\n req,\n })\n const lockCheckedAfterHooks: CheckedDeleteEntry[] = []\n\n for (const entry of hookCompleted) {\n const documentID = String(entry.doc.id)\n\n if (refreshedLockedDocumentIDs.has(documentID)) {\n pushError(\n entry.doc.id,\n new Locked(\n `Document with ID ${entry.doc.id} is currently locked and cannot be deleted.`,\n ),\n )\n\n continue\n }\n\n lockCheckedAfterHooks.push({\n ...entry,\n lockDocumentIDs: refreshedLockDocumentIDsByDocumentID.get(documentID) ?? [],\n })\n }\n\n const postHookCheckResults: (CheckedDeleteEntry | null)[] = []\n\n if (hasBranchSharedTransaction) {\n for (const entry of lockCheckedAfterHooks) {\n const fullDocument = await assertDeleteUnreferenced({ doc: entry.fullDocument })\n\n postHookCheckResults.push({ ...entry, fullDocument })\n }\n } else {\n postHookCheckResults.push(\n ...(await Promise.all(\n lockCheckedAfterHooks.map(async (entry): Promise<CheckedDeleteEntry | null> => {\n try {\n const fullDocument = await assertDeleteUnreferenced({ doc: entry.fullDocument })\n\n return { ...entry, fullDocument }\n } catch (error) {\n pushError(entry.doc.id, error)\n\n return null\n }\n }),\n )),\n )\n }\n\n return postHookCheckResults.filter((entry): entry is CheckedDeleteEntry => entry !== null)\n }\n\n // /////////////////////////////////////\n // afterRead - Fields, afterRead - Collection, afterDelete - Collection\n // /////////////////////////////////////\n\n const runAfterDeleteWork = async (doc: Doc): Promise<ResultDoc> => {\n let result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // Add collection property for auth collections\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\n }\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result || doc,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n if (collectionConfig.hooks?.afterDelete?.length) {\n for (const hook of collectionConfig.hooks.afterDelete) {\n result =\n (await hook({\n id: doc.id,\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }\n }\n\n return result as ResultDoc\n }\n\n /**\n * One transaction and one set of database calls per document. Only used when\n * `bulkOperationsSingleTransaction` is enabled, which requires each document to be committed\n * on its own and therefore cannot share a batched write with the rest of the operation.\n */\n const deleteDocumentIndividually = async ({\n doc,\n fullDocument: initiallyCheckedDocument,\n lockDocumentIDs,\n }: CheckedDeleteEntry): Promise<null | ResultDoc> => {\n let docCleanupScope: DeferredCleanupScope | null = null\n let docShouldCommit = false\n let hasReachedWriteCapableStage = hasCallerTransaction && hasWriteCapableBeforeDeleteHooks\n const hasIndividualFileScope = Boolean(collectionConfig.upload)\n\n if (hasIndividualFileScope) {\n beginFileOperationScope({ req })\n }\n\n try {\n docShouldCommit = await initTransaction(req)\n docCleanupScope = await beginDeferredCleanupScope({ req })\n\n const fullDocument = await assertDeleteUnreferenced({ doc: initiallyCheckedDocument })\n const absorbedByBranch = await willBranchAbsorbDelete({\n collectionSlug: collectionConfig.slug,\n doc: fullDocument,\n req,\n })\n let branchDeleteOutcome: BranchDeleteOutcome | undefined\n let branchVersionIDs: (number | string)[] = []\n\n if (isDeletingFromBranch) {\n await storeDeleteFileCandidates({ fullDocument })\n branchVersionIDs = await findBranchVersionIDs({ fullDocument })\n }\n\n if (!isDeletingFromBranch) {\n await runDeleteCleanup({ fullDocument })\n\n if (collectionConfig.versions) {\n hasReachedWriteCapableStage = true\n await deleteCollectionVersions({\n id: doc.id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n\n if (hasScheduledPublishEnabled(collectionConfig) && !absorbedByBranch) {\n hasReachedWriteCapableStage = true\n await deleteScheduledPublishJobs({\n id: doc.id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n }\n\n hasReachedWriteCapableStage = true\n if (isDeletingFromBranch) {\n setBranchDeleteOperation({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: doc.id,\n isTombstoneExpected: absorbedByBranch,\n onResolved: (outcome) => {\n branchDeleteOutcome = outcome\n },\n req,\n useAmbientTransaction: docShouldCommit,\n })\n }\n await payload.db.deleteOne({\n collection: collectionConfig.slug,\n req,\n returning: false,\n where: {\n id: {\n equals: doc.id,\n },\n },\n })\n markTransactionWrite({ req })\n\n const finalBranchDeleteOutcome = isDeletingFromBranch\n ? requireBranchDeleteOutcome({ outcome: branchDeleteOutcome })\n : ({ doc: fullDocument, tombstoned: false } as const)\n\n if (!finalBranchDeleteOutcome.tombstoned) {\n deletedDocumentIDs.set(String(doc.id), doc.id)\n }\n\n if (isDeletingFromBranch) {\n await runDeleteCleanup({\n fullDocument: finalBranchDeleteOutcome.doc as Doc,\n isTombstone: finalBranchDeleteOutcome.tombstoned,\n })\n\n if (collectionConfig.versions) {\n hasReachedWriteCapableStage = true\n await deleteCollectionVersions({\n id: doc.id,\n slug: collectionConfig.slug,\n payload,\n req,\n versionIDs: branchVersionIDs,\n })\n }\n\n if (\n hasScheduledPublishEnabled(collectionConfig) &&\n !finalBranchDeleteOutcome.tombstoned\n ) {\n hasReachedWriteCapableStage = true\n await deleteScheduledPublishJobs({\n id: doc.id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n }\n\n if (collectionConfig.upload) {\n await scheduleUnreferencedFileCleanup({\n candidates: deletedFilesByID.get(doc.id) ?? [],\n collection: collectionConfig,\n req,\n })\n }\n\n await deleteDocumentLocks({\n collectionSlug: collectionConfig.slug,\n ids: [doc.id],\n lockDocumentIDs,\n req,\n })\n\n const result = await runAfterDeleteWork(\n isDeletingFromBranch ? (finalBranchDeleteOutcome.doc as Doc) : doc,\n )\n\n if (docCleanupScope) {\n await flushDeferredCleanupScope({ req, scope: docCleanupScope })\n }\n if (docShouldCommit) {\n await commitTransaction(req)\n }\n\n if (hasIndividualFileScope) {\n await completeFileOperationScope({ req })\n }\n\n return result\n } catch (error) {\n if (docCleanupScope) {\n clearDeferredCleanupScope({ req, scope: docCleanupScope })\n }\n\n if (docShouldCommit) {\n await killTransaction(req)\n deletedDocumentIDs.delete(String(doc.id))\n resetBranchState(req)\n }\n\n if (hasIndividualFileScope) {\n await abortFileOperationScope({ req })\n }\n\n if (hasCallerTransaction && hasReachedWriteCapableStage) {\n throw error\n }\n pushError(doc.id, error)\n\n return null\n }\n }\n\n /**\n * Deletes unbranched rows as one batch. Branch deletes use the per-document adapter path so it\n * can create tombstones and remove branch-created rows from the change registry. Hooks still\n * run for each document.\n */\n const deleteDocumentsInBulk = async (\n preparedDocuments: CheckedDeleteEntry[],\n ): Promise<(null | ResultDoc)[]> => {\n const results: (null | ResultDoc)[] = new Array(docs.length).fill(null)\n let deletable: DeleteEntry[]\n\n if (isDeletingFromBranch) {\n deletable = await Promise.all(\n preparedDocuments.map(async (entry) => ({\n ...entry,\n absorbedByBranch: await willBranchAbsorbDelete({\n collectionSlug: collectionConfig.slug,\n doc: entry.fullDocument,\n req,\n }),\n })),\n )\n } else {\n const cleanupResults: (DeleteEntry | null)[] = []\n\n for (const entry of preparedDocuments) {\n let documentCleanupScope: DeferredCleanupScope | null = null\n\n try {\n documentCleanupScope = await beginDeferredCleanupScope({ req })\n const absorbedByBranch = await runDeleteCleanup({\n fullDocument: entry.fullDocument,\n })\n\n await flushDeferredCleanupScope({ req, scope: documentCleanupScope })\n cleanupResults.push({ ...entry, absorbedByBranch })\n } catch (error) {\n if (documentCleanupScope) {\n clearDeferredCleanupScope({ req, scope: documentCleanupScope })\n }\n\n if (hasBranchSharedTransaction && hasWriteCapableBeforeDeleteHooks) {\n throw error\n }\n\n pushError(entry.doc.id, error)\n cleanupResults.push(null)\n }\n }\n\n deletable = cleanupResults.filter((entry): entry is DeleteEntry => entry !== null)\n }\n\n if (!deletable.length) {\n return results\n }\n\n const ids = deletable.map(({ doc }) => doc.id)\n const lockDocumentIDs = deletable.flatMap((entry) => entry.lockDocumentIDs)\n const hardDeleteIDs = deletable\n .filter(({ absorbedByBranch }) => !absorbedByBranch)\n .map(({ doc }) => doc.id)\n\n if (!isDeletingFromBranch) {\n // /////////////////////////////////////\n // Delete versions\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n await deleteCollectionVersions({\n slug: collectionConfig.slug,\n ids,\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete scheduled posts\n // /////////////////////////////////////\n\n if (hasScheduledPublishEnabled(collectionConfig) && hardDeleteIDs.length) {\n await deleteScheduledPublishJobs({\n slug: collectionConfig.slug,\n ids: hardDeleteIDs,\n payload,\n req,\n })\n }\n }\n\n // /////////////////////////////////////\n // Delete documents\n // /////////////////////////////////////\n\n const deletedInBatch: (number | string)[] = []\n const branchDeleteOutcomes = new Map<string, BranchDeleteOutcome>()\n const branchDeleteEntries: BranchDeleteEntry[] = []\n\n try {\n if (isDeletingFromBranch) {\n for (const entry of deletable) {\n const { absorbedByBranch, doc, fullDocument } = entry\n\n await storeDeleteFileCandidates({ fullDocument })\n branchDeleteEntries.push({\n ...entry,\n branchVersionIDs: await findBranchVersionIDs({ fullDocument }),\n })\n\n setBranchDeleteOperation({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: doc.id,\n isTombstoneExpected: absorbedByBranch,\n onResolved: (outcome) => {\n branchDeleteOutcomes.set(String(doc.id), outcome)\n },\n req,\n useAmbientTransaction: shouldCommit,\n })\n await payload.db.deleteOne({\n collection: collectionConfig.slug,\n req,\n returning: false,\n where: {\n id: {\n equals: doc.id,\n },\n },\n })\n markTransactionWrite({ req })\n\n const finalBranchDeleteOutcome = requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(doc.id)),\n })\n\n if (!finalBranchDeleteOutcome.tombstoned) {\n deletedDocumentIDs.set(String(doc.id), doc.id)\n }\n deletedInBatch.push(doc.id)\n }\n } else {\n await payload.db.deleteMany({\n collection: collectionConfig.slug,\n req,\n where: {\n id: {\n in: ids,\n },\n },\n })\n markTransactionWrite({ req })\n\n for (const id of ids) {\n deletedDocumentIDs.set(String(id), id)\n deletedInBatch.push(id)\n }\n }\n\n if (isDeletingFromBranch) {\n for (const { doc } of deletable) {\n const finalBranchDeleteOutcome = requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(doc.id)),\n })\n\n await runDeleteCleanup({\n fullDocument: finalBranchDeleteOutcome.doc as Doc,\n isTombstone: finalBranchDeleteOutcome.tombstoned,\n })\n }\n\n if (collectionConfig.versions) {\n await deleteCollectionVersions({\n slug: collectionConfig.slug,\n ids,\n payload,\n req,\n versionIDs: branchDeleteEntries.flatMap(({ branchVersionIDs }) => branchVersionIDs),\n })\n }\n\n const finalHardDeleteIDs = deletable\n .filter(({ doc }) => {\n const outcome = requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(doc.id)),\n })\n\n return !outcome.tombstoned\n })\n .map(({ doc }) => doc.id)\n\n if (hasScheduledPublishEnabled(collectionConfig) && finalHardDeleteIDs.length) {\n await deleteScheduledPublishJobs({\n slug: collectionConfig.slug,\n ids: finalHardDeleteIDs,\n payload,\n req,\n })\n }\n }\n\n await deleteDocumentLocks({\n collectionSlug: collectionConfig.slug,\n ids,\n lockDocumentIDs,\n req,\n })\n } catch (error) {\n didBatchDeleteFail = true\n\n if (shouldCommit) {\n await killTransaction(req)\n resetBranchState(req)\n\n for (const id of deletedInBatch) {\n deletedDocumentIDs.delete(String(id))\n }\n }\n\n if (hasCallerTransaction) {\n throw error\n }\n\n // The delete covers the whole batch, so a failure here belongs to the batch rather than to\n // any single document. Say so explicitly, otherwise one batch failure reads as N unrelated\n // per-document failures.\n const message = `Bulk delete failed for this batch of ${deletable.length} documents: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n\n for (const { doc } of deletable) {\n pushError(doc.id, error, message)\n }\n\n return results\n }\n\n if (collectionConfig.upload) {\n await scheduleUnreferencedFileCleanup({\n candidates: deletable.flatMap(({ doc }) => deletedFilesByID.get(doc.id) ?? []),\n collection: collectionConfig,\n req,\n })\n }\n\n if (hasBranchSharedTransaction) {\n for (const entry of deletable) {\n const resultDocument = isDeletingFromBranch\n ? (requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(entry.doc.id)),\n }).doc as Doc)\n : entry.doc\n\n try {\n results[entry.index] = await runAfterDeleteWork(resultDocument)\n } catch (error) {\n if (hasCallerTransaction) {\n throw error\n }\n\n didBatchDeleteFail = true\n await killTransaction(req)\n resetBranchState(req)\n results.fill(null)\n\n for (const id of deletedInBatch) {\n deletedDocumentIDs.delete(String(id))\n }\n\n for (const rolledBackEntry of deletable) {\n pushError(\n rolledBackEntry.doc.id,\n error,\n rolledBackEntry === entry\n ? undefined\n : `Bulk delete was rolled back because post-delete work failed for document ${entry.doc.id}.`,\n )\n }\n\n return results\n }\n }\n\n return results\n }\n\n const postDeleteResults = await Promise.all(\n deletable.map(async (entry) => {\n try {\n const resultDocument = isDeletingFromBranch\n ? (requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(entry.doc.id)),\n }).doc as Doc)\n : entry.doc\n\n return {\n entry,\n result: await runAfterDeleteWork(resultDocument),\n status: 'fulfilled' as const,\n }\n } catch (error) {\n return { entry, error, status: 'rejected' as const }\n }\n }),\n )\n\n for (const outcome of postDeleteResults) {\n if (outcome.status === 'rejected') {\n pushError(outcome.entry.doc.id, outcome.error)\n } else {\n results[outcome.entry.index] = outcome.result\n }\n }\n\n return results\n }\n\n let awaitedDocs: (null | ResultDoc)[]\n const preparedDocuments = await prepareDocumentsForDelete()\n\n if (req.payload.db.bulkOperationsSingleTransaction) {\n // Process sequentially so that each document's transaction is isolated from the next\n awaitedDocs = []\n\n for (const preparedDocument of preparedDocuments) {\n awaitedDocs.push(await deleteDocumentIndividually(preparedDocument))\n }\n } else {\n awaitedDocs = await deleteDocumentsInBulk(preparedDocuments)\n }\n\n // /////////////////////////////////////\n // Delete Preferences\n // /////////////////////////////////////\n\n const deletedPreferenceIDs = [...deletedDocumentIDs.values()]\n\n if (deletedPreferenceIDs.length) {\n await deleteUserPreferences({\n collectionConfig,\n ids: deletedPreferenceIDs,\n payload,\n req,\n })\n }\n\n let result = {\n docs: awaitedDocs.filter((doc): doc is ResultDoc => Boolean(doc)),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'delete',\n overrideAccess,\n result,\n })\n\n if (cleanupScope) {\n if (didBatchDeleteFail) {\n clearDeferredCleanupScope({ req: args.req, scope: cleanupScope })\n } else {\n await flushDeferredCleanupScopeAfterOperation({ req, scope: cleanupScope })\n }\n }\n if (shouldCommit && !didBatchDeleteFail) {\n await commitTransaction(req)\n }\n\n if (hasFileOperationScope) {\n await completeFileOperationScope({ req })\n }\n\n if (isDeletingFromBranch) {\n refreshBranchState(req)\n }\n\n return result\n } catch (error: unknown) {\n if (cleanupScope) {\n clearDeferredCleanupScope({ req: args.req, scope: cleanupScope })\n }\n\n if (shouldCommit) {\n await killTransaction(args.req)\n }\n resetBranchState(args.req)\n\n if (hasFileOperationScope) {\n await abortFileOperationScope({ req: args.req })\n }\n throw error\n } finally {\n const managedDeletedUploads = args.req.context?._payloadManagedDeletedUploads as\n | Set<string>\n | undefined\n for (const identity of markedManagedDeletes) {\n managedDeletedUploads?.delete(identity)\n }\n if (managedDeletedUploads?.size === 0) {\n delete args.req.context._payloadManagedDeletedUploads\n }\n }\n}\n"],"names":["executeAccess","assertBranchMergeValidationWriteAllowed","refreshBranchState","resetBranchState","resolveBranch","assertBranchCreatedDeleteUnreferenced","assertBranchDeleteCanUseCallerTransaction","requireBranchDeleteOutcome","setBranchDeleteOperation","willBranchAbsorbDelete","MAIN_BRANCH","resolveBranchOwnVersions","combineQueries","validateQueryPaths","sanitizeWhereQuery","APIError","Locked","afterRead","deleteUserPreferences","deleteAssociatedFiles","collectDocumentDeleteFileCandidates","scheduleUnreferencedFileCleanup","abortFileOperationScope","beginFileOperationScope","completeFileOperationScope","appendNonTrashedFilter","assertNoValidationWrite","deleteDocumentLocks","getDocumentLockState","commitTransaction","hasScheduledPublishEnabled","httpStatus","initTransaction","isErrorPublic","killTransaction","resolveSelect","sanitizeSelect","beginDeferredCleanupScope","clearDeferredCleanupScope","flushDeferredCleanupScope","flushDeferredCleanupScopeAfterOperation","markTransactionWrite","deleteCollectionVersions","deleteScheduledPublishJobs","buildAfterOperation","buildBeforeOperation","deleteOperation","incomingArgs","args","cleanupScope","hasCallerTransaction","shouldCommit","req","collection","config","disableBulkDelete","overrideAccess","slug","hasFileOperationScope","Boolean","upload","payload","db","bulkOperationsSingleTransaction","markedManagedDeletes","Set","transactionID","disableTransaction","hasSharedTransaction","operation","collectionConfig","depth","overrideLock","populate","fallbackLocale","locale","select","incomingSelect","showHiddenFields","trash","where","BAD_REQUEST","accessResult","access","delete","fullWhere","enableTrash","fields","flattenedFields","docs","find","undefined","errors","didBatchDeleteFail","deletedFilesByID","Map","context","managedDeletedUploads","_payloadManagedDeletedUploads","deletedDocumentIDs","hasWriteCapableBeforeDeleteHooks","hooks","beforeDelete","length","branch","isDeletingFromBranch","branching","enabled","branchableCollections","has","hasBranchSharedTransaction","pushError","id","error","message","push","isPublic","Error","assertDeleteUnreferenced","doc","collectionSlug","runBeforeDeleteHooks","hook","storeDeleteFileCandidates","fullDocument","documentID","candidates","parentID","set","identity","JSON","stringify","String","add","findBranchVersionIDs","versions","findVersions","limit","pagination","map","runDeleteCleanup","isTombstone","absorbedByBranch","overrideDelete","runBeforeDeleteHooksInDocumentTransaction","entry","hookCleanupScope","hookShouldCommit","scope","prepareDocumentsForDelete","lockDocumentIDsByDocumentID","lockedDocumentIDs","ids","unlocked","forEach","index","initialCheckResults","Promise","all","docID","lockDocumentIDs","get","initiallyChecked","filter","hookResults","rolledBackEntry","hookCompleted","refreshedLockDocumentIDsByDocumentID","refreshedLockedDocumentIDs","lockCheckedAfterHooks","postHookCheckResults","runAfterDeleteWork","result","draft","global","auth","afterDelete","deleteDocumentIndividually","initiallyCheckedDocument","docCleanupScope","docShouldCommit","hasReachedWriteCapableStage","hasIndividualFileScope","branchDeleteOutcome","branchVersionIDs","isTombstoneExpected","onResolved","outcome","useAmbientTransaction","deleteOne","returning","equals","finalBranchDeleteOutcome","tombstoned","versionIDs","deleteDocumentsInBulk","preparedDocuments","results","Array","fill","deletable","cleanupResults","documentCleanupScope","flatMap","hardDeleteIDs","deletedInBatch","branchDeleteOutcomes","branchDeleteEntries","deleteMany","in","finalHardDeleteIDs","resultDocument","postDeleteResults","status","awaitedDocs","preparedDocument","deletedPreferenceIDs","values","size"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/collections/operations/delete.ts"],"sourcesContent":["import type { BranchDeleteOutcome } from '../../branching/tombstone.js'\nimport type { AccessResult } from '../../config/types.js'\nimport type { CollectionSlug, FindOptions } from '../../index.js'\nimport type { PayloadRequest, PopulateType, SelectType, Where } from '../../types/index.js'\nimport type { StoredFileList } from '../../uploads/fileVersioning/types.js'\nimport type { DeferredCleanupScope } from '../../utilities/transactionCallbacks.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { assertBranchMergeValidationWriteAllowed } from '../../branching/mergeWriteGuard.js'\nimport {\n refreshBranchState,\n resetBranchState,\n resolveBranch,\n} from '../../branching/resolveBranch.js'\nimport {\n assertBranchCreatedDeleteUnreferenced,\n assertBranchDeleteCanUseCallerTransaction,\n requireBranchDeleteOutcome,\n setBranchDeleteOperation,\n willBranchAbsorbDelete,\n} from '../../branching/tombstone.js'\nimport { MAIN_BRANCH } from '../../branching/types.js'\nimport { resolveBranchOwnVersions } from '../../branching/versions.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeWhereQuery } from '../../database/sanitizeWhereQuery.js'\nimport { APIError, Locked } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { deleteUserPreferences } from '../../preferences/deleteUserPreferences.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport {\n collectDocumentDeleteFileCandidates,\n scheduleUnreferencedFileCleanup,\n} from '../../uploads/fileVersioning/cleanup.js'\nimport {\n abortFileOperationScope,\n beginFileOperationScope,\n completeFileOperationScope,\n} from '../../uploads/fileVersioning/fileOperationManager.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { assertNoValidationWrite } from '../../utilities/assertNoValidationWrite.js'\nimport {\n deleteDocumentLocks,\n getDocumentLockState,\n} from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { hasScheduledPublishEnabled } from '../../utilities/getVersionsConfig.js'\nimport { httpStatus } from '../../utilities/httpStatus.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { isErrorPublic } from '../../utilities/isErrorPublic.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport {\n beginDeferredCleanupScope,\n clearDeferredCleanupScope,\n flushDeferredCleanupScope,\n flushDeferredCleanupScopeAfterOperation,\n} from '../../utilities/transactionCallbacks.js'\nimport { markTransactionWrite } from '../../utilities/transactionMutationTracker.js'\nimport { deleteCollectionVersions } from '../../versions/deleteCollectionVersions.js'\nimport { deleteScheduledPublishJobs } from '../../versions/deleteScheduledPublishJobs.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\n\nexport type Arguments = {\n collection: Collection\n depth?: number\n disableTransaction?: boolean\n overrideAccess?: boolean\n overrideLock?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n where: Where\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const deleteOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<BulkOperationResult<TSlug, TSelect>> => {\n let args = incomingArgs\n let cleanupScope: DeferredCleanupScope | null = null\n let hasCallerTransaction = false\n let shouldCommit = false\n\n assertBranchMergeValidationWriteAllowed({ req: args.req })\n\n assertNoValidationWrite(args.req)\n\n if (args.collection.config.disableBulkDelete && !args.overrideAccess) {\n throw new APIError(`Collection ${args.collection.config.slug} has disabled bulk delete`, 403)\n }\n\n const hasFileOperationScope =\n Boolean(args.collection.config.upload) && !args.req.payload.db.bulkOperationsSingleTransaction\n const markedManagedDeletes = new Set<string>()\n\n if (hasFileOperationScope) {\n beginFileOperationScope({ req: args.req })\n }\n\n try {\n hasCallerTransaction = Boolean(await args.req.transactionID)\n shouldCommit =\n !args.disableTransaction &&\n !args.req.payload.db.bulkOperationsSingleTransaction &&\n (await initTransaction(args.req))\n const hasSharedTransaction = hasCallerTransaction || shouldCommit\n cleanupScope = await beginDeferredCleanupScope({ req: args.req })\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'delete',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n collection: { config: collectionConfig },\n depth,\n overrideAccess,\n overrideLock,\n populate,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to delete.\", httpStatus.BAD_REQUEST)\n }\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n\n if (!overrideAccess) {\n accessResult = await executeAccess(\n { slug: collectionConfig.slug, req },\n collectionConfig.access.delete,\n )\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess: overrideAccess!,\n req,\n where,\n })\n\n let fullWhere = combineQueries(where, accessResult!)\n\n // Exclude trashed documents when trash: false\n fullWhere = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where: fullWhere,\n })\n\n sanitizeWhereQuery({ fields: collectionConfig.flattenedFields, payload, where: fullWhere })\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'delete',\n req,\n select: incomingSelect,\n }),\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n const { docs } = await payload.db.find<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n locale: locale!,\n req,\n // File cleanup needs every stored representation even when the response selects only an ID.\n select: collectionConfig.upload ? undefined : select,\n where: fullWhere,\n })\n\n const errors: BulkOperationResult<TSlug, TSelect>['errors'] = []\n let didBatchDeleteFail = false\n const deletedFilesByID = new Map<number | string, StoredFileList>()\n req.context ??= {}\n const managedDeletedUploads = (req.context._payloadManagedDeletedUploads ??=\n new Set()) as Set<string>\n\n type Doc = DataFromCollectionSlug<TSlug>\n type ResultDoc = BulkOperationResult<TSlug, TSelect>['docs'][number]\n type CheckedDeleteEntry = {\n doc: Doc\n fullDocument: Doc\n index: number\n lockDocumentIDs: (number | string)[]\n }\n type DeleteEntry = {\n absorbedByBranch: boolean\n } & CheckedDeleteEntry\n type BranchDeleteEntry = {\n branchVersionIDs: (number | string)[]\n } & DeleteEntry\n\n const deletedDocumentIDs = new Map<string, number | string>()\n const hasWriteCapableBeforeDeleteHooks = Boolean(collectionConfig.hooks?.beforeDelete?.length)\n const branch = resolveBranch(req)\n const isDeletingFromBranch =\n Boolean(\n config.branching?.enabled &&\n config.branching.branchableCollections.has(collectionConfig.slug),\n ) && branch !== MAIN_BRANCH\n const hasBranchSharedTransaction = isDeletingFromBranch && hasSharedTransaction\n\n const pushError = (id: number | string, error: unknown, message?: string) => {\n errors.push({\n id,\n isPublic: error instanceof Error ? isErrorPublic(error, config) : false,\n message: message ?? (error instanceof Error ? error.message : 'Unknown error'),\n })\n }\n\n // /////////////////////////////////////\n // beforeDelete - Collection, and associated files\n // /////////////////////////////////////\n\n const assertDeleteUnreferenced = async ({ doc }: { doc: Doc }): Promise<Doc> =>\n (await assertBranchCreatedDeleteUnreferenced({\n collectionSlug: collectionConfig.slug,\n doc,\n req,\n })) as Doc\n\n const runBeforeDeleteHooks = async ({ doc }: { doc: Doc }): Promise<void> => {\n if (collectionConfig.hooks?.beforeDelete?.length) {\n for (const hook of collectionConfig.hooks.beforeDelete) {\n await hook({\n id: doc.id,\n collection: collectionConfig,\n context: req.context,\n req,\n })\n }\n }\n }\n\n const storeDeleteFileCandidates = async ({\n fullDocument,\n }: {\n fullDocument: Doc\n }): Promise<void> => {\n const documentID = fullDocument.id\n\n if (!collectionConfig.upload || deletedFilesByID.has(documentID)) {\n return\n }\n\n const candidates = await collectDocumentDeleteFileCandidates({\n collection: collectionConfig,\n doc: fullDocument,\n parentID: documentID,\n req,\n })\n\n deletedFilesByID.set(documentID, candidates)\n\n if (candidates.length) {\n const identity = JSON.stringify([collectionConfig.slug, String(documentID)])\n\n managedDeletedUploads.add(identity)\n markedManagedDeletes.add(identity)\n }\n }\n\n const findBranchVersionIDs = async ({\n fullDocument,\n }: {\n fullDocument: Doc\n }): Promise<(number | string)[]> => {\n if (!collectionConfig.versions) {\n return []\n }\n\n const where = await resolveBranchOwnVersions({\n id: fullDocument.id,\n collectionSlug: collectionConfig.slug,\n req,\n })\n const { docs: versions } = await payload.db.findVersions({\n branch: false,\n collection: collectionConfig.slug,\n limit: 0,\n pagination: false,\n req,\n where,\n })\n\n return versions.map(({ id }) => id)\n }\n\n const runDeleteCleanup = async ({\n fullDocument,\n isTombstone,\n }: {\n fullDocument: Doc\n isTombstone?: boolean\n }): Promise<boolean> => {\n const absorbedByBranch =\n isTombstone ??\n (await willBranchAbsorbDelete({\n collectionSlug: collectionConfig.slug,\n doc: fullDocument,\n req,\n }))\n\n await storeDeleteFileCandidates({ fullDocument })\n\n if (!absorbedByBranch) {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: fullDocument,\n overrideDelete: true,\n req,\n })\n }\n\n return absorbedByBranch\n }\n\n const runBeforeDeleteHooksInDocumentTransaction = async ({\n entry,\n }: {\n entry: CheckedDeleteEntry\n }): Promise<CheckedDeleteEntry | null> => {\n let hookCleanupScope: DeferredCleanupScope | null = null\n let hookShouldCommit = false\n\n try {\n hookShouldCommit = await initTransaction(req)\n hookCleanupScope = await beginDeferredCleanupScope({ req })\n\n await runBeforeDeleteHooks({ doc: entry.doc })\n await flushDeferredCleanupScope({ req, scope: hookCleanupScope })\n\n if (hookShouldCommit) {\n await commitTransaction(req)\n }\n\n return entry\n } catch (error) {\n if (hookCleanupScope) {\n clearDeferredCleanupScope({ req, scope: hookCleanupScope })\n }\n\n if (hookShouldCommit) {\n await killTransaction(req)\n }\n\n if (hasCallerTransaction) {\n throw error\n }\n\n pushError(entry.doc.id, error)\n\n return null\n }\n }\n\n const prepareDocumentsForDelete = async (): Promise<CheckedDeleteEntry[]> => {\n const { lockDocumentIDsByDocumentID, lockedDocumentIDs } = await getDocumentLockState({\n collectionSlug: collectionConfig.slug,\n ids: docs.map(({ id }) => id),\n overrideLock,\n req,\n })\n\n const unlocked: { doc: Doc; index: number }[] = []\n\n docs.forEach((doc, index) => {\n if (lockedDocumentIDs.has(String(doc.id))) {\n pushError(\n doc.id,\n new Locked(`Document with ID ${doc.id} is currently locked and cannot be deleted.`),\n )\n\n return\n }\n\n unlocked.push({ doc, index })\n })\n\n const initialCheckResults = await Promise.all(\n unlocked.map(async (entry): Promise<CheckedDeleteEntry | null> => {\n try {\n const fullDocument = await assertDeleteUnreferenced({ doc: entry.doc })\n\n if (hasCallerTransaction && isDeletingFromBranch) {\n await assertBranchDeleteCanUseCallerTransaction({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: entry.doc.id,\n req,\n })\n }\n\n return {\n ...entry,\n fullDocument,\n lockDocumentIDs: lockDocumentIDsByDocumentID.get(String(entry.doc.id)) ?? [],\n }\n } catch (error) {\n pushError(entry.doc.id, error)\n\n return null\n }\n }),\n )\n const initiallyChecked = initialCheckResults.filter(\n (entry): entry is CheckedDeleteEntry => entry !== null,\n )\n\n const hookResults: (CheckedDeleteEntry | null)[] = []\n\n if (req.payload.db.bulkOperationsSingleTransaction) {\n for (const entry of initiallyChecked) {\n hookResults.push(\n hasWriteCapableBeforeDeleteHooks\n ? await runBeforeDeleteHooksInDocumentTransaction({ entry })\n : entry,\n )\n }\n } else if (hasBranchSharedTransaction) {\n for (const entry of initiallyChecked) {\n try {\n await runBeforeDeleteHooks({ doc: entry.doc })\n hookResults.push(entry)\n } catch (error) {\n if (hasCallerTransaction) {\n throw error\n }\n\n didBatchDeleteFail = true\n await killTransaction(req)\n\n for (const rolledBackEntry of initiallyChecked) {\n pushError(\n rolledBackEntry.doc.id,\n error,\n rolledBackEntry === entry\n ? undefined\n : `Bulk delete was rolled back because the beforeDelete hook failed for document ${entry.doc.id}.`,\n )\n }\n\n return []\n }\n }\n } else {\n hookResults.push(\n ...(await Promise.all(\n initiallyChecked.map(async (entry): Promise<CheckedDeleteEntry | null> => {\n try {\n await runBeforeDeleteHooks({ doc: entry.doc })\n\n return entry\n } catch (error) {\n pushError(entry.doc.id, error)\n\n return null\n }\n }),\n )),\n )\n }\n\n const hookCompleted = hookResults.filter(\n (entry): entry is CheckedDeleteEntry => entry !== null,\n )\n const {\n lockDocumentIDsByDocumentID: refreshedLockDocumentIDsByDocumentID,\n lockedDocumentIDs: refreshedLockedDocumentIDs,\n } = await getDocumentLockState({\n collectionSlug: collectionConfig.slug,\n ids: hookCompleted.map(({ doc }) => doc.id),\n overrideLock,\n req,\n })\n const lockCheckedAfterHooks: CheckedDeleteEntry[] = []\n\n for (const entry of hookCompleted) {\n const documentID = String(entry.doc.id)\n\n if (refreshedLockedDocumentIDs.has(documentID)) {\n pushError(\n entry.doc.id,\n new Locked(\n `Document with ID ${entry.doc.id} is currently locked and cannot be deleted.`,\n ),\n )\n\n continue\n }\n\n lockCheckedAfterHooks.push({\n ...entry,\n lockDocumentIDs: refreshedLockDocumentIDsByDocumentID.get(documentID) ?? [],\n })\n }\n\n const postHookCheckResults: (CheckedDeleteEntry | null)[] = []\n\n if (hasBranchSharedTransaction) {\n for (const entry of lockCheckedAfterHooks) {\n const fullDocument = await assertDeleteUnreferenced({ doc: entry.fullDocument })\n\n postHookCheckResults.push({ ...entry, fullDocument })\n }\n } else {\n postHookCheckResults.push(\n ...(await Promise.all(\n lockCheckedAfterHooks.map(async (entry): Promise<CheckedDeleteEntry | null> => {\n try {\n const fullDocument = await assertDeleteUnreferenced({ doc: entry.fullDocument })\n\n return { ...entry, fullDocument }\n } catch (error) {\n pushError(entry.doc.id, error)\n\n return null\n }\n }),\n )),\n )\n }\n\n return postHookCheckResults.filter((entry): entry is CheckedDeleteEntry => entry !== null)\n }\n\n // /////////////////////////////////////\n // afterRead - Fields, afterRead - Collection, afterDelete - Collection\n // /////////////////////////////////////\n\n const runAfterDeleteWork = async (doc: Doc): Promise<ResultDoc> => {\n let result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n draft: undefined,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // Add collection property for auth collections\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\n }\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result || doc,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n if (collectionConfig.hooks?.afterDelete?.length) {\n for (const hook of collectionConfig.hooks.afterDelete) {\n result =\n (await hook({\n id: doc.id,\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }\n }\n\n return result as ResultDoc\n }\n\n /**\n * One transaction and one set of database calls per document. Only used when\n * `bulkOperationsSingleTransaction` is enabled, which requires each document to be committed\n * on its own and therefore cannot share a batched write with the rest of the operation.\n */\n const deleteDocumentIndividually = async ({\n doc,\n fullDocument: initiallyCheckedDocument,\n lockDocumentIDs,\n }: CheckedDeleteEntry): Promise<null | ResultDoc> => {\n let docCleanupScope: DeferredCleanupScope | null = null\n let docShouldCommit = false\n let hasReachedWriteCapableStage = hasCallerTransaction && hasWriteCapableBeforeDeleteHooks\n const hasIndividualFileScope = Boolean(collectionConfig.upload)\n\n if (hasIndividualFileScope) {\n beginFileOperationScope({ req })\n }\n\n try {\n docShouldCommit = await initTransaction(req)\n docCleanupScope = await beginDeferredCleanupScope({ req })\n\n const fullDocument = await assertDeleteUnreferenced({ doc: initiallyCheckedDocument })\n const absorbedByBranch = await willBranchAbsorbDelete({\n collectionSlug: collectionConfig.slug,\n doc: fullDocument,\n req,\n })\n let branchDeleteOutcome: BranchDeleteOutcome | undefined\n let branchVersionIDs: (number | string)[] = []\n\n if (isDeletingFromBranch) {\n await storeDeleteFileCandidates({ fullDocument })\n branchVersionIDs = await findBranchVersionIDs({ fullDocument })\n }\n\n if (!isDeletingFromBranch) {\n await runDeleteCleanup({ fullDocument })\n\n if (collectionConfig.versions) {\n hasReachedWriteCapableStage = true\n await deleteCollectionVersions({\n id: doc.id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n\n if (hasScheduledPublishEnabled(collectionConfig) && !absorbedByBranch) {\n hasReachedWriteCapableStage = true\n await deleteScheduledPublishJobs({\n id: doc.id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n }\n\n hasReachedWriteCapableStage = true\n if (isDeletingFromBranch) {\n setBranchDeleteOperation({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: doc.id,\n isTombstoneExpected: absorbedByBranch,\n onResolved: (outcome) => {\n branchDeleteOutcome = outcome\n },\n req,\n useAmbientTransaction: docShouldCommit,\n })\n }\n await payload.db.deleteOne({\n collection: collectionConfig.slug,\n req,\n returning: false,\n where: {\n id: {\n equals: doc.id,\n },\n },\n })\n markTransactionWrite({ req })\n\n const finalBranchDeleteOutcome = isDeletingFromBranch\n ? requireBranchDeleteOutcome({ outcome: branchDeleteOutcome })\n : ({ doc: fullDocument, tombstoned: false } as const)\n\n if (!finalBranchDeleteOutcome.tombstoned) {\n deletedDocumentIDs.set(String(doc.id), doc.id)\n }\n\n if (isDeletingFromBranch) {\n await runDeleteCleanup({\n fullDocument: finalBranchDeleteOutcome.doc as Doc,\n isTombstone: finalBranchDeleteOutcome.tombstoned,\n })\n\n if (collectionConfig.versions) {\n hasReachedWriteCapableStage = true\n await deleteCollectionVersions({\n id: doc.id,\n slug: collectionConfig.slug,\n payload,\n req,\n versionIDs: branchVersionIDs,\n })\n }\n\n if (\n hasScheduledPublishEnabled(collectionConfig) &&\n !finalBranchDeleteOutcome.tombstoned\n ) {\n hasReachedWriteCapableStage = true\n await deleteScheduledPublishJobs({\n id: doc.id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n }\n\n if (collectionConfig.upload) {\n await scheduleUnreferencedFileCleanup({\n candidates: deletedFilesByID.get(doc.id) ?? [],\n collection: collectionConfig,\n req,\n })\n }\n\n await deleteDocumentLocks({\n collectionSlug: collectionConfig.slug,\n ids: [doc.id],\n lockDocumentIDs,\n req,\n })\n\n const result = await runAfterDeleteWork(\n isDeletingFromBranch ? (finalBranchDeleteOutcome.doc as Doc) : doc,\n )\n\n if (docCleanupScope) {\n await flushDeferredCleanupScope({ req, scope: docCleanupScope })\n }\n if (docShouldCommit) {\n await commitTransaction(req)\n }\n\n if (hasIndividualFileScope) {\n await completeFileOperationScope({ req })\n }\n\n return result\n } catch (error) {\n if (docCleanupScope) {\n clearDeferredCleanupScope({ req, scope: docCleanupScope })\n }\n\n if (docShouldCommit) {\n await killTransaction(req)\n deletedDocumentIDs.delete(String(doc.id))\n resetBranchState(req)\n }\n\n if (hasIndividualFileScope) {\n await abortFileOperationScope({ req })\n }\n\n if (hasCallerTransaction && hasReachedWriteCapableStage) {\n throw error\n }\n pushError(doc.id, error)\n\n return null\n }\n }\n\n /**\n * Deletes unbranched rows as one batch. Branch deletes use the per-document adapter path so it\n * can create tombstones and remove branch-created rows from the change registry. Hooks still\n * run for each document.\n */\n const deleteDocumentsInBulk = async (\n preparedDocuments: CheckedDeleteEntry[],\n ): Promise<(null | ResultDoc)[]> => {\n const results: (null | ResultDoc)[] = new Array(docs.length).fill(null)\n let deletable: DeleteEntry[]\n\n if (isDeletingFromBranch) {\n deletable = await Promise.all(\n preparedDocuments.map(async (entry) => ({\n ...entry,\n absorbedByBranch: await willBranchAbsorbDelete({\n collectionSlug: collectionConfig.slug,\n doc: entry.fullDocument,\n req,\n }),\n })),\n )\n } else {\n const cleanupResults: (DeleteEntry | null)[] = []\n\n for (const entry of preparedDocuments) {\n let documentCleanupScope: DeferredCleanupScope | null = null\n\n try {\n documentCleanupScope = await beginDeferredCleanupScope({ req })\n const absorbedByBranch = await runDeleteCleanup({\n fullDocument: entry.fullDocument,\n })\n\n await flushDeferredCleanupScope({ req, scope: documentCleanupScope })\n cleanupResults.push({ ...entry, absorbedByBranch })\n } catch (error) {\n if (documentCleanupScope) {\n clearDeferredCleanupScope({ req, scope: documentCleanupScope })\n }\n\n if (hasBranchSharedTransaction && hasWriteCapableBeforeDeleteHooks) {\n throw error\n }\n\n pushError(entry.doc.id, error)\n cleanupResults.push(null)\n }\n }\n\n deletable = cleanupResults.filter((entry): entry is DeleteEntry => entry !== null)\n }\n\n if (!deletable.length) {\n return results\n }\n\n const ids = deletable.map(({ doc }) => doc.id)\n const lockDocumentIDs = deletable.flatMap((entry) => entry.lockDocumentIDs)\n const hardDeleteIDs = deletable\n .filter(({ absorbedByBranch }) => !absorbedByBranch)\n .map(({ doc }) => doc.id)\n\n if (!isDeletingFromBranch) {\n // /////////////////////////////////////\n // Delete versions\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n await deleteCollectionVersions({\n slug: collectionConfig.slug,\n ids,\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete scheduled posts\n // /////////////////////////////////////\n\n if (hasScheduledPublishEnabled(collectionConfig) && hardDeleteIDs.length) {\n await deleteScheduledPublishJobs({\n slug: collectionConfig.slug,\n ids: hardDeleteIDs,\n payload,\n req,\n })\n }\n }\n\n // /////////////////////////////////////\n // Delete documents\n // /////////////////////////////////////\n\n const deletedInBatch: (number | string)[] = []\n const branchDeleteOutcomes = new Map<string, BranchDeleteOutcome>()\n const branchDeleteEntries: BranchDeleteEntry[] = []\n\n try {\n if (isDeletingFromBranch) {\n for (const entry of deletable) {\n const { absorbedByBranch, doc, fullDocument } = entry\n\n await storeDeleteFileCandidates({ fullDocument })\n branchDeleteEntries.push({\n ...entry,\n branchVersionIDs: await findBranchVersionIDs({ fullDocument }),\n })\n\n setBranchDeleteOperation({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: doc.id,\n isTombstoneExpected: absorbedByBranch,\n onResolved: (outcome) => {\n branchDeleteOutcomes.set(String(doc.id), outcome)\n },\n req,\n useAmbientTransaction: shouldCommit,\n })\n await payload.db.deleteOne({\n collection: collectionConfig.slug,\n req,\n returning: false,\n where: {\n id: {\n equals: doc.id,\n },\n },\n })\n markTransactionWrite({ req })\n\n const finalBranchDeleteOutcome = requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(doc.id)),\n })\n\n if (!finalBranchDeleteOutcome.tombstoned) {\n deletedDocumentIDs.set(String(doc.id), doc.id)\n }\n deletedInBatch.push(doc.id)\n }\n } else {\n await payload.db.deleteMany({\n collection: collectionConfig.slug,\n req,\n where: {\n id: {\n in: ids,\n },\n },\n })\n markTransactionWrite({ req })\n\n for (const id of ids) {\n deletedDocumentIDs.set(String(id), id)\n deletedInBatch.push(id)\n }\n }\n\n if (isDeletingFromBranch) {\n for (const { doc } of deletable) {\n const finalBranchDeleteOutcome = requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(doc.id)),\n })\n\n await runDeleteCleanup({\n fullDocument: finalBranchDeleteOutcome.doc as Doc,\n isTombstone: finalBranchDeleteOutcome.tombstoned,\n })\n }\n\n if (collectionConfig.versions) {\n await deleteCollectionVersions({\n slug: collectionConfig.slug,\n ids,\n payload,\n req,\n versionIDs: branchDeleteEntries.flatMap(({ branchVersionIDs }) => branchVersionIDs),\n })\n }\n\n const finalHardDeleteIDs = deletable\n .filter(({ doc }) => {\n const outcome = requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(doc.id)),\n })\n\n return !outcome.tombstoned\n })\n .map(({ doc }) => doc.id)\n\n if (hasScheduledPublishEnabled(collectionConfig) && finalHardDeleteIDs.length) {\n await deleteScheduledPublishJobs({\n slug: collectionConfig.slug,\n ids: finalHardDeleteIDs,\n payload,\n req,\n })\n }\n }\n\n await deleteDocumentLocks({\n collectionSlug: collectionConfig.slug,\n ids,\n lockDocumentIDs,\n req,\n })\n } catch (error) {\n didBatchDeleteFail = true\n\n if (shouldCommit) {\n await killTransaction(req)\n resetBranchState(req)\n\n for (const id of deletedInBatch) {\n deletedDocumentIDs.delete(String(id))\n }\n }\n\n if (hasCallerTransaction) {\n throw error\n }\n\n // The delete covers the whole batch, so a failure here belongs to the batch rather than to\n // any single document. Say so explicitly, otherwise one batch failure reads as N unrelated\n // per-document failures.\n const message = `Bulk delete failed for this batch of ${deletable.length} documents: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n\n for (const { doc } of deletable) {\n pushError(doc.id, error, message)\n }\n\n return results\n }\n\n if (collectionConfig.upload) {\n await scheduleUnreferencedFileCleanup({\n candidates: deletable.flatMap(({ doc }) => deletedFilesByID.get(doc.id) ?? []),\n collection: collectionConfig,\n req,\n })\n }\n\n if (hasBranchSharedTransaction) {\n for (const entry of deletable) {\n const resultDocument = isDeletingFromBranch\n ? (requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(entry.doc.id)),\n }).doc as Doc)\n : entry.doc\n\n try {\n results[entry.index] = await runAfterDeleteWork(resultDocument)\n } catch (error) {\n if (hasCallerTransaction) {\n throw error\n }\n\n didBatchDeleteFail = true\n await killTransaction(req)\n resetBranchState(req)\n results.fill(null)\n\n for (const id of deletedInBatch) {\n deletedDocumentIDs.delete(String(id))\n }\n\n for (const rolledBackEntry of deletable) {\n pushError(\n rolledBackEntry.doc.id,\n error,\n rolledBackEntry === entry\n ? undefined\n : `Bulk delete was rolled back because post-delete work failed for document ${entry.doc.id}.`,\n )\n }\n\n return results\n }\n }\n\n return results\n }\n\n const postDeleteResults = await Promise.all(\n deletable.map(async (entry) => {\n try {\n const resultDocument = isDeletingFromBranch\n ? (requireBranchDeleteOutcome({\n outcome: branchDeleteOutcomes.get(String(entry.doc.id)),\n }).doc as Doc)\n : entry.doc\n\n return {\n entry,\n result: await runAfterDeleteWork(resultDocument),\n status: 'fulfilled' as const,\n }\n } catch (error) {\n return { entry, error, status: 'rejected' as const }\n }\n }),\n )\n\n for (const outcome of postDeleteResults) {\n if (outcome.status === 'rejected') {\n pushError(outcome.entry.doc.id, outcome.error)\n } else {\n results[outcome.entry.index] = outcome.result\n }\n }\n\n return results\n }\n\n let awaitedDocs: (null | ResultDoc)[]\n const preparedDocuments = await prepareDocumentsForDelete()\n\n if (req.payload.db.bulkOperationsSingleTransaction) {\n // Process sequentially so that each document's transaction is isolated from the next\n awaitedDocs = []\n\n for (const preparedDocument of preparedDocuments) {\n awaitedDocs.push(await deleteDocumentIndividually(preparedDocument))\n }\n } else {\n awaitedDocs = await deleteDocumentsInBulk(preparedDocuments)\n }\n\n // /////////////////////////////////////\n // Delete Preferences\n // /////////////////////////////////////\n\n const deletedPreferenceIDs = [...deletedDocumentIDs.values()]\n\n if (deletedPreferenceIDs.length) {\n await deleteUserPreferences({\n collectionConfig,\n ids: deletedPreferenceIDs,\n payload,\n req,\n })\n }\n\n let result = {\n docs: awaitedDocs.filter((doc): doc is ResultDoc => Boolean(doc)),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'delete',\n overrideAccess,\n result,\n })\n\n if (cleanupScope) {\n if (didBatchDeleteFail) {\n clearDeferredCleanupScope({ req: args.req, scope: cleanupScope })\n } else {\n await flushDeferredCleanupScopeAfterOperation({ req, scope: cleanupScope })\n }\n }\n if (shouldCommit && !didBatchDeleteFail) {\n await commitTransaction(req)\n }\n\n if (hasFileOperationScope) {\n await completeFileOperationScope({ req })\n }\n\n if (isDeletingFromBranch) {\n refreshBranchState(req)\n }\n\n return result\n } catch (error: unknown) {\n if (cleanupScope) {\n clearDeferredCleanupScope({ req: args.req, scope: cleanupScope })\n }\n\n if (shouldCommit) {\n await killTransaction(args.req)\n }\n resetBranchState(args.req)\n\n if (hasFileOperationScope) {\n await abortFileOperationScope({ req: args.req })\n }\n throw error\n } finally {\n const managedDeletedUploads = args.req.context?._payloadManagedDeletedUploads as\n | Set<string>\n | undefined\n for (const identity of markedManagedDeletes) {\n managedDeletedUploads?.delete(identity)\n }\n if (managedDeletedUploads?.size === 0) {\n delete args.req.context._payloadManagedDeletedUploads\n }\n }\n}\n"],"names":["executeAccess","assertBranchMergeValidationWriteAllowed","refreshBranchState","resetBranchState","resolveBranch","assertBranchCreatedDeleteUnreferenced","assertBranchDeleteCanUseCallerTransaction","requireBranchDeleteOutcome","setBranchDeleteOperation","willBranchAbsorbDelete","MAIN_BRANCH","resolveBranchOwnVersions","combineQueries","validateQueryPaths","sanitizeWhereQuery","APIError","Locked","afterRead","deleteUserPreferences","deleteAssociatedFiles","collectDocumentDeleteFileCandidates","scheduleUnreferencedFileCleanup","abortFileOperationScope","beginFileOperationScope","completeFileOperationScope","appendNonTrashedFilter","assertNoValidationWrite","deleteDocumentLocks","getDocumentLockState","commitTransaction","hasScheduledPublishEnabled","httpStatus","initTransaction","isErrorPublic","killTransaction","resolveSelect","sanitizeSelect","beginDeferredCleanupScope","clearDeferredCleanupScope","flushDeferredCleanupScope","flushDeferredCleanupScopeAfterOperation","markTransactionWrite","deleteCollectionVersions","deleteScheduledPublishJobs","buildAfterOperation","buildBeforeOperation","deleteOperation","incomingArgs","args","cleanupScope","hasCallerTransaction","shouldCommit","req","collection","config","disableBulkDelete","overrideAccess","slug","hasFileOperationScope","Boolean","upload","payload","db","bulkOperationsSingleTransaction","markedManagedDeletes","Set","transactionID","disableTransaction","hasSharedTransaction","operation","collectionConfig","depth","overrideLock","populate","fallbackLocale","locale","select","incomingSelect","showHiddenFields","trash","where","BAD_REQUEST","accessResult","access","delete","fullWhere","enableTrash","fields","flattenedFields","docs","find","undefined","errors","didBatchDeleteFail","deletedFilesByID","Map","context","managedDeletedUploads","_payloadManagedDeletedUploads","deletedDocumentIDs","hasWriteCapableBeforeDeleteHooks","hooks","beforeDelete","length","branch","isDeletingFromBranch","branching","enabled","branchableCollections","has","hasBranchSharedTransaction","pushError","id","error","message","push","isPublic","Error","assertDeleteUnreferenced","doc","collectionSlug","runBeforeDeleteHooks","hook","storeDeleteFileCandidates","fullDocument","documentID","candidates","parentID","set","identity","JSON","stringify","String","add","findBranchVersionIDs","versions","findVersions","limit","pagination","map","runDeleteCleanup","isTombstone","absorbedByBranch","overrideDelete","runBeforeDeleteHooksInDocumentTransaction","entry","hookCleanupScope","hookShouldCommit","scope","prepareDocumentsForDelete","lockDocumentIDsByDocumentID","lockedDocumentIDs","ids","unlocked","forEach","index","initialCheckResults","Promise","all","docID","lockDocumentIDs","get","initiallyChecked","filter","hookResults","rolledBackEntry","hookCompleted","refreshedLockDocumentIDsByDocumentID","refreshedLockedDocumentIDs","lockCheckedAfterHooks","postHookCheckResults","runAfterDeleteWork","result","draft","global","auth","afterDelete","deleteDocumentIndividually","initiallyCheckedDocument","docCleanupScope","docShouldCommit","hasReachedWriteCapableStage","hasIndividualFileScope","branchDeleteOutcome","branchVersionIDs","isTombstoneExpected","onResolved","outcome","useAmbientTransaction","deleteOne","returning","equals","finalBranchDeleteOutcome","tombstoned","versionIDs","deleteDocumentsInBulk","preparedDocuments","results","Array","fill","deletable","cleanupResults","documentCleanupScope","flatMap","hardDeleteIDs","deletedInBatch","branchDeleteOutcomes","branchDeleteEntries","deleteMany","in","finalHardDeleteIDs","resultDocument","postDeleteResults","status","awaitedDocs","preparedDocument","deletedPreferenceIDs","values","size"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/operations/deleteByID.ts"],"sourcesContent":["import type { BranchDeleteOutcome } from '../../branching/tombstone.js'\nimport type { CollectionSlug, FindOptions } from '../../index.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type { DeferredCleanupScope } from '../../utilities/transactionCallbacks.js'\nimport type { Collection, DataFromCollectionSlug } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport {\n findCompetingShadow,\n isConcurrentShadowOperationError,\n retryConcurrentShadowOperation,\n} from '../../branching/createShadowRow.js'\nimport { assertBranchMergeValidationWriteAllowed } from '../../branching/mergeWriteGuard.js'\nimport {\n refreshBranchState,\n resetBranchState,\n resolveBranch,\n} from '../../branching/resolveBranch.js'\nimport {\n assertBranchCreatedDeleteUnreferenced,\n assertBranchDeleteCanUseCallerTransaction,\n requireBranchDeleteOutcome,\n setBranchDeleteOperation,\n setConcurrentBranchDelete,\n willBranchAbsorbDelete,\n} from '../../branching/tombstone.js'\nimport { branchField, MAIN_BRANCH } from '../../branching/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { deleteUserPreferences } from '../../preferences/deleteUserPreferences.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport {\n collectDocumentDeleteFileCandidates,\n collectStoredFiles,\n scheduleUnreferencedFileCleanup,\n} from '../../uploads/fileVersioning/cleanup.js'\nimport {\n abortFileOperationScope,\n beginFileOperationScope,\n completeFileOperationScope,\n} from '../../uploads/fileVersioning/fileOperationManager.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { assertNoValidationWrite } from '../../utilities/assertNoValidationWrite.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { hasScheduledPublishEnabled } from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport {\n beginDeferredCleanupScope,\n clearDeferredCleanupScope,\n flushDeferredCleanupScopeAfterOperation,\n hasActiveDeferredCleanupScope,\n} from '../../utilities/transactionCallbacks.js'\nimport { markTransactionWrite } from '../../utilities/transactionMutationTracker.js'\nimport { deleteCollectionVersions } from '../../versions/deleteCollectionVersions.js'\nimport { deleteScheduledPublishJobs } from '../../versions/deleteScheduledPublishJobs.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nimport {\n commitOperationRetryRequestContext,\n createOperationRetryRequest,\n shouldRetryOperationRequest,\n} from './utilities/createOperationRetryRequest.js'\n\nexport type Arguments<TSlug extends CollectionSlug, TSelect extends SelectType> = {\n collection: Collection\n depth?: number\n disableTransaction?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n} & Pick<FindOptions<TSlug, TSelect>, 'select'>\n\nexport const deleteByIDOperation = async <TSlug extends CollectionSlug, TSelect extends SelectType>(\n incomingArgs: Arguments<TSlug, TSelect>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const hasCallerTransaction = Boolean(await incomingArgs.req.transactionID)\n const branch = resolveBranch(incomingArgs.req)\n let didOwnAttemptTransaction = false\n let didReachFinalCommit = false\n let isRetrySafe = false\n let concurrentDeleteRetryError: unknown\n let concurrentDeleteWinnerID: number | string | undefined\n\n return retryConcurrentShadowOperation({\n onRetry: async ({ error }) => {\n if (!isConcurrentShadowOperationError(error) || branch === MAIN_BRANCH) {\n return\n }\n\n concurrentDeleteWinnerID = undefined\n concurrentDeleteRetryError = undefined\n\n const winner = await findCompetingShadow({\n branch,\n collectionSlug: incomingArgs.collection.config.slug,\n docID: incomingArgs.id,\n operation: 'delete',\n req: incomingArgs.req,\n })\n\n const winnerID = winner?.id\n\n if (typeof winnerID === 'number' || typeof winnerID === 'string') {\n concurrentDeleteRetryError = error\n concurrentDeleteWinnerID = winnerID\n }\n },\n operation: async () => {\n didOwnAttemptTransaction = false\n didReachFinalCommit = false\n isRetrySafe = false\n\n const shouldReuseParentRequest =\n incomingArgs.disableTransaction && hasActiveDeferredCleanupScope({ req: incomingArgs.req })\n const retryRequest =\n hasCallerTransaction || shouldReuseParentRequest\n ? undefined\n : await createOperationRetryRequest({ req: incomingArgs.req })\n\n isRetrySafe = retryRequest?.isRetrySafe ?? false\n const attemptArgs = retryRequest\n ? {\n ...incomingArgs,\n req: retryRequest.req,\n }\n : incomingArgs\n\n const result = await deleteByIDOperationAttempt({\n concurrentDeleteRetryError,\n concurrentDeleteWinnerID,\n hasCallerTransaction,\n incomingArgs: attemptArgs,\n reportFinalCommit: () => {\n didReachFinalCommit = true\n },\n reportTransactionOwnership: ({ isOperationTransaction }) => {\n didOwnAttemptTransaction = isOperationTransaction\n },\n })\n\n if (retryRequest?.isRetrySafe) {\n commitOperationRetryRequestContext({ req: attemptArgs.req })\n }\n\n return result\n },\n shouldRetry: ({ error }) =>\n shouldRetryOperationRequest({\n didOwnAttemptTransaction,\n didReachFinalCommit,\n error,\n hasCallerTransaction,\n isRetrySafe,\n }),\n })\n}\n\nconst deleteByIDOperationAttempt = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectType,\n>({\n concurrentDeleteRetryError,\n concurrentDeleteWinnerID,\n hasCallerTransaction,\n incomingArgs,\n reportFinalCommit,\n reportTransactionOwnership,\n}: {\n concurrentDeleteRetryError?: unknown\n concurrentDeleteWinnerID?: number | string\n hasCallerTransaction: boolean\n incomingArgs: Arguments<TSlug, TSelect>\n reportFinalCommit: () => void\n reportTransactionOwnership: (args: { isOperationTransaction: boolean }) => void\n}): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n let cleanupScope: DeferredCleanupScope | null = null\n let shouldCommit = false\n const hasFileOperationScope = Boolean(args.collection.config.upload)\n let managedDeleteIdentity: string | undefined\n\n assertBranchMergeValidationWriteAllowed({ req: args.req })\n\n if (hasFileOperationScope) {\n beginFileOperationScope({ req: args.req })\n }\n\n assertNoValidationWrite(args.req)\n\n try {\n shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n reportTransactionOwnership({ isOperationTransaction: shouldCommit })\n cleanupScope = await beginDeferredCleanupScope({ req: args.req })\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'delete',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n overrideAccess,\n overrideLock,\n populate,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n const isDeletingFromBranch =\n Boolean(\n config.branching?.enabled &&\n config.branching.branchableCollections.has(collectionConfig.slug),\n ) && resolveBranch(req) !== MAIN_BRANCH\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess(\n { id, slug: collectionConfig.slug, req },\n collectionConfig.access.delete,\n )\n : true\n const hasWhereAccess = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n let where = combineQueries({ id: { equals: id } }, accessResults)\n\n // Exclude trashed documents when trash: false\n where = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where,\n })\n\n let docToDelete = await req.payload.db.findOne({\n collection: collectionConfig.slug,\n locale: req.locale!,\n req,\n where,\n })\n\n if (!docToDelete && concurrentDeleteWinnerID !== undefined) {\n docToDelete = await req.payload.db.findOne({\n branch: false,\n collection: collectionConfig.slug,\n locale: req.locale!,\n req,\n where,\n })\n }\n\n if (!docToDelete && !hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (!docToDelete && hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n\n const documentToDelete = docToDelete as Record<string, unknown>\n\n const branch = resolveBranch(req)\n const isBranchingDocument =\n branch !== MAIN_BRANCH &&\n req.payload.config.branching?.branchableCollections.has(collectionConfig.slug)\n const isDeletingUntouchedBranchDocument =\n isBranchingDocument && documentToDelete[branchField] !== branch\n\n if (hasCallerTransaction && isBranchingDocument) {\n await assertBranchDeleteCanUseCallerTransaction({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: id,\n req,\n })\n }\n\n await assertBranchCreatedDeleteUnreferenced({\n collectionSlug: collectionConfig.slug,\n doc: documentToDelete,\n req,\n })\n\n // /////////////////////////////////////\n // beforeDelete - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeDelete?.length) {\n for (const hook of collectionConfig.hooks.beforeDelete) {\n await hook({\n id,\n collection: collectionConfig,\n context: req.context,\n req,\n })\n }\n }\n\n await assertBranchCreatedDeleteUnreferenced({\n collectionSlug: collectionConfig.slug,\n doc: documentToDelete,\n req,\n })\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked and cannot be deleted.`,\n overrideLock,\n req,\n })\n\n // A delete on a branch becomes a tombstone, and main keeps its row — so the\n // cascades below, which all address the canonical document, would strip data\n // main still depends on. The version cascade is scoped to the branch rather\n // than skipped, since a branch's own version rows do go with it.\n const absorbedByBranch = await willBranchAbsorbDelete({\n collectionSlug: collectionConfig.slug,\n doc: documentToDelete,\n req,\n })\n\n let deletedFiles = collectionConfig.upload\n ? await collectDocumentDeleteFileCandidates({\n collection: collectionConfig,\n doc: docToDelete!,\n parentID: id,\n req,\n })\n : []\n\n if (deletedFiles.length) {\n managedDeleteIdentity = JSON.stringify([collectionConfig.slug, String(id)])\n req.context ??= {}\n const managedDeletedUploads = (req.context._payloadManagedDeletedUploads ??=\n new Set()) as Set<string>\n managedDeletedUploads.add(managedDeleteIdentity)\n }\n\n if (!isBranchingDocument && !absorbedByBranch) {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: documentToDelete,\n overrideDelete: true,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete versions\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n await deleteCollectionVersions({\n id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete scheduled posts\n // /////////////////////////////////////\n if (!isBranchingDocument && hasScheduledPublishEnabled(collectionConfig) && !absorbedByBranch) {\n await deleteScheduledPublishJobs({\n id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'delete',\n req,\n select: incomingSelect,\n }),\n })\n\n // /////////////////////////////////////\n // Delete document\n // /////////////////////////////////////\n\n if (concurrentDeleteWinnerID !== undefined && concurrentDeleteRetryError !== undefined) {\n setConcurrentBranchDelete({\n branch,\n collectionSlug: collectionConfig.slug,\n doc: documentToDelete,\n docID: id,\n req,\n retryError: concurrentDeleteRetryError,\n winnerID: concurrentDeleteWinnerID,\n })\n }\n let branchDeleteOutcome: BranchDeleteOutcome | undefined\n if (isBranchingDocument) {\n setBranchDeleteOperation({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: id,\n isTombstoneExpected: absorbedByBranch,\n onResolved: (outcome) => {\n branchDeleteOutcome = outcome\n },\n req,\n useAmbientTransaction: shouldCommit,\n })\n }\n\n let result: DataFromCollectionSlug<TSlug> = await req.payload.db.deleteOne({\n collection: collectionConfig.slug,\n req,\n select,\n where: { id: { equals: id } },\n })\n markTransactionWrite({ req })\n\n const finalBranchDeleteOutcome = isBranchingDocument\n ? requireBranchDeleteOutcome({ outcome: branchDeleteOutcome })\n : ({ doc: documentToDelete, tombstoned: false } as const)\n\n if (\n collectionConfig.upload &&\n finalBranchDeleteOutcome.tombstoned &&\n isDeletingUntouchedBranchDocument\n ) {\n deletedFiles = await collectStoredFiles({\n collection: collectionConfig,\n doc: finalBranchDeleteOutcome.doc,\n req,\n })\n }\n\n if (isBranchingDocument && !finalBranchDeleteOutcome.tombstoned) {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: finalBranchDeleteOutcome.doc,\n overrideDelete: true,\n req,\n })\n\n if (hasScheduledPublishEnabled(collectionConfig)) {\n await deleteScheduledPublishJobs({\n id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n }\n\n if (collectionConfig.upload) {\n await scheduleUnreferencedFileCleanup({\n candidates: deletedFiles,\n collection: collectionConfig,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\n }\n\n // /////////////////////////////////////\n // Delete Preferences\n // /////////////////////////////////////\n\n if (!finalBranchDeleteOutcome.tombstoned) {\n await deleteUserPreferences({\n collectionConfig,\n ids: [id],\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: result,\n draft: undefined!,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterDelete - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterDelete?.length) {\n for (const hook of collectionConfig.hooks.afterDelete) {\n result =\n (await hook({\n id,\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'deleteByID',\n overrideAccess,\n result,\n })\n\n // /////////////////////////////////////\n // 8. Return results\n // /////////////////////////////////////\n\n if (cleanupScope) {\n await flushDeferredCleanupScopeAfterOperation({ req, scope: cleanupScope })\n }\n if (shouldCommit) {\n reportFinalCommit()\n await commitTransaction(req)\n }\n\n if (hasFileOperationScope) {\n await completeFileOperationScope({ req })\n }\n\n if (isDeletingFromBranch) {\n refreshBranchState(req)\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n } catch (error: unknown) {\n if (cleanupScope) {\n clearDeferredCleanupScope({ req: args.req, scope: cleanupScope })\n }\n\n if (shouldCommit) {\n await killTransaction(args.req)\n }\n resetBranchState(args.req)\n\n if (hasFileOperationScope) {\n await abortFileOperationScope({ req: args.req })\n }\n throw error\n } finally {\n if (managedDeleteIdentity) {\n const managedDeletedUploads = args.req.context?._payloadManagedDeletedUploads as\n | Set<string>\n | undefined\n managedDeletedUploads?.delete(managedDeleteIdentity)\n if (managedDeletedUploads?.size === 0) {\n delete args.req.context._payloadManagedDeletedUploads\n }\n }\n }\n}\n"],"names":["executeAccess","hasWhereAccessResult","findCompetingShadow","isConcurrentShadowOperationError","retryConcurrentShadowOperation","assertBranchMergeValidationWriteAllowed","refreshBranchState","resetBranchState","resolveBranch","assertBranchCreatedDeleteUnreferenced","assertBranchDeleteCanUseCallerTransaction","requireBranchDeleteOutcome","setBranchDeleteOperation","setConcurrentBranchDelete","willBranchAbsorbDelete","branchField","MAIN_BRANCH","combineQueries","Forbidden","NotFound","afterRead","deleteUserPreferences","deleteAssociatedFiles","collectDocumentDeleteFileCandidates","collectStoredFiles","scheduleUnreferencedFileCleanup","abortFileOperationScope","beginFileOperationScope","completeFileOperationScope","appendNonTrashedFilter","assertNoValidationWrite","checkDocumentLockStatus","commitTransaction","hasScheduledPublishEnabled","initTransaction","killTransaction","resolveSelect","sanitizeSelect","beginDeferredCleanupScope","clearDeferredCleanupScope","flushDeferredCleanupScopeAfterOperation","hasActiveDeferredCleanupScope","markTransactionWrite","deleteCollectionVersions","deleteScheduledPublishJobs","buildAfterOperation","buildBeforeOperation","commitOperationRetryRequestContext","createOperationRetryRequest","shouldRetryOperationRequest","deleteByIDOperation","incomingArgs","hasCallerTransaction","Boolean","req","transactionID","branch","didOwnAttemptTransaction","didReachFinalCommit","isRetrySafe","concurrentDeleteRetryError","concurrentDeleteWinnerID","onRetry","error","undefined","winner","collectionSlug","collection","config","slug","docID","id","operation","winnerID","shouldReuseParentRequest","disableTransaction","retryRequest","attemptArgs","result","deleteByIDOperationAttempt","reportFinalCommit","reportTransactionOwnership","isOperationTransaction","shouldRetry","args","cleanupScope","shouldCommit","hasFileOperationScope","upload","managedDeleteIdentity","overrideAccess","collectionConfig","depth","overrideLock","populate","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","trash","isDeletingFromBranch","branching","enabled","branchableCollections","has","accessResults","access","delete","hasWhereAccess","where","equals","enableTrash","docToDelete","db","findOne","t","documentToDelete","isBranchingDocument","isDeletingUntouchedBranchDocument","doc","hooks","beforeDelete","length","hook","context","lockErrorMessage","absorbedByBranch","deletedFiles","parentID","JSON","stringify","String","managedDeletedUploads","_payloadManagedDeletedUploads","Set","add","overrideDelete","versions","fields","flattenedFields","retryError","branchDeleteOutcome","isTombstoneExpected","onResolved","outcome","useAmbientTransaction","deleteOne","finalBranchDeleteOutcome","tombstoned","candidates","auth","ids","draft","global","afterDelete","scope","size"],"mappings":"AAWA,SAASA,aAAa,QAAQ,8BAA6B;AAC3D,SAASC,oBAAoB,QAAQ,sBAAqB;AAC1D,SACEC,mBAAmB,EACnBC,gCAAgC,EAChCC,8BAA8B,QACzB,qCAAoC;AAC3C,SAASC,uCAAuC,QAAQ,qCAAoC;AAC5F,SACEC,kBAAkB,EAClBC,gBAAgB,EAChBC,aAAa,QACR,mCAAkC;AACzC,SACEC,qCAAqC,EACrCC,yCAAyC,EACzCC,0BAA0B,EAC1BC,wBAAwB,EACxBC,yBAAyB,EACzBC,sBAAsB,QACjB,+BAA8B;AACrC,SAASC,WAAW,EAAEC,WAAW,QAAQ,2BAA0B;AACnE,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,SAAS,EAAEC,QAAQ,QAAQ,wBAAuB;AAC3D,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,qBAAqB,QAAQ,6CAA4C;AAClF,SAASC,qBAAqB,QAAQ,yCAAwC;AAC9E,SACEC,mCAAmC,EACnCC,kBAAkB,EAClBC,+BAA+B,QAC1B,0CAAyC;AAChD,SACEC,uBAAuB,EACvBC,uBAAuB,EACvBC,0BAA0B,QACrB,uDAAsD;AAC7D,SAASC,sBAAsB,QAAQ,4CAA2C;AAClF,SAASC,uBAAuB,QAAQ,6CAA4C;AACpF,SAASC,uBAAuB,QAAQ,6CAA4C;AACpF,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,0BAA0B,QAAQ,uCAAsC;AACjF,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,aAAa,QAAQ,mCAAkC;AAChE,SAASC,cAAc,QAAQ,oCAAmC;AAClE,SACEC,yBAAyB,EACzBC,yBAAyB,EACzBC,uCAAuC,EACvCC,6BAA6B,QACxB,0CAAyC;AAChD,SAASC,oBAAoB,QAAQ,gDAA+C;AACpF,SAASC,wBAAwB,QAAQ,6CAA4C;AACrF,SAASC,0BAA0B,QAAQ,+CAA8C;AACzF,SAASC,mBAAmB,QAAQ,qCAAoC;AACxE,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SACEC,kCAAkC,EAClCC,2BAA2B,EAC3BC,2BAA2B,QACtB,6CAA4C;AAenD,OAAO,MAAMC,sBAAsB,OACjCC;IAEA,MAAMC,uBAAuBC,QAAQ,MAAMF,aAAaG,GAAG,CAACC,aAAa;IACzE,MAAMC,SAAShD,cAAc2C,aAAaG,GAAG;IAC7C,IAAIG,2BAA2B;IAC/B,IAAIC,sBAAsB;IAC1B,IAAIC,cAAc;IAClB,IAAIC;IACJ,IAAIC;IAEJ,OAAOzD,+BAA+B;QACpC0D,SAAS,OAAO,EAAEC,KAAK,EAAE;YACvB,IAAI,CAAC5D,iCAAiC4D,UAAUP,WAAWxC,aAAa;gBACtE;YACF;YAEA6C,2BAA2BG;YAC3BJ,6BAA6BI;YAE7B,MAAMC,SAAS,MAAM/D,oBAAoB;gBACvCsD;gBACAU,gBAAgBf,aAAagB,UAAU,CAACC,MAAM,CAACC,IAAI;gBACnDC,OAAOnB,aAAaoB,EAAE;gBACtBC,WAAW;gBACXlB,KAAKH,aAAaG,GAAG;YACvB;YAEA,MAAMmB,WAAWR,QAAQM;YAEzB,IAAI,OAAOE,aAAa,YAAY,OAAOA,aAAa,UAAU;gBAChEb,6BAA6BG;gBAC7BF,2BAA2BY;YAC7B;QACF;QACAD,WAAW;YACTf,2BAA2B;YAC3BC,sBAAsB;YACtBC,cAAc;YAEd,MAAMe,2BACJvB,aAAawB,kBAAkB,IAAIlC,8BAA8B;gBAAEa,KAAKH,aAAaG,GAAG;YAAC;YAC3F,MAAMsB,eACJxB,wBAAwBsB,2BACpBV,YACA,MAAMhB,4BAA4B;gBAAEM,KAAKH,aAAaG,GAAG;YAAC;YAEhEK,cAAciB,cAAcjB,eAAe;YAC3C,MAAMkB,cAAcD,eAChB;gBACE,GAAGzB,YAAY;gBACfG,KAAKsB,aAAatB,GAAG;YACvB,IACAH;YAEJ,MAAM2B,SAAS,MAAMC,2BAA2B;gBAC9CnB;gBACAC;gBACAT;gBACAD,cAAc0B;gBACdG,mBAAmB;oBACjBtB,sBAAsB;gBACxB;gBACAuB,4BAA4B,CAAC,EAAEC,sBAAsB,EAAE;oBACrDzB,2BAA2ByB;gBAC7B;YACF;YAEA,IAAIN,cAAcjB,aAAa;gBAC7BZ,mCAAmC;oBAAEO,KAAKuB,YAAYvB,GAAG;gBAAC;YAC5D;YAEA,OAAOwB;QACT;QACAK,aAAa,CAAC,EAAEpB,KAAK,EAAE,GACrBd,4BAA4B;gBAC1BQ;gBACAC;gBACAK;gBACAX;gBACAO;YACF;IACJ;AACF,EAAC;AAED,MAAMoB,6BAA6B,OAGjC,EACAnB,0BAA0B,EAC1BC,wBAAwB,EACxBT,oBAAoB,EACpBD,YAAY,EACZ6B,iBAAiB,EACjBC,0BAA0B,EAQ3B;IACC,IAAIG,OAAOjC;IACX,IAAIkC,eAA4C;IAChD,IAAIC,eAAe;IACnB,MAAMC,wBAAwBlC,QAAQ+B,KAAKjB,UAAU,CAACC,MAAM,CAACoB,MAAM;IACnE,IAAIC;IAEJpF,wCAAwC;QAAEiD,KAAK8B,KAAK9B,GAAG;IAAC;IAExD,IAAIiC,uBAAuB;QACzB5D,wBAAwB;YAAE2B,KAAK8B,KAAK9B,GAAG;QAAC;IAC1C;IAEAxB,wBAAwBsD,KAAK9B,GAAG;IAEhC,IAAI;QACFgC,eAAe,CAACF,KAAKT,kBAAkB,IAAK,MAAMzC,gBAAgBkD,KAAK9B,GAAG;QAC1E2B,2BAA2B;YAAEC,wBAAwBI;QAAa;QAClED,eAAe,MAAM/C,0BAA0B;YAAEgB,KAAK8B,KAAK9B,GAAG;QAAC;QAE/D,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExC8B,OAAO,MAAMtC,qBAAqB;YAChCsC;YACAjB,YAAYiB,KAAKjB,UAAU,CAACC,MAAM;YAClCI,WAAW;YACXkB,gBAAgBN,KAAKM,cAAc;QACrC;QAEA,MAAM,EACJnB,EAAE,EACFJ,YAAY,EAAEC,QAAQuB,gBAAgB,EAAE,EACxCC,KAAK,EACLF,cAAc,EACdG,YAAY,EACZC,QAAQ,EACRxC,KAAK,EACHyC,cAAc,EACdC,MAAM,EACNC,SAAS,EAAE7B,MAAM,EAAE,EACnB6B,OAAO,EACR,EACD3C,GAAG,EACH4C,QAAQC,cAAc,EACtBC,gBAAgB,EAChBC,QAAQ,KAAK,EACd,GAAGjB;QACJ,MAAMkB,uBACJjD,QACEe,OAAOmC,SAAS,EAAEC,WAChBpC,OAAOmC,SAAS,CAACE,qBAAqB,CAACC,GAAG,CAACf,iBAAiBtB,IAAI,MAC/D7D,cAAc8C,SAAStC;QAE9B,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,MAAM2F,gBAAgB,CAACjB,iBACnB,MAAM1F,cACJ;YAAEuE;YAAIF,MAAMsB,iBAAiBtB,IAAI;YAAEf;QAAI,GACvCqC,iBAAiBiB,MAAM,CAACC,MAAM,IAEhC;QACJ,MAAMC,iBAAiB7G,qBAAqB0G;QAE5C,wCAAwC;QACxC,oBAAoB;QACpB,wCAAwC;QAExC,IAAII,QAAQ9F,eAAe;YAAEsD,IAAI;gBAAEyC,QAAQzC;YAAG;QAAE,GAAGoC;QAEnD,8CAA8C;QAC9CI,QAAQlF,uBAAuB;YAC7BoF,aAAatB,iBAAiBU,KAAK;YACnCA;YACAU;QACF;QAEA,IAAIG,cAAc,MAAM5D,IAAI2C,OAAO,CAACkB,EAAE,CAACC,OAAO,CAAC;YAC7CjD,YAAYwB,iBAAiBtB,IAAI;YACjC2B,QAAQ1C,IAAI0C,MAAM;YAClB1C;YACAyD;QACF;QAEA,IAAI,CAACG,eAAerD,6BAA6BG,WAAW;YAC1DkD,cAAc,MAAM5D,IAAI2C,OAAO,CAACkB,EAAE,CAACC,OAAO,CAAC;gBACzC5D,QAAQ;gBACRW,YAAYwB,iBAAiBtB,IAAI;gBACjC2B,QAAQ1C,IAAI0C,MAAM;gBAClB1C;gBACAyD;YACF;QACF;QAEA,IAAI,CAACG,eAAe,CAACJ,gBAAgB;YACnC,MAAM,IAAI3F,SAASmC,IAAI+D,CAAC;QAC1B;QACA,IAAI,CAACH,eAAeJ,gBAAgB;YAClC,MAAM,IAAI5F,UAAUoC,IAAI+D,CAAC;QAC3B;QAEA,MAAMC,mBAAmBJ;QAEzB,MAAM1D,SAAShD,cAAc8C;QAC7B,MAAMiE,sBACJ/D,WAAWxC,eACXsC,IAAI2C,OAAO,CAAC7B,MAAM,CAACmC,SAAS,EAAEE,sBAAsBC,IAAIf,iBAAiBtB,IAAI;QAC/E,MAAMmD,oCACJD,uBAAuBD,gBAAgB,CAACvG,YAAY,KAAKyC;QAE3D,IAAIJ,wBAAwBmE,qBAAqB;YAC/C,MAAM7G,0CAA0C;gBAC9C8C;gBACAU,gBAAgByB,iBAAiBtB,IAAI;gBACrCC,OAAOC;gBACPjB;YACF;QACF;QAEA,MAAM7C,sCAAsC;YAC1CyD,gBAAgByB,iBAAiBtB,IAAI;YACrCoD,KAAKH;YACLhE;QACF;QAEA,wCAAwC;QACxC,4BAA4B;QAC5B,wCAAwC;QAExC,IAAIqC,iBAAiB+B,KAAK,EAAEC,cAAcC,QAAQ;YAChD,KAAK,MAAMC,QAAQlC,iBAAiB+B,KAAK,CAACC,YAAY,CAAE;gBACtD,MAAME,KAAK;oBACTtD;oBACAJ,YAAYwB;oBACZmC,SAASxE,IAAIwE,OAAO;oBACpBxE;gBACF;YACF;QACF;QAEA,MAAM7C,sCAAsC;YAC1CyD,gBAAgByB,iBAAiBtB,IAAI;YACrCoD,KAAKH;YACLhE;QACF;QAEA,wCAAwC;QACxC,sCAAsC;QACtC,wCAAwC;QAExC,MAAMvB,wBAAwB;YAC5BwC;YACAL,gBAAgByB,iBAAiBtB,IAAI;YACrC0D,kBAAkB,CAAC,iBAAiB,EAAExD,GAAG,2CAA2C,CAAC;YACrFsB;YACAvC;QACF;QAEA,4EAA4E;QAC5E,6EAA6E;QAC7E,4EAA4E;QAC5E,iEAAiE;QACjE,MAAM0E,mBAAmB,MAAMlH,uBAAuB;YACpDoD,gBAAgByB,iBAAiBtB,IAAI;YACrCoD,KAAKH;YACLhE;QACF;QAEA,IAAI2E,eAAetC,iBAAiBH,MAAM,GACtC,MAAMjE,oCAAoC;YACxC4C,YAAYwB;YACZ8B,KAAKP;YACLgB,UAAU3D;YACVjB;QACF,KACA,EAAE;QAEN,IAAI2E,aAAaL,MAAM,EAAE;YACvBnC,wBAAwB0C,KAAKC,SAAS,CAAC;gBAACzC,iBAAiBtB,IAAI;gBAAEgE,OAAO9D;aAAI;YAC1EjB,IAAIwE,OAAO,KAAK,CAAC;YACjB,MAAMQ,wBAAyBhF,IAAIwE,OAAO,CAACS,6BAA6B,KACtE,IAAIC;YACNF,sBAAsBG,GAAG,CAAChD;QAC5B;QAEA,IAAI,CAAC8B,uBAAuB,CAACS,kBAAkB;YAC7C,MAAM1G,sBAAsB;gBAC1BqE;gBACAvB;gBACAqD,KAAKH;gBACLoB,gBAAgB;gBAChBpF;YACF;QACF;QAEA,wCAAwC;QACxC,kBAAkB;QAClB,wCAAwC;QAExC,IAAIqC,iBAAiBgD,QAAQ,EAAE;YAC7B,MAAMhG,yBAAyB;gBAC7B4B;gBACAF,MAAMsB,iBAAiBtB,IAAI;gBAC3B4B;gBACA3C;YACF;QACF;QAEA,wCAAwC;QACxC,yBAAyB;QACzB,wCAAwC;QACxC,IAAI,CAACiE,uBAAuBtF,2BAA2B0D,qBAAqB,CAACqC,kBAAkB;YAC7F,MAAMpF,2BAA2B;gBAC/B2B;gBACAF,MAAMsB,iBAAiBtB,IAAI;gBAC3B4B;gBACA3C;YACF;QACF;QAEA,MAAM4C,SAAS7D,eAAe;YAC5BuG,QAAQjD,iBAAiBkD,eAAe;YACxC3C,QAAQ9D,cAAc;gBACpBgC,QAAQuB,iBAAiBO,MAAM;gBAC/B1B,WAAW;gBACXlB;gBACA4C,QAAQC;YACV;QACF;QAEA,wCAAwC;QACxC,kBAAkB;QAClB,wCAAwC;QAExC,IAAItC,6BAA6BG,aAAaJ,+BAA+BI,WAAW;YACtFnD,0BAA0B;gBACxB2C;gBACAU,gBAAgByB,iBAAiBtB,IAAI;gBACrCoD,KAAKH;gBACLhD,OAAOC;gBACPjB;gBACAwF,YAAYlF;gBACZa,UAAUZ;YACZ;QACF;QACA,IAAIkF;QACJ,IAAIxB,qBAAqB;YACvB3G,yBAAyB;gBACvB4C;gBACAU,gBAAgByB,iBAAiBtB,IAAI;gBACrCC,OAAOC;gBACPyE,qBAAqBhB;gBACrBiB,YAAY,CAACC;oBACXH,sBAAsBG;gBACxB;gBACA5F;gBACA6F,uBAAuB7D;YACzB;QACF;QAEA,IAAIR,SAAwC,MAAMxB,IAAI2C,OAAO,CAACkB,EAAE,CAACiC,SAAS,CAAC;YACzEjF,YAAYwB,iBAAiBtB,IAAI;YACjCf;YACA4C;YACAa,OAAO;gBAAExC,IAAI;oBAAEyC,QAAQzC;gBAAG;YAAE;QAC9B;QACA7B,qBAAqB;YAAEY;QAAI;QAE3B,MAAM+F,2BAA2B9B,sBAC7B5G,2BAA2B;YAAEuI,SAASH;QAAoB,KACzD;YAAEtB,KAAKH;YAAkBgC,YAAY;QAAM;QAEhD,IACE3D,iBAAiBH,MAAM,IACvB6D,yBAAyBC,UAAU,IACnC9B,mCACA;YACAS,eAAe,MAAMzG,mBAAmB;gBACtC2C,YAAYwB;gBACZ8B,KAAK4B,yBAAyB5B,GAAG;gBACjCnE;YACF;QACF;QAEA,IAAIiE,uBAAuB,CAAC8B,yBAAyBC,UAAU,EAAE;YAC/D,MAAMhI,sBAAsB;gBAC1BqE;gBACAvB;gBACAqD,KAAK4B,yBAAyB5B,GAAG;gBACjCiB,gBAAgB;gBAChBpF;YACF;YAEA,IAAIrB,2BAA2B0D,mBAAmB;gBAChD,MAAM/C,2BAA2B;oBAC/B2B;oBACAF,MAAMsB,iBAAiBtB,IAAI;oBAC3B4B;oBACA3C;gBACF;YACF;QACF;QAEA,IAAIqC,iBAAiBH,MAAM,EAAE;YAC3B,MAAM/D,gCAAgC;gBACpC8H,YAAYtB;gBACZ9D,YAAYwB;gBACZrC;YACF;QACF;QAEA,wCAAwC;QACxC,+CAA+C;QAC/C,wCAAwC;QAExC,IAAIqC,iBAAiB6D,IAAI,EAAE;YACzB1E,SAAS;gBAAE,GAAGA,MAAM;gBAAEX,YAAYwB,iBAAiBtB,IAAI;YAAC;QAC1D;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExC,IAAI,CAACgF,yBAAyBC,UAAU,EAAE;YACxC,MAAMjI,sBAAsB;gBAC1BsE;gBACA8D,KAAK;oBAAClF;iBAAG;gBACT0B;gBACA3C;YACF;QACF;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExCwB,SAAS,MAAM1D,UAAU;YACvB+C,YAAYwB;YACZmC,SAASxE,IAAIwE,OAAO;YACpBlC,OAAOA;YACP6B,KAAK3C;YACL4E,OAAO1F;YACP+B,gBAAgBA;YAChB4D,QAAQ;YACR3D,QAAQA;YACRN,gBAAgBA;YAChBI;YACAxC;YACA4C;YACAE,kBAAkBA;QACpB;QAEA,wCAAwC;QACxC,yBAAyB;QACzB,wCAAwC;QAExC,IAAIT,iBAAiB+B,KAAK,EAAEtG,WAAWwG,QAAQ;YAC7C,KAAK,MAAMC,QAAQlC,iBAAiB+B,KAAK,CAACtG,SAAS,CAAE;gBACnD0D,SACE,AAAC,MAAM+C,KAAK;oBACV1D,YAAYwB;oBACZmC,SAASxE,IAAIwE,OAAO;oBACpBL,KAAK3C;oBACLY;oBACApC;gBACF,MAAOwB;YACX;QACF;QAEA,wCAAwC;QACxC,2BAA2B;QAC3B,wCAAwC;QAExC,IAAIa,iBAAiB+B,KAAK,EAAEkC,aAAahC,QAAQ;YAC/C,KAAK,MAAMC,QAAQlC,iBAAiB+B,KAAK,CAACkC,WAAW,CAAE;gBACrD9E,SACE,AAAC,MAAM+C,KAAK;oBACVtD;oBACAJ,YAAYwB;oBACZmC,SAASxE,IAAIwE,OAAO;oBACpBL,KAAK3C;oBACLxB;gBACF,MAAOwB;YACX;QACF;QAEA,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExCA,SAAS,MAAMjC,oBAAoB;YACjCuC;YACAjB,YAAYwB;YACZnB,WAAW;YACXkB;YACAZ;QACF;QAEA,wCAAwC;QACxC,oBAAoB;QACpB,wCAAwC;QAExC,IAAIO,cAAc;YAChB,MAAM7C,wCAAwC;gBAAEc;gBAAKuG,OAAOxE;YAAa;QAC3E;QACA,IAAIC,cAAc;YAChBN;YACA,MAAMhD,kBAAkBsB;QAC1B;QAEA,IAAIiC,uBAAuB;YACzB,MAAM3D,2BAA2B;gBAAE0B;YAAI;QACzC;QAEA,IAAIgD,sBAAsB;YACxBhG,mBAAmBgD;QACrB;QAEA,OAAOwB;IACT,EAAE,OAAOf,OAAgB;QACvB,IAAIsB,cAAc;YAChB9C,0BAA0B;gBAAEe,KAAK8B,KAAK9B,GAAG;gBAAEuG,OAAOxE;YAAa;QACjE;QAEA,IAAIC,cAAc;YAChB,MAAMnD,gBAAgBiD,KAAK9B,GAAG;QAChC;QACA/C,iBAAiB6E,KAAK9B,GAAG;QAEzB,IAAIiC,uBAAuB;YACzB,MAAM7D,wBAAwB;gBAAE4B,KAAK8B,KAAK9B,GAAG;YAAC;QAChD;QACA,MAAMS;IACR,SAAU;QACR,IAAI0B,uBAAuB;YACzB,MAAM6C,wBAAwBlD,KAAK9B,GAAG,CAACwE,OAAO,EAAES;YAGhDD,uBAAuBzB,OAAOpB;YAC9B,IAAI6C,uBAAuBwB,SAAS,GAAG;gBACrC,OAAO1E,KAAK9B,GAAG,CAACwE,OAAO,CAACS,6BAA6B;YACvD;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/collections/operations/deleteByID.ts"],"sourcesContent":["import type { BranchDeleteOutcome } from '../../branching/tombstone.js'\nimport type { CollectionSlug, FindOptions } from '../../index.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type { DeferredCleanupScope } from '../../utilities/transactionCallbacks.js'\nimport type { Collection, DataFromCollectionSlug } from '../config/types.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport {\n findCompetingShadow,\n isConcurrentShadowOperationError,\n retryConcurrentShadowOperation,\n} from '../../branching/createShadowRow.js'\nimport { assertBranchMergeValidationWriteAllowed } from '../../branching/mergeWriteGuard.js'\nimport {\n refreshBranchState,\n resetBranchState,\n resolveBranch,\n} from '../../branching/resolveBranch.js'\nimport {\n assertBranchCreatedDeleteUnreferenced,\n assertBranchDeleteCanUseCallerTransaction,\n requireBranchDeleteOutcome,\n setBranchDeleteOperation,\n setConcurrentBranchDelete,\n willBranchAbsorbDelete,\n} from '../../branching/tombstone.js'\nimport { branchField, MAIN_BRANCH } from '../../branching/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { Forbidden, NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { deleteUserPreferences } from '../../preferences/deleteUserPreferences.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport {\n collectDocumentDeleteFileCandidates,\n collectStoredFiles,\n scheduleUnreferencedFileCleanup,\n} from '../../uploads/fileVersioning/cleanup.js'\nimport {\n abortFileOperationScope,\n beginFileOperationScope,\n completeFileOperationScope,\n} from '../../uploads/fileVersioning/fileOperationManager.js'\nimport { appendNonTrashedFilter } from '../../utilities/appendNonTrashedFilter.js'\nimport { assertNoValidationWrite } from '../../utilities/assertNoValidationWrite.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { hasScheduledPublishEnabled } from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { resolveSelect } from '../../utilities/resolveSelect.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport {\n beginDeferredCleanupScope,\n clearDeferredCleanupScope,\n flushDeferredCleanupScopeAfterOperation,\n hasActiveDeferredCleanupScope,\n} from '../../utilities/transactionCallbacks.js'\nimport { markTransactionWrite } from '../../utilities/transactionMutationTracker.js'\nimport { deleteCollectionVersions } from '../../versions/deleteCollectionVersions.js'\nimport { deleteScheduledPublishJobs } from '../../versions/deleteScheduledPublishJobs.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nimport {\n commitOperationRetryRequestContext,\n createOperationRetryRequest,\n shouldRetryOperationRequest,\n} from './utilities/createOperationRetryRequest.js'\n\nexport type Arguments<TSlug extends CollectionSlug, TSelect extends SelectType> = {\n collection: Collection\n depth?: number\n disableTransaction?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n populate?: PopulateType\n req: PayloadRequest\n showHiddenFields?: boolean\n trash?: boolean\n} & Pick<FindOptions<TSlug, TSelect>, 'select'>\n\nexport const deleteByIDOperation = async <TSlug extends CollectionSlug, TSelect extends SelectType>(\n incomingArgs: Arguments<TSlug, TSelect>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n const hasCallerTransaction = Boolean(await incomingArgs.req.transactionID)\n const branch = resolveBranch(incomingArgs.req)\n let didOwnAttemptTransaction = false\n let didReachFinalCommit = false\n let isRetrySafe = false\n let concurrentDeleteRetryError: unknown\n let concurrentDeleteWinnerID: number | string | undefined\n\n return retryConcurrentShadowOperation({\n onRetry: async ({ error }) => {\n if (!isConcurrentShadowOperationError(error) || branch === MAIN_BRANCH) {\n return\n }\n\n concurrentDeleteWinnerID = undefined\n concurrentDeleteRetryError = undefined\n\n const winner = await findCompetingShadow({\n branch,\n collectionSlug: incomingArgs.collection.config.slug,\n docID: incomingArgs.id,\n operation: 'delete',\n req: incomingArgs.req,\n })\n\n const winnerID = winner?.id\n\n if (typeof winnerID === 'number' || typeof winnerID === 'string') {\n concurrentDeleteRetryError = error\n concurrentDeleteWinnerID = winnerID\n }\n },\n operation: async () => {\n didOwnAttemptTransaction = false\n didReachFinalCommit = false\n isRetrySafe = false\n\n const shouldReuseParentRequest =\n incomingArgs.disableTransaction && hasActiveDeferredCleanupScope({ req: incomingArgs.req })\n const retryRequest =\n hasCallerTransaction || shouldReuseParentRequest\n ? undefined\n : await createOperationRetryRequest({ req: incomingArgs.req })\n\n isRetrySafe = retryRequest?.isRetrySafe ?? false\n const attemptArgs = retryRequest\n ? {\n ...incomingArgs,\n req: retryRequest.req,\n }\n : incomingArgs\n\n const result = await deleteByIDOperationAttempt({\n concurrentDeleteRetryError,\n concurrentDeleteWinnerID,\n hasCallerTransaction,\n incomingArgs: attemptArgs,\n reportFinalCommit: () => {\n didReachFinalCommit = true\n },\n reportTransactionOwnership: ({ isOperationTransaction }) => {\n didOwnAttemptTransaction = isOperationTransaction\n },\n })\n\n if (retryRequest?.isRetrySafe) {\n commitOperationRetryRequestContext({ req: attemptArgs.req })\n }\n\n return result\n },\n shouldRetry: ({ error }) =>\n shouldRetryOperationRequest({\n didOwnAttemptTransaction,\n didReachFinalCommit,\n error,\n hasCallerTransaction,\n isRetrySafe,\n }),\n })\n}\n\nconst deleteByIDOperationAttempt = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectType,\n>({\n concurrentDeleteRetryError,\n concurrentDeleteWinnerID,\n hasCallerTransaction,\n incomingArgs,\n reportFinalCommit,\n reportTransactionOwnership,\n}: {\n concurrentDeleteRetryError?: unknown\n concurrentDeleteWinnerID?: number | string\n hasCallerTransaction: boolean\n incomingArgs: Arguments<TSlug, TSelect>\n reportFinalCommit: () => void\n reportTransactionOwnership: (args: { isOperationTransaction: boolean }) => void\n}): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n let cleanupScope: DeferredCleanupScope | null = null\n let shouldCommit = false\n const hasFileOperationScope = Boolean(args.collection.config.upload)\n let managedDeleteIdentity: string | undefined\n\n assertBranchMergeValidationWriteAllowed({ req: args.req })\n\n if (hasFileOperationScope) {\n beginFileOperationScope({ req: args.req })\n }\n\n assertNoValidationWrite(args.req)\n\n try {\n shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n reportTransactionOwnership({ isOperationTransaction: shouldCommit })\n cleanupScope = await beginDeferredCleanupScope({ req: args.req })\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n args = await buildBeforeOperation({\n args,\n collection: args.collection.config,\n operation: 'delete',\n overrideAccess: args.overrideAccess!,\n })\n\n const {\n id,\n collection: { config: collectionConfig },\n depth,\n overrideAccess,\n overrideLock,\n populate,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select: incomingSelect,\n showHiddenFields,\n trash = false,\n } = args\n const isDeletingFromBranch =\n Boolean(\n config.branching?.enabled &&\n config.branching.branchableCollections.has(collectionConfig.slug),\n ) && resolveBranch(req) !== MAIN_BRANCH\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess(\n { id, slug: collectionConfig.slug, req },\n collectionConfig.access.delete,\n )\n : true\n const hasWhereAccess = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n let where = combineQueries({ id: { equals: id } }, accessResults)\n\n // Exclude trashed documents when trash: false\n where = appendNonTrashedFilter({\n enableTrash: collectionConfig.trash,\n trash,\n where,\n })\n\n let docToDelete = await req.payload.db.findOne({\n collection: collectionConfig.slug,\n locale: req.locale!,\n req,\n where,\n })\n\n if (!docToDelete && concurrentDeleteWinnerID !== undefined) {\n docToDelete = await req.payload.db.findOne({\n branch: false,\n collection: collectionConfig.slug,\n locale: req.locale!,\n req,\n where,\n })\n }\n\n if (!docToDelete && !hasWhereAccess) {\n throw new NotFound(req.t)\n }\n if (!docToDelete && hasWhereAccess) {\n throw new Forbidden(req.t)\n }\n\n const documentToDelete = docToDelete as Record<string, unknown>\n\n const branch = resolveBranch(req)\n const isBranchingDocument =\n branch !== MAIN_BRANCH &&\n req.payload.config.branching?.branchableCollections.has(collectionConfig.slug)\n const isDeletingUntouchedBranchDocument =\n isBranchingDocument && documentToDelete[branchField] !== branch\n\n if (hasCallerTransaction && isBranchingDocument) {\n await assertBranchDeleteCanUseCallerTransaction({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: id,\n req,\n })\n }\n\n await assertBranchCreatedDeleteUnreferenced({\n collectionSlug: collectionConfig.slug,\n doc: documentToDelete,\n req,\n })\n\n // /////////////////////////////////////\n // beforeDelete - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeDelete?.length) {\n for (const hook of collectionConfig.hooks.beforeDelete) {\n await hook({\n id,\n collection: collectionConfig,\n context: req.context,\n req,\n })\n }\n }\n\n await assertBranchCreatedDeleteUnreferenced({\n collectionSlug: collectionConfig.slug,\n doc: documentToDelete,\n req,\n })\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked and cannot be deleted.`,\n overrideLock,\n req,\n })\n\n // A delete on a branch becomes a tombstone, and main keeps its row — so the\n // cascades below, which all address the canonical document, would strip data\n // main still depends on. The version cascade is scoped to the branch rather\n // than skipped, since a branch's own version rows do go with it.\n const absorbedByBranch = await willBranchAbsorbDelete({\n collectionSlug: collectionConfig.slug,\n doc: documentToDelete,\n req,\n })\n\n let deletedFiles = collectionConfig.upload\n ? await collectDocumentDeleteFileCandidates({\n collection: collectionConfig,\n doc: docToDelete!,\n parentID: id,\n req,\n })\n : []\n\n if (deletedFiles.length) {\n managedDeleteIdentity = JSON.stringify([collectionConfig.slug, String(id)])\n req.context ??= {}\n const managedDeletedUploads = (req.context._payloadManagedDeletedUploads ??=\n new Set()) as Set<string>\n managedDeletedUploads.add(managedDeleteIdentity)\n }\n\n if (!isBranchingDocument && !absorbedByBranch) {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: documentToDelete,\n overrideDelete: true,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete versions\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n await deleteCollectionVersions({\n id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Delete scheduled posts\n // /////////////////////////////////////\n if (!isBranchingDocument && hasScheduledPublishEnabled(collectionConfig) && !absorbedByBranch) {\n await deleteScheduledPublishJobs({\n id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n\n const select = sanitizeSelect({\n fields: collectionConfig.flattenedFields,\n select: resolveSelect({\n config: collectionConfig.select,\n operation: 'delete',\n req,\n select: incomingSelect,\n }),\n })\n\n // /////////////////////////////////////\n // Delete document\n // /////////////////////////////////////\n\n if (concurrentDeleteWinnerID !== undefined && concurrentDeleteRetryError !== undefined) {\n setConcurrentBranchDelete({\n branch,\n collectionSlug: collectionConfig.slug,\n doc: documentToDelete,\n docID: id,\n req,\n retryError: concurrentDeleteRetryError,\n winnerID: concurrentDeleteWinnerID,\n })\n }\n let branchDeleteOutcome: BranchDeleteOutcome | undefined\n if (isBranchingDocument) {\n setBranchDeleteOperation({\n branch,\n collectionSlug: collectionConfig.slug,\n docID: id,\n isTombstoneExpected: absorbedByBranch,\n onResolved: (outcome) => {\n branchDeleteOutcome = outcome\n },\n req,\n useAmbientTransaction: shouldCommit,\n })\n }\n\n let result: DataFromCollectionSlug<TSlug> = await req.payload.db.deleteOne({\n collection: collectionConfig.slug,\n req,\n select,\n where: { id: { equals: id } },\n })\n markTransactionWrite({ req })\n\n const finalBranchDeleteOutcome = isBranchingDocument\n ? requireBranchDeleteOutcome({ outcome: branchDeleteOutcome })\n : ({ doc: documentToDelete, tombstoned: false } as const)\n\n if (\n collectionConfig.upload &&\n finalBranchDeleteOutcome.tombstoned &&\n isDeletingUntouchedBranchDocument\n ) {\n deletedFiles = await collectStoredFiles({\n collection: collectionConfig,\n doc: finalBranchDeleteOutcome.doc,\n req,\n })\n }\n\n if (isBranchingDocument && !finalBranchDeleteOutcome.tombstoned) {\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: finalBranchDeleteOutcome.doc,\n overrideDelete: true,\n req,\n })\n\n if (hasScheduledPublishEnabled(collectionConfig)) {\n await deleteScheduledPublishJobs({\n id,\n slug: collectionConfig.slug,\n payload,\n req,\n })\n }\n }\n\n if (collectionConfig.upload) {\n await scheduleUnreferencedFileCleanup({\n candidates: deletedFiles,\n collection: collectionConfig,\n req,\n })\n }\n\n // /////////////////////////////////////\n // Add collection property for auth collections\n // /////////////////////////////////////\n\n if (collectionConfig.auth) {\n result = { ...result, collection: collectionConfig.slug }\n }\n\n // /////////////////////////////////////\n // Delete Preferences\n // /////////////////////////////////////\n\n if (!finalBranchDeleteOutcome.tombstoned) {\n await deleteUserPreferences({\n collectionConfig,\n ids: [id],\n payload,\n req,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: depth!,\n doc: result,\n draft: undefined!,\n fallbackLocale: fallbackLocale!,\n global: null,\n locale: locale!,\n overrideAccess: overrideAccess!,\n populate,\n req,\n select,\n showHiddenFields: showHiddenFields!,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n overrideAccess,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterDelete - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterDelete?.length) {\n for (const hook of collectionConfig.hooks.afterDelete) {\n result =\n (await hook({\n id,\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'deleteByID',\n overrideAccess,\n result,\n })\n\n // /////////////////////////////////////\n // 8. Return results\n // /////////////////////////////////////\n\n if (cleanupScope) {\n await flushDeferredCleanupScopeAfterOperation({ req, scope: cleanupScope })\n }\n if (shouldCommit) {\n reportFinalCommit()\n await commitTransaction(req)\n }\n\n if (hasFileOperationScope) {\n await completeFileOperationScope({ req })\n }\n\n if (isDeletingFromBranch) {\n refreshBranchState(req)\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n } catch (error: unknown) {\n if (cleanupScope) {\n clearDeferredCleanupScope({ req: args.req, scope: cleanupScope })\n }\n\n if (shouldCommit) {\n await killTransaction(args.req)\n }\n resetBranchState(args.req)\n\n if (hasFileOperationScope) {\n await abortFileOperationScope({ req: args.req })\n }\n throw error\n } finally {\n if (managedDeleteIdentity) {\n const managedDeletedUploads = args.req.context?._payloadManagedDeletedUploads as\n | Set<string>\n | undefined\n managedDeletedUploads?.delete(managedDeleteIdentity)\n if (managedDeletedUploads?.size === 0) {\n delete args.req.context._payloadManagedDeletedUploads\n }\n }\n }\n}\n"],"names":["executeAccess","hasWhereAccessResult","findCompetingShadow","isConcurrentShadowOperationError","retryConcurrentShadowOperation","assertBranchMergeValidationWriteAllowed","refreshBranchState","resetBranchState","resolveBranch","assertBranchCreatedDeleteUnreferenced","assertBranchDeleteCanUseCallerTransaction","requireBranchDeleteOutcome","setBranchDeleteOperation","setConcurrentBranchDelete","willBranchAbsorbDelete","branchField","MAIN_BRANCH","combineQueries","Forbidden","NotFound","afterRead","deleteUserPreferences","deleteAssociatedFiles","collectDocumentDeleteFileCandidates","collectStoredFiles","scheduleUnreferencedFileCleanup","abortFileOperationScope","beginFileOperationScope","completeFileOperationScope","appendNonTrashedFilter","assertNoValidationWrite","checkDocumentLockStatus","commitTransaction","hasScheduledPublishEnabled","initTransaction","killTransaction","resolveSelect","sanitizeSelect","beginDeferredCleanupScope","clearDeferredCleanupScope","flushDeferredCleanupScopeAfterOperation","hasActiveDeferredCleanupScope","markTransactionWrite","deleteCollectionVersions","deleteScheduledPublishJobs","buildAfterOperation","buildBeforeOperation","commitOperationRetryRequestContext","createOperationRetryRequest","shouldRetryOperationRequest","deleteByIDOperation","incomingArgs","hasCallerTransaction","Boolean","req","transactionID","branch","didOwnAttemptTransaction","didReachFinalCommit","isRetrySafe","concurrentDeleteRetryError","concurrentDeleteWinnerID","onRetry","error","undefined","winner","collectionSlug","collection","config","slug","docID","id","operation","winnerID","shouldReuseParentRequest","disableTransaction","retryRequest","attemptArgs","result","deleteByIDOperationAttempt","reportFinalCommit","reportTransactionOwnership","isOperationTransaction","shouldRetry","args","cleanupScope","shouldCommit","hasFileOperationScope","upload","managedDeleteIdentity","overrideAccess","collectionConfig","depth","overrideLock","populate","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","trash","isDeletingFromBranch","branching","enabled","branchableCollections","has","accessResults","access","delete","hasWhereAccess","where","equals","enableTrash","docToDelete","db","findOne","t","documentToDelete","isBranchingDocument","isDeletingUntouchedBranchDocument","doc","hooks","beforeDelete","length","hook","context","lockErrorMessage","absorbedByBranch","deletedFiles","parentID","JSON","stringify","String","managedDeletedUploads","_payloadManagedDeletedUploads","Set","add","overrideDelete","versions","fields","flattenedFields","retryError","branchDeleteOutcome","isTombstoneExpected","onResolved","outcome","useAmbientTransaction","deleteOne","finalBranchDeleteOutcome","tombstoned","candidates","auth","ids","draft","global","afterDelete","scope","size"],"mappings":"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"}