@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
@@ -4,7 +4,7 @@ import { ladderFenceExpr } from "./lowerer.js";
4
4
  import { isJsSourceFile, locOf } from "../program.js";
5
5
  import { arrayOf, BOOL, BYTES_U8, canBoxFuncIntoDyn, canConvertToDyn, DYN, DYN_HANDLE_KINDS, F64, funcOf, HTTP2SESSION_T, HTTP2STREAM_T, HTTPCLIENTREQ_T, HTTPREQ_T, HTTPRES_T, NETSERVER_T, NETSOCKET_T, NULL_T, SECURECTX_T, STRING, UNDEFINED_T, typeKey, VOID, } from "../../ir/ir.js";
6
6
  import { AGENT_DOCUMENTED_OPTIONS, HTTPS_AGENT_DOCUMENTED_OPTIONS, builtinFenceHintOf, builtinModuleFnOf, fenceOrDropOptionKey, HTTP_CLIENT_DOCUMENTED_OPTIONS, HTTP_SERVER_DOCUMENTED_OPTIONS, HTTP2_SECURE_SERVER_DOCUMENTED_OPTIONS, HTTPS_CLIENT_DOCUMENTED_OPTIONS, sideEffectFreeOptionValue, TLS_SERVER_DOCUMENTED_OPTIONS, } from "./surfaces.js";
7
- import { conditionalSpreadOf } from "./expressions/object-literals.js";
7
+ import { conditionalSpreadOf, lowerDynObjectLiteral } from "./expressions/object-literals.js";
8
8
  import { resultIsDiscarded } from "./call-position.js";
9
9
  import { lowerCallbackArg as lowerCallbackArgShared } from "./callback-arg.js";
10
10
  import { pairsSnapshotHelper } from "./pairs-snapshot.js";
@@ -583,7 +583,7 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
583
583
  // budget pair) ride the generic path — null hands the dispatch back.
584
584
  if (builtinModuleFnOf(lowerer, "net", bi.member))
585
585
  return null;
