@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
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { type BigIntStats
|
|
2
|
-
import type { ContainmentGuarantee } from "./containment.js";
|
|
1
|
+
import { type BigIntStats } from "node:fs";
|
|
3
2
|
export type NativeFileHandle = {
|
|
4
3
|
readonly fd: number;
|
|
5
|
-
readonly containment: ContainmentGuarantee;
|
|
6
4
|
close(): Promise<void>;
|
|
7
|
-
stat(): Promise<Stats>;
|
|
8
5
|
writeFile(data: string | Buffer, encoding?: BufferEncoding): Promise<void>;
|
|
9
6
|
};
|
|
10
7
|
export declare function nativeOpenFlags(flags: number): number;
|
|
@@ -16,4 +13,3 @@ export declare function removeNativeCreatedFileIfStillPinned(params: {
|
|
|
16
13
|
created?: BigIntStats;
|
|
17
14
|
}): void;
|
|
18
15
|
export declare function createNativeExclusiveFile(targetPath: string, mode: number): Promise<NativeFileHandle | undefined>;
|
|
19
|
-
//# sourceMappingURL=native-operations.d.ts.map
|
|
@@ -21,20 +21,16 @@ export function writeNativeFd(fd, data) {
|
|
|
21
21
|
offset += written;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
function wrapNativeFd(fd,
|
|
24
|
+
function wrapNativeFd(fd, closeFd) {
|
|
25
25
|
let open = true;
|
|
26
26
|
return {
|
|
27
27
|
fd,
|
|
28
|
-
containment,
|
|
29
28
|
async close() {
|
|
30
29
|
if (open) {
|
|
31
30
|
open = false;
|
|
32
31
|
closeFd(fd);
|
|
33
32
|
}
|
|
34
33
|
},
|
|
35
|
-
async stat() {
|
|
36
|
-
return fsSync.fstatSync(fd);
|
|
37
|
-
},
|
|
38
34
|
async writeFile(data, encoding) {
|
|
39
35
|
writeNativeFd(fd, Buffer.isBuffer(data) ? data : Buffer.from(data, encoding ?? "utf8"));
|
|
40
36
|
},
|
|
@@ -91,7 +87,7 @@ export async function createNativeExclusiveFile(targetPath, mode) {
|
|
|
91
87
|
fd = opened.fd;
|
|
92
88
|
fsSync.fchmodSync(fd, mode);
|
|
93
89
|
created = fsSync.fstatSync(fd, { bigint: true });
|
|
94
|
-
return wrapNativeFd(fd,
|
|
90
|
+
return wrapNativeFd(fd, closeFd);
|
|
95
91
|
}
|
|
96
92
|
catch (error) {
|
|
97
93
|
if (fd !== undefined) {
|
|
@@ -32,4 +32,3 @@ export declare function openNativeParentAdmission(binding: NativeBinding, rootAd
|
|
|
32
32
|
root: Pick<FileHandle, "fd">;
|
|
33
33
|
}, relativeParentPath: string, observation?: "native-directory"): Promise<NativeParentAdmission>;
|
|
34
34
|
export {};
|
|
35
|
-
//# sourceMappingURL=native-parent-admission.d.ts.map
|
|
@@ -4,4 +4,3 @@ import type { FileIdentityStat } from "./file-identity.js";
|
|
|
4
4
|
import type { NativeBinding } from "./native.js";
|
|
5
5
|
import type { PinnedWriteParams } from "./pinned-write.js";
|
|
6
6
|
export declare function runPinnedWriteWindows(binding: NativeBinding, params: PinnedWriteParams, root: FileHandle, parentFd: number, parentGuard: AnyAsyncDirectoryGuard): Promise<FileIdentityStat>;
|
|
7
|
-
//# sourceMappingURL=native-pinned-write-windows.d.ts.map
|
|
@@ -2,4 +2,3 @@ import type { FileIdentityStat } from "./file-identity.js";
|
|
|
2
2
|
import type { NativeBinding } from "./native.js";
|
|
3
3
|
import type { PinnedWriteParams } from "./pinned-write.js";
|
|
4
4
|
export declare function runPinnedWriteNative(binding: NativeBinding, params: PinnedWriteParams): Promise<FileIdentityStat>;
|
|
5
|
-
//# sourceMappingURL=native-pinned-write.d.ts.map
|
|
@@ -66,12 +66,6 @@ import { realpathSync } from "./realpath.js";
|
|
|
66
66
|
import { isNotFoundPathError, isSymlinkOpenError } from "./path.js";
|
|
67
67
|
import { checkedMutationDirectory, } from "./pinned-mutation-observation.js";
|
|
68
68
|
import { createPathSegmentRoute, joinPathSegmentRoute } from "./path-segment-route.js";
|
|
69
|
-
function relativeParentSegments(relativeParentPath) {
|
|
70
|
-
return relativeParentPath.split("/").filter(Boolean);
|
|
71
|
-
}
|
|
72
|
-
function prospectiveTargetPath(parentPath, parentRoute, offset, basename) {
|
|
73
|
-
return joinPathSegmentRoute(parentPath, parentRoute, offset, basename);
|
|
74
|
-
}
|
|
75
69
|
function sameAbsolutePath(left, right) {
|
|
76
70
|
return path.relative(path.resolve(left), path.resolve(right)) === "";
|
|
77
71
|
}
|
|
@@ -172,12 +166,12 @@ async function capturePolicyAwarePosixParent(binding, params, rootFd, directoryF
|
|
|
172
166
|
observationDisposers.set(fd, dispose);
|
|
173
167
|
return captured;
|
|
174
168
|
};
|
|
175
|
-
const segments =
|
|
169
|
+
const segments = params.relativeParentPath.split("/").filter(Boolean);
|
|
176
170
|
const parentSpelling = segments.length
|
|
177
171
|
? path.join(params.rootPath, ...segments)
|
|
178
172
|
: params.rootPath;
|
|
179
173
|
const segmentRoute = createPathSegmentRoute(segments);
|
|
180
|
-
const initialTarget =
|
|
174
|
+
const initialTarget = joinPathSegmentRoute(params.rootPath, segmentRoute, 0, params.basename);
|
|
181
175
|
let retainedTargetPath = params.mutationAdmission?.beginParentWalk?.();
|
|
182
176
|
if (retainedTargetPath && !sameAbsolutePath(retainedTargetPath, initialTarget)) {
|
|
183
177
|
retainedTargetPath = undefined;
|
|
@@ -255,7 +249,7 @@ async function capturePolicyAwarePosixParent(binding, params, rootFd, directoryF
|
|
|
255
249
|
if (!isNotFoundPathError(openError)) {
|
|
256
250
|
throw normalizePolicyParentOpenError(openError, params);
|
|
257
251
|
}
|
|
258
|
-
const targetPath = retainedTargetPath ??
|
|
252
|
+
const targetPath = retainedTargetPath ?? joinPathSegmentRoute(currentPath, segmentRoute, index, params.basename);
|
|
259
253
|
const request = Object.freeze({
|
|
260
254
|
targetPath,
|
|
261
255
|
mutationPath: childPath,
|
|
@@ -311,7 +305,7 @@ async function capturePolicyAwarePosixParent(binding, params, rootFd, directoryF
|
|
|
311
305
|
childAuthorization = params.mutationAdmission.advanceCreatedDirectory(evidence);
|
|
312
306
|
}
|
|
313
307
|
}
|
|
314
|
-
const targetPath = retainedTargetPath ??
|
|
308
|
+
const targetPath = retainedTargetPath ?? joinPathSegmentRoute(child.parentPath, segmentRoute, index + 1, params.basename);
|
|
315
309
|
const request = Object.freeze({
|
|
316
310
|
targetPath,
|
|
317
311
|
mutationPath: targetPath,
|
|
@@ -9,4 +9,3 @@ export type NativePolicyDirectoryObserver = MutationDirectoryObserver & {
|
|
|
9
9
|
};
|
|
10
10
|
/** Fresh name/metadata/canonical facts from a caller-owned POSIX descriptor. */
|
|
11
11
|
export declare function nativePolicyDirectoryObserver(binding: NativeBinding | undefined, fd: number, pathname: string): NativePolicyDirectoryObserver | undefined;
|
|
12
|
-
//# sourceMappingURL=native-policy-directory-observation.d.ts.map
|
|
@@ -11,4 +11,3 @@ type PolicyParent = {
|
|
|
11
11
|
};
|
|
12
12
|
export declare function capturePolicyAwareWindowsParent(binding: NativeBinding, params: PinnedWriteParams, rootAdmission: NativeRootAdmission): Promise<PolicyParent>;
|
|
13
13
|
export {};
|
|
14
|
-
//# sourceMappingURL=native-policy-parent-windows.d.ts.map
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export declare const NATIVE_RENAME_SOURCE_IDENTITY_MISMATCH = "FS_SAFE_INTERNAL_RENAME_SOURCE_IDENTITY_MISMATCH";
|
|
2
2
|
export type NativeRenameFailureOutcome = "uncommitted" | "indeterminate";
|
|
3
3
|
export declare function classifyNativeRenameFailure(error: unknown): NativeRenameFailureOutcome;
|
|
4
|
-
//# sourceMappingURL=native-rename-outcome.d.ts.map
|
|
@@ -8,10 +8,23 @@ import type { PublishedFileReceipt, StagedFile, StagedFileCleanupReceipt, Staged
|
|
|
8
8
|
export type NativeStagingBinding = NativeBinding & Required<Pick<NativeBinding, "createStagedFile" | "stagedFileMatches" | "removeStagedFile">>;
|
|
9
9
|
export declare function assertNativeStaging(binding: NativeBinding): asserts binding is NativeStagingBinding;
|
|
10
10
|
type StagedPermissionPolicy = "private-creation" | "mode-only";
|
|
11
|
+
type NativeStageOwner = Readonly<{
|
|
12
|
+
binding: NativeStagingBinding;
|
|
13
|
+
parentFd: number;
|
|
14
|
+
closeParentFd: (fd: number) => void;
|
|
15
|
+
directory: StagedFileReceipt["directory"];
|
|
16
|
+
portableNames?: boolean;
|
|
17
|
+
mode: number;
|
|
18
|
+
sync?: boolean;
|
|
19
|
+
strictFileSync?: boolean;
|
|
20
|
+
assertBeforeMutation?: () => void;
|
|
21
|
+
permissionPolicy?: StagedPermissionPolicy;
|
|
22
|
+
name?: string;
|
|
23
|
+
}>;
|
|
11
24
|
declare class NativeStagedFile implements StagedFile {
|
|
12
25
|
#private;
|
|
13
|
-
constructor(
|
|
14
|
-
static create(
|
|
26
|
+
constructor(owner: NativeStageOwner);
|
|
27
|
+
static create(owner: NativeStageOwner, input: PinnedWriteInput, maxBytes?: number): Promise<NativeStagedFile>;
|
|
15
28
|
static write(binding: NativeStagingBinding, parentFd: number, closeParentFd: (fd: number) => void, directory: StagedFileReceipt["directory"], params: PinnedWriteParams, parentGuard: AnyAsyncDirectoryGuard): Promise<FileIdentityStat>;
|
|
16
29
|
get receipt(): StagedFileReceipt;
|
|
17
30
|
assertCurrent(): Promise<void>;
|
|
@@ -30,4 +43,3 @@ export declare function stageFileInDirectory(options: {
|
|
|
30
43
|
/** Published mode; the unpublished stage stays at 0600. Defaults to 0600. */
|
|
31
44
|
mode?: number;
|
|
32
45
|
}): Promise<StagedFile>;
|
|
33
|
-
//# sourceMappingURL=native-staged-file.d.ts.map
|
|
@@ -86,50 +86,33 @@ function assertBasename(name, portable) {
|
|
|
86
86
|
}
|
|
87
87
|
const NOT_PUBLISHED = Object.freeze({ status: "not-published" });
|
|
88
88
|
class NativeStagedFile {
|
|
89
|
-
#
|
|
89
|
+
#owner;
|
|
90
90
|
#closeFd;
|
|
91
|
-
#
|
|
92
|
-
#closeParentFd;
|
|
93
|
-
#directory;
|
|
94
|
-
#portableNames;
|
|
95
|
-
#publishedMode;
|
|
96
|
-
#sync;
|
|
97
|
-
#strictFileSync;
|
|
91
|
+
#assertBeforeMutation;
|
|
98
92
|
#private;
|
|
99
93
|
#verifyMode;
|
|
100
|
-
#assertBeforeMutation;
|
|
101
|
-
#name;
|
|
102
94
|
#state = { status: "open", publication: NOT_PUBLISHED };
|
|
103
95
|
#receipt;
|
|
104
96
|
#rejectFinalSymlink = false;
|
|
105
|
-
constructor(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
this.#closeFd = captureNativeFdClose(binding);
|
|
109
|
-
this.#
|
|
110
|
-
this.#
|
|
111
|
-
this.#
|
|
112
|
-
this.#
|
|
113
|
-
this.#portableNames = portableNames;
|
|
114
|
-
this.#publishedMode = publishedMode;
|
|
115
|
-
this.#sync = sync;
|
|
116
|
-
this.#strictFileSync = strictFileSync;
|
|
117
|
-
this.#private = permissionPolicy === "private-creation";
|
|
118
|
-
this.#verifyMode = permissionPolicy !== undefined;
|
|
119
|
-
this.#assertBeforeMutation = assertBeforeMutation;
|
|
97
|
+
constructor(owner) {
|
|
98
|
+
const name = owner.name ?? `.fs-safe-${randomUUID()}.tmp`;
|
|
99
|
+
assertBasename(name, owner.portableNames !== false);
|
|
100
|
+
this.#closeFd = captureNativeFdClose(owner.binding);
|
|
101
|
+
this.#owner = { ...owner, name };
|
|
102
|
+
this.#assertBeforeMutation = owner.assertBeforeMutation;
|
|
103
|
+
this.#private = owner.permissionPolicy === "private-creation";
|
|
104
|
+
this.#verifyMode = owner.permissionPolicy !== undefined;
|
|
120
105
|
}
|
|
121
106
|
// Public staging supplies a Node parent; pinned writes supply a native parent.
|
|
122
107
|
// The supplied closer owns parentFd even on construction or preparation failure.
|
|
123
|
-
static async create(
|
|
124
|
-
// Public staging uses portable names; existing POSIX writes accept literal names.
|
|
125
|
-
portableNames = true, sync = true, assertBeforeMutation, exclusiveBasename, strictFileSync = false, permissionPolicy) {
|
|
108
|
+
static async create(owner, input, maxBytes) {
|
|
126
109
|
let staged;
|
|
127
110
|
try {
|
|
128
|
-
staged = new NativeStagedFile(
|
|
111
|
+
staged = new NativeStagedFile(owner);
|
|
129
112
|
}
|
|
130
113
|
catch (error) {
|
|
131
114
|
try {
|
|
132
|
-
closeParentFd(parentFd);
|
|
115
|
+
owner.closeParentFd(owner.parentFd);
|
|
133
116
|
}
|
|
134
117
|
catch (closeError) {
|
|
135
118
|
throw new AggregateError([error, closeError], "staged owner construction and close failed");
|
|
@@ -145,7 +128,13 @@ class NativeStagedFile {
|
|
|
145
128
|
const exclusive = params.overwrite === false && params.input.kind === "buffer" && params.input.stageBeforePublish === false;
|
|
146
129
|
// This owner never escapes. Only the internal verifier borrows its fd;
|
|
147
130
|
// public descriptor methods remain await-free and cannot race disposal.
|
|
148
|
-
const staged = __addDisposableResource(env_1, await NativeStagedFile.create(
|
|
131
|
+
const staged = __addDisposableResource(env_1, await NativeStagedFile.create({
|
|
132
|
+
binding, parentFd, closeParentFd, directory, mode: params.mode, sync: params.sync,
|
|
133
|
+
// Public staging uses portable names; existing POSIX writes accept literal names.
|
|
134
|
+
portableNames: false, assertBeforeMutation: params.assertBeforeMutation,
|
|
135
|
+
name: exclusive ? params.basename : undefined, strictFileSync: params.strictFileSync,
|
|
136
|
+
permissionPolicy: params.private ? "private-creation" : params.verifyPosixMode === true ? "mode-only" : undefined,
|
|
137
|
+
}, params.input, params.maxBytes), true);
|
|
149
138
|
staged.#rejectFinalSymlink = params.rejectFinalSymlink === true;
|
|
150
139
|
if (params.input.kind === "file")
|
|
151
140
|
await params.input.verifySource();
|
|
@@ -201,7 +190,7 @@ class NativeStagedFile {
|
|
|
201
190
|
}
|
|
202
191
|
#assertNamed(name, expectedMode) {
|
|
203
192
|
const fd = this.#file();
|
|
204
|
-
const stat = this.#binding.stagedFileMatches(this.#parentFd, name, fd)
|
|
193
|
+
const stat = this.#owner.binding.stagedFileMatches(this.#owner.parentFd, name, fd)
|
|
205
194
|
? fs.fstatSync(fd, { bigint: true }) : undefined;
|
|
206
195
|
if (!stat || stat.nlink !== 1n) {
|
|
207
196
|
throw new FsSafeError("path-mismatch", "staged entry no longer names the exclusive created file");
|
|
@@ -213,8 +202,8 @@ class NativeStagedFile {
|
|
|
213
202
|
if (this.#open().publication.status !== "not-published") {
|
|
214
203
|
throw new FsSafeError("helper-failed", "staged file publication has already been attempted");
|
|
215
204
|
}
|
|
216
|
-
assertStagedDirectoryCurrent(this.#directory);
|
|
217
|
-
this.#assertNamed(this.#name, 0o600);
|
|
205
|
+
assertStagedDirectoryCurrent(this.#owner.directory);
|
|
206
|
+
this.#assertNamed(this.#owner.name, 0o600);
|
|
218
207
|
}
|
|
219
208
|
#assertPermissions(fd, stat, expectedMode) {
|
|
220
209
|
if (this.#private)
|
|
@@ -228,7 +217,7 @@ class NativeStagedFile {
|
|
|
228
217
|
}
|
|
229
218
|
async #prepare(input, maxBytes) {
|
|
230
219
|
try {
|
|
231
|
-
const mode = this.#
|
|
220
|
+
const mode = this.#owner.mode;
|
|
232
221
|
if (!Number.isInteger(mode) || mode < 0 || mode > 0o7777) {
|
|
233
222
|
throw new FsSafeError("invalid-path", "invalid staged file mode");
|
|
234
223
|
}
|
|
@@ -239,25 +228,25 @@ class NativeStagedFile {
|
|
|
239
228
|
throw new FsSafeError("helper-unavailable", "required cloning cannot verify staged permissions before copying");
|
|
240
229
|
}
|
|
241
230
|
}
|
|
242
|
-
assertStagedDirectoryCurrent(this.#directory);
|
|
231
|
+
assertStagedDirectoryCurrent(this.#owner.directory);
|
|
243
232
|
// The exclusive open performs no fallible post-open checks. Store its fd
|
|
244
233
|
// before every subsequent operation, including the first metadata read.
|
|
245
234
|
const state = this.#open();
|
|
246
235
|
if (this.#private)
|
|
247
|
-
assertDarwinCreationAcl(this.#parentFd, "file");
|
|
236
|
+
assertDarwinCreationAcl(this.#owner.parentFd, "file");
|
|
248
237
|
this.#assertBeforeMutation?.();
|
|
249
238
|
if (this.#private)
|
|
250
|
-
assertDarwinCreationAcl(this.#parentFd, "file");
|
|
239
|
+
assertDarwinCreationAcl(this.#owner.parentFd, "file");
|
|
251
240
|
// Native copying populates its new file before returning its descriptor.
|
|
252
241
|
const copied = input.kind === "file" && !this.#verifyMode
|
|
253
|
-
? await createNativeCopyFile(this.#binding, input, this.#parentFd, this.#name, maxBytes, false)
|
|
242
|
+
? await createNativeCopyFile(this.#owner.binding, input, this.#owner.parentFd, this.#owner.name, maxBytes, false)
|
|
254
243
|
: undefined;
|
|
255
244
|
state.fileFd = copied?.fd;
|
|
256
245
|
if (state.fileFd === undefined) {
|
|
257
246
|
this.#assertBeforeMutation?.();
|
|
258
247
|
if (this.#private)
|
|
259
|
-
assertDarwinCreationAcl(this.#parentFd, "file");
|
|
260
|
-
state.fileFd = this.#binding.createStagedFile(this.#parentFd, this.#name);
|
|
248
|
+
assertDarwinCreationAcl(this.#owner.parentFd, "file");
|
|
249
|
+
state.fileFd = this.#owner.binding.createStagedFile(this.#owner.parentFd, this.#owner.name);
|
|
261
250
|
}
|
|
262
251
|
const fd = state.fileFd;
|
|
263
252
|
if (input.kind === "file")
|
|
@@ -281,14 +270,14 @@ class NativeStagedFile {
|
|
|
281
270
|
await writePinnedInput(fd, input, maxBytes, assertBeforeMutation);
|
|
282
271
|
if (this.#verifyMode)
|
|
283
272
|
this.#assertStagePermissions(fd);
|
|
284
|
-
if (this.#sync) {
|
|
285
|
-
if (this.#strictFileSync)
|
|
273
|
+
if (this.#owner.sync !== false) {
|
|
274
|
+
if (this.#owner.strictFileSync)
|
|
286
275
|
fs.fsyncSync(fd);
|
|
287
276
|
else
|
|
288
277
|
syncFileBestEffortSync(fd);
|
|
289
278
|
}
|
|
290
279
|
const stat = fs.fstatSync(fd, { bigint: true });
|
|
291
|
-
this.#receipt = createStagedFileReceipt(this.#directory, this.#name, stat);
|
|
280
|
+
this.#receipt = createStagedFileReceipt(this.#owner.directory, this.#owner.name, stat);
|
|
292
281
|
this.#assertCurrent();
|
|
293
282
|
}
|
|
294
283
|
catch (error) {
|
|
@@ -311,23 +300,23 @@ class NativeStagedFile {
|
|
|
311
300
|
const overwrite = options?.overwrite;
|
|
312
301
|
try {
|
|
313
302
|
const state = this.#open();
|
|
314
|
-
assertBasename(basename, this.#portableNames);
|
|
315
|
-
if (basename === this.#name || typeof overwrite !== "boolean") {
|
|
303
|
+
assertBasename(basename, this.#owner.portableNames !== false);
|
|
304
|
+
if (basename === this.#owner.name || typeof overwrite !== "boolean") {
|
|
316
305
|
throw new FsSafeError("invalid-path", "publication needs a distinct basename and explicit overwrite policy");
|
|
317
306
|
}
|
|
318
307
|
this.#assertCurrent();
|
|
319
|
-
assertFinalSymlinkRejected(path.join(this.#directory.realPath, basename), this.#rejectFinalSymlink);
|
|
308
|
+
assertFinalSymlinkRejected(path.join(this.#owner.directory.realPath, basename), this.#rejectFinalSymlink);
|
|
320
309
|
this.#assertBeforeMutation?.();
|
|
321
310
|
if (this.#assertBeforeMutation) {
|
|
322
311
|
this.#assertCurrent();
|
|
323
|
-
assertFinalSymlinkRejected(path.join(this.#directory.realPath, basename), this.#rejectFinalSymlink);
|
|
312
|
+
assertFinalSymlinkRejected(path.join(this.#owner.directory.realPath, basename), this.#rejectFinalSymlink);
|
|
324
313
|
}
|
|
325
314
|
try {
|
|
326
315
|
if (overwrite) {
|
|
327
|
-
this.#binding.renameReplace(this.#parentFd, this.#name, this.#parentFd, basename);
|
|
316
|
+
this.#owner.binding.renameReplace(this.#owner.parentFd, this.#owner.name, this.#owner.parentFd, basename);
|
|
328
317
|
}
|
|
329
318
|
else {
|
|
330
|
-
this.#binding.renameNoReplace(this.#parentFd, this.#name, this.#parentFd, basename);
|
|
319
|
+
this.#owner.binding.renameNoReplace(this.#owner.parentFd, this.#owner.name, this.#owner.parentFd, basename);
|
|
331
320
|
}
|
|
332
321
|
}
|
|
333
322
|
catch (error) {
|
|
@@ -355,24 +344,24 @@ class NativeStagedFile {
|
|
|
355
344
|
this.#open().publication = receipt;
|
|
356
345
|
onPublished?.(receipt.staged.identity);
|
|
357
346
|
const stagedMode = this.#assertNamed(basename, 0o600);
|
|
358
|
-
assertStagedDirectoryCurrent(this.#directory);
|
|
347
|
+
assertStagedDirectoryCurrent(this.#owner.directory);
|
|
359
348
|
// Keep contents private until the name passes its identity fence. Mode
|
|
360
349
|
// changes use the owned fd, including for final mode 000.
|
|
361
350
|
const fd = this.#file();
|
|
362
|
-
if (this.#
|
|
363
|
-
fs.fchmodSync(fd, this.#
|
|
351
|
+
if (this.#owner.mode !== 0o600 || stagedMode !== 0o600)
|
|
352
|
+
fs.fchmodSync(fd, this.#owner.mode);
|
|
364
353
|
// Content was synced during preparation. A lost chmod leaves 0600, no wider
|
|
365
354
|
// than modes retaining owner rw; restrictive modes still need a durable correction.
|
|
366
|
-
if (this.#sync && ((this.#
|
|
367
|
-
if (this.#strictFileSync)
|
|
355
|
+
if (this.#owner.sync !== false && ((this.#owner.mode & 0o600) !== 0o600 || (stagedMode & ~this.#owner.mode) !== 0)) {
|
|
356
|
+
if (this.#owner.strictFileSync)
|
|
368
357
|
fs.fsyncSync(fd);
|
|
369
358
|
else
|
|
370
359
|
syncFileBestEffortSync(fd);
|
|
371
360
|
}
|
|
372
|
-
if (this.#sync)
|
|
373
|
-
syncFileBestEffortSync(this.#parentFd);
|
|
374
|
-
this.#assertNamed(basename, this.#
|
|
375
|
-
assertStagedDirectoryCurrent(this.#directory);
|
|
361
|
+
if (this.#owner.sync !== false)
|
|
362
|
+
syncFileBestEffortSync(this.#owner.parentFd);
|
|
363
|
+
this.#assertNamed(basename, this.#owner.mode);
|
|
364
|
+
assertStagedDirectoryCurrent(this.#owner.directory);
|
|
376
365
|
return receipt;
|
|
377
366
|
}
|
|
378
367
|
#finalize() {
|
|
@@ -387,7 +376,7 @@ class NativeStagedFile {
|
|
|
387
376
|
}
|
|
388
377
|
else if (state.publication.status === "not-published" && state.fileFd !== undefined) {
|
|
389
378
|
try {
|
|
390
|
-
outcome = this.#binding.removeStagedFile(this.#parentFd, this.#name, state.fileFd);
|
|
379
|
+
outcome = this.#owner.binding.removeStagedFile(this.#owner.parentFd, this.#owner.name, state.fileFd);
|
|
391
380
|
}
|
|
392
381
|
catch (error) {
|
|
393
382
|
outcome = "failed";
|
|
@@ -397,7 +386,7 @@ class NativeStagedFile {
|
|
|
397
386
|
let resources = "closed";
|
|
398
387
|
for (const [fd, closeFd] of [
|
|
399
388
|
[state.fileFd, this.#closeFd],
|
|
400
|
-
[this.#parentFd, this.#closeParentFd],
|
|
389
|
+
[this.#owner.parentFd, this.#owner.closeParentFd],
|
|
401
390
|
]) {
|
|
402
391
|
if (fd === undefined) {
|
|
403
392
|
continue;
|
|
@@ -411,7 +400,7 @@ class NativeStagedFile {
|
|
|
411
400
|
}
|
|
412
401
|
}
|
|
413
402
|
const receipt = Object.freeze({
|
|
414
|
-
temporaryBasename: this.#name,
|
|
403
|
+
temporaryBasename: this.#owner.name,
|
|
415
404
|
publication: state.publication,
|
|
416
405
|
status: outcome,
|
|
417
406
|
resources,
|
|
@@ -447,5 +436,8 @@ export async function stageFileInDirectory(options) {
|
|
|
447
436
|
const input = { kind: "buffer", data: Buffer.from(options.content) };
|
|
448
437
|
const mode = options.mode ?? 0o600;
|
|
449
438
|
const parent = openStagedDirectory(options.directory);
|
|
450
|
-
return await createNativeStage(
|
|
439
|
+
return await createNativeStage({
|
|
440
|
+
binding, parentFd: parent.fd, closeParentFd: fs.closeSync,
|
|
441
|
+
directory: parent.receipt, mode, permissionPolicy: "mode-only",
|
|
442
|
+
}, input);
|
|
451
443
|
}
|
package/dist/native.d.ts
CHANGED
|
@@ -11,4 +11,3 @@ export declare function getNativeBinding(): NativeBinding | undefined;
|
|
|
11
11
|
export declare function requireNativeBinding(): NativeBinding;
|
|
12
12
|
export declare function __setNativeLoaderForTest(loader: () => NativeBinding): void;
|
|
13
13
|
export declare function __resetNativeLoaderForTest(): void;
|
|
14
|
-
//# sourceMappingURL=native.d.ts.map
|
|
@@ -5,4 +5,3 @@ export declare function recordExclusiveCreateFailure(error: unknown, filePath: s
|
|
|
5
5
|
export declare function openedPathResolutionError(error?: Error): Error;
|
|
6
6
|
export declare function recordPreOpenFileChange(error: unknown, handle: FileHandle, filePath: string, before: BigIntStats | undefined, opened: BigIntStats | undefined): Promise<void>;
|
|
7
7
|
export declare function recordOpenedFileFailure(error: unknown, handle: FileHandle, filePath: string, identity: BigIntStats): Promise<void>;
|
|
8
|
-
//# sourceMappingURL=opened-file-failure.d.ts.map
|
package/dist/output.d.ts
CHANGED
|
@@ -5,4 +5,3 @@ export type OverwriteFileHandleOptions = {
|
|
|
5
5
|
};
|
|
6
6
|
/** Overwrite a borrowed, non-append read/write handle with best-effort failure rollback. */
|
|
7
7
|
export declare function overwriteFileHandle(handle: FileHandle, data: Uint8Array, options?: OverwriteFileHandleOptions): Promise<void>;
|
|
8
|
-
//# sourceMappingURL=overwrite-file-handle.d.ts.map
|
package/dist/owner-dacl.d.ts
CHANGED
package/dist/path-case.d.ts
CHANGED
|
@@ -4,4 +4,3 @@ export type ProbePathCaseOptions = {
|
|
|
4
4
|
};
|
|
5
5
|
/** Observe local ASCII case behavior; unknown observations never imply an operating-system default. */
|
|
6
6
|
export declare function probePathCaseInsensitiveSync(targetPath: string, options?: ProbePathCaseOptions): boolean | undefined;
|
|
7
|
-
//# sourceMappingURL=path-case.d.ts.map
|
package/dist/path-policy.d.ts
CHANGED
package/dist/path-prefix.d.ts
CHANGED
|
@@ -4,4 +4,3 @@ export type PathSegmentRoute = Readonly<{
|
|
|
4
4
|
}>;
|
|
5
5
|
export declare function createPathSegmentRoute(segments: readonly string[]): PathSegmentRoute;
|
|
6
6
|
export declare function joinPathSegmentRoute(base: string, route: PathSegmentRoute, offset: number, tail?: string): string;
|
|
7
|
-
//# sourceMappingURL=path-segment-route.d.ts.map
|
|
@@ -9,4 +9,3 @@ export type ProbePathSuffixAliasesOptions = {
|
|
|
9
9
|
};
|
|
10
10
|
/** Observe bounded missing suffix aliases; the caller owns caching and ambiguity policy. */
|
|
11
11
|
export declare function probePathSuffixAliasesSync(options: ProbePathSuffixAliasesOptions): boolean | undefined;
|
|
12
|
-
//# sourceMappingURL=path-suffix-aliases.d.ts.map
|
package/dist/path.d.ts
CHANGED
|
@@ -18,4 +18,3 @@ export declare function isPathInsideWithRealpath(basePath: string, candidatePath
|
|
|
18
18
|
export declare function safeStatSync(targetPath: string): fs.Stats | null;
|
|
19
19
|
export declare function splitSafeRelativePath(relativePath: string): string[];
|
|
20
20
|
export declare function resolveSafeRelativePath(rootDir: string, relativePath: string): string;
|
|
21
|
-
//# sourceMappingURL=path.d.ts.map
|
package/dist/permission-exec.js
CHANGED
|
@@ -8,7 +8,6 @@ export function formatPermissionErrorDetail(value) {
|
|
|
8
8
|
const formatted = formatErrorDetail(value);
|
|
9
9
|
return formatted.length > 400 ? `${formatted.slice(0, 399)}…` : formatted;
|
|
10
10
|
}
|
|
11
|
-
const MISSING_DATA_PROPERTY = Object.freeze({ found: false });
|
|
12
11
|
const MAX_CAUGHT_FAILURE_PROTOTYPES = 4;
|
|
13
12
|
const primitiveString = String;
|
|
14
13
|
const isUint8Array = utilTypes.isUint8Array;
|
|
@@ -36,32 +35,28 @@ function isInspectableCaughtObject(value) {
|
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
function dataProperty(value, name) {
|
|
39
|
-
if (!isInspectableCaughtObject(value))
|
|
40
|
-
return MISSING_DATA_PROPERTY;
|
|
41
38
|
let current = value;
|
|
42
39
|
for (let depth = 0; current !== null && depth < MAX_CAUGHT_FAILURE_PROTOTYPES; depth += 1) {
|
|
43
40
|
if (!isInspectableCaughtObject(current))
|
|
44
|
-
return
|
|
41
|
+
return undefined;
|
|
45
42
|
let descriptor;
|
|
46
43
|
try {
|
|
47
44
|
descriptor = Object.getOwnPropertyDescriptor(current, name);
|
|
48
45
|
}
|
|
49
46
|
catch {
|
|
50
|
-
return
|
|
47
|
+
return undefined;
|
|
51
48
|
}
|
|
52
49
|
if (descriptor) {
|
|
53
|
-
return Object.hasOwn(descriptor, "value")
|
|
54
|
-
? { found: true, value: descriptor.value }
|
|
55
|
-
: MISSING_DATA_PROPERTY;
|
|
50
|
+
return Object.hasOwn(descriptor, "value") ? descriptor : undefined;
|
|
56
51
|
}
|
|
57
52
|
try {
|
|
58
53
|
current = Object.getPrototypeOf(current);
|
|
59
54
|
}
|
|
60
55
|
catch {
|
|
61
|
-
return
|
|
56
|
+
return undefined;
|
|
62
57
|
}
|
|
63
58
|
}
|
|
64
|
-
return
|
|
59
|
+
return undefined;
|
|
65
60
|
}
|
|
66
61
|
function caughtPrimitiveDisplay(value) {
|
|
67
62
|
if (value !== null && (typeof value === "object" || typeof value === "function"))
|
|
@@ -78,9 +73,9 @@ export function formatCaughtPermissionFailure(error) {
|
|
|
78
73
|
}
|
|
79
74
|
const message = dataProperty(error, "message");
|
|
80
75
|
const name = dataProperty(error, "name");
|
|
81
|
-
const rawMessage =
|
|
76
|
+
const rawMessage = typeof message?.value === "string"
|
|
82
77
|
? message.value : "";
|
|
83
|
-
const rawName =
|
|
78
|
+
const rawName = typeof name?.value === "string"
|
|
84
79
|
? name.value : "";
|
|
85
80
|
const messageText = rawMessage.slice(0, 400);
|
|
86
81
|
const nameText = rawName.slice(0, 400);
|
|
@@ -123,12 +118,11 @@ function commandFailureFields(error) {
|
|
|
123
118
|
const signal = dataProperty(error, "signal");
|
|
124
119
|
const stderr = dataProperty(error, "stderr");
|
|
125
120
|
return {
|
|
126
|
-
found: killed
|
|
127
|
-
timedOut: killed
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
stderr: stderr.found ? safeStderr(stderr.value) : "",
|
|
121
|
+
found: !!(killed || code || signal || stderr),
|
|
122
|
+
timedOut: killed?.value === true && signal?.value === "SIGKILL",
|
|
123
|
+
exitCode: typeof code?.value === "number" ? code.value : null,
|
|
124
|
+
signal: typeof signal?.value === "string" ? signal.value : null,
|
|
125
|
+
stderr: stderr ? safeStderr(stderr.value) : "",
|
|
132
126
|
};
|
|
133
127
|
}
|
|
134
128
|
export class PermissionCommandError extends Error {
|
|
@@ -155,20 +149,20 @@ export class PermissionCommandError extends Error {
|
|
|
155
149
|
export function getPermissionCommandFailure(error, command, durationMs) {
|
|
156
150
|
if (isInspectableCaughtObject(error) && utilTypes.isNativeError(error)) {
|
|
157
151
|
const name = dataProperty(error, "name");
|
|
158
|
-
if (name
|
|
152
|
+
if (name?.value === "PermissionCommandError") {
|
|
159
153
|
const wrappedCommand = dataProperty(error, "command");
|
|
160
154
|
const wrappedDuration = dataProperty(error, "durationMs");
|
|
161
155
|
const wrappedTimedOut = dataProperty(error, "timedOut");
|
|
162
156
|
const wrappedExitCode = dataProperty(error, "exitCode");
|
|
163
157
|
const wrappedSignal = dataProperty(error, "signal");
|
|
164
158
|
const wrappedStderr = dataProperty(error, "stderr");
|
|
165
|
-
if (
|
|
166
|
-
|
|
159
|
+
if (typeof wrappedCommand?.value === "string" &&
|
|
160
|
+
typeof wrappedDuration?.value === "number" &&
|
|
167
161
|
Number.isSafeInteger(wrappedDuration.value) && wrappedDuration.value >= 0 &&
|
|
168
|
-
|
|
169
|
-
wrappedExitCode
|
|
170
|
-
wrappedSignal
|
|
171
|
-
wrappedStderr
|
|
162
|
+
typeof wrappedTimedOut?.value === "boolean" &&
|
|
163
|
+
wrappedExitCode && (wrappedExitCode.value === null || typeof wrappedExitCode.value === "number") &&
|
|
164
|
+
wrappedSignal && (wrappedSignal.value === null || typeof wrappedSignal.value === "string") &&
|
|
165
|
+
wrappedStderr) {
|
|
172
166
|
return {
|
|
173
167
|
command: wrappedCommand.value,
|
|
174
168
|
durationMs: wrappedDuration.value,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { formatOctal, formatPermissionDetail, formatPermissionRemediation, inspectPathPermissions, isGroupReadable, isGroupWritable, isWorldReadable, isWorldWritable, modeBits, safeStat, type PermissionCheck, type PermissionCheckOptions, type PermissionCommandFailure, type SafeStatResult, } from "./permissions.js";
|
|
2
2
|
export { createPrivateDirectory, type CreatePrivateDirectoryOptions, } from "./private-directory.js";
|
|
3
3
|
export { readOwnerAndDacl, type OwnerAndDaclResult, type WindowsAccessControlEntry, type WindowsAceFlags, } from "./owner-dacl.js";
|
|
4
|
-
//# sourceMappingURL=permissions-public.d.ts.map
|