@scriptc/compiler 0.3.6 → 0.4.1

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 (1358) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +717 -55
  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 +20 -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 +9 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/link-plan-core.d.ts +2 -0
  16. package/dist/backend/link-plan-core.js +2 -0
  17. package/dist/backend/link-plan-core.js.map +1 -1
  18. package/dist/backend/link-plan.d.ts +1 -0
  19. package/dist/backend/link-plan.js +1 -0
  20. package/dist/backend/link-plan.js.map +1 -1
  21. package/dist/backend/llvm/alloc.d.ts +41 -4
  22. package/dist/backend/llvm/alloc.js +138 -7
  23. package/dist/backend/llvm/alloc.js.map +1 -1
  24. package/dist/backend/llvm/alloc.test.js +30 -1
  25. package/dist/backend/llvm/alloc.test.js.map +1 -1
  26. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  27. package/dist/backend/llvm/array-search.js +3 -1
  28. package/dist/backend/llvm/array-search.js.map +1 -1
  29. package/dist/backend/llvm/array-search.test.js +1 -1
  30. package/dist/backend/llvm/blocks.d.ts +8 -0
  31. package/dist/backend/llvm/blocks.js +43 -1
  32. package/dist/backend/llvm/blocks.js.map +1 -1
  33. package/dist/backend/llvm/blocks.test.js +22 -1
  34. package/dist/backend/llvm/blocks.test.js.map +1 -1
  35. package/dist/backend/llvm/byte-numbers.js +15 -5
  36. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  37. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  38. package/dist/backend/llvm/bytes-alias.js +20 -0
  39. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  40. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  41. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  42. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  43. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  44. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  45. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  46. package/dist/backend/llvm/call-lifetimes.js +50 -1
  47. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  48. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  49. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  50. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  51. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  52. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  53. package/dist/backend/llvm/classes.d.ts +38 -1
  54. package/dist/backend/llvm/classes.js +185 -35
  55. package/dist/backend/llvm/classes.js.map +1 -1
  56. package/dist/backend/llvm/classes.test.js +79 -17
  57. package/dist/backend/llvm/classes.test.js.map +1 -1
  58. package/dist/backend/llvm/common.d.ts +21 -3
  59. package/dist/backend/llvm/common.js +51 -3
  60. package/dist/backend/llvm/common.js.map +1 -1
  61. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  62. package/dist/backend/llvm/constant-callbacks.js +55 -12
  63. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  64. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  65. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  66. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  67. package/dist/backend/llvm/counted-loops.js +37 -0
  68. package/dist/backend/llvm/counted-loops.js.map +1 -1
  69. package/dist/backend/llvm/dense-array-access.d.ts +15 -4
  70. package/dist/backend/llvm/dense-array-access.js +125 -44
  71. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  72. package/dist/backend/llvm/dense-array-access.test.js +63 -3
  73. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  74. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  75. package/dist/backend/llvm/dense-array-loops.js +162 -0
  76. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  77. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  78. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  79. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  80. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  81. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  82. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  83. package/dist/backend/llvm/dyn.d.ts +37 -4
  84. package/dist/backend/llvm/dyn.js +354 -183
  85. package/dist/backend/llvm/dyn.js.map +1 -1
  86. package/dist/backend/llvm/emit-function.d.ts +64 -0
  87. package/dist/backend/llvm/emit-function.js +1193 -0
  88. package/dist/backend/llvm/emit-function.js.map +1 -0
  89. package/dist/backend/llvm/emit-module.d.ts +24 -0
  90. package/dist/backend/llvm/emit-module.js +1557 -0
  91. package/dist/backend/llvm/emit-module.js.map +1 -0
  92. package/dist/backend/llvm/emit-statements.d.ts +59 -0
  93. package/dist/backend/llvm/emit-statements.js +2041 -0
  94. package/dist/backend/llvm/emit-statements.js.map +1 -0
  95. package/dist/backend/llvm/emitter.d.ts +566 -291
  96. package/dist/backend/llvm/emitter.js +728 -4671
  97. package/dist/backend/llvm/emitter.js.map +1 -1
  98. package/dist/backend/llvm/emitter.test.js +57 -3
  99. package/dist/backend/llvm/emitter.test.js.map +1 -1
  100. package/dist/backend/llvm/expr-async.js +73 -46
  101. package/dist/backend/llvm/expr-async.js.map +1 -1
  102. package/dist/backend/llvm/expr-async.test.js +1 -1
  103. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  104. package/dist/backend/llvm/expr-bytes.js +76 -29
  105. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  106. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  107. package/dist/backend/llvm/expr-callbacks.js +48 -11
  108. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  109. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  110. package/dist/backend/llvm/expr-calls.js +87 -56
  111. package/dist/backend/llvm/expr-calls.js.map +1 -1
  112. package/dist/backend/llvm/expr-calls.test.js +1 -1
  113. package/dist/backend/llvm/expr-containers.js +45 -24
  114. package/dist/backend/llvm/expr-containers.js.map +1 -1
  115. package/dist/backend/llvm/expr-control.js +16 -16
  116. package/dist/backend/llvm/expr-control.js.map +1 -1
  117. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  118. package/dist/backend/llvm/expr-dynamic.js +113 -66
  119. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  120. package/dist/backend/llvm/expr-primitives.js +124 -28
  121. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  122. package/dist/backend/llvm/expr-primitives.test.js +57 -2
  123. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  124. package/dist/backend/llvm/expr-records.d.ts +1 -1
  125. package/dist/backend/llvm/expr-records.js +32 -11
  126. package/dist/backend/llvm/expr-records.js.map +1 -1
  127. package/dist/backend/llvm/expr-stream-bridges.js +65 -27
  128. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  129. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  130. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  131. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  132. package/dist/backend/llvm/int32-abi.test.js +2 -2
  133. package/dist/backend/llvm/integer-clones.js +3 -3
  134. package/dist/backend/llvm/integer-clones.js.map +1 -1
  135. package/dist/backend/llvm/integer-clones.test.js +3 -3
  136. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  137. package/dist/backend/llvm/integer-remainder.js +156 -22
  138. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  139. package/dist/backend/llvm/intern-tables.test.js +1 -1
  140. package/dist/backend/llvm/js-ic.d.ts +18 -0
  141. package/dist/backend/llvm/js-ic.js +712 -0
  142. package/dist/backend/llvm/js-ic.js.map +1 -0
  143. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  144. package/dist/backend/llvm/jsval-encoding.js +20 -0
  145. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  146. package/dist/backend/llvm/jsval.d.ts +12 -0
  147. package/dist/backend/llvm/jsval.js +616 -0
  148. package/dist/backend/llvm/jsval.js.map +1 -0
  149. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  150. package/dist/backend/llvm/lazy-captures.js +39 -17
  151. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  152. package/dist/backend/llvm/lib-abi.js +1 -1
  153. package/dist/backend/llvm/lib-abi.js.map +1 -1
  154. package/dist/backend/llvm/lib-connect.js +1 -1
  155. package/dist/backend/llvm/lib-connect.js.map +1 -1
  156. package/dist/backend/llvm/lib-datagram.js +14 -8
  157. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  158. package/dist/backend/llvm/lib-dispatch.js +189 -23
  159. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  160. package/dist/backend/llvm/lib-filesystem.js +42 -13
  161. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  162. package/dist/backend/llvm/lib-http2.js +3 -3
  163. package/dist/backend/llvm/lib-http2.js.map +1 -1
  164. package/dist/backend/llvm/lib-lookup.js +2 -2
  165. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  166. package/dist/backend/llvm/lib-network.js +56 -22
  167. package/dist/backend/llvm/lib-network.js.map +1 -1
  168. package/dist/backend/llvm/lib-process.js +94 -53
  169. package/dist/backend/llvm/lib-process.js.map +1 -1
  170. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  171. package/dist/backend/llvm/lib-shared.js +209 -6
  172. package/dist/backend/llvm/lib-shared.js.map +1 -1
  173. package/dist/backend/llvm/lib-stream.js +46 -16
  174. package/dist/backend/llvm/lib-stream.js.map +1 -1
  175. package/dist/backend/llvm/lib-test.js +43 -7
  176. package/dist/backend/llvm/lib-test.js.map +1 -1
  177. package/dist/backend/llvm/lib-tls.js +4 -9
  178. package/dist/backend/llvm/lib-tls.js.map +1 -1
  179. package/dist/backend/llvm/local-array-reads.js +42 -33
  180. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  181. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  182. package/dist/backend/llvm/local-extents.d.ts +19 -0
  183. package/dist/backend/llvm/local-extents.js +169 -0
  184. package/dist/backend/llvm/local-extents.js.map +1 -0
  185. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  186. package/dist/backend/llvm/local-extents.test.js +92 -0
  187. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  188. package/dist/backend/llvm/local-union-storage.js +7 -7
  189. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  190. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  191. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  192. package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
  193. package/dist/backend/llvm/map-number-lookup.js +45 -9
  194. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  195. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  196. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  197. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  198. package/dist/backend/llvm/narrow-guards.js +215 -0
  199. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  200. package/dist/backend/llvm/nullable-unions.d.ts +64 -6
  201. package/dist/backend/llvm/nullable-unions.js +103 -6
  202. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  203. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  204. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  205. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  206. package/dist/backend/llvm/publish.d.ts +7 -0
  207. package/dist/backend/llvm/publish.js +50 -19
  208. package/dist/backend/llvm/publish.js.map +1 -1
  209. package/dist/backend/llvm/publish.test.js +1 -1
  210. package/dist/backend/llvm/receivers.d.ts +31 -0
  211. package/dist/backend/llvm/receivers.js +395 -0
  212. package/dist/backend/llvm/receivers.js.map +1 -0
  213. package/dist/backend/llvm/record-results.d.ts +12 -1
  214. package/dist/backend/llvm/record-results.js +64 -4
  215. package/dist/backend/llvm/record-results.js.map +1 -1
  216. package/dist/backend/llvm/reference-effects.js +9 -0
  217. package/dist/backend/llvm/reference-effects.js.map +1 -1
  218. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  219. package/dist/backend/llvm/reference-writes.js +142 -6
  220. package/dist/backend/llvm/reference-writes.js.map +1 -1
  221. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  222. package/dist/backend/llvm/reference-writes.test.js +88 -0
  223. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  224. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  225. package/dist/backend/llvm/regex-matchers.js +33 -0
  226. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  227. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  228. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  229. package/dist/backend/llvm/regions.d.ts +1 -1
  230. package/dist/backend/llvm/regions.js +10 -7
  231. package/dist/backend/llvm/regions.js.map +1 -1
  232. package/dist/backend/llvm/regions.test.js +8 -2
  233. package/dist/backend/llvm/regions.test.js.map +1 -1
  234. package/dist/backend/llvm/shapes.d.ts +74 -45
  235. package/dist/backend/llvm/shapes.js +289 -28
  236. package/dist/backend/llvm/shapes.js.map +1 -1
  237. package/dist/backend/llvm/shapes.test.js +37 -3
  238. package/dist/backend/llvm/shapes.test.js.map +1 -1
  239. package/dist/backend/llvm/speculative-integers.d.ts +20 -1
  240. package/dist/backend/llvm/speculative-integers.js +94 -6
  241. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  242. package/dist/backend/llvm/speculative-integers.test.js +55 -1
  243. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  244. package/dist/backend/llvm/split-loops.js +2 -2
  245. package/dist/backend/llvm/split-loops.js.map +1 -1
  246. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  247. package/dist/backend/llvm/stack-objects.js +133 -10
  248. package/dist/backend/llvm/stack-objects.js.map +1 -1
  249. package/dist/backend/llvm/stack-objects.test.js +55 -1
  250. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  251. package/dist/backend/llvm/stack-unions.test.js +1 -1
  252. package/dist/backend/llvm/string-construction.test.js +1 -1
  253. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  254. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  255. package/dist/backend/llvm/string-reads.d.ts +1 -1
  256. package/dist/backend/llvm/string-reads.js +4 -4
  257. package/dist/backend/llvm/string-reads.js.map +1 -1
  258. package/dist/backend/llvm/string-slices.d.ts +25 -0
  259. package/dist/backend/llvm/string-slices.js +207 -1
  260. package/dist/backend/llvm/string-slices.js.map +1 -1
  261. package/dist/backend/llvm/string-slices.test.js +139 -2
  262. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  263. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  264. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  265. package/dist/backend/llvm/thread-slots.js +142 -0
  266. package/dist/backend/llvm/thread-slots.js.map +1 -0
  267. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  268. package/dist/backend/llvm/thread-slots.test.js +111 -0
  269. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  270. package/dist/backend/llvm/union-repr.d.ts +7 -7
  271. package/dist/backend/llvm/union-repr.js +18 -2
  272. package/dist/backend/llvm/union-repr.js.map +1 -1
  273. package/dist/backend/llvm/union-retype.test.js +17 -3
  274. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  275. package/dist/backend/llvm/walkers.d.ts +2 -2
  276. package/dist/backend/llvm/walkers.js +51 -26
  277. package/dist/backend/llvm/walkers.js.map +1 -1
  278. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  279. package/dist/backend/llvm/wasm-modules.js +66 -0
  280. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  281. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  282. package/dist/backend/llvm/wrapping-sums.js +11 -3
  283. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  284. package/dist/backend/mangle.d.ts +12 -0
  285. package/dist/backend/mangle.js +18 -0
  286. package/dist/backend/mangle.js.map +1 -1
  287. package/dist/backend/may-throw.d.ts +3 -0
  288. package/dist/backend/may-throw.js +4 -2
  289. package/dist/backend/may-throw.js.map +1 -1
  290. package/dist/backend/may-throw.test.js +1 -1
  291. package/dist/backend/native/contracts.d.ts +57 -0
  292. package/dist/backend/native/executable.js +211 -139
  293. package/dist/backend/native/executable.js.map +1 -1
  294. package/dist/backend/native/library.js +2 -0
  295. package/dist/backend/native/library.js.map +1 -1
  296. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  297. package/dist/backend/native/runtime-inputs.js +1 -0
  298. package/dist/backend/native/runtime-inputs.js.map +1 -1
  299. package/dist/backend/native-codegen.d.ts +6 -0
  300. package/dist/backend/native-codegen.js +19 -0
  301. package/dist/backend/native-codegen.js.map +1 -1
  302. package/dist/backend/native-codegen.test.js +27 -0
  303. package/dist/backend/native-codegen.test.js.map +1 -1
  304. package/dist/backend/native-link-info-core.d.ts +48 -0
  305. package/dist/backend/native-link-info-core.js.map +1 -1
  306. package/dist/backend/native-profile.d.ts +32 -0
  307. package/dist/backend/native-profile.js +39 -0
  308. package/dist/backend/native-profile.js.map +1 -0
  309. package/dist/backend/native-profile.test.d.ts +1 -0
  310. package/dist/backend/native-profile.test.js +58 -0
  311. package/dist/backend/native-profile.test.js.map +1 -0
  312. package/dist/backend/native-tools.d.ts +14 -0
  313. package/dist/backend/native-tools.js +13 -0
  314. package/dist/backend/native-tools.js.map +1 -1
  315. package/dist/backend/publication.test.js +1 -1
  316. package/dist/backend/runtime-abi.d.ts +2 -2
  317. package/dist/backend/runtime-abi.js +2 -2
  318. package/dist/backend/runtime-pack-core.d.ts +13 -1
  319. package/dist/backend/runtime-pack-core.js +14 -1
  320. package/dist/backend/runtime-pack-core.js.map +1 -1
  321. package/dist/backend/runtime-pack-native.js +1 -1
  322. package/dist/backend/runtime-pack-native.js.map +1 -1
  323. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  324. package/dist/backend/runtime-pack-native.test.js +31 -0
  325. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  326. package/dist/backend/runtime-pack-targets.test.js +9 -1
  327. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  328. package/dist/backend/runtime-pack.test.js +9 -1
  329. package/dist/backend/runtime-pack.test.js.map +1 -1
  330. package/dist/backend/stack-observations.d.ts +22 -0
  331. package/dist/backend/stack-observations.js +382 -0
  332. package/dist/backend/stack-observations.js.map +1 -0
  333. package/dist/backend/stack-observations.test.d.ts +1 -0
  334. package/dist/backend/stack-observations.test.js +233 -0
  335. package/dist/backend/stack-observations.test.js.map +1 -0
  336. package/dist/backend/target-diagnostics.js +15 -0
  337. package/dist/backend/target-diagnostics.js.map +1 -1
  338. package/dist/backend/target-diagnostics.test.js +1 -1
  339. package/dist/backend/warm-cache.js +8 -0
  340. package/dist/backend/warm-cache.js.map +1 -1
  341. package/dist/backend/young-nursery.d.ts +7 -0
  342. package/dist/backend/young-nursery.js +10 -0
  343. package/dist/backend/young-nursery.js.map +1 -0
  344. package/dist/cli/command.js +106 -4
  345. package/dist/cli/command.js.map +1 -1
  346. package/dist/cli/host.d.ts +3 -0
  347. package/dist/cli/output-options.d.ts +2 -0
  348. package/dist/cli/output-options.js +9 -0
  349. package/dist/cli/output-options.js.map +1 -1
  350. package/dist/cli/usage.d.ts +21 -1
  351. package/dist/cli/usage.js +43 -1
  352. package/dist/cli/usage.js.map +1 -1
  353. package/dist/compat/fetch-profile.js +10 -1
  354. package/dist/compat/fetch-profile.js.map +1 -1
  355. package/dist/compile-types.d.ts +22 -0
  356. package/dist/contracts/check.js +25 -8
  357. package/dist/contracts/check.js.map +1 -1
  358. package/dist/contracts/int32-elements.d.ts +115 -0
  359. package/dist/contracts/int32-elements.js +1179 -0
  360. package/dist/contracts/int32-elements.js.map +1 -0
  361. package/dist/coverage/report.d.ts +16 -0
  362. package/dist/coverage/report.js +182 -1
  363. package/dist/coverage/report.js.map +1 -1
  364. package/dist/coverage/surface-manifest.js +16 -3
  365. package/dist/coverage/surface-manifest.js.map +1 -1
  366. package/dist/coverage/verdict-cache.d.ts +2 -0
  367. package/dist/coverage/verdict-cache.js +12 -0
  368. package/dist/coverage/verdict-cache.js.map +1 -1
  369. package/dist/coverage/verdict-cache.test.js +2 -1
  370. package/dist/coverage/verdict-cache.test.js.map +1 -1
  371. package/dist/diagnostics/diagnostic.d.ts +10 -6
  372. package/dist/diagnostics/diagnostic.js +29 -21
  373. package/dist/diagnostics/diagnostic.js.map +1 -1
  374. package/dist/diagnostics/envelope.d.ts +39 -2
  375. package/dist/diagnostics/envelope.js.map +1 -1
  376. package/dist/diagnostics/render.d.ts +7 -0
  377. package/dist/diagnostics/render.js +50 -13
  378. package/dist/diagnostics/render.js.map +1 -1
  379. package/dist/diagnostics/render.test.d.ts +1 -0
  380. package/dist/diagnostics/render.test.js +49 -0
  381. package/dist/diagnostics/render.test.js.map +1 -0
  382. package/dist/executable/executable-cache.d.ts +27 -0
  383. package/dist/executable/executable-cache.js +19 -1
  384. package/dist/executable/executable-cache.js.map +1 -1
  385. package/dist/executable/executable-cache.test.js +12 -1
  386. package/dist/executable/executable-cache.test.js.map +1 -1
  387. package/dist/executable/prepare.js +2 -1
  388. package/dist/executable/prepare.js.map +1 -1
  389. package/dist/frontend/analysis.js +6 -1
  390. package/dist/frontend/analysis.js.map +1 -1
  391. package/dist/frontend/arguments-usage.d.ts +8 -0
  392. package/dist/frontend/arguments-usage.js +98 -0
  393. package/dist/frontend/arguments-usage.js.map +1 -1
  394. package/dist/frontend/arguments-usage.test.d.ts +1 -0
  395. package/dist/frontend/arguments-usage.test.js +32 -0
  396. package/dist/frontend/arguments-usage.test.js.map +1 -0
  397. package/dist/frontend/builtin-modules.d.ts +16 -2
  398. package/dist/frontend/builtin-modules.js +40 -7
  399. package/dist/frontend/builtin-modules.js.map +1 -1
  400. package/dist/frontend/builtin-package-aliases.d.ts +24 -0
  401. package/dist/frontend/builtin-package-aliases.js +133 -0
  402. package/dist/frontend/builtin-package-aliases.js.map +1 -0
  403. package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
  404. package/dist/frontend/builtin-package-aliases.test.js +48 -0
  405. package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
  406. package/dist/frontend/cjs-syntax.js +52 -51
  407. package/dist/frontend/cjs-syntax.js.map +1 -1
  408. package/dist/frontend/contract-types.d.ts +3 -0
  409. package/dist/frontend/contract-types.js +36 -7
  410. package/dist/frontend/contract-types.js.map +1 -1
  411. package/dist/frontend/dts-paths.d.ts +4 -0
  412. package/dist/frontend/dts-paths.js +9 -1
  413. package/dist/frontend/dts-paths.js.map +1 -1
  414. package/dist/frontend/experimental-import.d.ts +5 -1
  415. package/dist/frontend/experimental-import.js +26 -7
  416. package/dist/frontend/experimental-import.js.map +1 -1
  417. package/dist/frontend/fork-target.js +20 -22
  418. package/dist/frontend/fork-target.js.map +1 -1
  419. package/dist/frontend/fork-target.test.js +2 -1
  420. package/dist/frontend/fork-target.test.js.map +1 -1
  421. package/dist/frontend/function-completion.js +6 -6
  422. package/dist/frontend/function-completion.js.map +1 -1
  423. package/dist/frontend/helper-tokens.js +15 -3
  424. package/dist/frontend/helper-tokens.js.map +1 -1
  425. package/dist/frontend/helper-tokens.test.js +7 -1
  426. package/dist/frontend/helper-tokens.test.js.map +1 -1
  427. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  428. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  429. package/dist/frontend/input-tracker.d.ts +3 -0
  430. package/dist/frontend/input-tracker.js +32 -3
  431. package/dist/frontend/input-tracker.js.map +1 -1
  432. package/dist/frontend/lib-contract.js +36 -32
  433. package/dist/frontend/lib-contract.js.map +1 -1
  434. package/dist/frontend/lib-exports.js +3 -3
  435. package/dist/frontend/lib-exports.js.map +1 -1
  436. package/dist/frontend/lowering/array-values.d.ts +8 -3
  437. package/dist/frontend/lowering/array-values.js +60 -11
  438. package/dist/frontend/lowering/array-values.js.map +1 -1
  439. package/dist/frontend/lowering/assert-instances.js +4 -4
  440. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  441. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  442. package/dist/frontend/lowering/assertion-identity.js +70 -0
  443. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  444. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  445. package/dist/frontend/lowering/assertion-members.js +185 -0
  446. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  447. package/dist/frontend/lowering/binding-analysis.js +27 -20
  448. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  449. package/dist/frontend/lowering/builtin-calls.js +63 -5
  450. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  451. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  452. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  453. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  454. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  455. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  457. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  459. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/blob.js +8 -6
  461. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  462. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +31 -0
  463. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +205 -0
  464. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  465. package/dist/frontend/lowering/builtins/callable-aliases.js +17 -5
  466. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  468. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  470. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  471. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  473. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  475. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  476. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  478. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  479. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
  481. package/dist/frontend/lowering/builtins/compression.js +107 -44
  482. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  483. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  484. package/dist/frontend/lowering/builtins/constants.js +28 -7
  485. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  486. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  487. package/dist/frontend/lowering/builtins/crypto.js +215 -38
  488. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  489. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  490. package/dist/frontend/lowering/builtins/dates.js +92 -16
  491. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  492. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  493. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  494. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  495. package/dist/frontend/lowering/builtins/ecdh.d.ts +10 -0
  496. package/dist/frontend/lowering/builtins/ecdh.js +208 -0
  497. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
  498. package/dist/frontend/lowering/builtins/environment.js +3 -3
  499. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  500. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  501. package/dist/frontend/lowering/builtins/errors.js +169 -3
  502. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  503. package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
  504. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  505. package/dist/frontend/lowering/builtins/filesystem.js +77 -77
  506. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  508. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  510. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  512. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  513. package/dist/frontend/lowering/builtins/json.js +284 -24
  514. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  515. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  516. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  517. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  518. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  519. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/module-calls.js +55 -44
  521. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  522. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  523. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  524. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  526. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  527. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  529. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  530. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  532. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  533. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  534. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  535. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  536. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  537. package/dist/frontend/lowering/builtins/performance.js +259 -8
  538. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  539. package/dist/frontend/lowering/builtins/process.d.ts +41 -1
  540. package/dist/frontend/lowering/builtins/process.js +505 -99
  541. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  542. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  543. package/dist/frontend/lowering/builtins/promises.js +326 -43
  544. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  545. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +40 -0
  546. package/dist/frontend/lowering/builtins/promisify-callback.js +338 -0
  547. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  548. package/dist/frontend/lowering/builtins/properties.js +37 -1
  549. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  550. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  551. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  552. package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
  553. package/dist/frontend/lowering/builtins/readline.js +136 -39
  554. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  555. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  556. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  557. package/dist/frontend/lowering/builtins/reflection.js +42 -14
  558. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  559. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  560. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  561. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  562. package/dist/frontend/lowering/builtins/strings.js +101 -12
  563. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  564. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  565. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  566. package/dist/frontend/lowering/builtins/timers.js +79 -30
  567. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  568. package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
  569. package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
  570. package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
  571. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  572. package/dist/frontend/lowering/builtins/url.js +120 -17
  573. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  574. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  575. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  576. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  577. package/dist/frontend/lowering/builtins/v8.js +105 -0
  578. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  579. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  580. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  581. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  582. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  583. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  584. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  585. package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
  586. package/dist/frontend/lowering/builtins/workers.js +193 -8
  587. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  588. package/dist/frontend/lowering/call-arguments.js +69 -14
  589. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  590. package/dist/frontend/lowering/call-signatures.d.ts +23 -1
  591. package/dist/frontend/lowering/call-signatures.js +379 -55
  592. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  593. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  594. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  595. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  596. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  597. package/dist/frontend/lowering/cjs-exports-object.js +561 -0
  598. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  599. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  600. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  601. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  602. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  603. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  604. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  605. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  606. package/dist/frontend/lowering/class-attributes.js +378 -0
  607. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  608. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  609. package/dist/frontend/lowering/class-callbacks.js +21 -10
  610. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  611. package/dist/frontend/lowering/class-construction.js +49 -4
  612. package/dist/frontend/lowering/class-construction.js.map +1 -1
  613. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  614. package/dist/frontend/lowering/class-descriptors.js +8 -8
  615. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  616. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  617. package/dist/frontend/lowering/class-dynamic-dispatch.js +1124 -90
  618. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  619. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  620. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  621. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  622. package/dist/frontend/lowering/class-iterables.js +31 -0
  623. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  624. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  625. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  626. package/dist/frontend/lowering/class-method-values.js +56 -10
  627. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  628. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  629. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  630. package/dist/frontend/lowering/class-protocols.d.ts +10 -0
  631. package/dist/frontend/lowering/class-protocols.js +76 -45
  632. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  633. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  634. package/dist/frontend/lowering/class-prototypes.js +86 -19
  635. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  636. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  637. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  638. package/dist/frontend/lowering/class-static-data.js +2 -2
  639. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  640. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  641. package/dist/frontend/lowering/class-to-primitive.js +264 -0
  642. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  643. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  644. package/dist/frontend/lowering/class-unions.js +102 -1
  645. package/dist/frontend/lowering/class-unions.js.map +1 -1
  646. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  647. package/dist/frontend/lowering/code-generation.js +127 -0
  648. package/dist/frontend/lowering/code-generation.js.map +1 -0
  649. package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
  650. package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
  651. package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
  652. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  653. package/dist/frontend/lowering/coercions/function-adapters.js +239 -68
  654. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  655. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  656. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  657. package/dist/frontend/lowering/coercions/structural.js +35 -3
  658. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  659. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  660. package/dist/frontend/lowering/coercions/unions.js +57 -1
  661. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  662. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  663. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  664. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  665. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  666. package/dist/frontend/lowering/construction-escapes.js +8 -8
  667. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  668. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  669. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  670. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  671. package/dist/frontend/lowering/constructor-returns.js +477 -0
  672. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  673. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  674. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  675. package/dist/frontend/lowering/containers/array-callbacks.d.ts +17 -0
  676. package/dist/frontend/lowering/containers/array-callbacks.js +287 -118
  677. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  678. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  679. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  680. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  681. package/dist/frontend/lowering/containers/array-construction.js +58 -13
  682. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  683. package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
  684. package/dist/frontend/lowering/containers/array-from-async.js +159 -14
  685. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  686. package/dist/frontend/lowering/containers/array-methods.js +94 -77
  687. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  688. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  689. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  690. package/dist/frontend/lowering/containers/bytes.d.ts +9 -0
  691. package/dist/frontend/lowering/containers/bytes.js +649 -113
  692. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  693. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  694. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  695. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  696. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  697. package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
  698. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  699. package/dist/frontend/lowering/containers/collection-methods.js +126 -28
  700. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  701. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  702. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  703. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  704. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  705. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  706. package/dist/frontend/lowering/containers/for-of.js +19 -19
  707. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  708. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  709. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  710. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  711. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  712. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  713. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  714. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  715. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  716. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  717. package/dist/frontend/lowering/containers/string-and-regexp.js +455 -30
  718. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  719. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  720. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  721. package/dist/frontend/lowering/cycle-initialization.d.ts +30 -10
  722. package/dist/frontend/lowering/cycle-initialization.js +191 -35
  723. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  724. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  725. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  726. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  727. package/dist/frontend/lowering/devirtualize.js +27 -7
  728. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  729. package/dist/frontend/lowering/divergences.d.ts +0 -5
  730. package/dist/frontend/lowering/divergences.js +62 -125
  731. package/dist/frontend/lowering/divergences.js.map +1 -1
  732. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  733. package/dist/frontend/lowering/dyn-streams.js +257 -0
  734. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  735. package/dist/frontend/lowering/error-methods.js +4 -1
  736. package/dist/frontend/lowering/error-methods.js.map +1 -1
  737. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  738. package/dist/frontend/lowering/error-name-order.js +93 -0
  739. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  740. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  741. package/dist/frontend/lowering/expressions/array-literals.js +723 -0
  742. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  743. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  744. package/dist/frontend/lowering/expressions/binary.js +2557 -0
  745. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  746. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  747. package/dist/frontend/lowering/expressions/element-access.js +1804 -0
  748. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  749. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  750. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  751. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  752. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  753. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  754. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  755. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  756. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  757. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +52 -0
  758. package/dist/frontend/lowering/expressions/keyed-field-targets.js +307 -0
  759. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  760. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  761. package/dist/frontend/lowering/expressions/narrowing.js +1337 -0
  762. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  763. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  764. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  765. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  766. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  767. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  768. package/dist/frontend/lowering/expressions/object-literals.js +301 -86
  769. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  770. package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -2
  771. package/dist/frontend/lowering/expressions/optional-chains.js +103 -17
  772. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  773. package/dist/frontend/lowering/expressions/property-access.d.ts +115 -0
  774. package/dist/frontend/lowering/expressions/property-access.js +3787 -0
  775. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  776. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  777. package/dist/frontend/lowering/expressions/relational.js +1724 -0
  778. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  779. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  780. package/dist/frontend/lowering/expressions/typeof.js +551 -0
  781. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  782. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  783. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  784. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  785. package/dist/frontend/lowering/expressions/updates.js +780 -0
  786. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  787. package/dist/frontend/lowering/function-context.d.ts +10 -0
  788. package/dist/frontend/lowering/function-context.js +11 -1
  789. package/dist/frontend/lowering/function-context.js.map +1 -1
  790. package/dist/frontend/lowering/function-returns.js +52 -28
  791. package/dist/frontend/lowering/function-returns.js.map +1 -1
  792. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  793. package/dist/frontend/lowering/general-streams.js +108 -0
  794. package/dist/frontend/lowering/general-streams.js.map +1 -0
  795. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  796. package/dist/frontend/lowering/generator-delegation.js +191 -1
  797. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  798. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  799. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  800. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  801. package/dist/frontend/lowering/generic-functions.d.ts +43 -0
  802. package/dist/frontend/lowering/generic-functions.js +593 -118
  803. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  804. package/dist/frontend/lowering/handle-properties.d.ts +24 -0
  805. package/dist/frontend/lowering/handle-properties.js +281 -0
  806. package/dist/frontend/lowering/handle-properties.js.map +1 -0
  807. package/dist/frontend/lowering/import-meta.js +2 -2
  808. package/dist/frontend/lowering/import-meta.js.map +1 -1
  809. package/dist/frontend/lowering/intern-tables.js +10 -9
  810. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  811. package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
  812. package/dist/frontend/lowering/iterable-spelling.js +38 -0
  813. package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
  814. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  815. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  816. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  817. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  818. package/dist/frontend/lowering/js-class-fields.js +170 -0
  819. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  820. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  821. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  822. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  823. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  824. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  825. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  826. package/dist/frontend/lowering/json-require.d.ts +22 -0
  827. package/dist/frontend/lowering/json-require.js +131 -0
  828. package/dist/frontend/lowering/json-require.js.map +1 -0
  829. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  830. package/dist/frontend/lowering/key-order-witness.js +641 -0
  831. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  832. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  833. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  834. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  835. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  836. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  837. package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
  838. package/dist/frontend/lowering/lower-array-sort.js +117 -21
  839. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  840. package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
  841. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  842. package/dist/frontend/lowering/lower-assert.js +61 -60
  843. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  844. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  845. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  846. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  847. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  848. package/dist/frontend/lowering/lower-builtin-values.js +33 -3
  849. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  850. package/dist/frontend/lowering/lower-calls.js +1404 -448
  851. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  852. package/dist/frontend/lowering/lower-classes.d.ts +54 -3
  853. package/dist/frontend/lowering/lower-classes.js +1529 -472
  854. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  855. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  856. package/dist/frontend/lowering/lower-comptime.js +111 -13
  857. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  858. package/dist/frontend/lowering/lower-console.js +13 -11
  859. package/dist/frontend/lowering/lower-console.js.map +1 -1
  860. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  861. package/dist/frontend/lowering/lower-dgram.js +241 -21
  862. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  863. package/dist/frontend/lowering/lower-enums.js +113 -14
  864. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  865. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  866. package/dist/frontend/lowering/lower-event-emitter.js +258 -70
  867. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  868. package/dist/frontend/lowering/lower-event-target.js +2 -2
  869. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  870. package/dist/frontend/lowering/lower-expando.js +17 -13
  871. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  872. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  873. package/dist/frontend/lowering/lower-exprs.js +1509 -12486
  874. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  875. package/dist/frontend/lowering/lower-functions.js +72 -22
  876. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  877. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  878. package/dist/frontend/lowering/lower-generators.js +39 -20
  879. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  880. package/dist/frontend/lowering/lower-global-value.js +5 -1
  881. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  882. package/dist/frontend/lowering/lower-inspect.js +900 -107
  883. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  884. package/dist/frontend/lowering/lower-mixins.js +23 -20
  885. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  886. package/dist/frontend/lowering/lower-mock.d.ts +8 -1
  887. package/dist/frontend/lowering/lower-mock.js +185 -18
  888. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  889. package/dist/frontend/lowering/lower-modules.d.ts +11 -3
  890. package/dist/frontend/lowering/lower-modules.js +445 -94
  891. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  892. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  893. package/dist/frontend/lowering/lower-namespaces.js +65 -33
  894. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  895. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  896. package/dist/frontend/lowering/lower-node-module.js +147 -14
  897. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  898. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  899. package/dist/frontend/lowering/lower-server.js +514 -101
  900. package/dist/frontend/lowering/lower-server.js.map +1 -1
  901. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  902. package/dist/frontend/lowering/lower-stdlib.js +179 -118
  903. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  904. package/dist/frontend/lowering/lower-stmts.d.ts +30 -7
  905. package/dist/frontend/lowering/lower-stmts.js +1950 -433
  906. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  907. package/dist/frontend/lowering/lower-stream.d.ts +3 -0
  908. package/dist/frontend/lowering/lower-stream.js +398 -56
  909. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  910. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  911. package/dist/frontend/lowering/lower-test.js +437 -62
  912. package/dist/frontend/lowering/lower-test.js.map +1 -1
  913. package/dist/frontend/lowering/lower-timers.js +96 -32
  914. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  915. package/dist/frontend/lowering/lower-url.js +1 -1
  916. package/dist/frontend/lowering/lower-url.js.map +1 -1
  917. package/dist/frontend/lowering/lowerer.d.ts +424 -27
  918. package/dist/frontend/lowering/lowerer.js +2062 -310
  919. package/dist/frontend/lowering/lowerer.js.map +1 -1
  920. package/dist/frontend/lowering/lowerer.test.js +10 -4
  921. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  922. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  923. package/dist/frontend/lowering/maybe-promise.js +249 -0
  924. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  925. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  926. package/dist/frontend/lowering/module-member-this.js +262 -0
  927. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  928. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  929. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  930. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  931. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  932. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  933. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  934. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  935. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  936. package/dist/frontend/lowering/native-ffi.js +11 -11
  937. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  938. package/dist/frontend/lowering/object-factory-new.js +6 -8
  939. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  940. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  941. package/dist/frontend/lowering/private-brands.js +265 -0
  942. package/dist/frontend/lowering/private-brands.js.map +1 -0
  943. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  944. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  945. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  946. package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
  947. package/dist/frontend/lowering/rebindable-functions.js +54 -0
  948. package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
  949. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  950. package/dist/frontend/lowering/require-initialization.js +246 -0
  951. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  952. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  953. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  954. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  955. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  956. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  957. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  958. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  959. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  960. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  961. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  962. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  963. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  964. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  965. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  966. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  967. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  968. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  969. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  970. package/dist/frontend/lowering/split-consumers.js +4 -4
  971. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  972. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  973. package/dist/frontend/lowering/static-function-names.js +212 -0
  974. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  975. package/dist/frontend/lowering/static-this.js +6 -6
  976. package/dist/frontend/lowering/static-this.js.map +1 -1
  977. package/dist/frontend/lowering/static-typeof.d.ts +26 -0
  978. package/dist/frontend/lowering/static-typeof.js +133 -0
  979. package/dist/frontend/lowering/static-typeof.js.map +1 -0
  980. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  981. package/dist/frontend/lowering/strict-mode.js +31 -0
  982. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  983. package/dist/frontend/lowering/string-index-bounds.js +13 -12
  984. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  985. package/dist/frontend/lowering/string-index.d.ts +12 -0
  986. package/dist/frontend/lowering/string-index.js +72 -1
  987. package/dist/frontend/lowering/string-index.js.map +1 -1
  988. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  989. package/dist/frontend/lowering/surfaces.js +282 -45
  990. package/dist/frontend/lowering/surfaces.js.map +1 -1
  991. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  992. package/dist/frontend/lowering/symbol-fields.js +204 -36
  993. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  994. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  995. package/dist/frontend/lowering/symbol-methods.js +24 -6
  996. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  997. package/dist/frontend/lowering/thenables.d.ts +16 -0
  998. package/dist/frontend/lowering/thenables.js +124 -0
  999. package/dist/frontend/lowering/thenables.js.map +1 -0
  1000. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  1001. package/dist/frontend/lowering/thread-slots.js +208 -0
  1002. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  1003. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  1004. package/dist/frontend/lowering/typed-arguments.js +472 -0
  1005. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  1006. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  1007. package/dist/frontend/lowering/union-retag.js +27 -0
  1008. package/dist/frontend/lowering/union-retag.js.map +1 -1
  1009. package/dist/frontend/lowering/union-retag.test.js +24 -1
  1010. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  1011. package/dist/frontend/lowering/var-hoisting.js +6 -6
  1012. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  1013. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  1014. package/dist/frontend/mock-shapes.js +13 -6
  1015. package/dist/frontend/mock-shapes.js.map +1 -1
  1016. package/dist/frontend/module-source-candidates.js +1 -1
  1017. package/dist/frontend/module-source-candidates.js.map +1 -1
  1018. package/dist/frontend/module-source-candidates.test.js +2 -1
  1019. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  1020. package/dist/frontend/module-syntax.js +8 -8
  1021. package/dist/frontend/module-syntax.js.map +1 -1
  1022. package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
  1023. package/dist/frontend/npm-static-builtin-aliases.js +65 -0
  1024. package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
  1025. package/dist/frontend/npm-static-bundled-chunks.d.ts +58 -0
  1026. package/dist/frontend/npm-static-bundled-chunks.js +981 -0
  1027. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  1028. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  1029. package/dist/frontend/npm-static-bundled-chunks.test.js +399 -0
  1030. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  1031. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  1032. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  1033. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  1034. package/dist/frontend/npm-static-bundled-esm.js +988 -0
  1035. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  1036. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  1037. package/dist/frontend/npm-static-bundled-esm.test.js +336 -0
  1038. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  1039. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  1040. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  1041. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  1042. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  1043. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  1044. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  1045. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  1046. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  1047. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  1048. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  1049. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  1050. package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
  1051. package/dist/frontend/npm-static-enum-iife.js +280 -0
  1052. package/dist/frontend/npm-static-enum-iife.js.map +1 -0
  1053. package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
  1054. package/dist/frontend/npm-static-enum-iife.test.js +116 -0
  1055. package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
  1056. package/dist/frontend/npm-static-prune.js +36 -24
  1057. package/dist/frontend/npm-static-prune.js.map +1 -1
  1058. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  1059. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  1060. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  1061. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  1062. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  1063. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  1064. package/dist/frontend/npm-static-subtyping.js +7 -9
  1065. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  1066. package/dist/frontend/npm-static.d.ts +25 -1
  1067. package/dist/frontend/npm-static.js +212 -16
  1068. package/dist/frontend/npm-static.js.map +1 -1
  1069. package/dist/frontend/npm-static.test.js +22 -1
  1070. package/dist/frontend/npm-static.test.js.map +1 -1
  1071. package/dist/frontend/npm.js +13 -0
  1072. package/dist/frontend/npm.js.map +1 -1
  1073. package/dist/frontend/package-shims.d.ts +47 -0
  1074. package/dist/frontend/package-shims.js +300 -0
  1075. package/dist/frontend/package-shims.js.map +1 -0
  1076. package/dist/frontend/pipeline.js +230 -26
  1077. package/dist/frontend/pipeline.js.map +1 -1
  1078. package/dist/frontend/pipeline.test.js +22 -1
  1079. package/dist/frontend/pipeline.test.js.map +1 -1
  1080. package/dist/frontend/program-analysis.d.ts +6 -1
  1081. package/dist/frontend/program-analysis.js +7 -0
  1082. package/dist/frontend/program-analysis.js.map +1 -1
  1083. package/dist/frontend/program.d.ts +100 -2
  1084. package/dist/frontend/program.js +1627 -262
  1085. package/dist/frontend/program.js.map +1 -1
  1086. package/dist/frontend/program.test.js +76 -6
  1087. package/dist/frontend/program.test.js.map +1 -1
  1088. package/dist/frontend/resolve.js +49 -2
  1089. package/dist/frontend/resolve.js.map +1 -1
  1090. package/dist/frontend/resolve.test.js +49 -0
  1091. package/dist/frontend/resolve.test.js.map +1 -1
  1092. package/dist/frontend/services.d.ts +26 -1
  1093. package/dist/frontend/services.js +59 -3
  1094. package/dist/frontend/services.js.map +1 -1
  1095. package/dist/frontend/services.test.js +2 -1
  1096. package/dist/frontend/services.test.js.map +1 -1
  1097. package/dist/frontend/threads-import.js +1 -1
  1098. package/dist/frontend/threads-import.js.map +1 -1
  1099. package/dist/frontend/tier-analysis.d.ts +71 -0
  1100. package/dist/frontend/tier-analysis.js +522 -0
  1101. package/dist/frontend/tier-analysis.js.map +1 -0
  1102. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1103. package/dist/frontend/ts7/api-conformance.js +7 -0
  1104. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1105. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1106. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1107. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1108. package/dist/frontend/ts7/ast-node.js +64 -18
  1109. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1110. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1111. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1112. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1113. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1114. package/dist/frontend/ts7/ast.d.ts +1 -0
  1115. package/dist/frontend/ts7/ast.js +3 -2
  1116. package/dist/frontend/ts7/ast.js.map +1 -1
  1117. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1118. package/dist/frontend/ts7/checker-backend.js +88 -0
  1119. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1120. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1121. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1122. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1123. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1124. package/dist/frontend/ts7/checker-cache.js +0 -6
  1125. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1126. package/dist/frontend/ts7/checker.d.ts +18 -11
  1127. package/dist/frontend/ts7/checker.js +42 -55
  1128. package/dist/frontend/ts7/checker.js.map +1 -1
  1129. package/dist/frontend/ts7/checker.test.js +10 -7
  1130. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1131. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1132. package/dist/frontend/ts7/diagnostic.js +22 -0
  1133. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1134. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1135. package/dist/frontend/ts7/node-functions.js +18 -0
  1136. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1137. package/dist/frontend/ts7/program-host.d.ts +10 -5
  1138. package/dist/frontend/ts7/program-host.js +19 -0
  1139. package/dist/frontend/ts7/program-host.js.map +1 -1
  1140. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1141. package/dist/frontend/ts7/rpc-api.js +8 -1
  1142. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1143. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1144. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1145. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1146. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1147. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1148. package/dist/frontend/ts7/semantic-model.d.ts +57 -24
  1149. package/dist/frontend/ts7/semantic-model.js +114 -16
  1150. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1151. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1152. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1153. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1154. package/dist/frontend/ts7/semantic-types.js +1 -1
  1155. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1156. package/dist/frontend/ts7/session.d.ts +30 -15
  1157. package/dist/frontend/ts7/session.js +8 -5
  1158. package/dist/frontend/ts7/session.js.map +1 -1
  1159. package/dist/frontend/ts7/session.test.js +9 -5
  1160. package/dist/frontend/ts7/session.test.js.map +1 -1
  1161. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1162. package/dist/frontend/ts7/source-parser.js +24 -3
  1163. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1164. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1165. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1166. package/dist/frontend/type-mapper.d.ts +122 -2
  1167. package/dist/frontend/type-mapper.js +2735 -723
  1168. package/dist/frontend/type-mapper.js.map +1 -1
  1169. package/dist/frontend/type-only-imports.d.ts +28 -0
  1170. package/dist/frontend/type-only-imports.js +122 -0
  1171. package/dist/frontend/type-only-imports.js.map +1 -0
  1172. package/dist/frontend/worker-target.js +8 -8
  1173. package/dist/frontend/worker-target.js.map +1 -1
  1174. package/dist/index.d.ts +4 -1
  1175. package/dist/index.js +87 -8
  1176. package/dist/index.js.map +1 -1
  1177. package/dist/ir/analysis.js +4 -2
  1178. package/dist/ir/analysis.js.map +1 -1
  1179. package/dist/ir/api.d.ts +1 -1
  1180. package/dist/ir/api.js +1 -1
  1181. package/dist/ir/api.js.map +1 -1
  1182. package/dist/ir/array-length-stability.d.ts +31 -0
  1183. package/dist/ir/array-length-stability.js +249 -0
  1184. package/dist/ir/array-length-stability.js.map +1 -0
  1185. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1186. package/dist/ir/array-length-stability.test.js +134 -0
  1187. package/dist/ir/array-length-stability.test.js.map +1 -0
  1188. package/dist/ir/build.d.ts +2 -2
  1189. package/dist/ir/build.js +1 -1
  1190. package/dist/ir/build.js.map +1 -1
  1191. package/dist/ir/builtin-effects.js +116 -0
  1192. package/dist/ir/builtin-effects.js.map +1 -1
  1193. package/dist/ir/builtin-signatures.d.ts +1 -1
  1194. package/dist/ir/builtin-signatures.js +540 -29
  1195. package/dist/ir/builtin-signatures.js.map +1 -1
  1196. package/dist/ir/byte-numbers.js +3 -0
  1197. package/dist/ir/byte-numbers.js.map +1 -1
  1198. package/dist/ir/callback-specialization.d.ts +37 -0
  1199. package/dist/ir/callback-specialization.js +459 -0
  1200. package/dist/ir/callback-specialization.js.map +1 -0
  1201. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1202. package/dist/ir/callback-specialization.test.js +208 -0
  1203. package/dist/ir/callback-specialization.test.js.map +1 -0
  1204. package/dist/ir/capture-values.d.ts +0 -1
  1205. package/dist/ir/capture-values.js +51 -40
  1206. package/dist/ir/capture-values.js.map +1 -1
  1207. package/dist/ir/constant-globals.test.js +1 -1
  1208. package/dist/ir/constant-tables.test.js +1 -1
  1209. package/dist/ir/field-values.test.js +1 -1
  1210. package/dist/ir/final-fields.test.js +1 -1
  1211. package/dist/ir/function-references.test.js +9 -1
  1212. package/dist/ir/function-references.test.js.map +1 -1
  1213. package/dist/ir/init-only-globals.test.js +1 -1
  1214. package/dist/ir/initializer-bindings.test.js +1 -1
  1215. package/dist/ir/int32-slots.d.ts +14 -0
  1216. package/dist/ir/int32-slots.js +97 -14
  1217. package/dist/ir/int32-slots.js.map +1 -1
  1218. package/dist/ir/int32-slots.test.js +1 -1
  1219. package/dist/ir/integer-loop-facts.d.ts +7 -0
  1220. package/dist/ir/integer-loop-facts.js +103 -17
  1221. package/dist/ir/integer-loop-facts.js.map +1 -1
  1222. package/dist/ir/integer-loops.d.ts +1 -1
  1223. package/dist/ir/integer-loops.js +39 -9
  1224. package/dist/ir/integer-loops.js.map +1 -1
  1225. package/dist/ir/integer-loops.test.js +104 -0
  1226. package/dist/ir/integer-loops.test.js.map +1 -1
  1227. package/dist/ir/integer-ranges.d.ts +13 -1
  1228. package/dist/ir/integer-ranges.js +125 -26
  1229. package/dist/ir/integer-ranges.js.map +1 -1
  1230. package/dist/ir/integer-ranges.test.js +273 -2
  1231. package/dist/ir/integer-ranges.test.js.map +1 -1
  1232. package/dist/ir/intrinsic-signatures.js +6 -0
  1233. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1234. package/dist/ir/ir.d.ts +221 -58
  1235. package/dist/ir/ir.js +127 -12
  1236. package/dist/ir/ir.js.map +1 -1
  1237. package/dist/ir/ir.test.js +10 -0
  1238. package/dist/ir/ir.test.js.map +1 -1
  1239. package/dist/ir/js-ic.d.ts +52 -0
  1240. package/dist/ir/js-ic.js +199 -0
  1241. package/dist/ir/js-ic.js.map +1 -0
  1242. package/dist/ir/js-ic.test.d.ts +1 -0
  1243. package/dist/ir/js-ic.test.js +148 -0
  1244. package/dist/ir/js-ic.test.js.map +1 -0
  1245. package/dist/ir/jsval.d.ts +8 -0
  1246. package/dist/ir/jsval.js +399 -0
  1247. package/dist/ir/jsval.js.map +1 -0
  1248. package/dist/ir/jsval.test.d.ts +1 -0
  1249. package/dist/ir/jsval.test.js +239 -0
  1250. package/dist/ir/jsval.test.js.map +1 -0
  1251. package/dist/ir/runtime-features.d.ts +183 -33
  1252. package/dist/ir/runtime-features.js +795 -422
  1253. package/dist/ir/runtime-features.js.map +1 -1
  1254. package/dist/ir/scalar-records.test.js +1 -1
  1255. package/dist/ir/self-captures.d.ts +33 -0
  1256. package/dist/ir/self-captures.js +245 -0
  1257. package/dist/ir/self-captures.js.map +1 -0
  1258. package/dist/ir/self-captures.test.d.ts +1 -0
  1259. package/dist/ir/self-captures.test.js +135 -0
  1260. package/dist/ir/self-captures.test.js.map +1 -0
  1261. package/dist/ir/serialize.d.ts +1 -1
  1262. package/dist/ir/serialize.js +7 -4
  1263. package/dist/ir/serialize.js.map +1 -1
  1264. package/dist/ir/tiers.d.ts +26 -0
  1265. package/dist/ir/tiers.js +101 -0
  1266. package/dist/ir/tiers.js.map +1 -0
  1267. package/dist/ir/tiers.test.d.ts +1 -0
  1268. package/dist/ir/tiers.test.js +140 -0
  1269. package/dist/ir/tiers.test.js.map +1 -0
  1270. package/dist/ir/traverse.js +201 -150
  1271. package/dist/ir/traverse.js.map +1 -1
  1272. package/dist/ir/traverse.test.js +33 -30
  1273. package/dist/ir/traverse.test.js.map +1 -1
  1274. package/dist/ir/unshare.js +65 -3
  1275. package/dist/ir/unshare.js.map +1 -1
  1276. package/dist/ir/unshare.test.js +1 -1
  1277. package/dist/ir/validate.js +196 -76
  1278. package/dist/ir/validate.js.map +1 -1
  1279. package/dist/ir/validate.test.js +41 -11
  1280. package/dist/ir/validate.test.js.map +1 -1
  1281. package/dist/library/fence-eval.test.js +1 -1
  1282. package/dist/library/int-infer.test.js +4 -4
  1283. package/dist/library/ir-policy.js +14 -0
  1284. package/dist/library/ir-policy.js.map +1 -1
  1285. package/dist/library/library-cache.d.ts +1 -0
  1286. package/dist/library/library-cache.js.map +1 -1
  1287. package/dist/library/library-cache.test.js +5 -5
  1288. package/dist/library/library-profile.d.ts +4 -4
  1289. package/dist/library/library-profile.js +35 -7
  1290. package/dist/library/library-profile.js.map +1 -1
  1291. package/dist/library/prepare.js +13 -1
  1292. package/dist/library/prepare.js.map +1 -1
  1293. package/dist/native/cli.js +22 -0
  1294. package/dist/native/cli.js.map +1 -1
  1295. package/dist/native/compiler.js +35 -6
  1296. package/dist/native/compiler.js.map +1 -1
  1297. package/dist/native/compiler.test.js +2 -2
  1298. package/dist/native/executable-cache.js +3 -0
  1299. package/dist/native/executable-cache.js.map +1 -1
  1300. package/dist/native/prepare.js +10 -0
  1301. package/dist/native/prepare.js.map +1 -1
  1302. package/dist/native/sanitizer.test.js +19 -0
  1303. package/dist/native/sanitizer.test.js.map +1 -1
  1304. package/dist/native/toolchain.d.ts +2 -0
  1305. package/dist/native/toolchain.js +10 -1
  1306. package/dist/native/toolchain.js.map +1 -1
  1307. package/dist/native/toolchain.test.js +39 -1
  1308. package/dist/native/toolchain.test.js.map +1 -1
  1309. package/dist/startup-cache.d.ts +1 -0
  1310. package/dist/startup-cache.js +1 -0
  1311. package/dist/startup-cache.js.map +1 -1
  1312. package/dist/wasm/base64.d.ts +5 -0
  1313. package/dist/wasm/base64.js +62 -0
  1314. package/dist/wasm/base64.js.map +1 -0
  1315. package/dist/wasm/binary.d.ts +36 -0
  1316. package/dist/wasm/binary.js +1976 -0
  1317. package/dist/wasm/binary.js.map +1 -0
  1318. package/dist/wasm/binary.test.d.ts +1 -0
  1319. package/dist/wasm/binary.test.js +190 -0
  1320. package/dist/wasm/binary.test.js.map +1 -0
  1321. package/dist/wasm/discover.d.ts +38 -0
  1322. package/dist/wasm/discover.js +377 -0
  1323. package/dist/wasm/discover.js.map +1 -0
  1324. package/dist/wasm/discover.test.d.ts +1 -0
  1325. package/dist/wasm/discover.test.js +24 -0
  1326. package/dist/wasm/discover.test.js.map +1 -0
  1327. package/dist/wasm/module.d.ts +151 -0
  1328. package/dist/wasm/module.js +575 -0
  1329. package/dist/wasm/module.js.map +1 -0
  1330. package/dist/wasm/translate.d.ts +48 -0
  1331. package/dist/wasm/translate.js +2129 -0
  1332. package/dist/wasm/translate.js.map +1 -0
  1333. package/dist/wasm/translate.test.d.ts +1 -0
  1334. package/dist/wasm/translate.test.js +207 -0
  1335. package/dist/wasm/translate.test.js.map +1 -0
  1336. package/package.json +22 -20
  1337. package/shims/fs-extra/core/api.ts +1192 -0
  1338. package/shims/fs-extra/index.ts +9 -0
  1339. package/shims/undici/core/agent.ts +163 -0
  1340. package/shims/undici/core/api.ts +93 -0
  1341. package/shims/undici/core/client.ts +1304 -0
  1342. package/shims/undici/core/connector.ts +157 -0
  1343. package/shims/undici/core/diagnostics-types.ts +68 -0
  1344. package/shims/undici/core/diagnostics.ts +16 -0
  1345. package/shims/undici/core/dispatcher.ts +574 -0
  1346. package/shims/undici/core/errors-v5.ts +22 -0
  1347. package/shims/undici/core/errors-v7.ts +25 -0
  1348. package/shims/undici/core/errors.ts +255 -0
  1349. package/shims/undici/core/fetch.ts +635 -0
  1350. package/shims/undici/core/pool.ts +280 -0
  1351. package/shims/undici/core/readable.ts +268 -0
  1352. package/shims/undici/core/request.ts +313 -0
  1353. package/shims/undici/core/timers.ts +80 -0
  1354. package/shims/undici/core/types.ts +167 -0
  1355. package/shims/undici/core/util.ts +67 -0
  1356. package/shims/undici/v5.ts +119 -0
  1357. package/shims/undici/v7.ts +119 -0
  1358. package/surface-manifest.json +304 -22
