@scriptc/compiler 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1243) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +960 -82
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +13 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +6 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +41 -4
  16. package/dist/backend/llvm/alloc.js +138 -7
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/alloc.test.js +30 -1
  19. package/dist/backend/llvm/alloc.test.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  21. package/dist/backend/llvm/array-search.test.js +1 -1
  22. package/dist/backend/llvm/blocks.d.ts +8 -0
  23. package/dist/backend/llvm/blocks.js +43 -1
  24. package/dist/backend/llvm/blocks.js.map +1 -1
  25. package/dist/backend/llvm/blocks.test.js +22 -1
  26. package/dist/backend/llvm/blocks.test.js.map +1 -1
  27. package/dist/backend/llvm/byte-numbers.js +15 -5
  28. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  29. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  30. package/dist/backend/llvm/bytes-alias.js +20 -0
  31. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  32. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  33. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  34. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  35. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  36. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  37. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  38. package/dist/backend/llvm/call-lifetimes.js +50 -1
  39. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  40. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  41. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  42. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  43. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  44. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  45. package/dist/backend/llvm/classes.d.ts +11 -0
  46. package/dist/backend/llvm/classes.js +71 -14
  47. package/dist/backend/llvm/classes.js.map +1 -1
  48. package/dist/backend/llvm/classes.test.js +58 -8
  49. package/dist/backend/llvm/classes.test.js.map +1 -1
  50. package/dist/backend/llvm/common.js +1 -0
  51. package/dist/backend/llvm/common.js.map +1 -1
  52. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  53. package/dist/backend/llvm/constant-callbacks.js +55 -12
  54. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  55. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  56. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  57. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  58. package/dist/backend/llvm/counted-loops.js +37 -0
  59. package/dist/backend/llvm/counted-loops.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.d.ts +12 -3
  61. package/dist/backend/llvm/dense-array-access.js +72 -14
  62. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  63. package/dist/backend/llvm/dense-array-access.test.js +59 -3
  64. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  66. package/dist/backend/llvm/dense-array-loops.js +162 -0
  67. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  68. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  69. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  70. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  71. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  72. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  73. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  74. package/dist/backend/llvm/dyn.d.ts +28 -4
  75. package/dist/backend/llvm/dyn.js +324 -179
  76. package/dist/backend/llvm/dyn.js.map +1 -1
  77. package/dist/backend/llvm/emit-function.d.ts +64 -0
  78. package/dist/backend/llvm/emit-function.js +1190 -0
  79. package/dist/backend/llvm/emit-function.js.map +1 -0
  80. package/dist/backend/llvm/emit-module.d.ts +24 -0
  81. package/dist/backend/llvm/emit-module.js +1535 -0
  82. package/dist/backend/llvm/emit-module.js.map +1 -0
  83. package/dist/backend/llvm/emit-statements.d.ts +58 -0
  84. package/dist/backend/llvm/emit-statements.js +1964 -0
  85. package/dist/backend/llvm/emit-statements.js.map +1 -0
  86. package/dist/backend/llvm/emitter.d.ts +576 -268
  87. package/dist/backend/llvm/emitter.js +801 -4447
  88. package/dist/backend/llvm/emitter.js.map +1 -1
  89. package/dist/backend/llvm/emitter.test.js +57 -3
  90. package/dist/backend/llvm/emitter.test.js.map +1 -1
  91. package/dist/backend/llvm/expr-async.js +73 -46
  92. package/dist/backend/llvm/expr-async.js.map +1 -1
  93. package/dist/backend/llvm/expr-async.test.js +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  95. package/dist/backend/llvm/expr-bytes.js +76 -29
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  98. package/dist/backend/llvm/expr-callbacks.js +48 -11
  99. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  100. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  101. package/dist/backend/llvm/expr-calls.js +71 -53
  102. package/dist/backend/llvm/expr-calls.js.map +1 -1
  103. package/dist/backend/llvm/expr-calls.test.js +1 -1
  104. package/dist/backend/llvm/expr-containers.js +39 -15
  105. package/dist/backend/llvm/expr-containers.js.map +1 -1
  106. package/dist/backend/llvm/expr-control.js +16 -16
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dispatch.js +1 -0
  109. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  110. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  111. package/dist/backend/llvm/expr-dynamic.js +92 -63
  112. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  113. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  114. package/dist/backend/llvm/expr-primitives.js +132 -25
  115. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  116. package/dist/backend/llvm/expr-primitives.test.js +2 -2
  117. package/dist/backend/llvm/expr-records.d.ts +1 -1
  118. package/dist/backend/llvm/expr-records.js +32 -11
  119. package/dist/backend/llvm/expr-records.js.map +1 -1
  120. package/dist/backend/llvm/expr-stream-bridges.js +54 -12
  121. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  122. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  123. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  124. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  125. package/dist/backend/llvm/int32-abi.test.js +2 -2
  126. package/dist/backend/llvm/integer-clones.test.js +3 -3
  127. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  128. package/dist/backend/llvm/integer-remainder.js +156 -22
  129. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  130. package/dist/backend/llvm/intern-tables.test.js +1 -1
  131. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  132. package/dist/backend/llvm/jsval-encoding.js +20 -0
  133. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  134. package/dist/backend/llvm/jsval.d.ts +12 -0
  135. package/dist/backend/llvm/jsval.js +488 -0
  136. package/dist/backend/llvm/jsval.js.map +1 -0
  137. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  138. package/dist/backend/llvm/lazy-captures.js +39 -17
  139. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  140. package/dist/backend/llvm/lib-abi.js +1 -1
  141. package/dist/backend/llvm/lib-abi.js.map +1 -1
  142. package/dist/backend/llvm/lib-connect.js +1 -1
  143. package/dist/backend/llvm/lib-connect.js.map +1 -1
  144. package/dist/backend/llvm/lib-datagram.js +14 -8
  145. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  146. package/dist/backend/llvm/lib-dispatch.js +217 -24
  147. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  148. package/dist/backend/llvm/lib-filesystem.js +102 -13
  149. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  150. package/dist/backend/llvm/lib-http2.js +3 -3
  151. package/dist/backend/llvm/lib-http2.js.map +1 -1
  152. package/dist/backend/llvm/lib-lookup.js +2 -2
  153. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  154. package/dist/backend/llvm/lib-network.js +77 -25
  155. package/dist/backend/llvm/lib-network.js.map +1 -1
  156. package/dist/backend/llvm/lib-process.js +100 -50
  157. package/dist/backend/llvm/lib-process.js.map +1 -1
  158. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  159. package/dist/backend/llvm/lib-shared.js +229 -5
  160. package/dist/backend/llvm/lib-shared.js.map +1 -1
  161. package/dist/backend/llvm/lib-stream.js +46 -16
  162. package/dist/backend/llvm/lib-stream.js.map +1 -1
  163. package/dist/backend/llvm/lib-test.js +57 -8
  164. package/dist/backend/llvm/lib-test.js.map +1 -1
  165. package/dist/backend/llvm/lib-tls.js +4 -9
  166. package/dist/backend/llvm/lib-tls.js.map +1 -1
  167. package/dist/backend/llvm/local-array-reads.js +2 -2
  168. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  169. package/dist/backend/llvm/local-extents.d.ts +19 -0
  170. package/dist/backend/llvm/local-extents.js +169 -0
  171. package/dist/backend/llvm/local-extents.js.map +1 -0
  172. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  173. package/dist/backend/llvm/local-extents.test.js +92 -0
  174. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  175. package/dist/backend/llvm/local-union-storage.js +7 -7
  176. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  177. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  178. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  179. package/dist/backend/llvm/map-number-lookup.js +2 -2
  180. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  181. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  182. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  183. package/dist/backend/llvm/narrow-guards.js +151 -0
  184. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  185. package/dist/backend/llvm/nullable-unions.d.ts +70 -9
  186. package/dist/backend/llvm/nullable-unions.js +105 -6
  187. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  188. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  189. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  190. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  191. package/dist/backend/llvm/publish.d.ts +4 -0
  192. package/dist/backend/llvm/publish.js +14 -2
  193. package/dist/backend/llvm/publish.js.map +1 -1
  194. package/dist/backend/llvm/publish.test.js +1 -1
  195. package/dist/backend/llvm/receivers.d.ts +31 -0
  196. package/dist/backend/llvm/receivers.js +395 -0
  197. package/dist/backend/llvm/receivers.js.map +1 -0
  198. package/dist/backend/llvm/record-results.d.ts +13 -2
  199. package/dist/backend/llvm/record-results.js +66 -6
  200. package/dist/backend/llvm/record-results.js.map +1 -1
  201. package/dist/backend/llvm/reference-effects.js +9 -0
  202. package/dist/backend/llvm/reference-effects.js.map +1 -1
  203. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  204. package/dist/backend/llvm/reference-writes.js +143 -6
  205. package/dist/backend/llvm/reference-writes.js.map +1 -1
  206. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  207. package/dist/backend/llvm/reference-writes.test.js +88 -0
  208. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  209. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  210. package/dist/backend/llvm/regex-matchers.js +33 -0
  211. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  212. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  213. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  214. package/dist/backend/llvm/regions.d.ts +1 -1
  215. package/dist/backend/llvm/regions.js +9 -6
  216. package/dist/backend/llvm/regions.js.map +1 -1
  217. package/dist/backend/llvm/regions.test.js +1 -1
  218. package/dist/backend/llvm/shapes.d.ts +69 -43
  219. package/dist/backend/llvm/shapes.js +285 -21
  220. package/dist/backend/llvm/shapes.js.map +1 -1
  221. package/dist/backend/llvm/shapes.test.js +37 -3
  222. package/dist/backend/llvm/shapes.test.js.map +1 -1
  223. package/dist/backend/llvm/speculative-integers.d.ts +74 -0
  224. package/dist/backend/llvm/speculative-integers.js +571 -0
  225. package/dist/backend/llvm/speculative-integers.js.map +1 -0
  226. package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
  227. package/dist/backend/llvm/speculative-integers.test.js +148 -0
  228. package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
  229. package/dist/backend/llvm/split-loops.js +2 -2
  230. package/dist/backend/llvm/split-loops.js.map +1 -1
  231. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  232. package/dist/backend/llvm/stack-objects.js +133 -10
  233. package/dist/backend/llvm/stack-objects.js.map +1 -1
  234. package/dist/backend/llvm/stack-objects.test.js +55 -1
  235. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  236. package/dist/backend/llvm/stack-unions.test.js +1 -1
  237. package/dist/backend/llvm/string-construction.test.js +1 -1
  238. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  239. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  240. package/dist/backend/llvm/string-slices.d.ts +25 -0
  241. package/dist/backend/llvm/string-slices.js +207 -1
  242. package/dist/backend/llvm/string-slices.js.map +1 -1
  243. package/dist/backend/llvm/string-slices.test.js +139 -2
  244. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  245. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  246. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  247. package/dist/backend/llvm/thread-slots.js +142 -0
  248. package/dist/backend/llvm/thread-slots.js.map +1 -0
  249. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  250. package/dist/backend/llvm/thread-slots.test.js +110 -0
  251. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  252. package/dist/backend/llvm/union-repr.d.ts +7 -7
  253. package/dist/backend/llvm/union-repr.js +18 -2
  254. package/dist/backend/llvm/union-repr.js.map +1 -1
  255. package/dist/backend/llvm/union-retype.test.js +17 -3
  256. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  257. package/dist/backend/llvm/walkers.d.ts +2 -2
  258. package/dist/backend/llvm/walkers.js +51 -26
  259. package/dist/backend/llvm/walkers.js.map +1 -1
  260. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  261. package/dist/backend/llvm/wasm-modules.js +66 -0
  262. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  263. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  264. package/dist/backend/llvm/wrapping-sums.js +11 -3
  265. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  266. package/dist/backend/mangle.d.ts +7 -0
  267. package/dist/backend/mangle.js +11 -0
  268. package/dist/backend/mangle.js.map +1 -1
  269. package/dist/backend/may-throw.d.ts +3 -0
  270. package/dist/backend/may-throw.js +6 -2
  271. package/dist/backend/may-throw.js.map +1 -1
  272. package/dist/backend/may-throw.test.js +1 -1
  273. package/dist/backend/native/contracts.d.ts +37 -0
  274. package/dist/backend/native/executable.js +192 -134
  275. package/dist/backend/native/executable.js.map +1 -1
  276. package/dist/backend/native/library.js +1 -0
  277. package/dist/backend/native/library.js.map +1 -1
  278. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  279. package/dist/backend/native/runtime-inputs.js +2 -0
  280. package/dist/backend/native/runtime-inputs.js.map +1 -1
  281. package/dist/backend/native-link-info-core.d.ts +30 -0
  282. package/dist/backend/native-link-info-core.js.map +1 -1
  283. package/dist/backend/publication.test.js +1 -1
  284. package/dist/backend/runtime-pack-core.d.ts +9 -1
  285. package/dist/backend/runtime-pack-core.js +10 -1
  286. package/dist/backend/runtime-pack-core.js.map +1 -1
  287. package/dist/backend/runtime-pack-native.js +1 -1
  288. package/dist/backend/runtime-pack-native.js.map +1 -1
  289. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  290. package/dist/backend/runtime-pack-native.test.js +31 -0
  291. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  292. package/dist/backend/runtime-pack-targets.test.js +5 -0
  293. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  294. package/dist/backend/runtime-pack.d.ts +7 -3
  295. package/dist/backend/runtime-pack.js +12 -6
  296. package/dist/backend/runtime-pack.js.map +1 -1
  297. package/dist/backend/runtime-pack.test.js +20 -6
  298. package/dist/backend/runtime-pack.test.js.map +1 -1
  299. package/dist/backend/stack-observations.d.ts +22 -0
  300. package/dist/backend/stack-observations.js +382 -0
  301. package/dist/backend/stack-observations.js.map +1 -0
  302. package/dist/backend/stack-observations.test.d.ts +1 -0
  303. package/dist/backend/stack-observations.test.js +233 -0
  304. package/dist/backend/stack-observations.test.js.map +1 -0
  305. package/dist/backend/target-diagnostics.js +8 -0
  306. package/dist/backend/target-diagnostics.js.map +1 -1
  307. package/dist/backend/target-diagnostics.test.js +1 -1
  308. package/dist/backend/warm-cache.js +5 -0
  309. package/dist/backend/warm-cache.js.map +1 -1
  310. package/dist/backend/young-nursery.d.ts +7 -0
  311. package/dist/backend/young-nursery.js +10 -0
  312. package/dist/backend/young-nursery.js.map +1 -0
  313. package/dist/cli/command.js +44 -4
  314. package/dist/cli/command.js.map +1 -1
  315. package/dist/cli/usage.d.ts +11 -1
  316. package/dist/cli/usage.js +20 -1
  317. package/dist/cli/usage.js.map +1 -1
  318. package/dist/compat/fetch-profile.js +10 -1
  319. package/dist/compat/fetch-profile.js.map +1 -1
  320. package/dist/compile-types.d.ts +13 -0
  321. package/dist/contracts/check.js +25 -6
  322. package/dist/contracts/check.js.map +1 -1
  323. package/dist/contracts/int32-elements.d.ts +115 -0
  324. package/dist/contracts/int32-elements.js +1179 -0
  325. package/dist/contracts/int32-elements.js.map +1 -0
  326. package/dist/coverage/report.d.ts +16 -0
  327. package/dist/coverage/report.js +182 -1
  328. package/dist/coverage/report.js.map +1 -1
  329. package/dist/coverage/surface-manifest.js +19 -6
  330. package/dist/coverage/surface-manifest.js.map +1 -1
  331. package/dist/coverage/verdict-cache.d.ts +2 -0
  332. package/dist/coverage/verdict-cache.js +12 -0
  333. package/dist/coverage/verdict-cache.js.map +1 -1
  334. package/dist/coverage/verdict-cache.test.js +2 -1
  335. package/dist/coverage/verdict-cache.test.js.map +1 -1
  336. package/dist/diagnostics/diagnostic.d.ts +11 -7
  337. package/dist/diagnostics/diagnostic.js +35 -23
  338. package/dist/diagnostics/diagnostic.js.map +1 -1
  339. package/dist/diagnostics/envelope.d.ts +39 -2
  340. package/dist/diagnostics/envelope.js.map +1 -1
  341. package/dist/diagnostics/render.d.ts +7 -0
  342. package/dist/diagnostics/render.js +50 -13
  343. package/dist/diagnostics/render.js.map +1 -1
  344. package/dist/diagnostics/render.test.d.ts +1 -0
  345. package/dist/diagnostics/render.test.js +49 -0
  346. package/dist/diagnostics/render.test.js.map +1 -0
  347. package/dist/executable/executable-cache.d.ts +17 -0
  348. package/dist/executable/executable-cache.js +13 -1
  349. package/dist/executable/executable-cache.js.map +1 -1
  350. package/dist/executable/executable-cache.test.js +7 -1
  351. package/dist/executable/executable-cache.test.js.map +1 -1
  352. package/dist/executable/prepare.js +2 -1
  353. package/dist/executable/prepare.js.map +1 -1
  354. package/dist/frontend/analysis.js +6 -1
  355. package/dist/frontend/analysis.js.map +1 -1
  356. package/dist/frontend/builtin-modules.d.ts +16 -2
  357. package/dist/frontend/builtin-modules.js +40 -7
  358. package/dist/frontend/builtin-modules.js.map +1 -1
  359. package/dist/frontend/cjs-syntax.js +52 -51
  360. package/dist/frontend/cjs-syntax.js.map +1 -1
  361. package/dist/frontend/contract-types.d.ts +3 -0
  362. package/dist/frontend/contract-types.js +36 -7
  363. package/dist/frontend/contract-types.js.map +1 -1
  364. package/dist/frontend/experimental-import.d.ts +5 -1
  365. package/dist/frontend/experimental-import.js +26 -7
  366. package/dist/frontend/experimental-import.js.map +1 -1
  367. package/dist/frontend/fork-target.js +20 -22
  368. package/dist/frontend/fork-target.js.map +1 -1
  369. package/dist/frontend/fork-target.test.js +2 -1
  370. package/dist/frontend/fork-target.test.js.map +1 -1
  371. package/dist/frontend/function-completion.js +6 -6
  372. package/dist/frontend/function-completion.js.map +1 -1
  373. package/dist/frontend/helper-tokens.js +15 -3
  374. package/dist/frontend/helper-tokens.js.map +1 -1
  375. package/dist/frontend/helper-tokens.test.js +7 -1
  376. package/dist/frontend/helper-tokens.test.js.map +1 -1
  377. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  378. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  379. package/dist/frontend/input-tracker.d.ts +3 -0
  380. package/dist/frontend/input-tracker.js +32 -3
  381. package/dist/frontend/input-tracker.js.map +1 -1
  382. package/dist/frontend/lib-contract.js +36 -32
  383. package/dist/frontend/lib-contract.js.map +1 -1
  384. package/dist/frontend/lib-exports.js +3 -3
  385. package/dist/frontend/lib-exports.js.map +1 -1
  386. package/dist/frontend/lowering/array-values.d.ts +8 -3
  387. package/dist/frontend/lowering/array-values.js +60 -11
  388. package/dist/frontend/lowering/array-values.js.map +1 -1
  389. package/dist/frontend/lowering/assert-instances.js +4 -4
  390. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  391. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  392. package/dist/frontend/lowering/assertion-identity.js +70 -0
  393. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  394. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  395. package/dist/frontend/lowering/assertion-members.js +185 -0
  396. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  397. package/dist/frontend/lowering/binding-analysis.js +27 -20
  398. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  399. package/dist/frontend/lowering/builtin-calls.js +72 -4
  400. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  401. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  402. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  403. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  404. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  405. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  406. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  407. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  408. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  409. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  410. package/dist/frontend/lowering/builtins/blob.js +8 -6
  411. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  412. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
  413. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
  414. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  415. package/dist/frontend/lowering/builtins/callable-aliases.js +45 -6
  416. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  417. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  418. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  419. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  420. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  421. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  422. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  423. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  424. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  425. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  426. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  428. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  429. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  430. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  431. package/dist/frontend/lowering/builtins/compression.js +230 -52
  432. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  433. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  434. package/dist/frontend/lowering/builtins/constants.js +28 -7
  435. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  436. package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
  437. package/dist/frontend/lowering/builtins/crypto.js +223 -38
  438. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  439. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  440. package/dist/frontend/lowering/builtins/dates.js +92 -16
  441. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  442. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  443. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  444. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  445. package/dist/frontend/lowering/builtins/environment.js +3 -3
  446. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  447. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  448. package/dist/frontend/lowering/builtins/errors.js +174 -6
  449. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  450. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +4 -0
  451. package/dist/frontend/lowering/builtins/filesystem-calls.js +136 -113
  452. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  453. package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
  454. package/dist/frontend/lowering/builtins/filesystem.js +213 -76
  455. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  457. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  459. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
  461. package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
  462. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  464. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  465. package/dist/frontend/lowering/builtins/json.js +232 -24
  466. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  468. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  470. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  471. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/module-calls.js +67 -46
  473. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  475. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  476. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  478. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  479. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  481. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  482. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  483. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  484. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  485. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  486. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  487. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  488. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  489. package/dist/frontend/lowering/builtins/performance.js +259 -8
  490. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  491. package/dist/frontend/lowering/builtins/process.d.ts +32 -1
  492. package/dist/frontend/lowering/builtins/process.js +468 -99
  493. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  494. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  495. package/dist/frontend/lowering/builtins/promises.js +326 -43
  496. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  497. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
  498. package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
  499. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  500. package/dist/frontend/lowering/builtins/properties.js +37 -1
  501. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  502. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  503. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  504. package/dist/frontend/lowering/builtins/readline.d.ts +55 -13
  505. package/dist/frontend/lowering/builtins/readline.js +931 -69
  506. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  508. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/reflection.js +16 -14
  510. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  512. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  513. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  514. package/dist/frontend/lowering/builtins/strings.js +101 -12
  515. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  516. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  517. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  518. package/dist/frontend/lowering/builtins/timers.js +75 -30
  519. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  521. package/dist/frontend/lowering/builtins/url.js +120 -17
  522. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  523. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  524. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  526. package/dist/frontend/lowering/builtins/v8.js +105 -0
  527. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  529. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  530. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  532. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  533. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  534. package/dist/frontend/lowering/builtins/workers.d.ts +16 -0
  535. package/dist/frontend/lowering/builtins/workers.js +246 -3
  536. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  537. package/dist/frontend/lowering/call-arguments.js +69 -14
  538. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  539. package/dist/frontend/lowering/call-signatures.d.ts +19 -1
  540. package/dist/frontend/lowering/call-signatures.js +254 -47
  541. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  542. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  543. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  544. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  545. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  546. package/dist/frontend/lowering/cjs-exports-object.js +528 -0
  547. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  548. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  549. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  550. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  551. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  552. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  553. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  554. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  555. package/dist/frontend/lowering/class-attributes.js +378 -0
  556. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  557. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  558. package/dist/frontend/lowering/class-callbacks.js +21 -10
  559. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  560. package/dist/frontend/lowering/class-construction.js +49 -4
  561. package/dist/frontend/lowering/class-construction.js.map +1 -1
  562. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  563. package/dist/frontend/lowering/class-descriptors.js +8 -8
  564. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  565. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  566. package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
  567. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  568. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  569. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  570. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  571. package/dist/frontend/lowering/class-iterables.js +31 -0
  572. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  573. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  574. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  575. package/dist/frontend/lowering/class-method-values.js +56 -10
  576. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  577. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  578. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  579. package/dist/frontend/lowering/class-protocols.d.ts +55 -0
  580. package/dist/frontend/lowering/class-protocols.js +738 -22
  581. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  582. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  583. package/dist/frontend/lowering/class-prototypes.js +80 -18
  584. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  585. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  586. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  587. package/dist/frontend/lowering/class-static-data.js +2 -2
  588. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  589. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  590. package/dist/frontend/lowering/class-to-primitive.js +261 -0
  591. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  592. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  593. package/dist/frontend/lowering/class-unions.js +102 -1
  594. package/dist/frontend/lowering/class-unions.js.map +1 -1
  595. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  596. package/dist/frontend/lowering/code-generation.js +127 -0
  597. package/dist/frontend/lowering/code-generation.js.map +1 -0
  598. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  599. package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
  600. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  601. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  602. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  603. package/dist/frontend/lowering/coercions/structural.js +35 -3
  604. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  605. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  606. package/dist/frontend/lowering/coercions/unions.js +57 -1
  607. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  608. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  609. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  610. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  611. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  612. package/dist/frontend/lowering/construction-escapes.js +8 -8
  613. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  614. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  615. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  616. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  617. package/dist/frontend/lowering/constructor-returns.js +477 -0
  618. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  619. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  620. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  621. package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
  622. package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
  623. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  624. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  625. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  626. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  627. package/dist/frontend/lowering/containers/array-construction.js +51 -13
  628. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  629. package/dist/frontend/lowering/containers/array-from-async.d.ts +19 -0
  630. package/dist/frontend/lowering/containers/array-from-async.js +427 -0
  631. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
  632. package/dist/frontend/lowering/containers/array-methods.js +89 -77
  633. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  634. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  635. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  636. package/dist/frontend/lowering/containers/bytes.js +161 -101
  637. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  638. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  639. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  640. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  641. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  642. package/dist/frontend/lowering/containers/collection-grouping.js +219 -27
  643. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  644. package/dist/frontend/lowering/containers/collection-methods.js +81 -48
  645. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  646. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  647. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  648. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  649. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  650. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  651. package/dist/frontend/lowering/containers/for-of.js +19 -19
  652. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  653. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  654. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  655. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  656. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  657. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  658. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  659. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  660. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  661. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  662. package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
  663. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  664. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  665. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  666. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
  667. package/dist/frontend/lowering/cycle-initialization.js +39 -0
  668. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  669. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  670. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  671. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  672. package/dist/frontend/lowering/devirtualize.js +27 -7
  673. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  674. package/dist/frontend/lowering/divergences.d.ts +0 -5
  675. package/dist/frontend/lowering/divergences.js +238 -128
  676. package/dist/frontend/lowering/divergences.js.map +1 -1
  677. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  678. package/dist/frontend/lowering/dyn-streams.js +257 -0
  679. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  680. package/dist/frontend/lowering/error-methods.js +4 -1
  681. package/dist/frontend/lowering/error-methods.js.map +1 -1
  682. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  683. package/dist/frontend/lowering/error-name-order.js +93 -0
  684. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  685. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  686. package/dist/frontend/lowering/expressions/array-literals.js +703 -0
  687. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  688. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  689. package/dist/frontend/lowering/expressions/binary.js +2483 -0
  690. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  691. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  692. package/dist/frontend/lowering/expressions/element-access.js +1797 -0
  693. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  694. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  695. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  696. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  697. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  698. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  699. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  700. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  701. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  702. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
  703. package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
  704. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  705. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  706. package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
  707. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  708. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  709. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  710. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  711. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  712. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  713. package/dist/frontend/lowering/expressions/object-literals.js +253 -85
  714. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  715. package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
  716. package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
  717. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  718. package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
  719. package/dist/frontend/lowering/expressions/property-access.js +3544 -0
  720. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  721. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  722. package/dist/frontend/lowering/expressions/relational.js +1679 -0
  723. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  724. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  725. package/dist/frontend/lowering/expressions/typeof.js +538 -0
  726. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  727. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  728. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  729. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  730. package/dist/frontend/lowering/expressions/updates.js +780 -0
  731. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  732. package/dist/frontend/lowering/function-context.d.ts +10 -0
  733. package/dist/frontend/lowering/function-context.js +11 -1
  734. package/dist/frontend/lowering/function-context.js.map +1 -1
  735. package/dist/frontend/lowering/function-returns.js +52 -28
  736. package/dist/frontend/lowering/function-returns.js.map +1 -1
  737. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  738. package/dist/frontend/lowering/general-streams.js +108 -0
  739. package/dist/frontend/lowering/general-streams.js.map +1 -0
  740. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  741. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  742. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  743. package/dist/frontend/lowering/generic-functions.d.ts +39 -0
  744. package/dist/frontend/lowering/generic-functions.js +393 -75
  745. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  746. package/dist/frontend/lowering/import-meta.js +2 -2
  747. package/dist/frontend/lowering/import-meta.js.map +1 -1
  748. package/dist/frontend/lowering/intern-tables.js +10 -9
  749. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  750. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  751. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  752. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  753. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  754. package/dist/frontend/lowering/js-class-fields.js +170 -0
  755. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  756. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  757. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  758. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  759. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  760. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  761. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  762. package/dist/frontend/lowering/json-require.d.ts +22 -0
  763. package/dist/frontend/lowering/json-require.js +131 -0
  764. package/dist/frontend/lowering/json-require.js.map +1 -0
  765. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  766. package/dist/frontend/lowering/key-order-witness.js +641 -0
  767. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  768. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  769. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  770. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  771. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  772. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  773. package/dist/frontend/lowering/lower-assert.js +61 -60
  774. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  775. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  776. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  777. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  778. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  779. package/dist/frontend/lowering/lower-builtin-values.js +32 -3
  780. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  781. package/dist/frontend/lowering/lower-calls.js +1298 -452
  782. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  783. package/dist/frontend/lowering/lower-classes.d.ts +50 -3
  784. package/dist/frontend/lowering/lower-classes.js +1499 -456
  785. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  786. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  787. package/dist/frontend/lowering/lower-comptime.js +111 -13
  788. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  789. package/dist/frontend/lowering/lower-console.js +13 -11
  790. package/dist/frontend/lowering/lower-console.js.map +1 -1
  791. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  792. package/dist/frontend/lowering/lower-dgram.js +179 -8
  793. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  794. package/dist/frontend/lowering/lower-enums.js +113 -14
  795. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  796. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  797. package/dist/frontend/lowering/lower-event-emitter.js +268 -71
  798. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  799. package/dist/frontend/lowering/lower-event-target.js +2 -2
  800. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  801. package/dist/frontend/lowering/lower-expando.js +17 -13
  802. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  803. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  804. package/dist/frontend/lowering/lower-exprs.js +1493 -12407
  805. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  806. package/dist/frontend/lowering/lower-functions.js +68 -22
  807. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  808. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  809. package/dist/frontend/lowering/lower-generators.js +29 -16
  810. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  811. package/dist/frontend/lowering/lower-global-value.js +5 -1
  812. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  813. package/dist/frontend/lowering/lower-inspect.js +354 -99
  814. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  815. package/dist/frontend/lowering/lower-mixins.js +23 -20
  816. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  817. package/dist/frontend/lowering/lower-mock.d.ts +19 -2
  818. package/dist/frontend/lowering/lower-mock.js +557 -74
  819. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  820. package/dist/frontend/lowering/lower-modules.js +268 -61
  821. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  822. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  823. package/dist/frontend/lowering/lower-namespaces.js +45 -33
  824. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  825. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  826. package/dist/frontend/lowering/lower-node-module.js +147 -14
  827. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  828. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  829. package/dist/frontend/lowering/lower-server.js +638 -105
  830. package/dist/frontend/lowering/lower-server.js.map +1 -1
  831. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  832. package/dist/frontend/lowering/lower-stdlib.js +151 -109
  833. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  834. package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
  835. package/dist/frontend/lowering/lower-stmts.js +1589 -398
  836. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  837. package/dist/frontend/lowering/lower-stream.d.ts +4 -3
  838. package/dist/frontend/lowering/lower-stream.js +714 -75
  839. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  840. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  841. package/dist/frontend/lowering/lower-test.js +574 -100
  842. package/dist/frontend/lowering/lower-test.js.map +1 -1
  843. package/dist/frontend/lowering/lower-timers.js +80 -32
  844. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  845. package/dist/frontend/lowering/lower-url.js +1 -1
  846. package/dist/frontend/lowering/lower-url.js.map +1 -1
  847. package/dist/frontend/lowering/lowerer.d.ts +409 -26
  848. package/dist/frontend/lowering/lowerer.js +1918 -305
  849. package/dist/frontend/lowering/lowerer.js.map +1 -1
  850. package/dist/frontend/lowering/lowerer.test.js +10 -4
  851. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  852. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  853. package/dist/frontend/lowering/maybe-promise.js +249 -0
  854. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  855. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  856. package/dist/frontend/lowering/module-member-this.js +262 -0
  857. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  858. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  859. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  860. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  861. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  862. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  863. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  864. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  865. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  866. package/dist/frontend/lowering/native-ffi.js +11 -11
  867. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  868. package/dist/frontend/lowering/null-prototype.d.ts +13 -0
  869. package/dist/frontend/lowering/null-prototype.js +33 -0
  870. package/dist/frontend/lowering/null-prototype.js.map +1 -0
  871. package/dist/frontend/lowering/object-factory-new.js +6 -8
  872. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  873. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  874. package/dist/frontend/lowering/private-brands.js +265 -0
  875. package/dist/frontend/lowering/private-brands.js.map +1 -0
  876. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  877. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  878. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  879. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  880. package/dist/frontend/lowering/require-initialization.js +246 -0
  881. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  882. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  883. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  884. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  885. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  886. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  887. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  888. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  889. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  890. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  891. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  892. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  893. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  894. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  895. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  896. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  897. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  898. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  899. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  900. package/dist/frontend/lowering/split-consumers.js +4 -4
  901. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  902. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  903. package/dist/frontend/lowering/static-function-names.js +212 -0
  904. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  905. package/dist/frontend/lowering/static-this.js +6 -6
  906. package/dist/frontend/lowering/static-this.js.map +1 -1
  907. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  908. package/dist/frontend/lowering/strict-mode.js +31 -0
  909. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  910. package/dist/frontend/lowering/string-index-bounds.js +10 -10
  911. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  912. package/dist/frontend/lowering/string-index.d.ts +12 -0
  913. package/dist/frontend/lowering/string-index.js +72 -1
  914. package/dist/frontend/lowering/string-index.js.map +1 -1
  915. package/dist/frontend/lowering/surfaces.d.ts +15 -6
  916. package/dist/frontend/lowering/surfaces.js +278 -45
  917. package/dist/frontend/lowering/surfaces.js.map +1 -1
  918. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  919. package/dist/frontend/lowering/symbol-fields.js +204 -36
  920. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  921. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  922. package/dist/frontend/lowering/symbol-methods.js +24 -6
  923. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  924. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  925. package/dist/frontend/lowering/thread-slots.js +208 -0
  926. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  927. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  928. package/dist/frontend/lowering/typed-arguments.js +472 -0
  929. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  930. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  931. package/dist/frontend/lowering/union-retag.js +27 -0
  932. package/dist/frontend/lowering/union-retag.js.map +1 -1
  933. package/dist/frontend/lowering/union-retag.test.js +24 -1
  934. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  935. package/dist/frontend/lowering/var-hoisting.js +6 -6
  936. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  937. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  938. package/dist/frontend/mock-shapes.d.ts +5 -0
  939. package/dist/frontend/mock-shapes.js +39 -7
  940. package/dist/frontend/mock-shapes.js.map +1 -1
  941. package/dist/frontend/module-source-candidates.js +1 -1
  942. package/dist/frontend/module-source-candidates.js.map +1 -1
  943. package/dist/frontend/module-source-candidates.test.js +2 -1
  944. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  945. package/dist/frontend/module-syntax.js +8 -8
  946. package/dist/frontend/module-syntax.js.map +1 -1
  947. package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
  948. package/dist/frontend/npm-static-bundled-chunks.js +810 -0
  949. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  950. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  951. package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
  952. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  953. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  954. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  955. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  956. package/dist/frontend/npm-static-bundled-esm.js +768 -0
  957. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  958. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  959. package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
  960. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  961. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  962. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  963. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  964. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  965. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  966. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  967. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  968. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  969. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  970. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  971. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  972. package/dist/frontend/npm-static-prune.js +36 -24
  973. package/dist/frontend/npm-static-prune.js.map +1 -1
  974. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  975. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  976. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  977. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  978. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  979. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  980. package/dist/frontend/npm-static-subtyping.js +7 -9
  981. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  982. package/dist/frontend/npm-static.d.ts +17 -1
  983. package/dist/frontend/npm-static.js +167 -16
  984. package/dist/frontend/npm-static.js.map +1 -1
  985. package/dist/frontend/npm-static.test.js +22 -1
  986. package/dist/frontend/npm-static.test.js.map +1 -1
  987. package/dist/frontend/pipeline.js +164 -26
  988. package/dist/frontend/pipeline.js.map +1 -1
  989. package/dist/frontend/pipeline.test.js +22 -1
  990. package/dist/frontend/pipeline.test.js.map +1 -1
  991. package/dist/frontend/program-analysis.d.ts +6 -1
  992. package/dist/frontend/program-analysis.js +7 -0
  993. package/dist/frontend/program-analysis.js.map +1 -1
  994. package/dist/frontend/program.d.ts +92 -2
  995. package/dist/frontend/program.js +1557 -254
  996. package/dist/frontend/program.js.map +1 -1
  997. package/dist/frontend/program.test.js +76 -6
  998. package/dist/frontend/program.test.js.map +1 -1
  999. package/dist/frontend/resolve.js +36 -2
  1000. package/dist/frontend/resolve.js.map +1 -1
  1001. package/dist/frontend/resolve.test.js +49 -0
  1002. package/dist/frontend/resolve.test.js.map +1 -1
  1003. package/dist/frontend/services.d.ts +20 -1
  1004. package/dist/frontend/services.js +40 -3
  1005. package/dist/frontend/services.js.map +1 -1
  1006. package/dist/frontend/services.test.js +2 -1
  1007. package/dist/frontend/services.test.js.map +1 -1
  1008. package/dist/frontend/threads-import.js +1 -1
  1009. package/dist/frontend/threads-import.js.map +1 -1
  1010. package/dist/frontend/tier-analysis.d.ts +71 -0
  1011. package/dist/frontend/tier-analysis.js +522 -0
  1012. package/dist/frontend/tier-analysis.js.map +1 -0
  1013. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1014. package/dist/frontend/ts7/api-conformance.js +7 -0
  1015. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1016. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1017. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1018. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1019. package/dist/frontend/ts7/ast-node.js +64 -18
  1020. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1021. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1022. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1023. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1024. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1025. package/dist/frontend/ts7/ast.d.ts +1 -0
  1026. package/dist/frontend/ts7/ast.js +3 -2
  1027. package/dist/frontend/ts7/ast.js.map +1 -1
  1028. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1029. package/dist/frontend/ts7/checker-backend.js +88 -0
  1030. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1031. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1032. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1033. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1034. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1035. package/dist/frontend/ts7/checker-cache.js +0 -6
  1036. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1037. package/dist/frontend/ts7/checker.d.ts +18 -11
  1038. package/dist/frontend/ts7/checker.js +42 -55
  1039. package/dist/frontend/ts7/checker.js.map +1 -1
  1040. package/dist/frontend/ts7/checker.test.js +10 -7
  1041. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1042. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1043. package/dist/frontend/ts7/diagnostic.js +22 -0
  1044. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1045. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1046. package/dist/frontend/ts7/node-functions.js +18 -0
  1047. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1048. package/dist/frontend/ts7/program-host.d.ts +5 -1
  1049. package/dist/frontend/ts7/program-host.js +12 -0
  1050. package/dist/frontend/ts7/program-host.js.map +1 -1
  1051. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1052. package/dist/frontend/ts7/rpc-api.js +8 -1
  1053. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1054. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1055. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1056. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1057. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1058. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1059. package/dist/frontend/ts7/semantic-model.d.ts +54 -24
  1060. package/dist/frontend/ts7/semantic-model.js +88 -16
  1061. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1062. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1063. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1064. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1065. package/dist/frontend/ts7/semantic-types.js +1 -1
  1066. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1067. package/dist/frontend/ts7/session.d.ts +11 -11
  1068. package/dist/frontend/ts7/session.js +8 -5
  1069. package/dist/frontend/ts7/session.js.map +1 -1
  1070. package/dist/frontend/ts7/session.test.js +9 -5
  1071. package/dist/frontend/ts7/session.test.js.map +1 -1
  1072. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1073. package/dist/frontend/ts7/source-parser.js +24 -3
  1074. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1075. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1076. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1077. package/dist/frontend/type-mapper.d.ts +122 -2
  1078. package/dist/frontend/type-mapper.js +2612 -695
  1079. package/dist/frontend/type-mapper.js.map +1 -1
  1080. package/dist/frontend/type-only-imports.d.ts +28 -0
  1081. package/dist/frontend/type-only-imports.js +122 -0
  1082. package/dist/frontend/type-only-imports.js.map +1 -0
  1083. package/dist/frontend/worker-target.js +8 -8
  1084. package/dist/frontend/worker-target.js.map +1 -1
  1085. package/dist/index.d.ts +3 -1
  1086. package/dist/index.js +47 -10
  1087. package/dist/index.js.map +1 -1
  1088. package/dist/ir/analysis.js +4 -2
  1089. package/dist/ir/analysis.js.map +1 -1
  1090. package/dist/ir/api.d.ts +1 -1
  1091. package/dist/ir/api.js +1 -1
  1092. package/dist/ir/api.js.map +1 -1
  1093. package/dist/ir/array-length-stability.d.ts +30 -0
  1094. package/dist/ir/array-length-stability.js +236 -0
  1095. package/dist/ir/array-length-stability.js.map +1 -0
  1096. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1097. package/dist/ir/array-length-stability.test.js +113 -0
  1098. package/dist/ir/array-length-stability.test.js.map +1 -0
  1099. package/dist/ir/build.d.ts +2 -2
  1100. package/dist/ir/build.js +1 -1
  1101. package/dist/ir/build.js.map +1 -1
  1102. package/dist/ir/builtin-effects.js +139 -0
  1103. package/dist/ir/builtin-effects.js.map +1 -1
  1104. package/dist/ir/builtin-signatures.d.ts +1 -1
  1105. package/dist/ir/builtin-signatures.js +655 -25
  1106. package/dist/ir/builtin-signatures.js.map +1 -1
  1107. package/dist/ir/byte-numbers.js +3 -0
  1108. package/dist/ir/byte-numbers.js.map +1 -1
  1109. package/dist/ir/callback-specialization.d.ts +37 -0
  1110. package/dist/ir/callback-specialization.js +459 -0
  1111. package/dist/ir/callback-specialization.js.map +1 -0
  1112. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1113. package/dist/ir/callback-specialization.test.js +208 -0
  1114. package/dist/ir/callback-specialization.test.js.map +1 -0
  1115. package/dist/ir/capture-values.d.ts +0 -1
  1116. package/dist/ir/capture-values.js +51 -40
  1117. package/dist/ir/capture-values.js.map +1 -1
  1118. package/dist/ir/constant-globals.test.js +1 -1
  1119. package/dist/ir/constant-tables.test.js +1 -1
  1120. package/dist/ir/field-values.test.js +1 -1
  1121. package/dist/ir/final-fields.test.js +1 -1
  1122. package/dist/ir/function-references.test.js +10 -1
  1123. package/dist/ir/function-references.test.js.map +1 -1
  1124. package/dist/ir/init-only-globals.test.js +1 -1
  1125. package/dist/ir/initializer-bindings.test.js +1 -1
  1126. package/dist/ir/int32-slots.d.ts +14 -0
  1127. package/dist/ir/int32-slots.js +119 -14
  1128. package/dist/ir/int32-slots.js.map +1 -1
  1129. package/dist/ir/int32-slots.test.js +29 -1
  1130. package/dist/ir/int32-slots.test.js.map +1 -1
  1131. package/dist/ir/integer-loop-facts.d.ts +16 -6
  1132. package/dist/ir/integer-loop-facts.js +143 -38
  1133. package/dist/ir/integer-loop-facts.js.map +1 -1
  1134. package/dist/ir/integer-loops.d.ts +1 -1
  1135. package/dist/ir/integer-loops.js +39 -9
  1136. package/dist/ir/integer-loops.js.map +1 -1
  1137. package/dist/ir/integer-loops.test.js +104 -0
  1138. package/dist/ir/integer-loops.test.js.map +1 -1
  1139. package/dist/ir/integer-ranges.d.ts +3 -0
  1140. package/dist/ir/integer-ranges.js +4 -6
  1141. package/dist/ir/integer-ranges.js.map +1 -1
  1142. package/dist/ir/integer-ranges.test.js +142 -1
  1143. package/dist/ir/integer-ranges.test.js.map +1 -1
  1144. package/dist/ir/intrinsic-signatures.js +6 -0
  1145. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1146. package/dist/ir/ir.d.ts +234 -58
  1147. package/dist/ir/ir.js +123 -12
  1148. package/dist/ir/ir.js.map +1 -1
  1149. package/dist/ir/ir.test.js +10 -0
  1150. package/dist/ir/ir.test.js.map +1 -1
  1151. package/dist/ir/jsval.d.ts +8 -0
  1152. package/dist/ir/jsval.js +365 -0
  1153. package/dist/ir/jsval.js.map +1 -0
  1154. package/dist/ir/jsval.test.d.ts +1 -0
  1155. package/dist/ir/jsval.test.js +239 -0
  1156. package/dist/ir/jsval.test.js.map +1 -0
  1157. package/dist/ir/runtime-features.d.ts +150 -33
  1158. package/dist/ir/runtime-features.js +672 -339
  1159. package/dist/ir/runtime-features.js.map +1 -1
  1160. package/dist/ir/runtime-features.test.js +62 -0
  1161. package/dist/ir/runtime-features.test.js.map +1 -1
  1162. package/dist/ir/scalar-records.test.js +1 -1
  1163. package/dist/ir/self-captures.d.ts +33 -0
  1164. package/dist/ir/self-captures.js +245 -0
  1165. package/dist/ir/self-captures.js.map +1 -0
  1166. package/dist/ir/self-captures.test.d.ts +1 -0
  1167. package/dist/ir/self-captures.test.js +135 -0
  1168. package/dist/ir/self-captures.test.js.map +1 -0
  1169. package/dist/ir/serialize.d.ts +1 -1
  1170. package/dist/ir/serialize.js +7 -4
  1171. package/dist/ir/serialize.js.map +1 -1
  1172. package/dist/ir/tiers.d.ts +26 -0
  1173. package/dist/ir/tiers.js +101 -0
  1174. package/dist/ir/tiers.js.map +1 -0
  1175. package/dist/ir/tiers.test.d.ts +1 -0
  1176. package/dist/ir/tiers.test.js +140 -0
  1177. package/dist/ir/tiers.test.js.map +1 -0
  1178. package/dist/ir/traverse.js +107 -94
  1179. package/dist/ir/traverse.js.map +1 -1
  1180. package/dist/ir/traverse.test.js +33 -30
  1181. package/dist/ir/traverse.test.js.map +1 -1
  1182. package/dist/ir/unshare.js +65 -3
  1183. package/dist/ir/unshare.js.map +1 -1
  1184. package/dist/ir/unshare.test.js +1 -1
  1185. package/dist/ir/validate.js +220 -71
  1186. package/dist/ir/validate.js.map +1 -1
  1187. package/dist/ir/validate.test.js +64 -9
  1188. package/dist/ir/validate.test.js.map +1 -1
  1189. package/dist/library/fence-eval.test.js +1 -1
  1190. package/dist/library/int-infer.test.js +4 -4
  1191. package/dist/library/ir-policy.js +18 -0
  1192. package/dist/library/ir-policy.js.map +1 -1
  1193. package/dist/library/library-cache.d.ts +1 -0
  1194. package/dist/library/library-cache.js.map +1 -1
  1195. package/dist/library/library-cache.test.js +5 -5
  1196. package/dist/library/library-profile.d.ts +4 -4
  1197. package/dist/library/library-profile.js +35 -7
  1198. package/dist/library/library-profile.js.map +1 -1
  1199. package/dist/library/prepare.js +13 -1
  1200. package/dist/library/prepare.js.map +1 -1
  1201. package/dist/native/cli.js +5 -0
  1202. package/dist/native/cli.js.map +1 -1
  1203. package/dist/native/compiler.js +2 -2
  1204. package/dist/native/compiler.js.map +1 -1
  1205. package/dist/native/compiler.test.js +2 -2
  1206. package/dist/native/prepare.js +7 -0
  1207. package/dist/native/prepare.js.map +1 -1
  1208. package/dist/native/sanitizer.test.js +12 -0
  1209. package/dist/native/sanitizer.test.js.map +1 -1
  1210. package/dist/native/toolchain.d.ts +2 -0
  1211. package/dist/native/toolchain.js +10 -1
  1212. package/dist/native/toolchain.js.map +1 -1
  1213. package/dist/native/toolchain.test.js +39 -1
  1214. package/dist/native/toolchain.test.js.map +1 -1
  1215. package/dist/startup-cache.d.ts +1 -0
  1216. package/dist/startup-cache.js +1 -0
  1217. package/dist/startup-cache.js.map +1 -1
  1218. package/dist/wasm/base64.d.ts +5 -0
  1219. package/dist/wasm/base64.js +62 -0
  1220. package/dist/wasm/base64.js.map +1 -0
  1221. package/dist/wasm/binary.d.ts +36 -0
  1222. package/dist/wasm/binary.js +1976 -0
  1223. package/dist/wasm/binary.js.map +1 -0
  1224. package/dist/wasm/binary.test.d.ts +1 -0
  1225. package/dist/wasm/binary.test.js +190 -0
  1226. package/dist/wasm/binary.test.js.map +1 -0
  1227. package/dist/wasm/discover.d.ts +38 -0
  1228. package/dist/wasm/discover.js +377 -0
  1229. package/dist/wasm/discover.js.map +1 -0
  1230. package/dist/wasm/discover.test.d.ts +1 -0
  1231. package/dist/wasm/discover.test.js +24 -0
  1232. package/dist/wasm/discover.test.js.map +1 -0
  1233. package/dist/wasm/module.d.ts +151 -0
  1234. package/dist/wasm/module.js +575 -0
  1235. package/dist/wasm/module.js.map +1 -0
  1236. package/dist/wasm/translate.d.ts +48 -0
  1237. package/dist/wasm/translate.js +2129 -0
  1238. package/dist/wasm/translate.js.map +1 -0
  1239. package/dist/wasm/translate.test.d.ts +1 -0
  1240. package/dist/wasm/translate.test.js +207 -0
  1241. package/dist/wasm/translate.test.js.map +1 -0
  1242. package/package.json +21 -20
  1243. package/surface-manifest.json +332 -36
