@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
package/dist/root-impl.js CHANGED
@@ -56,7 +56,7 @@ import fs from "node:fs/promises";
56
56
  import path from "node:path";
57
57
  import { normalizeMaxBytes } from "./byte-budget.js";
58
58
  import { assertCopySourceCurrent, resolveFileCopyCloneMode } from "./copy-file-input.js";
59
- import { assertPrivateFileCreationAvailable, resolveCreationPermissions } from "./creation-permissions.js";
59
+ import { assertPrivateFileCreationAvailable, resolveCreationPermissions } from "./creation-boundary.js";
60
60
  import { assertAsyncDirectoryGuard, assertSyncDirectoryGuard, createAsyncDirectoryGuard, createNearestExistingDirectoryGuard } from "./directory-guard.js";
61
61
  import { FsSafeError } from "./errors.js";
62
62
  import { syncDirectoryBestEffort } from "./directory-durability.js";
@@ -68,11 +68,12 @@ import { openedPathResolutionError, recordExclusiveCreateFailure, recordOpenedFi
68
68
  import { runPinnedWriteHelper, runPinnedWriteWithRenamePolicy } from "./pinned-write.js";
69
69
  import { preparePinnedWriteMutationAdmission, snapshotPinnedMutationPolicy } from "./pinned-mutation-admission.js";
70
70
  import { getNativeBinding } from "./native.js";
71
- import { validatePinnedOperationPayload } from "./pinned-operation.js";
71
+ import { validatePinnedRelativePath } from "./pinned-operation.js";
72
72
  import { PATH_ALIAS_POLICIES } from "./path-policy.js";
73
73
  import { assertNoNulPathInput, hasNodeErrorCode, isNotFoundPathError, isSymlinkOpenError, } from "./path.js";
74
74
  import { readOpenedFileSafely } from "./read-opened-file.js";
75
75
  import { cleanupPinnedFilePath } from "./file-cleanup.js";
76
+ import { sameFileIdentity } from "./file-identity.js";
76
77
  import { removePathIfIdentityUnchanged } from "./replace-file-temp-owner.js";
77
78
  import { realpathSync } from "./realpath.js";
78
79
  import { mkdirPathFallback, prepareRootWriteTarget, tryMkdirAtExactParent } from "./root-directory-creation.js";
@@ -85,7 +86,7 @@ import { statResolvedPathInRoot } from "./root-path-stat.js";
85
86
  import { entriesInRoot } from "./root-entries.js";
86
87
  import { assertMoveMutationAllowed } from "./root-move-preflight.js";
87
88
  import { assertRootIdentityCurrent, assertRootIdentityCurrentSync, assertValidRootDestinationPath, assertValidRootRelativePath, ensureTrailingSep, expandRelativePathWithHome, resolvePathInRoot, resolveRootContext, rootRelativeReadPath, } from "./root-context.js";
88
- import { fileNotFoundError, hardlinkedPathNotAllowedError, isAlreadyExistsError, normalizePinnedPathError, normalizePinnedWriteError, outsideWorkspaceError, } from "./root-errors.js";
89
+ import { errorCauseOptions, fileNotFoundError, hardlinkedPathNotAllowedError, isAlreadyExistsError, normalizePinnedPathError, normalizePinnedWriteError, outsideWorkspaceError, } from "./root-errors.js";
89
90
  import { getFsSafeTestHooks } from "./test-hooks.js";
90
91
  import { stringifyJsonDocument } from "./json-stringify.js";
91
92
  import { walkRoot } from "./root-walk.js";
@@ -186,30 +187,19 @@ async function openVerifiedLocalFile(filePath, options) {
186
187
  }
187
188
  }
