@scriptc/compiler 0.3.6 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1218) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +682 -50
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +13 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +6 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +41 -4
  16. package/dist/backend/llvm/alloc.js +138 -7
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/alloc.test.js +30 -1
  19. package/dist/backend/llvm/alloc.test.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  21. package/dist/backend/llvm/array-search.test.js +1 -1
  22. package/dist/backend/llvm/blocks.d.ts +8 -0
  23. package/dist/backend/llvm/blocks.js +43 -1
  24. package/dist/backend/llvm/blocks.js.map +1 -1
  25. package/dist/backend/llvm/blocks.test.js +22 -1
  26. package/dist/backend/llvm/blocks.test.js.map +1 -1
  27. package/dist/backend/llvm/byte-numbers.js +15 -5
  28. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  29. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  30. package/dist/backend/llvm/bytes-alias.js +20 -0
  31. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  32. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  33. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  34. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  35. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  36. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  37. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  38. package/dist/backend/llvm/call-lifetimes.js +50 -1
  39. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  40. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  41. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  42. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  43. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  44. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  45. package/dist/backend/llvm/classes.d.ts +11 -0
  46. package/dist/backend/llvm/classes.js +71 -14
  47. package/dist/backend/llvm/classes.js.map +1 -1
  48. package/dist/backend/llvm/classes.test.js +58 -8
  49. package/dist/backend/llvm/classes.test.js.map +1 -1
  50. package/dist/backend/llvm/common.js +1 -0
  51. package/dist/backend/llvm/common.js.map +1 -1
  52. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  53. package/dist/backend/llvm/constant-callbacks.js +55 -12
  54. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  55. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  56. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  57. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  58. package/dist/backend/llvm/counted-loops.js +37 -0
  59. package/dist/backend/llvm/counted-loops.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.d.ts +12 -3
  61. package/dist/backend/llvm/dense-array-access.js +72 -14
  62. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  63. package/dist/backend/llvm/dense-array-access.test.js +59 -3
  64. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  66. package/dist/backend/llvm/dense-array-loops.js +162 -0
  67. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  68. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  69. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  70. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  71. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  72. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  73. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  74. package/dist/backend/llvm/dyn.d.ts +28 -4
  75. package/dist/backend/llvm/dyn.js +293 -178
  76. package/dist/backend/llvm/dyn.js.map +1 -1
  77. package/dist/backend/llvm/emit-function.d.ts +64 -0
  78. package/dist/backend/llvm/emit-function.js +1190 -0
  79. package/dist/backend/llvm/emit-function.js.map +1 -0
  80. package/dist/backend/llvm/emit-module.d.ts +24 -0
  81. package/dist/backend/llvm/emit-module.js +1535 -0
  82. package/dist/backend/llvm/emit-module.js.map +1 -0
  83. package/dist/backend/llvm/emit-statements.d.ts +58 -0
  84. package/dist/backend/llvm/emit-statements.js +1964 -0
  85. package/dist/backend/llvm/emit-statements.js.map +1 -0
  86. package/dist/backend/llvm/emitter.d.ts +547 -283
  87. package/dist/backend/llvm/emitter.js +689 -4643
  88. package/dist/backend/llvm/emitter.js.map +1 -1
  89. package/dist/backend/llvm/emitter.test.js +57 -3
  90. package/dist/backend/llvm/emitter.test.js.map +1 -1
  91. package/dist/backend/llvm/expr-async.js +73 -46
  92. package/dist/backend/llvm/expr-async.js.map +1 -1
  93. package/dist/backend/llvm/expr-async.test.js +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  95. package/dist/backend/llvm/expr-bytes.js +76 -29
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  98. package/dist/backend/llvm/expr-callbacks.js +48 -11
  99. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  100. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  101. package/dist/backend/llvm/expr-calls.js +71 -53
  102. package/dist/backend/llvm/expr-calls.js.map +1 -1
  103. package/dist/backend/llvm/expr-calls.test.js +1 -1
  104. package/dist/backend/llvm/expr-containers.js +39 -15
  105. package/dist/backend/llvm/expr-containers.js.map +1 -1
  106. package/dist/backend/llvm/expr-control.js +16 -16
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  109. package/dist/backend/llvm/expr-dynamic.js +67 -62
  110. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  111. package/dist/backend/llvm/expr-primitives.js +121 -25
  112. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  113. package/dist/backend/llvm/expr-primitives.test.js +2 -2
  114. package/dist/backend/llvm/expr-records.d.ts +1 -1
  115. package/dist/backend/llvm/expr-records.js +32 -11
  116. package/dist/backend/llvm/expr-records.js.map +1 -1
  117. package/dist/backend/llvm/expr-stream-bridges.js +54 -12
  118. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  119. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  120. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  121. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  122. package/dist/backend/llvm/int32-abi.test.js +2 -2
  123. package/dist/backend/llvm/integer-clones.test.js +3 -3
  124. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  125. package/dist/backend/llvm/integer-remainder.js +156 -22
  126. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  127. package/dist/backend/llvm/intern-tables.test.js +1 -1
  128. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  129. package/dist/backend/llvm/jsval-encoding.js +20 -0
  130. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  131. package/dist/backend/llvm/jsval.d.ts +12 -0
  132. package/dist/backend/llvm/jsval.js +488 -0
  133. package/dist/backend/llvm/jsval.js.map +1 -0
  134. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  135. package/dist/backend/llvm/lazy-captures.js +39 -17
  136. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  137. package/dist/backend/llvm/lib-abi.js +1 -1
  138. package/dist/backend/llvm/lib-abi.js.map +1 -1
  139. package/dist/backend/llvm/lib-connect.js +1 -1
  140. package/dist/backend/llvm/lib-connect.js.map +1 -1
  141. package/dist/backend/llvm/lib-datagram.js +14 -8
  142. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  143. package/dist/backend/llvm/lib-dispatch.js +189 -23
  144. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  145. package/dist/backend/llvm/lib-filesystem.js +42 -13
  146. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  147. package/dist/backend/llvm/lib-http2.js +3 -3
  148. package/dist/backend/llvm/lib-http2.js.map +1 -1
  149. package/dist/backend/llvm/lib-lookup.js +2 -2
  150. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  151. package/dist/backend/llvm/lib-network.js +56 -22
  152. package/dist/backend/llvm/lib-network.js.map +1 -1
  153. package/dist/backend/llvm/lib-process.js +90 -50
  154. package/dist/backend/llvm/lib-process.js.map +1 -1
  155. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  156. package/dist/backend/llvm/lib-shared.js +187 -6
  157. package/dist/backend/llvm/lib-shared.js.map +1 -1
  158. package/dist/backend/llvm/lib-stream.js +46 -16
  159. package/dist/backend/llvm/lib-stream.js.map +1 -1
  160. package/dist/backend/llvm/lib-test.js +43 -7
  161. package/dist/backend/llvm/lib-test.js.map +1 -1
  162. package/dist/backend/llvm/lib-tls.js +4 -9
  163. package/dist/backend/llvm/lib-tls.js.map +1 -1
  164. package/dist/backend/llvm/local-array-reads.js +2 -2
  165. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  166. package/dist/backend/llvm/local-extents.d.ts +19 -0
  167. package/dist/backend/llvm/local-extents.js +169 -0
  168. package/dist/backend/llvm/local-extents.js.map +1 -0
  169. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  170. package/dist/backend/llvm/local-extents.test.js +92 -0
  171. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  172. package/dist/backend/llvm/local-union-storage.js +7 -7
  173. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  174. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  175. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  176. package/dist/backend/llvm/map-number-lookup.js +2 -2
  177. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  178. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  179. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  180. package/dist/backend/llvm/narrow-guards.js +151 -0
  181. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  182. package/dist/backend/llvm/nullable-unions.d.ts +64 -6
  183. package/dist/backend/llvm/nullable-unions.js +103 -6
  184. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  185. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  186. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  187. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  188. package/dist/backend/llvm/publish.d.ts +4 -0
  189. package/dist/backend/llvm/publish.js +14 -2
  190. package/dist/backend/llvm/publish.js.map +1 -1
  191. package/dist/backend/llvm/publish.test.js +1 -1
  192. package/dist/backend/llvm/receivers.d.ts +31 -0
  193. package/dist/backend/llvm/receivers.js +395 -0
  194. package/dist/backend/llvm/receivers.js.map +1 -0
  195. package/dist/backend/llvm/record-results.d.ts +12 -1
  196. package/dist/backend/llvm/record-results.js +64 -4
  197. package/dist/backend/llvm/record-results.js.map +1 -1
  198. package/dist/backend/llvm/reference-effects.js +9 -0
  199. package/dist/backend/llvm/reference-effects.js.map +1 -1
  200. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  201. package/dist/backend/llvm/reference-writes.js +142 -6
  202. package/dist/backend/llvm/reference-writes.js.map +1 -1
  203. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  204. package/dist/backend/llvm/reference-writes.test.js +88 -0
  205. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  206. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  207. package/dist/backend/llvm/regex-matchers.js +33 -0
  208. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  209. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  210. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  211. package/dist/backend/llvm/regions.d.ts +1 -1
  212. package/dist/backend/llvm/regions.js +9 -6
  213. package/dist/backend/llvm/regions.js.map +1 -1
  214. package/dist/backend/llvm/regions.test.js +1 -1
  215. package/dist/backend/llvm/shapes.d.ts +66 -43
  216. package/dist/backend/llvm/shapes.js +280 -21
  217. package/dist/backend/llvm/shapes.js.map +1 -1
  218. package/dist/backend/llvm/shapes.test.js +37 -3
  219. package/dist/backend/llvm/shapes.test.js.map +1 -1
  220. package/dist/backend/llvm/split-loops.js +2 -2
  221. package/dist/backend/llvm/split-loops.js.map +1 -1
  222. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  223. package/dist/backend/llvm/stack-objects.js +133 -10
  224. package/dist/backend/llvm/stack-objects.js.map +1 -1
  225. package/dist/backend/llvm/stack-objects.test.js +55 -1
  226. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  227. package/dist/backend/llvm/stack-unions.test.js +1 -1
  228. package/dist/backend/llvm/string-construction.test.js +1 -1
  229. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  230. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  231. package/dist/backend/llvm/string-slices.d.ts +25 -0
  232. package/dist/backend/llvm/string-slices.js +207 -1
  233. package/dist/backend/llvm/string-slices.js.map +1 -1
  234. package/dist/backend/llvm/string-slices.test.js +139 -2
  235. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  236. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  237. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  238. package/dist/backend/llvm/thread-slots.js +142 -0
  239. package/dist/backend/llvm/thread-slots.js.map +1 -0
  240. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  241. package/dist/backend/llvm/thread-slots.test.js +110 -0
  242. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  243. package/dist/backend/llvm/union-repr.d.ts +7 -7
  244. package/dist/backend/llvm/union-repr.js +18 -2
  245. package/dist/backend/llvm/union-repr.js.map +1 -1
  246. package/dist/backend/llvm/union-retype.test.js +17 -3
  247. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  248. package/dist/backend/llvm/walkers.d.ts +2 -2
  249. package/dist/backend/llvm/walkers.js +51 -26
  250. package/dist/backend/llvm/walkers.js.map +1 -1
  251. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  252. package/dist/backend/llvm/wasm-modules.js +66 -0
  253. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  254. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  255. package/dist/backend/llvm/wrapping-sums.js +11 -3
  256. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  257. package/dist/backend/mangle.d.ts +7 -0
  258. package/dist/backend/mangle.js +11 -0
  259. package/dist/backend/mangle.js.map +1 -1
  260. package/dist/backend/may-throw.d.ts +3 -0
  261. package/dist/backend/may-throw.js +4 -2
  262. package/dist/backend/may-throw.js.map +1 -1
  263. package/dist/backend/may-throw.test.js +1 -1
  264. package/dist/backend/native/contracts.d.ts +37 -0
  265. package/dist/backend/native/executable.js +192 -137
  266. package/dist/backend/native/executable.js.map +1 -1
  267. package/dist/backend/native/library.js +1 -0
  268. package/dist/backend/native/library.js.map +1 -1
  269. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  270. package/dist/backend/native/runtime-inputs.js +1 -0
  271. package/dist/backend/native/runtime-inputs.js.map +1 -1
  272. package/dist/backend/native-link-info-core.d.ts +30 -0
  273. package/dist/backend/native-link-info-core.js.map +1 -1
  274. package/dist/backend/publication.test.js +1 -1
  275. package/dist/backend/runtime-pack-core.d.ts +9 -1
  276. package/dist/backend/runtime-pack-core.js +10 -1
  277. package/dist/backend/runtime-pack-core.js.map +1 -1
  278. package/dist/backend/runtime-pack-native.js +1 -1
  279. package/dist/backend/runtime-pack-native.js.map +1 -1
  280. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  281. package/dist/backend/runtime-pack-native.test.js +31 -0
  282. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  283. package/dist/backend/runtime-pack-targets.test.js +5 -0
  284. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  285. package/dist/backend/runtime-pack.test.js +5 -0
  286. package/dist/backend/runtime-pack.test.js.map +1 -1
  287. package/dist/backend/stack-observations.d.ts +22 -0
  288. package/dist/backend/stack-observations.js +382 -0
  289. package/dist/backend/stack-observations.js.map +1 -0
  290. package/dist/backend/stack-observations.test.d.ts +1 -0
  291. package/dist/backend/stack-observations.test.js +233 -0
  292. package/dist/backend/stack-observations.test.js.map +1 -0
  293. package/dist/backend/target-diagnostics.js +8 -0
  294. package/dist/backend/target-diagnostics.js.map +1 -1
  295. package/dist/backend/target-diagnostics.test.js +1 -1
  296. package/dist/backend/warm-cache.js +5 -0
  297. package/dist/backend/warm-cache.js.map +1 -1
  298. package/dist/backend/young-nursery.d.ts +7 -0
  299. package/dist/backend/young-nursery.js +10 -0
  300. package/dist/backend/young-nursery.js.map +1 -0
  301. package/dist/cli/command.js +44 -4
  302. package/dist/cli/command.js.map +1 -1
  303. package/dist/cli/usage.d.ts +11 -1
  304. package/dist/cli/usage.js +20 -1
  305. package/dist/cli/usage.js.map +1 -1
  306. package/dist/compat/fetch-profile.js +10 -1
  307. package/dist/compat/fetch-profile.js.map +1 -1
  308. package/dist/compile-types.d.ts +13 -0
  309. package/dist/contracts/check.js +24 -6
  310. package/dist/contracts/check.js.map +1 -1
  311. package/dist/contracts/int32-elements.d.ts +115 -0
  312. package/dist/contracts/int32-elements.js +1179 -0
  313. package/dist/contracts/int32-elements.js.map +1 -0
  314. package/dist/coverage/report.d.ts +16 -0
  315. package/dist/coverage/report.js +182 -1
  316. package/dist/coverage/report.js.map +1 -1
  317. package/dist/coverage/surface-manifest.js +16 -3
  318. package/dist/coverage/surface-manifest.js.map +1 -1
  319. package/dist/coverage/verdict-cache.d.ts +2 -0
  320. package/dist/coverage/verdict-cache.js +12 -0
  321. package/dist/coverage/verdict-cache.js.map +1 -1
  322. package/dist/coverage/verdict-cache.test.js +2 -1
  323. package/dist/coverage/verdict-cache.test.js.map +1 -1
  324. package/dist/diagnostics/diagnostic.d.ts +10 -6
  325. package/dist/diagnostics/diagnostic.js +29 -21
  326. package/dist/diagnostics/diagnostic.js.map +1 -1
  327. package/dist/diagnostics/envelope.d.ts +39 -2
  328. package/dist/diagnostics/envelope.js.map +1 -1
  329. package/dist/diagnostics/render.d.ts +7 -0
  330. package/dist/diagnostics/render.js +50 -13
  331. package/dist/diagnostics/render.js.map +1 -1
  332. package/dist/diagnostics/render.test.d.ts +1 -0
  333. package/dist/diagnostics/render.test.js +49 -0
  334. package/dist/diagnostics/render.test.js.map +1 -0
  335. package/dist/executable/executable-cache.d.ts +17 -0
  336. package/dist/executable/executable-cache.js +13 -1
  337. package/dist/executable/executable-cache.js.map +1 -1
  338. package/dist/executable/executable-cache.test.js +7 -1
  339. package/dist/executable/executable-cache.test.js.map +1 -1
  340. package/dist/executable/prepare.js +2 -1
  341. package/dist/executable/prepare.js.map +1 -1
  342. package/dist/frontend/analysis.js +6 -1
  343. package/dist/frontend/analysis.js.map +1 -1
  344. package/dist/frontend/builtin-modules.d.ts +16 -2
  345. package/dist/frontend/builtin-modules.js +40 -7
  346. package/dist/frontend/builtin-modules.js.map +1 -1
  347. package/dist/frontend/cjs-syntax.js +52 -51
  348. package/dist/frontend/cjs-syntax.js.map +1 -1
  349. package/dist/frontend/contract-types.d.ts +3 -0
  350. package/dist/frontend/contract-types.js +36 -7
  351. package/dist/frontend/contract-types.js.map +1 -1
  352. package/dist/frontend/experimental-import.d.ts +5 -1
  353. package/dist/frontend/experimental-import.js +26 -7
  354. package/dist/frontend/experimental-import.js.map +1 -1
  355. package/dist/frontend/fork-target.js +20 -22
  356. package/dist/frontend/fork-target.js.map +1 -1
  357. package/dist/frontend/fork-target.test.js +2 -1
  358. package/dist/frontend/fork-target.test.js.map +1 -1
  359. package/dist/frontend/function-completion.js +6 -6
  360. package/dist/frontend/function-completion.js.map +1 -1
  361. package/dist/frontend/helper-tokens.js +15 -3
  362. package/dist/frontend/helper-tokens.js.map +1 -1
  363. package/dist/frontend/helper-tokens.test.js +7 -1
  364. package/dist/frontend/helper-tokens.test.js.map +1 -1
  365. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  366. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  367. package/dist/frontend/input-tracker.d.ts +3 -0
  368. package/dist/frontend/input-tracker.js +32 -3
  369. package/dist/frontend/input-tracker.js.map +1 -1
  370. package/dist/frontend/lib-contract.js +36 -32
  371. package/dist/frontend/lib-contract.js.map +1 -1
  372. package/dist/frontend/lib-exports.js +3 -3
  373. package/dist/frontend/lib-exports.js.map +1 -1
  374. package/dist/frontend/lowering/array-values.d.ts +8 -3
  375. package/dist/frontend/lowering/array-values.js +60 -11
  376. package/dist/frontend/lowering/array-values.js.map +1 -1
  377. package/dist/frontend/lowering/assert-instances.js +4 -4
  378. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  379. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  380. package/dist/frontend/lowering/assertion-identity.js +70 -0
  381. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  382. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  383. package/dist/frontend/lowering/assertion-members.js +185 -0
  384. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  385. package/dist/frontend/lowering/binding-analysis.js +27 -20
  386. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  387. package/dist/frontend/lowering/builtin-calls.js +63 -5
  388. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  389. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  390. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  391. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  392. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  393. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  394. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  395. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  396. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  397. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  398. package/dist/frontend/lowering/builtins/blob.js +8 -6
  399. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  400. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
  401. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
  402. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  403. package/dist/frontend/lowering/builtins/callable-aliases.js +16 -5
  404. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  405. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  406. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  407. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  408. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  409. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  410. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  411. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  412. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  413. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  414. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  415. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  416. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  417. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  418. package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
  419. package/dist/frontend/lowering/builtins/compression.js +107 -44
  420. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  421. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  422. package/dist/frontend/lowering/builtins/constants.js +28 -7
  423. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  424. package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
  425. package/dist/frontend/lowering/builtins/crypto.js +211 -37
  426. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  428. package/dist/frontend/lowering/builtins/dates.js +92 -16
  429. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  430. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  431. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  432. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  433. package/dist/frontend/lowering/builtins/environment.js +3 -3
  434. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  435. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  436. package/dist/frontend/lowering/builtins/errors.js +169 -3
  437. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  438. package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
  439. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  440. package/dist/frontend/lowering/builtins/filesystem.js +77 -77
  441. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  442. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  443. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  444. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  445. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  446. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  447. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  448. package/dist/frontend/lowering/builtins/json.js +232 -24
  449. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  450. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  451. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  452. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  453. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  454. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  455. package/dist/frontend/lowering/builtins/module-calls.js +55 -44
  456. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  457. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  458. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  459. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  461. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  462. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  464. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  465. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  466. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  467. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  468. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  469. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  470. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  471. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  472. package/dist/frontend/lowering/builtins/performance.js +259 -8
  473. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/process.d.ts +32 -1
  475. package/dist/frontend/lowering/builtins/process.js +461 -99
  476. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  478. package/dist/frontend/lowering/builtins/promises.js +326 -43
  479. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  480. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
  481. package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
  482. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  483. package/dist/frontend/lowering/builtins/properties.js +37 -1
  484. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  485. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  486. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  487. package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
  488. package/dist/frontend/lowering/builtins/readline.js +136 -39
  489. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  490. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  491. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  492. package/dist/frontend/lowering/builtins/reflection.js +16 -14
  493. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  494. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  495. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  496. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  497. package/dist/frontend/lowering/builtins/strings.js +101 -12
  498. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  499. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  500. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  501. package/dist/frontend/lowering/builtins/timers.js +75 -30
  502. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  503. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  504. package/dist/frontend/lowering/builtins/url.js +120 -17
  505. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  506. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  507. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  508. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  509. package/dist/frontend/lowering/builtins/v8.js +105 -0
  510. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  511. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  512. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  513. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  514. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  515. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  516. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  517. package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
  518. package/dist/frontend/lowering/builtins/workers.js +193 -8
  519. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  520. package/dist/frontend/lowering/call-arguments.js +69 -14
  521. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  522. package/dist/frontend/lowering/call-signatures.d.ts +19 -1
  523. package/dist/frontend/lowering/call-signatures.js +254 -47
  524. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  525. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  526. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  527. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  528. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  529. package/dist/frontend/lowering/cjs-exports-object.js +528 -0
  530. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  531. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  532. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  533. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  534. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  535. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  536. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  537. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  538. package/dist/frontend/lowering/class-attributes.js +378 -0
  539. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  540. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  541. package/dist/frontend/lowering/class-callbacks.js +21 -10
  542. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  543. package/dist/frontend/lowering/class-construction.js +49 -4
  544. package/dist/frontend/lowering/class-construction.js.map +1 -1
  545. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  546. package/dist/frontend/lowering/class-descriptors.js +8 -8
  547. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  548. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  549. package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
  550. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  551. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  552. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  553. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  554. package/dist/frontend/lowering/class-iterables.js +31 -0
  555. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  556. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  557. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  558. package/dist/frontend/lowering/class-method-values.js +56 -10
  559. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  560. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  561. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  562. package/dist/frontend/lowering/class-protocols.js +25 -44
  563. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  564. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  565. package/dist/frontend/lowering/class-prototypes.js +80 -18
  566. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  567. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  568. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  569. package/dist/frontend/lowering/class-static-data.js +2 -2
  570. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  571. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  572. package/dist/frontend/lowering/class-to-primitive.js +261 -0
  573. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  574. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  575. package/dist/frontend/lowering/class-unions.js +102 -1
  576. package/dist/frontend/lowering/class-unions.js.map +1 -1
  577. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  578. package/dist/frontend/lowering/code-generation.js +127 -0
  579. package/dist/frontend/lowering/code-generation.js.map +1 -0
  580. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  581. package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
  582. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  583. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  584. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  585. package/dist/frontend/lowering/coercions/structural.js +35 -3
  586. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  587. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  588. package/dist/frontend/lowering/coercions/unions.js +57 -1
  589. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  590. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  591. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  592. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  593. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  594. package/dist/frontend/lowering/construction-escapes.js +8 -8
  595. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  596. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  597. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  598. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  599. package/dist/frontend/lowering/constructor-returns.js +477 -0
  600. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  601. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  602. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  603. package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
  604. package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
  605. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  606. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  607. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  608. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  609. package/dist/frontend/lowering/containers/array-construction.js +51 -13
  610. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  611. package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
  612. package/dist/frontend/lowering/containers/array-from-async.js +159 -14
  613. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  614. package/dist/frontend/lowering/containers/array-methods.js +89 -77
  615. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  616. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  617. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  618. package/dist/frontend/lowering/containers/bytes.js +161 -101
  619. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  620. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  621. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  622. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  623. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  624. package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
  625. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  626. package/dist/frontend/lowering/containers/collection-methods.js +54 -25
  627. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  628. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  629. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  630. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  631. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  632. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  633. package/dist/frontend/lowering/containers/for-of.js +19 -19
  634. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  635. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  636. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  637. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  638. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  639. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  640. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  641. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  642. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  643. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  644. package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
  645. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  646. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  647. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  648. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
  649. package/dist/frontend/lowering/cycle-initialization.js +39 -0
  650. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  651. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  652. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  653. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  654. package/dist/frontend/lowering/devirtualize.js +27 -7
  655. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  656. package/dist/frontend/lowering/divergences.d.ts +0 -5
  657. package/dist/frontend/lowering/divergences.js +62 -125
  658. package/dist/frontend/lowering/divergences.js.map +1 -1
  659. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  660. package/dist/frontend/lowering/dyn-streams.js +257 -0
  661. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  662. package/dist/frontend/lowering/error-methods.js +4 -1
  663. package/dist/frontend/lowering/error-methods.js.map +1 -1
  664. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  665. package/dist/frontend/lowering/error-name-order.js +93 -0
  666. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  667. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  668. package/dist/frontend/lowering/expressions/array-literals.js +703 -0
  669. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  670. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  671. package/dist/frontend/lowering/expressions/binary.js +2483 -0
  672. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  673. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  674. package/dist/frontend/lowering/expressions/element-access.js +1797 -0
  675. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  676. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  677. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  678. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  679. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  680. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  681. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  682. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  683. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  684. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
  685. package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
  686. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  687. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  688. package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
  689. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  690. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  691. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  692. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  693. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  694. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  695. package/dist/frontend/lowering/expressions/object-literals.js +253 -85
  696. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  697. package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
  698. package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
  699. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  700. package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
  701. package/dist/frontend/lowering/expressions/property-access.js +3544 -0
  702. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  703. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  704. package/dist/frontend/lowering/expressions/relational.js +1679 -0
  705. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  706. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  707. package/dist/frontend/lowering/expressions/typeof.js +538 -0
  708. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  709. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  710. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  711. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  712. package/dist/frontend/lowering/expressions/updates.js +780 -0
  713. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  714. package/dist/frontend/lowering/function-context.d.ts +10 -0
  715. package/dist/frontend/lowering/function-context.js +11 -1
  716. package/dist/frontend/lowering/function-context.js.map +1 -1
  717. package/dist/frontend/lowering/function-returns.js +52 -28
  718. package/dist/frontend/lowering/function-returns.js.map +1 -1
  719. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  720. package/dist/frontend/lowering/general-streams.js +108 -0
  721. package/dist/frontend/lowering/general-streams.js.map +1 -0
  722. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  723. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  724. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  725. package/dist/frontend/lowering/generic-functions.d.ts +39 -0
  726. package/dist/frontend/lowering/generic-functions.js +393 -75
  727. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  728. package/dist/frontend/lowering/import-meta.js +2 -2
  729. package/dist/frontend/lowering/import-meta.js.map +1 -1
  730. package/dist/frontend/lowering/intern-tables.js +10 -9
  731. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  732. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  733. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  734. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  735. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  736. package/dist/frontend/lowering/js-class-fields.js +170 -0
  737. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  738. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  739. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  740. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  741. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  742. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  743. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  744. package/dist/frontend/lowering/json-require.d.ts +22 -0
  745. package/dist/frontend/lowering/json-require.js +131 -0
  746. package/dist/frontend/lowering/json-require.js.map +1 -0
  747. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  748. package/dist/frontend/lowering/key-order-witness.js +641 -0
  749. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  750. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  751. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  752. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  753. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  754. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  755. package/dist/frontend/lowering/lower-assert.js +61 -60
  756. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  757. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  758. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  759. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  760. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  761. package/dist/frontend/lowering/lower-builtin-values.js +32 -3
  762. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  763. package/dist/frontend/lowering/lower-calls.js +1239 -442
  764. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  765. package/dist/frontend/lowering/lower-classes.d.ts +50 -3
  766. package/dist/frontend/lowering/lower-classes.js +1473 -468
  767. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  768. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  769. package/dist/frontend/lowering/lower-comptime.js +111 -13
  770. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  771. package/dist/frontend/lowering/lower-console.js +13 -11
  772. package/dist/frontend/lowering/lower-console.js.map +1 -1
  773. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  774. package/dist/frontend/lowering/lower-dgram.js +179 -8
  775. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  776. package/dist/frontend/lowering/lower-enums.js +113 -14
  777. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  778. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  779. package/dist/frontend/lowering/lower-event-emitter.js +258 -70
  780. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  781. package/dist/frontend/lowering/lower-event-target.js +2 -2
  782. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  783. package/dist/frontend/lowering/lower-expando.js +17 -13
  784. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  785. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  786. package/dist/frontend/lowering/lower-exprs.js +1481 -12489
  787. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  788. package/dist/frontend/lowering/lower-functions.js +68 -22
  789. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  790. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  791. package/dist/frontend/lowering/lower-generators.js +29 -16
  792. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  793. package/dist/frontend/lowering/lower-global-value.js +5 -1
  794. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  795. package/dist/frontend/lowering/lower-inspect.js +331 -96
  796. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  797. package/dist/frontend/lowering/lower-mixins.js +23 -20
  798. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  799. package/dist/frontend/lowering/lower-mock.d.ts +8 -1
  800. package/dist/frontend/lowering/lower-mock.js +185 -18
  801. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  802. package/dist/frontend/lowering/lower-modules.js +267 -61
  803. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  804. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  805. package/dist/frontend/lowering/lower-namespaces.js +45 -33
  806. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  807. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  808. package/dist/frontend/lowering/lower-node-module.js +147 -14
  809. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  810. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  811. package/dist/frontend/lowering/lower-server.js +488 -100
  812. package/dist/frontend/lowering/lower-server.js.map +1 -1
  813. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  814. package/dist/frontend/lowering/lower-stdlib.js +151 -109
  815. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  816. package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
  817. package/dist/frontend/lowering/lower-stmts.js +1541 -391
  818. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  819. package/dist/frontend/lowering/lower-stream.d.ts +3 -0
  820. package/dist/frontend/lowering/lower-stream.js +398 -56
  821. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  822. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  823. package/dist/frontend/lowering/lower-test.js +437 -62
  824. package/dist/frontend/lowering/lower-test.js.map +1 -1
  825. package/dist/frontend/lowering/lower-timers.js +80 -32
  826. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  827. package/dist/frontend/lowering/lower-url.js +1 -1
  828. package/dist/frontend/lowering/lower-url.js.map +1 -1
  829. package/dist/frontend/lowering/lowerer.d.ts +399 -26
  830. package/dist/frontend/lowering/lowerer.js +1910 -305
  831. package/dist/frontend/lowering/lowerer.js.map +1 -1
  832. package/dist/frontend/lowering/lowerer.test.js +10 -4
  833. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  834. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  835. package/dist/frontend/lowering/maybe-promise.js +249 -0
  836. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  837. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  838. package/dist/frontend/lowering/module-member-this.js +262 -0
  839. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  840. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  841. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  842. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  843. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  844. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  845. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  846. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  847. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  848. package/dist/frontend/lowering/native-ffi.js +11 -11
  849. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  850. package/dist/frontend/lowering/object-factory-new.js +6 -8
  851. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  852. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  853. package/dist/frontend/lowering/private-brands.js +265 -0
  854. package/dist/frontend/lowering/private-brands.js.map +1 -0
  855. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  856. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  857. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  858. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  859. package/dist/frontend/lowering/require-initialization.js +246 -0
  860. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  861. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  862. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  863. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  864. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  865. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  866. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  867. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  868. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  869. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  870. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  871. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  872. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  873. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  874. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  875. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  876. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  877. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  878. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  879. package/dist/frontend/lowering/split-consumers.js +4 -4
  880. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  881. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  882. package/dist/frontend/lowering/static-function-names.js +212 -0
  883. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  884. package/dist/frontend/lowering/static-this.js +6 -6
  885. package/dist/frontend/lowering/static-this.js.map +1 -1
  886. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  887. package/dist/frontend/lowering/strict-mode.js +31 -0
  888. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  889. package/dist/frontend/lowering/string-index-bounds.js +10 -10
  890. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  891. package/dist/frontend/lowering/string-index.d.ts +12 -0
  892. package/dist/frontend/lowering/string-index.js +72 -1
  893. package/dist/frontend/lowering/string-index.js.map +1 -1
  894. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  895. package/dist/frontend/lowering/surfaces.js +252 -41
  896. package/dist/frontend/lowering/surfaces.js.map +1 -1
  897. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  898. package/dist/frontend/lowering/symbol-fields.js +204 -36
  899. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  900. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  901. package/dist/frontend/lowering/symbol-methods.js +24 -6
  902. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  903. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  904. package/dist/frontend/lowering/thread-slots.js +208 -0
  905. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  906. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  907. package/dist/frontend/lowering/typed-arguments.js +472 -0
  908. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  909. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  910. package/dist/frontend/lowering/union-retag.js +27 -0
  911. package/dist/frontend/lowering/union-retag.js.map +1 -1
  912. package/dist/frontend/lowering/union-retag.test.js +24 -1
  913. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  914. package/dist/frontend/lowering/var-hoisting.js +6 -6
  915. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  916. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  917. package/dist/frontend/mock-shapes.js +13 -6
  918. package/dist/frontend/mock-shapes.js.map +1 -1
  919. package/dist/frontend/module-source-candidates.js +1 -1
  920. package/dist/frontend/module-source-candidates.js.map +1 -1
  921. package/dist/frontend/module-source-candidates.test.js +2 -1
  922. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  923. package/dist/frontend/module-syntax.js +8 -8
  924. package/dist/frontend/module-syntax.js.map +1 -1
  925. package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
  926. package/dist/frontend/npm-static-bundled-chunks.js +810 -0
  927. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  928. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  929. package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
  930. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  931. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  932. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  933. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  934. package/dist/frontend/npm-static-bundled-esm.js +768 -0
  935. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  936. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  937. package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
  938. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  939. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  940. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  941. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  942. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  943. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  944. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  945. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  946. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  947. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  948. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  949. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  950. package/dist/frontend/npm-static-prune.js +36 -24
  951. package/dist/frontend/npm-static-prune.js.map +1 -1
  952. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  953. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  954. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  955. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  956. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  957. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  958. package/dist/frontend/npm-static-subtyping.js +7 -9
  959. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  960. package/dist/frontend/npm-static.d.ts +17 -1
  961. package/dist/frontend/npm-static.js +167 -16
  962. package/dist/frontend/npm-static.js.map +1 -1
  963. package/dist/frontend/npm-static.test.js +22 -1
  964. package/dist/frontend/npm-static.test.js.map +1 -1
  965. package/dist/frontend/pipeline.js +164 -26
  966. package/dist/frontend/pipeline.js.map +1 -1
  967. package/dist/frontend/pipeline.test.js +22 -1
  968. package/dist/frontend/pipeline.test.js.map +1 -1
  969. package/dist/frontend/program-analysis.d.ts +6 -1
  970. package/dist/frontend/program-analysis.js +7 -0
  971. package/dist/frontend/program-analysis.js.map +1 -1
  972. package/dist/frontend/program.d.ts +92 -2
  973. package/dist/frontend/program.js +1557 -255
  974. package/dist/frontend/program.js.map +1 -1
  975. package/dist/frontend/program.test.js +76 -6
  976. package/dist/frontend/program.test.js.map +1 -1
  977. package/dist/frontend/resolve.js +36 -2
  978. package/dist/frontend/resolve.js.map +1 -1
  979. package/dist/frontend/resolve.test.js +49 -0
  980. package/dist/frontend/resolve.test.js.map +1 -1
  981. package/dist/frontend/services.d.ts +20 -1
  982. package/dist/frontend/services.js +40 -3
  983. package/dist/frontend/services.js.map +1 -1
  984. package/dist/frontend/services.test.js +2 -1
  985. package/dist/frontend/services.test.js.map +1 -1
  986. package/dist/frontend/threads-import.js +1 -1
  987. package/dist/frontend/threads-import.js.map +1 -1
  988. package/dist/frontend/tier-analysis.d.ts +71 -0
  989. package/dist/frontend/tier-analysis.js +522 -0
  990. package/dist/frontend/tier-analysis.js.map +1 -0
  991. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  992. package/dist/frontend/ts7/api-conformance.js +7 -0
  993. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  994. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  995. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  996. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  997. package/dist/frontend/ts7/ast-node.js +64 -18
  998. package/dist/frontend/ts7/ast-node.js.map +1 -1
  999. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1000. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1001. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1002. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1003. package/dist/frontend/ts7/ast.d.ts +1 -0
  1004. package/dist/frontend/ts7/ast.js +3 -2
  1005. package/dist/frontend/ts7/ast.js.map +1 -1
  1006. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1007. package/dist/frontend/ts7/checker-backend.js +88 -0
  1008. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1009. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1010. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1011. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1012. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1013. package/dist/frontend/ts7/checker-cache.js +0 -6
  1014. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1015. package/dist/frontend/ts7/checker.d.ts +18 -11
  1016. package/dist/frontend/ts7/checker.js +42 -55
  1017. package/dist/frontend/ts7/checker.js.map +1 -1
  1018. package/dist/frontend/ts7/checker.test.js +10 -7
  1019. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1020. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1021. package/dist/frontend/ts7/diagnostic.js +22 -0
  1022. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1023. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1024. package/dist/frontend/ts7/node-functions.js +18 -0
  1025. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1026. package/dist/frontend/ts7/program-host.d.ts +5 -1
  1027. package/dist/frontend/ts7/program-host.js +12 -0
  1028. package/dist/frontend/ts7/program-host.js.map +1 -1
  1029. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1030. package/dist/frontend/ts7/rpc-api.js +8 -1
  1031. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1032. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1033. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1034. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1035. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1036. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1037. package/dist/frontend/ts7/semantic-model.d.ts +54 -24
  1038. package/dist/frontend/ts7/semantic-model.js +88 -16
  1039. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1040. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1041. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1042. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1043. package/dist/frontend/ts7/semantic-types.js +1 -1
  1044. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1045. package/dist/frontend/ts7/session.d.ts +11 -11
  1046. package/dist/frontend/ts7/session.js +8 -5
  1047. package/dist/frontend/ts7/session.js.map +1 -1
  1048. package/dist/frontend/ts7/session.test.js +9 -5
  1049. package/dist/frontend/ts7/session.test.js.map +1 -1
  1050. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1051. package/dist/frontend/ts7/source-parser.js +24 -3
  1052. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1053. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1054. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1055. package/dist/frontend/type-mapper.d.ts +122 -2
  1056. package/dist/frontend/type-mapper.js +2545 -719
  1057. package/dist/frontend/type-mapper.js.map +1 -1
  1058. package/dist/frontend/type-only-imports.d.ts +28 -0
  1059. package/dist/frontend/type-only-imports.js +122 -0
  1060. package/dist/frontend/type-only-imports.js.map +1 -0
  1061. package/dist/frontend/worker-target.js +8 -8
  1062. package/dist/frontend/worker-target.js.map +1 -1
  1063. package/dist/index.d.ts +3 -1
  1064. package/dist/index.js +29 -2
  1065. package/dist/index.js.map +1 -1
  1066. package/dist/ir/analysis.js +4 -2
  1067. package/dist/ir/analysis.js.map +1 -1
  1068. package/dist/ir/api.d.ts +1 -1
  1069. package/dist/ir/api.js +1 -1
  1070. package/dist/ir/api.js.map +1 -1
  1071. package/dist/ir/array-length-stability.d.ts +30 -0
  1072. package/dist/ir/array-length-stability.js +236 -0
  1073. package/dist/ir/array-length-stability.js.map +1 -0
  1074. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1075. package/dist/ir/array-length-stability.test.js +113 -0
  1076. package/dist/ir/array-length-stability.test.js.map +1 -0
  1077. package/dist/ir/build.d.ts +2 -2
  1078. package/dist/ir/build.js +1 -1
  1079. package/dist/ir/build.js.map +1 -1
  1080. package/dist/ir/builtin-effects.js +103 -0
  1081. package/dist/ir/builtin-effects.js.map +1 -1
  1082. package/dist/ir/builtin-signatures.d.ts +1 -1
  1083. package/dist/ir/builtin-signatures.js +494 -25
  1084. package/dist/ir/builtin-signatures.js.map +1 -1
  1085. package/dist/ir/byte-numbers.js +3 -0
  1086. package/dist/ir/byte-numbers.js.map +1 -1
  1087. package/dist/ir/callback-specialization.d.ts +37 -0
  1088. package/dist/ir/callback-specialization.js +459 -0
  1089. package/dist/ir/callback-specialization.js.map +1 -0
  1090. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1091. package/dist/ir/callback-specialization.test.js +208 -0
  1092. package/dist/ir/callback-specialization.test.js.map +1 -0
  1093. package/dist/ir/capture-values.d.ts +0 -1
  1094. package/dist/ir/capture-values.js +51 -40
  1095. package/dist/ir/capture-values.js.map +1 -1
  1096. package/dist/ir/constant-globals.test.js +1 -1
  1097. package/dist/ir/constant-tables.test.js +1 -1
  1098. package/dist/ir/field-values.test.js +1 -1
  1099. package/dist/ir/final-fields.test.js +1 -1
  1100. package/dist/ir/function-references.test.js +9 -1
  1101. package/dist/ir/function-references.test.js.map +1 -1
  1102. package/dist/ir/init-only-globals.test.js +1 -1
  1103. package/dist/ir/initializer-bindings.test.js +1 -1
  1104. package/dist/ir/int32-slots.d.ts +14 -0
  1105. package/dist/ir/int32-slots.js +97 -14
  1106. package/dist/ir/int32-slots.js.map +1 -1
  1107. package/dist/ir/int32-slots.test.js +1 -1
  1108. package/dist/ir/integer-loop-facts.d.ts +2 -0
  1109. package/dist/ir/integer-loop-facts.js +24 -3
  1110. package/dist/ir/integer-loop-facts.js.map +1 -1
  1111. package/dist/ir/integer-loops.d.ts +1 -1
  1112. package/dist/ir/integer-loops.js +39 -9
  1113. package/dist/ir/integer-loops.js.map +1 -1
  1114. package/dist/ir/integer-loops.test.js +104 -0
  1115. package/dist/ir/integer-loops.test.js.map +1 -1
  1116. package/dist/ir/integer-ranges.d.ts +3 -0
  1117. package/dist/ir/integer-ranges.js +3 -1
  1118. package/dist/ir/integer-ranges.js.map +1 -1
  1119. package/dist/ir/integer-ranges.test.js +82 -1
  1120. package/dist/ir/integer-ranges.test.js.map +1 -1
  1121. package/dist/ir/intrinsic-signatures.js +6 -0
  1122. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1123. package/dist/ir/ir.d.ts +221 -58
  1124. package/dist/ir/ir.js +119 -12
  1125. package/dist/ir/ir.js.map +1 -1
  1126. package/dist/ir/ir.test.js +10 -0
  1127. package/dist/ir/ir.test.js.map +1 -1
  1128. package/dist/ir/jsval.d.ts +8 -0
  1129. package/dist/ir/jsval.js +365 -0
  1130. package/dist/ir/jsval.js.map +1 -0
  1131. package/dist/ir/jsval.test.d.ts +1 -0
  1132. package/dist/ir/jsval.test.js +239 -0
  1133. package/dist/ir/jsval.test.js.map +1 -0
  1134. package/dist/ir/runtime-features.d.ts +148 -33
  1135. package/dist/ir/runtime-features.js +629 -386
  1136. package/dist/ir/runtime-features.js.map +1 -1
  1137. package/dist/ir/scalar-records.test.js +1 -1
  1138. package/dist/ir/self-captures.d.ts +33 -0
  1139. package/dist/ir/self-captures.js +245 -0
  1140. package/dist/ir/self-captures.js.map +1 -0
  1141. package/dist/ir/self-captures.test.d.ts +1 -0
  1142. package/dist/ir/self-captures.test.js +135 -0
  1143. package/dist/ir/self-captures.test.js.map +1 -0
  1144. package/dist/ir/serialize.d.ts +1 -1
  1145. package/dist/ir/serialize.js +7 -4
  1146. package/dist/ir/serialize.js.map +1 -1
  1147. package/dist/ir/tiers.d.ts +26 -0
  1148. package/dist/ir/tiers.js +101 -0
  1149. package/dist/ir/tiers.js.map +1 -0
  1150. package/dist/ir/tiers.test.d.ts +1 -0
  1151. package/dist/ir/tiers.test.js +140 -0
  1152. package/dist/ir/tiers.test.js.map +1 -0
  1153. package/dist/ir/traverse.js +103 -94
  1154. package/dist/ir/traverse.js.map +1 -1
  1155. package/dist/ir/traverse.test.js +33 -30
  1156. package/dist/ir/traverse.test.js.map +1 -1
  1157. package/dist/ir/unshare.js +65 -3
  1158. package/dist/ir/unshare.js.map +1 -1
  1159. package/dist/ir/unshare.test.js +1 -1
  1160. package/dist/ir/validate.js +175 -68
  1161. package/dist/ir/validate.js.map +1 -1
  1162. package/dist/ir/validate.test.js +26 -9
  1163. package/dist/ir/validate.test.js.map +1 -1
  1164. package/dist/library/fence-eval.test.js +1 -1
  1165. package/dist/library/int-infer.test.js +4 -4
  1166. package/dist/library/ir-policy.js +13 -0
  1167. package/dist/library/ir-policy.js.map +1 -1
  1168. package/dist/library/library-cache.d.ts +1 -0
  1169. package/dist/library/library-cache.js.map +1 -1
  1170. package/dist/library/library-cache.test.js +5 -5
  1171. package/dist/library/library-profile.d.ts +4 -4
  1172. package/dist/library/library-profile.js +35 -7
  1173. package/dist/library/library-profile.js.map +1 -1
  1174. package/dist/library/prepare.js +13 -1
  1175. package/dist/library/prepare.js.map +1 -1
  1176. package/dist/native/cli.js +5 -0
  1177. package/dist/native/cli.js.map +1 -1
  1178. package/dist/native/compiler.js +2 -2
  1179. package/dist/native/compiler.js.map +1 -1
  1180. package/dist/native/compiler.test.js +2 -2
  1181. package/dist/native/prepare.js +7 -0
  1182. package/dist/native/prepare.js.map +1 -1
  1183. package/dist/native/sanitizer.test.js +12 -0
  1184. package/dist/native/sanitizer.test.js.map +1 -1
  1185. package/dist/native/toolchain.d.ts +2 -0
  1186. package/dist/native/toolchain.js +10 -1
  1187. package/dist/native/toolchain.js.map +1 -1
  1188. package/dist/native/toolchain.test.js +39 -1
  1189. package/dist/native/toolchain.test.js.map +1 -1
  1190. package/dist/startup-cache.d.ts +1 -0
  1191. package/dist/startup-cache.js +1 -0
  1192. package/dist/startup-cache.js.map +1 -1
  1193. package/dist/wasm/base64.d.ts +5 -0
  1194. package/dist/wasm/base64.js +62 -0
  1195. package/dist/wasm/base64.js.map +1 -0
  1196. package/dist/wasm/binary.d.ts +36 -0
  1197. package/dist/wasm/binary.js +1976 -0
  1198. package/dist/wasm/binary.js.map +1 -0
  1199. package/dist/wasm/binary.test.d.ts +1 -0
  1200. package/dist/wasm/binary.test.js +190 -0
  1201. package/dist/wasm/binary.test.js.map +1 -0
  1202. package/dist/wasm/discover.d.ts +38 -0
  1203. package/dist/wasm/discover.js +377 -0
  1204. package/dist/wasm/discover.js.map +1 -0
  1205. package/dist/wasm/discover.test.d.ts +1 -0
  1206. package/dist/wasm/discover.test.js +24 -0
  1207. package/dist/wasm/discover.test.js.map +1 -0
  1208. package/dist/wasm/module.d.ts +151 -0
  1209. package/dist/wasm/module.js +575 -0
  1210. package/dist/wasm/module.js.map +1 -0
  1211. package/dist/wasm/translate.d.ts +48 -0
  1212. package/dist/wasm/translate.js +2129 -0
  1213. package/dist/wasm/translate.js.map +1 -0
  1214. package/dist/wasm/translate.test.d.ts +1 -0
  1215. package/dist/wasm/translate.test.js +207 -0
  1216. package/dist/wasm/translate.test.js.map +1 -0
  1217. package/package.json +21 -20
  1218. package/surface-manifest.json +303 -19