@@ -1,4 +1,5 @@
1
1
  import { nodeThrowExpr, boolLit, numLit, strLit } from "../../ir/build.js";
2
+ import { hashStreamOf, isHashValueType } from "./builtins/hash-stream.js";
2
3
  import { InternalCompilerError } from "../../errors.js";
3
4
  /* The node:stream lowering (the spoke-module pattern, like
4
5
  * lower-event-emitter.ts): construction of the five runtime stream classes
@@ -30,6 +31,7 @@ import { InternalCompilerError } from "../../errors.js";
30
31
  * its Node signature (the emitter listener rule). */
31
32
  import * as ts from "../ts7/adapter.js";
32
33
  import { dynFallbackType } from "./lowerer.js";
34
+ import { accessorCall, classIteratorNextCall, classIteratorOf, classIteratorOpenCall, } from "./lower-classes.js";
33
35
  import { isJsSourceFile, locOf } from "../program.js";
34
36
  import { newFnCtx, own } from "./lowerer.js";
35
37
  import { appendImplicitUndefinedReturn } from "./function-returns.js";
@@ -39,6 +41,8 @@ import { sideEffectFreeOptionValue } from "./surfaces.js";
39
41
  import { lowerDynObjectLiteral } from "./expressions/object-literals.js";
40
42
  import { dynUndefinedExpr, varRef } from "../../ir/build.js";
