@openclaw/fs-safe 0.17.0 → 0.18.1

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 (690) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/absolute-path.d.ts +0 -1
  3. package/dist/advanced.d.ts +2 -2
  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 +1 -2
  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-parser-errors.d.ts +0 -1
  16. package/dist/archive-parser.wasm +0 -0
  17. package/dist/archive-plan.d.ts +72 -2
  18. package/dist/archive-plan.js +86 -22
  19. package/dist/archive-read.d.ts +0 -1
  20. package/dist/archive-staging.d.ts +0 -1
  21. package/dist/archive-tar-stream.d.ts +0 -1
  22. package/dist/archive-tar-wasm.d.ts +1 -2
  23. package/dist/archive-zip-admission.d.ts +0 -1
  24. package/dist/archive-zip-count.d.ts +0 -1
  25. package/dist/archive-zip-directory.d.ts +1 -2
  26. package/dist/archive-zip-entry.d.ts +1 -2
  27. package/dist/archive-zip-entry.js +1 -1
  28. package/dist/archive-zip-integrity.d.ts +0 -1
  29. package/dist/archive-zip-loader.d.ts +0 -1
  30. package/dist/archive-zip-manifest.d.ts +0 -1
  31. package/dist/archive-zip-names.d.ts +0 -1
  32. package/dist/archive-zip-preflight.d.ts +0 -1
  33. package/dist/archive.d.ts +8 -6
  34. package/dist/archive.js +204 -168
  35. package/dist/async-lock.d.ts +0 -1
  36. package/dist/atomic.d.ts +3 -2
  37. package/dist/bounded-read-stream.d.ts +0 -1
  38. package/dist/bounded-read.d.ts +0 -1
  39. package/dist/byte-budget.d.ts +0 -1
  40. package/dist/byte-view.d.ts +0 -1
  41. package/dist/clone-metadata.d.ts +0 -1
  42. package/dist/config.d.ts +0 -1
  43. package/dist/containment.d.ts +0 -1
  44. package/dist/copy-file-input.d.ts +0 -1
  45. package/dist/copy-policy.d.ts +0 -1
  46. package/dist/copy-publication.d.ts +1 -2
  47. package/dist/copy-tree-portable.d.ts +0 -1
  48. package/dist/copy-tree-portable.js +9 -6
  49. package/dist/copy.d.ts +0 -1
  50. package/dist/copy.js +5 -5
  51. package/dist/create-owned-file.d.ts +0 -1
  52. package/dist/create.d.ts +16 -3
  53. package/dist/create.js +388 -2
  54. package/dist/creation-boundary.d.ts +60 -0
  55. package/dist/creation-boundary.js +371 -0
  56. package/dist/deny-mutations.d.ts +2 -3
  57. package/dist/deny-mutations.js +55 -35
  58. package/dist/device-path.d.ts +0 -1
  59. package/dist/directory-durability.d.ts +0 -1
  60. package/dist/directory-entry-path.d.ts +0 -1
  61. package/dist/directory-guard.d.ts +2 -7
  62. package/dist/directory-guard.js +25 -56
  63. package/dist/directory-mode-node.d.ts +0 -1
  64. package/dist/directory-mode-node.js +12 -2
  65. package/dist/directory-mode-owner.d.ts +0 -1
  66. package/dist/directory-receipt.d.ts +0 -1
  67. package/dist/durability.d.ts +2 -2
  68. package/dist/effective-uid.d.ts +0 -1
  69. package/dist/error-detail.d.ts +0 -1
  70. package/dist/errors.d.ts +0 -1
  71. package/dist/file-cleanup.d.ts +0 -1
  72. package/dist/file-contents.d.ts +0 -1
  73. package/dist/file-handle-transfer.d.ts +0 -1
  74. package/dist/file-hash.d.ts +0 -1
  75. package/dist/file-hash.js +170 -66
  76. package/dist/file-identity.d.ts +0 -1
  77. package/dist/file-lock-sync-acquisition.d.ts +22 -0
  78. package/dist/file-lock-sync-acquisition.js +98 -0
  79. package/dist/file-lock-sync-admission.d.ts +0 -2
  80. package/dist/file-lock-sync-admission.js +9 -48
  81. package/dist/file-lock-sync-root-acquire.d.ts +0 -1
  82. package/dist/file-lock-sync-root-acquire.js +33 -103
  83. package/dist/file-lock-sync-root-arbitration.d.ts +0 -1
  84. package/dist/file-lock-sync-root-held.d.ts +0 -1
  85. package/dist/file-lock-sync-root-io.d.ts +0 -1
  86. package/dist/file-lock-sync-root-mutation.d.ts +4 -5
  87. package/dist/file-lock-sync-root-mutation.js +7 -9
  88. package/dist/file-lock-sync-root-options.d.ts +0 -1
  89. package/dist/file-lock-sync-root-registration.d.ts +0 -1
  90. package/dist/file-lock-sync-root.d.ts +3 -3
  91. package/dist/file-lock-sync-root.js +14 -87
  92. package/dist/file-lock-sync-stale-admission.d.ts +2 -7
  93. package/dist/file-lock-sync-stale-admission.js +18 -27
  94. package/dist/file-lock-sync.d.ts +4 -22
  95. package/dist/file-lock-sync.js +38 -117
  96. package/dist/file-lock.d.ts +0 -1
  97. package/dist/file-observation.d.ts +0 -1
  98. package/dist/file-store-boundary.d.ts +7 -2
  99. package/dist/file-store-boundary.js +64 -27
  100. package/dist/file-store-prune.d.ts +0 -1
  101. package/dist/file-store-sync-directory.d.ts +0 -1
  102. package/dist/file-store-sync-directory.js +194 -231
  103. package/dist/file-store-sync-write.d.ts +0 -1
  104. package/dist/file-store-sync-write.js +18 -29
  105. package/dist/file-store.d.ts +0 -1
  106. package/dist/file-store.js +4 -10
  107. package/dist/file-sync.d.ts +0 -1
  108. package/dist/filename.d.ts +0 -1
  109. package/dist/filename.js +1 -7
  110. package/dist/fs.d.ts +0 -1
  111. package/dist/guarded-mkdir.d.ts +1 -2
  112. package/dist/guarded-mutation.d.ts +0 -7
  113. package/dist/guarded-mutation.js +6 -11
  114. package/dist/guest-dispatch-python.d.ts +0 -1
  115. package/dist/guest-dispatch-python.js +41 -90
  116. package/dist/guest-native-python.d.ts +0 -1
  117. package/dist/guest.d.ts +0 -1
  118. package/dist/home-dir.d.ts +0 -1
  119. package/dist/index.d.ts +9 -7
  120. package/dist/install-path.d.ts +0 -1
  121. package/dist/json-document-store.d.ts +0 -1
  122. package/dist/json-durable-queue-directory.d.ts +13 -1
  123. package/dist/json-durable-queue-directory.js +134 -0
  124. package/dist/json-durable-queue-ownership.d.ts +0 -1
  125. package/dist/json-durable-queue-ownership.js +42 -61
  126. package/dist/json-durable-queue-read.d.ts +0 -1
  127. package/dist/json-durable-queue-read.js +13 -9
  128. package/dist/json-durable-queue.d.ts +0 -1
  129. package/dist/json-durable-queue.js +8 -132
  130. package/dist/json-store.d.ts +0 -1
  131. package/dist/json-store.js +1 -2
  132. package/dist/json-stringify.d.ts +0 -1
  133. package/dist/json.d.ts +0 -1
  134. package/dist/json.js +7 -17
  135. package/dist/local-file-access.d.ts +0 -1
  136. package/dist/local-file-access.js +3 -10
  137. package/dist/local-file-descriptor.d.ts +0 -1
  138. package/dist/local-roots.d.ts +0 -1
  139. package/dist/lock-config.d.ts +0 -1
  140. package/dist/move-path-cleanup.d.ts +0 -1
  141. package/dist/move-path-stage.d.ts +0 -1
  142. package/dist/move-path.d.ts +0 -1
  143. package/dist/move-path.js +1 -2
  144. package/dist/mutation-authority.d.ts +0 -1
  145. package/dist/native-binding.d.ts +0 -1
  146. package/dist/native-config.d.ts +0 -1
  147. package/dist/native-directory-observation.d.ts +0 -1
  148. package/dist/native-fallback-warning.d.ts +0 -1
  149. package/dist/native-operations.d.ts +1 -5
  150. package/dist/native-operations.js +2 -7
  151. package/dist/native-parent-admission.d.ts +0 -1
  152. package/dist/native-pinned-write-windows.d.ts +1 -2
  153. package/dist/native-pinned-write-windows.js +1 -1
  154. package/dist/native-pinned-write.d.ts +1 -2
  155. package/dist/native-pinned-write.js +7 -16
  156. package/dist/native-policy-directory-observation.d.ts +0 -1
  157. package/dist/native-policy-parent-windows.d.ts +1 -2
  158. package/dist/native-rename-outcome.d.ts +0 -1
  159. package/dist/native-staged-file.d.ts +17 -5
  160. package/dist/native-staged-file.js +56 -65
  161. package/dist/native.d.ts +0 -1
  162. package/dist/opened-file-failure.d.ts +0 -1
  163. package/dist/opened-realpath.d.ts +0 -1
  164. package/dist/output.d.ts +0 -1
  165. package/dist/overwrite-file-handle.d.ts +0 -1
  166. package/dist/owner-dacl.d.ts +0 -1
  167. package/dist/path-case.d.ts +0 -1
  168. package/dist/path-policy.d.ts +0 -1
  169. package/dist/path-prefix.d.ts +0 -1
  170. package/dist/path-scope-lexical.d.ts +0 -1
  171. package/dist/path-segment-route.d.ts +0 -1
  172. package/dist/path-suffix-aliases.d.ts +0 -1
  173. package/dist/path.d.ts +0 -1
  174. package/dist/permission-exec.d.ts +0 -1
  175. package/dist/permission-exec.js +19 -25
  176. package/dist/permissions-public.d.ts +0 -1
  177. package/dist/permissions-windows.d.ts +2 -10
  178. package/dist/permissions-windows.js +10 -30
  179. package/dist/permissions.d.ts +0 -1
  180. package/dist/permissions.js +8 -16
  181. package/dist/pinned-mutation-admission.d.ts +1 -2
  182. package/dist/pinned-mutation-observation.d.ts +0 -1
  183. package/dist/pinned-mutation-shared-route.d.ts +0 -1
  184. package/dist/pinned-open.d.ts +1 -1
  185. package/dist/pinned-open.js +7 -2
  186. package/dist/pinned-operation.d.ts +1 -2
  187. package/dist/pinned-operation.js +3 -16
  188. package/dist/pinned-write-input.d.ts +0 -1
  189. package/dist/pinned-write-mode.d.ts +0 -1
  190. package/dist/pinned-write-mode.js +1 -1
  191. package/dist/pinned-write-staged.d.ts +0 -1
  192. package/dist/pinned-write-staged.js +1 -2
  193. package/dist/pinned-write-types.d.ts +9 -21
  194. package/dist/pinned-write.d.ts +0 -2
  195. package/dist/pinned-write.js +3 -5
  196. package/dist/positional-read.d.ts +0 -1
  197. package/dist/private-directory.d.ts +0 -1
  198. package/dist/private-producer-handoff-sync.d.ts +2 -13
  199. package/dist/private-producer-handoff-sync.js +10 -52
  200. package/dist/private-producer-handoff.d.ts +23 -4
  201. package/dist/private-producer-handoff.js +69 -46
  202. package/dist/private-temp-workspace.d.ts +0 -1
  203. package/dist/private-temp-workspace.js +11 -37
  204. package/dist/publish-copy-stage.d.ts +1 -2
  205. package/dist/publish-file-failure.d.ts +0 -1
  206. package/dist/publish-file.d.ts +0 -2
  207. package/dist/publish-file.js +1 -2
  208. package/dist/read-open-flags.d.ts +0 -1
  209. package/dist/read-opened-file.d.ts +0 -1
  210. package/dist/realpath.d.ts +0 -1
  211. package/dist/recursive-mkdir-path.d.ts +0 -1
  212. package/dist/regular-file.d.ts +0 -1
  213. package/dist/regular-file.js +77 -139
  214. package/dist/replace-directory.d.ts +0 -1
  215. package/dist/replace-directory.js +1 -2
  216. package/dist/replace-file-copy-fallback.d.ts +0 -1
  217. package/dist/replace-file-copy-fallback.js +14 -3
  218. package/dist/replace-file-copy-source.d.ts +0 -1
  219. package/dist/replace-file-copy-source.js +6 -1
  220. package/dist/replace-file-descriptor.d.ts +0 -1
  221. package/dist/replace-file-descriptor.js +6 -1
  222. package/dist/replace-file-mode.d.ts +0 -1
  223. package/dist/replace-file-rename-policy.d.ts +1 -3
  224. package/dist/replace-file-temp-owner.d.ts +12 -13
  225. package/dist/replace-file-temp-owner.js +66 -85
  226. package/dist/replace-file.d.ts +3 -4
  227. package/dist/replace-file.js +1 -1
  228. package/dist/retained-directory-replacement.d.ts +0 -1
  229. package/dist/root-boundary.d.ts +0 -1
  230. package/dist/root-context.d.ts +0 -1
  231. package/dist/root-context.js +3 -7
  232. package/dist/root-create-input.d.ts +1 -2
  233. package/dist/root-directory-creation.d.ts +1 -2
  234. package/dist/root-directory-creation.js +1 -1
  235. package/dist/root-directory-list.d.ts +0 -1
  236. package/dist/root-directory-list.js +3 -7
  237. package/dist/root-directory.d.ts +0 -1
  238. package/dist/root-entries.d.ts +0 -1
  239. package/dist/root-entries.js +2 -2
  240. package/dist/root-errors.d.ts +4 -1
  241. package/dist/root-errors.js +5 -3
  242. package/dist/root-file-final-admission.d.ts +0 -1
  243. package/dist/root-file.d.ts +0 -1
  244. package/dist/root-impl.d.ts +2 -15
  245. package/dist/root-impl.js +136 -112
  246. package/dist/root-move-noreplace.d.ts +0 -1
  247. package/dist/root-move-noreplace.js +4 -10
  248. package/dist/root-move-preflight.d.ts +0 -1
  249. package/dist/root-observed-path.d.ts +0 -1
  250. package/dist/root-observed-path.js +2 -4
  251. package/dist/root-options.d.ts +1 -2
  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 +38 -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-stat.js +2 -4
  258. package/dist/root-path.d.ts +0 -1
  259. package/dist/root-path.js +60 -188
  260. package/dist/root-paths-lexical.d.ts +0 -1
  261. package/dist/root-paths.d.ts +0 -1
  262. package/dist/root-public-types.d.ts +11 -0
  263. package/dist/root-read-admission.d.ts +0 -1
  264. package/dist/root-read-admission.js +31 -44
  265. package/dist/root-remove-identity.d.ts +0 -1
  266. package/dist/root-remove-identity.js +2 -4
  267. package/dist/root-remove-receipt.d.ts +0 -1
  268. package/dist/root-remove.d.ts +0 -1
  269. package/dist/root-remove.js +2 -4
  270. package/dist/root-symlink-policy.d.ts +0 -1
  271. package/dist/root-walk.d.ts +0 -1
  272. package/dist/root-write-admission.d.ts +1 -2
  273. package/dist/root-write-admission.js +3 -7
  274. package/dist/root-write-compatibility.d.ts +0 -1
  275. package/dist/root-write-complete-parent.d.ts +0 -1
  276. package/dist/root-write-complete-parent.js +2 -3
  277. package/dist/root-write-lock-binding.d.ts +0 -1
  278. package/dist/root-write-mode.d.ts +0 -1
  279. package/dist/root-write-publication.d.ts +0 -1
  280. package/dist/root-write-verification.d.ts +1 -2
  281. package/dist/root.d.ts +2 -7
  282. package/dist/safe-path-segment.d.ts +1 -2
  283. package/dist/safe-path-segment.js +2 -5
  284. package/dist/secret-file.d.ts +0 -1
  285. package/dist/secret-file.js +7 -18
  286. package/dist/secret-read-async.d.ts +0 -1
  287. package/dist/secret-read-async.js +5 -5
  288. package/dist/secret-read-policy.d.ts +0 -1
  289. package/dist/secret.d.ts +0 -1
  290. package/dist/secure-file-windows.d.ts +0 -6
  291. package/dist/secure-file-windows.js +13 -28
  292. package/dist/secure-file.d.ts +0 -1
  293. package/dist/secure-file.js +9 -9
  294. package/dist/secure-temp-dir.d.ts +0 -1
  295. package/dist/secure-temp-repair.d.ts +0 -1
  296. package/dist/secure-temp-repair.js +5 -1
  297. package/dist/sibling-staged-file.d.ts +0 -1
  298. package/dist/sibling-staged-file.js +32 -39
  299. package/dist/sibling-temp.d.ts +0 -1
  300. package/dist/sidecar-lock-acquire.d.ts +1 -2
  301. package/dist/sidecar-lock-acquire.js +37 -61
  302. package/dist/sidecar-lock-admission-context.d.ts +0 -1
  303. package/dist/sidecar-lock-admission-parser.d.ts +0 -1
  304. package/dist/sidecar-lock-admission.d.ts +1 -5
  305. package/dist/sidecar-lock-admission.js +1 -7
  306. package/dist/sidecar-lock-handle.d.ts +0 -1
  307. package/dist/sidecar-lock-policy.d.ts +4 -1
  308. package/dist/sidecar-lock-policy.js +23 -0
  309. package/dist/sidecar-lock-reclaim.d.ts +0 -1
  310. package/dist/sidecar-lock-registration.d.ts +13 -0
  311. package/dist/sidecar-lock-registration.js +47 -0
  312. package/dist/sidecar-lock-root.d.ts +0 -1
  313. package/dist/sidecar-lock-stale-admission.d.ts +0 -1
  314. package/dist/sidecar-lock-stale-admission.js +2 -6
  315. package/dist/sidecar-lock-target.d.ts +0 -1
  316. package/dist/sidecar-lock-types.d.ts +22 -17
  317. package/dist/sidecar-lock.d.ts +0 -1
  318. package/dist/sidecar-lock.js +16 -83
  319. package/dist/staged-directory.d.ts +0 -1
  320. package/dist/staged-file-settlement.d.ts +0 -1
  321. package/dist/staged-file-types.d.ts +0 -1
  322. package/dist/stat-observation.d.ts +0 -1
  323. package/dist/store.d.ts +0 -1
  324. package/dist/strict-file-identity.d.ts +0 -1
  325. package/dist/string-coerce.d.ts +0 -1
  326. package/dist/suppressed-error.d.ts +0 -1
  327. package/dist/symlink-parents.d.ts +0 -1
  328. package/dist/temp-cleanup.d.ts +0 -1
  329. package/dist/temp-target.d.ts +0 -1
  330. package/dist/temp-target.js +7 -46
  331. package/dist/temp-workspace-admission.d.ts +0 -8
  332. package/dist/temp-workspace-admission.js +1 -7
  333. package/dist/temp-workspace-child-admission.d.ts +16 -6
  334. package/dist/temp-workspace-child-admission.js +71 -15
  335. package/dist/temp-workspace-descriptor.d.ts +1 -7
  336. package/dist/temp-workspace-descriptor.js +1 -4
  337. package/dist/temp-workspace-owner.d.ts +1 -1
  338. package/dist/temp-workspace-owner.js +45 -22
  339. package/dist/temp-workspace-types.d.ts +0 -1
  340. package/dist/temp.d.ts +0 -1
  341. package/dist/test-hooks.d.ts +0 -1
  342. package/dist/text-atomic.d.ts +0 -1
  343. package/dist/text-atomic.js +1 -1
  344. package/dist/timing.d.ts +0 -1
  345. package/dist/trash.d.ts +0 -1
  346. package/dist/types.d.ts +0 -1
  347. package/dist/unicode-path.d.ts +0 -1
  348. package/dist/walk.d.ts +0 -1
  349. package/dist/windows-command.d.ts +0 -1
  350. package/dist/windows-owner.d.ts +0 -1
  351. package/dist/windows-owner.js +5 -2
  352. package/dist/windows-path-alias.d.ts +1 -1
  353. package/dist/windows-path-alias.js +12 -43
  354. package/dist/windows-path-syntax.d.ts +5 -0
  355. package/dist/windows-path-syntax.js +21 -0
  356. package/dist/windows-security-command.d.ts +0 -1
  357. package/dist/windows-security-facts.d.ts +0 -1
  358. package/dist/write-file-handle.d.ts +0 -1
  359. package/dist/write-open-flags.d.ts +0 -1
  360. package/dist/write-queue.d.ts +0 -1
  361. package/docs/advanced.md +3 -1
  362. package/docs/atomic.md +14 -0
  363. package/docs/copy.md +2 -0
  364. package/docs/mutation-policy-proof.md +6 -4
  365. package/docs/permissions.md +6 -0
  366. package/docs/root.md +10 -0
  367. package/docs/secret-file.md +8 -0
  368. package/docs/sidecar-lock.md +4 -0
  369. package/docs/store.md +6 -0
  370. package/docs/temp.md +8 -1
  371. package/docs/writing.md +14 -3
  372. package/package.json +8 -9
  373. package/dist/absolute-path.d.ts.map +0 -1
  374. package/dist/advanced.d.ts.map +0 -1
  375. package/dist/archive-crc32.d.ts.map +0 -1
  376. package/dist/archive-deadline.d.ts.map +0 -1
  377. package/dist/archive-durability.d.ts.map +0 -1
  378. package/dist/archive-entry.d.ts.map +0 -1
  379. package/dist/archive-errors.d.ts.map +0 -1
  380. package/dist/archive-gzip-tail.d.ts.map +0 -1
  381. package/dist/archive-input.d.ts.map +0 -1
  382. package/dist/archive-kind.d.ts.map +0 -1
  383. package/dist/archive-limits.d.ts.map +0 -1
  384. package/dist/archive-merge.d.ts.map +0 -1
  385. package/dist/archive-native.d.ts +0 -22
  386. package/dist/archive-native.d.ts.map +0 -1
  387. package/dist/archive-native.js +0 -98
  388. package/dist/archive-options.d.ts +0 -25
  389. package/dist/archive-options.d.ts.map +0 -1
  390. package/dist/archive-parser-errors.d.ts.map +0 -1
  391. package/dist/archive-plan.d.ts.map +0 -1
  392. package/dist/archive-policy.d.ts +0 -22
  393. package/dist/archive-policy.d.ts.map +0 -1
  394. package/dist/archive-policy.js +0 -38
  395. package/dist/archive-read.d.ts.map +0 -1
  396. package/dist/archive-staging.d.ts.map +0 -1
  397. package/dist/archive-tar-inspect.d.ts +0 -7
  398. package/dist/archive-tar-inspect.d.ts.map +0 -1
  399. package/dist/archive-tar-inspect.js +0 -62
  400. package/dist/archive-tar-stream.d.ts.map +0 -1
  401. package/dist/archive-tar-wasm.d.ts.map +0 -1
  402. package/dist/archive-tar.d.ts +0 -19
  403. package/dist/archive-tar.d.ts.map +0 -1
  404. package/dist/archive-tar.js +0 -21
  405. package/dist/archive-zip-admission.d.ts.map +0 -1
  406. package/dist/archive-zip-count.d.ts.map +0 -1
  407. package/dist/archive-zip-directory.d.ts.map +0 -1
  408. package/dist/archive-zip-entry.d.ts.map +0 -1
  409. package/dist/archive-zip-integrity.d.ts.map +0 -1
  410. package/dist/archive-zip-loader.d.ts.map +0 -1
  411. package/dist/archive-zip-manifest.d.ts.map +0 -1
  412. package/dist/archive-zip-names.d.ts.map +0 -1
  413. package/dist/archive-zip-preflight.d.ts.map +0 -1
  414. package/dist/archive.d.ts.map +0 -1
  415. package/dist/async-lock.d.ts.map +0 -1
  416. package/dist/atomic.d.ts.map +0 -1
  417. package/dist/bounded-read-stream.d.ts.map +0 -1
  418. package/dist/bounded-read.d.ts.map +0 -1
  419. package/dist/byte-budget.d.ts.map +0 -1
  420. package/dist/byte-view.d.ts.map +0 -1
  421. package/dist/clone-metadata.d.ts.map +0 -1
  422. package/dist/config.d.ts.map +0 -1
  423. package/dist/containment.d.ts.map +0 -1
  424. package/dist/copy-file-input.d.ts.map +0 -1
  425. package/dist/copy-policy.d.ts.map +0 -1
  426. package/dist/copy-publication.d.ts.map +0 -1
  427. package/dist/copy-tree-portable.d.ts.map +0 -1
  428. package/dist/copy.d.ts.map +0 -1
  429. package/dist/create-directory.d.ts +0 -20
  430. package/dist/create-directory.d.ts.map +0 -1
  431. package/dist/create-directory.js +0 -130
  432. package/dist/create-file-async.d.ts +0 -7
  433. package/dist/create-file-async.d.ts.map +0 -1
  434. package/dist/create-file-async.js +0 -121
  435. package/dist/create-file.d.ts +0 -8
  436. package/dist/create-file.d.ts.map +0 -1
  437. package/dist/create-file.js +0 -190
  438. package/dist/create-owned-file.d.ts.map +0 -1
  439. package/dist/create.d.ts.map +0 -1
  440. package/dist/creation-darwin.d.ts +0 -6
  441. package/dist/creation-darwin.d.ts.map +0 -1
  442. package/dist/creation-darwin.js +0 -70
  443. package/dist/creation-file-state.d.ts +0 -19
  444. package/dist/creation-file-state.d.ts.map +0 -1
  445. package/dist/creation-file-state.js +0 -118
  446. package/dist/creation-path.d.ts +0 -21
  447. package/dist/creation-path.d.ts.map +0 -1
  448. package/dist/creation-path.js +0 -71
  449. package/dist/creation-permissions.d.ts +0 -19
  450. package/dist/creation-permissions.d.ts.map +0 -1
  451. package/dist/creation-permissions.js +0 -125
  452. package/dist/deny-mutations.d.ts.map +0 -1
  453. package/dist/device-path.d.ts.map +0 -1
  454. package/dist/directory-durability.d.ts.map +0 -1
  455. package/dist/directory-entry-path.d.ts.map +0 -1
  456. package/dist/directory-guard.d.ts.map +0 -1
  457. package/dist/directory-mode-node.d.ts.map +0 -1
  458. package/dist/directory-mode-owner.d.ts.map +0 -1
  459. package/dist/directory-receipt.d.ts.map +0 -1
  460. package/dist/durability.d.ts.map +0 -1
  461. package/dist/effective-uid.d.ts.map +0 -1
  462. package/dist/error-detail.d.ts.map +0 -1
  463. package/dist/errors.d.ts.map +0 -1
  464. package/dist/file-cleanup.d.ts.map +0 -1
  465. package/dist/file-contents.d.ts.map +0 -1
  466. package/dist/file-handle-transfer.d.ts.map +0 -1
  467. package/dist/file-hash.d.ts.map +0 -1
  468. package/dist/file-identity.d.ts.map +0 -1
  469. package/dist/file-lock-sync-admission.d.ts.map +0 -1
  470. package/dist/file-lock-sync-root-acquire.d.ts.map +0 -1
  471. package/dist/file-lock-sync-root-arbitration.d.ts.map +0 -1
  472. package/dist/file-lock-sync-root-held.d.ts.map +0 -1
  473. package/dist/file-lock-sync-root-io.d.ts.map +0 -1
  474. package/dist/file-lock-sync-root-mutation.d.ts.map +0 -1
  475. package/dist/file-lock-sync-root-options.d.ts.map +0 -1
  476. package/dist/file-lock-sync-root-registration.d.ts.map +0 -1
  477. package/dist/file-lock-sync-root.d.ts.map +0 -1
  478. package/dist/file-lock-sync-stale-admission.d.ts.map +0 -1
  479. package/dist/file-lock-sync.d.ts.map +0 -1
  480. package/dist/file-lock.d.ts.map +0 -1
  481. package/dist/file-observation.d.ts.map +0 -1
  482. package/dist/file-store-boundary.d.ts.map +0 -1
  483. package/dist/file-store-copy-source.d.ts +0 -5
  484. package/dist/file-store-copy-source.d.ts.map +0 -1
  485. package/dist/file-store-copy-source.js +0 -31
  486. package/dist/file-store-limit.d.ts +0 -2
  487. package/dist/file-store-limit.d.ts.map +0 -1
  488. package/dist/file-store-limit.js +0 -8
  489. package/dist/file-store-path.d.ts +0 -3
  490. package/dist/file-store-path.d.ts.map +0 -1
  491. package/dist/file-store-path.js +0 -30
  492. package/dist/file-store-prune.d.ts.map +0 -1
  493. package/dist/file-store-sync-directory.d.ts.map +0 -1
  494. package/dist/file-store-sync-write.d.ts.map +0 -1
  495. package/dist/file-store.d.ts.map +0 -1
  496. package/dist/file-sync.d.ts.map +0 -1
  497. package/dist/filename.d.ts.map +0 -1
  498. package/dist/fs.d.ts.map +0 -1
  499. package/dist/guarded-mkdir.d.ts.map +0 -1
  500. package/dist/guarded-mutation.d.ts.map +0 -1
  501. package/dist/guest-dispatch-python.d.ts.map +0 -1
  502. package/dist/guest-native-python.d.ts.map +0 -1
  503. package/dist/guest.d.ts.map +0 -1
  504. package/dist/home-dir.d.ts.map +0 -1
  505. package/dist/index.d.ts.map +0 -1
  506. package/dist/install-path.d.ts.map +0 -1
  507. package/dist/json-document-store.d.ts.map +0 -1
  508. package/dist/json-durable-queue-directory.d.ts.map +0 -1
  509. package/dist/json-durable-queue-ownership.d.ts.map +0 -1
  510. package/dist/json-durable-queue-paths.d.ts +0 -11
  511. package/dist/json-durable-queue-paths.d.ts.map +0 -1
  512. package/dist/json-durable-queue-paths.js +0 -20
  513. package/dist/json-durable-queue-read.d.ts.map +0 -1
  514. package/dist/json-durable-queue.d.ts.map +0 -1
  515. package/dist/json-store.d.ts.map +0 -1
  516. package/dist/json-stringify.d.ts.map +0 -1
  517. package/dist/json.d.ts.map +0 -1
  518. package/dist/local-file-access.d.ts.map +0 -1
  519. package/dist/local-file-descriptor.d.ts.map +0 -1
  520. package/dist/local-roots.d.ts.map +0 -1
  521. package/dist/lock-config.d.ts.map +0 -1
  522. package/dist/move-path-cleanup.d.ts.map +0 -1
  523. package/dist/move-path-stage.d.ts.map +0 -1
  524. package/dist/move-path.d.ts.map +0 -1
  525. package/dist/mutation-authority.d.ts.map +0 -1
  526. package/dist/native-binding.d.ts.map +0 -1
  527. package/dist/native-config.d.ts.map +0 -1
  528. package/dist/native-directory-observation.d.ts.map +0 -1
  529. package/dist/native-fallback-warning.d.ts.map +0 -1
  530. package/dist/native-operations.d.ts.map +0 -1
  531. package/dist/native-parent-admission.d.ts.map +0 -1
  532. package/dist/native-pinned-write-windows.d.ts.map +0 -1
  533. package/dist/native-pinned-write.d.ts.map +0 -1
  534. package/dist/native-policy-directory-observation.d.ts.map +0 -1
  535. package/dist/native-policy-parent-windows.d.ts.map +0 -1
  536. package/dist/native-rename-outcome.d.ts.map +0 -1
  537. package/dist/native-staged-file.d.ts.map +0 -1
  538. package/dist/native.d.ts.map +0 -1
  539. package/dist/opened-file-failure.d.ts.map +0 -1
  540. package/dist/opened-realpath.d.ts.map +0 -1
  541. package/dist/output.d.ts.map +0 -1
  542. package/dist/overwrite-file-handle.d.ts.map +0 -1
  543. package/dist/owner-dacl.d.ts.map +0 -1
  544. package/dist/path-case.d.ts.map +0 -1
  545. package/dist/path-policy.d.ts.map +0 -1
  546. package/dist/path-prefix.d.ts.map +0 -1
  547. package/dist/path-scope-lexical.d.ts.map +0 -1
  548. package/dist/path-segment-route.d.ts.map +0 -1
  549. package/dist/path-suffix-aliases.d.ts.map +0 -1
  550. package/dist/path.d.ts.map +0 -1
  551. package/dist/permission-exec.d.ts.map +0 -1
  552. package/dist/permissions-public.d.ts.map +0 -1
  553. package/dist/permissions-windows.d.ts.map +0 -1
  554. package/dist/permissions.d.ts.map +0 -1
  555. package/dist/pinned-mutation-admission.d.ts.map +0 -1
  556. package/dist/pinned-mutation-observation.d.ts.map +0 -1
  557. package/dist/pinned-mutation-shared-route.d.ts.map +0 -1
  558. package/dist/pinned-open.d.ts.map +0 -1
  559. package/dist/pinned-operation.d.ts.map +0 -1
  560. package/dist/pinned-write-input.d.ts.map +0 -1
  561. package/dist/pinned-write-mode.d.ts.map +0 -1
  562. package/dist/pinned-write-staged.d.ts.map +0 -1
  563. package/dist/pinned-write-types.d.ts.map +0 -1
  564. package/dist/pinned-write.d.ts.map +0 -1
  565. package/dist/positional-read.d.ts.map +0 -1
  566. package/dist/private-directory.d.ts.map +0 -1
  567. package/dist/private-producer-handoff-sync.d.ts.map +0 -1
  568. package/dist/private-producer-handoff.d.ts.map +0 -1
  569. package/dist/private-temp-workspace.d.ts.map +0 -1
  570. package/dist/publish-copy-stage.d.ts.map +0 -1
  571. package/dist/publish-file-failure.d.ts.map +0 -1
  572. package/dist/publish-file.d.ts.map +0 -1
  573. package/dist/read-open-flags.d.ts.map +0 -1
  574. package/dist/read-opened-file.d.ts.map +0 -1
  575. package/dist/realpath.d.ts.map +0 -1
  576. package/dist/recursive-mkdir-path.d.ts.map +0 -1
  577. package/dist/regular-file.d.ts.map +0 -1
  578. package/dist/replace-directory.d.ts.map +0 -1
  579. package/dist/replace-file-copy-fallback.d.ts.map +0 -1
  580. package/dist/replace-file-copy-source.d.ts.map +0 -1
  581. package/dist/replace-file-descriptor.d.ts.map +0 -1
  582. package/dist/replace-file-mode.d.ts.map +0 -1
  583. package/dist/replace-file-rename-policy.d.ts.map +0 -1
  584. package/dist/replace-file-temp-owner.d.ts.map +0 -1
  585. package/dist/replace-file.d.ts.map +0 -1
  586. package/dist/retained-directory-replacement.d.ts.map +0 -1
  587. package/dist/root-boundary.d.ts.map +0 -1
  588. package/dist/root-context.d.ts.map +0 -1
  589. package/dist/root-create-input.d.ts.map +0 -1
  590. package/dist/root-directory-creation.d.ts.map +0 -1
  591. package/dist/root-directory-list.d.ts.map +0 -1
  592. package/dist/root-directory.d.ts.map +0 -1
  593. package/dist/root-entries.d.ts.map +0 -1
  594. package/dist/root-errors.d.ts.map +0 -1
  595. package/dist/root-file-final-admission.d.ts.map +0 -1
  596. package/dist/root-file.d.ts.map +0 -1
  597. package/dist/root-impl.d.ts.map +0 -1
  598. package/dist/root-move-noreplace.d.ts.map +0 -1
  599. package/dist/root-move-preflight.d.ts.map +0 -1
  600. package/dist/root-observed-path.d.ts.map +0 -1
  601. package/dist/root-options.d.ts.map +0 -1
  602. package/dist/root-path-errors.d.ts.map +0 -1
  603. package/dist/root-path-existing.d.ts.map +0 -1
  604. package/dist/root-path-observation.d.ts.map +0 -1
  605. package/dist/root-path-stat.d.ts.map +0 -1
  606. package/dist/root-path-symlink.d.ts +0 -7
  607. package/dist/root-path-symlink.d.ts.map +0 -1
  608. package/dist/root-path-symlink.js +0 -55
  609. package/dist/root-path.d.ts.map +0 -1
  610. package/dist/root-paths-lexical.d.ts.map +0 -1
  611. package/dist/root-paths.d.ts.map +0 -1
  612. package/dist/root-read-admission.d.ts.map +0 -1
  613. package/dist/root-remove-identity.d.ts.map +0 -1
  614. package/dist/root-remove-receipt.d.ts.map +0 -1
  615. package/dist/root-remove.d.ts.map +0 -1
  616. package/dist/root-symlink-policy.d.ts.map +0 -1
  617. package/dist/root-walk.d.ts.map +0 -1
  618. package/dist/root-write-admission.d.ts.map +0 -1
  619. package/dist/root-write-compatibility.d.ts.map +0 -1
  620. package/dist/root-write-complete-parent.d.ts.map +0 -1
  621. package/dist/root-write-lock-binding.d.ts.map +0 -1
  622. package/dist/root-write-mode.d.ts.map +0 -1
  623. package/dist/root-write-publication.d.ts.map +0 -1
  624. package/dist/root-write-verification.d.ts.map +0 -1
  625. package/dist/root.d.ts.map +0 -1
  626. package/dist/safe-path-segment.d.ts.map +0 -1
  627. package/dist/secret-file.d.ts.map +0 -1
  628. package/dist/secret-read-async.d.ts.map +0 -1
  629. package/dist/secret-read-policy.d.ts.map +0 -1
  630. package/dist/secret.d.ts.map +0 -1
  631. package/dist/secure-file-windows.d.ts.map +0 -1
  632. package/dist/secure-file.d.ts.map +0 -1
  633. package/dist/secure-temp-dir.d.ts.map +0 -1
  634. package/dist/secure-temp-repair.d.ts.map +0 -1
  635. package/dist/sibling-staged-file.d.ts.map +0 -1
  636. package/dist/sibling-temp.d.ts.map +0 -1
  637. package/dist/sidecar-lock-acquire.d.ts.map +0 -1
  638. package/dist/sidecar-lock-admission-context.d.ts.map +0 -1
  639. package/dist/sidecar-lock-admission-parser.d.ts.map +0 -1
  640. package/dist/sidecar-lock-admission.d.ts.map +0 -1
  641. package/dist/sidecar-lock-handle.d.ts.map +0 -1
  642. package/dist/sidecar-lock-policy.d.ts.map +0 -1
  643. package/dist/sidecar-lock-reclaim.d.ts.map +0 -1
  644. package/dist/sidecar-lock-root.d.ts.map +0 -1
  645. package/dist/sidecar-lock-stale-admission.d.ts.map +0 -1
  646. package/dist/sidecar-lock-target.d.ts.map +0 -1
  647. package/dist/sidecar-lock-types.d.ts.map +0 -1
  648. package/dist/sidecar-lock.d.ts.map +0 -1
  649. package/dist/staged-directory.d.ts.map +0 -1
  650. package/dist/staged-file-settlement.d.ts.map +0 -1
  651. package/dist/staged-file-types.d.ts.map +0 -1
  652. package/dist/standalone-publication-path.d.ts +0 -2
  653. package/dist/standalone-publication-path.d.ts.map +0 -1
  654. package/dist/standalone-publication-path.js +0 -6
  655. package/dist/stat-observation.d.ts.map +0 -1
  656. package/dist/store.d.ts.map +0 -1
  657. package/dist/strict-file-identity.d.ts.map +0 -1
  658. package/dist/string-coerce.d.ts.map +0 -1
  659. package/dist/suppressed-error.d.ts.map +0 -1
  660. package/dist/symlink-parents.d.ts.map +0 -1
  661. package/dist/temp-cleanup.d.ts.map +0 -1
  662. package/dist/temp-target.d.ts.map +0 -1
  663. package/dist/temp-workspace-admission.d.ts.map +0 -1
  664. package/dist/temp-workspace-child-admission.d.ts.map +0 -1
  665. package/dist/temp-workspace-descriptor.d.ts.map +0 -1
  666. package/dist/temp-workspace-identity.d.ts +0 -15
  667. package/dist/temp-workspace-identity.d.ts.map +0 -1
  668. package/dist/temp-workspace-identity.js +0 -41
  669. package/dist/temp-workspace-owner.d.ts.map +0 -1
  670. package/dist/temp-workspace-permissions.d.ts +0 -4
  671. package/dist/temp-workspace-permissions.d.ts.map +0 -1
  672. package/dist/temp-workspace-permissions.js +0 -32
  673. package/dist/temp-workspace-types.d.ts.map +0 -1
  674. package/dist/temp.d.ts.map +0 -1
  675. package/dist/test-hooks.d.ts.map +0 -1
  676. package/dist/text-atomic.d.ts.map +0 -1
  677. package/dist/timing.d.ts.map +0 -1
  678. package/dist/trash.d.ts.map +0 -1
  679. package/dist/types.d.ts.map +0 -1
  680. package/dist/unicode-path.d.ts.map +0 -1
  681. package/dist/walk.d.ts.map +0 -1
  682. package/dist/windows-command.d.ts.map +0 -1
  683. package/dist/windows-owner.d.ts.map +0 -1
  684. package/dist/windows-path-alias.d.ts.map +0 -1
  685. package/dist/windows-security-command.d.ts.map +0 -1
  686. package/dist/windows-security-facts.d.ts.map +0 -1
  687. package/dist/write-file-handle.d.ts.map +0 -1
  688. package/dist/write-open-flags.d.ts.map +0 -1
  689. package/dist/write-queue.d.ts.map +0 -1
  690. /package/dist/{archive-options.js → root-public-types.js} +0 -0