586
- const args = expr.arguments;
586
+ const args = expr.arguments.nodes;
587
587
  if (bi.member === "createServer") {
588
588
  if (args.length === 0) {
589
589
  return { kind: "libCall", fn: "net.createServer", args: [], type: NETSERVER_T, loc };
@@ -594,7 +594,7 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
594
594
  // ERR_INVALID_ARG_TYPE on 'options' before any server exists. DYN
595
595
  // result — the checked-dynamic lane's concise arrows box it, and
596
596
  // the throw means it never materializes.
597
- if (isJsSourceFile(expr.getSourceFile())) {
597
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr))) {
598
598
  const t = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
599
599
  if (t !== null && (t.kind === "string" || t.kind === "f64" || t.kind === "bool")) {
600
600
  const raw = lowerer.lowerExpr(args[0]);
@@ -633,7 +633,7 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
633
633
  // invalid-input probes build theirs with computed keys): the
634
634
  // checked-dynamic walk validates Node-order and the compiler-rendered
635
635
  // fence is the post-validation tail.
636
- if (args.length === 1 && isJsSourceFile(expr.getSourceFile())) {
636
+ if (args.length === 1 && isJsSourceFile(ts.getSourceFileOfNode(expr))) {
637
637
  const t = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
638
638
  if (t !== null && (t.kind === "dyn" || t.kind === "record")) {
639
639
  const raw = lowerer.lowerExpr(args[0]);
@@ -722,9 +722,9 @@ function lookupFnShapeOk(lowerer, t) {
722
722
  * name; a connect listener argument is supported on the no-lookup form
723
723
  * only. */
724
724
  function lowerNetConnectOptions(lowerer, expr, member, loc) {
725
- const args = expr.arguments;
725
+ const args = expr.arguments.nodes;
726
726
  const optsNode = args[0];
727
- const isJs = isJsSourceFile(expr.getSourceFile());
727
+ const isJs = isJsSourceFile(ts.getSourceFileOfNode(expr));
728
728
  // The checked-dynamic option-bag route (JS sources): a literal with
729
729
  // computed keys (the invalid-input probes' spelling) or an objectMode-
730
730
  // trio member rides WHOLE to the runtime walk — Node's Socket-ctor
@@ -732,7 +732,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
732
732
  // port/host/autoSelectFamily), with the compiler-rendered fence as the
733
733
  // post-validation tail.
734
734
  if (isJs) {
735
- const needsBag = optsNode.properties.some((p) => (!ts.isPropertyAssignment(p) && !ts.isShorthandPropertyAssignment(p)) ||
735
+ const needsBag = optsNode.properties.nodes.some((p) => (!ts.isPropertyAssignment(p) && !ts.isShorthandPropertyAssignment(p)) ||
736
736
  (ts.isPropertyAssignment(p) && ts.isComputedPropertyName(p.name)) ||
737
737
  ["objectMode", "readableObjectMode", "writableObjectMode"].includes((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
738
738
  (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))
@@ -772,7 +772,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
772
772
  type: NETSOCKET_T,
773
773
  loc,
774
774
  });
775
- for (const prop of optsNode.properties) {
775
+ for (const prop of optsNode.properties.nodes) {
776
776
  let initializer;
777
777
  if (ts.isPropertyAssignment(prop) &&
778
778
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -916,8 +916,8 @@ function lowerServerCloseBind(lowerer, call, access) {
916
916
  return null;
917
917
  const loc = locOf(call);
918
918
  const recvNode = closeAccess.expression;
919
- const thisArg = call.arguments[0];
920
- if (call.arguments.length !== 1 ||
919
+ const thisArg = call.arguments.nodes[0];
920
+ if (call.arguments.nodes.length !== 1 ||
921
921
  !thisArg ||
922
922
  !ts.isIdentifier(recvNode) ||
923
923
  !ts.isIdentifier(thisArg) ||
@@ -1083,7 +1083,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1083
1083
  return null;
1084
1084
  const name = access.name.text;
1085
1085
  const loc = locOf(call);
1086
- const args = call.arguments;
1086
+ const args = call.arguments.nodes;
1087
1087
  if (name === "getConnections") {
1088
1088
  // cb(null, count) on the next tick; answers the server.
1089
1089
  if (args.length !== 1) {
@@ -1155,7 +1155,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1155
1155
  let host = null;
1156
1156
  let v6only = null;
1157
1157
  let reusePort = null;
1158
- for (const prop of args[0].properties) {
1158
+ for (const prop of args[0].properties.nodes) {
1159
1159
  let initializer;
1160
1160
  if (ts.isPropertyAssignment(prop) &&
1161
1161
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -1213,7 +1213,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1213
1213
  }
1214
1214
  else if (key === "signal" &&
1215
1215
  ts.isPropertyAssignment(prop) &&
1216
- isJsSourceFile(call.getSourceFile())) {
1216
+ isJsSourceFile(ts.getSourceFileOfNode(call))) {
1217
1217
  // A provably-non-AbortSignal signal (the invalid-input probes:
1218
1218
  // strings, numbers, plain records) throws Node's
1219
1219
  // validateAbortSignal ladder; plausible signal values keep the
@@ -1287,6 +1287,18 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1287
1287
  ? [receiver, port, host, v6only, cbV]
1288
1288
  : [receiver, port, host, v6only, reusePort, cbV]);
1289
1289
  }
1290
+ // listen(path[, cb]): a string first argument names a Unix socket
1291
+ // (the runtime takes a numeric string as a port, Node's isPipeName).
1292
+ if (lowerer.mapTypeOf(lowerer.typeOf(args[0]))?.kind === "string") {
1293
+ if (args.length > 2) {
1294
+ lowerer.noLowering(`listen(path) with ${args.length} arguments`, call, "the supported form is listen(path[, callback])");
1295
+ }
1296
+ const path = lowerer.lowerExprExpecting(args[0], STRING);
1297
+ if (args.length === 1)
1298
+ return listenResult("net.listenPath", [receiver, path]);
1299
+ const { cb } = lowerCallbackArg(lowerer, args[1], "listen callbacks", 0, () => false, "use ()", []);
1300
+ return listenResult("net.listenPathCb", [receiver, path, cb]);
1301
+ }
1290
1302
  const port = lowerer.lowerExprExpecting(args[0], F64);
1291
1303
  // The optional middle host — listen(port, '127.0.0.1'[, cb]): a
1292
1304
  // string-typed second argument is the bind address (the net.connect
@@ -1326,6 +1338,19 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1326
1338
  if (args.length === 0) {
1327
1339
  return { kind: "libCall", fn: "net.serverClose", args: [receiver], type: VOID, loc };
1328
1340
  }
1341
+ if (lowerer.checker
1342
+ .getCallSignatures(lowerer.typeOf(args[0]))
1343
+ .some((sig) => sig.getParameters().length > 0)) {
1344
+ // close((err) => ...): undefined once the server closes, or Node's
1345
+ // ERR_SERVER_NOT_RUNNING when it was not listening.
1346
+ return {
1347
+ kind: "libCall",
1348
+ fn: "net.serverCloseDyn",
1349
+ args: [receiver, lowerSocketDynListener(lowerer, args[0], "close callbacks")],
1350
+ type: VOID,
1351
+ loc,
1352
+ };
1353
+ }
1329
1354
  const { cb } = lowerCallbackArg(lowerer, args[0], "close callbacks", 0, () => false, "use ()", []);
1330
1355
  return { kind: "libCall", fn: "net.serverCloseCb", args: [receiver, cb], type: VOID, loc };
1331
1356
  }
@@ -1389,6 +1414,18 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1389
1414
  loc,
1390
1415
  };
1391
1416
  }
1417
+ if (event === "checkContinue" || event === "checkExpectation") {
1418
+ // Expect handling: these listeners take the request instead of
1419
+ // 'request' (checkContinue answers with res.writeContinue()).
1420
+ const cb = lowerRequestHandlerArg(lowerer, args[1]);
1421
+ return {
1422
+ kind: "libCall",
1423
+ fn: "http.serverOnCheck",
1424
+ args: [receiver, cb, once, boolLit(event === "checkExpectation", loc)],
1425
+ type: VOID,
1426
+ loc,
1427
+ };
1428
+ }
1392
1429
  if (event === "request") {
1393
1430
  // The 'request' event — http.createServer(handler)'s event twin, and
1394
1431
  // the way an http2 allowHTTP1 server (created handler-less) gets its
@@ -1522,7 +1559,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1522
1559
  loc,
1523
1560
  };
1524
1561
  }
1525
- lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"connection", "request", "drop", "stream", "session", "upgrade", "connect", "error", "close", "listening", and "sessionError" are the supported server events (as literals)');
1562
+ lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"connection", "request", "checkContinue", "checkExpectation", "drop", "stream", "session", "upgrade", "connect", "error", "close", "listening", and "sessionError" are the supported server events (as literals)');
1526
1563
  }
1527
1564
  if (name === "emit") {
1528
1565
  // The demux route: emit("connection", socket) hands an accepted
@@ -1571,6 +1608,32 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1571
1608
  const result = lowerer.mapTypeOf(lowerer.typeOf(call));
1572
1609
  if (result && isAddressInfoRecord(lowerer, result)) {
1573
1610
  const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
1611
+ if (unixListenReachable(lowerer)) {
1612
+ // A Unix-socket server's address() is its path, which this record
1613
+ // cannot hold: the check throws for one before the record reads.
1614
+ const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
1615
+ const server = () => varRef(local.id, NETSERVER_T, loc);
1616
+ return {
1617
+ kind: "seqExpr",
1618
+ stmts: [
1619
+ { kind: "varDecl", localId: local.id, init: receiver, loc },
1620
+ {
1621
+ kind: "exprStmt",
1622
+ expr: {
1623
+ kind: "libCall",
1624
+ fn: "net.serverAddressCheck",
1625
+ args: [server()],
1626
+ type: VOID,
1627
+ loc,
1628
+ },
1629
+ loc,
1630
+ },
1631
+ ],
1632
+ result: { kind: "libCall", fn: "net.serverAddress", args: [server()], type: result, loc },
1633
+ type: result,
1634
+ loc,
1635
+ };
1636
+ }
1574
1637
  return { kind: "libCall", fn: "net.serverAddress", args: [receiver], type: result, loc };
1575
1638
  }
1576
1639
  // @types/node's `string | AddressInfo | null`: the record while the
@@ -1586,20 +1649,50 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1586
1649
  const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
1587
1650
  const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
1588
1651
  const server = varRef(local.id, NETSERVER_T, loc);
1652
+ const recordArm = {
1653
+ kind: "unionWrap",
1654
+ unionId,
1655
+ tag: lowerer.armTag(unionId, record),
1656
+ value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
1657
+ type: result,
1658
+ loc,
1659
+ };
1660
+ const stringTag = lowerer.armTag(unionId, STRING);
1661
+ let listeningArm = recordArm;
1662
+ const stmts = [{ kind: "varDecl", localId: local.id, init: receiver, loc }];
1663
+ if (stringTag >= 0 && unixListenReachable(lowerer)) {
1664
+ // Node answers a Unix-socket server's address() with its path.
1665
+ const pathLocal = lowerer.declareHiddenLocal("%addressPath", STRING);
1666
+ const path = () => varRef(pathLocal.id, STRING, loc);
1667
+ stmts.push({
1668
+ kind: "varDecl",
1669
+ localId: pathLocal.id,
1670
+ init: { kind: "libCall", fn: "net.serverUnixPath", args: [server], type: STRING, loc },
1671
+ loc,
1672
+ });
1673
+ listeningArm = {
1674
+ kind: "ternary",
1675
+ cond: {
1676
+ kind: "strEq",
1677
+ negated: true,
1678
+ left: path(),
1679
+ right: strLit("", loc),
1680
+ type: BOOL,
1681
+ loc,
1682
+ },
1683
+ then: { kind: "unionWrap", unionId, tag: stringTag, value: path(), type: result, loc },
1684
+ else_: recordArm,
1685
+ type: result,
1686
+ loc,
1687
+ };
1688
+ }
1589
1689
  return {
1590
1690
  kind: "seqExpr",
1591
- stmts: [{ kind: "varDecl", localId: local.id, init: receiver, loc }],
1691
+ stmts,
1592
1692
  result: {
1593
1693
  kind: "ternary",
1594
1694
  cond: { kind: "libCall", fn: "net.serverListening", args: [server], type: BOOL, loc },
1595
- then: {
1596
- kind: "unionWrap",
1597
- unionId,
1598
- tag: lowerer.armTag(unionId, record),
1599
- value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
1600
- type: result,
1601
- loc,
1602
- },
1695
+ then: listeningArm,
1603
1696
  else_: {
1604
1697
  kind: "unionWrap",
1605
1698
  unionId,
@@ -1617,6 +1710,114 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1617
1710
  }
1618
1711
  lowerer.noLowering(`Server.${name}`, call, 'listen, close, address().port, emit("connection", socket), and on/once of connection/request/upgrade/error/close/listening/sessionError are the supported Server members', lowerer.checker.getSymbolAtLocation(access.name));
1619
1712
  }
1713
+ /** Whether a setEncoding call can reach some net.Socket in this program:
1714
+ * `x.setEncoding(...)` or `x["setEncoding"](...)` where `x` is a socket
1715
+ * or an untyped value. Sockets that never get an encoding keep the Buffer
1716
+ * chunk path; with one, Node's 'data' chunks are strings. */
1717
+ function socketEncodingReachable(lowerer) {
1718
+ if (lowerer.socketEncodingReachable !== null)
1719
+ return lowerer.socketEncodingReachable;
1720
+ let reachable = false;
1721
+ for (const file of lowerer.program.getSourceFiles()) {
1722
+ if (file.isDeclarationFile || !file.text.includes("setEncoding"))
1723
+ continue;
1724
+ ts.walkPreorder(file, (node) => {
1725
+ if (reachable)
1726
+ return "skip";
1727
+ if (!ts.isCallExpression(node))
1728
+ return undefined;
1729
+ const callee = node.expression;
1730
+ const receiver = ts.isPropertyAccessExpression(callee) && callee.name.text === "setEncoding"
1731
+ ? callee.expression
1732
+ : ts.isElementAccessExpression(callee) &&
1733
+ ts.isStringLiteralLike(callee.argumentExpression) &&
1734
+ callee.argumentExpression.text === "setEncoding"
1735
+ ? callee.expression
1736
+ : null;
1737
+ if (receiver === null)
1738
+ return undefined;
1739
+ const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(receiver))?.kind;
1740
+ if (kind === undefined || kind === "netSocket" || kind === "dyn")
1741
+ reachable = true;
1742
+ return undefined;
1743
+ });
1744
+ if (reachable)
1745
+ break;
1746
+ }
1747
+ lowerer.socketEncodingReachable = reachable;
1748
+ return reachable;
1749
+ }
1750
+ /** Whether some server in the program may listen on a Unix socket: a
1751
+ * `.listen(x, ...)` call on a server (or an untyped value) whose first
1752
+ * argument is string-typed. Only then does address() check for the socket
1753
+ * path, so other programs keep the record-only lowering. */
1754
+ function unixListenReachable(lowerer) {
1755
+ if (lowerer.unixListenReachable !== null)
1756
+ return lowerer.unixListenReachable;
1757
+ let reachable = false;
1758
+ for (const file of lowerer.program.getSourceFiles()) {
1759
+ if (file.isDeclarationFile || !file.text.includes("listen"))
1760
+ continue;
1761
+ ts.walkPreorder(file, (node) => {
1762
+ if (reachable)
1763
+ return "skip";
1764
+ if (!ts.isCallExpression(node) || node.arguments.nodes.length === 0)
1765
+ return undefined;
1766
+ const callee = node.expression;
1767
+ if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== "listen")
1768
+ return undefined;
1769
+ const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(callee.expression))?.kind;
1770
+ if (kind !== undefined && kind !== "netServer" && kind !== "dyn")
1771
+ return undefined;
1772
+ const arg = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(node.arguments.nodes[0]));
1773
+ // Only a string-typed argument lowers to listen(path) (an untyped
1774
+ // one checks into a port).
1775
+ if (arg?.kind === "string")
1776
+ reachable = true;
1777
+ return undefined;
1778
+ });
1779
+ if (reachable)
1780
+ break;
1781
+ }
1782
+ lowerer.unixListenReachable = reachable;
1783
+ return reachable;
1784
+ }
1785
+ /** An inline 'data' listener whose chunk parameter is typed Buffer, for a
1786
+ * socket that may have an encoding set: the chunk binds as a checked
1787
+ * dynamic value, so the body sees what Node passes (a string after
1788
+ * setEncoding, a Buffer otherwise) whatever the annotation says. Null
1789
+ * for other listener shapes. */
1790
+ function lowerEncodedDataListener(lowerer, node) {
1791
+ let fn = node;
1792
+ while (ts.isParenthesizedExpression(fn))
1793
+ fn = fn.expression;
1794
+ if (!ts.isArrowFunction(fn) && !ts.isFunctionExpression(fn))
1795
+ return null;
1796
+ if (fn.parameters.nodes.length !== 1)
1797
+ return null;
1798
+ const param = fn.parameters.nodes[0];
1799
+ if (!ts.isIdentifier(param.name) || param.initializer || param.dotDotDotToken)
1800
+ return null;
1801
+ const symbol = lowerer.checker.getSymbolAtLocation(param.name);
1802
+ if (symbol === undefined)
1803
+ return null;
1804
+ const previousBinding = lowerer.runtimeOptionalBindingTypes.get(symbol);
1805
+ const previousImplicit = lowerer.implicitParamTypes;
1806
+ const implicit = new Map(previousImplicit ?? []);
1807
+ implicit.set(symbol, lowerer.checker.getUnknownType());
1808
+ lowerer.runtimeOptionalBindingTypes.set(symbol, DYN);
1809
+ lowerer.implicitParamTypes = implicit;
1810
+ try {
1811
+ return lowerer.lowerExpr(fn);
1812
+ }
1813
+ finally {
1814
+ if (previousBinding === undefined)
1815
+ lowerer.runtimeOptionalBindingTypes.delete(symbol);
1816
+ else
1817
+ lowerer.runtimeOptionalBindingTypes.set(symbol, previousBinding);
1818
+ lowerer.implicitParamTypes = previousImplicit;
1819
+ }
1820
+ }
1620
1821
  /** Method calls on net.Socket receivers: write/end/destroy/pipe and
1621
1822
  * on/once("data" | "end" | "close" | "error" | "connect"). Null for
1622
1823
  * other receivers. */
@@ -1627,7 +1828,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1627
1828
  return null;
1628
1829
  const name = access.name.text;
1629
1830
  const loc = locOf(call);
1630
- const args = call.arguments;
1831
+ const args = call.arguments.nodes;
1631
1832
  if ((name === "ref" || name === "unref") && args.length === 0) {
1632
1833
  // Whether the socket keeps the event loop alive.
1633
1834
  requireStatementPosition(lowerer, call, `socket.${name}()`);
@@ -1654,7 +1855,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1654
1855
  if (encT.isStringLiteralType() && chunkT !== null) {
1655
1856
  if (encT.value === "buffer" &&
1656
1857
  chunkT.kind === "string" &&
1657
- isJsSourceFile(call.getSourceFile())) {
1858
+ isJsSourceFile(ts.getSourceFileOfNode(call))) {
1658
1859
  lowerer.lowerExpr(args[0]); // evaluation order (effect-free in practice)
1659
1860
  return nodeThrowExpr(1, "ERR_UNKNOWN_ENCODING", "Unknown encoding: buffer", VOID, loc);
1660
1861
  }
@@ -1871,6 +2072,20 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1871
2072
  ? value
1872
2073
  : lowerer.coerceInto(call, value, declared);
1873
2074
  }
2075
+ if (name === "isSessionReused" && args.length === 0) {
2076
+ // TLSSocket.isSessionReused(): the client never offers a cached
2077
+ // session (no session resumption, a documented TLS divergence), so
2078
+ // no handshake resumes one. A plain socket asserted to be a
2079
+ // TLSSocket answers false too, where Node has no such method.
2080
+ const receiver = coerceToHandle(lowerer, access.expression, NETSOCKET_T);
2081
+ return {
2082
+ kind: "seqExpr",
2083
+ stmts: [{ kind: "exprStmt", expr: receiver, loc }],
2084
+ result: boolLit(false, loc),
2085
+ type: BOOL,
2086
+ loc,
2087
+ };
2088
+ }
1874
2089
  if (name === "resetAndDestroy") {
1875
2090
  // An RST close; a connecting socket resets once it connects. Answers
1876
2091
  // the socket, Node's chaining.
@@ -1981,6 +2196,26 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1981
2196
  loc,
1982
2197
  };
1983
2198
  }
2199
+ if (param !== null && param.kind === "bytes" && socketEncodingReachable(lowerer)) {
2200
+ const encoded = lowerEncodedDataListener(lowerer, args[1]);
2201
+ // A listener defined elsewhere keeps its Buffer parameter; it takes
2202
+ // the chunk through the checked boundary, so a string chunk fails
2203
+ // the check instead of arriving as a Buffer.
2204
+ const cb = encoded ??
2205
+ {
2206
+ kind: "dynCheck",
2207
+ value: lowerSocketDynListener(lowerer, args[1], "data listeners"),
2208
+ type: funcOf([DYN], VOID),
2209
+ loc,
2210
+ };
2211
+ return {
2212
+ kind: "libCall",
2213
+ fn: "net.sockOnData",
2214
+ args: [receiver, cb, once],
2215
+ type: VOID,
2216
+ loc,
2217
+ };
2218
+ }
1984
2219
  const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
1985
2220
  return { kind: "libCall", fn: "net.sockOnData", args: [receiver, cb, once], type: VOID, loc };
1986
2221
  }
@@ -2027,6 +2262,17 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
2027
2262
  : "net.sockOnConnect";
2028
2263
  return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
2029
2264
  }
2265
+ if (event === "lookup") {
2266
+ // (err, address, family, host) after the host name resolves, before
2267
+ // the connect: once per resolved address, or once with the error.
2268
+ return {
2269
+ kind: "libCall",
2270
+ fn: "net.sockOnLookup",
2271
+ args: [receiver, lowerSocketDynListener(lowerer, args[1], "lookup listeners"), once],
2272
+ type: VOID,
2273
+ loc,
2274
+ };
2275
+ }
2030
2276
  if (event === "finish") {
2031
2277
  // Fires once when the FIN goes out — once either way (the event
2032
2278
  // happens at most once per socket).
@@ -2059,7 +2305,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
2059
2305
  loc,
2060
2306
  };
2061
2307
  }
2062
- lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "ready", "timeout", "readable", "secureConnect", and "session" are the supported socket events (as literals)');
2308
+ lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "lookup", "ready", "timeout", "readable", "secureConnect", and "session" are the supported socket events (as literals)');
2063
2309
  }
2064
2310
  lowerer.noLowering(`Socket.${name}`, call, "write, end, destroy, pipe, setTimeout, setKeepAlive, setNoDelay, the address fields, read, unshift, and on/once of data/end/close/error/connect/ready/timeout/readable are the supported Socket members", lowerer.checker.getSymbolAtLocation(access.name));
2065
2311
  }
@@ -2120,7 +2366,7 @@ function h2EndStreamOption(lowerer, node) {
2120
2366
  lowerer.noLowering("h2 options argument", node, "pass the options as an object literal ({ endStream: true })");
2121
2367
  }
2122
2368
  let end;
2123
- for (const prop of node.properties) {
2369
+ for (const prop of node.properties.nodes) {
2124
2370
  if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
2125
2371
  lowerer.noLowering("h2 options with spreads or computed keys", prop, "use plain `name: value` entries");
2126
2372
  }
@@ -2148,7 +2394,7 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
2148
2394
  return null;
2149
2395
  const name = access.name.text;
2150
2396
  const loc = locOf(call);
2151
- const args = call.arguments;
2397
+ const args = call.arguments.nodes;
2152
2398
  const receiver = () => coerceToHandle(lowerer, access.expression, HTTP2SESSION_T);
2153
2399
  if (name === "request") {
2154
2400
  const pairs = args.length >= 1 && !ts.isObjectLiteralExpression(args[0]) === false && args.length >= 1
@@ -2328,7 +2574,7 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
2328
2574
  return null;
2329
2575
  const name = access.name.text;
2330
2576
  const loc = locOf(call);
2331
- const args = call.arguments;
2577
+ const args = call.arguments.nodes;
2332
2578
  const receiver = () => receiverOverride ?? coerceToHandle(lowerer, access.expression, HTTP2STREAM_T);
2333
2579
  if (name === "respond") {
2334
2580
  requireStatementPosition(lowerer, call, "stream.respond(...)");
@@ -2991,7 +3237,7 @@ export function lowerServerProperty(lowerer, expr) {
2991
3237
  if (expr.name.text !== "port")
2992
3238
  return null;
2993
3239
  const recv = expr.expression;
2994
- if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.length !== 0)
3240
+ if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.nodes.length !== 0)
2995
3241
  return null;
2996
3242
  if (!ts.isPropertyAccessExpression(recv.expression))
2997
3243
  return null;
@@ -3003,6 +3249,30 @@ export function lowerServerProperty(lowerer, expr) {
3003
3249
  if (!lowerer.isStdlibMember(inner))
3004
3250
  return null;
3005
3251
  const receiver = coerceToHandle(lowerer, inner.expression, NETSERVER_T);
3252
+ if (unixListenReachable(lowerer)) {
3253
+ const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
3254
+ const server = () => varRef(local.id, NETSERVER_T, loc);
3255
+ return {
3256
+ kind: "seqExpr",
3257
+ stmts: [
3258
+ { kind: "varDecl", localId: local.id, init: receiver, loc },
3259
+ {
3260
+ kind: "exprStmt",
3261
+ expr: {
3262
+ kind: "libCall",
3263
+ fn: "net.serverAddressCheck",
3264
+ args: [server()],
3265
+ type: VOID,
3266
+ loc,
3267
+ },
3268
+ loc,
3269
+ },
3270
+ ],
3271
+ result: { kind: "libCall", fn: "net.serverPort", args: [server()], type: F64, loc },
3272
+ type: F64,
3273
+ loc,
3274
+ };
3275
+ }
3006
3276
  return { kind: "libCall", fn: "net.serverPort", args: [receiver], type: F64, loc };
3007
3277
  }
3008
3278
  /** The (req, res) request-handler argument — http.createServer's, https
@@ -3067,7 +3337,8 @@ function lowerHttpServerOptions(lowerer, node, what) {
3067
3337
  let joinDup = false;
3068
3338
  let allowMissingHost = false;
3069
3339
  let keepAliveTimeoutBuffer = null;
3070
- for (const prop of node.properties) {
3340
+ let maxHeaderSize = null;
3341
+ for (const prop of node.properties.nodes) {
3071
3342
  let initializer;
3072
3343
  if (ts.isPropertyAssignment(prop) &&
3073
3344
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -3105,6 +3376,17 @@ function lowerHttpServerOptions(lowerer, node, what) {
3105
3376
  }
3106
3377
  lowerer.noLowering(`${what} with a non-literal joinDuplicateHeaders option`, prop, 'the lowered forms are the literals joinDuplicateHeaders: true (repeats join ", ") and false (the keep-first default)');
3107
3378
  }
3379
+ if (key === "maxHeaderSize") {
3380
+ // The header size bound (Node's validateInteger runs in the runtime).
3381
+ const raw = initializer !== null
3382
+ ? lowerer.lowerExpr(initializer)
3383
+ : lowerer.lowerShorthandValue(prop);
3384
+ if (raw.type.kind !== "f64") {
3385
+ lowerer.noLowering(`${what} with a '${lowerer.fmt(raw.type)}' maxHeaderSize option`, prop, "maxHeaderSize is a number");
3386
+ }
3387
+ maxHeaderSize = raw;
3388
+ continue;
3389
+ }
3108
3390
  if (key === "keepAliveTimeoutBuffer") {
3109
3391
  if (keepAliveTimeoutBuffer !== null) {
3110
3392
  lowerer.noLowering(`${what} with duplicate keepAliveTimeoutBuffer options`, prop, "write keepAliveTimeoutBuffer once in the options literal");
@@ -3124,10 +3406,10 @@ function lowerHttpServerOptions(lowerer, node, what) {
3124
3406
  keepAliveTimeoutBuffer = value;
3125
3407
  continue;
3126
3408
  }
3127
- fenceOrDropOptionKey(lowerer, prop, key, what, HTTP_SERVER_DOCUMENTED_OPTIONS, "requireHostHeader, joinDuplicateHeaders, and keepAliveTimeoutBuffer are the supported options");
3409
+ fenceOrDropOptionKey(lowerer, prop, key, what, HTTP_SERVER_DOCUMENTED_OPTIONS, "requireHostHeader, joinDuplicateHeaders, keepAliveTimeoutBuffer, and maxHeaderSize are the supported options");
3128
3410
  // An undocumented key, dropped like Node drops it.
3129
3411
  }
3130
- return { joinDup, allowMissingHost, keepAliveTimeoutBuffer };
3412
+ return { joinDup, allowMissingHost, keepAliveTimeoutBuffer, maxHeaderSize };
3131
3413
  }
3132
3414
  /** The shared createServer([options][, handler]) shapes behind
3133
3415
  * http.createServer, http.Server, and `new http.Server`: no arguments
@@ -3135,7 +3417,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
3135
3417
  * (options, handler). Modeled option values wrap the construction in an
3136
3418
  * interned option-setting helper. */
3137
3419
  function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3138
- const args = expr.arguments ?? [];
3420
+ const args = expr.arguments?.nodes ?? [];
3139
3421
  if (args.length > 2) {
3140
3422
  lowerer.noLowering(`${what} with ${args.length} arguments`, expr, `the supported forms are ${what}([options][, (req, res) => ...])`);
3141
3423
  }
@@ -3153,7 +3435,12 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3153
3435
  }
3154
3436
  const opts = optsNode !== null
3155
3437
  ? lowerHttpServerOptions(lowerer, optsNode, what)
3156
- : { joinDup: false, allowMissingHost: false, keepAliveTimeoutBuffer: null };
3438
+ : {
3439
+ joinDup: false,
3440
+ allowMissingHost: false,
3441
+ keepAliveTimeoutBuffer: null,
3442
+ maxHeaderSize: null,
3443
+ };
3157
3444
  const server = handlerNode !== null
3158
3445
  ? {
3159
3446
  kind: "libCall",
@@ -3163,20 +3450,25 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3163
3450
  loc,
3164
3451
  }
3165
3452
  : { kind: "libCall", fn: "http.createServerEmpty", args: [], type: NETSERVER_T, loc };
3166
- if (!opts.joinDup && !opts.allowMissingHost && opts.keepAliveTimeoutBuffer === null)
3453
+ if (!opts.joinDup &&
3454
+ !opts.allowMissingHost &&
3455
+ opts.keepAliveTimeoutBuffer === null &&
3456
+ opts.maxHeaderSize === null)
3167
3457
  return server;
3168
3458
  // The option-setting composition: an interned helper takes the option
3169
3459
  // values first (preserving Node's options-before-handler evaluation
3170
3460
  // order), then the fresh server, applies the modeled fields, and answers
3171
3461
  // the server as the constructor/factory result.
3172
3462
  const hasBuffer = opts.keepAliveTimeoutBuffer !== null;
3173
- const key = `server.opts:${opts.joinDup ? 1 : 0}:${opts.allowMissingHost ? 1 : 0}:${hasBuffer ? 1 : 0}`;
3463
+ const hasMax = opts.maxHeaderSize !== null;
3464
+ const key = `server.opts:${opts.joinDup ? 1 : 0}:${opts.allowMissingHost ? 1 : 0}:${hasBuffer ? 1 : 0}:${hasMax ? 1 : 0}`;
3174
3465
  const existing = lowerer.arrHofHelpers.get(key);
3175
3466
  const name = existing ?? `%server.opts.${lowerer.arrHofHelpers.size}`;
3176
3467
  if (!existing) {
3177
3468
  lowerer.arrHofHelpers.set(key, name);
3178
3469
  const params = [
3179
3470
  ...(hasBuffer ? [{ localId: "b.0", name: "buffer", type: DYN }] : []),
3471
+ ...(hasMax ? [{ localId: "m.0", name: "maxHeaderSize", type: F64 }] : []),
3180
3472
  { localId: "s.0", name: "s", type: NETSERVER_T },
3181
3473
  ];
3182
3474
  const ref = { kind: "varRef", localId: "s.0", type: NETSERVER_T, loc };
@@ -3196,6 +3488,19 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3196
3488
  loc,
3197
3489
  });
3198
3490
  }
3491
+ if (hasMax) {
3492
+ body.push({
3493
+ kind: "exprStmt",
3494
+ expr: {
3495
+ kind: "libCall",
3496
+ fn: "http.serverMaxHeaderSize",
3497
+ args: [ref, { kind: "varRef", localId: "m.0", type: F64, loc }],
3498
+ type: VOID,
3499
+ loc,
3500
+ },
3501
+ loc,
3502
+ });
3503
+ }
3199
3504
  if (opts.joinDup) {
3200
3505
  body.push({
3201
3506
  kind: "exprStmt",
@@ -3229,7 +3534,11 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3229
3534
  return {
3230
3535
  kind: "call",
3231
3536
  callee: name,
3232
- args: [...(opts.keepAliveTimeoutBuffer !== null ? [opts.keepAliveTimeoutBuffer] : []), server],
3537
+ args: [
3538
+ ...(opts.keepAliveTimeoutBuffer !== null ? [opts.keepAliveTimeoutBuffer] : []),
3539
+ ...(opts.maxHeaderSize !== null ? [opts.maxHeaderSize] : []),
3540
+ server,
3541
+ ],
3233
3542
  type: NETSERVER_T,
3234
3543
  loc,
3235
3544
  };
@@ -3243,12 +3552,12 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3243
3552
  * getName/destroy and the sockets/requests/freeSockets counters dispatch
3244
3553
  * through the dyn handle ops, and the request path threads it (the
3245
3554
  * requestAgent rows). Options parse at the LITERAL construction site:
3246
- * keepAlive (a boolean value — TRUE throws the runtime's named pooling
3247
- * fence: this client dials one connection per request), keepAliveMsecs /
3248
- * maxSockets / maxFreeSockets / timeout / port as numbers, scheduling
3249
- * DROPS (no free pool exists, so selection order cannot observe), other
3250
- * documented keys fence by name, and undocumented keys drop like Node
3251
- * drops them. Null when the callee isn't the http/https Agent. */
3555
+ * keepAlive (a boolean value: finished connections return to the free
3556
+ * list), keepAliveMsecs / maxSockets / maxFreeSockets / timeout / port as
3557
+ * numbers, scheduling as a value the runtime validates ('fifo' or
3558
+ * 'lifo'), other documented keys fence by name, and undocumented keys
3559
+ * drop like Node drops them. Null when the callee isn't the http/https
3560
+ * Agent. */
3252
3561
  export function lowerHttpAgentNew(lowerer, expr) {
3253
3562
  const callee = expr.expression;
3254
3563
  const bi = ts.isPropertyAccessExpression(callee) && callee.name.text === "Agent"
@@ -3266,7 +3575,8 @@ export function lowerHttpAgentNew(lowerer, expr) {
3266
3575
  let maxFree = numLit(-1, loc);
3267
3576
  let timeout = numLit(-1, loc);
3268
3577
  let port = numLit(-1, loc);
3269
- const args = expr.arguments ?? [];
3578
+ let scheduling = lowerer.coerceToExpected(strLit("lifo", loc), DYN);
3579
+ const args = expr.arguments?.nodes ?? [];
3270
3580
  if (args.length > 1) {
3271
3581
  lowerer.noLowering(`${api} with ${args.length} arguments`, expr, "the supported form is new Agent(options?)");
3272
3582
  }
@@ -3275,7 +3585,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
3275
3585
  if (!ts.isObjectLiteralExpression(optsNode)) {
3276
3586
  lowerer.noLowering(`${api} with a non-literal options value`, args[0], "spell the options as an object literal at the construction site");
3277
3587
  }
3278
- for (const prop of optsNode.properties) {
3588
+ for (const prop of optsNode.properties.nodes) {
3279
3589
  if (ts.isSpreadAssignment(prop)) {
3280
3590
  lowerer.noLowering(`${api} with an options spread`, prop, "write each option inline");
3281
3591
  }
@@ -3331,12 +3641,14 @@ export function lowerHttpAgentNew(lowerer, expr) {
3331
3641
  // the settable defaultPort carries this one.
3332
3642
  port = lowerVal("f64");
3333
3643
  break;
3334
- case "scheduling":
3335
- // Free-socket selection order: no free pool exists here (no
3336
- // keep-alive reuse), so the choice cannot observe — dropped.
3337
- if (initializer !== null)
3338
- lowerer.lowerExpr(initializer); // evaluate, like Node
3644
+ case "scheduling": {
3645
+ // 'fifo' | 'lifo' (falsy = 'lifo'), validated by the runtime
3646
+ const v = initializer !== null
3647
+ ? lowerer.lowerExpr(initializer)
3648
+ : lowerer.lowerShorthandValue(prop);
3649
+ scheduling = lowerer.coerceToExpected(v, DYN);
3339
3650
  break;
3651
+ }
3340
3652
  default:
3341
3653
  fenceOrDropOptionKey(lowerer, prop, key, api, bi.module === "https" ? HTTPS_AGENT_DOCUMENTED_OPTIONS : AGENT_DOCUMENTED_OPTIONS, bi.module === "https"
3342
3654
  ? "keepAlive, keepAliveMsecs, maxSockets, maxFreeSockets, timeout, port, and scheduling are the supported options; pass TLS options such as ca and rejectUnauthorized on each https.request"
@@ -3355,6 +3667,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
3355
3667
  maxFree,
3356
3668
  timeout,
3357
3669
  port,
3670
+ scheduling,
3358
3671
  ],
3359
3672
  type: DYN,
3360
3673
  loc,
@@ -3380,24 +3693,24 @@ export function lowerHttpServerNew(lowerer, expr) {
3380
3693
  function lowerHttpModuleCall(lowerer, expr, bi, loc) {
3381
3694
  if (bi.member === "validateHeaderName") {
3382
3695
  requireStatementPosition(lowerer, expr, "http.validateHeaderName(...)");
3383
- if (expr.arguments.length < 1 ||
3384
- expr.arguments.length > 2 ||
3385
- expr.arguments.some(ts.isSpreadElement)) {
3696
+ if (expr.arguments.nodes.length < 1 ||
3697
+ expr.arguments.nodes.length > 2 ||
3698
+ expr.arguments.nodes.some(ts.isSpreadElement)) {
3386
3699
  lowerer.noLowering("http.validateHeaderName arguments", expr, "pass a header name and an optional label");
3387
3700
  }
3388
- const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
3389
- const label = expr.arguments.length === 2
3390
- ? lowerer.lowerExprExpecting(expr.arguments[1], STRING)
3701
+ const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
3702
+ const label = expr.arguments.nodes.length === 2
3703
+ ? lowerer.lowerExprExpecting(expr.arguments.nodes[1], STRING)
3391
3704
  : strLit("Header name", loc);
3392
3705
  return { kind: "libCall", fn: "http.validateHeaderName", args: [name, label], type: VOID, loc };
3393
3706
  }
3394
3707
  if (bi.member === "validateHeaderValue") {
3395
3708
  requireStatementPosition(lowerer, expr, "http.validateHeaderValue(...)");
3396
- if (expr.arguments.length !== 2 || expr.arguments.some(ts.isSpreadElement)) {
3709
+ if (expr.arguments.nodes.length !== 2 || expr.arguments.nodes.some(ts.isSpreadElement)) {
3397
3710
  lowerer.noLowering("http.validateHeaderValue arguments", expr, "pass a header name and a value");
3398
3711
  }
3399
- const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
3400
- const value = lowerer.lowerExprExpecting(expr.arguments[1], DYN);
3712
+ const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
3713
+ const value = lowerer.lowerExprExpecting(expr.arguments.nodes[1], DYN);
3401
3714
  return {
3402
3715
  kind: "libCall",
3403
3716
  fn: "http.validateHeaderValue",
@@ -3427,7 +3740,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
3427
3740
  const loc = locOf(node);
3428
3741
  let cert = null;
3429
3742
  let key = null;
3430
- for (const prop of node.properties) {
3743
+ for (const prop of node.properties.nodes) {
3431
3744
  let initializer;
3432
3745
  if (ts.isPropertyAssignment(prop) &&
3433
3746
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -3523,8 +3836,8 @@ const TLS_VALIDATED_OPTIONS = new Set([
3523
3836
  * keepAliveTimeoutBuffer so the HTTP option is consumed without losing
3524
3837
  * the literal's evaluation order. */
3525
3838
  function tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions = false) {
3526
- const jsSource = isJsSourceFile(node.getSourceFile());
3527
- return node.properties.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
3839
+ const jsSource = isJsSourceFile(ts.getSourceFileOfNode(node));
3840
+ return node.properties.nodes.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
3528
3841
  (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
3529
3842
  ((includeHttpTimeoutOptions && p.name.text === "keepAliveTimeoutBuffer") ||
3530
3843
  (jsSource && TLS_VALIDATED_OPTIONS.has(p.name.text))));
@@ -3557,7 +3870,7 @@ function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptio
3557
3870
  * callback (and 'secureConnect'/'connect' listeners) fires
3558
3871
  * post-handshake — Node's secureConnect timing. */
3559
3872
  function lowerTlsConnectCall(lowerer, expr, loc) {
3560
- const args = expr.arguments;
3873
+ const args = expr.arguments.nodes;
3561
3874
  const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/rejectUnauthorized/ca/servername";
3562
3875
  if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
3563
3876
  lowerer.noLowering(`tls.connect with ${args.length} arguments`, expr, FORMS_HINT);
@@ -3649,7 +3962,7 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
3649
3962
  * module declares fences qualified (createSecureContext and connect
3650
3963
  * carry pointed hints from the fence-hint table). */
3651
3964
  function lowerTlsModuleCall(lowerer, expr, bi, loc) {
3652
- const args = expr.arguments;
3965
+ const args = expr.arguments.nodes;
3653
3966
  if (bi.member === "createServer") {
3654
3967
  if (args.length < 1 || args.length > 2) {
3655
3968
  lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, socket => ...)");
@@ -3689,7 +4002,7 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
3689
4002
  if (bi.member === "getCACertificates" &&
3690
4003
  args.length === 1 &&
3691
4004
  !args.some(ts.isSpreadElement) &&
3692
- isJsSourceFile(expr.getSourceFile())) {
4005
+ isJsSourceFile(ts.getSourceFileOfNode(expr))) {
3693
4006
  // The type-argument ladder (validateString + the documented name
3694
4007
  // set); the real CA list has no lowering, so a valid name meets the
3695
4008
  // compiler-rendered fence after the validation.
@@ -3795,7 +4108,7 @@ function clientFnRefOf(lowerer, node) {
3795
4108
  * `const` declaration, or a parameter/let whose enclosing scope contains
3796
4109
  * no assignment or ++/-- targeting it. */
3797
4110
  function neverReassigned(lowerer, sym) {
3798
- const decl = lowerer.checker.declarationsOf(sym)[0];
4111
+ const decl = sym.declarations[0];
3799
4112
  if (!decl)
3800
4113
  return false;
3801
4114
  if (ts.isVariableDeclaration(decl) &&
@@ -3902,7 +4215,7 @@ export function lowerHttpClientFnCall(lowerer, expr, binding, loc) {
3902
4215
  * handler) and request/get — the http client lowering with the secure
3903
4216
  * extras (port 443 default, rejectUnauthorized, ca). */
3904
4217
  function lowerHttpsModuleCall(lowerer, expr, bi, loc) {
3905
- const args = expr.arguments;
4218
+ const args = expr.arguments.nodes;
3906
4219
  if (bi.member === "createServer") {
3907
4220
  if (args.length < 1 || args.length > 2) {
3908
4221
  lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, (req, res) => ...)");
@@ -3983,7 +4296,7 @@ function stripParensAndCasts(node) {
3983
4296
  * createSecureServer lowers h2 over TLS, with allowHTTP1 selecting one
3984
4297
  * dual-ALPN server whose request/connect listeners mirror across parsers. */
3985
4298
  function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3986
- const args = expr.arguments;
4299
+ const args = expr.arguments.nodes;
3987
4300
  if (bi.member === "createServer") {
3988
4301
  // The REAL h2c server (scr_http2.c). An options object literal is
3989
4302
  // accepted and ignored (h2 session-tuning knobs; the honest-defaults
@@ -4047,7 +4360,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4047
4360
  !arg1IsDyn &&
4048
4361
  lowerer.checker.getCallSignatures(lowerer.typeOf(args[1])).length === 0) {
4049
4362
  if (ts.isObjectLiteralExpression(args[1])) {
4050
- for (const pr of args[1].properties) {
4363
+ for (const pr of args[1].properties.nodes) {
4051
4364
  // Plain `name: value` and shorthand `{ ca }` both carry the
4052
4365
  // option; a shorthand's value is the same-named identifier.
4053
4366
  let name;
@@ -4230,17 +4543,17 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4230
4543
  if (ts.isConditionalExpression(inner)) {
4231
4544
  const whenTrue = stripParensAndCasts(inner.whenTrue);
4232
4545
  const whenFalse = stripParensAndCasts(inner.whenFalse);
4233
- const condText = inner.condition.getText();
4546
+ const condText = ts.getTextOfNode(inner.condition);
4234
4547
  const ok = ts.isObjectLiteralExpression(whenTrue) &&
4235
4548
  ts.isObjectLiteralExpression(whenFalse) &&
4236
- whenFalse.properties.length === 0 &&
4237
- whenTrue.properties.length === 1 &&
4238
- ts.isPropertyAssignment(whenTrue.properties[0]) &&
4239
- (ts.isIdentifier(whenTrue.properties[0].name) ||
4240
- ts.isStringLiteral(whenTrue.properties[0].name)) &&
4241
- whenTrue.properties[0].name.text ===
4549
+ whenFalse.properties.nodes.length === 0 &&
4550
+ whenTrue.properties.nodes.length === 1 &&
4551
+ ts.isPropertyAssignment(whenTrue.properties.nodes[0]) &&
4552
+ (ts.isIdentifier(whenTrue.properties.nodes[0].name) ||
4553
+ ts.isStringLiteral(whenTrue.properties.nodes[0].name)) &&
4554
+ whenTrue.properties.nodes[0].name.text ===
4242
4555
  "SNICallback" &&
4243
- whenTrue.properties[0].initializer.getText() === condText;
4556
+ ts.getTextOfNode(whenTrue.properties.nodes[0].initializer) === condText;
4244
4557
  if (!ok) {
4245
4558
  lowerer.noLowering("createSecureServer options with a conditional spread", prop, "the lowered conditional spread is exactly ...(x ? { SNICallback: x } : {}) — the included value must BE the condition");
4246
4559
  }
@@ -4250,7 +4563,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4250
4563
  if (!ts.isObjectLiteralExpression(inner)) {
4251
4564
  lowerer.noLowering("createSecureServer options with a computed spread", prop, `spreads must be inline object literals here; ${SNI_HINT}`);
4252
4565
  }
4253
- for (const p of inner.properties)
4566
+ for (const p of inner.properties.nodes)
4254
4567
  lowerOption(p);
4255
4568
  return;
4256
4569
  }
@@ -4316,11 +4629,11 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4316
4629
  e.kind === ts.SyntaxKind.TrueKeyword ||
4317
4630
  e.kind === ts.SyntaxKind.FalseKeyword;
4318
4631
  const isLiteralObjectOfLiterals = (e) => ts.isObjectLiteralExpression(e) &&
4319
- e.properties.every((p) => ts.isPropertyAssignment(p) &&
4632
+ e.properties.nodes.every((p) => ts.isPropertyAssignment(p) &&
4320
4633
  ts.isIdentifier(p.name) &&
4321
4634
  isScalarLiteral(p.initializer));
4322
4635
  if (k === "settings" && initializer !== null && ts.isObjectLiteralExpression(initializer)) {
4323
- for (const setting of initializer.properties) {
4636
+ for (const setting of initializer.properties.nodes) {
4324
4637
  if (ts.isPropertyAssignment(setting) &&
4325
4638
  ts.isIdentifier(setting.name) &&
4326
4639
  setting.name.text === "enableConnectProtocol") {
@@ -4348,7 +4661,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4348
4661
  fenceOrDropOptionKey(lowerer, prop, k, "createSecureServer", HTTP2_SECURE_SERVER_DOCUMENTED_OPTIONS, "allowHTTP1: true, cert, key, and SNICallback are the supported options (h2 session-tuning options are accepted as literals and ignored)");
4349
4662
  // An undocumented key, dropped like Node drops it.
4350
4663
  };
4351
- for (const prop of optsNode.properties)
4664
+ for (const prop of optsNode.properties.nodes)
4352
4665
  lowerOption(prop);
4353
4666
  if (cert === null || key === null) {
4354
4667
  lowerer.noLowering("createSecureServer without both cert and key", optsNode, "the supported options object is { allowHTTP1?, cert, key } (PEM strings or Buffers)");
@@ -4413,6 +4726,37 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4413
4726
  lowerer.noLowering(`http2.${bi.member}`, expr, builtinFenceHintOf("http2", bi.member) ??
4414
4727
  "createSecureServer({ allowHTTP1: true, cert, key }) and the h2-only form are lowered", lowerer.resolveValueSymbol(expr.expression));
4415
4728
  }
4729
+ /** The checked-dynamic options value of a request whose options the
4730
+ * runtime reads: a non-literal options value (a RequestOptions variable —
4731
+ * checked-dynamic storage — or a record that converts to one), or a
4732
+ * literal the static walk cannot lower because it spreads another options
4733
+ * value or sets socketPath. Null keeps the static literal walk (and its
4734
+ * fences), which every other literal takes unchanged. */
4735
+ function runtimeRequestOptions(lowerer, optsNode, secureish) {
4736
+ if (ts.isObjectLiteralExpression(optsNode)) {
4737
+ const needsRuntime = optsNode.properties.nodes.some((prop) => {
4738
+ if (ts.isSpreadAssignment(prop)) {
4739
+ // the static walk's one spread: `...(c ? { rejectUnauthorized } : {})` on https
4740
+ const cs = conditionalSpreadOf(prop.expression);
4741
+ return !(secureish &&
4742
+ cs !== null &&
4743
+ cs !== "unsupported" &&
4744
+ cs.props.length === 1 &&
4745
+ cs.props[0].name.text === "rejectUnauthorized");
4746
+ }
4747
+ return ((ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) &&
4748
+ (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)) &&
4749
+ prop.name.text === "socketPath");
4750
+ });
4751
+ if (!needsRuntime)
4752
+ return null;
4753
+ return lowerDynObjectLiteral(lowerer, optsNode);
4754
+ }
4755
+ const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
4756
+ if (!t || !(t.kind === "dyn" || (t.kind === "record" && lowerer.dynConvertible(t))))
4757
+ return null;
4758
+ return lowerer.coerceToExpected(lowerer.lowerExpr(optsNode), DYN);
4759
+ }
4416
4760
  /** http.request(options[, cb]) / http.get(options[, cb]) — the client.
4417
4761
  * The options argument must be an OBJECT LITERAL; the lowered keys are
4418
4762
  * hostname/host, port, path, method, timeout, and headers (a nested
@@ -4440,11 +4784,36 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4440
4784
  const c = lowerer.lowerCondition(binding.cond);
4441
4785
  return binding.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
4442
4786
  };
4443
- const args = expr.arguments;
4787
+ const args = expr.arguments.nodes;
4444
4788
  if (args.length < 1 || args.length > 2) {
4445
4789
  lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported form is ${member}(options[, callback])`);
4446
4790
  }
4447
4791
  const optsNode = args[0];
4792
+ const runtimeOptions = binding === null ? runtimeRequestOptions(lowerer, optsNode, secureish) : null;
4793
+ if (runtimeOptions !== null) {
4794
+ // The options record is read at run time (the ClientRequest
4795
+ // constructor's walk in the runtime): a RequestOptions variable, or a
4796
+ // literal that spreads one or sets socketPath.
4797
+ const autoEnd = boolLit(member === "get", loc);
4798
+ const secureDyn = secure === true;
4799
+ if (args.length === 1) {
4800
+ return {
4801
+ kind: "libCall",
4802
+ fn: secureDyn ? "https.requestDyn" : "http.requestDyn",
4803
+ args: [runtimeOptions, autoEnd],
4804
+ type: HTTPCLIENTREQ_T,
4805
+ loc,
4806
+ };
4807
+ }
4808
+ const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
4809
+ return {
4810
+ kind: "libCall",
4811
+ fn: secureDyn ? "https.requestDynCb" : "http.requestDynCb",
4812
+ args: [runtimeOptions, autoEnd, cb],
4813
+ type: HTTPCLIENTREQ_T,
4814
+ loc,
4815
+ };
4816
+ }
4448
4817
  if (!ts.isObjectLiteralExpression(optsNode)) {
4449
4818
  const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
4450
4819
  if ((t?.kind === "string" || t?.kind === "url") && binding === null) {
@@ -4505,7 +4874,13 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4505
4874
  let agentClose = null;
4506
4875
  /** agent: <Agent value> — the requestAgent rows thread the handle. */
4507
4876
  let agentVal = null;
4508
- for (const prop of optsNode.properties) {
4877
+ /** signal: an AbortSignal (checked at runtime) that destroys the request. */
4878
+ let signal = null;
4879
+ /** servername: the TLS name for SNI and certificate verification. */
4880
+ let servername = null;
4881
+ /** maxHeaderSize: the response head's size bound. */
4882
+ let maxHeaderSize = null;
4883
+ for (const prop of optsNode.properties.nodes) {
4509
4884
  // Shorthand entries ({ port } for { port: port }) are the natural
4510
4885
  // spelling at these call sites — the shorthand's VALUE lowering
4511
4886
  // resolves the local binding (lowerShorthandValue), not the property
@@ -4596,6 +4971,25 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4596
4971
  case "timeout":
4597
4972
  timeout = lowerVal("f64");
4598
4973
  break;
4974
+ case "maxHeaderSize":
4975
+ maxHeaderSize = lowerVal("f64");
4976
+ break;
4977
+ case "servername":
4978
+ if (binding !== null) {
4979
+ lowerer.noLowering(`${member} option 'servername' through a module-function binding`, prop, "call https.request directly when passing servername");
4980
+ }
4981
+ if (!secureish) {
4982
+ lowerer.noLowering(`${member} option 'servername'`, prop, "servername is an https.request option — the plain http client has no TLS layer");
4983
+ }
4984
+ servername = lowerVal("string");
4985
+ break;
4986
+ case "signal": {
4987
+ const v = initializer !== null
4988
+ ? lowerer.lowerExpr(initializer)
4989
+ : lowerer.lowerShorthandValue(prop);
4990
+ signal = lowerer.coerceToExpected(v, DYN);
4991
+ break;
4992
+ }
4599
4993
  case "headers":
4600
4994
  if (initializer === null) {
4601
4995
  lowerer.noLowering(`${member} with a shorthand headers option`, prop, "spell it out: headers: theHeaders");
@@ -4680,8 +5074,8 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4680
5074
  }
4681
5075
  default:
4682
5076
  fenceOrDropOptionKey(lowerer, prop, key, member, secureish ? HTTPS_CLIENT_DOCUMENTED_OPTIONS : HTTP_CLIENT_DOCUMENTED_OPTIONS, secureish
4683
- ? "hostname/host, port, path, method, timeout, headers, agent, rejectUnauthorized, and ca are the supported options"
4684
- : "hostname/host, port, path, method, timeout, headers, and agent are the supported options");
5077
+ ? "hostname/host, port, path, method, timeout, headers, agent, signal, maxHeaderSize, rejectUnauthorized, ca, and servername are the supported options"
5078
+ : "hostname/host, port, path, method, timeout, headers, agent, signal, and maxHeaderSize are the supported options");
4685
5079
  }
4686
5080
  }
4687
5081
  if (agentClose !== null) {
@@ -4747,19 +5141,96 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4747
5141
  timeout ??= numLit(0, loc);
4748
5142
  headers ??= { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
4749
5143
  const autoEnd = boolLit(member === "get", loc);
5144
+ // options.signal is checked first: Node's constructor rejects a value
5145
+ // that is not an AbortSignal before it dials. servername is stored just
5146
+ // before construction (it selects the TLS name and which pooled sockets
5147
+ // the request may reuse); maxHeaderSize and the signal then apply to the
5148
+ // built request (an already aborted signal destroys it at once, like
5149
+ // Node's constructor).
5150
+ const withSignal = (request) => {
5151
+ if (signal === null && servername === null && maxHeaderSize === null)
5152
+ return request;
5153
+ const local = lowerer.declareHiddenLocal("%requestOptions", HTTPCLIENTREQ_T);
5154
+ const ref = () => varRef(local.id, HTTPCLIENTREQ_T, loc);
5155
+ const steps = [];
5156
+ let signalRef = null;
5157
+ if (signal !== null) {
5158
+ const signalLocal = lowerer.declareHiddenLocal("%requestSignal", DYN);
5159
+ signalRef = () => varRef(signalLocal.id, DYN, loc);
5160
+ steps.push({ kind: "varDecl", localId: signalLocal.id, init: signal, loc });
5161
+ steps.push({
5162
+ kind: "exprStmt",
5163
+ expr: {
5164
+ kind: "libCall",
5165
+ fn: "http.clientSignalCheck",
5166
+ args: [signalRef()],
5167
+ type: VOID,
5168
+ loc,
5169
+ },
5170
+ loc,
5171
+ });
5172
+ }
5173
+ if (servername !== null) {
5174
+ steps.push({
5175
+ kind: "exprStmt",
5176
+ expr: {
5177
+ kind: "libCall",
5178
+ fn: "https.nextServername",
5179
+ args: [servername],
5180
+ type: VOID,
5181
+ loc,
5182
+ },
5183
+ loc,
5184
+ });
5185
+ }
5186
+ steps.push({ kind: "varDecl", localId: local.id, init: request, loc });
5187
+ if (maxHeaderSize !== null) {
5188
+ steps.push({
5189
+ kind: "exprStmt",
5190
+ expr: {
5191
+ kind: "libCall",
5192
+ fn: "http.clientMaxHeaderSize",
5193
+ args: [ref(), maxHeaderSize],
5194
+ type: VOID,
5195
+ loc,
5196
+ },
5197
+ loc,
5198
+ });
5199
+ }
5200
+ if (signalRef !== null) {
5201
+ steps.push({
5202
+ kind: "exprStmt",
5203
+ expr: {
5204
+ kind: "libCall",
5205
+ fn: "http.clientSignal",
5206
+ args: [ref(), signalRef()],
5207
+ type: VOID,
5208
+ loc,
5209
+ },
5210
+ loc,
5211
+ });
5212
+ }
5213
+ return { kind: "seqExpr", stmts: steps, result: ref(), type: HTTPCLIENTREQ_T, loc };
5214
+ };
4750
5215
  if (connCb !== null) {
4751
5216
  const base = [connCb, path, method, timeout, headers, autoEnd];
4752
5217
  if (args.length === 1) {
4753
- return { kind: "libCall", fn: "http.requestConn", args: base, type: HTTPCLIENTREQ_T, loc };
5218
+ return withSignal({
5219
+ kind: "libCall",
5220
+ fn: "http.requestConn",
5221
+ args: base,
5222
+ type: HTTPCLIENTREQ_T,
5223
+ loc,
5224
+ });
4754
5225
  }
4755
5226
  const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
4756
- return {
5227
+ return withSignal({
4757
5228
  kind: "libCall",
4758
5229
  fn: "http.requestConnCb",
4759
5230
  args: [...base, cb],
4760
5231
  type: HTTPCLIENTREQ_T,
4761
5232
  loc,
4762
- };
5233
+ });
4763
5234
  }
4764
5235
  const base = [host, port, path, method, timeout, headers, autoEnd];
4765
5236
  if (secureish) {
@@ -4781,7 +5252,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4781
5252
  : agentVal !== null
4782
5253
  ? "http.requestAgent"
4783
5254
  : "http.request";
4784
- return { kind: "libCall", fn, args: base, type: HTTPCLIENTREQ_T, loc };
5255
+ return withSignal({ kind: "libCall", fn, args: base, type: HTTPCLIENTREQ_T, loc });
4785
5256
  }
4786
5257
  const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
4787
5258
  const fn = binding !== null
@@ -4793,7 +5264,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4793
5264
  : agentVal !== null
4794
5265
  ? "http.requestAgentCb"
4795
5266
  : "http.requestCb";
4796
- return { kind: "libCall", fn, args: [...base, cb], type: HTTPCLIENTREQ_T, loc };
5267
+ return withSignal({ kind: "libCall", fn, args: [...base, cb], type: HTTPCLIENTREQ_T, loc });
4797
5268
  }
4798
5269
  /** The headers option of http.request: an object literal with literal
4799
5270
  * keys and string values packs into the flat [k0, v0, k1, v1, ...] pairs
@@ -4804,7 +5275,7 @@ function lowerClientHeadersOption(lowerer, node) {
4804
5275
  const loc = locOf(node);
4805
5276
  if (ts.isObjectLiteralExpression(node)) {
4806
5277
  const elems = [];
4807
- for (const prop of node.properties) {
5278
+ for (const prop of node.properties.nodes) {
4808
5279
  const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
4809
5280
  if (!ts.isPropertyAssignment(prop) || key === null) {
4810
5281
  lowerer.noLowering("request headers with dynamic keys, spreads, or shorthand entries", prop, "each header must be a `name: value` entry whose key is a literal (or a string-literal-typed const: [PORTLESS_HEADER])");
@@ -4840,13 +5311,13 @@ function lowerHttpTrailersOption(lowerer, node) {
4840
5311
  return lowerClientHeadersOption(lowerer, node);
4841
5312
  const loc = locOf(node);
4842
5313
  const flat = [];
4843
- for (const entry of node.elements) {
4844
- if (!ts.isArrayLiteralExpression(entry) || entry.elements.length !== 2) {
5314
+ for (const entry of node.elements.nodes) {
5315
+ if (!ts.isArrayLiteralExpression(entry) || entry.elements.nodes.length !== 2) {
4845
5316
  lowerer.noLowering("addTrailers pair list", entry, "use an object/Record or literal [name, value] pairs");
4846
5317
  }
4847
5318
  const pair = entry;
4848
- const name = pair.elements[0];
4849
- const value = pair.elements[1];
5319
+ const name = pair.elements.nodes[0];
5320
+ const value = pair.elements.nodes[1];
4850
5321
  if (ts.isSpreadElement(name) || ts.isSpreadElement(value)) {
4851
5322
  lowerer.noLowering("addTrailers pair with spread", entry, "use direct string name/value expressions");
4852
5323
  }
@@ -4864,7 +5335,7 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
4864
5335
  return null;
4865
5336
  const name = access.name.text;
4866
5337
  const loc = locOf(call);
4867
- const args = call.arguments;
5338
+ const args = call.arguments.nodes;
4868
5339
  if (name === "setHeader") {
4869
5340
  requireStatementPosition(lowerer, call, "request.setHeader(...)");
4870
5341
  if (args.length !== 2)
@@ -5009,6 +5480,22 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
5009
5480
  }
5010
5481
  lowerer.noLowering(`${name} of '${lowerer.fmt(data.type)}' data`, args[0] ?? call, NARROW_DATA_HINT);
5011
5482
  }
5483
+ if (name === "destroy" && args.length === 1) {
5484
+ // destroy(err): err is the request's 'error' (an Error value here).
5485
+ requireStatementPosition(lowerer, call, "request.destroy(err)");
5486
+ const receiver = lowerer.lowerExpr(access.expression);
5487
+ const err = lowerer.lowerExpr(args[0]);
5488
+ if (err.type.kind !== "object") {
5489
+ lowerer.noLowering(`destroy with a '${lowerer.fmt(err.type)}' argument`, args[0], "pass an Error value, or call destroy() without one");
5490
+ }
5491
+ return {
5492
+ kind: "libCall",
5493
+ fn: "http.clientDestroyError",
5494
+ args: [receiver, lowerer.coerceToExpected(err, ERROR_T)],
5495
+ type: VOID,
5496
+ loc,
5497
+ };
5498
+ }
5012
5499
  if (name === "destroy" || name === "abort") {
5013
5500
  requireStatementPosition(lowerer, call, `request.${name}()`);
5014
5501
  if (args.length !== 0) {
@@ -5059,7 +5546,11 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
5059
5546
  loc,
5060
5547
  };
5061
5548
  }
5062
- if (event === "timeout" || event === "close" || event === "finish" || event === "abort") {
5549
+ if (event === "timeout" ||
5550
+ event === "close" ||
5551
+ event === "finish" ||
5552
+ event === "abort" ||
5553
+ event === "continue") {
5063
5554
  const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use ()", []);
5064
5555
  const fn = event === "timeout"
5065
5556
  ? "http.clientOnTimeout"
@@ -5067,7 +5558,9 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
5067
5558
  ? "http.clientOnClose"
5068
5559
  : event === "abort"
5069
5560
  ? "http.clientOnAbort"
5070
- : "http.clientOnFinish";
5561
+ : event === "continue"
5562
+ ? "http.clientOnContinue"
5563
+ : "http.clientOnFinish";
5071
5564
  return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
5072
5565
  }
5073
5566
  if (event === "upgrade") {
@@ -5221,7 +5714,7 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
5221
5714
  return null;
5222
5715
  const name = access.name.text;
5223
5716
  const loc = locOf(call);
5224
- const args = call.arguments;
5717
+ const args = call.arguments.nodes;
5225
5718
  if (name === "setTimeout") {
5226
5719
  requireStatementPosition(lowerer, call, "message.setTimeout(...)");
5227
5720
  if (args.length < 1 || args.length > 2)
@@ -5289,6 +5782,26 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
5289
5782
  const event = evT.isStringLiteralType() ? evT.value : null;
5290
5783
  const receiver = coerceToHandle(lowerer, access.expression, HTTPREQ_T);
5291
5784
  if (event === "data") {
5785
+ const sigs = lowerer.checker.getCallSignatures(lowerer.typeOf(args[1]));
5786
+ const firstParam = sigs.length === 1 ? sigs[0].getParameters()[0] : undefined;
5787
+ const param = firstParam !== undefined
5788
+ ? lowerer.mapTypeOf(lowerer.checker.getTypeOfSymbol(firstParam))
5789
+ : null;
5790
+ if (param !== null && param.kind === "string") {
5791
+ // A chunk typed string (the setEncoding('utf8') shape), as on a
5792
+ // socket: the listener takes the chunk through a checked
5793
+ // boundary, so a string arrives after setEncoding and a Buffer
5794
+ // without it fails the check instead of being decoded.
5795
+ const boxed = lowerSocketDynListener(lowerer, args[1], "data listeners");
5796
+ const cb = { kind: "dynCheck", value: boxed, type: funcOf([DYN], VOID), loc };
5797
+ return {
5798
+ kind: "libCall",
5799
+ fn: "http.reqOnData",
5800
+ args: [receiver, cb, once],
5801
+ type: VOID,
5802
+ loc,
5803
+ };
5804
+ }
5292
5805
  const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
5293
5806
  return { kind: "libCall", fn: "http.reqOnData", args: [receiver, cb, once], type: VOID, loc };
5294
5807
  }
@@ -5341,7 +5854,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5341
5854
  return null;
5342
5855
  const name = access.name.text;
5343
5856
  const loc = locOf(call);
5344
- const args = call.arguments;
5857
+ const args = call.arguments.nodes;
5345
5858
  if (name === "setTimeout") {
5346
5859
  if (args.length < 1 || args.length > 2) {
5347
5860
  lowerer.noLowering(`res.setTimeout with ${args.length} arguments`, call, "use setTimeout(milliseconds[, callback])");
@@ -5359,7 +5872,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5359
5872
  }
5360
5873
  if (name === "writeContinue" || name === "writeProcessing" || name === "writeEarlyHints") {
5361
5874
  requireStatementPosition(lowerer, call, `res.${name}(...)`);
5362
- if (lowerer.typeOf(access.expression).getSymbol()?.name === "Http2ServerResponse") {
5875
+ if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
5363
5876
  lowerer.noLowering(`Http2ServerResponse.${name}`, call, "HTTP/2 informational responses are not supported by the static runtime yet");
5364
5877
  }
5365
5878
  const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
@@ -5380,7 +5893,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5380
5893
  let pairs;
5381
5894
  if (ts.isObjectLiteralExpression(node)) {
5382
5895
  const elems = [];
5383
- for (const prop of node.properties) {
5896
+ for (const prop of node.properties.nodes) {
5384
5897
  const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
5385
5898
  if (!ts.isPropertyAssignment(prop) || key === null) {
5386
5899
  lowerer.noLowering("writeEarlyHints headers with dynamic keys, spreads, or shorthand entries", prop, "use literal header keys and string values");
@@ -5443,7 +5956,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5443
5956
  }
5444
5957
  if (name === "addTrailers") {
5445
5958
  requireStatementPosition(lowerer, call, "res.addTrailers(...)");
5446
- if (lowerer.typeOf(access.expression).getSymbol()?.name === "Http2ServerResponse") {
5959
+ if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
5447
5960
  lowerer.noLowering("Http2ServerResponse.addTrailers", call, "HTTP/2 response trailers are not supported by the static runtime yet");
5448
5961
  }
5449
5962
  if (args.length !== 1)
@@ -5580,7 +6093,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5580
6093
  }
5581
6094
  const names = [];
5582
6095
  const values = [];
5583
- for (const prop of headersNode.properties) {
6096
+ for (const prop of headersNode.properties.nodes) {
5584
6097
  const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
5585
6098
  if (!ts.isPropertyAssignment(prop) || key === null) {
5586
6099
  lowerer.noLowering("writeHead headers with dynamic keys, spreads, or shorthand entries", prop, "each header must be a `name: value` entry whose key is a literal (or a string-literal-typed const: [PORTLESS_HEADER])");
@@ -5708,6 +6221,26 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5708
6221
  return endWithCb(fn, [receiver, data], cbArg);
5709
6222
  return { kind: "libCall", fn, args: [receiver, data], type: VOID, loc };
5710
6223
  }
6224
+ // end(payload ? text : undefined): an absent chunk ends without data,
6225
+ // as end() does. The checked-dynamic end takes each arm at run time.
6226
+ if (name === "end" && data.type.kind === "union" && lowerer.dynConvertible(data.type)) {
6227
+ const arms = lowerer.unions.get(data.type.unionId)?.arms ?? [];
6228
+ if (arms.every((arm) => arm.kind === "string" ||
6229
+ (arm.kind === "bytes" && arm.elem === "u8") ||
6230
+ arm.kind === "undefinedT" ||
6231
+ arm.kind === "nullT")) {
6232
+ const dynData = { kind: "dynFrom", value: data, type: DYN, loc: locOf(dataNode) };
6233
+ if (cbArg !== null)
6234
+ return endWithCb("http.resEndDyn", [receiver, dynData], cbArg);
6235
+ return {
6236
+ kind: "libCall",
6237
+ fn: "http.resEndDyn",
6238
+ args: [receiver, dynData],
6239
+ type: VOID,
6240
+ loc,
6241
+ };
6242
+ }
6243
+ }
5711
6244
  lowerer.noLowering(`${name} of '${lowerer.fmt(data.type)}' data`, dataNode ?? call, NARROW_DATA_HINT);
5712
6245
  }
5713
6246
  if (name === "getHeader" || name === "hasHeader" || name === "removeHeader") {