@@ -4,7 +4,7 @@ import { ladderFenceExpr } from "./lowerer.js";
4
4
  import { isJsSourceFile, locOf } from "../program.js";
5
5
  import { arrayOf, BOOL, BYTES_U8, canBoxFuncIntoDyn, canConvertToDyn, DYN, DYN_HANDLE_KINDS, F64, funcOf, HTTP2SESSION_T, HTTP2STREAM_T, HTTPCLIENTREQ_T, HTTPREQ_T, HTTPRES_T, NETSERVER_T, NETSOCKET_T, NULL_T, SECURECTX_T, STRING, UNDEFINED_T, typeKey, VOID, } from "../../ir/ir.js";
6
6
  import { AGENT_DOCUMENTED_OPTIONS, HTTPS_AGENT_DOCUMENTED_OPTIONS, builtinFenceHintOf, builtinModuleFnOf, fenceOrDropOptionKey, HTTP_CLIENT_DOCUMENTED_OPTIONS, HTTP_SERVER_DOCUMENTED_OPTIONS, HTTP2_SECURE_SERVER_DOCUMENTED_OPTIONS, HTTPS_CLIENT_DOCUMENTED_OPTIONS, sideEffectFreeOptionValue, TLS_SERVER_DOCUMENTED_OPTIONS, } from "./surfaces.js";
