@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
package/dist/archive.js CHANGED
@@ -6,25 +6,23 @@ import fs from "node:fs/promises";
6
6
  import path from "node:path";
7
7
  import { Readable } from "node:stream";
8
8
  import { pipeline } from "node:stream/promises";
9
- import { createArchiveOutputPathTracker, resolveArchiveOutputPath, stripArchivePath, validateArchiveEntryPath, } from "./archive-entry.js";
9
+ import { createArchiveEntrySelector } from "./archive-plan.js";
10
10
  import { createPipelineTimeoutError, waitForDeadline, withExtractionDeadline, } from "./archive-deadline.js";
11
- import { assertArchiveEntryCountWithinLimit, assertArchiveEntryPathComponentsWithinLimit, createByteBudgetTracker, createExtractBudgetTransform, resolveExtractLimits, resolveTarMeterLimits, } from "./archive-limits.js";
11
+ import { assertArchiveEntryCountWithinLimit, createByteBudgetTracker, createExtractBudgetTransform, resolveExtractLimits, resolveTarMeterLimits, } from "./archive-limits.js";
12
12
  import { resolveArchiveKind } from "./archive-kind.js";
13
- import { prepareArchiveDestinationGuard, preparePrivateArchiveOutputPath, withStagedArchiveDestination, } from "./archive-staging.js";
14
- import { mergePlannedArchiveIntoDestination } from "./archive-merge.js";
13
+ import { prepareArchiveDestinationGuard, preparePrivateArchiveOutputPath, } from "./archive-staging.js";
14
+ import { withStagedArchivePublication } from "./archive-merge.js";
15
15
  import { loadZipArchiveWithPreflight } from "./archive-zip-preflight.js";
16
16
  import { admittedZipEntries } from "./archive-zip-loader.js";
17
17
  import { zipEntryKind, zipEntryDeclaredSize, zipEntryMode, } from "./archive-zip-entry.js";
18
18
  import { createZipIntegrityTransform, normalizeZipIntegrityError, } from "./archive-zip-integrity.js";
19
- import { FsSafeError } from "./errors.js";
20
19
  import { ArchiveSecurityError } from "./archive-errors.js";
21
20
  import { extractNativeArchive } from "./archive-native.js";
22
21
  import { stageArchiveFileForExtraction } from "./archive-input.js";
23
22
  import { getNativeBinding } from "./native.js";
24
- import { resolveArchiveFilteredEntryPolicy, shouldExtractArchiveEntry, } from "./archive-policy.js";
23
+ import { resolveArchiveFilteredEntryPolicy } from "./archive-policy.js";
25
24
  import { writeSiblingTempFile } from "./sibling-temp.js";
26
25
  import { assertNoWindowsPathAlias } from "./windows-path-alias.js";
27
- import { realpathSync } from "./realpath.js";
28
26
  export { isWindowsDrivePath, normalizeArchiveEntryPath, resolveArchiveOutputPath, stripArchivePath, validateArchiveEntryPath, } from "./archive-entry.js";
29
27
  export { resolveArchiveKind, resolvePackedRootDir } from "./archive-kind.js";
30
28
  export { readArchiveEntry } from "./archive-read.js";
@@ -48,26 +46,6 @@ async function readZipEntryStream(entry) {
48
46
  const buf = await entry.async("nodebuffer");
49
47
  return Readable.from(buf);
50
48
  }
51
- function resolveZipOutputPath(params) {
52
- validateArchiveEntryPath(params.entryPath);
53
- const canonicalPath = stripArchivePath(params.entryPath, 0);
54
- if (!canonicalPath)
55
- return null;
56
- const relPath = params.strip === 0 ? canonicalPath : stripArchivePath(canonicalPath, params.strip);
57
- if (!relPath) {
58
- return null;
59
- }
60
- validateArchiveEntryPath(relPath);
61
- return {
62
- canonicalPath,
63
- relPath,
64
- outPath: resolveArchiveOutputPath({
65
- rootDir: params.destinationDir,
66
- relPath,
67
- originalPath: params.entryPath,
68
- }),
69
- };
70
- }
71
49
  async function writeZipFileEntry(params) {
72
50
  params.deadline.check();
73
51
  params.budget.startEntry();
@@ -118,93 +96,48 @@ async function writeZipFileEntry(params) {
118
96
  }
119
97
  }