41
43
  import { genResultRecord } from "../type-mapper.js";
44
+ import { noteUntypedStreamFlow, requestGeneralStreamSurface } from "./general-streams.js";
45
+ import { dynNativeBranch } from "./dyn-streams.js";
42
46
  import { extractIteratorValue, genStep, genValue, stepDrivable } from "./lower-generators.js";
43
47
  import { BOOL, DYN, F64, RUNTIME_STREAM_CLASSES, STRING, VOID, arrayOf, BYTES_U8, canBoxFuncIntoDyn, canConvertToDyn, funcOf, typeEquals, typeKey, } from "../../ir/ir.js";
44
48
  const BYTES = BYTES_U8;
@@ -127,6 +131,15 @@ export const UNDERSCORE_METHODS = new Map([
127
131
  ["transform", "_transform"],
128
132
  ["flush", "_flush"],
129
133
  ]);
134
+ /** The completion callback's parameter position in each underscore
135
+ * method that takes one (cbTuples' "fn" positions). */
136
+ export const STREAM_COMPLETION_CALLBACK_INDEX = new Map([
137
+ ["_write", 2],
138
+ ["_final", 0],
139
+ ["_destroy", 1],
140
+ ["_transform", 2],
141
+ ["_flush", 0],
142
+ ]);
130
143
  /** The accepted option-callback names (canonical flag order) and the
131
144
  * duplex-shaped-head answer for one runtime stream class. */
