@openclaw/fs-safe 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (644) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/absolute-path.d.ts +0 -1
  3. package/dist/advanced.d.ts +0 -1
  4. package/dist/archive-crc32.d.ts +0 -1
  5. package/dist/archive-deadline.d.ts +0 -1
  6. package/dist/archive-durability.d.ts +0 -1
  7. package/dist/archive-entry.d.ts +0 -1
  8. package/dist/archive-errors.d.ts +0 -1
  9. package/dist/archive-gzip-tail.d.ts +0 -1
  10. package/dist/archive-input.d.ts +0 -1
  11. package/dist/archive-kind.d.ts +0 -1
  12. package/dist/archive-limits.d.ts +0 -1
  13. package/dist/archive-merge.d.ts +2 -4
  14. package/dist/archive-merge.js +14 -4
  15. package/dist/archive-native.d.ts +3 -15
  16. package/dist/archive-native.js +46 -71
  17. package/dist/archive-options.d.ts +7 -2
  18. package/dist/archive-parser-errors.d.ts +0 -1
  19. package/dist/archive-plan.d.ts +10 -1
  20. package/dist/archive-plan.js +31 -21
  21. package/dist/archive-policy.d.ts +0 -1
  22. package/dist/archive-read.d.ts +0 -1
  23. package/dist/archive-staging.d.ts +0 -1
  24. package/dist/archive-tar-inspect.d.ts +0 -1
  25. package/dist/archive-tar-stream.d.ts +0 -1
  26. package/dist/archive-tar-wasm.d.ts +0 -1
  27. package/dist/archive-tar.d.ts +0 -1
  28. package/dist/archive-zip-admission.d.ts +0 -1
  29. package/dist/archive-zip-count.d.ts +0 -1
  30. package/dist/archive-zip-directory.d.ts +0 -1
  31. package/dist/archive-zip-entry.d.ts +0 -1
  32. package/dist/archive-zip-integrity.d.ts +0 -1
  33. package/dist/archive-zip-loader.d.ts +0 -1
  34. package/dist/archive-zip-manifest.d.ts +0 -1
  35. package/dist/archive-zip-names.d.ts +0 -1
  36. package/dist/archive-zip-preflight.d.ts +0 -1
  37. package/dist/archive.d.ts +0 -1
  38. package/dist/archive.js +87 -164
  39. package/dist/async-lock.d.ts +0 -1
  40. package/dist/atomic.d.ts +0 -1
  41. package/dist/bounded-read-stream.d.ts +0 -1
  42. package/dist/bounded-read.d.ts +0 -1
  43. package/dist/byte-budget.d.ts +0 -1
  44. package/dist/byte-view.d.ts +0 -1
  45. package/dist/clone-metadata.d.ts +0 -1
  46. package/dist/config.d.ts +0 -1
  47. package/dist/containment.d.ts +0 -1
  48. package/dist/copy-file-input.d.ts +0 -1
  49. package/dist/copy-policy.d.ts +0 -1
  50. package/dist/copy-publication.d.ts +0 -1
  51. package/dist/copy-tree-portable.d.ts +0 -1
  52. package/dist/copy-tree-portable.js +9 -6
  53. package/dist/copy.d.ts +0 -1
  54. package/dist/copy.js +5 -5
  55. package/dist/create-directory.d.ts +0 -2
  56. package/dist/create-directory.js +3 -22
  57. package/dist/create-file-async.d.ts +0 -1
  58. package/dist/create-file.d.ts +0 -1
  59. package/dist/create-file.js +3 -14
  60. package/dist/create-owned-file.d.ts +0 -1
  61. package/dist/create.d.ts +1 -2
  62. package/dist/create.js +1 -1
  63. package/dist/creation-darwin.d.ts +0 -1
  64. package/dist/creation-file-state.d.ts +0 -1
  65. package/dist/creation-path.d.ts +2 -1
  66. package/dist/creation-path.js +12 -0
  67. package/dist/creation-permissions.d.ts +0 -1
  68. package/dist/creation-permissions.js +28 -38
  69. package/dist/deny-mutations.d.ts +2 -3
  70. package/dist/deny-mutations.js +55 -35
  71. package/dist/device-path.d.ts +0 -1
  72. package/dist/directory-durability.d.ts +0 -1
  73. package/dist/directory-entry-path.d.ts +0 -1
  74. package/dist/directory-guard.d.ts +2 -7
  75. package/dist/directory-guard.js +25 -56
  76. package/dist/directory-mode-node.d.ts +0 -1
  77. package/dist/directory-mode-owner.d.ts +0 -1
  78. package/dist/directory-receipt.d.ts +0 -1
  79. package/dist/durability.d.ts +0 -1
  80. package/dist/effective-uid.d.ts +0 -1
  81. package/dist/error-detail.d.ts +0 -1
  82. package/dist/errors.d.ts +0 -1
  83. package/dist/file-cleanup.d.ts +0 -1
  84. package/dist/file-contents.d.ts +0 -1
  85. package/dist/file-handle-transfer.d.ts +0 -1
  86. package/dist/file-hash.d.ts +0 -1
  87. package/dist/file-hash.js +170 -66
  88. package/dist/file-identity.d.ts +0 -1
  89. package/dist/file-lock-sync-acquisition.d.ts +22 -0
  90. package/dist/file-lock-sync-acquisition.js +98 -0
  91. package/dist/file-lock-sync-admission.d.ts +0 -2
  92. package/dist/file-lock-sync-admission.js +9 -48
  93. package/dist/file-lock-sync-root-acquire.d.ts +0 -1
  94. package/dist/file-lock-sync-root-acquire.js +32 -98
  95. package/dist/file-lock-sync-root-arbitration.d.ts +0 -1
  96. package/dist/file-lock-sync-root-held.d.ts +0 -1
  97. package/dist/file-lock-sync-root-io.d.ts +0 -1
  98. package/dist/file-lock-sync-root-mutation.d.ts +4 -5
  99. package/dist/file-lock-sync-root-mutation.js +7 -9
  100. package/dist/file-lock-sync-root-options.d.ts +0 -1
  101. package/dist/file-lock-sync-root-registration.d.ts +0 -1
  102. package/dist/file-lock-sync-root.d.ts +1 -2
  103. package/dist/file-lock-sync-root.js +14 -87
  104. package/dist/file-lock-sync-stale-admission.d.ts +2 -7
  105. package/dist/file-lock-sync-stale-admission.js +21 -23
  106. package/dist/file-lock-sync.d.ts +0 -1
  107. package/dist/file-lock-sync.js +38 -117
  108. package/dist/file-lock.d.ts +0 -1
  109. package/dist/file-observation.d.ts +0 -1
  110. package/dist/file-store-boundary.d.ts +0 -2
  111. package/dist/file-store-boundary.js +6 -26
  112. package/dist/file-store-copy-source.d.ts +1 -2
  113. package/dist/file-store-copy-source.js +1 -1
  114. package/dist/file-store-limit.d.ts +1 -2
  115. package/dist/file-store-limit.js +2 -3
  116. package/dist/file-store-path.d.ts +0 -1
  117. package/dist/file-store-prune.d.ts +0 -1
  118. package/dist/file-store-sync-directory.d.ts +0 -1
  119. package/dist/file-store-sync-directory.js +194 -231
  120. package/dist/file-store-sync-write.d.ts +0 -1
  121. package/dist/file-store-sync-write.js +16 -26
  122. package/dist/file-store.d.ts +0 -1
  123. package/dist/file-store.js +3 -4
  124. package/dist/file-sync.d.ts +0 -1
  125. package/dist/filename.d.ts +0 -1
  126. package/dist/filename.js +1 -7
  127. package/dist/fs.d.ts +0 -1
  128. package/dist/guarded-mkdir.d.ts +0 -1
  129. package/dist/guarded-mutation.d.ts +0 -7
  130. package/dist/guarded-mutation.js +6 -11
  131. package/dist/guest-dispatch-python.d.ts +0 -1
  132. package/dist/guest-dispatch-python.js +41 -90
  133. package/dist/guest-native-python.d.ts +0 -1
  134. package/dist/guest.d.ts +0 -1
  135. package/dist/home-dir.d.ts +0 -1
  136. package/dist/index.d.ts +0 -1
  137. package/dist/install-path.d.ts +0 -1
  138. package/dist/json-document-store.d.ts +0 -1
  139. package/dist/json-durable-queue-directory.d.ts +13 -1
  140. package/dist/json-durable-queue-directory.js +134 -0
  141. package/dist/json-durable-queue-ownership.d.ts +0 -1
  142. package/dist/json-durable-queue-ownership.js +42 -61
  143. package/dist/json-durable-queue-read.d.ts +0 -1
  144. package/dist/json-durable-queue-read.js +6 -6
  145. package/dist/json-durable-queue.d.ts +0 -1
  146. package/dist/json-durable-queue.js +7 -130
  147. package/dist/json-store.d.ts +0 -1
  148. package/dist/json-stringify.d.ts +0 -1
  149. package/dist/json.d.ts +0 -1
  150. package/dist/json.js +6 -15
  151. package/dist/local-file-access.d.ts +0 -1
  152. package/dist/local-file-access.js +3 -10
  153. package/dist/local-file-descriptor.d.ts +0 -1
  154. package/dist/local-roots.d.ts +0 -1
  155. package/dist/lock-config.d.ts +0 -1
  156. package/dist/move-path-cleanup.d.ts +0 -1
  157. package/dist/move-path-stage.d.ts +0 -1
  158. package/dist/move-path.d.ts +0 -1
  159. package/dist/mutation-authority.d.ts +0 -1
  160. package/dist/native-binding.d.ts +0 -1
  161. package/dist/native-config.d.ts +0 -1
  162. package/dist/native-directory-observation.d.ts +0 -1
  163. package/dist/native-fallback-warning.d.ts +0 -1
  164. package/dist/native-operations.d.ts +1 -5
  165. package/dist/native-operations.js +2 -6
  166. package/dist/native-parent-admission.d.ts +0 -1
  167. package/dist/native-pinned-write-windows.d.ts +0 -1
  168. package/dist/native-pinned-write.d.ts +0 -1
  169. package/dist/native-pinned-write.js +4 -10
  170. package/dist/native-policy-directory-observation.d.ts +0 -1
  171. package/dist/native-policy-parent-windows.d.ts +0 -1
  172. package/dist/native-rename-outcome.d.ts +0 -1
  173. package/dist/native-staged-file.d.ts +15 -3
  174. package/dist/native-staged-file.js +55 -63
  175. package/dist/native.d.ts +0 -1
  176. package/dist/opened-file-failure.d.ts +0 -1
  177. package/dist/opened-realpath.d.ts +0 -1
  178. package/dist/output.d.ts +0 -1
  179. package/dist/overwrite-file-handle.d.ts +0 -1
  180. package/dist/owner-dacl.d.ts +0 -1
  181. package/dist/path-case.d.ts +0 -1
  182. package/dist/path-policy.d.ts +0 -1
  183. package/dist/path-prefix.d.ts +0 -1
  184. package/dist/path-scope-lexical.d.ts +0 -1
  185. package/dist/path-segment-route.d.ts +0 -1
  186. package/dist/path-suffix-aliases.d.ts +0 -1
  187. package/dist/path.d.ts +0 -1
  188. package/dist/permission-exec.d.ts +0 -1
  189. package/dist/permission-exec.js +19 -25
  190. package/dist/permissions-public.d.ts +0 -1
  191. package/dist/permissions-windows.d.ts +2 -10
  192. package/dist/permissions-windows.js +10 -30
  193. package/dist/permissions.d.ts +0 -1
  194. package/dist/permissions.js +8 -16
  195. package/dist/pinned-mutation-admission.d.ts +0 -1
  196. package/dist/pinned-mutation-observation.d.ts +0 -1
  197. package/dist/pinned-mutation-shared-route.d.ts +0 -1
  198. package/dist/pinned-open.d.ts +1 -1
  199. package/dist/pinned-open.js +1 -1
  200. package/dist/pinned-operation.d.ts +0 -1
  201. package/dist/pinned-write-input.d.ts +0 -1
  202. package/dist/pinned-write-mode.d.ts +0 -1
  203. package/dist/pinned-write-staged.d.ts +0 -1
  204. package/dist/pinned-write-types.d.ts +9 -21
  205. package/dist/pinned-write.d.ts +0 -1
  206. package/dist/positional-read.d.ts +0 -1
  207. package/dist/private-directory.d.ts +0 -1
  208. package/dist/private-producer-handoff-sync.d.ts +0 -1
  209. package/dist/private-producer-handoff-sync.js +9 -51
  210. package/dist/private-producer-handoff.d.ts +20 -1
  211. package/dist/private-producer-handoff.js +69 -46
  212. package/dist/private-temp-workspace.d.ts +0 -1
  213. package/dist/private-temp-workspace.js +11 -36
  214. package/dist/publish-copy-stage.d.ts +0 -1
  215. package/dist/publish-file-failure.d.ts +0 -1
  216. package/dist/publish-file.d.ts +0 -1
  217. package/dist/read-open-flags.d.ts +0 -1
  218. package/dist/read-opened-file.d.ts +0 -1
  219. package/dist/realpath.d.ts +0 -1
  220. package/dist/recursive-mkdir-path.d.ts +0 -1
  221. package/dist/regular-file.d.ts +0 -1
  222. package/dist/regular-file.js +77 -139
  223. package/dist/replace-directory.d.ts +0 -1
  224. package/dist/replace-file-copy-fallback.d.ts +0 -1
  225. package/dist/replace-file-copy-fallback.js +14 -3
  226. package/dist/replace-file-copy-source.d.ts +0 -1
  227. package/dist/replace-file-copy-source.js +6 -1
  228. package/dist/replace-file-descriptor.d.ts +0 -1
  229. package/dist/replace-file-descriptor.js +6 -1
  230. package/dist/replace-file-mode.d.ts +0 -1
  231. package/dist/replace-file-rename-policy.d.ts +0 -1
  232. package/dist/replace-file-temp-owner.d.ts +12 -13
  233. package/dist/replace-file-temp-owner.js +66 -85
  234. package/dist/replace-file.d.ts +0 -1
  235. package/dist/retained-directory-replacement.d.ts +0 -1
  236. package/dist/root-boundary.d.ts +0 -1
  237. package/dist/root-context.d.ts +0 -1
  238. package/dist/root-create-input.d.ts +0 -1
  239. package/dist/root-directory-creation.d.ts +0 -1
  240. package/dist/root-directory-list.d.ts +0 -1
  241. package/dist/root-directory.d.ts +0 -1
  242. package/dist/root-entries.d.ts +0 -1
  243. package/dist/root-errors.d.ts +0 -1
  244. package/dist/root-file-final-admission.d.ts +0 -1
  245. package/dist/root-file.d.ts +0 -1
  246. package/dist/root-impl.d.ts +2 -10
  247. package/dist/root-impl.js +114 -91
  248. package/dist/root-move-noreplace.d.ts +0 -1
  249. package/dist/root-move-preflight.d.ts +0 -1
  250. package/dist/root-observed-path.d.ts +0 -1
  251. package/dist/root-options.d.ts +0 -1
  252. package/dist/root-path-errors.d.ts +0 -1
  253. package/dist/root-path-existing.d.ts +3 -1
  254. package/dist/root-path-existing.js +39 -18
  255. package/dist/root-path-observation.d.ts +0 -1
  256. package/dist/root-path-stat.d.ts +0 -1
  257. package/dist/root-path.d.ts +0 -1
  258. package/dist/root-path.js +60 -188
  259. package/dist/root-paths-lexical.d.ts +0 -1
  260. package/dist/root-paths.d.ts +0 -1
  261. package/dist/root-read-admission.d.ts +0 -1
  262. package/dist/root-read-admission.js +31 -44
  263. package/dist/root-remove-identity.d.ts +0 -1
  264. package/dist/root-remove-receipt.d.ts +0 -1
  265. package/dist/root-remove.d.ts +0 -1
  266. package/dist/root-symlink-policy.d.ts +0 -1
  267. package/dist/root-walk.d.ts +0 -1
  268. package/dist/root-write-admission.d.ts +0 -1
  269. package/dist/root-write-compatibility.d.ts +0 -1
  270. package/dist/root-write-complete-parent.d.ts +0 -1
  271. package/dist/root-write-lock-binding.d.ts +0 -1
  272. package/dist/root-write-mode.d.ts +0 -1
  273. package/dist/root-write-publication.d.ts +0 -1
  274. package/dist/root-write-verification.d.ts +0 -1
  275. package/dist/root.d.ts +0 -1
  276. package/dist/safe-path-segment.d.ts +1 -2
  277. package/dist/safe-path-segment.js +2 -5
  278. package/dist/secret-file.d.ts +0 -1
  279. package/dist/secret-file.js +7 -17
  280. package/dist/secret-read-async.d.ts +0 -1
  281. package/dist/secret-read-async.js +5 -5
  282. package/dist/secret-read-policy.d.ts +0 -1
  283. package/dist/secret.d.ts +0 -1
  284. package/dist/secure-file-windows.d.ts +0 -6
  285. package/dist/secure-file-windows.js +13 -28
  286. package/dist/secure-file.d.ts +0 -1
  287. package/dist/secure-file.js +9 -9
  288. package/dist/secure-temp-dir.d.ts +0 -1
  289. package/dist/secure-temp-repair.d.ts +0 -1
  290. package/dist/sibling-staged-file.d.ts +0 -1
  291. package/dist/sibling-staged-file.js +32 -39
  292. package/dist/sibling-temp.d.ts +0 -1
  293. package/dist/sidecar-lock-acquire.d.ts +1 -2
  294. package/dist/sidecar-lock-acquire.js +31 -52
  295. package/dist/sidecar-lock-admission-context.d.ts +0 -1
  296. package/dist/sidecar-lock-admission-parser.d.ts +0 -1
  297. package/dist/sidecar-lock-admission.d.ts +1 -5
  298. package/dist/sidecar-lock-admission.js +1 -7
  299. package/dist/sidecar-lock-handle.d.ts +0 -1
  300. package/dist/sidecar-lock-policy.d.ts +3 -1
  301. package/dist/sidecar-lock-policy.js +16 -0
  302. package/dist/sidecar-lock-reclaim.d.ts +0 -1
  303. package/dist/sidecar-lock-registration.d.ts +13 -0
  304. package/dist/sidecar-lock-registration.js +47 -0
  305. package/dist/sidecar-lock-root.d.ts +0 -1
  306. package/dist/sidecar-lock-stale-admission.d.ts +0 -1
  307. package/dist/sidecar-lock-target.d.ts +0 -1
  308. package/dist/sidecar-lock-types.d.ts +0 -1
  309. package/dist/sidecar-lock.d.ts +0 -1
  310. package/dist/sidecar-lock.js +16 -83
  311. package/dist/staged-directory.d.ts +0 -1
  312. package/dist/staged-file-settlement.d.ts +0 -1
  313. package/dist/staged-file-types.d.ts +0 -1
  314. package/dist/standalone-publication-path.d.ts +0 -1
  315. package/dist/stat-observation.d.ts +0 -1
  316. package/dist/store.d.ts +0 -1
  317. package/dist/strict-file-identity.d.ts +0 -1
  318. package/dist/string-coerce.d.ts +0 -1
  319. package/dist/suppressed-error.d.ts +0 -1
  320. package/dist/symlink-parents.d.ts +0 -1
  321. package/dist/temp-cleanup.d.ts +0 -1
  322. package/dist/temp-target.d.ts +0 -1
  323. package/dist/temp-target.js +7 -46
  324. package/dist/temp-workspace-admission.d.ts +0 -8
  325. package/dist/temp-workspace-admission.js +0 -4
  326. package/dist/temp-workspace-child-admission.d.ts +0 -4
  327. package/dist/temp-workspace-child-admission.js +0 -12
  328. package/dist/temp-workspace-descriptor.d.ts +0 -6
  329. package/dist/temp-workspace-descriptor.js +0 -2
  330. package/dist/temp-workspace-identity.d.ts +0 -1
  331. package/dist/temp-workspace-owner.d.ts +1 -1
  332. package/dist/temp-workspace-owner.js +45 -22
  333. package/dist/temp-workspace-permissions.d.ts +0 -1
  334. package/dist/temp-workspace-types.d.ts +0 -1
  335. package/dist/temp.d.ts +0 -1
  336. package/dist/test-hooks.d.ts +0 -1
  337. package/dist/text-atomic.d.ts +0 -1
  338. package/dist/timing.d.ts +0 -1
  339. package/dist/trash.d.ts +0 -1
  340. package/dist/types.d.ts +0 -1
  341. package/dist/unicode-path.d.ts +0 -1
  342. package/dist/walk.d.ts +0 -1
  343. package/dist/windows-command.d.ts +0 -1
  344. package/dist/windows-owner.d.ts +0 -1
  345. package/dist/windows-owner.js +4 -1
  346. package/dist/windows-path-alias.d.ts +0 -1
  347. package/dist/windows-path-alias.js +7 -43
  348. package/dist/windows-path-syntax.d.ts +5 -0
  349. package/dist/windows-path-syntax.js +21 -0
  350. package/dist/windows-security-command.d.ts +0 -1
  351. package/dist/windows-security-facts.d.ts +0 -1
  352. package/dist/write-file-handle.d.ts +0 -1
  353. package/dist/write-open-flags.d.ts +0 -1
  354. package/dist/write-queue.d.ts +0 -1
  355. package/docs/atomic.md +14 -0
  356. package/docs/copy.md +2 -0
  357. package/docs/mutation-policy-proof.md +6 -4
  358. package/docs/permissions.md +6 -0
  359. package/docs/root.md +10 -0
  360. package/docs/secret-file.md +4 -0
  361. package/docs/writing.md +9 -3
  362. package/package.json +8 -9
  363. package/dist/absolute-path.d.ts.map +0 -1
  364. package/dist/advanced.d.ts.map +0 -1
  365. package/dist/archive-crc32.d.ts.map +0 -1
  366. package/dist/archive-deadline.d.ts.map +0 -1
  367. package/dist/archive-durability.d.ts.map +0 -1
  368. package/dist/archive-entry.d.ts.map +0 -1
  369. package/dist/archive-errors.d.ts.map +0 -1
  370. package/dist/archive-gzip-tail.d.ts.map +0 -1
  371. package/dist/archive-input.d.ts.map +0 -1
  372. package/dist/archive-kind.d.ts.map +0 -1
  373. package/dist/archive-limits.d.ts.map +0 -1
  374. package/dist/archive-merge.d.ts.map +0 -1
  375. package/dist/archive-native.d.ts.map +0 -1
  376. package/dist/archive-options.d.ts.map +0 -1
  377. package/dist/archive-parser-errors.d.ts.map +0 -1
  378. package/dist/archive-plan.d.ts.map +0 -1
  379. package/dist/archive-policy.d.ts.map +0 -1
  380. package/dist/archive-read.d.ts.map +0 -1
  381. package/dist/archive-staging.d.ts.map +0 -1
  382. package/dist/archive-tar-inspect.d.ts.map +0 -1
  383. package/dist/archive-tar-stream.d.ts.map +0 -1
  384. package/dist/archive-tar-wasm.d.ts.map +0 -1
  385. package/dist/archive-tar.d.ts.map +0 -1
  386. package/dist/archive-zip-admission.d.ts.map +0 -1
  387. package/dist/archive-zip-count.d.ts.map +0 -1
  388. package/dist/archive-zip-directory.d.ts.map +0 -1
  389. package/dist/archive-zip-entry.d.ts.map +0 -1
  390. package/dist/archive-zip-integrity.d.ts.map +0 -1
  391. package/dist/archive-zip-loader.d.ts.map +0 -1
  392. package/dist/archive-zip-manifest.d.ts.map +0 -1
  393. package/dist/archive-zip-names.d.ts.map +0 -1
  394. package/dist/archive-zip-preflight.d.ts.map +0 -1
  395. package/dist/archive.d.ts.map +0 -1
  396. package/dist/async-lock.d.ts.map +0 -1
  397. package/dist/atomic.d.ts.map +0 -1
  398. package/dist/bounded-read-stream.d.ts.map +0 -1
  399. package/dist/bounded-read.d.ts.map +0 -1
  400. package/dist/byte-budget.d.ts.map +0 -1
  401. package/dist/byte-view.d.ts.map +0 -1
  402. package/dist/clone-metadata.d.ts.map +0 -1
  403. package/dist/config.d.ts.map +0 -1
  404. package/dist/containment.d.ts.map +0 -1
  405. package/dist/copy-file-input.d.ts.map +0 -1
  406. package/dist/copy-policy.d.ts.map +0 -1
  407. package/dist/copy-publication.d.ts.map +0 -1
  408. package/dist/copy-tree-portable.d.ts.map +0 -1
  409. package/dist/copy.d.ts.map +0 -1
  410. package/dist/create-directory.d.ts.map +0 -1
  411. package/dist/create-file-async.d.ts.map +0 -1
  412. package/dist/create-file.d.ts.map +0 -1
  413. package/dist/create-owned-file.d.ts.map +0 -1
  414. package/dist/create.d.ts.map +0 -1
  415. package/dist/creation-darwin.d.ts.map +0 -1
  416. package/dist/creation-file-state.d.ts.map +0 -1
  417. package/dist/creation-path.d.ts.map +0 -1
  418. package/dist/creation-permissions.d.ts.map +0 -1
  419. package/dist/deny-mutations.d.ts.map +0 -1
  420. package/dist/device-path.d.ts.map +0 -1
  421. package/dist/directory-durability.d.ts.map +0 -1
  422. package/dist/directory-entry-path.d.ts.map +0 -1
  423. package/dist/directory-guard.d.ts.map +0 -1
  424. package/dist/directory-mode-node.d.ts.map +0 -1
  425. package/dist/directory-mode-owner.d.ts.map +0 -1
  426. package/dist/directory-receipt.d.ts.map +0 -1
  427. package/dist/durability.d.ts.map +0 -1
  428. package/dist/effective-uid.d.ts.map +0 -1
  429. package/dist/error-detail.d.ts.map +0 -1
  430. package/dist/errors.d.ts.map +0 -1
  431. package/dist/file-cleanup.d.ts.map +0 -1
  432. package/dist/file-contents.d.ts.map +0 -1
  433. package/dist/file-handle-transfer.d.ts.map +0 -1
  434. package/dist/file-hash.d.ts.map +0 -1
  435. package/dist/file-identity.d.ts.map +0 -1
  436. package/dist/file-lock-sync-admission.d.ts.map +0 -1
  437. package/dist/file-lock-sync-root-acquire.d.ts.map +0 -1
  438. package/dist/file-lock-sync-root-arbitration.d.ts.map +0 -1
  439. package/dist/file-lock-sync-root-held.d.ts.map +0 -1
  440. package/dist/file-lock-sync-root-io.d.ts.map +0 -1
  441. package/dist/file-lock-sync-root-mutation.d.ts.map +0 -1
  442. package/dist/file-lock-sync-root-options.d.ts.map +0 -1
  443. package/dist/file-lock-sync-root-registration.d.ts.map +0 -1
  444. package/dist/file-lock-sync-root.d.ts.map +0 -1
  445. package/dist/file-lock-sync-stale-admission.d.ts.map +0 -1
  446. package/dist/file-lock-sync.d.ts.map +0 -1
  447. package/dist/file-lock.d.ts.map +0 -1
  448. package/dist/file-observation.d.ts.map +0 -1
  449. package/dist/file-store-boundary.d.ts.map +0 -1
  450. package/dist/file-store-copy-source.d.ts.map +0 -1
  451. package/dist/file-store-limit.d.ts.map +0 -1
  452. package/dist/file-store-path.d.ts.map +0 -1
  453. package/dist/file-store-prune.d.ts.map +0 -1
  454. package/dist/file-store-sync-directory.d.ts.map +0 -1
  455. package/dist/file-store-sync-write.d.ts.map +0 -1
  456. package/dist/file-store.d.ts.map +0 -1
  457. package/dist/file-sync.d.ts.map +0 -1
  458. package/dist/filename.d.ts.map +0 -1
  459. package/dist/fs.d.ts.map +0 -1
  460. package/dist/guarded-mkdir.d.ts.map +0 -1
  461. package/dist/guarded-mutation.d.ts.map +0 -1
  462. package/dist/guest-dispatch-python.d.ts.map +0 -1
  463. package/dist/guest-native-python.d.ts.map +0 -1
  464. package/dist/guest.d.ts.map +0 -1
  465. package/dist/home-dir.d.ts.map +0 -1
  466. package/dist/index.d.ts.map +0 -1
  467. package/dist/install-path.d.ts.map +0 -1
  468. package/dist/json-document-store.d.ts.map +0 -1
  469. package/dist/json-durable-queue-directory.d.ts.map +0 -1
  470. package/dist/json-durable-queue-ownership.d.ts.map +0 -1
  471. package/dist/json-durable-queue-paths.d.ts +0 -11
  472. package/dist/json-durable-queue-paths.d.ts.map +0 -1
  473. package/dist/json-durable-queue-paths.js +0 -20
  474. package/dist/json-durable-queue-read.d.ts.map +0 -1
  475. package/dist/json-durable-queue.d.ts.map +0 -1
  476. package/dist/json-store.d.ts.map +0 -1
  477. package/dist/json-stringify.d.ts.map +0 -1
  478. package/dist/json.d.ts.map +0 -1
  479. package/dist/local-file-access.d.ts.map +0 -1
  480. package/dist/local-file-descriptor.d.ts.map +0 -1
  481. package/dist/local-roots.d.ts.map +0 -1
  482. package/dist/lock-config.d.ts.map +0 -1
  483. package/dist/move-path-cleanup.d.ts.map +0 -1
  484. package/dist/move-path-stage.d.ts.map +0 -1
  485. package/dist/move-path.d.ts.map +0 -1
  486. package/dist/mutation-authority.d.ts.map +0 -1
  487. package/dist/native-binding.d.ts.map +0 -1
  488. package/dist/native-config.d.ts.map +0 -1
  489. package/dist/native-directory-observation.d.ts.map +0 -1
  490. package/dist/native-fallback-warning.d.ts.map +0 -1
  491. package/dist/native-operations.d.ts.map +0 -1
  492. package/dist/native-parent-admission.d.ts.map +0 -1
  493. package/dist/native-pinned-write-windows.d.ts.map +0 -1
  494. package/dist/native-pinned-write.d.ts.map +0 -1
  495. package/dist/native-policy-directory-observation.d.ts.map +0 -1
  496. package/dist/native-policy-parent-windows.d.ts.map +0 -1
  497. package/dist/native-rename-outcome.d.ts.map +0 -1
  498. package/dist/native-staged-file.d.ts.map +0 -1
  499. package/dist/native.d.ts.map +0 -1
  500. package/dist/opened-file-failure.d.ts.map +0 -1
  501. package/dist/opened-realpath.d.ts.map +0 -1
  502. package/dist/output.d.ts.map +0 -1
  503. package/dist/overwrite-file-handle.d.ts.map +0 -1
  504. package/dist/owner-dacl.d.ts.map +0 -1
  505. package/dist/path-case.d.ts.map +0 -1
  506. package/dist/path-policy.d.ts.map +0 -1
  507. package/dist/path-prefix.d.ts.map +0 -1
  508. package/dist/path-scope-lexical.d.ts.map +0 -1
  509. package/dist/path-segment-route.d.ts.map +0 -1
  510. package/dist/path-suffix-aliases.d.ts.map +0 -1
  511. package/dist/path.d.ts.map +0 -1
  512. package/dist/permission-exec.d.ts.map +0 -1
  513. package/dist/permissions-public.d.ts.map +0 -1
  514. package/dist/permissions-windows.d.ts.map +0 -1
  515. package/dist/permissions.d.ts.map +0 -1
  516. package/dist/pinned-mutation-admission.d.ts.map +0 -1
  517. package/dist/pinned-mutation-observation.d.ts.map +0 -1
  518. package/dist/pinned-mutation-shared-route.d.ts.map +0 -1
  519. package/dist/pinned-open.d.ts.map +0 -1
  520. package/dist/pinned-operation.d.ts.map +0 -1
  521. package/dist/pinned-write-input.d.ts.map +0 -1
  522. package/dist/pinned-write-mode.d.ts.map +0 -1
  523. package/dist/pinned-write-staged.d.ts.map +0 -1
  524. package/dist/pinned-write-types.d.ts.map +0 -1
  525. package/dist/pinned-write.d.ts.map +0 -1
  526. package/dist/positional-read.d.ts.map +0 -1
  527. package/dist/private-directory.d.ts.map +0 -1
  528. package/dist/private-producer-handoff-sync.d.ts.map +0 -1
  529. package/dist/private-producer-handoff.d.ts.map +0 -1
  530. package/dist/private-temp-workspace.d.ts.map +0 -1
  531. package/dist/publish-copy-stage.d.ts.map +0 -1
  532. package/dist/publish-file-failure.d.ts.map +0 -1
  533. package/dist/publish-file.d.ts.map +0 -1
  534. package/dist/read-open-flags.d.ts.map +0 -1
  535. package/dist/read-opened-file.d.ts.map +0 -1
  536. package/dist/realpath.d.ts.map +0 -1
  537. package/dist/recursive-mkdir-path.d.ts.map +0 -1
  538. package/dist/regular-file.d.ts.map +0 -1
  539. package/dist/replace-directory.d.ts.map +0 -1
  540. package/dist/replace-file-copy-fallback.d.ts.map +0 -1
  541. package/dist/replace-file-copy-source.d.ts.map +0 -1
  542. package/dist/replace-file-descriptor.d.ts.map +0 -1
  543. package/dist/replace-file-mode.d.ts.map +0 -1
  544. package/dist/replace-file-rename-policy.d.ts.map +0 -1
  545. package/dist/replace-file-temp-owner.d.ts.map +0 -1
  546. package/dist/replace-file.d.ts.map +0 -1
  547. package/dist/retained-directory-replacement.d.ts.map +0 -1
  548. package/dist/root-boundary.d.ts.map +0 -1
  549. package/dist/root-context.d.ts.map +0 -1
  550. package/dist/root-create-input.d.ts.map +0 -1
  551. package/dist/root-directory-creation.d.ts.map +0 -1
  552. package/dist/root-directory-list.d.ts.map +0 -1
  553. package/dist/root-directory.d.ts.map +0 -1
  554. package/dist/root-entries.d.ts.map +0 -1
  555. package/dist/root-errors.d.ts.map +0 -1
  556. package/dist/root-file-final-admission.d.ts.map +0 -1
  557. package/dist/root-file.d.ts.map +0 -1
  558. package/dist/root-impl.d.ts.map +0 -1
  559. package/dist/root-move-noreplace.d.ts.map +0 -1
  560. package/dist/root-move-preflight.d.ts.map +0 -1
  561. package/dist/root-observed-path.d.ts.map +0 -1
  562. package/dist/root-options.d.ts.map +0 -1
  563. package/dist/root-path-errors.d.ts.map +0 -1
  564. package/dist/root-path-existing.d.ts.map +0 -1
  565. package/dist/root-path-observation.d.ts.map +0 -1
  566. package/dist/root-path-stat.d.ts.map +0 -1
  567. package/dist/root-path-symlink.d.ts +0 -7
  568. package/dist/root-path-symlink.d.ts.map +0 -1
  569. package/dist/root-path-symlink.js +0 -55
  570. package/dist/root-path.d.ts.map +0 -1
  571. package/dist/root-paths-lexical.d.ts.map +0 -1
  572. package/dist/root-paths.d.ts.map +0 -1
  573. package/dist/root-read-admission.d.ts.map +0 -1
  574. package/dist/root-remove-identity.d.ts.map +0 -1
  575. package/dist/root-remove-receipt.d.ts.map +0 -1
  576. package/dist/root-remove.d.ts.map +0 -1
  577. package/dist/root-symlink-policy.d.ts.map +0 -1
  578. package/dist/root-walk.d.ts.map +0 -1
  579. package/dist/root-write-admission.d.ts.map +0 -1
  580. package/dist/root-write-compatibility.d.ts.map +0 -1
  581. package/dist/root-write-complete-parent.d.ts.map +0 -1
  582. package/dist/root-write-lock-binding.d.ts.map +0 -1
  583. package/dist/root-write-mode.d.ts.map +0 -1
  584. package/dist/root-write-publication.d.ts.map +0 -1
  585. package/dist/root-write-verification.d.ts.map +0 -1
  586. package/dist/root.d.ts.map +0 -1
  587. package/dist/safe-path-segment.d.ts.map +0 -1
  588. package/dist/secret-file.d.ts.map +0 -1
  589. package/dist/secret-read-async.d.ts.map +0 -1
  590. package/dist/secret-read-policy.d.ts.map +0 -1
  591. package/dist/secret.d.ts.map +0 -1
  592. package/dist/secure-file-windows.d.ts.map +0 -1
  593. package/dist/secure-file.d.ts.map +0 -1
  594. package/dist/secure-temp-dir.d.ts.map +0 -1
  595. package/dist/secure-temp-repair.d.ts.map +0 -1
  596. package/dist/sibling-staged-file.d.ts.map +0 -1
  597. package/dist/sibling-temp.d.ts.map +0 -1
  598. package/dist/sidecar-lock-acquire.d.ts.map +0 -1
  599. package/dist/sidecar-lock-admission-context.d.ts.map +0 -1
  600. package/dist/sidecar-lock-admission-parser.d.ts.map +0 -1
  601. package/dist/sidecar-lock-admission.d.ts.map +0 -1
  602. package/dist/sidecar-lock-handle.d.ts.map +0 -1
  603. package/dist/sidecar-lock-policy.d.ts.map +0 -1
  604. package/dist/sidecar-lock-reclaim.d.ts.map +0 -1
  605. package/dist/sidecar-lock-root.d.ts.map +0 -1
  606. package/dist/sidecar-lock-stale-admission.d.ts.map +0 -1
  607. package/dist/sidecar-lock-target.d.ts.map +0 -1
  608. package/dist/sidecar-lock-types.d.ts.map +0 -1
  609. package/dist/sidecar-lock.d.ts.map +0 -1
  610. package/dist/staged-directory.d.ts.map +0 -1
  611. package/dist/staged-file-settlement.d.ts.map +0 -1
  612. package/dist/staged-file-types.d.ts.map +0 -1
  613. package/dist/standalone-publication-path.d.ts.map +0 -1
  614. package/dist/stat-observation.d.ts.map +0 -1
  615. package/dist/store.d.ts.map +0 -1
  616. package/dist/strict-file-identity.d.ts.map +0 -1
  617. package/dist/string-coerce.d.ts.map +0 -1
  618. package/dist/suppressed-error.d.ts.map +0 -1
  619. package/dist/symlink-parents.d.ts.map +0 -1
  620. package/dist/temp-cleanup.d.ts.map +0 -1
  621. package/dist/temp-target.d.ts.map +0 -1
  622. package/dist/temp-workspace-admission.d.ts.map +0 -1
  623. package/dist/temp-workspace-child-admission.d.ts.map +0 -1
  624. package/dist/temp-workspace-descriptor.d.ts.map +0 -1
  625. package/dist/temp-workspace-identity.d.ts.map +0 -1
  626. package/dist/temp-workspace-owner.d.ts.map +0 -1
  627. package/dist/temp-workspace-permissions.d.ts.map +0 -1
  628. package/dist/temp-workspace-types.d.ts.map +0 -1
  629. package/dist/temp.d.ts.map +0 -1
  630. package/dist/test-hooks.d.ts.map +0 -1
  631. package/dist/text-atomic.d.ts.map +0 -1
  632. package/dist/timing.d.ts.map +0 -1
  633. package/dist/trash.d.ts.map +0 -1
  634. package/dist/types.d.ts.map +0 -1
  635. package/dist/unicode-path.d.ts.map +0 -1
  636. package/dist/walk.d.ts.map +0 -1
  637. package/dist/windows-command.d.ts.map +0 -1
  638. package/dist/windows-owner.d.ts.map +0 -1
  639. package/dist/windows-path-alias.d.ts.map +0 -1
  640. package/dist/windows-security-command.d.ts.map +0 -1
  641. package/dist/windows-security-facts.d.ts.map +0 -1
  642. package/dist/write-file-handle.d.ts.map +0 -1
  643. package/dist/write-open-flags.d.ts.map +0 -1
  644. package/dist/write-queue.d.ts.map +0 -1
