@openclaw/fs-safe 0.16.0 → 0.18.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/CHANGELOG.md +91 -0
- package/README.md +8 -1
- package/dist/absolute-path.d.ts +0 -1
- package/dist/absolute-path.js +2 -8
- package/dist/advanced.d.ts +2 -1
- package/dist/advanced.js +2 -0
- package/dist/archive-crc32.d.ts +0 -1
- package/dist/archive-deadline.d.ts +0 -1
- package/dist/archive-deadline.js +22 -23
- package/dist/archive-durability.d.ts +0 -1
- 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 +3 -4
- package/dist/archive-merge.js +17 -7
- package/dist/archive-native.d.ts +3 -14
- package/dist/archive-native.js +46 -70
- package/dist/archive-options.d.ts +9 -2
- package/dist/archive-parser-errors.d.ts +0 -1
- package/dist/archive-parser.wasm +0 -0
- package/dist/archive-plan.d.ts +10 -1
- package/dist/archive-plan.js +31 -21
- package/dist/archive-policy.d.ts +0 -1
- package/dist/archive-read.d.ts +0 -1
- package/dist/archive-staging.d.ts +0 -1
- package/dist/archive-tar-inspect.d.ts +0 -1
- package/dist/archive-tar-stream.d.ts +0 -1
- package/dist/archive-tar-wasm.d.ts +0 -1
- package/dist/archive-tar.d.ts +0 -1
- package/dist/archive-zip-admission.d.ts +0 -1
- package/dist/archive-zip-count.d.ts +0 -1
- package/dist/archive-zip-count.js +21 -1
- package/dist/archive-zip-directory.d.ts +0 -1
- package/dist/archive-zip-directory.js +23 -1
- package/dist/archive-zip-entry.d.ts +0 -1
- package/dist/archive-zip-integrity.d.ts +0 -1
- package/dist/archive-zip-loader.d.ts +2 -1
- package/dist/archive-zip-loader.js +7 -0
- package/dist/archive-zip-manifest.d.ts +0 -1
- package/dist/archive-zip-names.d.ts +0 -1
- package/dist/archive-zip-names.js +7 -2
- package/dist/archive-zip-preflight.d.ts +0 -1
- package/dist/archive.d.ts +0 -1
- package/dist/archive.js +93 -164
- package/dist/async-lock.d.ts +0 -1
- package/dist/atomic.d.ts +0 -1
- 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 +2 -0
- package/dist/byte-view.js +13 -0
- 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 +0 -1
- 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-directory.d.ts +0 -2
- package/dist/create-directory.js +3 -22
- package/dist/create-file-async.d.ts +0 -1
- package/dist/create-file.d.ts +0 -1
- package/dist/create-file.js +3 -14
- package/dist/create-owned-file.d.ts +0 -1
- package/dist/create.d.ts +1 -2
- package/dist/create.js +1 -1
- package/dist/creation-darwin.d.ts +0 -2
- package/dist/creation-darwin.js +0 -9
- package/dist/creation-file-state.d.ts +0 -1
- package/dist/creation-path.d.ts +2 -1
- package/dist/creation-path.js +12 -0
- package/dist/creation-permissions.d.ts +0 -1
- package/dist/creation-permissions.js +28 -38
- 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 +6 -7
- 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-owner.d.ts +0 -1
- package/dist/directory-receipt.d.ts +2 -3
- package/dist/directory-receipt.js +15 -19
- package/dist/durability.d.ts +0 -1
- 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 +1 -1
- package/dist/file-cleanup.js +7 -4
- package/dist/file-contents.d.ts +5 -0
- package/dist/file-contents.js +40 -0
- package/dist/file-handle-transfer.d.ts +0 -1
- package/dist/file-hash.d.ts +0 -1
- package/dist/file-hash.js +186 -70
- 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 +35 -98
- package/dist/file-lock-sync-root-arbitration.d.ts +0 -1
- package/dist/file-lock-sync-root-held.d.ts +1 -3
- package/dist/file-lock-sync-root-held.js +7 -5
- 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 +1 -2
- 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 +24 -23
- package/dist/file-lock-sync.d.ts +0 -1
- package/dist/file-lock-sync.js +46 -128
- package/dist/file-lock.d.ts +0 -1
- package/dist/file-observation.d.ts +0 -1
- package/dist/file-store-boundary.d.ts +0 -2
- package/dist/file-store-boundary.js +6 -26
- package/dist/file-store-copy-source.d.ts +1 -2
- package/dist/file-store-copy-source.js +1 -1
- package/dist/file-store-limit.d.ts +1 -2
- package/dist/file-store-limit.js +2 -3
- package/dist/file-store-path.d.ts +0 -1
- 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 +16 -26
- package/dist/file-store.d.ts +0 -1
- package/dist/file-store.js +6 -7
- 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 +0 -1
- package/dist/guarded-mkdir.js +6 -27
- 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 +0 -1
- package/dist/install-path.d.ts +0 -1
- package/dist/install-path.js +2 -5
- 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 +43 -66
- package/dist/json-durable-queue-read.d.ts +0 -1
- package/dist/json-durable-queue-read.js +6 -6
- package/dist/json-durable-queue.d.ts +0 -1
- package/dist/json-durable-queue.js +17 -139
- package/dist/json-store.d.ts +0 -1
- package/dist/json-stringify.d.ts +0 -1
- package/dist/json.d.ts +0 -1
- package/dist/json.js +38 -90
- 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/local-roots.js +19 -21
- package/dist/lock-config.d.ts +0 -1
- package/dist/move-path-cleanup.d.ts +5 -20
- package/dist/move-path-cleanup.js +57 -21
- package/dist/move-path-stage.d.ts +0 -1
- package/dist/move-path.d.ts +0 -1
- package/dist/move-path.js +62 -39
- 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 -6
- package/dist/native-parent-admission.d.ts +0 -1
- package/dist/native-pinned-write-windows.d.ts +0 -1
- package/dist/native-pinned-write.d.ts +0 -1
- package/dist/native-pinned-write.js +4 -10
- package/dist/native-policy-directory-observation.d.ts +0 -1
- package/dist/native-policy-parent-windows.d.ts +0 -1
- package/dist/native-rename-outcome.d.ts +0 -1
- package/dist/native-staged-file.d.ts +17 -4
- package/dist/native-staged-file.js +63 -68
- package/dist/native.d.ts +0 -1
- package/dist/native.js +2 -2
- package/dist/opened-file-failure.d.ts +0 -1
- package/dist/opened-realpath.d.ts +0 -1
- package/dist/opened-realpath.js +11 -2
- 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/path.js +2 -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 +11 -33
- package/dist/pinned-mutation-admission.d.ts +0 -1
- 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 +1 -1
- package/dist/pinned-operation.d.ts +0 -1
- package/dist/pinned-write-input.d.ts +0 -1
- package/dist/pinned-write-input.js +11 -1
- package/dist/pinned-write-mode.d.ts +3 -4
- package/dist/pinned-write-mode.js +15 -8
- package/dist/pinned-write-staged.d.ts +0 -1
- package/dist/pinned-write-staged.js +10 -11
- package/dist/pinned-write-types.d.ts +9 -21
- package/dist/pinned-write.d.ts +0 -1
- package/dist/pinned-write.js +17 -13
- package/dist/positional-read.d.ts +0 -1
- package/dist/private-directory.d.ts +0 -1
- package/dist/private-producer-handoff-sync.d.ts +0 -1
- package/dist/private-producer-handoff-sync.js +9 -51
- package/dist/private-producer-handoff.d.ts +20 -1
- package/dist/private-producer-handoff.js +69 -46
- package/dist/private-temp-workspace.d.ts +0 -1
- package/dist/private-temp-workspace.js +11 -36
- package/dist/publish-copy-stage.d.ts +0 -1
- package/dist/publish-file-failure.d.ts +0 -1
- package/dist/publish-file.d.ts +2 -3
- package/dist/publish-file.js +56 -96
- 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 +107 -178
- package/dist/replace-directory.d.ts +0 -1
- package/dist/replace-file-copy-fallback.d.ts +0 -1
- package/dist/replace-file-copy-fallback.js +42 -29
- package/dist/replace-file-copy-source.d.ts +0 -1
- package/dist/replace-file-copy-source.js +19 -23
- package/dist/replace-file-descriptor.d.ts +0 -1
- package/dist/replace-file-descriptor.js +16 -17
- package/dist/replace-file-mode.d.ts +0 -1
- package/dist/replace-file-rename-policy.d.ts +0 -1
- package/dist/replace-file-temp-owner.d.ts +12 -13
- package/dist/replace-file-temp-owner.js +72 -91
- package/dist/replace-file.d.ts +0 -1
- package/dist/replace-file.js +9 -13
- 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-create-input.d.ts +0 -1
- package/dist/root-directory-creation.d.ts +0 -1
- package/dist/root-directory-list.d.ts +0 -1
- package/dist/root-directory-list.js +20 -3
- package/dist/root-directory.d.ts +0 -1
- package/dist/root-entries.d.ts +0 -1
- package/dist/root-errors.d.ts +0 -1
- package/dist/root-file-final-admission.d.ts +1 -2
- package/dist/root-file-final-admission.js +5 -2
- package/dist/root-file.d.ts +0 -1
- package/dist/root-file.js +3 -2
- package/dist/root-impl.d.ts +2 -10
- package/dist/root-impl.js +164 -111
- package/dist/root-move-noreplace.d.ts +2 -1
- package/dist/root-move-noreplace.js +2 -2
- package/dist/root-move-preflight.d.ts +0 -1
- package/dist/root-observed-path.d.ts +0 -1
- package/dist/root-options.d.ts +0 -1
- package/dist/root-path-errors.d.ts +0 -1
- package/dist/root-path-existing.d.ts +3 -1
- package/dist/root-path-existing.js +39 -18
- package/dist/root-path-observation.d.ts +0 -1
- package/dist/root-path-stat.d.ts +0 -1
- 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-read-admission.d.ts +0 -1
- package/dist/root-read-admission.js +31 -39
- package/dist/root-remove-identity.d.ts +0 -1
- package/dist/root-remove-receipt.d.ts +0 -1
- package/dist/root-remove.d.ts +0 -1
- package/dist/root-remove.js +15 -1
- package/dist/root-symlink-policy.d.ts +0 -1
- package/dist/root-walk.d.ts +0 -1
- package/dist/root-write-admission.d.ts +0 -1
- package/dist/root-write-compatibility.d.ts +0 -1
- package/dist/root-write-complete-parent.d.ts +0 -1
- 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 +0 -1
- package/dist/root.d.ts +0 -1
- 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 -17
- 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/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 +35 -58
- 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 +3 -1
- package/dist/sidecar-lock-handle.js +6 -0
- package/dist/sidecar-lock-policy.d.ts +3 -1
- package/dist/sidecar-lock-policy.js +16 -0
- package/dist/sidecar-lock-reclaim.d.ts +1 -2
- package/dist/sidecar-lock-reclaim.js +11 -8
- 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-target.d.ts +0 -1
- package/dist/sidecar-lock-types.d.ts +0 -1
- package/dist/sidecar-lock.d.ts +0 -1
- package/dist/sidecar-lock.js +19 -88
- package/dist/staged-directory.d.ts +2 -3
- package/dist/staged-file-settlement.d.ts +0 -1
- package/dist/staged-file-types.d.ts +0 -1
- package/dist/standalone-publication-path.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 +1 -2
- package/dist/strict-file-identity.js +9 -9
- 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/symlink-parents.js +2 -27
- 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 +0 -4
- package/dist/temp-workspace-child-admission.d.ts +0 -4
- package/dist/temp-workspace-child-admission.js +0 -12
- package/dist/temp-workspace-descriptor.d.ts +0 -6
- package/dist/temp-workspace-descriptor.js +0 -2
- package/dist/temp-workspace-identity.d.ts +0 -1
- package/dist/temp-workspace-owner.d.ts +1 -1
- package/dist/temp-workspace-owner.js +49 -26
- package/dist/temp-workspace-permissions.d.ts +0 -1
- 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/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/unicode-path.js +3 -0
- package/dist/walk.d.ts +0 -1
- package/dist/walk.js +4 -2
- package/dist/windows-command.d.ts +0 -1
- package/dist/windows-owner.d.ts +0 -1
- package/dist/windows-owner.js +4 -1
- package/dist/windows-path-alias.d.ts +0 -1
- package/dist/windows-path-alias.js +7 -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 +7 -1
- package/dist/write-file-handle.js +23 -0
- package/dist/write-open-flags.d.ts +0 -1
- package/dist/write-open-flags.js +1 -8
- package/dist/write-queue.d.ts +0 -1
- package/dist/write-queue.js +1 -4
- package/docs/advanced.md +68 -1
- package/docs/archive.md +41 -2
- package/docs/atomic.md +43 -5
- package/docs/contributing.md +4 -0
- package/docs/copy.md +2 -0
- package/docs/creation.md +8 -4
- package/docs/durability.md +35 -0
- package/docs/file-contents.md +68 -0
- package/docs/json.md +5 -4
- package/docs/local-roots.md +2 -0
- package/docs/mutation-policy-proof.md +11 -7
- package/docs/native.md +9 -8
- package/docs/path.md +4 -4
- package/docs/permissions.md +6 -0
- package/docs/public-api.md +5 -0
- package/docs/quickstart.md +1 -1
- package/docs/reading.md +2 -2
- package/docs/regular-file.md +3 -0
- package/docs/root.md +19 -0
- package/docs/secret-file.md +4 -0
- package/docs/sidecar-lock.md +9 -1
- package/docs/staged-file.md +4 -3
- package/docs/store.md +3 -1
- package/docs/temp.md +4 -1
- package/docs/types.md +18 -2
- package/docs/walk.md +7 -0
- package/docs/writing.md +18 -5
- 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.map +0 -1
- 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.map +0 -1
- 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.map +0 -1
- 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.map +0 -1
- 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/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.map +0 -1
- package/dist/create-file-async.d.ts.map +0 -1
- package/dist/create-file.d.ts.map +0 -1
- package/dist/create-owned-file.d.ts.map +0 -1
- package/dist/create.d.ts.map +0 -1
- package/dist/creation-darwin.d.ts.map +0 -1
- package/dist/creation-file-state.d.ts.map +0 -1
- package/dist/creation-path.d.ts.map +0 -1
- package/dist/creation-permissions.d.ts.map +0 -1
- 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-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.map +0 -1
- package/dist/file-store-limit.d.ts.map +0 -1
- package/dist/file-store-path.d.ts.map +0 -1
- 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 -42
- 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.map +0 -1
- 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.map +0 -1
- package/dist/temp-workspace-owner.d.ts.map +0 -1
- package/dist/temp-workspace-permissions.d.ts.map +0 -1
- 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/creation-darwin.js
CHANGED
|
@@ -2,7 +2,6 @@ import fs, {} from "node:fs";
|
|
|
2
2
|
import { inspectDirectoryIdentitySync } from "./directory-guard.js";
|
|
3
3
|
import { nodeDarwinDirectoryMetadataFlags, nodeDirectorySearchOnlyFlags } from "./directory-mode-node.js";
|
|
4
4
|
import { FsSafeError } from "./errors.js";
|
|
5
|
-
import { assertSynchronousCallbackResult } from "./mutation-authority.js";
|
|
6
5
|
import { getNativeBinding } from "./native.js";
|
|
7
6
|
import { inspectFileIdentitySync } from "./strict-file-identity.js";
|
|
8
7
|
function inspector() {
|
|
@@ -69,11 +68,3 @@ export function assertDarwinCreationDirectoryAcl(pathname, expected, inheritance
|
|
|
69
68
|
fs.closeSync(fd);
|
|
70
69
|
}
|
|
71
70
|
}
|
|
72
|
-
export function privateFileMutationAssertion(fd, assertion) {
|
|
73
|
-
if (process.platform !== "darwin")
|
|
74
|
-
return assertion;
|
|
75
|
-
return () => {
|
|
76
|
-
assertSynchronousCallbackResult(assertion?.(), "assertBeforeMutation");
|
|
77
|
-
assertDarwinCreationAcl(fd);
|
|
78
|
-
};
|
|
79
|
-
}
|
package/dist/creation-path.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type BigIntStats } from "node:fs";
|
|
2
2
|
import { type AsyncDirectoryGuard, type AnyAsyncDirectoryGuard } from "./directory-guard.js";
|
|
3
|
+
import type { CreationPermissions } from "./creation-permissions.js";
|
|
3
4
|
export type CreationParentIdentity = Readonly<{
|
|
4
5
|
dev: bigint;
|
|
5
6
|
ino: bigint;
|
|
@@ -10,6 +11,7 @@ export type CreationPath = {
|
|
|
10
11
|
parent: AsyncDirectoryGuard<BigIntStats>;
|
|
11
12
|
assertParent(): void;
|
|
12
13
|
};
|
|
14
|
+
export declare function assertBeforeCreation(selected: CreationPath, permissions: CreationPermissions, assertion: (() => void) | undefined, kind: "file" | "directory"): void;
|
|
13
15
|
export declare function creationAdmissionFromParent(parent: AnyAsyncDirectoryGuard): {
|
|
14
16
|
expectedParentIdentity: CreationParentIdentity;
|
|
15
17
|
};
|
|
@@ -18,4 +20,3 @@ export declare function creationCollision(error: unknown): unknown;
|
|
|
18
20
|
/** Remove only the recorded empty stage; never traverse a replaced directory. */
|
|
19
21
|
export declare function removeCreationDirectory(directory: string, identity: BigIntStats, assertParent: () => void): void;
|
|
20
22
|
export declare function removeCreationDirectoryAsync(directory: string, identity: BigIntStats, assertParent: () => void): Promise<void>;
|
|
21
|
-
//# sourceMappingURL=creation-path.d.ts.map
|
package/dist/creation-path.js
CHANGED
|
@@ -3,9 +3,21 @@ import fsAsync from "node:fs/promises";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { assertDirectoryIdentitySync, inspectDirectoryIdentitySync, } from "./directory-guard.js";
|
|
5
5
|
import { FsSafeError } from "./errors.js";
|
|
6
|
+
import { assertDarwinCreationDirectoryAcl, assertDarwinPrivateDirectoryMode } from "./creation-darwin.js";
|
|
7
|
+
import { assertSynchronousCallbackResult } from "./mutation-authority.js";
|
|
6
8
|
import { assertNoNulPathInput } from "./path.js";
|
|
7
9
|
import { realpathSync } from "./realpath.js";
|
|
8
10
|
import { assertNoWindowsPathAlias, resolvePathPreservingWindowsRoot } from "./windows-path-alias.js";
|
|
11
|
+
export function assertBeforeCreation(selected, permissions, assertion, kind) {
|
|
12
|
+
if (permissions.private)
|
|
13
|
+
assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, kind);
|
|
14
|
+
assertSynchronousCallbackResult(assertion?.(), "assertBeforeMutation");
|
|
15
|
+
selected.assertParent();
|
|
16
|
+
if (permissions.private && kind === "directory")
|
|
17
|
+
assertDarwinPrivateDirectoryMode(permissions.mode);
|
|
18
|
+
if (permissions.private)
|
|
19
|
+
assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, kind);
|
|
20
|
+
}
|
|
9
21
|
export function creationAdmissionFromParent(parent) {
|
|
10
22
|
const { dev, ino } = parent.stat;
|
|
11
23
|
if (typeof dev !== "bigint" || typeof ino !== "bigint") {
|
|
@@ -16,4 +16,3 @@ export declare function protectCreatedFileSync(fd: number, targetPath: string, p
|
|
|
16
16
|
export declare function protectCreatedFile(fd: number, targetPath: string, parentIdentity: string): Promise<string>;
|
|
17
17
|
export declare function verifyCreatedFileSync(fd: number, targetPath: string, identity: string, parentIdentity: string, links?: number): void;
|
|
18
18
|
export declare function verifyCreatedFile(fd: number, targetPath: string, identity: string, parentIdentity: string, links?: number): Promise<void>;
|
|
19
|
-
//# sourceMappingURL=creation-permissions.d.ts.map
|
|
@@ -50,24 +50,24 @@ function commandFallback() {
|
|
|
50
50
|
unavailable();
|
|
51
51
|
warnNativeFallback("windows-private-creation", "Private Windows creation uses a slower built-in system command.");
|
|
52
52
|
}
|
|
53
|
+
function creationOperation(name) {
|
|
54
|
+
const native = getNativeBinding();
|
|
55
|
+
const operation = native?.[name];
|
|
56
|
+
if (typeof operation === "function")
|
|
57
|
+
return operation.bind(native);
|
|
58
|
+
commandFallback();
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
53
61
|
/** Full Windows identity, with security validation when requested; no repairs. */
|
|
54
62
|
export function inspectCreationDirectorySync(targetPath, privatePath) {
|
|
55
63
|
assertNoWindowsPathAlias(targetPath, "filesystem");
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
return native.inspectWindowsDirectory(targetPath, privatePath).identity;
|
|
59
|
-
}
|
|
60
|
-
commandFallback();
|
|
61
|
-
return inspectWindowsDirectoryCommandSync(targetPath, privatePath).identity;
|
|
64
|
+
const inspect = creationOperation("inspectWindowsDirectory");
|
|
65
|
+
return (inspect ? inspect(targetPath, privatePath) : inspectWindowsDirectoryCommandSync(targetPath, privatePath)).identity;
|
|
62
66
|
}
|
|
63
67
|
export async function inspectCreationDirectory(targetPath, privatePath) {
|
|
64
68
|
assertNoWindowsPathAlias(targetPath, "filesystem");
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
return native.inspectWindowsDirectory(targetPath, privatePath).identity;
|
|
68
|
-
}
|
|
69
|
-
commandFallback();
|
|
70
|
-
return (await inspectWindowsDirectoryCommand(targetPath, privatePath)).identity;
|
|
69
|
+
const inspect = creationOperation("inspectWindowsDirectory");
|
|
70
|
+
return (inspect ? inspect(targetPath, privatePath) : await inspectWindowsDirectoryCommand(targetPath, privatePath)).identity;
|
|
71
71
|
}
|
|
72
72
|
export function assertPrivateDirectorySync(targetPath) {
|
|
73
73
|
const stat = inspectDirectoryIdentitySync(targetPath);
|
|
@@ -90,36 +90,26 @@ export async function assertPrivateDirectory(targetPath) {
|
|
|
90
90
|
inspectDirectoryIdentitySync(targetPath, stat);
|
|
91
91
|
}
|
|
92
92
|
export function protectCreatedFileSync(fd, targetPath, parentIdentity) {
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
commandFallback();
|
|
98
|
-
return protectPrivateWindowsFileCommandSync(fd, targetPath, parentIdentity).identity;
|
|
93
|
+
const protect = creationOperation("protectPrivateWindowsFile");
|
|
94
|
+
return (protect ? protect(fd, targetPath, parentIdentity)
|
|
95
|
+
: protectPrivateWindowsFileCommandSync(fd, targetPath, parentIdentity)).identity;
|
|
99
96
|
}
|
|
100
97
|
export async function protectCreatedFile(fd, targetPath, parentIdentity) {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
commandFallback();
|
|
106
|
-
return (await protectPrivateWindowsFileCommand(fd, targetPath, parentIdentity)).identity;
|
|
98
|
+
const protect = creationOperation("protectPrivateWindowsFile");
|
|
99
|
+
return (protect ? protect(fd, targetPath, parentIdentity)
|
|
100
|
+
: await protectPrivateWindowsFileCommand(fd, targetPath, parentIdentity)).identity;
|
|
107
101
|
}
|
|
108
102
|
export function verifyCreatedFileSync(fd, targetPath, identity, parentIdentity, links = 1) {
|
|
109
|
-
const
|
|
110
|
-
if (
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
commandFallback();
|
|
115
|
-
verifyPrivateWindowsFileCommandSync(fd, targetPath, identity, parentIdentity, links);
|
|
103
|
+
const verify = creationOperation("verifyPrivateWindowsFile");
|
|
104
|
+
if (verify)
|
|
105
|
+
verify(fd, targetPath, identity, parentIdentity, links);
|
|
106
|
+
else
|
|
107
|
+
verifyPrivateWindowsFileCommandSync(fd, targetPath, identity, parentIdentity, links);
|
|
116
108
|
}
|
|
117
109
|
export async function verifyCreatedFile(fd, targetPath, identity, parentIdentity, links = 1) {
|
|
118
|
-
const
|
|
119
|
-
if (
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
commandFallback();
|
|
124
|
-
await verifyPrivateWindowsFileCommand(fd, targetPath, identity, parentIdentity, links);
|
|
110
|
+
const verify = creationOperation("verifyPrivateWindowsFile");
|
|
111
|
+
if (verify)
|
|
112
|
+
verify(fd, targetPath, identity, parentIdentity, links);
|
|
113
|
+
else
|
|
114
|
+
await verifyPrivateWindowsFileCommand(fd, targetPath, identity, parentIdentity, links);
|
|
125
115
|
}
|
package/dist/deny-mutations.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function resolveMutationComparablePaths(rawPath: string):
|
|
1
|
+
export declare function resolveMutationComparablePaths(rawPath: string): Set<string>;
|
|
2
2
|
export type DenyMutationPolicy = {
|
|
3
3
|
paths?: readonly string[];
|
|
4
4
|
prefixes?: readonly string[];
|
|
@@ -6,7 +6,6 @@ export type DenyMutationPolicy = {
|
|
|
6
6
|
type DenyMutationCheckOptions = {
|
|
7
7
|
protectAncestors?: boolean;
|
|
8
8
|
};
|
|
9
|
-
export declare function assertMutationNotDenied(filePath: string, policy: DenyMutationPolicy | undefined, options?: DenyMutationCheckOptions):
|
|
9
|
+
export declare function assertMutationNotDenied(filePath: string, policy: DenyMutationPolicy | undefined, options?: DenyMutationCheckOptions, mode?: "root" | "sync-root-lock"): void;
|
|
10
10
|
export declare function mergeDenyMutationPolicies(defaultPolicy: DenyMutationPolicy | undefined, callPolicy: DenyMutationPolicy | undefined): DenyMutationPolicy | undefined;
|
|
11
11
|
export {};
|
|
12
|
-
//# sourceMappingURL=deny-mutations.d.ts.map
|
package/dist/deny-mutations.js
CHANGED
|
@@ -1,61 +1,81 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
1
2
|
import path from "node:path";
|
|
2
3
|
import { FsSafeError } from "./errors.js";
|
|
3
|
-
import { assertNoNulPathInput, isPathInside } from "./path.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
4
|
+
import { assertNoNulPathInput, isNotFoundPathError, isPathInside } from "./path.js";
|
|
5
|
+
import { realpathSync } from "./realpath.js";
|
|
6
|
+
import { resolveExistingAncestor } from "./root-path-existing.js";
|
|
7
|
+
import { assertNoWindowsPathAlias, pathForWindowsFilesystem, resolvePathPreservingWindowsRoot, } from "./windows-path-alias.js";
|
|
8
|
+
export function resolveMutationComparablePaths(rawPath) {
|
|
7
9
|
assertNoNulPathInput(rawPath, "path contains a NUL byte");
|
|
8
10
|
assertNoWindowsPathAlias(rawPath, "filesystem", "mutation path uses a Windows filesystem namespace alias");
|
|
9
11
|
const resolved = resolvePathPreservingWindowsRoot(rawPath);
|
|
10
12
|
assertNoWindowsPathAlias(resolved, "filesystem", "mutation path uses a Windows filesystem namespace alias");
|
|
11
|
-
const canonical =
|
|
13
|
+
const canonical = resolveExistingAncestor(resolved, "native");
|
|
12
14
|
assertNoWindowsPathAlias(canonical, "filesystem", "mutation path uses a Windows filesystem namespace alias");
|
|
13
15
|
return new Set([resolved, canonical]);
|
|
14
16
|
}
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
function strictMutationComparablePaths(pathname) {
|
|
18
|
+
const resolved = resolvePathPreservingWindowsRoot(pathname);
|
|
19
|
+
assertNoWindowsPathAlias(resolved, "filesystem", "mutation path uses a Windows filesystem namespace alias");
|
|
20
|
+
let cursor = resolved;
|
|
21
|
+
const filesystemRoot = path.parse(resolved).root;
|
|
22
|
+
while (cursor !== filesystemRoot) {
|
|
23
|
+
try {
|
|
24
|
+
fs.lstatSync(pathForWindowsFilesystem(cursor));
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (!isNotFoundPathError(error))
|
|
29
|
+
throw error;
|
|
30
|
+
cursor = path.dirname(cursor);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Synchronous Root locks require authority-grade canonicalization. Keep
|
|
34
|
+
// ambiguous existing ancestors distinct from Root's lexical fallback.
|
|
35
|
+
const canonicalAncestor = realpathSync.native(pathForWindowsFilesystem(cursor));
|
|
36
|
+
assertNoWindowsPathAlias(canonicalAncestor, "filesystem", "mutation path uses a Windows filesystem namespace alias");
|
|
37
|
+
const canonical = cursor === resolved
|
|
38
|
+
? canonicalAncestor
|
|
39
|
+
: path.resolve(canonicalAncestor, `.${path.sep}${resolved.slice(cursor.length)}`);
|
|
40
|
+
assertNoWindowsPathAlias(canonical, "filesystem", "mutation path uses a Windows filesystem namespace alias");
|
|
41
|
+
return path.relative(path.resolve(resolved), path.resolve(canonical)) === ""
|
|
42
|
+
? [resolved] : [resolved, canonical];
|
|
20
43
|
}
|
|
21
|
-
function policyPathEntries(entries) {
|
|
44
|
+
function policyPathEntries(entries, strict) {
|
|
22
45
|
const paths = [];
|
|
23
46
|
for (const entry of entries ?? []) {
|
|
47
|
+
if (strict && (!entry || !path.isAbsolute(entry))) {
|
|
48
|
+
throw new FsSafeError("invalid-path", "deny mutation paths must be non-empty absolute paths");
|
|
49
|
+
}
|
|
24
50
|
if (entry.length === 0) {
|
|
25
51
|
throw new FsSafeError("invalid-path", "deny mutation paths must be non-empty");
|
|
26
52
|
}
|
|
27
53
|
assertNoNulPathInput(entry, "deny mutation path contains a NUL byte");
|
|
28
54
|
assertNoWindowsPathAlias(entry, "filesystem", "deny mutation path uses a Windows filesystem namespace alias");
|
|
29
|
-
if (!path.isAbsolute(entry)) {
|
|
55
|
+
if (!strict && !path.isAbsolute(entry)) {
|
|
30
56
|
throw new FsSafeError("invalid-path", "deny mutation paths must be absolute");
|
|
31
57
|
}
|
|
32
|
-
paths.push(entry);
|
|
58
|
+
paths.push(strict ? resolvePathPreservingWindowsRoot(entry) : entry);
|
|
33
59
|
}
|
|
34
60
|
return paths;
|
|
35
61
|
}
|
|
36
|
-
export
|
|
37
|
-
if (!
|
|
62
|
+
export function assertMutationNotDenied(filePath, policy, options = {}, mode = "root") {
|
|
63
|
+
if (!policy?.paths?.length && !policy?.prefixes?.length)
|
|
38
64
|
return;
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const deniedPaths = await resolveMutationComparablePaths(deniedPrefix);
|
|
54
|
-
for (const target of targetPaths) {
|
|
55
|
-
for (const denied of deniedPaths) {
|
|
56
|
-
if (isPathInside(denied, target) ||
|
|
57
|
-
(options.protectAncestors === true && isPathInside(target, denied))) {
|
|
58
|
-
throw new FsSafeError("denied-path", "path is denied by denyMutations policy");
|
|
65
|
+
const strict = mode === "sync-root-lock";
|
|
66
|
+
const comparablePaths = strict ? strictMutationComparablePaths : resolveMutationComparablePaths;
|
|
67
|
+
const targets = comparablePaths(filePath);
|
|
68
|
+
// Validate one complete phase at a time. A paths denial must not read or
|
|
69
|
+
// canonicalize prefixes, and invalid later paths retain validation precedence.
|
|
70
|
+
for (const kind of ["paths", "prefixes"]) {
|
|
71
|
+
for (const entry of policyPathEntries(policy[kind], strict)) {
|
|
72
|
+
const deniedPaths = comparablePaths(entry);
|
|
73
|
+
for (const target of targets) {
|
|
74
|
+
for (const denied of deniedPaths) {
|
|
75
|
+
if ((isPathInside(denied, target) && (kind === "prefixes" || isPathInside(target, denied))) ||
|
|
76
|
+
(options.protectAncestors === true && isPathInside(target, denied))) {
|
|
77
|
+
throw new FsSafeError("denied-path", "path is denied by denyMutations policy");
|
|
78
|
+
}
|
|
59
79
|
}
|
|
60
80
|
}
|
|
61
81
|
}
|
package/dist/device-path.d.ts
CHANGED
|
@@ -12,4 +12,3 @@ export declare function isWindowsReservedDeviceName(name: string): boolean;
|
|
|
12
12
|
export declare function matchUnsafeDeviceReadPath(filePath: string, options?: UnsafeDeviceReadPathOptions): UnsafeDeviceReadPathMatch | undefined;
|
|
13
13
|
export declare function isUnsafeDeviceReadPath(filePath: string, options?: UnsafeDeviceReadPathOptions): boolean;
|
|
14
14
|
export declare function assertNoUnsafeDeviceReadPath(filePath: string, options?: UnsafeDeviceReadPathOptions): void;
|
|
15
|
-
//# sourceMappingURL=device-path.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Stats } from "node:fs";
|
|
1
|
+
import { type BigIntStats, type Stats } from "node:fs";
|
|
2
2
|
import type { FileIdentityStat } from "./file-identity.js";
|
|
3
3
|
export type DirectorySyncOutcome = {
|
|
4
4
|
status: "synced";
|
|
@@ -6,10 +6,10 @@ export type DirectorySyncOutcome = {
|
|
|
6
6
|
status: "unsupported";
|
|
7
7
|
code?: string;
|
|
8
8
|
};
|
|
9
|
-
export type DirectoryReceipt = {
|
|
9
|
+
export type DirectoryReceipt<T extends Stats | BigIntStats = Stats> = {
|
|
10
10
|
path: string;
|
|
11
11
|
realPath: string;
|
|
12
|
-
identity:
|
|
12
|
+
identity: T;
|
|
13
13
|
};
|
|
14
14
|
export type DurableDirectoryReceipt = DirectoryReceipt & {
|
|
15
15
|
parentSync: DirectorySyncOutcome | {
|
|
@@ -29,16 +29,15 @@ export type EnsureDurableDirectoryOptions = {
|
|
|
29
29
|
expectedExistingIdentity?: FileIdentityStat;
|
|
30
30
|
create?: (directoryPath: string) => Promise<void>;
|
|
31
31
|
};
|
|
32
|
-
export declare function pinDirectory(directory: string | DirectoryReceipt
|
|
32
|
+
export declare function pinDirectory(directory: string | DirectoryReceipt<Stats | BigIntStats>, options?: {
|
|
33
33
|
label?: string;
|
|
34
34
|
}): Promise<PinnedDirectory>;
|
|
35
|
-
export declare function syncDirectory(directory: string | DirectoryReceipt
|
|
35
|
+
export declare function syncDirectory(directory: string | DirectoryReceipt<Stats | BigIntStats>, options?: {
|
|
36
36
|
label?: string;
|
|
37
37
|
}): Promise<DirectorySyncOutcome>;
|
|
38
|
-
export declare function syncDirectorySync(directory: string | DirectoryReceipt
|
|
38
|
+
export declare function syncDirectorySync(directory: string | DirectoryReceipt<Stats | BigIntStats>, options?: {
|
|
39
39
|
label?: string;
|
|
40
40
|
}): DirectorySyncOutcome;
|
|
41
41
|
export declare function syncDirectoryBestEffort(directoryPath: string): Promise<void>;
|
|
42
42
|
export declare function syncDirectoryBestEffortSync(directoryPath: string): void;
|
|
43
43
|
export declare function ensureDurableDirectory(options: EnsureDurableDirectoryOptions): Promise<DurableDirectoryReceipt>;
|
|
44
|
-
//# sourceMappingURL=directory-durability.d.ts.map
|
|
@@ -6,11 +6,7 @@ export type AsyncDirectoryGuard<T extends Stats | BigIntStats = Stats> = {
|
|
|
6
6
|
stat: T;
|
|
7
7
|
};
|
|
8
8
|
export type AnyAsyncDirectoryGuard = AsyncDirectoryGuard<Stats | BigIntStats>;
|
|
9
|
-
export type SyncDirectoryGuard =
|
|
10
|
-
dir: string;
|
|
11
|
-
realPath: string;
|
|
12
|
-
stat: Stats;
|
|
13
|
-
};
|
|
9
|
+
export type SyncDirectoryGuard = AsyncDirectoryGuard;
|
|
14
10
|
export type DirectoryIdentity = Readonly<{
|
|
15
11
|
dev: bigint;
|
|
16
12
|
ino: bigint;
|
|
@@ -30,8 +26,8 @@ export declare function createAsyncDirectoryGuard(dir: string, options?: {
|
|
|
30
26
|
export declare function createAsyncDirectoryGuard(dir: string, options: {
|
|
31
27
|
bigint: boolean;
|
|
32
28
|
}): Promise<AnyAsyncDirectoryGuard>;
|
|
33
|
-
export declare function assertAsyncDirectoryGuard(guard: AnyAsyncDirectoryGuard): Promise<void>;
|
|
34
29
|
export declare function createSyncDirectoryGuard(dir: string): SyncDirectoryGuard;
|
|
30
|
+
export declare function assertAsyncDirectoryGuard(guard: AnyAsyncDirectoryGuard): Promise<void>;
|
|
35
31
|
export declare function assertSyncDirectoryGuard(guard: SyncDirectoryGuard | AnyAsyncDirectoryGuard): void;
|
|
36
32
|
export declare function createNearestExistingDirectoryGuard(rootReal: string, targetPath: string): Promise<AsyncDirectoryGuard>;
|
|
37
33
|
export declare function createNearestExistingDirectoryGuard(rootReal: string, targetPath: string, options: {
|
|
@@ -57,4 +53,3 @@ export declare function extendDirectoryObservationGuard(observation: StatObserva
|
|
|
57
53
|
export declare function inspectDirectoryObservationSync(dir: string, expected?: ExactStatIdentity): StatObservationReceipt;
|
|
58
54
|
export declare function assertDirectoryObservationSync(dir: string, expected: ExactStatIdentity): Stats | BigIntStats;
|
|
59
55
|
export declare function assertDirectoryObservationGuardSync(guard: DirectoryObservationGuard): void;
|
|
60
|
-
//# sourceMappingURL=directory-guard.d.ts.map
|
package/dist/directory-guard.js
CHANGED
|
@@ -30,6 +30,12 @@ export function assertDirectoryIdentitySync(observedPath, expected) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
export async function createAsyncDirectoryGuard(dir, options) {
|
|
33
|
+
return captureDirectoryGuard(dir, "native", options);
|
|
34
|
+
}
|
|
35
|
+
export function createSyncDirectoryGuard(dir) {
|
|
36
|
+
return captureDirectoryGuard(dir, "normalized");
|
|
37
|
+
}
|
|
38
|
+
function captureDirectoryGuard(dir, mode, options) {
|
|
33
39
|
const operationPath = directoryOperationPath(dir);
|
|
34
40
|
const stat = options?.bigint
|
|
35
41
|
? inspectDirectoryIdentityAtPathSync(operationPath, undefined, options.initial)
|
|
@@ -37,11 +43,17 @@ export async function createAsyncDirectoryGuard(dir, options) {
|
|
|
37
43
|
if (stat.isSymbolicLink() || !stat.isDirectory()) {
|
|
38
44
|
throw directoryComponentNotDirectoryError();
|
|
39
45
|
}
|
|
40
|
-
const realPath = realpathSync.native(operationPath);
|
|
46
|
+
const realPath = mode === "native" ? realpathSync.native(operationPath) : realpathSync(operationPath);
|
|
41
47
|
assertNoWindowsPathAlias(realPath, "filesystem");
|
|
42
48
|
return { dir, realPath, stat };
|
|
43
49
|
}
|
|
44
50
|
export async function assertAsyncDirectoryGuard(guard) {
|
|
51
|
+
assertDirectoryGuard(guard, "native");
|
|
52
|
+
}
|
|
53
|
+
export function assertSyncDirectoryGuard(guard) {
|
|
54
|
+
assertDirectoryGuard(guard, "normalized");
|
|
55
|
+
}
|
|
56
|
+
function assertDirectoryGuard(guard, mode) {
|
|
45
57
|
const dir = guard.dir;
|
|
46
58
|
const operationPath = directoryOperationPath(dir);
|
|
47
59
|
const expectedRealPath = guard.realPath;
|
|
@@ -57,71 +69,32 @@ export async function assertAsyncDirectoryGuard(guard) {
|
|
|
57
69
|
if (stat.isSymbolicLink() || !stat.isDirectory()) {
|
|
58
70
|
throw directoryComponentNotDirectoryError();
|
|
59
71
|
}
|
|
60
|
-
|
|
72
|
+
// Native guards check identity first; normalized numeric guards preserve
|
|
73
|
+
// canonicalization errors before their final identity comparison.
|
|
74
|
+
if (mode === "native" && !sameFileIdentity(stat, expectedIdentity)) {
|
|
61
75
|
throw new FsSafeError("path-mismatch", "directory changed during operation");
|
|
62
76
|
}
|
|
63
|
-
const realPath =
|
|
64
|
-
assertNoWindowsPathAlias(realPath, "filesystem");
|
|
65
|
-
if (realPath !== expectedRealPath) {
|
|
66
|
-
throw new FsSafeError("path-mismatch", "directory changed during operation");
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
export function createSyncDirectoryGuard(dir) {
|
|
70
|
-
const operationPath = directoryOperationPath(dir);
|
|
71
|
-
const stat = fsSync.lstatSync(operationPath);
|
|
72
|
-
if (stat.isSymbolicLink() || !stat.isDirectory()) {
|
|
73
|
-
throw directoryComponentNotDirectoryError();
|
|
74
|
-
}
|
|
75
|
-
const realPath = realpathSync(operationPath);
|
|
76
|
-
assertNoWindowsPathAlias(realPath, "filesystem");
|
|
77
|
-
return { dir, realPath, stat };
|
|
78
|
-
}
|
|
79
|
-
export function assertSyncDirectoryGuard(guard) {
|
|
80
|
-
const dir = guard.dir;
|
|
81
|
-
const operationPath = directoryOperationPath(dir);
|
|
82
|
-
const expectedRealPath = guard.realPath;
|
|
83
|
-
assertNoWindowsPathAlias(expectedRealPath, "filesystem");
|
|
84
|
-
const expectedStat = guard.stat;
|
|
85
|
-
const expectedIdentity = { dev: expectedStat.dev, ino: expectedStat.ino };
|
|
86
|
-
const stat = typeof expectedIdentity.dev === "bigint" && typeof expectedIdentity.ino === "bigint"
|
|
87
|
-
? inspectDirectoryIdentityAtPathSync(operationPath, { dev: expectedIdentity.dev, ino: expectedIdentity.ino })
|
|
88
|
-
: fsSync.lstatSync(operationPath);
|
|
89
|
-
if (stat.isSymbolicLink() || !stat.isDirectory()) {
|
|
90
|
-
throw directoryComponentNotDirectoryError();
|
|
91
|
-
}
|
|
92
|
-
const realPath = typeof expectedIdentity.ino === "bigint"
|
|
77
|
+
const realPath = mode === "native" || typeof expectedIdentity.ino === "bigint"
|
|
93
78
|
? realpathSync.native(operationPath) : realpathSync(operationPath);
|
|
94
79
|
assertNoWindowsPathAlias(realPath, "filesystem");
|
|
95
|
-
if (!sameFileIdentity(stat, expectedIdentity) || realPath !== expectedRealPath) {
|
|
80
|
+
if ((mode === "normalized" && !sameFileIdentity(stat, expectedIdentity)) || realPath !== expectedRealPath) {
|
|
96
81
|
throw new FsSafeError("path-mismatch", "directory changed during operation");
|
|
97
82
|
}
|
|
98
83
|
}
|
|
99
84
|
export async function createNearestExistingDirectoryGuard(rootReal, targetPath, options = { bigint: false }) {
|
|
100
|
-
|
|
101
|
-
assertNoWindowsPathAlias(targetPath, "filesystem");
|
|
102
|
-
let current = resolvePathPreservingWindowsRoot(targetPath);
|
|
103
|
-
const root = resolvePathPreservingWindowsRoot(rootReal);
|
|
104
|
-
while (current !== root) {
|
|
105
|
-
try {
|
|
106
|
-
return await createAsyncDirectoryGuard(current, options);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
if (!isNotFoundPathError(error)) {
|
|
110
|
-
throw error;
|
|
111
|
-
}
|
|
112
|
-
current = path.dirname(current);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return await createAsyncDirectoryGuard(root, options);
|
|
85
|
+
return nearestExistingDirectoryGuard(rootReal, targetPath, "native", options);
|
|
116
86
|
}
|
|
117
87
|
export function createNearestExistingSyncDirectoryGuard(rootReal, targetPath) {
|
|
88
|
+
return nearestExistingDirectoryGuard(rootReal, targetPath, "normalized");
|
|
89
|
+
}
|
|
90
|
+
function nearestExistingDirectoryGuard(rootReal, targetPath, mode, options) {
|
|
118
91
|
assertNoWindowsPathAlias(rootReal, "filesystem");
|
|
119
92
|
assertNoWindowsPathAlias(targetPath, "filesystem");
|
|
120
93
|
let current = resolvePathPreservingWindowsRoot(targetPath);
|
|
121
94
|
const root = resolvePathPreservingWindowsRoot(rootReal);
|
|
122
95
|
while (current !== root) {
|
|
123
96
|
try {
|
|
124
|
-
return
|
|
97
|
+
return captureDirectoryGuard(current, mode, options);
|
|
125
98
|
}
|
|
126
99
|
catch (error) {
|
|
127
100
|
if (!isNotFoundPathError(error)) {
|
|
@@ -130,15 +103,11 @@ export function createNearestExistingSyncDirectoryGuard(rootReal, targetPath) {
|
|
|
130
103
|
current = path.dirname(current);
|
|
131
104
|
}
|
|
132
105
|
}
|
|
133
|
-
return
|
|
106
|
+
return captureDirectoryGuard(root, mode, options);
|
|
134
107
|
}
|
|
135
108
|
// Recovery receipts must retain every identity bit, including on Windows.
|
|
136
109
|
export async function inspectDirectoryIdentity(dir, expected) {
|
|
137
|
-
|
|
138
|
-
const expectedIdentity = expected === undefined
|
|
139
|
-
? undefined
|
|
140
|
-
: { dev: expected.dev, ino: expected.ino };
|
|
141
|
-
return inspectDirectoryIdentityAtPathSync(operationPath, expectedIdentity);
|
|
110
|
+
return inspectDirectoryIdentitySync(dir, expected);
|
|
142
111
|
}
|
|
143
112
|
function directoryOperationPath(dir) {
|
|
144
113
|
assertNoWindowsPathAlias(dir, "filesystem");
|
|
@@ -14,11 +14,10 @@ type DirectoryAuthority = DirectoryProvenance & Readonly<{
|
|
|
14
14
|
realPath: string;
|
|
15
15
|
}>;
|
|
16
16
|
export declare function directoryReceiptIdentity(identity: FileIdentityStat): ExactIdentity;
|
|
17
|
-
export declare function directoryReceiptAuthority(receipt: DirectoryReceipt): DirectoryAuthority;
|
|
18
|
-
export declare function ownDirectoryReceipt(receipt: DirectoryReceipt): DirectoryReceipt;
|
|
17
|
+
export declare function directoryReceiptAuthority(receipt: DirectoryReceipt<Stats | BigIntStats>): DirectoryAuthority;
|
|
18
|
+
export declare function ownDirectoryReceipt(receipt: DirectoryReceipt<Stats | BigIntStats>): DirectoryReceipt;
|
|
19
19
|
export declare function copyRetainedDirectoryReceipt(receipt: DirectoryReceipt): DirectoryReceipt;
|
|
20
20
|
export declare function createDirectoryReceiptFromIdentity(pathname: string, realPath: string, exactStat: BigIntStats): DirectoryReceipt;
|
|
21
21
|
export declare function createDirectoryReceiptSync(directoryPath: string, label: string, canonicalize?: (pathname: string) => string): DirectoryReceipt;
|
|
22
22
|
export declare function assertDirectoryReceiptCurrentSync(receipt: DirectoryReceipt, label: string, canonicalize?: (pathname: string) => string): void;
|
|
23
23
|
export {};
|
|
24
|
-
//# sourceMappingURL=directory-receipt.d.ts.map
|
|
@@ -53,10 +53,18 @@ function snapshotDirectoryReceipt(receipt) {
|
|
|
53
53
|
function snapshotDirectoryMetadata(stat, identity) {
|
|
54
54
|
const metadata = {};
|
|
55
55
|
for (const field of numericFields) {
|
|
56
|
-
metadata[field] = field === "dev" || field === "ino" ?
|
|
56
|
+
metadata[field] = Number(field === "dev" || field === "ino" ? identity[field] : stat[field]);
|
|
57
|
+
}
|
|
58
|
+
for (const field of timeFields) {
|
|
59
|
+
if ("atimeNs" in stat) {
|
|
60
|
+
const nanoseconds = stat[`${field}Ns`];
|
|
61
|
+
const remainder = ((nanoseconds % 1000000000n) + 1000000000n) % 1000000000n;
|
|
62
|
+
metadata[`${field}Ms`] = Number((nanoseconds - remainder) / 1000000000n) * 1_000 + Number(remainder) / 1_000_000;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
metadata[`${field}Ms`] = stat[`${field}Ms`];
|
|
66
|
+
}
|
|
57
67
|
}
|
|
58
|
-
for (const field of timeFields)
|
|
59
|
-
metadata[`${field}Ms`] = stat[`${field}Ms`];
|
|
60
68
|
return Object.freeze(metadata);
|
|
61
69
|
}
|
|
62
70
|
export function directoryReceiptAuthority(receipt) {
|
|
@@ -81,27 +89,15 @@ function receiptFromAuthority(authority) {
|
|
|
81
89
|
identity: Object.assign(Object.create(fs.Stats.prototype), authority.metadata),
|
|
82
90
|
}, authority);
|
|
83
91
|
}
|
|
84
|
-
function numericDirectoryMetadata(exact) {
|
|
85
|
-
// Keep metadata and authority from one observation. A second pathname stat
|
|
86
|
-
// can describe a replacement even when a later fence sees the original again.
|
|
87
|
-
const metadata = {};
|
|
88
|
-
for (const field of numericFields) {
|
|
89
|
-
metadata[field] = Number(exact[field]);
|
|
90
|
-
}
|
|
91
|
-
for (const field of timeFields) {
|
|
92
|
-
const nanoseconds = exact[`${field}Ns`];
|
|
93
|
-
const remainder = ((nanoseconds % 1000000000n) + 1000000000n) % 1000000000n;
|
|
94
|
-
metadata[`${field}Ms`] = Number((nanoseconds - remainder) / 1000000000n) * 1_000 + Number(remainder) / 1_000_000;
|
|
95
|
-
}
|
|
96
|
-
return Object.freeze(metadata);
|
|
97
|
-
}
|
|
98
92
|
// The caller already admitted the exact observation and its paths.
|
|
99
93
|
export function createDirectoryReceiptFromIdentity(pathname, realPath, exactStat) {
|
|
94
|
+
const identity = Object.freeze({ dev: exactStat.dev, ino: exactStat.ino });
|
|
100
95
|
return receiptFromAuthority(Object.freeze({
|
|
101
96
|
path: pathname,
|
|
102
97
|
realPath,
|
|
103
|
-
identity
|
|
104
|
-
metadata
|
|
98
|
+
identity,
|
|
99
|
+
// Project metadata from the admitted observation, never a fresh pathname stat.
|
|
100
|
+
metadata: snapshotDirectoryMetadata(exactStat, identity),
|
|
105
101
|
}));
|
|
106
102
|
}
|
|
107
103
|
export function createDirectoryReceiptSync(directoryPath, label, canonicalize = realpathSync) {
|
package/dist/durability.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { ensureDurableDirectory, pinDirectory, syncDirectory, syncDirectoryBestEffort, syncDirectoryBestEffortSync, syncDirectorySync, type DirectoryReceipt, type DirectorySyncOutcome, type DurableDirectoryReceipt, type EnsureDurableDirectoryOptions, type PinnedDirectory, } from "./directory-durability.js";
|
|
2
2
|
export { isHardlinkFallbackError, publishFileExclusive, type PublishFileExclusiveResult, type PublishFileExclusiveStrategy, type PublishFileExclusiveCleanup, type PublishFileExclusiveDirectorySyncFailure, type PublishFileExclusiveFailureDetails, type PublishFileExclusiveFailurePhase, type PublishFileExclusiveSyncFailurePolicy, } from "./publish-file.js";
|
|
3
3
|
export { sha256File, sha256FileSync, type Sha256FileInput, type Sha256FileSyncInput, type Sha256FileOptions, type Sha256FileResult, } from "./file-hash.js";
|
|
4
|
-
//# sourceMappingURL=durability.d.ts.map
|
package/dist/effective-uid.d.ts
CHANGED
package/dist/error-detail.d.ts
CHANGED
package/dist/errors.d.ts
CHANGED
package/dist/file-cleanup.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type BigIntStats } from "node:fs";
|
|
2
2
|
import fs, { type FileHandle } from "node:fs/promises";
|
|
3
3
|
import { type AnyAsyncDirectoryGuard } from "./directory-guard.js";
|
|
4
|
+
export declare function readErrorCode(error: unknown): unknown;
|
|
4
5
|
export declare function hasErrorCode(error: unknown, expected: string): boolean;
|
|
5
6
|
type OwnedPathCleanupStatus = "removed" | "name-absent" | "preserved";
|
|
6
7
|
export declare function removeOwnedPath(params: {
|
|
@@ -16,4 +17,3 @@ export declare function cleanupPinnedFilePath(params: {
|
|
|
16
17
|
throwOnCleanupError?: boolean;
|
|
17
18
|
}): Promise<OwnedPathCleanupStatus>;
|
|
18
19
|
export {};
|
|
19
|
-
//# sourceMappingURL=file-cleanup.d.ts.map
|