@scriptc/compiler 0.4.0 → 0.4.2

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 (866) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +617 -83
  2. package/dist/backend/cycle-analysis.d.ts +2 -1
  3. package/dist/backend/cycle-analysis.js +4 -4
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-mutability.d.ts +2 -1
  6. package/dist/backend/cycle-mutability.js +2 -2
  7. package/dist/backend/cycle-mutability.js.map +1 -1
  8. package/dist/backend/executable-features.js +10 -0
  9. package/dist/backend/executable-features.js.map +1 -1
  10. package/dist/backend/immutability.d.ts +2 -1
  11. package/dist/backend/immutability.js +2 -2
  12. package/dist/backend/immutability.js.map +1 -1
  13. package/dist/backend/library-pack.js +7 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/link-plan-core.d.ts +2 -0
  16. package/dist/backend/link-plan-core.js +2 -0
  17. package/dist/backend/link-plan-core.js.map +1 -1
  18. package/dist/backend/link-plan.d.ts +1 -0
  19. package/dist/backend/link-plan.js +1 -0
  20. package/dist/backend/link-plan.js.map +1 -1
  21. package/dist/backend/llvm/alloc.d.ts +7 -3
  22. package/dist/backend/llvm/alloc.js +7 -4
  23. package/dist/backend/llvm/alloc.js.map +1 -1
  24. package/dist/backend/llvm/array-search.js +4 -1
  25. package/dist/backend/llvm/array-search.js.map +1 -1
  26. package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
  27. package/dist/backend/llvm/bytes-loop-versions.js +115 -19
  28. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  29. package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
  30. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  31. package/dist/backend/llvm/classes.d.ts +99 -2
  32. package/dist/backend/llvm/classes.js +436 -57
  33. package/dist/backend/llvm/classes.js.map +1 -1
  34. package/dist/backend/llvm/classes.test.js +235 -16
  35. package/dist/backend/llvm/classes.test.js.map +1 -1
  36. package/dist/backend/llvm/common.d.ts +21 -5
  37. package/dist/backend/llvm/common.js +50 -5
  38. package/dist/backend/llvm/common.js.map +1 -1
  39. package/dist/backend/llvm/constant-callbacks.js +8 -4
  40. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  41. package/dist/backend/llvm/constant-callbacks.test.js +4 -4
  42. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  43. package/dist/backend/llvm/counted-loops.d.ts +4 -1
  44. package/dist/backend/llvm/counted-loops.js +62 -23
  45. package/dist/backend/llvm/counted-loops.js.map +1 -1
  46. package/dist/backend/llvm/dense-array-access.d.ts +3 -1
  47. package/dist/backend/llvm/dense-array-access.js +61 -38
  48. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  49. package/dist/backend/llvm/dense-array-access.test.js +4 -0
  50. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  51. package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
  52. package/dist/backend/llvm/dense-array-loops.js +49 -13
  53. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  54. package/dist/backend/llvm/dense-array-loops.test.js +50 -14
  55. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  56. package/dist/backend/llvm/dyn.d.ts +34 -1
  57. package/dist/backend/llvm/dyn.js +393 -14
  58. package/dist/backend/llvm/dyn.js.map +1 -1
  59. package/dist/backend/llvm/emit-function.js +27 -8
  60. package/dist/backend/llvm/emit-function.js.map +1 -1
  61. package/dist/backend/llvm/emit-module.js +67 -39
  62. package/dist/backend/llvm/emit-module.js.map +1 -1
  63. package/dist/backend/llvm/emit-statements.d.ts +3 -25
  64. package/dist/backend/llvm/emit-statements.js +414 -37
  65. package/dist/backend/llvm/emit-statements.js.map +1 -1
  66. package/dist/backend/llvm/emitter.d.ts +159 -22
  67. package/dist/backend/llvm/emitter.js +573 -89
  68. package/dist/backend/llvm/emitter.js.map +1 -1
  69. package/dist/backend/llvm/expr-async.js +19 -0
  70. package/dist/backend/llvm/expr-async.js.map +1 -1
  71. package/dist/backend/llvm/expr-bytes.d.ts +5 -2
  72. package/dist/backend/llvm/expr-bytes.js +110 -40
  73. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  74. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  75. package/dist/backend/llvm/expr-calls.js +51 -26
  76. package/dist/backend/llvm/expr-calls.js.map +1 -1
  77. package/dist/backend/llvm/expr-containers.js +27 -14
  78. package/dist/backend/llvm/expr-containers.js.map +1 -1
  79. package/dist/backend/llvm/expr-control.js +2 -3
  80. package/dist/backend/llvm/expr-control.js.map +1 -1
  81. package/dist/backend/llvm/expr-dynamic.js +95 -5
  82. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  83. package/dist/backend/llvm/expr-primitives.js +29 -11
  84. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  85. package/dist/backend/llvm/expr-primitives.test.js +55 -0
  86. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  87. package/dist/backend/llvm/expr-stream-bridges.js +48 -20
  88. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  89. package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
  90. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  91. package/dist/backend/llvm/integer-clones.js +3 -3
  92. package/dist/backend/llvm/integer-clones.js.map +1 -1
  93. package/dist/backend/llvm/js-ic.d.ts +18 -0
  94. package/dist/backend/llvm/js-ic.js +712 -0
  95. package/dist/backend/llvm/js-ic.js.map +1 -0
  96. package/dist/backend/llvm/jsval.js +139 -11
  97. package/dist/backend/llvm/jsval.js.map +1 -1
  98. package/dist/backend/llvm/lib-dispatch.js +10 -0
  99. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  100. package/dist/backend/llvm/lib-filesystem.js +61 -0
  101. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  102. package/dist/backend/llvm/lib-http2.d.ts +4 -0
  103. package/dist/backend/llvm/lib-http2.js +20 -17
  104. package/dist/backend/llvm/lib-http2.js.map +1 -1
  105. package/dist/backend/llvm/lib-process.js +69 -17
  106. package/dist/backend/llvm/lib-process.js.map +1 -1
  107. package/dist/backend/llvm/lib-shared.js +75 -1
  108. package/dist/backend/llvm/lib-shared.js.map +1 -1
  109. package/dist/backend/llvm/lib-stream.js +65 -28
  110. package/dist/backend/llvm/lib-stream.js.map +1 -1
  111. package/dist/backend/llvm/lib-tls.js +23 -0
  112. package/dist/backend/llvm/lib-tls.js.map +1 -1
  113. package/dist/backend/llvm/local-array-reads.js +91 -61
  114. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  115. package/dist/backend/llvm/local-array-reads.test.js +14 -0
  116. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  117. package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
  118. package/dist/backend/llvm/map-number-lookup.js +43 -7
  119. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  120. package/dist/backend/llvm/narrow-guards.js +64 -0
  121. package/dist/backend/llvm/narrow-guards.js.map +1 -1
  122. package/dist/backend/llvm/publish.d.ts +11 -1
  123. package/dist/backend/llvm/publish.js +80 -22
  124. package/dist/backend/llvm/publish.js.map +1 -1
  125. package/dist/backend/llvm/publish.test.js +3 -0
  126. package/dist/backend/llvm/publish.test.js.map +1 -1
  127. package/dist/backend/llvm/receivers.js +1 -1
  128. package/dist/backend/llvm/receivers.js.map +1 -1
  129. package/dist/backend/llvm/reference-writes.js +2 -0
  130. package/dist/backend/llvm/reference-writes.js.map +1 -1
  131. package/dist/backend/llvm/regex-matchers.js +161 -14
  132. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  133. package/dist/backend/llvm/regex-matchers.test.js +18 -0
  134. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  135. package/dist/backend/llvm/regions.js +2 -2
  136. package/dist/backend/llvm/regions.js.map +1 -1
  137. package/dist/backend/llvm/regions.test.js +7 -1
  138. package/dist/backend/llvm/regions.test.js.map +1 -1
  139. package/dist/backend/llvm/shapes.d.ts +17 -9
  140. package/dist/backend/llvm/shapes.js +21 -17
  141. package/dist/backend/llvm/shapes.js.map +1 -1
  142. package/dist/backend/llvm/speculative-integers.d.ts +20 -1
  143. package/dist/backend/llvm/speculative-integers.js +94 -6
  144. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  145. package/dist/backend/llvm/speculative-integers.test.js +55 -1
  146. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  147. package/dist/backend/llvm/string-lifetimes.test.js +2 -1
  148. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  149. package/dist/backend/llvm/string-reads.d.ts +4 -1
  150. package/dist/backend/llvm/string-reads.js +88 -4
  151. package/dist/backend/llvm/string-reads.js.map +1 -1
  152. package/dist/backend/llvm/thread-slots.test.js +5 -4
  153. package/dist/backend/llvm/thread-slots.test.js.map +1 -1
  154. package/dist/backend/llvm/wasm-modules.d.ts +6 -5
  155. package/dist/backend/llvm/wasm-modules.js +32 -9
  156. package/dist/backend/llvm/wasm-modules.js.map +1 -1
  157. package/dist/backend/mangle.d.ts +8 -0
  158. package/dist/backend/mangle.js +12 -0
  159. package/dist/backend/mangle.js.map +1 -1
  160. package/dist/backend/native/contracts.d.ts +40 -2
  161. package/dist/backend/native/executable.js +40 -7
  162. package/dist/backend/native/executable.js.map +1 -1
  163. package/dist/backend/native/library.js +3 -1
  164. package/dist/backend/native/library.js.map +1 -1
  165. package/dist/backend/native-codegen.d.ts +17 -6
  166. package/dist/backend/native-codegen.js +55 -9
  167. package/dist/backend/native-codegen.js.map +1 -1
  168. package/dist/backend/native-codegen.test.js +18 -14
  169. package/dist/backend/native-codegen.test.js.map +1 -1
  170. package/dist/backend/native-link-info-core.d.ts +30 -2
  171. package/dist/backend/native-link-info-core.js.map +1 -1
  172. package/dist/backend/native-profile.d.ts +32 -0
  173. package/dist/backend/native-profile.js +39 -0
  174. package/dist/backend/native-profile.js.map +1 -0
  175. package/dist/backend/native-profile.test.d.ts +1 -0
  176. package/dist/backend/native-profile.test.js +58 -0
  177. package/dist/backend/native-profile.test.js.map +1 -0
  178. package/dist/backend/native-tools.d.ts +14 -0
  179. package/dist/backend/native-tools.js +13 -0
  180. package/dist/backend/native-tools.js.map +1 -1
  181. package/dist/backend/optimization.d.ts +2 -2
  182. package/dist/backend/runtime-abi.d.ts +2 -2
  183. package/dist/backend/runtime-abi.js +2 -2
  184. package/dist/backend/runtime-pack-core.d.ts +4 -0
  185. package/dist/backend/runtime-pack-core.js +4 -0
  186. package/dist/backend/runtime-pack-core.js.map +1 -1
  187. package/dist/backend/runtime-pack-targets.test.js +7 -1
  188. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  189. package/dist/backend/runtime-pack.d.ts +0 -21
  190. package/dist/backend/runtime-pack.js +0 -29
  191. package/dist/backend/runtime-pack.js.map +1 -1
  192. package/dist/backend/runtime-pack.test.js +12 -69
  193. package/dist/backend/runtime-pack.test.js.map +1 -1
  194. package/dist/backend/target-diagnostics.js +38 -1
  195. package/dist/backend/target-diagnostics.js.map +1 -1
  196. package/dist/backend/warm-cache.js +6 -0
  197. package/dist/backend/warm-cache.js.map +1 -1
  198. package/dist/cli/command.js +89 -7
  199. package/dist/cli/command.js.map +1 -1
  200. package/dist/cli/host.d.ts +3 -0
  201. package/dist/cli/output-options.d.ts +2 -0
  202. package/dist/cli/output-options.js +9 -0
  203. package/dist/cli/output-options.js.map +1 -1
  204. package/dist/cli/usage.d.ts +15 -1
  205. package/dist/cli/usage.js +30 -2
  206. package/dist/cli/usage.js.map +1 -1
  207. package/dist/compile-types.d.ts +9 -0
  208. package/dist/contracts/check.js +2 -3
  209. package/dist/contracts/check.js.map +1 -1
  210. package/dist/coverage/report.d.ts +7 -2
  211. package/dist/coverage/report.js +18 -0
  212. package/dist/coverage/report.js.map +1 -1
  213. package/dist/coverage/verdict-cache.d.ts +1 -0
  214. package/dist/coverage/verdict-cache.js +4 -0
  215. package/dist/coverage/verdict-cache.js.map +1 -1
  216. package/dist/coverage/verdict-semantic.js +4 -0
  217. package/dist/coverage/verdict-semantic.js.map +1 -1
  218. package/dist/diagnostics/diagnostic.js.map +1 -1
  219. package/dist/diagnostics/dynamic-tier.d.ts +40 -0
  220. package/dist/diagnostics/dynamic-tier.js +57 -0
  221. package/dist/diagnostics/dynamic-tier.js.map +1 -0
  222. package/dist/diagnostics/envelope.d.ts +2 -1
  223. package/dist/diagnostics/envelope.js +5 -2
  224. package/dist/diagnostics/envelope.js.map +1 -1
  225. package/dist/executable/executable-cache.d.ts +32 -0
  226. package/dist/executable/executable-cache.js +65 -7
  227. package/dist/executable/executable-cache.js.map +1 -1
  228. package/dist/executable/executable-cache.test.js +50 -3
  229. package/dist/executable/executable-cache.test.js.map +1 -1
  230. package/dist/executable/prepare.js +3 -1
  231. package/dist/executable/prepare.js.map +1 -1
  232. package/dist/frontend/analysis.js +1 -0
  233. package/dist/frontend/analysis.js.map +1 -1
  234. package/dist/frontend/arguments-usage.d.ts +8 -0
  235. package/dist/frontend/arguments-usage.js +98 -0
  236. package/dist/frontend/arguments-usage.js.map +1 -1
  237. package/dist/frontend/arguments-usage.test.d.ts +1 -0
  238. package/dist/frontend/arguments-usage.test.js +32 -0
  239. package/dist/frontend/arguments-usage.test.js.map +1 -0
  240. package/dist/frontend/builtin-package-aliases.d.ts +24 -0
  241. package/dist/frontend/builtin-package-aliases.js +133 -0
  242. package/dist/frontend/builtin-package-aliases.js.map +1 -0
  243. package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
  244. package/dist/frontend/builtin-package-aliases.test.js +48 -0
  245. package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
  246. package/dist/frontend/dispose-hook.d.ts +2 -0
  247. package/dist/frontend/dispose-hook.js +14 -0
  248. package/dist/frontend/dispose-hook.js.map +1 -0
  249. package/dist/frontend/dts-paths.d.ts +4 -0
  250. package/dist/frontend/dts-paths.js +9 -1
  251. package/dist/frontend/dts-paths.js.map +1 -1
  252. package/dist/frontend/jsx-entities.d.ts +4 -0
  253. package/dist/frontend/jsx-entities.js +259 -0
  254. package/dist/frontend/jsx-entities.js.map +1 -0
  255. package/dist/frontend/jsx-source.d.ts +71 -0
  256. package/dist/frontend/jsx-source.js +781 -0
  257. package/dist/frontend/jsx-source.js.map +1 -0
  258. package/dist/frontend/jsx-source.test.d.ts +1 -0
  259. package/dist/frontend/jsx-source.test.js +200 -0
  260. package/dist/frontend/jsx-source.test.js.map +1 -0
  261. package/dist/frontend/literal-values.test.js +8 -9
  262. package/dist/frontend/literal-values.test.js.map +1 -1
  263. package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
  264. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  265. package/dist/frontend/lowering/array-values.js +3 -2
  266. package/dist/frontend/lowering/array-values.js.map +1 -1
  267. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  268. package/dist/frontend/lowering/binding-analysis.js +2 -2
  269. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  270. package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
  271. package/dist/frontend/lowering/builtins/arguments.js +30 -15
  272. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  273. package/dist/frontend/lowering/builtins/atomics.js +10 -6
  274. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  275. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +8 -0
  276. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +50 -1
  277. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -1
  278. package/dist/frontend/lowering/builtins/callable-aliases.js +3 -2
  279. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  280. package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
  281. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  282. package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
  283. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  284. package/dist/frontend/lowering/builtins/crypto.d.ts +7 -2
  285. package/dist/frontend/lowering/builtins/crypto.js +63 -4
  286. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  287. package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
  288. package/dist/frontend/lowering/builtins/date-classes.js +477 -0
  289. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
  290. package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
  291. package/dist/frontend/lowering/builtins/dates.js +55 -26
  292. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  293. package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
  294. package/dist/frontend/lowering/builtins/dh.js +151 -0
  295. package/dist/frontend/lowering/builtins/dh.js.map +1 -0
  296. package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
  297. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  298. package/dist/frontend/lowering/builtins/ecdh.d.ts +21 -0
  299. package/dist/frontend/lowering/builtins/ecdh.js +208 -0
  300. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
  301. package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
  302. package/dist/frontend/lowering/builtins/errors.js +110 -0
  303. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  304. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
  305. package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
  306. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  307. package/dist/frontend/lowering/builtins/filesystem.js +6 -4
  308. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  309. package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
  310. package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
  311. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
  312. package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
  313. package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
  314. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
  315. package/dist/frontend/lowering/builtins/json.js +54 -1
  316. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  317. package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
  318. package/dist/frontend/lowering/builtins/key-object.js +20 -7
  319. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  320. package/dist/frontend/lowering/builtins/module-calls.js +11 -4
  321. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  322. package/dist/frontend/lowering/builtins/numbers.js +9 -5
  323. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  324. package/dist/frontend/lowering/builtins/operating-system.js +4 -3
  325. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  326. package/dist/frontend/lowering/builtins/performance.js +3 -2
  327. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  328. package/dist/frontend/lowering/builtins/process.d.ts +9 -0
  329. package/dist/frontend/lowering/builtins/process.js +47 -2
  330. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  331. package/dist/frontend/lowering/builtins/promises.js +3 -2
  332. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  333. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +3 -0
  334. package/dist/frontend/lowering/builtins/promisify-callback.js +23 -4
  335. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  336. package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
  337. package/dist/frontend/lowering/builtins/readline.js +23 -6
  338. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  339. package/dist/frontend/lowering/builtins/reflection.js +26 -0
  340. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  341. package/dist/frontend/lowering/builtins/strings.js +13 -5
  342. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  343. package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
  344. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  345. package/dist/frontend/lowering/builtins/timers.js +6 -2
  346. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  347. package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
  348. package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
  349. package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
  350. package/dist/frontend/lowering/builtins/url.js +4 -3
  351. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  352. package/dist/frontend/lowering/builtins/v8.js +2 -1
  353. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  354. package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
  355. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
  356. package/dist/frontend/lowering/call-arguments.js +2 -1
  357. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  358. package/dist/frontend/lowering/call-signatures.d.ts +4 -0
  359. package/dist/frontend/lowering/call-signatures.js +137 -13
  360. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  361. package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
  362. package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
  363. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
  364. package/dist/frontend/lowering/cjs-exports-object.js +34 -1
  365. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  366. package/dist/frontend/lowering/class-assertions.js +3 -2
  367. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  368. package/dist/frontend/lowering/class-construction.d.ts +2 -1
  369. package/dist/frontend/lowering/class-construction.js +8 -13
  370. package/dist/frontend/lowering/class-construction.js.map +1 -1
  371. package/dist/frontend/lowering/class-descriptors.js +1 -1
  372. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  373. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
  374. package/dist/frontend/lowering/class-dynamic-dispatch.js +577 -152
  375. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  376. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
  377. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  378. package/dist/frontend/lowering/class-method-mutations.js +3 -0
  379. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  380. package/dist/frontend/lowering/class-method-values.js +1 -1
  381. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  382. package/dist/frontend/lowering/class-protocols.d.ts +17 -0
  383. package/dist/frontend/lowering/class-protocols.js +117 -7
  384. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  385. package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
  386. package/dist/frontend/lowering/class-prototypes.js +42 -4
  387. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  388. package/dist/frontend/lowering/class-to-primitive.d.ts +2 -2
  389. package/dist/frontend/lowering/class-to-primitive.js +31 -8
  390. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  391. package/dist/frontend/lowering/class-unions.js +2 -1
  392. package/dist/frontend/lowering/class-unions.js.map +1 -1
  393. package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
  394. package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
  395. package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
  396. package/dist/frontend/lowering/coercions/function-adapters.js +105 -75
  397. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  398. package/dist/frontend/lowering/coercions/structural.js +8 -7
  399. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  400. package/dist/frontend/lowering/coercions/unions.js +8 -7
  401. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  402. package/dist/frontend/lowering/collection-ingestion.js +2 -1
  403. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  404. package/dist/frontend/lowering/containers/array-callbacks.d.ts +15 -0
  405. package/dist/frontend/lowering/containers/array-callbacks.js +36 -32
  406. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  407. package/dist/frontend/lowering/containers/array-concat.js +2 -1
  408. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  409. package/dist/frontend/lowering/containers/array-construction.js +32 -4
  410. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  411. package/dist/frontend/lowering/containers/array-methods.js +11 -5
  412. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  413. package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
  414. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  415. package/dist/frontend/lowering/containers/bytes.d.ts +10 -1
  416. package/dist/frontend/lowering/containers/bytes.js +601 -24
  417. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  418. package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
  419. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  420. package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
  421. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  422. package/dist/frontend/lowering/containers/collection-methods.js +80 -10
  423. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  424. package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
  425. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  426. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
  427. package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
  428. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  429. package/dist/frontend/lowering/containers/string-and-regexp.js +85 -22
  430. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  431. package/dist/frontend/lowering/containers/string-replacement.js +2 -1
  432. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  433. package/dist/frontend/lowering/cycle-initialization.d.ts +26 -10
  434. package/dist/frontend/lowering/cycle-initialization.js +177 -39
  435. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  436. package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
  437. package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
  438. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  439. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  440. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  441. package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
  442. package/dist/frontend/lowering/dispatch-sites.js +204 -0
  443. package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
  444. package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
  445. package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
  446. package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
  447. package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
  448. package/dist/frontend/lowering/dyn-streams.js +1 -1
  449. package/dist/frontend/lowering/dyn-streams.js.map +1 -1
  450. package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
  451. package/dist/frontend/lowering/dynamic-tier.js +327 -0
  452. package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
  453. package/dist/frontend/lowering/error-methods.js +4 -0
  454. package/dist/frontend/lowering/error-methods.js.map +1 -1
  455. package/dist/frontend/lowering/expressions/array-literals.js +48 -13
  456. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  457. package/dist/frontend/lowering/expressions/binary.js +124 -8
  458. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  459. package/dist/frontend/lowering/expressions/element-access.js +30 -7
  460. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  461. package/dist/frontend/lowering/expressions/identifiers.js +46 -7
  462. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  463. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +14 -2
  464. package/dist/frontend/lowering/expressions/keyed-field-targets.js +91 -10
  465. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
  466. package/dist/frontend/lowering/expressions/narrowing.js +52 -7
  467. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  468. package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
  469. package/dist/frontend/lowering/expressions/object-literals.js +75 -7
  470. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  471. package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
  472. package/dist/frontend/lowering/expressions/optional-chains.js +17 -8
  473. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  474. package/dist/frontend/lowering/expressions/property-access.d.ts +5 -4
  475. package/dist/frontend/lowering/expressions/property-access.js +351 -16
  476. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  477. package/dist/frontend/lowering/expressions/relational.js +112 -9
  478. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  479. package/dist/frontend/lowering/expressions/typeof.js +13 -0
  480. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  481. package/dist/frontend/lowering/expressions/updates.js +64 -10
  482. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  483. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  484. package/dist/frontend/lowering/generator-delegation.js +191 -1
  485. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  486. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
  487. package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
  488. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  489. package/dist/frontend/lowering/generic-functions.d.ts +46 -1
  490. package/dist/frontend/lowering/generic-functions.js +660 -73
  491. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  492. package/dist/frontend/lowering/handle-properties.d.ts +24 -0
  493. package/dist/frontend/lowering/handle-properties.js +281 -0
  494. package/dist/frontend/lowering/handle-properties.js.map +1 -0
  495. package/dist/frontend/lowering/intern-tables.js +2 -1
  496. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  497. package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
  498. package/dist/frontend/lowering/iterable-spelling.js +38 -0
  499. package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
  500. package/dist/frontend/lowering/iterator-adapters.js +9 -8
  501. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  502. package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
  503. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
  504. package/dist/frontend/lowering/json-require.js +2 -1
  505. package/dist/frontend/lowering/json-require.js.map +1 -1
  506. package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
  507. package/dist/frontend/lowering/key-order-witness.js +21 -4
  508. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  509. package/dist/frontend/lowering/key-order-witness.test.js +38 -2
  510. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  511. package/dist/frontend/lowering/lifetime-regions.js +2 -1
  512. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  513. package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
  514. package/dist/frontend/lowering/lower-array-sort.js +117 -21
  515. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  516. package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
  517. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  518. package/dist/frontend/lowering/lower-assert.js +6 -5
  519. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  520. package/dist/frontend/lowering/lower-async-iteration.js +3 -1
  521. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  522. package/dist/frontend/lowering/lower-builtin-values.js +1 -0
  523. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  524. package/dist/frontend/lowering/lower-calls.d.ts +4 -0
  525. package/dist/frontend/lowering/lower-calls.js +504 -97
  526. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  527. package/dist/frontend/lowering/lower-classes.d.ts +22 -0
  528. package/dist/frontend/lowering/lower-classes.js +339 -32
  529. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  530. package/dist/frontend/lowering/lower-dgram.js +65 -15
  531. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  532. package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
  533. package/dist/frontend/lowering/lower-event-emitter.js +267 -20
  534. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  535. package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
  536. package/dist/frontend/lowering/lower-exprs.js +148 -12
  537. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  538. package/dist/frontend/lowering/lower-functions.js +308 -72
  539. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  540. package/dist/frontend/lowering/lower-generators.js +10 -4
  541. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  542. package/dist/frontend/lowering/lower-inspect.js +578 -16
  543. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  544. package/dist/frontend/lowering/lower-mixins.js +2 -1
  545. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  546. package/dist/frontend/lowering/lower-mock.js +2 -1
  547. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  548. package/dist/frontend/lowering/lower-modules.d.ts +11 -3
  549. package/dist/frontend/lowering/lower-modules.js +227 -72
  550. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  551. package/dist/frontend/lowering/lower-modules.test.js +2 -2
  552. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  553. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
  554. package/dist/frontend/lowering/lower-namespaces.js +24 -3
  555. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  556. package/dist/frontend/lowering/lower-server.d.ts +10 -0
  557. package/dist/frontend/lowering/lower-server.js +263 -60
  558. package/dist/frontend/lowering/lower-server.js.map +1 -1
  559. package/dist/frontend/lowering/lower-stdlib.js +39 -18
  560. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  561. package/dist/frontend/lowering/lower-stmts.d.ts +7 -10
  562. package/dist/frontend/lowering/lower-stmts.js +584 -69
  563. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  564. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  565. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  566. package/dist/frontend/lowering/lower-stream.js +575 -165
  567. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  568. package/dist/frontend/lowering/lower-timers.js +21 -4
  569. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  570. package/dist/frontend/lowering/lowerer.d.ts +151 -30
  571. package/dist/frontend/lowering/lowerer.js +725 -84
  572. package/dist/frontend/lowering/lowerer.js.map +1 -1
  573. package/dist/frontend/lowering/lowerer.test.js +21 -9
  574. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  575. package/dist/frontend/lowering/narrowing-stability.js +5 -0
  576. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  577. package/dist/frontend/lowering/native-ffi.js +1 -1
  578. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  579. package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
  580. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  581. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  582. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  583. package/dist/frontend/lowering/private-brands.d.ts +9 -0
  584. package/dist/frontend/lowering/private-brands.js +66 -15
  585. package/dist/frontend/lowering/private-brands.js.map +1 -1
  586. package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
  587. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  588. package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
  589. package/dist/frontend/lowering/rebindable-functions.js +54 -0
  590. package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
  591. package/dist/frontend/lowering/require-initialization.js +2 -1
  592. package/dist/frontend/lowering/require-initialization.js.map +1 -1
  593. package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
  594. package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
  595. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  596. package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
  597. package/dist/frontend/lowering/runtime-optional-records.js +18 -5
  598. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  599. package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
  600. package/dist/frontend/lowering/site-dependencies.js +84 -0
  601. package/dist/frontend/lowering/site-dependencies.js.map +1 -0
  602. package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
  603. package/dist/frontend/lowering/site-dependencies.test.js +53 -0
  604. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
  605. package/dist/frontend/lowering/stable-names.d.ts +11 -0
  606. package/dist/frontend/lowering/stable-names.js +35 -0
  607. package/dist/frontend/lowering/stable-names.js.map +1 -0
  608. package/dist/frontend/lowering/static-typeof.d.ts +26 -0
  609. package/dist/frontend/lowering/static-typeof.js +172 -0
  610. package/dist/frontend/lowering/static-typeof.js.map +1 -0
  611. package/dist/frontend/lowering/strict-equality.js +2 -1
  612. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  613. package/dist/frontend/lowering/string-index-bounds.js +3 -2
  614. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  615. package/dist/frontend/lowering/structural-positions.d.ts +32 -0
  616. package/dist/frontend/lowering/structural-positions.js +108 -0
  617. package/dist/frontend/lowering/structural-positions.js.map +1 -0
  618. package/dist/frontend/lowering/surfaces.js +72 -30
  619. package/dist/frontend/lowering/surfaces.js.map +1 -1
  620. package/dist/frontend/lowering/thenables.d.ts +16 -0
  621. package/dist/frontend/lowering/thenables.js +124 -0
  622. package/dist/frontend/lowering/thenables.js.map +1 -0
  623. package/dist/frontend/lowering/var-hoisting.js +37 -3
  624. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  625. package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
  626. package/dist/frontend/npm-static-builtin-aliases.js +65 -0
  627. package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
  628. package/dist/frontend/npm-static-bundled-chunks.d.ts +8 -1
  629. package/dist/frontend/npm-static-bundled-chunks.js +173 -2
  630. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  631. package/dist/frontend/npm-static-bundled-chunks.test.js +112 -0
  632. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  633. package/dist/frontend/npm-static-bundled-esm.js +224 -4
  634. package/dist/frontend/npm-static-bundled-esm.js.map +1 -1
  635. package/dist/frontend/npm-static-bundled-esm.test.js +129 -0
  636. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -1
  637. package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
  638. package/dist/frontend/npm-static-enum-iife.js +280 -0
  639. package/dist/frontend/npm-static-enum-iife.js.map +1 -0
  640. package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
  641. package/dist/frontend/npm-static-enum-iife.test.js +116 -0
  642. package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
  643. package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
  644. package/dist/frontend/npm-static-tsc-helpers.js +106 -0
  645. package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
  646. package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
  647. package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
  648. package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
  649. package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
  650. package/dist/frontend/npm-static-type-exports-host.js +214 -0
  651. package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
  652. package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
  653. package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
  654. package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
  655. package/dist/frontend/npm-static-type-exports.d.ts +52 -0
  656. package/dist/frontend/npm-static-type-exports.js +261 -0
  657. package/dist/frontend/npm-static-type-exports.js.map +1 -0
  658. package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
  659. package/dist/frontend/npm-static-type-exports.test.js +103 -0
  660. package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
  661. package/dist/frontend/npm-static-umd.d.ts +6 -0
  662. package/dist/frontend/npm-static-umd.js +203 -0
  663. package/dist/frontend/npm-static-umd.js.map +1 -0
  664. package/dist/frontend/npm-static-umd.test.d.ts +1 -0
  665. package/dist/frontend/npm-static-umd.test.js +105 -0
  666. package/dist/frontend/npm-static-umd.test.js.map +1 -0
  667. package/dist/frontend/npm-static.d.ts +16 -0
  668. package/dist/frontend/npm-static.js +93 -3
  669. package/dist/frontend/npm-static.js.map +1 -1
  670. package/dist/frontend/npm.js +13 -0
  671. package/dist/frontend/npm.js.map +1 -1
  672. package/dist/frontend/package-shims.d.ts +47 -0
  673. package/dist/frontend/package-shims.js +300 -0
  674. package/dist/frontend/package-shims.js.map +1 -0
  675. package/dist/frontend/pipeline.js +67 -1
  676. package/dist/frontend/pipeline.js.map +1 -1
  677. package/dist/frontend/program.d.ts +21 -0
  678. package/dist/frontend/program.js +174 -14
  679. package/dist/frontend/program.js.map +1 -1
  680. package/dist/frontend/program.test.js +1 -1
  681. package/dist/frontend/program.test.js.map +1 -1
  682. package/dist/frontend/resolve.js +13 -0
  683. package/dist/frontend/resolve.js.map +1 -1
  684. package/dist/frontend/services.d.ts +12 -0
  685. package/dist/frontend/services.js +37 -0
  686. package/dist/frontend/services.js.map +1 -1
  687. package/dist/frontend/ts7/ast-node.d.ts +21 -7
  688. package/dist/frontend/ts7/ast-node.js +131 -29
  689. package/dist/frontend/ts7/ast-node.js.map +1 -1
  690. package/dist/frontend/ts7/ast-node.test.js +60 -0
  691. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  692. package/dist/frontend/ts7/ast-wire.d.ts +27 -2
  693. package/dist/frontend/ts7/ast-wire.js +124 -21
  694. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  695. package/dist/frontend/ts7/ast.d.ts +23 -2
  696. package/dist/frontend/ts7/ast.js +143 -2
  697. package/dist/frontend/ts7/ast.js.map +1 -1
  698. package/dist/frontend/ts7/checker.d.ts +13 -1
  699. package/dist/frontend/ts7/checker.js +75 -1
  700. package/dist/frontend/ts7/checker.js.map +1 -1
  701. package/dist/frontend/ts7/checker.test.js +9 -6
  702. package/dist/frontend/ts7/checker.test.js.map +1 -1
  703. package/dist/frontend/ts7/enums.d.ts +3 -3
  704. package/dist/frontend/ts7/enums.generated.d.ts +10 -0
  705. package/dist/frontend/ts7/enums.generated.js +21 -0
  706. package/dist/frontend/ts7/enums.generated.js.map +1 -1
  707. package/dist/frontend/ts7/enums.js +19 -0
  708. package/dist/frontend/ts7/enums.js.map +1 -1
  709. package/dist/frontend/ts7/program-host.d.ts +6 -5
  710. package/dist/frontend/ts7/program-host.js +12 -2
  711. package/dist/frontend/ts7/program-host.js.map +1 -1
  712. package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
  713. package/dist/frontend/ts7/semantic-checker.js +25 -20
  714. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  715. package/dist/frontend/ts7/semantic-json.d.ts +13 -0
  716. package/dist/frontend/ts7/semantic-json.js +146 -0
  717. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  718. package/dist/frontend/ts7/semantic-json.test.js +57 -1
  719. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  720. package/dist/frontend/ts7/semantic-model.d.ts +18 -0
  721. package/dist/frontend/ts7/semantic-model.js +90 -16
  722. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  723. package/dist/frontend/ts7/semantic-model.test.js +3 -2
  724. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  725. package/dist/frontend/ts7/session.d.ts +19 -4
  726. package/dist/frontend/ts7/session.js +1 -1
  727. package/dist/frontend/ts7/session.js.map +1 -1
  728. package/dist/frontend/tsc-codes.d.ts +1 -1
  729. package/dist/frontend/tsc-codes.js +7 -0
  730. package/dist/frontend/tsc-codes.js.map +1 -1
  731. package/dist/frontend/type-mapper.d.ts +38 -6
  732. package/dist/frontend/type-mapper.js +466 -47
  733. package/dist/frontend/type-mapper.js.map +1 -1
  734. package/dist/frontend/type-mapper.test.js +1 -1
  735. package/dist/frontend/type-mapper.test.js.map +1 -1
  736. package/dist/frontend-process-args.d.ts +4 -0
  737. package/dist/frontend-process-args.js +52 -0
  738. package/dist/frontend-process-args.js.map +1 -0
  739. package/dist/frontend-process-args.test.d.ts +1 -0
  740. package/dist/frontend-process-args.test.js +47 -0
  741. package/dist/frontend-process-args.test.js.map +1 -0
  742. package/dist/frontend-process.d.ts +1 -0
  743. package/dist/frontend-process.js +23 -0
  744. package/dist/frontend-process.js.map +1 -0
  745. package/dist/heap-collection.d.ts +16 -0
  746. package/dist/heap-collection.js +42 -0
  747. package/dist/heap-collection.js.map +1 -0
  748. package/dist/heap-collection.test.d.ts +1 -0
  749. package/dist/heap-collection.test.js +59 -0
  750. package/dist/heap-collection.test.js.map +1 -0
  751. package/dist/heap-pressure.d.ts +2 -0
  752. package/dist/heap-pressure.js +12 -0
  753. package/dist/heap-pressure.js.map +1 -0
  754. package/dist/index.d.ts +8 -0
  755. package/dist/index.js +453 -85
  756. package/dist/index.js.map +1 -1
  757. package/dist/ir/array-length-stability.d.ts +3 -2
  758. package/dist/ir/array-length-stability.js +22 -2
  759. package/dist/ir/array-length-stability.js.map +1 -1
  760. package/dist/ir/array-length-stability.test.js +47 -1
  761. package/dist/ir/array-length-stability.test.js.map +1 -1
  762. package/dist/ir/builtin-effects.js +41 -0
  763. package/dist/ir/builtin-effects.js.map +1 -1
  764. package/dist/ir/builtin-signatures.d.ts +5 -1
  765. package/dist/ir/builtin-signatures.js +187 -16
  766. package/dist/ir/builtin-signatures.js.map +1 -1
  767. package/dist/ir/final-fields.d.ts +2 -1
  768. package/dist/ir/final-fields.js +2 -2
  769. package/dist/ir/final-fields.js.map +1 -1
  770. package/dist/ir/function-references.test.js +2 -0
  771. package/dist/ir/function-references.test.js.map +1 -1
  772. package/dist/ir/int32-slots.d.ts +13 -5
  773. package/dist/ir/int32-slots.js +112 -115
  774. package/dist/ir/int32-slots.js.map +1 -1
  775. package/dist/ir/int32-slots.test.js +3 -1
  776. package/dist/ir/int32-slots.test.js.map +1 -1
  777. package/dist/ir/integer-loop-facts.d.ts +14 -4
  778. package/dist/ir/integer-loop-facts.js +172 -32
  779. package/dist/ir/integer-loop-facts.js.map +1 -1
  780. package/dist/ir/integer-loops.d.ts +49 -0
  781. package/dist/ir/integer-loops.js +193 -39
  782. package/dist/ir/integer-loops.js.map +1 -1
  783. package/dist/ir/integer-loops.test.js +201 -1
  784. package/dist/ir/integer-loops.test.js.map +1 -1
  785. package/dist/ir/integer-ranges.d.ts +10 -1
  786. package/dist/ir/integer-ranges.js +122 -25
  787. package/dist/ir/integer-ranges.js.map +1 -1
  788. package/dist/ir/integer-ranges.test.js +255 -1
  789. package/dist/ir/integer-ranges.test.js.map +1 -1
  790. package/dist/ir/ir.d.ts +17 -2
  791. package/dist/ir/ir.js +11 -1
  792. package/dist/ir/ir.js.map +1 -1
  793. package/dist/ir/js-ic.d.ts +52 -0
  794. package/dist/ir/js-ic.js +199 -0
  795. package/dist/ir/js-ic.js.map +1 -0
  796. package/dist/ir/js-ic.test.d.ts +1 -0
  797. package/dist/ir/js-ic.test.js +148 -0
  798. package/dist/ir/js-ic.test.js.map +1 -0
  799. package/dist/ir/jsval.js +38 -4
  800. package/dist/ir/jsval.js.map +1 -1
  801. package/dist/ir/runtime-features.d.ts +64 -5
  802. package/dist/ir/runtime-features.js +358 -101
  803. package/dist/ir/runtime-features.js.map +1 -1
  804. package/dist/ir/tiers.js +1 -0
  805. package/dist/ir/tiers.js.map +1 -1
  806. package/dist/ir/traverse.d.ts +2 -0
  807. package/dist/ir/traverse.js +124 -70
  808. package/dist/ir/traverse.js.map +1 -1
  809. package/dist/ir/validate.js +77 -24
  810. package/dist/ir/validate.js.map +1 -1
  811. package/dist/ir/validate.test.js +15 -2
  812. package/dist/ir/validate.test.js.map +1 -1
  813. package/dist/library/ir-policy.js +11 -0
  814. package/dist/library/ir-policy.js.map +1 -1
  815. package/dist/library/library-cache.d.ts +2 -0
  816. package/dist/library/library-cache.js.map +1 -1
  817. package/dist/library/prepare.js +2 -0
  818. package/dist/library/prepare.js.map +1 -1
  819. package/dist/native/cli.js +22 -0
  820. package/dist/native/cli.js.map +1 -1
  821. package/dist/native/compiler.js +33 -4
  822. package/dist/native/compiler.js.map +1 -1
  823. package/dist/native/executable-cache.js +3 -0
  824. package/dist/native/executable-cache.js.map +1 -1
  825. package/dist/native/prepare.js +8 -1
  826. package/dist/native/prepare.js.map +1 -1
  827. package/dist/native/sanitizer.test.js +10 -0
  828. package/dist/native/sanitizer.test.js.map +1 -1
  829. package/dist/startup-cache.d.ts +1 -0
  830. package/dist/startup-cache.js +1 -0
  831. package/dist/startup-cache.js.map +1 -1
  832. package/dist/text-parts.d.ts +7 -0
  833. package/dist/text-parts.js +44 -0
  834. package/dist/text-parts.js.map +1 -1
  835. package/dist/text-parts.test.d.ts +1 -0
  836. package/dist/text-parts.test.js +46 -0
  837. package/dist/text-parts.test.js.map +1 -0
  838. package/dist/timing.d.ts +9 -2
  839. package/dist/timing.js +7 -4
  840. package/dist/timing.js.map +1 -1
  841. package/dist/wasm/translate.d.ts +4 -0
  842. package/dist/wasm/translate.js +2 -2
  843. package/dist/wasm/translate.js.map +1 -1
  844. package/package.json +22 -21
  845. package/shims/fs-extra/core/api.ts +1192 -0
  846. package/shims/fs-extra/index.ts +9 -0
  847. package/shims/undici/core/agent.ts +163 -0
  848. package/shims/undici/core/api.ts +93 -0
  849. package/shims/undici/core/client.ts +1304 -0
  850. package/shims/undici/core/connector.ts +157 -0
  851. package/shims/undici/core/diagnostics-types.ts +68 -0
  852. package/shims/undici/core/diagnostics.ts +16 -0
  853. package/shims/undici/core/dispatcher.ts +574 -0
  854. package/shims/undici/core/errors-v5.ts +22 -0
  855. package/shims/undici/core/errors-v7.ts +25 -0
  856. package/shims/undici/core/errors.ts +255 -0
  857. package/shims/undici/core/fetch.ts +635 -0
  858. package/shims/undici/core/pool.ts +280 -0
  859. package/shims/undici/core/readable.ts +268 -0
  860. package/shims/undici/core/request.ts +313 -0
  861. package/shims/undici/core/timers.ts +80 -0
  862. package/shims/undici/core/types.ts +167 -0
  863. package/shims/undici/core/util.ts +67 -0
  864. package/shims/undici/v5.ts +119 -0
  865. package/shims/undici/v7.ts +119 -0
  866. package/surface-manifest.json +20 -52
