@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
@@ -1,10 +1,7 @@
1
- import { type BigIntStats, type Stats } from "node:fs";
2
- import type { ContainmentGuarantee } from "./containment.js";
1
+ import { type BigIntStats } from "node:fs";
3
2
  export type NativeFileHandle = {
4
3
  readonly fd: number;
5
- readonly containment: ContainmentGuarantee;
6
4
  close(): Promise<void>;
7
- stat(): Promise<Stats>;
8
5
  writeFile(data: string | Buffer, encoding?: BufferEncoding): Promise<void>;
9
6
  };
10
7
  export declare function nativeOpenFlags(flags: number): number;
@@ -16,4 +13,3 @@ export declare function removeNativeCreatedFileIfStillPinned(params: {
16
13
  created?: BigIntStats;
17
14
  }): void;
18
15
  export declare function createNativeExclusiveFile(targetPath: string, mode: number): Promise<NativeFileHandle | undefined>;
19
- //# sourceMappingURL=native-operations.d.ts.map
@@ -21,20 +21,16 @@ export function writeNativeFd(fd, data) {
21
21
  offset += written;
22
22
  }
23
23
  }
24
- function wrapNativeFd(fd, containment, closeFd) {
24
+ function wrapNativeFd(fd, closeFd) {
25
25
  let open = true;
26
26
  return {
27
27
  fd,
28
- containment,
29
28
  async close() {
30
29
  if (open) {
31
30
  open = false;
32
31
  closeFd(fd);
33
32
  }
34
33
  },
35
- async stat() {
36
- return fsSync.fstatSync(fd);
37
- },
38
34
  async writeFile(data, encoding) {
39
35
  writeNativeFd(fd, Buffer.isBuffer(data) ? data : Buffer.from(data, encoding ?? "utf8"));
40
36
  },
@@ -91,7 +87,7 @@ export async function createNativeExclusiveFile(targetPath, mode) {
91
87
  fd = opened.fd;
92
88
  fsSync.fchmodSync(fd, mode);
93
89
  created = fsSync.fstatSync(fd, { bigint: true });
94
- return wrapNativeFd(fd, opened.containment, closeFd);
90
+ return wrapNativeFd(fd, closeFd);
95
91
  }
96
92
  catch (error) {
97
93
  if (fd !== undefined) {
@@ -32,4 +32,3 @@ export declare function openNativeParentAdmission(binding: NativeBinding, rootAd
32
32
  root: Pick<FileHandle, "fd">;
33
33
  }, relativeParentPath: string, observation?: "native-directory"): Promise<NativeParentAdmission>;
34
34
  export {};
35
- //# sourceMappingURL=native-parent-admission.d.ts.map
@@ -4,4 +4,3 @@ import type { FileIdentityStat } from "./file-identity.js";
4
4
  import type { NativeBinding } from "./native.js";
5
5
  import type { PinnedWriteParams } from "./pinned-write.js";
6
6
  export declare function runPinnedWriteWindows(binding: NativeBinding, params: PinnedWriteParams, root: FileHandle, parentFd: number, parentGuard: AnyAsyncDirectoryGuard): Promise<FileIdentityStat>;
7
- //# sourceMappingURL=native-pinned-write-windows.d.ts.map
@@ -2,4 +2,3 @@ import type { FileIdentityStat } from "./file-identity.js";
2
2
  import type { NativeBinding } from "./native.js";
3
3
  import type { PinnedWriteParams } from "./pinned-write.js";
4
4
  export declare function runPinnedWriteNative(binding: NativeBinding, params: PinnedWriteParams): Promise<FileIdentityStat>;
5
- //# sourceMappingURL=native-pinned-write.d.ts.map
@@ -66,12 +66,6 @@ import { realpathSync } from "./realpath.js";
66
66
  import { isNotFoundPathError, isSymlinkOpenError } from "./path.js";
67
67
  import { checkedMutationDirectory, } from "./pinned-mutation-observation.js";
68
68
  import { createPathSegmentRoute, joinPathSegmentRoute } from "./path-segment-route.js";
69
- function relativeParentSegments(relativeParentPath) {
70
- return relativeParentPath.split("/").filter(Boolean);
71
- }
72
- function prospectiveTargetPath(parentPath, parentRoute, offset, basename) {
73
- return joinPathSegmentRoute(parentPath, parentRoute, offset, basename);
74
- }
75
69
  function sameAbsolutePath(left, right) {
76
70
  return path.relative(path.resolve(left), path.resolve(right)) === "";
77
71
  }
@@ -172,12 +166,12 @@ async function capturePolicyAwarePosixParent(binding, params, rootFd, directoryF
172
166
  observationDisposers.set(fd, dispose);
173
167
  return captured;
174
168
  };
175
- const segments = relativeParentSegments(params.relativeParentPath);
169
+ const segments = params.relativeParentPath.split("/").filter(Boolean);
176
170
  const parentSpelling = segments.length
177
171
  ? path.join(params.rootPath, ...segments)
178
172
  : params.rootPath;
179
173
  const segmentRoute = createPathSegmentRoute(segments);
180
- const initialTarget = prospectiveTargetPath(params.rootPath, segmentRoute, 0, params.basename);
174
+ const initialTarget = joinPathSegmentRoute(params.rootPath, segmentRoute, 0, params.basename);
181
175
  let retainedTargetPath = params.mutationAdmission?.beginParentWalk?.();
182
176
  if (retainedTargetPath && !sameAbsolutePath(retainedTargetPath, initialTarget)) {
183
177
  retainedTargetPath = undefined;
@@ -255,7 +249,7 @@ async function capturePolicyAwarePosixParent(binding, params, rootFd, directoryF
255
249
  if (!isNotFoundPathError(openError)) {
256
250
  throw normalizePolicyParentOpenError(openError, params);
257
251
  }
258
- const targetPath = retainedTargetPath ?? prospectiveTargetPath(currentPath, segmentRoute, index, params.basename);
252
+ const targetPath = retainedTargetPath ?? joinPathSegmentRoute(currentPath, segmentRoute, index, params.basename);
259
253
  const request = Object.freeze({
260
254
  targetPath,
261
255
  mutationPath: childPath,
@@ -311,7 +305,7 @@ async function capturePolicyAwarePosixParent(binding, params, rootFd, directoryF
311
305
  childAuthorization = params.mutationAdmission.advanceCreatedDirectory(evidence);
312
306
  }
313
307
  }
314
- const targetPath = retainedTargetPath ?? prospectiveTargetPath(child.parentPath, segmentRoute, index + 1, params.basename);
308
+ const targetPath = retainedTargetPath ?? joinPathSegmentRoute(child.parentPath, segmentRoute, index + 1, params.basename);
315
309
  const request = Object.freeze({
316
310
  targetPath,
317
311
  mutationPath: targetPath,
@@ -9,4 +9,3 @@ export type NativePolicyDirectoryObserver = MutationDirectoryObserver & {
9
9
  };
10
10
  /** Fresh name/metadata/canonical facts from a caller-owned POSIX descriptor. */
11
11
  export declare function nativePolicyDirectoryObserver(binding: NativeBinding | undefined, fd: number, pathname: string): NativePolicyDirectoryObserver | undefined;
12
- //# sourceMappingURL=native-policy-directory-observation.d.ts.map
@@ -11,4 +11,3 @@ type PolicyParent = {
11
11
  };
12
12
  export declare function capturePolicyAwareWindowsParent(binding: NativeBinding, params: PinnedWriteParams, rootAdmission: NativeRootAdmission): Promise<PolicyParent>;
13
13
  export {};
14
- //# sourceMappingURL=native-policy-parent-windows.d.ts.map
@@ -1,4 +1,3 @@
1
1
  export declare const NATIVE_RENAME_SOURCE_IDENTITY_MISMATCH = "FS_SAFE_INTERNAL_RENAME_SOURCE_IDENTITY_MISMATCH";
2
2
  export type NativeRenameFailureOutcome = "uncommitted" | "indeterminate";
3
3
  export declare function classifyNativeRenameFailure(error: unknown): NativeRenameFailureOutcome;
4
- //# sourceMappingURL=native-rename-outcome.d.ts.map
@@ -8,10 +8,23 @@ import type { PublishedFileReceipt, StagedFile, StagedFileCleanupReceipt, Staged
8
8
  export type NativeStagingBinding = NativeBinding & Required<Pick<NativeBinding, "createStagedFile" | "stagedFileMatches" | "removeStagedFile">>;
9
9
  export declare function assertNativeStaging(binding: NativeBinding): asserts binding is NativeStagingBinding;
10
10
  type StagedPermissionPolicy = "private-creation" | "mode-only";
11
+ type NativeStageOwner = Readonly<{
12
+ binding: NativeStagingBinding;
13
+ parentFd: number;
14
+ closeParentFd: (fd: number) => void;
15
+ directory: StagedFileReceipt["directory"];
16
+ portableNames?: boolean;
17
+ mode: number;
18
+ sync?: boolean;
19
+ strictFileSync?: boolean;
20
+ assertBeforeMutation?: () => void;
21
+ permissionPolicy?: StagedPermissionPolicy;
22
+ name?: string;
23
+ }>;
11
24
  declare class NativeStagedFile implements StagedFile {
12
25
  #private;
13
- constructor(binding: NativeStagingBinding, parentFd: number, closeParentFd: (fd: number) => void, directory: StagedFileReceipt["directory"], portableNames: boolean, publishedMode: number, sync: boolean, assertBeforeMutation?: () => void, name?: string, strictFileSync?: boolean, permissionPolicy?: StagedPermissionPolicy);
14
- static create(binding: NativeStagingBinding, parentFd: number, closeParentFd: (fd: number) => void, directory: StagedFileReceipt["directory"], input: PinnedWriteInput, mode: number, maxBytes?: number, portableNames?: boolean, sync?: boolean, assertBeforeMutation?: () => void, exclusiveBasename?: string, strictFileSync?: boolean, permissionPolicy?: StagedPermissionPolicy): Promise<NativeStagedFile>;
26
+ constructor(owner: NativeStageOwner);
27
+ static create(owner: NativeStageOwner, input: PinnedWriteInput, maxBytes?: number): Promise<NativeStagedFile>;
15
28
  static write(binding: NativeStagingBinding, parentFd: number, closeParentFd: (fd: number) => void, directory: StagedFileReceipt["directory"], params: PinnedWriteParams, parentGuard: AnyAsyncDirectoryGuard): Promise<FileIdentityStat>;
16
29
  get receipt(): StagedFileReceipt;
17
30
  assertCurrent(): Promise<void>;
@@ -30,4 +43,3 @@ export declare function stageFileInDirectory(options: {
30
43
  /** Published mode; the unpublished stage stays at 0600. Defaults to 0600. */
31
44
  mode?: number;
32
45
  }): Promise<StagedFile>;
33
- //# sourceMappingURL=native-staged-file.d.ts.map
@@ -86,50 +86,33 @@ function assertBasename(name, portable) {
86
86
  }
87
87
  const NOT_PUBLISHED = Object.freeze({ status: "not-published" });
88
88
  class NativeStagedFile {
89
- #binding;
89
+ #owner;
90
90
  #closeFd;
91
- #parentFd;
92
- #closeParentFd;
93
- #directory;
94
- #portableNames;
95
- #publishedMode;
96
- #sync;
97
- #strictFileSync;
91
+ #assertBeforeMutation;
98
92
  #private;
99
93
  #verifyMode;
100
- #assertBeforeMutation;
101
- #name;
102
94
  #state = { status: "open", publication: NOT_PUBLISHED };
103
95
  #receipt;
104
96
  #rejectFinalSymlink = false;
105
- constructor(binding, parentFd, closeParentFd, directory, portableNames, publishedMode, sync, assertBeforeMutation, name = `.fs-safe-${randomUUID()}.tmp`, strictFileSync = false, permissionPolicy) {
106
- assertBasename(name, portableNames);
107
- this.#name = name;
108
- this.#closeFd = captureNativeFdClose(binding);
109
- this.#binding = binding;
110
- this.#parentFd = parentFd;
111
- this.#closeParentFd = closeParentFd;
112
- this.#directory = directory;
113
- this.#portableNames = portableNames;
114
- this.#publishedMode = publishedMode;
115
- this.#sync = sync;
116
- this.#strictFileSync = strictFileSync;
117
- this.#private = permissionPolicy === "private-creation";
118
- this.#verifyMode = permissionPolicy !== undefined;
119
- this.#assertBeforeMutation = assertBeforeMutation;
97
+ constructor(owner) {
98
+ const name = owner.name ?? `.fs-safe-${randomUUID()}.tmp`;
99
+ assertBasename(name, owner.portableNames !== false);
100
+ this.#closeFd = captureNativeFdClose(owner.binding);
101
+ this.#owner = { ...owner, name };
102
+ this.#assertBeforeMutation = owner.assertBeforeMutation;
103
+ this.#private = owner.permissionPolicy === "private-creation";
104
+ this.#verifyMode = owner.permissionPolicy !== undefined;
120
105
  }
121
106
  // Public staging supplies a Node parent; pinned writes supply a native parent.
122
107
  // The supplied closer owns parentFd even on construction or preparation failure.
123
- static async create(binding, parentFd, closeParentFd, directory, input, mode, maxBytes,
124
- // Public staging uses portable names; existing POSIX writes accept literal names.
125
- portableNames = true, sync = true, assertBeforeMutation, exclusiveBasename, strictFileSync = false, permissionPolicy) {
108
+ static async create(owner, input, maxBytes) {
126
109
  let staged;
127
110
  try {
128
- staged = new NativeStagedFile(binding, parentFd, closeParentFd, directory, portableNames, mode, sync, assertBeforeMutation, exclusiveBasename, strictFileSync, permissionPolicy);
111
+ staged = new NativeStagedFile(owner);
129
112
  }
130
113
  catch (error) {
131
114
  try {
132
- closeParentFd(parentFd);
115
+ owner.closeParentFd(owner.parentFd);
133
116
  }
134
117
  catch (closeError) {
135
118
  throw new AggregateError([error, closeError], "staged owner construction and close failed");
@@ -145,7 +128,13 @@ class NativeStagedFile {
145
128
  const exclusive = params.overwrite === false && params.input.kind === "buffer" && params.input.stageBeforePublish === false;
146
129
  // This owner never escapes. Only the internal verifier borrows its fd;
147
130
  // public descriptor methods remain await-free and cannot race disposal.
148
- const staged = __addDisposableResource(env_1, await NativeStagedFile.create(binding, parentFd, closeParentFd, directory, params.input, params.mode, params.maxBytes, false, params.sync, params.assertBeforeMutation, exclusive ? params.basename : undefined, params.strictFileSync, params.private ? "private-creation" : params.verifyPosixMode === true ? "mode-only" : undefined), true);
131
+ const staged = __addDisposableResource(env_1, await NativeStagedFile.create({
132
+ binding, parentFd, closeParentFd, directory, mode: params.mode, sync: params.sync,
133
+ // Public staging uses portable names; existing POSIX writes accept literal names.
134
+ portableNames: false, assertBeforeMutation: params.assertBeforeMutation,
135
+ name: exclusive ? params.basename : undefined, strictFileSync: params.strictFileSync,
136
+ permissionPolicy: params.private ? "private-creation" : params.verifyPosixMode === true ? "mode-only" : undefined,
137
+ }, params.input, params.maxBytes), true);
149
138
  staged.#rejectFinalSymlink = params.rejectFinalSymlink === true;
150
139
  if (params.input.kind === "file")
151
140
  await params.input.verifySource();
@@ -201,7 +190,7 @@ class NativeStagedFile {
201
190
  }
202
191
  #assertNamed(name, expectedMode) {
203
192
  const fd = this.#file();
204
- const stat = this.#binding.stagedFileMatches(this.#parentFd, name, fd)
193
+ const stat = this.#owner.binding.stagedFileMatches(this.#owner.parentFd, name, fd)
205
194
  ? fs.fstatSync(fd, { bigint: true }) : undefined;
206
195
  if (!stat || stat.nlink !== 1n) {
207
196
  throw new FsSafeError("path-mismatch", "staged entry no longer names the exclusive created file");
@@ -213,8 +202,8 @@ class NativeStagedFile {
213
202
  if (this.#open().publication.status !== "not-published") {
214
203
  throw new FsSafeError("helper-failed", "staged file publication has already been attempted");
215
204
  }
216
- assertStagedDirectoryCurrent(this.#directory);
217
- this.#assertNamed(this.#name, 0o600);
205
+ assertStagedDirectoryCurrent(this.#owner.directory);
206
+ this.#assertNamed(this.#owner.name, 0o600);
218
207
  }
219
208
  #assertPermissions(fd, stat, expectedMode) {
220
209
  if (this.#private)
@@ -228,7 +217,7 @@ class NativeStagedFile {
228
217
  }
229
218
  async #prepare(input, maxBytes) {
230
219
  try {
231
- const mode = this.#publishedMode;
220
+ const mode = this.#owner.mode;
232
221
  if (!Number.isInteger(mode) || mode < 0 || mode > 0o7777) {
233
222
  throw new FsSafeError("invalid-path", "invalid staged file mode");
234
223
  }
@@ -239,25 +228,25 @@ class NativeStagedFile {
239
228
  throw new FsSafeError("helper-unavailable", "required cloning cannot verify staged permissions before copying");
240
229
  }
241
230
  }
242
- assertStagedDirectoryCurrent(this.#directory);
231
+ assertStagedDirectoryCurrent(this.#owner.directory);
243
232
  // The exclusive open performs no fallible post-open checks. Store its fd
244
233
  // before every subsequent operation, including the first metadata read.
245
234
  const state = this.#open();
246
235
  if (this.#private)
247
- assertDarwinCreationAcl(this.#parentFd, "file");
236
+ assertDarwinCreationAcl(this.#owner.parentFd, "file");
248
237
  this.#assertBeforeMutation?.();
249
238
  if (this.#private)
250
- assertDarwinCreationAcl(this.#parentFd, "file");
239
+ assertDarwinCreationAcl(this.#owner.parentFd, "file");
251
240
  // Native copying populates its new file before returning its descriptor.
252
241
  const copied = input.kind === "file" && !this.#verifyMode
253
- ? await createNativeCopyFile(this.#binding, input, this.#parentFd, this.#name, maxBytes, false)
242
+ ? await createNativeCopyFile(this.#owner.binding, input, this.#owner.parentFd, this.#owner.name, maxBytes, false)
254
243
  : undefined;
255
244
  state.fileFd = copied?.fd;
256
245
  if (state.fileFd === undefined) {
257
246
  this.#assertBeforeMutation?.();
258
247
  if (this.#private)
259
- assertDarwinCreationAcl(this.#parentFd, "file");
260
- state.fileFd = this.#binding.createStagedFile(this.#parentFd, this.#name);
248
+ assertDarwinCreationAcl(this.#owner.parentFd, "file");
249
+ state.fileFd = this.#owner.binding.createStagedFile(this.#owner.parentFd, this.#owner.name);
261
250
  }
262
251
  const fd = state.fileFd;
263
252
  if (input.kind === "file")
@@ -281,14 +270,14 @@ class NativeStagedFile {
281
270
  await writePinnedInput(fd, input, maxBytes, assertBeforeMutation);
282
271
  if (this.#verifyMode)
283
272
  this.#assertStagePermissions(fd);
284
- if (this.#sync) {
285
- if (this.#strictFileSync)
273
+ if (this.#owner.sync !== false) {
274
+ if (this.#owner.strictFileSync)
286
275
  fs.fsyncSync(fd);
287
276
  else
288
277
  syncFileBestEffortSync(fd);
289
278
  }
290
279
  const stat = fs.fstatSync(fd, { bigint: true });
291
- this.#receipt = createStagedFileReceipt(this.#directory, this.#name, stat);
280
+ this.#receipt = createStagedFileReceipt(this.#owner.directory, this.#owner.name, stat);
292
281
  this.#assertCurrent();
293
282
  }
294
283
  catch (error) {
@@ -311,23 +300,23 @@ class NativeStagedFile {
311
300
  const overwrite = options?.overwrite;
312
301
  try {
313
302
  const state = this.#open();
314
- assertBasename(basename, this.#portableNames);
315
- if (basename === this.#name || typeof overwrite !== "boolean") {
303
+ assertBasename(basename, this.#owner.portableNames !== false);
304
+ if (basename === this.#owner.name || typeof overwrite !== "boolean") {
316
305
  throw new FsSafeError("invalid-path", "publication needs a distinct basename and explicit overwrite policy");
317
306
  }
318
307
  this.#assertCurrent();
319
- assertFinalSymlinkRejected(path.join(this.#directory.realPath, basename), this.#rejectFinalSymlink);
308
+ assertFinalSymlinkRejected(path.join(this.#owner.directory.realPath, basename), this.#rejectFinalSymlink);
320
309
  this.#assertBeforeMutation?.();
321
310
  if (this.#assertBeforeMutation) {
322
311
  this.#assertCurrent();
323
- assertFinalSymlinkRejected(path.join(this.#directory.realPath, basename), this.#rejectFinalSymlink);
312
+ assertFinalSymlinkRejected(path.join(this.#owner.directory.realPath, basename), this.#rejectFinalSymlink);
324
313
  }
325
314
  try {
326
315
  if (overwrite) {
327
- this.#binding.renameReplace(this.#parentFd, this.#name, this.#parentFd, basename);
316
+ this.#owner.binding.renameReplace(this.#owner.parentFd, this.#owner.name, this.#owner.parentFd, basename);
328
317
  }
329
318
  else {
330
- this.#binding.renameNoReplace(this.#parentFd, this.#name, this.#parentFd, basename);
319
+ this.#owner.binding.renameNoReplace(this.#owner.parentFd, this.#owner.name, this.#owner.parentFd, basename);
331
320
  }
332
321
  }
333
322
  catch (error) {
@@ -355,24 +344,24 @@ class NativeStagedFile {
355
344
  this.#open().publication = receipt;
356
345
  onPublished?.(receipt.staged.identity);
357
346
  const stagedMode = this.#assertNamed(basename, 0o600);
358
- assertStagedDirectoryCurrent(this.#directory);
347
+ assertStagedDirectoryCurrent(this.#owner.directory);
359
348
  // Keep contents private until the name passes its identity fence. Mode
360
349
  // changes use the owned fd, including for final mode 000.
361
350
  const fd = this.#file();
362
- if (this.#publishedMode !== 0o600 || stagedMode !== 0o600)
363
- fs.fchmodSync(fd, this.#publishedMode);
351
+ if (this.#owner.mode !== 0o600 || stagedMode !== 0o600)
352
+ fs.fchmodSync(fd, this.#owner.mode);
364
353
  // Content was synced during preparation. A lost chmod leaves 0600, no wider
365
354
  // than modes retaining owner rw; restrictive modes still need a durable correction.
366
- if (this.#sync && ((this.#publishedMode & 0o600) !== 0o600 || (stagedMode & ~this.#publishedMode) !== 0)) {
367
- if (this.#strictFileSync)
355
+ if (this.#owner.sync !== false && ((this.#owner.mode & 0o600) !== 0o600 || (stagedMode & ~this.#owner.mode) !== 0)) {
356
+ if (this.#owner.strictFileSync)
368
357
  fs.fsyncSync(fd);
369
358
  else
370
359
  syncFileBestEffortSync(fd);
371
360
  }
372
- if (this.#sync)
373
- syncFileBestEffortSync(this.#parentFd);
374
- this.#assertNamed(basename, this.#publishedMode);
375
- assertStagedDirectoryCurrent(this.#directory);
361
+ if (this.#owner.sync !== false)
362
+ syncFileBestEffortSync(this.#owner.parentFd);
363
+ this.#assertNamed(basename, this.#owner.mode);
364
+ assertStagedDirectoryCurrent(this.#owner.directory);
376
365
  return receipt;
377
366
  }
378
367
  #finalize() {
@@ -387,7 +376,7 @@ class NativeStagedFile {
387
376
  }
388
377
  else if (state.publication.status === "not-published" && state.fileFd !== undefined) {
389
378
  try {
390
- outcome = this.#binding.removeStagedFile(this.#parentFd, this.#name, state.fileFd);
379
+ outcome = this.#owner.binding.removeStagedFile(this.#owner.parentFd, this.#owner.name, state.fileFd);
391
380
  }
392
381
  catch (error) {
393
382
  outcome = "failed";
@@ -397,7 +386,7 @@ class NativeStagedFile {
397
386
  let resources = "closed";
398
387
  for (const [fd, closeFd] of [
399
388
  [state.fileFd, this.#closeFd],
400
- [this.#parentFd, this.#closeParentFd],
389
+ [this.#owner.parentFd, this.#owner.closeParentFd],
401
390
  ]) {
402
391
  if (fd === undefined) {
403
392
  continue;
@@ -411,7 +400,7 @@ class NativeStagedFile {
411
400
  }
412
401
  }
413
402
  const receipt = Object.freeze({
414
- temporaryBasename: this.#name,
403
+ temporaryBasename: this.#owner.name,
415
404
  publication: state.publication,
416
405
  status: outcome,
417
406
  resources,
@@ -447,5 +436,8 @@ export async function stageFileInDirectory(options) {
447
436
  const input = { kind: "buffer", data: Buffer.from(options.content) };
448
437
  const mode = options.mode ?? 0o600;
449
438
  const parent = openStagedDirectory(options.directory);
450
- return await createNativeStage(binding, parent.fd, fs.closeSync, parent.receipt, input, mode, undefined, true, true, undefined, undefined, false, "mode-only");
439
+ return await createNativeStage({
440
+ binding, parentFd: parent.fd, closeParentFd: fs.closeSync,
441
+ directory: parent.receipt, mode, permissionPolicy: "mode-only",
442
+ }, input);
451
443
  }
package/dist/native.d.ts CHANGED
@@ -11,4 +11,3 @@ export declare function getNativeBinding(): NativeBinding | undefined;
11
11
  export declare function requireNativeBinding(): NativeBinding;
12
12
  export declare function __setNativeLoaderForTest(loader: () => NativeBinding): void;
13
13
  export declare function __resetNativeLoaderForTest(): void;
14
- //# sourceMappingURL=native.d.ts.map
@@ -5,4 +5,3 @@ export declare function recordExclusiveCreateFailure(error: unknown, filePath: s
5
5
  export declare function openedPathResolutionError(error?: Error): Error;
6
6
  export declare function recordPreOpenFileChange(error: unknown, handle: FileHandle, filePath: string, before: BigIntStats | undefined, opened: BigIntStats | undefined): Promise<void>;
7
7
  export declare function recordOpenedFileFailure(error: unknown, handle: FileHandle, filePath: string, identity: BigIntStats): Promise<void>;
8
- //# sourceMappingURL=opened-file-failure.d.ts.map
@@ -13,4 +13,3 @@ export declare function resolveOpenedFileRealPathForFd(fd: number, handleStat: F
13
13
  realPath: string;
14
14
  stat: Stats | BigIntStats;
15
15
  }>;
16
- //# sourceMappingURL=opened-realpath.d.ts.map
package/dist/output.d.ts CHANGED
@@ -14,4 +14,3 @@ export type ExternalFileWriteResult<T = void> = {
14
14
  result: T;
15
15
  };
16
16
  export declare function writeExternalFileWithinRoot<T = void>(options: ExternalFileWriteOptions<T>): Promise<ExternalFileWriteResult<T>>;
17
- //# sourceMappingURL=output.d.ts.map
@@ -5,4 +5,3 @@ export type OverwriteFileHandleOptions = {
5
5
  };
6
6
  /** Overwrite a borrowed, non-append read/write handle with best-effort failure rollback. */
7
7
  export declare function overwriteFileHandle(handle: FileHandle, data: Uint8Array, options?: OverwriteFileHandleOptions): Promise<void>;
8
- //# sourceMappingURL=overwrite-file-handle.d.ts.map
@@ -28,4 +28,3 @@ export type OwnerAndDaclResult = {
28
28
  platform: NodeJS.Platform;
29
29
  };
30
30
  export declare function readOwnerAndDacl(targetPath: string): OwnerAndDaclResult;
31
- //# sourceMappingURL=owner-dacl.d.ts.map
@@ -4,4 +4,3 @@ export type ProbePathCaseOptions = {
4
4
  };
5
5
  /** Observe local ASCII case behavior; unknown observations never imply an operating-system default. */
6
6
  export declare function probePathCaseInsensitiveSync(targetPath: string, options?: ProbePathCaseOptions): boolean | undefined;
7
- //# sourceMappingURL=path-case.d.ts.map
@@ -22,4 +22,3 @@ export declare function assertNoHardlinkedFinalPath(params: {
22
22
  boundaryLabel: string;
23
23
  allowFinalHardlinkForUnlink?: boolean;
24
24
  }): Promise<void>;
25
- //# sourceMappingURL=path-policy.d.ts.map
@@ -4,4 +4,3 @@ export type ResolvedPathPrefix = {
4
4
  readonly unresolvedSegments: readonly string[];
5
5
  };
6
6
  export declare function resolvePathPrefixSync(input: string): ResolvedPathPrefix;
7
- //# sourceMappingURL=path-prefix.d.ts.map
@@ -11,4 +11,3 @@ export declare function resolvePathWithinNormalizedRoot(params: ResolvePathWithi
11
11
  ok: false;
12
12
  error: string;
13
13
  };
14
- //# sourceMappingURL=path-scope-lexical.d.ts.map
@@ -4,4 +4,3 @@ export type PathSegmentRoute = Readonly<{
4
4
  }>;
5
5
  export declare function createPathSegmentRoute(segments: readonly string[]): PathSegmentRoute;
6
6
  export declare function joinPathSegmentRoute(base: string, route: PathSegmentRoute, offset: number, tail?: string): string;
7
- //# sourceMappingURL=path-segment-route.d.ts.map
@@ -9,4 +9,3 @@ export type ProbePathSuffixAliasesOptions = {
9
9
  };
10
10
  /** Observe bounded missing suffix aliases; the caller owns caching and ambiguity policy. */
11
11
  export declare function probePathSuffixAliasesSync(options: ProbePathSuffixAliasesOptions): boolean | undefined;
12
- //# sourceMappingURL=path-suffix-aliases.d.ts.map
package/dist/path.d.ts CHANGED
@@ -18,4 +18,3 @@ export declare function isPathInsideWithRealpath(basePath: string, candidatePath
18
18
  export declare function safeStatSync(targetPath: string): fs.Stats | null;
19
19
  export declare function splitSafeRelativePath(relativePath: string): string[];
20
20
  export declare function resolveSafeRelativePath(rootDir: string, relativePath: string): string;
21
- //# sourceMappingURL=path.d.ts.map
@@ -24,4 +24,3 @@ export declare function executePermissionCommand(command: string, args: string[]
24
24
  stdout: string;
25
25
  stderr: string;
26
26
  }>;
27
- //# sourceMappingURL=permission-exec.d.ts.map
@@ -8,7 +8,6 @@ export function formatPermissionErrorDetail(value) {
8
8
  const formatted = formatErrorDetail(value);
9
9
  return formatted.length > 400 ? `${formatted.slice(0, 399)}…` : formatted;
10
10
  }
11
- const MISSING_DATA_PROPERTY = Object.freeze({ found: false });
12
11
  const MAX_CAUGHT_FAILURE_PROTOTYPES = 4;
13
12
  const primitiveString = String;
14
13
  const isUint8Array = utilTypes.isUint8Array;
@@ -36,32 +35,28 @@ function isInspectableCaughtObject(value) {
36
35
  }
37
36
  }
38
37
  function dataProperty(value, name) {
39
- if (!isInspectableCaughtObject(value))
40
- return MISSING_DATA_PROPERTY;
41
38
  let current = value;
42
39
  for (let depth = 0; current !== null && depth < MAX_CAUGHT_FAILURE_PROTOTYPES; depth += 1) {
43
40
  if (!isInspectableCaughtObject(current))
44
- return MISSING_DATA_PROPERTY;
41
+ return undefined;
45
42
  let descriptor;
46
43
  try {
47
44
  descriptor = Object.getOwnPropertyDescriptor(current, name);
48
45
  }
49
46
  catch {
50
- return MISSING_DATA_PROPERTY;
47
+ return undefined;
51
48
  }
52
49
  if (descriptor) {
53
- return Object.hasOwn(descriptor, "value")
54
- ? { found: true, value: descriptor.value }
55
- : MISSING_DATA_PROPERTY;
50
+ return Object.hasOwn(descriptor, "value") ? descriptor : undefined;
56
51
  }
57
52
  try {
58
53
  current = Object.getPrototypeOf(current);
59
54
  }
60
55
  catch {
61
- return MISSING_DATA_PROPERTY;
56
+ return undefined;
62
57
  }
63
58
  }
64
- return MISSING_DATA_PROPERTY;
59
+ return undefined;
65
60
  }
66
61
  function caughtPrimitiveDisplay(value) {
67
62
  if (value !== null && (typeof value === "object" || typeof value === "function"))
@@ -78,9 +73,9 @@ export function formatCaughtPermissionFailure(error) {
78
73
  }
79
74
  const message = dataProperty(error, "message");
80
75
  const name = dataProperty(error, "name");
81
- const rawMessage = message.found && typeof message.value === "string"
76
+ const rawMessage = typeof message?.value === "string"
82
77
  ? message.value : "";
83
- const rawName = name.found && typeof name.value === "string"
78
+ const rawName = typeof name?.value === "string"
84
79
  ? name.value : "";
85
80
  const messageText = rawMessage.slice(0, 400);
86
81
  const nameText = rawName.slice(0, 400);
@@ -123,12 +118,11 @@ function commandFailureFields(error) {
123
118
  const signal = dataProperty(error, "signal");
124
119
  const stderr = dataProperty(error, "stderr");
125
120
  return {
126
- found: killed.found || code.found || signal.found || stderr.found,
127
- timedOut: killed.found && killed.value === true &&
128
- signal.found && signal.value === "SIGKILL",
129
- exitCode: code.found && typeof code.value === "number" ? code.value : null,
130
- signal: signal.found && typeof signal.value === "string" ? signal.value : null,
131
- stderr: stderr.found ? safeStderr(stderr.value) : "",
121
+ found: !!(killed || code || signal || stderr),
122
+ timedOut: killed?.value === true && signal?.value === "SIGKILL",
123
+ exitCode: typeof code?.value === "number" ? code.value : null,
124
+ signal: typeof signal?.value === "string" ? signal.value : null,
125
+ stderr: stderr ? safeStderr(stderr.value) : "",
132
126
  };
133
127
  }
134
128
  export class PermissionCommandError extends Error {
@@ -155,20 +149,20 @@ export class PermissionCommandError extends Error {
155
149
  export function getPermissionCommandFailure(error, command, durationMs) {
156
150
  if (isInspectableCaughtObject(error) && utilTypes.isNativeError(error)) {
157
151
  const name = dataProperty(error, "name");
158
- if (name.found && name.value === "PermissionCommandError") {
152
+ if (name?.value === "PermissionCommandError") {
159
153
  const wrappedCommand = dataProperty(error, "command");
160
154
  const wrappedDuration = dataProperty(error, "durationMs");
161
155
  const wrappedTimedOut = dataProperty(error, "timedOut");
162
156
  const wrappedExitCode = dataProperty(error, "exitCode");
163
157
  const wrappedSignal = dataProperty(error, "signal");
164
158
  const wrappedStderr = dataProperty(error, "stderr");
165
- if (wrappedCommand.found && typeof wrappedCommand.value === "string" &&
166
- wrappedDuration.found && typeof wrappedDuration.value === "number" &&
159
+ if (typeof wrappedCommand?.value === "string" &&
160
+ typeof wrappedDuration?.value === "number" &&
167
161
  Number.isSafeInteger(wrappedDuration.value) && wrappedDuration.value >= 0 &&
168
- wrappedTimedOut.found && typeof wrappedTimedOut.value === "boolean" &&
169
- wrappedExitCode.found && (wrappedExitCode.value === null || typeof wrappedExitCode.value === "number") &&
170
- wrappedSignal.found && (wrappedSignal.value === null || typeof wrappedSignal.value === "string") &&
171
- wrappedStderr.found) {
162
+ typeof wrappedTimedOut?.value === "boolean" &&
163
+ wrappedExitCode && (wrappedExitCode.value === null || typeof wrappedExitCode.value === "number") &&
164
+ wrappedSignal && (wrappedSignal.value === null || typeof wrappedSignal.value === "string") &&
165
+ wrappedStderr) {
172
166
  return {
173
167
  command: wrappedCommand.value,
174
168
  durationMs: wrappedDuration.value,
@@ -1,4 +1,3 @@
1
1
  export { formatOctal, formatPermissionDetail, formatPermissionRemediation, inspectPathPermissions, isGroupReadable, isGroupWritable, isWorldReadable, isWorldWritable, modeBits, safeStat, type PermissionCheck, type PermissionCheckOptions, type PermissionCommandFailure, type SafeStatResult, } from "./permissions.js";
2
2
  export { createPrivateDirectory, type CreatePrivateDirectoryOptions, } from "./private-directory.js";
3
3
  export { readOwnerAndDacl, type OwnerAndDaclResult, type WindowsAccessControlEntry, type WindowsAceFlags, } from "./owner-dacl.js";
4
- //# sourceMappingURL=permissions-public.d.ts.map