@openclaw/fs-safe 0.17.0 → 0.18.1
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/CHANGELOG.md +53 -0
- package/dist/absolute-path.d.ts +0 -1
- package/dist/advanced.d.ts +2 -2
- package/dist/archive-crc32.d.ts +0 -1
- package/dist/archive-deadline.d.ts +0 -1
- package/dist/archive-durability.d.ts +1 -2
- package/dist/archive-entry.d.ts +0 -1
- package/dist/archive-errors.d.ts +0 -1
- package/dist/archive-gzip-tail.d.ts +0 -1
- package/dist/archive-input.d.ts +0 -1
- package/dist/archive-kind.d.ts +0 -1
- package/dist/archive-limits.d.ts +0 -1
- package/dist/archive-merge.d.ts +2 -4
- package/dist/archive-merge.js +14 -4
- package/dist/archive-parser-errors.d.ts +0 -1
- package/dist/archive-parser.wasm +0 -0
- package/dist/archive-plan.d.ts +72 -2
- package/dist/archive-plan.js +86 -22
- package/dist/archive-read.d.ts +0 -1
- package/dist/archive-staging.d.ts +0 -1
- package/dist/archive-tar-stream.d.ts +0 -1
- package/dist/archive-tar-wasm.d.ts +1 -2
- package/dist/archive-zip-admission.d.ts +0 -1
- package/dist/archive-zip-count.d.ts +0 -1
- package/dist/archive-zip-directory.d.ts +1 -2
- package/dist/archive-zip-entry.d.ts +1 -2
- package/dist/archive-zip-entry.js +1 -1
- package/dist/archive-zip-integrity.d.ts +0 -1
- package/dist/archive-zip-loader.d.ts +0 -1
- package/dist/archive-zip-manifest.d.ts +0 -1
- package/dist/archive-zip-names.d.ts +0 -1
- package/dist/archive-zip-preflight.d.ts +0 -1
- package/dist/archive.d.ts +8 -6
- package/dist/archive.js +204 -168
- package/dist/async-lock.d.ts +0 -1
- package/dist/atomic.d.ts +3 -2
- package/dist/bounded-read-stream.d.ts +0 -1
- package/dist/bounded-read.d.ts +0 -1
- package/dist/byte-budget.d.ts +0 -1
- package/dist/byte-view.d.ts +0 -1
- package/dist/clone-metadata.d.ts +0 -1
- package/dist/config.d.ts +0 -1
- package/dist/containment.d.ts +0 -1
- package/dist/copy-file-input.d.ts +0 -1
- package/dist/copy-policy.d.ts +0 -1
- package/dist/copy-publication.d.ts +1 -2
- package/dist/copy-tree-portable.d.ts +0 -1
- package/dist/copy-tree-portable.js +9 -6
- package/dist/copy.d.ts +0 -1
- package/dist/copy.js +5 -5
- package/dist/create-owned-file.d.ts +0 -1
- package/dist/create.d.ts +16 -3
- package/dist/create.js +388 -2
- package/dist/creation-boundary.d.ts +60 -0
- package/dist/creation-boundary.js +371 -0
- package/dist/deny-mutations.d.ts +2 -3
- package/dist/deny-mutations.js +55 -35
- package/dist/device-path.d.ts +0 -1
- package/dist/directory-durability.d.ts +0 -1
- package/dist/directory-entry-path.d.ts +0 -1
- package/dist/directory-guard.d.ts +2 -7
- package/dist/directory-guard.js +25 -56
- package/dist/directory-mode-node.d.ts +0 -1
- package/dist/directory-mode-node.js +12 -2
- package/dist/directory-mode-owner.d.ts +0 -1
- package/dist/directory-receipt.d.ts +0 -1
- package/dist/durability.d.ts +2 -2
- package/dist/effective-uid.d.ts +0 -1
- package/dist/error-detail.d.ts +0 -1
- package/dist/errors.d.ts +0 -1
- package/dist/file-cleanup.d.ts +0 -1
- package/dist/file-contents.d.ts +0 -1
- package/dist/file-handle-transfer.d.ts +0 -1
- package/dist/file-hash.d.ts +0 -1
- package/dist/file-hash.js +170 -66
- package/dist/file-identity.d.ts +0 -1
- package/dist/file-lock-sync-acquisition.d.ts +22 -0
- package/dist/file-lock-sync-acquisition.js +98 -0
- package/dist/file-lock-sync-admission.d.ts +0 -2
- package/dist/file-lock-sync-admission.js +9 -48
- package/dist/file-lock-sync-root-acquire.d.ts +0 -1
- package/dist/file-lock-sync-root-acquire.js +33 -103
- package/dist/file-lock-sync-root-arbitration.d.ts +0 -1
- package/dist/file-lock-sync-root-held.d.ts +0 -1
- package/dist/file-lock-sync-root-io.d.ts +0 -1
- package/dist/file-lock-sync-root-mutation.d.ts +4 -5
- package/dist/file-lock-sync-root-mutation.js +7 -9
- package/dist/file-lock-sync-root-options.d.ts +0 -1
- package/dist/file-lock-sync-root-registration.d.ts +0 -1
- package/dist/file-lock-sync-root.d.ts +3 -3
- package/dist/file-lock-sync-root.js +14 -87
- package/dist/file-lock-sync-stale-admission.d.ts +2 -7
- package/dist/file-lock-sync-stale-admission.js +18 -27
- package/dist/file-lock-sync.d.ts +4 -22
- package/dist/file-lock-sync.js +38 -117
- package/dist/file-lock.d.ts +0 -1
- package/dist/file-observation.d.ts +0 -1
- package/dist/file-store-boundary.d.ts +7 -2
- package/dist/file-store-boundary.js +64 -27
- package/dist/file-store-prune.d.ts +0 -1
- package/dist/file-store-sync-directory.d.ts +0 -1
- package/dist/file-store-sync-directory.js +194 -231
- package/dist/file-store-sync-write.d.ts +0 -1
- package/dist/file-store-sync-write.js +18 -29
- package/dist/file-store.d.ts +0 -1
- package/dist/file-store.js +4 -10
- package/dist/file-sync.d.ts +0 -1
- package/dist/filename.d.ts +0 -1
- package/dist/filename.js +1 -7
- package/dist/fs.d.ts +0 -1
- package/dist/guarded-mkdir.d.ts +1 -2
- package/dist/guarded-mutation.d.ts +0 -7
- package/dist/guarded-mutation.js +6 -11
- package/dist/guest-dispatch-python.d.ts +0 -1
- package/dist/guest-dispatch-python.js +41 -90
- package/dist/guest-native-python.d.ts +0 -1
- package/dist/guest.d.ts +0 -1
- package/dist/home-dir.d.ts +0 -1
- package/dist/index.d.ts +9 -7
- package/dist/install-path.d.ts +0 -1
- package/dist/json-document-store.d.ts +0 -1
- package/dist/json-durable-queue-directory.d.ts +13 -1
- package/dist/json-durable-queue-directory.js +134 -0
- package/dist/json-durable-queue-ownership.d.ts +0 -1
- package/dist/json-durable-queue-ownership.js +42 -61
- package/dist/json-durable-queue-read.d.ts +0 -1
- package/dist/json-durable-queue-read.js +13 -9
- package/dist/json-durable-queue.d.ts +0 -1
- package/dist/json-durable-queue.js +8 -132
- package/dist/json-store.d.ts +0 -1
- package/dist/json-store.js +1 -2
- package/dist/json-stringify.d.ts +0 -1
- package/dist/json.d.ts +0 -1
- package/dist/json.js +7 -17
- package/dist/local-file-access.d.ts +0 -1
- package/dist/local-file-access.js +3 -10
- package/dist/local-file-descriptor.d.ts +0 -1
- package/dist/local-roots.d.ts +0 -1
- package/dist/lock-config.d.ts +0 -1
- package/dist/move-path-cleanup.d.ts +0 -1
- package/dist/move-path-stage.d.ts +0 -1
- package/dist/move-path.d.ts +0 -1
- package/dist/move-path.js +1 -2
- package/dist/mutation-authority.d.ts +0 -1
- package/dist/native-binding.d.ts +0 -1
- package/dist/native-config.d.ts +0 -1
- package/dist/native-directory-observation.d.ts +0 -1
- package/dist/native-fallback-warning.d.ts +0 -1
- package/dist/native-operations.d.ts +1 -5
- package/dist/native-operations.js +2 -7
- package/dist/native-parent-admission.d.ts +0 -1
- package/dist/native-pinned-write-windows.d.ts +1 -2
- package/dist/native-pinned-write-windows.js +1 -1
- package/dist/native-pinned-write.d.ts +1 -2
- package/dist/native-pinned-write.js +7 -16
- package/dist/native-policy-directory-observation.d.ts +0 -1
- package/dist/native-policy-parent-windows.d.ts +1 -2
- package/dist/native-rename-outcome.d.ts +0 -1
- package/dist/native-staged-file.d.ts +17 -5
- package/dist/native-staged-file.js +56 -65
- package/dist/native.d.ts +0 -1
- package/dist/opened-file-failure.d.ts +0 -1
- package/dist/opened-realpath.d.ts +0 -1
- package/dist/output.d.ts +0 -1
- package/dist/overwrite-file-handle.d.ts +0 -1
- package/dist/owner-dacl.d.ts +0 -1
- package/dist/path-case.d.ts +0 -1
- package/dist/path-policy.d.ts +0 -1
- package/dist/path-prefix.d.ts +0 -1
- package/dist/path-scope-lexical.d.ts +0 -1
- package/dist/path-segment-route.d.ts +0 -1
- package/dist/path-suffix-aliases.d.ts +0 -1
- package/dist/path.d.ts +0 -1
- package/dist/permission-exec.d.ts +0 -1
- package/dist/permission-exec.js +19 -25
- package/dist/permissions-public.d.ts +0 -1
- package/dist/permissions-windows.d.ts +2 -10
- package/dist/permissions-windows.js +10 -30
- package/dist/permissions.d.ts +0 -1
- package/dist/permissions.js +8 -16
- package/dist/pinned-mutation-admission.d.ts +1 -2
- package/dist/pinned-mutation-observation.d.ts +0 -1
- package/dist/pinned-mutation-shared-route.d.ts +0 -1
- package/dist/pinned-open.d.ts +1 -1
- package/dist/pinned-open.js +7 -2
- package/dist/pinned-operation.d.ts +1 -2
- package/dist/pinned-operation.js +3 -16
- package/dist/pinned-write-input.d.ts +0 -1
- package/dist/pinned-write-mode.d.ts +0 -1
- package/dist/pinned-write-mode.js +1 -1
- package/dist/pinned-write-staged.d.ts +0 -1
- package/dist/pinned-write-staged.js +1 -2
- package/dist/pinned-write-types.d.ts +9 -21
- package/dist/pinned-write.d.ts +0 -2
- package/dist/pinned-write.js +3 -5
- package/dist/positional-read.d.ts +0 -1
- package/dist/private-directory.d.ts +0 -1
- package/dist/private-producer-handoff-sync.d.ts +2 -13
- package/dist/private-producer-handoff-sync.js +10 -52
- package/dist/private-producer-handoff.d.ts +23 -4
- package/dist/private-producer-handoff.js +69 -46
- package/dist/private-temp-workspace.d.ts +0 -1
- package/dist/private-temp-workspace.js +11 -37
- package/dist/publish-copy-stage.d.ts +1 -2
- package/dist/publish-file-failure.d.ts +0 -1
- package/dist/publish-file.d.ts +0 -2
- package/dist/publish-file.js +1 -2
- package/dist/read-open-flags.d.ts +0 -1
- package/dist/read-opened-file.d.ts +0 -1
- package/dist/realpath.d.ts +0 -1
- package/dist/recursive-mkdir-path.d.ts +0 -1
- package/dist/regular-file.d.ts +0 -1
- package/dist/regular-file.js +77 -139
- package/dist/replace-directory.d.ts +0 -1
- package/dist/replace-directory.js +1 -2
- package/dist/replace-file-copy-fallback.d.ts +0 -1
- package/dist/replace-file-copy-fallback.js +14 -3
- package/dist/replace-file-copy-source.d.ts +0 -1
- package/dist/replace-file-copy-source.js +6 -1
- package/dist/replace-file-descriptor.d.ts +0 -1
- package/dist/replace-file-descriptor.js +6 -1
- package/dist/replace-file-mode.d.ts +0 -1
- package/dist/replace-file-rename-policy.d.ts +1 -3
- package/dist/replace-file-temp-owner.d.ts +12 -13
- package/dist/replace-file-temp-owner.js +66 -85
- package/dist/replace-file.d.ts +3 -4
- package/dist/replace-file.js +1 -1
- package/dist/retained-directory-replacement.d.ts +0 -1
- package/dist/root-boundary.d.ts +0 -1
- package/dist/root-context.d.ts +0 -1
- package/dist/root-context.js +3 -7
- package/dist/root-create-input.d.ts +1 -2
- package/dist/root-directory-creation.d.ts +1 -2
- package/dist/root-directory-creation.js +1 -1
- package/dist/root-directory-list.d.ts +0 -1
- package/dist/root-directory-list.js +3 -7
- package/dist/root-directory.d.ts +0 -1
- package/dist/root-entries.d.ts +0 -1
- package/dist/root-entries.js +2 -2
- package/dist/root-errors.d.ts +4 -1
- package/dist/root-errors.js +5 -3
- package/dist/root-file-final-admission.d.ts +0 -1
- package/dist/root-file.d.ts +0 -1
- package/dist/root-impl.d.ts +2 -15
- package/dist/root-impl.js +136 -112
- package/dist/root-move-noreplace.d.ts +0 -1
- package/dist/root-move-noreplace.js +4 -10
- package/dist/root-move-preflight.d.ts +0 -1
- package/dist/root-observed-path.d.ts +0 -1
- package/dist/root-observed-path.js +2 -4
- package/dist/root-options.d.ts +1 -2
- package/dist/root-path-errors.d.ts +0 -1
- package/dist/root-path-existing.d.ts +3 -1
- package/dist/root-path-existing.js +38 -18
- package/dist/root-path-observation.d.ts +0 -1
- package/dist/root-path-stat.d.ts +0 -1
- package/dist/root-path-stat.js +2 -4
- package/dist/root-path.d.ts +0 -1
- package/dist/root-path.js +60 -188
- package/dist/root-paths-lexical.d.ts +0 -1
- package/dist/root-paths.d.ts +0 -1
- package/dist/root-public-types.d.ts +11 -0
- package/dist/root-read-admission.d.ts +0 -1
- package/dist/root-read-admission.js +31 -44
- package/dist/root-remove-identity.d.ts +0 -1
- package/dist/root-remove-identity.js +2 -4
- package/dist/root-remove-receipt.d.ts +0 -1
- package/dist/root-remove.d.ts +0 -1
- package/dist/root-remove.js +2 -4
- package/dist/root-symlink-policy.d.ts +0 -1
- package/dist/root-walk.d.ts +0 -1
- package/dist/root-write-admission.d.ts +1 -2
- package/dist/root-write-admission.js +3 -7
- package/dist/root-write-compatibility.d.ts +0 -1
- package/dist/root-write-complete-parent.d.ts +0 -1
- package/dist/root-write-complete-parent.js +2 -3
- package/dist/root-write-lock-binding.d.ts +0 -1
- package/dist/root-write-mode.d.ts +0 -1
- package/dist/root-write-publication.d.ts +0 -1
- package/dist/root-write-verification.d.ts +1 -2
- package/dist/root.d.ts +2 -7
- package/dist/safe-path-segment.d.ts +1 -2
- package/dist/safe-path-segment.js +2 -5
- package/dist/secret-file.d.ts +0 -1
- package/dist/secret-file.js +7 -18
- package/dist/secret-read-async.d.ts +0 -1
- package/dist/secret-read-async.js +5 -5
- package/dist/secret-read-policy.d.ts +0 -1
- package/dist/secret.d.ts +0 -1
- package/dist/secure-file-windows.d.ts +0 -6
- package/dist/secure-file-windows.js +13 -28
- package/dist/secure-file.d.ts +0 -1
- package/dist/secure-file.js +9 -9
- package/dist/secure-temp-dir.d.ts +0 -1
- package/dist/secure-temp-repair.d.ts +0 -1
- package/dist/secure-temp-repair.js +5 -1
- package/dist/sibling-staged-file.d.ts +0 -1
- package/dist/sibling-staged-file.js +32 -39
- package/dist/sibling-temp.d.ts +0 -1
- package/dist/sidecar-lock-acquire.d.ts +1 -2
- package/dist/sidecar-lock-acquire.js +37 -61
- package/dist/sidecar-lock-admission-context.d.ts +0 -1
- package/dist/sidecar-lock-admission-parser.d.ts +0 -1
- package/dist/sidecar-lock-admission.d.ts +1 -5
- package/dist/sidecar-lock-admission.js +1 -7
- package/dist/sidecar-lock-handle.d.ts +0 -1
- package/dist/sidecar-lock-policy.d.ts +4 -1
- package/dist/sidecar-lock-policy.js +23 -0
- package/dist/sidecar-lock-reclaim.d.ts +0 -1
- package/dist/sidecar-lock-registration.d.ts +13 -0
- package/dist/sidecar-lock-registration.js +47 -0
- package/dist/sidecar-lock-root.d.ts +0 -1
- package/dist/sidecar-lock-stale-admission.d.ts +0 -1
- package/dist/sidecar-lock-stale-admission.js +2 -6
- package/dist/sidecar-lock-target.d.ts +0 -1
- package/dist/sidecar-lock-types.d.ts +22 -17
- package/dist/sidecar-lock.d.ts +0 -1
- package/dist/sidecar-lock.js +16 -83
- package/dist/staged-directory.d.ts +0 -1
- package/dist/staged-file-settlement.d.ts +0 -1
- package/dist/staged-file-types.d.ts +0 -1
- package/dist/stat-observation.d.ts +0 -1
- package/dist/store.d.ts +0 -1
- package/dist/strict-file-identity.d.ts +0 -1
- package/dist/string-coerce.d.ts +0 -1
- package/dist/suppressed-error.d.ts +0 -1
- package/dist/symlink-parents.d.ts +0 -1
- package/dist/temp-cleanup.d.ts +0 -1
- package/dist/temp-target.d.ts +0 -1
- package/dist/temp-target.js +7 -46
- package/dist/temp-workspace-admission.d.ts +0 -8
- package/dist/temp-workspace-admission.js +1 -7
- package/dist/temp-workspace-child-admission.d.ts +16 -6
- package/dist/temp-workspace-child-admission.js +71 -15
- package/dist/temp-workspace-descriptor.d.ts +1 -7
- package/dist/temp-workspace-descriptor.js +1 -4
- package/dist/temp-workspace-owner.d.ts +1 -1
- package/dist/temp-workspace-owner.js +45 -22
- package/dist/temp-workspace-types.d.ts +0 -1
- package/dist/temp.d.ts +0 -1
- package/dist/test-hooks.d.ts +0 -1
- package/dist/text-atomic.d.ts +0 -1
- package/dist/text-atomic.js +1 -1
- package/dist/timing.d.ts +0 -1
- package/dist/trash.d.ts +0 -1
- package/dist/types.d.ts +0 -1
- package/dist/unicode-path.d.ts +0 -1
- package/dist/walk.d.ts +0 -1
- package/dist/windows-command.d.ts +0 -1
- package/dist/windows-owner.d.ts +0 -1
- package/dist/windows-owner.js +5 -2
- package/dist/windows-path-alias.d.ts +1 -1
- package/dist/windows-path-alias.js +12 -43
- package/dist/windows-path-syntax.d.ts +5 -0
- package/dist/windows-path-syntax.js +21 -0
- package/dist/windows-security-command.d.ts +0 -1
- package/dist/windows-security-facts.d.ts +0 -1
- package/dist/write-file-handle.d.ts +0 -1
- package/dist/write-open-flags.d.ts +0 -1
- package/dist/write-queue.d.ts +0 -1
- package/docs/advanced.md +3 -1
- package/docs/atomic.md +14 -0
- package/docs/copy.md +2 -0
- package/docs/mutation-policy-proof.md +6 -4
- package/docs/permissions.md +6 -0
- package/docs/root.md +10 -0
- package/docs/secret-file.md +8 -0
- package/docs/sidecar-lock.md +4 -0
- package/docs/store.md +6 -0
- package/docs/temp.md +8 -1
- package/docs/writing.md +14 -3
- package/package.json +8 -9
- package/dist/absolute-path.d.ts.map +0 -1
- package/dist/advanced.d.ts.map +0 -1
- package/dist/archive-crc32.d.ts.map +0 -1
- package/dist/archive-deadline.d.ts.map +0 -1
- package/dist/archive-durability.d.ts.map +0 -1
- package/dist/archive-entry.d.ts.map +0 -1
- package/dist/archive-errors.d.ts.map +0 -1
- package/dist/archive-gzip-tail.d.ts.map +0 -1
- package/dist/archive-input.d.ts.map +0 -1
- package/dist/archive-kind.d.ts.map +0 -1
- package/dist/archive-limits.d.ts.map +0 -1
- package/dist/archive-merge.d.ts.map +0 -1
- package/dist/archive-native.d.ts +0 -22
- package/dist/archive-native.d.ts.map +0 -1
- package/dist/archive-native.js +0 -98
- package/dist/archive-options.d.ts +0 -25
- package/dist/archive-options.d.ts.map +0 -1
- package/dist/archive-parser-errors.d.ts.map +0 -1
- package/dist/archive-plan.d.ts.map +0 -1
- package/dist/archive-policy.d.ts +0 -22
- package/dist/archive-policy.d.ts.map +0 -1
- package/dist/archive-policy.js +0 -38
- package/dist/archive-read.d.ts.map +0 -1
- package/dist/archive-staging.d.ts.map +0 -1
- package/dist/archive-tar-inspect.d.ts +0 -7
- package/dist/archive-tar-inspect.d.ts.map +0 -1
- package/dist/archive-tar-inspect.js +0 -62
- package/dist/archive-tar-stream.d.ts.map +0 -1
- package/dist/archive-tar-wasm.d.ts.map +0 -1
- package/dist/archive-tar.d.ts +0 -19
- package/dist/archive-tar.d.ts.map +0 -1
- package/dist/archive-tar.js +0 -21
- package/dist/archive-zip-admission.d.ts.map +0 -1
- package/dist/archive-zip-count.d.ts.map +0 -1
- package/dist/archive-zip-directory.d.ts.map +0 -1
- package/dist/archive-zip-entry.d.ts.map +0 -1
- package/dist/archive-zip-integrity.d.ts.map +0 -1
- package/dist/archive-zip-loader.d.ts.map +0 -1
- package/dist/archive-zip-manifest.d.ts.map +0 -1
- package/dist/archive-zip-names.d.ts.map +0 -1
- package/dist/archive-zip-preflight.d.ts.map +0 -1
- package/dist/archive.d.ts.map +0 -1
- package/dist/async-lock.d.ts.map +0 -1
- package/dist/atomic.d.ts.map +0 -1
- package/dist/bounded-read-stream.d.ts.map +0 -1
- package/dist/bounded-read.d.ts.map +0 -1
- package/dist/byte-budget.d.ts.map +0 -1
- package/dist/byte-view.d.ts.map +0 -1
- package/dist/clone-metadata.d.ts.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/containment.d.ts.map +0 -1
- package/dist/copy-file-input.d.ts.map +0 -1
- package/dist/copy-policy.d.ts.map +0 -1
- package/dist/copy-publication.d.ts.map +0 -1
- package/dist/copy-tree-portable.d.ts.map +0 -1
- package/dist/copy.d.ts.map +0 -1
- package/dist/create-directory.d.ts +0 -20
- package/dist/create-directory.d.ts.map +0 -1
- package/dist/create-directory.js +0 -130
- package/dist/create-file-async.d.ts +0 -7
- package/dist/create-file-async.d.ts.map +0 -1
- package/dist/create-file-async.js +0 -121
- package/dist/create-file.d.ts +0 -8
- package/dist/create-file.d.ts.map +0 -1
- package/dist/create-file.js +0 -190
- package/dist/create-owned-file.d.ts.map +0 -1
- package/dist/create.d.ts.map +0 -1
- package/dist/creation-darwin.d.ts +0 -6
- package/dist/creation-darwin.d.ts.map +0 -1
- package/dist/creation-darwin.js +0 -70
- package/dist/creation-file-state.d.ts +0 -19
- package/dist/creation-file-state.d.ts.map +0 -1
- package/dist/creation-file-state.js +0 -118
- package/dist/creation-path.d.ts +0 -21
- package/dist/creation-path.d.ts.map +0 -1
- package/dist/creation-path.js +0 -71
- package/dist/creation-permissions.d.ts +0 -19
- package/dist/creation-permissions.d.ts.map +0 -1
- package/dist/creation-permissions.js +0 -125
- package/dist/deny-mutations.d.ts.map +0 -1
- package/dist/device-path.d.ts.map +0 -1
- package/dist/directory-durability.d.ts.map +0 -1
- package/dist/directory-entry-path.d.ts.map +0 -1
- package/dist/directory-guard.d.ts.map +0 -1
- package/dist/directory-mode-node.d.ts.map +0 -1
- package/dist/directory-mode-owner.d.ts.map +0 -1
- package/dist/directory-receipt.d.ts.map +0 -1
- package/dist/durability.d.ts.map +0 -1
- package/dist/effective-uid.d.ts.map +0 -1
- package/dist/error-detail.d.ts.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/file-cleanup.d.ts.map +0 -1
- package/dist/file-contents.d.ts.map +0 -1
- package/dist/file-handle-transfer.d.ts.map +0 -1
- package/dist/file-hash.d.ts.map +0 -1
- package/dist/file-identity.d.ts.map +0 -1
- package/dist/file-lock-sync-admission.d.ts.map +0 -1
- package/dist/file-lock-sync-root-acquire.d.ts.map +0 -1
- package/dist/file-lock-sync-root-arbitration.d.ts.map +0 -1
- package/dist/file-lock-sync-root-held.d.ts.map +0 -1
- package/dist/file-lock-sync-root-io.d.ts.map +0 -1
- package/dist/file-lock-sync-root-mutation.d.ts.map +0 -1
- package/dist/file-lock-sync-root-options.d.ts.map +0 -1
- package/dist/file-lock-sync-root-registration.d.ts.map +0 -1
- package/dist/file-lock-sync-root.d.ts.map +0 -1
- package/dist/file-lock-sync-stale-admission.d.ts.map +0 -1
- package/dist/file-lock-sync.d.ts.map +0 -1
- package/dist/file-lock.d.ts.map +0 -1
- package/dist/file-observation.d.ts.map +0 -1
- package/dist/file-store-boundary.d.ts.map +0 -1
- package/dist/file-store-copy-source.d.ts +0 -5
- package/dist/file-store-copy-source.d.ts.map +0 -1
- package/dist/file-store-copy-source.js +0 -31
- package/dist/file-store-limit.d.ts +0 -2
- package/dist/file-store-limit.d.ts.map +0 -1
- package/dist/file-store-limit.js +0 -8
- package/dist/file-store-path.d.ts +0 -3
- package/dist/file-store-path.d.ts.map +0 -1
- package/dist/file-store-path.js +0 -30
- package/dist/file-store-prune.d.ts.map +0 -1
- package/dist/file-store-sync-directory.d.ts.map +0 -1
- package/dist/file-store-sync-write.d.ts.map +0 -1
- package/dist/file-store.d.ts.map +0 -1
- package/dist/file-sync.d.ts.map +0 -1
- package/dist/filename.d.ts.map +0 -1
- package/dist/fs.d.ts.map +0 -1
- package/dist/guarded-mkdir.d.ts.map +0 -1
- package/dist/guarded-mutation.d.ts.map +0 -1
- package/dist/guest-dispatch-python.d.ts.map +0 -1
- package/dist/guest-native-python.d.ts.map +0 -1
- package/dist/guest.d.ts.map +0 -1
- package/dist/home-dir.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/install-path.d.ts.map +0 -1
- package/dist/json-document-store.d.ts.map +0 -1
- package/dist/json-durable-queue-directory.d.ts.map +0 -1
- package/dist/json-durable-queue-ownership.d.ts.map +0 -1
- package/dist/json-durable-queue-paths.d.ts +0 -11
- package/dist/json-durable-queue-paths.d.ts.map +0 -1
- package/dist/json-durable-queue-paths.js +0 -20
- package/dist/json-durable-queue-read.d.ts.map +0 -1
- package/dist/json-durable-queue.d.ts.map +0 -1
- package/dist/json-store.d.ts.map +0 -1
- package/dist/json-stringify.d.ts.map +0 -1
- package/dist/json.d.ts.map +0 -1
- package/dist/local-file-access.d.ts.map +0 -1
- package/dist/local-file-descriptor.d.ts.map +0 -1
- package/dist/local-roots.d.ts.map +0 -1
- package/dist/lock-config.d.ts.map +0 -1
- package/dist/move-path-cleanup.d.ts.map +0 -1
- package/dist/move-path-stage.d.ts.map +0 -1
- package/dist/move-path.d.ts.map +0 -1
- package/dist/mutation-authority.d.ts.map +0 -1
- package/dist/native-binding.d.ts.map +0 -1
- package/dist/native-config.d.ts.map +0 -1
- package/dist/native-directory-observation.d.ts.map +0 -1
- package/dist/native-fallback-warning.d.ts.map +0 -1
- package/dist/native-operations.d.ts.map +0 -1
- package/dist/native-parent-admission.d.ts.map +0 -1
- package/dist/native-pinned-write-windows.d.ts.map +0 -1
- package/dist/native-pinned-write.d.ts.map +0 -1
- package/dist/native-policy-directory-observation.d.ts.map +0 -1
- package/dist/native-policy-parent-windows.d.ts.map +0 -1
- package/dist/native-rename-outcome.d.ts.map +0 -1
- package/dist/native-staged-file.d.ts.map +0 -1
- package/dist/native.d.ts.map +0 -1
- package/dist/opened-file-failure.d.ts.map +0 -1
- package/dist/opened-realpath.d.ts.map +0 -1
- package/dist/output.d.ts.map +0 -1
- package/dist/overwrite-file-handle.d.ts.map +0 -1
- package/dist/owner-dacl.d.ts.map +0 -1
- package/dist/path-case.d.ts.map +0 -1
- package/dist/path-policy.d.ts.map +0 -1
- package/dist/path-prefix.d.ts.map +0 -1
- package/dist/path-scope-lexical.d.ts.map +0 -1
- package/dist/path-segment-route.d.ts.map +0 -1
- package/dist/path-suffix-aliases.d.ts.map +0 -1
- package/dist/path.d.ts.map +0 -1
- package/dist/permission-exec.d.ts.map +0 -1
- package/dist/permissions-public.d.ts.map +0 -1
- package/dist/permissions-windows.d.ts.map +0 -1
- package/dist/permissions.d.ts.map +0 -1
- package/dist/pinned-mutation-admission.d.ts.map +0 -1
- package/dist/pinned-mutation-observation.d.ts.map +0 -1
- package/dist/pinned-mutation-shared-route.d.ts.map +0 -1
- package/dist/pinned-open.d.ts.map +0 -1
- package/dist/pinned-operation.d.ts.map +0 -1
- package/dist/pinned-write-input.d.ts.map +0 -1
- package/dist/pinned-write-mode.d.ts.map +0 -1
- package/dist/pinned-write-staged.d.ts.map +0 -1
- package/dist/pinned-write-types.d.ts.map +0 -1
- package/dist/pinned-write.d.ts.map +0 -1
- package/dist/positional-read.d.ts.map +0 -1
- package/dist/private-directory.d.ts.map +0 -1
- package/dist/private-producer-handoff-sync.d.ts.map +0 -1
- package/dist/private-producer-handoff.d.ts.map +0 -1
- package/dist/private-temp-workspace.d.ts.map +0 -1
- package/dist/publish-copy-stage.d.ts.map +0 -1
- package/dist/publish-file-failure.d.ts.map +0 -1
- package/dist/publish-file.d.ts.map +0 -1
- package/dist/read-open-flags.d.ts.map +0 -1
- package/dist/read-opened-file.d.ts.map +0 -1
- package/dist/realpath.d.ts.map +0 -1
- package/dist/recursive-mkdir-path.d.ts.map +0 -1
- package/dist/regular-file.d.ts.map +0 -1
- package/dist/replace-directory.d.ts.map +0 -1
- package/dist/replace-file-copy-fallback.d.ts.map +0 -1
- package/dist/replace-file-copy-source.d.ts.map +0 -1
- package/dist/replace-file-descriptor.d.ts.map +0 -1
- package/dist/replace-file-mode.d.ts.map +0 -1
- package/dist/replace-file-rename-policy.d.ts.map +0 -1
- package/dist/replace-file-temp-owner.d.ts.map +0 -1
- package/dist/replace-file.d.ts.map +0 -1
- package/dist/retained-directory-replacement.d.ts.map +0 -1
- package/dist/root-boundary.d.ts.map +0 -1
- package/dist/root-context.d.ts.map +0 -1
- package/dist/root-create-input.d.ts.map +0 -1
- package/dist/root-directory-creation.d.ts.map +0 -1
- package/dist/root-directory-list.d.ts.map +0 -1
- package/dist/root-directory.d.ts.map +0 -1
- package/dist/root-entries.d.ts.map +0 -1
- package/dist/root-errors.d.ts.map +0 -1
- package/dist/root-file-final-admission.d.ts.map +0 -1
- package/dist/root-file.d.ts.map +0 -1
- package/dist/root-impl.d.ts.map +0 -1
- package/dist/root-move-noreplace.d.ts.map +0 -1
- package/dist/root-move-preflight.d.ts.map +0 -1
- package/dist/root-observed-path.d.ts.map +0 -1
- package/dist/root-options.d.ts.map +0 -1
- package/dist/root-path-errors.d.ts.map +0 -1
- package/dist/root-path-existing.d.ts.map +0 -1
- package/dist/root-path-observation.d.ts.map +0 -1
- package/dist/root-path-stat.d.ts.map +0 -1
- package/dist/root-path-symlink.d.ts +0 -7
- package/dist/root-path-symlink.d.ts.map +0 -1
- package/dist/root-path-symlink.js +0 -55
- package/dist/root-path.d.ts.map +0 -1
- package/dist/root-paths-lexical.d.ts.map +0 -1
- package/dist/root-paths.d.ts.map +0 -1
- package/dist/root-read-admission.d.ts.map +0 -1
- package/dist/root-remove-identity.d.ts.map +0 -1
- package/dist/root-remove-receipt.d.ts.map +0 -1
- package/dist/root-remove.d.ts.map +0 -1
- package/dist/root-symlink-policy.d.ts.map +0 -1
- package/dist/root-walk.d.ts.map +0 -1
- package/dist/root-write-admission.d.ts.map +0 -1
- package/dist/root-write-compatibility.d.ts.map +0 -1
- package/dist/root-write-complete-parent.d.ts.map +0 -1
- package/dist/root-write-lock-binding.d.ts.map +0 -1
- package/dist/root-write-mode.d.ts.map +0 -1
- package/dist/root-write-publication.d.ts.map +0 -1
- package/dist/root-write-verification.d.ts.map +0 -1
- package/dist/root.d.ts.map +0 -1
- package/dist/safe-path-segment.d.ts.map +0 -1
- package/dist/secret-file.d.ts.map +0 -1
- package/dist/secret-read-async.d.ts.map +0 -1
- package/dist/secret-read-policy.d.ts.map +0 -1
- package/dist/secret.d.ts.map +0 -1
- package/dist/secure-file-windows.d.ts.map +0 -1
- package/dist/secure-file.d.ts.map +0 -1
- package/dist/secure-temp-dir.d.ts.map +0 -1
- package/dist/secure-temp-repair.d.ts.map +0 -1
- package/dist/sibling-staged-file.d.ts.map +0 -1
- package/dist/sibling-temp.d.ts.map +0 -1
- package/dist/sidecar-lock-acquire.d.ts.map +0 -1
- package/dist/sidecar-lock-admission-context.d.ts.map +0 -1
- package/dist/sidecar-lock-admission-parser.d.ts.map +0 -1
- package/dist/sidecar-lock-admission.d.ts.map +0 -1
- package/dist/sidecar-lock-handle.d.ts.map +0 -1
- package/dist/sidecar-lock-policy.d.ts.map +0 -1
- package/dist/sidecar-lock-reclaim.d.ts.map +0 -1
- package/dist/sidecar-lock-root.d.ts.map +0 -1
- package/dist/sidecar-lock-stale-admission.d.ts.map +0 -1
- package/dist/sidecar-lock-target.d.ts.map +0 -1
- package/dist/sidecar-lock-types.d.ts.map +0 -1
- package/dist/sidecar-lock.d.ts.map +0 -1
- package/dist/staged-directory.d.ts.map +0 -1
- package/dist/staged-file-settlement.d.ts.map +0 -1
- package/dist/staged-file-types.d.ts.map +0 -1
- package/dist/standalone-publication-path.d.ts +0 -2
- package/dist/standalone-publication-path.d.ts.map +0 -1
- package/dist/standalone-publication-path.js +0 -6
- package/dist/stat-observation.d.ts.map +0 -1
- package/dist/store.d.ts.map +0 -1
- package/dist/strict-file-identity.d.ts.map +0 -1
- package/dist/string-coerce.d.ts.map +0 -1
- package/dist/suppressed-error.d.ts.map +0 -1
- package/dist/symlink-parents.d.ts.map +0 -1
- package/dist/temp-cleanup.d.ts.map +0 -1
- package/dist/temp-target.d.ts.map +0 -1
- package/dist/temp-workspace-admission.d.ts.map +0 -1
- package/dist/temp-workspace-child-admission.d.ts.map +0 -1
- package/dist/temp-workspace-descriptor.d.ts.map +0 -1
- package/dist/temp-workspace-identity.d.ts +0 -15
- package/dist/temp-workspace-identity.d.ts.map +0 -1
- package/dist/temp-workspace-identity.js +0 -41
- package/dist/temp-workspace-owner.d.ts.map +0 -1
- package/dist/temp-workspace-permissions.d.ts +0 -4
- package/dist/temp-workspace-permissions.d.ts.map +0 -1
- package/dist/temp-workspace-permissions.js +0 -32
- package/dist/temp-workspace-types.d.ts.map +0 -1
- package/dist/temp.d.ts.map +0 -1
- package/dist/test-hooks.d.ts.map +0 -1
- package/dist/text-atomic.d.ts.map +0 -1
- package/dist/timing.d.ts.map +0 -1
- package/dist/trash.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/unicode-path.d.ts.map +0 -1
- package/dist/walk.d.ts.map +0 -1
- package/dist/windows-command.d.ts.map +0 -1
- package/dist/windows-owner.d.ts.map +0 -1
- package/dist/windows-path-alias.d.ts.map +0 -1
- package/dist/windows-security-command.d.ts.map +0 -1
- package/dist/windows-security-facts.d.ts.map +0 -1
- package/dist/write-file-handle.d.ts.map +0 -1
- package/dist/write-open-flags.d.ts.map +0 -1
- package/dist/write-queue.d.ts.map +0 -1
- /package/dist/{archive-options.js → root-public-types.js} +0 -0
|
@@ -57,6 +57,15 @@ function cleanupFailure(originalFailure, cleanupError) {
|
|
|
57
57
|
}
|
|
58
58
|
return isErrorValue(cleanupError) ? cleanupError : new Error(describeFailure(cleanupError));
|
|
59
59
|
}
|
|
60
|
+
function closeFailure(closeError, params, cleanupFailure) {
|
|
61
|
+
return {
|
|
62
|
+
error: cleanupFailure
|
|
63
|
+
? new AggregateError([cleanupFailure.error, closeError], "Atomic temp cleanup and close failed")
|
|
64
|
+
: params.originalFailure
|
|
65
|
+
? new AggregateError([params.originalFailure.error, closeError], "Atomic file replace and close failed")
|
|
66
|
+
: closeError,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
60
69
|
async function cleanupOwnedPath(params) {
|
|
61
70
|
try {
|
|
62
71
|
await removeOwnedPath(params);
|
|
@@ -92,36 +101,48 @@ function cleanupOwnedPathSync(params) {
|
|
|
92
101
|
return false;
|
|
93
102
|
}
|
|
94
103
|
}
|
|
95
|
-
|
|
104
|
+
class AtomicTempOwner {
|
|
96
105
|
pathname;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
106
|
+
resource;
|
|
107
|
+
recordedIdentity;
|
|
108
|
+
exists = false;
|
|
109
|
+
unregister;
|
|
101
110
|
constructor(pathname) {
|
|
102
111
|
this.pathname = pathname;
|
|
103
|
-
this
|
|
112
|
+
this.unregister = registerTempPathForExit(pathname, { singleLinkFile: true });
|
|
104
113
|
}
|
|
105
114
|
start() {
|
|
106
|
-
this
|
|
115
|
+
this.exists = true;
|
|
107
116
|
}
|
|
108
117
|
onIdentity = (identity) => {
|
|
109
|
-
this
|
|
110
|
-
this
|
|
118
|
+
this.recordedIdentity = identity;
|
|
119
|
+
this.unregister.setIdentity(identity);
|
|
111
120
|
};
|
|
112
|
-
adopt(temp) {
|
|
113
|
-
this.#handle = temp.handle;
|
|
114
|
-
this.onIdentity(temp.identity);
|
|
115
|
-
}
|
|
116
121
|
get identity() {
|
|
117
|
-
if (!this
|
|
122
|
+
if (!this.recordedIdentity)
|
|
118
123
|
throw new Error("Atomic temp owner has no identity");
|
|
119
|
-
return this
|
|
124
|
+
return this.recordedIdentity;
|
|
125
|
+
}
|
|
126
|
+
markRenamed() {
|
|
127
|
+
this.exists = false;
|
|
128
|
+
this.unregister();
|
|
129
|
+
}
|
|
130
|
+
takeResource() {
|
|
131
|
+
// A throwing close may already have released the descriptor for reuse.
|
|
132
|
+
const resource = this.resource;
|
|
133
|
+
this.resource = undefined;
|
|
134
|
+
return resource;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export class AsyncAtomicTempOwner extends AtomicTempOwner {
|
|
138
|
+
adopt(temp) {
|
|
139
|
+
this.resource = temp.handle;
|
|
140
|
+
this.onIdentity(temp.identity);
|
|
120
141
|
}
|
|
121
142
|
async assertCurrent(fsModule, pathname = this.pathname) {
|
|
122
143
|
const opened = await inspectFileIdentity(async () => {
|
|
123
|
-
const stat = fsModule === fs ? syncFs.fstatSync(this
|
|
124
|
-
: await this
|
|
144
|
+
const stat = fsModule === fs ? syncFs.fstatSync(this.resource.fd, { bigint: true })
|
|
145
|
+
: await this.resource.stat({ bigint: true });
|
|
125
146
|
assertOwnedFile(stat, pathname, false);
|
|
126
147
|
return stat;
|
|
127
148
|
}, this.identity);
|
|
@@ -178,30 +199,30 @@ export class AsyncAtomicTempOwner {
|
|
|
178
199
|
if (sha256Hex(await published.readFile()) !== expectedHash) {
|
|
179
200
|
throw new FsSafeError("path-mismatch", `Atomic replace published content changed: ${pathname}`);
|
|
180
201
|
}
|
|
181
|
-
const previousHandle = this
|
|
182
|
-
this.#handle = undefined;
|
|
202
|
+
const previousHandle = this.takeResource();
|
|
183
203
|
await previousHandle?.close();
|
|
184
|
-
this
|
|
185
|
-
this
|
|
204
|
+
this.resource = published;
|
|
205
|
+
this.recordedIdentity = identity;
|
|
186
206
|
published = undefined;
|
|
187
207
|
}
|
|
188
208
|
finally {
|
|
189
|
-
|
|
209
|
+
try {
|
|
210
|
+
await published?.close();
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// Preserve the selected verification or previous-handle close failure.
|
|
214
|
+
}
|
|
190
215
|
}
|
|
191
216
|
}
|
|
192
|
-
markRenamed() {
|
|
193
|
-
this.#exists = false;
|
|
194
|
-
this.#unregister();
|
|
195
|
-
}
|
|
196
217
|
async finish(params) {
|
|
197
218
|
let deferredFailure;
|
|
198
|
-
let cleanupComplete = !this
|
|
199
|
-
if (this
|
|
219
|
+
let cleanupComplete = !this.exists;
|
|
220
|
+
if (this.exists) {
|
|
200
221
|
try {
|
|
201
222
|
cleanupComplete = await cleanupOwnedPath({
|
|
202
223
|
fsModule: params.fsModule,
|
|
203
224
|
pathname: this.pathname,
|
|
204
|
-
identity: this
|
|
225
|
+
identity: this.recordedIdentity,
|
|
205
226
|
originalFailure: params.originalFailure,
|
|
206
227
|
throwOnCleanupError: params.throwOnCleanupError,
|
|
207
228
|
});
|
|
@@ -211,54 +232,26 @@ export class AsyncAtomicTempOwner {
|
|
|
211
232
|
}
|
|
212
233
|
}
|
|
213
234
|
if (cleanupComplete)
|
|
214
|
-
this
|
|
215
|
-
const handle = this
|
|
216
|
-
this.#handle = undefined;
|
|
235
|
+
this.unregister();
|
|
236
|
+
const handle = this.takeResource();
|
|
217
237
|
try {
|
|
218
238
|
await handle?.close();
|
|
219
239
|
}
|
|
220
240
|
catch (closeError) {
|
|
221
|
-
deferredFailure =
|
|
222
|
-
error: deferredFailure
|
|
223
|
-
? new AggregateError([deferredFailure.error, closeError], "Atomic temp cleanup and close failed")
|
|
224
|
-
: params.originalFailure
|
|
225
|
-
? new AggregateError([params.originalFailure.error, closeError], "Atomic file replace and close failed")
|
|
226
|
-
: closeError,
|
|
227
|
-
};
|
|
241
|
+
deferredFailure = closeFailure(closeError, params, deferredFailure);
|
|
228
242
|
}
|
|
229
243
|
if (deferredFailure)
|
|
230
244
|
throw deferredFailure.error;
|
|
231
245
|
}
|
|
232
246
|
}
|
|
233
|
-
export class SyncAtomicTempOwner {
|
|
234
|
-
pathname;
|
|
235
|
-
#fd;
|
|
236
|
-
#identity;
|
|
237
|
-
#exists = false;
|
|
238
|
-
#unregister;
|
|
239
|
-
constructor(pathname) {
|
|
240
|
-
this.pathname = pathname;
|
|
241
|
-
this.#unregister = registerTempPathForExit(pathname, { singleLinkFile: true });
|
|
242
|
-
}
|
|
243
|
-
start() {
|
|
244
|
-
this.#exists = true;
|
|
245
|
-
}
|
|
246
|
-
onIdentity = (identity) => {
|
|
247
|
-
this.#identity = identity;
|
|
248
|
-
this.#unregister.setIdentity(identity);
|
|
249
|
-
};
|
|
247
|
+
export class SyncAtomicTempOwner extends AtomicTempOwner {
|
|
250
248
|
adopt(temp) {
|
|
251
|
-
this
|
|
249
|
+
this.resource = temp.fd;
|
|
252
250
|
this.onIdentity(temp.identity);
|
|
253
251
|
}
|
|
254
|
-
get identity() {
|
|
255
|
-
if (!this.#identity)
|
|
256
|
-
throw new Error("Atomic temp owner has no identity");
|
|
257
|
-
return this.#identity;
|
|
258
|
-
}
|
|
259
252
|
assertCurrent(fsModule, pathname = this.pathname) {
|
|
260
253
|
const opened = inspectFileIdentitySync(() => {
|
|
261
|
-
const stat = fsModule.fstatSync(this
|
|
254
|
+
const stat = fsModule.fstatSync(this.resource, { bigint: true });
|
|
262
255
|
assertOwnedFile(stat, pathname, false);
|
|
263
256
|
return stat;
|
|
264
257
|
}, this.identity);
|
|
@@ -312,11 +305,10 @@ export class SyncAtomicTempOwner {
|
|
|
312
305
|
if (sha256Hex(fsModule.readFileSync(publishedFd)) !== expectedHash) {
|
|
313
306
|
throw new FsSafeError("path-mismatch", `Atomic replace published content changed: ${pathname}`);
|
|
314
307
|
}
|
|
315
|
-
const previousFd = this
|
|
316
|
-
this.#fd = undefined;
|
|
308
|
+
const previousFd = this.takeResource();
|
|
317
309
|
fsModule.closeSync(previousFd);
|
|
318
|
-
this
|
|
319
|
-
this
|
|
310
|
+
this.resource = publishedFd;
|
|
311
|
+
this.recordedIdentity = identity;
|
|
320
312
|
publishedFd = undefined;
|
|
321
313
|
}
|
|
322
314
|
finally {
|
|
@@ -330,19 +322,15 @@ export class SyncAtomicTempOwner {
|
|
|
330
322
|
}
|
|
331
323
|
}
|
|
332
324
|
}
|
|
333
|
-
markRenamed() {
|
|
334
|
-
this.#exists = false;
|
|
335
|
-
this.#unregister();
|
|
336
|
-
}
|
|
337
325
|
finish(params) {
|
|
338
326
|
let deferredFailure;
|
|
339
|
-
let cleanupComplete = !this
|
|
340
|
-
if (this
|
|
327
|
+
let cleanupComplete = !this.exists;
|
|
328
|
+
if (this.exists) {
|
|
341
329
|
try {
|
|
342
330
|
cleanupComplete = cleanupOwnedPathSync({
|
|
343
331
|
fsModule: params.fsModule,
|
|
344
332
|
pathname: this.pathname,
|
|
345
|
-
identity: this
|
|
333
|
+
identity: this.recordedIdentity,
|
|
346
334
|
originalFailure: params.originalFailure,
|
|
347
335
|
throwOnCleanupError: params.throwOnCleanupError,
|
|
348
336
|
});
|
|
@@ -352,21 +340,14 @@ export class SyncAtomicTempOwner {
|
|
|
352
340
|
}
|
|
353
341
|
}
|
|
354
342
|
if (cleanupComplete)
|
|
355
|
-
this
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
this.#fd = undefined;
|
|
343
|
+
this.unregister();
|
|
344
|
+
const fd = this.takeResource();
|
|
345
|
+
if (fd !== undefined) {
|
|
359
346
|
try {
|
|
360
347
|
params.fsModule.closeSync(fd);
|
|
361
348
|
}
|
|
362
349
|
catch (closeError) {
|
|
363
|
-
deferredFailure =
|
|
364
|
-
error: deferredFailure
|
|
365
|
-
? new AggregateError([deferredFailure.error, closeError], "Atomic temp cleanup and close failed")
|
|
366
|
-
: params.originalFailure
|
|
367
|
-
? new AggregateError([params.originalFailure.error, closeError], "Atomic file replace and close failed")
|
|
368
|
-
: closeError,
|
|
369
|
-
};
|
|
350
|
+
deferredFailure = closeFailure(closeError, params, deferredFailure);
|
|
370
351
|
}
|
|
371
352
|
}
|
|
372
353
|
if (deferredFailure)
|
package/dist/replace-file.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import syncFs from "node:fs";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
|
-
import
|
|
4
|
-
import { type
|
|
3
|
+
import type { RenameIdentityPolicy } from "./pinned-write-types.js";
|
|
4
|
+
import { type ReplaceFileCopyFallbackRestorePolicy, type ReplaceFileDestinationHardlinkPolicy } from "./replace-file-copy-fallback.js";
|
|
5
5
|
export type ReplaceFileAtomicFileSystem = {
|
|
6
6
|
promises: Pick<typeof fs, "mkdir" | "writeFile" | "rename" | "copyFile" | "unlink" | "rm" | "open" | "stat" | "lstat"> & {
|
|
7
7
|
/** @deprecated Accepted for adapter compatibility but never called. */
|
|
@@ -13,7 +13,6 @@ export type ReplaceFileAtomicSyncFileSystem = Pick<typeof syncFs, "mkdirSync" |
|
|
|
13
13
|
chmodSync?: typeof syncFs.chmodSync;
|
|
14
14
|
fchmodSync?: typeof syncFs.fchmodSync;
|
|
15
15
|
};
|
|
16
|
-
export type { RenameIdentityPolicy, ReplaceFileAtomicRestoreCleanup, ReplaceFileAtomicRestoreFailureDetails, ReplaceFileCopyFallbackRestorePolicy, ReplaceFileDestinationHardlinkPolicy, };
|
|
17
16
|
type ReplaceFileAtomicBaseOptions = {
|
|
18
17
|
filePath: string;
|
|
19
18
|
content: string | Uint8Array;
|
|
@@ -56,4 +55,4 @@ export type ReplaceFileAtomicResult = {
|
|
|
56
55
|
export declare function replaceFileAtomic(options: ReplaceFileAtomicOptions): Promise<ReplaceFileAtomicResult>;
|
|
57
56
|
export declare function replaceFileAtomicWithDirectorySync(options: ReplaceFileAtomicOptions, syncParent?: (directoryPath: string) => Promise<unknown>): Promise<ReplaceFileAtomicResult>;
|
|
58
57
|
export declare function replaceFileAtomicSync(options: ReplaceFileAtomicSyncOptions): ReplaceFileAtomicResult;
|
|
59
|
-
|
|
58
|
+
export {};
|
package/dist/replace-file.js
CHANGED
|
@@ -9,7 +9,7 @@ import { inheritedRegularFileMode } from "./replace-file-mode.js";
|
|
|
9
9
|
import { atomicExpectedContentHash, validateRenameIdentity, withAtomicRenameIdentityLock, withAtomicRenameIdentityLockSync, } from "./replace-file-rename-policy.js";
|
|
10
10
|
import { AsyncAtomicTempOwner, SyncAtomicTempOwner } from "./replace-file-temp-owner.js";
|
|
11
11
|
import { assertSafePathPrefix } from "./safe-path-segment.js";
|
|
12
|
-
import { admitStandalonePublicationPath } from "./
|
|
12
|
+
import { admitStandalonePublicationPath } from "./windows-path-alias.js";
|
|
13
13
|
import { sleep, sleepSync } from "./timing.js";
|
|
14
14
|
import { serializePathWrite } from "./write-queue.js";
|
|
15
15
|
import { hasErrorCode, readErrorCode } from "./file-cleanup.js";
|
package/dist/root-boundary.d.ts
CHANGED
package/dist/root-context.d.ts
CHANGED
package/dist/root-context.js
CHANGED
|
@@ -7,7 +7,7 @@ import { sameFileIdentity } from "./file-identity.js";
|
|
|
7
7
|
import { assertNoNulPathInput, assertNoUnsafeDeviceReadPath, hasNodeErrorCode, isNotFoundPathError, isPathInside, } from "./path.js";
|
|
8
8
|
import { ROOT_PATH_ALIAS_POLICIES, resolveRootPath } from "./root-path.js";
|
|
9
9
|
import { admitPathInsideRoot } from "./root-boundary.js";
|
|
10
|
-
import { outsideWorkspaceError, rootPathChangedError } from "./root-errors.js";
|
|
10
|
+
import { errorCauseOptions, outsideWorkspaceError, rootPathChangedError } from "./root-errors.js";
|
|
11
11
|
import { isDriveRelativePath } from "./safe-path-segment.js";
|
|
12
12
|
import { realpathSync } from "./realpath.js";
|
|
13
13
|
import { inspectFileIdentity } from "./strict-file-identity.js";
|
|
@@ -223,14 +223,10 @@ export async function resolvePathInRoot(root, relativePath, options) {
|
|
|
223
223
|
throw error;
|
|
224
224
|
}
|
|
225
225
|
if (hasNodeErrorCode(error, "ENAMETOOLONG")) {
|
|
226
|
-
throw new FsSafeError("invalid-path", "relative path is too long",
|
|
227
|
-
cause: error instanceof Error ? error : undefined,
|
|
228
|
-
});
|
|
226
|
+
throw new FsSafeError("invalid-path", "relative path is too long", errorCauseOptions(error));
|
|
229
227
|
}
|
|
230
228
|
const code = options?.aliasErrorCode ?? "outside-workspace";
|
|
231
|
-
throw new FsSafeError(code, code === "path-alias" ? "path alias escape blocked" : "file is outside workspace root",
|
|
232
|
-
cause: error instanceof Error ? error : undefined,
|
|
233
|
-
});
|
|
229
|
+
throw new FsSafeError(code, code === "path-alias" ? "path alias escape blocked" : "file is outside workspace root", errorCauseOptions(error));
|
|
234
230
|
}
|
|
235
231
|
return { rootReal: root.rootReal, rootWithSep: root.rootWithSep, resolved };
|
|
236
232
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PinnedWriteInput } from "./pinned-write.js";
|
|
1
|
+
import type { PinnedWriteInput } from "./pinned-write-types.js";
|
|
2
2
|
import type { RootCreateOptions, RootCreateStreamOptions, RootWriteOptions } from "./root-options.js";
|
|
3
3
|
declare const exclusiveSidecarCreate: unique symbol;
|
|
4
4
|
export declare const sidecarExclusiveCreate: Readonly<{
|
|
@@ -14,4 +14,3 @@ export declare function rethrowCreateInputError(error: unknown): never;
|
|
|
14
14
|
export declare function createInputOptions(data: RootWriteParams["data"], options: RootCreateOptions & RootCreateStreamOptions, defaultMaxBytes?: number): RootCreateOptions & RootCreateStreamOptions;
|
|
15
15
|
export declare function rootWriteInput(params: RootWriteParams): PinnedWriteInput;
|
|
16
16
|
export {};
|
|
17
|
-
//# sourceMappingURL=root-create-input.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PinnedWriteMutationAdmission } from "./pinned-write.js";
|
|
1
|
+
import type { PinnedWriteMutationAdmission } from "./pinned-write-types.js";
|
|
2
2
|
import { type RootContext } from "./root-context.js";
|
|
3
3
|
/**
|
|
4
4
|
* Complete the common Root.mkdir case with one exact existing parent. This is
|
|
@@ -10,4 +10,3 @@ export declare function mkdirPathFallback(root: RootContext, resolved: {
|
|
|
10
10
|
rootReal: string;
|
|
11
11
|
resolved: string;
|
|
12
12
|
}, assertBeforeMutation?: () => void, rejectSymlinks?: boolean, mutationAdmission?: PinnedWriteMutationAdmission, privateMode?: boolean): Promise<void>;
|
|
13
|
-
//# sourceMappingURL=root-directory-creation.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fsSync, {} from "node:fs";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { assertPrivateDirectory } from "./creation-
|
|
4
|
+
import { assertPrivateDirectory } from "./creation-boundary.js";
|
|
5
5
|
import { assertAsyncDirectoryGuard, assertDirectoryIdentitySync, assertSyncDirectoryGuard, createAsyncDirectoryGuard, inspectDirectoryIdentitySync, } from "./directory-guard.js";
|
|
6
6
|
import { FsSafeError } from "./errors.js";
|
|
7
7
|
import { mkdirPathComponentsWithGuards } from "./guarded-mkdir.js";
|
|
@@ -36,4 +36,3 @@ export type RootDirectoryListingOptions = {
|
|
|
36
36
|
admitEntry(): boolean;
|
|
37
37
|
};
|
|
38
38
|
export declare function openRootDirectoryListing(root: RootContext, directory: string, options: RootDirectoryListingOptions): Promise<RootDirectoryListing>;
|
|
39
|
-
//# sourceMappingURL=root-directory-list.d.ts.map
|
|
@@ -7,7 +7,7 @@ import { FsSafeError } from "./errors.js";
|
|
|
7
7
|
import { inspectNativeDirectoryObservation, isNativeDirectoryObservationGuard, } from "./native-directory-observation.js";
|
|
8
8
|
import { isNotFoundPathError } from "./path.js";
|
|
9
9
|
import { assertRootIdentityCurrent } from "./root-context.js";
|
|
10
|
-
import { rootPathChangedError } from "./root-errors.js";
|
|
10
|
+
import { errorCauseOptions, rootPathChangedError } from "./root-errors.js";
|
|
11
11
|
import { admitPathInsideRoot } from "./root-boundary.js";
|
|
12
12
|
import { createSuppressedError } from "./suppressed-error.js";
|
|
13
13
|
import { realpathSync } from "./realpath.js";
|
|
@@ -50,9 +50,7 @@ export async function createRootDirectoryObservationGuard(root, directory) {
|
|
|
50
50
|
function directoryChangedError(error) {
|
|
51
51
|
if (error instanceof FsSafeError && error.code === "path-mismatch")
|
|
52
52
|
return error;
|
|
53
|
-
return new FsSafeError("path-mismatch", "directory changed during operation",
|
|
54
|
-
cause: error instanceof Error ? error : undefined,
|
|
55
|
-
});
|
|
53
|
+
return new FsSafeError("path-mismatch", "directory changed during operation", errorCauseOptions(error));
|
|
56
54
|
}
|
|
57
55
|
export async function assertRootDirectoryObservationGuard(root, guard) {
|
|
58
56
|
if (isNativeDirectoryObservationGuard(guard)) {
|
|
@@ -162,9 +160,7 @@ export function assertRootPathObservationReceiptCurrent(root, receipt, finalTarg
|
|
|
162
160
|
}
|
|
163
161
|
function normalizeDirectoryError(error) {
|
|
164
162
|
if (isNotFoundPathError(error)) {
|
|
165
|
-
return new FsSafeError("not-found", "directory not found",
|
|
166
|
-
cause: error instanceof Error ? error : undefined,
|
|
167
|
-
});
|
|
163
|
+
return new FsSafeError("not-found", "directory not found", errorCauseOptions(error));
|
|
168
164
|
}
|
|
169
165
|
return error;
|
|
170
166
|
}
|
package/dist/root-directory.d.ts
CHANGED
package/dist/root-entries.d.ts
CHANGED
package/dist/root-entries.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FsSafeError } from "./errors.js";
|
|
2
|
-
import {
|
|
2
|
+
import { validatePinnedRelativePath } from "./pinned-operation.js";
|
|
3
3
|
import { resolvePathInRoot } from "./root-context.js";
|
|
4
4
|
import { openRootDirectoryListing } from "./root-directory-list.js";
|
|
5
5
|
import { readSymlinkResolution } from "./root-symlink-policy.js";
|
|
@@ -13,7 +13,7 @@ export async function* entriesInRoot(root, relativePath, options) {
|
|
|
13
13
|
throw new TypeError(`invalid root entries order: ${String(options.order)}`);
|
|
14
14
|
}
|
|
15
15
|
options.signal?.throwIfAborted();
|
|
16
|
-
|
|
16
|
+
validatePinnedRelativePath(relativePath);
|
|
17
17
|
const resolved = await resolvePathInRoot(root, relativePath, {
|
|
18
18
|
...readSymlinkResolution(options.symlinks),
|
|
19
19
|
resolveCanonical: true,
|
package/dist/root-errors.d.ts
CHANGED
|
@@ -10,4 +10,7 @@ export declare function normalizePinnedPathError(error: unknown, details?: FsSaf
|
|
|
10
10
|
export declare function normalizeRemoveGuardError(error: unknown, details?: FsSafeErrorDetails): Error;
|
|
11
11
|
export declare function normalizeRemovePathError(error: unknown, details?: FsSafeErrorDetails): Error;
|
|
12
12
|
export declare function throwFsSafeReadError(error: unknown, label: string): never;
|
|
13
|
-
|
|
13
|
+
/** Existing boundaries retain only Error instances as their cause. */
|
|
14
|
+
export declare function errorCauseOptions(error: unknown): {
|
|
15
|
+
cause: Error | undefined;
|
|
16
|
+
};
|
package/dist/root-errors.js
CHANGED
|
@@ -41,9 +41,7 @@ export function normalizePinnedWriteError(error) {
|
|
|
41
41
|
const message = code
|
|
42
42
|
? `${PINNED_WRITE_ERRNO_MESSAGES.get(code) ?? "filesystem write failed"} (${code})`
|
|
43
43
|
: "path is not a regular file under root";
|
|
44
|
-
return new FsSafeError("invalid-path", message,
|
|
45
|
-
cause: error instanceof Error ? error : undefined,
|
|
46
|
-
});
|
|
44
|
+
return new FsSafeError("invalid-path", message, errorCauseOptions(error));
|
|
47
45
|
}
|
|
48
46
|
export function normalizePinnedPathError(error, details) {
|
|
49
47
|
if (error instanceof FsSafeError) {
|
|
@@ -88,3 +86,7 @@ export function throwFsSafeReadError(error, label) {
|
|
|
88
86
|
}
|
|
89
87
|
throw error;
|
|
90
88
|
}
|
|
89
|
+
/** Existing boundaries retain only Error instances as their cause. */
|
|
90
|
+
export function errorCauseOptions(error) {
|
|
91
|
+
return { cause: error instanceof Error ? error : undefined };
|
|
92
|
+
}
|
package/dist/root-file.d.ts
CHANGED
package/dist/root-impl.d.ts
CHANGED
|
@@ -7,13 +7,8 @@ import { type RootContext } from "./root-context.js";
|
|
|
7
7
|
import type { DirEntry, PathStat } from "./types.js";
|
|
8
8
|
import { type RootWalkEntry, type RootWalkOptions } from "./root-walk.js";
|
|
9
9
|
import { type RootAppendOptions, type RootCopyOptions, type RootCopySource, type RootCreateJsonOptions, type RootCreateOptions, type RootCreateStreamOptions, type RootDefaults, type RootMkdirOptions, type RootMoveOptions, type RootOpenOptions, type RootOpenWritableOptions, type RootReadOptions, type RootRemoveOptions, type RootWriteJsonOptions, type RootWriteOptions } from "./root-options.js";
|
|
10
|
-
export type { HardlinkPolicy, RootAppendOptions, RootCopyOptions, RootCopySource, RootCreateJsonOptions, RootCreateOptions, RootCreateStreamOptions, RootDefaults, RootMkdirOptions, RootMoveOptions, RootOpenOptions, RootOpenWritableOptions, RootOptions, RootReadOptions, RootRemoveOptions, RootWriteJsonOptions, RootWriteOptions, WritableOpenMode, } from "./root-options.js";
|
|
11
10
|
export { DEFAULT_ROOT_MAX_BYTES } from "./root-options.js";
|
|
12
|
-
export type { DenyMutationPolicy } from "./deny-mutations.js";
|
|
13
|
-
export type { RenameIdentityPolicy } from "./pinned-write.js";
|
|
14
|
-
export type { MutationSymlinkPolicy, SymlinkPolicy } from "./root-symlink-policy.js";
|
|
15
11
|
export { resolveOpenedFileRealPathForHandle } from "./opened-realpath.js";
|
|
16
|
-
export type { ReadResult } from "./read-opened-file.js";
|
|
17
12
|
export type OpenResult = {
|
|
18
13
|
handle: FileHandle;
|
|
19
14
|
containment: ContainmentGuarantee;
|
|
@@ -62,14 +57,12 @@ export interface Root {
|
|
|
62
57
|
walk(relativePath: string, options: RootWalkOptions): AsyncIterableIterator<RootWalkEntry>;
|
|
63
58
|
}
|
|
64
59
|
export declare class RootHandle implements Root {
|
|
65
|
-
private readonly
|
|
66
|
-
private readonly rootIdentity;
|
|
60
|
+
private readonly context;
|
|
67
61
|
readonly rootDir: string;
|
|
68
62
|
readonly rootReal: string;
|
|
69
63
|
readonly rootWithSep: string;
|
|
70
64
|
readonly defaults: RootDefaults;
|
|
71
65
|
constructor(context: RootContext, defaults?: RootDefaults);
|
|
72
|
-
private get context();
|
|
73
66
|
private mutationOptions;
|
|
74
67
|
resolve(relativePath: string): Promise<string>;
|
|
75
68
|
open(relativePath: string, options?: RootOpenOptions): Promise<OpenResult>;
|
|
@@ -119,12 +112,6 @@ export declare function readLocalFileSafely(params: {
|
|
|
119
112
|
export declare function openLocalFileSafely(params: {
|
|
120
113
|
filePath: string;
|
|
121
114
|
}): Promise<OpenResult>;
|
|
122
|
-
export type WritableOpenResult = {
|
|
123
|
-
handle: FileHandle;
|
|
124
|
-
containment: ContainmentGuarantee;
|
|
115
|
+
export type WritableOpenResult = OpenResult & {
|
|
125
116
|
createdForWrite: boolean;
|
|
126
|
-
realPath: string;
|
|
127
|
-
stat: Stats;
|
|
128
|
-
[Symbol.asyncDispose](): Promise<void>;
|
|
129
117
|
};
|
|
130
|
-
//# sourceMappingURL=root-impl.d.ts.map
|