@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
|
@@ -6,4 +6,3 @@ export type PinnedObservedPath = {
|
|
|
6
6
|
receipt?: RootPathObservationReceipt;
|
|
7
7
|
};
|
|
8
8
|
export declare function resolvePinnedObservedPathInRoot(root: RootContext, relativePath: string, kind: RootPathObservationKind): Promise<PinnedObservedPath | undefined>;
|
|
9
|
-
//# sourceMappingURL=root-observed-path.d.ts.map
|
package/dist/root-options.d.ts
CHANGED
|
@@ -82,4 +82,3 @@ export type RootMkdirOptions = Pick<RootDefaults, "assertBeforeMutation" | "deny
|
|
|
82
82
|
export type RootReadParams = Omit<RootReadOptions, "nonBlockingRead">;
|
|
83
83
|
export declare function readDefaults(defaults: RootDefaults): RootReadParams;
|
|
84
84
|
export declare function mergeReadOptions(defaults: RootDefaults, options: RootReadOptions): RootReadParams;
|
|
85
|
-
//# sourceMappingURL=root-options.d.ts.map
|
|
@@ -7,4 +7,6 @@ export declare function rawPathRelativeToCanonicalRoot(candidate: string, rootCa
|
|
|
7
7
|
}): string | undefined;
|
|
8
8
|
export declare function resolvePathViaExistingAncestor(targetPath: string): Promise<string>;
|
|
9
9
|
export declare function resolvePathViaExistingAncestorSync(targetPath: string): string;
|
|
10
|
-
|
|
10
|
+
export type RootPathMetadataMode = "native" | "ordinary";
|
|
11
|
+
export declare function resolveExistingAncestor(targetPath: string, mode: RootPathMetadataMode): string;
|
|
12
|
+
export declare function resolveSymlinkHopPath(symlinkPath: string, mode: RootPathMetadataMode, rejectUnresolved?: boolean): string;
|
|
@@ -2,9 +2,9 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { FsSafeError } from "./errors.js";
|
|
4
4
|
import { formatErrorDetail } from "./error-detail.js";
|
|
5
|
-
import { isNotFoundPathError, isPathInside } from "./path.js";
|
|
5
|
+
import { isNotFoundPathError, isPathInside, isSymlinkOpenError } from "./path.js";
|
|
6
6
|
import { realpathSync } from "./realpath.js";
|
|
7
|
-
import { assertNoWindowsPathAlias, pathForWindowsFilesystem, resolvePathPreservingWindowsRoot, } from "./windows-path-alias.js";
|
|
7
|
+
import { assertNoWindowsPathAlias, pathForWindowsFilesystem, resolvePathFromBasePreservingWindowsRoot, resolvePathPreservingWindowsRoot, } from "./windows-path-alias.js";
|
|
8
8
|
import { admitPathInsideRoot } from "./root-boundary.js";
|
|
9
9
|
export function absolutePathWithRawSegments(candidate) {
|
|
10
10
|
if (path.sep !== "\\") {
|
|
@@ -81,9 +81,6 @@ export function rawPathRelativeToCanonicalRoot(candidate, rootCanonicalPath, opt
|
|
|
81
81
|
}
|
|
82
82
|
return undefined;
|
|
83
83
|
}
|
|
84
|
-
function isFilesystemRoot(candidate) {
|
|
85
|
-
return path.parse(candidate).root === candidate;
|
|
86
|
-
}
|
|
87
84
|
function pathExists(targetPath) {
|
|
88
85
|
try {
|
|
89
86
|
return fs.lstatSync(pathForWindowsFilesystem(targetPath), { throwIfNoEntry: false }) !== undefined;
|
|
@@ -96,28 +93,25 @@ function pathExists(targetPath) {
|
|
|
96
93
|
}
|
|
97
94
|
}
|
|
98
95
|
export async function resolvePathViaExistingAncestor(targetPath) {
|
|
99
|
-
return resolveExistingAncestor(targetPath,
|
|
96
|
+
return resolveExistingAncestor(targetPath, "native");
|
|
100
97
|
}
|
|
101
98
|
function pathExistsSync(targetPath) {
|
|
102
99
|
return fs.existsSync(pathForWindowsFilesystem(targetPath));
|
|
103
100
|
}
|
|
104
101
|
export function resolvePathViaExistingAncestorSync(targetPath) {
|
|
105
|
-
return resolveExistingAncestor(targetPath,
|
|
102
|
+
return resolveExistingAncestor(targetPath, "ordinary");
|
|
106
103
|
}
|
|
107
|
-
function resolveExistingAncestor(targetPath,
|
|
104
|
+
export function resolveExistingAncestor(targetPath, mode) {
|
|
105
|
+
const exists = mode === "native" ? pathExists : pathExistsSync;
|
|
106
|
+
const canonicalize = mode === "native" ? realpathSync.native : realpathSync;
|
|
108
107
|
assertNoWindowsPathAlias(targetPath);
|
|
109
108
|
const normalized = resolvePathPreservingWindowsRoot(targetPath);
|
|
110
109
|
assertNoWindowsPathAlias(normalized);
|
|
111
110
|
let cursor = normalized;
|
|
112
|
-
const
|
|
113
|
-
while (
|
|
111
|
+
const filesystemRoot = path.parse(normalized).root;
|
|
112
|
+
while (cursor !== filesystemRoot &&
|
|
114
113
|
!exists(cursor)) {
|
|
115
|
-
|
|
116
|
-
const parent = path.dirname(cursor);
|
|
117
|
-
if (parent === cursor) {
|
|
118
|
-
break;
|
|
119
|
-
}
|
|
120
|
-
cursor = parent;
|
|
114
|
+
cursor = path.dirname(cursor);
|
|
121
115
|
}
|
|
122
116
|
if (!exists(cursor)) {
|
|
123
117
|
return normalized;
|
|
@@ -132,9 +126,36 @@ function resolveExistingAncestor(targetPath, exists, canonicalize) {
|
|
|
132
126
|
assertNoWindowsPathAlias(rawResolvedAncestor);
|
|
133
127
|
const resolvedAncestor = resolvePathPreservingWindowsRoot(rawResolvedAncestor);
|
|
134
128
|
assertNoWindowsPathAlias(resolvedAncestor);
|
|
135
|
-
|
|
129
|
+
// Keep a leading suffix separator relative to the canonical ancestor.
|
|
130
|
+
const resolved = cursor === normalized
|
|
136
131
|
? resolvedAncestor
|
|
137
|
-
: path.resolve(resolvedAncestor,
|
|
132
|
+
: path.resolve(resolvedAncestor, `.${path.sep}${normalized.slice(cursor.length)}`);
|
|
138
133
|
assertNoWindowsPathAlias(resolved);
|
|
139
134
|
return resolved;
|
|
140
135
|
}
|
|
136
|
+
export function resolveSymlinkHopPath(symlinkPath, mode, rejectUnresolved) {
|
|
137
|
+
try {
|
|
138
|
+
const canonicalize = mode === "native" ? realpathSync.native : realpathSync;
|
|
139
|
+
const rawRealPath = canonicalize(symlinkPath);
|
|
140
|
+
assertNoWindowsPathAlias(rawRealPath, "filesystem", "resolved symlink path uses a Windows filesystem namespace alias");
|
|
141
|
+
const realPath = resolvePathPreservingWindowsRoot(rawRealPath);
|
|
142
|
+
assertNoWindowsPathAlias(realPath, "filesystem", "resolved symlink path uses a Windows filesystem namespace alias");
|
|
143
|
+
return realPath;
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
if (isSymlinkOpenError(error) || (rejectUnresolved && isNotFoundPathError(error))) {
|
|
147
|
+
throw new FsSafeError("symlink", "symlink path could not be resolved", {
|
|
148
|
+
cause: error instanceof Error ? error : undefined,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
if (!isNotFoundPathError(error))
|
|
152
|
+
throw error;
|
|
153
|
+
const linkTarget = fs.readlinkSync(symlinkPath);
|
|
154
|
+
assertNoWindowsPathAlias(linkTarget, "filesystem", "symlink target uses a Windows filesystem namespace alias");
|
|
155
|
+
const linkDir = resolvePathPreservingWindowsRoot(path.dirname(symlinkPath));
|
|
156
|
+
const targetPath = resolvePathFromBasePreservingWindowsRoot(linkDir, linkTarget);
|
|
157
|
+
const resolved = resolveExistingAncestor(targetPath, mode);
|
|
158
|
+
assertNoWindowsPathAlias(resolved, "filesystem", "resolved symlink path uses a Windows filesystem namespace alias");
|
|
159
|
+
return resolved;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
@@ -60,4 +60,3 @@ export type RootPathTraversalContext = {
|
|
|
60
60
|
export declare function createRootPathTraversalObservation(context: RootPathTraversalContext, request?: RootPathObservationRequest): RootPathTraversalObservation | undefined;
|
|
61
61
|
export declare function inspectRootPathTraversalEntry(pathname: string, directorySlot: boolean, observation: RootPathTraversalObservation): RootPathObservedTraversalEntry;
|
|
62
62
|
export declare function captureRootPathObservedDirectory(observation: RootPathTraversalObservation, observed: RootPathObservedTraversalEntry, publicPath: string, canonicalPath: string, rootCanonicalPath: string, rootIdentity?: RootBoundaryIdentity): boolean;
|
|
63
|
-
//# sourceMappingURL=root-path-observation.d.ts.map
|
package/dist/root-path-stat.d.ts
CHANGED
|
@@ -2,4 +2,3 @@ import type { RootContext } from "./root-context.js";
|
|
|
2
2
|
import type { RootPathObservationReceipt } from "./root-path.js";
|
|
3
3
|
import type { PathStat } from "./types.js";
|
|
4
4
|
export declare function statResolvedPathInRoot(root: RootContext, resolvedPath: string, receipt?: RootPathObservationReceipt): Promise<PathStat>;
|
|
5
|
-
//# sourceMappingURL=root-path-stat.d.ts.map
|
package/dist/root-path.d.ts
CHANGED
|
@@ -51,4 +51,3 @@ export declare function resolveRootPathWithObservation(params: ResolveRootPathPa
|
|
|
51
51
|
export declare function resolveRootPathForRemoval(params: ResolveRootPathParams, receipts: RemovalPathReceipts): Promise<ResolvedRootPath>;
|
|
52
52
|
export declare function resolveRootPathSync(params: ResolveRootPathParams): ResolvedRootPath;
|
|
53
53
|
export declare function resolveRootPathSyncWithCanonicalRootObservation(params: ResolveRootPathParams, observeRoot: (rootCanonicalPath: string) => void): ResolvedRootPath;
|
|
54
|
-
//# sourceMappingURL=root-path.d.ts.map
|
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,36 +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
|
-
inspectFileIdentitySync(() => inspectOpenedPathIdentitySync(params.filePath, params.symlinks), params.identity);
|
|
39
|
-
const canonicalPath = resolveFinalOpenedRealPath(params.filePath);
|
|
40
|
-
assertNoWindowsPathAlias(canonicalPath, "filesystem", "resolved file path uses a Windows filesystem namespace alias");
|
|
41
|
-
const admittedRealPath = admitPathInsideRoot({
|
|
42
|
-
rootPath: params.root.rootReal,
|
|
43
|
-
candidatePath: canonicalPath,
|
|
44
|
-
rootIdentity: params.root.rootIdentity,
|
|
45
|
-
});
|
|
46
|
-
if (!admittedRealPath) {
|
|
47
|
-
throw openedPathResolutionError(outsideWorkspaceError());
|
|
48
|
-
}
|
|
49
|
-
// This is a fresh no-follow observation even when canonicalPath and
|
|
50
|
-
// filePath have the same spelling; realpath may have raced a replacement.
|
|
51
|
-
inspectFileIdentitySync(() => inspectOpenedPathIdentitySync(canonicalPath, undefined), params.identity);
|
|
52
|
-
return admittedRealPath.path;
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
throw isNotFoundPathError(error)
|
|
56
|
-
? openedPathResolutionError(fileNotFoundError())
|
|
57
|
-
: error;
|
|
58
|
-
}
|
|
59
|
-
})();
|
|
60
|
-
params.afterPathIdentityCheck?.(params.filePath, params.handle);
|
|
61
|
-
assertRootIdentityCurrentSync(params.root);
|
|
62
|
-
return admittedPath;
|
|
63
|
-
}
|
|
64
34
|
export async function admitRootReadHandle(params) {
|
|
65
35
|
try {
|
|
66
36
|
if (params.hardlinks !== "allow" && params.opened.stat.nlink > 1) {
|
|
@@ -70,15 +40,37 @@ export async function admitRootReadHandle(params) {
|
|
|
70
40
|
await params.beforeFinalFence(params.filePath, params.opened.handle);
|
|
71
41
|
}
|
|
72
42
|
try {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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 };
|
|
82
74
|
}
|
|
83
75
|
catch (error) {
|
|
84
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
|