@@ -9,10 +9,10 @@ import { inspectDirectoryIdentitySync } from "./directory-guard.js";
9
9
  import { throwFsSafeReadError } from "./root-errors.js";
10
10
  import { matchRootFileOpenFailure, openRootFileSync, } from "./root-file.js";
11
11
  import { registerTempPathForExit, } from "./temp-cleanup.js";
12
- import { TempWorkspaceCleanupCapability, TempWorkspaceCleanupOwner, } from "./temp-workspace-owner.js";
12
+ import { TempWorkspaceCleanupCapability, TempWorkspaceCleanupOwner, throwTempWorkspaceCreationFailure, } from "./temp-workspace-owner.js";
13
13
  import { assertNoWindowsPathAlias, hasWindowsPathAlias, } from "./windows-path-alias.js";
14
14
  import { TempWorkspaceRetainedChild } from "./temp-workspace-descriptor.js";
15
- import { admitRetainedTempWorkspaceChild, admitRetainedTempWorkspaceChildSync, validateInitialTempWorkspaceChild, } from "./temp-workspace-child-admission.js";
15
+ import { validateInitialTempWorkspaceChild } from "./temp-workspace-child-admission.js";
16
16
  import { admitTempWorkspaceRoot, admitTempWorkspaceRootSync, } from "./temp-workspace-admission.js";
