@openclaw/fs-safe 0.17.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 +43 -0
- package/dist/absolute-path.d.ts +0 -1
- package/dist/advanced.d.ts +0 -1
- package/dist/archive-crc32.d.ts +0 -1
- package/dist/archive-deadline.d.ts +0 -1
- 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 +2 -4
- package/dist/archive-merge.js +14 -4
- package/dist/archive-native.d.ts +3 -15
- package/dist/archive-native.js +46 -71
- package/dist/archive-options.d.ts +7 -2
- package/dist/archive-parser-errors.d.ts +0 -1
- 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-directory.d.ts +0 -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 +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 +0 -1
- package/dist/archive.js +87 -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 +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 +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 -1
- 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 +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-owner.d.ts +0 -1
- package/dist/directory-receipt.d.ts +0 -1
- 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 +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 +32 -98
- 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 +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 +21 -23
- package/dist/file-lock-sync.d.ts +0 -1
- 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 +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 +3 -4
- 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-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/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 +6 -6
- package/dist/json-durable-queue.d.ts +0 -1
- package/dist/json-durable-queue.js +7 -130
- 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 +6 -15
- 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/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 +15 -3
- package/dist/native-staged-file.js +55 -63
- 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 +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-mode.d.ts +0 -1
- package/dist/pinned-write-staged.d.ts +0 -1
- package/dist/pinned-write-types.d.ts +9 -21
- package/dist/pinned-write.d.ts +0 -1
- 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 +0 -1
- 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-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 +0 -1
- 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 +0 -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-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.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 +0 -1
- package/dist/root-file.d.ts +0 -1
- package/dist/root-impl.d.ts +2 -10
- package/dist/root-impl.js +114 -91
- package/dist/root-move-noreplace.d.ts +0 -1
- 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 -44
- 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-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 +31 -52
- 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 +3 -1
- package/dist/sidecar-lock-policy.js +16 -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-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 +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/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 +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 +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 +45 -22
- 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/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 +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 +0 -1
- package/dist/write-open-flags.d.ts +0 -1
- package/dist/write-queue.d.ts +0 -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 +4 -0
- package/docs/writing.md +9 -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.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/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.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-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.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 -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.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/root-path.js
CHANGED
|
@@ -5,10 +5,9 @@ import { pathEscapeError, sanitizeRootPathError, symlinkEscapeError } from "./ro
|
|
|
5
5
|
import { FsSafeError } from "./errors.js";
|
|
6
6
|
import { isNativeDirectoryObservationGuard } from "./native-directory-observation.js";
|
|
7
7
|
import { assertNoNulPathInput, isNotFoundPathError, isPathRelativeEscape, } from "./path.js";
|
|
8
|
-
import { absolutePathWithRawSegments, rawPathRelativeToCanonicalRoot,
|
|
8
|
+
import { absolutePathWithRawSegments, rawPathRelativeToCanonicalRoot, resolveExistingAncestor, resolveSymlinkHopPath, } from "./root-path-existing.js";
|
|
9
9
|
import { admitPathInsideRoot, } from "./root-boundary.js";
|
|
10
10
|
import { RootPathObservationError, captureRootPathObservedDirectory, createRootPathTraversalObservation, inspectRootPathTraversalEntry, } from "./root-path-observation.js";
|
|
11
|
-
import { resolveSymlinkHopPath, resolveSymlinkHopPathSync } from "./root-path-symlink.js";
|
|
12
11
|
import { assertNoDriveRelativePathSegments } from "./safe-path-segment.js";
|
|
13
12
|
import { assertNoWindowsPathAlias, pathForWindowsFilesystem, resolvePathFromBasePreservingWindowsRoot, resolvePathPreservingWindowsRoot, } from "./windows-path-alias.js";
|
|
14
13
|
export { resolvePathViaExistingAncestorSync } from "./root-path-existing.js";
|
|
@@ -24,85 +23,35 @@ export const ROOT_PATH_ALIAS_POLICIES = {
|
|
|
24
23
|
}),
|
|
25
24
|
};
|
|
26
25
|
export async function resolveRootPath(params) {
|
|
27
|
-
|
|
28
|
-
return await resolveRootPathInternal(params);
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
throw sanitizeRootPathError(error);
|
|
32
|
-
}
|
|
26
|
+
return resolveRootPathInternal(params);
|
|
33
27
|
}
|
|
34
28
|
export async function resolveRootPathWithCanonicalRootObservation(params, observeRoot) {
|
|
35
|
-
|
|
36
|
-
return await resolveRootPathInternal(params, undefined, undefined, observeRoot);
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
throw sanitizeRootPathError(error);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
async function resolveRootPathInternal(params, observationRequest, observationOutput, observeRoot, removalReceipts) {
|
|
43
|
-
const input = captureValidRootPathInputs(params);
|
|
44
|
-
const rawAbsolutePath = absolutePathWithRawSegments(input.absolutePath);
|
|
45
|
-
const rootPath = resolvePathPreservingWindowsRoot(input.rootPath);
|
|
46
|
-
const absolutePath = resolvePathPreservingWindowsRoot(rawAbsolutePath);
|
|
47
|
-
const rootCanonicalPath = input.rootCanonicalPath
|
|
48
|
-
? resolvePathPreservingWindowsRoot(input.rootCanonicalPath)
|
|
49
|
-
: await resolvePathViaExistingAncestor(rootPath);
|
|
50
|
-
assertNoWindowsPathAlias(rootPath);
|
|
51
|
-
assertNoWindowsPathAlias(absolutePath);
|
|
52
|
-
assertNoWindowsPathAlias(rootCanonicalPath);
|
|
53
|
-
observeRoot?.(rootCanonicalPath);
|
|
54
|
-
return resolveRootPathLexicalAsync(prepareRootTraversal(input, rootPath, rootCanonicalPath, absolutePath, rawAbsolutePath), observationRequest, observationOutput, removalReceipts);
|
|
29
|
+
return resolveRootPathInternal(params, { observeRoot });
|
|
55
30
|
}
|
|
56
31
|
export async function resolveRootPathWithObservation(params, request) {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return output.receipt ? { resolved, receipt: output.receipt } : { resolved };
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
throw sanitizeRootPathError(error);
|
|
64
|
-
}
|
|
32
|
+
const observation = { request };
|
|
33
|
+
const resolved = resolveRootPathInternal(params, { observation });
|
|
34
|
+
return observation.receipt ? { resolved, receipt: observation.receipt } : { resolved };
|
|
65
35
|
}
|
|
66
36
|
// Removal receipts are separate from metadata observations and canonical-root
|
|
67
37
|
// callbacks; the public resolver's options and result remain unchanged.
|
|
68
38
|
export async function resolveRootPathForRemoval(params, receipts) {
|
|
69
|
-
|
|
70
|
-
return await resolveRootPathInternal(params, undefined, undefined, undefined, receipts);
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
throw sanitizeRootPathError(error);
|
|
74
|
-
}
|
|
39
|
+
return resolveRootPathInternal(params, { removalReceipts: receipts });
|
|
75
40
|
}
|
|
76
41
|
export function resolveRootPathSync(params) {
|
|
77
|
-
|
|
78
|
-
return resolveRootPathSyncInternal(params);
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
throw sanitizeRootPathError(error);
|
|
82
|
-
}
|
|
42
|
+
return resolveRootPathInternal(params, { mode: "ordinary" });
|
|
83
43
|
}
|
|
84
44
|
export function resolveRootPathSyncWithCanonicalRootObservation(params, observeRoot) {
|
|
45
|
+
return resolveRootPathInternal(params, { mode: "ordinary", observeRoot });
|
|
46
|
+
}
|
|
47
|
+
function resolveRootPathInternal(params, options = {}) {
|
|
85
48
|
try {
|
|
86
|
-
return
|
|
49
|
+
return traverseRootPath(params, options);
|
|
87
50
|
}
|
|
88
51
|
catch (error) {
|
|
89
52
|
throw sanitizeRootPathError(error);
|
|
90
53
|
}
|
|
91
54
|
}
|
|
92
|
-
function resolveRootPathSyncInternal(params, observeRoot) {
|
|
93
|
-
const input = captureValidRootPathInputs(params);
|
|
94
|
-
const rawAbsolutePath = absolutePathWithRawSegments(input.absolutePath);
|
|
95
|
-
const rootPath = resolvePathPreservingWindowsRoot(input.rootPath);
|
|
96
|
-
const absolutePath = resolvePathPreservingWindowsRoot(rawAbsolutePath);
|
|
97
|
-
const rootCanonicalPath = input.rootCanonicalPath
|
|
98
|
-
? resolvePathPreservingWindowsRoot(input.rootCanonicalPath)
|
|
99
|
-
: resolvePathViaExistingAncestorSync(rootPath);
|
|
100
|
-
assertNoWindowsPathAlias(rootPath);
|
|
101
|
-
assertNoWindowsPathAlias(absolutePath);
|
|
102
|
-
assertNoWindowsPathAlias(rootCanonicalPath);
|
|
103
|
-
observeRoot?.(rootCanonicalPath);
|
|
104
|
-
return resolveRootPathLexicalSync(prepareRootTraversal(input, rootPath, rootCanonicalPath, absolutePath, rawAbsolutePath));
|
|
105
|
-
}
|
|
106
55
|
function prepareRootTraversal(params, rootPath, rootCanonicalPath, absolutePath, rawAbsolutePath) {
|
|
107
56
|
let raw = rawAbsolutePath;
|
|
108
57
|
let trustedAbsolutePath = false;
|
|
@@ -173,27 +122,23 @@ function assertNoEmbeddedDriveRelativeSegment(filePath, label) {
|
|
|
173
122
|
const root = path.parse(filePath).root;
|
|
174
123
|
assertNoDriveRelativePathSegments(filePath.slice(root.length).replaceAll("\\", "/"), label);
|
|
175
124
|
}
|
|
176
|
-
function
|
|
177
|
-
const
|
|
178
|
-
const relative = admitRawPathInsideRoot(params.rootPath, rawAbsolutePath, params.params.rootIdentity)?.relativePath;
|
|
125
|
+
function createLexicalTraversalContext(params) {
|
|
126
|
+
const relative = admitRawPathInsideRoot(params.rootPath, params.rawAbsolutePath, params.params.rootIdentity)?.relativePath;
|
|
179
127
|
if (relative === undefined)
|
|
180
128
|
throw new Error("Path traversal must begin at the root");
|
|
181
129
|
const segments = splitTraversalSegments(relative);
|
|
182
130
|
return {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
194
|
-
function createLexicalTraversalContext(params) {
|
|
195
|
-
return {
|
|
196
|
-
state: createLexicalTraversalState(params),
|
|
131
|
+
state: {
|
|
132
|
+
segments,
|
|
133
|
+
relativePath: relative,
|
|
134
|
+
reuseLexicalCanonical: false,
|
|
135
|
+
finalComponentIndex: segments.findLastIndex((segment) => segment !== "."),
|
|
136
|
+
allowFinalSymlink: params.params.policy?.allowFinalSymlinkForUnlink === true,
|
|
137
|
+
canonicalCursor: params.rootCanonicalPath,
|
|
138
|
+
lexicalCursor: params.rootPath,
|
|
139
|
+
preserveFinalSymlink: false,
|
|
140
|
+
missingDepth: 0,
|
|
141
|
+
},
|
|
197
142
|
resolveParams: params.params,
|
|
198
143
|
rootPath: params.rootPath,
|
|
199
144
|
rootCanonicalPath: params.rootCanonicalPath,
|
|
@@ -263,29 +208,15 @@ function disableLexicalTraversalObservation(context, observation) {
|
|
|
263
208
|
}
|
|
264
209
|
function finalizeLexicalResolution(context, kind) {
|
|
265
210
|
context.state.canonicalCursor = assertLexicalCursorInsideBoundary(context, context.state.canonicalCursor);
|
|
266
|
-
return
|
|
211
|
+
return {
|
|
267
212
|
absolutePath: context.absolutePath,
|
|
268
213
|
canonicalPath: context.state.canonicalCursor,
|
|
269
214
|
rootPath: context.rootPath,
|
|
270
215
|
rootCanonicalPath: context.rootCanonicalPath,
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
if (!isNotFoundPathError(error)) {
|
|
276
|
-
return false;
|
|
277
|
-
}
|
|
278
|
-
advanceCanonicalCursorForSegment(context, segment);
|
|
279
|
-
context.state.missingDepth = 1;
|
|
280
|
-
return true;
|
|
281
|
-
}
|
|
282
|
-
function lexicalStatDisposition(params) {
|
|
283
|
-
if (!params.isSymbolicLink)
|
|
284
|
-
return "continue";
|
|
285
|
-
if (params.rejectFinalSymlink || (params.rejectSymlinks === true && params.isLast)) {
|
|
286
|
-
throw new FsSafeError("symlink", "symlink path component not allowed");
|
|
287
|
-
}
|
|
288
|
-
return params.allowFinalSymlink && params.isLast ? "break" : "resolve-link";
|
|
216
|
+
relativePath: relativeInsideRoot(context.rootCanonicalPath, context.state.canonicalCursor),
|
|
217
|
+
exists: kind.exists,
|
|
218
|
+
kind: kind.kind,
|
|
219
|
+
};
|
|
289
220
|
}
|
|
290
221
|
function applyResolvedSymlinkHop(context, linkCanonical) {
|
|
291
222
|
let admitted;
|
|
@@ -319,10 +250,23 @@ function assertResolvedLinkDirectory(pathname, isLast) {
|
|
|
319
250
|
const stat = fs.statSync(pathForWindowsFilesystem(pathname));
|
|
320
251
|
assertDirectoryBeforeMoreSegments(stat, pathname, isLast);
|
|
321
252
|
}
|
|
322
|
-
|
|
323
|
-
|
|
253
|
+
// Both public APIs use synchronous metadata; only canonicalization and ancestor
|
|
254
|
+
// existence differ. Promise wrappers preserve the asynchronous rejection API.
|
|
255
|
+
function traverseRootPath(params, { mode = "native", observation: observationOutput, observeRoot, removalReceipts }) {
|
|
256
|
+
const input = captureValidRootPathInputs(params);
|
|
257
|
+
const rawAbsolutePath = absolutePathWithRawSegments(input.absolutePath);
|
|
258
|
+
const rootPath = resolvePathPreservingWindowsRoot(input.rootPath);
|
|
259
|
+
const absolutePath = resolvePathPreservingWindowsRoot(rawAbsolutePath);
|
|
260
|
+
const rootCanonicalPath = input.rootCanonicalPath
|
|
261
|
+
? resolvePathPreservingWindowsRoot(input.rootCanonicalPath)
|
|
262
|
+
: resolveExistingAncestor(rootPath, mode);
|
|
263
|
+
assertNoWindowsPathAlias(rootPath);
|
|
264
|
+
assertNoWindowsPathAlias(absolutePath);
|
|
265
|
+
assertNoWindowsPathAlias(rootCanonicalPath);
|
|
266
|
+
observeRoot?.(rootCanonicalPath);
|
|
267
|
+
const context = createLexicalTraversalContext(prepareRootTraversal(input, rootPath, rootCanonicalPath, absolutePath, rawAbsolutePath));
|
|
324
268
|
const { state } = context;
|
|
325
|
-
const observation = createLexicalTraversalObservation(context,
|
|
269
|
+
const observation = createLexicalTraversalObservation(context, observationOutput?.request);
|
|
326
270
|
for (let idx = 0; idx < state.segments.length; idx += 1) {
|
|
327
271
|
const segment = state.segments[idx] ?? "";
|
|
328
272
|
const isLast = idx === state.segments.length - 1;
|
|
@@ -374,9 +318,11 @@ async function resolveRootPathLexicalAsync(params, observationRequest, observati
|
|
|
374
318
|
// Preserve observation-only versus ordinary traversal error precedence.
|
|
375
319
|
throw new RootPathObservationError(error instanceof RootPathObservationError ? error.error : sanitizeRootPathError(error), parentReceipt, !(error instanceof RootPathObservationError));
|
|
376
320
|
}
|
|
377
|
-
if (
|
|
378
|
-
|
|
379
|
-
|
|
321
|
+
if (!isNotFoundPathError(error))
|
|
322
|
+
throw error;
|
|
323
|
+
advanceCanonicalCursorForSegment(context, segment);
|
|
324
|
+
state.missingDepth = 1;
|
|
325
|
+
continue;
|
|
380
326
|
}
|
|
381
327
|
if (isNativeDirectoryObservationGuard(observed)) {
|
|
382
328
|
advanceCanonicalCursorForSegment(context, segment);
|
|
@@ -392,15 +338,13 @@ async function resolveRootPathLexicalAsync(params, observationRequest, observati
|
|
|
392
338
|
const isSymbolicLink = stat.isSymbolicLink();
|
|
393
339
|
if (!isSymbolicLink)
|
|
394
340
|
assertDirectoryBeforeMoreSegments(stat, state.lexicalCursor, isLast);
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
if (disposition !== "resolve-link") {
|
|
403
|
-
state.preserveFinalSymlink = disposition === "break";
|
|
341
|
+
if (isSymbolicLink && ((context.resolveParams.rejectFinalSymlink === true && idx === state.finalComponentIndex) ||
|
|
342
|
+
(context.resolveParams.rejectSymlinks === true && isLast))) {
|
|
343
|
+
throw new FsSafeError("symlink", "symlink path component not allowed");
|
|
344
|
+
}
|
|
345
|
+
const preserveFinalSymlink = isSymbolicLink && state.allowFinalSymlink && isLast;
|
|
346
|
+
if (!isSymbolicLink || preserveFinalSymlink) {
|
|
347
|
+
state.preserveFinalSymlink = preserveFinalSymlink;
|
|
404
348
|
advanceCanonicalCursorForSegment(context, segment);
|
|
405
349
|
if (observation?.enabled && isSymbolicLink) {
|
|
406
350
|
disableLexicalTraversalObservation(context, observation);
|
|
@@ -420,9 +364,7 @@ async function resolveRootPathLexicalAsync(params, observationRequest, observati
|
|
|
420
364
|
}
|
|
421
365
|
if (observation?.enabled)
|
|
422
366
|
disableLexicalTraversalObservation(context, observation);
|
|
423
|
-
const linkCanonical =
|
|
424
|
-
rejectUnresolved: context.resolveParams.rejectUnresolvedSymlinks,
|
|
425
|
-
});
|
|
367
|
+
const linkCanonical = resolveSymlinkHopPath(state.lexicalCursor, mode, context.resolveParams.rejectUnresolvedSymlinks);
|
|
426
368
|
applyResolvedSymlinkHop(context, linkCanonical);
|
|
427
369
|
if (context.resolveParams.rejectSymlinks === true) {
|
|
428
370
|
throw new FsSafeError("symlink", "symlink path component not allowed");
|
|
@@ -438,7 +380,7 @@ async function resolveRootPathLexicalAsync(params, observationRequest, observati
|
|
|
438
380
|
? "directory"
|
|
439
381
|
: toResolvedKind(observation.target.stat),
|
|
440
382
|
}
|
|
441
|
-
:
|
|
383
|
+
: getPathKindSync(state.canonicalCursor, state.preserveFinalSymlink);
|
|
442
384
|
if (completeObservation && observationOutput) {
|
|
443
385
|
observationOutput.receipt = {
|
|
444
386
|
kind: observation.request.kind,
|
|
@@ -451,76 +393,6 @@ async function resolveRootPathLexicalAsync(params, observationRequest, observati
|
|
|
451
393
|
}
|
|
452
394
|
return finalizeLexicalResolution(context, kind);
|
|
453
395
|
}
|
|
454
|
-
function resolveRootPathLexicalSync(params) {
|
|
455
|
-
const context = createLexicalTraversalContext(params);
|
|
456
|
-
const { state } = context;
|
|
457
|
-
for (let idx = 0; idx < state.segments.length; idx += 1) {
|
|
458
|
-
const segment = state.segments[idx] ?? "";
|
|
459
|
-
const isLast = idx === state.segments.length - 1;
|
|
460
|
-
if (segment === ".")
|
|
461
|
-
continue;
|
|
462
|
-
if (segment === "..") {
|
|
463
|
-
applyParentTraversalStep(context);
|
|
464
|
-
continue;
|
|
465
|
-
}
|
|
466
|
-
state.lexicalCursor = path.join(state.lexicalCursor, segment);
|
|
467
|
-
if (state.missingDepth > 0) {
|
|
468
|
-
advanceCanonicalCursorForSegment(context, segment);
|
|
469
|
-
state.missingDepth += 1;
|
|
470
|
-
continue;
|
|
471
|
-
}
|
|
472
|
-
let stat;
|
|
473
|
-
try {
|
|
474
|
-
stat = fs.lstatSync(state.lexicalCursor);
|
|
475
|
-
}
|
|
476
|
-
catch (error) {
|
|
477
|
-
if (handleLexicalLstatFailure(context, error, segment))
|
|
478
|
-
continue;
|
|
479
|
-
throw error;
|
|
480
|
-
}
|
|
481
|
-
const isSymbolicLink = stat.isSymbolicLink();
|
|
482
|
-
if (!isSymbolicLink)
|
|
483
|
-
assertDirectoryBeforeMoreSegments(stat, state.lexicalCursor, isLast);
|
|
484
|
-
const disposition = lexicalStatDisposition({
|
|
485
|
-
isSymbolicLink,
|
|
486
|
-
isLast,
|
|
487
|
-
rejectSymlinks: isSymbolicLink ? context.resolveParams.rejectSymlinks : undefined,
|
|
488
|
-
rejectFinalSymlink: context.resolveParams.rejectFinalSymlink === true && idx === state.finalComponentIndex,
|
|
489
|
-
allowFinalSymlink: state.allowFinalSymlink,
|
|
490
|
-
});
|
|
491
|
-
if (disposition !== "resolve-link") {
|
|
492
|
-
state.preserveFinalSymlink = disposition === "break";
|
|
493
|
-
advanceCanonicalCursorForSegment(context, segment);
|
|
494
|
-
if (state.preserveFinalSymlink)
|
|
495
|
-
break;
|
|
496
|
-
continue;
|
|
497
|
-
}
|
|
498
|
-
const linkCanonical = resolveSymlinkHopPathSync(state.lexicalCursor, {
|
|
499
|
-
rejectUnresolved: context.resolveParams.rejectUnresolvedSymlinks,
|
|
500
|
-
});
|
|
501
|
-
applyResolvedSymlinkHop(context, linkCanonical);
|
|
502
|
-
if (context.resolveParams.rejectSymlinks === true) {
|
|
503
|
-
throw new FsSafeError("symlink", "symlink path component not allowed");
|
|
504
|
-
}
|
|
505
|
-
assertResolvedLinkDirectory(linkCanonical, isLast);
|
|
506
|
-
}
|
|
507
|
-
const kind = getPathKindSync(state.canonicalCursor, state.preserveFinalSymlink);
|
|
508
|
-
return finalizeLexicalResolution(context, kind);
|
|
509
|
-
}
|
|
510
|
-
function buildResolvedRootPath(params) {
|
|
511
|
-
return {
|
|
512
|
-
absolutePath: params.absolutePath,
|
|
513
|
-
canonicalPath: params.canonicalPath,
|
|
514
|
-
rootPath: params.rootPath,
|
|
515
|
-
rootCanonicalPath: params.rootCanonicalPath,
|
|
516
|
-
relativePath: relativeInsideRoot(params.rootCanonicalPath, params.canonicalPath),
|
|
517
|
-
exists: params.kind.exists,
|
|
518
|
-
kind: params.kind.kind,
|
|
519
|
-
};
|
|
520
|
-
}
|
|
521
|
-
async function getPathKind(absolutePath, preserveFinalSymlink) {
|
|
522
|
-
return getPathKindSync(absolutePath, preserveFinalSymlink);
|
|
523
|
-
}
|
|
524
396
|
function getPathKindSync(absolutePath, preserveFinalSymlink) {
|
|
525
397
|
try {
|
|
526
398
|
const operationPath = pathForWindowsFilesystem(absolutePath);
|
package/dist/root-paths.d.ts
CHANGED
|
@@ -60,4 +60,3 @@ export declare function resolvePathsWithinRoot(params: ResolvePathsWithinRootPar
|
|
|
60
60
|
export declare function resolveExistingPathsWithinRoot(params: ResolvePathsWithinRootParams): Promise<ResolvePathsWithinRootResult>;
|
|
61
61
|
export declare function resolveStrictExistingPathsWithinRoot(params: ResolvePathsWithinRootParams): Promise<ResolvePathsWithinRootResult>;
|
|
62
62
|
export declare function pathScope(rootDir: string, options: PathScopeOptions): PathScope;
|
|
63
|
-
//# sourceMappingURL=root-paths.d.ts.map
|
|
@@ -31,40 +31,6 @@ export function inspectOpenedPathIdentitySync(filePath, symlinks) {
|
|
|
31
31
|
}
|
|
32
32
|
return stat;
|
|
33
33
|
}
|
|
34
|
-
function assertRootReadAdmissionCurrent(params) {
|
|
35
|
-
assertRootIdentityCurrentSync(params.root);
|
|
36
|
-
const admittedPath = (() => {
|
|
37
|
-
try {
|
|
38
|
-
const current = inspectFileIdentitySync(() => inspectOpenedPathIdentitySync(params.filePath, params.symlinks), params.identity);
|
|
39
|
-
if (params.hardlinks !== "allow" && current.nlink > 1n)
|
|
40
|
-
throw hardlinkedPathNotAllowedError();
|
|
41
|
-
const canonicalPath = resolveFinalOpenedRealPath(params.filePath);
|
|
42
|
-
assertNoWindowsPathAlias(canonicalPath, "filesystem", "resolved file path uses a Windows filesystem namespace alias");
|
|
43
|
-
const admittedRealPath = admitPathInsideRoot({
|
|
44
|
-
rootPath: params.root.rootReal,
|
|
45
|
-
candidatePath: canonicalPath,
|
|
46
|
-
rootIdentity: params.root.rootIdentity,
|
|
47
|
-
});
|
|
48
|
-
if (!admittedRealPath) {
|
|
49
|
-
throw openedPathResolutionError(outsideWorkspaceError());
|
|
50
|
-
}
|
|
51
|
-
// This is a fresh no-follow observation even when canonicalPath and
|
|
52
|
-
// filePath have the same spelling; realpath may have raced a replacement.
|
|
53
|
-
const canonical = inspectFileIdentitySync(() => inspectOpenedPathIdentitySync(canonicalPath, undefined), params.identity);
|
|
54
|
-
if (params.hardlinks !== "allow" && canonical.nlink > 1n)
|
|
55
|
-
throw hardlinkedPathNotAllowedError();
|
|
56
|
-
return admittedRealPath.path;
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
throw isNotFoundPathError(error)
|
|
60
|
-
? openedPathResolutionError(fileNotFoundError())
|
|
61
|
-
: error;
|
|
62
|
-
}
|
|
63
|
-
})();
|
|
64
|
-
params.afterPathIdentityCheck?.(params.filePath, params.handle);
|
|
65
|
-
assertRootIdentityCurrentSync(params.root);
|
|
66
|
-
return admittedPath;
|
|
67
|
-
}
|
|
68
34
|
export async function admitRootReadHandle(params) {
|
|
69
35
|
try {
|
|
70
36
|
if (params.hardlinks !== "allow" && params.opened.stat.nlink > 1) {
|
|
@@ -74,16 +40,37 @@ export async function admitRootReadHandle(params) {
|
|
|
74
40
|
await params.beforeFinalFence(params.filePath, params.opened.handle);
|
|
75
41
|
}
|
|
76
42
|
try {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
43
|
+
assertRootIdentityCurrentSync(params.root);
|
|
44
|
+
let realPath;
|
|
45
|
+
try {
|
|
46
|
+
const current = inspectFileIdentitySync(() => inspectOpenedPathIdentitySync(params.filePath, params.symlinks), params.identity);
|
|
47
|
+
if (params.hardlinks !== "allow" && current.nlink > 1n)
|
|
48
|
+
throw hardlinkedPathNotAllowedError();
|
|
49
|
+
const canonicalPath = resolveFinalOpenedRealPath(params.filePath);
|
|
50
|
+
assertNoWindowsPathAlias(canonicalPath, "filesystem", "resolved file path uses a Windows filesystem namespace alias");
|
|
51
|
+
const admittedRealPath = admitPathInsideRoot({
|
|
52
|
+
rootPath: params.root.rootReal,
|
|
53
|
+
candidatePath: canonicalPath,
|
|
54
|
+
rootIdentity: params.root.rootIdentity,
|
|
55
|
+
});
|
|
56
|
+
if (!admittedRealPath) {
|
|
57
|
+
throw openedPathResolutionError(outsideWorkspaceError());
|
|
58
|
+
}
|
|
59
|
+
// This is a fresh no-follow observation even when canonicalPath and
|
|
60
|
+
// filePath have the same spelling; realpath may have raced a replacement.
|
|
61
|
+
const canonical = inspectFileIdentitySync(() => inspectOpenedPathIdentitySync(canonicalPath, undefined), params.identity);
|
|
62
|
+
if (params.hardlinks !== "allow" && canonical.nlink > 1n)
|
|
63
|
+
throw hardlinkedPathNotAllowedError();
|
|
64
|
+
realPath = admittedRealPath.path;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
throw isNotFoundPathError(error)
|
|
68
|
+
? openedPathResolutionError(fileNotFoundError())
|
|
69
|
+
: error;
|
|
70
|
+
}
|
|
71
|
+
params.afterPathIdentityCheck?.(params.filePath, params.opened.handle);
|
|
72
|
+
assertRootIdentityCurrentSync(params.root);
|
|
73
|
+
return { ...params.opened, realPath };
|
|
87
74
|
}
|
|
88
75
|
catch (error) {
|
|
89
76
|
if (params.identity.nlink <= 1n) {
|
|
@@ -12,4 +12,3 @@ export type RemovalDirectoryAssertion = Readonly<{
|
|
|
12
12
|
export declare function createRemovalDirectoryAssertion(path: string, identity: ExactDirectoryIdentity, realPath?: string, platform?: NodeJS.Platform): RemovalDirectoryAssertion;
|
|
13
13
|
export declare function assertRemovalDirectoryCurrent(assertion: RemovalDirectoryAssertion): void;
|
|
14
14
|
export {};
|
|
15
|
-
//# sourceMappingURL=root-remove-identity.d.ts.map
|
package/dist/root-remove.d.ts
CHANGED
|
@@ -4,4 +4,3 @@ import type { RemovalPathReceipts } from "./root-remove-receipt.js";
|
|
|
4
4
|
export declare const nonrecursiveRemovalKind: unique symbol;
|
|
5
5
|
export declare function validateRemoveOptions(options: RootRemoveOptions): void;
|
|
6
6
|
export declare function removePathInRootFallback(root: RootContext, targetPath: string, options: RootRemoveOptions, receipts?: RemovalPathReceipts): Promise<void>;
|
|
7
|
-
//# sourceMappingURL=root-remove.d.ts.map
|
|
@@ -11,4 +11,3 @@ export declare function mutationSymlinkResolution(symlinks: MutationSymlinkPolic
|
|
|
11
11
|
resolveCanonical: boolean;
|
|
12
12
|
};
|
|
13
13
|
export declare function assertFinalSymlinkRejected(targetPath: string, reject: boolean | undefined, details?: FsSafeErrorDetails): void;
|
|
14
|
-
//# sourceMappingURL=root-symlink-policy.d.ts.map
|
package/dist/root-walk.d.ts
CHANGED
|
@@ -63,4 +63,3 @@ export declare function resolveGuardedWritePathInRoot(root: RootContext, params:
|
|
|
63
63
|
export declare function resolveGuardedWriteTargetInRoot(root: RootContext, params: GuardedWritePathOptions): Promise<GuardedRootWriteTarget>;
|
|
64
64
|
export declare function resolvePinnedWriteTargetInRoot(root: RootContext, relativePath: string, requestedMode?: number, denyMutations?: DenyMutationPolicy, overwrite?: boolean, mutationSymlinks?: MutationSymlinkPolicy): Promise<PinnedWriteTarget>;
|
|
65
65
|
export {};
|
|
66
|
-
//# sourceMappingURL=root-write-admission.d.ts.map
|
|
@@ -39,4 +39,3 @@ export type SharedRootWriteTarget = Readonly<{
|
|
|
39
39
|
export declare function assertPreparedRootWriteParentCurrent(prepared: PreparedRootWriteParent, verifyTarget?: boolean): void;
|
|
40
40
|
export declare function prepareSharedRootWriteTarget(root: RootContext, params: SharedRootWriteTargetParams): Promise<SharedRootWriteTarget>;
|
|
41
41
|
export {};
|
|
42
|
-
//# sourceMappingURL=root-write-complete-parent.d.ts.map
|
package/dist/root.d.ts
CHANGED
|
@@ -4,4 +4,3 @@ export type { CopyCloneMode } from "./copy-policy.js";
|
|
|
4
4
|
export type { RootEntriesOptions } from "./root-entries.js";
|
|
5
5
|
export type { ContainmentGuarantee } from "./containment.js";
|
|
6
6
|
export type { RootWalkDataEntry, RootWalkDataEntryKind, RootWalkDirectoryErrorBehavior, RootWalkEntry, RootWalkEntryFilter, RootWalkEntryFilterResult, RootWalkEntryKind, RootWalkLimitBehavior, RootWalkOptions, RootWalkSymlinkPolicy, } from "./root-walk.js";
|
|
7
|
-
//# sourceMappingURL=root.d.ts.map
|
|
@@ -7,6 +7,5 @@ export declare function assertNoDriveRelativePathSegments(value: string, label:
|
|
|
7
7
|
export declare function trimHyphenEdges(value: string): string;
|
|
8
8
|
export declare function isSafePathSegment(segment: string, options?: SafePathSegmentOptions): boolean;
|
|
9
9
|
export declare function assertSafePathSegment(segment: string, options?: SafePathSegmentOptions): string;
|
|
10
|
-
export declare function sanitizeSafePathSegment(value: string
|
|
10
|
+
export declare function sanitizeSafePathSegment(value: string): string | undefined;
|
|
11
11
|
export declare function assertSafePathPrefix(prefix: string, options?: SafePathSegmentOptions): string;
|
|
12
|
-
//# sourceMappingURL=safe-path-segment.d.ts.map
|
|
@@ -47,17 +47,14 @@ export function assertSafePathSegment(segment, options = {}) {
|
|
|
47
47
|
}
|
|
48
48
|
return segment;
|
|
49
49
|
}
|
|
50
|
-
export function sanitizeSafePathSegment(value
|
|
50
|
+
export function sanitizeSafePathSegment(value) {
|
|
51
51
|
const sanitized = value
|
|
52
52
|
.trim()
|
|
53
53
|
.replace(/[\\/]+/g, "-")
|
|
54
54
|
.replace(/\0/g, "")
|
|
55
55
|
.replace(/[^A-Za-z0-9._-]+/g, "-");
|
|
56
56
|
const trimmed = trimHyphenEdges(sanitized);
|
|
57
|
-
|
|
58
|
-
return trimmed;
|
|
59
|
-
}
|
|
60
|
-
return assertSafePathSegment(fallback, { ...options, label: "fallback path segment" });
|
|
57
|
+
return isSafePathSegment(trimmed, { allowDotPrefix: true }) ? trimmed : undefined;
|
|
61
58
|
}
|
|
62
59
|
export function assertSafePathPrefix(prefix, options = {}) {
|
|
63
60
|
// Prefixes are often derived from safe filenames. Normalize harmless
|
package/dist/secret-file.d.ts
CHANGED
|
@@ -23,4 +23,3 @@ export declare function prepareSecretFileWrite(params: Omit<SecretFileWriteParam
|
|
|
23
23
|
export declare function writeSecretFileAtomic(params: SecretFileWriteParams): Promise<void>;
|
|
24
24
|
export declare function createSecretFileAtomic(params: SecretFileWriteParams): Promise<void>;
|
|
25
25
|
export {};
|
|
26
|
-
//# sourceMappingURL=secret-file.d.ts.map
|
package/dist/secret-file.js
CHANGED
|
@@ -31,29 +31,19 @@ export function readSecretFileSync(filePath, label, options = {}) {
|
|
|
31
31
|
}
|
|
32
32
|
let raw;
|
|
33
33
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (!stat.isFile() || (rejectHardlinks && stat.nlink > 1n)) {
|
|
37
|
-
throw new FsSafeError("path-mismatch", "security validation failed");
|
|
38
|
-
}
|
|
39
|
-
return stat;
|
|
40
|
-
}, previewStat);
|
|
41
|
-
inspectFileIdentitySync(() => {
|
|
42
|
-
const stat = fs.lstatSync(opened.path, { bigint: true });
|
|
43
|
-
if (!stat.isFile() || (rejectHardlinks && stat.nlink > 1n)) {
|
|
44
|
-
throw new FsSafeError("path-mismatch", "security validation failed");
|
|
45
|
-
}
|
|
46
|
-
return stat;
|
|
47
|
-
}, openedIdentity);
|
|
34
|
+
// The pin already compared the descriptor and resolved name without yielding.
|
|
35
|
+
const openedIdentity = inspectFileIdentitySync(() => opened.identity, previewStat);
|
|
48
36
|
inspectFileIdentitySync(() => inspectInput("secret path became a symlink"), openedIdentity);
|
|
49
37
|
raw = readFileDescriptorBoundedSync(opened.fd, maxBytes).toString("utf8");
|
|
50
38
|
}
|
|
51
39
|
catch (error) {
|
|
40
|
+
try {
|
|
41
|
+
fs.closeSync(opened.fd);
|
|
42
|
+
}
|
|
43
|
+
catch { /* Preserve the read failure. */ }
|
|
52
44
|
throw secretReadError(error instanceof FsSafeError ? error.code : "read-failed", "read", label, resolvedPath, error);
|
|
53
45
|
}
|
|
54
|
-
|
|
55
|
-
fs.closeSync(opened.fd);
|
|
56
|
-
}
|
|
46
|
+
fs.closeSync(opened.fd);
|
|
57
47
|
return trimSecretFileContent(raw, label, resolvedPath);
|
|
58
48
|
}
|
|
59
49
|
export function tryReadSecretFileSync(filePath, label, options = {}) {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { type SecretFileReadOptions } from "./secret-read-policy.js";
|
|
2
2
|
export declare function readSecretFile(filePath: string, label: string, options?: SecretFileReadOptions): Promise<string>;
|
|
3
3
|
export declare function tryReadSecretFile(filePath: string | undefined, label: string, options?: SecretFileReadOptions): Promise<string | undefined>;
|
|
4
|
-
//# sourceMappingURL=secret-read-async.d.ts.map
|