@@ -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))
@@ -758,6 +758,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
758
758
  let port = null;
759
759
  let host = null;
760
760
  let lookup = null;
761
+ let dynLookup = null;
761
762
  let autoSelect = false;
762
763
  let attempt = null;
763
764
  let optionThrow = null;
@@ -772,7 +773,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
772
773
  type: NETSOCKET_T,
773
774
  loc,
774
775
  });
775
- for (const prop of optsNode.properties) {
776
+ for (const prop of optsNode.properties.nodes) {
776
777
  let initializer;
777
778
  if (ts.isPropertyAssignment(prop) &&
778
779
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -840,7 +841,19 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
840
841
  lowerer.noLowering(`${member} with a shorthand lookup option`, prop, "spell it out: lookup: theResolver");
841
842
  }
842
843
  lookup = lowerer.lowerExpr(initializer);
843
- if (!lookupFnShapeOk(lowerer, lookup.type)) {
844
+ // A lookup of Node's own type (net.LookupFunction: options and a
845
+ // callback taking an address string or list) crosses as a checked-
846
+ // dynamic function the runtime calls the way Node's dial does.
847
+ if (!lookupFnShapeOk(lowerer, lookup.type) &&
848
+ lookup.type.kind === "func" &&
849
+ lookup.type.params.length === 3 &&
850
+ canBoxFuncIntoDyn(lookup.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))) {
851
+ dynLookup = { kind: "dynFrom", value: lookup, type: DYN, loc: locOf(initializer) };
852
+ }
853
+ else if (lookup.type.kind === "dyn") {
854
+ dynLookup = lookup;
855
+ }
856
+ else if (!lookupFnShapeOk(lowerer, lookup.type)) {
844
857
  lowerer.noLowering(`a ${member} 'lookup' option of '${lowerer.fmt(lookup.type)}' values`, prop, "the lowered resolver is (hostname: string, options: unknown, callback: (err: NodeJS.ErrnoException | null, addresses: { address: string; family: number }[]) => void) => void");
845
858
  }
846
859
  }
@@ -869,6 +882,18 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
869
882
  loc,
870
883
  };
