@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
|
@@ -2,11 +2,11 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { FsSafeError } from "./errors.js";
|
|
4
4
|
import { captureRootSyncAcquireOptions } from "./file-lock-sync-root-options.js";
|
|
5
|
-
import { defaultSyncShouldReclaim, foreignSyncHeldLock
|
|
6
|
-
import {
|
|
5
|
+
import { defaultSyncShouldReclaim, foreignSyncHeldLock } from "./file-lock-sync-admission.js";
|
|
6
|
+
import { isTransientLockFileDenial } from "./sidecar-lock-policy.js";
|
|
7
7
|
import { serializeSidecarLockPayload, } from "./sidecar-lock-reclaim.js";
|
|
8
8
|
import { createSuppressedError } from "./suppressed-error.js";
|
|
9
|
-
import {
|
|
9
|
+
import { SyncLockAcquisition } from "./file-lock-sync-acquisition.js";
|
|
10
10
|
import { assertSynchronousCallbackResult } from "./mutation-authority.js";
|
|
11
11
|
import { assertNoWindowsPathAlias } from "./windows-path-alias.js";
|
|
12
12
|
import { admitFileLockSyncRootPath, assertFileLockSyncRootPathsCurrent, captureFileLockSyncRootAuthority, normalizeFileLockSyncTargetWithRoot, } from "./file-lock-sync-root.js";
|
|
@@ -37,20 +37,6 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
37
37
|
const heldLocks = getRootSyncHeldLocks();
|
|
38
38
|
const currentTargetHolder = () => heldLocks.get(normalizedTargetPath) ??
|
|
39
39
|
foreignSyncHeldLock("root", normalizedTargetPath);
|
|
40
|
-
const admissions = getSyncLockAdmissions();
|
|
41
|
-
const admissionToken = {};
|
|
42
|
-
let ownsAdmission = false;
|
|
43
|
-
const assertAdmission = () => {
|
|
44
|
-
if (admissions.get(normalizedTargetPath) !== admissionToken) {
|
|
45
|
-
throw syncLockTimeout(lockPath, normalizedTargetPath);
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
const releaseAdmission = () => {
|
|
49
|
-
if (ownsAdmission && admissions.get(normalizedTargetPath) === admissionToken) {
|
|
50
|
-
admissions.delete(normalizedTargetPath);
|
|
51
|
-
}
|
|
52
|
-
ownsAdmission = false;
|
|
53
|
-
};
|
|
54
40
|
const arbitration = Object.freeze({
|
|
55
41
|
authority,
|
|
56
42
|
heldLocks,
|
|
@@ -59,44 +45,15 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
59
45
|
reentrantOwner: options.reentrantOwner,
|
|
60
46
|
});
|
|
61
47
|
if (heldLocks.has(normalizedTargetPath) && !foreignSyncHeldLock("root", normalizedTargetPath)) {
|
|
62
|
-
assertFileLockSyncRootPathsCurrent(guardedPaths
|
|
48
|
+
assertFileLockSyncRootPathsCurrent(guardedPaths);
|
|
63
49
|
const initiallyReusable = tryReuseCurrentRootSyncHeldLock(arbitration);
|
|
64
50
|
if (initiallyReusable)
|
|
65
51
|
return initiallyReusable;
|
|
66
52
|
}
|
|
67
|
-
const
|
|
68
|
-
let attempt = 0;
|
|
69
|
-
let transientDenials = 0;
|
|
53
|
+
const acquisition = new SyncLockAcquisition(lockPath, normalizedTargetPath, options.retry, options.timeoutMs);
|
|
70
54
|
let ownedReclaimGuard;
|
|
71
55
|
let reclaimCleanupAttempted = false;
|
|
72
56
|
const reuseCurrentHeld = () => ownedReclaimGuard ? undefined : tryReuseCurrentRootSyncHeldLock(arbitration);
|
|
73
|
-
const waitForRetry = () => {
|
|
74
|
-
releaseAdmission();
|
|
75
|
-
const elapsed = Date.now() - startedAt;
|
|
76
|
-
const timedOut = options.timeoutMs !== undefined && elapsed >= options.timeoutMs;
|
|
77
|
-
if (timedOut || (options.retry.retries !== undefined && attempt >= options.retry.retries)) {
|
|
78
|
-
throw syncLockTimeout(lockPath, normalizedTargetPath);
|
|
79
|
-
}
|
|
80
|
-
const remaining = options.timeoutMs === undefined || options.timeoutMs === Number.POSITIVE_INFINITY
|
|
81
|
-
? Number.POSITIVE_INFINITY
|
|
82
|
-
: Math.max(0, options.timeoutMs - elapsed);
|
|
83
|
-
sleepSync(Math.min(computeSidecarLockDelayMs(options.retry, attempt), remaining));
|
|
84
|
-
attempt += 1;
|
|
85
|
-
};
|
|
86
|
-
const retryLockFileDenial = (error) => {
|
|
87
|
-
if (!isTransientLockFileDenial(error, lockPath) ||
|
|
88
|
-
++transientDenials > maxTransientLockDenials)
|
|
89
|
-
return false;
|
|
90
|
-
try {
|
|
91
|
-
waitForRetry();
|
|
92
|
-
}
|
|
93
|
-
catch (waitError) {
|
|
94
|
-
if (waitError.code === "file_lock_timeout")
|
|
95
|
-
throw error;
|
|
96
|
-
throw waitError;
|
|
97
|
-
}
|
|
98
|
-
return true;
|
|
99
|
-
};
|
|
100
57
|
const releaseReclaimGuard = () => {
|
|
101
58
|
const receipt = ownedReclaimGuard;
|
|
102
59
|
if (!receipt)
|
|
@@ -116,19 +73,14 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
116
73
|
};
|
|
117
74
|
try {
|
|
118
75
|
while (true) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
ownsAdmission = true;
|
|
124
|
-
}
|
|
125
|
-
assertAdmission();
|
|
126
|
-
assertFileLockSyncRootPathsCurrent(guardedPaths, true, true);
|
|
127
|
-
assertAdmission();
|
|
76
|
+
acquisition.reserve();
|
|
77
|
+
acquisition.assert();
|
|
78
|
+
assertFileLockSyncRootPathsCurrent(guardedPaths);
|
|
79
|
+
acquisition.assert();
|
|
128
80
|
if (ownedReclaimGuard)
|
|
129
81
|
assertOwnedReclaimGuardCurrent();
|
|
130
|
-
if (!ownedReclaimGuard && fileLockSyncRootGuardExists(reclaimRootPath
|
|
131
|
-
waitForRetry();
|
|
82
|
+
if (!ownedReclaimGuard && fileLockSyncRootGuardExists(reclaimRootPath)) {
|
|
83
|
+
acquisition.waitForRetry();
|
|
132
84
|
continue;
|
|
133
85
|
}
|
|
134
86
|
if (currentTargetHolder() !== undefined) {
|
|
@@ -137,16 +89,16 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
137
89
|
return reused;
|
|
138
90
|
}
|
|
139
91
|
const payload = Reflect.apply(options.payload, options.optionsReceiver, []);
|
|
140
|
-
|
|
92
|
+
acquisition.assert();
|
|
141
93
|
const { raw, ownershipToken } = serializeSidecarLockPayload(payload);
|
|
142
|
-
|
|
94
|
+
acquisition.assert();
|
|
143
95
|
if (ownedReclaimGuard)
|
|
144
96
|
assertOwnedReclaimGuardCurrent();
|
|
145
97
|
if (currentTargetHolder() !== undefined) {
|
|
146
98
|
const reused = reuseCurrentHeld();
|
|
147
99
|
if (reused)
|
|
148
100
|
return reused;
|
|
149
|
-
waitForRetry();
|
|
101
|
+
acquisition.waitForRetry();
|
|
150
102
|
continue;
|
|
151
103
|
}
|
|
152
104
|
let fd;
|
|
@@ -154,9 +106,9 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
154
106
|
let unpublishedTimer;
|
|
155
107
|
let lockFileCreateOpenFailure;
|
|
156
108
|
try {
|
|
157
|
-
const created = createFileLockSyncRootFile(lockRootPath,
|
|
109
|
+
const created = createFileLockSyncRootFile(lockRootPath, {
|
|
158
110
|
assertBeforeOpen: () => {
|
|
159
|
-
|
|
111
|
+
acquisition.assert();
|
|
160
112
|
if (ownedReclaimGuard)
|
|
161
113
|
assertOwnedReclaimGuardCurrent();
|
|
162
114
|
if (currentTargetHolder() !== undefined)
|
|
@@ -193,29 +145,11 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
193
145
|
snapshot,
|
|
194
146
|
};
|
|
195
147
|
const returnedHandle = createRootSyncHeldLockHandle(createdHeld);
|
|
196
|
-
|
|
197
|
-
const timer = setInterval(() => {
|
|
198
|
-
let stillHeld;
|
|
199
|
-
try {
|
|
200
|
-
stillHeld = returnedHandle.verifyStillHeld();
|
|
201
|
-
}
|
|
202
|
-
catch {
|
|
203
|
-
stillHeld = false;
|
|
204
|
-
}
|
|
205
|
-
if (!stillHeld && createdHeld.timer) {
|
|
206
|
-
clearInterval(createdHeld.timer);
|
|
207
|
-
createdHeld.timer = undefined;
|
|
208
|
-
Reflect.apply(options.onCompromised, options.optionsReceiver, [{ lockPath, normalizedTargetPath }]);
|
|
209
|
-
}
|
|
210
|
-
}, options.compromiseCheckIntervalMs);
|
|
211
|
-
unpublishedTimer = timer;
|
|
212
|
-
createdHeld.timer = timer;
|
|
213
|
-
timer.unref();
|
|
214
|
-
}
|
|
148
|
+
acquisition.monitor(createdHeld, returnedHandle, options.onCompromised, options.compromiseCheckIntervalMs, options.optionsReceiver, (timer) => { unpublishedTimer = timer; });
|
|
215
149
|
if (currentTargetHolder() !== undefined) {
|
|
216
150
|
throw new FileLockSyncRootArbitrationCollision();
|
|
217
151
|
}
|
|
218
|
-
|
|
152
|
+
acquisition.assert();
|
|
219
153
|
heldLocks.set(normalizedTargetPath, createdHeld);
|
|
220
154
|
fd = undefined;
|
|
221
155
|
unpublishedTimer = undefined;
|
|
@@ -240,12 +174,12 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
240
174
|
const reused = reuseCurrentHeld();
|
|
241
175
|
if (reused)
|
|
242
176
|
return reused;
|
|
243
|
-
waitForRetry();
|
|
177
|
+
acquisition.waitForRetry();
|
|
244
178
|
continue;
|
|
245
179
|
}
|
|
246
180
|
const fromLockFileOpen = lockFileCreateOpenFailure !== undefined &&
|
|
247
181
|
lockFileCreateOpenFailure.error === error;
|
|
248
|
-
if (fromLockFileOpen &&
|
|
182
|
+
if (fromLockFileOpen && acquisition.retryDenial(error))
|
|
249
183
|
continue;
|
|
250
184
|
if (!fromLockFileOpen || error.code !== "EEXIST")
|
|
251
185
|
throw error;
|
|
@@ -254,14 +188,14 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
254
188
|
const reused = reuseCurrentHeld();
|
|
255
189
|
if (reused)
|
|
256
190
|
return reused;
|
|
257
|
-
waitForRetry();
|
|
191
|
+
acquisition.waitForRetry();
|
|
258
192
|
continue;
|
|
259
193
|
}
|
|
260
194
|
if (currentTargetHolder() !== undefined) {
|
|
261
195
|
const reused = reuseCurrentHeld();
|
|
262
196
|
if (reused)
|
|
263
197
|
return reused;
|
|
264
|
-
waitForRetry();
|
|
198
|
+
acquisition.waitForRetry();
|
|
265
199
|
continue;
|
|
266
200
|
}
|
|
267
201
|
let lockFileOpenDenied = false;
|
|
@@ -272,7 +206,7 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
272
206
|
});
|
|
273
207
|
}
|
|
274
208
|
catch (readError) {
|
|
275
|
-
if (lockFileOpenDenied &&
|
|
209
|
+
if (lockFileOpenDenied && acquisition.retryDenial(readError))
|
|
276
210
|
continue;
|
|
277
211
|
throw readError;
|
|
278
212
|
}
|
|
@@ -280,12 +214,12 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
280
214
|
const reused = reuseCurrentHeld();
|
|
281
215
|
if (reused)
|
|
282
216
|
return reused;
|
|
283
|
-
waitForRetry();
|
|
217
|
+
acquisition.waitForRetry();
|
|
284
218
|
continue;
|
|
285
219
|
}
|
|
286
|
-
|
|
220
|
+
acquisition.assert();
|
|
287
221
|
if (!current) {
|
|
288
|
-
waitForRetry();
|
|
222
|
+
acquisition.waitForRetry();
|
|
289
223
|
continue;
|
|
290
224
|
}
|
|
291
225
|
const snapshot = current.snapshot;
|
|
@@ -301,7 +235,7 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
301
235
|
heldByThisProcess: false,
|
|
302
236
|
}]);
|
|
303
237
|
assertSynchronousCallbackResult(reclaim, "shouldReclaim");
|
|
304
|
-
|
|
238
|
+
acquisition.assert();
|
|
305
239
|
if (!fileLockSyncRootSnapshotStillCurrent(lockRootPath, current)) {
|
|
306
240
|
throw new FsSafeError("path-mismatch", "sidecar changed during reclaim policy callback");
|
|
307
241
|
}
|
|
@@ -315,7 +249,7 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
315
249
|
options.shouldRemoveStaleLock) {
|
|
316
250
|
const guard = createFileLockSyncRootDirectory(reclaimRootPath);
|
|
317
251
|
if (!guard) {
|
|
318
|
-
waitForRetry();
|
|
252
|
+
acquisition.waitForRetry();
|
|
319
253
|
continue;
|
|
320
254
|
}
|
|
321
255
|
ownedReclaimGuard = guard;
|
|
@@ -327,11 +261,11 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
327
261
|
payload: snapshot.payload,
|
|
328
262
|
}]);
|
|
329
263
|
assertSynchronousCallbackResult(approved, "shouldRemoveStaleLock");
|
|
330
|
-
|
|
264
|
+
acquisition.assert();
|
|
331
265
|
assertOwnedReclaimGuardCurrent();
|
|
332
266
|
if (approved) {
|
|
333
267
|
const removed = removeFileLockSyncRootFile(lockRootPath, current.receipt, snapshot, () => {
|
|
334
|
-
|
|
268
|
+
acquisition.assert();
|
|
335
269
|
assertOwnedReclaimGuardCurrent();
|
|
336
270
|
if (currentTargetHolder() !== undefined)
|
|
337
271
|
throw new FileLockSyncRootArbitrationCollision();
|
|
@@ -352,7 +286,7 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
352
286
|
normalizedTargetPath,
|
|
353
287
|
});
|
|
354
288
|
}
|
|
355
|
-
waitForRetry();
|
|
289
|
+
acquisition.waitForRetry();
|
|
356
290
|
}
|
|
357
291
|
}
|
|
358
292
|
}
|
|
@@ -368,6 +302,6 @@ export function acquireFileLockSyncWithRoot(targetPath, inputOptions, lockRoot)
|
|
|
368
302
|
throw error;
|
|
369
303
|
}
|
|
370
304
|
finally {
|
|
371
|
-
|
|
305
|
+
acquisition.release();
|
|
372
306
|
}
|
|
373
307
|
}
|
|
@@ -15,4 +15,3 @@ export type FileLockSyncRootArbitration = Readonly<{
|
|
|
15
15
|
}>;
|
|
16
16
|
export declare function tryReuseCurrentRootSyncHeldLock(arbitration: FileLockSyncRootArbitration): FileLockSyncHandle | undefined;
|
|
17
17
|
export declare function cleanupCreatedRootSyncLock(lockRootPath: FileLockSyncRootPath, fd: number, receipt: FileLockSyncRootFileReceipt, timer?: NodeJS.Timeout): void;
|
|
18
|
-
//# sourceMappingURL=file-lock-sync-root-arbitration.d.ts.map
|
|
@@ -30,4 +30,3 @@ export declare function verifyRootSyncHeldLock(held: RootSyncHeldLock): boolean;
|
|
|
30
30
|
export declare function createRootSyncHeldLockHandle(held: RootSyncHeldLock): FileLockSyncHandle;
|
|
31
31
|
export declare function withSyncHeldLockHandle<T>(lock: FileLockSyncHandle, fn: () => T): T;
|
|
32
32
|
export {};
|
|
33
|
-
//# sourceMappingURL=file-lock-sync-root-held.d.ts.map
|
|
@@ -41,4 +41,3 @@ export declare function readFileLockSyncRootSnapshot(pathAuthority: FileLockSync
|
|
|
41
41
|
export declare function fileLockSyncRootSnapshotStillCurrent(pathAuthority: FileLockSyncRootPath, observed: FileLockSyncRootSnapshot): boolean;
|
|
42
42
|
export declare function fileReceiptCurrentAfterParentCheck(pathAuthority: FileLockSyncRootPath, receipt: FileLockSyncRootFileReceipt): boolean;
|
|
43
43
|
export declare function fileLockSyncRootReceiptStillCurrent(pathAuthority: FileLockSyncRootPath, receipt: FileLockSyncRootFileReceipt): boolean;
|
|
44
|
-
//# sourceMappingURL=file-lock-sync-root-io.d.ts.map
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { type SidecarLockSnapshot } from "./sidecar-lock-reclaim.js";
|
|
2
2
|
import { type FileLockSyncRootPath } from "./file-lock-sync-root.js";
|
|
3
3
|
import { type FileLockSyncRootDirectoryReceipt, type FileLockSyncRootFileReceipt } from "./file-lock-sync-root-io.js";
|
|
4
|
-
export declare function createFileLockSyncRootFile(pathAuthority: FileLockSyncRootPath,
|
|
5
|
-
assertBeforeOpen
|
|
6
|
-
onOpenFailure
|
|
4
|
+
export declare function createFileLockSyncRootFile(pathAuthority: FileLockSyncRootPath, options: {
|
|
5
|
+
assertBeforeOpen: () => void;
|
|
6
|
+
onOpenFailure: (error: unknown) => void;
|
|
7
7
|
}): {
|
|
8
8
|
fd: number;
|
|
9
9
|
receipt: FileLockSyncRootFileReceipt;
|
|
10
10
|
};
|
|
11
11
|
export declare function refreshFileLockSyncRootFileReceipt(pathAuthority: FileLockSyncRootPath, receipt: FileLockSyncRootFileReceipt): FileLockSyncRootFileReceipt;
|
|
12
12
|
export declare function removeFileLockSyncRootFile(pathAuthority: FileLockSyncRootPath, receipt: FileLockSyncRootFileReceipt, expected?: SidecarLockSnapshot, assertBeforeRemove?: () => boolean | void): boolean;
|
|
13
|
-
export declare function fileLockSyncRootGuardExists(pathAuthority: FileLockSyncRootPath
|
|
13
|
+
export declare function fileLockSyncRootGuardExists(pathAuthority: FileLockSyncRootPath): boolean;
|
|
14
14
|
export declare function createFileLockSyncRootDirectory(pathAuthority: FileLockSyncRootPath): FileLockSyncRootDirectoryReceipt | null;
|
|
15
15
|
export declare function removeFileLockSyncRootDirectory(pathAuthority: FileLockSyncRootPath, receipt: FileLockSyncRootDirectoryReceipt): boolean;
|
|
16
16
|
export declare function fileLockSyncRootDirectoryReceiptStillCurrent(pathAuthority: FileLockSyncRootPath, receipt: FileLockSyncRootDirectoryReceipt): boolean;
|
|
17
|
-
//# sourceMappingURL=file-lock-sync-root-mutation.d.ts.map
|
|
@@ -76,7 +76,7 @@ function ensureParent(pathAuthority) {
|
|
|
76
76
|
assertDirectoryCurrent(currentReceipt);
|
|
77
77
|
return currentReceipt;
|
|
78
78
|
}
|
|
79
|
-
export function createFileLockSyncRootFile(pathAuthority,
|
|
79
|
+
export function createFileLockSyncRootFile(pathAuthority, options) {
|
|
80
80
|
const parent = ensureParent(pathAuthority);
|
|
81
81
|
if (invokeFileLockSyncRootMutationAuthority(pathAuthority.authority)) {
|
|
82
82
|
assertFileLockSyncRootResolvedPathCurrent(pathAuthority);
|
|
@@ -88,12 +88,12 @@ export function createFileLockSyncRootFile(pathAuthority, mode, options = {}) {
|
|
|
88
88
|
let fd;
|
|
89
89
|
let receipt;
|
|
90
90
|
try {
|
|
91
|
-
options.assertBeforeOpen
|
|
91
|
+
options.assertBeforeOpen();
|
|
92
92
|
try {
|
|
93
|
-
fd = fs.openSync(pathForWindowsFilesystem(pathAuthority.path), fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | noFollow,
|
|
93
|
+
fd = fs.openSync(pathForWindowsFilesystem(pathAuthority.path), fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | noFollow, 0o600);
|
|
94
94
|
}
|
|
95
95
|
catch (error) {
|
|
96
|
-
options.onOpenFailure
|
|
96
|
+
options.onOpenFailure(error);
|
|
97
97
|
throw error;
|
|
98
98
|
}
|
|
99
99
|
const opened = inspectFileIdentitySync(() => fs.fstatSync(fd, { bigint: true }));
|
|
@@ -193,11 +193,9 @@ export function removeFileLockSyncRootFile(pathAuthority, receipt, expected, ass
|
|
|
193
193
|
}
|
|
194
194
|
throw new FsSafeError("path-mismatch", "sidecar lock was replaced during removal");
|
|
195
195
|
}
|
|
196
|
-
export function fileLockSyncRootGuardExists(pathAuthority
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
// A shared path admission may skip only duplicate resolution, never this
|
|
200
|
-
// operation-local Root identity fence before fresh directory inspection.
|
|
196
|
+
export function fileLockSyncRootGuardExists(pathAuthority) {
|
|
197
|
+
// The caller already admitted this path; every guard observation still needs
|
|
198
|
+
// an operation-local Root identity fence before fresh directory inspection.
|
|
201
199
|
assertRootIdentityCurrentSync(pathAuthority.authority.context);
|
|
202
200
|
let stat;
|
|
203
201
|
try {
|
|
@@ -17,4 +17,3 @@ type CapturedRootSyncAcquireOptions<TPayload extends Record<string, unknown>> =
|
|
|
17
17
|
}>;
|
|
18
18
|
export declare function captureRootSyncAcquireOptions<TPayload extends Record<string, unknown>>(options: FileLockSyncAcquireOptions<TPayload>): CapturedRootSyncAcquireOptions<TPayload>;
|
|
19
19
|
export {};
|
|
20
|
-
//# sourceMappingURL=file-lock-sync-root-options.d.ts.map
|
|
@@ -30,7 +30,6 @@ type RootPathResolutionPolicy = Readonly<{
|
|
|
30
30
|
}>;
|
|
31
31
|
export declare function admitFileLockSyncRootPath(authority: FileLockSyncRootAuthority, requestedPath: string): FileLockSyncRootPath;
|
|
32
32
|
export declare function assertFileLockSyncRootResolvedPathCurrent(pathAuthority: FileLockSyncRootPath): void;
|
|
33
|
-
export declare function assertFileLockSyncRootPathsCurrent(paths: readonly FileLockSyncRootPath[]
|
|
33
|
+
export declare function assertFileLockSyncRootPathsCurrent(paths: readonly FileLockSyncRootPath[]): void;
|
|
34
34
|
export declare function normalizeFileLockSyncTargetWithRoot(authority: FileLockSyncRootAuthority, resolvedTargetPath: string): string;
|
|
35
35
|
export {};
|
|
36
|
-
//# sourceMappingURL=file-lock-sync-root.d.ts.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import {} from "./deny-mutations.js";
|
|
3
|
+
import { assertMutationNotDenied } from "./deny-mutations.js";
|
|
4
4
|
import { FsSafeError } from "./errors.js";
|
|
5
|
-
import { assertNoNulPathInput, isNotFoundPathError
|
|
5
|
+
import { assertNoNulPathInput, isNotFoundPathError } from "./path.js";
|
|
6
6
|
import { resolveRootPathSync } from "./root-path.js";
|
|
7
7
|
import { isRootPathEscapeError } from "./root-path-errors.js";
|
|
8
8
|
import { admitPathInsideRoot } from "./root-boundary.js";
|
|
@@ -100,68 +100,8 @@ function absoluteRootPath(authority, relativePath) {
|
|
|
100
100
|
assertNoWindowsPathAlias(absolute, "filesystem", "sidecar lock path uses a Windows filesystem namespace alias");
|
|
101
101
|
return absolute;
|
|
102
102
|
}
|
|
103
|
-
function assertValidPolicyEntries(entries) {
|
|
104
|
-
const captured = [];
|
|
105
|
-
for (const entry of entries ?? []) {
|
|
106
|
-
if (!entry || !path.isAbsolute(entry)) {
|
|
107
|
-
throw new FsSafeError("invalid-path", "deny mutation paths must be non-empty absolute paths");
|
|
108
|
-
}
|
|
109
|
-
assertNoNulPathInput(entry, "deny mutation path contains a NUL byte");
|
|
110
|
-
assertNoWindowsPathAlias(entry, "filesystem", "deny mutation path uses a Windows filesystem namespace alias");
|
|
111
|
-
captured.push(resolvePathPreservingWindowsRoot(entry));
|
|
112
|
-
}
|
|
113
|
-
return captured;
|
|
114
|
-
}
|
|
115
|
-
function mutationComparablePaths(pathname) {
|
|
116
|
-
const resolved = resolvePathPreservingWindowsRoot(pathname);
|
|
117
|
-
assertNoWindowsPathAlias(resolved, "filesystem", "mutation path uses a Windows filesystem namespace alias");
|
|
118
|
-
let cursor = resolved;
|
|
119
|
-
const missing = [];
|
|
120
|
-
while (path.parse(cursor).root !== cursor) {
|
|
121
|
-
try {
|
|
122
|
-
fs.lstatSync(pathForWindowsFilesystem(cursor));
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
if (!isNotFoundPathError(error))
|
|
127
|
-
throw error;
|
|
128
|
-
missing.unshift(path.basename(cursor));
|
|
129
|
-
cursor = path.dirname(cursor);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
// Deny policy is an authority boundary: unlike advisory key normalization,
|
|
133
|
-
// an ambiguous existing ancestor must not silently fall back to lexical form.
|
|
134
|
-
const canonicalAncestor = realpathSync.native(pathForWindowsFilesystem(cursor));
|
|
135
|
-
assertNoWindowsPathAlias(canonicalAncestor, "filesystem", "mutation path uses a Windows filesystem namespace alias");
|
|
136
|
-
const canonical = missing.length === 0
|
|
137
|
-
? canonicalAncestor
|
|
138
|
-
: path.resolve(canonicalAncestor, ...missing);
|
|
139
|
-
assertNoWindowsPathAlias(canonical, "filesystem", "mutation path uses a Windows filesystem namespace alias");
|
|
140
|
-
return samePath(resolved, canonical) ? [resolved] : [resolved, canonical];
|
|
141
|
-
}
|
|
142
103
|
export function assertFileLockSyncRootMutationAllowed(pathname, policy, protectAncestors = false) {
|
|
143
|
-
|
|
144
|
-
return;
|
|
145
|
-
const targets = mutationComparablePaths(pathname);
|
|
146
|
-
for (const entry of assertValidPolicyEntries(policy.paths)) {
|
|
147
|
-
for (const denied of mutationComparablePaths(entry)) {
|
|
148
|
-
for (const target of targets) {
|
|
149
|
-
if ((isPathInside(denied, target) && isPathInside(target, denied)) ||
|
|
150
|
-
(protectAncestors && isPathInside(target, denied))) {
|
|
151
|
-
throw new FsSafeError("denied-path", "path is denied by denyMutations policy");
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
for (const entry of assertValidPolicyEntries(policy.prefixes)) {
|
|
157
|
-
for (const denied of mutationComparablePaths(entry)) {
|
|
158
|
-
for (const target of targets) {
|
|
159
|
-
if (isPathInside(denied, target) || (protectAncestors && isPathInside(target, denied))) {
|
|
160
|
-
throw new FsSafeError("denied-path", "path is denied by denyMutations policy");
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
104
|
+
assertMutationNotDenied(pathname, policy, { protectAncestors }, "sync-root-lock");
|
|
165
105
|
}
|
|
166
106
|
function resolveAdmittedPath(authority, absolutePath, policy, rootPath) {
|
|
167
107
|
const context = authority.context;
|
|
@@ -279,24 +219,14 @@ function assertMissingParentMutationsAllowed(pathAuthority) {
|
|
|
279
219
|
assertFileLockSyncRootMutationAllowed(current, authority.denyMutations);
|
|
280
220
|
}
|
|
281
221
|
}
|
|
282
|
-
export function assertFileLockSyncRootPathsCurrent(paths
|
|
222
|
+
export function assertFileLockSyncRootPathsCurrent(paths) {
|
|
283
223
|
const authority = paths[0]?.authority;
|
|
284
224
|
for (const pathAuthority of paths) {
|
|
285
225
|
if (authority && pathAuthority.authority !== authority) {
|
|
286
226
|
throw new FsSafeError("path-mismatch", "sidecar paths use different Root authority");
|
|
287
227
|
}
|
|
288
228
|
}
|
|
289
|
-
if (
|
|
290
|
-
if (authority)
|
|
291
|
-
assertRootIdentityCurrentSync(authority.context);
|
|
292
|
-
for (const pathAuthority of paths) {
|
|
293
|
-
assertFileLockSyncRootResolvedPathCurrent(pathAuthority);
|
|
294
|
-
assertMissingParentMutationsAllowed(pathAuthority);
|
|
295
|
-
}
|
|
296
|
-
if (authority)
|
|
297
|
-
assertRootIdentityCurrentSync(authority.context);
|
|
298
|
-
}
|
|
299
|
-
if (invokeAuthority && authority && invokeFileLockSyncRootMutationAuthority(authority)) {
|
|
229
|
+
if (authority && invokeFileLockSyncRootMutationAuthority(authority)) {
|
|
300
230
|
assertRootIdentityCurrentSync(authority.context);
|
|
301
231
|
for (const pathAuthority of paths) {
|
|
302
232
|
assertFileLockSyncRootResolvedPathCurrent(pathAuthority);
|
|
@@ -309,16 +239,13 @@ function resolveTargetPathViaExistingAncestorSync(targetPath) {
|
|
|
309
239
|
const normalized = resolvePathPreservingWindowsRoot(targetPath);
|
|
310
240
|
const canonicalize = process.platform === "win32" ? realpathSync.native : realpathSync;
|
|
311
241
|
let cursor = normalized;
|
|
312
|
-
|
|
242
|
+
let canonicalAncestor;
|
|
313
243
|
while (true) {
|
|
314
244
|
try {
|
|
315
245
|
fs.lstatSync(pathForWindowsFilesystem(cursor));
|
|
316
246
|
try {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
return missing.length === 0
|
|
320
|
-
? resolvePathPreservingWindowsRoot(canonicalAncestor)
|
|
321
|
-
: resolvePathPreservingWindowsRoot(path.resolve(canonicalAncestor, ...missing));
|
|
247
|
+
canonicalAncestor = canonicalize(pathForWindowsFilesystem(cursor));
|
|
248
|
+
break;
|
|
322
249
|
}
|
|
323
250
|
catch (error) {
|
|
324
251
|
if (!isNotFoundPathError(error))
|
|
@@ -336,15 +263,15 @@ function resolveTargetPathViaExistingAncestorSync(targetPath) {
|
|
|
336
263
|
if (parent === cursor) {
|
|
337
264
|
// Filesystem roots are expected to exist; preserve the underlying
|
|
338
265
|
// not-found diagnosis if a synthetic namespace violates that premise.
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
return missing.length === 0
|
|
342
|
-
? resolvePathPreservingWindowsRoot(canonicalAncestor)
|
|
343
|
-
: resolvePathPreservingWindowsRoot(path.resolve(canonicalAncestor, ...missing));
|
|
266
|
+
canonicalAncestor = canonicalize(pathForWindowsFilesystem(cursor));
|
|
267
|
+
break;
|
|
344
268
|
}
|
|
345
|
-
missing.unshift(path.basename(cursor));
|
|
346
269
|
cursor = parent;
|
|
347
270
|
}
|
|
271
|
+
assertNoWindowsPathAlias(canonicalAncestor, "filesystem", "file-lock target ancestor uses a Windows filesystem namespace alias");
|
|
272
|
+
return resolvePathPreservingWindowsRoot(cursor === normalized
|
|
273
|
+
? canonicalAncestor
|
|
274
|
+
: path.resolve(canonicalAncestor, `.${path.sep}${normalized.slice(cursor.length)}`));
|
|
348
275
|
}
|
|
349
276
|
export function normalizeFileLockSyncTargetWithRoot(authority, resolvedTargetPath) {
|
|
350
277
|
assertNoNulPathInput(resolvedTargetPath, "file-lock target contains a NUL byte");
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FileLockSyncAcquireOptions } from "./file-lock-sync.js";
|
|
2
|
+
import type { SyncLockAcquisition } from "./file-lock-sync-acquisition.js";
|
|
2
3
|
import type { SidecarLockStaleRecovery } from "./sidecar-lock-types.js";
|
|
3
4
|
export type SyncStaleOptionsState<TPayload extends Record<string, unknown>> = {
|
|
4
5
|
shouldReclaimObserved?: boolean;
|
|
@@ -7,18 +8,12 @@ export type SyncStaleOptionsState<TPayload extends Record<string, unknown>> = {
|
|
|
7
8
|
shouldRemove?: FileLockSyncAcquireOptions<TPayload>["shouldRemoveStaleLock"];
|
|
8
9
|
};
|
|
9
10
|
/** Handle one exclusive-create conflict without surrendering canonical admission. */
|
|
10
|
-
export declare function handleSyncStaleAdmission<TPayload extends Record<string, unknown>>(params: {
|
|
11
|
-
hasToken(): boolean;
|
|
11
|
+
export declare function handleSyncStaleAdmission<TPayload extends Record<string, unknown>>(acquisition: SyncLockAcquisition, params: {
|
|
12
12
|
currentHeld(): unknown;
|
|
13
|
-
lockPath: string;
|
|
14
|
-
normalizedTargetPath: string;
|
|
15
13
|
options: FileLockSyncAcquireOptions<TPayload>;
|
|
16
14
|
parsePayload?: (raw: string) => unknown;
|
|
17
15
|
reclaimGuardPath: string;
|
|
18
|
-
retryLockFileDenial(error: unknown): boolean;
|
|
19
16
|
staleMs: number;
|
|
20
17
|
staleOptions: SyncStaleOptionsState<TPayload>;
|
|
21
18
|
staleRecovery?: SidecarLockStaleRecovery;
|
|
22
|
-
waitForRetry(): void;
|
|
23
19
|
}): void;
|
|
24
|
-
//# sourceMappingURL=file-lock-sync-stale-admission.d.ts.map
|