@@ -8,7 +8,6 @@ export function formatPermissionErrorDetail(value) {
8
8
  const formatted = formatErrorDetail(value);
9
9
  return formatted.length > 400 ? `${formatted.slice(0, 399)}…` : formatted;
10
10
  }
11
- const MISSING_DATA_PROPERTY = Object.freeze({ found: false });
12
11
  const MAX_CAUGHT_FAILURE_PROTOTYPES = 4;
13
12
  const primitiveString = String;
14
13
  const isUint8Array = utilTypes.isUint8Array;
@@ -36,32 +35,28 @@ function isInspectableCaughtObject(value) {
36
35
  }
37
36
  }
38
37
  function dataProperty(value, name) {
39
- if (!isInspectableCaughtObject(value))
40
- return MISSING_DATA_PROPERTY;
41
38
  let current = value;
42
39
  for (let depth = 0; current !== null && depth < MAX_CAUGHT_FAILURE_PROTOTYPES; depth += 1) {
43
40
  if (!isInspectableCaughtObject(current))
44
- return MISSING_DATA_PROPERTY;
41
+ return undefined;
45
42
  let descriptor;
46
43
  try {
47
44
  descriptor = Object.getOwnPropertyDescriptor(current, name);
48
45
  }
49
46
  catch {
50
- return MISSING_DATA_PROPERTY;
47
+ return undefined;
51
48
  }
52
49
  if (descriptor) {
53
- return Object.hasOwn(descriptor, "value")
54
- ? { found: true, value: descriptor.value }
55
- : MISSING_DATA_PROPERTY;
50
+ return Object.hasOwn(descriptor, "value") ? descriptor : undefined;
56
51
  }
57
52
  try {
58
53
  current = Object.getPrototypeOf(current);
59
54
  }
60
55
  catch {
61
- return MISSING_DATA_PROPERTY;
56
+ return undefined;
62
57
  }
63
58
  }
64
- return MISSING_DATA_PROPERTY;
59
+ return undefined;
65
60
  }