871
884
  }
885
+ if (dynLookup !== null) {
886
+ if (args.length !== 1) {
887
+ lowerer.noLowering(`${member} with a lookup and a connect listener`, expr, "register the listener separately: socket.once('connect', ...)");
888
+ }
889
+ return {
890
+ kind: "libCall",
891
+ fn: "net.connectLookupDyn",
892
+ args: [port, host, dynLookup],
893
+ type: NETSOCKET_T,
894
+ loc,
895
+ };
896
+ }
872
897
  if (lookup !== null) {
873
898
  if (!autoSelect) {
874
899
  lowerer.noLowering(`${member} with a lookup but no autoSelectFamily: true`, optsNode, "the lookup form dials every answered address in order — Node does that under autoSelectFamily: true, so spell it");
@@ -916,8 +941,8 @@ function lowerServerCloseBind(lowerer, call, access) {
916
941
  return null;
917
942
  const loc = locOf(call);
918
943
  const recvNode = closeAccess.expression;
919
- const thisArg = call.arguments[0];
920
- if (call.arguments.length !== 1 ||
944
+ const thisArg = call.arguments.nodes[0];
945
+ if (call.arguments.nodes.length !== 1 ||
921
946
  !thisArg ||
922
947
  !ts.isIdentifier(recvNode) ||
923
948
  !ts.isIdentifier(thisArg) ||
@@ -1083,7 +1108,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1083
1108
  return null;
1084
1109
  const name = access.name.text;
1085
1110
  const loc = locOf(call);
1086
- const args = call.arguments;
1111
+ const args = call.arguments.nodes;
1087
1112
  if (name === "getConnections") {
1088
1113
  // cb(null, count) on the next tick; answers the server.
1089
1114
  if (args.length !== 1) {
@@ -1155,7 +1180,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1155
1180
  let host = null;
1156
1181
  let v6only = null;
1157
1182
  let reusePort = null;
1158
- for (const prop of args[0].properties) {
1183
+ for (const prop of args[0].properties.nodes) {
1159
1184
  let initializer;
1160
1185
  if (ts.isPropertyAssignment(prop) &&
1161
1186
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -1213,7 +1238,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1213
1238
  }
1214
1239
  else if (key === "signal" &&
1215
1240
  ts.isPropertyAssignment(prop) &&
1216
- isJsSourceFile(call.getSourceFile())) {
1241
+ isJsSourceFile(ts.getSourceFileOfNode(call))) {
1217
1242
  // A provably-non-AbortSignal signal (the invalid-input probes:
1218
1243
  // strings, numbers, plain records) throws Node's
1219
1244
  // validateAbortSignal ladder; plausible signal values keep the
@@ -1287,6 +1312,18 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1287
1312
  ? [receiver, port, host, v6only, cbV]
1288
1313
  : [receiver, port, host, v6only, reusePort, cbV]);
1289
1314
  }
1315
+ // listen(path[, cb]): a string first argument names a Unix socket
1316
+ // (the runtime takes a numeric string as a port, Node's isPipeName).
1317
+ if (lowerer.mapTypeOf(lowerer.typeOf(args[0]))?.kind === "string") {
1318
+ if (args.length > 2) {
1319
+ lowerer.noLowering(`listen(path) with ${args.length} arguments`, call, "the supported form is listen(path[, callback])");
1320
+ }
1321
+ const path = lowerer.lowerExprExpecting(args[0], STRING);
1322
+ if (args.length === 1)
1323
+ return listenResult("net.listenPath", [receiver, path]);
1324
+ const { cb } = lowerCallbackArg(lowerer, args[1], "listen callbacks", 0, () => false, "use ()", []);
1325
+ return listenResult("net.listenPathCb", [receiver, path, cb]);
1326
+ }
1290
1327
  const port = lowerer.lowerExprExpecting(args[0], F64);
1291
1328
  // The optional middle host — listen(port, '127.0.0.1'[, cb]): a
1292
1329
  // string-typed second argument is the bind address (the net.connect
@@ -1326,6 +1363,19 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1326
1363
  if (args.length === 0) {
1327
1364
  return { kind: "libCall", fn: "net.serverClose", args: [receiver], type: VOID, loc };
1328
1365
  }
1366
+ if (lowerer.checker
1367
+ .getCallSignatures(lowerer.typeOf(args[0]))
1368
+ .some((sig) => sig.getParameters().length > 0)) {
1369
+ // close((err) => ...): undefined once the server closes, or Node's
1370
+ // ERR_SERVER_NOT_RUNNING when it was not listening.
1371
+ return {
1372
+ kind: "libCall",
1373
+ fn: "net.serverCloseDyn",
1374
+ args: [receiver, lowerSocketDynListener(lowerer, args[0], "close callbacks")],
1375
+ type: VOID,
1376
+ loc,
1377
+ };
1378
+ }
1329
1379
  const { cb } = lowerCallbackArg(lowerer, args[0], "close callbacks", 0, () => false, "use ()", []);
1330
1380
  return { kind: "libCall", fn: "net.serverCloseCb", args: [receiver, cb], type: VOID, loc };
1331
1381
  }
@@ -1583,6 +1633,32 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1583
1633
  const result = lowerer.mapTypeOf(lowerer.typeOf(call));
1584
1634
  if (result && isAddressInfoRecord(lowerer, result)) {
1585
1635
  const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
1636
+ if (unixListenReachable(lowerer)) {
1637
+ // A Unix-socket server's address() is its path, which this record
1638
+ // cannot hold: the check throws for one before the record reads.
1639
+ const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
1640
+ const server = () => varRef(local.id, NETSERVER_T, loc);
1641
+ return {
1642
+ kind: "seqExpr",
1643
+ stmts: [
1644
+ { kind: "varDecl", localId: local.id, init: receiver, loc },
1645
+ {
1646
+ kind: "exprStmt",
1647
+ expr: {
1648
+ kind: "libCall",
1649
+ fn: "net.serverAddressCheck",
1650
+ args: [server()],
1651
+ type: VOID,
1652
+ loc,
1653
+ },
1654
+ loc,
1655
+ },
1656
+ ],
1657
+ result: { kind: "libCall", fn: "net.serverAddress", args: [server()], type: result, loc },
1658
+ type: result,
1659
+ loc,
1660
+ };
1661
+ }
1586
1662
  return { kind: "libCall", fn: "net.serverAddress", args: [receiver], type: result, loc };
1587
1663
  }
1588
1664
  // @types/node's `string | AddressInfo | null`: the record while the
@@ -1598,20 +1674,50 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1598
1674
  const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
1599
1675
  const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
1600
1676
  const server = varRef(local.id, NETSERVER_T, loc);
1677
+ const recordArm = {
1678
+ kind: "unionWrap",
1679
+ unionId,
1680
+ tag: lowerer.armTag(unionId, record),
1681
+ value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
1682
+ type: result,
1683
+ loc,
1684
+ };
1685
+ const stringTag = lowerer.armTag(unionId, STRING);
1686
+ let listeningArm = recordArm;
1687
+ const stmts = [{ kind: "varDecl", localId: local.id, init: receiver, loc }];
1688
+ if (stringTag >= 0 && unixListenReachable(lowerer)) {
1689
+ // Node answers a Unix-socket server's address() with its path.
1690
+ const pathLocal = lowerer.declareHiddenLocal("%addressPath", STRING);
1691
+ const path = () => varRef(pathLocal.id, STRING, loc);
1692
+ stmts.push({
1693
+ kind: "varDecl",
1694
+ localId: pathLocal.id,
1695
+ init: { kind: "libCall", fn: "net.serverUnixPath", args: [server], type: STRING, loc },
1696
+ loc,
1697
+ });
1698
+ listeningArm = {
1699
+ kind: "ternary",
1700
+ cond: {
1701
+ kind: "strEq",
1702
+ negated: true,
1703
+ left: path(),
1704
+ right: strLit("", loc),
1705
+ type: BOOL,
1706
+ loc,
1707
+ },
1708
+ then: { kind: "unionWrap", unionId, tag: stringTag, value: path(), type: result, loc },
1709
+ else_: recordArm,
1710
+ type: result,
1711
+ loc,
1712
+ };
1713
+ }
1601
1714
  return {
1602
1715
  kind: "seqExpr",
1603
- stmts: [{ kind: "varDecl", localId: local.id, init: receiver, loc }],
1716
+ stmts,
1604
1717
  result: {
1605
1718
  kind: "ternary",
1606
1719
  cond: { kind: "libCall", fn: "net.serverListening", args: [server], type: BOOL, loc },
1607
- then: {
1608
- kind: "unionWrap",
1609
- unionId,
1610
- tag: lowerer.armTag(unionId, record),
1611
- value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
1612
- type: result,
1613
- loc,
1614
- },
1720
+ then: listeningArm,
1615
1721
  else_: {
1616
1722
  kind: "unionWrap",
1617
1723
  unionId,
@@ -1629,6 +1735,114 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1629
1735
  }
1630
1736
  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));
1631
1737
  }
1738
+ /** Whether a setEncoding call can reach some net.Socket in this program:
1739
+ * `x.setEncoding(...)` or `x["setEncoding"](...)` where `x` is a socket
1740
+ * or an untyped value. Sockets that never get an encoding keep the Buffer
1741
+ * chunk path; with one, Node's 'data' chunks are strings. */
1742
+ function socketEncodingReachable(lowerer) {
1743
+ if (lowerer.socketEncodingReachable !== null)
1744
+ return lowerer.socketEncodingReachable;
1745
+ let reachable = false;
1746
+ for (const file of lowerer.program.getSourceFiles()) {
1747
+ if (file.isDeclarationFile || !file.text.includes("setEncoding"))
1748
+ continue;
1749
+ ts.walkPreorder(file, (node) => {
1750
+ if (reachable)
1751
+ return "skip";
1752
+ if (!ts.isCallExpression(node))
1753
+ return undefined;
1754
+ const callee = node.expression;
1755
+ const receiver = ts.isPropertyAccessExpression(callee) && callee.name.text === "setEncoding"
1756
+ ? callee.expression
1757
+ : ts.isElementAccessExpression(callee) &&
1758
+ ts.isStringLiteralLike(callee.argumentExpression) &&
1759
+ callee.argumentExpression.text === "setEncoding"
1760
+ ? callee.expression
1761
+ : null;
1762
+ if (receiver === null)
1763
+ return undefined;
1764
+ const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(receiver))?.kind;
1765
+ if (kind === undefined || kind === "netSocket" || kind === "dyn")
1766
+ reachable = true;
1767
+ return undefined;
1768
+ });
1769
+ if (reachable)
1770
+ break;
1771
+ }
1772
+ lowerer.socketEncodingReachable = reachable;
1773
+ return reachable;
1774
+ }
1775
+ /** Whether some server in the program may listen on a Unix socket: a
1776
+ * `.listen(x, ...)` call on a server (or an untyped value) whose first
1777
+ * argument is string-typed. Only then does address() check for the socket
1778
+ * path, so other programs keep the record-only lowering. */
1779
+ function unixListenReachable(lowerer) {
1780
+ if (lowerer.unixListenReachable !== null)
1781
+ return lowerer.unixListenReachable;
1782
+ let reachable = false;
1783
+ for (const file of lowerer.program.getSourceFiles()) {
1784
+ if (file.isDeclarationFile || !file.text.includes("listen"))
1785
+ continue;
1786
+ ts.walkPreorder(file, (node) => {
1787
+ if (reachable)
1788
+ return "skip";
1789
+ if (!ts.isCallExpression(node) || node.arguments.nodes.length === 0)
1790
+ return undefined;
1791
+ const callee = node.expression;
1792
+ if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== "listen")
1793
+ return undefined;
1794
+ const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(callee.expression))?.kind;
1795
+ if (kind !== undefined && kind !== "netServer" && kind !== "dyn")
1796
+ return undefined;
1797
+ const arg = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(node.arguments.nodes[0]));
1798
+ // Only a string-typed argument lowers to listen(path) (an untyped
1799
+ // one checks into a port).
1800
+ if (arg?.kind === "string")
1801
+ reachable = true;
1802
+ return undefined;
1803
+ });
1804
+ if (reachable)
1805
+ break;
1806
+ }
1807
+ lowerer.unixListenReachable = reachable;
1808
+ return reachable;
1809
+ }
1810
+ /** An inline 'data' listener whose chunk parameter is typed Buffer, for a
1811
+ * socket that may have an encoding set: the chunk binds as a checked
1812
+ * dynamic value, so the body sees what Node passes (a string after
1813
+ * setEncoding, a Buffer otherwise) whatever the annotation says. Null
1814
+ * for other listener shapes. */
1815
+ function lowerEncodedDataListener(lowerer, node) {
1816
+ let fn = node;
1817
+ while (ts.isParenthesizedExpression(fn))
1818
+ fn = fn.expression;
1819
+ if (!ts.isArrowFunction(fn) && !ts.isFunctionExpression(fn))
1820
+ return null;
1821
+ if (fn.parameters.nodes.length !== 1)
1822
+ return null;
1823
+ const param = fn.parameters.nodes[0];
1824
+ if (!ts.isIdentifier(param.name) || param.initializer || param.dotDotDotToken)
1825
+ return null;
1826
+ const symbol = lowerer.checker.getSymbolAtLocation(param.name);
1827
+ if (symbol === undefined)
1828
+ return null;
1829
+ const previousBinding = lowerer.runtimeOptionalBindingTypes.get(symbol);
1830
+ const previousImplicit = lowerer.implicitParamTypes;
1831
+ const implicit = new Map(previousImplicit ?? []);
1832
+ implicit.set(symbol, lowerer.checker.getUnknownType());
1833
+ lowerer.runtimeOptionalBindingTypes.set(symbol, DYN);
1834
+ lowerer.implicitParamTypes = implicit;
1835
+ try {
1836
+ return lowerer.lowerExpr(fn);
1837
+ }
1838
+ finally {
1839
+ if (previousBinding === undefined)
1840
+ lowerer.runtimeOptionalBindingTypes.delete(symbol);
1841
+ else
1842
+ lowerer.runtimeOptionalBindingTypes.set(symbol, previousBinding);
1843
+ lowerer.implicitParamTypes = previousImplicit;
1844
+ }
1845
+ }
1632
1846
  /** Method calls on net.Socket receivers: write/end/destroy/pipe and
1633
1847
  * on/once("data" | "end" | "close" | "error" | "connect"). Null for
1634
1848
  * other receivers. */
@@ -1639,7 +1853,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1639
1853
  return null;
1640
1854
  const name = access.name.text;
1641
1855
  const loc = locOf(call);
1642
- const args = call.arguments;
1856
+ const args = call.arguments.nodes;
1643
1857
  if ((name === "ref" || name === "unref") && args.length === 0) {
1644
1858
  // Whether the socket keeps the event loop alive.
1645
1859
  requireStatementPosition(lowerer, call, `socket.${name}()`);
@@ -1666,7 +1880,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1666
1880
  if (encT.isStringLiteralType() && chunkT !== null) {
1667
1881
  if (encT.value === "buffer" &&
1668
1882
  chunkT.kind === "string" &&
1669
- isJsSourceFile(call.getSourceFile())) {
1883
+ isJsSourceFile(ts.getSourceFileOfNode(call))) {
1670
1884
  lowerer.lowerExpr(args[0]); // evaluation order (effect-free in practice)
1671
1885
  return nodeThrowExpr(1, "ERR_UNKNOWN_ENCODING", "Unknown encoding: buffer", VOID, loc);
1672
1886
  }
@@ -1883,6 +2097,20 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1883
2097
  ? value
1884
2098
  : lowerer.coerceInto(call, value, declared);
1885
2099
  }
2100
+ if (name === "isSessionReused" && args.length === 0) {
2101
+ // TLSSocket.isSessionReused(): the client never offers a cached
2102
+ // session (no session resumption, a documented TLS divergence), so
2103
+ // no handshake resumes one. A plain socket asserted to be a
2104
+ // TLSSocket answers false too, where Node has no such method.
2105
+ const receiver = coerceToHandle(lowerer, access.expression, NETSOCKET_T);
2106
+ return {
2107
+ kind: "seqExpr",
2108
+ stmts: [{ kind: "exprStmt", expr: receiver, loc }],
2109
+ result: boolLit(false, loc),
2110
+ type: BOOL,
2111
+ loc,
2112
+ };
2113
+ }
1886
2114
  if (name === "resetAndDestroy") {
1887
2115
  // An RST close; a connecting socket resets once it connects. Answers
1888
2116
  // the socket, Node's chaining.
@@ -1993,6 +2221,26 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1993
2221
  loc,
1994
2222
  };
1995
2223
  }
2224
+ if (param !== null && param.kind === "bytes" && socketEncodingReachable(lowerer)) {
2225
+ const encoded = lowerEncodedDataListener(lowerer, args[1]);
2226
+ // A listener defined elsewhere keeps its Buffer parameter; it takes
2227
+ // the chunk through the checked boundary, so a string chunk fails
2228
+ // the check instead of arriving as a Buffer.
2229
+ const cb = encoded ??
2230
+ {
2231
+ kind: "dynCheck",
2232
+ value: lowerSocketDynListener(lowerer, args[1], "data listeners"),
2233
+ type: funcOf([DYN], VOID),
2234
+ loc,
2235
+ };
2236
+ return {
2237
+ kind: "libCall",
2238
+ fn: "net.sockOnData",
2239
+ args: [receiver, cb, once],
2240
+ type: VOID,
2241
+ loc,
2242
+ };
2243
+ }
1996
2244
  const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
1997
2245
  return { kind: "libCall", fn: "net.sockOnData", args: [receiver, cb, once], type: VOID, loc };
1998
2246
  }
@@ -2039,6 +2287,17 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
2039
2287
  : "net.sockOnConnect";
2040
2288
  return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
2041
2289
  }
