@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.
Files changed (644) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/absolute-path.d.ts +0 -1
  3. package/dist/advanced.d.ts +0 -1
  4. package/dist/archive-crc32.d.ts +0 -1
  5. package/dist/archive-deadline.d.ts +0 -1
  6. package/dist/archive-durability.d.ts +0 -1
  7. package/dist/archive-entry.d.ts +0 -1
  8. package/dist/archive-errors.d.ts +0 -1
  9. package/dist/archive-gzip-tail.d.ts +0 -1
  10. package/dist/archive-input.d.ts +0 -1
  11. package/dist/archive-kind.d.ts +0 -1
  12. package/dist/archive-limits.d.ts +0 -1
  13. package/dist/archive-merge.d.ts +2 -4
  14. package/dist/archive-merge.js +14 -4
  15. package/dist/archive-native.d.ts +3 -15
  16. package/dist/archive-native.js +46 -71
  17. package/dist/archive-options.d.ts +7 -2
  18. package/dist/archive-parser-errors.d.ts +0 -1
  19. package/dist/archive-plan.d.ts +10 -1
  20. package/dist/archive-plan.js +31 -21
  21. package/dist/archive-policy.d.ts +0 -1
  22. package/dist/archive-read.d.ts +0 -1
  23. package/dist/archive-staging.d.ts +0 -1
  24. package/dist/archive-tar-inspect.d.ts +0 -1
  25. package/dist/archive-tar-stream.d.ts +0 -1
  26. package/dist/archive-tar-wasm.d.ts +0 -1
  27. package/dist/archive-tar.d.ts +0 -1
  28. package/dist/archive-zip-admission.d.ts +0 -1
  29. package/dist/archive-zip-count.d.ts +0 -1
  30. package/dist/archive-zip-directory.d.ts +0 -1
  31. package/dist/archive-zip-entry.d.ts +0 -1
  32. package/dist/archive-zip-integrity.d.ts +0 -1
  33. package/dist/archive-zip-loader.d.ts +0 -1
  34. package/dist/archive-zip-manifest.d.ts +0 -1
  35. package/dist/archive-zip-names.d.ts +0 -1
  36. package/dist/archive-zip-preflight.d.ts +0 -1
  37. package/dist/archive.d.ts +0 -1
  38. package/dist/archive.js +87 -164
  39. package/dist/async-lock.d.ts +0 -1
  40. package/dist/atomic.d.ts +0 -1
  41. package/dist/bounded-read-stream.d.ts +0 -1
  42. package/dist/bounded-read.d.ts +0 -1
  43. package/dist/byte-budget.d.ts +0 -1
  44. package/dist/byte-view.d.ts +0 -1
  45. package/dist/clone-metadata.d.ts +0 -1
  46. package/dist/config.d.ts +0 -1
  47. package/dist/containment.d.ts +0 -1
  48. package/dist/copy-file-input.d.ts +0 -1
  49. package/dist/copy-policy.d.ts +0 -1
  50. package/dist/copy-publication.d.ts +0 -1
  51. package/dist/copy-tree-portable.d.ts +0 -1
  52. package/dist/copy-tree-portable.js +9 -6
  53. package/dist/copy.d.ts +0 -1
  54. package/dist/copy.js +5 -5
  55. package/dist/create-directory.d.ts +0 -2
  56. package/dist/create-directory.js +3 -22
  57. package/dist/create-file-async.d.ts +0 -1
  58. package/dist/create-file.d.ts +0 -1
  59. package/dist/create-file.js +3 -14
  60. package/dist/create-owned-file.d.ts +0 -1
  61. package/dist/create.d.ts +1 -2
  62. package/dist/create.js +1 -1
  63. package/dist/creation-darwin.d.ts +0 -1
  64. package/dist/creation-file-state.d.ts +0 -1
  65. package/dist/creation-path.d.ts +2 -1
  66. package/dist/creation-path.js +12 -0
  67. package/dist/creation-permissions.d.ts +0 -1
  68. package/dist/creation-permissions.js +28 -38
  69. package/dist/deny-mutations.d.ts +2 -3
  70. package/dist/deny-mutations.js +55 -35
  71. package/dist/device-path.d.ts +0 -1
  72. package/dist/directory-durability.d.ts +0 -1
  73. package/dist/directory-entry-path.d.ts +0 -1
  74. package/dist/directory-guard.d.ts +2 -7
  75. package/dist/directory-guard.js +25 -56
  76. package/dist/directory-mode-node.d.ts +0 -1
  77. package/dist/directory-mode-owner.d.ts +0 -1
  78. package/dist/directory-receipt.d.ts +0 -1
  79. package/dist/durability.d.ts +0 -1
  80. package/dist/effective-uid.d.ts +0 -1
  81. package/dist/error-detail.d.ts +0 -1
  82. package/dist/errors.d.ts +0 -1
  83. package/dist/file-cleanup.d.ts +0 -1
  84. package/dist/file-contents.d.ts +0 -1
  85. package/dist/file-handle-transfer.d.ts +0 -1
  86. package/dist/file-hash.d.ts +0 -1
  87. package/dist/file-hash.js +170 -66
  88. package/dist/file-identity.d.ts +0 -1
  89. package/dist/file-lock-sync-acquisition.d.ts +22 -0
  90. package/dist/file-lock-sync-acquisition.js +98 -0
  91. package/dist/file-lock-sync-admission.d.ts +0 -2
  92. package/dist/file-lock-sync-admission.js +9 -48
  93. package/dist/file-lock-sync-root-acquire.d.ts +0 -1
  94. package/dist/file-lock-sync-root-acquire.js +32 -98
  95. package/dist/file-lock-sync-root-arbitration.d.ts +0 -1
  96. package/dist/file-lock-sync-root-held.d.ts +0 -1
  97. package/dist/file-lock-sync-root-io.d.ts +0 -1
  98. package/dist/file-lock-sync-root-mutation.d.ts +4 -5
  99. package/dist/file-lock-sync-root-mutation.js +7 -9
  100. package/dist/file-lock-sync-root-options.d.ts +0 -1
  101. package/dist/file-lock-sync-root-registration.d.ts +0 -1
  102. package/dist/file-lock-sync-root.d.ts +1 -2
  103. package/dist/file-lock-sync-root.js +14 -87
  104. package/dist/file-lock-sync-stale-admission.d.ts +2 -7
  105. package/dist/file-lock-sync-stale-admission.js +21 -23
  106. package/dist/file-lock-sync.d.ts +0 -1
  107. package/dist/file-lock-sync.js +38 -117
  108. package/dist/file-lock.d.ts +0 -1
  109. package/dist/file-observation.d.ts +0 -1
  110. package/dist/file-store-boundary.d.ts +0 -2
  111. package/dist/file-store-boundary.js +6 -26
  112. package/dist/file-store-copy-source.d.ts +1 -2
  113. package/dist/file-store-copy-source.js +1 -1
  114. package/dist/file-store-limit.d.ts +1 -2
  115. package/dist/file-store-limit.js +2 -3
  116. package/dist/file-store-path.d.ts +0 -1
  117. package/dist/file-store-prune.d.ts +0 -1
  118. package/dist/file-store-sync-directory.d.ts +0 -1
  119. package/dist/file-store-sync-directory.js +194 -231
  120. package/dist/file-store-sync-write.d.ts +0 -1
  121. package/dist/file-store-sync-write.js +16 -26
  122. package/dist/file-store.d.ts +0 -1
  123. package/dist/file-store.js +3 -4
  124. package/dist/file-sync.d.ts +0 -1
  125. package/dist/filename.d.ts +0 -1
  126. package/dist/filename.js +1 -7
  127. package/dist/fs.d.ts +0 -1
  128. package/dist/guarded-mkdir.d.ts +0 -1
  129. package/dist/guarded-mutation.d.ts +0 -7
  130. package/dist/guarded-mutation.js +6 -11
  131. package/dist/guest-dispatch-python.d.ts +0 -1
  132. package/dist/guest-dispatch-python.js +41 -90
  133. package/dist/guest-native-python.d.ts +0 -1
  134. package/dist/guest.d.ts +0 -1
  135. package/dist/home-dir.d.ts +0 -1
  136. package/dist/index.d.ts +0 -1
  137. package/dist/install-path.d.ts +0 -1
  138. package/dist/json-document-store.d.ts +0 -1
  139. package/dist/json-durable-queue-directory.d.ts +13 -1
  140. package/dist/json-durable-queue-directory.js +134 -0
  141. package/dist/json-durable-queue-ownership.d.ts +0 -1
  142. package/dist/json-durable-queue-ownership.js +42 -61
  143. package/dist/json-durable-queue-read.d.ts +0 -1
  144. package/dist/json-durable-queue-read.js +6 -6
  145. package/dist/json-durable-queue.d.ts +0 -1
  146. package/dist/json-durable-queue.js +7 -130
  147. package/dist/json-store.d.ts +0 -1
  148. package/dist/json-stringify.d.ts +0 -1
  149. package/dist/json.d.ts +0 -1
  150. package/dist/json.js +6 -15
  151. package/dist/local-file-access.d.ts +0 -1
  152. package/dist/local-file-access.js +3 -10
  153. package/dist/local-file-descriptor.d.ts +0 -1
  154. package/dist/local-roots.d.ts +0 -1
  155. package/dist/lock-config.d.ts +0 -1
  156. package/dist/move-path-cleanup.d.ts +0 -1
  157. package/dist/move-path-stage.d.ts +0 -1
  158. package/dist/move-path.d.ts +0 -1
  159. package/dist/mutation-authority.d.ts +0 -1
  160. package/dist/native-binding.d.ts +0 -1
  161. package/dist/native-config.d.ts +0 -1
  162. package/dist/native-directory-observation.d.ts +0 -1
  163. package/dist/native-fallback-warning.d.ts +0 -1
  164. package/dist/native-operations.d.ts +1 -5
  165. package/dist/native-operations.js +2 -6
  166. package/dist/native-parent-admission.d.ts +0 -1
  167. package/dist/native-pinned-write-windows.d.ts +0 -1
  168. package/dist/native-pinned-write.d.ts +0 -1
  169. package/dist/native-pinned-write.js +4 -10
  170. package/dist/native-policy-directory-observation.d.ts +0 -1
  171. package/dist/native-policy-parent-windows.d.ts +0 -1
  172. package/dist/native-rename-outcome.d.ts +0 -1
  173. package/dist/native-staged-file.d.ts +15 -3
  174. package/dist/native-staged-file.js +55 -63
  175. package/dist/native.d.ts +0 -1
  176. package/dist/opened-file-failure.d.ts +0 -1
  177. package/dist/opened-realpath.d.ts +0 -1
  178. package/dist/output.d.ts +0 -1
  179. package/dist/overwrite-file-handle.d.ts +0 -1
  180. package/dist/owner-dacl.d.ts +0 -1
  181. package/dist/path-case.d.ts +0 -1
  182. package/dist/path-policy.d.ts +0 -1
  183. package/dist/path-prefix.d.ts +0 -1
  184. package/dist/path-scope-lexical.d.ts +0 -1
  185. package/dist/path-segment-route.d.ts +0 -1
  186. package/dist/path-suffix-aliases.d.ts +0 -1
  187. package/dist/path.d.ts +0 -1
  188. package/dist/permission-exec.d.ts +0 -1
  189. package/dist/permission-exec.js +19 -25
  190. package/dist/permissions-public.d.ts +0 -1
  191. package/dist/permissions-windows.d.ts +2 -10
  192. package/dist/permissions-windows.js +10 -30
  193. package/dist/permissions.d.ts +0 -1
  194. package/dist/permissions.js +8 -16
  195. package/dist/pinned-mutation-admission.d.ts +0 -1
  196. package/dist/pinned-mutation-observation.d.ts +0 -1
  197. package/dist/pinned-mutation-shared-route.d.ts +0 -1
  198. package/dist/pinned-open.d.ts +1 -1
  199. package/dist/pinned-open.js +1 -1
  200. package/dist/pinned-operation.d.ts +0 -1
  201. package/dist/pinned-write-input.d.ts +0 -1
  202. package/dist/pinned-write-mode.d.ts +0 -1
  203. package/dist/pinned-write-staged.d.ts +0 -1
  204. package/dist/pinned-write-types.d.ts +9 -21
  205. package/dist/pinned-write.d.ts +0 -1
  206. package/dist/positional-read.d.ts +0 -1
  207. package/dist/private-directory.d.ts +0 -1
  208. package/dist/private-producer-handoff-sync.d.ts +0 -1
  209. package/dist/private-producer-handoff-sync.js +9 -51
  210. package/dist/private-producer-handoff.d.ts +20 -1
  211. package/dist/private-producer-handoff.js +69 -46
  212. package/dist/private-temp-workspace.d.ts +0 -1
  213. package/dist/private-temp-workspace.js +11 -36
  214. package/dist/publish-copy-stage.d.ts +0 -1
  215. package/dist/publish-file-failure.d.ts +0 -1
  216. package/dist/publish-file.d.ts +0 -1
  217. package/dist/read-open-flags.d.ts +0 -1
  218. package/dist/read-opened-file.d.ts +0 -1
  219. package/dist/realpath.d.ts +0 -1
  220. package/dist/recursive-mkdir-path.d.ts +0 -1
  221. package/dist/regular-file.d.ts +0 -1
  222. package/dist/regular-file.js +77 -139
  223. package/dist/replace-directory.d.ts +0 -1
  224. package/dist/replace-file-copy-fallback.d.ts +0 -1
  225. package/dist/replace-file-copy-fallback.js +14 -3
  226. package/dist/replace-file-copy-source.d.ts +0 -1
  227. package/dist/replace-file-copy-source.js +6 -1
  228. package/dist/replace-file-descriptor.d.ts +0 -1
  229. package/dist/replace-file-descriptor.js +6 -1
  230. package/dist/replace-file-mode.d.ts +0 -1
  231. package/dist/replace-file-rename-policy.d.ts +0 -1
  232. package/dist/replace-file-temp-owner.d.ts +12 -13
  233. package/dist/replace-file-temp-owner.js +66 -85
  234. package/dist/replace-file.d.ts +0 -1
  235. package/dist/retained-directory-replacement.d.ts +0 -1
  236. package/dist/root-boundary.d.ts +0 -1
  237. package/dist/root-context.d.ts +0 -1
  238. package/dist/root-create-input.d.ts +0 -1
  239. package/dist/root-directory-creation.d.ts +0 -1
  240. package/dist/root-directory-list.d.ts +0 -1
  241. package/dist/root-directory.d.ts +0 -1
  242. package/dist/root-entries.d.ts +0 -1
  243. package/dist/root-errors.d.ts +0 -1
  244. package/dist/root-file-final-admission.d.ts +0 -1
  245. package/dist/root-file.d.ts +0 -1
  246. package/dist/root-impl.d.ts +2 -10
  247. package/dist/root-impl.js +114 -91
  248. package/dist/root-move-noreplace.d.ts +0 -1
  249. package/dist/root-move-preflight.d.ts +0 -1
  250. package/dist/root-observed-path.d.ts +0 -1
  251. package/dist/root-options.d.ts +0 -1
  252. package/dist/root-path-errors.d.ts +0 -1
  253. package/dist/root-path-existing.d.ts +3 -1
  254. package/dist/root-path-existing.js +39 -18
  255. package/dist/root-path-observation.d.ts +0 -1
  256. package/dist/root-path-stat.d.ts +0 -1
  257. package/dist/root-path.d.ts +0 -1
  258. package/dist/root-path.js +60 -188
  259. package/dist/root-paths-lexical.d.ts +0 -1
  260. package/dist/root-paths.d.ts +0 -1
  261. package/dist/root-read-admission.d.ts +0 -1
  262. package/dist/root-read-admission.js +31 -44
  263. package/dist/root-remove-identity.d.ts +0 -1
  264. package/dist/root-remove-receipt.d.ts +0 -1
  265. package/dist/root-remove.d.ts +0 -1
  266. package/dist/root-symlink-policy.d.ts +0 -1
  267. package/dist/root-walk.d.ts +0 -1
  268. package/dist/root-write-admission.d.ts +0 -1
  269. package/dist/root-write-compatibility.d.ts +0 -1
  270. package/dist/root-write-complete-parent.d.ts +0 -1
  271. package/dist/root-write-lock-binding.d.ts +0 -1
  272. package/dist/root-write-mode.d.ts +0 -1
  273. package/dist/root-write-publication.d.ts +0 -1
  274. package/dist/root-write-verification.d.ts +0 -1
  275. package/dist/root.d.ts +0 -1
  276. package/dist/safe-path-segment.d.ts +1 -2
  277. package/dist/safe-path-segment.js +2 -5
  278. package/dist/secret-file.d.ts +0 -1
  279. package/dist/secret-file.js +7 -17
  280. package/dist/secret-read-async.d.ts +0 -1
  281. package/dist/secret-read-async.js +5 -5
  282. package/dist/secret-read-policy.d.ts +0 -1
  283. package/dist/secret.d.ts +0 -1
  284. package/dist/secure-file-windows.d.ts +0 -6
  285. package/dist/secure-file-windows.js +13 -28
  286. package/dist/secure-file.d.ts +0 -1
  287. package/dist/secure-file.js +9 -9
  288. package/dist/secure-temp-dir.d.ts +0 -1
  289. package/dist/secure-temp-repair.d.ts +0 -1
  290. package/dist/sibling-staged-file.d.ts +0 -1
  291. package/dist/sibling-staged-file.js +32 -39
  292. package/dist/sibling-temp.d.ts +0 -1
  293. package/dist/sidecar-lock-acquire.d.ts +1 -2
  294. package/dist/sidecar-lock-acquire.js +31 -52
  295. package/dist/sidecar-lock-admission-context.d.ts +0 -1
  296. package/dist/sidecar-lock-admission-parser.d.ts +0 -1
  297. package/dist/sidecar-lock-admission.d.ts +1 -5
  298. package/dist/sidecar-lock-admission.js +1 -7
  299. package/dist/sidecar-lock-handle.d.ts +0 -1
  300. package/dist/sidecar-lock-policy.d.ts +3 -1
  301. package/dist/sidecar-lock-policy.js +16 -0
  302. package/dist/sidecar-lock-reclaim.d.ts +0 -1
  303. package/dist/sidecar-lock-registration.d.ts +13 -0
  304. package/dist/sidecar-lock-registration.js +47 -0
  305. package/dist/sidecar-lock-root.d.ts +0 -1
  306. package/dist/sidecar-lock-stale-admission.d.ts +0 -1
  307. package/dist/sidecar-lock-target.d.ts +0 -1
  308. package/dist/sidecar-lock-types.d.ts +0 -1
  309. package/dist/sidecar-lock.d.ts +0 -1
  310. package/dist/sidecar-lock.js +16 -83
  311. package/dist/staged-directory.d.ts +0 -1
  312. package/dist/staged-file-settlement.d.ts +0 -1
  313. package/dist/staged-file-types.d.ts +0 -1
  314. package/dist/standalone-publication-path.d.ts +0 -1
  315. package/dist/stat-observation.d.ts +0 -1
  316. package/dist/store.d.ts +0 -1
  317. package/dist/strict-file-identity.d.ts +0 -1
  318. package/dist/string-coerce.d.ts +0 -1
  319. package/dist/suppressed-error.d.ts +0 -1
  320. package/dist/symlink-parents.d.ts +0 -1
  321. package/dist/temp-cleanup.d.ts +0 -1
  322. package/dist/temp-target.d.ts +0 -1
  323. package/dist/temp-target.js +7 -46
  324. package/dist/temp-workspace-admission.d.ts +0 -8
  325. package/dist/temp-workspace-admission.js +0 -4
  326. package/dist/temp-workspace-child-admission.d.ts +0 -4
  327. package/dist/temp-workspace-child-admission.js +0 -12
  328. package/dist/temp-workspace-descriptor.d.ts +0 -6
  329. package/dist/temp-workspace-descriptor.js +0 -2
  330. package/dist/temp-workspace-identity.d.ts +0 -1
  331. package/dist/temp-workspace-owner.d.ts +1 -1
  332. package/dist/temp-workspace-owner.js +45 -22
  333. package/dist/temp-workspace-permissions.d.ts +0 -1
  334. package/dist/temp-workspace-types.d.ts +0 -1
  335. package/dist/temp.d.ts +0 -1
  336. package/dist/test-hooks.d.ts +0 -1
  337. package/dist/text-atomic.d.ts +0 -1
  338. package/dist/timing.d.ts +0 -1
  339. package/dist/trash.d.ts +0 -1
  340. package/dist/types.d.ts +0 -1
  341. package/dist/unicode-path.d.ts +0 -1
  342. package/dist/walk.d.ts +0 -1
  343. package/dist/windows-command.d.ts +0 -1
  344. package/dist/windows-owner.d.ts +0 -1
  345. package/dist/windows-owner.js +4 -1
  346. package/dist/windows-path-alias.d.ts +0 -1
  347. package/dist/windows-path-alias.js +7 -43
  348. package/dist/windows-path-syntax.d.ts +5 -0
  349. package/dist/windows-path-syntax.js +21 -0
  350. package/dist/windows-security-command.d.ts +0 -1
  351. package/dist/windows-security-facts.d.ts +0 -1
  352. package/dist/write-file-handle.d.ts +0 -1
  353. package/dist/write-open-flags.d.ts +0 -1
  354. package/dist/write-queue.d.ts +0 -1
  355. package/docs/atomic.md +14 -0
  356. package/docs/copy.md +2 -0
  357. package/docs/mutation-policy-proof.md +6 -4
  358. package/docs/permissions.md +6 -0
  359. package/docs/root.md +10 -0
  360. package/docs/secret-file.md +4 -0
  361. package/docs/writing.md +9 -3
  362. package/package.json +8 -9
  363. package/dist/absolute-path.d.ts.map +0 -1
  364. package/dist/advanced.d.ts.map +0 -1
  365. package/dist/archive-crc32.d.ts.map +0 -1
  366. package/dist/archive-deadline.d.ts.map +0 -1
  367. package/dist/archive-durability.d.ts.map +0 -1
  368. package/dist/archive-entry.d.ts.map +0 -1
  369. package/dist/archive-errors.d.ts.map +0 -1
  370. package/dist/archive-gzip-tail.d.ts.map +0 -1
  371. package/dist/archive-input.d.ts.map +0 -1
  372. package/dist/archive-kind.d.ts.map +0 -1
  373. package/dist/archive-limits.d.ts.map +0 -1
  374. package/dist/archive-merge.d.ts.map +0 -1
  375. package/dist/archive-native.d.ts.map +0 -1
  376. package/dist/archive-options.d.ts.map +0 -1
  377. package/dist/archive-parser-errors.d.ts.map +0 -1
  378. package/dist/archive-plan.d.ts.map +0 -1
  379. package/dist/archive-policy.d.ts.map +0 -1
  380. package/dist/archive-read.d.ts.map +0 -1
  381. package/dist/archive-staging.d.ts.map +0 -1
  382. package/dist/archive-tar-inspect.d.ts.map +0 -1
  383. package/dist/archive-tar-stream.d.ts.map +0 -1
  384. package/dist/archive-tar-wasm.d.ts.map +0 -1
  385. package/dist/archive-tar.d.ts.map +0 -1
  386. package/dist/archive-zip-admission.d.ts.map +0 -1
  387. package/dist/archive-zip-count.d.ts.map +0 -1
  388. package/dist/archive-zip-directory.d.ts.map +0 -1
  389. package/dist/archive-zip-entry.d.ts.map +0 -1
  390. package/dist/archive-zip-integrity.d.ts.map +0 -1
  391. package/dist/archive-zip-loader.d.ts.map +0 -1
  392. package/dist/archive-zip-manifest.d.ts.map +0 -1
  393. package/dist/archive-zip-names.d.ts.map +0 -1
  394. package/dist/archive-zip-preflight.d.ts.map +0 -1
  395. package/dist/archive.d.ts.map +0 -1
  396. package/dist/async-lock.d.ts.map +0 -1
  397. package/dist/atomic.d.ts.map +0 -1
  398. package/dist/bounded-read-stream.d.ts.map +0 -1
  399. package/dist/bounded-read.d.ts.map +0 -1
  400. package/dist/byte-budget.d.ts.map +0 -1
  401. package/dist/byte-view.d.ts.map +0 -1
  402. package/dist/clone-metadata.d.ts.map +0 -1
  403. package/dist/config.d.ts.map +0 -1
  404. package/dist/containment.d.ts.map +0 -1
  405. package/dist/copy-file-input.d.ts.map +0 -1
  406. package/dist/copy-policy.d.ts.map +0 -1
  407. package/dist/copy-publication.d.ts.map +0 -1
  408. package/dist/copy-tree-portable.d.ts.map +0 -1
  409. package/dist/copy.d.ts.map +0 -1
  410. package/dist/create-directory.d.ts.map +0 -1
  411. package/dist/create-file-async.d.ts.map +0 -1
  412. package/dist/create-file.d.ts.map +0 -1
  413. package/dist/create-owned-file.d.ts.map +0 -1
  414. package/dist/create.d.ts.map +0 -1
  415. package/dist/creation-darwin.d.ts.map +0 -1
  416. package/dist/creation-file-state.d.ts.map +0 -1
  417. package/dist/creation-path.d.ts.map +0 -1
  418. package/dist/creation-permissions.d.ts.map +0 -1
  419. package/dist/deny-mutations.d.ts.map +0 -1
  420. package/dist/device-path.d.ts.map +0 -1
  421. package/dist/directory-durability.d.ts.map +0 -1
  422. package/dist/directory-entry-path.d.ts.map +0 -1
  423. package/dist/directory-guard.d.ts.map +0 -1
  424. package/dist/directory-mode-node.d.ts.map +0 -1
  425. package/dist/directory-mode-owner.d.ts.map +0 -1
  426. package/dist/directory-receipt.d.ts.map +0 -1
  427. package/dist/durability.d.ts.map +0 -1
  428. package/dist/effective-uid.d.ts.map +0 -1
  429. package/dist/error-detail.d.ts.map +0 -1
  430. package/dist/errors.d.ts.map +0 -1
  431. package/dist/file-cleanup.d.ts.map +0 -1
  432. package/dist/file-contents.d.ts.map +0 -1
  433. package/dist/file-handle-transfer.d.ts.map +0 -1
  434. package/dist/file-hash.d.ts.map +0 -1
  435. package/dist/file-identity.d.ts.map +0 -1
  436. package/dist/file-lock-sync-admission.d.ts.map +0 -1
  437. package/dist/file-lock-sync-root-acquire.d.ts.map +0 -1
  438. package/dist/file-lock-sync-root-arbitration.d.ts.map +0 -1
  439. package/dist/file-lock-sync-root-held.d.ts.map +0 -1
  440. package/dist/file-lock-sync-root-io.d.ts.map +0 -1
  441. package/dist/file-lock-sync-root-mutation.d.ts.map +0 -1
  442. package/dist/file-lock-sync-root-options.d.ts.map +0 -1
  443. package/dist/file-lock-sync-root-registration.d.ts.map +0 -1
  444. package/dist/file-lock-sync-root.d.ts.map +0 -1
  445. package/dist/file-lock-sync-stale-admission.d.ts.map +0 -1
  446. package/dist/file-lock-sync.d.ts.map +0 -1
  447. package/dist/file-lock.d.ts.map +0 -1
  448. package/dist/file-observation.d.ts.map +0 -1
  449. package/dist/file-store-boundary.d.ts.map +0 -1
  450. package/dist/file-store-copy-source.d.ts.map +0 -1
  451. package/dist/file-store-limit.d.ts.map +0 -1
  452. package/dist/file-store-path.d.ts.map +0 -1
  453. package/dist/file-store-prune.d.ts.map +0 -1
  454. package/dist/file-store-sync-directory.d.ts.map +0 -1
  455. package/dist/file-store-sync-write.d.ts.map +0 -1
  456. package/dist/file-store.d.ts.map +0 -1
  457. package/dist/file-sync.d.ts.map +0 -1
  458. package/dist/filename.d.ts.map +0 -1
  459. package/dist/fs.d.ts.map +0 -1
  460. package/dist/guarded-mkdir.d.ts.map +0 -1
  461. package/dist/guarded-mutation.d.ts.map +0 -1
  462. package/dist/guest-dispatch-python.d.ts.map +0 -1
  463. package/dist/guest-native-python.d.ts.map +0 -1
  464. package/dist/guest.d.ts.map +0 -1
  465. package/dist/home-dir.d.ts.map +0 -1
  466. package/dist/index.d.ts.map +0 -1
  467. package/dist/install-path.d.ts.map +0 -1
  468. package/dist/json-document-store.d.ts.map +0 -1
  469. package/dist/json-durable-queue-directory.d.ts.map +0 -1
  470. package/dist/json-durable-queue-ownership.d.ts.map +0 -1
  471. package/dist/json-durable-queue-paths.d.ts +0 -11
  472. package/dist/json-durable-queue-paths.d.ts.map +0 -1
  473. package/dist/json-durable-queue-paths.js +0 -20
  474. package/dist/json-durable-queue-read.d.ts.map +0 -1
  475. package/dist/json-durable-queue.d.ts.map +0 -1
  476. package/dist/json-store.d.ts.map +0 -1
  477. package/dist/json-stringify.d.ts.map +0 -1
  478. package/dist/json.d.ts.map +0 -1
  479. package/dist/local-file-access.d.ts.map +0 -1
  480. package/dist/local-file-descriptor.d.ts.map +0 -1
  481. package/dist/local-roots.d.ts.map +0 -1
  482. package/dist/lock-config.d.ts.map +0 -1
  483. package/dist/move-path-cleanup.d.ts.map +0 -1
  484. package/dist/move-path-stage.d.ts.map +0 -1
  485. package/dist/move-path.d.ts.map +0 -1
  486. package/dist/mutation-authority.d.ts.map +0 -1
  487. package/dist/native-binding.d.ts.map +0 -1
  488. package/dist/native-config.d.ts.map +0 -1
  489. package/dist/native-directory-observation.d.ts.map +0 -1
  490. package/dist/native-fallback-warning.d.ts.map +0 -1
  491. package/dist/native-operations.d.ts.map +0 -1
  492. package/dist/native-parent-admission.d.ts.map +0 -1
  493. package/dist/native-pinned-write-windows.d.ts.map +0 -1
  494. package/dist/native-pinned-write.d.ts.map +0 -1
  495. package/dist/native-policy-directory-observation.d.ts.map +0 -1
  496. package/dist/native-policy-parent-windows.d.ts.map +0 -1
  497. package/dist/native-rename-outcome.d.ts.map +0 -1
  498. package/dist/native-staged-file.d.ts.map +0 -1
  499. package/dist/native.d.ts.map +0 -1
  500. package/dist/opened-file-failure.d.ts.map +0 -1
  501. package/dist/opened-realpath.d.ts.map +0 -1
  502. package/dist/output.d.ts.map +0 -1
  503. package/dist/overwrite-file-handle.d.ts.map +0 -1
  504. package/dist/owner-dacl.d.ts.map +0 -1
  505. package/dist/path-case.d.ts.map +0 -1
  506. package/dist/path-policy.d.ts.map +0 -1
  507. package/dist/path-prefix.d.ts.map +0 -1
  508. package/dist/path-scope-lexical.d.ts.map +0 -1
  509. package/dist/path-segment-route.d.ts.map +0 -1
  510. package/dist/path-suffix-aliases.d.ts.map +0 -1
  511. package/dist/path.d.ts.map +0 -1
  512. package/dist/permission-exec.d.ts.map +0 -1
  513. package/dist/permissions-public.d.ts.map +0 -1
  514. package/dist/permissions-windows.d.ts.map +0 -1
  515. package/dist/permissions.d.ts.map +0 -1
  516. package/dist/pinned-mutation-admission.d.ts.map +0 -1
  517. package/dist/pinned-mutation-observation.d.ts.map +0 -1
  518. package/dist/pinned-mutation-shared-route.d.ts.map +0 -1
  519. package/dist/pinned-open.d.ts.map +0 -1
  520. package/dist/pinned-operation.d.ts.map +0 -1
  521. package/dist/pinned-write-input.d.ts.map +0 -1
  522. package/dist/pinned-write-mode.d.ts.map +0 -1
  523. package/dist/pinned-write-staged.d.ts.map +0 -1
  524. package/dist/pinned-write-types.d.ts.map +0 -1
  525. package/dist/pinned-write.d.ts.map +0 -1
  526. package/dist/positional-read.d.ts.map +0 -1
  527. package/dist/private-directory.d.ts.map +0 -1
  528. package/dist/private-producer-handoff-sync.d.ts.map +0 -1
  529. package/dist/private-producer-handoff.d.ts.map +0 -1
  530. package/dist/private-temp-workspace.d.ts.map +0 -1
  531. package/dist/publish-copy-stage.d.ts.map +0 -1
  532. package/dist/publish-file-failure.d.ts.map +0 -1
  533. package/dist/publish-file.d.ts.map +0 -1
  534. package/dist/read-open-flags.d.ts.map +0 -1
  535. package/dist/read-opened-file.d.ts.map +0 -1
  536. package/dist/realpath.d.ts.map +0 -1
  537. package/dist/recursive-mkdir-path.d.ts.map +0 -1
  538. package/dist/regular-file.d.ts.map +0 -1
  539. package/dist/replace-directory.d.ts.map +0 -1
  540. package/dist/replace-file-copy-fallback.d.ts.map +0 -1
  541. package/dist/replace-file-copy-source.d.ts.map +0 -1
  542. package/dist/replace-file-descriptor.d.ts.map +0 -1
  543. package/dist/replace-file-mode.d.ts.map +0 -1
  544. package/dist/replace-file-rename-policy.d.ts.map +0 -1
  545. package/dist/replace-file-temp-owner.d.ts.map +0 -1
  546. package/dist/replace-file.d.ts.map +0 -1
  547. package/dist/retained-directory-replacement.d.ts.map +0 -1
  548. package/dist/root-boundary.d.ts.map +0 -1
  549. package/dist/root-context.d.ts.map +0 -1
  550. package/dist/root-create-input.d.ts.map +0 -1
  551. package/dist/root-directory-creation.d.ts.map +0 -1
  552. package/dist/root-directory-list.d.ts.map +0 -1
  553. package/dist/root-directory.d.ts.map +0 -1
  554. package/dist/root-entries.d.ts.map +0 -1
  555. package/dist/root-errors.d.ts.map +0 -1
  556. package/dist/root-file-final-admission.d.ts.map +0 -1
  557. package/dist/root-file.d.ts.map +0 -1
  558. package/dist/root-impl.d.ts.map +0 -1
  559. package/dist/root-move-noreplace.d.ts.map +0 -1
  560. package/dist/root-move-preflight.d.ts.map +0 -1
  561. package/dist/root-observed-path.d.ts.map +0 -1
  562. package/dist/root-options.d.ts.map +0 -1
  563. package/dist/root-path-errors.d.ts.map +0 -1
  564. package/dist/root-path-existing.d.ts.map +0 -1
  565. package/dist/root-path-observation.d.ts.map +0 -1
  566. package/dist/root-path-stat.d.ts.map +0 -1
  567. package/dist/root-path-symlink.d.ts +0 -7
  568. package/dist/root-path-symlink.d.ts.map +0 -1
  569. package/dist/root-path-symlink.js +0 -55
  570. package/dist/root-path.d.ts.map +0 -1
  571. package/dist/root-paths-lexical.d.ts.map +0 -1
  572. package/dist/root-paths.d.ts.map +0 -1
  573. package/dist/root-read-admission.d.ts.map +0 -1
  574. package/dist/root-remove-identity.d.ts.map +0 -1
  575. package/dist/root-remove-receipt.d.ts.map +0 -1
  576. package/dist/root-remove.d.ts.map +0 -1
  577. package/dist/root-symlink-policy.d.ts.map +0 -1
  578. package/dist/root-walk.d.ts.map +0 -1
  579. package/dist/root-write-admission.d.ts.map +0 -1
  580. package/dist/root-write-compatibility.d.ts.map +0 -1
  581. package/dist/root-write-complete-parent.d.ts.map +0 -1
  582. package/dist/root-write-lock-binding.d.ts.map +0 -1
  583. package/dist/root-write-mode.d.ts.map +0 -1
  584. package/dist/root-write-publication.d.ts.map +0 -1
  585. package/dist/root-write-verification.d.ts.map +0 -1
  586. package/dist/root.d.ts.map +0 -1
  587. package/dist/safe-path-segment.d.ts.map +0 -1
  588. package/dist/secret-file.d.ts.map +0 -1
  589. package/dist/secret-read-async.d.ts.map +0 -1
  590. package/dist/secret-read-policy.d.ts.map +0 -1
  591. package/dist/secret.d.ts.map +0 -1
  592. package/dist/secure-file-windows.d.ts.map +0 -1
  593. package/dist/secure-file.d.ts.map +0 -1
  594. package/dist/secure-temp-dir.d.ts.map +0 -1
  595. package/dist/secure-temp-repair.d.ts.map +0 -1
  596. package/dist/sibling-staged-file.d.ts.map +0 -1
  597. package/dist/sibling-temp.d.ts.map +0 -1
  598. package/dist/sidecar-lock-acquire.d.ts.map +0 -1
  599. package/dist/sidecar-lock-admission-context.d.ts.map +0 -1
  600. package/dist/sidecar-lock-admission-parser.d.ts.map +0 -1
  601. package/dist/sidecar-lock-admission.d.ts.map +0 -1
  602. package/dist/sidecar-lock-handle.d.ts.map +0 -1
  603. package/dist/sidecar-lock-policy.d.ts.map +0 -1
  604. package/dist/sidecar-lock-reclaim.d.ts.map +0 -1
  605. package/dist/sidecar-lock-root.d.ts.map +0 -1
  606. package/dist/sidecar-lock-stale-admission.d.ts.map +0 -1
  607. package/dist/sidecar-lock-target.d.ts.map +0 -1
  608. package/dist/sidecar-lock-types.d.ts.map +0 -1
  609. package/dist/sidecar-lock.d.ts.map +0 -1
  610. package/dist/staged-directory.d.ts.map +0 -1
  611. package/dist/staged-file-settlement.d.ts.map +0 -1
  612. package/dist/staged-file-types.d.ts.map +0 -1
  613. package/dist/standalone-publication-path.d.ts.map +0 -1
  614. package/dist/stat-observation.d.ts.map +0 -1
  615. package/dist/store.d.ts.map +0 -1
  616. package/dist/strict-file-identity.d.ts.map +0 -1
  617. package/dist/string-coerce.d.ts.map +0 -1
  618. package/dist/suppressed-error.d.ts.map +0 -1
  619. package/dist/symlink-parents.d.ts.map +0 -1
  620. package/dist/temp-cleanup.d.ts.map +0 -1
  621. package/dist/temp-target.d.ts.map +0 -1
  622. package/dist/temp-workspace-admission.d.ts.map +0 -1
  623. package/dist/temp-workspace-child-admission.d.ts.map +0 -1
  624. package/dist/temp-workspace-descriptor.d.ts.map +0 -1
  625. package/dist/temp-workspace-identity.d.ts.map +0 -1
  626. package/dist/temp-workspace-owner.d.ts.map +0 -1
  627. package/dist/temp-workspace-permissions.d.ts.map +0 -1
  628. package/dist/temp-workspace-types.d.ts.map +0 -1
  629. package/dist/temp.d.ts.map +0 -1
  630. package/dist/test-hooks.d.ts.map +0 -1
  631. package/dist/text-atomic.d.ts.map +0 -1
  632. package/dist/timing.d.ts.map +0 -1
  633. package/dist/trash.d.ts.map +0 -1
  634. package/dist/types.d.ts.map +0 -1
  635. package/dist/unicode-path.d.ts.map +0 -1
  636. package/dist/walk.d.ts.map +0 -1
  637. package/dist/windows-command.d.ts.map +0 -1
  638. package/dist/windows-owner.d.ts.map +0 -1
  639. package/dist/windows-path-alias.d.ts.map +0 -1
  640. package/dist/windows-security-command.d.ts.map +0 -1
  641. package/dist/windows-security-facts.d.ts.map +0 -1
  642. package/dist/write-file-handle.d.ts.map +0 -1
  643. package/dist/write-open-flags.d.ts.map +0 -1
  644. package/dist/write-queue.d.ts.map +0 -1
