@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,5 +1,5 @@
1
1
  import { type PermissionCommandFailure } from "./permission-exec.js";
2
- import { type PermissionCheck, type PermissionCheckOptions, type SafeStatResult } from "./permissions.js";
2
+ import { type PermissionCheck, type PermissionCheckOptions } from "./permissions.js";
3
3
  export type PermissionExec = (command: string, args: string[]) => Promise<{
4
4
  stdout: string;
5
5
  stderr: string;
@@ -31,14 +31,7 @@ export type IcaclsResetCommandOptions = {
31
31
  env?: NodeJS.ProcessEnv;
32
32
  userInfo?: WindowsUserInfoProvider;
33
33
  };
34
- export declare function inspectWindowsPermissions(params: {
35
- targetPath: string;
36
- stat: SafeStatResult;
37
- effectiveIsDir: boolean;
38
- effectiveMode: number | null;
39
- bits: number | null;
40
- opts?: PermissionCheckOptions;
41
- }): Promise<PermissionCheck>;
34
+ export declare function inspectWindowsPermissions(targetPath: string, unverified: Readonly<PermissionCheck>, opts?: PermissionCheckOptions): Promise<PermissionCheck>;
42
35
  export declare function resolveWindowsUserPrincipal(env?: NodeJS.ProcessEnv, userInfo?: WindowsUserInfoProvider): string | null;
43
36
  export declare function parseIcaclsOutput(output: string, targetPath: string): WindowsAclEntry[];
44
37
  export declare function summarizeWindowsAcl(entries: WindowsAclEntry[], env?: NodeJS.ProcessEnv): Pick<WindowsAclSummary, "trusted" | "untrustedWorld" | "untrustedGroup">;
@@ -56,4 +49,3 @@ export declare function createIcaclsResetCommand(targetPath: string, opts: Icacl
56
49
  args: string[];
57
50
  display: string;
58
51
  } | null;
59
- //# sourceMappingURL=permissions-windows.d.ts.map
@@ -39,20 +39,16 @@ const TRUSTED_BASE_ASCII = new Set([...TRUSTED_BASE].map(stripDiacritics));
39
39
  const normalize = (value) => normalizeLowercaseStringOrEmpty(value);
40
40
  const defaultWindowsUserInfo = () => os.userInfo();
41
41
  const defaultPermissionExec = executePermissionCommand;
42
- function inspectWindowsPermissionsNative(params) {
42
+ function inspectWindowsPermissionsNative(targetPath, unverified) {
43
43
  const native = getNativeBinding();
44
44
  if (!native)
45
45
  return undefined;
46
46
  try {
47
- const facts = native.readOwnerAndDacl(params.targetPath);
47
+ const facts = native.readOwnerAndDacl(targetPath);
48
48
  if (facts.fallbackRequired)
49
49
  return undefined;
50
50
  return {
51
- ok: true,
52
- isSymlink: params.stat.isSymlink,
53
- isDir: params.effectiveIsDir,
54
- mode: params.effectiveMode,
55
- bits: params.bits,
51
+ ...unverified,
56
52
  source: "windows-acl",
57
53
  worldWritable: facts.worldWritable,
58
54
  groupWritable: facts.groupWritable,
@@ -69,32 +65,20 @@ function inspectWindowsPermissionsNative(params) {
69
65
  return undefined;
70
66
  }
71
67
  }
72
- export async function inspectWindowsPermissions(params) {
73
- const unverified = {
74
- ok: true,
75
- isSymlink: params.stat.isSymlink,
76
- isDir: params.effectiveIsDir,
77
- mode: params.effectiveMode,
78
- bits: params.bits,
79
- source: "unknown",
80
- worldWritable: false,
81
- groupWritable: false,
82
- worldReadable: false,
83
- groupReadable: false,
84
- };
85
- if (hasWindowsPathAlias(params.targetPath, "filesystem", "win32")) {
68
+ export async function inspectWindowsPermissions(targetPath, unverified, opts) {
69
+ if (hasWindowsPathAlias(targetPath, "filesystem", "win32")) {
86
70
  return {
87
71
  ...unverified,
88
72
  error: "Path uses a Windows filesystem namespace alias",
89
73
  };
90
74
  }
91
- const native = inspectWindowsPermissionsNative(params);
75
+ const native = inspectWindowsPermissionsNative(targetPath, unverified);
92
76
  if (native)
93
77
  return native;
94
78
  const owner = await inspectWindowsOwner({
95
- targetPath: params.targetPath,
96
- env: params.opts?.env,
97
- exec: params.opts?.exec ?? defaultPermissionExec,
79
+ targetPath,
80
+ env: opts?.env,
81
+ exec: opts?.exec ?? defaultPermissionExec,
98
82
  });
99
83
  if (owner.error !== undefined) {
100
84
  const error = `Windows owner inspection failed: ${owner.error}`;
@@ -109,11 +93,7 @@ export async function inspectWindowsPermissions(params) {
109
93
  if (!acl.ok)
110
94
  return { ...unverified, ...ownerFields, error: acl.error, errorDetail: acl.errorDetail, errorCause: acl.errorCause };
111
95
  return {
112
- ok: true,
113
- isSymlink: params.stat.isSymlink,
114
- isDir: params.effectiveIsDir,
115
- mode: params.effectiveMode,
116
- bits: params.bits,
96
+ ...unverified,
117
97
  source: "windows-acl",
118
98
  worldWritable: acl.untrustedWorld.some((entry) => entry.canWrite),
119
99
  groupWritable: acl.untrustedGroup.some((entry) => entry.canWrite),
@@ -57,4 +57,3 @@ export declare function isGroupWritable(bits: number | null): boolean;
57
57
  export declare function isWorldReadable(bits: number | null): boolean;
58
58
  export declare function isGroupReadable(bits: number | null): boolean;
59
59
  export declare function formatPosixMode(mode: number): string;
60
- //# sourceMappingURL=permissions.d.ts.map
@@ -71,28 +71,20 @@ export async function inspectPathPermissions(targetPath, opts) {
71
71
  }
72
72
  const bits = modeBits(effectiveMode);
73
73
  const platform = opts?.platform ?? process.platform;
74
- if (platform === "win32") {
75
- return await inspectWindowsPermissions({
76
- targetPath,
77
- stat: st,
78
- effectiveIsDir,
79
- effectiveMode,
80
- bits,
81
- opts,
82
- });
83
- }
84
- return {
74
+ const windows = platform === "win32";
75
+ const permissions = {
85
76
  ok: true,
86
77
  isSymlink: st.isSymlink,
87
78
  isDir: effectiveIsDir,
88
79
  mode: effectiveMode,
89
80
  bits,
90
- source: "posix",
91
- worldWritable: isWorldWritable(bits),
92
- groupWritable: isGroupWritable(bits),
93
- worldReadable: isWorldReadable(bits),
94
- groupReadable: isGroupReadable(bits),
81
+ source: windows ? "unknown" : "posix",
82
+ worldWritable: !windows && isWorldWritable(bits),
83
+ groupWritable: !windows && isGroupWritable(bits),
84
+ worldReadable: !windows && isWorldReadable(bits),
85
+ groupReadable: !windows && isGroupReadable(bits),
95
86
  };
87
+ return windows ? await inspectWindowsPermissions(targetPath, permissions, opts) : permissions;
96
88
  }
97
89
  export function formatPermissionDetail(targetPath, perms) {
98
90
  if (perms.source === "windows-acl") {
@@ -22,4 +22,3 @@ export declare function preparePinnedWriteMutationAdmission(params: {
22
22
  relativeParentPath: string;
23
23
  mutationAdmission?: PinnedWriteMutationAdmission;
24
24
  }>;
25
- //# sourceMappingURL=pinned-mutation-admission.d.ts.map
@@ -36,4 +36,3 @@ export declare function mutationObservationCurrent(observation: MutationPathObse
36
36
  export declare function mutationObservationsCurrent(observations: readonly MutationPathObservation[], directories: readonly MutationDirectoryObservation[]): boolean;
37
37
  export declare function advanceMutationObservation(observation: MutationPathObservation, parent: MutationDirectoryObservation, child: MutationDirectoryObservation): MutationPathObservation | undefined;
38
38
  export {};
39
- //# sourceMappingURL=pinned-mutation-observation.d.ts.map
@@ -22,4 +22,3 @@ export declare function simpleSharedRoute(params: {
22
22
  rootIdentity: ExactRootIdentity;
23
23
  } | undefined;
24
24
  export {};
25
- //# sourceMappingURL=pinned-mutation-shared-route.d.ts.map
@@ -5,6 +5,7 @@ export type PinnedOpenSyncResult = {
5
5
  path: string;
6
6
  fd: number;
7
7
  stat: fs.Stats;
8
+ identity: fs.BigIntStats;
8
9
  } | {
9
10
  ok: false;
10
11
  reason: PinnedOpenSyncFailureReason;
@@ -27,4 +28,3 @@ export declare function openPinnedFileSync(params: {
27
28
  ioFs?: PinnedOpenSyncFs;
28
29
  finalAdmission?: PinnedOpenSyncFinalAdmission;
29
30
  }): PinnedOpenSyncResult;
30
- //# sourceMappingURL=pinned-open.d.ts.map
@@ -63,7 +63,7 @@ export function openPinnedFileSync(params) {
63
63
  preRealpathIdentity: pathIdentity,
64
64
  descriptorIdentity: identity,
65
65
  }) ?? realPath;
66
- const opened = { ok: true, path: admittedPath, fd, stat: openedStat };
66
+ const opened = { ok: true, path: admittedPath, fd, stat: openedStat, identity };
67
67
  fd = null;
68
68
  return opened;
69
69
  }
@@ -1,2 +1 @@
1
1
  export declare function validatePinnedOperationPayload(payload: Record<string, unknown>): void;
2
- //# sourceMappingURL=pinned-operation.d.ts.map
@@ -1,4 +1,3 @@
1
1
  import type { FileHandle } from "node:fs/promises";
2
2
  import type { PinnedWriteInput } from "./pinned-write-types.js";
3
3
  export declare function writePinnedInput(target: FileHandle | number, input: PinnedWriteInput, maxBytes?: number, assertBeforeMutation?: () => void): Promise<void>;
4
- //# sourceMappingURL=pinned-write-input.d.ts.map
@@ -2,4 +2,3 @@ import type { FileHandle } from "node:fs/promises";
2
2
  export declare function assertPinnedWriteMode(fd: number, mode: number, privateCreation?: boolean): void;
3
3
  export declare function preparePinnedWriteMode(handle: FileHandle, createdMode: number, assertBeforeMutation?: () => void, privateCreation?: boolean): Promise<(() => void) | undefined>;
4
4
  export declare function pinnedWriteModeAssertion(fd: number, mode: number, assertBeforeMutation?: () => void, privateCreation?: boolean): () => void;
5
- //# sourceMappingURL=pinned-write-mode.d.ts.map
@@ -3,4 +3,3 @@ import type { AsyncDirectoryGuard } from "./directory-guard.js";
3
3
  import { type FileIdentityStat } from "./file-identity.js";
4
4
  import type { PinnedWriteParams } from "./pinned-write-types.js";
5
5
  export declare function runPinnedStagedWrite(params: PinnedWriteParams, parentPath: string, parentGuard: AsyncDirectoryGuard<BigIntStats>): Promise<FileIdentityStat>;
6
- //# sourceMappingURL=pinned-write-staged.d.ts.map
@@ -24,18 +24,15 @@ export type PinnedCreatedDirectoryReceipt = Readonly<{
24
24
  parent: MutationDirectoryObservation;
25
25
  child: MutationDirectoryObservation;
26
26
  }>;
27
+ export type PinnedMutationParentRequest = {
28
+ targetPath: string;
29
+ mutationPath: string;
30
+ phase: "parent" | "parent-create";
31
+ };
27
32
  export type PinnedMutationParentWalkSession = Readonly<{
28
33
  retainedTargetPath: string;
29
- tryAuthorizeAtParent(request: Readonly<{
30
- targetPath: string;
31
- mutationPath: string;
32
- phase: "parent" | "parent-create";
33
- }>, parent: MutationDirectoryObservation): PinnedMutationAuthorizationToken | undefined;
34
- authorize(request: Readonly<{
35
- targetPath: string;
36
- mutationPath: string;
37
- phase: "parent" | "parent-create";
38
- }>): Promise<PinnedMutationAdmissionReceipt | undefined>;
34
+ tryAuthorizeAtParent(request: Readonly<PinnedMutationParentRequest>, parent: MutationDirectoryObservation): PinnedMutationAuthorizationToken | undefined;
35
+ authorize(request: Readonly<PinnedMutationParentRequest>): Promise<PinnedMutationAdmissionReceipt | undefined>;
39
36
  advanceCreatedDirectory(receipt: PinnedCreatedDirectoryReceipt): PinnedMutationAuthorizationToken | undefined;
40
37
  dispose(): void;
41
38
  }>;
@@ -44,16 +41,8 @@ export type PinnedWriteMutationAdmission = Readonly<{
44
41
  beginParentWalk?(): string | undefined;
45
42
  beginSharedParentWalk?(): PinnedMutationParentWalkSession | undefined;
46
43
  beginNativeParentWalk?(): PinnedMutationParentWalkSession | undefined;
47
- tryAuthorizeAtParent?(request: Readonly<{
48
- targetPath: string;
49
- mutationPath: string;
50
- phase: "parent" | "parent-create";
51
- }>, parent: MutationDirectoryObservation): PinnedMutationAuthorizationToken | undefined;
52
- authorize(request: Readonly<{
53
- targetPath: string;
54
- mutationPath: string;
55
- phase: "parent" | "parent-create";
56
- }>): Promise<PinnedMutationAdmissionReceipt | undefined>;
44
+ tryAuthorizeAtParent?(request: Readonly<PinnedMutationParentRequest>, parent: MutationDirectoryObservation): PinnedMutationAuthorizationToken | undefined;
45
+ authorize(request: Readonly<PinnedMutationParentRequest>): Promise<PinnedMutationAdmissionReceipt | undefined>;
57
46
  advanceCreatedDirectory?(receipt: PinnedCreatedDirectoryReceipt): PinnedMutationAuthorizationToken | undefined;
58
47
  }>;
59
48
  export type PinnedWriteParams = {
@@ -77,4 +66,3 @@ export type PinnedWriteParams = {
77
66
  onPublished?: (identity: PublishedWriteIdentity) => void;
78
67
  verifyPublished?: (fd: number, identity: PublishedWriteIdentity, parentGuard: AnyAsyncDirectoryGuard) => Promise<void>;
79
68
  };
80
- //# sourceMappingURL=pinned-write-types.d.ts.map
@@ -11,4 +11,3 @@ export declare function withPinnedWriteRenameIdentityLock<T>(params: {
11
11
  targetPath: string;
12
12
  relativeTargetPath: string;
13
13
  }, run: () => Promise<T>): Promise<T>;
14
- //# sourceMappingURL=pinned-write.d.ts.map
@@ -6,4 +6,3 @@ export type ReadFileWindowOptions = {
6
6
  export declare function readFileWindowFully(handle: FileHandle, buffer: Buffer, position: number, { signal }?: ReadFileWindowOptions): Promise<number>;
7
7
  /** Synchronous positional read; neither variant advances or closes its descriptor. */
8
8
  export declare function readFileWindowFullySync(fd: number, buffer: Buffer, position: number): number;
9
- //# sourceMappingURL=positional-read.d.ts.map
@@ -2,4 +2,3 @@ export type CreatePrivateDirectoryOptions = {
2
2
  platform?: NodeJS.Platform;
3
3
  };
4
4
  export declare function createPrivateDirectory(targetPath: string, options?: CreatePrivateDirectoryOptions): Promise<void>;
5
- //# sourceMappingURL=private-directory.d.ts.map
@@ -11,4 +11,3 @@ export declare function handoffCreatedFileSync(params: {
11
11
  verifyDescriptor?: (fd: number, path: string, links: number) => void;
12
12
  onPublished?: () => void;
13
13
  }): OwnedFileDescriptorSync;
14
- //# sourceMappingURL=private-producer-handoff-sync.d.ts.map
@@ -1,16 +1,13 @@
1
1
  import fs, {} from "node:fs";
2
2
  import { ownFileDescriptorSync } from "./create-owned-file.js";
3
- import { FsSafeError } from "./errors.js";
4
3
  import { assertSynchronousCallbackResult } from "./mutation-authority.js";
5
- import { assertInitialSource, assertParents, inspectLinkedFile, normalizeLinkError, } from "./private-producer-handoff.js";
4
+ import { assertInitialSource, FileHandoff, inspectLinkedFile, } from "./private-producer-handoff.js";
6
5
  import { resolveReadOpenFlags } from "./read-open-flags.js";
7
6
  export function handoffCreatedFileSync(params) {
8
7
  let retained = params.source;
9
8
  const owners = new Set([retained]);
10
9
  const failures = [];
11
- let publication = "not-published";
12
- let cleanup = "preserved";
13
- let closeFailed = false;
10
+ const state = new FileHandoff(params, params.identity, true);
14
11
  function close(owner) {
15
12
  // A throwing close may already have released the descriptor for reuse.
16
13
  owners.delete(owner);
@@ -18,42 +15,20 @@ export function handoffCreatedFileSync(params) {
18
15
  owner.close();
19
16
  }
20
17
  catch (error) {
21
- closeFailed = true;
18
+ state.closeFailed = true;
22
19
  throw error;
23
20
  }
24
21
  }
25
- function assertIdentityCurrent(owner, links) {
26
- assertParents(params);
27
- inspectLinkedFile(() => fs.fstatSync(owner.fd, { bigint: true }), params.identity, links, "created file descriptor");
28
- if (cleanup !== "removed") {
29
- inspectLinkedFile(() => fs.lstatSync(params.sourcePath, { bigint: true }), params.identity, links, "created file stage");
30
- }
31
- if (publication === "published") {
32
- inspectLinkedFile(() => fs.lstatSync(params.targetPath, { bigint: true }), params.identity, links, "created file destination");
33
- }
34
- }
35
22
  function verifyCurrent(owner, descriptorPath, links) {
36
- assertIdentityCurrent(owner, links);
23
+ state.inspect(owner, links);
37
24
  params.verifyDescriptor?.(owner.fd, descriptorPath, Number(links));
38
25
  }
39
26
  try {
40
27
  assertInitialSource(params.identity);
41
28
  verifyCurrent(retained, params.sourcePath, 1n);
42
29
  assertSynchronousCallbackResult(params.assertBeforeMutation?.(), "assertBeforeMutation");
43
- assertIdentityCurrent(retained, 1n);
44
- publication = "indeterminate";
45
- try {
46
- fs.linkSync(params.sourcePath, params.targetPath);
47
- }
48
- catch (error) {
49
- const normalized = normalizeLinkError(error);
50
- if (normalized instanceof FsSafeError &&
51
- (normalized.code === "already-exists" || normalized.code === "helper-unavailable")) {
52
- publication = "not-published";
53
- }
54
- throw normalized;
55
- }
56
- publication = "published";
30
+ state.inspect(retained, 1n);
31
+ state.publish();
57
32
  try {
58
33
  params.onPublished?.();
59
34
  }
@@ -74,12 +49,10 @@ export function handoffCreatedFileSync(params) {
74
49
  const descriptorPath = process.platform === "win32" ? params.targetPath : params.sourcePath;
75
50
  verifyCurrent(retained, descriptorPath, 2n);
76
51
  assertSynchronousCallbackResult(params.assertBeforeMutation?.(), "assertBeforeMutation");
77
- assertIdentityCurrent(retained, 2n);
78
- cleanup = "failed";
52
+ state.inspect(retained, 2n);
79
53
  // Link and unlink stay in one JS turn. Only the verified stage is removed;
80
54
  // publication has committed and the destination is never rollback cleanup.
81
- fs.unlinkSync(params.sourcePath);
82
- cleanup = "removed";
55
+ state.retireSource();
83
56
  verifyCurrent(retained, params.targetPath, 1n);
84
57
  }
85
58
  catch (error) {
@@ -95,20 +68,5 @@ export function handoffCreatedFileSync(params) {
95
68
  failures.push(error);
96
69
  }
97
70
  }
98
- const primary = failures[0];
99
- // Collision-as-no-op callers must still observe a failed settlement.
100
- const code = closeFailed || failures.length > 1
101
- ? "helper-failed"
102
- : primary instanceof FsSafeError ? primary.code : "helper-failed";
103
- throw new FsSafeError(code, "created file publication failed", {
104
- cause: failures.length === 1 ? primary : new AggregateError(failures, "created file publication and settlement failed"),
105
- details: {
106
- publication: { status: publication },
107
- cleanup,
108
- resources: closeFailed ? "close-failed" : "closed",
109
- path: params.targetPath,
110
- dev: params.identity.dev,
111
- ino: params.identity.ino,
112
- },
113
- });
71
+ throw state.failure(failures, "created file publication and settlement failed");
114
72
  }
@@ -1,5 +1,6 @@
1
1
  import { type BigIntStats } from "node:fs";
2
2
  import { type FileHandle } from "node:fs/promises";
3
+ import { FsSafeError } from "./errors.js";
3
4
  import { type TempPathRegistration } from "./temp-cleanup.js";
4
5
  export type PrivateProducerHandoff = {
5
6
  handle: FileHandle;
@@ -28,7 +29,25 @@ export declare function assertInitialSource(stat: BigIntStats): void;
28
29
  export declare function inspectLinkedFile(inspect: () => BigIntStats, expected: BigIntStats, links: bigint, label: string): BigIntStats;
29
30
  export declare function assertParents(params: HandoffParents): void;
30
31
  export declare function normalizeLinkError(error: unknown): unknown;
32
+ export declare class FileHandoff {
33
+ private readonly paths;
34
+ private readonly identity;
35
+ private readonly createdLabels;
36
+ siblingOwned: boolean;
37
+ publication: "not-published" | "published" | "indeterminate";
38
+ cleanup: "preserved" | "removed" | "failed";
39
+ closeFailed: boolean;
40
+ constructor(paths: HandoffPaths, identity: BigIntStats, createdLabels?: boolean);
41
+ inspect(owner: {
42
+ readonly fd: number;
43
+ }, links: bigint): {
44
+ opened: BigIntStats;
45
+ named?: BigIntStats;
46
+ };
47
+ publish(): void;
48
+ retireSource(): void;
49
+ failure(failures: readonly unknown[], aggregateMessage: string): FsSafeError;
50
+ }
31
51
  export declare function handoffPrivateProducerFile(params: ProducerHandoffParams): Promise<PrivateProducerHandoff>;
32
52
  export declare function handoffCreatedFile(params: CreatedHandoffParams): Promise<FileHandle>;
33
53
  export {};
34
- //# sourceMappingURL=private-producer-handoff.d.ts.map
@@ -165,14 +165,62 @@ async function openProducerSource(params, identity, links = 1n) {
165
165
  }
166
166
  return fallback;
167
167
  }
168
- function inspectHandoff(params, handle, identity, state, links) {
169
- assertParents(params);
170
- const opened = inspectSourceDescriptor(handle, identity, links);
171
- if (state.cleanup !== "removed") {
172
- inspectLinkedFile(() => fsSync.lstatSync(params.sourcePath, { bigint: true }), identity, links, "isolated producer path");
168
+ export class FileHandoff {
169
+ paths;
170
+ identity;
171
+ createdLabels;
172
+ siblingOwned = false;
173
+ publication = "not-published";
174
+ cleanup = "preserved";
175
+ closeFailed = false;
176
+ constructor(paths, identity, createdLabels = false) {
177
+ this.paths = paths;
178
+ this.identity = identity;
179
+ this.createdLabels = createdLabels;
180
+ }
181
+ inspect(owner, links) {
182
+ assertParents(this.paths);
183
+ const opened = inspectLinkedFile(() => fsSync.fstatSync(owner.fd, { bigint: true }), this.identity, links, this.createdLabels ? "created file descriptor" : "isolated producer descriptor");
184
+ if (this.cleanup !== "removed") {
185
+ inspectLinkedFile(() => fsSync.lstatSync(this.paths.sourcePath, { bigint: true }), this.identity, links, this.createdLabels ? "created file stage" : "isolated producer path");
186
+ }
187
+ const named = this.publication === "published"
188
+ ? inspectLinkedFile(() => fsSync.lstatSync(this.paths.targetPath, { bigint: true }), this.identity, links, this.createdLabels ? "created file destination" : "isolated producer sibling")
189
+ : undefined;
190
+ return { opened, named };
191
+ }
192
+ publish() {
193
+ this.publication = "indeterminate";
194
+ try {
195
+ fsSync.linkSync(this.paths.sourcePath, this.paths.targetPath);
196
+ }
197
+ catch (error) {
198
+ const normalized = normalizeLinkError(error);
199
+ if (normalized instanceof FsSafeError &&
200
+ (normalized.code === "already-exists" || normalized.code === "helper-unavailable")) {
201
+ this.publication = "not-published";
202
+ }
203
+ throw normalized;
204
+ }
205
+ this.publication = "published";
206
+ }
207
+ retireSource() {
208
+ this.cleanup = "failed";
209
+ fsSync.unlinkSync(this.paths.sourcePath);
210
+ this.cleanup = "removed";
211
+ }
212
+ failure(failures, aggregateMessage) {
213
+ const primary = failures[0];
214
+ // Collision-as-no-op callers must still observe a failed settlement.
215
+ return new FsSafeError(this.closeFailed || failures.length > 1 ? "helper-failed" : primary instanceof FsSafeError ? primary.code : "helper-failed", "created file publication failed", {
216
+ cause: failures.length === 1 ? primary : new AggregateError(failures, aggregateMessage),
217
+ details: {
218
+ publication: { status: this.publication }, cleanup: this.cleanup,
219
+ resources: this.closeFailed ? "close-failed" : "closed",
220
+ path: this.paths.targetPath, dev: this.identity.dev, ino: this.identity.ino,
221
+ },
222
+ });
173
223
  }
174
- const named = state.publication === "published" ? inspectLinkedFile(() => fsSync.lstatSync(params.targetPath, { bigint: true }), identity, links, "isolated producer sibling") : undefined;
175
- return { opened, named };
176
224
  }
177
225
  async function handoffFile(params) {
178
226
  const created = "source" in params ? params : undefined;
@@ -186,9 +234,7 @@ async function handoffFile(params) {
186
234
  const owners = new Set(handle ? [handle] : []);
187
235
  const failures = [];
188
236
  let unregister;
189
- const state = {
190
- siblingOwned: false, publication: "not-published", cleanup: "preserved", closeFailed: false,
191
- };
237
+ const state = new FileHandoff(params, identity);
192
238
  async function close(owned) {
193
239
  // Final creation consumes its pin before close can release and recycle it.
194
240
  // Legacy temporary handoff retains its historical FileHandle close retry.
@@ -209,7 +255,7 @@ async function handoffFile(params) {
209
255
  handle = await openProducerSource({ ...params, readWrite: "readWrite" in params && params.readWrite }, identity);
210
256
  owners.add(handle);
211
257
  }
212
- inspectHandoff(params, handle, identity, state, 1n);
258
+ state.inspect(handle, 1n);
213
259
  if (created?.verifyDescriptor)
214
260
  await created.verifyDescriptor(handle.fd, params.sourcePath, 1);
215
261
  if (!created) {
@@ -220,20 +266,8 @@ async function handoffFile(params) {
220
266
  });
221
267
  }
222
268
  assertSynchronousCallbackResult(created?.assertBeforeMutation?.(), "assertBeforeMutation");
223
- inspectHandoff(params, handle, identity, state, 1n);
224
- state.publication = "indeterminate";
225
- try {
226
- fsSync.linkSync(params.sourcePath, params.targetPath);
227
- }
228
- catch (error) {
229
- const normalized = normalizeLinkError(error);
230
- if (normalized instanceof FsSafeError &&
231
- (normalized.code === "already-exists" || normalized.code === "helper-unavailable")) {
232
- state.publication = "not-published";
233
- }
234
- throw normalized;
235
- }
236
- state.publication = "published";
269
+ state.inspect(handle, 1n);
270
+ state.publish();
237
271
  state.siblingOwned = !created;
238
272
  try {
239
273
  assertSynchronousCallbackResult(created?.onPublished?.(), "onPublished");
@@ -241,7 +275,7 @@ async function handoffFile(params) {
241
275
  catch (error) {
242
276
  failures.push(error);
243
277
  }
244
- inspectHandoff(params, handle, identity, state, 2n);
278
+ state.inspect(handle, 2n);
245
279
  if (process.platform === "win32") {
246
280
  // Legacy Windows unlink retains a delete-pending name until handles
247
281
  // opened through that name close. Transfer the pin before retiring it.
@@ -250,26 +284,24 @@ async function handoffFile(params) {
250
284
  : await openProducerSource({ ...params, sourcePath: params.targetPath,
251
285
  readWrite: "readWrite" in params && params.readWrite }, identity, 2n);
252
286
  owners.add(sibling);
253
- inspectHandoff(params, sibling, identity, state, 2n);
287
+ state.inspect(sibling, 2n);
254
288
  if (created?.verifyDescriptor)
255
289
  await created.verifyDescriptor(sibling.fd, params.targetPath, 2);
256
- inspectHandoff(params, sibling, identity, state, 2n);
290
+ state.inspect(sibling, 2n);
257
291
  inspectSourceDescriptor(handle, identity, 2n);
258
292
  await close(handle);
259
293
  handle = sibling;
260
294
  // The old handle's close yielded; both names must still be ours.
261
- inspectHandoff(params, handle, identity, state, 2n);
295
+ state.inspect(handle, 2n);
262
296
  }
263
297
  if (created?.verifyDescriptor)
264
298
  await created.verifyDescriptor(handle.fd, process.platform === "win32" ? params.targetPath : params.sourcePath, 2);
265
299
  assertSynchronousCallbackResult(created?.assertBeforeMutation?.(), "assertBeforeMutation");
266
- inspectHandoff(params, handle, identity, state, 2n);
267
- state.cleanup = "failed";
268
- fsSync.unlinkSync(params.sourcePath);
269
- state.cleanup = "removed";
300
+ state.inspect(handle, 2n);
301
+ state.retireSource();
270
302
  if (created?.verifyDescriptor)
271
303
  await created.verifyDescriptor(handle.fd, params.targetPath, 1);
272
- const { opened, named } = inspectHandoff(params, handle, identity, state, 1n);
304
+ const { opened, named } = state.inspect(handle, 1n);
273
305
  const originalMode = identity.mode & 511n;
274
306
  if (!created && process.platform === "win32" && (originalMode & 128n) === 0n &&
275
307
  ((opened.mode & 511n) !== originalMode || (named.mode & 511n) !== originalMode)) {
@@ -277,7 +309,7 @@ async function handoffFile(params) {
277
309
  // admitted sibling inode, without reopening or chmodding its pathname.
278
310
  assertParents(params);
279
311
  fsSync.fchmodSync(handle.fd, Number(originalMode));
280
- const restored = inspectHandoff(params, handle, identity, state, 1n);
312
+ const restored = state.inspect(handle, 1n);
281
313
  if ((restored.opened.mode & 511n) !== originalMode || (restored.named.mode & 511n) !== originalMode) {
282
314
  throw pathMismatch("isolated producer read-only mode could not be restored");
283
315
  }
@@ -314,18 +346,9 @@ async function handoffFile(params) {
314
346
  failures.push(error);
315
347
  }
316
348
  }
317
- const primary = failures[0];
318
- const cause = combinedFailure(primary, failures.slice(1));
319
349
  if (!created)
320
- throw cause;
321
- throw new FsSafeError(state.closeFailed || failures.length > 1 ? "helper-failed" : primary instanceof FsSafeError ? primary.code : "helper-failed", "created file publication failed", {
322
- cause,
323
- details: {
324
- publication: { status: state.publication }, cleanup: state.cleanup,
325
- resources: state.closeFailed ? "close-failed" : "closed",
326
- path: params.targetPath, dev: identity.dev, ino: identity.ino,
327
- },
328
- });
350
+ throw combinedFailure(failures[0], failures.slice(1));
351
+ throw state.failure(failures, "isolated producer handoff and settlement failed");
329
352
  }
330
353
  export function handoffPrivateProducerFile(params) {
331
354
  return handoffFile(params);
@@ -5,4 +5,3 @@ export declare function tempWorkspace(options: TempWorkspaceOptions): Promise<Te
5
5
  export declare function withTempWorkspace<T>(options: TempWorkspaceOptions, run: (workspace: TempWorkspace) => Promise<T>): Promise<T>;
6
6
  export declare function tempWorkspaceSync(options: TempWorkspaceOptions): TempWorkspaceSync;
7
7
  export declare function withTempWorkspaceSync<T>(options: TempWorkspaceOptions, run: (workspace: TempWorkspaceSync) => T): T;
8
- //# sourceMappingURL=private-temp-workspace.d.ts.map