17
17
  import { validateTempWorkspaceDirMode } from "./temp-workspace-permissions.js";
18
18
  function resolveTempWorkspaceCleanupSafety(value) {
@@ -125,36 +125,6 @@ function tempWorkspaceChildPrefix(root, options, scopedPrefix) {
125
125
  assertNoWindowsPathAlias(childPrefix, "filesystem", "temp workspace path uses a Windows filesystem namespace alias");
126
126
  return childPrefix;
127
127
  }
128
- function throwTempWorkspaceCreationFailure(error, retainedChild, capability, owner) {
129
- try {
130
- if (owner)
131
- owner.cleanupSync();
132
- else {
133
- const closeErrors = [];
134
- try {
135
- retainedChild?.close();
136
- }
137
- catch (closeError) {
138
- closeErrors.push(closeError);
139
- }
140
- try {
141
- capability.close();
142
- }
143
- catch (closeError) {
144
- closeErrors.push(closeError);
145
- }
146
- if (closeErrors.length === 1)
147
- throw closeErrors[0];
148
- if (closeErrors.length > 1) {
149
- throw new AggregateError(closeErrors, "temp workspace admission descriptor close failed");
150
- }
151
- }
152
- }
153
- catch (cleanupError) {
154
- throw new AggregateError([error, cleanupError], "temp workspace creation and cleanup both failed");
155
- }
156
- throw error;
157
- }
158
128
  function registerTempWorkspace(dir, retainedChild, capability, admission, dirMode) {
159
129
  let owner;
160
130
  let stat;
@@ -201,9 +171,9 @@ async function createTempWorkspace(options, scopedPrefix = false) {
201
171
  // Retain while the child still has its private creation mode so an
202
172
  // explicit dirMode such as 0 cannot make identity descriptor acquisition fail.
203
173
  retainedChild = TempWorkspaceRetainedChild.retain(dir, stat);
204
- const modeInitialization = admitRetainedTempWorkspaceChild(retainedChild, needsModeInitialization, admission, dirMode);
205
- if (modeInitialization)
206
- await modeInitialization;
174
+ if (needsModeInitialization) {
175
+ await retainedChild.initializeMode(dirMode, admission.ownerUid, admission.assertCurrent);
176
+ }
207
177
  }
208
178
  catch (error) {
209
179
  throwTempWorkspaceCreationFailure(error, retainedChild, capability);
@@ -294,7 +264,12 @@ function createTempWorkspaceSync(options, scopedPrefix = false) {
294
264
  }
295
265
  const needsModeInitialization = validateInitialTempWorkspaceChild(stat, admission.ownerUid, dirMode);
296
266
  retainedChild ??= TempWorkspaceRetainedChild.retain(dir, stat);
297
- admitRetainedTempWorkspaceChildSync(retainedChild, needsModeInitialization, admission, dirMode);
267
+ if (needsModeInitialization) {
268
+ retainedChild.initializeModeSync(dirMode, admission.ownerUid, admission.assertCurrent);
269
+ }
270
+ else {
271
+ retainedChild.discardInitialReceipt();
272
+ }
298
273
  }
299
274
  catch (error) {
300
275
  throwTempWorkspaceCreationFailure(error, retainedChild, capability);
@@ -11,4 +11,3 @@ export declare function publishCopyStage(params: {
11
11
  onPublicationAttempt?: () => void;
12
12
  onPublished?: (identity: PublishedWriteIdentity) => void;
13
13
  }): void;
14
- //# sourceMappingURL=publish-copy-stage.d.ts.map
@@ -25,4 +25,3 @@ export type PublishFailureState = {
25
25
  export declare function rememberCreatedTarget(state: PublishFailureState, identity: FileIdentityStat, phase: PublishFileExclusiveFailurePhase): void;
26
26
  export declare function publicationFailure(error: unknown, state: PublishFailureState, cleanup: PublishFileExclusiveCleanup): FsSafeError;
27
27
  export declare function directorySyncFailure(error: unknown): PublishFileExclusiveDirectorySyncFailure;
28
- //# sourceMappingURL=publish-file-failure.d.ts.map
@@ -18,4 +18,3 @@ export declare function publishFileExclusive(params: {
18
18
  onSyncFailure?: PublishFileExclusiveSyncFailurePolicy;
19
19
  parentReceipt?: DirectoryReceipt<Stats | BigIntStats>;
20
20
  }): Promise<PublishFileExclusiveResult>;
21
- //# sourceMappingURL=publish-file.d.ts.map
@@ -5,4 +5,3 @@ export declare function resolveReadOpenFlags(options?: {
5
5
  followSymlinks?: boolean;
6
6
  }): number;
7
7
  export {};
8
- //# sourceMappingURL=read-open-flags.d.ts.map
@@ -18,4 +18,3 @@ export declare function readOpenedFileSafely(params: {
18
18
  maxBytes?: number;
19
19
  }): Promise<ReadResult>;
20
20
  export {};
21
- //# sourceMappingURL=read-opened-file.d.ts.map
@@ -1,4 +1,3 @@
1
1
  export declare const realpathSync: ((input: string) => string) & {
2
2
  native: (input: string) => string;
3
3
  };
4
- //# sourceMappingURL=realpath.d.ts.map
@@ -1,3 +1,2 @@
1
1
  /** Bun's Windows recursive mkdir cannot inspect existing relative dot components. */
2
2
  export declare function recursiveMkdirPath(directory: string): string;
3
- //# sourceMappingURL=recursive-mkdir-path.d.ts.map
@@ -35,4 +35,3 @@ export declare function readRegularFileSync(params: {
35
35
  export declare function appendRegularFile(options: AppendRegularFileOptions): Promise<void>;
36
36
  export declare function appendRegularFileSync(options: AppendRegularFileOptions): void;
37
37
  export {};
38
- //# sourceMappingURL=regular-file.d.ts.map
@@ -5,10 +5,10 @@ import { readFileDescriptorBoundedSync, readFileHandleBounded } from "./bounded-
5
5
  import { normalizeMaxBytes } from "./byte-budget.js";
6
6
  import { assertNoUnsafeDeviceReadPath } from "./device-path.js";
7
7
  import { FsSafeError } from "./errors.js";
8
- import { inspectFileIdentity, inspectFileIdentitySync } from "./strict-file-identity.js";
8
+ import { inspectFileIdentitySync } from "./strict-file-identity.js";
9
9
  import { isNotFoundPathError } from "./path.js";
10
10
  import { resolveReadOpenFlags } from "./read-open-flags.js";
11
- import { assertNoSymlinkParents, assertNoSymlinkParentsSync } from "./symlink-parents.js";
11
+ import { assertNoSymlinkParentsSync } from "./symlink-parents.js";
12
12
  import { getFsSafeTestHooks } from "./test-hooks.js";
13
13
  import { isNonRegularWriteOpenError, isNonRegularWriteOpenErrorSync, resolveNonblockingWriteFlag, } from "./write-open-flags.js";
14
14
  import { assertNoWindowsPathAlias, resolvePathPreservingWindowsRoot, } from "./windows-path-alias.js";
@@ -50,18 +50,7 @@ export function statRegularFileSync(filePath) {
50
50
  return { missing: false, stat };
51
51
  }
52
52
  export async function readRegularFile(params) {
53
- const maxBytes = normalizeMaxBytes(params.maxBytes);
54
- const filePath = params.filePath;
55
- assertNoWindowsPathAlias(filePath, "filesystem", "file path uses a Windows filesystem namespace alias");
56
- assertNoUnsafeDeviceReadPath(filePath);
57
- const before = await inspectFileIdentity(async () => {
58
- const stat = fsSync.lstatSync(filePath, { bigint: true });
59
- assertRegularReadStat(stat, filePath, true);
60
- return stat;
61
- }).catch((error) => throwReadPreviewError(error, filePath));
62
- if (maxBytes !== undefined && before.size > maxBytes) {
63
- throw regularFileTooLargeError(filePath, maxBytes);
64
- }
53
+ const { filePath, maxBytes, before } = prepareRegularRead(params);
65
54
  let handle;
66
55
  try {
67
56
  handle = await fs.open(filePath, resolveReadOpenFlags());
@@ -73,28 +62,7 @@ export async function readRegularFile(params) {
73
62
  throw err;
74
63
  }
75
64
  try {
76
- const stat = fsSync.fstatSync(handle.fd);
77
- const identity = await inspectFileIdentity(async () => {
78
- const exact = fsSync.fstatSync(handle.fd, { bigint: true });
79
- assertRegularReadStat(exact, filePath);
80
- return exact;
81
- }, before);
82
- try {
83
- await inspectFileIdentity(async () => {
84
- const current = fsSync.lstatSync(filePath, { bigint: true });
85
- assertRegularReadStat(current, filePath);
86
- return current;
87
- }, identity);
88
- }
89
- catch (err) {
90
- if (isNotFoundPathError(err)) {
91
- throw new FsSafeError("path-mismatch", `File changed during read: ${filePath}`);
92
- }
93
- throw err;
94
- }
95
- if (maxBytes !== undefined && stat.size > maxBytes) {
96
- throw regularFileTooLargeError(filePath, maxBytes);
97
- }
65
+ const stat = inspectOpenedRegularRead(handle.fd, filePath, before, maxBytes);
98
66
  // With a byte cap, avoid readFile(): a raced file growth would allocate
99
67
  // the oversized content before the post-read check could reject it.
100
68
  let buffer;
@@ -127,47 +95,7 @@ function assertRegularReadStat(stat, filePath, preview = false) {
127
95
  throw new Error(preview ? "path must be a regular file" : `File is not a regular file: ${filePath}`);
128
96
  }
129
97
  }
130
- function readOpenedRegularFileSync(params) {
131
- const stat = fsSync.fstatSync(params.fd);
132
- const identity = inspectFileIdentitySync(() => {
133
- const exact = fsSync.fstatSync(params.fd, { bigint: true });
134
- assertRegularReadStat(exact, params.filePath);
135
- return exact;
136
- }, params.preOpenStat);
137
- try {
138
- inspectFileIdentitySync(() => {
139
- const current = fsSync.lstatSync(params.filePath, { bigint: true });
140
- assertRegularReadStat(current, params.filePath);
141
- return current;
142
- }, identity);
143
- }
144
- catch (error) {
145
- if (isNotFoundPathError(error)) {
146
- throw new FsSafeError("path-mismatch", `File changed during read: ${params.filePath}`);
147
- }
148
- throw error;
149
- }
150
- if (params.maxBytes !== undefined && stat.size > params.maxBytes) {
151
- throw regularFileTooLargeError(params.filePath, params.maxBytes);
152
- }
153
- // Keep capped sync reads incremental for the same reason as async reads:
154
- // readFileSync(fd) would buffer a raced oversized file before throwing.
155
- let buffer;
156
- try {
157
- buffer =
158
- params.maxBytes === undefined
159
- ? fsSync.readFileSync(params.fd)
160
- : readFileDescriptorBoundedSync(params.fd, params.maxBytes);
161
- }
162
- catch (error) {
163
- if (params.maxBytes !== undefined) {
164
- translateBoundedReadOverflow(error, params.filePath, params.maxBytes);
165
- }
166
- throw error;
167
- }
168
- return { buffer, stat };
169
- }
170
- export function readRegularFileSync(params) {
98
+ function prepareRegularRead(params) {
171
99
  const maxBytes = normalizeMaxBytes(params.maxBytes);
172
100
  const filePath = params.filePath;
173
101
  assertNoWindowsPathAlias(filePath, "filesystem", "file path uses a Windows filesystem namespace alias");
@@ -186,6 +114,35 @@ export function readRegularFileSync(params) {
186
114
  if (maxBytes !== undefined && before.size > maxBytes) {
187
115
  throw regularFileTooLargeError(filePath, maxBytes);
188
116
  }
117
+ return { filePath, maxBytes, before };
118
+ }
119
+ function inspectOpenedRegularRead(fd, filePath, preOpenStat, maxBytes) {
120
+ const stat = fsSync.fstatSync(fd);
121
+ const identity = inspectFileIdentitySync(() => {
122
+ const exact = fsSync.fstatSync(fd, { bigint: true });
123
+ assertRegularReadStat(exact, filePath);
124
+ return exact;
125
+ }, preOpenStat);
126
+ try {
127
+ inspectFileIdentitySync(() => {
128
+ const current = fsSync.lstatSync(filePath, { bigint: true });
129
+ assertRegularReadStat(current, filePath);
130
+ return current;
131
+ }, identity);
132
+ }
133
+ catch (error) {
134
+ if (isNotFoundPathError(error)) {
135
+ throw new FsSafeError("path-mismatch", `File changed during read: ${filePath}`);
136
+ }
137
+ throw error;
138
+ }
139
+ if (maxBytes !== undefined && stat.size > maxBytes) {
140
+ throw regularFileTooLargeError(filePath, maxBytes);
141
+ }
142
+ return stat;
143
+ }
144
+ export function readRegularFileSync(params) {
145
+ const { filePath, maxBytes, before } = prepareRegularRead(params);
189
146
  let fd;
190
147
  try {
191
148
  fd = fsSync.openSync(filePath, resolveReadOpenFlags());
@@ -197,12 +154,21 @@ export function readRegularFileSync(params) {
197
154
  throw error;
198
155
  }
199
156
  try {
200
- return readOpenedRegularFileSync({
201
- fd,
202
- filePath,
203
- preOpenStat: before,
204
- maxBytes,
205
- });
157
+ const stat = inspectOpenedRegularRead(fd, filePath, before, maxBytes);
158
+ // Keep capped reads incremental so raced growth cannot allocate unbounded content.
159
+ let buffer;
160
+ try {
161
+ buffer = maxBytes === undefined
162
+ ? fsSync.readFileSync(fd)
163
+ : readFileDescriptorBoundedSync(fd, maxBytes);
164
+ }
165
+ catch (error) {
166
+ if (maxBytes !== undefined) {
167
+ translateBoundedReadOverflow(error, filePath, maxBytes);
168
+ }
169
+ throw error;
170
+ }
171
+ return { buffer, stat };
206
172
  }
207
173
  finally {
208
174
  fsSync.closeSync(fd);
@@ -240,11 +206,10 @@ function inspectAppendPath(filePath) {
240
206
  throw new Error(`Refusing to append to non-file: ${filePath}`);
241
207
  return stat;
242
208
  }
243
- export async function appendRegularFile(options) {
244
- const { filePath, content, encoding, mode, maxFileBytes, rejectSymlinkParents } = captureAppendOptions(options);
209
+ function prepareRegularAppend(filePath, rejectSymlinkParents) {
245
210
  if (rejectSymlinkParents === true) {
246
211
  const resolvedDir = resolvePathPreservingWindowsRoot(path.dirname(filePath));
247
- await assertNoSymlinkParents({
212
+ assertNoSymlinkParentsSync({
248
213
  rootDir: path.parse(resolvedDir).root,
249
214
  targetPath: resolvedDir,
250
215
  allowMissing: false,
@@ -253,14 +218,35 @@ export async function appendRegularFile(options) {
253
218
  messagePrefix: "Refusing to append under",
254
219
  });
255
220
  }
256
- let preOpenStat;
257
221
  try {
258
- preOpenStat = await inspectFileIdentity(async () => inspectAppendPath(filePath));
222
+ return inspectFileIdentitySync(() => inspectAppendPath(filePath));
259
223
  }
260
224
  catch (error) {
261
225
  if (!isNotFoundPathError(error))
262
226
  throw error;
263
227
  }
228
+ }
229
+ function inspectOpenedRegularAppend(fd, filePath, preOpenStat) {
230
+ try {
231
+ const identity = inspectFileIdentitySync(() => {
232
+ const stat = fsSync.fstatSync(fd, { bigint: true });
233
+ assertRegularAppendStat(stat, filePath);
234
+ return stat;
235
+ }, preOpenStat);
236
+ inspectFileIdentitySync(() => {
237
+ const current = fsSync.lstatSync(filePath, { bigint: true });
238
+ assertRegularAppendStat(current, filePath);
239
+ return current;
240
+ }, identity);
241
+ return identity;
242
+ }
243
+ catch (error) {
244
+ throwAppendIdentityError(error, filePath);
245
+ }
246
+ }
247
+ export async function appendRegularFile(options) {
248
+ const { filePath, content, encoding, mode, maxFileBytes, rejectSymlinkParents } = captureAppendOptions(options);
249
+ const preOpenStat = prepareRegularAppend(filePath, rejectSymlinkParents);
264
250
  const contentBytes = Buffer.isBuffer(content) ? content.byteLength : Buffer.byteLength(content, encoding);
265
251
  if (maxFileBytes !== undefined &&
266
252
  Number(preOpenStat?.size ?? 0n) + contentBytes > maxFileBytes) {
@@ -279,22 +265,7 @@ export async function appendRegularFile(options) {
279
265
  throw error;
280
266
  }
281
267
  try {
282
- let identity;
283
- try {
284
- identity = await inspectFileIdentity(async () => {
285
- const stat = fsSync.fstatSync(handle.fd, { bigint: true });
286
- assertRegularAppendStat(stat, filePath);
287
- return stat;
288
- }, preOpenStat);
289
- await inspectFileIdentity(async () => {
290
- const current = fsSync.lstatSync(filePath, { bigint: true });
291
- assertRegularAppendStat(current, filePath);
292
- return current;
293
- }, identity);
294
- }
295
- catch (error) {
296
- throwAppendIdentityError(error, filePath);
297
- }
268
+ const identity = inspectOpenedRegularAppend(handle.fd, filePath, preOpenStat);
298
269
  if (maxFileBytes !== undefined &&
299
270
  Number(identity.size) + contentBytes > maxFileBytes) {
300
271
  return;
@@ -311,25 +282,7 @@ export async function appendRegularFile(options) {
311
282
  }
312
283
  export function appendRegularFileSync(options) {
313
284
  const { filePath, content, encoding, mode, maxFileBytes, rejectSymlinkParents } = captureAppendOptions(options);
314
- if (rejectSymlinkParents === true) {
315
- const resolvedDir = resolvePathPreservingWindowsRoot(path.dirname(filePath));
316
- assertNoSymlinkParentsSync({
317
- rootDir: path.parse(resolvedDir).root,
318
- targetPath: resolvedDir,
319
- allowMissing: false,
320
- allowRootChildSymlink: true,
321
- requireDirectories: true,
322
- messagePrefix: "Refusing to append under",
323
- });
324
- }
325
- let preOpenStat;
326
- try {
327
- preOpenStat = inspectFileIdentitySync(() => inspectAppendPath(filePath));
328
- }
329
- catch (error) {
330
- if (!isNotFoundPathError(error))
331
- throw error;
332
- }
285
+ const preOpenStat = prepareRegularAppend(filePath, rejectSymlinkParents);
333
286
  const contentBuffer = typeof content === "string" ? Buffer.from(content, encoding) : Buffer.from(content);
334
287
  if (maxFileBytes !== undefined &&
335
288
  Number(preOpenStat?.size ?? 0n) + contentBuffer.byteLength > maxFileBytes) {
@@ -348,22 +301,7 @@ export function appendRegularFileSync(options) {
348
301
  throw error;
349
302
  }
350
303
  try {
351
- let identity;
352
- try {
353
- identity = inspectFileIdentitySync(() => {
354
- const stat = fsSync.fstatSync(fd, { bigint: true });
355
- assertRegularAppendStat(stat, filePath);
356
- return stat;
357
- }, preOpenStat);
358
- inspectFileIdentitySync(() => {
359
- const current = fsSync.lstatSync(filePath, { bigint: true });
360
- assertRegularAppendStat(current, filePath);
361
- return current;
362
- }, identity);
363
- }
364
- catch (error) {
365
- throwAppendIdentityError(error, filePath);
366
- }
304
+ const identity = inspectOpenedRegularAppend(fd, filePath, preOpenStat);
367
305
  if (maxFileBytes !== undefined &&
368
306
  Number(identity.size) + contentBuffer.byteLength > maxFileBytes) {
369
307
  return;
@@ -4,4 +4,3 @@ export type ReplaceDirectoryAtomicOptions = {
4
4
  backupPrefix?: string;
5
5
  };
6
6
  export declare function replaceDirectoryAtomic(options: ReplaceDirectoryAtomicOptions): Promise<void>;
7
- //# sourceMappingURL=replace-directory.d.ts.map
@@ -36,4 +36,3 @@ export declare function copyFallbackReplaceSync(params: {
36
36
  sync: boolean;
37
37
  }): void;
38
38
  export {};
39
- //# sourceMappingURL=replace-file-copy-fallback.d.ts.map
@@ -73,7 +73,12 @@ async function openPinnedDestination(fsModule, dest, admission, hardlinks) {
73
73
  return handle;
74
74
  }
75
75
  catch (error) {
76
- await handle.close().catch(() => undefined);
76
+ try {
77
+ await handle.close();
78
+ }
79
+ catch {
80
+ // Preserve the already-selected admission failure.
81
+ }
77
82
  throw error;
78
83
  }
79
84
  }
@@ -105,8 +110,14 @@ export async function assertDestinationHardlinkPolicy(fsModule, dest, policy) {
105
110
  if (policy !== "reject")
106
111
  return;
107
112
  const handle = await openPinnedDestination(fsModule, dest, "hardlinks");
108
- if (handle)
109
- await handle.close().catch(() => undefined);
113
+ if (!handle)
114
+ return;
115
+ try {
116
+ await handle.close();
117
+ }
118
+ catch {
119
+ // The asynchronous admission pin has best-effort close semantics.
120
+ }
110
121
  }
111
122
  export function assertDestinationHardlinkPolicySync(fsModule, dest, policy) {
112
123
  if (policy !== "reject")
@@ -18,4 +18,3 @@ export declare function readOwnedCopySourceSync(params: {
18
18
  mode: number;
19
19
  };
20
20
  export {};
21
- //# sourceMappingURL=replace-file-copy-source.d.ts.map
@@ -73,7 +73,12 @@ export async function readOwnedCopySource(params) {
73
73
  return { replacement: await handle.readFile(), mode: Number(opened.mode) };
74
74
  }
75
75
  finally {
76
- await handle.close().catch(() => undefined);
76
+ try {
77
+ await handle.close();
78
+ }
79
+ catch {
80
+ // Best-effort close includes synchronous adapter throws.
81
+ }
77
82
  }
78
83
  }
79
84
  export function readOwnedCopySourceSync(params) {
@@ -48,4 +48,3 @@ export declare function writeTempFileSync(params: {
48
48
  identity: BigIntStats;
49
49
  };
50
50
  export {};
51
- //# sourceMappingURL=replace-file-descriptor.d.ts.map
@@ -14,7 +14,12 @@ export async function syncDirectoryBestEffort(fsModule, dirPath) {
14
14
  // Best-effort on platforms/filesystems that do not support directory fsync.
15
15
  }
16
16
  finally {
17
- await handle?.close().catch(() => undefined);
17
+ try {
18
+ await handle?.close();
19
+ }
20
+ catch {
21
+ // Best-effort close also covers synchronous adapter throws.
22
+ }
18
23
  }
19
24
  }
20
25
  export function syncDirectoryBestEffortSync(fsModule, dirPath) {
@@ -1,3 +1,2 @@
1
1
  import type { Stats } from "node:fs";
2
2
  export declare function inheritedRegularFileMode(stat: Stats): number;
3
- //# sourceMappingURL=replace-file-mode.d.ts.map
@@ -4,4 +4,3 @@ export declare function validateRenameIdentity(policy: RenameIdentityPolicy | un
4
4
  export declare function atomicExpectedContentHash(policy: RenameIdentityPolicy | undefined, content: string | Uint8Array): string | undefined;
5
5
  export declare function withAtomicRenameIdentityLock<T>(filePath: string, fn: () => Promise<T>): Promise<T>;
6
6
  export declare function withAtomicRenameIdentityLockSync<T>(filePath: string, fn: () => T): T;
7
- //# sourceMappingURL=replace-file-rename-policy.d.ts.map
@@ -1,45 +1,45 @@
1
1
  import syncFs, { type BigIntStats } from "node:fs";
2
2
  import fs, { type FileHandle } from "node:fs/promises";
3
+ import { type TempPathRegistration } from "./temp-cleanup.js";
3
4
  type AsyncOwnerFileSystem = Pick<typeof fs, "lstat" | "open" | "unlink">;
4
5
  type SyncOwnerFileSystem = Pick<typeof syncFs, "closeSync" | "fstatSync" | "lstatSync" | "openSync" | "readFileSync" | "unlinkSync">;
5
6
  export type AtomicTempFailure = Readonly<{
6
7
  error: unknown;
7
8
  }>;
8
9
  export declare function removePathIfIdentityUnchanged(targetPath: string, identity: Pick<BigIntStats, "dev" | "ino">): Promise<void>;
9
- export declare class AsyncAtomicTempOwner {
10
- #private;
10
+ declare class AtomicTempOwner<Resource> {
11
11
  readonly pathname: string;
12
+ protected resource: Resource | undefined;
13
+ protected recordedIdentity: BigIntStats | undefined;
14
+ protected exists: boolean;
15
+ protected unregister: TempPathRegistration;
12
16
  constructor(pathname: string);
13
17
  start(): void;
14
18
  readonly onIdentity: (identity: BigIntStats) => void;
19
+ get identity(): BigIntStats;
20
+ markRenamed(): void;
21
+ protected takeResource(): Resource | undefined;
22
+ }
23
+ export declare class AsyncAtomicTempOwner extends AtomicTempOwner<FileHandle> {
15
24
  adopt(temp: {
16
25
  handle: FileHandle;
17
26
  identity: BigIntStats;
18
27
  }): void;
19
- get identity(): BigIntStats;
20
28
  assertCurrent(fsModule: AsyncOwnerFileSystem, pathname?: string): Promise<void>;
21
29
  assertPublished(fsModule: AsyncOwnerFileSystem, pathname: string, expectedHash?: string): Promise<void>;
22
- markRenamed(): void;
23
30
  finish(params: {
24
31
  fsModule: AsyncOwnerFileSystem;
25
32
  originalFailure?: AtomicTempFailure;
26
33
  throwOnCleanupError: boolean;
27
34
  }): Promise<void>;
28
35
  }
29
- export declare class SyncAtomicTempOwner {
30
- #private;
31
- readonly pathname: string;
32
- constructor(pathname: string);
33
- start(): void;
34
- readonly onIdentity: (identity: BigIntStats) => void;
36
+ export declare class SyncAtomicTempOwner extends AtomicTempOwner<number> {
35
37
  adopt(temp: {
36
38
  fd: number;
37
39
  identity: BigIntStats;
38
40
  }): void;
39
- get identity(): BigIntStats;
40
41
  assertCurrent(fsModule: SyncOwnerFileSystem, pathname?: string): void;
41
42
  assertPublished(fsModule: SyncOwnerFileSystem, pathname: string, expectedHash?: string): void;
42
- markRenamed(): void;
43
43
  finish(params: {
44
44
  fsModule: SyncOwnerFileSystem;
45
45
  originalFailure?: AtomicTempFailure;
@@ -47,4 +47,3 @@ export declare class SyncAtomicTempOwner {
47
47
  }): void;
48
48
  }
49
49
  export {};
50
- //# sourceMappingURL=replace-file-temp-owner.d.ts.map