@@ -1,27 +1,25 @@
1
1
  import fs from "node:fs";
2
- import { defaultSyncShouldReclaim, syncLockTimeout } from "./file-lock-sync-admission.js";
2
+ import { defaultSyncShouldReclaim } from "./file-lock-sync-admission.js";
3
3
  import { parseSidecarLockSnapshot, readSidecarLockRawSnapshotSync, removeSidecarLockIfUnchangedSync, } from "./sidecar-lock-reclaim.js";
4
4
  import { assertSynchronousCallbackResult } from "./mutation-authority.js";
5
5
  /** Handle one exclusive-create conflict without surrendering canonical admission. */
6
- export function handleSyncStaleAdmission(params) {
6
+ export function handleSyncStaleAdmission(acquisition, params) {
7
7
  const holderChanged = {};
8
8
  const assertUnheld = () => {
9
- if (!params.hasToken()) {
10
- throw syncLockTimeout(params.lockPath, params.normalizedTargetPath);
11
- }
9
+ acquisition.assert();
12
10
  if (params.currentHeld())
13
11
  throw holderChanged;
14
12
  };
15
13
  const retryHolderChange = (error) => {
16
14
  if (error !== holderChanged)
17
15
  return false;
18
- params.waitForRetry();
16
+ acquisition.waitForRetry();
19
17
  return true;
20
18
  };
21
19
  let rawSnapshot;
22
20
  let lockFileOpenDenied = false;
23
21
  try {
24
- rawSnapshot = readSidecarLockRawSnapshotSync(params.lockPath, {
22
+ rawSnapshot = readSidecarLockRawSnapshotSync(acquisition.lockPath, {
25
23
  rejectNonFile: true,
26
24
  onOpenFailure: (error) => {
27
25
  lockFileOpenDenied = true;
@@ -41,7 +39,7 @@ export function handleSyncStaleAdmission(params) {
41
39
  return;
42
40
  throw boundaryError;
43
41
  }
44
- if (lockFileOpenDenied && params.retryLockFileDenial(error))
42
+ if (lockFileOpenDenied && acquisition.retryDenial(error))
45
43
  return;
46
44
  throw error;
47
45
  }
@@ -93,7 +91,7 @@ export function handleSyncStaleAdmission(params) {
93
91
  throw error;
94
92
  }
95
93
  if (!snapshot) {
96
- params.waitForRetry();
94
+ acquisition.waitForRetry();
97
95
  return;
98
96
  }
99
97
  const nowMs = Date.now();
@@ -103,8 +101,8 @@ export function handleSyncStaleAdmission(params) {
103
101
  try {
104
102
  reclaim = stale.shouldReclaim
105
103
  ? Reflect.apply(stale.shouldReclaim, params.options, [{
106
- lockPath: params.lockPath,
107
- normalizedTargetPath: params.normalizedTargetPath,
104
+ lockPath: acquisition.lockPath,
105
+ normalizedTargetPath: acquisition.normalizedTargetPath,
108
106
  payload: snapshot.payload,
109
107
  staleMs: params.staleMs,
110
108
  nowMs,
@@ -123,7 +121,7 @@ export function handleSyncStaleAdmission(params) {
123
121
  throw error;
124
122
  }
125
123
  if (!reclaim) {
126
- params.waitForRetry();
124
+ acquisition.waitForRetry();
127
125
  return;
128
126
  }
129
127
  if (params.staleRecovery === "remove-if-unchanged" &&
@@ -134,8 +132,8 @@ export function handleSyncStaleAdmission(params) {
134
132
  assertUnheld();
135
133
  try {
136
134
  approved = Reflect.apply(stale.shouldRemove, params.options, [{
137
- lockPath: params.lockPath,
138
- normalizedTargetPath: params.normalizedTargetPath,
135
+ lockPath: acquisition.lockPath,
136
+ normalizedTargetPath: acquisition.normalizedTargetPath,
139
137
  raw: snapshot.raw,
140
138
  payload: snapshot.payload,
141
139
  }]);
@@ -151,10 +149,10 @@ export function handleSyncStaleAdmission(params) {
151
149
  throw error;
152
150
  }
153
151
  if (!approved) {
154
- throw Object.assign(new Error(`file lock stale for ${params.normalizedTargetPath}`), {
152
+ throw Object.assign(new Error(`file lock stale for ${acquisition.normalizedTargetPath}`), {
155
153
  code: "file_lock_stale",
156
- lockPath: params.lockPath,
157
- normalizedTargetPath: params.normalizedTargetPath,
154
+ lockPath: acquisition.lockPath,
155
+ normalizedTargetPath: acquisition.normalizedTargetPath,
158
156
  });
159
157
  }
160
158
  try {
@@ -170,7 +168,7 @@ export function handleSyncStaleAdmission(params) {
170
168
  throw boundaryError;
171
169
  }
172
170
  if (error.code === "EEXIST") {
173
- params.waitForRetry();
171
+ acquisition.waitForRetry();
174
172
  return;
175
173
  }
176
174
  throw error;
@@ -178,7 +176,7 @@ export function handleSyncStaleAdmission(params) {
178
176
  let holderInterrupted = false;
179
177
  try {
180
178
  assertUnheld();
181
- if (removeSidecarLockIfUnchangedSync(params.lockPath, snapshot, assertUnheld))
179
+ if (removeSidecarLockIfUnchangedSync(acquisition.lockPath, snapshot, assertUnheld))
182
180
  return;
183
181
  }
184
182
  catch (error) {
@@ -196,13 +194,13 @@ export function handleSyncStaleAdmission(params) {
196
194
  }
197
195
  }
198
196
  if (holderInterrupted) {
199
- params.waitForRetry();
197
+ acquisition.waitForRetry();
200
198
  return;
201
199
  }
202
200
  }
203
- throw Object.assign(new Error(`file lock stale for ${params.normalizedTargetPath}`), {
201
+ throw Object.assign(new Error(`file lock stale for ${acquisition.normalizedTargetPath}`), {
204
202
  code: "file_lock_stale",
205
- lockPath: params.lockPath,
206
- normalizedTargetPath: params.normalizedTargetPath,
203
+ lockPath: acquisition.lockPath,
204
+ normalizedTargetPath: acquisition.normalizedTargetPath,
207
205
  });
208
206
  }
@@ -32,4 +32,3 @@ export type FileLockSyncHandle = {
32
32
  };
33
33
  export declare function acquireFileLockSync<TPayload extends Record<string, unknown>>(targetPath: string, options: FileLockSyncAcquireOptions<TPayload>): FileLockSyncHandle;
34
34
  export declare function withFileLockSync<T, TPayload extends Record<string, unknown>>(targetPath: string, options: FileLockSyncAcquireOptions<TPayload>, fn: () => T): T;
35
- //# sourceMappingURL=file-lock-sync.d.ts.map
@@ -3,14 +3,14 @@ import { acquireFileLockSyncWithRoot } from "./file-lock-sync-root-acquire.js";
3
3
  import { withSyncHeldLockHandle } from "./file-lock-sync-root-held.js";
4
4
  import path from "node:path";
5
5
  import { readSidecarLockRawSnapshotSync, readSidecarLockSnapshotSync, removeSidecarLockIfUnchangedSync, serializeSidecarLockPayload, sidecarLockSnapshotMatches, } from "./sidecar-lock-reclaim.js";
6
- import { computeSidecarLockDelayMs, isTransientLockFileDenial, maxTransientLockDenials, validateSidecarLockStaleMs, validateSidecarLockCompromiseCheckIntervalMs, validateSidecarLockRetryOptions, validateSidecarLockTimeoutMs, } from "./sidecar-lock-policy.js";
6
+ import { sidecarLockTimeout, isTransientLockFileDenial, validateSidecarLockStaleMs, validateSidecarLockCompromiseCheckIntervalMs, validateSidecarLockRetryOptions, validateSidecarLockTimeoutMs, } from "./sidecar-lock-policy.js";
7
7
  import { getFsSafeLockConfig } from "./lock-config.js";
8
- import { sleepSync } from "./timing.js";
8
+ import { SyncLockAcquisition } from "./file-lock-sync-acquisition.js";
9
9
  import { assertNoWindowsPathAlias } from "./windows-path-alias.js";
10
10
  import { realpathSync } from "./realpath.js";
11
11
  import { recursiveMkdirPath } from "./recursive-mkdir-path.js";
12
12
  import { createSuppressedError } from "./suppressed-error.js";
13
- import { ensureSyncLockExitCleanupRegistered, getSyncHeldLocks, foreignSyncHeldLock, getSyncLockAdmissions, syncReclaimGuardExists, syncLockTimeout, } from "./file-lock-sync-admission.js";
13
+ import { ensureSyncLockExitCleanupRegistered, getSyncHeldLocks, foreignSyncHeldLock, getSyncLockAdmissions, syncReclaimGuardExists, } from "./file-lock-sync-admission.js";
14
14
  import { handleSyncStaleAdmission, } from "./file-lock-sync-stale-admission.js";
15
15
  function releaseAllSyncHeldLocks() {
16
16
  const heldLocks = getSyncHeldLocks();
@@ -135,15 +135,7 @@ export function acquireFileLockSync(targetPath, options) {
135
135
  initiallyHeld.refCount += 1;
136
136
  return createSyncHeldLockHandle(initiallyHeld);
137
137
  }
138
- const admissions = getSyncLockAdmissions();
139
- const admissionToken = {};
140
- let ownsAdmission = false;
141
- const hasAdmissionToken = () => admissions.get(normalizedTargetPath) === admissionToken;
142
- const releaseAdmission = () => {
143
- if (ownsAdmission && hasAdmissionToken())
144
- admissions.delete(normalizedTargetPath);
145
- ownsAdmission = false;
146
- };
138
+ const acquisition = new SyncLockAcquisition(lockPath, normalizedTargetPath, retry, timeoutMs);
147
139
  let payloadCallback;
148
140
  let onCompromised = undefined;
149
141
  let onCompromisedObserved = false;
@@ -152,54 +144,10 @@ export function acquireFileLockSync(targetPath, options) {
152
144
  let staleRecovery = undefined;
153
145
  let staleRecoveryObserved = false;
154
146
  const staleOptions = {};
155
- const startedAt = Date.now();
156
- let attempt = 0;
157
- let transientDenials = 0;
158
147
  const reclaimGuardPath = `${lockPath}.reclaim`;
159
- const waitForRetry = () => {
160
- releaseAdmission();
161
- const elapsed = Date.now() - startedAt;
162
- const timedOut = timeoutMs !== undefined && elapsed >= timeoutMs;
163
- if (timedOut || (retry.retries !== undefined && attempt >= retry.retries)) {
164
- throw syncLockTimeout(lockPath, normalizedTargetPath);
165
- }
166
- const remaining = timeoutMs === undefined || timeoutMs === Number.POSITIVE_INFINITY
167
- ? Number.POSITIVE_INFINITY
168
- : Math.max(0, timeoutMs - elapsed);
169
- sleepSync(Math.min(computeSidecarLockDelayMs(retry, attempt), remaining));
170
- attempt += 1;
171
- };
172
- const retryLockFileDenial = (error) => {
173
- if (!isTransientLockFileDenial(error, lockPath) ||
174
- ++transientDenials > maxTransientLockDenials)
175
- return false;
176
- try {
177
- waitForRetry();
178
- }
179
- catch (waitError) {
180
- // Preserve the filesystem diagnosis when the caller's budget runs out.
181
- if (waitError.code === "file_lock_timeout")
182
- throw error;
183
- throw waitError;
184
- }
185
- return true;
186
- };
187
- const assertAdmissionToken = () => {
188
- if (!hasAdmissionToken())
189
- throw syncLockTimeout(lockPath, normalizedTargetPath);
190
- };
191
- const runAdmissionBoundary = (callback) => {
192
- assertAdmissionToken();
193
- try {
194
- return callback();
195
- }
196
- finally {
197
- assertAdmissionToken();
198
- }
199
- };
200
148
  try {
201
149
  while (true) {
202
- if (!ownsAdmission) {
150
+ if (!acquisition.owns) {
203
151
  const held = heldLocks.get(normalizedTargetPath);
204
152
  if (held && !foreignSyncHeldLock("raw", normalizedTargetPath) &&
205
153
  requestedReentrantOwner !== undefined &&
@@ -208,12 +156,7 @@ export function acquireFileLockSync(targetPath, options) {
208
156
  held.refCount += 1;
209
157
  return createSyncHeldLockHandle(held);
210
158
  }
211
- if (admissions.has(normalizedTargetPath)) {
212
- // The owner can only finish after this synchronous callback unwinds.
213
- throw syncLockTimeout(lockPath, normalizedTargetPath);
214
- }
215
- admissions.set(normalizedTargetPath, admissionToken);
216
- ownsAdmission = true;
159
+ acquisition.reserve();
217
160
  }
218
161
  const attemptHeld = currentTargetHolder();
219
162
  const holderWasReplaced = () => {
@@ -221,60 +164,60 @@ export function acquireFileLockSync(targetPath, options) {
221
164
  return current !== undefined && current !== attemptHeld;
222
165
  };
223
166
  if (!staleRecoveryObserved) {
224
- staleRecovery = runAdmissionBoundary(() => options.staleRecovery ?? defaults.staleRecovery);
167
+ staleRecovery = acquisition.run(() => options.staleRecovery ?? defaults.staleRecovery);
225
168
  staleRecoveryObserved = true;
226
169
  if (holderWasReplaced()) {
227
- waitForRetry();
170
+ acquisition.waitForRetry();
228
171
  continue;
229
172
  }
230
173
  }
231
174
  const reclaimGuardExists = syncReclaimGuardExists(reclaimGuardPath);
232
- if (!hasAdmissionToken())
233
- throw syncLockTimeout(lockPath, normalizedTargetPath);
175
+ if (!acquisition.hasToken())
176
+ throw sidecarLockTimeout(lockPath, normalizedTargetPath);
234
177
  if (holderWasReplaced()) {
235
- waitForRetry();
178
+ acquisition.waitForRetry();
236
179
  continue;
237
180
  }
238
181
  if (reclaimGuardExists) {
239
- waitForRetry();
182
+ acquisition.waitForRetry();
240
183
  continue;
241
184
  }
242
185
  let fd;
243
186
  let createdHeld;
244
187
  let createdSnapshot;
245
188
  if (!payloadCallback)
246
- payloadCallback = runAdmissionBoundary(() => options.payload);
189
+ payloadCallback = acquisition.run(() => options.payload);
247
190
  if (holderWasReplaced()) {
248
- waitForRetry();
191
+ acquisition.waitForRetry();
249
192
  continue;
250
193
  }
251
- const payload = runAdmissionBoundary(() => Reflect.apply(payloadCallback, options, []));
194
+ const payload = acquisition.run(() => Reflect.apply(payloadCallback, options, []));
252
195
  if (holderWasReplaced()) {
253
- waitForRetry();
196
+ acquisition.waitForRetry();
254
197
  continue;
255
198
  }
256
- const { raw, ownershipToken } = runAdmissionBoundary(() => serializeSidecarLockPayload(payload));
199
+ const { raw, ownershipToken } = acquisition.run(() => serializeSidecarLockPayload(payload));
257
200
  if (holderWasReplaced()) {
258
- waitForRetry();
201
+ acquisition.waitForRetry();
259
202
  continue;
260
203
  }
261
204
  if (currentTargetHolder() !== undefined) {
262
- waitForRetry();
205
+ acquisition.waitForRetry();
263
206
  continue;
264
207
  }
265
208
  if (!onCompromisedObserved) {
266
- onCompromised = runAdmissionBoundary(() => options.onCompromised);
209
+ onCompromised = acquisition.run(() => options.onCompromised);
267
210
  onCompromisedObserved = true;
268
211
  if (currentTargetHolder() !== undefined) {
269
- waitForRetry();
212
+ acquisition.waitForRetry();
270
213
  continue;
271
214
  }
272
215
  }
273
216
  if (!parsePayloadObserved) {
274
- parsePayload = runAdmissionBoundary(() => options.parsePayload);
217
+ parsePayload = acquisition.run(() => options.parsePayload);
275
218
  parsePayloadObserved = true;
276
219
  if (currentTargetHolder() !== undefined) {
277
- waitForRetry();
220
+ acquisition.waitForRetry();
278
221
  continue;
279
222
  }
280
223
  }
@@ -311,34 +254,17 @@ export function acquireFileLockSync(targetPath, options) {
311
254
  };
312
255
  const candidateHeld = createdHeld;
313
256
  ensureSyncLockExitCleanupRegistered(releaseAllSyncHeldLocks, lockPath, normalizedTargetPath);
314
- if (!hasAdmissionToken() || currentTargetHolder() !== undefined) {
315
- throw syncLockTimeout(lockPath, normalizedTargetPath);
257
+ if (!acquisition.hasToken() || currentTargetHolder() !== undefined) {
258
+ throw sidecarLockTimeout(lockPath, normalizedTargetPath);
316
259
  }
317
260
  const returnedHandle = createSyncHeldLockHandle(candidateHeld);
318
- if (onCompromised && (compromiseCheckIntervalMs ?? 0) > 0) {
319
- const compromisedCallback = onCompromised;
320
- candidateHeld.timer = setInterval(() => {
321
- let stillHeld;
322
- try {
323
- stillHeld = returnedHandle.verifyStillHeld();
324
- }
325
- catch {
326
- stillHeld = false;
327
- }
328
- if (!stillHeld && candidateHeld.timer) {
329
- clearInterval(candidateHeld.timer);
330
- candidateHeld.timer = undefined;
331
- Reflect.apply(compromisedCallback, options, [{ lockPath, normalizedTargetPath }]);
332
- }
333
- }, compromiseCheckIntervalMs);
334
- candidateHeld.timer.unref();
335
- }
336
- if (!hasAdmissionToken() ||
261
+ acquisition.monitor(candidateHeld, returnedHandle, onCompromised, compromiseCheckIntervalMs, options);
262
+ if (!acquisition.hasToken() ||
337
263
  currentTargetHolder() !== undefined) {
338
- throw syncLockTimeout(lockPath, normalizedTargetPath);
264
+ throw sidecarLockTimeout(lockPath, normalizedTargetPath);
339
265
  }
340
266
  heldLocks.set(normalizedTargetPath, candidateHeld);
341
- releaseAdmission();
267
+ acquisition.release();
342
268
  fd = undefined;
343
269
  return returnedHandle;
344
270
  }
@@ -374,44 +300,39 @@ export function acquireFileLockSync(targetPath, options) {
374
300
  }
375
301
  }
376
302
  if (lockFileCreateDenied) {
377
- if (!hasAdmissionToken())
378
- throw syncLockTimeout(lockPath, normalizedTargetPath);
303
+ if (!acquisition.hasToken())
304
+ throw sidecarLockTimeout(lockPath, normalizedTargetPath);
379
305
  if (currentTargetHolder() !== undefined) {
380
- waitForRetry();
306
+ acquisition.waitForRetry();
381
307
  continue;
382
308
  }
383
- if (retryLockFileDenial(error))
309
+ if (acquisition.retryDenial(error))
384
310
  continue;
385
311
  throw error;
386
312
  }
387
313
  if (!exclusiveCreateConflict)
388
314
  throw error;
389
- if (!hasAdmissionToken())
390
- throw syncLockTimeout(lockPath, normalizedTargetPath);
315
+ if (!acquisition.hasToken())
316
+ throw sidecarLockTimeout(lockPath, normalizedTargetPath);
391
317
  if (currentTargetHolder() !== undefined) {
392
- waitForRetry();
318
+ acquisition.waitForRetry();
393
319
  continue;
394
320
  }
395
- handleSyncStaleAdmission({
396
- hasToken: hasAdmissionToken,
321
+ handleSyncStaleAdmission(acquisition, {
397
322
  currentHeld: currentTargetHolder,
398
- lockPath,
399
- normalizedTargetPath,
400
323
  options,
401
324
  parsePayload,
402
325
  reclaimGuardPath,
403
- retryLockFileDenial,
404
326
  staleMs,
405
327
  staleOptions,
406
328
  staleRecovery,
407
- waitForRetry,
408
329
  });
409
330
  continue;
410
331
  }
411
332
  }
412
333
  }
413
334
  finally {
414
- releaseAdmission();
335
+ acquisition.release();
415
336
  }
416
337
  }
417
338
  export function withFileLockSync(targetPath, options, fn) {
@@ -21,4 +21,3 @@ export declare function withFileLock<T, TPayload extends Record<string, unknown>
21
21
  export declare function createFileLockManager(key: string): FileLockManager;
22
22
  export declare function drainFileLockManagerForTest(targetPath: string, managerKey?: string): Promise<void>;
23
23
  export declare function resetFileLockManagerForTest(targetPath: string, managerKey?: string): void;
24
- //# sourceMappingURL=file-lock.d.ts.map
@@ -6,4 +6,3 @@ export declare function fileObservation(): {
6
6
  has(error: unknown, kind: FailureKind): boolean;
7
7
  };
8
8
  export {};
9
- //# sourceMappingURL=file-observation.d.ts.map
@@ -18,7 +18,6 @@ export declare function writeStreamToTempSource(params: {
18
18
  path: string;
19
19
  cleanup: () => Promise<void>;
20
20
  }>;
21
- export declare function assertSyncDirectoryGuard(guard: SyncParentGuard): void;
22
21
  export declare function ensureParentSync(params: {
23
22
  rootDir: string;
24
23
  filePath: string;
@@ -30,4 +29,3 @@ export declare function ensureStoreDirectorySync(params: {
30
29
  mode: number;
31
30
  messagePrefix: "private store" | "store";
32
31
  }): SyncParentGuard;
33
- //# sourceMappingURL=file-store-boundary.d.ts.map
@@ -2,7 +2,6 @@ import syncFs from "node:fs";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { createByteLimitTransform } from "./bounded-read-stream.js";
5
- import { normalizeMaxBytes } from "./byte-budget.js";
6
5
  import { pipeline } from "node:stream/promises";
7
6
  import { FsSafeError } from "./errors.js";
8
7
  import { assertSyncStoreDirectoryReceipt, ensureSyncStoreDirectory, } from "./file-store-sync-directory.js";
@@ -14,13 +13,9 @@ import { prepareSecretFileWrite } from "./secret-file.js";
14
13
  import { resolveSecureTempRoot } from "./secure-temp-dir.js";
15
14
  import { recursiveMkdirPath } from "./recursive-mkdir-path.js";
16
15
  import { assertNoWindowsPathAlias } from "./windows-path-alias.js";
17
- function parentRelativePath(relativePath) {
18
- const parent = path.posix.dirname(relativePath);
19
- return parent === "." ? "" : parent;
20
- }
21
16
  export async function ensureParentInRoot(scopedRoot, relativePath, mode) {
22
- const parent = parentRelativePath(relativePath);
23
- if (!parent) {
17
+ const parent = path.posix.dirname(relativePath);
18
+ if (parent === ".") {
24
19
  return;
25
20
  }
26
21
  await scopedRoot.mkdir(parent);
@@ -28,10 +23,9 @@ export async function ensureParentInRoot(scopedRoot, relativePath, mode) {
28
23
  }
29
24
  export async function openWritableStoreRoot(params) {
30
25
  assertNoWindowsPathAlias(params.rootDir, "filesystem", "store root uses a Windows filesystem namespace alias");
31
- const maxBytes = normalizeMaxBytes(params.maxBytes);
32
26
  await fs.mkdir(recursiveMkdirPath(params.rootDir), { recursive: true, mode: params.dirMode });
33
27
  await fs.chmod(params.rootDir, params.dirMode).catch(() => undefined);
34
- return await root(params.rootDir, { hardlinks: "reject", maxBytes });
28
+ return await root(params.rootDir, { hardlinks: "reject", maxBytes: params.maxBytes });
35
29
  }
36
30
  export async function openPrivateStoreLockRoot(params) {
37
31
  const { parentGuard } = await prepareSecretFileWrite(params);
@@ -66,15 +60,8 @@ async function chmodDirectoryInRootBestEffort(scopedRoot, relativePath, mode) {
66
60
  await handle.close().catch(() => undefined);
67
61
  }
68
62
  }
69
- function createMaxBytesTransform(maxBytes) {
70
- const limit = normalizeMaxBytes(maxBytes);
71
- if (limit === undefined) {
72
- return undefined;
73
- }
74
- return createByteLimitTransform(limit, () => new FsSafeError("too-large", `file exceeds maximum size of ${limit} bytes`));
75
- }
76
63
  export async function writeStreamToTempSource(params) {
77
- const maxBytes = normalizeMaxBytes(params.maxBytes);
64
+ const maxBytes = params.maxBytes;
78
65
  const tempRoot = resolveSecureTempRoot({
79
66
  fallbackPrefix: "fs-safe-file-store",
80
67
  unsafeFallbackLabel: "file store temp dir",
@@ -90,7 +77,7 @@ export async function writeStreamToTempSource(params) {
90
77
  writable.once("close", () => {
91
78
  handleClosedByStream = true;
92
79
  });
93
- const limiter = createMaxBytesTransform(maxBytes);
80
+ const limiter = maxBytes === undefined ? undefined : createByteLimitTransform(maxBytes, () => new FsSafeError("too-large", `file exceeds maximum size of ${maxBytes} bytes`));
94
81
  if (limiter) {
95
82
  await pipeline(params.stream, limiter, writable);
96
83
  }
@@ -116,13 +103,6 @@ export async function writeStreamToTempSource(params) {
116
103
  throw err;
117
104
  }
118
105
  }
119
- export function assertSyncDirectoryGuard(guard) {
120
- assertSyncStoreDirectoryReceipt({
121
- dir: guard.dir,
122
- realPath: guard.realPath,
123
- exactStat: guard.exactStat,
124
- });
125
- }
126
106
  export function ensureParentSync(params) {
127
107
  assertNoWindowsPathAlias(params.rootDir, "filesystem", "store root uses a Windows filesystem namespace alias");
128
108
  assertNoWindowsPathAlias(params.filePath, "filesystem", "store path uses a Windows filesystem namespace alias");
@@ -135,6 +115,6 @@ export function ensureParentSync(params) {
135
115
  }
136
116
  export function ensureStoreDirectorySync(params) {
137
117
  const guard = ensureSyncStoreDirectory(params);
138
- assertSyncDirectoryGuard(guard);
118
+ assertSyncStoreDirectoryReceipt(guard);
139
119
  return guard;
140
120
  }
@@ -1,5 +1,4 @@
1
1
  export declare function readFileStoreCopySource(params: {
2
2
  sourcePath: string;
3
- maxBytes?: number;
3
+ maxBytes: number;
4
4
  }): Promise<Buffer>;
5
- //# sourceMappingURL=file-store-copy-source.d.ts.map
@@ -21,7 +21,7 @@ export async function readFileStoreCopySource(params) {
21
21
  cause: error instanceof Error ? error : undefined,
22
22
  });
23
23
  }
24
- if (params.maxBytes !== undefined && message.includes(`exceeds ${params.maxBytes} bytes`)) {
24
+ if (message.includes(`exceeds ${params.maxBytes} bytes`)) {
25
25
  throw new FsSafeError("too-large", `file exceeds maximum size of ${params.maxBytes} bytes`, {
26
26
  cause: error instanceof Error ? error : undefined,
27
27
  });
@@ -1,2 +1 @@
1
- export declare function assertFileStoreMaxBytes(size: number, maxBytes?: number): void;
2
- //# sourceMappingURL=file-store-limit.d.ts.map
1
+ export declare function assertFileStoreMaxBytes(size: number, limit: number | undefined): void;
@@ -1,7 +1,6 @@
1
- import { normalizeMaxBytes } from "./byte-budget.js";
2
1
  import { FsSafeError } from "./errors.js";
3
- export function assertFileStoreMaxBytes(size, maxBytes) {
4
- const limit = normalizeMaxBytes(maxBytes);
2
+ // Store operation boundaries admit the primitive limit before reaching this helper.
3
+ export function assertFileStoreMaxBytes(size, limit) {
5
4
  if (limit !== undefined && size > limit) {
6
5
  throw new FsSafeError("too-large", `file exceeds maximum size of ${limit} bytes`);
7
6
  }
@@ -1,3 +1,2 @@
1
1
  export declare function assertRelativePath(relativePath: string): string;
2
2
  export declare function resolveStorePath(rootDir: string, relativePath: string): string;
3
- //# sourceMappingURL=file-store-path.d.ts.map
@@ -9,4 +9,3 @@ export declare function pruneExpiredStoreEntries(params: {
9
9
  dirMode: number;
10
10
  options: FileStorePruneOptions;
11
11
  }): Promise<void>;
12
- //# sourceMappingURL=file-store-prune.d.ts.map
@@ -13,4 +13,3 @@ export declare function ensureSyncStoreDirectory(params: {
13
13
  }): SyncStoreDirectoryReceipt;
14
14
  export declare function assertSyncStoreDirectoryReceipt(receipt: SyncStoreDirectoryReceipt): void;
15
15
  export {};
16
- //# sourceMappingURL=file-store-sync-directory.d.ts.map