@agent-teams/engineering-foundation 0.15.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -8
- package/dist/capability-runtime.d.ts +2 -1
- package/dist/capability-runtime.d.ts.map +1 -1
- package/dist/capability-runtime.js +1 -1
- package/dist/capability-runtime.js.map +1 -1
- package/dist/check-contract.d.ts +2 -1
- package/dist/check-contract.d.ts.map +1 -1
- package/dist/check-runner.d.ts.map +1 -1
- package/dist/check-runner.js +6 -2
- package/dist/check-runner.js.map +1 -1
- package/dist/cli-arguments.d.ts +6 -0
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +179 -49
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli.js +16 -10
- package/dist/cli.js.map +1 -1
- package/dist/command-error.d.ts +14 -0
- package/dist/command-error.d.ts.map +1 -0
- package/dist/command-error.js +98 -0
- package/dist/command-error.js.map +1 -0
- package/dist/document-authoring/adapters/inbound/cli/document-command-failure.d.ts +5 -0
- package/dist/document-authoring/adapters/inbound/cli/document-command-failure.d.ts.map +1 -0
- package/dist/document-authoring/adapters/inbound/cli/document-command-failure.js +36 -0
- package/dist/document-authoring/adapters/inbound/cli/document-command-failure.js.map +1 -0
- package/dist/document-authoring/adapters/inbound/cli/document-command-renderer.d.ts +6 -0
- package/dist/document-authoring/adapters/inbound/cli/document-command-renderer.d.ts.map +1 -0
- package/dist/document-authoring/adapters/inbound/cli/document-command-renderer.js +127 -0
- package/dist/document-authoring/adapters/inbound/cli/document-command-renderer.js.map +1 -0
- package/dist/document-authoring/adapters/node/load-validated-document-authoring-profile.d.ts +4 -2
- package/dist/document-authoring/adapters/node/load-validated-document-authoring-profile.d.ts.map +1 -1
- package/dist/document-authoring/adapters/node/load-validated-document-authoring-profile.js.map +1 -1
- package/dist/document-authoring/adapters/node/node-document-contract-validator.d.ts.map +1 -1
- package/dist/document-authoring/adapters/node/node-document-contract-validator.js +129 -2
- package/dist/document-authoring/adapters/node/node-document-contract-validator.js.map +1 -1
- package/dist/document-authoring/adapters/node/node-document-environment-inspector.d.ts +17 -0
- package/dist/document-authoring/adapters/node/node-document-environment-inspector.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-environment-inspector.js +49 -0
- package/dist/document-authoring/adapters/node/node-document-environment-inspector.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-file-state.d.ts +21 -0
- package/dist/document-authoring/adapters/node/node-document-file-state.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-file-state.js +183 -0
- package/dist/document-authoring/adapters/node/node-document-file-state.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-journal-slot.d.ts +2 -0
- package/dist/document-authoring/adapters/node/node-document-journal-slot.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-journal-slot.js +18 -0
- package/dist/document-authoring/adapters/node/node-document-journal-slot.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store-faults.d.ts +36 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store-faults.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store-faults.js +2 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store-faults.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store-private.d.ts +2 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store-private.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store-private.js +2 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store-private.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store.d.ts +22 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store.js +339 -0
- package/dist/document-authoring/adapters/node/node-document-journal-store.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-planning-profile-reader.d.ts.map +1 -1
- package/dist/document-authoring/adapters/node/node-document-planning-profile-reader.js +3 -0
- package/dist/document-authoring/adapters/node/node-document-planning-profile-reader.js.map +1 -1
- package/dist/document-authoring/adapters/node/node-document-publisher-private.d.ts +2 -0
- package/dist/document-authoring/adapters/node/node-document-publisher-private.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-publisher-private.js +2 -0
- package/dist/document-authoring/adapters/node/node-document-publisher-private.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-publisher.d.ts +54 -0
- package/dist/document-authoring/adapters/node/node-document-publisher.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-publisher.js +252 -0
- package/dist/document-authoring/adapters/node/node-document-publisher.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-reachability-projector.d.ts +17 -0
- package/dist/document-authoring/adapters/node/node-document-reachability-projector.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-reachability-projector.js +43 -0
- package/dist/document-authoring/adapters/node/node-document-reachability-projector.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-structure-verifier.d.ts +21 -0
- package/dist/document-authoring/adapters/node/node-document-structure-verifier.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-structure-verifier.js +80 -0
- package/dist/document-authoring/adapters/node/node-document-structure-verifier.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-transaction-coordinator.d.ts +21 -0
- package/dist/document-authoring/adapters/node/node-document-transaction-coordinator.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-transaction-coordinator.js +89 -0
- package/dist/document-authoring/adapters/node/node-document-transaction-coordinator.js.map +1 -0
- package/dist/document-authoring/adapters/node/recapture-document-publication-paths.d.ts +16 -0
- package/dist/document-authoring/adapters/node/recapture-document-publication-paths.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/recapture-document-publication-paths.js +89 -0
- package/dist/document-authoring/adapters/node/recapture-document-publication-paths.js.map +1 -0
- package/dist/document-authoring/application/model/document-command.d.ts +69 -0
- package/dist/document-authoring/application/model/document-command.d.ts.map +1 -0
- package/dist/document-authoring/application/model/document-command.js +2 -0
- package/dist/document-authoring/application/model/document-command.js.map +1 -0
- package/dist/document-authoring/application/model/document-physical-identity.d.ts +10 -0
- package/dist/document-authoring/application/model/document-physical-identity.d.ts.map +1 -0
- package/dist/document-authoring/application/model/document-physical-identity.js +29 -0
- package/dist/document-authoring/application/model/document-physical-identity.js.map +1 -0
- package/dist/document-authoring/application/model/document-planning.d.ts +11 -0
- package/dist/document-authoring/application/model/document-planning.d.ts.map +1 -1
- package/dist/document-authoring/application/model/document-receipt.d.ts +74 -0
- package/dist/document-authoring/application/model/document-receipt.d.ts.map +1 -0
- package/dist/document-authoring/application/model/document-receipt.js +2 -0
- package/dist/document-authoring/application/model/document-receipt.js.map +1 -0
- package/dist/document-authoring/application/model/document-transaction-inspection.d.ts +43 -0
- package/dist/document-authoring/application/model/document-transaction-inspection.d.ts.map +1 -0
- package/dist/document-authoring/application/model/document-transaction-inspection.js +2 -0
- package/dist/document-authoring/application/model/document-transaction-inspection.js.map +1 -0
- package/dist/document-authoring/application/model/document-transaction.d.ts +81 -0
- package/dist/document-authoring/application/model/document-transaction.d.ts.map +1 -0
- package/dist/document-authoring/application/model/document-transaction.js +2 -0
- package/dist/document-authoring/application/model/document-transaction.js.map +1 -0
- package/dist/document-authoring/application/policies/authoring-profile-semantics.d.ts +5 -1
- package/dist/document-authoring/application/policies/authoring-profile-semantics.d.ts.map +1 -1
- package/dist/document-authoring/application/policies/authoring-profile-semantics.js +7 -0
- package/dist/document-authoring/application/policies/authoring-profile-semantics.js.map +1 -1
- package/dist/document-authoring/application/policies/classify-document-recovery.d.ts +81 -0
- package/dist/document-authoring/application/policies/classify-document-recovery.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/classify-document-recovery.js +138 -0
- package/dist/document-authoring/application/policies/classify-document-recovery.js.map +1 -0
- package/dist/document-authoring/application/policies/document-command-consumer-root.d.ts +2 -0
- package/dist/document-authoring/application/policies/document-command-consumer-root.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/document-command-consumer-root.js +15 -0
- package/dist/document-authoring/application/policies/document-command-consumer-root.js.map +1 -0
- package/dist/document-authoring/application/policies/document-command-projection.d.ts +20 -0
- package/dist/document-authoring/application/policies/document-command-projection.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/document-command-projection.js +90 -0
- package/dist/document-authoring/application/policies/document-command-projection.js.map +1 -0
- package/dist/document-authoring/application/policies/document-receipt-policy.d.ts +5 -0
- package/dist/document-authoring/application/policies/document-receipt-policy.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/document-receipt-policy.js +53 -0
- package/dist/document-authoring/application/policies/document-receipt-policy.js.map +1 -0
- package/dist/document-authoring/application/policies/document-transaction-digests.d.ts +5 -0
- package/dist/document-authoring/application/policies/document-transaction-digests.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/document-transaction-digests.js +12 -0
- package/dist/document-authoring/application/policies/document-transaction-digests.js.map +1 -0
- package/dist/document-authoring/application/policies/document-transaction-envelope-policy.d.ts +4 -0
- package/dist/document-authoring/application/policies/document-transaction-envelope-policy.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/document-transaction-envelope-policy.js +118 -0
- package/dist/document-authoring/application/policies/document-transaction-envelope-policy.js.map +1 -0
- package/dist/document-authoring/application/policies/project-document-reachability.d.ts +14 -0
- package/dist/document-authoring/application/policies/project-document-reachability.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/project-document-reachability.js +57 -0
- package/dist/document-authoring/application/policies/project-document-reachability.js.map +1 -0
- package/dist/document-authoring/application/policies/project-similar-document-advice.d.ts +4 -0
- package/dist/document-authoring/application/policies/project-similar-document-advice.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/project-similar-document-advice.js +17 -0
- package/dist/document-authoring/application/policies/project-similar-document-advice.js.map +1 -0
- package/dist/document-authoring/application/ports/document-authority-recompiler.d.ts +19 -0
- package/dist/document-authoring/application/ports/document-authority-recompiler.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-authority-recompiler.js +2 -0
- package/dist/document-authoring/application/ports/document-authority-recompiler.js.map +1 -0
- package/dist/document-authoring/application/ports/document-environment-inspector.d.ts +12 -0
- package/dist/document-authoring/application/ports/document-environment-inspector.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-environment-inspector.js +2 -0
- package/dist/document-authoring/application/ports/document-environment-inspector.js.map +1 -0
- package/dist/document-authoring/application/ports/document-file-state.d.ts +55 -0
- package/dist/document-authoring/application/ports/document-file-state.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-file-state.js +2 -0
- package/dist/document-authoring/application/ports/document-file-state.js.map +1 -0
- package/dist/document-authoring/application/ports/document-journal-store.d.ts +31 -0
- package/dist/document-authoring/application/ports/document-journal-store.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-journal-store.js +2 -0
- package/dist/document-authoring/application/ports/document-journal-store.js.map +1 -0
- package/dist/document-authoring/application/ports/document-publisher.d.ts +38 -0
- package/dist/document-authoring/application/ports/document-publisher.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-publisher.js +2 -0
- package/dist/document-authoring/application/ports/document-publisher.js.map +1 -0
- package/dist/document-authoring/application/ports/document-reachability-projector.d.ts +13 -0
- package/dist/document-authoring/application/ports/document-reachability-projector.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-reachability-projector.js +2 -0
- package/dist/document-authoring/application/ports/document-reachability-projector.js.map +1 -0
- package/dist/document-authoring/application/ports/document-structure-verifier.d.ts +17 -0
- package/dist/document-authoring/application/ports/document-structure-verifier.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-structure-verifier.js +2 -0
- package/dist/document-authoring/application/ports/document-structure-verifier.js.map +1 -0
- package/dist/document-authoring/application/ports/document-transaction-coordinator.d.ts +21 -0
- package/dist/document-authoring/application/ports/document-transaction-coordinator.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-transaction-coordinator.js +2 -0
- package/dist/document-authoring/application/ports/document-transaction-coordinator.js.map +1 -0
- package/dist/document-authoring/application/ports/similar-document-advisor.d.ts +17 -0
- package/dist/document-authoring/application/ports/similar-document-advisor.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/similar-document-advisor.js +2 -0
- package/dist/document-authoring/application/ports/similar-document-advisor.js.map +1 -0
- package/dist/document-authoring/application/use-cases/apply-document-plan.d.ts +16 -0
- package/dist/document-authoring/application/use-cases/apply-document-plan.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/apply-document-plan.js +215 -0
- package/dist/document-authoring/application/use-cases/apply-document-plan.js.map +1 -0
- package/dist/document-authoring/application/use-cases/document-journal-reconciliation.d.ts +18 -0
- package/dist/document-authoring/application/use-cases/document-journal-reconciliation.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/document-journal-reconciliation.js +90 -0
- package/dist/document-authoring/application/use-cases/document-journal-reconciliation.js.map +1 -0
- package/dist/document-authoring/application/use-cases/document-transaction-continuation.d.ts +59 -0
- package/dist/document-authoring/application/use-cases/document-transaction-continuation.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/document-transaction-continuation.js +360 -0
- package/dist/document-authoring/application/use-cases/document-transaction-continuation.js.map +1 -0
- package/dist/document-authoring/application/use-cases/document-transaction-error.d.ts +5 -0
- package/dist/document-authoring/application/use-cases/document-transaction-error.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/document-transaction-error.js +9 -0
- package/dist/document-authoring/application/use-cases/document-transaction-error.js.map +1 -0
- package/dist/document-authoring/application/use-cases/document-transaction-execution.d.ts +9 -0
- package/dist/document-authoring/application/use-cases/document-transaction-execution.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/document-transaction-execution.js +40 -0
- package/dist/document-authoring/application/use-cases/document-transaction-execution.js.map +1 -0
- package/dist/document-authoring/application/use-cases/recover-document-transaction.d.ts +10 -0
- package/dist/document-authoring/application/use-cases/recover-document-transaction.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/recover-document-transaction.js +233 -0
- package/dist/document-authoring/application/use-cases/recover-document-transaction.js.map +1 -0
- package/dist/document-authoring/application/use-cases/run-document-doctor.d.ts +18 -0
- package/dist/document-authoring/application/use-cases/run-document-doctor.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/run-document-doctor.js +171 -0
- package/dist/document-authoring/application/use-cases/run-document-doctor.js.map +1 -0
- package/dist/document-authoring/application/use-cases/run-document-new.d.ts +30 -0
- package/dist/document-authoring/application/use-cases/run-document-new.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/run-document-new.js +221 -0
- package/dist/document-authoring/application/use-cases/run-document-new.js.map +1 -0
- package/dist/document-authoring/application/use-cases/run-document-recover.d.ts +21 -0
- package/dist/document-authoring/application/use-cases/run-document-recover.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/run-document-recover.js +126 -0
- package/dist/document-authoring/application/use-cases/run-document-recover.js.map +1 -0
- package/dist/document-authoring/composition/document-command-cli.d.ts +7 -0
- package/dist/document-authoring/composition/document-command-cli.d.ts.map +1 -0
- package/dist/document-authoring/composition/document-command-cli.js +32 -0
- package/dist/document-authoring/composition/document-command-cli.js.map +1 -0
- package/dist/document-authoring/composition/inspect-document-transaction.d.ts +8 -0
- package/dist/document-authoring/composition/inspect-document-transaction.d.ts.map +1 -0
- package/dist/document-authoring/composition/inspect-document-transaction.js +177 -0
- package/dist/document-authoring/composition/inspect-document-transaction.js.map +1 -0
- package/dist/document-authoring/composition/node-document-authority-recompiler.d.ts +11 -0
- package/dist/document-authoring/composition/node-document-authority-recompiler.d.ts.map +1 -0
- package/dist/document-authoring/composition/node-document-authority-recompiler.js +62 -0
- package/dist/document-authoring/composition/node-document-authority-recompiler.js.map +1 -0
- package/dist/document-authoring/composition/node-document-commands.d.ts +10 -0
- package/dist/document-authoring/composition/node-document-commands.d.ts.map +1 -0
- package/dist/document-authoring/composition/node-document-commands.js +68 -0
- package/dist/document-authoring/composition/node-document-commands.js.map +1 -0
- package/dist/document-authoring/composition/node-document-planning.d.ts +7 -0
- package/dist/document-authoring/composition/node-document-planning.d.ts.map +1 -0
- package/dist/document-authoring/composition/node-document-planning.js +77 -0
- package/dist/document-authoring/composition/node-document-planning.js.map +1 -0
- package/dist/document-authoring/composition/node-document-writing-private.d.ts +15 -0
- package/dist/document-authoring/composition/node-document-writing-private.d.ts.map +1 -0
- package/dist/document-authoring/composition/node-document-writing-private.js +52 -0
- package/dist/document-authoring/composition/node-document-writing-private.js.map +1 -0
- package/dist/document-authoring/composition/node-document-writing.d.ts +8 -0
- package/dist/document-authoring/composition/node-document-writing.d.ts.map +1 -0
- package/dist/document-authoring/composition/node-document-writing.js +10 -0
- package/dist/document-authoring/composition/node-document-writing.js.map +1 -0
- package/dist/document-authoring/index.d.ts +13 -1
- package/dist/document-authoring/index.d.ts.map +1 -1
- package/dist/document-authoring/index.js +12 -65
- package/dist/document-authoring/index.js.map +1 -1
- package/dist/document-command.d.ts +9 -0
- package/dist/document-command.d.ts.map +1 -1
- package/dist/document-command.js +64 -3
- package/dist/document-command.js.map +1 -1
- package/dist/foundation-state-contract.d.ts +1 -0
- package/dist/foundation-state-contract.d.ts.map +1 -1
- package/dist/foundation-state-contract.js +1 -0
- package/dist/foundation-state-contract.js.map +1 -1
- package/dist/local-mode/inspection.d.ts.map +1 -1
- package/dist/local-mode/inspection.js +51 -3
- package/dist/local-mode/inspection.js.map +1 -1
- package/dist/package-self-check.d.ts +2 -1
- package/dist/package-self-check.d.ts.map +1 -1
- package/dist/package-self-check.js +30 -7
- package/dist/package-self-check.js.map +1 -1
- package/dist/report-renderer.d.ts.map +1 -1
- package/dist/report-renderer.js +1 -0
- package/dist/report-renderer.js.map +1 -1
- package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.d.ts +19 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.js +74 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts +2 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts.map +1 -1
- package/dist/repository-mutation/adapters/node/node-absent-file-publication.js +56 -154
- package/dist/repository-mutation/adapters/node/node-absent-file-publication.js.map +1 -1
- package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.d.ts +26 -0
- package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.js +151 -0
- package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts +6 -0
- package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts.map +1 -1
- package/dist/repository-mutation/adapters/node/node-directory-durability.js +15 -0
- package/dist/repository-mutation/adapters/node/node-directory-durability.js.map +1 -1
- package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.d.ts +14 -0
- package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js +26 -0
- package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.d.ts +28 -0
- package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.js +47 -0
- package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.d.ts +22 -0
- package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.js +59 -0
- package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.js.map +1 -0
- package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.d.ts +7 -0
- package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.d.ts.map +1 -0
- package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.js +2 -0
- package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.js.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-authority-workspace.d.ts +1 -1
- package/dist/scaffolding/adapters/node/filesystem-authority-workspace.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js +74 -53
- package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-finalization.d.ts +9 -1
- package/dist/scaffolding/adapters/node/filesystem-finalization.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-finalization.js +34 -6
- package/dist/scaffolding/adapters/node/filesystem-finalization.js.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-journal-state.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-journal-state.js +2 -1
- package/dist/scaffolding/adapters/node/filesystem-journal-state.js.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-journal.d.ts +13 -5
- package/dist/scaffolding/adapters/node/filesystem-journal.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-journal.js +112 -74
- package/dist/scaffolding/adapters/node/filesystem-journal.js.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-operation-state.d.ts +10 -1
- package/dist/scaffolding/adapters/node/filesystem-operation-state.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-operation-state.js +40 -2
- package/dist/scaffolding/adapters/node/filesystem-operation-state.js.map +1 -1
- package/dist/scaffolding/adapters/node/node-scaffold-journal-evidence.d.ts +35 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-evidence.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-evidence.js +137 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-evidence.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-gateway.d.ts +11 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-gateway.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-gateway.js +95 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-gateway.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-reconciliation.d.ts +15 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-reconciliation.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-reconciliation.js +29 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-reconciliation.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-store-faults.d.ts +46 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-store-faults.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-store-faults.js +2 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-store-faults.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-store.d.ts +19 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-store.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-store.js +288 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-store.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-transaction-evidence.d.ts +2 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-transaction-evidence.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-transaction-evidence.js +34 -0
- package/dist/scaffolding/adapters/node/node-scaffold-journal-transaction-evidence.js.map +1 -0
- package/dist/schema-catalog.d.ts.map +1 -1
- package/dist/schema-catalog.js +4 -0
- package/dist/schema-catalog.js.map +1 -1
- package/dist/schema-ids.d.ts +1 -1
- package/dist/schema-ids.d.ts.map +1 -1
- package/dist/schema-ids.js +3 -0
- package/dist/schema-ids.js.map +1 -1
- package/dist/source-inventory/adapters/outbound/filesystem/filesystem-source-tree-reader.d.ts.map +1 -1
- package/dist/source-inventory/adapters/outbound/filesystem/filesystem-source-tree-reader.js +17 -10
- package/dist/source-inventory/adapters/outbound/filesystem/filesystem-source-tree-reader.js.map +1 -1
- package/dist/transaction-coordination/adapters/node/document-envelope-bindings.d.ts +22 -0
- package/dist/transaction-coordination/adapters/node/document-envelope-bindings.d.ts.map +1 -0
- package/dist/transaction-coordination/adapters/node/document-envelope-bindings.js +123 -0
- package/dist/transaction-coordination/adapters/node/document-envelope-bindings.js.map +1 -0
- package/dist/transaction-coordination/adapters/node/document-temporary-identity.d.ts +2 -2
- package/dist/transaction-coordination/adapters/node/document-temporary-identity.d.ts.map +1 -1
- package/dist/transaction-coordination/adapters/node/document-temporary-identity.js +4 -4
- package/dist/transaction-coordination/adapters/node/document-temporary-identity.js.map +1 -1
- package/dist/transaction-coordination/adapters/node/foundation-transition-evidence.d.ts +4 -0
- package/dist/transaction-coordination/adapters/node/foundation-transition-evidence.d.ts.map +1 -0
- package/dist/transaction-coordination/adapters/node/foundation-transition-evidence.js +58 -0
- package/dist/transaction-coordination/adapters/node/foundation-transition-evidence.js.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-foundation-cleanup-transition.d.ts +17 -0
- package/dist/transaction-coordination/adapters/node/node-foundation-cleanup-transition.d.ts.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-foundation-cleanup-transition.js +79 -0
- package/dist/transaction-coordination/adapters/node/node-foundation-cleanup-transition.js.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.d.ts +9 -1
- package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.d.ts.map +1 -1
- package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.js +34 -11
- package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.js.map +1 -1
- package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.d.ts +7 -0
- package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.d.ts.map +1 -1
- package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.js +15 -0
- package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.js.map +1 -1
- package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.d.ts +2 -2
- package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.d.ts.map +1 -1
- package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.js +123 -140
- package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.js.map +1 -1
- package/dist/transaction-coordination/application/foundation-transaction-coordinator.d.ts +5 -4
- package/dist/transaction-coordination/application/foundation-transaction-coordinator.d.ts.map +1 -1
- package/dist/transaction-coordination/application/foundation-transaction-coordinator.js +14 -1
- package/dist/transaction-coordination/application/foundation-transaction-coordinator.js.map +1 -1
- package/dist/transaction-coordination/application/foundation-transaction-error.d.ts +4 -3
- package/dist/transaction-coordination/application/foundation-transaction-error.d.ts.map +1 -1
- package/dist/transaction-coordination/application/foundation-transaction-error.js.map +1 -1
- package/dist/transaction-coordination/application/model/internal-transaction-status.d.ts +26 -0
- package/dist/transaction-coordination/application/model/internal-transaction-status.d.ts.map +1 -0
- package/dist/transaction-coordination/application/model/internal-transaction-status.js +2 -0
- package/dist/transaction-coordination/application/model/internal-transaction-status.js.map +1 -0
- package/dist/transaction-coordination/application/ports/foundation-transaction-slot.d.ts +2 -2
- package/dist/transaction-coordination/application/ports/foundation-transaction-slot.d.ts.map +1 -1
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.d.ts.map +1 -1
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.js +13 -9
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.js.map +1 -1
- package/package.json +12 -3
- package/schemas/document-authoring-profile/v1.schema.json +31 -1
- package/schemas/document-command-envelope/v2.schema.json +205 -0
- package/schemas/foundation-check-report/v1.schema.json +1 -1
- package/schemas/foundation-command-error/v1.schema.json +24 -0
- package/schemas/foundation-transaction-envelope/v3.schema.json +169 -0
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { link, lstat, open, rm } from "node:fs/promises";
|
|
1
|
+
import { lstat, link, open, rm } from "node:fs/promises";
|
|
3
2
|
import { dirname, resolve } from "node:path";
|
|
4
3
|
import { AbsentFilePublicationError } from "../../application/model/exact-postimage.js";
|
|
5
4
|
import { portableRepositoryPathIdentity } from "../../application/model/repository-path.js";
|
|
6
|
-
import {
|
|
5
|
+
import { readBoundedRegularFile } from "./node-bounded-regular-file.js";
|
|
6
|
+
import { cleanupIdentityMatchingOwnedTemporary } from "./node-cleanup-owned-temporary.js";
|
|
7
7
|
import { syncDirectoryDurably } from "./node-directory-durability.js";
|
|
8
|
+
import { assertValidExactPostimage, classifyExactFilePostimageWith, isMissingPublicationPath } from "./node-absent-file-publication-private.js";
|
|
9
|
+
import { prepareExactSiblingTemporary } from "./node-prepare-exact-sibling-temporary.js";
|
|
10
|
+
import { publishPreparedAbsentFile, verifyPublishedAbsentFile } from "./node-publish-prepared-absent-file.js";
|
|
8
11
|
const nodeOperations = {
|
|
9
12
|
link,
|
|
10
13
|
open,
|
|
@@ -12,59 +15,6 @@ const nodeOperations = {
|
|
|
12
15
|
rm,
|
|
13
16
|
syncDirectory: syncDirectoryDurably
|
|
14
17
|
};
|
|
15
|
-
function errorCode(error) {
|
|
16
|
-
return error instanceof Error && "code" in error
|
|
17
|
-
? error.code
|
|
18
|
-
: undefined;
|
|
19
|
-
}
|
|
20
|
-
function isMissing(error) {
|
|
21
|
-
return errorCode(error) === "ENOENT";
|
|
22
|
-
}
|
|
23
|
-
function isUnsupportedLink(error) {
|
|
24
|
-
return ["ENOSYS", "ENOTSUP", "EOPNOTSUPP", "EPERM", "EXDEV"].includes(errorCode(error) ?? "");
|
|
25
|
-
}
|
|
26
|
-
function sha256(bytes) {
|
|
27
|
-
return `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
|
|
28
|
-
}
|
|
29
|
-
function sameIdentity(left, right) {
|
|
30
|
-
return (left.dev === right.dev &&
|
|
31
|
-
left.ino === right.ino &&
|
|
32
|
-
left.birthtimeNs === right.birthtimeNs);
|
|
33
|
-
}
|
|
34
|
-
function exactReadMatchesPostimage(result, postimage) {
|
|
35
|
-
return (result.outcome === "read" &&
|
|
36
|
-
result.bytes.byteLength === postimage.size &&
|
|
37
|
-
sha256(result.bytes) === postimage.digest &&
|
|
38
|
-
(process.platform === "win32" ||
|
|
39
|
-
(result.mode & 0o777) === postimage.mode));
|
|
40
|
-
}
|
|
41
|
-
async function verifyTemporaryForPublication(temporaryPath, postimage, expectedIdentity, displayPath) {
|
|
42
|
-
const stableTemporary = await readBoundedRegularFile(temporaryPath, postimage.size);
|
|
43
|
-
if (exactReadMatchesPostimage(stableTemporary, postimage) &&
|
|
44
|
-
sameIdentity(stableTemporary.identity, expectedIdentity)) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
throw new AbsentFilePublicationError("TEMPORARY_REPLACED", `Temporary path was replaced or modified concurrently: ${displayPath}.`);
|
|
48
|
-
}
|
|
49
|
-
async function verifyPublishedFile(destinationPath, postimage, expectedIdentity, displayPath) {
|
|
50
|
-
const publishedFile = await readBoundedRegularFile(destinationPath, postimage.size);
|
|
51
|
-
if (exactReadMatchesPostimage(publishedFile, postimage) &&
|
|
52
|
-
sameIdentity(publishedFile.identity, expectedIdentity)) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
throw new AbsentFilePublicationError("VERIFICATION_FAILED", `Published file failed identity or content verification: ${displayPath}.`);
|
|
56
|
-
}
|
|
57
|
-
function assertValidPostimage(postimage) {
|
|
58
|
-
if (!Number.isSafeInteger(postimage.size) ||
|
|
59
|
-
postimage.size < 0 ||
|
|
60
|
-
postimage.bytes.byteLength !== postimage.size ||
|
|
61
|
-
sha256(postimage.bytes) !== postimage.digest ||
|
|
62
|
-
!Number.isSafeInteger(postimage.mode) ||
|
|
63
|
-
postimage.mode < 0 ||
|
|
64
|
-
postimage.mode > 0o777) {
|
|
65
|
-
throw new AbsentFilePublicationError("INVALID_POSTIMAGE", "Exact file postimage metadata does not match its bytes.");
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
18
|
function snapshotPostimage(postimage) {
|
|
69
19
|
const snapshot = {
|
|
70
20
|
bytes: Buffer.from(postimage.bytes),
|
|
@@ -72,7 +22,7 @@ function snapshotPostimage(postimage) {
|
|
|
72
22
|
mode: postimage.mode,
|
|
73
23
|
size: postimage.size
|
|
74
24
|
};
|
|
75
|
-
|
|
25
|
+
assertValidExactPostimage(snapshot);
|
|
76
26
|
return snapshot;
|
|
77
27
|
}
|
|
78
28
|
function assertValidPublicationPaths(temporaryPath, destinationPath, displayPath) {
|
|
@@ -84,35 +34,6 @@ function assertValidPublicationPaths(temporaryPath, destinationPath, displayPath
|
|
|
84
34
|
throw new AbsentFilePublicationError("PUBLICATION_INVALID", `Publication paths are not distinct siblings: ${displayPath}.`);
|
|
85
35
|
}
|
|
86
36
|
}
|
|
87
|
-
// Covers the one-shot ctime change when a concurrent publisher unlinks its hard-link temporary.
|
|
88
|
-
const maximumUnstableReadRetries = 2;
|
|
89
|
-
async function classifyExactFilePostimageWith(readFile, destinationPath, postimage) {
|
|
90
|
-
for (let attempt = 0;; attempt += 1) {
|
|
91
|
-
try {
|
|
92
|
-
const result = await readFile(destinationPath, postimage.size);
|
|
93
|
-
if (result.outcome === "changed" &&
|
|
94
|
-
attempt < maximumUnstableReadRetries) {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
if (result.outcome !== "read") {
|
|
98
|
-
return "conflict";
|
|
99
|
-
}
|
|
100
|
-
const modeMatches = process.platform === "win32" ||
|
|
101
|
-
(result.mode & 0o777) === postimage.mode;
|
|
102
|
-
return result.bytes.byteLength === postimage.size &&
|
|
103
|
-
sha256(result.bytes) === postimage.digest &&
|
|
104
|
-
modeMatches
|
|
105
|
-
? "exact"
|
|
106
|
-
: "conflict";
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
if (isMissing(error)) {
|
|
110
|
-
return "absent";
|
|
111
|
-
}
|
|
112
|
-
throw error;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
37
|
export async function classifyExactFilePostimage(destinationPath, postimage) {
|
|
117
38
|
return classifyExactFilePostimageWith(readBoundedRegularFile, destinationPath, snapshotPostimage(postimage));
|
|
118
39
|
}
|
|
@@ -122,7 +43,7 @@ export async function assertTemporaryPathsAbsent(entries) {
|
|
|
122
43
|
await lstat(entry.temporaryPath);
|
|
123
44
|
}
|
|
124
45
|
catch (error) {
|
|
125
|
-
if (
|
|
46
|
+
if (isMissingPublicationPath(error)) {
|
|
126
47
|
continue;
|
|
127
48
|
}
|
|
128
49
|
throw error;
|
|
@@ -130,72 +51,39 @@ export async function assertTemporaryPathsAbsent(entries) {
|
|
|
130
51
|
throw new AbsentFilePublicationError("TEMPORARY_EXISTS", `Temporary path already exists: ${entry.displayPath}.`);
|
|
131
52
|
}
|
|
132
53
|
}
|
|
133
|
-
async function syncPublicationParent(context) {
|
|
134
|
-
const durability = await context.operations.syncDirectory(context.parent);
|
|
135
|
-
if (durability === "unsupported" &&
|
|
136
|
-
!context.allowUnsupportedDirectoryDurability) {
|
|
137
|
-
throw new AbsentFilePublicationError("PUBLICATION_UNSUPPORTED", `Directory durability is unsupported: ${context.displayPath}.`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
async function createPublicationTemporary(context, state) {
|
|
141
|
-
const handle = await context.operations
|
|
142
|
-
.open(context.temporaryPath, "wx", 0o600)
|
|
143
|
-
.catch((error) => {
|
|
144
|
-
if (errorCode(error) === "EEXIST") {
|
|
145
|
-
throw new AbsentFilePublicationError("TEMPORARY_EXISTS", `Temporary path already exists: ${context.displayPath}.`, { cause: error });
|
|
146
|
-
}
|
|
147
|
-
throw error;
|
|
148
|
-
});
|
|
149
|
-
try {
|
|
150
|
-
state.temporaryIdentity = await captureFileHandleIdentity(handle);
|
|
151
|
-
await handle.writeFile(context.postimage.bytes);
|
|
152
|
-
await context.faultInjector?.({ phase: "after-temporary-written" });
|
|
153
|
-
await handle.chmod(context.postimage.mode);
|
|
154
|
-
await handle.sync();
|
|
155
|
-
}
|
|
156
|
-
finally {
|
|
157
|
-
await handle.close();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
async function linkPublicationDestination(context) {
|
|
161
|
-
try {
|
|
162
|
-
await context.operations.link(context.temporaryPath, context.destinationPath);
|
|
163
|
-
return false;
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
if (errorCode(error) === "EEXIST") {
|
|
167
|
-
const state = await classifyExactFilePostimageWith(context.operations.readBoundedRegularFile, context.destinationPath, context.postimage);
|
|
168
|
-
if (state === "exact") {
|
|
169
|
-
return true;
|
|
170
|
-
}
|
|
171
|
-
throw new AbsentFilePublicationError("CONFLICT", `Destination changed concurrently: ${context.displayPath}.`, { cause: error });
|
|
172
|
-
}
|
|
173
|
-
if (isUnsupportedLink(error)) {
|
|
174
|
-
throw new AbsentFilePublicationError("PUBLICATION_UNSUPPORTED", `Atomic absent-only publication is unsupported: ${context.displayPath}.`, { cause: error });
|
|
175
|
-
}
|
|
176
|
-
throw error;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
54
|
async function runPublicationPhase(context) {
|
|
180
55
|
const state = {
|
|
181
56
|
concurrentSatisfied: false,
|
|
182
57
|
published: false
|
|
183
58
|
};
|
|
184
59
|
try {
|
|
185
|
-
await
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
60
|
+
const temporaryIdentity = await prepareExactSiblingTemporary({
|
|
61
|
+
displayPath: context.displayPath,
|
|
62
|
+
faultInjector: context.faultInjector,
|
|
63
|
+
onIdentityCaptured(identity) {
|
|
64
|
+
state.temporaryIdentity = identity;
|
|
65
|
+
},
|
|
66
|
+
open: context.operations.open,
|
|
67
|
+
postimage: context.postimage,
|
|
68
|
+
temporaryPath: context.temporaryPath
|
|
69
|
+
});
|
|
190
70
|
await context.faultInjector?.({ phase: "after-temporary-synced" });
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
71
|
+
const outcome = await publishPreparedAbsentFile({
|
|
72
|
+
allowUnsupportedDirectoryDurability: context.allowUnsupportedDirectoryDurability,
|
|
73
|
+
classifyBoundedRegularFile: context.operations.readBoundedRegularFile,
|
|
74
|
+
destinationPath: context.destinationPath,
|
|
75
|
+
displayPath: context.displayPath,
|
|
76
|
+
expectedIdentity: temporaryIdentity,
|
|
77
|
+
faultInjector: context.faultInjector,
|
|
78
|
+
link: context.operations.link,
|
|
79
|
+
parent: context.parent,
|
|
80
|
+
postimage: context.postimage,
|
|
81
|
+
readBoundedRegularFile: context.operations.readBoundedRegularFile,
|
|
82
|
+
syncDirectory: context.operations.syncDirectory,
|
|
83
|
+
temporaryPath: context.temporaryPath
|
|
84
|
+
});
|
|
85
|
+
state.concurrentSatisfied = outcome === "already-satisfied";
|
|
86
|
+
state.published = outcome === "published";
|
|
199
87
|
}
|
|
200
88
|
catch (error) {
|
|
201
89
|
state.error = error;
|
|
@@ -206,12 +94,19 @@ async function cleanupPublicationTemporary(context, state) {
|
|
|
206
94
|
try {
|
|
207
95
|
const ownership = state.temporaryIdentity === undefined
|
|
208
96
|
? "missing"
|
|
209
|
-
: await
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
97
|
+
: await cleanupIdentityMatchingOwnedTemporary({
|
|
98
|
+
allowUnsupportedDirectoryDurability: context.allowUnsupportedDirectoryDurability,
|
|
99
|
+
displayPath: context.displayPath,
|
|
100
|
+
expectedIdentity: state.temporaryIdentity,
|
|
101
|
+
parent: context.parent,
|
|
102
|
+
rm: context.operations.rm,
|
|
103
|
+
syncDirectory: context.operations.syncDirectory,
|
|
104
|
+
temporaryPath: context.temporaryPath,
|
|
105
|
+
...(context.transition === undefined
|
|
106
|
+
? {}
|
|
107
|
+
: { transition: context.transition })
|
|
108
|
+
});
|
|
109
|
+
if (ownership === "different") {
|
|
215
110
|
throw new AbsentFilePublicationError("TEMPORARY_REPLACED", `Temporary path was replaced concurrently: ${context.displayPath}.`, state.error === undefined ? undefined : { cause: state.error });
|
|
216
111
|
}
|
|
217
112
|
}
|
|
@@ -242,7 +137,13 @@ async function publicationOutcome(context, state) {
|
|
|
242
137
|
if (!state.published || state.temporaryIdentity === undefined) {
|
|
243
138
|
throw new AbsentFilePublicationError("PUBLICATION_INCOMPLETE", `Publication did not reach a terminal state: ${context.displayPath}.`);
|
|
244
139
|
}
|
|
245
|
-
await
|
|
140
|
+
await verifyPublishedAbsentFile({
|
|
141
|
+
destinationPath: context.destinationPath,
|
|
142
|
+
displayPath: context.displayPath,
|
|
143
|
+
expectedIdentity: state.temporaryIdentity,
|
|
144
|
+
postimage: context.postimage,
|
|
145
|
+
readBoundedRegularFile: context.operations.readBoundedRegularFile
|
|
146
|
+
});
|
|
246
147
|
return "published";
|
|
247
148
|
}
|
|
248
149
|
export async function publishAbsentFile(options) {
|
|
@@ -255,7 +156,8 @@ export async function publishAbsentFile(options) {
|
|
|
255
156
|
operations: { ...nodeOperations, ...options.operations },
|
|
256
157
|
parent: dirname(resolve(options.destinationPath)),
|
|
257
158
|
postimage,
|
|
258
|
-
temporaryPath: options.temporaryPath
|
|
159
|
+
temporaryPath: options.temporaryPath,
|
|
160
|
+
transition: options.transition
|
|
259
161
|
};
|
|
260
162
|
assertValidPublicationPaths(context.temporaryPath, context.destinationPath, context.displayPath);
|
|
261
163
|
const initial = await classifyExactFilePostimageWith(context.operations.readBoundedRegularFile, context.destinationPath, context.postimage);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-absent-file-publication.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-absent-file-publication.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node-absent-file-publication.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-absent-file-publication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAmB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EACL,0BAA0B,EAI3B,MAAM,4CAA4C,CAAC;AAGpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qCAAqC,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,wBAAwB,EACzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;AA4ChD,MAAM,cAAc,GAAoC;IACtD,IAAI;IACJ,IAAI;IACJ,sBAAsB;IACtB,EAAE;IACF,aAAa,EAAE,oBAAoB;CACpC,CAAC;AAEF,SAAS,iBAAiB,CAAC,SAA6B;IACtD,MAAM,QAAQ,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACnC,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,IAAI,EAAE,SAAS,CAAC,IAAI;KACrB,CAAC;IACF,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,2BAA2B,CAClC,aAAqB,EACrB,eAAuB,EACvB,WAAmB;IAEnB,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACrD,IACE,8BAA8B,CAAC,iBAAiB,CAAC;QAC/C,8BAA8B,CAAC,mBAAmB,CAAC;QACrD,OAAO,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,mBAAmB,CAAC,EAC3D,CAAC;QACD,MAAM,IAAI,0BAA0B,CAClC,qBAAqB,EACrB,gDAAgD,WAAW,GAAG,CAC/D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,eAAuB,EACvB,SAA6B;IAE7B,OAAO,8BAA8B,CACnC,sBAAsB,EACtB,eAAe,EACf,iBAAiB,CAAC,SAAS,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAoF;IAEpF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpC,SAAS;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,0BAA0B,CAClC,kBAAkB,EAClB,kCAAkC,KAAK,CAAC,WAAW,GAAG,CACvD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAA2B;IAE3B,MAAM,KAAK,GAAqB;QAC9B,mBAAmB,EAAE,KAAK;QAC1B,SAAS,EAAE,KAAK;KACjB,CAAC;IACF,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,4BAA4B,CAAC;YAC3D,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,kBAAkB,CAAC,QAAQ;gBACzB,KAAK,CAAC,iBAAiB,GAAG,QAAQ,CAAC;YACrC,CAAC;YACD,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;YAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;YAC9C,mCAAmC,EACjC,OAAO,CAAC,mCAAmC;YAC7C,0BAA0B,EAAE,OAAO,CAAC,UAAU,CAAC,sBAAsB;YACrE,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,gBAAgB,EAAE,iBAAiB;YACnC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;YAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,sBAAsB,EAAE,OAAO,CAAC,UAAU,CAAC,sBAAsB;YACjE,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,aAAa;YAC/C,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QACH,KAAK,CAAC,mBAAmB,GAAG,OAAO,KAAK,mBAAmB,CAAC;QAC5D,KAAK,CAAC,SAAS,GAAG,OAAO,KAAK,WAAW,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,2BAA2B,CACxC,OAA2B,EAC3B,KAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,SAAS,GACb,KAAK,CAAC,iBAAiB,KAAK,SAAS;YACnC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,qCAAqC,CAAC;gBAC1C,mCAAmC,EACjC,OAAO,CAAC,mCAAmC;gBAC7C,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,gBAAgB,EAAE,KAAK,CAAC,iBAAiB;gBACzC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE;gBACzB,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,aAAa;gBAC/C,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS;oBAClC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;aACxC,CAAC,CAAC;QACT,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,IAAI,0BAA0B,CAClC,oBAAoB,EACpB,6CAA6C,OAAO,CAAC,WAAW,GAAG,EACnE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACtB,IACE,YAAY,YAAY,0BAA0B;YAClD,YAAY,CAAC,IAAI,KAAK,oBAAoB,EAC1C,CAAC;YACD,MAAM,YAAY,CAAC;QACrB,CAAC;QACD,MAAM,IAAI,0BAA0B,CAClC,gBAAgB,EAChB,yCAAyC,OAAO,CAAC,WAAW,GAAG,EAC/D;YACE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,YAAY;YAClC,YAAY;SACb,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAA2B,EAC3B,KAAuB;IAEvB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,0BAA0B,CAClC,eAAe,EACf,mDAAmD,OAAO,CAAC,WAAW,GAAG,CAC1E,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC9B,IACE,CAAC,MAAM,8BAA8B,CACnC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EACzC,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,SAAS,CAClB,CAAC,KAAK,OAAO,EACd,CAAC;YACD,MAAM,IAAI,0BAA0B,CAClC,UAAU,EACV,qCAAqC,OAAO,CAAC,WAAW,GAAG,CAC5D,CAAC;QACJ,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC9D,MAAM,IAAI,0BAA0B,CAClC,wBAAwB,EACxB,+CAA+C,OAAO,CAAC,WAAW,GAAG,CACtE,CAAC;IACJ,CAAC;IACD,MAAM,yBAAyB,CAAC;QAC9B,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB,EAAE,KAAK,CAAC,iBAAiB;QACzC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,sBAAsB,EAAE,OAAO,CAAC,UAAU,CAAC,sBAAsB;KAClE,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OASvC;IACC,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,OAAO,GAAuB;QAClC,mCAAmC,EACjC,OAAO,CAAC,mCAAmC,KAAK,IAAI;QACtD,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;QACxD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACjD,SAAS;QACT,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC;IACF,2BAA2B,CACzB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,WAAW,CACpB,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,8BAA8B,CAClD,OAAO,CAAC,UAAU,CAAC,sBAAsB,EACzC,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,SAAS,CAClB,CAAC;IACF,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,0BAA0B,CAClC,UAAU,EACV,qCAAqC,OAAO,CAAC,WAAW,GAAG,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { link, mkdir, rename } from "node:fs/promises";
|
|
2
|
+
import type { PortablePathIdentity } from "../../application/model/path-identity.js";
|
|
3
|
+
import type { OwnedTemporaryCleanupTransitionPort } from "../../application/ports/owned-temporary-cleanup-transition.js";
|
|
4
|
+
import { pathMatchesRegularFileIdentity } from "./node-bounded-regular-file.js";
|
|
5
|
+
import type { DirectoryDurability } from "./node-directory-durability.js";
|
|
6
|
+
export declare const OWNED_TEMPORARY_CLEANUP_RESIDUE_MARKER = ".foundation-owned-cleanup-";
|
|
7
|
+
export declare function ownedTemporaryCleanupResiduePrefix(temporaryPath: string): string;
|
|
8
|
+
export declare function cleanupIdentityMatchingOwnedTemporary(options: {
|
|
9
|
+
readonly allowUnsupportedDirectoryDurability: boolean;
|
|
10
|
+
readonly displayPath: string;
|
|
11
|
+
readonly expectedIdentity: PortablePathIdentity;
|
|
12
|
+
readonly parent: string;
|
|
13
|
+
readonly rm: (path: string) => Promise<void>;
|
|
14
|
+
readonly syncDirectory: (path: string) => Promise<DirectoryDurability>;
|
|
15
|
+
readonly temporaryPath: string;
|
|
16
|
+
readonly transition?: OwnedTemporaryCleanupTransitionPort;
|
|
17
|
+
readonly operations?: {
|
|
18
|
+
readonly beforeLogicalRetirement?: (path: string) => Promise<void> | void;
|
|
19
|
+
readonly mkdir?: typeof mkdir;
|
|
20
|
+
readonly link?: typeof link;
|
|
21
|
+
readonly pathMatchesRegularFileIdentity?: typeof pathMatchesRegularFileIdentity;
|
|
22
|
+
readonly quarantineToken?: () => string;
|
|
23
|
+
readonly rename?: typeof rename;
|
|
24
|
+
};
|
|
25
|
+
}): Promise<"different" | "missing" | "removed">;
|
|
26
|
+
//# sourceMappingURL=node-cleanup-owned-temporary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-cleanup-owned-temporary.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-cleanup-owned-temporary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,+DAA+D,CAAC;AACzH,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAQ1E,eAAO,MAAM,sCAAsC,+BACrB,CAAC;AAI/B,wBAAgB,kCAAkC,CAChD,aAAa,EAAE,MAAM,GACpB,MAAM,CAER;AAiGD,wBAAsB,qCAAqC,CAAC,OAAO,EAAE;IACnE,QAAQ,CAAC,mCAAmC,EAAE,OAAO,CAAC;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,CACtB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,mCAAmC,CAAC;IAC1D,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC;QAC5B,QAAQ,CAAC,8BAA8B,CAAC,EAAE,OAAO,8BAA8B,CAAC;QAChF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;QACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC;KACjC,CAAC;CACH,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC,CA0G/C"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { link, mkdir, rename } from "node:fs/promises";
|
|
3
|
+
import { basename, join } from "node:path";
|
|
4
|
+
import { pathMatchesRegularFileIdentity } from "./node-bounded-regular-file.js";
|
|
5
|
+
import { syncPublicationDirectory } from "./node-absent-file-publication-private.js";
|
|
6
|
+
import { assertTerminalEvidenceDirectory, ensureTerminalEvidenceDirectory } from "./node-terminal-evidence-directory.js";
|
|
7
|
+
export const OWNED_TEMPORARY_CLEANUP_RESIDUE_MARKER = ".foundation-owned-cleanup-";
|
|
8
|
+
const OWNED_TEMPORARY_RETIRED_EVIDENCE_MARKER = ".foundation-retired-evidence-";
|
|
9
|
+
export function ownedTemporaryCleanupResiduePrefix(temporaryPath) {
|
|
10
|
+
return `.${basename(temporaryPath)}${OWNED_TEMPORARY_CLEANUP_RESIDUE_MARKER}`;
|
|
11
|
+
}
|
|
12
|
+
function cleanupOperations(operations) {
|
|
13
|
+
return {
|
|
14
|
+
beforeLogicalRetirement: operations?.beforeLogicalRetirement,
|
|
15
|
+
identityMatch: operations?.pathMatchesRegularFileIdentity ?? pathMatchesRegularFileIdentity,
|
|
16
|
+
makeDirectory: operations?.mkdir ?? mkdir,
|
|
17
|
+
restore: operations?.link ?? link,
|
|
18
|
+
move: operations?.rename ?? rename,
|
|
19
|
+
token: operations?.quarantineToken?.() ?? randomUUID()
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function beginCleanupTransition(options) {
|
|
23
|
+
const initialOwnership = await options.identityMatch(options.temporaryPath, options.expectedIdentity);
|
|
24
|
+
if (initialOwnership !== "match") {
|
|
25
|
+
return { outcome: initialOwnership };
|
|
26
|
+
}
|
|
27
|
+
const transition = await options.transition?.begin();
|
|
28
|
+
if (transition !== undefined &&
|
|
29
|
+
(await options.identityMatch(options.temporaryPath, options.expectedIdentity)) !== "match") {
|
|
30
|
+
throw new Error(`Owned temporary changed after its cleanup transition began: ${options.displayPath}.`);
|
|
31
|
+
}
|
|
32
|
+
return { outcome: "owned", transition };
|
|
33
|
+
}
|
|
34
|
+
async function removeEmptyQuarantineAfterMissing(options) {
|
|
35
|
+
const terminalRoot = await ensureTerminalEvidenceDirectory(options.retiredEvidenceRoot, { mkdir: options.makeDirectory });
|
|
36
|
+
await assertTerminalEvidenceDirectory(terminalRoot);
|
|
37
|
+
await options.move(options.quarantineDirectory, options.retiredDirectory);
|
|
38
|
+
await syncPublicationDirectory(options.cleanupOptions);
|
|
39
|
+
await options.transition?.complete();
|
|
40
|
+
return "missing";
|
|
41
|
+
}
|
|
42
|
+
async function logicallyRetireQuarantine(options) {
|
|
43
|
+
await options.beforeLogicalRetirement?.(options.quarantinedPath);
|
|
44
|
+
if ((await options.identityMatch(options.quarantinedPath, options.expectedIdentity)) !== "match") {
|
|
45
|
+
return "different";
|
|
46
|
+
}
|
|
47
|
+
await assertTerminalEvidenceDirectory(options.terminalRoot);
|
|
48
|
+
await options.move(options.quarantineDirectory, options.retiredDirectory);
|
|
49
|
+
await syncPublicationDirectory(options.cleanupOptions);
|
|
50
|
+
return "removed";
|
|
51
|
+
}
|
|
52
|
+
export async function cleanupIdentityMatchingOwnedTemporary(options) {
|
|
53
|
+
const { beforeLogicalRetirement, identityMatch, makeDirectory, move, restore, token } = cleanupOperations(options.operations);
|
|
54
|
+
const quarantineDirectory = join(options.parent, `${ownedTemporaryCleanupResiduePrefix(options.temporaryPath)}${token}`);
|
|
55
|
+
const quarantinedPath = join(quarantineDirectory, "owned-temporary");
|
|
56
|
+
const retiredEvidenceRoot = join(options.parent, OWNED_TEMPORARY_RETIRED_EVIDENCE_MARKER);
|
|
57
|
+
const retiredDirectory = join(retiredEvidenceRoot, token);
|
|
58
|
+
const begun = await beginCleanupTransition({
|
|
59
|
+
displayPath: options.displayPath,
|
|
60
|
+
expectedIdentity: options.expectedIdentity,
|
|
61
|
+
identityMatch,
|
|
62
|
+
temporaryPath: options.temporaryPath,
|
|
63
|
+
...(options.transition === undefined
|
|
64
|
+
? {}
|
|
65
|
+
: { transition: options.transition })
|
|
66
|
+
});
|
|
67
|
+
if (begun.outcome !== "owned") {
|
|
68
|
+
return begun.outcome;
|
|
69
|
+
}
|
|
70
|
+
const { transition } = begun;
|
|
71
|
+
try {
|
|
72
|
+
await makeDirectory(quarantineDirectory, { mode: 0o700 });
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (errorCode(error) === "EEXIST") {
|
|
76
|
+
return "different";
|
|
77
|
+
}
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
await move(options.temporaryPath, quarantinedPath);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (errorCode(error) === "ENOENT") {
|
|
85
|
+
return removeEmptyQuarantineAfterMissing({
|
|
86
|
+
cleanupOptions: options,
|
|
87
|
+
makeDirectory,
|
|
88
|
+
quarantineDirectory,
|
|
89
|
+
move,
|
|
90
|
+
retiredEvidenceRoot,
|
|
91
|
+
retiredDirectory,
|
|
92
|
+
transition
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
// Persist the atomic capture before deciding whether it grants deletion
|
|
98
|
+
// authority. Rename changes both directories, so durability requires the
|
|
99
|
+
// destination quarantine first and the source parent second.
|
|
100
|
+
await syncCleanupDirectory(options, quarantineDirectory);
|
|
101
|
+
await syncCleanupDirectory(options, options.parent);
|
|
102
|
+
const ownership = await identityMatch(quarantinedPath, options.expectedIdentity);
|
|
103
|
+
if (ownership === "missing") {
|
|
104
|
+
return "different";
|
|
105
|
+
}
|
|
106
|
+
if (ownership === "different") {
|
|
107
|
+
try {
|
|
108
|
+
await restore(quarantinedPath, options.temporaryPath);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (errorCode(error) === "EEXIST") {
|
|
112
|
+
return "different";
|
|
113
|
+
}
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
await syncCleanupDirectory(options, options.parent);
|
|
117
|
+
return "different";
|
|
118
|
+
}
|
|
119
|
+
const terminalRoot = await ensureTerminalEvidenceDirectory(retiredEvidenceRoot, { mkdir: makeDirectory });
|
|
120
|
+
await syncCleanupDirectory(options, options.parent);
|
|
121
|
+
// Node exposes no unlink-by-handle or identity-conditional unlink. Moving
|
|
122
|
+
// the whole private directory into a terminal namespace is atomic and can
|
|
123
|
+
// never delete a pathname replacement introduced after the final proof.
|
|
124
|
+
const retirement = await logicallyRetireQuarantine({
|
|
125
|
+
cleanupOptions: options,
|
|
126
|
+
expectedIdentity: options.expectedIdentity,
|
|
127
|
+
identityMatch,
|
|
128
|
+
move,
|
|
129
|
+
quarantinedPath,
|
|
130
|
+
quarantineDirectory,
|
|
131
|
+
retiredDirectory,
|
|
132
|
+
terminalRoot,
|
|
133
|
+
...(beforeLogicalRetirement === undefined
|
|
134
|
+
? {}
|
|
135
|
+
: { beforeLogicalRetirement })
|
|
136
|
+
});
|
|
137
|
+
if (retirement === "different") {
|
|
138
|
+
return retirement;
|
|
139
|
+
}
|
|
140
|
+
await transition?.complete();
|
|
141
|
+
return "removed";
|
|
142
|
+
}
|
|
143
|
+
async function syncCleanupDirectory(options, parent) {
|
|
144
|
+
await syncPublicationDirectory({ ...options, parent });
|
|
145
|
+
}
|
|
146
|
+
function errorCode(error) {
|
|
147
|
+
return error instanceof Error && "code" in error
|
|
148
|
+
? error.code
|
|
149
|
+
: undefined;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=node-cleanup-owned-temporary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-cleanup-owned-temporary.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-cleanup-owned-temporary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export type DirectoryDurability = "durable" | "unsupported";
|
|
2
|
+
export declare class StrictDirectoryDurabilityError extends Error {
|
|
3
|
+
constructor(path: string);
|
|
4
|
+
}
|
|
2
5
|
interface DirectorySyncHandle {
|
|
3
6
|
close(): Promise<void>;
|
|
4
7
|
sync(): Promise<void>;
|
|
@@ -8,5 +11,8 @@ interface DirectoryDurabilityOperations {
|
|
|
8
11
|
readonly platform: NodeJS.Platform;
|
|
9
12
|
}
|
|
10
13
|
export declare function syncDirectoryDurably(path: string, operations?: DirectoryDurabilityOperations): Promise<DirectoryDurability>;
|
|
14
|
+
/** For evidence whose protocol cannot honestly admit best-effort durability. */
|
|
15
|
+
export declare function syncDirectoryStrictly(path: string): Promise<void>;
|
|
16
|
+
export declare function syncDirectoryStrictlyWith(path: string, syncDirectory: (path: string) => Promise<DirectoryDurability>): Promise<void>;
|
|
11
17
|
export {};
|
|
12
18
|
//# sourceMappingURL=node-directory-durability.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-directory-durability.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-directory-durability.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,aAAa,CAAC;AAE5D,UAAU,mBAAmB;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,UAAU,6BAA6B;IACrC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;CACpC;AAeD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,6BAAiE,GAC5E,OAAO,CAAC,mBAAmB,CAAC,CAkB9B"}
|
|
1
|
+
{"version":3,"file":"node-directory-durability.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-directory-durability.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,aAAa,CAAC;AAE5D,qBAAa,8BAA+B,SAAQ,KAAK;IACvD,YAAmB,IAAI,EAAE,MAAM,EAG9B;CACF;AAED,UAAU,mBAAmB;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,UAAU,6BAA6B;IACrC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;CACpC;AAeD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,6BAAiE,GAC5E,OAAO,CAAC,mBAAmB,CAAC,CAkB9B;AAED,gFAAgF;AAChF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAC5D,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { open } from "node:fs/promises";
|
|
2
|
+
export class StrictDirectoryDurabilityError extends Error {
|
|
3
|
+
constructor(path) {
|
|
4
|
+
super(`Strict directory durability is unsupported: ${path}.`);
|
|
5
|
+
this.name = "StrictDirectoryDurabilityError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
2
8
|
const nodeDirectoryDurabilityOperations = {
|
|
3
9
|
async open(path) {
|
|
4
10
|
return open(path, "r");
|
|
@@ -29,4 +35,13 @@ export async function syncDirectoryDurably(path, operations = nodeDirectoryDurab
|
|
|
29
35
|
throw error;
|
|
30
36
|
}
|
|
31
37
|
}
|
|
38
|
+
/** For evidence whose protocol cannot honestly admit best-effort durability. */
|
|
39
|
+
export async function syncDirectoryStrictly(path) {
|
|
40
|
+
return syncDirectoryStrictlyWith(path, syncDirectoryDurably);
|
|
41
|
+
}
|
|
42
|
+
export async function syncDirectoryStrictlyWith(path, syncDirectory) {
|
|
43
|
+
if ((await syncDirectory(path)) === "unsupported") {
|
|
44
|
+
throw new StrictDirectoryDurabilityError(path);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
32
47
|
//# sourceMappingURL=node-directory-durability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-directory-durability.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-directory-durability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"node-directory-durability.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-directory-durability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAIxC,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IACvD,YAAmB,IAAY;QAC7B,KAAK,CAAC,+CAA+C,IAAI,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAYD,MAAM,iCAAiC,GAAkC;IACvE,KAAK,CAAC,IAAI,CAAC,IAAI;QACb,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,QAAQ,EAAE,OAAO,CAAC,QAAQ;CAC3B,CAAC;AAEF,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK;QAC9C,CAAC,CAAE,KAA+B,CAAC,IAAI;QACvC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,UAAU,GAAkC,iCAAiC;IAE7E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,UAAU,CAAC,QAAQ,KAAK,OAAO;YAC/B,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EACxE,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY;IACtD,OAAO,yBAAyB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAAY,EACZ,aAA6D;IAE7D,IAAI,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;QAClD,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FileHandle } from "node:fs/promises";
|
|
2
|
+
import { type ExactFilePostimage } from "../../application/model/exact-postimage.js";
|
|
3
|
+
import type { PortablePathIdentity } from "../../application/model/path-identity.js";
|
|
4
|
+
export declare function prepareExactSiblingTemporary(options: {
|
|
5
|
+
readonly displayPath: string;
|
|
6
|
+
readonly faultInjector: ((point: {
|
|
7
|
+
readonly phase: "after-temporary-written";
|
|
8
|
+
}) => Promise<void> | void) | undefined;
|
|
9
|
+
readonly onIdentityCaptured: (identity: PortablePathIdentity) => void;
|
|
10
|
+
readonly open: (path: string, flags: "wx", mode: number) => Promise<FileHandle>;
|
|
11
|
+
readonly postimage: ExactFilePostimage;
|
|
12
|
+
readonly temporaryPath: string;
|
|
13
|
+
}): Promise<PortablePathIdentity>;
|
|
14
|
+
//# sourceMappingURL=node-prepare-exact-sibling-temporary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-prepare-exact-sibling-temporary.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAA8B,KAAK,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AACjH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAIrF,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAClB,CAAC,CAAC,KAAK,EAAE;QACP,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;KAC3C,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAC3B,SAAS,CAAC;IACd,QAAQ,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,IAAI,EAAE,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,IAAI,EACX,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwBhC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AbsentFilePublicationError } from "../../application/model/exact-postimage.js";
|
|
2
|
+
import { captureFileHandleIdentity } from "./node-bounded-regular-file.js";
|
|
3
|
+
import { publicationErrorCode } from "./node-absent-file-publication-private.js";
|
|
4
|
+
export async function prepareExactSiblingTemporary(options) {
|
|
5
|
+
const handle = await options
|
|
6
|
+
.open(options.temporaryPath, "wx", 0o600)
|
|
7
|
+
.catch((error) => {
|
|
8
|
+
if (publicationErrorCode(error) === "EEXIST") {
|
|
9
|
+
throw new AbsentFilePublicationError("TEMPORARY_EXISTS", `Temporary path already exists: ${options.displayPath}.`, { cause: error });
|
|
10
|
+
}
|
|
11
|
+
throw error;
|
|
12
|
+
});
|
|
13
|
+
try {
|
|
14
|
+
const identity = await captureFileHandleIdentity(handle);
|
|
15
|
+
options.onIdentityCaptured(identity);
|
|
16
|
+
await handle.writeFile(options.postimage.bytes);
|
|
17
|
+
await options.faultInjector?.({ phase: "after-temporary-written" });
|
|
18
|
+
await handle.chmod(options.postimage.mode);
|
|
19
|
+
await handle.sync();
|
|
20
|
+
return identity;
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
await handle.close();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=node-prepare-exact-sibling-temporary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-prepare-exact-sibling-temporary.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAA2B,MAAM,4CAA4C,CAAC;AAEjH,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAelD;IACC,MAAM,MAAM,GAAG,MAAM,OAAO;SACzB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC;SACxC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACxB,IAAI,oBAAoB,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,IAAI,0BAA0B,CAClC,kBAAkB,EAClB,kCAAkC,OAAO,CAAC,WAAW,GAAG,EACxD,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACL,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|