188
189
  export class RootHandle {
189
- rootGuard;
190
- rootIdentity;
190
+ context;
191
191
  rootDir;
192
192
  rootReal;
193
193
  rootWithSep;
194
194
  defaults;
195
195
  constructor(context, defaults = {}) {
196
- this.rootGuard = context.rootGuard;
197
- this.rootIdentity = context.rootIdentity;
196
+ this.context = context;
198
197
  this.rootDir = context.rootDir;
199
198
  this.rootReal = context.rootReal;
200
199
  this.rootWithSep = context.rootWithSep;
201
200
  this.defaults = defaults;
202
201
  registerFileLockSyncRootAdapter(this, context, defaults);
203
202
  }
204
- get context() {
205
- return {
206
- rootDir: this.rootDir,
207
- rootGuard: this.rootGuard,
208
- rootIdentity: this.rootIdentity,
209
- rootReal: this.rootReal,
210
- rootWithSep: this.rootWithSep,
211
- };
212
- }
213
203
  mutationOptions(options) {
214
204
  return {
215
205
  ...options,
@@ -224,9 +214,9 @@ export class RootHandle {
224
214
  }
225
215
  async open(relativePath, options = {}) {
226
216
  return await openFileInRoot(this.context, {
227
- relativePath,
228
217
  ...readDefaults(this.defaults),
229
218
  ...options,
219
+ relativePath,
230
220
  });
231
221
  }
232
222
  async read(relativePath, options = {}) {
@@ -246,9 +236,11 @@ export class RootHandle {
246
236
  return JSON.parse(await this.readText(relativePath, options));
247
237
  }
248
238
  async readAbsolute(filePath, options = {}) {
249
- return await readPathInRoot(this.context, {
250
- filePath,
251
- ...mergeReadOptions(this.defaults, options),
239
+ const context = this.context;
240
+ const readOptions = mergeReadOptions(this.defaults, options);
241
+ return await readFileInRoot(context, {
242
+ relativePath: rootRelativeReadPath(context, filePath),
243
+ ...readOptions,
252
244
  });
253
245
  }
254
246
  reader(options = {}) {
@@ -260,10 +252,11 @@ export class RootHandle {
260
252
  assertValidRootDestinationPath(relativePath);
261
253
  const writeMode = options.writeMode ?? "replace";
262
254
  const target = await openWritableFileInRoot(this.context, {
263
- relativePath,
264
255
  mkdir: this.defaults.mkdir,
265
256
  mode: this.defaults.mode,
266
257
  ...this.mutationOptions(options),
258
+ relativePath,
259
+ expectedWritePath: undefined,
267
260
  append: writeMode === "append",
268
261
  truncateExisting: writeMode === "replace",
269
262
  }).catch(rethrowMutationAuthorityError);
@@ -272,11 +265,11 @@ export class RootHandle {
272
265
  async append(relativePath, data, options = {}) {
273
266
  assertValidRootDestinationPath(relativePath);
274
267
  await appendFileInRoot(this.context, {
275
- relativePath,
276
- data,
277
268
  mkdir: this.defaults.mkdir,
278
269
  mode: this.defaults.mode,
279
270
  ...this.mutationOptions(options),
271
+ relativePath,
272
+ data,
280
273
  durable: options.durable ?? this.defaults.durable ?? true,
281
274
  }).catch(rethrowMutationAuthorityError);
282
275
  }
@@ -285,33 +278,37 @@ export class RootHandle {
285
278
  validateRemoveOptions(options);
286
279
  options.signal?.throwIfAborted();
287
280
  await removePathInRoot(this.context, {
288
- relativePath,
289
281
  ...this.mutationOptions(options),
282
+ relativePath,
290
283
  }).catch(rethrowMutationAuthorityError);
291
284
  }
292
285
  async mkdir(relativePath, options = {}) {
293
286
  assertValidRootDestinationPath(relativePath);
294
287
  await mkdirPathInRoot(this.context, {
295
- relativePath,
296
288
  ...this.mutationOptions(options),
289
+ relativePath,
290
+ allowRoot: false,
297
291
  }).catch(rethrowMutationAuthorityError);
298
292
  }
299
293
  async ensureRoot(options = {}) {
300
294
  await mkdirPathInRoot(this.context, {
295
+ ...this.mutationOptions(options),
301
296
  relativePath: "",
302
297
  allowRoot: true,
303
- ...this.mutationOptions(options),
304
298
  }).catch(rethrowMutationAuthorityError);
305
299
  }
306
300
  async write(relativePath, data, options = {}) {
307
301
  assertValidRootDestinationPath(relativePath);
308
302
  await writeFileInRoot(this.context, {
309
- relativePath,
310
- data,
311
303
  mkdir: this.defaults.mkdir,
312
304
  mode: this.defaults.mode,
313
305
  renameIdentity: this.defaults.renameIdentity,
314
306
  ...this.mutationOptions(options),
307
+ atomic: undefined,
308
+ private: undefined,
309
+ strictFileSync: undefined,
310
+ relativePath,
311
+ data,
315
312
  durable: options.durable ?? this.defaults.durable ?? true,
316
313
  }).catch(rethrowMutationAuthorityError);
317
314
  }
@@ -319,11 +316,11 @@ export class RootHandle {
319
316
  assertValidRootDestinationPath(relativePath);
320
317
  const durable = options.durable ?? this.defaults.durable ?? true;
321
318
  await writeFileInRoot(this.context, {
322
- relativePath,
323
- data,
324
319
  mkdir: this.defaults.mkdir,
325
320
  mode: this.defaults.mode,
326
321
  ...this.mutationOptions(createInputOptions(data, options, this.defaults.maxBytes)),
322
+ relativePath,
323
+ data,
327
324
  durable: durable !== false,
328
325
  strictFileSync: durable === "file",
329
326
  overwrite: false,
@@ -343,12 +340,13 @@ export class RootHandle {
343
340
  options.signal?.throwIfAborted();
344
341
  assertValidRootDestinationPath(relativePath);
345
342
  const { maxBytes, ...copyOptions } = this.mutationOptions(options);
343
+ const copySource = typeof source === "string" ? source : { root: source.root, relativePath: source.relativePath };
346
344
  await copyFileInRoot(this.context, {
347
- source: typeof source === "string" ? source : { root: source.root, relativePath: source.relativePath },
348
- relativePath,
349
345
  maxBytes: normalizeMaxBytes(maxBytes, { defaultValue: this.defaults.maxBytes }),
350
346
  mkdir: this.defaults.mkdir,
351
347
  ...copyOptions,
348
+ source: copySource,
349
+ relativePath,
352
350
  mode: options.mode ?? this.defaults.mode,
353
351
  durable: options.durable ?? this.defaults.durable ?? true,
354
352
  verifyPublished: options[onCopyPublication],
@@ -369,18 +367,19 @@ export class RootHandle {
369
367
  }
370
368
  async stat(relativePath) {
371
369
  assertValidRootRelativePath(relativePath);
372
- validatePinnedOperationPayload({ relativePath });
370
+ validatePinnedRelativePath(relativePath);
373
371
  return await statPathFallback(this.context, relativePath);
374
372
  }
375
373
  async list(relativePath, options = {}) {
376
374
  assertValidRootRelativePath(relativePath);
377
- validatePinnedOperationPayload({ relativePath });
375
+ validatePinnedRelativePath(relativePath);
378
376
  return await listPathFallback(this.context, relativePath, options.withFileTypes === true);
379
377
  }
380
378
  async move(fromRelative, toRelative, options = {}) {
381
379
  assertValidRootRelativePath(fromRelative);
382
380
  assertValidRootDestinationPath(toRelative);
383
- validatePinnedOperationPayload({ from: fromRelative, to: toRelative });
381
+ validatePinnedRelativePath(fromRelative);
382
+ validatePinnedRelativePath(toRelative);
384
383
  const mutationOptions = this.mutationOptions(options);
385
384
  const { assertBeforeMutation } = mutationOptions;
386
385
  const { denyMutations, mutationSymlinks } = snapshotPinnedMutationPolicy(mutationOptions.denyMutations, mutationOptions.mutationSymlinks) ?? {};
@@ -409,10 +408,10 @@ export class RootHandle {
409
408
  walk(relativePath, options) {
410
409
  assertValidRootRelativePath(relativePath);
411
410
  return walkRoot({
412
- rootReal: this.rootReal,
411
+ rootReal: this.context.rootReal,
413
412
  stat: relative => this.stat(relative),
414
413
  list: async (relative, listingOptions) => {
415
- validatePinnedOperationPayload({ relativePath: relative });
414
+ validatePinnedRelativePath(relative);
416
415
  const resolved = await resolvePinnedPathInRoot(this.context, { relativePath: relative, allowRoot: true });
417
416
  return await openRootDirectoryListing(this.context, resolved.resolved, listingOptions);
418
417
  },
@@ -468,15 +467,6 @@ async function readFileInRoot(root, params) {
468
467
  await opened.handle.close().catch(() => { });
469
468
  }
470
469
  }
471
- async function readPathInRoot(root, params) {
472
- const relativePath = rootRelativeReadPath(root, params.filePath);
473
- return await readFileInRoot(root, {
474
- relativePath,
475
- hardlinks: params.hardlinks,
476
- maxBytes: params.maxBytes,
477
- symlinks: params.symlinks,
478
- });
479
- }
480
470
  export async function readLocalFileSafely(params) {
481
471
  const maxBytes = normalizeMaxBytes(params.maxBytes);
482
472
  const opened = await openLocalFileSafely({ filePath: params.filePath });
@@ -502,7 +492,7 @@ function buildAtomicWriteTempPath(targetPath) {
502
492
  function rootWriteQueueKey(root, relativePath) {
503
493
  return `${root.rootReal}\0${relativePath}`;
504
494
  }
505
- async function openWritableFileInRoot(root, params) {
495
+ async function openWritableFileInRoot(root, params, options) {
506
496
  const guardedTarget = params.denyMutations === undefined && params.mutationSymlinks === undefined
507
497
  ? undefined
508
498
  : await resolveGuardedWriteTargetInRoot(root, {
@@ -517,7 +507,6 @@ async function openWritableFileInRoot(root, params) {
517
507
  relativePath: params.relativePath, guardedTarget, mkdir: params.mkdir,
518
508
  assertBeforeMutation: params.assertBeforeMutation,
519
509
  }) : undefined;
520
- const mutationAdmission = prepared?.mutationAdmission;
521
510
  const preparedParent = prepared?.preparedParent;
522
511
  let ioPath = prepared?.targetPath ?? (params.mkdir === false ? resolved :
523
512
  await prepareRootWriteTarget(root, resolved, params.assertBeforeMutation));
@@ -566,6 +555,17 @@ async function openWritableFileInRoot(root, params) {
566
555
  if (!isNotFoundPathError(err)) {
567
556
  throw err;
568
557
  }
558
+ if (options?.createIfMissing === false) {
559
+ const parentGuard = writePathSelection?.parentGuard ??
560
+ await createAsyncDirectoryGuard(path.dirname(ioPath), { bigint: true });
561
+ assertRootIdentityCurrentSync(root);
562
+ if (!admitPathInsideRoot({
563
+ rootPath: root.rootReal, candidatePath: parentGuard.realPath, rootIdentity: root.rootIdentity,
564
+ }))
565
+ throw outsideWorkspaceError();
566
+ assertSyncDirectoryGuard(parentGuard);
567
+ return { missing: true, targetPath: ioPath, parentGuard, writeSelection: writePathSelection };
568
+ }
569
569
  if (writePathSelection)
570
570
  await refreshRootWritePathSelection(writePathSelection);
571
571
  params.assertBeforeMutation?.();
@@ -766,7 +766,7 @@ async function appendFileInRoot(root, params) {
766
766
  }
767
767
  }
768
768
  async function removePathInRoot(root, params) {
769
- validatePinnedOperationPayload({ relativePath: params.relativePath });
769
+ validatePinnedRelativePath(params.relativePath);
770
770
  const removalReceipts = params.recursive ? undefined : new RemovalPathReceipts();
771
771
  const resolved = await resolvePinnedPathInRoot(root, {
772
772
  relativePath: params.relativePath,
@@ -786,20 +786,15 @@ async function removePathInRoot(root, params) {
786
786
  }
787
787
  async function mkdirPathInRoot(root, params) {
788
788
  const privateMode = resolveCreationPermissions(params, true).private;
789
- validatePinnedOperationPayload({ relativePath: params.relativePath });
789
+ validatePinnedRelativePath(params.relativePath);
790
790
  const policy = params.denyMutations === undefined && params.mutationSymlinks === undefined
791
791
  ? undefined
792
792
  : snapshotPinnedMutationPolicy(params.denyMutations, params.mutationSymlinks);
793
+ const resolution = { relativePath: params.relativePath, allowRoot: params.allowRoot, ...policy };
793
794
  const resolveCurrent = policy
794
- ? async () => await resolvePinnedPathInRoot(root, {
795
- ...params,
796
- denyMutations: policy.denyMutations,
797
- mutationSymlinks: policy.mutationSymlinks,
798
- })
795
+ ? async () => await resolvePinnedPathInRoot(root, resolution)
799
796
  : undefined;
800
- const resolved = resolveCurrent
801
- ? await resolveCurrent()
802
- : await resolvePinnedPathInRoot(root, params);
797
+ const resolved = await resolvePinnedPathInRoot(root, resolution);
803
798
  const prepared = policy && resolved.relativePosix !== ""
804
799
  ? await preparePinnedWriteMutationAdmission({
805
800
  rootReal: resolved.rootReal,
@@ -870,7 +865,7 @@ async function commitPinnedWriteInRoot(root, pinned, params, input) {
870
865
  overwrite: params.overwrite,
871
866
  rejectFinalSymlink: params.mutationSymlinks !== undefined,
872
867
  input,
873
- maxBytes: params.maxBytes,
868
+ maxBytes: input.kind === "buffer" ? undefined : params.maxBytes,
874
869
  rootIdentity: root.rootIdentity,
875
870
  mutationAdmission: pinned.mutationAdmission,
876
871
  assertBeforeMutation: params.assertBeforeMutation,
@@ -900,9 +895,7 @@ async function commitPinnedWriteInRoot(root, pinned, params, input) {
900
895
  throw error;
901
896
  }
902
897
  if (params.overwrite === false && isAlreadyExistsError(error)) {
903
- throw new FsSafeError("already-exists", "file already exists", {
904
- cause: error instanceof Error ? error : undefined,
905
- });
898
+ throw new FsSafeError("already-exists", "file already exists", errorCauseOptions(error));
906
899
  }
907
900
  throw normalizePinnedWriteError(error);
908
901
  }
@@ -995,20 +988,9 @@ async function copyFileInRoot(root, params) {
995
988
  }
996
989
  }
997
990
  async function resolvePinnedPathInRoot(root, params) {
998
- return await resolvePinnedOperationPathInRoot(root, {
999
- allowRoot: params.allowRoot,
1000
- denyMutations: params.denyMutations,
1001
- mutationSymlinks: params.mutationSymlinks,
1002
- protectDenyMutationAncestors: params.remove === true,
1003
- relativePath: params.relativePath,
1004
- policy: params.remove ? PATH_ALIAS_POLICIES.unlinkTarget : PATH_ALIAS_POLICIES.strict,
1005
- removalReceipts: params.removalReceipts,
1006
- });
1007
- }
1008
- async function resolvePinnedOperationPathInRoot(root, params) {
1009
991
  const resolved = await resolvePinnedRootPathInRoot(root, {
1010
992
  relativePath: params.relativePath,
1011
- policy: params.policy,
993
+ policy: params.remove ? PATH_ALIAS_POLICIES.unlinkTarget : PATH_ALIAS_POLICIES.strict,
1012
994
  mutationSymlinks: params.mutationSymlinks,
1013
995
  removalReceipts: params.removalReceipts,
1014
996
  });
@@ -1035,7 +1017,7 @@ async function resolvePinnedOperationPathInRoot(root, params) {
1035
1017
  }
1036
1018
  resolved.canonicalPath = admittedCanonicalPath.path;
1037
1019
  await assertMutationNotDenied(resolved.canonicalPath, params.denyMutations, {
1038
- protectAncestors: params.protectDenyMutationAncestors,
1020
+ protectAncestors: params.remove === true,
1039
1021
  });
1040
1022
  return { rootReal: resolved.rootReal, resolved: resolved.canonicalPath, relativePosix };
1041
1023
  }
@@ -1192,9 +1174,7 @@ async function movePathFallback(root, params) {
1192
1174
  throw fileNotFoundError(error instanceof Error ? error : undefined);
1193
1175
  }
1194
1176
  if (hasNodeErrorCode(error, "EEXIST")) {
1195
- throw new FsSafeError("already-exists", "destination exists", {
1196
- cause: error instanceof Error ? error : undefined,
1197
- });
1177
+ throw new FsSafeError("already-exists", "destination exists", errorCauseOptions(error));
1198
1178
  }
1199
1179
  throw error;
1200
1180
  }
@@ -1212,7 +1192,11 @@ async function writeFileFallback(root, params) {
1212
1192
  const policy = snapshotPinnedMutationPolicy(params.denyMutations, params.mutationSymlinks);
1213
1193
  if (policy)
1214
1194
  params = { ...params, ...policy };
1215
- const { rootReal, resolved } = await resolveGuardedWritePathInRoot(root, params);
1195
+ const { rootReal, resolved } = await resolveGuardedWritePathInRoot(root, {
1196
+ relativePath: params.relativePath,
1197
+ denyMutations: params.denyMutations,
1198
+ mutationSymlinks: params.mutationSymlinks,
1199
+ });
1216
1200
  await withRootFallbackCompatibilityLock({
1217
1201
  rootPath: rootReal, rootIdentity: root.rootIdentity, targetPath: resolved, assertBeforeMutation: params.assertBeforeMutation,
1218
1202
  }, async ({ targetPath, ...binding }) => await writeFileFallbackUnlocked(root, { ...params, ...binding }, targetPath));
@@ -1222,48 +1206,59 @@ async function writeFileFallbackUnlocked(root, params, expectedWritePath) {
1222
1206
  await writeMissingFileFallback(root, params, expectedWritePath);
1223
1207
  return;
1224
1208
  }
1225
- const { opened: target, identity: targetIdentity, writeSelection: retainedSelection } = await openWritableFileInRoot(root, {
1209
+ const admissionParams = {
1226
1210
  relativePath: params.relativePath,
1227
1211
  mkdir: params.mkdir,
1228
- // Private, writable placeholder: Windows cannot rename over a read-only file.
1229
- mode: 0o600,
1230
1212
  denyMutations: params.denyMutations,
1231
1213
  assertBeforeMutation: params.assertBeforeMutation,
1232
1214
  mutationSymlinks: params.mutationSymlinks,
1233
1215
  truncateExisting: false,
1234
1216
  expectedWritePath,
1235
- });
1217
+ };
1218
+ const admission = await openWritableFileInRoot(root, admissionParams, { createIfMissing: false });
1219
+ const existing = "missing" in admission ? undefined : admission;
1220
+ const target = existing?.opened;
1221
+ const retainedSelection = existing?.writeSelection;
1222
+ const missingSelection = "missing" in admission ? admission.writeSelection : undefined;
1236
1223
  const policyEnabled = params.denyMutations !== undefined || params.mutationSymlinks !== undefined;
1237
- const destinationPath = retainedSelection?.selectedPath ?? target.realPath;
1238
- const mode = params.mode ?? (target.stat.mode & 0o777);
1239
- if (policyEnabled && !retainedSelection) {
1240
- await target.handle.close().catch(() => undefined);
1224
+ const destinationPath = "missing" in admission ? admission.targetPath
1225
+ : retainedSelection?.selectedPath ?? admission.opened.realPath;
1226
+ let mode = params.mode ?? (target ? target.stat.mode & 0o777 : undefined);
1227
+ if (policyEnabled && !retainedSelection && !missingSelection) {
1228
+ await target?.handle.close().catch(() => undefined);
1241
1229
  throw new FsSafeError("path-mismatch", "write admission state was not retained");
1242
1230
  }
1243
- const destinationGuard = retainedSelection?.parentGuard ??
1231
+ const destinationGuard = "missing" in admission ? admission.parentGuard : retainedSelection?.parentGuard ??
1244
1232
  await createAsyncDirectoryGuard(path.dirname(destinationPath), { bigint: true }).catch(async (error) => {
1245
- await target.handle.close().catch(() => undefined);
1233
+ await target?.handle.close().catch(() => undefined);
1246
1234
  throw error;
1247
1235
  });
1248
1236
  let tempPath = null;
1249
1237
  let unregisterTempPath = null;
1250
1238
  let writtenHandle;
1251
1239
  let writtenIdentity;
1252
- let placeholderIdentity;
1253
- let published = false;
1240
+ let lateTargetHandle;
1254
1241
  try {
1255
- if (target.createdForWrite)
1256
- placeholderIdentity = targetIdentity;
1257
1242
  tempPath = buildAtomicWriteTempPath(destinationPath);
1258
1243
  if (retainedSelection) {
1259
- await refreshRetainedRootWriteAdmission(root, retainedSelection, true, target.handle.fd);
1244
+ await refreshRetainedRootWriteAdmission(root, retainedSelection, true, target?.handle.fd);
1245
+ }
1246
+ else if (missingSelection) {
1247
+ await refreshRootWritePathSelection(missingSelection);
1260
1248
  }
1261
1249
  params.assertBeforeMutation?.();
1262
1250
  if (retainedSelection) {
1263
- assertRootWriteSelectionSync(root, retainedSelection, true, target.handle.fd);
1251
+ assertRootWriteSelectionSync(root, retainedSelection, true, target?.handle.fd);
1252
+ }
1253
+ else if (missingSelection) {
1254
+ assertRootWritePathSelectionSync(root, missingSelection);
1264
1255
  }
1256
+ assertRootIdentityCurrentSync(root);
1257
+ assertSyncDirectoryGuard(destinationGuard);
1265
1258
  writtenHandle = await fs.open(tempPath, OPEN_WRITE_CREATE_FLAGS, 0o600);
1266
1259
  writtenIdentity = fsSync.fstatSync(writtenHandle.fd, { bigint: true });
1260
+ // Preserve the creation mask when no existing destination supplies a mode.
1261
+ mode ??= Number(writtenIdentity.mode & 511n);
1267
1262
  unregisterTempPath = registerTempPathForExit(tempPath, { identity: writtenIdentity, singleLinkFile: true });
1268
1263
  await writeAllToFile(writtenHandle, params.data, {
1269
1264
  encoding: params.encoding, assertBeforeMutation: params.assertBeforeMutation,
@@ -1278,24 +1273,42 @@ async function writeFileFallbackUnlocked(root, params, expectedWritePath) {
1278
1273
  root, targetPath: commitTempPath, fd: commitHandle.fd,
1279
1274
  expectedIdentity: commitIdentity, parentGuard: destinationGuard,
1280
1275
  });
1281
- if (target.createdForWrite) {
1282
- await cleanupPinnedFilePath({
1283
- pathname: destinationPath, handle: target.handle, identity: placeholderIdentity, parentGuard: destinationGuard,
1284
- });
1276
+ assertRootIdentityCurrentSync(root);
1277
+ assertSyncDirectoryGuard(destinationGuard);
1278
+ let publicationIdentity = inspectFallbackReplacementDestination(destinationPath);
1279
+ // A raced file needs its own access admission, not the old handle's rights.
1280
+ if (publicationIdentity && (!existing || !sameFileIdentity(publicationIdentity, existing.identity))) {
1281
+ const admitted = await openWritableFileInRoot(root, {
1282
+ ...admissionParams, mkdir: false, expectedWritePath: destinationPath,
1283
+ }, { createIfMissing: false });
1284
+ lateTargetHandle = "missing" in admitted ? undefined : admitted.opened.handle;
1285
+ publicationIdentity = "missing" in admitted ? undefined : admitted.identity;
1286
+ await lateTargetHandle?.close();
1285
1287
  }
1286
1288
  // Windows cannot replace a destination while its old handle remains open.
1287
- await target.handle.close();
1289
+ await target?.handle.close();
1288
1290
  if (retainedSelection) {
1289
- await refreshRetainedRootWriteAdmission(root, retainedSelection, !target.createdForWrite);
1291
+ await refreshRetainedRootWriteAdmission(root, retainedSelection, true);
1292
+ }
1293
+ else if (missingSelection) {
1294
+ await refreshRootWritePathSelection(missingSelection);
1290
1295
  }
1291
1296
  assertFinalSymlinkRejected(destinationPath, params.mutationSymlinks !== undefined);
1292
1297
  params.assertBeforeMutation?.();
1293
1298
  if (retainedSelection) {
1294
- assertRootWriteSelectionSync(root, retainedSelection, !target.createdForWrite);
1299
+ assertRootWriteSelectionSync(root, retainedSelection, true);
1300
+ }
1301
+ else if (missingSelection) {
1302
+ assertRootWritePathSelectionSync(root, missingSelection);
1303
+ }
1304
+ assertRootIdentityCurrentSync(root);
1305
+ assertSyncDirectoryGuard(destinationGuard);
1306
+ const current = inspectFallbackReplacementDestination(destinationPath);
1307
+ if (publicationIdentity ? !current || !sameFileIdentity(current, publicationIdentity) : current) {
1308
+ throw new FsSafeError("path-mismatch", "write destination changed before publication");
1295
1309
  }
1296
1310
  await fs.rename(commitTempPath, destinationPath);
1297
1311
  tempPath = null;
1298
- published = true;
1299
1312
  });
1300
1313
  unregisterTempPath();
1301
1314
  unregisterTempPath = null;
@@ -1308,12 +1321,8 @@ async function writeFileFallbackUnlocked(root, params, expectedWritePath) {
1308
1321
  });
1309
1322
  }
1310
1323
  finally {
1311
- if (!published && target.createdForWrite) {
1312
- await cleanupPinnedFilePath({
1313
- pathname: destinationPath, handle: target.handle, identity: placeholderIdentity, parentGuard: destinationGuard,
1314
- });
1315
- }
1316
- await target.handle.close().catch(() => undefined);
1324
+ await target?.handle.close().catch(() => undefined);
1325
+ await lateTargetHandle?.close().catch(() => undefined);
1317
1326
  if (tempPath && writtenHandle) {
1318
1327
  await cleanupPinnedFilePath({
1319
1328
  pathname: tempPath, handle: writtenHandle, identity: writtenIdentity, parentGuard: destinationGuard,
@@ -1323,6 +1332,23 @@ async function writeFileFallbackUnlocked(root, params, expectedWritePath) {
1323
1332
  unregisterTempPath?.();
1324
1333
  }
1325
1334
  }
1335
+ function inspectFallbackReplacementDestination(targetPath) {
1336
+ let current;
1337
+ try {
1338
+ current = inspectFileIdentitySync(() => fsSync.lstatSync(targetPath, { bigint: true }));
1339
+ }
1340
+ catch (error) {
1341
+ if (isNotFoundPathError(error))
1342
+ return;
1343
+ throw error;
1344
+ }
1345
+ if (current.isSymbolicLink() || !current.isFile()) {
1346
+ throw new FsSafeError("path-mismatch", "write destination changed before publication");
1347
+ }
1348
+ if (current.nlink > 1n)
1349
+ throw hardlinkedPathNotAllowedError();
1350
+ return current;
1351
+ }
1326
1352
  async function writeMissingFileFallback(root, params, expectedWritePath) {
1327
1353
  const guardedTarget = params.denyMutations === undefined && params.mutationSymlinks === undefined
1328
1354
  ? undefined
@@ -1399,9 +1425,7 @@ async function writeMissingFileFallback(root, params, expectedWritePath) {
1399
1425
  if (verifyingPublication)
1400
1426
  throw err;
1401
1427
  if (hasNodeErrorCode(err, "EEXIST")) {
1402
- throw new FsSafeError("already-exists", "file already exists", {
1403
- cause: err instanceof Error ? err : undefined,
1404
- });
1428
+ throw new FsSafeError("already-exists", "file already exists", errorCauseOptions(err));
1405
1429
  }
1406
1430
  throw err;
1407
1431
  }
@@ -13,4 +13,3 @@ export declare function movePathNoReplaceNative(root: RootContext, params: {
13
13
  targetPath: string;
14
14
  targetParentPath: string;
15
15
  }): Promise<void>;
16
- //# sourceMappingURL=root-move-noreplace.d.ts.map
@@ -9,7 +9,7 @@ import { isNotFoundPathError } from "./path.js";
9
9
  import { assertRootIdentityCurrent, assertRootIdentityCurrentSync } from "./root-context.js";
10
10
  import { resolveRootPathSync } from "./root-path.js";
11
11
  import { admitPathInsideRoot } from "./root-boundary.js";
12
- import { fileNotFoundError, hardlinkedPathNotAllowedError, isAlreadyExistsError, normalizePinnedPathError, outsideWorkspaceError, } from "./root-errors.js";
12
+ import { errorCauseOptions, fileNotFoundError, hardlinkedPathNotAllowedError, isAlreadyExistsError, normalizePinnedPathError, outsideWorkspaceError, } from "./root-errors.js";
13
13
  import { assertFinalSymlinkRejected } from "./root-symlink-policy.js";
14
14
  import { createSuppressedError } from "./suppressed-error.js";
15
15
  import { inspectFileIdentitySync } from "./strict-file-identity.js";
@@ -44,17 +44,13 @@ function normalizeMoveError(error) {
44
44
  return fileNotFoundError(error instanceof Error ? error : undefined);
45
45
  }
46
46
  if (nativePrimitiveUnavailable(error)) {
47
- return new FsSafeError("helper-unavailable", "native no-replace move is unavailable", {
48
- cause: error instanceof Error ? error : undefined,
49
- });
47
+ return new FsSafeError("helper-unavailable", "native no-replace move is unavailable", errorCauseOptions(error));
50
48
  }
51
49
  return error;
52
50
  }
53
51
  function normalizeRenameNoReplaceError(error) {
54
52
  if (error?.code === "EINVAL") {
55
- return new FsSafeError("helper-unavailable", "native no-replace move is unavailable on this filesystem", {
56
- cause: error instanceof Error ? error : undefined,
57
- });
53
+ return new FsSafeError("helper-unavailable", "native no-replace move is unavailable on this filesystem", errorCauseOptions(error));
58
54
  }
59
55
  return normalizeMoveError(error);
60
56
  }
@@ -157,9 +153,7 @@ export async function movePathNoReplaceNative(root, params, paths) {
157
153
  }
158
154
  catch (error) {
159
155
  if (isAlreadyExistsError(error) || error?.code === "ENOTEMPTY") {
160
- throw new FsSafeError("already-exists", "destination exists", {
161
- cause: error instanceof Error ? error : undefined,
162
- });
156
+ throw new FsSafeError("already-exists", "destination exists", errorCauseOptions(error));
163
157
  }
164
158
  throw normalizeRenameNoReplaceError(error);
165
159
  }
@@ -5,4 +5,3 @@ export declare function assertMoveMutationAllowed(root: RootContext, params: {
5
5
  toRelative: string;
6
6
  denyMutations?: DenyMutationPolicy;
7
7
  }): Promise<void>;
8
- //# sourceMappingURL=root-move-preflight.d.ts.map
@@ -6,4 +6,3 @@ export type PinnedObservedPath = {
6
6
  receipt?: RootPathObservationReceipt;
7
7
  };
8
8
  export declare function resolvePinnedObservedPathInRoot(root: RootContext, relativePath: string, kind: RootPathObservationKind): Promise<PinnedObservedPath | undefined>;
9
- //# sourceMappingURL=root-observed-path.d.ts.map
@@ -7,7 +7,7 @@ import { admitPathInsideRoot } from "./root-boundary.js";
7
7
  import { assertRootPathObservationReceiptCurrent } from "./root-directory-list.js";
8
8
  import { RootPathObservationError, resolveRootPathWithObservation, } from "./root-path.js";
9
9
  import { createRootObservationGuard, ensureTrailingSep, expandRelativePathWithHome, } from "./root-context.js";
10
- import { fileNotFoundError, outsideWorkspaceError } from "./root-errors.js";
10
+ import { errorCauseOptions, fileNotFoundError, outsideWorkspaceError } from "./root-errors.js";
11
11
  import { getFsSafeTestHooks } from "./test-hooks.js";
12
12
  export async function resolvePinnedObservedPathInRoot(root, relativePath, kind) {
13
13
  const rootGuard = await createRootObservationGuard(root);
@@ -50,9 +50,7 @@ export async function resolvePinnedObservedPathInRoot(root, relativePath, kind)
50
50
  if (kind === "stat") {
51
51
  throw fileNotFoundError(error.error instanceof Error ? error.error : undefined);
52
52
  }
53
- throw new FsSafeError("not-found", "directory not found", {
54
- cause: error.error instanceof Error ? error.error : undefined,
55
- });
53
+ throw new FsSafeError("not-found", "directory not found", errorCauseOptions(error.error));
56
54
  }
57
55
  throw error.error;
58
56
  }
@@ -1,5 +1,5 @@
1
1
  import type { DenyMutationPolicy } from "./deny-mutations.js";
2
- import type { RenameIdentityPolicy } from "./pinned-write.js";
2
+ import type { RenameIdentityPolicy } from "./pinned-write-types.js";
3
3
  import type { MutationSymlinkPolicy, SymlinkPolicy } from "./root-symlink-policy.js";
4
4
  import type { CopyCloneMode } from "./copy-policy.js";
5
5
  import type { RootCopyPublicationReceipt } from "./copy-publication.js";
@@ -82,4 +82,3 @@ export type RootMkdirOptions = Pick<RootDefaults, "assertBeforeMutation" | "deny
82
82
  export type RootReadParams = Omit<RootReadOptions, "nonBlockingRead">;
83
83
  export declare function readDefaults(defaults: RootDefaults): RootReadParams;
84
84
  export declare function mergeReadOptions(defaults: RootDefaults, options: RootReadOptions): RootReadParams;
85
- //# sourceMappingURL=root-options.d.ts.map
@@ -10,4 +10,3 @@ export declare function symlinkEscapeError(params: {
10
10
  rootCanonicalPath: string;
11
11
  symlinkPath: string;
12
12
  }): Error;
13
- //# sourceMappingURL=root-path-errors.d.ts.map