@openclaw/signal 2026.9.5 → 2026.9.6

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 (1140) hide show
  1. package/dist/.setup/{api-DbdeJVQ8.mjs → api-B9-B1L7Q.mjs} +6 -6
  2. package/dist/.setup/{api-Cu01dJRP.mjs → api-CGh4eWR8.mjs} +7 -7
  3. package/dist/.setup/{approval-handler.runtime-Clf_1IZj.mjs → approval-handler.runtime-C3vN5OWd.mjs} +2 -2
  4. package/dist/.setup/{approval-reactions-B25QoVJc.mjs → approval-reactions-DDQvPP_z.mjs} +1 -1
  5. package/dist/.setup/{channel-gMpZmqLx.mjs → channel-DhzTcFsK.mjs} +8 -8
  6. package/dist/.setup/{channel.runtime-Dqc18A1e.mjs → channel.runtime-CG79z_Vy.mjs} +2 -2
  7. package/dist/.setup/{install-signal-cli-bXeTrTyL.mjs → install-signal-cli-BDbzFcU2.mjs} +27 -57
  8. package/dist/.setup/{monitor-DAMQw1pZ.mjs → monitor-Dnz6Ygz5.mjs} +11 -10
  9. package/dist/.setup/{probe-IKCS9D-z.mjs → probe-DXT2eLnw.mjs} +1 -1
  10. package/dist/.setup/{question-reactions-DSNAD0cd.mjs → question-reactions-C8cSEjVf.mjs} +1 -1
  11. package/dist/.setup/{send-CcetN4rk.mjs → send-B78M_eFp.mjs} +1 -1
  12. package/dist/.setup/{send.runtime-B7C4IP23.mjs → send.runtime-CLnCWvrM.mjs} +1 -1
  13. package/dist/.setup/{transport-detection-CqyR2vG8.mjs → transport-detection-CoiRl7Gx.mjs} +11 -6
  14. package/dist/.setup/{transport-detection.runtime-CW1lp2d9.mjs → transport-detection.runtime-Tlhuv3T_.mjs} +1 -1
  15. package/dist/api.js +7 -7
  16. package/dist/channel-plugin-api.js +1 -1
  17. package/dist/contract-api.js +1 -1
  18. package/dist/runtime-api.js +5 -5
  19. package/dist/setup-entry.js +1 -1
  20. package/node_modules/@openclaw/fs-safe/CHANGELOG.md +1187 -0
  21. package/node_modules/@openclaw/fs-safe/LICENSE +22 -0
  22. package/node_modules/@openclaw/fs-safe/README.md +654 -0
  23. package/node_modules/@openclaw/fs-safe/SECURITY.md +45 -0
  24. package/node_modules/@openclaw/fs-safe/dist/absolute-path.d.ts +32 -0
  25. package/node_modules/@openclaw/fs-safe/dist/absolute-path.js +323 -0
  26. package/node_modules/@openclaw/fs-safe/dist/advanced.d.ts +36 -0
  27. package/node_modules/@openclaw/fs-safe/dist/advanced.js +38 -0
  28. package/node_modules/@openclaw/fs-safe/dist/archive-crc32.d.ts +1 -0
  29. package/node_modules/@openclaw/fs-safe/dist/archive-crc32.js +19 -0
  30. package/node_modules/@openclaw/fs-safe/dist/archive-deadline.d.ts +11 -0
  31. package/node_modules/@openclaw/fs-safe/dist/archive-deadline.js +101 -0
  32. package/node_modules/@openclaw/fs-safe/dist/archive-durability.d.ts +23 -0
  33. package/node_modules/@openclaw/fs-safe/dist/archive-durability.js +180 -0
  34. package/node_modules/@openclaw/fs-safe/dist/archive-entry.d.ts +13 -0
  35. package/node_modules/@openclaw/fs-safe/dist/archive-entry.js +85 -0
  36. package/node_modules/@openclaw/fs-safe/dist/archive-errors.d.ts +12 -0
  37. package/node_modules/@openclaw/fs-safe/dist/archive-errors.js +23 -0
  38. package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.d.ts +20 -0
  39. package/node_modules/@openclaw/fs-safe/dist/archive-gzip-tail.js +99 -0
  40. package/node_modules/@openclaw/fs-safe/dist/archive-input.d.ts +18 -0
  41. package/node_modules/@openclaw/fs-safe/dist/archive-input.js +98 -0
  42. package/node_modules/@openclaw/fs-safe/dist/archive-kind.d.ts +7 -0
  43. package/node_modules/@openclaw/fs-safe/dist/archive-kind.js +71 -0
  44. package/node_modules/@openclaw/fs-safe/dist/archive-limits.d.ts +56 -0
  45. package/node_modules/@openclaw/fs-safe/dist/archive-limits.js +131 -0
  46. package/node_modules/@openclaw/fs-safe/dist/archive-merge.d.ts +22 -0
  47. package/node_modules/@openclaw/fs-safe/dist/archive-merge.js +283 -0
  48. package/node_modules/@openclaw/fs-safe/dist/archive-parser-errors.d.ts +1 -0
  49. package/node_modules/@openclaw/fs-safe/dist/archive-parser-errors.js +12 -0
  50. package/node_modules/@openclaw/fs-safe/dist/archive-parser.wasm +0 -0
  51. package/node_modules/@openclaw/fs-safe/dist/archive-plan.d.ts +90 -0
  52. package/node_modules/@openclaw/fs-safe/dist/archive-plan.js +119 -0
  53. package/node_modules/@openclaw/fs-safe/dist/archive-read.d.ts +5 -0
  54. package/node_modules/@openclaw/fs-safe/dist/archive-read.js +243 -0
  55. package/node_modules/@openclaw/fs-safe/dist/archive-staging.d.ts +33 -0
  56. package/node_modules/@openclaw/fs-safe/dist/archive-staging.js +308 -0
  57. package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.d.ts +27 -0
  58. package/node_modules/@openclaw/fs-safe/dist/archive-tar-stream.js +127 -0
  59. package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.d.ts +29 -0
  60. package/node_modules/@openclaw/fs-safe/dist/archive-tar-wasm.js +203 -0
  61. package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.d.ts +7 -0
  62. package/node_modules/@openclaw/fs-safe/dist/archive-zip-admission.js +96 -0
  63. package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.d.ts +1 -0
  64. package/node_modules/@openclaw/fs-safe/dist/archive-zip-count.js +160 -0
  65. package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.d.ts +21 -0
  66. package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.js +263 -0
  67. package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.d.ts +24 -0
  68. package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.js +42 -0
  69. package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.d.ts +4 -0
  70. package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.js +40 -0
  71. package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.d.ts +8 -0
  72. package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.js +147 -0
  73. package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.d.ts +4 -0
  74. package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.js +22 -0
  75. package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.d.ts +17 -0
  76. package/node_modules/@openclaw/fs-safe/dist/archive-zip-names.js +149 -0
  77. package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.d.ts +5 -0
  78. package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.js +13 -0
  79. package/node_modules/@openclaw/fs-safe/dist/archive.d.ts +17 -0
  80. package/node_modules/@openclaw/fs-safe/dist/archive.js +329 -0
  81. package/node_modules/@openclaw/fs-safe/dist/async-lock.d.ts +1 -0
  82. package/node_modules/@openclaw/fs-safe/dist/async-lock.js +17 -0
  83. package/node_modules/@openclaw/fs-safe/dist/atomic.d.ts +6 -0
  84. package/node_modules/@openclaw/fs-safe/dist/atomic.js +4 -0
  85. package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.d.ts +2 -0
  86. package/node_modules/@openclaw/fs-safe/dist/bounded-read-stream.js +15 -0
  87. package/node_modules/@openclaw/fs-safe/dist/bounded-read.d.ts +25 -0
  88. package/node_modules/@openclaw/fs-safe/dist/bounded-read.js +143 -0
  89. package/node_modules/@openclaw/fs-safe/dist/byte-budget.d.ts +3 -0
  90. package/node_modules/@openclaw/fs-safe/dist/byte-budget.js +9 -0
  91. package/node_modules/@openclaw/fs-safe/dist/byte-view.d.ts +2 -0
  92. package/node_modules/@openclaw/fs-safe/dist/byte-view.js +13 -0
  93. package/node_modules/@openclaw/fs-safe/dist/clone-metadata.d.ts +19 -0
  94. package/node_modules/@openclaw/fs-safe/dist/clone-metadata.js +36 -0
  95. package/node_modules/@openclaw/fs-safe/dist/config.d.ts +2 -0
  96. package/node_modules/@openclaw/fs-safe/dist/config.js +2 -0
  97. package/node_modules/@openclaw/fs-safe/dist/containment.d.ts +1 -0
  98. package/node_modules/@openclaw/fs-safe/dist/containment.js +1 -0
  99. package/node_modules/@openclaw/fs-safe/dist/copy-file-input.d.ts +21 -0
  100. package/node_modules/@openclaw/fs-safe/dist/copy-file-input.js +71 -0
  101. package/node_modules/@openclaw/fs-safe/dist/copy-policy.d.ts +2 -0
  102. package/node_modules/@openclaw/fs-safe/dist/copy-policy.js +8 -0
  103. package/node_modules/@openclaw/fs-safe/dist/copy-publication.d.ts +20 -0
  104. package/node_modules/@openclaw/fs-safe/dist/copy-publication.js +33 -0
  105. package/node_modules/@openclaw/fs-safe/dist/copy-tree-portable.d.ts +8 -0
  106. package/node_modules/@openclaw/fs-safe/dist/copy-tree-portable.js +245 -0
  107. package/node_modules/@openclaw/fs-safe/dist/copy.d.ts +15 -0
  108. package/node_modules/@openclaw/fs-safe/dist/copy.js +143 -0
  109. package/node_modules/@openclaw/fs-safe/dist/create-owned-file.d.ts +7 -0
  110. package/node_modules/@openclaw/fs-safe/dist/create-owned-file.js +16 -0
  111. package/node_modules/@openclaw/fs-safe/dist/create.d.ts +17 -0
  112. package/node_modules/@openclaw/fs-safe/dist/create.js +388 -0
  113. package/node_modules/@openclaw/fs-safe/dist/creation-boundary.d.ts +60 -0
  114. package/node_modules/@openclaw/fs-safe/dist/creation-boundary.js +371 -0
  115. package/node_modules/@openclaw/fs-safe/dist/deny-mutations.d.ts +11 -0
  116. package/node_modules/@openclaw/fs-safe/dist/deny-mutations.js +95 -0
  117. package/node_modules/@openclaw/fs-safe/dist/device-path.d.ts +14 -0
  118. package/node_modules/@openclaw/fs-safe/dist/device-path.js +139 -0
  119. package/node_modules/@openclaw/fs-safe/dist/directory-durability.d.ts +43 -0
  120. package/node_modules/@openclaw/fs-safe/dist/directory-durability.js +286 -0
  121. package/node_modules/@openclaw/fs-safe/dist/directory-entry-path.d.ts +2 -0
  122. package/node_modules/@openclaw/fs-safe/dist/directory-entry-path.js +21 -0
  123. package/node_modules/@openclaw/fs-safe/dist/directory-guard.d.ts +55 -0
  124. package/node_modules/@openclaw/fs-safe/dist/directory-guard.js +179 -0
  125. package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.d.ts +21 -0
  126. package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.js +209 -0
  127. package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.d.ts +20 -0
  128. package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.js +78 -0
  129. package/node_modules/@openclaw/fs-safe/dist/directory-receipt.d.ts +23 -0
  130. package/node_modules/@openclaw/fs-safe/dist/directory-receipt.js +123 -0
  131. package/node_modules/@openclaw/fs-safe/dist/durability.d.ts +4 -0
  132. package/node_modules/@openclaw/fs-safe/dist/durability.js +3 -0
  133. package/node_modules/@openclaw/fs-safe/dist/effective-uid.d.ts +1 -0
  134. package/node_modules/@openclaw/fs-safe/dist/effective-uid.js +25 -0
  135. package/node_modules/@openclaw/fs-safe/dist/error-detail.d.ts +2 -0
  136. package/node_modules/@openclaw/fs-safe/dist/error-detail.js +13 -0
  137. package/node_modules/@openclaw/fs-safe/dist/errors.d.ts +13 -0
  138. package/node_modules/@openclaw/fs-safe/dist/errors.js +26 -0
  139. package/node_modules/@openclaw/fs-safe/dist/file-cleanup.d.ts +19 -0
  140. package/node_modules/@openclaw/fs-safe/dist/file-cleanup.js +81 -0
  141. package/node_modules/@openclaw/fs-safe/dist/file-contents.d.ts +5 -0
  142. package/node_modules/@openclaw/fs-safe/dist/file-contents.js +40 -0
  143. package/node_modules/@openclaw/fs-safe/dist/file-handle-transfer.d.ts +15 -0
  144. package/node_modules/@openclaw/fs-safe/dist/file-handle-transfer.js +190 -0
  145. package/node_modules/@openclaw/fs-safe/dist/file-hash.d.ts +16 -0
  146. package/node_modules/@openclaw/fs-safe/dist/file-hash.js +296 -0
  147. package/node_modules/@openclaw/fs-safe/dist/file-identity.d.ts +7 -0
  148. package/node_modules/@openclaw/fs-safe/dist/file-identity.js +48 -0
  149. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.d.ts +22 -0
  150. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.js +98 -0
  151. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.d.ts +17 -0
  152. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.js +54 -0
  153. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-acquire.d.ts +3 -0
  154. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-acquire.js +303 -0
  155. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-arbitration.d.ts +17 -0
  156. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-arbitration.js +66 -0
  157. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.d.ts +32 -0
  158. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.js +395 -0
  159. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.d.ts +43 -0
  160. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.js +209 -0
  161. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-mutation.d.ts +16 -0
  162. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-mutation.js +275 -0
  163. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.d.ts +19 -0
  164. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.js +58 -0
  165. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-registration.d.ts +1 -0
  166. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-registration.js +90 -0
  167. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.d.ts +36 -0
  168. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.js +288 -0
  169. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-stale-admission.d.ts +19 -0
  170. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-stale-admission.js +199 -0
  171. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.d.ts +17 -0
  172. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.js +341 -0
  173. package/node_modules/@openclaw/fs-safe/dist/file-lock.d.ts +23 -0
  174. package/node_modules/@openclaw/fs-safe/dist/file-lock.js +66 -0
  175. package/node_modules/@openclaw/fs-safe/dist/file-observation.d.ts +8 -0
  176. package/node_modules/@openclaw/fs-safe/dist/file-observation.js +22 -0
  177. package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.d.ts +38 -0
  178. package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.js +177 -0
  179. package/node_modules/@openclaw/fs-safe/dist/file-store-prune.d.ts +11 -0
  180. package/node_modules/@openclaw/fs-safe/dist/file-store-prune.js +109 -0
  181. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-directory.d.ts +15 -0
  182. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-directory.js +319 -0
  183. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.d.ts +9 -0
  184. package/node_modules/@openclaw/fs-safe/dist/file-store-sync-write.js +128 -0
  185. package/node_modules/@openclaw/fs-safe/dist/file-store.d.ts +65 -0
  186. package/node_modules/@openclaw/fs-safe/dist/file-store.js +362 -0
  187. package/node_modules/@openclaw/fs-safe/dist/file-sync.d.ts +4 -0
  188. package/node_modules/@openclaw/fs-safe/dist/file-sync.js +19 -0
  189. package/node_modules/@openclaw/fs-safe/dist/filename.d.ts +8 -0
  190. package/node_modules/@openclaw/fs-safe/dist/filename.js +138 -0
  191. package/node_modules/@openclaw/fs-safe/dist/fs.d.ts +12 -0
  192. package/node_modules/@openclaw/fs-safe/dist/fs.js +30 -0
  193. package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.d.ts +25 -0
  194. package/node_modules/@openclaw/fs-safe/dist/guarded-mkdir.js +281 -0
  195. package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.d.ts +32 -0
  196. package/node_modules/@openclaw/fs-safe/dist/guarded-mutation.js +81 -0
  197. package/node_modules/@openclaw/fs-safe/dist/guest-dispatch-python.d.ts +1 -0
  198. package/node_modules/@openclaw/fs-safe/dist/guest-dispatch-python.js +68 -0
  199. package/node_modules/@openclaw/fs-safe/dist/guest-native-python.d.ts +3 -0
  200. package/node_modules/@openclaw/fs-safe/dist/guest-native-python.js +135 -0
  201. package/node_modules/@openclaw/fs-safe/dist/guest.d.ts +8 -0
  202. package/node_modules/@openclaw/fs-safe/dist/guest.js +424 -0
  203. package/node_modules/@openclaw/fs-safe/dist/home-dir.d.ts +11 -0
  204. package/node_modules/@openclaw/fs-safe/dist/home-dir.js +149 -0
  205. package/node_modules/@openclaw/fs-safe/dist/index.d.ts +9 -0
  206. package/node_modules/@openclaw/fs-safe/dist/index.js +5 -0
  207. package/node_modules/@openclaw/fs-safe/dist/install-path.d.ts +25 -0
  208. package/node_modules/@openclaw/fs-safe/dist/install-path.js +136 -0
  209. package/node_modules/@openclaw/fs-safe/dist/json-document-store.d.ts +37 -0
  210. package/node_modules/@openclaw/fs-safe/dist/json-document-store.js +105 -0
  211. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.d.ts +14 -0
  212. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-directory.js +154 -0
  213. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.d.ts +23 -0
  214. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.js +355 -0
  215. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-read.d.ts +5 -0
  216. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-read.js +65 -0
  217. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.d.ts +45 -0
  218. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.js +215 -0
  219. package/node_modules/@openclaw/fs-safe/dist/json-store.d.ts +8 -0
  220. package/node_modules/@openclaw/fs-safe/dist/json-store.js +15 -0
  221. package/node_modules/@openclaw/fs-safe/dist/json-stringify.d.ts +1 -0
  222. package/node_modules/@openclaw/fs-safe/dist/json-stringify.js +7 -0
  223. package/node_modules/@openclaw/fs-safe/dist/json.d.ts +49 -0
  224. package/node_modules/@openclaw/fs-safe/dist/json.js +323 -0
  225. package/node_modules/@openclaw/fs-safe/dist/local-file-access.d.ts +8 -0
  226. package/node_modules/@openclaw/fs-safe/dist/local-file-access.js +84 -0
  227. package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.d.ts +16 -0
  228. package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.js +84 -0
  229. package/node_modules/@openclaw/fs-safe/dist/local-roots.d.ts +25 -0
  230. package/node_modules/@openclaw/fs-safe/dist/local-roots.js +160 -0
  231. package/node_modules/@openclaw/fs-safe/dist/lock-config.d.ts +9 -0
  232. package/node_modules/@openclaw/fs-safe/dist/lock-config.js +12 -0
  233. package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.d.ts +30 -0
  234. package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.js +224 -0
  235. package/node_modules/@openclaw/fs-safe/dist/move-path-stage.d.ts +7 -0
  236. package/node_modules/@openclaw/fs-safe/dist/move-path-stage.js +56 -0
  237. package/node_modules/@openclaw/fs-safe/dist/move-path.d.ts +20 -0
  238. package/node_modules/@openclaw/fs-safe/dist/move-path.js +390 -0
  239. package/node_modules/@openclaw/fs-safe/dist/mutation-authority.d.ts +8 -0
  240. package/node_modules/@openclaw/fs-safe/dist/mutation-authority.js +36 -0
  241. package/node_modules/@openclaw/fs-safe/dist/native-binding.d.ts +162 -0
  242. package/node_modules/@openclaw/fs-safe/dist/native-binding.js +8 -0
  243. package/node_modules/@openclaw/fs-safe/dist/native-config.d.ts +16 -0
  244. package/node_modules/@openclaw/fs-safe/dist/native-config.js +71 -0
  245. package/node_modules/@openclaw/fs-safe/dist/native-directory-observation.d.ts +16 -0
  246. package/node_modules/@openclaw/fs-safe/dist/native-directory-observation.js +37 -0
  247. package/node_modules/@openclaw/fs-safe/dist/native-fallback-warning.d.ts +3 -0
  248. package/node_modules/@openclaw/fs-safe/dist/native-fallback-warning.js +11 -0
  249. package/node_modules/@openclaw/fs-safe/dist/native-operations.d.ts +15 -0
  250. package/node_modules/@openclaw/fs-safe/dist/native-operations.js +111 -0
  251. package/node_modules/@openclaw/fs-safe/dist/native-parent-admission.d.ts +34 -0
  252. package/node_modules/@openclaw/fs-safe/dist/native-parent-admission.js +147 -0
  253. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.d.ts +6 -0
  254. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write-windows.js +252 -0
  255. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.d.ts +4 -0
  256. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.js +472 -0
  257. package/node_modules/@openclaw/fs-safe/dist/native-policy-directory-observation.d.ts +11 -0
  258. package/node_modules/@openclaw/fs-safe/dist/native-policy-directory-observation.js +61 -0
  259. package/node_modules/@openclaw/fs-safe/dist/native-policy-parent-windows.d.ts +13 -0
  260. package/node_modules/@openclaw/fs-safe/dist/native-policy-parent-windows.js +209 -0
  261. package/node_modules/@openclaw/fs-safe/dist/native-rename-outcome.d.ts +3 -0
  262. package/node_modules/@openclaw/fs-safe/dist/native-rename-outcome.js +8 -0
  263. package/node_modules/@openclaw/fs-safe/dist/native-staged-file.d.ts +45 -0
  264. package/node_modules/@openclaw/fs-safe/dist/native-staged-file.js +442 -0
  265. package/node_modules/@openclaw/fs-safe/dist/native.d.ts +13 -0
  266. package/node_modules/@openclaw/fs-safe/dist/native.js +209 -0
  267. package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.d.ts +7 -0
  268. package/node_modules/@openclaw/fs-safe/dist/opened-file-failure.js +46 -0
  269. package/node_modules/@openclaw/fs-safe/dist/opened-realpath.d.ts +15 -0
  270. package/node_modules/@openclaw/fs-safe/dist/opened-realpath.js +102 -0
  271. package/node_modules/@openclaw/fs-safe/dist/output.d.ts +16 -0
  272. package/node_modules/@openclaw/fs-safe/dist/output.js +139 -0
  273. package/node_modules/@openclaw/fs-safe/dist/overwrite-file-handle.d.ts +7 -0
  274. package/node_modules/@openclaw/fs-safe/dist/overwrite-file-handle.js +46 -0
  275. package/node_modules/@openclaw/fs-safe/dist/owner-dacl.d.ts +30 -0
  276. package/node_modules/@openclaw/fs-safe/dist/owner-dacl.js +36 -0
  277. package/node_modules/@openclaw/fs-safe/dist/path-case.d.ts +6 -0
  278. package/node_modules/@openclaw/fs-safe/dist/path-case.js +136 -0
  279. package/node_modules/@openclaw/fs-safe/dist/path-policy.d.ts +24 -0
  280. package/node_modules/@openclaw/fs-safe/dist/path-policy.js +49 -0
  281. package/node_modules/@openclaw/fs-safe/dist/path-prefix.d.ts +6 -0
  282. package/node_modules/@openclaw/fs-safe/dist/path-prefix.js +104 -0
  283. package/node_modules/@openclaw/fs-safe/dist/path-scope-lexical.d.ts +13 -0
  284. package/node_modules/@openclaw/fs-safe/dist/path-scope-lexical.js +37 -0
  285. package/node_modules/@openclaw/fs-safe/dist/path-segment-route.d.ts +6 -0
  286. package/node_modules/@openclaw/fs-safe/dist/path-segment-route.js +24 -0
  287. package/node_modules/@openclaw/fs-safe/dist/path-suffix-aliases.d.ts +11 -0
  288. package/node_modules/@openclaw/fs-safe/dist/path-suffix-aliases.js +394 -0
  289. package/node_modules/@openclaw/fs-safe/dist/path.d.ts +20 -0
  290. package/node_modules/@openclaw/fs-safe/dist/path.js +169 -0
  291. package/node_modules/@openclaw/fs-safe/dist/permission-exec.d.ts +26 -0
  292. package/node_modules/@openclaw/fs-safe/dist/permission-exec.js +197 -0
  293. package/node_modules/@openclaw/fs-safe/dist/permissions-public.d.ts +3 -0
  294. package/node_modules/@openclaw/fs-safe/dist/permissions-public.js +3 -0
  295. package/node_modules/@openclaw/fs-safe/dist/permissions-windows.d.ts +51 -0
  296. package/node_modules/@openclaw/fs-safe/dist/permissions-windows.js +319 -0
  297. package/node_modules/@openclaw/fs-safe/dist/permissions.d.ts +59 -0
  298. package/node_modules/@openclaw/fs-safe/dist/permissions.js +132 -0
  299. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.d.ts +24 -0
  300. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.js +419 -0
  301. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-observation.d.ts +38 -0
  302. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-observation.js +205 -0
  303. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.d.ts +24 -0
  304. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.js +70 -0
  305. package/node_modules/@openclaw/fs-safe/dist/pinned-open.d.ts +30 -0
  306. package/node_modules/@openclaw/fs-safe/dist/pinned-open.js +99 -0
  307. package/node_modules/@openclaw/fs-safe/dist/pinned-operation.d.ts +1 -0
  308. package/node_modules/@openclaw/fs-safe/dist/pinned-operation.js +22 -0
  309. package/node_modules/@openclaw/fs-safe/dist/pinned-write-input.d.ts +3 -0
  310. package/node_modules/@openclaw/fs-safe/dist/pinned-write-input.js +35 -0
  311. package/node_modules/@openclaw/fs-safe/dist/pinned-write-mode.d.ts +4 -0
  312. package/node_modules/@openclaw/fs-safe/dist/pinned-write-mode.js +31 -0
  313. package/node_modules/@openclaw/fs-safe/dist/pinned-write-staged.d.ts +5 -0
  314. package/node_modules/@openclaw/fs-safe/dist/pinned-write-staged.js +185 -0
  315. package/node_modules/@openclaw/fs-safe/dist/pinned-write-types.d.ts +68 -0
  316. package/node_modules/@openclaw/fs-safe/dist/pinned-write-types.js +1 -0
  317. package/node_modules/@openclaw/fs-safe/dist/pinned-write.d.ts +12 -0
  318. package/node_modules/@openclaw/fs-safe/dist/pinned-write.js +300 -0
  319. package/node_modules/@openclaw/fs-safe/dist/positional-read.d.ts +8 -0
  320. package/node_modules/@openclaw/fs-safe/dist/positional-read.js +36 -0
  321. package/node_modules/@openclaw/fs-safe/dist/private-directory.d.ts +4 -0
  322. package/node_modules/@openclaw/fs-safe/dist/private-directory.js +30 -0
  323. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff-sync.d.ts +3 -0
  324. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff-sync.js +72 -0
  325. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff.d.ts +53 -0
  326. package/node_modules/@openclaw/fs-safe/dist/private-producer-handoff.js +358 -0
  327. package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.d.ts +7 -0
  328. package/node_modules/@openclaw/fs-safe/dist/private-temp-workspace.js +341 -0
  329. package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.d.ts +13 -0
  330. package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.js +56 -0
  331. package/node_modules/@openclaw/fs-safe/dist/publish-file-failure.d.ts +27 -0
  332. package/node_modules/@openclaw/fs-safe/dist/publish-file-failure.js +22 -0
  333. package/node_modules/@openclaw/fs-safe/dist/publish-file.d.ts +19 -0
  334. package/node_modules/@openclaw/fs-safe/dist/publish-file.js +332 -0
  335. package/node_modules/@openclaw/fs-safe/dist/read-open-flags.d.ts +7 -0
  336. package/node_modules/@openclaw/fs-safe/dist/read-open-flags.js +13 -0
  337. package/node_modules/@openclaw/fs-safe/dist/read-opened-file.d.ts +20 -0
  338. package/node_modules/@openclaw/fs-safe/dist/read-opened-file.js +18 -0
  339. package/node_modules/@openclaw/fs-safe/dist/realpath.d.ts +3 -0
  340. package/node_modules/@openclaw/fs-safe/dist/realpath.js +43 -0
  341. package/node_modules/@openclaw/fs-safe/dist/recursive-mkdir-path.d.ts +2 -0
  342. package/node_modules/@openclaw/fs-safe/dist/recursive-mkdir-path.js +8 -0
  343. package/node_modules/@openclaw/fs-safe/dist/regular-file.d.ts +37 -0
  344. package/node_modules/@openclaw/fs-safe/dist/regular-file.js +317 -0
  345. package/node_modules/@openclaw/fs-safe/dist/replace-directory.d.ts +6 -0
  346. package/node_modules/@openclaw/fs-safe/dist/replace-directory.js +287 -0
  347. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.d.ts +38 -0
  348. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.js +341 -0
  349. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.d.ts +20 -0
  350. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-source.js +101 -0
  351. package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.d.ts +50 -0
  352. package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.js +160 -0
  353. package/node_modules/@openclaw/fs-safe/dist/replace-file-mode.d.ts +2 -0
  354. package/node_modules/@openclaw/fs-safe/dist/replace-file-mode.js +10 -0
  355. package/node_modules/@openclaw/fs-safe/dist/replace-file-rename-policy.d.ts +5 -0
  356. package/node_modules/@openclaw/fs-safe/dist/replace-file-rename-policy.js +30 -0
  357. package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.d.ts +49 -0
  358. package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.js +356 -0
  359. package/node_modules/@openclaw/fs-safe/dist/replace-file.d.ts +58 -0
  360. package/node_modules/@openclaw/fs-safe/dist/replace-file.js +336 -0
  361. package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.d.ts +25 -0
  362. package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.js +193 -0
  363. package/node_modules/@openclaw/fs-safe/dist/root-boundary.d.ts +29 -0
  364. package/node_modules/@openclaw/fs-safe/dist/root-boundary.js +186 -0
  365. package/node_modules/@openclaw/fs-safe/dist/root-context.d.ts +43 -0
  366. package/node_modules/@openclaw/fs-safe/dist/root-context.js +232 -0
  367. package/node_modules/@openclaw/fs-safe/dist/root-create-input.d.ts +16 -0
  368. package/node_modules/@openclaw/fs-safe/dist/root-create-input.js +93 -0
  369. package/node_modules/@openclaw/fs-safe/dist/root-directory-creation.d.ts +12 -0
  370. package/node_modules/@openclaw/fs-safe/dist/root-directory-creation.js +225 -0
  371. package/node_modules/@openclaw/fs-safe/dist/root-directory-list.d.ts +38 -0
  372. package/node_modules/@openclaw/fs-safe/dist/root-directory-list.js +382 -0
  373. package/node_modules/@openclaw/fs-safe/dist/root-directory.d.ts +22 -0
  374. package/node_modules/@openclaw/fs-safe/dist/root-directory.js +141 -0
  375. package/node_modules/@openclaw/fs-safe/dist/root-entries.d.ts +10 -0
  376. package/node_modules/@openclaw/fs-safe/dist/root-entries.js +61 -0
  377. package/node_modules/@openclaw/fs-safe/dist/root-errors.d.ts +16 -0
  378. package/node_modules/@openclaw/fs-safe/dist/root-errors.js +92 -0
  379. package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.d.ts +20 -0
  380. package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.js +86 -0
  381. package/node_modules/@openclaw/fs-safe/dist/root-file.d.ts +46 -0
  382. package/node_modules/@openclaw/fs-safe/dist/root-file.js +208 -0
  383. package/node_modules/@openclaw/fs-safe/dist/root-impl.d.ts +117 -0
  384. package/node_modules/@openclaw/fs-safe/dist/root-impl.js +1443 -0
  385. package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.d.ts +15 -0
  386. package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.js +205 -0
  387. package/node_modules/@openclaw/fs-safe/dist/root-move-preflight.d.ts +7 -0
  388. package/node_modules/@openclaw/fs-safe/dist/root-move-preflight.js +16 -0
  389. package/node_modules/@openclaw/fs-safe/dist/root-observed-path.d.ts +8 -0
  390. package/node_modules/@openclaw/fs-safe/dist/root-observed-path.js +93 -0
  391. package/node_modules/@openclaw/fs-safe/dist/root-options.d.ts +84 -0
  392. package/node_modules/@openclaw/fs-safe/dist/root-options.js +18 -0
  393. package/node_modules/@openclaw/fs-safe/dist/root-path-errors.d.ts +12 -0
  394. package/node_modules/@openclaw/fs-safe/dist/root-path-errors.js +22 -0
  395. package/node_modules/@openclaw/fs-safe/dist/root-path-existing.d.ts +12 -0
  396. package/node_modules/@openclaw/fs-safe/dist/root-path-existing.js +160 -0
  397. package/node_modules/@openclaw/fs-safe/dist/root-path-observation.d.ts +62 -0
  398. package/node_modules/@openclaw/fs-safe/dist/root-path-observation.js +180 -0
  399. package/node_modules/@openclaw/fs-safe/dist/root-path-stat.d.ts +4 -0
  400. package/node_modules/@openclaw/fs-safe/dist/root-path-stat.js +151 -0
  401. package/node_modules/@openclaw/fs-safe/dist/root-path.d.ts +53 -0
  402. package/node_modules/@openclaw/fs-safe/dist/root-path.js +443 -0
  403. package/node_modules/@openclaw/fs-safe/dist/root-paths-lexical.d.ts +8 -0
  404. package/node_modules/@openclaw/fs-safe/dist/root-paths-lexical.js +22 -0
  405. package/node_modules/@openclaw/fs-safe/dist/root-paths.d.ts +62 -0
  406. package/node_modules/@openclaw/fs-safe/dist/root-paths.js +296 -0
  407. package/node_modules/@openclaw/fs-safe/dist/root-public-types.d.ts +11 -0
  408. package/node_modules/@openclaw/fs-safe/dist/root-public-types.js +1 -0
  409. package/node_modules/@openclaw/fs-safe/dist/root-read-admission.d.ts +25 -0
  410. package/node_modules/@openclaw/fs-safe/dist/root-read-admission.js +86 -0
  411. package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.d.ts +14 -0
  412. package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.js +87 -0
  413. package/node_modules/@openclaw/fs-safe/dist/root-remove-receipt.d.ts +16 -0
  414. package/node_modules/@openclaw/fs-safe/dist/root-remove-receipt.js +37 -0
  415. package/node_modules/@openclaw/fs-safe/dist/root-remove.d.ts +6 -0
  416. package/node_modules/@openclaw/fs-safe/dist/root-remove.js +464 -0
  417. package/node_modules/@openclaw/fs-safe/dist/root-symlink-policy.d.ts +13 -0
  418. package/node_modules/@openclaw/fs-safe/dist/root-symlink-policy.js +34 -0
  419. package/node_modules/@openclaw/fs-safe/dist/root-walk.d.ts +41 -0
  420. package/node_modules/@openclaw/fs-safe/dist/root-walk.js +198 -0
  421. package/node_modules/@openclaw/fs-safe/dist/root-write-admission.d.ts +65 -0
  422. package/node_modules/@openclaw/fs-safe/dist/root-write-admission.js +304 -0
  423. package/node_modules/@openclaw/fs-safe/dist/root-write-compatibility.d.ts +11 -0
  424. package/node_modules/@openclaw/fs-safe/dist/root-write-compatibility.js +23 -0
  425. package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.d.ts +41 -0
  426. package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.js +180 -0
  427. package/node_modules/@openclaw/fs-safe/dist/root-write-lock-binding.d.ts +14 -0
  428. package/node_modules/@openclaw/fs-safe/dist/root-write-lock-binding.js +162 -0
  429. package/node_modules/@openclaw/fs-safe/dist/root-write-mode.d.ts +7 -0
  430. package/node_modules/@openclaw/fs-safe/dist/root-write-mode.js +72 -0
  431. package/node_modules/@openclaw/fs-safe/dist/root-write-publication.d.ts +23 -0
  432. package/node_modules/@openclaw/fs-safe/dist/root-write-publication.js +85 -0
  433. package/node_modules/@openclaw/fs-safe/dist/root-write-verification.d.ts +11 -0
  434. package/node_modules/@openclaw/fs-safe/dist/root-write-verification.js +95 -0
  435. package/node_modules/@openclaw/fs-safe/dist/root.d.ts +2 -0
  436. package/node_modules/@openclaw/fs-safe/dist/root.js +1 -0
  437. package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.d.ts +11 -0
  438. package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.js +74 -0
  439. package/node_modules/@openclaw/fs-safe/dist/secret-file.d.ts +25 -0
  440. package/node_modules/@openclaw/fs-safe/dist/secret-file.js +337 -0
  441. package/node_modules/@openclaw/fs-safe/dist/secret-read-async.d.ts +3 -0
  442. package/node_modules/@openclaw/fs-safe/dist/secret-read-async.js +58 -0
  443. package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.d.ts +20 -0
  444. package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.js +68 -0
  445. package/node_modules/@openclaw/fs-safe/dist/secret.d.ts +3 -0
  446. package/node_modules/@openclaw/fs-safe/dist/secret.js +3 -0
  447. package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.d.ts +10 -0
  448. package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.js +88 -0
  449. package/node_modules/@openclaw/fs-safe/dist/secure-file.d.ts +31 -0
  450. package/node_modules/@openclaw/fs-safe/dist/secure-file.js +297 -0
  451. package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.d.ts +29 -0
  452. package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.js +181 -0
  453. package/node_modules/@openclaw/fs-safe/dist/secure-temp-repair.d.ts +34 -0
  454. package/node_modules/@openclaw/fs-safe/dist/secure-temp-repair.js +110 -0
  455. package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.d.ts +17 -0
  456. package/node_modules/@openclaw/fs-safe/dist/sibling-staged-file.js +301 -0
  457. package/node_modules/@openclaw/fs-safe/dist/sibling-temp.d.ts +28 -0
  458. package/node_modules/@openclaw/fs-safe/dist/sibling-temp.js +132 -0
  459. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.d.ts +4 -0
  460. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.js +442 -0
  461. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-context.d.ts +18 -0
  462. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-context.js +60 -0
  463. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.d.ts +42 -0
  464. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.js +113 -0
  465. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission.d.ts +31 -0
  466. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission.js +1 -0
  467. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.d.ts +26 -0
  468. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.js +48 -0
  469. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.d.ts +19 -0
  470. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.js +113 -0
  471. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.d.ts +67 -0
  472. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.js +375 -0
  473. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-registration.d.ts +13 -0
  474. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-registration.js +47 -0
  475. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.d.ts +2 -0
  476. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-root.js +79 -0
  477. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.d.ts +38 -0
  478. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.js +228 -0
  479. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-target.d.ts +7 -0
  480. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-target.js +55 -0
  481. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-types.d.ts +68 -0
  482. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-types.js +1 -0
  483. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.d.ts +13 -0
  484. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.js +280 -0
  485. package/node_modules/@openclaw/fs-safe/dist/staged-directory.d.ts +27 -0
  486. package/node_modules/@openclaw/fs-safe/dist/staged-directory.js +148 -0
  487. package/node_modules/@openclaw/fs-safe/dist/staged-file-settlement.d.ts +16 -0
  488. package/node_modules/@openclaw/fs-safe/dist/staged-file-settlement.js +57 -0
  489. package/node_modules/@openclaw/fs-safe/dist/staged-file-types.d.ts +55 -0
  490. package/node_modules/@openclaw/fs-safe/dist/staged-file-types.js +1 -0
  491. package/node_modules/@openclaw/fs-safe/dist/stat-observation.d.ts +10 -0
  492. package/node_modules/@openclaw/fs-safe/dist/stat-observation.js +64 -0
  493. package/node_modules/@openclaw/fs-safe/dist/store.d.ts +3 -0
  494. package/node_modules/@openclaw/fs-safe/dist/store.js +3 -0
  495. package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.d.ts +5 -0
  496. package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.js +88 -0
  497. package/node_modules/@openclaw/fs-safe/dist/string-coerce.d.ts +4 -0
  498. package/node_modules/@openclaw/fs-safe/dist/string-coerce.js +16 -0
  499. package/node_modules/@openclaw/fs-safe/dist/suppressed-error.d.ts +5 -0
  500. package/node_modules/@openclaw/fs-safe/dist/suppressed-error.js +15 -0
  501. package/node_modules/@openclaw/fs-safe/dist/symlink-parents.d.ts +11 -0
  502. package/node_modules/@openclaw/fs-safe/dist/symlink-parents.js +58 -0
  503. package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.d.ts +13 -0
  504. package/node_modules/@openclaw/fs-safe/dist/temp-cleanup.js +88 -0
  505. package/node_modules/@openclaw/fs-safe/dist/temp-target.d.ts +31 -0
  506. package/node_modules/@openclaw/fs-safe/dist/temp-target.js +238 -0
  507. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.d.ts +14 -0
  508. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.js +392 -0
  509. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.d.ts +23 -0
  510. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.js +151 -0
  511. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.d.ts +42 -0
  512. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.js +342 -0
  513. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.d.ts +24 -0
  514. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.js +403 -0
  515. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-types.d.ts +39 -0
  516. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-types.js +1 -0
  517. package/node_modules/@openclaw/fs-safe/dist/temp.d.ts +3 -0
  518. package/node_modules/@openclaw/fs-safe/dist/temp.js +2 -0
  519. package/node_modules/@openclaw/fs-safe/dist/test-hooks.d.ts +31 -0
  520. package/node_modules/@openclaw/fs-safe/dist/test-hooks.js +13 -0
  521. package/node_modules/@openclaw/fs-safe/dist/text-atomic.d.ts +13 -0
  522. package/node_modules/@openclaw/fs-safe/dist/text-atomic.js +16 -0
  523. package/node_modules/@openclaw/fs-safe/dist/timing.d.ts +8 -0
  524. package/node_modules/@openclaw/fs-safe/dist/timing.js +59 -0
  525. package/node_modules/@openclaw/fs-safe/dist/trash.d.ts +4 -0
  526. package/node_modules/@openclaw/fs-safe/dist/trash.js +219 -0
  527. package/node_modules/@openclaw/fs-safe/dist/types.d.ts +22 -0
  528. package/node_modules/@openclaw/fs-safe/dist/types.js +1 -0
  529. package/node_modules/@openclaw/fs-safe/dist/unicode-path.d.ts +2 -0
  530. package/node_modules/@openclaw/fs-safe/dist/unicode-path.js +16 -0
  531. package/node_modules/@openclaw/fs-safe/dist/walk.d.ts +40 -0
  532. package/node_modules/@openclaw/fs-safe/dist/walk.js +207 -0
  533. package/node_modules/@openclaw/fs-safe/dist/windows-command.d.ts +1 -0
  534. package/node_modules/@openclaw/fs-safe/dist/windows-command.js +34 -0
  535. package/node_modules/@openclaw/fs-safe/dist/windows-owner.d.ts +28 -0
  536. package/node_modules/@openclaw/fs-safe/dist/windows-owner.js +101 -0
  537. package/node_modules/@openclaw/fs-safe/dist/windows-path-alias.d.ts +39 -0
  538. package/node_modules/@openclaw/fs-safe/dist/windows-path-alias.js +122 -0
  539. package/node_modules/@openclaw/fs-safe/dist/windows-path-syntax.d.ts +5 -0
  540. package/node_modules/@openclaw/fs-safe/dist/windows-path-syntax.js +21 -0
  541. package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.cs +336 -0
  542. package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.ps1 +15 -0
  543. package/node_modules/@openclaw/fs-safe/dist/windows-security-command.d.ts +25 -0
  544. package/node_modules/@openclaw/fs-safe/dist/windows-security-command.js +363 -0
  545. package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.d.ts +5 -0
  546. package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.js +108 -0
  547. package/node_modules/@openclaw/fs-safe/dist/write-file-handle.d.ts +13 -0
  548. package/node_modules/@openclaw/fs-safe/dist/write-file-handle.js +49 -0
  549. package/node_modules/@openclaw/fs-safe/dist/write-open-flags.d.ts +4 -0
  550. package/node_modules/@openclaw/fs-safe/dist/write-open-flags.js +27 -0
  551. package/node_modules/@openclaw/fs-safe/dist/write-queue.d.ts +1 -0
  552. package/node_modules/@openclaw/fs-safe/dist/write-queue.js +15 -0
  553. package/node_modules/@openclaw/fs-safe/docs/advanced.md +269 -0
  554. package/node_modules/@openclaw/fs-safe/docs/archive.md +843 -0
  555. package/node_modules/@openclaw/fs-safe/docs/assets/readme-banner.jpg +0 -0
  556. package/node_modules/@openclaw/fs-safe/docs/atomic.md +521 -0
  557. package/node_modules/@openclaw/fs-safe/docs/config.md +136 -0
  558. package/node_modules/@openclaw/fs-safe/docs/contributing.md +262 -0
  559. package/node_modules/@openclaw/fs-safe/docs/copy.md +197 -0
  560. package/node_modules/@openclaw/fs-safe/docs/creation.md +132 -0
  561. package/node_modules/@openclaw/fs-safe/docs/directory-identity.md +85 -0
  562. package/node_modules/@openclaw/fs-safe/docs/durability.md +438 -0
  563. package/node_modules/@openclaw/fs-safe/docs/entries.md +109 -0
  564. package/node_modules/@openclaw/fs-safe/docs/errors.md +240 -0
  565. package/node_modules/@openclaw/fs-safe/docs/file-contents.md +68 -0
  566. package/node_modules/@openclaw/fs-safe/docs/file-store.md +364 -0
  567. package/node_modules/@openclaw/fs-safe/docs/filename.md +110 -0
  568. package/node_modules/@openclaw/fs-safe/docs/guest.md +146 -0
  569. package/node_modules/@openclaw/fs-safe/docs/in-place-write.md +81 -0
  570. package/node_modules/@openclaw/fs-safe/docs/index.md +86 -0
  571. package/node_modules/@openclaw/fs-safe/docs/install-path.md +216 -0
  572. package/node_modules/@openclaw/fs-safe/docs/install.md +222 -0
  573. package/node_modules/@openclaw/fs-safe/docs/json-store.md +240 -0
  574. package/node_modules/@openclaw/fs-safe/docs/json.md +225 -0
  575. package/node_modules/@openclaw/fs-safe/docs/local-roots.md +150 -0
  576. package/node_modules/@openclaw/fs-safe/docs/migrating-to-0.5.md +205 -0
  577. package/node_modules/@openclaw/fs-safe/docs/migrating-to-0.6.md +48 -0
  578. package/node_modules/@openclaw/fs-safe/docs/mutation-policy-proof.md +69 -0
  579. package/node_modules/@openclaw/fs-safe/docs/native-helper.md +177 -0
  580. package/node_modules/@openclaw/fs-safe/docs/native.md +289 -0
  581. package/node_modules/@openclaw/fs-safe/docs/output.md +193 -0
  582. package/node_modules/@openclaw/fs-safe/docs/path-case.md +64 -0
  583. package/node_modules/@openclaw/fs-safe/docs/path-prefix.md +74 -0
  584. package/node_modules/@openclaw/fs-safe/docs/path-scope.md +159 -0
  585. package/node_modules/@openclaw/fs-safe/docs/path-suffix-aliases.md +204 -0
  586. package/node_modules/@openclaw/fs-safe/docs/path.md +219 -0
  587. package/node_modules/@openclaw/fs-safe/docs/permissions.md +286 -0
  588. package/node_modules/@openclaw/fs-safe/docs/positional-read.md +63 -0
  589. package/node_modules/@openclaw/fs-safe/docs/private-file-store.md +68 -0
  590. package/node_modules/@openclaw/fs-safe/docs/public-api.md +161 -0
  591. package/node_modules/@openclaw/fs-safe/docs/quickstart.md +154 -0
  592. package/node_modules/@openclaw/fs-safe/docs/reading.md +196 -0
  593. package/node_modules/@openclaw/fs-safe/docs/regular-file.md +193 -0
  594. package/node_modules/@openclaw/fs-safe/docs/root.md +545 -0
  595. package/node_modules/@openclaw/fs-safe/docs/secret-file.md +299 -0
  596. package/node_modules/@openclaw/fs-safe/docs/secure-file.md +112 -0
  597. package/node_modules/@openclaw/fs-safe/docs/security-model.md +269 -0
  598. package/node_modules/@openclaw/fs-safe/docs/sidecar-lock.md +595 -0
  599. package/node_modules/@openclaw/fs-safe/docs/staged-file.md +192 -0
  600. package/node_modules/@openclaw/fs-safe/docs/store.md +127 -0
  601. package/node_modules/@openclaw/fs-safe/docs/temp.md +760 -0
  602. package/node_modules/@openclaw/fs-safe/docs/test-hooks.md +110 -0
  603. package/node_modules/@openclaw/fs-safe/docs/testing.md +189 -0
  604. package/node_modules/@openclaw/fs-safe/docs/timing.md +123 -0
  605. package/node_modules/@openclaw/fs-safe/docs/types.md +211 -0
  606. package/node_modules/@openclaw/fs-safe/docs/walk.md +250 -0
  607. package/node_modules/@openclaw/fs-safe/docs/writing.md +641 -0
  608. package/node_modules/@openclaw/fs-safe/package.json +200 -0
  609. package/node_modules/@openclaw/fs-safe-darwin-arm64/fs-safe-native.node +0 -0
  610. package/node_modules/@openclaw/fs-safe-darwin-arm64/package.json +29 -0
  611. package/node_modules/@openclaw/fs-safe-darwin-x64/fs-safe-native.node +0 -0
  612. package/node_modules/@openclaw/fs-safe-darwin-x64/package.json +29 -0
  613. package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/fs-safe-native.node +0 -0
  614. package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/package.json +32 -0
  615. package/node_modules/@openclaw/fs-safe-linux-arm64-musl/fs-safe-native.node +0 -0
  616. package/node_modules/@openclaw/fs-safe-linux-arm64-musl/package.json +32 -0
  617. package/node_modules/@openclaw/fs-safe-linux-x64-gnu/fs-safe-native.node +0 -0
  618. package/node_modules/@openclaw/fs-safe-linux-x64-gnu/package.json +32 -0
  619. package/node_modules/@openclaw/fs-safe-linux-x64-musl/fs-safe-native.node +0 -0
  620. package/node_modules/@openclaw/fs-safe-linux-x64-musl/package.json +32 -0
  621. package/node_modules/@openclaw/fs-safe-win32-x64-msvc/fs-safe-native.node +0 -0
  622. package/node_modules/@openclaw/fs-safe-win32-x64-msvc/package.json +29 -0
  623. package/node_modules/core-util-is/LICENSE +19 -0
  624. package/node_modules/core-util-is/README.md +3 -0
  625. package/node_modules/core-util-is/lib/util.js +107 -0
  626. package/node_modules/core-util-is/package.json +38 -0
  627. package/node_modules/immediate/LICENSE.txt +20 -0
  628. package/node_modules/immediate/README.md +93 -0
  629. package/node_modules/immediate/dist/immediate.js +75 -0
  630. package/node_modules/immediate/dist/immediate.min.js +1 -0
  631. package/node_modules/immediate/lib/browser.js +69 -0
  632. package/node_modules/immediate/lib/index.js +73 -0
  633. package/node_modules/immediate/package.json +42 -0
  634. package/node_modules/inherits/LICENSE +16 -0
  635. package/node_modules/inherits/README.md +42 -0
  636. package/node_modules/inherits/inherits.js +9 -0
  637. package/node_modules/inherits/inherits_browser.js +27 -0
  638. package/node_modules/inherits/package.json +29 -0
  639. package/node_modules/isarray/.npmignore +1 -0
  640. package/node_modules/isarray/.travis.yml +4 -0
  641. package/node_modules/isarray/Makefile +6 -0
  642. package/node_modules/isarray/README.md +60 -0
  643. package/node_modules/isarray/component.json +19 -0
  644. package/node_modules/isarray/index.js +5 -0
  645. package/node_modules/isarray/package.json +45 -0
  646. package/node_modules/isarray/test.js +20 -0
  647. package/node_modules/jszip/.codeclimate.yml +16 -0
  648. package/node_modules/jszip/.editorconfig +8 -0
  649. package/node_modules/jszip/.eslintrc.js +43 -0
  650. package/node_modules/jszip/.github/FUNDING.yml +1 -0
  651. package/node_modules/jszip/.github/actions/setup/action.yml +23 -0
  652. package/node_modules/jszip/.github/workflows/benchmark.yml +38 -0
  653. package/node_modules/jszip/.github/workflows/main.yml +55 -0
  654. package/node_modules/jszip/CHANGES.md +210 -0
  655. package/node_modules/jszip/LICENSE.markdown +651 -0
  656. package/node_modules/jszip/README.markdown +33 -0
  657. package/node_modules/jszip/dist/jszip.js +11586 -0
  658. package/node_modules/jszip/dist/jszip.min.js +13 -0
  659. package/node_modules/jszip/index.d.ts +344 -0
  660. package/node_modules/jszip/lib/base64.js +106 -0
  661. package/node_modules/jszip/lib/compressedObject.js +74 -0
  662. package/node_modules/jszip/lib/compressions.js +14 -0
  663. package/node_modules/jszip/lib/crc32.js +77 -0
  664. package/node_modules/jszip/lib/defaults.js +11 -0
  665. package/node_modules/jszip/lib/external.js +18 -0
  666. package/node_modules/jszip/lib/flate.js +85 -0
  667. package/node_modules/jszip/lib/generate/ZipFileWorker.js +539 -0
  668. package/node_modules/jszip/lib/generate/index.js +57 -0
  669. package/node_modules/jszip/lib/index.js +55 -0
  670. package/node_modules/jszip/lib/license_header.js +11 -0
  671. package/node_modules/jszip/lib/load.js +88 -0
  672. package/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +74 -0
  673. package/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +42 -0
  674. package/node_modules/jszip/lib/nodejsUtils.js +57 -0
  675. package/node_modules/jszip/lib/object.js +384 -0
  676. package/node_modules/jszip/lib/readable-stream-browser.js +10 -0
  677. package/node_modules/jszip/lib/reader/ArrayReader.js +57 -0
  678. package/node_modules/jszip/lib/reader/DataReader.js +116 -0
  679. package/node_modules/jszip/lib/reader/NodeBufferReader.js +19 -0
  680. package/node_modules/jszip/lib/reader/StringReader.js +38 -0
  681. package/node_modules/jszip/lib/reader/Uint8ArrayReader.js +22 -0
  682. package/node_modules/jszip/lib/reader/readerFor.js +28 -0
  683. package/node_modules/jszip/lib/signature.js +7 -0
  684. package/node_modules/jszip/lib/stream/ConvertWorker.js +26 -0
  685. package/node_modules/jszip/lib/stream/Crc32Probe.js +24 -0
  686. package/node_modules/jszip/lib/stream/DataLengthProbe.js +29 -0
  687. package/node_modules/jszip/lib/stream/DataWorker.js +116 -0
  688. package/node_modules/jszip/lib/stream/GenericWorker.js +263 -0
  689. package/node_modules/jszip/lib/stream/StreamHelper.js +214 -0
  690. package/node_modules/jszip/lib/support.js +38 -0
  691. package/node_modules/jszip/lib/utf8.js +275 -0
  692. package/node_modules/jszip/lib/utils.js +510 -0
  693. package/node_modules/jszip/lib/zipEntries.js +261 -0
  694. package/node_modules/jszip/lib/zipEntry.js +293 -0
  695. package/node_modules/jszip/lib/zipObject.js +133 -0
  696. package/node_modules/jszip/package.json +67 -0
  697. package/node_modules/jszip/sponsors.md +21 -0
  698. package/node_modules/jszip/tsconfig.json +101 -0
  699. package/node_modules/jszip/vendor/FileSaver.js +247 -0
  700. package/node_modules/lie/README.md +62 -0
  701. package/node_modules/lie/dist/lie.js +350 -0
  702. package/node_modules/lie/dist/lie.min.js +1 -0
  703. package/node_modules/lie/dist/lie.polyfill.js +358 -0
  704. package/node_modules/lie/dist/lie.polyfill.min.js +1 -0
  705. package/node_modules/lie/lib/browser.js +273 -0
  706. package/node_modules/lie/lib/index.js +298 -0
  707. package/node_modules/lie/license.md +7 -0
  708. package/node_modules/lie/lie.d.ts +244 -0
  709. package/node_modules/lie/package.json +69 -0
  710. package/node_modules/lie/polyfill.js +4 -0
  711. package/node_modules/pako/CHANGELOG.md +164 -0
  712. package/node_modules/pako/LICENSE +21 -0
  713. package/node_modules/pako/README.md +191 -0
  714. package/node_modules/pako/dist/pako.js +6818 -0
  715. package/node_modules/pako/dist/pako.min.js +1 -0
  716. package/node_modules/pako/dist/pako_deflate.js +3997 -0
  717. package/node_modules/pako/dist/pako_deflate.min.js +1 -0
  718. package/node_modules/pako/dist/pako_inflate.js +3300 -0
  719. package/node_modules/pako/dist/pako_inflate.min.js +1 -0
  720. package/node_modules/pako/index.js +14 -0
  721. package/node_modules/pako/lib/deflate.js +400 -0
  722. package/node_modules/pako/lib/inflate.js +423 -0
  723. package/node_modules/pako/lib/utils/common.js +105 -0
  724. package/node_modules/pako/lib/utils/strings.js +187 -0
  725. package/node_modules/pako/lib/zlib/README +59 -0
  726. package/node_modules/pako/lib/zlib/adler32.js +51 -0
  727. package/node_modules/pako/lib/zlib/constants.js +68 -0
  728. package/node_modules/pako/lib/zlib/crc32.js +59 -0
  729. package/node_modules/pako/lib/zlib/deflate.js +1874 -0
  730. package/node_modules/pako/lib/zlib/gzheader.js +58 -0
  731. package/node_modules/pako/lib/zlib/inffast.js +345 -0
  732. package/node_modules/pako/lib/zlib/inflate.js +1556 -0
  733. package/node_modules/pako/lib/zlib/inftrees.js +343 -0
  734. package/node_modules/pako/lib/zlib/messages.js +32 -0
  735. package/node_modules/pako/lib/zlib/trees.js +1222 -0
  736. package/node_modules/pako/lib/zlib/zstream.js +47 -0
  737. package/node_modules/pako/package.json +44 -0
  738. package/node_modules/process-nextick-args/index.js +45 -0
  739. package/node_modules/process-nextick-args/license.md +19 -0
  740. package/node_modules/process-nextick-args/package.json +25 -0
  741. package/node_modules/process-nextick-args/readme.md +18 -0
  742. package/node_modules/readable-stream/.travis.yml +34 -0
  743. package/node_modules/readable-stream/CONTRIBUTING.md +38 -0
  744. package/node_modules/readable-stream/GOVERNANCE.md +136 -0
  745. package/node_modules/readable-stream/LICENSE +47 -0
  746. package/node_modules/readable-stream/README.md +58 -0
  747. package/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +60 -0
  748. package/node_modules/readable-stream/duplex-browser.js +1 -0
  749. package/node_modules/readable-stream/duplex.js +1 -0
  750. package/node_modules/readable-stream/lib/_stream_duplex.js +131 -0
  751. package/node_modules/readable-stream/lib/_stream_passthrough.js +47 -0
  752. package/node_modules/readable-stream/lib/_stream_readable.js +1019 -0
  753. package/node_modules/readable-stream/lib/_stream_transform.js +214 -0
  754. package/node_modules/readable-stream/lib/_stream_writable.js +685 -0
  755. package/node_modules/readable-stream/lib/internal/streams/BufferList.js +78 -0
  756. package/node_modules/readable-stream/lib/internal/streams/destroy.js +84 -0
  757. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  758. package/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  759. package/node_modules/readable-stream/package.json +52 -0
  760. package/node_modules/readable-stream/passthrough.js +1 -0
  761. package/node_modules/readable-stream/readable-browser.js +7 -0
  762. package/node_modules/readable-stream/readable.js +19 -0
  763. package/node_modules/readable-stream/transform.js +1 -0
  764. package/node_modules/readable-stream/writable-browser.js +1 -0
  765. package/node_modules/readable-stream/writable.js +8 -0
  766. package/node_modules/safe-buffer/LICENSE +21 -0
  767. package/node_modules/safe-buffer/README.md +584 -0
  768. package/node_modules/safe-buffer/index.d.ts +187 -0
  769. package/node_modules/safe-buffer/index.js +62 -0
  770. package/node_modules/safe-buffer/package.json +37 -0
  771. package/node_modules/setimmediate/LICENSE.txt +20 -0
  772. package/node_modules/setimmediate/package.json +30 -0
  773. package/node_modules/setimmediate/setImmediate.js +186 -0
  774. package/node_modules/string_decoder/.travis.yml +50 -0
  775. package/node_modules/string_decoder/LICENSE +48 -0
  776. package/node_modules/string_decoder/README.md +47 -0
  777. package/node_modules/string_decoder/lib/string_decoder.js +296 -0
  778. package/node_modules/string_decoder/package.json +31 -0
  779. package/node_modules/util-deprecate/History.md +16 -0
  780. package/node_modules/util-deprecate/LICENSE +24 -0
  781. package/node_modules/util-deprecate/README.md +53 -0
  782. package/node_modules/util-deprecate/browser.js +67 -0
  783. package/node_modules/util-deprecate/node.js +6 -0
  784. package/node_modules/util-deprecate/package.json +27 -0
  785. package/node_modules/zod/README.md +2 -2
  786. package/node_modules/zod/compile.cjs +19 -0
  787. package/node_modules/zod/index.cjs +19 -0
  788. package/node_modules/zod/locales/index.cjs +19 -0
  789. package/node_modules/zod/mini/index.cjs +19 -0
  790. package/node_modules/zod/package.json +8 -7
  791. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  792. package/node_modules/zod/src/v4/classic/external.ts +2 -0
  793. package/node_modules/zod/src/v4/classic/from-json-schema.ts +248 -25
  794. package/node_modules/zod/src/v4/classic/schemas.ts +243 -168
  795. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +60 -9
  796. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +6 -0
  797. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
  798. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +265 -0
  799. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
  800. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +9 -0
  801. package/node_modules/zod/src/v4/classic/tests/error.test.ts +130 -1
  802. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +157 -0
  803. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  804. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +40 -2
  805. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +27 -7
  806. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +88 -56
  807. package/node_modules/zod/src/v4/classic/tests/number.test.ts +39 -0
  808. package/node_modules/zod/src/v4/classic/tests/object.test.ts +56 -0
  809. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +3 -2
  810. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  811. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  812. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +46 -1
  813. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  814. package/node_modules/zod/src/v4/classic/tests/string.test.ts +95 -1
  815. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +33 -1
  816. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +234 -38
  817. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +569 -0
  818. package/node_modules/zod/src/v4/core/api.ts +44 -28
  819. package/node_modules/zod/src/v4/core/checks.ts +62 -102
  820. package/node_modules/zod/src/v4/core/compile.ts +218 -93
  821. package/node_modules/zod/src/v4/core/core.ts +1 -3
  822. package/node_modules/zod/src/v4/core/doc.ts +6 -2
  823. package/node_modules/zod/src/v4/core/errors.ts +3 -6
  824. package/node_modules/zod/src/v4/core/json-schema-generator.ts +2 -2
  825. package/node_modules/zod/src/v4/core/json-schema-processors.ts +185 -81
  826. package/node_modules/zod/src/v4/core/memoizer.ts +75 -28
  827. package/node_modules/zod/src/v4/core/parse.ts +37 -16
  828. package/node_modules/zod/src/v4/core/regexes.ts +14 -4
  829. package/node_modules/zod/src/v4/core/schemas.ts +296 -132
  830. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  831. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +35 -0
  832. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  833. package/node_modules/zod/src/v4/core/tests/compile.test.ts +399 -2
  834. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  835. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  836. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  837. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +118 -16
  838. package/node_modules/zod/src/v4/core/to-json-schema.ts +9 -7
  839. package/node_modules/zod/src/v4/core/util.ts +218 -147
  840. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  841. package/node_modules/zod/src/v4/locales/ar.ts +2 -0
  842. package/node_modules/zod/src/v4/locales/az.ts +2 -0
  843. package/node_modules/zod/src/v4/locales/be.ts +2 -0
  844. package/node_modules/zod/src/v4/locales/bg.ts +2 -0
  845. package/node_modules/zod/src/v4/locales/bn.ts +2 -0
  846. package/node_modules/zod/src/v4/locales/ca.ts +2 -0
  847. package/node_modules/zod/src/v4/locales/ckb.ts +2 -0
  848. package/node_modules/zod/src/v4/locales/cs.ts +2 -0
  849. package/node_modules/zod/src/v4/locales/da.ts +2 -0
  850. package/node_modules/zod/src/v4/locales/de.ts +2 -0
  851. package/node_modules/zod/src/v4/locales/el.ts +2 -0
  852. package/node_modules/zod/src/v4/locales/en.ts +2 -0
  853. package/node_modules/zod/src/v4/locales/eo.ts +2 -0
  854. package/node_modules/zod/src/v4/locales/es.ts +2 -0
  855. package/node_modules/zod/src/v4/locales/fa.ts +2 -0
  856. package/node_modules/zod/src/v4/locales/fi.ts +2 -0
  857. package/node_modules/zod/src/v4/locales/fr-CA.ts +2 -0
  858. package/node_modules/zod/src/v4/locales/fr.ts +2 -0
  859. package/node_modules/zod/src/v4/locales/gu.ts +2 -0
  860. package/node_modules/zod/src/v4/locales/he.ts +2 -0
  861. package/node_modules/zod/src/v4/locales/hi.ts +2 -0
  862. package/node_modules/zod/src/v4/locales/hr.ts +2 -0
  863. package/node_modules/zod/src/v4/locales/hu.ts +2 -0
  864. package/node_modules/zod/src/v4/locales/hy.ts +2 -0
  865. package/node_modules/zod/src/v4/locales/id.ts +2 -0
  866. package/node_modules/zod/src/v4/locales/index.ts +1 -0
  867. package/node_modules/zod/src/v4/locales/is.ts +2 -0
  868. package/node_modules/zod/src/v4/locales/it.ts +2 -0
  869. package/node_modules/zod/src/v4/locales/ja.ts +2 -0
  870. package/node_modules/zod/src/v4/locales/ka.ts +2 -0
  871. package/node_modules/zod/src/v4/locales/km.ts +2 -0
  872. package/node_modules/zod/src/v4/locales/kn.ts +2 -0
  873. package/node_modules/zod/src/v4/locales/ko.ts +2 -0
  874. package/node_modules/zod/src/v4/locales/lt.ts +2 -0
  875. package/node_modules/zod/src/v4/locales/mk.ts +2 -0
  876. package/node_modules/zod/src/v4/locales/ms.ts +2 -0
  877. package/node_modules/zod/src/v4/locales/ne.ts +2 -0
  878. package/node_modules/zod/src/v4/locales/nl.ts +2 -0
  879. package/node_modules/zod/src/v4/locales/nn.ts +2 -0
  880. package/node_modules/zod/src/v4/locales/no.ts +2 -0
  881. package/node_modules/zod/src/v4/locales/ota.ts +2 -0
  882. package/node_modules/zod/src/v4/locales/pl.ts +2 -0
  883. package/node_modules/zod/src/v4/locales/ps.ts +2 -0
  884. package/node_modules/zod/src/v4/locales/pt-BR.ts +2 -0
  885. package/node_modules/zod/src/v4/locales/pt.ts +2 -0
  886. package/node_modules/zod/src/v4/locales/ro.ts +2 -0
  887. package/node_modules/zod/src/v4/locales/ru.ts +2 -0
  888. package/node_modules/zod/src/v4/locales/sk.ts +2 -0
  889. package/node_modules/zod/src/v4/locales/sl.ts +2 -0
  890. package/node_modules/zod/src/v4/locales/sv.ts +2 -0
  891. package/node_modules/zod/src/v4/locales/ta.ts +2 -0
  892. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  893. package/node_modules/zod/src/v4/locales/th.ts +2 -0
  894. package/node_modules/zod/src/v4/locales/tk.ts +2 -0
  895. package/node_modules/zod/src/v4/locales/tr.ts +2 -0
  896. package/node_modules/zod/src/v4/locales/uk.ts +2 -0
  897. package/node_modules/zod/src/v4/locales/ur.ts +2 -0
  898. package/node_modules/zod/src/v4/locales/uz.ts +2 -0
  899. package/node_modules/zod/src/v4/locales/vi.ts +2 -0
  900. package/node_modules/zod/src/v4/locales/yo.ts +2 -0
  901. package/node_modules/zod/src/v4/locales/zh-CN.ts +2 -0
  902. package/node_modules/zod/src/v4/locales/zh-TW.ts +2 -0
  903. package/node_modules/zod/src/v4/mini/external.ts +2 -0
  904. package/node_modules/zod/src/v4/mini/schemas.ts +32 -7
  905. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +1 -1
  906. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  907. package/node_modules/zod/src/v4/mini/tests/index.test.ts +86 -0
  908. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  909. package/node_modules/zod/src/v4/mini/tests/string.test.ts +23 -0
  910. package/node_modules/zod/v3/ZodError.cjs +19 -0
  911. package/node_modules/zod/v3/errors.cjs +19 -0
  912. package/node_modules/zod/v3/external.cjs +19 -0
  913. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  914. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  915. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  916. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  917. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  918. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  919. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  920. package/node_modules/zod/v3/index.cjs +19 -0
  921. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  922. package/node_modules/zod/v3/types.cjs +19 -0
  923. package/node_modules/zod/v4/classic/checks.cjs +19 -0
  924. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  925. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  926. package/node_modules/zod/v4/classic/deep-partial.cjs +19 -0
  927. package/node_modules/zod/v4/classic/errors.cjs +19 -0
  928. package/node_modules/zod/v4/classic/external.cjs +22 -1
  929. package/node_modules/zod/v4/classic/external.d.cts +1 -1
  930. package/node_modules/zod/v4/classic/external.d.ts +1 -1
  931. package/node_modules/zod/v4/classic/external.js +1 -1
  932. package/node_modules/zod/v4/classic/from-json-schema.cjs +264 -24
  933. package/node_modules/zod/v4/classic/from-json-schema.js +245 -24
  934. package/node_modules/zod/v4/classic/in-out.cjs +19 -0
  935. package/node_modules/zod/v4/classic/index.cjs +19 -0
  936. package/node_modules/zod/v4/classic/iso.cjs +19 -0
  937. package/node_modules/zod/v4/classic/parse.cjs +19 -0
  938. package/node_modules/zod/v4/classic/schemas.cjs +100 -35
  939. package/node_modules/zod/v4/classic/schemas.d.cts +15 -1
  940. package/node_modules/zod/v4/classic/schemas.d.ts +15 -1
  941. package/node_modules/zod/v4/classic/schemas.js +77 -33
  942. package/node_modules/zod/v4/core/api.cjs +45 -22
  943. package/node_modules/zod/v4/core/api.d.cts +12 -6
  944. package/node_modules/zod/v4/core/api.d.ts +12 -6
  945. package/node_modules/zod/v4/core/api.js +25 -22
  946. package/node_modules/zod/v4/core/checks.cjs +51 -97
  947. package/node_modules/zod/v4/core/checks.d.cts +17 -1
  948. package/node_modules/zod/v4/core/checks.d.ts +17 -1
  949. package/node_modules/zod/v4/core/checks.js +31 -96
  950. package/node_modules/zod/v4/core/compile.cjs +173 -78
  951. package/node_modules/zod/v4/core/compile.d.cts +18 -4
  952. package/node_modules/zod/v4/core/compile.d.ts +18 -4
  953. package/node_modules/zod/v4/core/compile.js +154 -79
  954. package/node_modules/zod/v4/core/core.cjs +20 -1
  955. package/node_modules/zod/v4/core/core.js +1 -1
  956. package/node_modules/zod/v4/core/doc.cjs +26 -2
  957. package/node_modules/zod/v4/core/doc.js +7 -2
  958. package/node_modules/zod/v4/core/errors.cjs +21 -5
  959. package/node_modules/zod/v4/core/errors.js +2 -5
  960. package/node_modules/zod/v4/core/index.cjs +19 -0
  961. package/node_modules/zod/v4/core/json-schema-generator.cjs +20 -1
  962. package/node_modules/zod/v4/core/json-schema-generator.js +2 -2
  963. package/node_modules/zod/v4/core/json-schema-processors.cjs +188 -72
  964. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  965. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  966. package/node_modules/zod/v4/core/json-schema-processors.js +170 -74
  967. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  968. package/node_modules/zod/v4/core/memoizer.cjs +111 -23
  969. package/node_modules/zod/v4/core/memoizer.js +69 -23
  970. package/node_modules/zod/v4/core/parse.cjs +56 -16
  971. package/node_modules/zod/v4/core/parse.js +37 -16
  972. package/node_modules/zod/v4/core/regexes.cjs +31 -6
  973. package/node_modules/zod/v4/core/regexes.d.cts +3 -0
  974. package/node_modules/zod/v4/core/regexes.d.ts +3 -0
  975. package/node_modules/zod/v4/core/regexes.js +10 -4
  976. package/node_modules/zod/v4/core/registries.cjs +19 -0
  977. package/node_modules/zod/v4/core/schemas.cjs +302 -114
  978. package/node_modules/zod/v4/core/schemas.d.cts +28 -8
  979. package/node_modules/zod/v4/core/schemas.d.ts +28 -8
  980. package/node_modules/zod/v4/core/schemas.js +279 -113
  981. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  982. package/node_modules/zod/v4/core/to-json-schema.cjs +28 -7
  983. package/node_modules/zod/v4/core/to-json-schema.d.cts +4 -3
  984. package/node_modules/zod/v4/core/to-json-schema.d.ts +4 -3
  985. package/node_modules/zod/v4/core/to-json-schema.js +7 -6
  986. package/node_modules/zod/v4/core/util.cjs +177 -143
  987. package/node_modules/zod/v4/core/util.d.cts +25 -4
  988. package/node_modules/zod/v4/core/util.d.ts +25 -4
  989. package/node_modules/zod/v4/core/util.js +156 -143
  990. package/node_modules/zod/v4/core/versions.cjs +21 -2
  991. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  992. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  993. package/node_modules/zod/v4/core/versions.js +2 -2
  994. package/node_modules/zod/v4/core/visit.cjs +19 -0
  995. package/node_modules/zod/v4/index.cjs +19 -0
  996. package/node_modules/zod/v4/locales/ar.cjs +2 -0
  997. package/node_modules/zod/v4/locales/ar.js +2 -0
  998. package/node_modules/zod/v4/locales/az.cjs +2 -0
  999. package/node_modules/zod/v4/locales/az.js +2 -0
  1000. package/node_modules/zod/v4/locales/be.cjs +2 -0
  1001. package/node_modules/zod/v4/locales/be.js +2 -0
  1002. package/node_modules/zod/v4/locales/bg.cjs +2 -0
  1003. package/node_modules/zod/v4/locales/bg.js +2 -0
  1004. package/node_modules/zod/v4/locales/bn.cjs +2 -0
  1005. package/node_modules/zod/v4/locales/bn.js +2 -0
  1006. package/node_modules/zod/v4/locales/ca.cjs +2 -0
  1007. package/node_modules/zod/v4/locales/ca.js +2 -0
  1008. package/node_modules/zod/v4/locales/ckb.cjs +2 -0
  1009. package/node_modules/zod/v4/locales/ckb.js +2 -0
  1010. package/node_modules/zod/v4/locales/cs.cjs +2 -0
  1011. package/node_modules/zod/v4/locales/cs.js +2 -0
  1012. package/node_modules/zod/v4/locales/da.cjs +2 -0
  1013. package/node_modules/zod/v4/locales/da.js +2 -0
  1014. package/node_modules/zod/v4/locales/de.cjs +2 -0
  1015. package/node_modules/zod/v4/locales/de.js +2 -0
  1016. package/node_modules/zod/v4/locales/el.cjs +2 -0
  1017. package/node_modules/zod/v4/locales/el.js +2 -0
  1018. package/node_modules/zod/v4/locales/en.cjs +2 -0
  1019. package/node_modules/zod/v4/locales/en.js +2 -0
  1020. package/node_modules/zod/v4/locales/eo.cjs +2 -0
  1021. package/node_modules/zod/v4/locales/eo.js +2 -0
  1022. package/node_modules/zod/v4/locales/es.cjs +2 -0
  1023. package/node_modules/zod/v4/locales/es.js +2 -0
  1024. package/node_modules/zod/v4/locales/fa.cjs +2 -0
  1025. package/node_modules/zod/v4/locales/fa.js +2 -0
  1026. package/node_modules/zod/v4/locales/fi.cjs +2 -0
  1027. package/node_modules/zod/v4/locales/fi.js +2 -0
  1028. package/node_modules/zod/v4/locales/fr-CA.cjs +2 -0
  1029. package/node_modules/zod/v4/locales/fr-CA.js +2 -0
  1030. package/node_modules/zod/v4/locales/fr.cjs +2 -0
  1031. package/node_modules/zod/v4/locales/fr.js +2 -0
  1032. package/node_modules/zod/v4/locales/gu.cjs +2 -0
  1033. package/node_modules/zod/v4/locales/gu.js +2 -0
  1034. package/node_modules/zod/v4/locales/he.cjs +2 -0
  1035. package/node_modules/zod/v4/locales/he.js +2 -0
  1036. package/node_modules/zod/v4/locales/hi.cjs +2 -0
  1037. package/node_modules/zod/v4/locales/hi.js +2 -0
  1038. package/node_modules/zod/v4/locales/hr.cjs +2 -0
  1039. package/node_modules/zod/v4/locales/hr.js +2 -0
  1040. package/node_modules/zod/v4/locales/hu.cjs +2 -0
  1041. package/node_modules/zod/v4/locales/hu.js +2 -0
  1042. package/node_modules/zod/v4/locales/hy.cjs +2 -0
  1043. package/node_modules/zod/v4/locales/hy.js +2 -0
  1044. package/node_modules/zod/v4/locales/id.cjs +2 -0
  1045. package/node_modules/zod/v4/locales/id.js +2 -0
  1046. package/node_modules/zod/v4/locales/index.cjs +22 -1
  1047. package/node_modules/zod/v4/locales/index.d.cts +1 -0
  1048. package/node_modules/zod/v4/locales/index.d.ts +1 -0
  1049. package/node_modules/zod/v4/locales/index.js +1 -0
  1050. package/node_modules/zod/v4/locales/is.cjs +2 -0
  1051. package/node_modules/zod/v4/locales/is.js +2 -0
  1052. package/node_modules/zod/v4/locales/it.cjs +2 -0
  1053. package/node_modules/zod/v4/locales/it.js +2 -0
  1054. package/node_modules/zod/v4/locales/ja.cjs +2 -0
  1055. package/node_modules/zod/v4/locales/ja.js +2 -0
  1056. package/node_modules/zod/v4/locales/ka.cjs +2 -0
  1057. package/node_modules/zod/v4/locales/ka.js +2 -0
  1058. package/node_modules/zod/v4/locales/km.cjs +2 -0
  1059. package/node_modules/zod/v4/locales/km.js +2 -0
  1060. package/node_modules/zod/v4/locales/kn.cjs +2 -0
  1061. package/node_modules/zod/v4/locales/kn.js +2 -0
  1062. package/node_modules/zod/v4/locales/ko.cjs +2 -0
  1063. package/node_modules/zod/v4/locales/ko.js +2 -0
  1064. package/node_modules/zod/v4/locales/lt.cjs +2 -0
  1065. package/node_modules/zod/v4/locales/lt.js +2 -0
  1066. package/node_modules/zod/v4/locales/mk.cjs +2 -0
  1067. package/node_modules/zod/v4/locales/mk.js +2 -0
  1068. package/node_modules/zod/v4/locales/ms.cjs +2 -0
  1069. package/node_modules/zod/v4/locales/ms.js +2 -0
  1070. package/node_modules/zod/v4/locales/ne.cjs +2 -0
  1071. package/node_modules/zod/v4/locales/ne.js +2 -0
  1072. package/node_modules/zod/v4/locales/nl.cjs +2 -0
  1073. package/node_modules/zod/v4/locales/nl.js +2 -0
  1074. package/node_modules/zod/v4/locales/nn.cjs +2 -0
  1075. package/node_modules/zod/v4/locales/nn.js +2 -0
  1076. package/node_modules/zod/v4/locales/no.cjs +2 -0
  1077. package/node_modules/zod/v4/locales/no.js +2 -0
  1078. package/node_modules/zod/v4/locales/ota.cjs +2 -0
  1079. package/node_modules/zod/v4/locales/ota.js +2 -0
  1080. package/node_modules/zod/v4/locales/pl.cjs +2 -0
  1081. package/node_modules/zod/v4/locales/pl.js +2 -0
  1082. package/node_modules/zod/v4/locales/ps.cjs +2 -0
  1083. package/node_modules/zod/v4/locales/ps.js +2 -0
  1084. package/node_modules/zod/v4/locales/pt-BR.cjs +2 -0
  1085. package/node_modules/zod/v4/locales/pt-BR.js +2 -0
  1086. package/node_modules/zod/v4/locales/pt.cjs +2 -0
  1087. package/node_modules/zod/v4/locales/pt.js +2 -0
  1088. package/node_modules/zod/v4/locales/ro.cjs +2 -0
  1089. package/node_modules/zod/v4/locales/ro.js +2 -0
  1090. package/node_modules/zod/v4/locales/ru.cjs +2 -0
  1091. package/node_modules/zod/v4/locales/ru.js +2 -0
  1092. package/node_modules/zod/v4/locales/sk.cjs +2 -0
  1093. package/node_modules/zod/v4/locales/sk.js +2 -0
  1094. package/node_modules/zod/v4/locales/sl.cjs +2 -0
  1095. package/node_modules/zod/v4/locales/sl.js +2 -0
  1096. package/node_modules/zod/v4/locales/sv.cjs +2 -0
  1097. package/node_modules/zod/v4/locales/sv.js +2 -0
  1098. package/node_modules/zod/v4/locales/ta.cjs +2 -0
  1099. package/node_modules/zod/v4/locales/ta.js +2 -0
  1100. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  1101. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  1102. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  1103. package/node_modules/zod/v4/locales/tg.js +117 -0
  1104. package/node_modules/zod/v4/locales/th.cjs +2 -0
  1105. package/node_modules/zod/v4/locales/th.js +2 -0
  1106. package/node_modules/zod/v4/locales/tk.cjs +2 -0
  1107. package/node_modules/zod/v4/locales/tk.js +2 -0
  1108. package/node_modules/zod/v4/locales/tr.cjs +2 -0
  1109. package/node_modules/zod/v4/locales/tr.js +2 -0
  1110. package/node_modules/zod/v4/locales/uk.cjs +2 -0
  1111. package/node_modules/zod/v4/locales/uk.js +2 -0
  1112. package/node_modules/zod/v4/locales/ur.cjs +2 -0
  1113. package/node_modules/zod/v4/locales/ur.js +2 -0
  1114. package/node_modules/zod/v4/locales/uz.cjs +2 -0
  1115. package/node_modules/zod/v4/locales/uz.js +2 -0
  1116. package/node_modules/zod/v4/locales/vi.cjs +2 -0
  1117. package/node_modules/zod/v4/locales/vi.js +2 -0
  1118. package/node_modules/zod/v4/locales/yo.cjs +2 -0
  1119. package/node_modules/zod/v4/locales/yo.js +2 -0
  1120. package/node_modules/zod/v4/locales/zh-CN.cjs +2 -0
  1121. package/node_modules/zod/v4/locales/zh-CN.js +2 -0
  1122. package/node_modules/zod/v4/locales/zh-TW.cjs +2 -0
  1123. package/node_modules/zod/v4/locales/zh-TW.js +2 -0
  1124. package/node_modules/zod/v4/mini/checks.cjs +19 -0
  1125. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  1126. package/node_modules/zod/v4/mini/deep-partial.cjs +19 -0
  1127. package/node_modules/zod/v4/mini/external.cjs +22 -1
  1128. package/node_modules/zod/v4/mini/external.d.cts +1 -1
  1129. package/node_modules/zod/v4/mini/external.d.ts +1 -1
  1130. package/node_modules/zod/v4/mini/external.js +1 -1
  1131. package/node_modules/zod/v4/mini/in-out.cjs +19 -0
  1132. package/node_modules/zod/v4/mini/index.cjs +19 -0
  1133. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  1134. package/node_modules/zod/v4/mini/parse.cjs +19 -0
  1135. package/node_modules/zod/v4/mini/schemas.cjs +44 -8
  1136. package/node_modules/zod/v4/mini/schemas.d.cts +6 -1
  1137. package/node_modules/zod/v4/mini/schemas.d.ts +6 -1
  1138. package/node_modules/zod/v4/mini/schemas.js +21 -6
  1139. package/node_modules/zod/v4-mini/index.cjs +19 -0
  1140. package/package.json +7 -5