132
145
  export function streamCtorShape(cls) {
@@ -161,6 +174,7 @@ export const STREAM_FORCED_EVENT_NAMES = new Set([
161
174
  "unpipe",
162
175
  "open",
163
176
  "ready",
177
+ "keypress",
164
178
  ]);
165
179
  /** The per-base FORCED event tuples (runtime-emitted payloads): consulted
166
180
  * by the emitter spoke BEFORE the program-global table, so a stream's
@@ -181,6 +195,8 @@ export function streamForcedTuple(lowerer, info, name) {
181
195
  resume: [],
182
196
  open: [F64],
183
197
  ready: [],
198
+ // readline.emitKeypressEvents' (str, key), as checked-dynamic values
199
+ keypress: [DYN, DYN],
184
200
  };
185
201
  const writable = {
186
202
  open: [F64],
@@ -216,7 +232,7 @@ export function streamForcedTuple(lowerer, info, name) {
216
232
  function lowerStreamCallback(lowerer, which, node, thisType, fullTuple) {
217
233
  const loc = locOf(node);
218
234
  const { shapes, funcType } = lowerer.lambdaSignature(node);
219
- if (node.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) {
235
+ if (node.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) {
220
236
  lowerer.unsupported("SC1090", node, `async stream '${which}' callbacks`);
221
237
  }
222
238
  if (funcType.params.length > fullTuple.length) {
@@ -243,10 +259,10 @@ function lowerStreamCallback(lowerer, which, node, thisType, fullTuple) {
243
259
  const thisLocal = ts.isArrowFunction(node)
244
260
  ? lowerer.declareHiddenLocal("this", thisType)
245
261
  : lowerer.declareThis(thisType);
246
- const { params, prologue } = lowerer.declareParams(node.parameters, shapes);
262
+ const { params, prologue } = lowerer.declareParams(node.parameters.nodes, shapes);
247
263
  let body;
248
264
  if (node.body !== undefined && ts.isBlock(node.body)) {
249
- body = lowerer.lowerStmts(node.body.statements);
265
+ body = lowerer.lowerStmts(node.body.statements.nodes);
250
266
  }
251
267
  else if (node.body !== undefined) {
252
268
  // Bare-expression bodies (`read: () => this.push(null)`): the value
@@ -397,7 +413,7 @@ function followOptionsArg(lowerer, arg) {
397
413
  catch {
398
414
  return node;
399
415
  }
400
- const decl = sym ? lowerer.checker.valueDeclarationOf(sym) : undefined;
416
+ const decl = sym ? sym.valueDeclaration : undefined;
401
417
  if (!sym || !decl || !ts.isVariableDeclaration(decl) || decl.initializer === undefined)
402
418
  return node;
403
419
  if ((ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) === 0)
@@ -480,6 +496,28 @@ function dynOptionsValue(lowerer, arg) {
480
496
  const v = lowerer.lowerExpr(followed);
481
497
  return v.type.kind === "dyn" ? v : null;
482
498
  }
499
+ /** @types/node declares the transform/flush completion callback as
500
+ * `(error?: Error | null, data?: any) => void`. Outside objectMode Node
501
+ * accepts only a Buffer, a string or nothing as `data`, so the callback
502
+ * parameter is typed with that union while the option callback lowers: a
503
+ * checked-dynamic value passed as `data` converts at the call. Returns the
504
+ * pinned parameter symbol (the caller unpins it), or null when the
505
+ * declared type needs no pin. */
506
+ function pinAnyDataCompletion(lowerer, which, fnNode) {
507
+ const index = which === "transform" ? 2 : which === "flush" ? 0 : -1;
508
+ const param = index < 0 ? undefined : fnNode.parameters.nodes[index];
509
+ if (param === undefined || !ts.isIdentifier(param.name) || param.dotDotDotToken)
510
+ return null;
511
+ const symbol = lowerer.checker.getSymbolAtLocation(param.name);
512
+ if (!symbol || lowerer.stageSourceTypes.has(symbol))
513
+ return null;
514
+ const declared = lowerer.paramShape(param).type;
515
+ if (declared.kind !== "func" || declared.rest || declared.params[1]?.kind !== "dyn")
516
+ return null;
517
+ const data = unionOf(lowerer, [BYTES, STRING, { kind: "undefinedT" }]);
518
+ lowerer.stageSourceTypes.set(symbol, funcOf([declared.params[0], data, ...declared.params.slice(2)], declared.ret));
519
+ return symbol;
520
+ }
483
521
  /** Parses the options object literal of a stream constructor. `which`
484
522
  * names the callbacks this class accepts, in canonical flag order. */
485
523
  function parseStreamOptions(lowerer, ctorName, arg, thisType, accepted, loc,
@@ -510,7 +548,7 @@ fallbackCb) {
510
548
  }
511
549
  const tuples = cbTuples(lowerer);
512
550
  const present = new Map();
513
- for (const prop of optsLit?.properties ?? []) {
551
+ for (const prop of optsLit?.properties?.nodes ?? []) {
514
552
  const propName = ts.isSpreadAssignment(prop) ? undefined : prop.name;
515
553
  const name = propName && ts.isIdentifier(propName)
516
554
  ? propName.text
@@ -545,20 +583,27 @@ fallbackCb) {
545
583
  continue;
546
584
  }
547
585
  const full = tuples[name].map((t) => (t === "fn" ? null : t));
548
- // The completion-callback tail: typed by the checker contextually;
549
- // accept the user's declared func type as the tuple's entry so the
550
- // prefix check compares like with like.
551
- const { funcType } = lowerer.lambdaSignature(fnNode);
552
- const tuple = full.map((t, i) => {
553
- if (t !== null)
554
- return t;
555
- const declared = funcType.params[i];
556
- if (declared !== undefined && declared.kind !== "func" && declared.kind !== "dyn") {
557
- lowerer.noLowering(`a '${name}' callback whose parameter ${i} is '${lowerer.fmt(declared)}' where Node passes the completion callback`, fnNode);
558
- }
559
- return declared ?? funcOf([], VOID);
560
- });
561
- present.set(name, lowerStreamCallback(lowerer, name, fnNode, thisType, tuple));
586
+ const pinned = pinAnyDataCompletion(lowerer, name, fnNode);
587
+ try {
588
+ // The completion-callback tail: typed by the checker contextually;
589
+ // accept the user's declared func type as the tuple's entry so the
590
+ // prefix check compares like with like.
591
+ const { funcType } = lowerer.lambdaSignature(fnNode);
592
+ const tuple = full.map((t, i) => {
593
+ if (t !== null)
594
+ return t;
595
+ const declared = funcType.params[i];
596
+ if (declared !== undefined && declared.kind !== "func" && declared.kind !== "dyn") {
597
+ lowerer.noLowering(`a '${name}' callback whose parameter ${i} is '${lowerer.fmt(declared)}' where Node passes the completion callback`, fnNode);
598
+ }
599
+ return declared ?? funcOf([], VOID);
600
+ });
601
+ present.set(name, lowerStreamCallback(lowerer, name, fnNode, thisType, tuple));
602
+ }
603
+ finally {
604
+ if (pinned)
605
+ lowerer.stageSourceTypes.delete(pinned);
606
+ }
562
607
  continue;
563
608
  }
564
609
  // `{ signal }` shorthand: the binding is the value.
@@ -753,7 +798,7 @@ export function lowerStreamNew(lowerer, expr, info) {
753
798
  if (!RUNTIME_STREAM_CLASSES.has(cls))
754
799
  lowerer.unsupported("SC1090", expr, `constructing ${cls}`);
755
800
  const thisType = { kind: "object", className: cls };
756
- const args = expr.arguments ?? [];
801
+ const args = expr.arguments?.nodes ?? [];
757
802
  if (args.length > 1) {
758
803
  lowerer.noLowering(`new ${info.def.name.slice(1)} with ${args.length} arguments`, expr, "the supported form takes one options object");
759
804
  }
@@ -810,6 +855,15 @@ export function lowerStreamNew(lowerer, expr, info) {
810
855
  loc,
811
856
  };
812
857
  }
858
+ /** True when a value of Node's argument type `passed` widens implicitly
859
+ * into the declared parameter type `declared` (one of its union arms, or a
860
+ * sub-union of it). */
861
+ function widensInto(lowerer, passed, declared, loc) {
862
+ if (declared.kind !== "union")
863
+ return false;
864
+ const probe = { kind: "varRef", localId: "%probe", type: passed, loc };
865
+ return typeEquals(lowerer.coerceToExpected(probe, declared).type, declared);
866
+ }
813
867
  /* ── user subclasses (`extends Readable`, the underscore-override form) ── */
814
868
  /** The wrapper closure binding one overridden underscore method as the
815
869
  * runtime's option callback: a lifted (this, ...prefix) function whose
@@ -860,7 +914,14 @@ function streamMethodWrapper(lowerer, info, which, methodName, thisType, loc, bl
860
914
  }
861
915
  }
862
916
  else if (!typeEquals(got.type, want)) {
863
- lowerer.noLowering(`a '${methodName}' method whose parameter ${i} is '${lowerer.fmt(got.type)}' where Node passes '${lowerer.fmt(want)}'`, blame, "annotate the parameter with the Node signature's type (chunks are Buffers here)");
917
+ // A declared supertype of what Node passes (`chunk: Buffer | string`)
918
+ // is sound: the wrapper takes Node's value and widens it into the
919
+ // declared parameter.
920
+ if (widensInto(lowerer, want, got.type, loc)) {
921
+ paramTypes.push(want);
922
+ continue;
923
+ }
924
+ lowerer.noLowering(`a '${methodName}' method whose parameter ${i} is '${lowerer.fmt(got.type)}' where Node passes '${lowerer.fmt(want)}'`, blame, "annotate the parameter with the Node signature's type or a supertype of it (chunks are Buffers here)");
864
925
  }
865
926
  paramTypes.push(got.type);
866
927
  }
@@ -875,7 +936,9 @@ function streamMethodWrapper(lowerer, info, which, methodName, thisType, loc, bl
875
936
  for (let i = 0; i < paramTypes.length; i++) {
876
937
  const local = lowerer.declareHiddenLocal(`a${i}`, paramTypes[i]);
877
938
  params.push({ localId: local.id, name: local.name, type: paramTypes[i] });
878
- argRefs.push({ kind: "varRef", localId: local.id, type: paramTypes[i], loc });
939
+ const arg = { kind: "varRef", localId: local.id, type: paramTypes[i], loc };
940
+ const declaredType = declared[i].type;
941
+ argRefs.push(typeEquals(arg.type, declaredType) ? arg : lowerer.coerceToExpected(arg, declaredType));
879
942
  }
880
943
  const thisRef = { kind: "varRef", localId: thisLocal.id, type: thisType, loc };
881
944
  let call;
@@ -1159,14 +1222,14 @@ export function lowerStreamStaticCall(lowerer, call, access) {
1159
1222
  // exists; valid shapes keep the fence — the web bridge has no lowering.
1160
1223
  if (member === "toWeb" &&
1161
1224
  cls === "%Readable" &&
1162
- call.arguments.length === 2 &&
1163
- isJsSourceFile(call.getSourceFile()) &&
1164
- ts.isObjectLiteralExpression(call.arguments[1])) {
1165
- for (const p of call.arguments[1].properties) {
1225
+ call.arguments.nodes.length === 2 &&
1226
+ isJsSourceFile(ts.getSourceFileOfNode(call)) &&
1227
+ ts.isObjectLiteralExpression(call.arguments.nodes[1])) {
1228
+ for (const p of call.arguments.nodes[1].properties.nodes) {
1166
1229
  if (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && p.name.text === "type") {
1167
1230
  const t = lowerer.typeOf(p.initializer);
1168
1231
  if (t.isStringLiteralType() && t.value !== "bytes") {
1169
- lowerer.lowerExpr(call.arguments[0]); // evaluation order (the stream argument)
1232
+ lowerer.lowerExpr(call.arguments.nodes[0]); // evaluation order (the stream argument)
1170
1233
  return nodeThrowExpr(1, "ERR_INVALID_ARG_VALUE", `The property 'options.type' must be one of: 'bytes', undefined. Received '${t.value}'`, lowerer.mapTypeOf(lowerer.typeOf(call)) ?? DYN, loc);
1171
1234
  }
1172
1235
  }
@@ -1178,12 +1241,12 @@ export function lowerStreamStaticCall(lowerer, call, access) {
1178
1241
  if (cls !== "%Readable") {
1179
1242
  lowerer.noLowering(`${cls.slice(1)}.from`, call, "Readable.from is the lowered form");
1180
1243
  }
1181
- const args = call.arguments;
1244
+ const args = call.arguments.nodes;
1182
1245
  if (args.length > 2) {
1183
1246
  lowerer.noLowering(`Readable.from with ${args.length} arguments`, call, "Readable.from(iterable, options) is the supported form");
1184
1247
  }
1185
1248
  const type = { kind: "object", className: "%Readable" };
1186
- const js = isJsSourceFile(call.getSourceFile());
1249
+ const js = isJsSourceFile(ts.getSourceFileOfNode(call));
1187
1250
  const srcNode = args[0];
1188
1251
  const optsNode = args[1];
1189
1252
  const srcT = srcNode ? lowerer.mapTypeOf(lowerer.typeOf(srcNode)) : null;
@@ -1191,21 +1254,66 @@ export function lowerStreamStaticCall(lowerer, call, access) {
1191
1254
  const single = typedElem(srcT);
1192
1255
  const elem = srcT?.kind === "array" ? typedElem(srcT.elem) : null;
1193
1256
  const opts = optsNode ? fromOptions(lowerer, optsNode) : { flags: 0, hwm: null };
1194
- if (srcNode && srcT?.kind === "generator" && opts && fromGenChunk(lowerer, srcT.yieldT)) {
1257
+ // A class whose [Symbol.iterator]() or [Symbol.asyncIterator]() is a
1258
+ // generator method: from.js calls the method when the stream is built,
1259
+ // then reads the generator like any other.
1260
+ const genMethod = srcT?.kind === "object" ? classGeneratorMethodOf(lowerer, srcT) : null;
1261
+ const genT = srcT?.kind === "generator" ? srcT : (genMethod?.gen ?? null);
1262
+ if (srcNode && genT && opts && fromGenChunk(lowerer, genT.yieldT)) {
1195
1263
  // A compiled generator: the runtime pulls it through interned helpers.
1196
- const gen = lowerer.lowerExpr(srcNode);
1197
- const helpers = fromGenHelpers(lowerer, srcT, loc);
1264
+ const recv = lowerer.lowerExpr(srcNode);
1265
+ const gen = genMethod && srcT?.kind === "object"
1266
+ ? accessorCall(lowerer, srcT.className, genMethod.method, recv, [], genT, loc)
1267
+ : recv;
1268
+ const helpers = fromGenHelpers(lowerer, genT, loc);
1198
1269
  if (helpers) {
1199
1270
  const hwm = opts.hwm ? lowerer.lowerExprExpecting(opts.hwm, F64) : numLit(0, loc);
1200
1271
  return {
1201
1272
  kind: "libCall",
1202
- fn: srcT.async ? "readable.fromAsyncGen" : "readable.fromGen",
1273
+ fn: genT.async ? "readable.fromAsyncGen" : "readable.fromGen",
1203
1274
  args: [gen, ...helpers, numLit(opts.flags, loc), hwm],
1204
1275
  type,
1205
1276
  loc,
1206
1277
  };
1207
1278
  }
1208
1279
  }
1280
+ // from.js prefers Symbol.asyncIterator: a class declaring one takes the
1281
+ // async route.
1282
+ const asyncOpen = srcT?.kind === "object" &&
1283
+ lowerer.classes.has(srcT.className) &&
1284
+ lowerer.findMethodOn(lowerer.classes.get(srcT.className), "sym:asyncIterator") !== null;
1285
+ const cit = srcT?.kind === "object" && !asyncOpen ? classIteratorOf(lowerer, srcT) : null;
1286
+ if (srcNode && cit && opts && fromGenChunk(lowerer, cit.valueT)) {
1287
+ // A class iterable: from.js takes the iterator when the stream is
1288
+ // built (the typed [Symbol.iterator]() call here), and the runtime
1289
+ // pulls it through a checked-dynamic { next } object. Class iterators
1290
+ // declare no return() or throw(), so destroy calls neither.
1291
+ const recv = lowerer.lowerExpr(srcNode);
1292
+ const hwm = opts.hwm ? lowerer.lowerExprExpecting(opts.hwm, F64) : numLit(0, loc);
1293
+ return {
1294
+ kind: "libCall",
1295
+ fn: "readable.fromIter",
1296
+ args: [
1297
+ classIteratorObject(lowerer, cit, classIteratorOpenCall(lowerer, cit, recv, loc), loc),
1298
+ numLit(opts.flags, loc),
1299
+ hwm,
1300
+ ],
1301
+ type,
1302
+ loc,
1303
+ };
1304
+ }
1305
+ const acit = srcT?.kind === "object" && asyncOpen ? classAsyncIteratorOf(lowerer, srcT) : null;
1306
+ if (srcNode && acit && opts && fromGenChunk(lowerer, acit.valueT)) {
1307
+ const recv = lowerer.lowerExpr(srcNode);
1308
+ const hwm = opts.hwm ? lowerer.lowerExprExpecting(opts.hwm, F64) : numLit(0, loc);
1309
+ return {
1310
+ kind: "libCall",
1311
+ fn: "readable.fromAsyncIter",
1312
+ args: [classAsyncIteratorObject(lowerer, acit, recv, loc), numLit(opts.flags, loc), hwm],
1313
+ type,
1314
+ loc,
1315
+ };
1316
+ }
1209
1317
  if (srcNode && (single || elem) && opts) {
1210
1318
  const v = lowerer.lowerExpr(srcNode);
1211
1319
  const hwm = opts.hwm ? lowerer.lowerExprExpecting(opts.hwm, F64) : numLit(0, loc);
@@ -1222,6 +1330,7 @@ export function lowerStreamStaticCall(lowerer, call, access) {
1222
1330
  };
1223
1331
  }
1224
1332
  const anySrc = srcT?.kind === "dyn" ||
1333
+ (srcT?.kind === "set" && typedElem(srcT.elem) !== null) ||
1225
1334
  (srcNode !== undefined &&
1226
1335
  srcT === null &&
1227
1336
  (lowerer.typeOf(srcNode).flags & ts.TypeFlags.Any) !== 0);
@@ -1235,7 +1344,7 @@ export function lowerStreamStaticCall(lowerer, call, access) {
1235
1344
  if (srcNode && (single || elem)) {
1236
1345
  lowerer.noLowering("Readable.from with these options", optsNode, "an object literal with 'objectMode' (true or false) and a number 'highWaterMark' is supported");
1237
1346
  }
1238
- lowerer.noLowering(`Readable.from over a '${srcT ? lowerer.fmt(srcT) : "?"}' source`, srcNode ?? call, "string[] / Buffer[] arrays (and a single string or Buffer) are the supported sources — generators and async iterables have no lowering yet");
1347
+ lowerer.noLowering(`Readable.from over a '${srcT ? lowerer.fmt(srcT) : "?"}' source`, srcNode ?? call, "the supported sources are a string or Buffer, and arrays, Sets, generators and class iterables of strings or Buffers");
1239
1348
  }
1240
1349
  /** Whether a generator's yields are stream chunks: strings, Buffers, a
1241
1350
  * union of them (null included: the runtime destroys the stream with
@@ -1363,6 +1472,210 @@ function fromGenHelpers(lowerer, gen, loc) {
1363
1472
  define("throw", [g, e], DYN, viaRecord("throw"), [r]),
1364
1473
  ];
1365
1474
  }
1475
+ /** `{ next() { const r = it.next(); return { value: r.value, done: r.done }; } }`
1476
+ * over a class iterator `it`, as a checked-dynamic object: an interned
1477
+ * lifted function per iterator class takes the iterator and answers the
1478
+ * object, whose `next` closure captures it. */
1479
+ function classIteratorObject(lowerer, cit, iter, loc) {
1480
+ const key = `streamFromIter:${cit.iterT.className}`;
1481
+ let name = lowerer.valueHelpers.get(key);
1482
+ if (!name) {
1483
+ name = `%stream.fromIter.${lowerer.valueHelpers.size}`;
1484
+ lowerer.valueHelpers.set(key, name);
1485
+ const nextName = `${name}.next`;
1486
+ const nextT = funcOf([], DYN);
1487
+ const it = { id: "it.0", name: "it", type: cit.iterT, mutable: false, boxed: true };
1488
+ const r = { id: "res.0", name: "res", type: cit.resultT, mutable: false };
1489
+ const field = (f, t) => ({
1490
+ kind: "recordGet",
1491
+ obj: varRef(r.id, cit.resultT, loc),
1492
+ shapeId: cit.resultT.shapeId,
1493
+ field: f,
1494
+ type: t,
1495
+ loc,
1496
+ });
1497
+ const str = (value) => ({ kind: "strLit", value, type: STRING, loc });
1498
+ lowerer.liftedFns.push({
1499
+ name: nextName,
1500
+ params: [],
1501
+ returnType: DYN,
1502
+ captures: [{ localId: it.id, name: it.name, type: it.type }],
1503
+ locals: [it, r],
1504
+ body: [
1505
+ {
1506
+ kind: "varDecl",
1507
+ localId: r.id,
1508
+ init: classIteratorNextCall(lowerer, cit, varRef(it.id, cit.iterT, loc), loc),
1509
+ loc,
1510
+ },
1511
+ {
1512
+ kind: "return",
1513
+ value: {
1514
+ kind: "dynObjLit",
1515
+ fields: [
1516
+ {
1517
+ key: str("value"),
1518
+ value: lowerer.coerceToExpected(field("value", cit.valueT), DYN),
1519
+ },
1520
+ {
1521
+ key: str("done"),
1522
+ value: {
1523
+ kind: "dynFrom",
1524
+ value: cit.hasDone ? field("done", BOOL) : boolLit(false, loc),
1525
+ type: DYN,
1526
+ loc,
1527
+ },
1528
+ },
1529
+ ],
1530
+ type: DYN,
1531
+ loc,
1532
+ },
1533
+ loc,
1534
+ },
1535
+ ],
1536
+ loc,
1537
+ });
1538
+ lowerer.liftedFns.push({
1539
+ name,
1540
+ params: [{ localId: it.id, name: it.name, type: it.type }],
1541
+ returnType: DYN,
1542
+ locals: [it],
1543
+ body: [
1544
+ {
1545
+ kind: "return",
1546
+ value: {
1547
+ kind: "dynObjLit",
1548
+ fields: [
1549
+ {
1550
+ key: str("next"),
1551
+ value: {
1552
+ kind: "dynFrom",
1553
+ value: { kind: "closure", fnName: nextName, captures: [it.id], type: nextT, loc },
1554
+ type: DYN,
1555
+ loc,
1556
+ },
1557
+ },
1558
+ ],
1559
+ type: DYN,
1560
+ loc,
1561
+ },
1562
+ loc,
1563
+ },
1564
+ ],
1565
+ loc,
1566
+ });
1567
+ }
1568
+ return { kind: "call", callee: name, args: [iter], type: DYN, loc };
1569
+ }
1570
+ /** A class's zero-parameter `[Symbol.asyncIterator]()` (checked first, as
1571
+ * from.js does) or `[Symbol.iterator]()` method that returns a generator,
1572
+ * with its method slot. */
1573
+ function classGeneratorMethodOf(lowerer, t) {
1574
+ const info = lowerer.classes.get(t.className);
1575
+ if (!info)
1576
+ return null;
1577
+ for (const method of ["sym:asyncIterator", "sym:iterator"]) {
1578
+ const m = lowerer.findMethodOn(info, method);
1579
+ if (!m)
1580
+ continue;
1581
+ const ret = m.sig.ret;
1582
+ if (m.sig.abstract === true || m.sig.params.length !== 0 || ret.kind !== "generator")
1583
+ return null;
1584
+ return { method, gen: ret };
1585
+ }
1586
+ return null;
1587
+ }
1588
+ function classAsyncIteratorOf(lowerer, t) {
1589
+ const info = lowerer.classes.get(t.className);
1590
+ const open = info ? lowerer.findMethodOn(info, "sym:asyncIterator") : null;
1591
+ if (!open || open.sig.abstract === true || open.sig.params.length !== 0)
1592
+ return null;
1593
+ const iterT = open.sig.ret;
1594
+ if (iterT.kind !== "object")
1595
+ return null;
1596
+ const itInfo = lowerer.classes.get(iterT.className);
1597
+ if (!itInfo || lowerer.findMethodOn(itInfo, "throw"))
1598
+ return null;
1599
+ const record = (name) => {
1600
+ const m = lowerer.findMethodOn(itInfo, name);
1601
+ if (!m || m.sig.abstract === true || m.sig.params.length !== 0)
1602
+ return null;
1603
+ const ret = m.sig.ret;
1604
+ return ret.kind === "promise" && ret.inner.kind === "record" ? ret.inner : null;
1605
+ };
1606
+ const resultT = record("next");
1607
+ if (!resultT)
1608
+ return null;
1609
+ const shape = lowerer.shapes.get(resultT.shapeId);
1610
+ const value = shape?.fields.find((f) => f.name === "value");
1611
+ const done = shape?.fields.find((f) => f.name === "done");
1612
+ if (!value || (done && done.type.kind !== "bool"))
1613
+ return null;
1614
+ const hasReturn = lowerer.findMethodOn(itInfo, "return") !== null;
1615
+ if (hasReturn && !record("return"))
1616
+ return null;
1617
+ return { className: t.className, iterT, resultT, valueT: value.type, hasReturn };
1618
+ }
1619
+ /** The checked-dynamic iterator object over an async class iterable:
1620
+ * `recv[Symbol.asyncIterator]()` runs when the stream is built, and the
1621
+ * object's `next` (and `return`, when the class declares one) answer the
1622
+ * iterator's own promises boxed. */
1623
+ function classAsyncIteratorObject(lowerer, cit, recv, loc) {
1624
+ const key = `streamFromAsyncIter:${cit.className}`;
1625
+ let name = lowerer.valueHelpers.get(key);
1626
+ if (!name) {
1627
+ name = `%stream.fromAsyncIter.${lowerer.valueHelpers.size}`;
1628
+ lowerer.valueHelpers.set(key, name);
1629
+ const it = { id: "it.0", name: "it", type: cit.iterT, mutable: false, boxed: true };
1630
+ const src = {
1631
+ id: "src.0",
1632
+ name: "src",
1633
+ type: { kind: "object", className: cit.className },
1634
+ mutable: false,
1635
+ };
1636
+ const str = (value) => ({ kind: "strLit", value, type: STRING, loc });
1637
+ const method = (m) => {
1638
+ const fnName = `${name}.${m}`;
1639
+ const call = accessorCall(lowerer, cit.iterT.className, m, varRef(it.id, cit.iterT, loc), [], { kind: "promise", inner: cit.resultT }, loc);
1640
+ lowerer.liftedFns.push({
1641
+ name: fnName,
1642
+ params: [],
1643
+ returnType: DYN,
1644
+ captures: [{ localId: it.id, name: it.name, type: it.type }],
1645
+ locals: [it],
1646
+ body: [{ kind: "return", value: { kind: "dynFrom", value: call, type: DYN, loc }, loc }],
1647
+ loc,
1648
+ });
1649
+ return {
1650
+ key: str(m),
1651
+ value: {
1652
+ kind: "dynFrom",
1653
+ value: { kind: "closure", fnName, captures: [it.id], type: funcOf([], DYN), loc },
1654
+ type: DYN,
1655
+ loc,
1656
+ },
1657
+ };
1658
+ };
1659
+ const fields = [method("next"), ...(cit.hasReturn ? [method("return")] : [])];
1660
+ lowerer.liftedFns.push({
1661
+ name,
1662
+ params: [{ localId: src.id, name: src.name, type: src.type }],
1663
+ returnType: DYN,
1664
+ locals: [src, it],
1665
+ body: [
1666
+ {
1667
+ kind: "varDecl",
1668
+ localId: it.id,
1669
+ init: accessorCall(lowerer, cit.className, "sym:asyncIterator", varRef(src.id, src.type, loc), [], cit.iterT, loc),
1670
+ loc,
1671
+ },
1672
+ { kind: "return", value: { kind: "dynObjLit", fields, type: DYN, loc }, loc },
1673
+ ],
1674
+ loc,
1675
+ });
1676
+ }
1677
+ return { kind: "call", callee: name, args: [recv], type: DYN, loc };
1678
+ }
1366
1679
  /** Readable.from's typed options: an object literal of `objectMode`
1367
1680
  * (a boolean literal) and `highWaterMark` (a number), as SCR_FROM_* flag
1368
1681
  * bits and the hwm expression; null for any other shape. */
@@ -1371,7 +1684,7 @@ function fromOptions(lowerer, node) {
1371
1684
  return null;
1372
1685
  let flags = 0;
1373
1686
  let hwm = null;
1374
- for (const prop of node.properties) {
1687
+ for (const prop of node.properties.nodes) {
1375
1688
  if (!ts.isPropertyAssignment(prop) ||
1376
1689
  !(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
1377
1690
  return null;
@@ -1429,7 +1742,30 @@ const PIPELINE_STAGE_EXPECTED = "of type function or an instance of Blob, Readab
1429
1742
  * { readable, writable } pairs — those shapes fence instead of throwing
1430
1743
  * a ladder Node never throws. */
1431
1744
  function lowerStreamArg(lowerer, node, what) {
1432
- const v = lowerer.lowerExpr(node);
1745
+ const lowered = lowerer.lowerExpr(node);
1746
+ // A Hash or Hmac stage is its Transform; pipeline and compose stages
1747
+ // keep the value alive until the stream settles.
1748
+ const v = isHashValueType(lowered.type)
1749
+ ? hashStreamOf(lowered, what === "pipeline" || what === "compose")
1750
+ : lowered;
1751
+ // A checked-dynamic pipeline stage (an untyped source or destination):
1752
+ // a boxed native stream unwraps at run time; other values (iterables,
1753
+ // functions) throw the not-supported Error there.
1754
+ if (v.type.kind === "dyn" && what === "pipeline") {
1755
+ noteUntypedStreamFlow(lowerer, null);
1756
+ return {
1757
+ kind: "libCall",
1758
+ fn: "stream.unboxDyn",
1759
+ args: [
1760
+ v,
1761
+ strLit(lowerer.dynNodeStreams
1762
+ ? "pipeline stages other than native streams (JavaScript stream objects, iterables, generators, plain functions, and { readable, writable } pairs) are not supported yet"
1763
+ : "pipeline stages other than native streams (iterables, generators, plain functions, and { readable, writable } pairs) are not supported yet", locOf(node)),
1764
+ ],
1765
+ type: { kind: "object", className: "%Duplex" },
1766
+ loc: locOf(node),
1767
+ };
1768
+ }
1433
1769
  const info = v.type.kind === "object" ? lowerer.classes.get(v.type.className) : undefined;
1434
1770
  if (!streamSidesOf(lowerer, info)) {
1435
1771
  // A provably-non-stream value in a JS source (the invalid-input
@@ -1448,7 +1784,7 @@ function lowerStreamArg(lowerer, node, what) {
1448
1784
  loc: locOf(node),
1449
1785
  });
1450
1786
  };
1451
- if (isJsSourceFile(node.getSourceFile()) && lowerer.dynConvertible(v.type)) {
1787
+ if (isJsSourceFile(ts.getSourceFileOfNode(node)) && lowerer.dynConvertible(v.type)) {
1452
1788
  if (what === "pipeline") {
1453
1789
  // Strings and arrays are iterables — VALID pipeline stages in
1454
1790
  // Node — and a record carrying a readable/writable member may be
@@ -1463,7 +1799,7 @@ function lowerStreamArg(lowerer, node, what) {
1463
1799
  argTypeThrow("body", PIPELINE_STAGE_EXPECTED);
1464
1800
  }
1465
1801
  }
1466
- else if ((ts.isObjectLiteralExpression(node) && node.properties.length === 0) ||
1802
+ else if ((ts.isObjectLiteralExpression(node) && node.properties.nodes.length === 0) ||
1467
1803
  v.type.kind === "record" ||
1468
1804
  v.type.kind === "string" ||
1469
1805
  v.type.kind === "f64" ||
@@ -1569,7 +1905,7 @@ function eosOptions(lowerer, node, promiseForm) {
1569
1905
  return false;
1570
1906
  lowerer.noLowering(`the finished option '${key}' with a non-literal value`, p.initializer, "pass true or false");
1571
1907
  };
1572
- for (const p of node.properties) {
1908
+ for (const p of node.properties.nodes) {
1573
1909
  const key = (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) && ts.isIdentifier(p.name)
1574
1910
  ? p.name.text
1575
1911
  : null;
@@ -1603,7 +1939,7 @@ function eosOptions(lowerer, node, promiseForm) {
1603
1939
  * any expression, end as a boolean literal. */
1604
1940
  function pipelineOptions(lowerer, node) {
1605
1941
  const out = { end: true, signal: null };
1606
- for (const p of node.properties) {
1942
+ for (const p of node.properties.nodes) {
1607
1943
  const key = (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) && ts.isIdentifier(p.name)
1608
1944
  ? p.name.text
1609
1945
  : null;
@@ -1632,7 +1968,7 @@ function pipelineOptions(lowerer, node) {
1632
1968
  * does not own — the caller's module-qualified fence speaks. */
1633
1969
  export function lowerStreamModuleCall(lowerer, call, bi, loc) {
1634
1970
  if (bi.module === "stream/promises") {
1635
- const args = call.arguments;
1971
+ const args = call.arguments.nodes;
1636
1972
  // finished(stream) → a pending void promise the terminal watcher
1637
1973
  // settles (rejected with the stream's error, or
1638
1974
  // ERR_STREAM_PREMATURE_CLOSE — the callback form's status, boxed
@@ -1733,7 +2069,7 @@ export function lowerStreamModuleCall(lowerer, call, bi, loc) {
1733
2069
  return null;
1734
2070
  }
1735
2071
  if (bi.module === "stream/consumers") {
1736
- const args = call.arguments;
2072
+ const args = call.arguments.nodes;
1737
2073
  // text/json/buffer/arrayBuffer(stream) → a pending promise the
1738
2074
  // accumulate-and-settle machinery resolves at the terminal point (the
1739
2075
  // utf8 decode / the parsed JSON dyn tree / the concatenated bytes / an
@@ -1774,7 +2110,7 @@ export function lowerStreamModuleCall(lowerer, call, bi, loc) {
1774
2110
  }
1775
2111
  if (bi.module !== "stream")
1776
2112
  return null;
1777
- const args = call.arguments;
2113
+ const args = call.arguments.nodes;
1778
2114
  if (bi.member === "getDefaultHighWaterMark") {
1779
2115
  // Node 24: 65536 bytes / 16 objects — compile-time literals only.
1780
2116
  // The byte default is platform-split at Node's source
@@ -1946,7 +2282,7 @@ function lowerPipelineStages(lowerer, stageArgs, loc) {
1946
2282
  for (let i = first; i < end; i++) {
1947
2283
  const fn = stageArgs[i];
1948
2284
  const isLast = destFn && i === end - 1;
1949
- const isAsync = (fn.modifiers ?? []).some((m) => m.kind === ts.SyntaxKind.AsyncKeyword);
2285
+ const isAsync = (fn.modifiers?.nodes ?? []).some((m) => m.kind === ts.SyntaxKind.AsyncKeyword);
1950
2286
  const isGen = ts.isFunctionExpression(fn) && fn.asteriskToken !== undefined;
1951
2287
  if (isLast && isGen) {
1952
2288
  // pipeline() pumps it into an object-mode PassThrough, whose
@@ -1961,14 +2297,14 @@ function lowerPipelineStages(lowerer, stageArgs, loc) {
1961
2297
  : "pipeline stages that are not async generator functions", fn, "write the stage as async function* (source) { for await (const chunk of source) ... }");
1962
2298
  }
1963
2299
  const optionsAt = srcT === null ? 0 : 1;
1964
- if (fn.parameters.length > optionsAt + 1) {
1965
- lowerer.noLowering("pipeline stages with parameters after the options argument", fn.parameters[optionsAt + 1], "a stage takes the source and { signal }");
2300
+ if (fn.parameters.nodes.length > optionsAt + 1) {
2301
+ lowerer.noLowering("pipeline stages with parameters after the options argument", fn.parameters.nodes[optionsAt + 1], "a stage takes the source and { signal }");
1966
2302
  }
1967
2303
  const lowered = lowerStageFunction(lowerer, fn, srcT);
1968
2304
  const params = lowered.closure.type.kind === "func" ? lowered.closure.type.params : [];
1969
2305
  if (params.length > optionsAt) {
1970
2306
  if (params[optionsAt].kind !== "dyn") {
1971
- lowerer.noLowering("a pipeline stage's options argument with this type", fn.parameters[optionsAt], "type it as { signal: AbortSignal }");
2307
+ lowerer.noLowering("a pipeline stage's options argument with this type", fn.parameters.nodes[optionsAt], "type it as { signal: AbortSignal }");
1972
2308
  }
1973
2309
  mask |= 1 << (i - first);
1974
2310
  }
@@ -2151,7 +2487,7 @@ function pipelineAbortHelper(lowerer, ac, loc) {
2151
2487
  * `for await` loops. Answers the closure and what it returns: an async
2152
2488
  * generator, or a promise for a destination async function. */
2153
2489
  function lowerStageFunction(lowerer, fn, srcT) {
2154
- const param = srcT === null ? undefined : fn.parameters[0];
2490
+ const param = srcT === null ? undefined : fn.parameters.nodes[0];
2155
2491
  const symbol = param && ts.isIdentifier(param.name)
2156
2492
  ? lowerer.checker.getSymbolAtLocation(param.name)
2157
2493
  : undefined;
@@ -2196,7 +2532,7 @@ function lowerStageFunction(lowerer, fn, srcT) {
2196
2532
  * the wrong position, a single Readable or Writable (Duplex.from wraps
2197
2533
  * those), and functions, iterables or web streams have no lowering. */
2198
2534
  function lowerStreamCompose(lowerer, call, loc) {
2199
- const args = call.arguments;
2535
+ const args = call.arguments.nodes;
2200
2536
  const duplex = { kind: "object", className: "%Duplex" };
2201
2537
  if (args.some((a) => ts.isSpreadElement(a))) {
2202
2538
  lowerer.noLowering("compose with spread arguments", call, "pass the streams directly");
@@ -2260,14 +2596,14 @@ function lowerOperatorCallback(lowerer, node, member, maxParams) {
2260
2596
  const loc = locOf(node);
2261
2597
  const optionsParam = (at) => lowerer.noLowering(`${member} callbacks that declare the options argument`, at, "the { signal } argument has no lowering — take only the chunk");
2262
2598
  if ((ts.isArrowFunction(node) || ts.isFunctionExpression(node)) &&
2263
- node.parameters.length > maxParams) {
2264
- optionsParam(node.parameters[maxParams]);
2599
+ node.parameters.nodes.length > maxParams) {
2600
+ optionsParam(node.parameters.nodes[maxParams]);
2265
2601
  }
2266
2602
  const v = lowerer.lowerExpr(node);
2267
2603
  if (v.type.kind === "dyn")
2268
2604
  return v;
2269
2605
  if (v.type.kind !== "func" &&
2270
- isJsSourceFile(node.getSourceFile()) &&
2606
+ isJsSourceFile(ts.getSourceFileOfNode(node)) &&
2271
2607
  lowerer.dynConvertible(v.type)) {
2272
2608
  // JavaScript passes any value; Node's validateFunction throws.
2273
2609
  return { kind: "dynFrom", value: v, type: DYN, loc };
@@ -2317,7 +2653,7 @@ function lowerOperatorValue(lowerer, node, what, loc, literalObject) {
2317
2653
  }
2318
2654
  function lowerStreamOperator(lowerer, call, access, member) {
2319
2655
  const loc = locOf(call);
2320
- const args = call.arguments;
2656
+ const args = call.arguments.nodes;
2321
2657
  const recv = lowerer.lowerExpr(access.expression);
2322
2658
  const readable = { kind: "object", className: "%Readable" };
2323
2659
  const opts = (i) => lowerOperatorValue(lowerer, args[i], `${member} options`, loc, true);
@@ -2420,6 +2756,226 @@ function checkUtf8Encoding(lowerer, member, arg) {
2420
2756
  }
2421
2757
  /** `recv.<member>(...)` over a stream-rooted receiver. Returns null only
2422
2758
  * for members this spoke does not own. */
2759
+ /** pipe()'s `{ end }` option: true when absent. */
2760
+ function pipeEndOption(lowerer, options, loc) {
2761
+ let end = boolLit(true, loc);
2762
+ if (options === undefined)
2763
+ return end;
2764
+ if (!ts.isObjectLiteralExpression(options)) {
2765
+ lowerer.noLowering("pipe with a non-literal options argument", options, "{ end: <bool> } inline is the supported form");
2766
+ }
2767
+ for (const prop of options.properties.nodes) {
2768
+ if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name) || prop.name.text !== "end") {
2769
+ lowerer.noLowering("a pipe option other than 'end'", prop);
2770
+ }
2771
+ end = lowerer.lowerExprExpecting(prop.initializer, BOOL);
2772
+ }
2773
+ return end;
2774
+ }
2775
+ /** `readable.pipe(process.stdout)`: the process stream joins the pipe as
2776
+ * an fd-backed Writable (stream.stdioWritable), and — like Node, which
2777
+ * never ends process.stdout or process.stderr from a pipe — the source's
2778
+ * end does not end it. pipe() answers the process stream itself. */
2779
+ function pipeIntoStdio(lowerer, call, access, target) {
2780
+ const loc = locOf(call);
2781
+ // JS order: the receiver, then the destination, then the options.
2782
+ const receiverValue = lowerer.lowerExpr(access.expression);
2783
+ const source = lowerer.declareHiddenLocal("%pipeSource", receiverValue.type);
2784
+ const stdio = lowerer.declareHiddenLocal("%pipeStdio", target.type);
2785
+ const options = call.arguments.nodes[1];
2786
+ const stmts = [
2787
+ { kind: "varDecl", localId: source.id, init: receiverValue, loc },
2788
+ { kind: "varDecl", localId: stdio.id, init: target, loc },
2789
+ ];
2790
+ // The options literal still evaluates; its end flag has no effect here.
2791
+ if (options !== undefined) {
2792
+ stmts.push({ kind: "exprStmt", expr: pipeEndOption(lowerer, options, loc), loc });
2793
+ }
2794
+ const receiver = { kind: "varRef", localId: source.id, type: receiverValue.type, loc };
2795
+ const writable = { kind: "object", className: "%Writable" };
2796
+ stmts.push({
2797
+ kind: "exprStmt",
2798
+ expr: {
2799
+ kind: "libCall",
2800
+ fn: "readable.pipe",
2801
+ args: [
2802
+ receiver,
2803
+ {
2804
+ kind: "libCall",
2805
+ fn: "stream.stdioWritable",
2806
+ args: [{ kind: "varRef", localId: stdio.id, type: target.type, loc }],
2807
+ type: writable,
2808
+ loc,
2809
+ },
2810
+ boolLit(false, loc),
2811
+ ],
2812
+ type: writable,
2813
+ loc,
2814
+ },
2815
+ loc,
2816
+ });
2817
+ return {
2818
+ kind: "seqExpr",
2819
+ stmts,
2820
+ result: { kind: "varRef", localId: stdio.id, type: target.type, loc },
2821
+ type: target.type,
2822
+ loc,
2823
+ };
2824
+ }
2825
+ /** `readable.unpipe(untyped)`: a native destination (boxed) unpipes as a
2826
+ * typed one does; any other value unpipes the JavaScript destination a
2827
+ * pipe into it registered (scr_stream_dyn.c), or does nothing when there
2828
+ * is none, as Node's unpipe does for a destination it is not piped into.
2829
+ * The call answers the source. */
2830
+ function unpipeDyn(lowerer, receiver, dst, loc) {
2831
+ noteUntypedStreamFlow(lowerer, null);
2832
+ const source = lowerer.declareHiddenLocal("%unpipeSource", receiver.type);
2833
+ const destination = lowerer.declareHiddenLocal("%unpipeDestination", dst.type);
2834
+ const sourceRef = varRef(source.id, receiver.type, loc);
2835
+ const destinationRef = varRef(destination.id, dst.type, loc);
2836
+ const stmts = [
2837
+ { kind: "varDecl", localId: source.id, init: receiver, loc },
2838
+ { kind: "varDecl", localId: destination.id, init: dst, loc },
2839
+ ];
2840
+ const unpipeNative = (native) => ({
2841
+ kind: "exprStmt",
2842
+ expr: {
2843
+ kind: "libCall",
2844
+ fn: "readable.unpipe",
2845
+ args: [sourceRef, native],
2846
+ type: receiver.type,
2847
+ loc,
2848
+ },
2849
+ loc,
2850
+ });
2851
+ if (lowerer.dynNodeStreams) {
2852
+ stmts.push(dynNativeBranch(lowerer, destinationRef, "w", unpipeNative, {
2853
+ kind: "exprStmt",
2854
+ expr: {
2855
+ kind: "libCall",
2856
+ fn: "stream.unpipeDyn",
2857
+ args: [sourceRef, destinationRef],
2858
+ type: VOID,
2859
+ loc,
2860
+ },
2861
+ loc,
2862
+ }));
2863
+ }
2864
+ else {
2865
+ stmts.push(unpipeNative({
2866
+ kind: "libCall",
2867
+ fn: "stream.unboxDyn",
2868
+ args: [
2869
+ destinationRef,
2870
+ strLit("unpipe destinations other than native streams are not supported yet", loc),
2871
+ ],
2872
+ type: { kind: "object", className: "%Duplex" },
2873
+ loc,
2874
+ }));
2875
+ }
2876
+ return { kind: "seqExpr", stmts, result: sourceRef, type: receiver.type, loc };
2877
+ }
2878
+ /** The pipe() libCall for a destination of type `dst`. Under the general
2879
+ * stream representation a Writable slot can hold the converted
2880
+ * process.stdout / process.stderr, which a pipe never ends (as in Node), so
2881
+ * the pipe takes readable.pipeGeneral, which checks for them. */
2882
+ function generalPipe(lowerer, dst) {
2883
+ return lowerer.generalNodeStreams && dst.kind === "object" && dst.className === "%Writable"
2884
+ ? "readable.pipeGeneral"
2885
+ : "readable.pipe";
2886
+ }
2887
+ /** `readable.pipe(untyped)`: a checked-dynamic destination unwraps a boxed
2888
+ * native stream at run time (stream.unboxDyn; other values throw the
2889
+ * not-supported Error), and pipe() answers the destination value itself. */
2890
+ function pipeIntoDyn(lowerer, call, access, target) {
2891
+ const loc = locOf(call);
2892
+ noteUntypedStreamFlow(lowerer, null);
2893
+ const receiverValue = lowerer.lowerExpr(access.expression);
2894
+ const source = lowerer.declareHiddenLocal("%pipeSource", receiverValue.type);
2895
+ const destination = lowerer.declareHiddenLocal("%pipeDestination", target.type);
2896
+ const stmts = [
2897
+ { kind: "varDecl", localId: source.id, init: receiverValue, loc },
2898
+ { kind: "varDecl", localId: destination.id, init: target, loc },
2899
+ ];
2900
+ const end = pipeEndOption(lowerer, call.arguments.nodes[1], loc);
2901
+ const duplex = { kind: "object", className: "%Duplex" };
2902
+ // Checked-dynamic stream slots (dyn-streams.ts): a JavaScript stream
2903
+ // object is a destination too, piped with Node's listener protocol.
2904
+ if (lowerer.dynNodeStreams) {
2905
+ const sourceRef = { kind: "varRef", localId: source.id, type: receiverValue.type, loc };
2906
+ const destinationRef = {
2907
+ kind: "varRef",
2908
+ localId: destination.id,
2909
+ type: target.type,
2910
+ loc,
2911
+ };
2912
+ const ending = lowerer.declareHiddenLocal("%pipeEnd", BOOL);
2913
+ stmts.push({ kind: "varDecl", localId: ending.id, init: end, loc });
2914
+ const endRef = { kind: "varRef", localId: ending.id, type: BOOL, loc };
2915
+ stmts.push(dynNativeBranch(lowerer, destinationRef, "w", (native) => ({
2916
+ kind: "exprStmt",
2917
+ expr: {
2918
+ kind: "libCall",
2919
+ // Checked-dynamic slots come with the general representation,
2920
+ // where a boxed native destination can be the converted
2921
+ // process.stdout (generalPipe).
2922
+ fn: "readable.pipeGeneral",
2923
+ args: [sourceRef, native, endRef],
2924
+ type: native.type,
2925
+ loc,
2926
+ },
2927
+ loc,
2928
+ }), {
2929
+ kind: "exprStmt",
2930
+ expr: {
2931
+ kind: "libCall",
2932
+ fn: "stream.pipeDyn",
2933
+ args: [sourceRef, lowerer.coerceToExpected(sourceRef, DYN), destinationRef, endRef],
2934
+ type: VOID,
2935
+ loc,
2936
+ },
2937
+ loc,
2938
+ }));
2939
+ return {
2940
+ kind: "seqExpr",
2941
+ stmts,
2942
+ result: destinationRef,
2943
+ type: target.type,
2944
+ loc,
2945
+ };
2946
+ }
2947
+ stmts.push({
2948
+ kind: "exprStmt",
2949
+ expr: {
2950
+ kind: "libCall",
2951
+ fn: lowerer.generalNodeStreams ? "readable.pipeGeneral" : "readable.pipe",
2952
+ args: [
2953
+ { kind: "varRef", localId: source.id, type: receiverValue.type, loc },
2954
+ {
2955
+ kind: "libCall",
2956
+ fn: "stream.unboxDyn",
2957
+ args: [
2958
+ { kind: "varRef", localId: destination.id, type: target.type, loc },
2959
+ strLit("pipe destinations other than native streams are not supported yet", loc),
2960
+ ],
2961
+ type: duplex,
2962
+ loc,
2963
+ },
2964
+ end,
2965
+ ],
2966
+ type: duplex,
2967
+ loc,
2968
+ },
2969
+ loc,
2970
+ });
2971
+ return {
2972
+ kind: "seqExpr",
2973
+ stmts,
2974
+ result: { kind: "varRef", localId: destination.id, type: target.type, loc },
2975
+ type: target.type,
2976
+ loc,
2977
+ };
2978
+ }
2423
2979
  export function lowerStreamMethodCall(lowerer, call, access, info) {
2424
2980
  const member = access.name.text;
2425
2981
  if (STREAM_OPERATORS.has(member)) {
@@ -2433,7 +2989,7 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
2433
2989
  if (!sides)
2434
2990
  return null;
2435
2991
  const loc = locOf(call);
2436
- const args = call.arguments;
2992
+ const args = call.arguments.nodes;
2437
2993
  const readableSide = sides === "r" || sides === "rw";
2438
2994
  const writableSide = sides === "w" || sides === "rw";
2439
2995
  const cls = info.def.name.slice(1);
@@ -2604,30 +3160,57 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
2604
3160
  if (args.length === 0 || args.length > 2) {
2605
3161
  lowerer.noLowering(`pipe with ${args.length} arguments`, call, "the supported forms are (destination) and (destination, { end })");
2606
3162
  }
2607
- const dst = lowerer.lowerExpr(args[0]);
3163
+ // A Hash or Hmac destination pipes into its Transform, and pipe()
3164
+ // answers the Hash itself (the receiver evaluates first, as in JS).
3165
+ if (isHashValueType(lowerer.mapTypeOf(lowerer.typeOf(args[0])))) {
3166
+ const receiverValue = lowerer.lowerExpr(access.expression);
3167
+ const source = lowerer.declareHiddenLocal("%pipeSource", receiverValue.type);
3168
+ const hashValue = lowerer.lowerExpr(args[0]);
3169
+ const hash = lowerer.declareHiddenLocal("%pipeHash", hashValue.type);
3170
+ const end = pipeEndOption(lowerer, args[1], loc);
3171
+ return {
3172
+ kind: "seqExpr",
3173
+ stmts: [
3174
+ { kind: "varDecl", localId: source.id, init: receiverValue, loc },
3175
+ { kind: "varDecl", localId: hash.id, init: hashValue, loc },
3176
+ {
3177
+ kind: "exprStmt",
3178
+ expr: {
3179
+ kind: "libCall",
3180
+ fn: "readable.pipe",
3181
+ args: [
3182
+ { kind: "varRef", localId: source.id, type: receiverValue.type, loc },
3183
+ hashStreamOf({ kind: "varRef", localId: hash.id, type: hashValue.type, loc }, true),
3184
+ end,
3185
+ ],
3186
+ type: { kind: "object", className: "%Transform" },
3187
+ loc,
3188
+ },
3189
+ loc,
3190
+ },
3191
+ ],
3192
+ result: { kind: "varRef", localId: hash.id, type: hashValue.type, loc },
3193
+ type: hashValue.type,
3194
+ loc,
3195
+ };
3196
+ }
3197
+ const target = lowerer.lowerExpr(args[0]);
3198
+ if (target.type.kind === "procStream")
3199
+ return pipeIntoStdio(lowerer, call, access, target);
3200
+ if (target.type.kind === "dyn")
3201
+ return pipeIntoDyn(lowerer, call, access, target);
3202
+ const dst = target;
2608
3203
  const dstInfo = dst.type.kind === "object" ? lowerer.classes.get(dst.type.className) : undefined;
2609
3204
  const dstSides = streamSidesOf(lowerer, dstInfo);
2610
3205
  if (dstSides !== "w" && dstSides !== "rw") {
2611
- lowerer.noLowering(`pipe into a '${lowerer.fmt(dst.type)}'`, args[0], "the destination must be a stream Writable/Duplex (process streams and sockets are not pipe destinations yet)");
2612
- }
2613
- let end = boolLit(true, loc);
2614
- if (args[1] !== undefined) {
2615
- if (!ts.isObjectLiteralExpression(args[1])) {
2616
- lowerer.noLowering("pipe with a non-literal options argument", args[1], "{ end: <bool> } inline is the supported form");
2617
- }
2618
- for (const prop of args[1].properties) {
2619
- if (!ts.isPropertyAssignment(prop) ||
2620
- !ts.isIdentifier(prop.name) ||
2621
- prop.name.text !== "end") {
2622
- lowerer.noLowering("a pipe option other than 'end'", prop);
2623
- }
2624
- end = lowerer.lowerExprExpecting(prop.initializer, BOOL);
2625
- }
3206
+ requestGeneralStreamSurface(lowerer, args[0]);
3207
+ lowerer.noLowering(`pipe into a '${lowerer.fmt(dst.type)}'`, args[0], "the destination must be a stream Writable/Duplex, process.stdout or process.stderr (sockets are not pipe destinations yet)");
2626
3208
  }
3209
+ const end = pipeEndOption(lowerer, args[1], loc);
2627
3210
  const receiver = lowerer.lowerExpr(access.expression);
2628
3211
  return {
2629
3212
  kind: "libCall",
2630
- fn: "readable.pipe",
3213
+ fn: generalPipe(lowerer, dst.type),
2631
3214
  args: [receiver, dst, end],
2632
3215
  type: dst.type,
2633
3216
  loc,
@@ -2640,6 +3223,8 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
2640
3223
  const receiver = lowerer.lowerExpr(access.expression);
2641
3224
  if (args[0] !== undefined) {
2642
3225
  const dst = lowerer.lowerExpr(args[0]);
3226
+ if (dst.type.kind === "dyn")
3227
+ return unpipeDyn(lowerer, receiver, dst, loc);
2643
3228
  const dstInfo = dst.type.kind === "object" ? lowerer.classes.get(dst.type.className) : undefined;
2644
3229
  const dstSides = streamSidesOf(lowerer, dstInfo);
2645
3230
  if (dstSides !== "w" && dstSides !== "rw") {
@@ -2653,6 +3238,44 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
2653
3238
  loc,
2654
3239
  };
2655
3240
  }
3241
+ // Checked-dynamic slots: unpipe() also unpipes the JavaScript
3242
+ // destinations stream.pipeDyn registered (stream.unpipeDyn with an
3243
+ // undefined destination), as Node's unpipe() empties every pipe.
3244
+ if (lowerer.dynNodeStreams) {
3245
+ const source = lowerer.declareHiddenLocal("%unpipeSource", receiver.type);
3246
+ const sourceRef = varRef(source.id, receiver.type, loc);
3247
+ return {
3248
+ kind: "seqExpr",
3249
+ stmts: [
3250
+ { kind: "varDecl", localId: source.id, init: receiver, loc },
3251
+ {
3252
+ kind: "exprStmt",
3253
+ expr: {
3254
+ kind: "libCall",
3255
+ fn: "readable.unpipe",
3256
+ args: [sourceRef],
3257
+ type: receiver.type,
3258
+ loc,
3259
+ },
3260
+ loc,
3261
+ },
3262
+ {
3263
+ kind: "exprStmt",
3264
+ expr: {
3265
+ kind: "libCall",
3266
+ fn: "stream.unpipeDyn",
3267
+ args: [sourceRef, dynUndefinedExpr(loc)],
3268
+ type: VOID,
3269
+ loc,
3270
+ },
3271
+ loc,
3272
+ },
3273
+ ],
3274
+ result: sourceRef,
3275
+ type: receiver.type,
3276
+ loc,
3277
+ };
3278
+ }
2656
3279
  return { kind: "libCall", fn: "readable.unpipe", args: [receiver], type: receiver.type, loc };
2657
3280
  }
2658
3281
  if (member === "destroy") {
@@ -2741,8 +3364,10 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
2741
3364
  : lowerer.lowerExprExpecting(args[0], STRING);
2742
3365
  const fn = kind === "bytes" ? "writable.write" : "writable.writeStr";
2743
3366
  if (cbArg !== undefined) {
2744
- const cb = lowerer.lowerExprExpecting(cbArg, funcOf([], VOID));
2745
- if (cb.type.kind !== "func" || cb.type.params.length > 0) {
3367
+ const cb = callbackDeclaresParameters(cbArg)
3368
+ ? null
3369
+ : lowerer.lowerExprExpecting(cbArg, funcOf([], VOID));
3370
+ if (cb === null || cb.type.kind !== "func" || cb.type.params.length > 0) {
2746
3371
  lowerer.noLowering("write completion callbacks taking the error argument", cbArg, "() => void callbacks are supported (listen for 'error' to observe failures)");
2747
3372
  }
2748
3373
  return { kind: "libCall", fn, args: [receiver, chunk, cb], type: BOOL, loc };
@@ -2802,8 +3427,10 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
2802
3427
  : lowerer.lowerExprExpecting(chunkNode, STRING));
2803
3428
  }
2804
3429
  if (cbArg !== undefined) {
2805
- const cb = lowerer.lowerExprExpecting(cbArg, funcOf([], VOID));
2806
- if (cb.type.kind !== "func" || cb.type.params.length > 0) {
3430
+ const cb = callbackDeclaresParameters(cbArg)
3431
+ ? null
3432
+ : lowerer.lowerExprExpecting(cbArg, funcOf([], VOID));
3433
+ if (cb === null || cb.type.kind !== "func" || cb.type.params.length > 0) {
2807
3434
  lowerer.noLowering("end callbacks with parameters", cbArg, "() => void callbacks are supported");
2808
3435
  }
2809
3436
  flags |= 4;
@@ -3037,4 +3664,16 @@ export function lowerStreamProperty(lowerer, expr, info) {
3037
3664
  }
3038
3665
  return null;
3039
3666
  }
3667
+ /** Whether an inline completion callback declares a parameter. Node calls
3668
+ * write and end callbacks with an error argument (null on success), but the
3669
+ * native callback receives none, so the parameter would read undefined
3670
+ * where Node passes null or the error. A function literal with parameters
3671
+ * would otherwise adapt to the zero-parameter slot silently. */
3672
+ function callbackDeclaresParameters(node) {
3673
+ let callback = node;
3674
+ while (ts.isParenthesizedExpression(callback))
3675
+ callback = callback.expression;
3676
+ return ((ts.isArrowFunction(callback) || ts.isFunctionExpression(callback)) &&
3677
+ callback.parameters.nodes.length > 0);
3678
+ }
3040
3679
  //# sourceMappingURL=lower-stream.js.map