@@ -0,0 +1,1192 @@
1
+ // fs-extra's exports over node:fs.
2
+ //
3
+ // fs-extra re-exports every fs member and wraps the asynchronous ones with
4
+ // universalify: a call whose last argument is a function takes the callback
5
+ // form, any other call returns a promise. The wrapped methods below follow
6
+ // that rule over fs.promises (callback forms settle through the promise);
7
+ // fs's other members are fs's own. The extra methods (copy, remove, mkdirs,
8
+ // the JSON helpers, ...) restate fs-extra's behavior and error messages.
9
+ // graceful-fs's EMFILE retry queue, which fs-extra loads under Node, has no
10
+ // counterpart: on Node 24 it only changes behavior when the process runs
11
+ // out of file descriptors.
12
+ //
13
+ // What is not declared here is a compile-time error: ensureLink,
14
+ // ensureSymlink, createLink, createSymlink and their sync forms,
15
+ // gracefulify, the descriptor-based methods' promise forms (fstat, read,
16
+ // write, ...), the callback forms of the methods that answer stats,
17
+ // listings or paths (stat, lstat, readdir, mkdtemp, realpath, readJson),
18
+ // Buffer and URL paths, and option shapes fs.promises does not compile
19
+ // natively (copyFile mode flags, append options, write flags, string modes,
20
+ // numeric utimes times). A readFile callback that fails receives an empty
21
+ // value beside the error, where Node passes undefined.
22
+ import * as fs from "node:fs";
23
+ import * as fsp from "node:fs/promises";
24
+ import * as path from "node:path";
25
+ import type { Stats } from "node:fs";
26
+
27
+ // fs's other members, as fs-extra re-exports them (fs-extra's own versions
28
+ // of the wrapped methods below take their place).
29
+ export {
30
+ appendFileSync,
31
+ accessSync,
32
+ chownSync,
33
+ chmodSync,
34
+ close,
35
+ closeSync,
36
+ copyFileSync,
37
+ cp,
38
+ cpSync,
39
+ createReadStream,
40
+ createWriteStream,
41
+ exists,
42
+ existsSync,
43
+ fchown,
44
+ fchownSync,
45
+ fchmod,
46
+ fchmodSync,
47
+ fdatasync,
48
+ fdatasyncSync,
49
+ fstat,
50
+ fstatSync,
51
+ fsync,
52
+ fsyncSync,
53
+ ftruncate,
54
+ ftruncateSync,
55
+ futimes,
56
+ futimesSync,
57
+ lchownSync,
58
+ linkSync,
59
+ lstatSync,
60
+ lutimes,
61
+ lutimesSync,
62
+ mkdirSync,
63
+ mkdtempSync,
64
+ open,
65
+ openSync,
66
+ readdirSync,
67
+ read,
68
+ readSync,
69
+ readv,
70
+ readvSync,
71
+ readFileSync,
72
+ readlinkSync,
73
+ realpathSync,
74
+ renameSync,
75
+ rmSync,
76
+ rmdirSync,
77
+ statfs,
78
+ statSync,
79
+ statfsSync,
80
+ symlinkSync,
81
+ truncateSync,
82
+ unwatchFile,
83
+ unlinkSync,
84
+ utimesSync,
85
+ watch,
86
+ watchFile,
87
+ writeFileSync,
88
+ write,
89
+ writeSync,
90
+ writev,
91
+ writevSync,
92
+ Dirent,
93
+ Stats,
94
+ ReadStream,
95
+ WriteStream,
96
+ Dir,
97
+ opendir,
98
+ opendirSync,
99
+ constants,
100
+ promises,
101
+ } from "node:fs";
102
+
103
+ /** A Node-style callback with a result. */
104
+ export type Callback<T> = (err: NodeJS.ErrnoException | null, value: T) => void;
105
+ /** A Node-style callback without a result. */
106
+ export type VoidCallback = (err: NodeJS.ErrnoException | null) => void;
107
+
108
+ export type SymlinkType = "dir" | "file" | "junction";
109
+ export type Utf8 = "utf8" | "utf-8";
110
+
111
+ export interface WriteFileOptions {
112
+ encoding?: Utf8 | undefined;
113
+ mode?: number | undefined;
114
+ }
115
+
116
+ export interface ReadOptions {
117
+ throws?: boolean | undefined;
118
+ encoding?: Utf8 | undefined;
119
+ }
120
+
121
+ export interface WriteOptions {
122
+ encoding?: Utf8 | undefined;
123
+ mode?: number | undefined;
124
+ spaces?: number | undefined;
125
+ EOL?: string | undefined;
126
+ finalEOL?: boolean | undefined;
127
+ }
128
+
129
+ /** A copy filter: fs-extra accepts a boolean or a promise of one. */
130
+ export type CopyFilter = (src: string, dest: string) => boolean | Promise<boolean>;
131
+
132
+ export interface CopyOptions {
133
+ dereference?: boolean | undefined;
134
+ overwrite?: boolean | undefined;
135
+ preserveTimestamps?: boolean | undefined;
136
+ errorOnExist?: boolean | undefined;
137
+ filter?: CopyFilter | undefined;
138
+ }
139
+
140
+ export interface CopyOptionsSync {
141
+ dereference?: boolean | undefined;
142
+ overwrite?: boolean | undefined;
143
+ preserveTimestamps?: boolean | undefined;
144
+ errorOnExist?: boolean | undefined;
145
+ filter?: ((src: string, dest: string) => boolean) | undefined;
146
+ }
147
+
148
+ export interface MoveOptions {
149
+ overwrite?: boolean | undefined;
150
+ }
151
+
152
+ export interface EnsureOptions {
153
+ mode?: number | undefined;
154
+ }
155
+
156
+ export interface MakeDirectoryOptions {
157
+ recursive?: boolean | undefined;
158
+ mode?: number | undefined;
159
+ }
160
+
161
+ export interface RmOptions {
162
+ force?: boolean | undefined;
163
+ recursive?: boolean | undefined;
164
+ }
165
+
166
+ function settleVoid(promise: Promise<void>, callback: VoidCallback | undefined): Promise<void> {
167
+ if (callback === undefined) return promise;
168
+ // The callback form's promise settles only through the callback (it
169
+ // never rejects); fs-extra answers undefined there.
170
+ return promise.then(
171
+ () => callback(null),
172
+ (err: NodeJS.ErrnoException) => callback(err),
173
+ );
174
+ }
175
+
176
+ /** The result of a callback-form call that settles through fs's own
177
+ * callback: callers ignore it (fs-extra answers undefined). */
178
+ function idle(): Promise<never> {
179
+ return new Promise<never>(() => undefined);
180
+ }
181
+
182
+ function codeOf(err: unknown): string | undefined {
183
+ return err instanceof Error ? (err as NodeJS.ErrnoException).code : undefined;
184
+ }
185
+
186
+ /* ── fs methods in universalify's wrapper ─────────────────────────────── */
187
+
188
+ export function access(path: string, mode?: number): Promise<void>;
189
+ export function access(path: string, callback: VoidCallback): void;
190
+ export function access(path: string, mode: number, callback: VoidCallback): void;
191
+ export function access(
192
+ path: string,
193
+ mode?: number | VoidCallback,
194
+ callback?: VoidCallback,
195
+ ): Promise<void> {
196
+ if (typeof mode === "function") return settleVoid(fsp.access(path), mode);
197
+ return settleVoid(fsp.access(path, mode ?? fs.constants.F_OK), callback);
198
+ }
199
+
200
+ export function appendFile(path: string, data: string | Uint8Array): Promise<void>;
201
+ export function appendFile(path: string, data: string | Uint8Array, callback: VoidCallback): void;
202
+ export function appendFile(
203
+ path: string,
204
+ data: string | Uint8Array,
205
+ callback?: VoidCallback,
206
+ ): Promise<void> {
207
+ return settleVoid(fsp.appendFile(path, data), callback);
208
+ }
209
+
210
+ /** fs.writeFileSync(file, bytes, { mode }) as Node runs it: open with
211
+ * O_WRONLY | O_CREAT | O_TRUNC and the mode, write every byte, close. */
212
+ function writeBytesSync(file: string, data: Uint8Array, mode: number): void {
213
+ const fd = fs.openSync(
214
+ file,
215
+ fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_TRUNC,
216
+ mode,
217
+ );
218
+ try {
219
+ let offset = 0;
220
+ while (offset < data.length) offset += fs.writeSync(fd, data, offset, data.length - offset);
221
+ } finally {
222
+ fs.closeSync(fd);
223
+ }
224
+ }
225
+
226
+ async function writeData(
227
+ file: string,
228
+ data: string | Uint8Array,
229
+ options: WriteFileOptions | Utf8 | undefined,
230
+ ): Promise<void> {
231
+ if (typeof data !== "string") {
232
+ // fs.promises.writeFile compiles string data; bytes take the
233
+ // synchronous write after the same microtask boundary.
234
+ await Promise.resolve();
235
+ if (options === undefined || typeof options === "string") fs.writeFileSync(file, data);
236
+ else writeBytesSync(file, data, options.mode ?? 0o666);
237
+ return;
238
+ }
239
+ if (options === undefined || typeof options === "string")
240
+ return fsp.writeFile(file, data, "utf8");
241
+ return fsp.writeFile(file, data, { encoding: "utf8", mode: options.mode ?? 0o666 });
242
+ }
243
+
244
+ export function writeFile(
245
+ file: string,
246
+ data: string | Uint8Array,
247
+ options?: WriteFileOptions | Utf8,
248
+ ): Promise<void>;
249
+ export function writeFile(file: string, data: string | Uint8Array, callback: VoidCallback): void;
250
+ export function writeFile(
251
+ file: string,
252
+ data: string | Uint8Array,
253
+ options: WriteFileOptions | Utf8,
254
+ callback: VoidCallback,
255
+ ): void;
256
+ export function writeFile(
257
+ file: string,
258
+ data: string | Uint8Array,
259
+ options?: WriteFileOptions | Utf8 | VoidCallback,
260
+ callback?: VoidCallback,
261
+ ): Promise<void> {
262
+ if (typeof options === "function") return settleVoid(writeData(file, data, undefined), options);
263
+ return settleVoid(writeData(file, data, options), callback);
264
+ }
265
+
266
+ export function chmod(path: string, mode: number): Promise<void>;
267
+ export function chmod(path: string, mode: number, callback: VoidCallback): void;
268
+ export function chmod(path: string, mode: number, callback?: VoidCallback): Promise<void> {
269
+ return settleVoid(fsp.chmod(path, mode), callback);
270
+ }
271
+
272
+ export function chown(path: string, uid: number, gid: number): Promise<void>;
273
+ export function chown(path: string, uid: number, gid: number, callback: VoidCallback): void;
274
+ export function chown(
275
+ path: string,
276
+ uid: number,
277
+ gid: number,
278
+ callback?: VoidCallback,
279
+ ): Promise<void> {
280
+ return settleVoid(fsp.chown(path, uid, gid), callback);
281
+ }
282
+
283
+ export function lchown(path: string, uid: number, gid: number): Promise<void>;
284
+ export function lchown(path: string, uid: number, gid: number, callback: VoidCallback): void;
285
+ export function lchown(
286
+ path: string,
287
+ uid: number,
288
+ gid: number,
289
+ callback?: VoidCallback,
290
+ ): Promise<void> {
291
+ return settleVoid(fsp.lchown(path, uid, gid), callback);
292
+ }
293
+
294
+ export function copyFile(src: string, dest: string): Promise<void>;
295
+ export function copyFile(src: string, dest: string, callback: VoidCallback): void;
296
+ export function copyFile(src: string, dest: string, callback?: VoidCallback): Promise<void> {
297
+ return settleVoid(fsp.copyFile(src, dest), callback);
298
+ }
299
+
300
+ export function link(existingPath: string, newPath: string): Promise<void>;
301
+ export function link(existingPath: string, newPath: string, callback: VoidCallback): void;
302
+ export function link(
303
+ existingPath: string,
304
+ newPath: string,
305
+ callback?: VoidCallback,
306
+ ): Promise<void> {
307
+ return settleVoid(fsp.link(existingPath, newPath), callback);
308
+ }
309
+
310
+ export function lstat(path: string): Promise<Stats> {
311
+ return fsp.lstat(path);
312
+ }
313
+
314
+ export function stat(path: string): Promise<Stats> {
315
+ return fsp.stat(path);
316
+ }
317
+
318
+ async function makeDirectory(
319
+ path: string,
320
+ options: number | MakeDirectoryOptions | undefined,
321
+ ): Promise<void> {
322
+ if (options === undefined) return fsp.mkdir(path);
323
+ if (typeof options === "number") return fsp.mkdir(path, { mode: options });
324
+ const mode = options.mode ?? 0o777;
325
+ if (options.recursive === true) return fsp.mkdir(path, { recursive: true, mode });
326
+ return fsp.mkdir(path, { mode });
327
+ }
328
+
329
+ export function mkdir(path: string, options?: number | MakeDirectoryOptions): Promise<void>;
330
+ export function mkdir(path: string, callback: VoidCallback): void;
331
+ export function mkdir(
332
+ path: string,
333
+ options: number | MakeDirectoryOptions,
334
+ callback: VoidCallback,
335
+ ): void;
336
+ export function mkdir(
337
+ path: string,
338
+ options?: number | MakeDirectoryOptions | VoidCallback,
339
+ callback?: VoidCallback,
340
+ ): Promise<void> {
341
+ if (typeof options === "function") return settleVoid(makeDirectory(path, undefined), options);
342
+ return settleVoid(makeDirectory(path, options), callback);
343
+ }
344
+
345
+ export function mkdtemp(prefix: string): Promise<string> {
346
+ return fsp.mkdtemp(prefix);
347
+ }
348
+
349
+ export function readdir(path: string): Promise<string[]> {
350
+ return fsp.readdir(path);
351
+ }
352
+
353
+ export type ReadFileOptions = Utf8 | { encoding: Utf8 };
354
+
355
+ export function readFile(file: string): Promise<Buffer>;
356
+ export function readFile(file: string, options: ReadFileOptions): Promise<string>;
357
+ export function readFile(file: string, callback: Callback<Buffer>): void;
358
+ export function readFile(file: string, options: ReadFileOptions, callback: Callback<string>): void;
359
+ export function readFile(
360
+ file: string,
361
+ options?: ReadFileOptions | Callback<Buffer>,
362
+ callback?: Callback<string>,
363
+ ): Promise<string | Buffer> {
364
+ if (typeof options === "function") {
365
+ fsp.readFile(file).then(
366
+ (data) => options(null, data),
367
+ (err: NodeJS.ErrnoException) => options(err, Buffer.alloc(0)),
368
+ );
369
+ return idle();
370
+ }
371
+ if (options === undefined) return fsp.readFile(file);
372
+ if (callback !== undefined) {
373
+ fsp.readFile(file, "utf8").then(
374
+ (text) => callback(null, text),
375
+ (err: NodeJS.ErrnoException) => callback(err, ""),
376
+ );
377
+ return idle();
378
+ }
379
+ return fsp.readFile(file, "utf8");
380
+ }
381
+
382
+ export function readlink(path: string): Promise<string>;
383
+ export function readlink(path: string, callback: Callback<string>): void;
384
+ export function readlink(path: string, callback?: Callback<string>): Promise<string> {
385
+ if (callback !== undefined) {
386
+ fs.readlink(path, (err, target) => callback(err, target));
387
+ return idle();
388
+ }
389
+ return fsp.readlink(path);
390
+ }
391
+
392
+ export function realpath(path: string): Promise<string> {
393
+ return fsp.realpath(path);
394
+ }
395
+
396
+ export function rename(oldPath: string, newPath: string): Promise<void>;
397
+ export function rename(oldPath: string, newPath: string, callback: VoidCallback): void;
398
+ export function rename(oldPath: string, newPath: string, callback?: VoidCallback): Promise<void> {
399
+ return settleVoid(fsp.rename(oldPath, newPath), callback);
400
+ }
401
+
402
+ /** Removes a file or directory tree; a missing path is not an error
403
+ * (fs-extra's rimraf and fs.rm's force). */
404
+ async function removeTree(target: string): Promise<void> {
405
+ let entry: Stats;
406
+ try {
407
+ entry = await fsp.lstat(target);
408
+ } catch (err) {
409
+ if (codeOf(err) === "ENOENT") return;
410
+ throw err;
411
+ }
412
+ if (entry.isDirectory()) {
413
+ for (const item of await fsp.readdir(target)) await removeTree(path.join(target, item));
414
+ await fsp.rmdir(target);
415
+ return;
416
+ }
417
+ await fsp.unlink(target);
418
+ }
419
+
420
+ async function rmPath(target: string, options: RmOptions | undefined): Promise<void> {
421
+ const recursive = options === undefined ? false : (options.recursive ?? false);
422
+ const force = options === undefined ? false : (options.force ?? false);
423
+ if (recursive && force) return removeTree(target);
424
+ if (!recursive && !force) return fsp.rm(target);
425
+ // The mixed forms: fs.rm's own checks, then the walk.
426
+ if (force && !fs.existsSync(target)) return;
427
+ const entry = await fsp.lstat(target);
428
+ if (entry.isDirectory() && !recursive) return fsp.rm(target);
429
+ return removeTree(target);
430
+ }
431
+
432
+ export function rm(path: string, options?: RmOptions): Promise<void>;
433
+ export function rm(path: string, callback: VoidCallback): void;
434
+ export function rm(path: string, options: RmOptions, callback: VoidCallback): void;
435
+ export function rm(
436
+ path: string,
437
+ options?: RmOptions | VoidCallback,
438
+ callback?: VoidCallback,
439
+ ): Promise<void> {
440
+ if (typeof options === "function") return settleVoid(rmPath(path, undefined), options);
441
+ return settleVoid(rmPath(path, options), callback);
442
+ }
443
+
444
+ export function rmdir(path: string): Promise<void>;
445
+ export function rmdir(path: string, callback: VoidCallback): void;
446
+ export function rmdir(path: string, callback?: VoidCallback): Promise<void> {
447
+ return settleVoid(fsp.rmdir(path), callback);
448
+ }
449
+
450
+ export function symlink(target: string, path: string, type?: SymlinkType): Promise<void>;
451
+ export function symlink(target: string, path: string, callback: VoidCallback): void;
452
+ export function symlink(
453
+ target: string,
454
+ path: string,
455
+ type: SymlinkType | undefined,
456
+ callback: VoidCallback,
457
+ ): void;
458
+ export function symlink(
459
+ target: string,
460
+ path: string,
461
+ type?: SymlinkType | VoidCallback,
462
+ callback?: VoidCallback,
463
+ ): Promise<void> {
464
+ if (typeof type === "function") return settleVoid(fsp.symlink(target, path), type);
465
+ return settleVoid(fsp.symlink(target, path, type ?? null), callback);
466
+ }
467
+
468
+ export function truncate(path: string, len?: number): Promise<void>;
469
+ export function truncate(path: string, callback: VoidCallback): void;
470
+ export function truncate(path: string, len: number, callback: VoidCallback): void;
471
+ export function truncate(
472
+ path: string,
473
+ len?: number | VoidCallback,
474
+ callback?: VoidCallback,
475
+ ): Promise<void> {
476
+ if (typeof len === "function") return settleVoid(fsp.truncate(path, 0), len);
477
+ return settleVoid(fsp.truncate(path, len ?? 0), callback);
478
+ }
479
+
480
+ export function unlink(path: string): Promise<void>;
481
+ export function unlink(path: string, callback: VoidCallback): void;
482
+ export function unlink(path: string, callback?: VoidCallback): Promise<void> {
483
+ return settleVoid(fsp.unlink(path), callback);
484
+ }
485
+
486
+ export function utimes(path: string, atime: Date, mtime: Date): Promise<void>;
487
+ export function utimes(path: string, atime: Date, mtime: Date, callback: VoidCallback): void;
488
+ export function utimes(
489
+ path: string,
490
+ atime: Date,
491
+ mtime: Date,
492
+ callback?: VoidCallback,
493
+ ): Promise<void> {
494
+ return settleVoid(fsp.utimes(path, atime, mtime), callback);
495
+ }
496
+
497
+ /* ── mkdirs, ensureDir, mkdirp ────────────────────────────────────────── */
498
+
499
+ function dirMode(options: EnsureOptions | number | undefined): number {
500
+ if (options === undefined) return 0o777;
501
+ if (typeof options === "number") return options;
502
+ return options.mode ?? 0o777;
503
+ }
504
+
505
+ function makeDir(dir: string, mode: number): Promise<void> {
506
+ return fsp.mkdir(path.resolve(dir), { recursive: true, mode });
507
+ }
508
+
509
+ function makeDirSync(dir: string, mode: number): void {
510
+ fs.mkdirSync(path.resolve(dir), { recursive: true, mode });
511
+ }
512
+
513
+ export function ensureDir(dir: string, options?: EnsureOptions | number): Promise<void>;
514
+ export function ensureDir(dir: string, callback: VoidCallback): void;
515
+ export function ensureDir(
516
+ dir: string,
517
+ options: EnsureOptions | number,
518
+ callback: VoidCallback,
519
+ ): void;
520
+ export function ensureDir(
521
+ dir: string,
522
+ options?: EnsureOptions | number | VoidCallback,
523
+ callback?: VoidCallback,
524
+ ): Promise<void> {
525
+ if (typeof options === "function") return settleVoid(makeDir(dir, 0o777), options);
526
+ return settleVoid(makeDir(dir, dirMode(options)), callback);
527
+ }
528
+
529
+ export function mkdirs(dir: string, options?: EnsureOptions | number): Promise<void>;
530
+ export function mkdirs(dir: string, callback: VoidCallback): void;
531
+ export function mkdirs(
532
+ dir: string,
533
+ options?: EnsureOptions | number | VoidCallback,
534
+ ): Promise<void> {
535
+ if (typeof options === "function") return settleVoid(makeDir(dir, 0o777), options);
536
+ return makeDir(dir, dirMode(options));
537
+ }
538
+
539
+ export function mkdirp(dir: string, options?: EnsureOptions | number): Promise<void>;
540
+ export function mkdirp(dir: string, callback: VoidCallback): void;
541
+ export function mkdirp(
542
+ dir: string,
543
+ options?: EnsureOptions | number | VoidCallback,
544
+ ): Promise<void> {
545
+ if (typeof options === "function") return settleVoid(makeDir(dir, 0o777), options);
546
+ return makeDir(dir, dirMode(options));
547
+ }
548
+
549
+ export function ensureDirSync(dir: string, options?: EnsureOptions | number): void {
550
+ makeDirSync(dir, dirMode(options));
551
+ }
552
+
553
+ export function mkdirsSync(dir: string, options?: EnsureOptions | number): void {
554
+ makeDirSync(dir, dirMode(options));
555
+ }
556
+
557
+ export function mkdirpSync(dir: string, options?: EnsureOptions | number): void {
558
+ makeDirSync(dir, dirMode(options));
559
+ }
560
+
561
+ /* ── remove, emptyDir ─────────────────────────────────────────────────── */
562
+
563
+ export function remove(dir: string): Promise<void>;
564
+ export function remove(dir: string, callback: VoidCallback): void;
565
+ export function remove(dir: string, callback?: VoidCallback): Promise<void> {
566
+ return settleVoid(removeTree(dir), callback);
567
+ }
568
+
569
+ export function removeSync(dir: string): void {
570
+ fs.rmSync(dir, { recursive: true, force: true });
571
+ }
572
+
573
+ async function emptyDirAsync(dir: string): Promise<void> {
574
+ let items: string[];
575
+ try {
576
+ items = await fsp.readdir(dir);
577
+ } catch {
578
+ await makeDir(dir, 0o777);
579
+ return;
580
+ }
581
+ while (items.length > 0) {
582
+ const item = items.pop();
583
+ if (item !== undefined) await removeTree(path.join(dir, item));
584
+ }
585
+ }
586
+
587
+ export function emptyDir(dir: string): Promise<void>;
588
+ export function emptyDir(dir: string, callback: VoidCallback): void;
589
+ export function emptyDir(dir: string, callback?: VoidCallback): Promise<void> {
590
+ return settleVoid(emptyDirAsync(dir), callback);
591
+ }
592
+
593
+ export function emptyDirSync(dir: string): void {
594
+ let items: string[];
595
+ try {
596
+ items = fs.readdirSync(dir);
597
+ } catch {
598
+ makeDirSync(dir, 0o777);
599
+ return;
600
+ }
601
+ for (const item of items) fs.rmSync(path.join(dir, item), { recursive: true, force: true });
602
+ }
603
+
604
+ /* ── pathExists, ensureFile, outputFile ───────────────────────────────── */
605
+
606
+ async function pathExistsAsync(file: string): Promise<boolean> {
607
+ try {
608
+ await fsp.access(file);
609
+ return true;
610
+ } catch {
611
+ return false;
612
+ }
613
+ }
614
+
615
+ export function pathExists(file: string): Promise<boolean>;
616
+ export function pathExists(file: string, callback: Callback<boolean>): void;
617
+ export function pathExists(file: string, callback?: Callback<boolean>): Promise<boolean> {
618
+ const found = pathExistsAsync(file);
619
+ if (callback === undefined) return found;
620
+ return found.then((exists) => {
621
+ callback(null, exists);
622
+ return exists;
623
+ });
624
+ }
625
+
626
+ export function pathExistsSync(file: string): boolean {
627
+ return fs.existsSync(file);
628
+ }
629
+
630
+ async function createFileAsync(file: string): Promise<void> {
631
+ try {
632
+ if ((await fsp.stat(file)).isFile()) return;
633
+ } catch {
634
+ // Missing: created below.
635
+ }
636
+ const dir = path.dirname(file);
637
+ let dirIsDirectory = true;
638
+ try {
639
+ dirIsDirectory = (await fsp.stat(dir)).isDirectory();
640
+ } catch (err) {
641
+ if (codeOf(err) !== "ENOENT") throw err;
642
+ await makeDir(dir, 0o777);
643
+ }
644
+ // A parent that is not a directory fails with readdir's ENOTDIR.
645
+ if (!dirIsDirectory) await fsp.readdir(dir);
646
+ await fsp.writeFile(file, "", "utf8");
647
+ }
648
+
649
+ export function ensureFile(file: string): Promise<void>;
650
+ export function ensureFile(file: string, callback: VoidCallback): void;
651
+ export function ensureFile(file: string, callback?: VoidCallback): Promise<void> {
652
+ return settleVoid(createFileAsync(file), callback);
653
+ }
654
+
655
+ export function ensureFileSync(file: string): void {
656
+ try {
657
+ if (fs.statSync(file).isFile()) return;
658
+ } catch {
659
+ // Missing: created below.
660
+ }
661
+ const dir = path.dirname(file);
662
+ if (!fs.existsSync(dir)) makeDirSync(dir, 0o777);
663
+ fs.writeFileSync(file, "");
664
+ }
665
+
666
+ async function outputFileAsync(
667
+ file: string,
668
+ data: string | Uint8Array,
669
+ options: WriteFileOptions | Utf8 | undefined,
670
+ ): Promise<void> {
671
+ const dir = path.dirname(file);
672
+ if (!(await pathExistsAsync(dir))) await makeDir(dir, 0o777);
673
+ await writeData(file, data, options);
674
+ }
675
+
676
+ export function outputFile(
677
+ file: string,
678
+ data: string | Uint8Array,
679
+ options?: WriteFileOptions | Utf8,
680
+ ): Promise<void>;
681
+ export function outputFile(file: string, data: string | Uint8Array, callback: VoidCallback): void;
682
+ export function outputFile(
683
+ file: string,
684
+ data: string | Uint8Array,
685
+ options: WriteFileOptions | Utf8,
686
+ callback: VoidCallback,
687
+ ): void;
688
+ export function outputFile(
689
+ file: string,
690
+ data: string | Uint8Array,
691
+ options?: WriteFileOptions | Utf8 | VoidCallback,
692
+ callback?: VoidCallback,
693
+ ): Promise<void> {
694
+ if (typeof options === "function")
695
+ return settleVoid(outputFileAsync(file, data, undefined), options);
696
+ return settleVoid(outputFileAsync(file, data, options), callback);
697
+ }
698
+
699
+ export function outputFileSync(file: string, data: string | Uint8Array): void {
700
+ const dir = path.dirname(file);
701
+ if (!fs.existsSync(dir)) makeDirSync(dir, 0o777);
702
+ fs.writeFileSync(file, data);
703
+ }
704
+
705
+ /* ── JSON (jsonfile) ──────────────────────────────────────────────────── */
706
+
707
+ function jsonText(value: unknown, options: WriteOptions | Utf8 | undefined): string {
708
+ const opts = options === undefined || typeof options === "string" ? undefined : options;
709
+ const eol = opts === undefined ? "\n" : (opts.EOL ?? "\n");
710
+ const finalEol = opts === undefined ? true : (opts.finalEOL ?? true);
711
+ const spaces = opts === undefined ? 0 : (opts.spaces ?? 0);
712
+ const text = JSON.stringify(value, null, spaces) ?? "undefined";
713
+ return text.replace(/\n/g, eol) + (finalEol ? eol : "");
714
+ }
715
+
716
+ function jsonWriteOptions(options: WriteOptions | Utf8 | undefined): WriteFileOptions | undefined {
717
+ if (options === undefined || typeof options === "string") return undefined;
718
+ return { mode: options.mode };
719
+ }
720
+
721
+ function jsonThrows(options: ReadOptions | Utf8 | undefined): boolean {
722
+ if (options === undefined || typeof options === "string") return true;
723
+ return options.throws ?? true;
724
+ }
725
+
726
+ function prefixed(file: string, err: unknown): Error {
727
+ const error = err instanceof Error ? err : new Error(String(err));
728
+ error.message = `${file}: ${error.message}`;
729
+ return error;
730
+ }
731
+
732
+ function parseJson(file: string, text: string, throws: boolean): any {
733
+ try {
734
+ return JSON.parse(text.replace(/^\uFEFF/, ""));
735
+ } catch (err) {
736
+ if (!throws) return null;
737
+ throw prefixed(file, err);
738
+ }
739
+ }
740
+
741
+ async function readJsonAsync(file: string, options: ReadOptions | Utf8 | undefined): Promise<any> {
742
+ const text = await fsp.readFile(file, "utf8");
743
+ return parseJson(file, text, jsonThrows(options));
744
+ }
745
+
746
+ // readJson's callback form is not declared.
747
+ export function readJson(file: string, options?: ReadOptions | Utf8): Promise<any> {
748
+ return readJsonAsync(file, options);
749
+ }
750
+
751
+ export function readJsonSync(file: string, options?: ReadOptions | Utf8): any {
752
+ const throws = jsonThrows(options);
753
+ let text: string;
754
+ try {
755
+ text = fs.readFileSync(file, "utf8");
756
+ } catch (err) {
757
+ // jsonfile reads inside the same try as the parse.
758
+ if (!throws) return null;
759
+ throw prefixed(file, err);
760
+ }
761
+ return parseJson(file, text, throws);
762
+ }
763
+
764
+ async function writeJsonAsync(
765
+ file: string,
766
+ value: unknown,
767
+ options: WriteOptions | Utf8 | undefined,
768
+ ): Promise<void> {
769
+ await writeData(file, jsonText(value, options), jsonWriteOptions(options));
770
+ }
771
+
772
+ export function writeJson(file: string, value: any, options?: WriteOptions | Utf8): Promise<void>;
773
+ export function writeJson(file: string, value: any, callback: VoidCallback): void;
774
+ export function writeJson(
775
+ file: string,
776
+ value: any,
777
+ options: WriteOptions | Utf8,
778
+ callback: VoidCallback,
779
+ ): void;
780
+ export function writeJson(
781
+ file: string,
782
+ value: any,
783
+ options?: WriteOptions | Utf8 | VoidCallback,
784
+ callback?: VoidCallback,
785
+ ): Promise<void> {
786
+ if (typeof options === "function")
787
+ return settleVoid(writeJsonAsync(file, value, undefined), options);
788
+ return settleVoid(writeJsonAsync(file, value, options), callback);
789
+ }
790
+
791
+ export function writeJsonSync(file: string, value: any, options?: WriteOptions | Utf8): void {
792
+ const text = jsonText(value, options);
793
+ if (options === undefined || typeof options === "string") fs.writeFileSync(file, text, "utf8");
794
+ else fs.writeFileSync(file, text, { encoding: "utf8", mode: options.mode ?? 0o666 });
795
+ }
796
+
797
+ async function outputJsonAsync(
798
+ file: string,
799
+ value: unknown,
800
+ options: WriteOptions | Utf8 | undefined,
801
+ ): Promise<void> {
802
+ const dir = path.dirname(file);
803
+ if (!(await pathExistsAsync(dir))) await makeDir(dir, 0o777);
804
+ await writeJsonAsync(file, value, options);
805
+ }
806
+
807
+ export function outputJson(file: string, value: any, options?: WriteOptions | Utf8): Promise<void>;
808
+ export function outputJson(file: string, value: any, callback: VoidCallback): void;
809
+ export function outputJson(
810
+ file: string,
811
+ value: any,
812
+ options: WriteOptions | Utf8,
813
+ callback: VoidCallback,
814
+ ): void;
815
+ export function outputJson(
816
+ file: string,
817
+ value: any,
818
+ options?: WriteOptions | Utf8 | VoidCallback,
819
+ callback?: VoidCallback,
820
+ ): Promise<void> {
821
+ if (typeof options === "function")
822
+ return settleVoid(outputJsonAsync(file, value, undefined), options);
823
+ return settleVoid(outputJsonAsync(file, value, options), callback);
824
+ }
825
+
826
+ export function outputJsonSync(file: string, value: any, options?: WriteOptions | Utf8): void {
827
+ const dir = path.dirname(file);
828
+ if (!fs.existsSync(dir)) makeDirSync(dir, 0o777);
829
+ writeJsonSync(file, value, options);
830
+ }
831
+
832
+ /* ── copy, move ───────────────────────────────────────────────────────── */
833
+
834
+ function isSrcSubdir(src: string, dest: string): boolean {
835
+ const srcParts = path
836
+ .resolve(src)
837
+ .split(path.sep)
838
+ .filter((part) => part !== "");
839
+ const destParts = path
840
+ .resolve(dest)
841
+ .split(path.sep)
842
+ .filter((part) => part !== "");
843
+ for (let i = 0; i < srcParts.length; i++) if (destParts[i] !== srcParts[i]) return false;
844
+ return true;
845
+ }
846
+
847
+ function subdirMessage(src: string, dest: string, verb: string): string {
848
+ return `Cannot ${verb} '${src}' to a subdirectory of itself, '${dest}'.`;
849
+ }
850
+
851
+ function sameNode(a: Stats, b: Stats): boolean {
852
+ return b.ino !== 0 && b.dev !== 0 && a.ino === b.ino && a.dev === b.dev;
853
+ }
854
+
855
+ async function statOrNull(file: string): Promise<Stats | null> {
856
+ try {
857
+ return await fsp.stat(file);
858
+ } catch (err) {
859
+ if (codeOf(err) === "ENOENT") return null;
860
+ throw err;
861
+ }
862
+ }
863
+
864
+ /** fs-extra's checkPaths and checkParentPaths: the source exists, is not
865
+ * the destination, and a directory never copies or moves into itself.
866
+ * Answers whether the destination exists. */
867
+ async function checkPaths(src: string, dest: string, verb: string): Promise<boolean> {
868
+ const srcStat = await fsp.stat(src);
869
+ const destStat = await statOrNull(dest);
870
+ if (destStat !== null && sameNode(srcStat, destStat))
871
+ throw new Error("Source and destination must not be the same.");
872
+ if (srcStat.isDirectory() && isSrcSubdir(src, dest))
873
+ throw new Error(subdirMessage(src, dest, verb));
874
+ const srcParent = path.resolve(path.dirname(src));
875
+ let destParent = path.resolve(path.dirname(dest));
876
+ while (destParent !== srcParent && destParent !== path.parse(destParent).root) {
877
+ const parentStat = await statOrNull(destParent);
878
+ if (parentStat === null) break;
879
+ if (sameNode(srcStat, parentStat)) throw new Error(subdirMessage(src, dest, verb));
880
+ destParent = path.resolve(path.dirname(destParent));
881
+ }
882
+ return destStat !== null;
883
+ }
884
+
885
+ function statOrNullSync(file: string): Stats | null {
886
+ try {
887
+ return fs.statSync(file);
888
+ } catch (err) {
889
+ if (codeOf(err) === "ENOENT") return null;
890
+ throw err;
891
+ }
892
+ }
893
+
894
+ /** checkPaths for copySync and moveSync. Answers the destination's stats,
895
+ * or null when it does not exist. */
896
+ function checkPathsSync(src: string, dest: string, verb: string): Stats | null {
897
+ const srcStat = fs.statSync(src);
898
+ const destStat = statOrNullSync(dest);
899
+ if (destStat !== null && sameNode(srcStat, destStat))
900
+ throw new Error("Source and destination must not be the same.");
901
+ if (srcStat.isDirectory() && isSrcSubdir(src, dest))
902
+ throw new Error(subdirMessage(src, dest, verb));
903
+ const srcParent = path.resolve(path.dirname(src));
904
+ let destParent = path.resolve(path.dirname(dest));
905
+ while (destParent !== srcParent && destParent !== path.parse(destParent).root) {
906
+ const parentStat = statOrNullSync(destParent);
907
+ if (parentStat === null) break;
908
+ if (sameNode(srcStat, parentStat)) throw new Error(subdirMessage(src, dest, verb));
909
+ destParent = path.resolve(path.dirname(destParent));
910
+ }
911
+ return destStat;
912
+ }
913
+
914
+ interface CopyState {
915
+ overwrite: boolean;
916
+ errorOnExist: boolean;
917
+ dereference: boolean;
918
+ preserveTimestamps: boolean;
919
+ filter: CopyFilter | undefined;
920
+ }
921
+
922
+ async function included(state: CopyState, src: string, dest: string): Promise<boolean> {
923
+ const filter = state.filter;
924
+ if (filter === undefined) return true;
925
+ return await filter(src, dest);
926
+ }
927
+
928
+ /** fs-extra's onLink: a symlink source creates a symlink at `dest`. Only
929
+ * a destination that is itself a symlink is replaced; over a regular file
930
+ * or a directory, symlink fails with EEXIST, whatever `overwrite` says. */
931
+ async function copyLink(
932
+ target: string,
933
+ dest: string,
934
+ destExists: boolean,
935
+ dereference: boolean,
936
+ ): Promise<void> {
937
+ if (!destExists) return fsp.symlink(target, dest);
938
+ let destLinked: string;
939
+ try {
940
+ destLinked = await fsp.readlink(dest);
941
+ } catch (err) {
942
+ const code = codeOf(err);
943
+ if (code === "EINVAL" || code === "UNKNOWN") return fsp.symlink(target, dest);
944
+ throw err;
945
+ }
946
+ const destTarget = dereference ? path.resolve(process.cwd(), destLinked) : destLinked;
947
+ checkLinkTargets(target, destTarget, (await fsp.stat(dest)).isDirectory());
948
+ await fsp.unlink(dest);
949
+ await fsp.symlink(target, dest);
950
+ }
951
+
952
+ function copyLinkSync(
953
+ target: string,
954
+ dest: string,
955
+ destExists: boolean,
956
+ dereference: boolean,
957
+ ): void {
958
+ if (!destExists) {
959
+ fs.symlinkSync(target, dest);
960
+ return;
961
+ }
962
+ let destLinked: string;
963
+ try {
964
+ destLinked = fs.readlinkSync(dest);
965
+ } catch (err) {
966
+ const code = codeOf(err);
967
+ if (code !== "EINVAL" && code !== "UNKNOWN") throw err;
968
+ fs.symlinkSync(target, dest);
969
+ return;
970
+ }
971
+ const destTarget = dereference ? path.resolve(process.cwd(), destLinked) : destLinked;
972
+ checkLinkTargets(target, destTarget, fs.statSync(dest).isDirectory());
973
+ fs.unlinkSync(dest);
974
+ fs.symlinkSync(target, dest);
975
+ }
976
+
977
+ /** Replacing a destination symlink never points it into its own target,
978
+ * nor removes a directory link the source lives under. */
979
+ function checkLinkTargets(target: string, destTarget: string, destIsDirectory: boolean): void {
980
+ if (isSrcSubdir(target, destTarget))
981
+ throw new Error(`Cannot copy '${target}' to a subdirectory of itself, '${destTarget}'.`);
982
+ if (destIsDirectory && isSrcSubdir(destTarget, target))
983
+ throw new Error(`Cannot overwrite '${destTarget}' with '${target}'.`);
984
+ }
985
+
986
+ async function copyEntry(
987
+ state: CopyState,
988
+ src: string,
989
+ dest: string,
990
+ destExists: boolean,
991
+ filtered: boolean,
992
+ ): Promise<void> {
993
+ if (!filtered && !(await included(state, src, dest))) return;
994
+ const srcStat = state.dereference ? await fsp.stat(src) : await fsp.lstat(src);
995
+ if (srcStat.isDirectory()) {
996
+ if (destExists && !(await fsp.stat(dest)).isDirectory())
997
+ throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`);
998
+ if (!destExists) await fsp.mkdir(dest);
999
+ const items = await fsp.readdir(src);
1000
+ while (items.length > 0) {
1001
+ const item = items.pop();
1002
+ if (item === undefined) break;
1003
+ const srcItem = path.join(src, item);
1004
+ const destItem = path.join(dest, item);
1005
+ const destItemStat = await statOrNull(destItem);
1006
+ if (destItemStat !== null && sameNode(await fsp.stat(srcItem), destItemStat))
1007
+ throw new Error("Source and destination must not be the same.");
1008
+ await copyEntry(state, srcItem, destItem, destItemStat !== null, false);
1009
+ }
1010
+ if (!destExists) await fsp.chmod(dest, srcStat.mode);
1011
+ return;
1012
+ }
1013
+ if (srcStat.isSymbolicLink()) {
1014
+ const linked = await fsp.readlink(src);
1015
+ await copyLink(
1016
+ state.dereference ? path.resolve(process.cwd(), linked) : linked,
1017
+ dest,
1018
+ destExists,
1019
+ state.dereference,
1020
+ );
1021
+ return;
1022
+ }
1023
+ if (destExists) {
1024
+ if (state.overwrite) await fsp.unlink(dest);
1025
+ else if (state.errorOnExist) throw new Error(`'${dest}' already exists`);
1026
+ else return;
1027
+ }
1028
+ await fsp.copyFile(src, dest);
1029
+ if (state.preserveTimestamps) {
1030
+ const updated = await fsp.stat(src);
1031
+ if ((srcStat.mode & 0o200) === 0) await fsp.chmod(dest, srcStat.mode | 0o200);
1032
+ await fsp.utimes(dest, updated.atime, updated.mtime);
1033
+ }
1034
+ await fsp.chmod(dest, srcStat.mode);
1035
+ }
1036
+
1037
+ async function copyAsync(
1038
+ src: string,
1039
+ dest: string,
1040
+ options: CopyOptions | undefined,
1041
+ ): Promise<void> {
1042
+ const state: CopyState = {
1043
+ overwrite: options === undefined ? true : (options.overwrite ?? true),
1044
+ errorOnExist: options === undefined ? false : (options.errorOnExist ?? false),
1045
+ dereference: options === undefined ? false : (options.dereference ?? false),
1046
+ preserveTimestamps: options === undefined ? false : (options.preserveTimestamps ?? false),
1047
+ filter: options === undefined ? undefined : options.filter,
1048
+ };
1049
+ const destExists = await checkPaths(src, dest, "copy");
1050
+ if (!(await included(state, src, dest))) return;
1051
+ const parent = path.dirname(dest);
1052
+ if (!(await pathExistsAsync(parent))) await makeDir(parent, 0o777);
1053
+ await copyEntry(state, src, dest, destExists, true);
1054
+ }
1055
+
1056
+ export function copy(src: string, dest: string, options?: CopyOptions): Promise<void>;
1057
+ export function copy(src: string, dest: string, callback: VoidCallback): void;
1058
+ export function copy(src: string, dest: string, options: CopyOptions, callback: VoidCallback): void;
1059
+ export function copy(
1060
+ src: string,
1061
+ dest: string,
1062
+ options?: CopyOptions | VoidCallback,
1063
+ callback?: VoidCallback,
1064
+ ): Promise<void> {
1065
+ if (typeof options === "function") return settleVoid(copyAsync(src, dest, undefined), options);
1066
+ return settleVoid(copyAsync(src, dest, options), callback);
1067
+ }
1068
+
1069
+ function copyEntrySync(
1070
+ state: CopyOptionsSync,
1071
+ src: string,
1072
+ dest: string,
1073
+ destExists: boolean,
1074
+ filtered: boolean,
1075
+ ): void {
1076
+ const filter = state.filter;
1077
+ if (!filtered && filter !== undefined && !filter(src, dest)) return;
1078
+ const srcStat = state.dereference === true ? fs.statSync(src) : fs.lstatSync(src);
1079
+ if (srcStat.isDirectory()) {
1080
+ if (destExists && !fs.statSync(dest).isDirectory())
1081
+ throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`);
1082
+ if (!destExists) fs.mkdirSync(dest);
1083
+ for (const item of fs.readdirSync(src)) {
1084
+ const srcItem = path.join(src, item);
1085
+ const destItem = path.join(dest, item);
1086
+ // fs-extra's copyDirItem checks every entry against its destination:
1087
+ // a destination symlink back into the source tree must not let the
1088
+ // overwrite below unlink the source's own file.
1089
+ const destItemStat = statOrNullSync(destItem);
1090
+ if (destItemStat !== null && sameNode(fs.statSync(srcItem), destItemStat))
1091
+ throw new Error("Source and destination must not be the same.");
1092
+ copyEntrySync(state, srcItem, destItem, destItemStat !== null, false);
1093
+ }
1094
+ if (!destExists) fs.chmodSync(dest, srcStat.mode);
1095
+ return;
1096
+ }
1097
+ if (srcStat.isSymbolicLink()) {
1098
+ const dereference = state.dereference === true;
1099
+ const linked = fs.readlinkSync(src);
1100
+ copyLinkSync(
1101
+ dereference ? path.resolve(process.cwd(), linked) : linked,
1102
+ dest,
1103
+ destExists,
1104
+ dereference,
1105
+ );
1106
+ return;
1107
+ }
1108
+ if (destExists) {
1109
+ if (state.overwrite ?? true) fs.unlinkSync(dest);
1110
+ else if (state.errorOnExist === true) throw new Error(`'${dest}' already exists`);
1111
+ else return;
1112
+ }
1113
+ fs.copyFileSync(src, dest);
1114
+ if (state.preserveTimestamps === true) {
1115
+ const updated = fs.statSync(src);
1116
+ if ((srcStat.mode & 0o200) === 0) fs.chmodSync(dest, srcStat.mode | 0o200);
1117
+ fs.utimesSync(dest, updated.atime, updated.mtime);
1118
+ }
1119
+ fs.chmodSync(dest, srcStat.mode);
1120
+ }
1121
+
1122
+ export function copySync(src: string, dest: string, options?: CopyOptionsSync): void {
1123
+ const opts: CopyOptionsSync = options ?? {};
1124
+ const destStat = checkPathsSync(src, dest, "copy");
1125
+ const filter = opts.filter;
1126
+ if (filter !== undefined && !filter(src, dest)) return;
1127
+ const parent = path.dirname(dest);
1128
+ if (!fs.existsSync(parent)) makeDirSync(parent, 0o777);
1129
+ copyEntrySync(opts, src, dest, destStat !== null, true);
1130
+ }
1131
+
1132
+ async function moveAsync(
1133
+ src: string,
1134
+ dest: string,
1135
+ options: MoveOptions | undefined,
1136
+ ): Promise<void> {
1137
+ const overwrite = options === undefined ? false : (options.overwrite ?? false);
1138
+ await checkPaths(src, dest, "move");
1139
+ await makeDir(path.dirname(dest), 0o777);
1140
+ if (overwrite) await removeTree(dest);
1141
+ else if (await pathExistsAsync(dest)) throw new Error("dest already exists.");
1142
+ try {
1143
+ await fsp.rename(src, dest);
1144
+ } catch (err) {
1145
+ if (codeOf(err) !== "EXDEV") throw err;
1146
+ await copyAsync(src, dest, { overwrite, errorOnExist: true });
1147
+ await removeTree(src);
1148
+ }
1149
+ }
1150
+
1151
+ export function move(src: string, dest: string, options?: MoveOptions): Promise<void>;
1152
+ export function move(src: string, dest: string, callback: VoidCallback): void;
1153
+ export function move(src: string, dest: string, options: MoveOptions, callback: VoidCallback): void;
1154
+ export function move(
1155
+ src: string,
1156
+ dest: string,
1157
+ options?: MoveOptions | VoidCallback,
1158
+ callback?: VoidCallback,
1159
+ ): Promise<void> {
1160
+ if (typeof options === "function") return settleVoid(moveAsync(src, dest, undefined), options);
1161
+ return settleVoid(moveAsync(src, dest, options), callback);
1162
+ }
1163
+
1164
+ export function moveSync(src: string, dest: string, options?: MoveOptions): void {
1165
+ const overwrite = options === undefined ? false : (options.overwrite ?? false);
1166
+ checkPathsSync(src, dest, "move");
1167
+ makeDirSync(path.dirname(dest), 0o777);
1168
+ if (overwrite) fs.rmSync(dest, { recursive: true, force: true });
1169
+ else if (fs.existsSync(dest)) throw new Error("dest already exists.");
1170
+ try {
1171
+ fs.renameSync(src, dest);
1172
+ } catch (err) {
1173
+ if (codeOf(err) !== "EXDEV") throw err;
1174
+ copySync(src, dest, { overwrite, errorOnExist: true });
1175
+ fs.rmSync(src, { recursive: true, force: true });
1176
+ }
1177
+ }
1178
+
1179
+ /* ── fs-extra's aliases ───────────────────────────────────────────────── */
1180
+
1181
+ export {
1182
+ emptyDir as emptydir,
1183
+ emptyDirSync as emptydirSync,
1184
+ ensureFile as createFile,
1185
+ ensureFileSync as createFileSync,
1186
+ readJson as readJSON,
1187
+ readJsonSync as readJSONSync,
1188
+ writeJson as writeJSON,
1189
+ writeJsonSync as writeJSONSync,
1190
+ outputJson as outputJSON,
1191
+ outputJsonSync as outputJSONSync,
1192
+ };