@@ -0,0 +1,1443 @@
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ var r, s = 0;
30
+ function next() {
31
+ while (r = env.stack.pop()) {
32
+ try {
33
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
+ if (r.dispose) {
35
+ var result = r.dispose.call(r.value);
36
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
+ }
38
+ else s |= 1;
39
+ }
40
+ catch (e) {
41
+ fail(e);
42
+ }
43
+ }
44
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
+ if (env.hasError) throw env.error;
46
+ }
47
+ return next();
48
+ };
49
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
+ var e = new Error(message);
51
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
+ });
53
+ import { randomUUID } from "node:crypto";
54
+ import fsSync, { constants as fsConstants } from "node:fs";
55
+ import fs from "node:fs/promises";
56
+ import path from "node:path";
57
+ import { normalizeMaxBytes } from "./byte-budget.js";
58
+ import { assertCopySourceCurrent, resolveFileCopyCloneMode } from "./copy-file-input.js";
59
+ import { assertPrivateFileCreationAvailable, resolveCreationPermissions } from "./creation-boundary.js";
60
+ import { assertAsyncDirectoryGuard, assertSyncDirectoryGuard, createAsyncDirectoryGuard, createNearestExistingDirectoryGuard } from "./directory-guard.js";
61
+ import { FsSafeError } from "./errors.js";
62
+ import { syncDirectoryBestEffort } from "./directory-durability.js";
63
+ import { withAsyncDirectoryGuards } from "./guarded-mutation.js";
64
+ import { openLocalFileDescriptor } from "./local-file-descriptor.js";
65
+ import { assertMutationNotDenied, mergeDenyMutationPolicies } from "./deny-mutations.js";
66
+ import { resolveOpenedFileRealPathForFd } from "./opened-realpath.js";
67
+ import { openedPathResolutionError, recordExclusiveCreateFailure, recordOpenedFileFailure } from "./opened-file-failure.js";
68
+ import { runPinnedWriteHelper, runPinnedWriteWithRenamePolicy } from "./pinned-write.js";
69
+ import { preparePinnedWriteMutationAdmission, snapshotPinnedMutationPolicy } from "./pinned-mutation-admission.js";
70
+ import { getNativeBinding } from "./native.js";
71
+ import { validatePinnedRelativePath } from "./pinned-operation.js";
72
+ import { PATH_ALIAS_POLICIES } from "./path-policy.js";
73
+ import { assertNoNulPathInput, hasNodeErrorCode, isNotFoundPathError, isSymlinkOpenError, } from "./path.js";
74
+ import { readOpenedFileSafely } from "./read-opened-file.js";
75
+ import { cleanupPinnedFilePath } from "./file-cleanup.js";
76
+ import { sameFileIdentity } from "./file-identity.js";
77
+ import { removePathIfIdentityUnchanged } from "./replace-file-temp-owner.js";
78
+ import { realpathSync } from "./realpath.js";
79
+ import { mkdirPathFallback, prepareRootWriteTarget, tryMkdirAtExactParent } from "./root-directory-creation.js";
80
+ import { isNonRegularWriteOpenError, resolveNonblockingWriteFlag } from "./write-open-flags.js";
81
+ import { resolveRootPath, resolveRootPathSync, resolveRootPathForRemoval } from "./root-path.js";
82
+ import { RemovalPathReceipts } from "./root-remove-receipt.js";
83
+ import { admitPathInsideRoot } from "./root-boundary.js";
84
+ import { listDirectoryPath, openRootDirectoryListing } from "./root-directory-list.js";
85
+ import { statResolvedPathInRoot } from "./root-path-stat.js";
86
+ import { entriesInRoot } from "./root-entries.js";
87
+ import { assertMoveMutationAllowed } from "./root-move-preflight.js";
88
+ import { assertRootIdentityCurrent, assertRootIdentityCurrentSync, assertValidRootDestinationPath, assertValidRootRelativePath, ensureTrailingSep, expandRelativePathWithHome, resolvePathInRoot, resolveRootContext, rootRelativeReadPath, } from "./root-context.js";
89
+ import { errorCauseOptions, fileNotFoundError, hardlinkedPathNotAllowedError, isAlreadyExistsError, normalizePinnedPathError, normalizePinnedWriteError, outsideWorkspaceError, } from "./root-errors.js";
90
+ import { getFsSafeTestHooks } from "./test-hooks.js";
91
+ import { stringifyJsonDocument } from "./json-stringify.js";
92
+ import { walkRoot } from "./root-walk.js";
93
+ import { registerTempPathForExit } from "./temp-cleanup.js";
94
+ import { removePathInRootFallback, validateRemoveOptions } from "./root-remove.js";
95
+ import { serializePathWrite } from "./write-queue.js";
96
+ import { verifyAtomicWriteResult } from "./root-write-verification.js";
97
+ import { assertRootWritePathSelectionSync, assertRootWriteSelectionSync, createRootWriteSelectionForFd, prepareGuardedRootWritePathSelection, resolveGuardedWritePathInRoot, resolveGuardedWriteTargetInRoot, resolvePinnedWriteTargetInRoot, refreshRetainedRootWriteAdmission, refreshRootWritePathSelection, } from "./root-write-admission.js";
98
+ import { prepareSharedRootWriteTarget } from "./root-write-complete-parent.js";
99
+ import { finishRootFallbackWrite } from "./root-write-publication.js";
100
+ import { withRootFallbackCompatibilityLock } from "./root-write-compatibility.js";
101
+ import { assertRootFallbackWritePath } from "./root-write-lock-binding.js";
102
+ import { inspectFileIdentity, inspectFileIdentitySync } from "./strict-file-identity.js";
103
+ import { admitMoveSourceStat, movePathNoReplaceNative } from "./root-move-noreplace.js";
104
+ import { admitRootReadHandle, inspectOpenedPathIdentitySync } from "./root-read-admission.js";
105
+ import { createCopyPublicationObserver, onCopyPublication, onCopySourceAdmission } from "./copy-publication.js";
106
+ import { writeAllToFile } from "./write-file-handle.js";
107
+ import { createInputOptions, rethrowCreateInputError, rootWriteInput } from "./root-create-input.js";
108
+ import { assertFinalSymlinkRejected, mutationSymlinkResolution, readSymlinkResolution } from "./root-symlink-policy.js";
109
+ import { assertNoWindowsPathAlias, resolvePathPreservingWindowsRoot } from "./windows-path-alias.js";
110
+ import { resolvePinnedObservedPathInRoot } from "./root-observed-path.js";
111
+ import { registerFileLockSyncRootAdapter } from "./file-lock-sync-root.js";
112
+ import { mergeReadOptions, readDefaults, } from "./root-options.js";
113
+ import { composeMutationAssertions, MutationAuthorityError, rethrowMutationAuthorityError } from "./mutation-authority.js";
114
+ export { DEFAULT_ROOT_MAX_BYTES } from "./root-options.js";
115
+ export { resolveOpenedFileRealPathForHandle } from "./opened-realpath.js";
116
+ function logWarn(message) {
117
+ if (process.env.FS_SAFE_DEBUG_WARNINGS === "1") {
118
+ console.warn(message);
119
+ }
120
+ }
121
+ const SUPPORTS_NOFOLLOW = process.platform !== "win32" && "O_NOFOLLOW" in fsConstants;
122
+ const OPEN_WRITE_EXISTING_FLAGS = fsConstants.O_WRONLY | (SUPPORTS_NOFOLLOW ? fsConstants.O_NOFOLLOW : 0) |
123
+ resolveNonblockingWriteFlag();
124
+ const OPEN_WRITE_CREATE_FLAGS = fsConstants.O_WRONLY |
125
+ fsConstants.O_CREAT |
126
+ fsConstants.O_EXCL |
127
+ (SUPPORTS_NOFOLLOW ? fsConstants.O_NOFOLLOW : 0);
128
+ const OPEN_APPEND_EXISTING_FLAGS = fsConstants.O_RDWR | fsConstants.O_APPEND | (SUPPORTS_NOFOLLOW ? fsConstants.O_NOFOLLOW : 0) |
129
+ resolveNonblockingWriteFlag();
130
+ const OPEN_APPEND_CREATE_FLAGS = fsConstants.O_RDWR |
131
+ fsConstants.O_APPEND |
132
+ fsConstants.O_CREAT |
133
+ fsConstants.O_EXCL |
134
+ (SUPPORTS_NOFOLLOW ? fsConstants.O_NOFOLLOW : 0);
135
+ function openResult(params) {
136
+ return {
137
+ handle: params.handle,
138
+ containment: "best-effort",
139
+ realPath: params.realPath,
140
+ stat: params.stat,
141
+ [Symbol.asyncDispose]: () => params.handle.close().catch(() => undefined),
142
+ };
143
+ }
144
+ async function openVerifiedLocalFile(filePath, options) {
145
+ const fsSafeTestHooks = getFsSafeTestHooks();
146
+ const { handle, stat, identity, preOpenStat } = await openLocalFileDescriptor(filePath, options);
147
+ try {
148
+ const inspectPathIdentity = async (inspect) => {
149
+ try {
150
+ return await inspectFileIdentity(inspect, identity);
151
+ }
152
+ catch (error) {
153
+ const failure = isNotFoundPathError(error) ? openedPathResolutionError(fileNotFoundError()) : error;
154
+ if (stat.nlink <= 1 && (!preOpenStat || preOpenStat.nlink <= 1n)) {
155
+ await recordOpenedFileFailure(failure, handle, filePath, identity);
156
+ }
157
+ throw failure;
158
+ }
159
+ };
160
+ await inspectPathIdentity(async () => inspectOpenedPathIdentitySync(filePath, options?.symlinks));
161
+ await fsSafeTestHooks?.afterOpenedPathIdentityCheck?.(filePath, handle);
162
+ const resolved = await resolveOpenedFileRealPathForFd(handle.fd, identity, filePath)
163
+ .catch(async (error) => {
164
+ if (stat.nlink <= 1 && (!preOpenStat || preOpenStat.nlink <= 1n)) {
165
+ await recordOpenedFileFailure(error, handle, filePath, identity);
166
+ }
167
+ throw error;
168
+ });
169
+ const { realPath } = resolved;
170
+ assertNoWindowsPathAlias(realPath, "filesystem", "resolved file path uses a Windows filesystem namespace alias");
171
+ let resolvedStat = resolved.stat;
172
+ await inspectPathIdentity(async () => {
173
+ // Reuse the post-realpath observation; unknown Windows identities still
174
+ // get a fresh observation on inspectFileIdentity's retry.
175
+ const realStat = resolvedStat ?? fsSync.statSync(realPath, { bigint: true });
176
+ resolvedStat = undefined;
177
+ if (options?.hardlinks === "reject" && realStat.nlink > 1n) {
178
+ throw hardlinkedPathNotAllowedError();
179
+ }
180
+ return realStat;
181
+ });
182
+ return { opened: openResult({ handle, realPath, stat }), identity };
183
+ }
184
+ catch (err) {
185
+ await handle.close().catch(() => { });
186
+ throw err;
187
+ }
188
+ }
189
+ export class RootHandle {
190
+ context;
191
+ rootDir;
192
+ rootReal;
193
+ rootWithSep;
194
+ defaults;
195
+ constructor(context, defaults = {}) {
196
+ this.context = context;
197
+ this.rootDir = context.rootDir;
198
+ this.rootReal = context.rootReal;
199
+ this.rootWithSep = context.rootWithSep;
200
+ this.defaults = defaults;
201
+ registerFileLockSyncRootAdapter(this, context, defaults);
202
+ }
203
+ mutationOptions(options) {
204
+ return {
205
+ ...options,
206
+ assertBeforeMutation: composeMutationAssertions(this.defaults.assertBeforeMutation, options.assertBeforeMutation),
207
+ mutationSymlinks: options.mutationSymlinks ?? this.defaults.mutationSymlinks,
208
+ denyMutations: mergeDenyMutationPolicies(this.defaults.denyMutations, options.denyMutations),
209
+ };
210
+ }
211
+ async resolve(relativePath) {
212
+ assertValidRootDestinationPath(relativePath);
213
+ return (await resolvePathInRoot(this.context, relativePath, { allowFinalSymlink: true, resolveCanonical: true })).resolved;
214
+ }
215
+ async open(relativePath, options = {}) {
216
+ return await openFileInRoot(this.context, {
217
+ ...readDefaults(this.defaults),
218
+ ...options,
219
+ relativePath,
220
+ });
221
+ }
222
+ async read(relativePath, options = {}) {
223
+ return await readFileInRoot(this.context, {
224
+ relativePath,
225
+ ...mergeReadOptions(this.defaults, options),
226
+ });
227
+ }
228
+ async readBytes(relativePath, options = {}) {
229
+ return (await this.read(relativePath, options)).buffer;
230
+ }
231
+ async readText(relativePath, options = {}) {
232
+ const { encoding = "utf8", ...readOptions } = options;
233
+ return (await this.read(relativePath, readOptions)).buffer.toString(encoding);
234
+ }
235
+ async readJson(relativePath, options = {}) {
236
+ return JSON.parse(await this.readText(relativePath, options));
237
+ }
238
+ async readAbsolute(filePath, options = {}) {
239
+ const context = this.context;
240
+ const readOptions = mergeReadOptions(this.defaults, options);
241
+ return await readFileInRoot(context, {
242
+ relativePath: rootRelativeReadPath(context, filePath),
243
+ ...readOptions,
244
+ });
245
+ }
246
+ reader(options = {}) {
247
+ return async (filePath) => {
248
+ return (await this.readAbsolute(filePath, options)).buffer;
249
+ };
250
+ }
251
+ async openWritable(relativePath, options = {}) {
252
+ assertValidRootDestinationPath(relativePath);
253
+ const writeMode = options.writeMode ?? "replace";
254
+ const target = await openWritableFileInRoot(this.context, {
255
+ mkdir: this.defaults.mkdir,
256
+ mode: this.defaults.mode,
257
+ ...this.mutationOptions(options),
258
+ relativePath,
259
+ expectedWritePath: undefined,
260
+ append: writeMode === "append",
261
+ truncateExisting: writeMode === "replace",
262
+ }).catch(rethrowMutationAuthorityError);
263
+ return target.opened;
264
+ }
265
+ async append(relativePath, data, options = {}) {
266
+ assertValidRootDestinationPath(relativePath);
267
+ await appendFileInRoot(this.context, {
268
+ mkdir: this.defaults.mkdir,
269
+ mode: this.defaults.mode,
270
+ ...this.mutationOptions(options),
271
+ relativePath,
272
+ data,
273
+ durable: options.durable ?? this.defaults.durable ?? true,
274
+ }).catch(rethrowMutationAuthorityError);
275
+ }
276
+ async remove(relativePath, options = {}) {
277
+ assertValidRootRelativePath(relativePath);
278
+ validateRemoveOptions(options);
279
+ options.signal?.throwIfAborted();
280
+ await removePathInRoot(this.context, {
281
+ ...this.mutationOptions(options),
282
+ relativePath,
283
+ }).catch(rethrowMutationAuthorityError);
284
+ }
285
+ async mkdir(relativePath, options = {}) {
286
+ assertValidRootDestinationPath(relativePath);
287
+ await mkdirPathInRoot(this.context, {
288
+ ...this.mutationOptions(options),
289
+ relativePath,
290
+ allowRoot: false,
291
+ }).catch(rethrowMutationAuthorityError);
292
+ }
293
+ async ensureRoot(options = {}) {
294
+ await mkdirPathInRoot(this.context, {
295
+ ...this.mutationOptions(options),
296
+ relativePath: "",
297
+ allowRoot: true,
298
+ }).catch(rethrowMutationAuthorityError);
299
+ }
300
+ async write(relativePath, data, options = {}) {
301
+ assertValidRootDestinationPath(relativePath);
302
+ await writeFileInRoot(this.context, {
303
+ mkdir: this.defaults.mkdir,
304
+ mode: this.defaults.mode,
305
+ renameIdentity: this.defaults.renameIdentity,
306
+ ...this.mutationOptions(options),
307
+ atomic: undefined,
308
+ private: undefined,
309
+ strictFileSync: undefined,
310
+ relativePath,
311
+ data,
312
+ durable: options.durable ?? this.defaults.durable ?? true,
313
+ }).catch(rethrowMutationAuthorityError);
314
+ }
315
+ async create(relativePath, data, options = {}) {
316
+ assertValidRootDestinationPath(relativePath);
317
+ const durable = options.durable ?? this.defaults.durable ?? true;
318
+ await writeFileInRoot(this.context, {
319
+ mkdir: this.defaults.mkdir,
320
+ mode: this.defaults.mode,
321
+ ...this.mutationOptions(createInputOptions(data, options, this.defaults.maxBytes)),
322
+ relativePath,
323
+ data,
324
+ durable: durable !== false,
325
+ strictFileSync: durable === "file",
326
+ overwrite: false,
327
+ }).catch(rethrowMutationAuthorityError).catch(rethrowCreateInputError);
328
+ }
329
+ async writeJson(relativePath, data, options = {}) {
330
+ const { replacer, space, trailingNewline = true, ...writeOptions } = options;
331
+ const json = stringifyJsonDocument(data, replacer, space);
332
+ await this.write(relativePath, trailingNewline ? `${json}\n` : json, writeOptions);
333
+ }
334
+ async createJson(relativePath, data, options = {}) {
335
+ const { replacer, space, trailingNewline = true, ...writeOptions } = options;
336
+ const json = stringifyJsonDocument(data, replacer, space);
337
+ await this.create(relativePath, trailingNewline ? `${json}\n` : json, writeOptions);
338
+ }
339
+ async copyIn(relativePath, source, options = {}) {
340
+ options.signal?.throwIfAborted();
341
+ assertValidRootDestinationPath(relativePath);
342
+ const { maxBytes, ...copyOptions } = this.mutationOptions(options);
343
+ const copySource = typeof source === "string" ? source : { root: source.root, relativePath: source.relativePath };
344
+ await copyFileInRoot(this.context, {
345
+ maxBytes: normalizeMaxBytes(maxBytes, { defaultValue: this.defaults.maxBytes }),
346
+ mkdir: this.defaults.mkdir,
347
+ ...copyOptions,
348
+ source: copySource,
349
+ relativePath,
350
+ mode: options.mode ?? this.defaults.mode,
351
+ durable: options.durable ?? this.defaults.durable ?? true,
352
+ verifyPublished: options[onCopyPublication],
353
+ admitSource: options[onCopySourceAdmission],
354
+ }).catch(rethrowMutationAuthorityError);
355
+ }
356
+ async exists(relativePath) {
357
+ try {
358
+ await this.stat(relativePath);
359
+ return true;
360
+ }
361
+ catch (err) {
362
+ if (err instanceof FsSafeError && err.code === "not-found") {
363
+ return false;
364
+ }
365
+ throw err;
366
+ }
367
+ }
368
+ async stat(relativePath) {
369
+ assertValidRootRelativePath(relativePath);
370
+ validatePinnedRelativePath(relativePath);
371
+ return await statPathFallback(this.context, relativePath);
372
+ }
373
+ async list(relativePath, options = {}) {
374
+ assertValidRootRelativePath(relativePath);
375
+ validatePinnedRelativePath(relativePath);
376
+ return await listPathFallback(this.context, relativePath, options.withFileTypes === true);
377
+ }
378
+ async move(fromRelative, toRelative, options = {}) {
379
+ assertValidRootRelativePath(fromRelative);
380
+ assertValidRootDestinationPath(toRelative);
381
+ validatePinnedRelativePath(fromRelative);
382
+ validatePinnedRelativePath(toRelative);
383
+ const mutationOptions = this.mutationOptions(options);
384
+ const { assertBeforeMutation } = mutationOptions;
385
+ const { denyMutations, mutationSymlinks } = snapshotPinnedMutationPolicy(mutationOptions.denyMutations, mutationOptions.mutationSymlinks) ?? {};
386
+ const overwrite = options.overwrite ?? false;
387
+ await assertMoveMutationAllowed(this.context, {
388
+ fromRelative,
389
+ toRelative,
390
+ denyMutations,
391
+ });
392
+ await movePathFallback(this.context, {
393
+ fromRelative,
394
+ denyMutations,
395
+ assertBeforeMutation,
396
+ mutationSymlinks,
397
+ overwrite,
398
+ toRelative,
399
+ }).catch(rethrowMutationAuthorityError);
400
+ }
401
+ entries(relativePath, options = {}) {
402
+ assertValidRootRelativePath(relativePath);
403
+ return entriesInRoot(this.context, relativePath, {
404
+ ...options,
405
+ symlinks: options.symlinks ?? this.defaults.symlinks,
406
+ });
407
+ }
408
+ walk(relativePath, options) {
409
+ assertValidRootRelativePath(relativePath);
410
+ return walkRoot({
411
+ rootReal: this.context.rootReal,
412
+ stat: relative => this.stat(relative),
413
+ list: async (relative, listingOptions) => {
414
+ validatePinnedRelativePath(relative);
415
+ const resolved = await resolvePinnedPathInRoot(this.context, { relativePath: relative, allowRoot: true });
416
+ return await openRootDirectoryListing(this.context, resolved.resolved, listingOptions);
417
+ },
418
+ }, relativePath, options);
419
+ }
420
+ }
421
+ export async function root(rootDir, defaults = {}) {
422
+ normalizeMaxBytes(defaults.maxBytes);
423
+ return new RootHandle(await resolveRootContext(rootDir), defaults);
424
+ }
425
+ // Internal callers that already hold an exact admitted directory capability must
426
+ // not recapture a different filesystem object while constructing the Root.
427
+ export function rootFromDirectoryGuard(guard, defaults = {}) {
428
+ normalizeMaxBytes(defaults.maxBytes);
429
+ return new RootHandle({
430
+ rootDir: resolvePathPreservingWindowsRoot(guard.dir),
431
+ rootGuard: { dir: guard.realPath, realPath: guard.realPath, stat: guard.stat },
432
+ rootIdentity: { dev: guard.stat.dev, ino: guard.stat.ino },
433
+ rootReal: guard.realPath,
434
+ rootWithSep: ensureTrailingSep(guard.realPath),
435
+ }, defaults);
436
+ }
437
+ async function openFileInRoot(root, params) {
438
+ const { resolved } = await resolvePathInRoot(root, params.relativePath, {
439
+ allowFinalSymlink: true,
440
+ rejectUnsafeDeviceReads: true,
441
+ ...readSymlinkResolution(params.symlinks),
442
+ resolveCanonical: true,
443
+ });
444
+ const fsSafeTestHooks = getFsSafeTestHooks();
445
+ if (fsSafeTestHooks?.afterRootReadPathResolution) {
446
+ await fsSafeTestHooks.afterRootReadPathResolution(resolved);
447
+ }
448
+ const { handle, stat, identity } = await openLocalFileDescriptor(resolved, {
449
+ symlinks: params.symlinks,
450
+ });
451
+ // The admission helper owns the descriptor until the complete root/file/root
452
+ // fence succeeds, then transfers that still-open handle to the caller.
453
+ const admitted = await admitRootReadHandle({
454
+ root, filePath: resolved, opened: { handle, stat }, identity,
455
+ hardlinks: params.hardlinks, symlinks: params.symlinks,
456
+ beforeFinalFence: fsSafeTestHooks?.beforeRootReadFinalFence,
457
+ afterPathIdentityCheck: fsSafeTestHooks?.afterRootReadFinalPathIdentityCheck,
458
+ });
459
+ return openResult(admitted);
460
+ }
461
+ async function readFileInRoot(root, params) {
462
+ const opened = await openFileInRoot(root, params);
463
+ try {
464
+ return await readOpenedFileSafely({ opened, maxBytes: params.maxBytes });
465
+ }
466
+ finally {
467
+ await opened.handle.close().catch(() => { });
468
+ }
469
+ }
470
+ export async function readLocalFileSafely(params) {
471
+ const maxBytes = normalizeMaxBytes(params.maxBytes);
472
+ const opened = await openLocalFileSafely({ filePath: params.filePath });
473
+ try {
474
+ return await readOpenedFileSafely({ opened, maxBytes });
475
+ }
476
+ finally {
477
+ await opened.handle.close().catch(() => { });
478
+ }
479
+ }
480
+ export async function openLocalFileSafely(params) {
481
+ const filePath = params.filePath;
482
+ assertNoNulPathInput(filePath, "file path contains a NUL byte");
483
+ assertNoWindowsPathAlias(filePath, "filesystem", "file path uses a Windows filesystem namespace alias");
484
+ return (await openVerifiedLocalFile(filePath)).opened;
485
+ }
486
+ function emitWriteBoundaryWarning(reason) {
487
+ logWarn(`security: fs-safe write boundary warning (${reason})`);
488
+ }
489
+ function buildAtomicWriteTempPath(targetPath) {
490
+ return path.join(path.dirname(targetPath), `.fs-safe-${randomUUID()}.tmp`);
491
+ }
492
+ function rootWriteQueueKey(root, relativePath) {
493
+ return `${root.rootReal}\0${relativePath}`;
494
+ }
495
+ async function openWritableFileInRoot(root, params, options) {
496
+ const guardedTarget = params.denyMutations === undefined && params.mutationSymlinks === undefined
497
+ ? undefined
498
+ : await resolveGuardedWriteTargetInRoot(root, {
499
+ relativePath: params.relativePath,
500
+ denyMutations: params.denyMutations,
501
+ mutationSymlinks: params.mutationSymlinks,
502
+ });
503
+ const { resolved } = guardedTarget?.resolvedPath ?? await resolveGuardedWritePathInRoot(root, {
504
+ relativePath: params.relativePath,
505
+ });
506
+ const prepared = guardedTarget ? await prepareSharedRootWriteTarget(root, {
507
+ relativePath: params.relativePath, guardedTarget, mkdir: params.mkdir,
508
+ assertBeforeMutation: params.assertBeforeMutation,
509
+ }) : undefined;
510
+ const preparedParent = prepared?.preparedParent;
511
+ let ioPath = prepared?.targetPath ?? (params.mkdir === false ? resolved :
512
+ await prepareRootWriteTarget(root, resolved, params.assertBeforeMutation));
513
+ const operationTargetPath = ioPath;
514
+ try {
515
+ assertFinalSymlinkRejected(ioPath, params.mutationSymlinks !== undefined);
516
+ const resolvedRealPath = params.mutationSymlinks === undefined ? realpathSync.native(ioPath) : ioPath;
517
+ const admittedRealPath = admitPathInsideRoot({
518
+ rootPath: root.rootReal,
519
+ candidatePath: resolvedRealPath,
520
+ rootIdentity: root.rootIdentity,
521
+ });
522
+ if (!admittedRealPath) {
523
+ throw outsideWorkspaceError();
524
+ }
525
+ ioPath = admittedRealPath.path;
526
+ }
527
+ catch (err) {
528
+ if (err instanceof FsSafeError) {
529
+ throw err;
530
+ }
531
+ if (!isNotFoundPathError(err)) {
532
+ throw err;
533
+ }
534
+ }
535
+ assertRootFallbackWritePath(params.expectedWritePath, ioPath);
536
+ const mode = params.mode ?? 0o600;
537
+ let handle;
538
+ let createdForWrite = false;
539
+ let writePathSelection = undefined;
540
+ const existingFlags = params.append ? OPEN_APPEND_EXISTING_FLAGS : OPEN_WRITE_EXISTING_FLAGS;
541
+ const createFlags = params.append ? OPEN_APPEND_CREATE_FLAGS : OPEN_WRITE_CREATE_FLAGS;
542
+ try {
543
+ writePathSelection = guardedTarget
544
+ ? await prepareGuardedRootWritePathSelection(guardedTarget, ioPath, operationTargetPath, preparedParent)
545
+ : undefined;
546
+ try {
547
+ if (writePathSelection)
548
+ assertRootWritePathSelectionSync(root, writePathSelection);
549
+ handle = await fs.open(ioPath, existingFlags, mode);
550
+ }
551
+ catch (err) {
552
+ if (await isNonRegularWriteOpenError(err, ioPath, existingFlags)) {
553
+ throw new FsSafeError("not-file", "path is not a regular file under root");
554
+ }
555
+ if (!isNotFoundPathError(err)) {
556
+ throw err;
557
+ }
558
+ if (options?.createIfMissing === false) {
559
+ const parentGuard = writePathSelection?.parentGuard ??
560
+ await createAsyncDirectoryGuard(path.dirname(ioPath), { bigint: true });
561
+ assertRootIdentityCurrentSync(root);
562
+ if (!admitPathInsideRoot({
563
+ rootPath: root.rootReal, candidatePath: parentGuard.realPath, rootIdentity: root.rootIdentity,
564
+ }))
565
+ throw outsideWorkspaceError();
566
+ assertSyncDirectoryGuard(parentGuard);
567
+ return { missing: true, targetPath: ioPath, parentGuard, writeSelection: writePathSelection };
568
+ }
569
+ if (writePathSelection)
570
+ await refreshRootWritePathSelection(writePathSelection);
571
+ params.assertBeforeMutation?.();
572
+ if (writePathSelection)
573
+ assertRootWritePathSelectionSync(root, writePathSelection);
574
+ handle = await fs.open(ioPath, createFlags, mode);
575
+ createdForWrite = true;
576
+ }
577
+ }
578
+ catch (err) {
579
+ if (isNotFoundPathError(err)) {
580
+ throw fileNotFoundError();
581
+ }
582
+ if (isSymlinkOpenError(err)) {
583
+ throw new FsSafeError("symlink", "symlink open blocked", { cause: err });
584
+ }
585
+ if (hasNodeErrorCode(err, "EISDIR")) {
586
+ throw new FsSafeError("not-file", "not a file", { cause: err });
587
+ }
588
+ throw err;
589
+ }
590
+ let realPathForCleanup = null;
591
+ let createdIdentity = null;
592
+ try {
593
+ const stat = fsSync.fstatSync(handle.fd);
594
+ const identity = inspectFileIdentitySync(() => {
595
+ const observed = fsSync.fstatSync(handle.fd, { bigint: true });
596
+ if (!observed.isFile()) {
597
+ throw new FsSafeError("not-file", "path is not a regular file under root");
598
+ }
599
+ if (observed.nlink > 1n)
600
+ throw hardlinkedPathNotAllowedError();
601
+ return observed;
602
+ });
603
+ if (createdForWrite)
604
+ createdIdentity = identity;
605
+ let observedIoPath = false;
606
+ try {
607
+ inspectFileIdentitySync(() => {
608
+ const lstat = fsSync.lstatSync(ioPath, { bigint: true });
609
+ observedIoPath = true;
610
+ if (lstat.isSymbolicLink() || !lstat.isFile()) {
611
+ throw new FsSafeError(lstat.isSymbolicLink() ? "symlink" : "not-file", "path is not a regular file under root");
612
+ }
613
+ if (lstat.nlink > 1n)
614
+ throw hardlinkedPathNotAllowedError();
615
+ return lstat;
616
+ }, identity);
617
+ }
618
+ catch (err) {
619
+ if (isNotFoundPathError(err) && !observedIoPath) {
620
+ // The opened file may have been renamed before its first pathname
621
+ // observation. The descriptor-bound resolver below must still find it.
622
+ }
623
+ else if (err instanceof FsSafeError && err.code === "path-mismatch") {
624
+ throw new FsSafeError("path-mismatch", "path changed during write", { cause: err });
625
+ }
626
+ else {
627
+ throw err;
628
+ }
629
+ }
630
+ let realPath = (await resolveOpenedFileRealPathForFd(handle.fd, identity, ioPath)).realPath;
631
+ assertNoWindowsPathAlias(realPath, "filesystem", "resolved file path uses a Windows filesystem namespace alias");
632
+ try {
633
+ inspectFileIdentitySync(() => {
634
+ const realStat = fsSync.statSync(realPath, { bigint: true });
635
+ if (!realStat.isFile()) {
636
+ throw new FsSafeError("not-file", "path is not a regular file under root");
637
+ }
638
+ if (realStat.nlink > 1n)
639
+ throw hardlinkedPathNotAllowedError();
640
+ return realStat;
641
+ }, identity);
642
+ }
643
+ catch (err) {
644
+ if (err instanceof FsSafeError && err.code === "path-mismatch") {
645
+ throw new FsSafeError("path-mismatch", "path mismatch", { cause: err });
646
+ }
647
+ throw err;
648
+ }
649
+ const admittedRealPath = admitPathInsideRoot({
650
+ rootPath: root.rootReal,
651
+ candidatePath: realPath,
652
+ rootIdentity: root.rootIdentity,
653
+ });
654
+ if (!admittedRealPath) {
655
+ throw outsideWorkspaceError();
656
+ }
657
+ realPath = admittedRealPath.path;
658
+ realPathForCleanup = realPath;
659
+ assertRootFallbackWritePath(params.expectedWritePath, realPath);
660
+ const writeSelection = writePathSelection
661
+ ? createRootWriteSelectionForFd(writePathSelection, handle.fd)
662
+ : undefined;
663
+ // Truncate only after boundary and identity checks complete. This avoids
664
+ // irreversible side effects if a symlink target changes before validation.
665
+ if (params.append !== true && params.truncateExisting !== false && !createdForWrite) {
666
+ if (writeSelection)
667
+ await refreshRetainedRootWriteAdmission(root, writeSelection, true, handle.fd);
668
+ assertFinalSymlinkRejected(ioPath, params.mutationSymlinks !== undefined);
669
+ params.assertBeforeMutation?.();
670
+ if (writeSelection)
671
+ assertRootWriteSelectionSync(root, writeSelection, true, handle.fd);
672
+ await handle.truncate(0);
673
+ }
674
+ if (writeSelection) {
675
+ await refreshRetainedRootWriteAdmission(root, writeSelection, true, handle.fd);
676
+ assertRootWriteSelectionSync(root, writeSelection, true, handle.fd);
677
+ }
678
+ const result = {
679
+ handle,
680
+ containment: "best-effort",
681
+ createdForWrite,
682
+ realPath,
683
+ stat,
684
+ [Symbol.asyncDispose]: () => handle.close().catch(() => undefined),
685
+ };
686
+ return { opened: result, identity, writeSelection };
687
+ }
688
+ catch (err) {
689
+ const cleanupCreatedPath = createdForWrite && err instanceof FsSafeError;
690
+ const cleanupPath = realPathForCleanup ?? ioPath;
691
+ await handle.close().catch(() => { });
692
+ if (cleanupCreatedPath && createdIdentity) {
693
+ await removePathIfIdentityUnchanged(cleanupPath, createdIdentity).catch(() => { });
694
+ }
695
+ throw err;
696
+ }
697
+ }
698
+ async function appendFileInRoot(root, params) {
699
+ const env_1 = { stack: [], error: void 0, hasError: false };
700
+ try {
701
+ const { opened: target, identity } = await openWritableFileInRoot(root, {
702
+ relativePath: params.relativePath,
703
+ mkdir: params.mkdir,
704
+ mode: params.mode,
705
+ denyMutations: params.denyMutations,
706
+ assertBeforeMutation: params.assertBeforeMutation,
707
+ mutationSymlinks: params.mutationSymlinks,
708
+ truncateExisting: false,
709
+ append: true,
710
+ });
711
+ let dispatched = false;
712
+ // Reverse disposal order closes the handle before path cleanup and retains both failures.
713
+ const cleanup = __addDisposableResource(env_1, {
714
+ async [Symbol.asyncDispose]() {
715
+ if (!dispatched && target.createdForWrite) {
716
+ await removePathIfIdentityUnchanged(target.realPath, identity);
717
+ }
718
+ },
719
+ }, true);
720
+ const handle = __addDisposableResource(env_1, target.handle, true);
721
+ try {
722
+ let prefix = "";
723
+ if (params.prependNewlineIfNeeded === true &&
724
+ !target.createdForWrite &&
725
+ target.stat.size > 0 &&
726
+ params.data.length > 0 &&
727
+ ((typeof params.data === "string" && !params.data.startsWith("\n")) ||
728
+ (Buffer.isBuffer(params.data) && params.data[0] !== 0x0a))) {
729
+ const newline = Buffer.from("\n", typeof params.data === "string" ? params.encoding : "utf8");
730
+ const tail = Buffer.alloc(newline.length);
731
+ const { bytesRead } = await target.handle.read(tail, 0, tail.length, Math.max(0, target.stat.size - tail.length));
732
+ if (bytesRead > 0 && (bytesRead !== newline.length || !tail.equals(newline))) {
733
+ prefix = "\n";
734
+ }
735
+ }
736
+ const payload = typeof params.data === "string" ? `${prefix}${params.data}`
737
+ : prefix.length > 0 ? Buffer.concat([Buffer.from(prefix, "utf8"), params.data]) : params.data;
738
+ await writeAllToFile(target.handle, payload, {
739
+ encoding: params.encoding,
740
+ assertBeforeMutation: () => {
741
+ assertFinalSymlinkRejected(target.realPath, params.mutationSymlinks !== undefined);
742
+ params.assertBeforeMutation?.();
743
+ dispatched = true;
744
+ },
745
+ });
746
+ // A successful empty append still creates the file, as Node's appendFile does.
747
+ dispatched = true;
748
+ if (params.durable !== false)
749
+ await target.handle.sync();
750
+ if (params.durable !== false && target.createdForWrite) {
751
+ await syncDirectoryBestEffort(path.dirname(target.realPath));
752
+ }
753
+ }
754
+ catch (error) {
755
+ rethrowMutationAuthorityError(error);
756
+ }
757
+ }
758
+ catch (e_1) {
759
+ env_1.error = e_1;
760
+ env_1.hasError = true;
761
+ }
762
+ finally {
763
+ const result_1 = __disposeResources(env_1);
764
+ if (result_1)
765
+ await result_1;
766
+ }
767
+ }
768
+ async function removePathInRoot(root, params) {
769
+ validatePinnedRelativePath(params.relativePath);
770
+ const removalReceipts = params.recursive ? undefined : new RemovalPathReceipts();
771
+ const resolved = await resolvePinnedPathInRoot(root, {
772
+ relativePath: params.relativePath,
773
+ denyMutations: params.denyMutations,
774
+ mutationSymlinks: params.mutationSymlinks,
775
+ remove: true,
776
+ removalReceipts,
777
+ });
778
+ try {
779
+ await removePathInRootFallback(root, resolved.resolved, params, removalReceipts);
780
+ }
781
+ catch (error) {
782
+ if (params.recursive)
783
+ throw error;
784
+ throw normalizePinnedPathError(error);
785
+ }
786
+ }
787
+ async function mkdirPathInRoot(root, params) {
788
+ const privateMode = resolveCreationPermissions(params, true).private;
789
+ validatePinnedRelativePath(params.relativePath);
790
+ const policy = params.denyMutations === undefined && params.mutationSymlinks === undefined
791
+ ? undefined
792
+ : snapshotPinnedMutationPolicy(params.denyMutations, params.mutationSymlinks);
793
+ const resolution = { relativePath: params.relativePath, allowRoot: params.allowRoot, ...policy };
794
+ const resolveCurrent = policy
795
+ ? async () => await resolvePinnedPathInRoot(root, resolution)
796
+ : undefined;
797
+ const resolved = await resolvePinnedPathInRoot(root, resolution);
798
+ const prepared = policy && resolved.relativePosix !== ""
799
+ ? await preparePinnedWriteMutationAdmission({
800
+ rootReal: resolved.rootReal,
801
+ rootWithSep: ensureTrailingSep(resolved.rootReal),
802
+ rootIdentity: root.rootIdentity,
803
+ resolvedTargetPath: resolved.resolved,
804
+ originalPath: params.relativePath,
805
+ defaultRelativeParentPath: path.posix.dirname(resolved.relativePosix) === "."
806
+ ? ""
807
+ : path.posix.dirname(resolved.relativePosix),
808
+ policy,
809
+ resolveCurrent: resolveCurrent,
810
+ })
811
+ : undefined;
812
+ if (prepared?.mutationAdmission) {
813
+ await getFsSafeTestHooks()?.beforePinnedWriteParentAdmission?.(resolved.resolved);
814
+ }
815
+ try {
816
+ if (!privateMode && prepared?.mutationAdmission && params.assertBeforeMutation === undefined &&
817
+ await tryMkdirAtExactParent(root, resolved.resolved, prepared.mutationAdmission))
818
+ return;
819
+ await mkdirPathFallback(root, resolved, params.assertBeforeMutation, policy?.mutationSymlinks !== undefined, prepared?.mutationAdmission, privateMode);
820
+ }
821
+ catch (error) {
822
+ throw normalizePinnedPathError(error);
823
+ }
824
+ }
825
+ async function writeFileInRoot(root, params) {
826
+ if (params.private !== undefined) {
827
+ const permissions = resolveCreationPermissions(params, false);
828
+ params = { ...params, private: permissions.private, mode: permissions.mode };
829
+ }
830
+ const input = rootWriteInput(params);
831
+ await serializePathWrite(rootWriteQueueKey(root, params.relativePath), async () => {
832
+ if (!params.private && input.kind === "buffer" && !input.stageBeforePublish && process.platform === "win32" &&
833
+ (params.renameIdentity === "verify-content-with-lock" || !getNativeBinding())) {
834
+ await writeFileFallback(root, { ...params, data: input.data });
835
+ return;
836
+ }
837
+ const pinned = await resolvePinnedWriteTargetInRoot(root, params.relativePath, params.mode, params.denyMutations, params.overwrite, params.mutationSymlinks);
838
+ await serializePathWrite(pinned.targetPath, async () => {
839
+ await commitPinnedWriteInRoot(root, pinned, params, input);
840
+ });
841
+ });
842
+ }
843
+ async function commitPinnedWriteInRoot(root, pinned, params, input) {
844
+ let verifyingPublication = false;
845
+ try {
846
+ if (params.private)
847
+ assertPrivateFileCreationAvailable();
848
+ if (params.private && params.mkdir !== false) {
849
+ const target = await prepareRootWriteTarget(root, pinned.targetPath, params.assertBeforeMutation, pinned.mutationAdmission, true);
850
+ if (target !== pinned.targetPath) {
851
+ throw new FsSafeError("path-mismatch", "private creation parent changed during admission");
852
+ }
853
+ }
854
+ await runPinnedWriteWithRenamePolicy({
855
+ rootPath: pinned.rootReal,
856
+ relativeParentPath: pinned.relativeParentPath,
857
+ basename: pinned.basename,
858
+ targetPath: pinned.targetPath,
859
+ renameIdentity: params.renameIdentity,
860
+ mkdir: !params.private && params.mkdir !== false,
861
+ private: params.private,
862
+ mode: params.mode ?? pinned.mode,
863
+ sync: params.durable !== false,
864
+ strictFileSync: params.strictFileSync,
865
+ overwrite: params.overwrite,
866
+ rejectFinalSymlink: params.mutationSymlinks !== undefined,
867
+ input,
868
+ maxBytes: input.kind === "buffer" ? undefined : params.maxBytes,
869
+ rootIdentity: root.rootIdentity,
870
+ mutationAdmission: pinned.mutationAdmission,
871
+ assertBeforeMutation: params.assertBeforeMutation,
872
+ verifyPublished: async (fd, expectedIdentity, parentGuard) => {
873
+ verifyingPublication = true;
874
+ try {
875
+ await verifyAtomicWriteResult({
876
+ root,
877
+ targetPath: pinned.targetPath,
878
+ fd,
879
+ expectedIdentity,
880
+ parentGuard,
881
+ });
882
+ }
883
+ catch (error) {
884
+ emitWriteBoundaryWarning(`post-write verification failed: ${String(error)}`);
885
+ throw error;
886
+ }
887
+ },
888
+ });
889
+ }
890
+ catch (error) {
891
+ if (verifyingPublication)
892
+ throw error;
893
+ const errorCode = error?.code;
894
+ if (errorCode === "file_lock_stale" || errorCode === "file_lock_timeout") {
895
+ throw error;
896
+ }
897
+ if (params.overwrite === false && isAlreadyExistsError(error)) {
898
+ throw new FsSafeError("already-exists", "file already exists", errorCauseOptions(error));
899
+ }
900
+ throw normalizePinnedWriteError(error);
901
+ }
902
+ }
903
+ async function copyFileInRoot(root, params) {
904
+ params.signal?.throwIfAborted();
905
+ const clone = resolveFileCopyCloneMode(params.clone);
906
+ let source;
907
+ let sourceIdentity;
908
+ if (typeof params.source === "string") {
909
+ assertNoNulPathInput(params.source, "source path contains a NUL byte");
910
+ assertNoWindowsPathAlias(params.source, "filesystem", "source path uses a Windows filesystem namespace alias");
911
+ ({ opened: source, identity: sourceIdentity } = await openVerifiedLocalFile(params.source, {
912
+ hardlinks: params.sourceHardlinks,
913
+ }));
914
+ }
915
+ else {
916
+ source = await params.source.root.open(params.source.relativePath, params.sourceHardlinks === undefined ? undefined : { hardlinks: params.sourceHardlinks });
917
+ try {
918
+ sourceIdentity = await inspectFileIdentity(() => fsSync.fstatSync(source.handle.fd, { bigint: true }));
919
+ }
920
+ catch (error) {
921
+ await source.handle.close().catch(() => undefined);
922
+ throw error;
923
+ }
924
+ }
925
+ if (params.maxBytes !== undefined && source.stat.size > params.maxBytes) {
926
+ await source.handle.close().catch(() => { });
927
+ throw new FsSafeError("too-large", `file exceeds limit of ${params.maxBytes} bytes (got ${source.stat.size})`);
928
+ }
929
+ try {
930
+ const sourceAdmission = params.admitSource?.(sourceIdentity, source.realPath);
931
+ const mode = sourceAdmission?.mode ?? params.mode;
932
+ await serializePathWrite(rootWriteQueueKey(root, params.relativePath), async () => {
933
+ const pinned = await resolvePinnedWriteTargetInRoot(root, params.relativePath, mode ?? (params.preserveSourceMode ? Number(sourceIdentity.mode & 4095n) : undefined), params.denyMutations, params.overwrite !== false, params.mutationSymlinks);
934
+ await serializePathWrite(pinned.targetPath, async () => {
935
+ await assertCopySourceCurrent(source, sourceIdentity);
936
+ const verifySource = async () => {
937
+ params.signal?.throwIfAborted();
938
+ try {
939
+ sourceAdmission?.verify();
940
+ }
941
+ catch (error) {
942
+ throw new MutationAuthorityError(error);
943
+ }
944
+ if (typeof params.source !== "string") {
945
+ await params.source.root.stat(".");
946
+ }
947
+ await assertCopySourceCurrent(source, sourceIdentity);
948
+ };
949
+ const observer = createCopyPublicationObserver(pinned.targetPath, params.onDestinationPublished);
950
+ try {
951
+ await runPinnedWriteHelper({
952
+ rootPath: pinned.rootReal,
953
+ relativeParentPath: pinned.relativeParentPath,
954
+ basename: pinned.basename,
955
+ mkdir: params.mkdir !== false,
956
+ mode: pinned.mode,
957
+ overwrite: params.overwrite !== false,
958
+ rejectFinalSymlink: params.mutationSymlinks !== undefined,
959
+ maxBytes: params.maxBytes,
960
+ sync: params.durable !== false,
961
+ assertBeforeMutation: params.signal || params.assertBeforeMutation ? () => {
962
+ if (params.signal?.aborted)
963
+ throw new MutationAuthorityError(params.signal.reason);
964
+ params.assertBeforeMutation?.();
965
+ } : undefined,
966
+ verifyPublished: params.verifyPublished,
967
+ onPublished: observer.onPublished,
968
+ input: { kind: "file", handle: source.handle, size: source.stat.size, clone, signal: params.signal, verifySource },
969
+ rootIdentity: root.rootIdentity,
970
+ mutationAdmission: pinned.mutationAdmission,
971
+ });
972
+ }
973
+ catch (error) {
974
+ observer.rethrowObserverFailure(error);
975
+ if (params.signal?.aborted && error === params.signal.reason)
976
+ throw error;
977
+ if (isAlreadyExistsError(error)) {
978
+ throw new FsSafeError("already-exists", "copy destination already exists", { cause: error });
979
+ }
980
+ throw normalizePinnedWriteError(error);
981
+ }
982
+ await verifySource();
983
+ });
984
+ });
985
+ }
986
+ finally {
987
+ await source.handle.close().catch(() => { });
988
+ }
989
+ }
990
+ async function resolvePinnedPathInRoot(root, params) {
991
+ const resolved = await resolvePinnedRootPathInRoot(root, {
992
+ relativePath: params.relativePath,
993
+ policy: params.remove ? PATH_ALIAS_POLICIES.unlinkTarget : PATH_ALIAS_POLICIES.strict,
994
+ mutationSymlinks: params.mutationSymlinks,
995
+ removalReceipts: params.removalReceipts,
996
+ });
997
+ const relativeResolved = path.relative(resolved.rootReal, resolved.canonicalPath);
998
+ if ((relativeResolved === "" || relativeResolved === ".") && params.allowRoot === true) {
999
+ await assertMutationNotDenied(resolved.canonicalPath, params.denyMutations);
1000
+ return { rootReal: resolved.rootReal, resolved: resolved.canonicalPath, relativePosix: "" };
1001
+ }
1002
+ const firstSegment = relativeResolved.split(path.sep)[0];
1003
+ if (relativeResolved === "" ||
1004
+ relativeResolved === "." ||
1005
+ firstSegment === ".." ||
1006
+ path.isAbsolute(relativeResolved)) {
1007
+ throw outsideWorkspaceError();
1008
+ }
1009
+ const relativePosix = relativeResolved.split(path.sep).join(path.posix.sep);
1010
+ const admittedCanonicalPath = admitPathInsideRoot({
1011
+ rootPath: resolved.rootReal,
1012
+ candidatePath: resolved.canonicalPath,
1013
+ rootIdentity: root.rootIdentity,
1014
+ });
1015
+ if (!admittedCanonicalPath) {
1016
+ throw outsideWorkspaceError();
1017
+ }
1018
+ resolved.canonicalPath = admittedCanonicalPath.path;
1019
+ await assertMutationNotDenied(resolved.canonicalPath, params.denyMutations, {
1020
+ protectAncestors: params.remove === true,
1021
+ });
1022
+ return { rootReal: resolved.rootReal, resolved: resolved.canonicalPath, relativePosix };
1023
+ }
1024
+ async function resolvePinnedRootPathInRoot(root, params) {
1025
+ await assertRootIdentityCurrent(root, params.removalReceipts?.observeRoot);
1026
+ const rootReal = root.rootReal;
1027
+ let resolved;
1028
+ try {
1029
+ const expandedPath = await expandRelativePathWithHome(params.relativePath);
1030
+ const resolution = {
1031
+ absolutePath: path.isAbsolute(expandedPath)
1032
+ ? expandedPath
1033
+ : `${ensureTrailingSep(rootReal)}${expandedPath}`,
1034
+ rootPath: rootReal,
1035
+ rootCanonicalPath: rootReal,
1036
+ rootIdentity: root.rootIdentity,
1037
+ boundaryLabel: "root",
1038
+ policy: params.policy,
1039
+ ...mutationSymlinkResolution(params.mutationSymlinks),
1040
+ };
1041
+ resolved = await (params.removalReceipts ? resolveRootPathForRemoval(resolution, params.removalReceipts) : resolveRootPath(resolution));
1042
+ }
1043
+ catch (err) {
1044
+ if (err instanceof FsSafeError && err.code === "symlink")
1045
+ throw err;
1046
+ throw new FsSafeError("path-alias", "path alias escape blocked", { cause: err });
1047
+ }
1048
+ const rootWithSep = ensureTrailingSep(resolved.rootCanonicalPath);
1049
+ return {
1050
+ rootReal: resolved.rootCanonicalPath,
1051
+ rootWithSep,
1052
+ canonicalPath: resolved.canonicalPath,
1053
+ };
1054
+ }
1055
+ async function statPathFallback(root, relativePath) {
1056
+ const initialObservationHook = getFsSafeTestHooks()?.beforeRootStatInitialObservation;
1057
+ const observed = initialObservationHook
1058
+ ? undefined
1059
+ : await resolvePinnedObservedPathInRoot(root, relativePath, "stat");
1060
+ const resolved = observed ??
1061
+ await resolvePinnedPathInRoot(root, { relativePath, allowRoot: true });
1062
+ return await statResolvedPathInRoot(root, resolved.resolved, resolved.receipt);
1063
+ }
1064
+ async function listPathFallback(root, relativePath, withFileTypes) {
1065
+ const observed = await resolvePinnedObservedPathInRoot(root, relativePath, "directory");
1066
+ const resolved = observed ??
1067
+ await resolvePinnedPathInRoot(root, { relativePath, allowRoot: true });
1068
+ return await listDirectoryPath(root, resolved.resolved, withFileTypes, resolved.receipt);
1069
+ }
1070
+ async function movePathFallback(root, params) {
1071
+ const originalRoutes = params.overwrite && params.assertBeforeMutation
1072
+ ? await Promise.all([params.fromRelative, params.toRelative].map(expandRelativePathWithHome)) : undefined;
1073
+ const source = await resolvePathInRoot(root, params.fromRelative, {
1074
+ aliasErrorCode: "path-alias",
1075
+ allowFinalSymlink: true,
1076
+ ...mutationSymlinkResolution(params.mutationSymlinks),
1077
+ });
1078
+ await assertMutationNotDenied(source.resolved, params.denyMutations, { protectAncestors: true });
1079
+ const pinnedSource = await resolvePinnedRootPathInRoot(root, {
1080
+ relativePath: params.fromRelative,
1081
+ policy: PATH_ALIAS_POLICIES.strict,
1082
+ mutationSymlinks: params.mutationSymlinks,
1083
+ });
1084
+ let pinnedTarget;
1085
+ const target = await resolveGuardedWritePathInRoot(root, {
1086
+ relativePath: params.toRelative,
1087
+ denyMutations: params.denyMutations,
1088
+ mutationSymlinks: params.mutationSymlinks,
1089
+ allowFinalSymlink: true,
1090
+ protectDeniedAncestors: true,
1091
+ shouldAssertNoPathAlias: async (resolvedTarget) => {
1092
+ pinnedTarget = await resolvePinnedRootPathInRoot(root, {
1093
+ relativePath: params.toRelative,
1094
+ policy: PATH_ALIAS_POLICIES.unlinkTarget,
1095
+ });
1096
+ if (!params.overwrite)
1097
+ return true;
1098
+ let targetStat;
1099
+ try {
1100
+ targetStat = fsSync.lstatSync(resolvedTarget.resolved);
1101
+ }
1102
+ catch { /* Advisory lookup. */ }
1103
+ return !(process.platform !== "win32" &&
1104
+ params.overwrite &&
1105
+ targetStat?.isSymbolicLink() === true);
1106
+ },
1107
+ });
1108
+ let sourceIdentity;
1109
+ try {
1110
+ if (params.overwrite && params.assertBeforeMutation) {
1111
+ sourceIdentity = inspectFileIdentitySync(() => admitMoveSourceStat(fsSync.lstatSync(source.resolved, { bigint: true }), true));
1112
+ }
1113
+ else {
1114
+ admitMoveSourceStat(fsSync.lstatSync(source.resolved), params.overwrite);
1115
+ }
1116
+ }
1117
+ catch (error) {
1118
+ if (isNotFoundPathError(error)) {
1119
+ throw fileNotFoundError(error instanceof Error ? error : undefined);
1120
+ }
1121
+ throw error;
1122
+ }
1123
+ if (!pinnedTarget) {
1124
+ throw new FsSafeError("path-mismatch", "destination admission was not completed");
1125
+ }
1126
+ if (!params.overwrite) {
1127
+ await movePathNoReplaceNative(root, params, {
1128
+ sourcePath: source.resolved,
1129
+ sourceParentPath: path.dirname(pinnedSource.canonicalPath),
1130
+ targetPath: target.resolved,
1131
+ targetParentPath: path.dirname(pinnedTarget.canonicalPath),
1132
+ });
1133
+ return;
1134
+ }
1135
+ const guardOptions = { bigint: sourceIdentity !== undefined };
1136
+ const sourceParentGuard = await createAsyncDirectoryGuard(path.dirname(source.resolved), guardOptions);
1137
+ const targetParentGuard = await createNearestExistingDirectoryGuard(target.rootReal, path.dirname(target.resolved), guardOptions);
1138
+ await getFsSafeTestHooks()?.beforeRootFallbackMutation?.("move", target.resolved);
1139
+ await assertAsyncDirectoryGuard(sourceParentGuard);
1140
+ await assertAsyncDirectoryGuard(targetParentGuard);
1141
+ try {
1142
+ assertFinalSymlinkRejected(source.resolved, params.mutationSymlinks !== undefined);
1143
+ assertFinalSymlinkRejected(target.resolved, params.mutationSymlinks !== undefined);
1144
+ params.assertBeforeMutation?.();
1145
+ if (sourceIdentity) {
1146
+ assertRootIdentityCurrentSync(root);
1147
+ assertSyncDirectoryGuard(sourceParentGuard);
1148
+ assertSyncDirectoryGuard(targetParentGuard);
1149
+ for (const [route, selected, expected, policy] of [
1150
+ [originalRoutes[0], source.resolved, pinnedSource.canonicalPath, PATH_ALIAS_POLICIES.strict],
1151
+ [originalRoutes[1], target.resolved, pinnedTarget.canonicalPath, PATH_ALIAS_POLICIES.unlinkTarget],
1152
+ ]) {
1153
+ for (const absolutePath of new Set([path.isAbsolute(route) ? route : `${root.rootWithSep}${route}`, selected])) {
1154
+ try {
1155
+ const current = resolveRootPathSync({
1156
+ absolutePath, rootPath: root.rootReal, rootCanonicalPath: root.rootReal,
1157
+ rootIdentity: root.rootIdentity, boundaryLabel: "root", policy,
1158
+ ...mutationSymlinkResolution(params.mutationSymlinks),
1159
+ });
1160
+ if (current.canonicalPath !== expected)
1161
+ throw new FsSafeError("path-mismatch", "move route changed during authorization");
1162
+ }
1163
+ catch (error) {
1164
+ throw normalizePinnedPathError(error);
1165
+ }
1166
+ }
1167
+ }
1168
+ inspectFileIdentitySync(() => admitMoveSourceStat(fsSync.lstatSync(source.resolved, { bigint: true }), true), sourceIdentity);
1169
+ }
1170
+ await fs.rename(source.resolved, target.resolved);
1171
+ }
1172
+ catch (error) {
1173
+ if (isNotFoundPathError(error)) {
1174
+ throw fileNotFoundError(error instanceof Error ? error : undefined);
1175
+ }
1176
+ if (hasNodeErrorCode(error, "EEXIST")) {
1177
+ throw new FsSafeError("already-exists", "destination exists", errorCauseOptions(error));
1178
+ }
1179
+ throw error;
1180
+ }
1181
+ try {
1182
+ await assertAsyncDirectoryGuard(sourceParentGuard);
1183
+ await assertAsyncDirectoryGuard(targetParentGuard);
1184
+ }
1185
+ catch (error) {
1186
+ throw normalizePinnedPathError(error);
1187
+ }
1188
+ }
1189
+ async function writeFileFallback(root, params) {
1190
+ if (params.renameIdentity !== "verify-content-with-lock")
1191
+ return await writeFileFallbackUnlocked(root, params);
1192
+ const policy = snapshotPinnedMutationPolicy(params.denyMutations, params.mutationSymlinks);
1193
+ if (policy)
1194
+ params = { ...params, ...policy };
1195
+ const { rootReal, resolved } = await resolveGuardedWritePathInRoot(root, {
1196
+ relativePath: params.relativePath,
1197
+ denyMutations: params.denyMutations,
1198
+ mutationSymlinks: params.mutationSymlinks,
1199
+ });
1200
+ await withRootFallbackCompatibilityLock({
1201
+ rootPath: rootReal, rootIdentity: root.rootIdentity, targetPath: resolved, assertBeforeMutation: params.assertBeforeMutation,
1202
+ }, async ({ targetPath, ...binding }) => await writeFileFallbackUnlocked(root, { ...params, ...binding }, targetPath));
1203
+ }
1204
+ async function writeFileFallbackUnlocked(root, params, expectedWritePath) {
1205
+ if (params.overwrite === false) {
1206
+ await writeMissingFileFallback(root, params, expectedWritePath);
1207
+ return;
1208
+ }
1209
+ const admissionParams = {
1210
+ relativePath: params.relativePath,
1211
+ mkdir: params.mkdir,
1212
+ denyMutations: params.denyMutations,
1213
+ assertBeforeMutation: params.assertBeforeMutation,
1214
+ mutationSymlinks: params.mutationSymlinks,
1215
+ truncateExisting: false,
1216
+ expectedWritePath,
1217
+ };
1218
+ const admission = await openWritableFileInRoot(root, admissionParams, { createIfMissing: false });
1219
+ const existing = "missing" in admission ? undefined : admission;
1220
+ const target = existing?.opened;
1221
+ const retainedSelection = existing?.writeSelection;
1222
+ const missingSelection = "missing" in admission ? admission.writeSelection : undefined;
1223
+ const policyEnabled = params.denyMutations !== undefined || params.mutationSymlinks !== undefined;
1224
+ const destinationPath = "missing" in admission ? admission.targetPath
1225
+ : retainedSelection?.selectedPath ?? admission.opened.realPath;
1226
+ let mode = params.mode ?? (target ? target.stat.mode & 0o777 : undefined);
1227
+ if (policyEnabled && !retainedSelection && !missingSelection) {
1228
+ await target?.handle.close().catch(() => undefined);
1229
+ throw new FsSafeError("path-mismatch", "write admission state was not retained");
1230
+ }
1231
+ const destinationGuard = "missing" in admission ? admission.parentGuard : retainedSelection?.parentGuard ??
1232
+ await createAsyncDirectoryGuard(path.dirname(destinationPath), { bigint: true }).catch(async (error) => {
1233
+ await target?.handle.close().catch(() => undefined);
1234
+ throw error;
1235
+ });
1236
+ let tempPath = null;
1237
+ let unregisterTempPath = null;
1238
+ let writtenHandle;
1239
+ let writtenIdentity;
1240
+ let lateTargetHandle;
1241
+ try {
1242
+ tempPath = buildAtomicWriteTempPath(destinationPath);
1243
+ if (retainedSelection) {
1244
+ await refreshRetainedRootWriteAdmission(root, retainedSelection, true, target?.handle.fd);
1245
+ }
1246
+ else if (missingSelection) {
1247
+ await refreshRootWritePathSelection(missingSelection);
1248
+ }
1249
+ params.assertBeforeMutation?.();
1250
+ if (retainedSelection) {
1251
+ assertRootWriteSelectionSync(root, retainedSelection, true, target?.handle.fd);
1252
+ }
1253
+ else if (missingSelection) {
1254
+ assertRootWritePathSelectionSync(root, missingSelection);
1255
+ }
1256
+ assertRootIdentityCurrentSync(root);
1257
+ assertSyncDirectoryGuard(destinationGuard);
1258
+ writtenHandle = await fs.open(tempPath, OPEN_WRITE_CREATE_FLAGS, 0o600);
1259
+ writtenIdentity = fsSync.fstatSync(writtenHandle.fd, { bigint: true });
1260
+ // Preserve the creation mask when no existing destination supplies a mode.
1261
+ mode ??= Number(writtenIdentity.mode & 511n);
1262
+ unregisterTempPath = registerTempPathForExit(tempPath, { identity: writtenIdentity, singleLinkFile: true });
1263
+ await writeAllToFile(writtenHandle, params.data, {
1264
+ encoding: params.encoding, assertBeforeMutation: params.assertBeforeMutation,
1265
+ });
1266
+ if (params.durable !== false)
1267
+ await writtenHandle.sync();
1268
+ const commitTempPath = tempPath;
1269
+ const commitHandle = writtenHandle;
1270
+ const commitIdentity = writtenIdentity;
1271
+ await withAsyncDirectoryGuards([destinationGuard], async () => {
1272
+ await verifyAtomicWriteResult({
1273
+ root, targetPath: commitTempPath, fd: commitHandle.fd,
1274
+ expectedIdentity: commitIdentity, parentGuard: destinationGuard,
1275
+ });
1276
+ assertRootIdentityCurrentSync(root);
1277
+ assertSyncDirectoryGuard(destinationGuard);
1278
+ let publicationIdentity = inspectFallbackReplacementDestination(destinationPath);
1279
+ // A raced file needs its own access admission, not the old handle's rights.
1280
+ if (publicationIdentity && (!existing || !sameFileIdentity(publicationIdentity, existing.identity))) {
1281
+ const admitted = await openWritableFileInRoot(root, {
1282
+ ...admissionParams, mkdir: false, expectedWritePath: destinationPath,
1283
+ }, { createIfMissing: false });
1284
+ lateTargetHandle = "missing" in admitted ? undefined : admitted.opened.handle;
1285
+ publicationIdentity = "missing" in admitted ? undefined : admitted.identity;
1286
+ await lateTargetHandle?.close();
1287
+ }
1288
+ // Windows cannot replace a destination while its old handle remains open.
1289
+ await target?.handle.close();
1290
+ if (retainedSelection) {
1291
+ await refreshRetainedRootWriteAdmission(root, retainedSelection, true);
1292
+ }
1293
+ else if (missingSelection) {
1294
+ await refreshRootWritePathSelection(missingSelection);
1295
+ }
1296
+ assertFinalSymlinkRejected(destinationPath, params.mutationSymlinks !== undefined);
1297
+ params.assertBeforeMutation?.();
1298
+ if (retainedSelection) {
1299
+ assertRootWriteSelectionSync(root, retainedSelection, true);
1300
+ }
1301
+ else if (missingSelection) {
1302
+ assertRootWritePathSelectionSync(root, missingSelection);
1303
+ }
1304
+ assertRootIdentityCurrentSync(root);
1305
+ assertSyncDirectoryGuard(destinationGuard);
1306
+ const current = inspectFallbackReplacementDestination(destinationPath);
1307
+ if (publicationIdentity ? !current || !sameFileIdentity(current, publicationIdentity) : current) {
1308
+ throw new FsSafeError("path-mismatch", "write destination changed before publication");
1309
+ }
1310
+ await fs.rename(commitTempPath, destinationPath);
1311
+ tempPath = null;
1312
+ });
1313
+ unregisterTempPath();
1314
+ unregisterTempPath = null;
1315
+ await finishRootFallbackWrite({
1316
+ root, targetPath: destinationPath, handle: writtenHandle, identity: writtenIdentity,
1317
+ parentGuard: destinationGuard, mode, options: params,
1318
+ // Read/write access is needed to sync the accepted destination on Windows.
1319
+ openForCompatibility: () => openVerifiedLocalFile(destinationPath, { hardlinks: "reject", readWrite: true }),
1320
+ onVerificationFailure: err => emitWriteBoundaryWarning(`post-write verification failed: ${String(err)}`),
1321
+ });
1322
+ }
1323
+ finally {
1324
+ await target?.handle.close().catch(() => undefined);
1325
+ await lateTargetHandle?.close().catch(() => undefined);
1326
+ if (tempPath && writtenHandle) {
1327
+ await cleanupPinnedFilePath({
1328
+ pathname: tempPath, handle: writtenHandle, identity: writtenIdentity, parentGuard: destinationGuard,
1329
+ });
1330
+ }
1331
+ await writtenHandle?.close().catch(() => undefined);
1332
+ unregisterTempPath?.();
1333
+ }
1334
+ }
1335
+ function inspectFallbackReplacementDestination(targetPath) {
1336
+ let current;
1337
+ try {
1338
+ current = inspectFileIdentitySync(() => fsSync.lstatSync(targetPath, { bigint: true }));
1339
+ }
1340
+ catch (error) {
1341
+ if (isNotFoundPathError(error))
1342
+ return;
1343
+ throw error;
1344
+ }
1345
+ if (current.isSymbolicLink() || !current.isFile()) {
1346
+ throw new FsSafeError("path-mismatch", "write destination changed before publication");
1347
+ }
1348
+ if (current.nlink > 1n)
1349
+ throw hardlinkedPathNotAllowedError();
1350
+ return current;
1351
+ }
1352
+ async function writeMissingFileFallback(root, params, expectedWritePath) {
1353
+ const guardedTarget = params.denyMutations === undefined && params.mutationSymlinks === undefined
1354
+ ? undefined
1355
+ : await resolveGuardedWriteTargetInRoot(root, {
1356
+ relativePath: params.relativePath,
1357
+ denyMutations: params.denyMutations,
1358
+ mutationSymlinks: params.mutationSymlinks,
1359
+ });
1360
+ const { resolved } = guardedTarget?.resolvedPath ?? await resolveGuardedWritePathInRoot(root, {
1361
+ relativePath: params.relativePath,
1362
+ });
1363
+ const prepared = guardedTarget ? await prepareSharedRootWriteTarget(root, {
1364
+ relativePath: params.relativePath, guardedTarget, mkdir: params.mkdir,
1365
+ assertBeforeMutation: params.assertBeforeMutation,
1366
+ }) : undefined;
1367
+ const mutationAdmission = prepared?.mutationAdmission;
1368
+ const preparedParent = prepared?.preparedParent;
1369
+ const targetPath = prepared?.targetPath ?? (params.mkdir === false ? resolved :
1370
+ await prepareRootWriteTarget(root, resolved, params.assertBeforeMutation));
1371
+ assertRootFallbackWritePath(expectedWritePath, targetPath);
1372
+ const pathSelection = guardedTarget
1373
+ ? await prepareGuardedRootWritePathSelection(guardedTarget, targetPath, targetPath, preparedParent)
1374
+ : undefined;
1375
+ const parentGuard = pathSelection?.parentGuard ??
1376
+ await createAsyncDirectoryGuard(path.dirname(targetPath), { bigint: true });
1377
+ let created = false;
1378
+ let completed = false;
1379
+ let createdIdentity;
1380
+ let writtenHandle;
1381
+ let verifyingPublication = false;
1382
+ try {
1383
+ const { handle, writtenStat } = await withAsyncDirectoryGuards([parentGuard], async () => {
1384
+ assertFinalSymlinkRejected(targetPath, params.mutationSymlinks !== undefined);
1385
+ params.assertBeforeMutation?.();
1386
+ if (mutationAdmission)
1387
+ assertSyncDirectoryGuard(parentGuard);
1388
+ const handle = await fs.open(targetPath, OPEN_WRITE_CREATE_FLAGS, params.mode ?? 0o600).catch((error) => recordExclusiveCreateFailure(error, targetPath));
1389
+ writtenHandle = handle;
1390
+ created = true;
1391
+ const writtenStat = fsSync.fstatSync(handle.fd, { bigint: true });
1392
+ createdIdentity = writtenStat;
1393
+ await writeAllToFile(handle, params.data, {
1394
+ encoding: params.encoding,
1395
+ assertBeforeMutation: () => {
1396
+ assertFinalSymlinkRejected(targetPath, params.mutationSymlinks !== undefined);
1397
+ params.assertBeforeMutation?.();
1398
+ if (mutationAdmission)
1399
+ assertSyncDirectoryGuard(parentGuard);
1400
+ },
1401
+ });
1402
+ if (params.durable !== false)
1403
+ await handle.sync();
1404
+ return { handle, writtenStat };
1405
+ }, {
1406
+ onPostGuardFailure: () => {
1407
+ created = false; // Parent is untrusted now; skip outer path cleanup by name.
1408
+ },
1409
+ });
1410
+ writtenHandle = handle;
1411
+ created = false;
1412
+ verifyingPublication = true;
1413
+ await verifyAtomicWriteResult({
1414
+ root,
1415
+ targetPath,
1416
+ expectedIdentity: writtenStat,
1417
+ fd: handle.fd,
1418
+ parentGuard,
1419
+ });
1420
+ if (params.durable !== false)
1421
+ await syncDirectoryBestEffort(path.dirname(targetPath));
1422
+ completed = true;
1423
+ }
1424
+ catch (err) {
1425
+ if (verifyingPublication)
1426
+ throw err;
1427
+ if (hasNodeErrorCode(err, "EEXIST")) {
1428
+ throw new FsSafeError("already-exists", "file already exists", errorCauseOptions(err));
1429
+ }
1430
+ throw err;
1431
+ }
1432
+ finally {
1433
+ if (created && writtenHandle) {
1434
+ await cleanupPinnedFilePath({
1435
+ pathname: targetPath, handle: writtenHandle, identity: createdIdentity, parentGuard,
1436
+ });
1437
+ }
1438
+ if (completed)
1439
+ await writtenHandle?.close();
1440
+ else
1441
+ await writtenHandle?.close().catch(() => undefined);
1442
+ }
1443
+ }