2290
+ if (event === "lookup") {
2291
+ // (err, address, family, host) after the host name resolves, before
2292
+ // the connect: once per resolved address, or once with the error.
2293
+ return {
2294
+ kind: "libCall",
2295
+ fn: "net.sockOnLookup",
2296
+ args: [receiver, lowerSocketDynListener(lowerer, args[1], "lookup listeners"), once],
2297
+ type: VOID,
2298
+ loc,
2299
+ };
2300
+ }
2042
2301
  if (event === "finish") {
2043
2302
  // Fires once when the FIN goes out — once either way (the event
2044
2303
  // happens at most once per socket).
@@ -2071,7 +2330,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
2071
2330
  loc,
2072
2331
  };
2073
2332
  }
2074
- 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)');
2333
+ 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)');
2075
2334
  }
2076
2335
  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));
2077
2336
  }
@@ -2132,7 +2391,7 @@ function h2EndStreamOption(lowerer, node) {
2132
2391
  lowerer.noLowering("h2 options argument", node, "pass the options as an object literal ({ endStream: true })");
2133
2392
  }
2134
2393
  let end;
2135
- for (const prop of node.properties) {
2394
+ for (const prop of node.properties.nodes) {
2136
2395
  if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
2137
2396
  lowerer.noLowering("h2 options with spreads or computed keys", prop, "use plain `name: value` entries");
2138
2397
  }
@@ -2160,7 +2419,7 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
2160
2419
  return null;
2161
2420
  const name = access.name.text;
2162
2421
  const loc = locOf(call);
2163
- const args = call.arguments;
2422
+ const args = call.arguments.nodes;
2164
2423
  const receiver = () => coerceToHandle(lowerer, access.expression, HTTP2SESSION_T);
2165
2424
  if (name === "request") {
2166
2425
  const pairs = args.length >= 1 && !ts.isObjectLiteralExpression(args[0]) === false && args.length >= 1
@@ -2340,7 +2599,7 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
2340
2599
  return null;
2341
2600
  const name = access.name.text;
2342
2601
  const loc = locOf(call);
2343
- const args = call.arguments;
2602
+ const args = call.arguments.nodes;
2344
2603
  const receiver = () => receiverOverride ?? coerceToHandle(lowerer, access.expression, HTTP2STREAM_T);
2345
2604
  if (name === "respond") {
2346
2605
  requireStatementPosition(lowerer, call, "stream.respond(...)");
@@ -3003,7 +3262,7 @@ export function lowerServerProperty(lowerer, expr) {
3003
3262
  if (expr.name.text !== "port")
3004
3263
  return null;
3005
3264
  const recv = expr.expression;
3006
- if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.length !== 0)
3265
+ if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.nodes.length !== 0)
3007
3266
  return null;
3008
3267
  if (!ts.isPropertyAccessExpression(recv.expression))
3009
3268
  return null;
@@ -3015,6 +3274,30 @@ export function lowerServerProperty(lowerer, expr) {
3015
3274
  if (!lowerer.isStdlibMember(inner))
3016
3275
  return null;
3017
3276
  const receiver = coerceToHandle(lowerer, inner.expression, NETSERVER_T);
3277
+ if (unixListenReachable(lowerer)) {
3278
+ const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
3279
+ const server = () => varRef(local.id, NETSERVER_T, loc);
3280
+ return {
3281
+ kind: "seqExpr",
3282
+ stmts: [
3283
+ { kind: "varDecl", localId: local.id, init: receiver, loc },
3284
+ {
3285
+ kind: "exprStmt",
3286
+ expr: {
3287
+ kind: "libCall",
3288
+ fn: "net.serverAddressCheck",
3289
+ args: [server()],
3290
+ type: VOID,
3291
+ loc,
3292
+ },
3293
+ loc,
3294
+ },
3295
+ ],
3296
+ result: { kind: "libCall", fn: "net.serverPort", args: [server()], type: F64, loc },
3297
+ type: F64,
3298
+ loc,
3299
+ };
3300
+ }
3018
3301
  return { kind: "libCall", fn: "net.serverPort", args: [receiver], type: F64, loc };
3019
3302
  }
3020
3303
  /** The (req, res) request-handler argument — http.createServer's, https
@@ -3080,7 +3363,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
3080
3363
  let allowMissingHost = false;
3081
3364
  let keepAliveTimeoutBuffer = null;
3082
3365
  let maxHeaderSize = null;
3083
- for (const prop of node.properties) {
3366
+ for (const prop of node.properties.nodes) {
3084
3367
  let initializer;
3085
3368
  if (ts.isPropertyAssignment(prop) &&
3086
3369
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -3159,7 +3442,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
3159
3442
  * (options, handler). Modeled option values wrap the construction in an
3160
3443
  * interned option-setting helper. */
3161
3444
  function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3162
- const args = expr.arguments ?? [];
3445
+ const args = expr.arguments?.nodes ?? [];
3163
3446
  if (args.length > 2) {
3164
3447
  lowerer.noLowering(`${what} with ${args.length} arguments`, expr, `the supported forms are ${what}([options][, (req, res) => ...])`);
3165
3448
  }
@@ -3294,12 +3577,12 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3294
3577
  * getName/destroy and the sockets/requests/freeSockets counters dispatch
3295
3578
  * through the dyn handle ops, and the request path threads it (the
3296
3579
  * requestAgent rows). Options parse at the LITERAL construction site:
3297
- * keepAlive (a boolean value — TRUE throws the runtime's named pooling
3298
- * fence: this client dials one connection per request), keepAliveMsecs /
3299
- * maxSockets / maxFreeSockets / timeout / port as numbers, scheduling
3300
- * DROPS (no free pool exists, so selection order cannot observe), other
3301
- * documented keys fence by name, and undocumented keys drop like Node
3302
- * drops them. Null when the callee isn't the http/https Agent. */
3580
+ * keepAlive (a boolean value: finished connections return to the free
3581
+ * list), keepAliveMsecs / maxSockets / maxFreeSockets / timeout / port as
3582
+ * numbers, scheduling as a value the runtime validates ('fifo' or
3583
+ * 'lifo'), other documented keys fence by name, and undocumented keys
3584
+ * drop like Node drops them. Null when the callee isn't the http/https
3585
+ * Agent. */
3303
3586
  export function lowerHttpAgentNew(lowerer, expr) {
3304
3587
  const callee = expr.expression;
3305
3588
  const bi = ts.isPropertyAccessExpression(callee) && callee.name.text === "Agent"
@@ -3317,7 +3600,8 @@ export function lowerHttpAgentNew(lowerer, expr) {
3317
3600
  let maxFree = numLit(-1, loc);
3318
3601
  let timeout = numLit(-1, loc);
3319
3602
  let port = numLit(-1, loc);
3320
- const args = expr.arguments ?? [];
3603
+ let scheduling = lowerer.coerceToExpected(strLit("lifo", loc), DYN);
3604
+ const args = expr.arguments?.nodes ?? [];
3321
3605
  if (args.length > 1) {
3322
3606
  lowerer.noLowering(`${api} with ${args.length} arguments`, expr, "the supported form is new Agent(options?)");
3323
3607
  }
@@ -3326,7 +3610,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
3326
3610
  if (!ts.isObjectLiteralExpression(optsNode)) {
3327
3611
  lowerer.noLowering(`${api} with a non-literal options value`, args[0], "spell the options as an object literal at the construction site");
3328
3612
  }
3329
- for (const prop of optsNode.properties) {
3613
+ for (const prop of optsNode.properties.nodes) {
3330
3614
  if (ts.isSpreadAssignment(prop)) {
3331
3615
  lowerer.noLowering(`${api} with an options spread`, prop, "write each option inline");
3332
3616
  }
@@ -3382,12 +3666,14 @@ export function lowerHttpAgentNew(lowerer, expr) {
3382
3666
  // the settable defaultPort carries this one.
3383
3667
  port = lowerVal("f64");
3384
3668
  break;
3385
- case "scheduling":
3386
- // Free-socket selection order: no free pool exists here (no
3387
- // keep-alive reuse), so the choice cannot observe — dropped.
3388
- if (initializer !== null)
3389
- lowerer.lowerExpr(initializer); // evaluate, like Node
3669
+ case "scheduling": {
3670
+ // 'fifo' | 'lifo' (falsy = 'lifo'), validated by the runtime
3671
+ const v = initializer !== null
3672
+ ? lowerer.lowerExpr(initializer)
3673
+ : lowerer.lowerShorthandValue(prop);
3674
+ scheduling = lowerer.coerceToExpected(v, DYN);
3390
3675
  break;
3676
+ }
3391
3677
  default:
3392
3678
  fenceOrDropOptionKey(lowerer, prop, key, api, bi.module === "https" ? HTTPS_AGENT_DOCUMENTED_OPTIONS : AGENT_DOCUMENTED_OPTIONS, bi.module === "https"
3393
3679
  ? "keepAlive, keepAliveMsecs, maxSockets, maxFreeSockets, timeout, port, and scheduling are the supported options; pass TLS options such as ca and rejectUnauthorized on each https.request"
@@ -3406,6 +3692,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
3406
3692
  maxFree,
3407
3693
  timeout,
3408
3694
  port,
3695
+ scheduling,
3409
3696
  ],
3410
3697
  type: DYN,
3411
3698
  loc,
@@ -3431,24 +3718,24 @@ export function lowerHttpServerNew(lowerer, expr) {
3431
3718
  function lowerHttpModuleCall(lowerer, expr, bi, loc) {
3432
3719
  if (bi.member === "validateHeaderName") {
3433
3720
  requireStatementPosition(lowerer, expr, "http.validateHeaderName(...)");
3434
- if (expr.arguments.length < 1 ||
3435
- expr.arguments.length > 2 ||
3436
- expr.arguments.some(ts.isSpreadElement)) {
3721
+ if (expr.arguments.nodes.length < 1 ||
3722
+ expr.arguments.nodes.length > 2 ||
3723
+ expr.arguments.nodes.some(ts.isSpreadElement)) {
3437
3724
  lowerer.noLowering("http.validateHeaderName arguments", expr, "pass a header name and an optional label");
3438
3725
  }
3439
- const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
3440
- const label = expr.arguments.length === 2
3441
- ? lowerer.lowerExprExpecting(expr.arguments[1], STRING)
3726
+ const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
3727
+ const label = expr.arguments.nodes.length === 2
3728
+ ? lowerer.lowerExprExpecting(expr.arguments.nodes[1], STRING)
3442
3729
  : strLit("Header name", loc);
3443
3730
  return { kind: "libCall", fn: "http.validateHeaderName", args: [name, label], type: VOID, loc };
3444
3731
  }
3445
3732
  if (bi.member === "validateHeaderValue") {
3446
3733
  requireStatementPosition(lowerer, expr, "http.validateHeaderValue(...)");
3447
- if (expr.arguments.length !== 2 || expr.arguments.some(ts.isSpreadElement)) {
3734
+ if (expr.arguments.nodes.length !== 2 || expr.arguments.nodes.some(ts.isSpreadElement)) {
3448
3735
  lowerer.noLowering("http.validateHeaderValue arguments", expr, "pass a header name and a value");
3449
3736
  }
3450
- const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
3451
- const value = lowerer.lowerExprExpecting(expr.arguments[1], DYN);
3737
+ const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
3738
+ const value = lowerer.lowerExprExpecting(expr.arguments.nodes[1], DYN);
3452
3739
  return {
3453
3740
  kind: "libCall",
3454
3741
  fn: "http.validateHeaderValue",
@@ -3478,7 +3765,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
3478
3765
  const loc = locOf(node);
3479
3766
  let cert = null;
3480
3767
  let key = null;
3481
- for (const prop of node.properties) {
3768
+ for (const prop of node.properties.nodes) {
3482
3769
  let initializer;
3483
3770
  if (ts.isPropertyAssignment(prop) &&
3484
3771
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -3574,8 +3861,8 @@ const TLS_VALIDATED_OPTIONS = new Set([
3574
3861
  * keepAliveTimeoutBuffer so the HTTP option is consumed without losing
3575
3862
  * the literal's evaluation order. */
3576
3863
  function tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions = false) {
3577
- const jsSource = isJsSourceFile(node.getSourceFile());
3578
- return node.properties.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
3864
+ const jsSource = isJsSourceFile(ts.getSourceFileOfNode(node));
3865
+ return node.properties.nodes.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
3579
3866
  (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
3580
3867
  ((includeHttpTimeoutOptions && p.name.text === "keepAliveTimeoutBuffer") ||
3581
3868
  (jsSource && TLS_VALIDATED_OPTIONS.has(p.name.text))));
@@ -3608,7 +3895,7 @@ function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptio
3608
3895
  * callback (and 'secureConnect'/'connect' listeners) fires
3609
3896
  * post-handshake — Node's secureConnect timing. */
3610
3897
  function lowerTlsConnectCall(lowerer, expr, loc) {
3611
- const args = expr.arguments;
3898
+ const args = expr.arguments.nodes;
3612
3899
  const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/rejectUnauthorized/ca/servername";
3613
3900
  if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
3614
3901
  lowerer.noLowering(`tls.connect with ${args.length} arguments`, expr, FORMS_HINT);
@@ -3700,7 +3987,7 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
3700
3987
  * module declares fences qualified (createSecureContext and connect
3701
3988
  * carry pointed hints from the fence-hint table). */
3702
3989
  function lowerTlsModuleCall(lowerer, expr, bi, loc) {
3703
- const args = expr.arguments;
3990
+ const args = expr.arguments.nodes;
3704
3991
  if (bi.member === "createServer") {
3705
3992
  if (args.length < 1 || args.length > 2) {
3706
3993
  lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, socket => ...)");
@@ -3740,7 +4027,7 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
3740
4027
  if (bi.member === "getCACertificates" &&
3741
4028
  args.length === 1 &&
3742
4029
  !args.some(ts.isSpreadElement) &&
3743
- isJsSourceFile(expr.getSourceFile())) {
4030
+ isJsSourceFile(ts.getSourceFileOfNode(expr))) {
3744
4031
  // The type-argument ladder (validateString + the documented name
3745
4032
  // set); the real CA list has no lowering, so a valid name meets the
3746
4033
  // compiler-rendered fence after the validation.
@@ -3846,7 +4133,7 @@ function clientFnRefOf(lowerer, node) {
3846
4133
  * `const` declaration, or a parameter/let whose enclosing scope contains
3847
4134
  * no assignment or ++/-- targeting it. */
3848
4135
  function neverReassigned(lowerer, sym) {
3849
- const decl = lowerer.checker.declarationsOf(sym)[0];
4136
+ const decl = sym.declarations[0];
3850
4137
  if (!decl)
3851
4138
  return false;
3852
4139
  if (ts.isVariableDeclaration(decl) &&
@@ -3953,7 +4240,7 @@ export function lowerHttpClientFnCall(lowerer, expr, binding, loc) {
3953
4240
  * handler) and request/get — the http client lowering with the secure
3954
4241
  * extras (port 443 default, rejectUnauthorized, ca). */
3955
4242
  function lowerHttpsModuleCall(lowerer, expr, bi, loc) {
3956
- const args = expr.arguments;
4243
+ const args = expr.arguments.nodes;
3957
4244
  if (bi.member === "createServer") {
3958
4245
  if (args.length < 1 || args.length > 2) {
3959
4246
  lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, (req, res) => ...)");
@@ -4034,7 +4321,7 @@ function stripParensAndCasts(node) {
4034
4321
  * createSecureServer lowers h2 over TLS, with allowHTTP1 selecting one
4035
4322
  * dual-ALPN server whose request/connect listeners mirror across parsers. */
4036
4323
  function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4037
- const args = expr.arguments;
4324
+ const args = expr.arguments.nodes;
4038
4325
  if (bi.member === "createServer") {
4039
4326
  // The REAL h2c server (scr_http2.c). An options object literal is
4040
4327
  // accepted and ignored (h2 session-tuning knobs; the honest-defaults
@@ -4098,7 +4385,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4098
4385
  !arg1IsDyn &&
4099
4386
  lowerer.checker.getCallSignatures(lowerer.typeOf(args[1])).length === 0) {
4100
4387
  if (ts.isObjectLiteralExpression(args[1])) {
4101
- for (const pr of args[1].properties) {
4388
+ for (const pr of args[1].properties.nodes) {
4102
4389
  // Plain `name: value` and shorthand `{ ca }` both carry the
4103
4390
  // option; a shorthand's value is the same-named identifier.
4104
4391
  let name;
@@ -4281,17 +4568,17 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4281
4568
  if (ts.isConditionalExpression(inner)) {
4282
4569
  const whenTrue = stripParensAndCasts(inner.whenTrue);
4283
4570
  const whenFalse = stripParensAndCasts(inner.whenFalse);
4284
- const condText = inner.condition.getText();
4571
+ const condText = ts.getTextOfNode(inner.condition);
4285
4572
  const ok = ts.isObjectLiteralExpression(whenTrue) &&
4286
4573
  ts.isObjectLiteralExpression(whenFalse) &&
4287
- whenFalse.properties.length === 0 &&
4288
- whenTrue.properties.length === 1 &&
4289
- ts.isPropertyAssignment(whenTrue.properties[0]) &&
4290
- (ts.isIdentifier(whenTrue.properties[0].name) ||
4291
- ts.isStringLiteral(whenTrue.properties[0].name)) &&
4292
- whenTrue.properties[0].name.text ===
4574
+ whenFalse.properties.nodes.length === 0 &&
4575
+ whenTrue.properties.nodes.length === 1 &&
4576
+ ts.isPropertyAssignment(whenTrue.properties.nodes[0]) &&
4577
+ (ts.isIdentifier(whenTrue.properties.nodes[0].name) ||
4578
+ ts.isStringLiteral(whenTrue.properties.nodes[0].name)) &&
4579
+ whenTrue.properties.nodes[0].name.text ===
4293
4580
  "SNICallback" &&
4294
- whenTrue.properties[0].initializer.getText() === condText;
4581
+ ts.getTextOfNode(whenTrue.properties.nodes[0].initializer) === condText;
4295
4582
  if (!ok) {
4296
4583
  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");
4297
4584
  }
@@ -4301,7 +4588,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4301
4588
  if (!ts.isObjectLiteralExpression(inner)) {
4302
4589
  lowerer.noLowering("createSecureServer options with a computed spread", prop, `spreads must be inline object literals here; ${SNI_HINT}`);
4303
4590
  }
4304
- for (const p of inner.properties)
4591
+ for (const p of inner.properties.nodes)
4305
4592
  lowerOption(p);
4306
4593
  return;
4307
4594
  }
@@ -4367,11 +4654,11 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4367
4654
  e.kind === ts.SyntaxKind.TrueKeyword ||
4368
4655
  e.kind === ts.SyntaxKind.FalseKeyword;
4369
4656
  const isLiteralObjectOfLiterals = (e) => ts.isObjectLiteralExpression(e) &&
4370
- e.properties.every((p) => ts.isPropertyAssignment(p) &&
4657
+ e.properties.nodes.every((p) => ts.isPropertyAssignment(p) &&
4371
4658
  ts.isIdentifier(p.name) &&
4372
4659
  isScalarLiteral(p.initializer));
4373
4660
  if (k === "settings" && initializer !== null && ts.isObjectLiteralExpression(initializer)) {
4374
- for (const setting of initializer.properties) {
4661
+ for (const setting of initializer.properties.nodes) {
4375
4662
  if (ts.isPropertyAssignment(setting) &&
4376
4663
  ts.isIdentifier(setting.name) &&
4377
4664
  setting.name.text === "enableConnectProtocol") {
@@ -4399,7 +4686,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4399
4686
  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)");
4400
4687
  // An undocumented key, dropped like Node drops it.
4401
4688
  };
4402
- for (const prop of optsNode.properties)
4689
+ for (const prop of optsNode.properties.nodes)
4403
4690
  lowerOption(prop);
4404
4691
  if (cert === null || key === null) {
4405
4692
  lowerer.noLowering("createSecureServer without both cert and key", optsNode, "the supported options object is { allowHTTP1?, cert, key } (PEM strings or Buffers)");
@@ -4464,6 +4751,37 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4464
4751
  lowerer.noLowering(`http2.${bi.member}`, expr, builtinFenceHintOf("http2", bi.member) ??
4465
4752
  "createSecureServer({ allowHTTP1: true, cert, key }) and the h2-only form are lowered", lowerer.resolveValueSymbol(expr.expression));
4466
4753
  }
4754
+ /** The checked-dynamic options value of a request whose options the
4755
+ * runtime reads: a non-literal options value (a RequestOptions variable —
4756
+ * checked-dynamic storage — or a record that converts to one), or a
4757
+ * literal the static walk cannot lower because it spreads another options
4758
+ * value or sets socketPath. Null keeps the static literal walk (and its
4759
+ * fences), which every other literal takes unchanged. */
4760
+ function runtimeRequestOptions(lowerer, optsNode, secureish) {
4761
+ if (ts.isObjectLiteralExpression(optsNode)) {
4762
+ const needsRuntime = optsNode.properties.nodes.some((prop) => {
4763
+ if (ts.isSpreadAssignment(prop)) {
4764
+ // the static walk's one spread: `...(c ? { rejectUnauthorized } : {})` on https
4765
+ const cs = conditionalSpreadOf(prop.expression);
4766
+ return !(secureish &&
4767
+ cs !== null &&
4768
+ cs !== "unsupported" &&
4769
+ cs.props.length === 1 &&
4770
+ cs.props[0].name.text === "rejectUnauthorized");
4771
+ }
4772
+ return ((ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) &&
4773
+ (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)) &&
4774
+ prop.name.text === "socketPath");
4775
+ });
4776
+ if (!needsRuntime)
4777
+ return null;
4778
+ return lowerDynObjectLiteral(lowerer, optsNode);
4779
+ }
4780
+ const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
4781
+ if (!t || !(t.kind === "dyn" || (t.kind === "record" && lowerer.dynConvertible(t))))
4782
+ return null;
4783
+ return lowerer.coerceToExpected(lowerer.lowerExpr(optsNode), DYN);
4784
+ }
4467
4785
  /** http.request(options[, cb]) / http.get(options[, cb]) — the client.
4468
4786
  * The options argument must be an OBJECT LITERAL; the lowered keys are
4469
4787
  * hostname/host, port, path, method, timeout, and headers (a nested
@@ -4491,11 +4809,36 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4491
4809
  const c = lowerer.lowerCondition(binding.cond);
4492
4810
  return binding.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
4493
4811
  };
4494
- const args = expr.arguments;
4812
+ const args = expr.arguments.nodes;
4495
4813
  if (args.length < 1 || args.length > 2) {
4496
4814
  lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported form is ${member}(options[, callback])`);
4497
4815
  }
4498
4816
  const optsNode = args[0];
4817
+ const runtimeOptions = binding === null ? runtimeRequestOptions(lowerer, optsNode, secureish) : null;
4818
+ if (runtimeOptions !== null) {
4819
+ // The options record is read at run time (the ClientRequest
4820
+ // constructor's walk in the runtime): a RequestOptions variable, or a
4821
+ // literal that spreads one or sets socketPath.
4822
+ const autoEnd = boolLit(member === "get", loc);
4823
+ const secureDyn = secure === true;
4824
+ if (args.length === 1) {
4825
+ return {
4826
+ kind: "libCall",
4827
+ fn: secureDyn ? "https.requestDyn" : "http.requestDyn",
4828
+ args: [runtimeOptions, autoEnd],
4829
+ type: HTTPCLIENTREQ_T,
4830
+ loc,
4831
+ };
4832
+ }
4833
+ const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
4834
+ return {
4835
+ kind: "libCall",
4836
+ fn: secureDyn ? "https.requestDynCb" : "http.requestDynCb",
4837
+ args: [runtimeOptions, autoEnd, cb],
4838
+ type: HTTPCLIENTREQ_T,
4839
+ loc,
4840
+ };
4841
+ }
4499
4842
  if (!ts.isObjectLiteralExpression(optsNode)) {
4500
4843
  const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
4501
4844
  if ((t?.kind === "string" || t?.kind === "url") && binding === null) {
@@ -4562,7 +4905,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4562
4905
  let servername = null;
4563
4906
  /** maxHeaderSize: the response head's size bound. */
4564
4907
  let maxHeaderSize = null;
4565
- for (const prop of optsNode.properties) {
4908
+ for (const prop of optsNode.properties.nodes) {
4566
4909
  // Shorthand entries ({ port } for { port: port }) are the natural
4567
4910
  // spelling at these call sites — the shorthand's VALUE lowering
4568
4911
  // resolves the local binding (lowerShorthandValue), not the property
@@ -4657,6 +5000,9 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4657
5000
  maxHeaderSize = lowerVal("f64");
4658
5001
  break;
4659
5002
  case "servername":
5003
+ if (binding !== null) {
5004
+ lowerer.noLowering(`${member} option 'servername' through a module-function binding`, prop, "call https.request directly when passing servername");
5005
+ }
4660
5006
  if (!secureish) {
4661
5007
  lowerer.noLowering(`${member} option 'servername'`, prop, "servername is an https.request option — the plain http client has no TLS layer");
4662
5008
  }
@@ -4820,22 +5166,29 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4820
5166
  timeout ??= numLit(0, loc);
4821
5167
  headers ??= { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
4822
5168
  const autoEnd = boolLit(member === "get", loc);
4823
- // Options applied to the built request: servername before the TLS
4824
- // handshake starts, then options.signal (an already aborted signal
4825
- // destroys the request at once, like Node's constructor).
5169
+ // options.signal is checked first: Node's constructor rejects a value
5170
+ // that is not an AbortSignal before it dials. servername is stored just
5171
+ // before construction (it selects the TLS name and which pooled sockets
5172
+ // the request may reuse); maxHeaderSize and the signal then apply to the
5173
+ // built request (an already aborted signal destroys it at once, like
5174
+ // Node's constructor).
4826
5175
  const withSignal = (request) => {
4827
5176
  if (signal === null && servername === null && maxHeaderSize === null)
4828
5177
  return request;
4829
5178
  const local = lowerer.declareHiddenLocal("%requestOptions", HTTPCLIENTREQ_T);
4830
5179
  const ref = () => varRef(local.id, HTTPCLIENTREQ_T, loc);
4831
- const steps = [{ kind: "varDecl", localId: local.id, init: request, loc }];
4832
- if (maxHeaderSize !== null) {
5180
+ const steps = [];
5181
+ let signalRef = null;
5182
+ if (signal !== null) {
5183
+ const signalLocal = lowerer.declareHiddenLocal("%requestSignal", DYN);
5184
+ signalRef = () => varRef(signalLocal.id, DYN, loc);
5185
+ steps.push({ kind: "varDecl", localId: signalLocal.id, init: signal, loc });
4833
5186
  steps.push({
4834
5187
  kind: "exprStmt",
4835
5188
  expr: {
4836
5189
  kind: "libCall",
4837
- fn: "http.clientMaxHeaderSize",
4838
- args: [ref(), maxHeaderSize],
5190
+ fn: "http.clientSignalCheck",
5191
+ args: [signalRef()],
4839
5192
  type: VOID,
4840
5193
  loc,
4841
5194
  },
@@ -4847,18 +5200,38 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4847
5200
  kind: "exprStmt",
4848
5201
  expr: {
4849
5202
  kind: "libCall",
4850
- fn: "https.clientServername",
4851
- args: [ref(), servername],
5203
+ fn: "https.nextServername",
5204
+ args: [servername],
4852
5205
  type: VOID,
4853
5206
  loc,
4854
5207
  },
4855
5208
  loc,
4856
5209
  });
4857
5210
  }
4858
- if (signal !== null) {
5211
+ steps.push({ kind: "varDecl", localId: local.id, init: request, loc });
5212
+ if (maxHeaderSize !== null) {
5213
+ steps.push({
5214
+ kind: "exprStmt",
5215
+ expr: {
5216
+ kind: "libCall",
5217
+ fn: "http.clientMaxHeaderSize",
5218
+ args: [ref(), maxHeaderSize],
5219
+ type: VOID,
5220
+ loc,
5221
+ },
5222
+ loc,
5223
+ });
5224
+ }
5225
+ if (signalRef !== null) {
4859
5226
  steps.push({
4860
5227
  kind: "exprStmt",
4861
- expr: { kind: "libCall", fn: "http.clientSignal", args: [ref(), signal], type: VOID, loc },
5228
+ expr: {
5229
+ kind: "libCall",
5230
+ fn: "http.clientSignal",
5231
+ args: [ref(), signalRef()],
5232
+ type: VOID,
5233
+ loc,
5234
+ },
4862
5235
  loc,
4863
5236
  });
4864
5237
  }
@@ -4927,7 +5300,7 @@ function lowerClientHeadersOption(lowerer, node) {
4927
5300
  const loc = locOf(node);
4928
5301
  if (ts.isObjectLiteralExpression(node)) {
4929
5302
  const elems = [];
4930
- for (const prop of node.properties) {
5303
+ for (const prop of node.properties.nodes) {
4931
5304
  const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
4932
5305
  if (!ts.isPropertyAssignment(prop) || key === null) {
4933
5306
  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])");
@@ -4963,13 +5336,13 @@ function lowerHttpTrailersOption(lowerer, node) {
4963
5336
  return lowerClientHeadersOption(lowerer, node);
4964
5337
  const loc = locOf(node);
4965
5338
  const flat = [];
4966
- for (const entry of node.elements) {
4967
- if (!ts.isArrayLiteralExpression(entry) || entry.elements.length !== 2) {
5339
+ for (const entry of node.elements.nodes) {
5340
+ if (!ts.isArrayLiteralExpression(entry) || entry.elements.nodes.length !== 2) {
4968
5341
  lowerer.noLowering("addTrailers pair list", entry, "use an object/Record or literal [name, value] pairs");
4969
5342
  }
4970
5343
  const pair = entry;
4971
- const name = pair.elements[0];
4972
- const value = pair.elements[1];
5344
+ const name = pair.elements.nodes[0];
5345
+ const value = pair.elements.nodes[1];
4973
5346
  if (ts.isSpreadElement(name) || ts.isSpreadElement(value)) {
4974
5347
  lowerer.noLowering("addTrailers pair with spread", entry, "use direct string name/value expressions");
4975
5348
  }
@@ -4987,7 +5360,7 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
4987
5360
  return null;
4988
5361
  const name = access.name.text;
4989
5362
  const loc = locOf(call);
4990
- const args = call.arguments;
5363
+ const args = call.arguments.nodes;
4991
5364
  if (name === "setHeader") {
4992
5365
  requireStatementPosition(lowerer, call, "request.setHeader(...)");
4993
5366
  if (args.length !== 2)
@@ -5366,7 +5739,7 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
5366
5739
  return null;
5367
5740
  const name = access.name.text;
5368
5741
  const loc = locOf(call);
5369
- const args = call.arguments;
5742
+ const args = call.arguments.nodes;
5370
5743
  if (name === "setTimeout") {
5371
5744
  requireStatementPosition(lowerer, call, "message.setTimeout(...)");
5372
5745
  if (args.length < 1 || args.length > 2)
@@ -5434,6 +5807,26 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
5434
5807
  const event = evT.isStringLiteralType() ? evT.value : null;
5435
5808
  const receiver = coerceToHandle(lowerer, access.expression, HTTPREQ_T);
5436
5809
  if (event === "data") {
5810
+ const sigs = lowerer.checker.getCallSignatures(lowerer.typeOf(args[1]));
5811
+ const firstParam = sigs.length === 1 ? sigs[0].getParameters()[0] : undefined;
5812
+ const param = firstParam !== undefined
5813
+ ? lowerer.mapTypeOf(lowerer.checker.getTypeOfSymbol(firstParam))
5814
+ : null;
5815
+ if (param !== null && param.kind === "string") {
5816
+ // A chunk typed string (the setEncoding('utf8') shape), as on a
5817
+ // socket: the listener takes the chunk through a checked
5818
+ // boundary, so a string arrives after setEncoding and a Buffer
5819
+ // without it fails the check instead of being decoded.
5820
+ const boxed = lowerSocketDynListener(lowerer, args[1], "data listeners");
5821
+ const cb = { kind: "dynCheck", value: boxed, type: funcOf([DYN], VOID), loc };
5822
+ return {
5823
+ kind: "libCall",
5824
+ fn: "http.reqOnData",
5825
+ args: [receiver, cb, once],
5826
+ type: VOID,
5827
+ loc,
5828
+ };
5829
+ }
5437
5830
  const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
5438
5831
  return { kind: "libCall", fn: "http.reqOnData", args: [receiver, cb, once], type: VOID, loc };
5439
5832
  }
@@ -5486,7 +5879,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5486
5879
  return null;
5487
5880
  const name = access.name.text;
5488
5881
  const loc = locOf(call);
5489
- const args = call.arguments;
5882
+ const args = call.arguments.nodes;
5490
5883
  if (name === "setTimeout") {
5491
5884
  if (args.length < 1 || args.length > 2) {
5492
5885
  lowerer.noLowering(`res.setTimeout with ${args.length} arguments`, call, "use setTimeout(milliseconds[, callback])");
@@ -5504,7 +5897,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5504
5897
  }
5505
5898
  if (name === "writeContinue" || name === "writeProcessing" || name === "writeEarlyHints") {
5506
5899
  requireStatementPosition(lowerer, call, `res.${name}(...)`);
5507
- if (lowerer.typeOf(access.expression).getSymbol()?.name === "Http2ServerResponse") {
5900
+ if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
5508
5901
  lowerer.noLowering(`Http2ServerResponse.${name}`, call, "HTTP/2 informational responses are not supported by the static runtime yet");
5509
5902
  }
5510
5903
  const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
@@ -5525,7 +5918,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5525
5918
  let pairs;
5526
5919
  if (ts.isObjectLiteralExpression(node)) {
5527
5920
  const elems = [];
5528
- for (const prop of node.properties) {
5921
+ for (const prop of node.properties.nodes) {
5529
5922
  const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
5530
5923
  if (!ts.isPropertyAssignment(prop) || key === null) {
5531
5924
  lowerer.noLowering("writeEarlyHints headers with dynamic keys, spreads, or shorthand entries", prop, "use literal header keys and string values");
@@ -5588,7 +5981,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5588
5981
  }
5589
5982
  if (name === "addTrailers") {
5590
5983
  requireStatementPosition(lowerer, call, "res.addTrailers(...)");
5591
- if (lowerer.typeOf(access.expression).getSymbol()?.name === "Http2ServerResponse") {
5984
+ if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
5592
5985
  lowerer.noLowering("Http2ServerResponse.addTrailers", call, "HTTP/2 response trailers are not supported by the static runtime yet");
5593
5986
  }
5594
5987
  if (args.length !== 1)
@@ -5725,7 +6118,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5725
6118
  }
5726
6119
  const names = [];
5727
6120
  const values = [];
5728
- for (const prop of headersNode.properties) {
6121
+ for (const prop of headersNode.properties.nodes) {
5729
6122
  const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
5730
6123
  if (!ts.isPropertyAssignment(prop) || key === null) {
5731
6124
  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])");
@@ -5853,6 +6246,26 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5853
6246
  return endWithCb(fn, [receiver, data], cbArg);
5854
6247
  return { kind: "libCall", fn, args: [receiver, data], type: VOID, loc };
5855
6248
  }
6249
+ // end(payload ? text : undefined): an absent chunk ends without data,
6250
+ // as end() does. The checked-dynamic end takes each arm at run time.
6251
+ if (name === "end" && data.type.kind === "union" && lowerer.dynConvertible(data.type)) {
6252
+ const arms = lowerer.unions.get(data.type.unionId)?.arms ?? [];
6253
+ if (arms.every((arm) => arm.kind === "string" ||
6254
+ (arm.kind === "bytes" && arm.elem === "u8") ||
6255
+ arm.kind === "undefinedT" ||
6256
+ arm.kind === "nullT")) {
6257
+ const dynData = { kind: "dynFrom", value: data, type: DYN, loc: locOf(dataNode) };
6258
+ if (cbArg !== null)
6259
+ return endWithCb("http.resEndDyn", [receiver, dynData], cbArg);
6260
+ return {
6261
+ kind: "libCall",
6262
+ fn: "http.resEndDyn",
6263
+ args: [receiver, dynData],
6264
+ type: VOID,
6265
+ loc,
6266
+ };
6267
+ }
6268
+ }
5856
6269
  lowerer.noLowering(`${name} of '${lowerer.fmt(data.type)}' data`, dataNode ?? call, NARROW_DATA_HINT);
5857
6270
  }
5858
6271
  if (name === "getHeader" || name === "hasHeader" || name === "removeHeader") {