66
61
  function caughtPrimitiveDisplay(value) {
67
62
  if (value !== null && (typeof value === "object" || typeof value === "function"))
@@ -78,9 +73,9 @@ export function formatCaughtPermissionFailure(error) {
78
73
  }
79
74
  const message = dataProperty(error, "message");
80
75
  const name = dataProperty(error, "name");
81
- const rawMessage = message.found && typeof message.value === "string"
76
+ const rawMessage = typeof message?.value === "string"
82
77
  ? message.value : "";
83
- const rawName = name.found && typeof name.value === "string"
78
+ const rawName = typeof name?.value === "string"
84
79
  ? name.value : "";
85
80
  const messageText = rawMessage.slice(0, 400);
86
81
  const nameText = rawName.slice(0, 400);
@@ -123,12 +118,11 @@ function commandFailureFields(error) {
123
118
  const signal = dataProperty(error, "signal");
124
119
  const stderr = dataProperty(error, "stderr");
125
120
  return {
126
- found: killed.found || code.found || signal.found || stderr.found,
127
- timedOut: killed.found && killed.value === true &&
128
- signal.found && signal.value === "SIGKILL",
129
- exitCode: code.found && typeof code.value === "number" ? code.value : null,
130
- signal: signal.found && typeof signal.value === "string" ? signal.value : null,
131
- stderr: stderr.found ? safeStderr(stderr.value) : "",
121
+ found: !!(killed || code || signal || stderr),
122
+ timedOut: killed?.value === true && signal?.value === "SIGKILL",
123
+ exitCode: typeof code?.value === "number" ? code.value : null,
124
+ signal: typeof signal?.value === "string" ? signal.value : null,
125
+ stderr: stderr ? safeStderr(stderr.value) : "",
132
126
  };
133
127
  }
134
128
  export class PermissionCommandError extends Error {
@@ -155,20 +149,20 @@ export class PermissionCommandError extends Error {
155
149
  export function getPermissionCommandFailure(error, command, durationMs) {
156
150
  if (isInspectableCaughtObject(error) && utilTypes.isNativeError(error)) {
157
151
  const name = dataProperty(error, "name");
158
- if (name.found && name.value === "PermissionCommandError") {
152
+ if (name?.value === "PermissionCommandError") {
159
153
  const wrappedCommand = dataProperty(error, "command");
160
154
  const wrappedDuration = dataProperty(error, "durationMs");
161
155
  const wrappedTimedOut = dataProperty(error, "timedOut");
162
156
  const wrappedExitCode = dataProperty(error, "exitCode");
163
157
  const wrappedSignal = dataProperty(error, "signal");
164
158
  const wrappedStderr = dataProperty(error, "stderr");
165
- if (wrappedCommand.found && typeof wrappedCommand.value === "string" &&
166
- wrappedDuration.found && typeof wrappedDuration.value === "number" &&
159
+ if (typeof wrappedCommand?.value === "string" &&
160
+ typeof wrappedDuration?.value === "number" &&
167
161
  Number.isSafeInteger(wrappedDuration.value) && wrappedDuration.value >= 0 &&
168
- wrappedTimedOut.found && typeof wrappedTimedOut.value === "boolean" &&
169
- wrappedExitCode.found && (wrappedExitCode.value === null || typeof wrappedExitCode.value === "number") &&
170
- wrappedSignal.found && (wrappedSignal.value === null || typeof wrappedSignal.value === "string") &&
171
- wrappedStderr.found) {
162
+ typeof wrappedTimedOut?.value === "boolean" &&
163
+ wrappedExitCode && (wrappedExitCode.value === null || typeof wrappedExitCode.value === "number") &&
164
+ wrappedSignal && (wrappedSignal.value === null || typeof wrappedSignal.value === "string") &&
165
+ wrappedStderr) {
172
166
  return {
173
167
  command: wrappedCommand.value,
174
168
  durationMs: wrappedDuration.value,
@@ -1,4 +1,3 @@
1
1
  export { formatOctal, formatPermissionDetail, formatPermissionRemediation, inspectPathPermissions, isGroupReadable, isGroupWritable, isWorldReadable, isWorldWritable, modeBits, safeStat, type PermissionCheck, type PermissionCheckOptions, type PermissionCommandFailure, type SafeStatResult, } from "./permissions.js";
2
2
  export { createPrivateDirectory, type CreatePrivateDirectoryOptions, } from "./private-directory.js";
3
3
  export { readOwnerAndDacl, type OwnerAndDaclResult, type WindowsAccessControlEntry, type WindowsAceFlags, } from "./owner-dacl.js";
4
- //# sourceMappingURL=permissions-public.d.ts.map
@@ -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") {
@@ -1,6 +1,6 @@
1
1
  import { type DenyMutationPolicy } from "./deny-mutations.js";
2
2
  import { type RootBoundaryIdentity } from "./root-boundary.js";
3
- import type { PinnedWriteMutationAdmission } from "./pinned-write.js";
3
+ import type { PinnedWriteMutationAdmission } from "./pinned-write-types.js";
4
4
  import type { MutationSymlinkPolicy } from "./root-symlink-policy.js";
5
5
  export type PinnedMutationPolicySnapshot = Readonly<{
6
6
  denyMutations?: DenyMutationPolicy;
@@ -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
  }
@@ -77,7 +77,12 @@ export function openPinnedFileSync(params) {
77
77
  }
78
78
  finally {
79
79
  if (fd !== null) {
80
- ioFs.closeSync(fd);
80
+ try {
81
+ ioFs.closeSync(fd);
82
+ }
83
+ catch {
84
+ // Preserve the failed admission result; success transfers fd above.
85
+ }
81
86
  }
82
87
  }
83
88
  }
@@ -1,2 +1 @@
1
- export declare function validatePinnedOperationPayload(payload: Record<string, unknown>): void;
2
- //# sourceMappingURL=pinned-operation.d.ts.map
1
+ export declare function validatePinnedRelativePath(relativePath: unknown): void;
@@ -1,19 +1,7 @@
1
1
  import { FsSafeError } from "./errors.js";
2
- export function validatePinnedOperationPayload(payload) {
3
- if (typeof payload.relativePath === "string") {
4
- validatePinnedRelativePath(payload.relativePath);
5
- }
6
- if (typeof payload.relativeParentPath === "string") {
7
- validatePinnedRelativePath(payload.relativeParentPath);
8
- }
9
- if (typeof payload.from === "string") {
10
- validatePinnedRelativePath(payload.from);
11
- }
12
- if (typeof payload.to === "string") {
13
- validatePinnedRelativePath(payload.to);
14
- }
15
- }
16
- function validatePinnedRelativePath(relativePath) {
2
+ export function validatePinnedRelativePath(relativePath) {
3
+ if (typeof relativePath !== "string")
4
+ return;
17
5
  if (relativePath.length === 0 || relativePath === ".") {
18
6
  return;
19
7
  }
@@ -21,7 +9,6 @@ function validatePinnedRelativePath(relativePath) {
21
9
  throw new FsSafeError("invalid-path", "relative path contains a NUL byte");
22
10
  }
23
11
  if (relativePath.startsWith("/") ||
24
- relativePath.startsWith("//") ||
25
12
  relativePath === ".." ||
26
13
  relativePath.startsWith("../") ||
27
14
  relativePath.startsWith("..\\")) {
@@ -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
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import { FsSafeError } from "./errors.js";
3
3
  import { assertSynchronousCallbackResult } from "./mutation-authority.js";
4
- import { assertPrivateCreationFile } from "./creation-file-state.js";
4
+ import { assertPrivateCreationFile } from "./creation-boundary.js";
5
5
  export function assertPinnedWriteMode(fd, mode, privateCreation = false) {
6
6
  if (process.platform === "win32")
7
7
  return;
@@ -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
@@ -3,8 +3,7 @@ import fsSync, {} from "node:fs";
3
3
  import fs, {} from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { createFileHandle } from "./create.js";
6
- import { hasPreservedCreationArtifacts } from "./creation-file-state.js";
7
- import { creationAdmissionFromParent } from "./creation-path.js";
6
+ import { hasPreservedCreationArtifacts, creationAdmissionFromParent } from "./creation-boundary.js";
8
7
  import { syncDirectoryBestEffort } from "./directory-durability.js";
9
8
  import { FsSafeError } from "./errors.js";
10
9
  import { sameFileIdentity, sha256Hex } from "./file-identity.js";
@@ -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
@@ -1,6 +1,5 @@
1
1
  import type { FileIdentityStat } from "./file-identity.js";
2
2
  import type { PinnedWriteParams, RenameIdentityPolicy } from "./pinned-write-types.js";
3
- export type { PinnedWriteInput, RenameIdentityPolicy, PublishedWriteIdentity, PinnedMutationAdmissionReceipt, PinnedMutationAuthorizationToken, PinnedCreatedDirectoryReceipt, PinnedMutationParentWalkSession, PinnedWriteMutationAdmission, PinnedWriteParams, } from "./pinned-write-types.js";
4
3
  export declare function runPinnedWriteHelper(params: PinnedWriteParams): Promise<FileIdentityStat>;
5
4
  export declare function runPinnedWriteWithRenamePolicy(params: PinnedWriteParams & {
6
5
  targetPath: string;
@@ -11,4 +10,3 @@ export declare function withPinnedWriteRenameIdentityLock<T>(params: {
11
10
  targetPath: string;
12
11
  relativeTargetPath: string;
13
12
  }, run: () => Promise<T>): Promise<T>;
14
- //# sourceMappingURL=pinned-write.d.ts.map
@@ -3,7 +3,7 @@ import fsSync, {} from "node:fs";
3
3
  import fs from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { createFileHandle } from "./create.js";
6
- import { creationAdmissionFromParent } from "./creation-path.js";
6
+ import { creationAdmissionFromParent } from "./creation-boundary.js";
7
7
  import { normalizeMaxBytes } from "./byte-budget.js";
8
8
  import { assertAsyncDirectoryGuard, createAsyncDirectoryGuard, createNearestExistingDirectoryGuard, inspectDirectoryIdentity } from "./directory-guard.js";
9
9
  import { FsSafeError } from "./errors.js";
@@ -13,7 +13,7 @@ import { withAsyncDirectoryGuards } from "./guarded-mutation.js";
13
13
  import { mkdirPathComponentsWithGuards } from "./guarded-mkdir.js";
14
14
  import { runPinnedWriteNative } from "./native-pinned-write.js";
15
15
  import { getNativeBinding } from "./native.js";
16
- import { validatePinnedOperationPayload } from "./pinned-operation.js";
16
+ import { validatePinnedRelativePath } from "./pinned-operation.js";
17
17
  import { cleanupPinnedFilePath } from "./file-cleanup.js";
18
18
  import { withSidecarLock } from "./sidecar-lock.js";
19
19
  import { getFsSafeTestHooks } from "./test-hooks.js";
@@ -71,9 +71,7 @@ export async function runPinnedWriteHelper(params) {
71
71
  rootIdentity,
72
72
  };
73
73
  assertSafeBasename(normalizedParams.basename);
74
- validatePinnedOperationPayload({
75
- relativeParentPath: normalizedParams.relativeParentPath,
76
- });
74
+ validatePinnedRelativePath(normalizedParams.relativeParentPath);
77
75
  assertNoWindowsPathAlias(normalizedParams.rootPath, "filesystem", "pinned write root uses a Windows filesystem namespace alias");
78
76
  assertNoWindowsPathAlias(normalizedParams.relativeParentPath, "relative", "pinned write parent uses a Windows filesystem namespace alias");
79
77
  assertNoWindowsPathAlias(normalizedParams.basename, "relative", "pinned write basename uses a Windows filesystem namespace alias");
@@ -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
@@ -1,14 +1,3 @@
1
- import { type BigIntStats } from "node:fs";
2
1
  import { type OwnedFileDescriptorSync } from "./create-owned-file.js";
3
- export declare function handoffCreatedFileSync(params: {
4
- source: OwnedFileDescriptorSync;
5
- sourcePath: string;
6
- targetPath: string;
7
- identity: BigIntStats;
8
- assertSourceParent: () => void;
9
- assertTargetParent: () => void;
10
- assertBeforeMutation?: () => void;
11
- verifyDescriptor?: (fd: number, path: string, links: number) => void;
12
- onPublished?: () => void;
13
- }): OwnedFileDescriptorSync;
14
- //# sourceMappingURL=private-producer-handoff-sync.d.ts.map
2
+ import { type CreatedHandoffParams } from "./private-producer-handoff.js";
3
+ export declare function handoffCreatedFileSync(params: CreatedHandoffParams<OwnedFileDescriptorSync, void>): OwnedFileDescriptorSync;
@@ -1,16 +1,13 @@
1
- import fs, {} from "node:fs";
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
  }