7
- import { conditionalSpreadOf } from "./expressions/object-literals.js";
7
+ import { conditionalSpreadOf, lowerDynObjectLiteral } from "./expressions/object-literals.js";
8
8
  import { resultIsDiscarded } from "./call-position.js";
9
9
  import { lowerCallbackArg as lowerCallbackArgShared } from "./callback-arg.js";
10
10
  import { pairsSnapshotHelper } from "./pairs-snapshot.js";
@@ -583,7 +583,7 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
583
583
  // budget pair) ride the generic path — null hands the dispatch back.
584
584
  if (builtinModuleFnOf(lowerer, "net", bi.member))
585
585
  return null;
586
- const args = expr.arguments;
586
+ const args = expr.arguments.nodes;
587
587
  if (bi.member === "createServer") {
588
588
  if (args.length === 0) {
589
589
  return { kind: "libCall", fn: "net.createServer", args: [], type: NETSERVER_T, loc };
@@ -594,7 +594,7 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
594
594
  // ERR_INVALID_ARG_TYPE on 'options' before any server exists. DYN
595
595
  // result — the checked-dynamic lane's concise arrows box it, and
596
596
  // the throw means it never materializes.
597
- if (isJsSourceFile(expr.getSourceFile())) {
597
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr))) {
598
598
  const t = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
599
599
  if (t !== null && (t.kind === "string" || t.kind === "f64" || t.kind === "bool")) {
600
600
  const raw = lowerer.lowerExpr(args[0]);
@@ -633,7 +633,7 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
633
633
  // invalid-input probes build theirs with computed keys): the
634
634
  // checked-dynamic walk validates Node-order and the compiler-rendered
635
635
  // fence is the post-validation tail.
636
- if (args.length === 1 && isJsSourceFile(expr.getSourceFile())) {
636
+ if (args.length === 1 && isJsSourceFile(ts.getSourceFileOfNode(expr))) {
637
637
  const t = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
638
638
  if (t !== null && (t.kind === "dyn" || t.kind === "record")) {
639
639
  const raw = lowerer.lowerExpr(args[0]);
@@ -722,9 +722,9 @@ function lookupFnShapeOk(lowerer, t) {
722
722
  * name; a connect listener argument is supported on the no-lookup form
723
723
  * only. */
724
724
  function lowerNetConnectOptions(lowerer, expr, member, loc) {
725
- const args = expr.arguments;
725
+ const args = expr.arguments.nodes;
726
726
  const optsNode = args[0];
727
- const isJs = isJsSourceFile(expr.getSourceFile());
727
+ const isJs = isJsSourceFile(ts.getSourceFileOfNode(expr));
728
728
  // The checked-dynamic option-bag route (JS sources): a literal with
729
729
  // computed keys (the invalid-input probes' spelling) or an objectMode-
730
730
  // trio member rides WHOLE to the runtime walk — Node's Socket-ctor
@@ -732,7 +732,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
732
732
  // port/host/autoSelectFamily), with the compiler-rendered fence as the
733
733
  // post-validation tail.
734
734
  if (isJs) {
735
- const needsBag = optsNode.properties.some((p) => (!ts.isPropertyAssignment(p) && !ts.isShorthandPropertyAssignment(p)) ||
735
+ const needsBag = optsNode.properties.nodes.some((p) => (!ts.isPropertyAssignment(p) && !ts.isShorthandPropertyAssignment(p)) ||
736
736
  (ts.isPropertyAssignment(p) && ts.isComputedPropertyName(p.name)) ||
737
737
  ["objectMode", "readableObjectMode", "writableObjectMode"].includes((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
738
738
  (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))
@@ -772,7 +772,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
772
772
  type: NETSOCKET_T,
773
773
  loc,
774
774
  });
775
- for (const prop of optsNode.properties) {
775
+ for (const prop of optsNode.properties.nodes) {
776
776
  let initializer;
777
777
  if (ts.isPropertyAssignment(prop) &&
778
778
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -916,8 +916,8 @@ function lowerServerCloseBind(lowerer, call, access) {
916
916
  return null;
917
917
  const loc = locOf(call);
918
918
  const recvNode = closeAccess.expression;
919
- const thisArg = call.arguments[0];
920
- if (call.arguments.length !== 1 ||
919
+ const thisArg = call.arguments.nodes[0];
920
+ if (call.arguments.nodes.length !== 1 ||
921
921
  !thisArg ||
922
922
  !ts.isIdentifier(recvNode) ||
923
923
  !ts.isIdentifier(thisArg) ||
@@ -1083,7 +1083,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1083
1083
  return null;
1084
1084
  const name = access.name.text;
1085
1085
  const loc = locOf(call);
1086
- const args = call.arguments;
1086
+ const args = call.arguments.nodes;
1087
1087
  if (name === "getConnections") {
1088
1088
  // cb(null, count) on the next tick; answers the server.
1089
1089
  if (args.length !== 1) {
@@ -1155,7 +1155,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1155
1155
  let host = null;
1156
1156
  let v6only = null;
1157
1157
  let reusePort = null;
1158
- for (const prop of args[0].properties) {
1158
+ for (const prop of args[0].properties.nodes) {
1159
1159
  let initializer;
1160
1160
  if (ts.isPropertyAssignment(prop) &&
1161
1161
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -1213,7 +1213,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1213
1213
  }
1214
1214
  else if (key === "signal" &&
1215
1215
  ts.isPropertyAssignment(prop) &&
1216
- isJsSourceFile(call.getSourceFile())) {
1216
+ isJsSourceFile(ts.getSourceFileOfNode(call))) {
1217
1217
  // A provably-non-AbortSignal signal (the invalid-input probes:
1218
1218
  // strings, numbers, plain records) throws Node's
1219
1219
  // validateAbortSignal ladder; plausible signal values keep the
@@ -1287,6 +1287,18 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1287
1287
  ? [receiver, port, host, v6only, cbV]
1288
1288
  : [receiver, port, host, v6only, reusePort, cbV]);
1289
1289
  }
1290
+ // listen(path[, cb]): a string first argument names a Unix socket
1291
+ // (the runtime takes a numeric string as a port, Node's isPipeName).
1292
+ if (lowerer.mapTypeOf(lowerer.typeOf(args[0]))?.kind === "string") {
1293
+ if (args.length > 2) {
1294
+ lowerer.noLowering(`listen(path) with ${args.length} arguments`, call, "the supported form is listen(path[, callback])");
1295
+ }
1296
+ const path = lowerer.lowerExprExpecting(args[0], STRING);
1297
+ if (args.length === 1)
1298
+ return listenResult("net.listenPath", [receiver, path]);
1299
+ const { cb } = lowerCallbackArg(lowerer, args[1], "listen callbacks", 0, () => false, "use ()", []);
1300
+ return listenResult("net.listenPathCb", [receiver, path, cb]);
1301
+ }
1290
1302
  const port = lowerer.lowerExprExpecting(args[0], F64);
1291
1303
  // The optional middle host — listen(port, '127.0.0.1'[, cb]): a
1292
1304
  // string-typed second argument is the bind address (the net.connect
@@ -1326,6 +1338,19 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1326
1338
  if (args.length === 0) {
1327
1339
  return { kind: "libCall", fn: "net.serverClose", args: [receiver], type: VOID, loc };
1328
1340
  }
1341
+ if (lowerer.checker
1342
+ .getCallSignatures(lowerer.typeOf(args[0]))
1343
+ .some((sig) => sig.getParameters().length > 0)) {
1344
+ // close((err) => ...): undefined once the server closes, or Node's
1345
+ // ERR_SERVER_NOT_RUNNING when it was not listening.
1346
+ return {
1347
+ kind: "libCall",
1348
+ fn: "net.serverCloseDyn",
1349
+ args: [receiver, lowerSocketDynListener(lowerer, args[0], "close callbacks")],
1350
+ type: VOID,
1351
+ loc,
1352
+ };
1353
+ }
1329
1354
  const { cb } = lowerCallbackArg(lowerer, args[0], "close callbacks", 0, () => false, "use ()", []);
1330
1355
  return { kind: "libCall", fn: "net.serverCloseCb", args: [receiver, cb], type: VOID, loc };
1331
1356
  }
@@ -1583,6 +1608,32 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1583
1608
  const result = lowerer.mapTypeOf(lowerer.typeOf(call));
1584
1609
  if (result && isAddressInfoRecord(lowerer, result)) {
1585
1610
  const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
1611
+ if (unixListenReachable(lowerer)) {
1612
+ // A Unix-socket server's address() is its path, which this record
1613
+ // cannot hold: the check throws for one before the record reads.
1614
+ const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
1615
+ const server = () => varRef(local.id, NETSERVER_T, loc);
1616
+ return {
1617
+ kind: "seqExpr",
1618
+ stmts: [
1619
+ { kind: "varDecl", localId: local.id, init: receiver, loc },
1620
+ {
1621
+ kind: "exprStmt",
1622
+ expr: {
1623
+ kind: "libCall",
1624
+ fn: "net.serverAddressCheck",
1625
+ args: [server()],
1626
+ type: VOID,
1627
+ loc,
1628
+ },
1629
+ loc,
1630
+ },
1631
+ ],
1632
+ result: { kind: "libCall", fn: "net.serverAddress", args: [server()], type: result, loc },
1633
+ type: result,
1634
+ loc,
1635
+ };
1636
+ }
1586
1637
  return { kind: "libCall", fn: "net.serverAddress", args: [receiver], type: result, loc };
1587
1638
  }
1588
1639
  // @types/node's `string | AddressInfo | null`: the record while the
@@ -1598,20 +1649,50 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1598
1649
  const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
1599
1650
  const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
1600
1651
  const server = varRef(local.id, NETSERVER_T, loc);
1652
+ const recordArm = {
1653
+ kind: "unionWrap",
1654
+ unionId,
1655
+ tag: lowerer.armTag(unionId, record),
1656
+ value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
1657
+ type: result,
1658
+ loc,
1659
+ };
1660
+ const stringTag = lowerer.armTag(unionId, STRING);
1661
+ let listeningArm = recordArm;
1662
+ const stmts = [{ kind: "varDecl", localId: local.id, init: receiver, loc }];
1663
+ if (stringTag >= 0 && unixListenReachable(lowerer)) {
1664
+ // Node answers a Unix-socket server's address() with its path.
1665
+ const pathLocal = lowerer.declareHiddenLocal("%addressPath", STRING);
1666
+ const path = () => varRef(pathLocal.id, STRING, loc);
1667
+ stmts.push({
1668
+ kind: "varDecl",
1669
+ localId: pathLocal.id,
1670
+ init: { kind: "libCall", fn: "net.serverUnixPath", args: [server], type: STRING, loc },
1671
+ loc,
1672
+ });
1673
+ listeningArm = {
1674
+ kind: "ternary",
1675
+ cond: {
1676
+ kind: "strEq",
1677
+ negated: true,
1678
+ left: path(),
1679
+ right: strLit("", loc),
1680
+ type: BOOL,
1681
+ loc,
1682
+ },
1683
+ then: { kind: "unionWrap", unionId, tag: stringTag, value: path(), type: result, loc },
1684
+ else_: recordArm,
1685
+ type: result,
1686
+ loc,
1687
+ };
1688
+ }
1601
1689
  return {
1602
1690
  kind: "seqExpr",
1603
- stmts: [{ kind: "varDecl", localId: local.id, init: receiver, loc }],
1691
+ stmts,
1604
1692
  result: {
1605
1693
  kind: "ternary",
1606
1694
  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
- },
1695
+ then: listeningArm,
1615
1696
  else_: {
1616
1697
  kind: "unionWrap",
1617
1698
  unionId,
@@ -1629,6 +1710,114 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1629
1710
  }
1630
1711
  lowerer.noLowering(`Server.${name}`, call, 'listen, close, address().port, emit("connection", socket), and on/once of connection/request/upgrade/error/close/listening/sessionError are the supported Server members', lowerer.checker.getSymbolAtLocation(access.name));
1631
1712
  }
1713
+ /** Whether a setEncoding call can reach some net.Socket in this program:
1714
+ * `x.setEncoding(...)` or `x["setEncoding"](...)` where `x` is a socket
1715
+ * or an untyped value. Sockets that never get an encoding keep the Buffer
1716
+ * chunk path; with one, Node's 'data' chunks are strings. */
1717
+ function socketEncodingReachable(lowerer) {
1718
+ if (lowerer.socketEncodingReachable !== null)
1719
+ return lowerer.socketEncodingReachable;
1720
+ let reachable = false;
1721
+ for (const file of lowerer.program.getSourceFiles()) {
1722
+ if (file.isDeclarationFile || !file.text.includes("setEncoding"))
1723
+ continue;
1724
+ ts.walkPreorder(file, (node) => {
1725
+ if (reachable)
1726
+ return "skip";
1727
+ if (!ts.isCallExpression(node))
1728
+ return undefined;
1729
+ const callee = node.expression;
1730
+ const receiver = ts.isPropertyAccessExpression(callee) && callee.name.text === "setEncoding"
1731
+ ? callee.expression
1732
+ : ts.isElementAccessExpression(callee) &&
1733
+ ts.isStringLiteralLike(callee.argumentExpression) &&
1734
+ callee.argumentExpression.text === "setEncoding"
1735
+ ? callee.expression
1736
+ : null;
1737
+ if (receiver === null)
1738
+ return undefined;
1739
+ const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(receiver))?.kind;
1740
+ if (kind === undefined || kind === "netSocket" || kind === "dyn")
1741
+ reachable = true;
1742
+ return undefined;
1743
+ });
1744
+ if (reachable)
1745
+ break;
1746
+ }
1747
+ lowerer.socketEncodingReachable = reachable;
1748
+ return reachable;
1749
+ }
1750
+ /** Whether some server in the program may listen on a Unix socket: a
1751
+ * `.listen(x, ...)` call on a server (or an untyped value) whose first
1752
+ * argument is string-typed. Only then does address() check for the socket
1753
+ * path, so other programs keep the record-only lowering. */
1754
+ function unixListenReachable(lowerer) {
1755
+ if (lowerer.unixListenReachable !== null)
1756
+ return lowerer.unixListenReachable;
1757
+ let reachable = false;
1758
+ for (const file of lowerer.program.getSourceFiles()) {
1759
+ if (file.isDeclarationFile || !file.text.includes("listen"))
1760
+ continue;
1761
+ ts.walkPreorder(file, (node) => {
1762
+ if (reachable)
1763
+ return "skip";
1764
+ if (!ts.isCallExpression(node) || node.arguments.nodes.length === 0)
1765
+ return undefined;
1766
+ const callee = node.expression;
1767
+ if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== "listen")
1768
+ return undefined;
1769
+ const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(callee.expression))?.kind;
1770
+ if (kind !== undefined && kind !== "netServer" && kind !== "dyn")
1771
+ return undefined;
1772
+ const arg = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(node.arguments.nodes[0]));
1773
+ // Only a string-typed argument lowers to listen(path) (an untyped
1774
+ // one checks into a port).
1775
+ if (arg?.kind === "string")
1776
+ reachable = true;
1777
+ return undefined;
1778
+ });
1779
+ if (reachable)
1780
+ break;
1781
+ }
1782
+ lowerer.unixListenReachable = reachable;
1783
+ return reachable;
1784
+ }
1785
+ /** An inline 'data' listener whose chunk parameter is typed Buffer, for a
1786
+ * socket that may have an encoding set: the chunk binds as a checked
1787
+ * dynamic value, so the body sees what Node passes (a string after
1788
+ * setEncoding, a Buffer otherwise) whatever the annotation says. Null
1789
+ * for other listener shapes. */
1790
+ function lowerEncodedDataListener(lowerer, node) {
1791
+ let fn = node;
1792
+ while (ts.isParenthesizedExpression(fn))
1793
+ fn = fn.expression;
1794
+ if (!ts.isArrowFunction(fn) && !ts.isFunctionExpression(fn))
1795
+ return null;
1796
+ if (fn.parameters.nodes.length !== 1)
1797
+ return null;
1798
+ const param = fn.parameters.nodes[0];
1799
+ if (!ts.isIdentifier(param.name) || param.initializer || param.dotDotDotToken)
1800
+ return null;
1801
+ const symbol = lowerer.checker.getSymbolAtLocation(param.name);
1802
+ if (symbol === undefined)
1803
+ return null;
1804
+ const previousBinding = lowerer.runtimeOptionalBindingTypes.get(symbol);
1805
+ const previousImplicit = lowerer.implicitParamTypes;
1806
+ const implicit = new Map(previousImplicit ?? []);
1807
+ implicit.set(symbol, lowerer.checker.getUnknownType());
1808
+ lowerer.runtimeOptionalBindingTypes.set(symbol, DYN);
1809
+ lowerer.implicitParamTypes = implicit;
1810
+ try {
1811
+ return lowerer.lowerExpr(fn);
1812
+ }
1813
+ finally {
1814
+ if (previousBinding === undefined)
1815
+ lowerer.runtimeOptionalBindingTypes.delete(symbol);
1816
+ else
1817
+ lowerer.runtimeOptionalBindingTypes.set(symbol, previousBinding);
1818
+ lowerer.implicitParamTypes = previousImplicit;
1819
+ }
1820
+ }
1632
1821
  /** Method calls on net.Socket receivers: write/end/destroy/pipe and
1633
1822
  * on/once("data" | "end" | "close" | "error" | "connect"). Null for
1634
1823
  * other receivers. */
@@ -1639,7 +1828,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1639
1828
  return null;
1640
1829
  const name = access.name.text;
1641
1830
  const loc = locOf(call);
1642
- const args = call.arguments;
1831
+ const args = call.arguments.nodes;
1643
1832
  if ((name === "ref" || name === "unref") && args.length === 0) {
1644
1833
  // Whether the socket keeps the event loop alive.
1645
1834
  requireStatementPosition(lowerer, call, `socket.${name}()`);
@@ -1666,7 +1855,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1666
1855
  if (encT.isStringLiteralType() && chunkT !== null) {
1667
1856
  if (encT.value === "buffer" &&
1668
1857
  chunkT.kind === "string" &&
1669
- isJsSourceFile(call.getSourceFile())) {
1858
+ isJsSourceFile(ts.getSourceFileOfNode(call))) {
1670
1859
  lowerer.lowerExpr(args[0]); // evaluation order (effect-free in practice)
1671
1860
  return nodeThrowExpr(1, "ERR_UNKNOWN_ENCODING", "Unknown encoding: buffer", VOID, loc);
1672
1861
  }
@@ -1883,6 +2072,20 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1883
2072
  ? value
1884
2073
  : lowerer.coerceInto(call, value, declared);
1885
2074
  }
2075
+ if (name === "isSessionReused" && args.length === 0) {
2076
+ // TLSSocket.isSessionReused(): the client never offers a cached
2077
+ // session (no session resumption, a documented TLS divergence), so
2078
+ // no handshake resumes one. A plain socket asserted to be a
2079
+ // TLSSocket answers false too, where Node has no such method.
2080
+ const receiver = coerceToHandle(lowerer, access.expression, NETSOCKET_T);
2081
+ return {
2082
+ kind: "seqExpr",
2083
+ stmts: [{ kind: "exprStmt", expr: receiver, loc }],
2084
+ result: boolLit(false, loc),
2085
+ type: BOOL,
2086
+ loc,
2087
+ };
2088
+ }
1886
2089
  if (name === "resetAndDestroy") {
1887
2090
  // An RST close; a connecting socket resets once it connects. Answers
1888
2091
  // the socket, Node's chaining.
@@ -1993,6 +2196,26 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1993
2196
  loc,
1994
2197
  };
1995
2198
  }
2199
+ if (param !== null && param.kind === "bytes" && socketEncodingReachable(lowerer)) {
2200
+ const encoded = lowerEncodedDataListener(lowerer, args[1]);
2201
+ // A listener defined elsewhere keeps its Buffer parameter; it takes
2202
+ // the chunk through the checked boundary, so a string chunk fails
2203
+ // the check instead of arriving as a Buffer.
2204
+ const cb = encoded ??
2205
+ {
2206
+ kind: "dynCheck",
2207
+ value: lowerSocketDynListener(lowerer, args[1], "data listeners"),
2208
+ type: funcOf([DYN], VOID),
2209
+ loc,
2210
+ };
2211
+ return {
2212
+ kind: "libCall",
2213
+ fn: "net.sockOnData",
2214
+ args: [receiver, cb, once],
2215
+ type: VOID,
2216
+ loc,
2217
+ };
2218
+ }
1996
2219
  const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
1997
2220
  return { kind: "libCall", fn: "net.sockOnData", args: [receiver, cb, once], type: VOID, loc };
1998
2221
  }
@@ -2039,6 +2262,17 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
2039
2262
  : "net.sockOnConnect";
2040
2263
  return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
2041
2264
  }
2265
+ if (event === "lookup") {
2266
+ // (err, address, family, host) after the host name resolves, before
2267
+ // the connect: once per resolved address, or once with the error.
2268
+ return {
2269
+ kind: "libCall",
2270
+ fn: "net.sockOnLookup",
2271
+ args: [receiver, lowerSocketDynListener(lowerer, args[1], "lookup listeners"), once],
2272
+ type: VOID,
2273
+ loc,
2274
+ };
2275
+ }
2042
2276
  if (event === "finish") {
2043
2277
  // Fires once when the FIN goes out — once either way (the event
2044
2278
  // happens at most once per socket).
@@ -2071,7 +2305,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
2071
2305
  loc,
2072
2306
  };
2073
2307
  }
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)');
2308
+ lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "lookup", "ready", "timeout", "readable", "secureConnect", and "session" are the supported socket events (as literals)');
2075
2309
  }
2076
2310
  lowerer.noLowering(`Socket.${name}`, call, "write, end, destroy, pipe, setTimeout, setKeepAlive, setNoDelay, the address fields, read, unshift, and on/once of data/end/close/error/connect/ready/timeout/readable are the supported Socket members", lowerer.checker.getSymbolAtLocation(access.name));
2077
2311
  }
@@ -2132,7 +2366,7 @@ function h2EndStreamOption(lowerer, node) {
2132
2366
  lowerer.noLowering("h2 options argument", node, "pass the options as an object literal ({ endStream: true })");
2133
2367
  }
2134
2368
  let end;
2135
- for (const prop of node.properties) {
2369
+ for (const prop of node.properties.nodes) {
2136
2370
  if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
2137
2371
  lowerer.noLowering("h2 options with spreads or computed keys", prop, "use plain `name: value` entries");
2138
2372
  }
@@ -2160,7 +2394,7 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
2160
2394
  return null;
2161
2395
  const name = access.name.text;
2162
2396
  const loc = locOf(call);
2163
- const args = call.arguments;
2397
+ const args = call.arguments.nodes;
2164
2398
  const receiver = () => coerceToHandle(lowerer, access.expression, HTTP2SESSION_T);
2165
2399
  if (name === "request") {
2166
2400
  const pairs = args.length >= 1 && !ts.isObjectLiteralExpression(args[0]) === false && args.length >= 1
@@ -2340,7 +2574,7 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
2340
2574
  return null;
2341
2575
  const name = access.name.text;
2342
2576
  const loc = locOf(call);
2343
- const args = call.arguments;
2577
+ const args = call.arguments.nodes;
2344
2578
  const receiver = () => receiverOverride ?? coerceToHandle(lowerer, access.expression, HTTP2STREAM_T);
2345
2579
  if (name === "respond") {
2346
2580
  requireStatementPosition(lowerer, call, "stream.respond(...)");
@@ -3003,7 +3237,7 @@ export function lowerServerProperty(lowerer, expr) {
3003
3237
  if (expr.name.text !== "port")
3004
3238
  return null;
3005
3239
  const recv = expr.expression;
3006
- if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.length !== 0)
3240
+ if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.nodes.length !== 0)
3007
3241
  return null;
3008
3242
  if (!ts.isPropertyAccessExpression(recv.expression))
3009
3243
  return null;
@@ -3015,6 +3249,30 @@ export function lowerServerProperty(lowerer, expr) {
3015
3249
  if (!lowerer.isStdlibMember(inner))
3016
3250
  return null;
3017
3251
  const receiver = coerceToHandle(lowerer, inner.expression, NETSERVER_T);
3252
+ if (unixListenReachable(lowerer)) {
3253
+ const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
3254
+ const server = () => varRef(local.id, NETSERVER_T, loc);
3255
+ return {
3256
+ kind: "seqExpr",
3257
+ stmts: [
3258
+ { kind: "varDecl", localId: local.id, init: receiver, loc },
3259
+ {
3260
+ kind: "exprStmt",
3261
+ expr: {
3262
+ kind: "libCall",
3263
+ fn: "net.serverAddressCheck",
3264
+ args: [server()],
3265
+ type: VOID,
3266
+ loc,
3267
+ },
3268
+ loc,
3269
+ },
3270
+ ],
3271
+ result: { kind: "libCall", fn: "net.serverPort", args: [server()], type: F64, loc },
3272
+ type: F64,
3273
+ loc,
3274
+ };
3275
+ }
3018
3276
  return { kind: "libCall", fn: "net.serverPort", args: [receiver], type: F64, loc };
3019
3277
  }
3020
3278
  /** The (req, res) request-handler argument — http.createServer's, https
@@ -3080,7 +3338,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
3080
3338
  let allowMissingHost = false;
3081
3339
  let keepAliveTimeoutBuffer = null;
3082
3340
  let maxHeaderSize = null;
3083
- for (const prop of node.properties) {
3341
+ for (const prop of node.properties.nodes) {
3084
3342
  let initializer;
3085
3343
  if (ts.isPropertyAssignment(prop) &&
3086
3344
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -3159,7 +3417,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
3159
3417
  * (options, handler). Modeled option values wrap the construction in an
3160
3418
  * interned option-setting helper. */
3161
3419
  function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3162
- const args = expr.arguments ?? [];
3420
+ const args = expr.arguments?.nodes ?? [];
3163
3421
  if (args.length > 2) {
3164
3422
  lowerer.noLowering(`${what} with ${args.length} arguments`, expr, `the supported forms are ${what}([options][, (req, res) => ...])`);
3165
3423
  }
@@ -3294,12 +3552,12 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3294
3552
  * getName/destroy and the sockets/requests/freeSockets counters dispatch
3295
3553
  * through the dyn handle ops, and the request path threads it (the
3296
3554
  * 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. */
3555
+ * keepAlive (a boolean value: finished connections return to the free
3556
+ * list), keepAliveMsecs / maxSockets / maxFreeSockets / timeout / port as
3557
+ * numbers, scheduling as a value the runtime validates ('fifo' or
3558
+ * 'lifo'), other documented keys fence by name, and undocumented keys
3559
+ * drop like Node drops them. Null when the callee isn't the http/https
3560
+ * Agent. */
3303
3561
  export function lowerHttpAgentNew(lowerer, expr) {
3304
3562
  const callee = expr.expression;
3305
3563
  const bi = ts.isPropertyAccessExpression(callee) && callee.name.text === "Agent"
@@ -3317,7 +3575,8 @@ export function lowerHttpAgentNew(lowerer, expr) {
3317
3575
  let maxFree = numLit(-1, loc);
3318
3576
  let timeout = numLit(-1, loc);
3319
3577
  let port = numLit(-1, loc);
3320
- const args = expr.arguments ?? [];
3578
+ let scheduling = lowerer.coerceToExpected(strLit("lifo", loc), DYN);
3579
+ const args = expr.arguments?.nodes ?? [];
3321
3580
  if (args.length > 1) {
3322
3581
  lowerer.noLowering(`${api} with ${args.length} arguments`, expr, "the supported form is new Agent(options?)");
3323
3582
  }
@@ -3326,7 +3585,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
3326
3585
  if (!ts.isObjectLiteralExpression(optsNode)) {
3327
3586
  lowerer.noLowering(`${api} with a non-literal options value`, args[0], "spell the options as an object literal at the construction site");
3328
3587
  }
3329
- for (const prop of optsNode.properties) {
3588
+ for (const prop of optsNode.properties.nodes) {
3330
3589
  if (ts.isSpreadAssignment(prop)) {
3331
3590
  lowerer.noLowering(`${api} with an options spread`, prop, "write each option inline");
3332
3591
  }
@@ -3382,12 +3641,14 @@ export function lowerHttpAgentNew(lowerer, expr) {
3382
3641
  // the settable defaultPort carries this one.
3383
3642
  port = lowerVal("f64");
3384
3643
  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
3644
+ case "scheduling": {
3645
+ // 'fifo' | 'lifo' (falsy = 'lifo'), validated by the runtime
3646
+ const v = initializer !== null
3647
+ ? lowerer.lowerExpr(initializer)
3648
+ : lowerer.lowerShorthandValue(prop);
3649
+ scheduling = lowerer.coerceToExpected(v, DYN);
3390
3650
  break;
3651
+ }
3391
3652
  default:
3392
3653
  fenceOrDropOptionKey(lowerer, prop, key, api, bi.module === "https" ? HTTPS_AGENT_DOCUMENTED_OPTIONS : AGENT_DOCUMENTED_OPTIONS, bi.module === "https"
3393
3654
  ? "keepAlive, keepAliveMsecs, maxSockets, maxFreeSockets, timeout, port, and scheduling are the supported options; pass TLS options such as ca and rejectUnauthorized on each https.request"
@@ -3406,6 +3667,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
3406
3667
  maxFree,
3407
3668
  timeout,
3408
3669
  port,
3670
+ scheduling,
3409
3671
  ],
3410
3672
  type: DYN,
3411
3673
  loc,
@@ -3431,24 +3693,24 @@ export function lowerHttpServerNew(lowerer, expr) {
3431
3693
  function lowerHttpModuleCall(lowerer, expr, bi, loc) {
3432
3694
  if (bi.member === "validateHeaderName") {
3433
3695
  requireStatementPosition(lowerer, expr, "http.validateHeaderName(...)");
3434
- if (expr.arguments.length < 1 ||
3435
- expr.arguments.length > 2 ||
3436
- expr.arguments.some(ts.isSpreadElement)) {
3696
+ if (expr.arguments.nodes.length < 1 ||
3697
+ expr.arguments.nodes.length > 2 ||
3698
+ expr.arguments.nodes.some(ts.isSpreadElement)) {
3437
3699
  lowerer.noLowering("http.validateHeaderName arguments", expr, "pass a header name and an optional label");
3438
3700
  }
3439
- const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
3440
- const label = expr.arguments.length === 2
3441
- ? lowerer.lowerExprExpecting(expr.arguments[1], STRING)
3701
+ const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
3702
+ const label = expr.arguments.nodes.length === 2
3703
+ ? lowerer.lowerExprExpecting(expr.arguments.nodes[1], STRING)
3442
3704
  : strLit("Header name", loc);
3443
3705
  return { kind: "libCall", fn: "http.validateHeaderName", args: [name, label], type: VOID, loc };
3444
3706
  }
3445
3707
  if (bi.member === "validateHeaderValue") {
3446
3708
  requireStatementPosition(lowerer, expr, "http.validateHeaderValue(...)");
3447
- if (expr.arguments.length !== 2 || expr.arguments.some(ts.isSpreadElement)) {
3709
+ if (expr.arguments.nodes.length !== 2 || expr.arguments.nodes.some(ts.isSpreadElement)) {
3448
3710
  lowerer.noLowering("http.validateHeaderValue arguments", expr, "pass a header name and a value");
3449
3711
  }
3450
- const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
3451
- const value = lowerer.lowerExprExpecting(expr.arguments[1], DYN);
3712
+ const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
3713
+ const value = lowerer.lowerExprExpecting(expr.arguments.nodes[1], DYN);
3452
3714
  return {
3453
3715
  kind: "libCall",
3454
3716
  fn: "http.validateHeaderValue",
@@ -3478,7 +3740,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
3478
3740
  const loc = locOf(node);
3479
3741
  let cert = null;
3480
3742
  let key = null;
3481
- for (const prop of node.properties) {
3743
+ for (const prop of node.properties.nodes) {
3482
3744
  let initializer;
3483
3745
  if (ts.isPropertyAssignment(prop) &&
3484
3746
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
@@ -3574,8 +3836,8 @@ const TLS_VALIDATED_OPTIONS = new Set([
3574
3836
  * keepAliveTimeoutBuffer so the HTTP option is consumed without losing
3575
3837
  * the literal's evaluation order. */
3576
3838
  function tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions = false) {
3577
- const jsSource = isJsSourceFile(node.getSourceFile());
3578
- return node.properties.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
3839
+ const jsSource = isJsSourceFile(ts.getSourceFileOfNode(node));
3840
+ return node.properties.nodes.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
3579
3841
  (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
3580
3842
  ((includeHttpTimeoutOptions && p.name.text === "keepAliveTimeoutBuffer") ||
3581
3843
  (jsSource && TLS_VALIDATED_OPTIONS.has(p.name.text))));
@@ -3608,7 +3870,7 @@ function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptio
3608
3870
  * callback (and 'secureConnect'/'connect' listeners) fires
3609
3871
  * post-handshake — Node's secureConnect timing. */
3610
3872
  function lowerTlsConnectCall(lowerer, expr, loc) {
3611
- const args = expr.arguments;
3873
+ const args = expr.arguments.nodes;
3612
3874
  const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/rejectUnauthorized/ca/servername";
3613
3875
  if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
3614
3876
  lowerer.noLowering(`tls.connect with ${args.length} arguments`, expr, FORMS_HINT);
@@ -3700,7 +3962,7 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
3700
3962
  * module declares fences qualified (createSecureContext and connect
3701
3963
  * carry pointed hints from the fence-hint table). */
3702
3964
  function lowerTlsModuleCall(lowerer, expr, bi, loc) {
3703
- const args = expr.arguments;
3965
+ const args = expr.arguments.nodes;
3704
3966
  if (bi.member === "createServer") {
3705
3967
  if (args.length < 1 || args.length > 2) {
3706
3968
  lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, socket => ...)");
@@ -3740,7 +4002,7 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
3740
4002
  if (bi.member === "getCACertificates" &&
3741
4003
  args.length === 1 &&
3742
4004
  !args.some(ts.isSpreadElement) &&
3743
- isJsSourceFile(expr.getSourceFile())) {
4005
+ isJsSourceFile(ts.getSourceFileOfNode(expr))) {
3744
4006
  // The type-argument ladder (validateString + the documented name
3745
4007
  // set); the real CA list has no lowering, so a valid name meets the
3746
4008
  // compiler-rendered fence after the validation.
@@ -3846,7 +4108,7 @@ function clientFnRefOf(lowerer, node) {
3846
4108
  * `const` declaration, or a parameter/let whose enclosing scope contains
3847
4109
  * no assignment or ++/-- targeting it. */
3848
4110
  function neverReassigned(lowerer, sym) {
3849
- const decl = lowerer.checker.declarationsOf(sym)[0];
4111
+ const decl = sym.declarations[0];
3850
4112
  if (!decl)
3851
4113
  return false;
3852
4114
  if (ts.isVariableDeclaration(decl) &&
@@ -3953,7 +4215,7 @@ export function lowerHttpClientFnCall(lowerer, expr, binding, loc) {
3953
4215
  * handler) and request/get — the http client lowering with the secure
3954
4216
  * extras (port 443 default, rejectUnauthorized, ca). */
3955
4217
  function lowerHttpsModuleCall(lowerer, expr, bi, loc) {
3956
- const args = expr.arguments;
4218
+ const args = expr.arguments.nodes;
3957
4219
  if (bi.member === "createServer") {
3958
4220
  if (args.length < 1 || args.length > 2) {
3959
4221
  lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, (req, res) => ...)");
@@ -4034,7 +4296,7 @@ function stripParensAndCasts(node) {
4034
4296
  * createSecureServer lowers h2 over TLS, with allowHTTP1 selecting one
4035
4297
  * dual-ALPN server whose request/connect listeners mirror across parsers. */
4036
4298
  function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4037
- const args = expr.arguments;
4299
+ const args = expr.arguments.nodes;
4038
4300
  if (bi.member === "createServer") {
4039
4301
  // The REAL h2c server (scr_http2.c). An options object literal is
4040
4302
  // accepted and ignored (h2 session-tuning knobs; the honest-defaults
@@ -4098,7 +4360,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4098
4360
  !arg1IsDyn &&
4099
4361
  lowerer.checker.getCallSignatures(lowerer.typeOf(args[1])).length === 0) {
4100
4362
  if (ts.isObjectLiteralExpression(args[1])) {
4101
- for (const pr of args[1].properties) {
4363
+ for (const pr of args[1].properties.nodes) {
4102
4364
  // Plain `name: value` and shorthand `{ ca }` both carry the
4103
4365
  // option; a shorthand's value is the same-named identifier.
4104
4366
  let name;
@@ -4281,17 +4543,17 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4281
4543
  if (ts.isConditionalExpression(inner)) {
4282
4544
  const whenTrue = stripParensAndCasts(inner.whenTrue);
4283
4545
  const whenFalse = stripParensAndCasts(inner.whenFalse);
4284
- const condText = inner.condition.getText();
4546
+ const condText = ts.getTextOfNode(inner.condition);
4285
4547
  const ok = ts.isObjectLiteralExpression(whenTrue) &&
4286
4548
  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 ===
4549
+ whenFalse.properties.nodes.length === 0 &&
4550
+ whenTrue.properties.nodes.length === 1 &&
4551
+ ts.isPropertyAssignment(whenTrue.properties.nodes[0]) &&
4552
+ (ts.isIdentifier(whenTrue.properties.nodes[0].name) ||
4553
+ ts.isStringLiteral(whenTrue.properties.nodes[0].name)) &&
4554
+ whenTrue.properties.nodes[0].name.text ===
4293
4555
  "SNICallback" &&
4294
- whenTrue.properties[0].initializer.getText() === condText;
4556
+ ts.getTextOfNode(whenTrue.properties.nodes[0].initializer) === condText;
4295
4557
  if (!ok) {
4296
4558
  lowerer.noLowering("createSecureServer options with a conditional spread", prop, "the lowered conditional spread is exactly ...(x ? { SNICallback: x } : {}) — the included value must BE the condition");
4297
4559
  }
@@ -4301,7 +4563,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4301
4563
  if (!ts.isObjectLiteralExpression(inner)) {
4302
4564
  lowerer.noLowering("createSecureServer options with a computed spread", prop, `spreads must be inline object literals here; ${SNI_HINT}`);
4303
4565
  }
4304
- for (const p of inner.properties)
4566
+ for (const p of inner.properties.nodes)
4305
4567
  lowerOption(p);
4306
4568
  return;
4307
4569
  }
@@ -4367,11 +4629,11 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4367
4629
  e.kind === ts.SyntaxKind.TrueKeyword ||
4368
4630
  e.kind === ts.SyntaxKind.FalseKeyword;
4369
4631
  const isLiteralObjectOfLiterals = (e) => ts.isObjectLiteralExpression(e) &&
4370
- e.properties.every((p) => ts.isPropertyAssignment(p) &&
4632
+ e.properties.nodes.every((p) => ts.isPropertyAssignment(p) &&
4371
4633
  ts.isIdentifier(p.name) &&
4372
4634
  isScalarLiteral(p.initializer));
4373
4635
  if (k === "settings" && initializer !== null && ts.isObjectLiteralExpression(initializer)) {
4374
- for (const setting of initializer.properties) {
4636
+ for (const setting of initializer.properties.nodes) {
4375
4637
  if (ts.isPropertyAssignment(setting) &&
4376
4638
  ts.isIdentifier(setting.name) &&
4377
4639
  setting.name.text === "enableConnectProtocol") {
@@ -4399,7 +4661,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4399
4661
  fenceOrDropOptionKey(lowerer, prop, k, "createSecureServer", HTTP2_SECURE_SERVER_DOCUMENTED_OPTIONS, "allowHTTP1: true, cert, key, and SNICallback are the supported options (h2 session-tuning options are accepted as literals and ignored)");
4400
4662
  // An undocumented key, dropped like Node drops it.
4401
4663
  };
4402
- for (const prop of optsNode.properties)
4664
+ for (const prop of optsNode.properties.nodes)
4403
4665
  lowerOption(prop);
4404
4666
  if (cert === null || key === null) {
4405
4667
  lowerer.noLowering("createSecureServer without both cert and key", optsNode, "the supported options object is { allowHTTP1?, cert, key } (PEM strings or Buffers)");
@@ -4464,6 +4726,37 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4464
4726
  lowerer.noLowering(`http2.${bi.member}`, expr, builtinFenceHintOf("http2", bi.member) ??
4465
4727
  "createSecureServer({ allowHTTP1: true, cert, key }) and the h2-only form are lowered", lowerer.resolveValueSymbol(expr.expression));
4466
4728
  }
4729
+ /** The checked-dynamic options value of a request whose options the
4730
+ * runtime reads: a non-literal options value (a RequestOptions variable —
4731
+ * checked-dynamic storage — or a record that converts to one), or a
4732
+ * literal the static walk cannot lower because it spreads another options
4733
+ * value or sets socketPath. Null keeps the static literal walk (and its
4734
+ * fences), which every other literal takes unchanged. */
4735
+ function runtimeRequestOptions(lowerer, optsNode, secureish) {
4736
+ if (ts.isObjectLiteralExpression(optsNode)) {
4737
+ const needsRuntime = optsNode.properties.nodes.some((prop) => {
4738
+ if (ts.isSpreadAssignment(prop)) {
4739
+ // the static walk's one spread: `...(c ? { rejectUnauthorized } : {})` on https
4740
+ const cs = conditionalSpreadOf(prop.expression);
4741
+ return !(secureish &&
4742
+ cs !== null &&
4743
+ cs !== "unsupported" &&
4744
+ cs.props.length === 1 &&
4745
+ cs.props[0].name.text === "rejectUnauthorized");
4746
+ }
4747
+ return ((ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) &&
4748
+ (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)) &&
4749
+ prop.name.text === "socketPath");
4750
+ });
4751
+ if (!needsRuntime)
4752
+ return null;
4753
+ return lowerDynObjectLiteral(lowerer, optsNode);
4754
+ }
4755
+ const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
4756
+ if (!t || !(t.kind === "dyn" || (t.kind === "record" && lowerer.dynConvertible(t))))
4757
+ return null;
4758
+ return lowerer.coerceToExpected(lowerer.lowerExpr(optsNode), DYN);
4759
+ }
4467
4760
  /** http.request(options[, cb]) / http.get(options[, cb]) — the client.
4468
4761
  * The options argument must be an OBJECT LITERAL; the lowered keys are
4469
4762
  * hostname/host, port, path, method, timeout, and headers (a nested
@@ -4491,11 +4784,36 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4491
4784
  const c = lowerer.lowerCondition(binding.cond);
4492
4785
  return binding.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
4493
4786
  };
4494
- const args = expr.arguments;
4787
+ const args = expr.arguments.nodes;
4495
4788
  if (args.length < 1 || args.length > 2) {
4496
4789
  lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported form is ${member}(options[, callback])`);
4497
4790
  }
4498
4791
  const optsNode = args[0];
4792
+ const runtimeOptions = binding === null ? runtimeRequestOptions(lowerer, optsNode, secureish) : null;
4793
+ if (runtimeOptions !== null) {
4794
+ // The options record is read at run time (the ClientRequest
4795
+ // constructor's walk in the runtime): a RequestOptions variable, or a
4796
+ // literal that spreads one or sets socketPath.
4797
+ const autoEnd = boolLit(member === "get", loc);
4798
+ const secureDyn = secure === true;
4799
+ if (args.length === 1) {
4800
+ return {
4801
+ kind: "libCall",
4802
+ fn: secureDyn ? "https.requestDyn" : "http.requestDyn",
4803
+ args: [runtimeOptions, autoEnd],
4804
+ type: HTTPCLIENTREQ_T,
4805
+ loc,
4806
+ };
4807
+ }
4808
+ const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
4809
+ return {
4810
+ kind: "libCall",
4811
+ fn: secureDyn ? "https.requestDynCb" : "http.requestDynCb",
4812
+ args: [runtimeOptions, autoEnd, cb],
4813
+ type: HTTPCLIENTREQ_T,
4814
+ loc,
4815
+ };
4816
+ }
4499
4817
  if (!ts.isObjectLiteralExpression(optsNode)) {
4500
4818
  const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
4501
4819
  if ((t?.kind === "string" || t?.kind === "url") && binding === null) {
@@ -4562,7 +4880,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4562
4880
  let servername = null;
4563
4881
  /** maxHeaderSize: the response head's size bound. */
4564
4882
  let maxHeaderSize = null;
4565
- for (const prop of optsNode.properties) {
4883
+ for (const prop of optsNode.properties.nodes) {
4566
4884
  // Shorthand entries ({ port } for { port: port }) are the natural
4567
4885
  // spelling at these call sites — the shorthand's VALUE lowering
4568
4886
  // resolves the local binding (lowerShorthandValue), not the property
@@ -4657,6 +4975,9 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4657
4975
  maxHeaderSize = lowerVal("f64");
4658
4976
  break;
4659
4977
  case "servername":
4978
+ if (binding !== null) {
4979
+ lowerer.noLowering(`${member} option 'servername' through a module-function binding`, prop, "call https.request directly when passing servername");
4980
+ }
4660
4981
  if (!secureish) {
4661
4982
  lowerer.noLowering(`${member} option 'servername'`, prop, "servername is an https.request option — the plain http client has no TLS layer");
4662
4983
  }
@@ -4820,22 +5141,29 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4820
5141
  timeout ??= numLit(0, loc);
4821
5142
  headers ??= { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
4822
5143
  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).
5144
+ // options.signal is checked first: Node's constructor rejects a value
5145
+ // that is not an AbortSignal before it dials. servername is stored just
5146
+ // before construction (it selects the TLS name and which pooled sockets
5147
+ // the request may reuse); maxHeaderSize and the signal then apply to the
5148
+ // built request (an already aborted signal destroys it at once, like
5149
+ // Node's constructor).
4826
5150
  const withSignal = (request) => {
4827
5151
  if (signal === null && servername === null && maxHeaderSize === null)
4828
5152
  return request;
4829
5153
  const local = lowerer.declareHiddenLocal("%requestOptions", HTTPCLIENTREQ_T);
4830
5154
  const ref = () => varRef(local.id, HTTPCLIENTREQ_T, loc);
4831
- const steps = [{ kind: "varDecl", localId: local.id, init: request, loc }];
4832
- if (maxHeaderSize !== null) {
5155
+ const steps = [];
5156
+ let signalRef = null;
5157
+ if (signal !== null) {
5158
+ const signalLocal = lowerer.declareHiddenLocal("%requestSignal", DYN);
5159
+ signalRef = () => varRef(signalLocal.id, DYN, loc);
5160
+ steps.push({ kind: "varDecl", localId: signalLocal.id, init: signal, loc });
4833
5161
  steps.push({
4834
5162
  kind: "exprStmt",
4835
5163
  expr: {
4836
5164
  kind: "libCall",
4837
- fn: "http.clientMaxHeaderSize",
4838
- args: [ref(), maxHeaderSize],
5165
+ fn: "http.clientSignalCheck",
5166
+ args: [signalRef()],
4839
5167
  type: VOID,
4840
5168
  loc,
4841
5169
  },
@@ -4847,18 +5175,38 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
4847
5175
  kind: "exprStmt",
4848
5176
  expr: {
4849
5177
  kind: "libCall",
4850
- fn: "https.clientServername",
4851
- args: [ref(), servername],
5178
+ fn: "https.nextServername",
5179
+ args: [servername],
4852
5180
  type: VOID,
4853
5181
  loc,
4854
5182
  },
4855
5183
  loc,
4856
5184
  });
4857
5185
  }
4858
- if (signal !== null) {
5186
+ steps.push({ kind: "varDecl", localId: local.id, init: request, loc });
5187
+ if (maxHeaderSize !== null) {
4859
5188
  steps.push({
4860
5189
  kind: "exprStmt",
4861
- expr: { kind: "libCall", fn: "http.clientSignal", args: [ref(), signal], type: VOID, loc },
5190
+ expr: {
5191
+ kind: "libCall",
5192
+ fn: "http.clientMaxHeaderSize",
5193
+ args: [ref(), maxHeaderSize],
5194
+ type: VOID,
5195
+ loc,
5196
+ },
5197
+ loc,
5198
+ });
5199
+ }
5200
+ if (signalRef !== null) {
5201
+ steps.push({
5202
+ kind: "exprStmt",
5203
+ expr: {
5204
+ kind: "libCall",
5205
+ fn: "http.clientSignal",
5206
+ args: [ref(), signalRef()],
5207
+ type: VOID,
5208
+ loc,
5209
+ },
4862
5210
  loc,
4863
5211
  });
4864
5212
  }
@@ -4927,7 +5275,7 @@ function lowerClientHeadersOption(lowerer, node) {
4927
5275
  const loc = locOf(node);
4928
5276
  if (ts.isObjectLiteralExpression(node)) {
4929
5277
  const elems = [];
4930
- for (const prop of node.properties) {
5278
+ for (const prop of node.properties.nodes) {
4931
5279
  const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
4932
5280
  if (!ts.isPropertyAssignment(prop) || key === null) {
4933
5281
  lowerer.noLowering("request headers with dynamic keys, spreads, or shorthand entries", prop, "each header must be a `name: value` entry whose key is a literal (or a string-literal-typed const: [PORTLESS_HEADER])");
@@ -4963,13 +5311,13 @@ function lowerHttpTrailersOption(lowerer, node) {
4963
5311
  return lowerClientHeadersOption(lowerer, node);
4964
5312
  const loc = locOf(node);
4965
5313
  const flat = [];
4966
- for (const entry of node.elements) {
4967
- if (!ts.isArrayLiteralExpression(entry) || entry.elements.length !== 2) {
5314
+ for (const entry of node.elements.nodes) {
5315
+ if (!ts.isArrayLiteralExpression(entry) || entry.elements.nodes.length !== 2) {
4968
5316
  lowerer.noLowering("addTrailers pair list", entry, "use an object/Record or literal [name, value] pairs");
4969
5317
  }
4970
5318
  const pair = entry;
4971
- const name = pair.elements[0];
4972
- const value = pair.elements[1];
5319
+ const name = pair.elements.nodes[0];
5320
+ const value = pair.elements.nodes[1];
4973
5321
  if (ts.isSpreadElement(name) || ts.isSpreadElement(value)) {
4974
5322
  lowerer.noLowering("addTrailers pair with spread", entry, "use direct string name/value expressions");
4975
5323
  }
@@ -4987,7 +5335,7 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
4987
5335
  return null;
4988
5336
  const name = access.name.text;
4989
5337
  const loc = locOf(call);
4990
- const args = call.arguments;
5338
+ const args = call.arguments.nodes;
4991
5339
  if (name === "setHeader") {
4992
5340
  requireStatementPosition(lowerer, call, "request.setHeader(...)");
4993
5341
  if (args.length !== 2)
@@ -5366,7 +5714,7 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
5366
5714
  return null;
5367
5715
  const name = access.name.text;
5368
5716
  const loc = locOf(call);
5369
- const args = call.arguments;
5717
+ const args = call.arguments.nodes;
5370
5718
  if (name === "setTimeout") {
5371
5719
  requireStatementPosition(lowerer, call, "message.setTimeout(...)");
5372
5720
  if (args.length < 1 || args.length > 2)
@@ -5434,6 +5782,26 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
5434
5782
  const event = evT.isStringLiteralType() ? evT.value : null;
5435
5783
  const receiver = coerceToHandle(lowerer, access.expression, HTTPREQ_T);
5436
5784
  if (event === "data") {
5785
+ const sigs = lowerer.checker.getCallSignatures(lowerer.typeOf(args[1]));
5786
+ const firstParam = sigs.length === 1 ? sigs[0].getParameters()[0] : undefined;
5787
+ const param = firstParam !== undefined
5788
+ ? lowerer.mapTypeOf(lowerer.checker.getTypeOfSymbol(firstParam))
5789
+ : null;
5790
+ if (param !== null && param.kind === "string") {
5791
+ // A chunk typed string (the setEncoding('utf8') shape), as on a
5792
+ // socket: the listener takes the chunk through a checked
5793
+ // boundary, so a string arrives after setEncoding and a Buffer
5794
+ // without it fails the check instead of being decoded.
5795
+ const boxed = lowerSocketDynListener(lowerer, args[1], "data listeners");
5796
+ const cb = { kind: "dynCheck", value: boxed, type: funcOf([DYN], VOID), loc };
5797
+ return {
5798
+ kind: "libCall",
5799
+ fn: "http.reqOnData",
5800
+ args: [receiver, cb, once],
5801
+ type: VOID,
5802
+ loc,
5803
+ };
5804
+ }
5437
5805
  const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
5438
5806
  return { kind: "libCall", fn: "http.reqOnData", args: [receiver, cb, once], type: VOID, loc };
5439
5807
  }
@@ -5486,7 +5854,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5486
5854
  return null;
5487
5855
  const name = access.name.text;
5488
5856
  const loc = locOf(call);
5489
- const args = call.arguments;
5857
+ const args = call.arguments.nodes;
5490
5858
  if (name === "setTimeout") {
5491
5859
  if (args.length < 1 || args.length > 2) {
5492
5860
  lowerer.noLowering(`res.setTimeout with ${args.length} arguments`, call, "use setTimeout(milliseconds[, callback])");
@@ -5504,7 +5872,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5504
5872
  }
5505
5873
  if (name === "writeContinue" || name === "writeProcessing" || name === "writeEarlyHints") {
5506
5874
  requireStatementPosition(lowerer, call, `res.${name}(...)`);
5507
- if (lowerer.typeOf(access.expression).getSymbol()?.name === "Http2ServerResponse") {
5875
+ if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
5508
5876
  lowerer.noLowering(`Http2ServerResponse.${name}`, call, "HTTP/2 informational responses are not supported by the static runtime yet");
5509
5877
  }
5510
5878
  const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
@@ -5525,7 +5893,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5525
5893
  let pairs;
5526
5894
  if (ts.isObjectLiteralExpression(node)) {
5527
5895
  const elems = [];
5528
- for (const prop of node.properties) {
5896
+ for (const prop of node.properties.nodes) {
5529
5897
  const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
5530
5898
  if (!ts.isPropertyAssignment(prop) || key === null) {
5531
5899
  lowerer.noLowering("writeEarlyHints headers with dynamic keys, spreads, or shorthand entries", prop, "use literal header keys and string values");
@@ -5588,7 +5956,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5588
5956
  }
5589
5957
  if (name === "addTrailers") {
5590
5958
  requireStatementPosition(lowerer, call, "res.addTrailers(...)");
5591
- if (lowerer.typeOf(access.expression).getSymbol()?.name === "Http2ServerResponse") {
5959
+ if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
5592
5960
  lowerer.noLowering("Http2ServerResponse.addTrailers", call, "HTTP/2 response trailers are not supported by the static runtime yet");
5593
5961
  }
5594
5962
  if (args.length !== 1)
@@ -5725,7 +6093,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5725
6093
  }
5726
6094
  const names = [];
5727
6095
  const values = [];
5728
- for (const prop of headersNode.properties) {
6096
+ for (const prop of headersNode.properties.nodes) {
5729
6097
  const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
5730
6098
  if (!ts.isPropertyAssignment(prop) || key === null) {
5731
6099
  lowerer.noLowering("writeHead headers with dynamic keys, spreads, or shorthand entries", prop, "each header must be a `name: value` entry whose key is a literal (or a string-literal-typed const: [PORTLESS_HEADER])");
@@ -5853,6 +6221,26 @@ function lowerHttpResMethodCall(lowerer, call, access) {
5853
6221
  return endWithCb(fn, [receiver, data], cbArg);
5854
6222
  return { kind: "libCall", fn, args: [receiver, data], type: VOID, loc };
5855
6223
  }
6224
+ // end(payload ? text : undefined): an absent chunk ends without data,
6225
+ // as end() does. The checked-dynamic end takes each arm at run time.
6226
+ if (name === "end" && data.type.kind === "union" && lowerer.dynConvertible(data.type)) {
6227
+ const arms = lowerer.unions.get(data.type.unionId)?.arms ?? [];
6228
+ if (arms.every((arm) => arm.kind === "string" ||
6229
+ (arm.kind === "bytes" && arm.elem === "u8") ||
6230
+ arm.kind === "undefinedT" ||
6231
+ arm.kind === "nullT")) {
6232
+ const dynData = { kind: "dynFrom", value: data, type: DYN, loc: locOf(dataNode) };
6233
+ if (cbArg !== null)
6234
+ return endWithCb("http.resEndDyn", [receiver, dynData], cbArg);
6235
+ return {
6236
+ kind: "libCall",
6237
+ fn: "http.resEndDyn",
6238
+ args: [receiver, dynData],
6239
+ type: VOID,
6240
+ loc,
6241
+ };
6242
+ }
6243
+ }
5856
6244
  lowerer.noLowering(`${name} of '${lowerer.fmt(data.type)}' data`, dataNode ?? call, NARROW_DATA_HINT);
5857
6245
  }
5858
6246
  if (name === "getHeader" || name === "hasHeader" || name === "removeHeader") {