@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
@@ -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
@@ -8,9 +8,8 @@ import { classifyNativeRenameFailure, NATIVE_RENAME_SOURCE_IDENTITY_MISMATCH, }
8
8
  import { recursiveMkdirPath } from "./recursive-mkdir-path.js";
9
9
  import { RetainedDirectoryReplacement } from "./retained-directory-replacement.js";
10
10
  import { assertSafePathPrefix } from "./safe-path-segment.js";
11
- import { admitStandalonePublicationPath } from "./standalone-publication-path.js";
11
+ import { admitStandalonePublicationPath, assertNoWindowsPathAlias } from "./windows-path-alias.js";
12
12
  import { serializePathWrite } from "./write-queue.js";
13
- import { assertNoWindowsPathAlias } from "./windows-path-alias.js";
14
13
  function distinctGuards(source, target) {
15
14
  return source === target ? [source] : [source, target];
16
15
  }
@@ -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
@@ -1,7 +1,5 @@
1
- import type { RenameIdentityPolicy } from "./pinned-write.js";
2
- export type { RenameIdentityPolicy };
1
+ import type { RenameIdentityPolicy } from "./pinned-write-types.js";
3
2
  export declare function validateRenameIdentity(policy: RenameIdentityPolicy | undefined): void;
4
3
  export declare function atomicExpectedContentHash(policy: RenameIdentityPolicy | undefined, content: string | Uint8Array): string | undefined;
5
4
  export declare function withAtomicRenameIdentityLock<T>(filePath: string, fn: () => Promise<T>): Promise<T>;
6
5
  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