120
98
  async function extractZip(params) {
121
- const limits = resolveExtractLimits(params.limits);
122
- const stagedArchive = await stageArchiveFileForExtraction({
123
- archivePath: params.archivePath,
124
- limits,
125
- deadline: params.deadline,
99
+ const { limits, deadline } = params;
100
+ const destinationGuard = await prepareArchiveDestinationGuard(params.destDir);
101
+ deadline.check();
102
+ const buffer = await fs.readFile(params.archivePath, { signal: deadline.signal });
103
+ deadline.check();
104
+ const zip = await waitForDeadline(loadZipArchiveWithPreflight(buffer, limits), deadline);
105
+ deadline.check();
106
+ const entries = admittedZipEntries(zip);
107
+ assertArchiveEntryCountWithinLimit(entries.length, limits);
108
+ const budget = createByteBudgetTracker(limits);
109
+ await withStagedArchivePublication({ ...params, destinationGuard }, async (stagingDir) => {
110
+ const { select } = createArchiveEntrySelector({ ...params, rootDir: stagingDir });
111
+ const acceptedEntries = [];
112
+ for (const entry of entries) {
113
+ deadline.check();
114
+ const entryKind = zipEntryKind(entry);
115
+ const relPath = select({ path: entry.name, kind: entryKind, size: zipEntryDeclaredSize(entry) });
116
+ if (relPath === null)
117
+ continue;
118
+ if (entryKind === "symlink") {
119
+ throw new ArchiveSecurityError("entry-link", `zip entry is a link: ${entry.name}`);
120
+ }
121
+ if (entryKind === "other")
122
+ continue;
123
+ const mode = zipEntryMode(entry, params.entryModes);
124
+ acceptedEntries.push({ path: relPath, kind: entry.dir ? "directory" : "file", mode });
125
+ const outPath = path.join(stagingDir, relPath);
126
+ await preparePrivateArchiveOutputPath({
127
+ destinationDir: stagingDir,
128
+ destinationRealDir: stagingDir,
129
+ relPath,
130
+ outPath,
131
+ originalPath: entry.name,
132
+ isDirectory: entry.dir,
133
+ deadline,
134
+ });
135
+ if (!entry.dir) {
136
+ await writeZipFileEntry({ entry, outPath, budget, deadline });
137
+ }
138
+ }
139
+ return acceptedEntries;
126
140
  });
127
- try {
128
- const destinationGuard = await prepareArchiveDestinationGuard(params.destDir);
129
- const destinationRealDir = destinationGuard.realPath;
130
- params.deadline.check();
131
- const buffer = await fs.readFile(stagedArchive.path, { signal: params.deadline.signal });
132
- params.deadline.check();
133
- const zip = await waitForDeadline(loadZipArchiveWithPreflight(buffer, limits), params.deadline);
134
- params.deadline.check();
135
- const entries = admittedZipEntries(zip);
136
- const strip = Math.max(0, Math.floor(params.stripComponents ?? 0));
137
- assertArchiveEntryCountWithinLimit(entries.length, limits);
138
- const budget = createByteBudgetTracker(limits);
139
- const trackOutputPath = createArchiveOutputPathTracker();
140
- await withStagedArchiveDestination({
141
- destinationRealDir,
142
- run: async (stagingDir) => {
143
- const stagingRealDir = realpathSync.native(stagingDir);
144
- const acceptedEntries = [];
145
- for (const entry of entries) {
146
- params.deadline.check();
147
- const output = resolveZipOutputPath({
148
- entryPath: entry.name,
149
- strip,
150
- destinationDir: stagingRealDir,
151
- });
152
- if (!output) {
153
- continue;
154
- }
155
- assertArchiveEntryPathComponentsWithinLimit(output.relPath, limits);
156
- trackOutputPath(output.relPath, entry.name);
157
- const entryKind = zipEntryKind(entry);
158
- const entrySize = zipEntryDeclaredSize(entry);
159
- if (!shouldExtractArchiveEntry({
160
- filter: params.entryFilter,
161
- onFiltered: params.onFiltered,
162
- entry: { path: output.canonicalPath, kind: entryKind, size: entrySize },
163
- })) {
164
- continue;
165
- }
166
- if (entryKind === "symlink") {
167
- throw new ArchiveSecurityError("entry-link", `zip entry is a link: ${entry.name}`);
168
- }
169
- if (entryKind === "other")
170
- continue;
171
- const mode = zipEntryMode(entry, params.entryModes);
172
- acceptedEntries.push({ path: output.relPath, kind: entry.dir ? "directory" : "file", mode });
173
- await preparePrivateArchiveOutputPath({
174
- destinationDir: stagingRealDir,
175
- destinationRealDir: stagingRealDir,
176
- relPath: output.relPath,
177
- outPath: output.outPath,
178
- originalPath: entry.name,
179
- isDirectory: entry.dir,
180
- deadline: params.deadline,
181
- });
182
- if (entry.dir) {
183
- continue;
184
- }
185
- await writeZipFileEntry({
186
- entry,
187
- outPath: output.outPath,
188
- budget,
189
- deadline: params.deadline,
190
- });
191
- }
192
- params.deadline.check();
193
- await mergePlannedArchiveIntoDestination({
194
- entries: acceptedEntries,
195
- durable: params.durable,
196
- entryUmask: params.entryUmask,
197
- sourceDir: stagingRealDir,
198
- destinationGuard,
199
- deadline: params.deadline,
200
- });
201
- params.deadline.check();
202
- },
203
- });
204
- }
205
- finally {
206
- await stagedArchive.cleanup();
207
- }
208
141
  }
209
142
  export async function extractArchive(params) {
210
143
  const archivePath = params.archivePath;
@@ -232,62 +165,52 @@ export async function extractArchive(params) {
232
165
  stripComponents: params.stripComponents, limits,
233
166
  entryModes: params.entryModes, entryUmask, entryFilter: params.entryFilter, onFiltered,
234
167
  };
235
- if (native) {
236
- await withExtractionDeadline(params.timeoutMs, label, async (deadline) => extractNativeArchive({ ...options, binding: native, kind, tarLimits, deadline }));
237
- return;
238
- }
239
- if (kind !== "zip") {
240
- await withExtractionDeadline(params.timeoutMs, label, async (deadline) => {
241
- const stagedArchive = await stageArchiveFileForExtraction({
242
- archivePath: options.archivePath,
243
- limits,
244
- deadline,
245
- });
246
- try {
247
- await extractWasmTar({ archivePath: stagedArchive.path, kind, options, limits, tarLimits, deadline });
248
- }
249
- finally {
250
- await stagedArchive.cleanup();
251
- }
252
- });
253
- return;
254
- }
255
- await withExtractionDeadline(params.timeoutMs, label, async (deadline) => extractZip({ ...options, deadline }));
168
+ await withExtractionDeadline(params.timeoutMs, label, async (deadline) => {
169
+ const stagedArchive = await stageArchiveFileForExtraction({ archivePath, limits, deadline });
170
+ try {
171
+ deadline.check();
172
+ const stagedOptions = { ...options, archivePath: stagedArchive.path, deadline };
173
+ if (native)
174
+ await extractNativeArchive({ ...stagedOptions, binding: native, kind, tarLimits });
175
+ else if (kind === "zip")
176
+ await extractZip(stagedOptions);
177
+ else
178
+ await extractWasmTar({ ...stagedOptions, kind, tarLimits });
179
+ }
180
+ finally {
181
+ await stagedArchive.cleanup();
182
+ }
183
+ });
256
184
  }
257
185
  async function extractWasmTar(params) {
258
- const { options, deadline, tarLimits } = params;
186
+ const { deadline, tarLimits } = params;
259
187
  const manifest = [];
260
188
  await inspectTar({ archivePath: params.archivePath, kind: params.kind, limits: tarLimits, signal: deadline.signal,
261
189
  onMember: (entry) => { manifest.push(entry); } });
262
190
  deadline.check();
263
- const destinationGuard = await prepareArchiveDestinationGuard(options.destDir);
264
- const destinationRealDir = destinationGuard.realPath;
265
- await withStagedArchiveDestination({ destinationRealDir, run: async (stagingPath) => {
266
- const stagingDir = realpathSync.native(stagingPath);
267
- const planEntry = createTarEntryPlanner({ ...options, rootDir: destinationRealDir, limits: params.limits });
268
- const accepted = manifest.flatMap((entry) => {
269
- deadline.check();
270
- const planned = planEntry(entry);
271
- return planned ? [{ ...entry, ...planned }] : [];
272
- });
273
- await replayTar({ archivePath: params.archivePath, kind: params.kind, limits: tarLimits, signal: deadline.signal, members: accepted,
274
- async consume(member, payload) {
275
- deadline.check();
276
- await preparePrivateArchiveOutputPath({ destinationDir: stagingDir, destinationRealDir: stagingDir,
277
- relPath: member.path, outPath: path.join(stagingDir, member.path), originalPath: member.path,
278
- isDirectory: member.kind === "directory", deadline });
279
- if (member.kind === "file") {
280
- await runPinnedWriteHelper({ rootPath: stagingDir, relativeParentPath: path.posix.dirname(member.path),
281
- basename: path.posix.basename(member.path), mkdir: false, mode: 0o600, overwrite: false,
282
- sync: false,
283
- maxBytes: member.size, input: { kind: "stream", stream: Readable.from(payload) } });
284
- }
285
- deadline.check();
286
- },
287
- });
191
+ const destinationGuard = await prepareArchiveDestinationGuard(params.destDir);
192
+ await withStagedArchivePublication({ ...params, destinationGuard }, async (stagingDir) => {
193
+ const planEntry = createTarEntryPlanner({ ...params, rootDir: destinationGuard.realPath });
194
+ const accepted = manifest.flatMap((entry) => {
288
195
  deadline.check();
289
- await mergePlannedArchiveIntoDestination({ entries: accepted, sourceDir: stagingDir, destinationGuard,
290
- deadline, durable: options.durable, entryUmask: options.entryUmask });
291
- deadline.check();
292
- } });
196
+ const planned = planEntry(entry);
197
+ return planned ? [{ ...entry, ...planned }] : [];
198
+ });
199
+ await replayTar({ archivePath: params.archivePath, kind: params.kind, limits: tarLimits, signal: deadline.signal, members: accepted,
200
+ async consume(member, payload) {
201
+ deadline.check();
202
+ await preparePrivateArchiveOutputPath({ destinationDir: stagingDir, destinationRealDir: stagingDir,
203
+ relPath: member.path, outPath: path.join(stagingDir, member.path), originalPath: member.path,
204
+ isDirectory: member.kind === "directory", deadline });
205
+ if (member.kind === "file") {
206
+ await runPinnedWriteHelper({ rootPath: stagingDir, relativeParentPath: path.posix.dirname(member.path),
207
+ basename: path.posix.basename(member.path), mkdir: false, mode: 0o600, overwrite: false,
208
+ sync: false,
209
+ maxBytes: member.size, input: { kind: "stream", stream: Readable.from(payload) } });
210
+ }
211
+ deadline.check();
212
+ },
213
+ });
214
+ return accepted;
215
+ });
293
216
  }
@@ -1,2 +1 @@
1
1
  export declare function createAsyncLock(): <T>(fn: () => Promise<T>) => Promise<T>;
2
- //# sourceMappingURL=async-lock.d.ts.map
package/dist/atomic.d.ts CHANGED
@@ -2,4 +2,3 @@ export { replaceFileAtomic, replaceFileAtomicSync, type RenameIdentityPolicy, ty
2
2
  export { writeTextAtomic, type WriteTextAtomicOptions } from "./text-atomic.js";
3
3
  export { replaceDirectoryAtomic, type ReplaceDirectoryAtomicOptions } from "./replace-directory.js";
4
4
  export { movePathWithCopyFallback, type MovePathPublicationReceipt, type MovePathWithCopyFallbackOptions, } from "./move-path.js";
5
- //# sourceMappingURL=atomic.d.ts.map
@@ -1,3 +1,2 @@
1
1
  import { Transform } from "node:stream";
2
2
  export declare function createByteLimitTransform(maxBytes: number, overflowError: (bytes: number) => Error): Transform;
3
- //# sourceMappingURL=bounded-read-stream.d.ts.map
@@ -23,4 +23,3 @@ export declare function readBoundedSync(maxBytes: number, readChunk: (scratch: B
23
23
  /** Sync bounded read from a numeric descriptor. The caller owns the descriptor. */
24
24
  export declare function readFileDescriptorBoundedSync(fd: number, maxBytes: number): Buffer;
25
25
  export {};
26
- //# sourceMappingURL=bounded-read.d.ts.map
@@ -1,4 +1,3 @@
1
1
  export declare function normalizeMaxBytes(value: number | undefined, options?: {
2
2
  defaultValue?: number;
3
3
  }): number | undefined;
4
- //# sourceMappingURL=byte-budget.d.ts.map
@@ -1,3 +1,2 @@
1
1
  /** Snapshot intrinsic view bounds without copying the borrowed payload. */
2
2
  export declare function snapshotByteView(bytes: Uint8Array): Uint8Array;
3
- //# sourceMappingURL=byte-view.d.ts.map
@@ -17,4 +17,3 @@ export type CloneFileMetadata = {
17
17
  * These are point-in-time facts, not authorization or a guarantee against later edits.
18
18
  */
19
19
  export declare function readCloneFileMetadata(files: readonly string[]): Promise<(CloneFileMetadata | undefined)[]>;
20
- //# sourceMappingURL=clone-metadata.d.ts.map
package/dist/config.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export { configureFsSafePython, configureFsSafeNative, getFsSafeNativeConfig, type FsSafePythonConfig, type FsSafeNativeConfig, type FsSafeNativeMode, } from "./native-config.js";
2
2
  export { configureFsSafeLocks, getFsSafeLockConfig, type FsSafeLockConfig, } from "./lock-config.js";
3
- //# sourceMappingURL=config.d.ts.map
@@ -1,2 +1 @@
1
1
  export type ContainmentGuarantee = "kernel-atomic" | "best-effort";
2
- //# sourceMappingURL=containment.d.ts.map
@@ -19,4 +19,3 @@ export declare function assertCopySourceCurrent(source: {
19
19
  export declare function writeCopyFileToFd(fd: number, input: CopyFileInput, maxBytes?: number, assertBeforeMutation?: () => void): Promise<void>;
20
20
  export declare function createNativeCopyFile(native: NativeBinding, input: CopyFileInput, parentFd: number, basename: string, maxBytes: number | undefined, sync: boolean): Promise<NativeFileCopyResult | undefined>;
21
21
  export declare function assertNativeCopyCompleted(input: CopyFileInput, copied?: NativeFileCopyResult): void;
22
- //# sourceMappingURL=copy-file-input.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export type CopyCloneMode = "auto" | "always" | "never";
2
2
  export declare function resolveCopyCloneMode(mode: CopyCloneMode | undefined, defaultMode: CopyCloneMode): CopyCloneMode;
3
- //# sourceMappingURL=copy-policy.d.ts.map
@@ -18,4 +18,3 @@ export type CopyPublicationOptions = {
18
18
  verify(): void;
19
19
  };
20
20
  };
21
- //# sourceMappingURL=copy-publication.d.ts.map
@@ -6,4 +6,3 @@ export declare function copyOwnedTree(source: ReturnType<typeof openStagedDirect
6
6
  concurrency: number;
7
7
  copyFileContents?: NativeBinding["copyFileContents"];
8
8
  }): Promise<void>;
9
- //# sourceMappingURL=copy-tree-portable.d.ts.map
@@ -11,7 +11,7 @@ function timestampSeconds(nanoseconds) {
11
11
  }
12
12
  /** Byte-copy adapter for the shared immutable-source, caller-owned namespace contract. */
13
13
  export async function copyOwnedTree(source, destination, options) {
14
- options.signal?.throwIfAborted();
14
+ const callerSignal = options.signal ? AbortSignal.any([options.signal]) : undefined;
15
15
  const cancellation = new AbortController();
16
16
  const signal = cancellation.signal;
17
17
  setMaxListeners(options.concurrency, signal);
@@ -23,8 +23,8 @@ export async function copyOwnedTree(source, destination, options) {
23
23
  failure ??= { value };
24
24
  cancellation.abort(failure);
25
25
  }
26
- const abort = () => recordFailure(options.signal?.reason);
27
- options.signal?.addEventListener("abort", abort, { once: true });
26
+ if (callerSignal)
27
+ callerSignal.onabort = () => recordFailure(callerSignal.reason);
28
28
  async function schedule(operation, children) {
29
29
  signal.throwIfAborted();
30
30
  const task = operation()
@@ -51,8 +51,8 @@ export async function copyOwnedTree(source, destination, options) {
51
51
  }
52
52
  output = await fsp.open(to, "wx", 0o600);
53
53
  if (options.copyFileContents) {
54
- // napi-rs owns onabort. Each admitted file gets a separate signal so
55
- // concurrent native copies cannot replace one another's cancellation.
54
+ // napi-rs owns onabort. Each admitted file gets a separate signal; the
55
+ // shared failure signal is private, so callers cannot intercept its relay.
56
56
  const fileCancellation = new AbortController();
57
57
  const abortFile = () => fileCancellation.abort();
58
58
  signal.addEventListener("abort", abortFile, { once: true });
@@ -62,6 +62,7 @@ export async function copyOwnedTree(source, destination, options) {
62
62
  }
63
63
  finally {
64
64
  signal.removeEventListener("abort", abortFile);
65
+ fileCancellation.signal.onabort = null;
65
66
  }
66
67
  }
67
68
  else {
@@ -224,6 +225,7 @@ export async function copyOwnedTree(source, destination, options) {
224
225
  signal.throwIfAborted();
225
226
  }
226
227
  try {
228
+ callerSignal?.throwIfAborted();
227
229
  await copyDirectory(source.receipt.realPath, destination);
228
230
  await Promise.all(finishing);
229
231
  signal.throwIfAborted();
@@ -233,7 +235,8 @@ export async function copyOwnedTree(source, destination, options) {
233
235
  }
234
236
  finally {
235
237
  await Promise.all(finishing);
236
- options.signal?.removeEventListener("abort", abort);
238
+ if (callerSignal)
239
+ callerSignal.onabort = null;
237
240
  }
238
241
  if (failure)
239
242
  throw failure.value;
package/dist/copy.d.ts CHANGED
@@ -13,4 +13,3 @@ export declare function probeTreeClone(parentPath: string): TreeCloneBackend | u
13
13
  export declare function createCloneSource(destination: string, options?: Pick<CopyTreeOptions, "signal">): Promise<void>;
14
14
  /** Copy an immutable, caller-owned tree, preferring native cloning unless configured otherwise. */
15
15
  export declare function copyTree(source: string, destination: string, options?: CopyTreeOptions): Promise<void>;
16
- //# sourceMappingURL=copy.d.ts.map
package/dist/copy.js CHANGED
@@ -94,12 +94,11 @@ async function materializeTree(source, destination, options, policy) {
94
94
  let cloned = false;
95
95
  // napi-rs uses the supplied signal's onabort property. Give it a private
96
96
  // signal so caller handlers and other admitted native operations stay intact.
97
- const cancellation = options.signal && supported ? new AbortController() : undefined;
98
- const abort = () => cancellation?.abort();
99
- options.signal?.addEventListener("abort", abort, { once: true });
97
+ const nativeSignal = options.signal && supported ? AbortSignal.any([options.signal]) : undefined;
100
98
  try {
101
99
  if (native && supported) {
102
- await native.cloneTree(original?.fd ?? null, parent.fd, name, concurrency, cancellation?.signal);
100
+ nativeSignal?.throwIfAborted();
101
+ await native.cloneTree(original?.fd ?? null, parent.fd, name, concurrency, nativeSignal);
103
102
  cloned = true;
104
103
  }
105
104
  }
@@ -113,7 +112,8 @@ async function materializeTree(source, destination, options, policy) {
113
112
  }
114
113
  }
115
114
  finally {
116
- options.signal?.removeEventListener("abort", abort);
115
+ if (nativeSignal)
116
+ nativeSignal.onabort = null;
117
117
  }
118
118
  options.signal?.throwIfAborted();
119
119
  assertStagedDirectoryCurrent(parent.receipt);
@@ -15,6 +15,4 @@ export declare function createDirectory(targetPath: string, options?: CreateDire
15
15
  export declare function createDirectoryWithAdmission(targetPath: string, options?: CreateDirectoryOptions, admission?: CreationAdmission): Promise<void>;
16
16
  export declare function createDirectoryWithReceipt(targetPath: string, options?: CreateDirectoryOptions, admission?: CreationAdmission): Promise<CreationDirectoryReceipt>;
17
17
  export declare function createDirectorySync(targetPath: string, options?: CreateDirectoryOptions): void;
18
- export declare function createDirectorySyncWithAdmission(targetPath: string, options?: CreateDirectoryOptions, admission?: CreationAdmission): void;
19
18
  export declare function createDirectoryWithReceiptSync(targetPath: string, options?: CreateDirectoryOptions, admission?: CreationAdmission): CreationDirectoryReceipt;
20
- //# sourceMappingURL=create-directory.d.ts.map
@@ -3,13 +3,11 @@ import fs from "node:fs/promises";
3
3
  import { FsSafeError } from "./errors.js";
4
4
  import { getNativeBinding } from "./native.js";
5
5
  import { getFsSafeNativeConfig } from "./native-config.js";
6
- import { assertSynchronousCallbackResult } from "./mutation-authority.js";
7
6
  import { assertPrivateDirectory, assertPrivateDirectorySync, inspectCreationDirectory, inspectCreationDirectorySync, resolveCreationPermissions, } from "./creation-permissions.js";
8
- import { creationCollision, prepareCreationPath } from "./creation-path.js";
7
+ import { assertBeforeCreation, creationCollision, prepareCreationPath } from "./creation-path.js";
9
8
  import { createPrivateWindowsDirectoryCommand, createPrivateWindowsDirectoryCommandSync, } from "./windows-security-command.js";
10
9
  import { warnNativeFallback } from "./native-fallback-warning.js";
11
10
  import { inspectDirectoryIdentitySync } from "./directory-guard.js";
12
- import { assertDarwinCreationDirectoryAcl, assertDarwinPrivateDirectoryMode } from "./creation-darwin.js";
13
11
  function directoryAdoptionFailure(error, target, windowsIdentity) {
14
12
  return new FsSafeError("helper-failed", "created directory admission failed", {
15
13
  cause: error,
@@ -43,14 +41,7 @@ export async function createDirectoryWithReceipt(targetPath, options = {}, admis
43
41
  const backend = permissions.private && process.platform === "win32" ? privateDirectoryBackend() : undefined;
44
42
  const parentIdentity = permissions.private && process.platform === "win32"
45
43
  ? await inspectCreationDirectory(selected.parent.dir, false) : undefined;
46
- if (permissions.private)
47
- assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, "directory");
48
- assertSynchronousCallbackResult(assertion?.(), "assertBeforeMutation");
49
- selected.assertParent();
50
- if (permissions.private)
51
- assertDarwinPrivateDirectoryMode(permissions.mode);
52
- if (permissions.private)
53
- assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, "directory");
44
+ assertBeforeCreation(selected, permissions, assertion, "directory");
54
45
  let created = false;
55
46
  let windowsIdentity;
56
47
  try {
@@ -82,9 +73,6 @@ export async function createDirectoryWithReceipt(targetPath, options = {}, admis
82
73
  export function createDirectorySync(targetPath, options = {}) {
83
74
  createDirectoryWithReceiptSync(targetPath, options, {});
84
75
  }
85
- export function createDirectorySyncWithAdmission(targetPath, options = {}, admission = {}) {
86
- createDirectoryWithReceiptSync(targetPath, options, admission);
87
- }
88
76
  export function createDirectoryWithReceiptSync(targetPath, options = {}, admission = {}) {
89
77
  const permissions = resolveCreationPermissions(options, true);
90
78
  const assertion = options.assertBeforeMutation;
@@ -92,14 +80,7 @@ export function createDirectoryWithReceiptSync(targetPath, options = {}, admissi
92
80
  const backend = permissions.private && process.platform === "win32" ? privateDirectoryBackend() : undefined;
93
81
  const parentIdentity = permissions.private && process.platform === "win32"
94
82
  ? inspectCreationDirectorySync(selected.parent.dir, false) : undefined;
95
- if (permissions.private)
96
- assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, "directory");
97
- assertSynchronousCallbackResult(assertion?.(), "assertBeforeMutation");
98
- selected.assertParent();
99
- if (permissions.private)
100
- assertDarwinPrivateDirectoryMode(permissions.mode);
101
- if (permissions.private)
102
- assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, "directory");
83
+ assertBeforeCreation(selected, permissions, assertion, "directory");
103
84
  let created = false;
104
85
  let windowsIdentity;
105
86
  try {
@@ -4,4 +4,3 @@ export declare function createPrivateWindowsFileHandle(selected: CreationPath, o
4
4
  mode: number;
5
5
  assertBeforeMutation?: () => void;
6
6
  }): Promise<FileHandle>;
7
- //# sourceMappingURL=create-file-async.d.ts.map
@@ -5,4 +5,3 @@ export type CreateFileOptions = CreateDirectoryOptions;
5
5
  export declare function createFileSync(targetPath: string, options?: CreateFileOptions): OwnedFileDescriptorSync;
6
6
  /** Internal async writer; Windows preparation uses the nonblocking stage owner. */
7
7
  export declare function createFileHandle(targetPath: string, options?: CreateFileOptions, admission?: CreationAdmission): Promise<FileHandle>;
8
- //# sourceMappingURL=create-file.d.ts.map
@@ -8,12 +8,11 @@ import { assertDirectoryIdentitySync } from "./directory-guard.js";
8
8
  import { FsSafeError } from "./errors.js";
9
9
  import { assertSynchronousCallbackResult } from "./mutation-authority.js";
10
10
  import { assertPrivateFileCreationAvailable, inspectCreationDirectorySync, protectCreatedFileSync, resolveCreationPermissions, verifyCreatedFileSync, } from "./creation-permissions.js";
11
- import { creationCollision, prepareCreationPath, removeCreationDirectory } from "./creation-path.js";
11
+ import { assertBeforeCreation, creationCollision, prepareCreationPath, removeCreationDirectory } from "./creation-path.js";
12
12
  import { handoffCreatedFileSync } from "./private-producer-handoff-sync.js";
13
13
  import { resolveReadOpenFlags } from "./read-open-flags.js";
14
14
  import { assertCreationFile, assertPrivateCreationFile, creationPublicationAfterFailure, privateFileSettlementFailure, rethrowPrivateStageCreationFailure, removeRecordedCreationFileSync, } from "./creation-file-state.js";
15
15
  import { createPrivateWindowsFileHandle } from "./create-file-async.js";
16
- import { assertDarwinCreationDirectoryAcl } from "./creation-darwin.js";
17
16
  function createPrivateWindowsFile(selected, options, mode) {
18
17
  const assertion = options.assertBeforeMutation;
19
18
  if (fs.lstatSync(selected.target, { throwIfNoEntry: false })) {
@@ -113,12 +112,7 @@ function createFileCore(targetPath, options, admission) {
113
112
  assertPrivateFileCreationAvailable();
114
113
  return createPrivateWindowsFile(selected, { ...permissions, assertBeforeMutation: assertion }, permissions.mode);
115
114
  }
116
- if (permissions.private)
117
- assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, "file");
118
- assertSynchronousCallbackResult(assertion?.(), "assertBeforeMutation");
119
- selected.assertParent();
120
- if (permissions.private)
121
- assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, "file");
115
+ assertBeforeCreation(selected, permissions, assertion, "file");
122
116
  let file;
123
117
  try {
124
118
  file = ownFileDescriptorSync(fs.openSync(selected.target, fs.constants.O_RDWR | fs.constants.O_CREAT |
@@ -156,12 +150,7 @@ export async function createFileHandle(targetPath, options = {}, admission = {})
156
150
  const assertion = options.assertBeforeMutation;
157
151
  if (process.platform !== "win32" || !permissions.private) {
158
152
  const selected = prepareCreationPath(targetPath, admission.expectedParentIdentity);
159
- if (permissions.private)
160
- assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, "file");
161
- assertSynchronousCallbackResult(assertion?.(), "assertBeforeMutation");
162
- selected.assertParent();
163
- if (permissions.private)
164
- assertDarwinCreationDirectoryAcl(selected.parent.dir, selected.parent.stat, "file");
153
+ assertBeforeCreation(selected, permissions, assertion, "file");
165
154
  const handle = await fsAsync.open(selected.target, fs.constants.O_RDWR | fs.constants.O_CREAT |
166
155
  fs.constants.O_EXCL | resolveReadOpenFlags(), permissions.mode ?? 0o666)
167
156
  .catch(error => { throw creationCollision(error); });
@@ -5,4 +5,3 @@ export type OwnedFileDescriptorSync = {
5
5
  };
6
6
  /** Capture the descriptor's creator-owned closer before it can be reused. */
7
7
  export declare function ownFileDescriptorSync(fd: number, closeFd?: (fd: number) => void): OwnedFileDescriptorSync;
8
- //# sourceMappingURL=create-owned-file.d.ts.map
package/dist/create.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- export { createDirectory, createDirectorySync, createDirectoryWithAdmission, createDirectorySyncWithAdmission, type CreateDirectoryOptions, type CreationAdmission, } from "./create-directory.js";
1
+ export { createDirectory, createDirectorySync, createDirectoryWithAdmission, type CreateDirectoryOptions, type CreationAdmission, } from "./create-directory.js";
2
2
  export { createFileSync, createFileHandle, type CreateFileOptions } from "./create-file.js";
3
3
  export type { OwnedFileDescriptorSync } from "./create-owned-file.js";
4
- //# sourceMappingURL=create.d.ts.map
package/dist/create.js CHANGED
@@ -1,2 +1,2 @@
1
- export { createDirectory, createDirectorySync, createDirectoryWithAdmission, createDirectorySyncWithAdmission, } from "./create-directory.js";
1
+ export { createDirectory, createDirectorySync, createDirectoryWithAdmission, } from "./create-directory.js";
2
2
  export { createFileSync, createFileHandle } from "./create-file.js";
@@ -3,4 +3,3 @@ export declare function assertDarwinPrivateCreationAvailable(): void;
3
3
  export declare function assertDarwinPrivateDirectoryMode(mode: number): void;
4
4
  export declare function assertDarwinCreationAcl(fd: number, inheritanceTarget?: "file" | "directory"): void;
5
5
  export declare function assertDarwinCreationDirectoryAcl(pathname: string, expected: BigIntStats, inheritanceTarget?: "file" | "directory"): void;
6
- //# sourceMappingURL=creation-darwin.d.ts.map
@@ -16,4 +16,3 @@ export declare function privateFileSettlementFailure(params: {
16
16
  stageDirectory: string;
17
17
  preserved?: boolean;
18
18
  }): FsSafeError;
19
- //# sourceMappingURL=creation-file-state.d.ts.map
@@ -1,5 +1,6 @@
1
1
  import { type BigIntStats } from "node:fs";
2
2
  import { type AsyncDirectoryGuard, type AnyAsyncDirectoryGuard } from "./directory-guard.js";
3
+ import type { CreationPermissions } from "./creation-permissions.js";
3
4
  export type CreationParentIdentity = Readonly<{
4
5
  dev: bigint;
5
6
  ino: bigint;
@@ -10,6 +11,7 @@ export type CreationPath = {
10
11
  parent: AsyncDirectoryGuard<BigIntStats>;
11
12
  assertParent(): void;
12
13
  };
14
+ export declare function assertBeforeCreation(selected: CreationPath, permissions: CreationPermissions, assertion: (() => void) | undefined, kind: "file" | "directory"): void;
13
15
  export declare function creationAdmissionFromParent(parent: AnyAsyncDirectoryGuard): {
14
16
  expectedParentIdentity: CreationParentIdentity;
15
17
  };
@@ -18,4 +20,3 @@ export declare function creationCollision(error: unknown): unknown;
18
20
  /** Remove only the recorded empty stage; never traverse a replaced directory. */
19
21
  export declare function removeCreationDirectory(directory: string, identity: BigIntStats, assertParent: () => void): void;
20
22
  export declare function removeCreationDirectoryAsync(directory: string, identity: BigIntStats, assertParent: () => void): Promise<void>;
21
- //# sourceMappingURL=creation-path.d.ts.map