@scriptc/compiler 0.2.4 → 0.2.6

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 (1201) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +972 -245
  2. package/ambient/scriptc-overrides.d.ts +5 -1
  3. package/ambient/scriptc.d.ts +22 -2
  4. package/dist/backend/build-cache.d.ts +4 -0
  5. package/dist/backend/build-cache.js +16 -2
  6. package/dist/backend/build-cache.js.map +1 -1
  7. package/dist/backend/cycle-analysis.js +17 -5
  8. package/dist/backend/cycle-analysis.js.map +1 -1
  9. package/dist/backend/cycle-analysis.test.js +50 -11
  10. package/dist/backend/cycle-analysis.test.js.map +1 -1
  11. package/dist/backend/debug-symbols.js.map +1 -1
  12. package/dist/backend/executable-features.js +3 -1
  13. package/dist/backend/executable-features.js.map +1 -1
  14. package/dist/backend/external-c.d.ts +13 -6
  15. package/dist/backend/external-c.js +15 -3
  16. package/dist/backend/external-c.js.map +1 -1
  17. package/dist/backend/ffi-callbacks.js +6 -9
  18. package/dist/backend/ffi-callbacks.js.map +1 -1
  19. package/dist/backend/library-identity-markers.js.map +1 -1
  20. package/dist/backend/library-pack.d.ts +1 -1
  21. package/dist/backend/library-pack.js +81 -24
  22. package/dist/backend/library-pack.js.map +1 -1
  23. package/dist/backend/link-plan-core.d.ts +2 -0
  24. package/dist/backend/link-plan-core.js +10 -2
  25. package/dist/backend/link-plan-core.js.map +1 -1
  26. package/dist/backend/link-plan.d.ts +2 -1
  27. package/dist/backend/link-plan.js +7 -5
  28. package/dist/backend/link-plan.js.map +1 -1
  29. package/dist/backend/linker.d.ts +1 -1
  30. package/dist/backend/linker.js +42 -23
  31. package/dist/backend/linker.js.map +1 -1
  32. package/dist/backend/literals.js +5 -4
  33. package/dist/backend/literals.js.map +1 -1
  34. package/dist/backend/literals.test.js +30 -5
  35. package/dist/backend/literals.test.js.map +1 -1
  36. package/dist/backend/llvm/blocks.test.js +5 -2
  37. package/dist/backend/llvm/blocks.test.js.map +1 -1
  38. package/dist/backend/llvm/borrowed-inputs.js.map +1 -1
  39. package/dist/backend/llvm/borrowed-receivers.js +43 -19
  40. package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
  41. package/dist/backend/llvm/byte-numbers.js +38 -5
  42. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  43. package/dist/backend/llvm/byte-windows.d.ts +31 -0
  44. package/dist/backend/llvm/byte-windows.js +334 -0
  45. package/dist/backend/llvm/byte-windows.js.map +1 -0
  46. package/dist/backend/llvm/byte-windows.test.d.ts +1 -0
  47. package/dist/backend/llvm/byte-windows.test.js +244 -0
  48. package/dist/backend/llvm/byte-windows.test.js.map +1 -0
  49. package/dist/backend/llvm/bytes-bounds.js +73 -22
  50. package/dist/backend/llvm/bytes-bounds.js.map +1 -1
  51. package/dist/backend/llvm/call-lifetimes.d.ts +5 -2
  52. package/dist/backend/llvm/call-lifetimes.js +72 -19
  53. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  54. package/dist/backend/llvm/call-lifetimes.test.js +159 -28
  55. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  56. package/dist/backend/llvm/checked-value-lifetimes.d.ts +4 -0
  57. package/dist/backend/llvm/checked-value-lifetimes.js +14 -4
  58. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  59. package/dist/backend/llvm/classes.d.ts +14 -1
  60. package/dist/backend/llvm/classes.js +94 -19
  61. package/dist/backend/llvm/classes.js.map +1 -1
  62. package/dist/backend/llvm/classes.test.d.ts +1 -0
  63. package/dist/backend/llvm/classes.test.js +99 -0
  64. package/dist/backend/llvm/classes.test.js.map +1 -0
  65. package/dist/backend/llvm/common.js +4 -1
  66. package/dist/backend/llvm/common.js.map +1 -1
  67. package/dist/backend/llvm/constant-callbacks.d.ts +11 -0
  68. package/dist/backend/llvm/constant-callbacks.js +213 -0
  69. package/dist/backend/llvm/constant-callbacks.js.map +1 -0
  70. package/dist/backend/llvm/constant-callbacks.test.d.ts +1 -0
  71. package/dist/backend/llvm/constant-callbacks.test.js +124 -0
  72. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -0
  73. package/dist/backend/llvm/counted-loops.js +10 -3
  74. package/dist/backend/llvm/counted-loops.js.map +1 -1
  75. package/dist/backend/llvm/debug-info.js +33 -13
  76. package/dist/backend/llvm/debug-info.js.map +1 -1
  77. package/dist/backend/llvm/debug-info.test.js +28 -6
  78. package/dist/backend/llvm/debug-info.test.js.map +1 -1
  79. package/dist/backend/llvm/dyn.d.ts +1 -1
  80. package/dist/backend/llvm/dyn.js +75 -56
  81. package/dist/backend/llvm/dyn.js.map +1 -1
  82. package/dist/backend/llvm/emitter.d.ts +28 -3
  83. package/dist/backend/llvm/emitter.js +506 -145
  84. package/dist/backend/llvm/emitter.js.map +1 -1
  85. package/dist/backend/llvm/emitter.test.js +247 -50
  86. package/dist/backend/llvm/emitter.test.js.map +1 -1
  87. package/dist/backend/llvm/expr-async.js +25 -6
  88. package/dist/backend/llvm/expr-async.js.map +1 -1
  89. package/dist/backend/llvm/expr-bytes.js +24 -4
  90. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  91. package/dist/backend/llvm/expr-callbacks.js +10 -4
  92. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  93. package/dist/backend/llvm/expr-calls.js +110 -31
  94. package/dist/backend/llvm/expr-calls.js.map +1 -1
  95. package/dist/backend/llvm/expr-containers.d.ts +2 -0
  96. package/dist/backend/llvm/expr-containers.js +112 -41
  97. package/dist/backend/llvm/expr-containers.js.map +1 -1
  98. package/dist/backend/llvm/expr-control.js +1 -3
  99. package/dist/backend/llvm/expr-control.js.map +1 -1
  100. package/dist/backend/llvm/expr-dispatch.js +3 -1
  101. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  102. package/dist/backend/llvm/expr-dynamic.js +55 -7
  103. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  104. package/dist/backend/llvm/expr-island.js +26 -6
  105. package/dist/backend/llvm/expr-island.js.map +1 -1
  106. package/dist/backend/llvm/expr-primitives.js +95 -19
  107. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  108. package/dist/backend/llvm/expr-primitives.test.js +44 -2
  109. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  110. package/dist/backend/llvm/expr-records.js +10 -9
  111. package/dist/backend/llvm/expr-records.js.map +1 -1
  112. package/dist/backend/llvm/expr-stream-bridges.js +44 -26
  113. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  114. package/dist/backend/llvm/expr-stream-bridges.test.js +51 -14
  115. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  116. package/dist/backend/llvm/expr-stream-callbacks.js +34 -14
  117. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  118. package/dist/backend/llvm/integer-remainder.d.ts +7 -0
  119. package/dist/backend/llvm/integer-remainder.js +26 -0
  120. package/dist/backend/llvm/integer-remainder.js.map +1 -0
  121. package/dist/backend/llvm/integer-values.js +15 -4
  122. package/dist/backend/llvm/integer-values.js.map +1 -1
  123. package/dist/backend/llvm/integer-views.js +23 -7
  124. package/dist/backend/llvm/integer-views.js.map +1 -1
  125. package/dist/backend/llvm/integer-views.test.js +42 -7
  126. package/dist/backend/llvm/integer-views.test.js.map +1 -1
  127. package/dist/backend/llvm/layouts.js +1 -1
  128. package/dist/backend/llvm/layouts.js.map +1 -1
  129. package/dist/backend/llvm/lib-abi.js +20 -4
  130. package/dist/backend/llvm/lib-abi.js.map +1 -1
  131. package/dist/backend/llvm/lib-connect.js +7 -1
  132. package/dist/backend/llvm/lib-connect.js.map +1 -1
  133. package/dist/backend/llvm/lib-datagram.js +35 -10
  134. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  135. package/dist/backend/llvm/lib-dispatch.js +42 -38
  136. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  137. package/dist/backend/llvm/lib-filesystem.js +33 -18
  138. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  139. package/dist/backend/llvm/lib-http2.js +60 -15
  140. package/dist/backend/llvm/lib-http2.js.map +1 -1
  141. package/dist/backend/llvm/lib-lookup.js +12 -5
  142. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  143. package/dist/backend/llvm/lib-network.js +97 -31
  144. package/dist/backend/llvm/lib-network.js.map +1 -1
  145. package/dist/backend/llvm/lib-process.js +57 -14
  146. package/dist/backend/llvm/lib-process.js.map +1 -1
  147. package/dist/backend/llvm/lib-shared.js +122 -31
  148. package/dist/backend/llvm/lib-shared.js.map +1 -1
  149. package/dist/backend/llvm/lib-stream.js +33 -14
  150. package/dist/backend/llvm/lib-stream.js.map +1 -1
  151. package/dist/backend/llvm/lib-test.js +21 -7
  152. package/dist/backend/llvm/lib-test.js.map +1 -1
  153. package/dist/backend/llvm/lib-tls.js +69 -20
  154. package/dist/backend/llvm/lib-tls.js.map +1 -1
  155. package/dist/backend/llvm/local-array-reads.d.ts +9 -2
  156. package/dist/backend/llvm/local-array-reads.js +176 -89
  157. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  158. package/dist/backend/llvm/local-array-reads.test.js +394 -62
  159. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  160. package/dist/backend/llvm/local-union-storage.d.ts +25 -0
  161. package/dist/backend/llvm/local-union-storage.js +109 -0
  162. package/dist/backend/llvm/local-union-storage.js.map +1 -0
  163. package/dist/backend/llvm/local-union-storage.test.d.ts +1 -0
  164. package/dist/backend/llvm/local-union-storage.test.js +210 -0
  165. package/dist/backend/llvm/local-union-storage.test.js.map +1 -0
  166. package/dist/backend/llvm/loop-array-borrows.d.ts +11 -0
  167. package/dist/backend/llvm/loop-array-borrows.js +70 -0
  168. package/dist/backend/llvm/loop-array-borrows.js.map +1 -0
  169. package/dist/backend/llvm/loop-array-borrows.test.d.ts +1 -0
  170. package/dist/backend/llvm/loop-array-borrows.test.js +145 -0
  171. package/dist/backend/llvm/loop-array-borrows.test.js.map +1 -0
  172. package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -2
  173. package/dist/backend/llvm/map-read-lifetimes.js +64 -19
  174. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  175. package/dist/backend/llvm/map-read-lifetimes.test.js +89 -17
  176. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  177. package/dist/backend/llvm/reference-effects.d.ts +5 -3
  178. package/dist/backend/llvm/reference-effects.js +74 -36
  179. package/dist/backend/llvm/reference-effects.js.map +1 -1
  180. package/dist/backend/llvm/reference-effects.test.js +92 -9
  181. package/dist/backend/llvm/reference-effects.test.js.map +1 -1
  182. package/dist/backend/llvm/shapes.d.ts +4 -1
  183. package/dist/backend/llvm/shapes.js +82 -24
  184. package/dist/backend/llvm/shapes.js.map +1 -1
  185. package/dist/backend/llvm/shapes.test.js +3 -1
  186. package/dist/backend/llvm/shapes.test.js.map +1 -1
  187. package/dist/backend/llvm/split-loops.d.ts +48 -0
  188. package/dist/backend/llvm/split-loops.js +183 -0
  189. package/dist/backend/llvm/split-loops.js.map +1 -0
  190. package/dist/backend/llvm/split.js +4 -11
  191. package/dist/backend/llvm/split.js.map +1 -1
  192. package/dist/backend/llvm/split.test.js +80 -8
  193. package/dist/backend/llvm/split.test.js.map +1 -1
  194. package/dist/backend/llvm/stack-callbacks.d.ts +14 -0
  195. package/dist/backend/llvm/stack-callbacks.js +73 -0
  196. package/dist/backend/llvm/stack-callbacks.js.map +1 -0
  197. package/dist/backend/llvm/stack-captures.d.ts +25 -0
  198. package/dist/backend/llvm/stack-captures.js +150 -0
  199. package/dist/backend/llvm/stack-captures.js.map +1 -0
  200. package/dist/backend/llvm/stack-unions.js +14 -5
  201. package/dist/backend/llvm/stack-unions.js.map +1 -1
  202. package/dist/backend/llvm/stack-unions.test.js +151 -32
  203. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  204. package/dist/backend/llvm/string-construction.js.map +1 -1
  205. package/dist/backend/llvm/string-construction.test.js +32 -7
  206. package/dist/backend/llvm/string-construction.test.js.map +1 -1
  207. package/dist/backend/llvm/string-lifetimes.js +14 -8
  208. package/dist/backend/llvm/string-lifetimes.js.map +1 -1
  209. package/dist/backend/llvm/string-lifetimes.test.js +119 -29
  210. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  211. package/dist/backend/llvm/string-slices.d.ts +20 -0
  212. package/dist/backend/llvm/string-slices.js +87 -0
  213. package/dist/backend/llvm/string-slices.js.map +1 -0
  214. package/dist/backend/llvm/string-slices.test.d.ts +1 -0
  215. package/dist/backend/llvm/string-slices.test.js +98 -0
  216. package/dist/backend/llvm/string-slices.test.js.map +1 -0
  217. package/dist/backend/llvm/switch-dispatch.d.ts +9 -0
  218. package/dist/backend/llvm/switch-dispatch.js +114 -0
  219. package/dist/backend/llvm/switch-dispatch.js.map +1 -0
  220. package/dist/backend/llvm/switch-dispatch.test.d.ts +1 -0
  221. package/dist/backend/llvm/switch-dispatch.test.js +83 -0
  222. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -0
  223. package/dist/backend/llvm/unsupported.js.map +1 -1
  224. package/dist/backend/llvm/walkers.d.ts +4 -14
  225. package/dist/backend/llvm/walkers.js +58 -313
  226. package/dist/backend/llvm/walkers.js.map +1 -1
  227. package/dist/backend/mangle.js +9 -3
  228. package/dist/backend/mangle.js.map +1 -1
  229. package/dist/backend/may-throw.js +18 -8
  230. package/dist/backend/may-throw.js.map +1 -1
  231. package/dist/backend/may-throw.test.js +119 -23
  232. package/dist/backend/may-throw.test.js.map +1 -1
  233. package/dist/backend/native/artifact-stamps.d.ts +39 -0
  234. package/dist/backend/native/artifact-stamps.js +371 -0
  235. package/dist/backend/native/artifact-stamps.js.map +1 -0
  236. package/dist/backend/native/cache-warm.d.ts +24 -0
  237. package/dist/backend/native/cache-warm.js +80 -0
  238. package/dist/backend/native/cache-warm.js.map +1 -0
  239. package/dist/backend/native/compiler-fingerprint.d.ts +19 -0
  240. package/dist/backend/native/compiler-fingerprint.js +357 -0
  241. package/dist/backend/native/compiler-fingerprint.js.map +1 -0
  242. package/dist/backend/native/contracts.d.ts +316 -0
  243. package/dist/backend/native/contracts.js +2 -0
  244. package/dist/backend/native/contracts.js.map +1 -0
  245. package/dist/backend/native/dependency-files.d.ts +5 -0
  246. package/dist/backend/native/dependency-files.js +83 -0
  247. package/dist/backend/native/dependency-files.js.map +1 -0
  248. package/dist/backend/native/driver.d.ts +50 -0
  249. package/dist/backend/native/driver.js +294 -0
  250. package/dist/backend/native/driver.js.map +1 -0
  251. package/dist/backend/native/executable.d.ts +18 -0
  252. package/dist/backend/native/executable.js +1275 -0
  253. package/dist/backend/native/executable.js.map +1 -0
  254. package/dist/backend/native/library.d.ts +2 -0
  255. package/dist/backend/native/library.js +614 -0
  256. package/dist/backend/native/library.js.map +1 -0
  257. package/dist/backend/native/linker-fingerprint.d.ts +8 -0
  258. package/dist/backend/native/linker-fingerprint.js +174 -0
  259. package/dist/backend/native/linker-fingerprint.js.map +1 -0
  260. package/dist/backend/native/object-merge.d.ts +2 -0
  261. package/dist/backend/native/object-merge.js +154 -0
  262. package/dist/backend/native/object-merge.js.map +1 -0
  263. package/dist/backend/native/process.d.ts +17 -0
  264. package/dist/backend/native/process.js +42 -0
  265. package/dist/backend/native/process.js.map +1 -0
  266. package/dist/backend/native/program-shards.d.ts +21 -0
  267. package/dist/backend/native/program-shards.js +99 -0
  268. package/dist/backend/native/program-shards.js.map +1 -0
  269. package/dist/backend/native/runtime-inputs.d.ts +12 -0
  270. package/dist/backend/native/runtime-inputs.js +165 -0
  271. package/dist/backend/native/runtime-inputs.js.map +1 -0
  272. package/dist/backend/native/runtime-inputs.test.d.ts +1 -0
  273. package/dist/backend/native/runtime-inputs.test.js +64 -0
  274. package/dist/backend/native/runtime-inputs.test.js.map +1 -0
  275. package/dist/backend/native/runtime-objects.d.ts +16 -0
  276. package/dist/backend/native/runtime-objects.js +122 -0
  277. package/dist/backend/native/runtime-objects.js.map +1 -0
  278. package/dist/backend/native/session.d.ts +12 -0
  279. package/dist/backend/native/session.js +31 -0
  280. package/dist/backend/native/session.js.map +1 -0
  281. package/dist/backend/native/tool-identity.d.ts +37 -0
  282. package/dist/backend/native/tool-identity.js +310 -0
  283. package/dist/backend/native/tool-identity.js.map +1 -0
  284. package/dist/backend/native/trace-paths.d.ts +12 -0
  285. package/dist/backend/native/trace-paths.js +73 -0
  286. package/dist/backend/native/trace-paths.js.map +1 -0
  287. package/dist/backend/native/vendor.d.ts +1 -0
  288. package/dist/backend/native/vendor.js +12 -0
  289. package/dist/backend/native/vendor.js.map +1 -0
  290. package/dist/backend/native-codegen-core.d.ts +6 -0
  291. package/dist/backend/native-codegen-core.js +23 -1
  292. package/dist/backend/native-codegen-core.js.map +1 -1
  293. package/dist/backend/native-codegen.d.ts +5 -1
  294. package/dist/backend/native-codegen.js +52 -25
  295. package/dist/backend/native-codegen.js.map +1 -1
  296. package/dist/backend/native-codegen.test.js +59 -11
  297. package/dist/backend/native-codegen.test.js.map +1 -1
  298. package/dist/backend/native-link-info-core.d.ts +1 -0
  299. package/dist/backend/native-link-info-core.js +9 -5
  300. package/dist/backend/native-link-info-core.js.map +1 -1
  301. package/dist/backend/native-link-info.js +14 -5
  302. package/dist/backend/native-link-info.js.map +1 -1
  303. package/dist/backend/native-link-info.test.js +58 -13
  304. package/dist/backend/native-link-info.test.js.map +1 -1
  305. package/dist/backend/native-toolchain.d.ts +17 -450
  306. package/dist/backend/native-toolchain.js +17 -3971
  307. package/dist/backend/native-toolchain.js.map +1 -1
  308. package/dist/backend/native-toolchain.test.js +103 -72
  309. package/dist/backend/native-toolchain.test.js.map +1 -1
  310. package/dist/backend/native-tools.d.ts +3 -1
  311. package/dist/backend/native-tools.js +30 -9
  312. package/dist/backend/native-tools.js.map +1 -1
  313. package/dist/backend/object-localize.js +17 -14
  314. package/dist/backend/object-localize.js.map +1 -1
  315. package/dist/backend/object-localize.test.js +59 -12
  316. package/dist/backend/object-localize.test.js.map +1 -1
  317. package/dist/backend/runtime-abi.d.ts +2 -2
  318. package/dist/backend/runtime-abi.js +2 -2
  319. package/dist/backend/runtime-pack-core.d.ts +1 -0
  320. package/dist/backend/runtime-pack-core.js +104 -50
  321. package/dist/backend/runtime-pack-core.js.map +1 -1
  322. package/dist/backend/runtime-pack-native.js +5 -3
  323. package/dist/backend/runtime-pack-native.js.map +1 -1
  324. package/dist/backend/runtime-pack-targets.test.js +126 -17
  325. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  326. package/dist/backend/runtime-pack.d.ts +1 -1
  327. package/dist/backend/runtime-pack.js +11 -12
  328. package/dist/backend/runtime-pack.js.map +1 -1
  329. package/dist/backend/runtime-pack.test.js +51 -25
  330. package/dist/backend/runtime-pack.test.js.map +1 -1
  331. package/dist/backend/source-locations.js.map +1 -1
  332. package/dist/backend/source-locations.test.js +7 -2
  333. package/dist/backend/source-locations.test.js.map +1 -1
  334. package/dist/backend/target-diagnostics.js +44 -14
  335. package/dist/backend/target-diagnostics.js.map +1 -1
  336. package/dist/backend/target-diagnostics.test.js +93 -20
  337. package/dist/backend/target-diagnostics.test.js.map +1 -1
  338. package/dist/backend/targets.js +230 -86
  339. package/dist/backend/targets.js.map +1 -1
  340. package/dist/backend/targets.test.js +32 -18
  341. package/dist/backend/targets.test.js.map +1 -1
  342. package/dist/backend/toolchain-environment.js +5 -1
  343. package/dist/backend/toolchain-environment.js.map +1 -1
  344. package/dist/backend/vendor-archives.d.ts +2 -2
  345. package/dist/backend/vendor-archives.js +84 -35
  346. package/dist/backend/vendor-archives.js.map +1 -1
  347. package/dist/backend/vendor-inputs.js +13 -1
  348. package/dist/backend/vendor-inputs.js.map +1 -1
  349. package/dist/backend/warm-cache.d.ts +1 -1
  350. package/dist/backend/warm-cache.js +33 -9
  351. package/dist/backend/warm-cache.js.map +1 -1
  352. package/dist/cli/command.js +39 -9
  353. package/dist/cli/command.js.map +1 -1
  354. package/dist/cli/output-options.js +14 -4
  355. package/dist/cli/output-options.js.map +1 -1
  356. package/dist/cli/paths.js.map +1 -1
  357. package/dist/cli/wasi-runner.js.map +1 -1
  358. package/dist/compat/fetch-profile.js +36 -35
  359. package/dist/compat/fetch-profile.js.map +1 -1
  360. package/dist/coverage/report.js +16 -17
  361. package/dist/coverage/report.js.map +1 -1
  362. package/dist/coverage/surface-manifest.js +112 -26
  363. package/dist/coverage/surface-manifest.js.map +1 -1
  364. package/dist/diagnostics/diagnostic.js +55 -16
  365. package/dist/diagnostics/diagnostic.js.map +1 -1
  366. package/dist/executable/executable-cache.d.ts +2 -1
  367. package/dist/executable/executable-cache.js +79 -48
  368. package/dist/executable/executable-cache.js.map +1 -1
  369. package/dist/executable/executable-cache.test.js +90 -26
  370. package/dist/executable/executable-cache.test.js.map +1 -1
  371. package/dist/executable/prepare.js +2 -2
  372. package/dist/executable/prepare.js.map +1 -1
  373. package/dist/ffi/ffi-manifest.js +78 -20
  374. package/dist/ffi/ffi-manifest.js.map +1 -1
  375. package/dist/ffi/ffi-manifest.test.js +96 -16
  376. package/dist/ffi/ffi-manifest.test.js.map +1 -1
  377. package/dist/format-integer.js.map +1 -1
  378. package/dist/frontend/analysis.js +12 -2
  379. package/dist/frontend/analysis.js.map +1 -1
  380. package/dist/frontend/arguments-usage.js.map +1 -1
  381. package/dist/frontend/binding-source.js +9 -3
  382. package/dist/frontend/binding-source.js.map +1 -1
  383. package/dist/frontend/builtin-modules.js +46 -2
  384. package/dist/frontend/builtin-modules.js.map +1 -1
  385. package/dist/frontend/cjs-resolve.js +40 -17
  386. package/dist/frontend/cjs-resolve.js.map +1 -1
  387. package/dist/frontend/cjs-syntax.js +31 -10
  388. package/dist/frontend/cjs-syntax.js.map +1 -1
  389. package/dist/frontend/comptime-node.test.js +10 -11
  390. package/dist/frontend/comptime-node.test.js.map +1 -1
  391. package/dist/frontend/dts-paths.js +7 -3
  392. package/dist/frontend/dts-paths.js.map +1 -1
  393. package/dist/frontend/fork-target.d.ts +5 -0
  394. package/dist/frontend/fork-target.js +55 -18
  395. package/dist/frontend/fork-target.js.map +1 -1
  396. package/dist/frontend/fork-target.test.d.ts +1 -0
  397. package/dist/frontend/fork-target.test.js +59 -0
  398. package/dist/frontend/fork-target.test.js.map +1 -0
  399. package/dist/frontend/function-completion.js +11 -6
  400. package/dist/frontend/function-completion.js.map +1 -1
  401. package/dist/frontend/helper-tokens.js +53 -6
  402. package/dist/frontend/helper-tokens.js.map +1 -1
  403. package/dist/frontend/helper-tokens.test.js +18 -2
  404. package/dist/frontend/helper-tokens.test.js.map +1 -1
  405. package/dist/frontend/inferred-js-diagnostics.js +32 -12
  406. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  407. package/dist/frontend/inferred-js-diagnostics.test.js +11 -15
  408. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  409. package/dist/frontend/input-tracker.js +11 -11
  410. package/dist/frontend/input-tracker.js.map +1 -1
  411. package/dist/frontend/input-tracker.test.js +4 -1
  412. package/dist/frontend/input-tracker.test.js.map +1 -1
  413. package/dist/frontend/lib-contract.js +38 -9
  414. package/dist/frontend/lib-contract.js.map +1 -1
  415. package/dist/frontend/literal-values.js.map +1 -1
  416. package/dist/frontend/literal-values.test.js +28 -8
  417. package/dist/frontend/literal-values.test.js.map +1 -1
  418. package/dist/frontend/lowering/abstract-equality.js +53 -10
  419. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  420. package/dist/frontend/lowering/array-indexed-mutation.d.ts +1 -1
  421. package/dist/frontend/lowering/array-indexed-mutation.js +108 -106
  422. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  423. package/dist/frontend/lowering/array-values.js +37 -14
  424. package/dist/frontend/lowering/array-values.js.map +1 -1
  425. package/dist/frontend/lowering/binding-analysis.d.ts +50 -0
  426. package/dist/frontend/lowering/binding-analysis.js +376 -0
  427. package/dist/frontend/lowering/binding-analysis.js.map +1 -0
  428. package/dist/frontend/lowering/builtin-calls.d.ts +9 -0
  429. package/dist/frontend/lowering/builtin-calls.js +60 -0
  430. package/dist/frontend/lowering/builtin-calls.js.map +1 -0
  431. package/dist/frontend/lowering/builtins/arguments.d.ts +43 -0
  432. package/dist/frontend/lowering/builtins/arguments.js +247 -0
  433. package/dist/frontend/lowering/builtins/arguments.js.map +1 -0
  434. package/dist/frontend/lowering/builtins/async-context.d.ts +52 -0
  435. package/dist/frontend/lowering/builtins/async-context.js +436 -0
  436. package/dist/frontend/lowering/builtins/async-context.js.map +1 -0
  437. package/dist/frontend/lowering/builtins/atomics.d.ts +6 -0
  438. package/dist/frontend/lowering/builtins/atomics.js +82 -0
  439. package/dist/frontend/lowering/builtins/atomics.js.map +1 -0
  440. package/dist/frontend/lowering/builtins/callable-aliases.d.ts +13 -0
  441. package/dist/frontend/lowering/builtins/callable-aliases.js +87 -0
  442. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -0
  443. package/dist/frontend/lowering/builtins/child-process-async.d.ts +18 -0
  444. package/dist/frontend/lowering/builtins/child-process-async.js +245 -0
  445. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -0
  446. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +21 -0
  447. package/dist/frontend/lowering/builtins/child-process-methods.js +362 -0
  448. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -0
  449. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +4 -0
  450. package/dist/frontend/lowering/builtins/child-process-sync.js +639 -0
  451. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -0
  452. package/dist/frontend/lowering/builtins/child-process.d.ts +55 -0
  453. package/dist/frontend/lowering/builtins/child-process.js +669 -0
  454. package/dist/frontend/lowering/builtins/child-process.js.map +1 -0
  455. package/dist/frontend/lowering/builtins/compression.d.ts +7 -0
  456. package/dist/frontend/lowering/builtins/compression.js +115 -0
  457. package/dist/frontend/lowering/builtins/compression.js.map +1 -0
  458. package/dist/frontend/lowering/builtins/console.d.ts +10 -0
  459. package/dist/frontend/lowering/builtins/console.js +38 -0
  460. package/dist/frontend/lowering/builtins/console.js.map +1 -0
  461. package/dist/frontend/lowering/builtins/constants.d.ts +24 -0
  462. package/dist/frontend/lowering/builtins/constants.js +141 -0
  463. package/dist/frontend/lowering/builtins/constants.js.map +1 -0
  464. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  465. package/dist/frontend/lowering/builtins/crypto.js +517 -0
  466. package/dist/frontend/lowering/builtins/crypto.js.map +1 -0
  467. package/dist/frontend/lowering/builtins/dates.d.ts +7 -0
  468. package/dist/frontend/lowering/builtins/dates.js +101 -0
  469. package/dist/frontend/lowering/builtins/dates.js.map +1 -0
  470. package/dist/frontend/lowering/builtins/environment.d.ts +34 -0
  471. package/dist/frontend/lowering/builtins/environment.js +95 -0
  472. package/dist/frontend/lowering/builtins/environment.js.map +1 -0
  473. package/dist/frontend/lowering/builtins/errors.d.ts +14 -0
  474. package/dist/frontend/lowering/builtins/errors.js +83 -0
  475. package/dist/frontend/lowering/builtins/errors.js.map +1 -0
  476. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +35 -0
  477. package/dist/frontend/lowering/builtins/filesystem-calls.js +725 -0
  478. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -0
  479. package/dist/frontend/lowering/builtins/filesystem.d.ts +108 -0
  480. package/dist/frontend/lowering/builtins/filesystem.js +1061 -0
  481. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -0
  482. package/dist/frontend/lowering/builtins/ipc.d.ts +8 -0
  483. package/dist/frontend/lowering/builtins/ipc.js +76 -0
  484. package/dist/frontend/lowering/builtins/ipc.js.map +1 -0
  485. package/dist/frontend/lowering/builtins/json.d.ts +12 -0
  486. package/dist/frontend/lowering/builtins/json.js +387 -0
  487. package/dist/frontend/lowering/builtins/json.js.map +1 -0
  488. package/dist/frontend/lowering/builtins/module-bindings.d.ts +85 -0
  489. package/dist/frontend/lowering/builtins/module-bindings.js +346 -0
  490. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -0
  491. package/dist/frontend/lowering/builtins/module-calls.d.ts +8 -0
  492. package/dist/frontend/lowering/builtins/module-calls.js +308 -0
  493. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -0
  494. package/dist/frontend/lowering/builtins/module-resolution.d.ts +38 -0
  495. package/dist/frontend/lowering/builtins/module-resolution.js +344 -0
  496. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -0
  497. package/dist/frontend/lowering/builtins/numbers.d.ts +15 -0
  498. package/dist/frontend/lowering/builtins/numbers.js +124 -0
  499. package/dist/frontend/lowering/builtins/numbers.js.map +1 -0
  500. package/dist/frontend/lowering/builtins/operating-system.d.ts +13 -0
  501. package/dist/frontend/lowering/builtins/operating-system.js +148 -0
  502. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -0
  503. package/dist/frontend/lowering/builtins/performance.d.ts +13 -0
  504. package/dist/frontend/lowering/builtins/performance.js +100 -0
  505. package/dist/frontend/lowering/builtins/performance.js.map +1 -0
  506. package/dist/frontend/lowering/builtins/process.d.ts +50 -0
  507. package/dist/frontend/lowering/builtins/process.js +1138 -0
  508. package/dist/frontend/lowering/builtins/process.js.map +1 -0
  509. package/dist/frontend/lowering/builtins/promises.d.ts +14 -0
  510. package/dist/frontend/lowering/builtins/promises.js +356 -0
  511. package/dist/frontend/lowering/builtins/promises.js.map +1 -0
  512. package/dist/frontend/lowering/builtins/properties.d.ts +11 -0
  513. package/dist/frontend/lowering/builtins/properties.js +186 -0
  514. package/dist/frontend/lowering/builtins/properties.js.map +1 -0
  515. package/dist/frontend/lowering/builtins/querystring.d.ts +19 -0
  516. package/dist/frontend/lowering/builtins/querystring.js +150 -0
  517. package/dist/frontend/lowering/builtins/querystring.js.map +1 -0
  518. package/dist/frontend/lowering/builtins/readline.d.ts +13 -0
  519. package/dist/frontend/lowering/builtins/readline.js +138 -0
  520. package/dist/frontend/lowering/builtins/readline.js.map +1 -0
  521. package/dist/frontend/lowering/builtins/receiver-types.d.ts +5 -0
  522. package/dist/frontend/lowering/builtins/receiver-types.js +15 -0
  523. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -0
  524. package/dist/frontend/lowering/builtins/reflection.d.ts +13 -0
  525. package/dist/frontend/lowering/builtins/reflection.js +95 -0
  526. package/dist/frontend/lowering/builtins/reflection.js.map +1 -0
  527. package/dist/frontend/lowering/builtins/strings.d.ts +14 -0
  528. package/dist/frontend/lowering/builtins/strings.js +121 -0
  529. package/dist/frontend/lowering/builtins/strings.js.map +1 -0
  530. package/dist/frontend/lowering/builtins/text-codecs.d.ts +29 -0
  531. package/dist/frontend/lowering/builtins/text-codecs.js +590 -0
  532. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -0
  533. package/dist/frontend/lowering/builtins/timers.d.ts +22 -0
  534. package/dist/frontend/lowering/builtins/timers.js +180 -0
  535. package/dist/frontend/lowering/builtins/timers.js.map +1 -0
  536. package/dist/frontend/lowering/builtins/url.d.ts +37 -0
  537. package/dist/frontend/lowering/builtins/url.js +596 -0
  538. package/dist/frontend/lowering/builtins/url.js.map +1 -0
  539. package/dist/frontend/lowering/builtins/util-types.d.ts +7 -0
  540. package/dist/frontend/lowering/builtins/util-types.js +31 -0
  541. package/dist/frontend/lowering/builtins/util-types.js.map +1 -0
  542. package/dist/frontend/lowering/builtins/workers.d.ts +5 -0
  543. package/dist/frontend/lowering/builtins/workers.js +65 -0
  544. package/dist/frontend/lowering/builtins/workers.js.map +1 -0
  545. package/dist/frontend/lowering/call-arguments.d.ts +72 -0
  546. package/dist/frontend/lowering/call-arguments.js +618 -0
  547. package/dist/frontend/lowering/call-arguments.js.map +1 -0
  548. package/dist/frontend/lowering/call-signatures.d.ts +115 -0
  549. package/dist/frontend/lowering/call-signatures.js +719 -0
  550. package/dist/frontend/lowering/call-signatures.js.map +1 -0
  551. package/dist/frontend/lowering/callback-arg.js.map +1 -1
  552. package/dist/frontend/lowering/checked-iterable-spread.js +53 -10
  553. package/dist/frontend/lowering/checked-iterable-spread.js.map +1 -1
  554. package/dist/frontend/lowering/checked-promise-all.js +41 -9
  555. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  556. package/dist/frontend/lowering/class-assertions.d.ts +7 -0
  557. package/dist/frontend/lowering/class-assertions.js +96 -0
  558. package/dist/frontend/lowering/class-assertions.js.map +1 -0
  559. package/dist/frontend/lowering/class-callbacks.d.ts +1 -1
  560. package/dist/frontend/lowering/class-callbacks.js +130 -27
  561. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  562. package/dist/frontend/lowering/class-construction.d.ts +1 -1
  563. package/dist/frontend/lowering/class-construction.js +247 -50
  564. package/dist/frontend/lowering/class-construction.js.map +1 -1
  565. package/dist/frontend/lowering/class-descriptors.js +109 -29
  566. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  567. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -1
  568. package/dist/frontend/lowering/class-dynamic-dispatch.js +2471 -465
  569. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  570. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +284 -44
  571. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  572. package/dist/frontend/lowering/class-instance-constructor.js +17 -5
  573. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  574. package/dist/frontend/lowering/class-method-values.js +199 -51
  575. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  576. package/dist/frontend/lowering/class-protocols.d.ts +17 -0
  577. package/dist/frontend/lowering/class-protocols.js +126 -0
  578. package/dist/frontend/lowering/class-protocols.js.map +1 -0
  579. package/dist/frontend/lowering/class-prototypes.js +345 -86
  580. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  581. package/dist/frontend/lowering/class-runtime-statics.d.ts +1 -1
  582. package/dist/frontend/lowering/class-runtime-statics.js +80 -17
  583. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  584. package/dist/frontend/lowering/class-static-data.js +76 -16
  585. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  586. package/dist/frontend/lowering/coercions/builders.d.ts +13 -0
  587. package/dist/frontend/lowering/coercions/builders.js +77 -0
  588. package/dist/frontend/lowering/coercions/builders.js.map +1 -0
  589. package/dist/frontend/lowering/coercions/function-adapters.d.ts +58 -0
  590. package/dist/frontend/lowering/coercions/function-adapters.js +430 -0
  591. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -0
  592. package/dist/frontend/lowering/coercions/island.d.ts +37 -0
  593. package/dist/frontend/lowering/coercions/island.js +350 -0
  594. package/dist/frontend/lowering/coercions/island.js.map +1 -0
  595. package/dist/frontend/lowering/coercions/state.d.ts +14 -0
  596. package/dist/frontend/lowering/coercions/state.js +16 -0
  597. package/dist/frontend/lowering/coercions/state.js.map +1 -0
  598. package/dist/frontend/lowering/coercions/structural-plans.d.ts +40 -0
  599. package/dist/frontend/lowering/coercions/structural-plans.js +447 -0
  600. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -0
  601. package/dist/frontend/lowering/coercions/structural.d.ts +63 -0
  602. package/dist/frontend/lowering/coercions/structural.js +616 -0
  603. package/dist/frontend/lowering/coercions/structural.js.map +1 -0
  604. package/dist/frontend/lowering/coercions/unions.d.ts +65 -0
  605. package/dist/frontend/lowering/coercions/unions.js +318 -0
  606. package/dist/frontend/lowering/coercions/unions.js.map +1 -0
  607. package/dist/frontend/lowering/collection-ingestion.js +355 -72
  608. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  609. package/dist/frontend/lowering/containers/array-callbacks.d.ts +88 -0
  610. package/dist/frontend/lowering/containers/array-callbacks.js +1611 -0
  611. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -0
  612. package/dist/frontend/lowering/containers/array-construction.d.ts +42 -0
  613. package/dist/frontend/lowering/containers/array-construction.js +1044 -0
  614. package/dist/frontend/lowering/containers/array-construction.js.map +1 -0
  615. package/dist/frontend/lowering/containers/array-iteration.d.ts +16 -0
  616. package/dist/frontend/lowering/containers/array-iteration.js +95 -0
  617. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -0
  618. package/dist/frontend/lowering/containers/array-methods.d.ts +27 -0
  619. package/dist/frontend/lowering/containers/array-methods.js +1854 -0
  620. package/dist/frontend/lowering/containers/array-methods.js.map +1 -0
  621. package/dist/frontend/lowering/containers/bytes.d.ts +17 -17
  622. package/dist/frontend/lowering/containers/bytes.js +430 -138
  623. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  624. package/dist/frontend/lowering/containers/callback-arguments.d.ts +26 -0
  625. package/dist/frontend/lowering/containers/callback-arguments.js +179 -0
  626. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -0
  627. package/dist/frontend/lowering/containers/collection-grouping.d.ts +19 -0
  628. package/dist/frontend/lowering/containers/collection-grouping.js +297 -0
  629. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -0
  630. package/dist/frontend/lowering/containers/collection-methods.d.ts +57 -0
  631. package/dist/frontend/lowering/containers/collection-methods.js +1314 -0
  632. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -0
  633. package/dist/frontend/lowering/containers/dynamic-receivers.d.ts +18 -0
  634. package/dist/frontend/lowering/containers/dynamic-receivers.js +114 -0
  635. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -0
  636. package/dist/frontend/lowering/containers/for-of.d.ts +60 -0
  637. package/dist/frontend/lowering/containers/for-of.js +643 -0
  638. package/dist/frontend/lowering/containers/for-of.js.map +1 -0
  639. package/dist/frontend/lowering/containers/indexed-objects.d.ts +132 -0
  640. package/dist/frontend/lowering/containers/indexed-objects.js +1743 -0
  641. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -0
  642. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +20 -0
  643. package/dist/frontend/lowering/containers/iterator-helpers.js +809 -0
  644. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -0
  645. package/dist/frontend/lowering/containers/string-and-regexp.js +601 -160
  646. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  647. package/dist/frontend/lowering/containers/string-replacement.js +213 -63
  648. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  649. package/dist/frontend/lowering/crypto-tables.js +263 -64
  650. package/dist/frontend/lowering/crypto-tables.js.map +1 -1
  651. package/dist/frontend/lowering/deferred-module-initializers.js +172 -68
  652. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  653. package/dist/frontend/lowering/deferred-module-initializers.test.js +41 -8
  654. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  655. package/dist/frontend/lowering/error-methods.js +339 -65
  656. package/dist/frontend/lowering/error-methods.js.map +1 -1
  657. package/dist/frontend/lowering/expressions/evaluation-safety.js +3 -2
  658. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  659. package/dist/frontend/lowering/expressions/global-symbols.js +2 -1
  660. package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -1
  661. package/dist/frontend/lowering/expressions/native-proxy.js +11 -5
  662. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  663. package/dist/frontend/lowering/expressions/nullish-assignment.js +67 -13
  664. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  665. package/dist/frontend/lowering/expressions/object-literals.js +588 -165
  666. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  667. package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
  668. package/dist/frontend/lowering/expressions/optional-chains.js +68 -17
  669. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  670. package/dist/frontend/lowering/expressions/union-field-write.js +45 -18
  671. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
  672. package/dist/frontend/lowering/function-context.js +5 -1
  673. package/dist/frontend/lowering/function-context.js.map +1 -1
  674. package/dist/frontend/lowering/function-returns.d.ts +67 -0
  675. package/dist/frontend/lowering/function-returns.js +392 -0
  676. package/dist/frontend/lowering/function-returns.js.map +1 -0
  677. package/dist/frontend/lowering/generator-delegation.d.ts +1 -1
  678. package/dist/frontend/lowering/generator-delegation.js +171 -39
  679. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  680. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -1
  681. package/dist/frontend/lowering/generator-dynamic-dispatch.js +176 -36
  682. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  683. package/dist/frontend/lowering/generic-functions.d.ts +271 -0
  684. package/dist/frontend/lowering/generic-functions.js +1730 -0
  685. package/dist/frontend/lowering/generic-functions.js.map +1 -0
  686. package/dist/frontend/lowering/import-meta.d.ts +1 -1
  687. package/dist/frontend/lowering/import-meta.js +37 -14
  688. package/dist/frontend/lowering/import-meta.js.map +1 -1
  689. package/dist/frontend/lowering/indexed-comparison.js +6 -2
  690. package/dist/frontend/lowering/indexed-comparison.js.map +1 -1
  691. package/dist/frontend/lowering/instantiation-path.d.ts +8 -0
  692. package/dist/frontend/lowering/instantiation-path.js +10 -0
  693. package/dist/frontend/lowering/instantiation-path.js.map +1 -0
  694. package/dist/frontend/lowering/instantiation-path.test.d.ts +1 -0
  695. package/dist/frontend/lowering/instantiation-path.test.js +23 -0
  696. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -0
  697. package/dist/frontend/lowering/iterator-consumption.d.ts +9 -0
  698. package/dist/frontend/lowering/iterator-consumption.js +91 -0
  699. package/dist/frontend/lowering/iterator-consumption.js.map +1 -0
  700. package/dist/frontend/lowering/lib-boundary.js +40 -17
  701. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  702. package/dist/frontend/lowering/lib-boundary.test.js +49 -11
  703. package/dist/frontend/lowering/lib-boundary.test.js.map +1 -1
  704. package/dist/frontend/lowering/lower-array-sort.d.ts +0 -19
  705. package/dist/frontend/lowering/lower-array-sort.js +331 -566
  706. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  707. package/dist/frontend/lowering/lower-assert.js +248 -43
  708. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  709. package/dist/frontend/lowering/lower-async-iteration.js +71 -16
  710. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  711. package/dist/frontend/lowering/lower-builtin-values.js +430 -77
  712. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  713. package/dist/frontend/lowering/lower-calls.d.ts +39 -558
  714. package/dist/frontend/lowering/lower-calls.js +2628 -5669
  715. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  716. package/dist/frontend/lowering/lower-classes.d.ts +248 -242
  717. package/dist/frontend/lowering/lower-classes.js +1820 -775
  718. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  719. package/dist/frontend/lowering/lower-comptime.d.ts +35 -35
  720. package/dist/frontend/lowering/lower-comptime.js +39 -37
  721. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  722. package/dist/frontend/lowering/lower-dgram.js +59 -31
  723. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  724. package/dist/frontend/lowering/lower-enums.js +5 -2
  725. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  726. package/dist/frontend/lowering/lower-event-emitter.js +323 -86
  727. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  728. package/dist/frontend/lowering/lower-expando.js +19 -7
  729. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  730. package/dist/frontend/lowering/lower-exprs.d.ts +194 -194
  731. package/dist/frontend/lowering/lower-exprs.js +3473 -1160
  732. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  733. package/dist/frontend/lowering/lower-functions.d.ts +23 -0
  734. package/dist/frontend/lowering/lower-functions.js +449 -0
  735. package/dist/frontend/lowering/lower-functions.js.map +1 -0
  736. package/dist/frontend/lowering/lower-generators.js +121 -32
  737. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  738. package/dist/frontend/lowering/lower-global-value.js +15 -4
  739. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  740. package/dist/frontend/lowering/lower-inspect.js +479 -89
  741. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  742. package/dist/frontend/lowering/lower-island.d.ts +79 -79
  743. package/dist/frontend/lowering/lower-island.js +366 -274
  744. package/dist/frontend/lowering/lower-island.js.map +1 -1
  745. package/dist/frontend/lowering/lower-island.test.js +7 -2
  746. package/dist/frontend/lowering/lower-island.test.js.map +1 -1
  747. package/dist/frontend/lowering/lower-mixins.js +17 -8
  748. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  749. package/dist/frontend/lowering/lower-modules.d.ts +95 -94
  750. package/dist/frontend/lowering/lower-modules.js +655 -329
  751. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  752. package/dist/frontend/lowering/lower-modules.test.js +91 -20
  753. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  754. package/dist/frontend/lowering/lower-namespaces.js +25 -8
  755. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  756. package/dist/frontend/lowering/lower-node-module.js +115 -34
  757. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  758. package/dist/frontend/lowering/lower-server.js +1210 -290
  759. package/dist/frontend/lowering/lower-server.js.map +1 -1
  760. package/dist/frontend/lowering/lower-stmts.d.ts +148 -148
  761. package/dist/frontend/lowering/lower-stmts.js +2324 -994
  762. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  763. package/dist/frontend/lowering/lower-stmts.test.js +13 -5
  764. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  765. package/dist/frontend/lowering/lower-stream.js +363 -91
  766. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  767. package/dist/frontend/lowering/lower-system-errors.js +30 -8
  768. package/dist/frontend/lowering/lower-system-errors.js.map +1 -1
  769. package/dist/frontend/lowering/lower-test.js +40 -13
  770. package/dist/frontend/lowering/lower-test.js.map +1 -1
  771. package/dist/frontend/lowering/lower-timers.d.ts +31 -0
  772. package/dist/frontend/lowering/lower-timers.js +336 -0
  773. package/dist/frontend/lowering/lower-timers.js.map +1 -0
  774. package/dist/frontend/lowering/lower-url.d.ts +1 -1
  775. package/dist/frontend/lowering/lower-url.js +46 -13
  776. package/dist/frontend/lowering/lower-url.js.map +1 -1
  777. package/dist/frontend/lowering/lowerer.d.ts +34 -352
  778. package/dist/frontend/lowering/lowerer.js +1074 -2712
  779. package/dist/frontend/lowering/lowerer.js.map +1 -1
  780. package/dist/frontend/lowering/lowerer.test.js +85 -17
  781. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  782. package/dist/frontend/lowering/module-namespace-elements.js +43 -8
  783. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  784. package/dist/frontend/lowering/native-ffi.d.ts +21 -1
  785. package/dist/frontend/lowering/native-ffi.js +487 -18
  786. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  787. package/dist/frontend/lowering/object-enumeration-receiver.js +55 -10
  788. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  789. package/dist/frontend/lowering/object-factory-new.d.ts +1 -1
  790. package/dist/frontend/lowering/object-factory-new.js +36 -11
  791. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  792. package/dist/frontend/lowering/optional-arguments.js +49 -20
  793. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  794. package/dist/frontend/lowering/pairs-snapshot.js +66 -14
  795. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  796. package/dist/frontend/lowering/runtime-optional-locals.js +3 -1
  797. package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -1
  798. package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -1
  799. package/dist/frontend/lowering/sanitize-class-types.js +4 -1
  800. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  801. package/dist/frontend/lowering/sanitize-class-types.test.js +86 -18
  802. package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -1
  803. package/dist/frontend/lowering/split-consumers.d.ts +7 -0
  804. package/dist/frontend/lowering/split-consumers.js +64 -0
  805. package/dist/frontend/lowering/split-consumers.js.map +1 -0
  806. package/dist/frontend/lowering/static-this.js +13 -6
  807. package/dist/frontend/lowering/static-this.js.map +1 -1
  808. package/dist/frontend/lowering/string-index.js +32 -10
  809. package/dist/frontend/lowering/string-index.js.map +1 -1
  810. package/dist/frontend/lowering/surfaces.d.ts +45 -46
  811. package/dist/frontend/lowering/surfaces.js +1129 -256
  812. package/dist/frontend/lowering/surfaces.js.map +1 -1
  813. package/dist/frontend/lowering/symbol-fields.js +40 -15
  814. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  815. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  816. package/dist/frontend/lowering/text-decoder-encoding.js +236 -24
  817. package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
  818. package/dist/frontend/lowering/text-decoder-encoding.test.js +84 -12
  819. package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -1
  820. package/dist/frontend/lowering/union-narrow.js +59 -16
  821. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  822. package/dist/frontend/lowering/union-narrow.test.js +24 -7
  823. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  824. package/dist/frontend/lowering/union-retag.js +155 -40
  825. package/dist/frontend/lowering/union-retag.js.map +1 -1
  826. package/dist/frontend/lowering/union-retag.test.js +131 -33
  827. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  828. package/dist/frontend/lowering/unregistered-class-types.js.map +1 -1
  829. package/dist/frontend/lowering/unregistered-class-types.test.js +34 -8
  830. package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
  831. package/dist/frontend/module-source-candidates.d.ts +10 -0
  832. package/dist/frontend/module-source-candidates.js +40 -0
  833. package/dist/frontend/module-source-candidates.js.map +1 -0
  834. package/dist/frontend/module-source-candidates.test.d.ts +1 -0
  835. package/dist/frontend/module-source-candidates.test.js +53 -0
  836. package/dist/frontend/module-source-candidates.test.js.map +1 -0
  837. package/dist/frontend/module-syntax.js +21 -8
  838. package/dist/frontend/module-syntax.js.map +1 -1
  839. package/dist/frontend/module-syntax.test.js +37 -13
  840. package/dist/frontend/module-syntax.test.js.map +1 -1
  841. package/dist/frontend/npm-fetch-analysis.js +13 -4
  842. package/dist/frontend/npm-fetch-analysis.js.map +1 -1
  843. package/dist/frontend/npm-fetch-analysis.test.js +33 -10
  844. package/dist/frontend/npm-fetch-analysis.test.js.map +1 -1
  845. package/dist/frontend/npm-fetch-node.js.map +1 -1
  846. package/dist/frontend/npm-fetch-syntax.js +4 -9
  847. package/dist/frontend/npm-fetch-syntax.js.map +1 -1
  848. package/dist/frontend/npm-node.js +3 -1
  849. package/dist/frontend/npm-node.js.map +1 -1
  850. package/dist/frontend/npm-static-bundled-cjs.js +88 -29
  851. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  852. package/dist/frontend/npm-static-bundled-cjs.test.js +29 -10
  853. package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -1
  854. package/dist/frontend/npm-static-declaration-syntax.js +148 -56
  855. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  856. package/dist/frontend/npm-static-declarations.d.ts +1 -1
  857. package/dist/frontend/npm-static-declarations.js.map +1 -1
  858. package/dist/frontend/npm-static-declarations.test.js +33 -7
  859. package/dist/frontend/npm-static-declarations.test.js.map +1 -1
  860. package/dist/frontend/npm-static-prune.js +26 -12
  861. package/dist/frontend/npm-static-prune.js.map +1 -1
  862. package/dist/frontend/npm-static-prune.test.js +17 -3
  863. package/dist/frontend/npm-static-prune.test.js.map +1 -1
  864. package/dist/frontend/npm-static-rewrite-host.js +2 -3
  865. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  866. package/dist/frontend/npm-static-rewrite-syntax.js +64 -21
  867. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  868. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  869. package/dist/frontend/npm-static-subtyping.js +9 -4
  870. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  871. package/dist/frontend/npm-static-subtyping.test.js +30 -6
  872. package/dist/frontend/npm-static-subtyping.test.js.map +1 -1
  873. package/dist/frontend/npm-static.js +15 -4
  874. package/dist/frontend/npm-static.js.map +1 -1
  875. package/dist/frontend/npm.js +122 -36
  876. package/dist/frontend/npm.js.map +1 -1
  877. package/dist/frontend/npm.test.js +30 -10
  878. package/dist/frontend/npm.test.js.map +1 -1
  879. package/dist/frontend/pipeline-native.js.map +1 -1
  880. package/dist/frontend/pipeline.js +25 -8
  881. package/dist/frontend/pipeline.js.map +1 -1
  882. package/dist/frontend/pipeline.test.js +21 -7
  883. package/dist/frontend/pipeline.test.js.map +1 -1
  884. package/dist/frontend/program-analysis.d.ts +2 -0
  885. package/dist/frontend/program-analysis.js +2 -0
  886. package/dist/frontend/program-analysis.js.map +1 -1
  887. package/dist/frontend/program-node.js +5 -3
  888. package/dist/frontend/program-node.js.map +1 -1
  889. package/dist/frontend/program.d.ts +2 -2
  890. package/dist/frontend/program.js +248 -127
  891. package/dist/frontend/program.js.map +1 -1
  892. package/dist/frontend/program.test.js +27 -27
  893. package/dist/frontend/program.test.js.map +1 -1
  894. package/dist/frontend/provenance-core.js +8 -4
  895. package/dist/frontend/provenance-core.js.map +1 -1
  896. package/dist/frontend/provenance-registry.js +1 -4
  897. package/dist/frontend/provenance-registry.js.map +1 -1
  898. package/dist/frontend/resolve.js +32 -20
  899. package/dist/frontend/resolve.js.map +1 -1
  900. package/dist/frontend/resolve.test.js +1 -1
  901. package/dist/frontend/resolve.test.js.map +1 -1
  902. package/dist/frontend/runtime-resolve.js +13 -4
  903. package/dist/frontend/runtime-resolve.js.map +1 -1
  904. package/dist/frontend/runtime-resolve.test.js +25 -9
  905. package/dist/frontend/runtime-resolve.test.js.map +1 -1
  906. package/dist/frontend/services-node.js +6 -2
  907. package/dist/frontend/services-node.js.map +1 -1
  908. package/dist/frontend/services-node.test.js +18 -6
  909. package/dist/frontend/services-node.test.js.map +1 -1
  910. package/dist/frontend/services.js +8 -4
  911. package/dist/frontend/services.js.map +1 -1
  912. package/dist/frontend/services.test.js +6 -2
  913. package/dist/frontend/services.test.js.map +1 -1
  914. package/dist/frontend/ts7/api.js +12 -4
  915. package/dist/frontend/ts7/api.js.map +1 -1
  916. package/dist/frontend/ts7/ast-bytes.js +10 -3
  917. package/dist/frontend/ts7/ast-bytes.js.map +1 -1
  918. package/dist/frontend/ts7/ast-bytes.test.js +23 -4
  919. package/dist/frontend/ts7/ast-bytes.test.js.map +1 -1
  920. package/dist/frontend/ts7/ast-guards.test.js +14 -5
  921. package/dist/frontend/ts7/ast-guards.test.js.map +1 -1
  922. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  923. package/dist/frontend/ts7/ast-node.js +490 -172
  924. package/dist/frontend/ts7/ast-node.js.map +1 -1
  925. package/dist/frontend/ts7/ast-node.test.js +150 -36
  926. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  927. package/dist/frontend/ts7/ast-text.js +13 -3
  928. package/dist/frontend/ts7/ast-text.js.map +1 -1
  929. package/dist/frontend/ts7/ast-text.test.js.map +1 -1
  930. package/dist/frontend/ts7/ast-types.js.map +1 -1
  931. package/dist/frontend/ts7/ast-wire.d.ts +5 -1
  932. package/dist/frontend/ts7/ast-wire.js +83 -20
  933. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  934. package/dist/frontend/ts7/ast-wire.test.js +53 -8
  935. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  936. package/dist/frontend/ts7/ast.d.ts +2 -1
  937. package/dist/frontend/ts7/ast.js +53 -30
  938. package/dist/frontend/ts7/ast.js.map +1 -1
  939. package/dist/frontend/ts7/census-check.js +1 -1
  940. package/dist/frontend/ts7/census-check.js.map +1 -1
  941. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  942. package/dist/frontend/ts7/checker.d.ts +8 -2
  943. package/dist/frontend/ts7/checker.js +46 -8
  944. package/dist/frontend/ts7/checker.js.map +1 -1
  945. package/dist/frontend/ts7/checker.test.js +96 -17
  946. package/dist/frontend/ts7/checker.test.js.map +1 -1
  947. package/dist/frontend/ts7/enums.test.js +9 -4
  948. package/dist/frontend/ts7/enums.test.js.map +1 -1
  949. package/dist/frontend/ts7/native-api.js.map +1 -1
  950. package/dist/frontend/ts7/native-host.js.map +1 -1
  951. package/dist/frontend/ts7/native-process.js +9 -3
  952. package/dist/frontend/ts7/native-process.js.map +1 -1
  953. package/dist/frontend/ts7/program-adapter.js +1 -1
  954. package/dist/frontend/ts7/program-adapter.js.map +1 -1
  955. package/dist/frontend/ts7/program-host.d.ts +7 -0
  956. package/dist/frontend/ts7/program-host.js +33 -6
  957. package/dist/frontend/ts7/program-host.js.map +1 -1
  958. package/dist/frontend/ts7/program-host.test.js +72 -11
  959. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  960. package/dist/frontend/ts7/rpc-api.js +3 -1
  961. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  962. package/dist/frontend/ts7/rpc-client.js +15 -5
  963. package/dist/frontend/ts7/rpc-client.js.map +1 -1
  964. package/dist/frontend/ts7/rpc-client.test.js +26 -8
  965. package/dist/frontend/ts7/rpc-client.test.js.map +1 -1
  966. package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
  967. package/dist/frontend/ts7/rpc-filesystem.test.js +43 -10
  968. package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
  969. package/dist/frontend/ts7/rpc-process.js +16 -6
  970. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  971. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  972. package/dist/frontend/ts7/rpc-wire.d.ts +1 -0
  973. package/dist/frontend/ts7/rpc-wire.js +41 -14
  974. package/dist/frontend/ts7/rpc-wire.js.map +1 -1
  975. package/dist/frontend/ts7/rpc-wire.test.js +36 -6
  976. package/dist/frontend/ts7/rpc-wire.test.js.map +1 -1
  977. package/dist/frontend/ts7/semantic-checker.js +209 -68
  978. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  979. package/dist/frontend/ts7/semantic-checker.test.js +29 -14
  980. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  981. package/dist/frontend/ts7/semantic-json.js +7 -1
  982. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  983. package/dist/frontend/ts7/semantic-json.test.js +17 -3
  984. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  985. package/dist/frontend/ts7/semantic-model.js +147 -51
  986. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  987. package/dist/frontend/ts7/semantic-model.test.js +72 -19
  988. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  989. package/dist/frontend/ts7/semantic-types.d.ts +2 -2
  990. package/dist/frontend/ts7/session-cache.js +10 -3
  991. package/dist/frontend/ts7/session-cache.js.map +1 -1
  992. package/dist/frontend/ts7/session-cache.test.js +13 -4
  993. package/dist/frontend/ts7/session-cache.test.js.map +1 -1
  994. package/dist/frontend/ts7/session-path.js +25 -10
  995. package/dist/frontend/ts7/session-path.js.map +1 -1
  996. package/dist/frontend/ts7/session-path.test.js +47 -4
  997. package/dist/frontend/ts7/session-path.test.js.map +1 -1
  998. package/dist/frontend/ts7/session-timing.js +22 -3
  999. package/dist/frontend/ts7/session-timing.js.map +1 -1
  1000. package/dist/frontend/ts7/session-timing.test.js +12 -3
  1001. package/dist/frontend/ts7/session-timing.test.js.map +1 -1
  1002. package/dist/frontend/ts7/session.d.ts +1 -0
  1003. package/dist/frontend/ts7/session.js +109 -35
  1004. package/dist/frontend/ts7/session.js.map +1 -1
  1005. package/dist/frontend/ts7/session.test.js +69 -15
  1006. package/dist/frontend/ts7/session.test.js.map +1 -1
  1007. package/dist/frontend/ts7/source-parser.js +17 -6
  1008. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1009. package/dist/frontend/ts7/source-parser.test.js +32 -9
  1010. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1011. package/dist/frontend/tsc-codes.js +56 -11
  1012. package/dist/frontend/tsc-codes.js.map +1 -1
  1013. package/dist/frontend/tsc-codes.test.d.ts +1 -0
  1014. package/dist/frontend/tsc-codes.test.js +16 -0
  1015. package/dist/frontend/tsc-codes.test.js.map +1 -0
  1016. package/dist/frontend/type-mapper.d.ts +3 -0
  1017. package/dist/frontend/type-mapper.js +589 -206
  1018. package/dist/frontend/type-mapper.js.map +1 -1
  1019. package/dist/frontend/type-mapper.test.js +108 -33
  1020. package/dist/frontend/type-mapper.test.js.map +1 -1
  1021. package/dist/frontend/union-discriminants.js +8 -2
  1022. package/dist/frontend/union-discriminants.js.map +1 -1
  1023. package/dist/frontend/union-discriminants.test.js +77 -20
  1024. package/dist/frontend/union-discriminants.test.js.map +1 -1
  1025. package/dist/frontend/worker-target.d.ts +6 -0
  1026. package/dist/frontend/worker-target.js +108 -0
  1027. package/dist/frontend/worker-target.js.map +1 -0
  1028. package/dist/frontend/worker-target.test.d.ts +1 -0
  1029. package/dist/frontend/worker-target.test.js +71 -0
  1030. package/dist/frontend/worker-target.test.js.map +1 -0
  1031. package/dist/index.d.ts +9 -8
  1032. package/dist/index.js +174 -88
  1033. package/dist/index.js.map +1 -1
  1034. package/dist/ir/analysis.js +95 -38
  1035. package/dist/ir/analysis.js.map +1 -1
  1036. package/dist/ir/analysis.test.js +91 -15
  1037. package/dist/ir/analysis.test.js.map +1 -1
  1038. package/dist/ir/api.d.ts +4 -0
  1039. package/dist/ir/api.js +6 -0
  1040. package/dist/ir/api.js.map +1 -0
  1041. package/dist/ir/build.d.ts +7 -0
  1042. package/dist/ir/build.js +27 -1
  1043. package/dist/ir/build.js.map +1 -1
  1044. package/dist/ir/builtin-effects.d.ts +9 -0
  1045. package/dist/ir/builtin-effects.js +643 -0
  1046. package/dist/ir/builtin-effects.js.map +1 -0
  1047. package/dist/ir/builtin-signatures.d.ts +15 -0
  1048. package/dist/ir/builtin-signatures.js +3397 -0
  1049. package/dist/ir/builtin-signatures.js.map +1 -0
  1050. package/dist/ir/byte-numbers.js +67 -16
  1051. package/dist/ir/byte-numbers.js.map +1 -1
  1052. package/dist/ir/byte-numbers.test.js +17 -4
  1053. package/dist/ir/byte-numbers.test.js.map +1 -1
  1054. package/dist/ir/constant-tables.js +13 -5
  1055. package/dist/ir/constant-tables.js.map +1 -1
  1056. package/dist/ir/constant-tables.test.js +47 -7
  1057. package/dist/ir/constant-tables.test.js.map +1 -1
  1058. package/dist/ir/control-flow.js +2 -1
  1059. package/dist/ir/control-flow.js.map +1 -1
  1060. package/dist/ir/control-flow.test.js +35 -11
  1061. package/dist/ir/control-flow.test.js.map +1 -1
  1062. package/dist/ir/initializer-bindings.d.ts +9 -0
  1063. package/dist/ir/initializer-bindings.js +115 -0
  1064. package/dist/ir/initializer-bindings.js.map +1 -0
  1065. package/dist/ir/initializer-bindings.test.d.ts +1 -0
  1066. package/dist/ir/initializer-bindings.test.js +118 -0
  1067. package/dist/ir/initializer-bindings.test.js.map +1 -0
  1068. package/dist/ir/integer-loop-facts.d.ts +12 -0
  1069. package/dist/ir/integer-loop-facts.js +137 -0
  1070. package/dist/ir/integer-loop-facts.js.map +1 -0
  1071. package/dist/ir/integer-loops.js +85 -30
  1072. package/dist/ir/integer-loops.js.map +1 -1
  1073. package/dist/ir/integer-loops.test.js +76 -13
  1074. package/dist/ir/integer-loops.test.js.map +1 -1
  1075. package/dist/ir/integer-ranges.js +93 -21
  1076. package/dist/ir/integer-ranges.js.map +1 -1
  1077. package/dist/ir/integer-ranges.test.js +199 -21
  1078. package/dist/ir/integer-ranges.test.js.map +1 -1
  1079. package/dist/ir/intrinsic-signatures.d.ts +20 -0
  1080. package/dist/ir/intrinsic-signatures.js +57 -0
  1081. package/dist/ir/intrinsic-signatures.js.map +1 -0
  1082. package/dist/ir/ir.d.ts +15 -2160
  1083. package/dist/ir/ir.js +160 -1396
  1084. package/dist/ir/ir.js.map +1 -1
  1085. package/dist/ir/ir.test.js +98 -77
  1086. package/dist/ir/ir.test.js.map +1 -1
  1087. package/dist/ir/numeric-call-specialization.d.ts +8 -0
  1088. package/dist/ir/numeric-call-specialization.js +198 -0
  1089. package/dist/ir/numeric-call-specialization.js.map +1 -0
  1090. package/dist/ir/runtime-features.d.ts +221 -0
  1091. package/dist/ir/runtime-features.js +552 -0
  1092. package/dist/ir/runtime-features.js.map +1 -0
  1093. package/dist/ir/runtime-features.test.d.ts +1 -0
  1094. package/dist/ir/runtime-features.test.js +98 -0
  1095. package/dist/ir/runtime-features.test.js.map +1 -0
  1096. package/dist/ir/scalar-records.js +130 -40
  1097. package/dist/ir/scalar-records.js.map +1 -1
  1098. package/dist/ir/scalar-records.test.js +146 -27
  1099. package/dist/ir/scalar-records.test.js.map +1 -1
  1100. package/dist/ir/serialize.d.ts +1 -1
  1101. package/dist/ir/serialize.js +7 -5
  1102. package/dist/ir/serialize.js.map +1 -1
  1103. package/dist/ir/serialize.test.js +44 -9
  1104. package/dist/ir/serialize.test.js.map +1 -1
  1105. package/dist/ir/traverse.js +156 -43
  1106. package/dist/ir/traverse.js.map +1 -1
  1107. package/dist/ir/traverse.test.js +99 -24
  1108. package/dist/ir/traverse.test.js.map +1 -1
  1109. package/dist/ir/validate.d.ts +1 -31
  1110. package/dist/ir/validate.js +869 -1910
  1111. package/dist/ir/validate.js.map +1 -1
  1112. package/dist/ir/validate.test.js +697 -114
  1113. package/dist/ir/validate.test.js.map +1 -1
  1114. package/dist/library/cache-primitives.js +9 -10
  1115. package/dist/library/cache-primitives.js.map +1 -1
  1116. package/dist/library/cache-reset.test.js +2 -1
  1117. package/dist/library/cache-reset.test.js.map +1 -1
  1118. package/dist/library/compiler-self-identity.js +11 -5
  1119. package/dist/library/compiler-self-identity.js.map +1 -1
  1120. package/dist/library/compiler-self-identity.test.js +10 -3
  1121. package/dist/library/compiler-self-identity.test.js.map +1 -1
  1122. package/dist/library/fence-eval.js +24 -7
  1123. package/dist/library/fence-eval.js.map +1 -1
  1124. package/dist/library/fence-eval.test.js +31 -7
  1125. package/dist/library/fence-eval.test.js.map +1 -1
  1126. package/dist/library/int-infer.js +199 -59
  1127. package/dist/library/int-infer.js.map +1 -1
  1128. package/dist/library/int-infer.test.js +137 -61
  1129. package/dist/library/int-infer.test.js.map +1 -1
  1130. package/dist/library/ir-policy.d.ts +27 -0
  1131. package/dist/library/ir-policy.js +234 -0
  1132. package/dist/library/ir-policy.js.map +1 -0
  1133. package/dist/library/library-cache.js +40 -17
  1134. package/dist/library/library-cache.js.map +1 -1
  1135. package/dist/library/library-cache.test.js +29 -18
  1136. package/dist/library/library-cache.test.js.map +1 -1
  1137. package/dist/library/library-profile.js +68 -13
  1138. package/dist/library/library-profile.js.map +1 -1
  1139. package/dist/library/prepare.js +48 -20
  1140. package/dist/library/prepare.js.map +1 -1
  1141. package/dist/library/semantic-source.js +16 -14
  1142. package/dist/library/semantic-source.js.map +1 -1
  1143. package/dist/library/semantic-source.test.js +9 -14
  1144. package/dist/library/semantic-source.test.js.map +1 -1
  1145. package/dist/library/sidecar-validate.js +53 -12
  1146. package/dist/library/sidecar-validate.js.map +1 -1
  1147. package/dist/library/sidecar.js +85 -24
  1148. package/dist/library/sidecar.js.map +1 -1
  1149. package/dist/library/trap-teaching.js +11 -2
  1150. package/dist/library/trap-teaching.js.map +1 -1
  1151. package/dist/native/cache.js +10 -4
  1152. package/dist/native/cache.js.map +1 -1
  1153. package/dist/native/cli.js +34 -9
  1154. package/dist/native/cli.js.map +1 -1
  1155. package/dist/native/compiler.js +191 -54
  1156. package/dist/native/compiler.js.map +1 -1
  1157. package/dist/native/compiler.test.js +134 -33
  1158. package/dist/native/compiler.test.js.map +1 -1
  1159. package/dist/native/comptime.js +23 -7
  1160. package/dist/native/comptime.js.map +1 -1
  1161. package/dist/native/comptime.test.js +26 -6
  1162. package/dist/native/comptime.test.js.map +1 -1
  1163. package/dist/native/executable-cache.js +77 -27
  1164. package/dist/native/executable-cache.js.map +1 -1
  1165. package/dist/native/executable-cache.test.js +41 -6
  1166. package/dist/native/executable-cache.test.js.map +1 -1
  1167. package/dist/native/file-identity.js +9 -2
  1168. package/dist/native/file-identity.js.map +1 -1
  1169. package/dist/native/file-identity.test.js.map +1 -1
  1170. package/dist/native/library.js +50 -12
  1171. package/dist/native/library.js.map +1 -1
  1172. package/dist/native/prepare.js +121 -34
  1173. package/dist/native/prepare.js.map +1 -1
  1174. package/dist/native/prepare.test.js +22 -6
  1175. package/dist/native/prepare.test.js.map +1 -1
  1176. package/dist/native/runtime-typescript.js +24 -11
  1177. package/dist/native/runtime-typescript.js.map +1 -1
  1178. package/dist/native/runtime-typescript.test.js.map +1 -1
  1179. package/dist/native/sanitizer.js +71 -18
  1180. package/dist/native/sanitizer.js.map +1 -1
  1181. package/dist/native/sanitizer.test.js +78 -20
  1182. package/dist/native/sanitizer.test.js.map +1 -1
  1183. package/dist/native/task.js.map +1 -1
  1184. package/dist/native/task.test.js +7 -2
  1185. package/dist/native/task.test.js.map +1 -1
  1186. package/dist/native/toolchain.js +68 -26
  1187. package/dist/native/toolchain.js.map +1 -1
  1188. package/dist/native/toolchain.test.js +59 -20
  1189. package/dist/native/toolchain.test.js.map +1 -1
  1190. package/dist/startup-cache.d.ts +1 -1
  1191. package/dist/startup-cache.js +1 -1
  1192. package/dist/startup-cache.js.map +1 -1
  1193. package/dist/timing.js.map +1 -1
  1194. package/package.json +20 -20
  1195. package/surface-manifest.json +30 -2
  1196. package/dist/frontend/lowering/lower-builtins.d.ts +0 -601
  1197. package/dist/frontend/lowering/lower-builtins.js +0 -8986
  1198. package/dist/frontend/lowering/lower-builtins.js.map +0 -1
  1199. package/dist/frontend/lowering/lower-containers.d.ts +0 -382
  1200. package/dist/frontend/lowering/lower-containers.js +0 -7344
  1201. package/dist/frontend/lowering/lower-containers.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { dynUndefinedExpr, nodeThrowExpr, boolLit, numLit, strLit, varRef, } from "../../ir/build.js";
1
2
  /* The server-surface lowering (node:net + node:http — the spoke-module
2
3
  * pattern, like lower-island.ts): module-function calls (net
3
4
  * createServer/connect/createConnection, http createServer/request/get —
@@ -9,27 +10,32 @@
9
10
  * beyond these shapes fences member-qualified — never a generic
10
11
  * rejection, never silence. */
11
12
  import * as ts from "../ts7/adapter.js";
12
- import { ladderFenceExpr, nodeThrowExpr } from "./lowerer.js";
13
+ import { ladderFenceExpr } from "./lowerer.js";
13
14
  import { isJsSourceFile, locOf } from "../program.js";
14
- 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";
15
+ 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";
15
16
  import { 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";
16
17
  import { conditionalSpreadOf } from "./expressions/object-literals.js";
17
- import { boolLit, numLit, strLit, varRef } from "../../ir/build.js";
18
18
  import { resultIsDiscarded } from "./call-position.js";
19
19
  import { lowerCallbackArg as lowerCallbackArgShared } from "./callback-arg.js";
20
20
  import { pairsSnapshotHelper } from "./pairs-snapshot.js";
21
- const NARROW_DATA_HINT = 'write/end take one string or one Uint8Array/Buffer value (narrow unions first)';
21
+ const NARROW_DATA_HINT = "write/end take one string or one Uint8Array/Buffer value (narrow unions first)";
22
22
  /** The writable numeric http.Server timeout fields. The selector is an
23
23
  * internal runtime ABI shared by the get/set libCalls (kept here beside
24
24
  * the only two construction/lowering paths that can mint the accesses). */
25
25
  function httpServerTimeoutField(name) {
26
26
  switch (name) {
27
- case "timeout": return 0;
28
- case "keepAliveTimeout": return 1;
29
- case "headersTimeout": return 2;
30
- case "requestTimeout": return 3;
31
- case "keepAliveTimeoutBuffer": return 4;
32
- default: return null;
27
+ case "timeout":
28
+ return 0;
29
+ case "keepAliveTimeout":
30
+ return 1;
31
+ case "headersTimeout":
32
+ return 2;
33
+ case "requestTimeout":
34
+ return 3;
35
+ case "keepAliveTimeoutBuffer":
36
+ return 4;
37
+ default:
38
+ return null;
33
39
  }
34
40
  }
35
41
  /** VOID-result server/socket calls are usable as statements and as concise
@@ -168,7 +174,12 @@ export function voidizedCallback(lowerer, cb, loc) {
168
174
  expr: {
169
175
  kind: "callValue",
170
176
  callee: { kind: "varRef", localId: "f.0", type: fromT, loc },
171
- args: params.map((p) => ({ kind: "varRef", localId: p.localId, type: p.type, loc })),
177
+ args: params.map((p) => ({
178
+ kind: "varRef",
179
+ localId: p.localId,
180
+ type: p.type,
181
+ loc,
182
+ })),
172
183
  type: fromT.ret,
173
184
  loc,
174
185
  },
@@ -182,7 +193,13 @@ export function voidizedCallback(lowerer, cb, loc) {
182
193
  params: [{ localId: "f.0", name: "f", type: fromT }],
183
194
  returnType: toT,
184
195
  locals: [{ id: "f.0", name: "f", type: fromT, mutable: false, boxed: true }],
185
- body: [{ kind: "return", value: { kind: "closure", fnName: impl, captures: ["f.0"], type: toT, loc }, loc }],
196
+ body: [
197
+ {
198
+ kind: "return",
199
+ value: { kind: "closure", fnName: impl, captures: ["f.0"], type: toT, loc },
200
+ loc,
201
+ },
202
+ ],
186
203
  loc,
187
204
  });
188
205
  }
@@ -268,7 +285,11 @@ function isAddressInfoRecord(lowerer, t) {
268
285
  const shape = lowerer.shapes.get(t.shapeId);
269
286
  if (!shape || shape.tuple || shape.indexValue || shape.fields.length !== 3)
270
287
  return false;
271
- const want = [["address", "string"], ["family", "string"], ["port", "f64"]];
288
+ const want = [
289
+ ["address", "string"],
290
+ ["family", "string"],
291
+ ["port", "f64"],
292
+ ];
272
293
  return shape.fields.every((f, i) => f.name === want[i][0] && f.type.kind === want[i][1]);
273
294
  }
274
295
  function coerceToHandle(lowerer, node, want) {
@@ -301,25 +322,74 @@ function h2HeaderRecordStmts(lowerer, shapeId, pairsLocal, outLocal, statusLocal
301
322
  const pairAt = (offset) => ({
302
323
  kind: "arrayGet",
303
324
  arr: varRef(pairsLocal, pairsT, loc),
304
- index: offset === 0 ? varRef("i.0", F64, loc) : { kind: "bin", op: "+", left: varRef("i.0", F64, loc), right: numLit(offset, loc), type: F64, loc },
325
+ index: offset === 0
326
+ ? varRef("i.0", F64, loc)
327
+ : {
328
+ kind: "bin",
329
+ op: "+",
330
+ left: varRef("i.0", F64, loc),
331
+ right: numLit(offset, loc),
332
+ type: F64,
333
+ loc,
334
+ },
305
335
  type: STRING,
306
336
  loc,
307
337
  });
308
338
  const stmts = [
309
- { kind: "varDecl", localId: outLocal, init: { kind: "recordLit", fields: [], type: recT, loc }, loc },
339
+ {
340
+ kind: "varDecl",
341
+ localId: outLocal,
342
+ init: { kind: "recordLit", fields: [], type: recT, loc },
343
+ loc,
344
+ },
310
345
  {
311
346
  kind: "for",
312
347
  init: { kind: "varDecl", localId: "i.0", init: numLit(0, loc), loc },
313
348
  cond: {
314
- kind: "bin", op: "<", left: varRef("i.0", F64, loc),
315
- right: { kind: "arrIntrinsic", method: "length", receiver: varRef(pairsLocal, pairsT, loc), args: [], type: F64, loc },
316
- type: BOOL, loc,
349
+ kind: "bin",
350
+ op: "<",
351
+ left: varRef("i.0", F64, loc),
352
+ right: {
353
+ kind: "arrIntrinsic",
354
+ method: "length",
355
+ receiver: varRef(pairsLocal, pairsT, loc),
356
+ args: [],
357
+ type: F64,
358
+ loc,
359
+ },
360
+ type: BOOL,
361
+ loc,
362
+ },
363
+ update: {
364
+ kind: "assign",
365
+ localId: "i.0",
366
+ value: {
367
+ kind: "bin",
368
+ op: "+",
369
+ left: varRef("i.0", F64, loc),
370
+ right: numLit(2, loc),
371
+ type: F64,
372
+ loc,
373
+ },
374
+ loc,
317
375
  },
318
- update: { kind: "assign", localId: "i.0", value: { kind: "bin", op: "+", left: varRef("i.0", F64, loc), right: numLit(2, loc), type: F64, loc }, loc },
319
- body: [{
320
- kind: "recordKeySet", obj: varRef(outLocal, recT, loc), shapeId, key: pairAt(0),
321
- value: { kind: "unionWrap", unionId: iv.unionId, tag: strTag, value: pairAt(1), type: iv, loc }, loc,
322
- }],
376
+ body: [
377
+ {
378
+ kind: "recordKeySet",
379
+ obj: varRef(outLocal, recT, loc),
380
+ shapeId,
381
+ key: pairAt(0),
382
+ value: {
383
+ kind: "unionWrap",
384
+ unionId: iv.unionId,
385
+ tag: strTag,
386
+ value: pairAt(1),
387
+ type: iv,
388
+ loc,
389
+ },
390
+ loc,
391
+ },
392
+ ],
323
393
  loc,
324
394
  },
325
395
  ];
@@ -328,9 +398,19 @@ function h2HeaderRecordStmts(lowerer, shapeId, pairsLocal, outLocal, statusLocal
328
398
  if (f64Tag < 0)
329
399
  return null;
330
400
  stmts.push({
331
- kind: "recordKeySet", obj: varRef(outLocal, recT, loc), shapeId,
401
+ kind: "recordKeySet",
402
+ obj: varRef(outLocal, recT, loc),
403
+ shapeId,
332
404
  key: { kind: "strLit", value: ":status", type: STRING, loc },
333
- value: { kind: "unionWrap", unionId: iv.unionId, tag: f64Tag, value: varRef(statusLocal, F64, loc), type: iv, loc }, loc,
405
+ value: {
406
+ kind: "unionWrap",
407
+ unionId: iv.unionId,
408
+ tag: f64Tag,
409
+ value: varRef(statusLocal, F64, loc),
410
+ type: iv,
411
+ loc,
412
+ },
413
+ loc,
334
414
  });
335
415
  }
336
416
  return stmts;
@@ -365,7 +445,7 @@ function canonicalHeaderRecord(lowerer) {
365
445
  }
366
446
  function h2HeadersCallbackAdapter(lowerer, node, what, handleKind, withStatus, loc) {
367
447
  let cb = lowerer.lowerExpr(node);
368
- const maxParams = (handleKind ? 1 : 0) + 1 /* headers */ + 1 /* flags */;
448
+ const maxParams = (handleKind ? 1 : 0) + 1 /* headers */ + 1; /* flags */
369
449
  // A checked-dynamic listener (test/common's mustCall wrapper — a dyn
370
450
  // value or an arguments-reading rest function of dyn params): wrap it
371
451
  // in a dynCheck to the CANONICAL event signature, then build the header
@@ -374,7 +454,8 @@ function h2HeadersCallbackAdapter(lowerer, node, what, handleKind, withStatus, l
374
454
  // precedent). The synthesized record IS the shape the adapter builds.
375
455
  const handleT = handleKind === "http2Stream" ? HTTP2STREAM_T : null;
376
456
  const isDynCb = cb.type.kind === "dyn" ||
377
- (cb.type.kind === "func" && (cb.type.rest === true || cb.type.params.every((p) => p.kind === "dyn")) &&
457
+ (cb.type.kind === "func" &&
458
+ (cb.type.rest === true || cb.type.params.every((p) => p.kind === "dyn")) &&
378
459
  canBoxFuncIntoDyn(cb.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)));
379
460
  if (isDynCb) {
380
461
  const rec = canonicalHeaderRecord(lowerer);
@@ -428,8 +509,10 @@ function h2HeadersCallbackAdapter(lowerer, node, what, handleKind, withStatus, l
428
509
  }
429
510
  // Assemble the user-call arguments in the user's declared order.
430
511
  const callArgs = [];
431
- const push = (e) => { if (callArgs.length < fromT.params.length)
432
- callArgs.push(e); };
512
+ const push = (e) => {
513
+ if (callArgs.length < fromT.params.length)
514
+ callArgs.push(e);
515
+ };
433
516
  if (handleT)
434
517
  push(varRef("h.0", handleT, loc));
435
518
  if (recordRef)
@@ -439,14 +522,37 @@ function h2HeadersCallbackAdapter(lowerer, node, what, handleKind, withStatus, l
439
522
  push(varRef("fl.0", F64, loc));
440
523
  body.push({
441
524
  kind: "exprStmt",
442
- expr: { kind: "callValue", callee: varRef("f.0", fromT, loc), args: callArgs.slice(0, fromT.params.length), type: fromT.ret, loc },
525
+ expr: {
526
+ kind: "callValue",
527
+ callee: varRef("f.0", fromT, loc),
528
+ args: callArgs.slice(0, fromT.params.length),
529
+ type: fromT.ret,
530
+ loc,
531
+ },
443
532
  loc,
444
533
  });
445
- lowerer.liftedFns.push({ name: impl, params: abiParams, returnType: VOID, captures: [{ localId: "f.0", name: "f", type: fromT }], locals, body, loc });
446
534
  lowerer.liftedFns.push({
447
- name, params: [{ localId: "f.0", name: "f", type: fromT }], returnType: toT,
535
+ name: impl,
536
+ params: abiParams,
537
+ returnType: VOID,
538
+ captures: [{ localId: "f.0", name: "f", type: fromT }],
539
+ locals,
540
+ body,
541
+ loc,
542
+ });
543
+ lowerer.liftedFns.push({
544
+ name,
545
+ params: [{ localId: "f.0", name: "f", type: fromT }],
546
+ returnType: toT,
448
547
  locals: [{ id: "f.0", name: "f", type: fromT, mutable: false, boxed: true }],
449
- body: [{ kind: "return", value: { kind: "closure", fnName: impl, captures: ["f.0"], type: toT, loc }, loc }], loc,
548
+ body: [
549
+ {
550
+ kind: "return",
551
+ value: { kind: "closure", fnName: impl, captures: ["f.0"], type: toT, loc },
552
+ loc,
553
+ },
554
+ ],
555
+ loc,
450
556
  });
451
557
  }
452
558
  return { kind: "call", callee: name, args: [cb], type: toT, loc };
@@ -552,7 +658,10 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
552
658
  return {
553
659
  kind: "libCall",
554
660
  fn: "net.connectOptsChk",
555
- args: [bag, ladderFenceExpr(lowerer, `${bi.member} with a runtime options record`, expr, "pass the options as an object literal — port, host, autoSelectFamily, autoSelectFamilyAttemptTimeout, and lookup are the supported options")],
661
+ args: [
662
+ bag,
663
+ ladderFenceExpr(lowerer, `${bi.member} with a runtime options record`, expr, "pass the options as an object literal — port, host, autoSelectFamily, autoSelectFamilyAttemptTimeout, and lookup are the supported options"),
664
+ ],
556
665
  type: NETSOCKET_T,
557
666
  loc,
558
667
  };
@@ -642,7 +751,9 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
642
751
  const needsBag = optsNode.properties.some((p) => (!ts.isPropertyAssignment(p) && !ts.isShorthandPropertyAssignment(p)) ||
643
752
  (ts.isPropertyAssignment(p) && ts.isComputedPropertyName(p.name)) ||
644
753
  ["objectMode", "readableObjectMode", "writableObjectMode"].includes((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
645
- (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) ? p.name.text : ""));
754
+ (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))
755
+ ? p.name.text
756
+ : ""));
646
757
  if (needsBag) {
647
758
  const raw = lowerer.lowerExpr(optsNode);
648
759
  if (raw.type.kind === "dyn" || lowerer.dynConvertible(raw.type)) {
@@ -650,7 +761,10 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
650
761
  return {
651
762
  kind: "libCall",
652
763
  fn: "net.connectOptsChk",
653
- args: [bag, ladderFenceExpr(lowerer, `${member} with these options`, optsNode, "port, host, autoSelectFamily, autoSelectFamilyAttemptTimeout, and lookup are the supported options")],
764
+ args: [
765
+ bag,
766
+ ladderFenceExpr(lowerer, `${member} with these options`, optsNode, "port, host, autoSelectFamily, autoSelectFamilyAttemptTimeout, and lookup are the supported options"),
767
+ ],
654
768
  type: NETSOCKET_T,
655
769
  loc,
656
770
  };
@@ -717,7 +831,8 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
717
831
  // A provably-non-boolean value throws Node's validateBoolean
718
832
  // ladder instead of fencing.
719
833
  const raw = initializer !== null && isJs ? lowerer.lowerExpr(initializer) : null;
720
- if (raw !== null && raw.type.kind !== "bool" &&
834
+ if (raw !== null &&
835
+ raw.type.kind !== "bool" &&
721
836
  (raw.type.kind === "dyn" || lowerer.dynConvertible(raw.type))) {
722
837
  optionThrow ??= propThrow("options.autoSelectFamily", "of type boolean", raw);
723
838
  continue;
@@ -762,7 +877,13 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
762
877
  if (lookup !== null || args.length !== 1) {
763
878
  lowerer.noLowering(`${member} with an autoSelectFamilyAttemptTimeout beside a lookup or connect listener`, expr, "the validated-budget form is the bare options call — register listeners separately");
764
879
  }
765
- return { kind: "libCall", fn: "net.connectAttempt", args: [port, host, attempt], type: NETSOCKET_T, loc };
880
+ return {
881
+ kind: "libCall",
882
+ fn: "net.connectAttempt",
883
+ args: [port, host, attempt],
884
+ type: NETSOCKET_T,
885
+ loc,
886
+ };
766
887
  }
767
888
  if (lookup !== null) {
768
889
  if (!autoSelect) {
@@ -771,7 +892,13 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
771
892
  if (args.length !== 1) {
772
893
  lowerer.noLowering(`${member} with a lookup and a connect listener`, expr, "register the listener separately: socket.once('connect', ...)");
773
894
  }
774
- return { kind: "libCall", fn: "net.connectLookup", args: [port, host, lookup], type: NETSOCKET_T, loc };
895
+ return {
896
+ kind: "libCall",
897
+ fn: "net.connectLookup",
898
+ args: [port, host, lookup],
899
+ type: NETSOCKET_T,
900
+ loc,
901
+ };
775
902
  }
776
903
  if (args.length === 1) {
777
904
  return { kind: "libCall", fn: "net.connect", args: [port, host], type: NETSOCKET_T, loc };
@@ -849,7 +976,8 @@ export function lowerServerCloseOverrideAssignment(lowerer, left, right, loc) {
849
976
  const t = value.type;
850
977
  const cbUnion = t.kind === "func" && t.params.length === 1 ? t.params[0] : null;
851
978
  const shapeOk = cbUnion?.kind === "union" &&
852
- (t.kind === "func" && (t.ret.kind === "netServer" || t.ret.kind === "void")) &&
979
+ t.kind === "func" &&
980
+ (t.ret.kind === "netServer" || t.ret.kind === "void") &&
853
981
  (() => {
854
982
  const def = lowerer.unions.get(cbUnion.unionId);
855
983
  return (!!def &&
@@ -861,7 +989,13 @@ export function lowerServerCloseOverrideAssignment(lowerer, left, right, loc) {
861
989
  }
862
990
  return {
863
991
  kind: "exprStmt",
864
- expr: { kind: "libCall", fn: "net.serverSetCloseOverride", args: [server, value], type: VOID, loc },
992
+ expr: {
993
+ kind: "libCall",
994
+ fn: "net.serverSetCloseOverride",
995
+ args: [server, value],
996
+ type: VOID,
997
+ loc,
998
+ },
865
999
  loc,
866
1000
  };
867
1001
  }
@@ -871,8 +1005,10 @@ export function lowerHttpResPropertyAssignment(lowerer, left, right, loc) {
871
1005
  if (!ts.isPropertyAccessExpression(left) || left.questionDotToken)
872
1006
  return null;
873
1007
  const name = left.name.text;
874
- if (name !== "statusCode" && name !== "statusMessage" &&
875
- name !== "sendDate" && name !== "strictContentLength")
1008
+ if (name !== "statusCode" &&
1009
+ name !== "statusMessage" &&
1010
+ name !== "sendDate" &&
1011
+ name !== "strictContentLength")
876
1012
  return null;
877
1013
  if (lowerer.mapTypeOf(lowerer.typeOf(left.expression))?.kind !== "httpRes")
878
1014
  return null;
@@ -882,9 +1018,13 @@ export function lowerHttpResPropertyAssignment(lowerer, left, right, loc) {
882
1018
  const value = name === "statusCode"
883
1019
  ? lowerer.lowerExprExpecting(right, F64)
884
1020
  : lowerer.lowerExprExpecting(right, name === "statusMessage" ? STRING : BOOL);
885
- const fn = name === "statusCode" ? "http.resStatusSet"
886
- : name === "statusMessage" ? "http.resStatusMsgSet"
887
- : name === "sendDate" ? "http.resSendDateSet" : "http.resStrictContentLengthSet";
1021
+ const fn = name === "statusCode"
1022
+ ? "http.resStatusSet"
1023
+ : name === "statusMessage"
1024
+ ? "http.resStatusMsgSet"
1025
+ : name === "sendDate"
1026
+ ? "http.resSendDateSet"
1027
+ : "http.resStrictContentLengthSet";
888
1028
  return {
889
1029
  kind: "exprStmt",
890
1030
  expr: { kind: "libCall", fn, args: [receiver, value], type: VOID, loc },
@@ -910,7 +1050,13 @@ export function lowerHttpServerTimeoutAssignment(lowerer, left, right, loc) {
910
1050
  const value = lowerer.lowerExprExpecting(right, F64);
911
1051
  return {
912
1052
  kind: "exprStmt",
913
- expr: { kind: "libCall", fn: "http.serverTimeoutSet", args: [receiver, selector, value], type: VOID, loc },
1053
+ expr: {
1054
+ kind: "libCall",
1055
+ fn: "http.serverTimeoutSet",
1056
+ args: [receiver, selector, value],
1057
+ type: VOID,
1058
+ loc,
1059
+ },
914
1060
  loc,
915
1061
  };
916
1062
  }
@@ -944,7 +1090,9 @@ function lowerNetServerMethodCall(lowerer, call, access) {
944
1090
  if (args.length !== 0)
945
1091
  lowerer.noLowering(`server.${name} arguments`, call, `${name}() takes no arguments`);
946
1092
  const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
947
- const fn = name === "closeAllConnections" ? "http.serverCloseAllConnections" : "http.serverCloseIdleConnections";
1093
+ const fn = name === "closeAllConnections"
1094
+ ? "http.serverCloseAllConnections"
1095
+ : "http.serverCloseIdleConnections";
948
1096
  return { kind: "libCall", fn, args: [receiver], type: VOID, loc };
949
1097
  }
950
1098
  if (name === "listen") {
@@ -990,24 +1138,27 @@ function lowerNetServerMethodCall(lowerer, call, access) {
990
1138
  }
991
1139
  const key = prop.name.text;
992
1140
  if (key === "port") {
993
- port = initializer !== null
994
- ? lowerer.lowerExpr(initializer)
995
- : lowerer.lowerShorthandValue(prop);
1141
+ port =
1142
+ initializer !== null
1143
+ ? lowerer.lowerExpr(initializer)
1144
+ : lowerer.lowerShorthandValue(prop);
996
1145
  if (port.type.kind !== "f64") {
997
1146
  lowerer.noLowering(`a listen 'port' option of '${lowerer.fmt(port.type)}' values`, prop, "the port is a number here");
998
1147
  }
999
1148
  }
1000
1149
  else if (key === "host") {
1001
- host = initializer !== null
1002
- ? lowerer.lowerExpr(initializer)
1003
- : lowerer.lowerShorthandValue(prop);
1150
+ host =
1151
+ initializer !== null
1152
+ ? lowerer.lowerExpr(initializer)
1153
+ : lowerer.lowerShorthandValue(prop);
1004
1154
  if (host.type.kind !== "string") {
1005
1155
  lowerer.noLowering(`a listen 'host' option of '${lowerer.fmt(host.type)}' values`, prop, "the host is an IP string here");
1006
1156
  }
1007
1157
  }
1008
1158
  else if (key === "ipv6Only") {
1009
1159
  if (initializer !== null) {
1010
- v6only = lowerer.lowerCondition(initializer); /* truthiness: `boolean | undefined` flows */
1160
+ v6only =
1161
+ lowerer.lowerCondition(initializer); /* truthiness: `boolean | undefined` flows */
1011
1162
  }
1012
1163
  else {
1013
1164
  const v = lowerer.lowerShorthandValue(prop);
@@ -1029,15 +1180,19 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1029
1180
  reusePort = v;
1030
1181
  }
1031
1182
  }
1032
- else if (key === "signal" && ts.isPropertyAssignment(prop) &&
1183
+ else if (key === "signal" &&
1184
+ ts.isPropertyAssignment(prop) &&
1033
1185
  isJsSourceFile(call.getSourceFile())) {
1034
1186
  // A provably-non-AbortSignal signal (the invalid-input probes:
1035
1187
  // strings, numbers, plain records) throws Node's
1036
1188
  // validateAbortSignal ladder; plausible signal values keep the
1037
1189
  // fence — abort-driven close has no lowering yet.
1038
1190
  const raw = lowerer.lowerExpr(prop.initializer);
1039
- const provablyNot = raw.type.kind === "string" || raw.type.kind === "f64" ||
1040
- raw.type.kind === "bool" || raw.type.kind === "record" || raw.type.kind === "array";
1191
+ const provablyNot = raw.type.kind === "string" ||
1192
+ raw.type.kind === "f64" ||
1193
+ raw.type.kind === "bool" ||
1194
+ raw.type.kind === "record" ||
1195
+ raw.type.kind === "array";
1041
1196
  if (provablyNot && lowerer.dynConvertible(raw.type)) {
1042
1197
  return {
1043
1198
  kind: "libCall",
@@ -1060,7 +1215,12 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1060
1215
  if (port === null) {
1061
1216
  lowerer.noLowering("listen options without a port", args[0], "the supported options object is { port, host?, ipv6Only?, reusePort? } — port 0 binds an ephemeral port");
1062
1217
  }
1063
- host ??= { kind: "strLit", value: "", type: STRING, loc }; /* "" = the dual-stack any default */
1218
+ host ??= {
1219
+ kind: "strLit",
1220
+ value: "",
1221
+ type: STRING,
1222
+ loc,
1223
+ }; /* "" = the dual-stack any default */
1064
1224
  v6only ??= boolLit(false, loc);
1065
1225
  const listenOptsFn = reusePort === null ? "net.listenOpts" : "net.listenOptsReusePort";
1066
1226
  const listenOptsCbFn = reusePort === null ? "net.listenOptsCb" : "net.listenOptsReusePortCb";
@@ -1157,22 +1317,46 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1157
1317
  }
1158
1318
  if (event === "error") {
1159
1319
  const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
1160
- return { kind: "libCall", fn: "net.serverOnError", args: [receiver, cb, once], type: VOID, loc };
1320
+ return {
1321
+ kind: "libCall",
1322
+ fn: "net.serverOnError",
1323
+ args: [receiver, cb, once],
1324
+ type: VOID,
1325
+ loc,
1326
+ };
1161
1327
  }
1162
1328
  if (event === "close") {
1163
1329
  const { cb } = lowerCallbackArg(lowerer, args[1], "close listeners", 0, () => false, "use ()", []);
1164
- return { kind: "libCall", fn: "net.serverOnClose", args: [receiver, cb, once], type: VOID, loc };
1330
+ return {
1331
+ kind: "libCall",
1332
+ fn: "net.serverOnClose",
1333
+ args: [receiver, cb, once],
1334
+ type: VOID,
1335
+ loc,
1336
+ };
1165
1337
  }
1166
1338
  if (event === "timeout") {
1167
1339
  const { cb } = lowerCallbackArg(lowerer, args[1], "timeout listeners", 1, (p) => p.kind === "netSocket", "use (socket) or ()", [NETSOCKET_T]);
1168
- return { kind: "libCall", fn: "http.serverOnTimeout", args: [receiver, cb, once], type: VOID, loc };
1340
+ return {
1341
+ kind: "libCall",
1342
+ fn: "http.serverOnTimeout",
1343
+ args: [receiver, cb, once],
1344
+ type: VOID,
1345
+ loc,
1346
+ };
1169
1347
  }
1170
1348
  if (event === "listening") {
1171
1349
  // The deferred bind emit — listen(port, cb)'s event twin: fires
1172
1350
  // once after a successful listen; late registrations on an
1173
1351
  // already-listening server never fire (Node's once-per-listen).
1174
1352
  const { cb } = lowerCallbackArg(lowerer, args[1], "listening listeners", 0, () => false, "use ()", []);
1175
- return { kind: "libCall", fn: "net.serverOnListening", args: [receiver, cb, once], type: VOID, loc };
1353
+ return {
1354
+ kind: "libCall",
1355
+ fn: "net.serverOnListening",
1356
+ args: [receiver, cb, once],
1357
+ type: VOID,
1358
+ loc,
1359
+ };
1176
1360
  }
1177
1361
  if (event === "request") {
1178
1362
  // The 'request' event — http.createServer(handler)'s event twin, and
@@ -1181,20 +1365,38 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1181
1365
  // server with no HTTP parser (net.createServer) the registration is
1182
1366
  // Node-honest dead weight: the event never fires there either.
1183
1367
  const cb = lowerRequestHandlerArg(lowerer, args[1]);
1184
- return { kind: "libCall", fn: "http.serverOnRequest", args: [receiver, cb, once], type: VOID, loc };
1368
+ return {
1369
+ kind: "libCall",
1370
+ fn: "http.serverOnRequest",
1371
+ args: [receiver, cb, once],
1372
+ type: VOID,
1373
+ loc,
1374
+ };
1185
1375
  }
1186
1376
  if (event === "stream") {
1187
1377
  // The h2c server's request event: (stream, headers, flags). The
1188
1378
  // adapter builds the headers record from the pairs the runtime
1189
1379
  // hands over. Dead weight on a non-h2 server (never fires).
1190
1380
  const cb = h2HeadersCallbackAdapter(lowerer, args[1], "stream listeners", "http2Stream", false, loc);
1191
- return { kind: "libCall", fn: "http2.serverOnStream", args: [receiver, cb, once], type: VOID, loc };
1381
+ return {
1382
+ kind: "libCall",
1383
+ fn: "http2.serverOnStream",
1384
+ args: [receiver, cb, once],
1385
+ type: VOID,
1386
+ loc,
1387
+ };
1192
1388
  }
1193
1389
  if (event === "session") {
1194
1390
  // The h2c server's per-connection session event: (session). The
1195
1391
  // result is voidized; the handle passes by reference.
1196
1392
  const { cb } = lowerCallbackArg(lowerer, args[1], "session listeners", 1, (p) => p.kind === "http2Session", "use (session) or ()", [HTTP2SESSION_T]);
1197
- return { kind: "libCall", fn: "http2.serverOnSession", args: [receiver, cb, once], type: VOID, loc };
1393
+ return {
1394
+ kind: "libCall",
1395
+ fn: "http2.serverOnSession",
1396
+ args: [receiver, cb, once],
1397
+ type: VOID,
1398
+ loc,
1399
+ };
1198
1400
  }
1199
1401
  if (event === "connect") {
1200
1402
  // HTTP CONNECT — the tunneling handover: (req, socket, head), fired
@@ -1225,7 +1427,13 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1225
1427
  (p2 !== undefined && !(p2.kind === "bytes" && p2.elem === "u8"))) {
1226
1428
  lowerer.unsupported("SC1090", args[1], "connect listeners whose parameters are not (req: IncomingMessage, socket: Socket — or a union carrying the Socket arm, the h2 compat shape, head: Buffer)");
1227
1429
  }
1228
- return { kind: "libCall", fn: "http.serverOnConnect", args: [receiver, cb, once], type: VOID, loc };
1430
+ return {
1431
+ kind: "libCall",
1432
+ fn: "http.serverOnConnect",
1433
+ args: [receiver, cb, once],
1434
+ type: VOID,
1435
+ loc,
1436
+ };
1229
1437
  }
1230
1438
  if (event === "upgrade") {
1231
1439
  // The WebSocket handover: (req, socket, head) — Node fires it
@@ -1246,7 +1454,13 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1246
1454
  (p2 !== undefined && !(p2.kind === "bytes" && p2.elem === "u8"))) {
1247
1455
  lowerer.unsupported("SC1090", args[1], "upgrade listeners whose parameters are not (req: IncomingMessage, socket: Socket, head: Buffer)");
1248
1456
  }
1249
- return { kind: "libCall", fn: "http.serverOnUpgrade", args: [receiver, cb, once], type: VOID, loc };
1457
+ return {
1458
+ kind: "libCall",
1459
+ fn: "http.serverOnUpgrade",
1460
+ args: [receiver, cb, once],
1461
+ type: VOID,
1462
+ loc,
1463
+ };
1250
1464
  }
1251
1465
  if (event === "sessionError") {
1252
1466
  const cb = lowerer.lowerExpr(args[1]);
@@ -1258,7 +1472,13 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1258
1472
  (session !== undefined && session.kind !== "http2Session")) {
1259
1473
  lowerer.unsupported("SC1090", args[1], "sessionError listeners whose parameters are not (error: Error, session: ServerHttp2Session)");
1260
1474
  }
1261
- return { kind: "libCall", fn: "http2.serverOnSessionError", args: [receiver, cb, once], type: VOID, loc };
1475
+ return {
1476
+ kind: "libCall",
1477
+ fn: "http2.serverOnSessionError",
1478
+ args: [receiver, cb, once],
1479
+ type: VOID,
1480
+ loc,
1481
+ };
1262
1482
  }
1263
1483
  lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"connection", "request", "stream", "session", "upgrade", "connect", "error", "close", "listening", and "sessionError" are the supported server events (as literals)');
1264
1484
  }
@@ -1278,7 +1498,13 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1278
1498
  if (sock.type.kind !== "netSocket") {
1279
1499
  lowerer.noLowering(`emit("connection", …) with a '${lowerer.fmt(sock.type)}' argument`, args[1], "the second argument must be a net socket");
1280
1500
  }
1281
- return { kind: "libCall", fn: "net.serverEmitConnection", args: [receiver, sock], type: VOID, loc };
1501
+ return {
1502
+ kind: "libCall",
1503
+ fn: "net.serverEmitConnection",
1504
+ args: [receiver, sock],
1505
+ type: VOID,
1506
+ loc,
1507
+ };
1282
1508
  }
1283
1509
  if (name === "address") {
1284
1510
  // The full AddressInfo record (the dgram.address materialization).
@@ -1295,7 +1521,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1295
1521
  const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
1296
1522
  return { kind: "libCall", fn: "net.serverAddress", args: [receiver], type: result, loc };
1297
1523
  }
1298
- 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));
1524
+ 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));
1299
1525
  }
1300
1526
  /** Method calls on net.Socket receivers: write/end/destroy/pipe and
1301
1527
  * on/once("data" | "end" | "close" | "error" | "connect"). Null for
@@ -1320,7 +1546,8 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1320
1546
  const encT = lowerer.typeOf(args[1]);
1321
1547
  const chunkT = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
1322
1548
  if (encT.isStringLiteralType() && chunkT !== null) {
1323
- if (encT.value === "buffer" && chunkT.kind === "string" &&
1549
+ if (encT.value === "buffer" &&
1550
+ chunkT.kind === "string" &&
1324
1551
  isJsSourceFile(call.getSourceFile())) {
1325
1552
  lowerer.lowerExpr(args[0]); // evaluation order (effect-free in practice)
1326
1553
  return nodeThrowExpr(1, "ERR_INVALID_ARG_TYPE", "Second argument must be a buffer", VOID, loc);
@@ -1409,10 +1636,14 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1409
1636
  lowerer.noLowering(`setNoDelay with ${args.length} arguments`, call, "the form is setNoDelay(noDelay?)");
1410
1637
  }
1411
1638
  const receiver = coerceToHandle(lowerer, access.expression, NETSOCKET_T);
1412
- const enable = args.length === 1
1413
- ? lowerer.lowerExprExpecting(args[0], BOOL)
1414
- : boolLit(true, loc);
1415
- return { kind: "libCall", fn: "net.sockSetNoDelay", args: [receiver, enable], type: NETSOCKET_T, loc };
1639
+ const enable = args.length === 1 ? lowerer.lowerExprExpecting(args[0], BOOL) : boolLit(true, loc);
1640
+ return {
1641
+ kind: "libCall",
1642
+ fn: "net.sockSetNoDelay",
1643
+ args: [receiver, enable],
1644
+ type: NETSOCKET_T,
1645
+ loc,
1646
+ };
1416
1647
  }
1417
1648
  if (name === "destroySoon") {
1418
1649
  // end() now, destroy once the FIN actually flushed — Node's
@@ -1479,15 +1710,28 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1479
1710
  }
1480
1711
  if (event === "error") {
1481
1712
  const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
1482
- return { kind: "libCall", fn: "net.sockOnError", args: [receiver, cb, once], type: VOID, loc };
1713
+ return {
1714
+ kind: "libCall",
1715
+ fn: "net.sockOnError",
1716
+ args: [receiver, cb, once],
1717
+ type: VOID,
1718
+ loc,
1719
+ };
1483
1720
  }
1484
- if (event === "end" || event === "close" || event === "connect" || event === "timeout" ||
1721
+ if (event === "end" ||
1722
+ event === "close" ||
1723
+ event === "connect" ||
1724
+ event === "timeout" ||
1485
1725
  event === "readable") {
1486
1726
  const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use ()", []);
1487
- const fn = event === "end" ? "net.sockOnEnd"
1488
- : event === "close" ? "net.sockOnClose"
1489
- : event === "timeout" ? "net.sockOnTimeout"
1490
- : event === "readable" ? "net.sockOnReadable"
1727
+ const fn = event === "end"
1728
+ ? "net.sockOnEnd"
1729
+ : event === "close"
1730
+ ? "net.sockOnClose"
1731
+ : event === "timeout"
1732
+ ? "net.sockOnTimeout"
1733
+ : event === "readable"
1734
+ ? "net.sockOnReadable"
1491
1735
  : "net.sockOnConnect";
1492
1736
  return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
1493
1737
  }
@@ -1503,13 +1747,25 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
1503
1747
  // transport pump); the runtime gates on the transport so a plain
1504
1748
  // socket's registration never fires — Node's exact split.
1505
1749
  const { cb } = lowerCallbackArg(lowerer, args[1], "secureConnect listeners", 0, () => false, "use ()", []);
1506
- return { kind: "libCall", fn: "tls.sockOnSecureConnect", args: [receiver, cb, once], type: VOID, loc };
1750
+ return {
1751
+ kind: "libCall",
1752
+ fn: "tls.sockOnSecureConnect",
1753
+ args: [receiver, cb, once],
1754
+ type: VOID,
1755
+ loc,
1756
+ };
1507
1757
  }
1508
1758
  if (event === "session") {
1509
1759
  // The received-ticket event: fires once per TLS client socket with
1510
1760
  // the serialized session (a Buffer); plain sockets never fire it.
1511
1761
  const { cb } = lowerCallbackArg(lowerer, args[1], "session listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (session: Buffer) or ()", [DYN]);
1512
- return { kind: "libCall", fn: "tls.sockOnSession", args: [receiver, cb, once], type: VOID, loc };
1762
+ return {
1763
+ kind: "libCall",
1764
+ fn: "tls.sockOnSession",
1765
+ args: [receiver, cb, once],
1766
+ type: VOID,
1767
+ loc,
1768
+ };
1513
1769
  }
1514
1770
  lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "timeout", "readable", "secureConnect", and "session" are the supported socket events (as literals)');
1515
1771
  }
@@ -1603,13 +1859,27 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
1603
1859
  const receiver = () => coerceToHandle(lowerer, access.expression, HTTP2SESSION_T);
1604
1860
  if (name === "request") {
1605
1861
  const pairs = args.length >= 1 && !ts.isObjectLiteralExpression(args[0]) === false && args.length >= 1
1606
- ? null : null;
1862
+ ? null
1863
+ : null;
1607
1864
  void pairs;
1608
1865
  // arg0: headers (optional), arg1: options (optional).
1609
- const headersArg = args.length >= 1 ? lowerH2HeadersArg(lowerer, args[0]) : { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
1866
+ const headersArg = args.length >= 1
1867
+ ? lowerH2HeadersArg(lowerer, args[0])
1868
+ : { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
1610
1869
  const end = h2EndStreamOption(lowerer, args[1]);
1611
- const endF64 = { kind: "numLit", value: end === undefined ? -1 : end ? 1 : 0, type: F64, loc };
1612
- return { kind: "libCall", fn: "http2.sessionRequest", args: [receiver(), headersArg, endF64], type: HTTP2STREAM_T, loc };
1870
+ const endF64 = {
1871
+ kind: "numLit",
1872
+ value: end === undefined ? -1 : end ? 1 : 0,
1873
+ type: F64,
1874
+ loc,
1875
+ };
1876
+ return {
1877
+ kind: "libCall",
1878
+ fn: "http2.sessionRequest",
1879
+ args: [receiver(), headersArg, endF64],
1880
+ type: HTTP2STREAM_T,
1881
+ loc,
1882
+ };
1613
1883
  }
1614
1884
  if (name === "close") {
1615
1885
  requireStatementPosition(lowerer, call, "session.close(...)");
@@ -1639,12 +1909,30 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
1639
1909
  if (cbV.type.kind === "dyn") {
1640
1910
  // The dyn callback keeps Node's exact (err, settings, duration)
1641
1911
  // shape — the runtime fires it through the checked-dynamic tree.
1642
- return { kind: "libCall", fn: "http2.sessionSettingsDynCb", args: [receiver(), settingsArg, cbV], type: VOID, loc };
1912
+ return {
1913
+ kind: "libCall",
1914
+ fn: "http2.sessionSettingsDynCb",
1915
+ args: [receiver(), settingsArg, cbV],
1916
+ type: VOID,
1917
+ loc,
1918
+ };
1643
1919
  }
1644
1920
  const { cb } = lowerCallbackArg(lowerer, args[1], "settings callbacks", 0, () => false, "use () — or a dynamic (mustCall-wrapped) callback for the (err, settings, duration) shape", []);
1645
- return { kind: "libCall", fn: "http2.sessionSettingsCb0", args: [receiver(), settingsArg, cb], type: VOID, loc };
1921
+ return {
1922
+ kind: "libCall",
1923
+ fn: "http2.sessionSettingsCb0",
1924
+ args: [receiver(), settingsArg, cb],
1925
+ type: VOID,
1926
+ loc,
1927
+ };
1646
1928
  }
1647
- return { kind: "libCall", fn: "http2.sessionSettings", args: [receiver(), settingsArg], type: VOID, loc };
1929
+ return {
1930
+ kind: "libCall",
1931
+ fn: "http2.sessionSettings",
1932
+ args: [receiver(), settingsArg],
1933
+ type: VOID,
1934
+ loc,
1935
+ };
1648
1936
  }
1649
1937
  if ((name === "on" || name === "once" || name === "addListener") && args.length === 2) {
1650
1938
  requireStatementPosition(lowerer, call, `session.${name}(...)`);
@@ -1658,26 +1946,62 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
1658
1946
  const local = boolLit(event === "localSettings", loc);
1659
1947
  const cbV = lowerer.lowerExpr(args[1]);
1660
1948
  if (cbV.type.kind === "dyn") {
1661
- return { kind: "libCall", fn: "http2.sessionOnSettingsDyn", args: [receiver(), cbV, once, local], type: VOID, loc };
1949
+ return {
1950
+ kind: "libCall",
1951
+ fn: "http2.sessionOnSettingsDyn",
1952
+ args: [receiver(), cbV, once, local],
1953
+ type: VOID,
1954
+ loc,
1955
+ };
1662
1956
  }
1663
1957
  const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use () — or a dynamic (mustCall-wrapped) listener for the (settings) payload", []);
1664
- return { kind: "libCall", fn: "http2.sessionOnSettings0", args: [receiver(), cb, once, local], type: VOID, loc };
1958
+ return {
1959
+ kind: "libCall",
1960
+ fn: "http2.sessionOnSettings0",
1961
+ args: [receiver(), cb, once, local],
1962
+ type: VOID,
1963
+ loc,
1964
+ };
1665
1965
  }
1666
1966
  if (event === "close") {
1667
1967
  const { cb } = lowerCallbackArg(lowerer, args[1], "close listeners", 0, () => false, "use ()", []);
1668
- return { kind: "libCall", fn: "http2.sessionOnClose", args: [receiver(), cb, once], type: VOID, loc };
1968
+ return {
1969
+ kind: "libCall",
1970
+ fn: "http2.sessionOnClose",
1971
+ args: [receiver(), cb, once],
1972
+ type: VOID,
1973
+ loc,
1974
+ };
1669
1975
  }
1670
1976
  if (event === "error") {
1671
1977
  const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
1672
- return { kind: "libCall", fn: "http2.sessionOnError", args: [receiver(), cb, once], type: VOID, loc };
1978
+ return {
1979
+ kind: "libCall",
1980
+ fn: "http2.sessionOnError",
1981
+ args: [receiver(), cb, once],
1982
+ type: VOID,
1983
+ loc,
1984
+ };
1673
1985
  }
1674
1986
  if (event === "connect") {
1675
1987
  const { cb } = lowerCallbackArg(lowerer, args[1], "connect listeners", 2, (p) => p.kind === "http2Session" || p.kind === "netSocket", "use (session, socket) or ()", [HTTP2SESSION_T, NETSOCKET_T]);
1676
- return { kind: "libCall", fn: "http2.sessionOnConnect", args: [receiver(), cb, once], type: VOID, loc };
1988
+ return {
1989
+ kind: "libCall",
1990
+ fn: "http2.sessionOnConnect",
1991
+ args: [receiver(), cb, once],
1992
+ type: VOID,
1993
+ loc,
1994
+ };
1677
1995
  }
1678
1996
  if (event === "stream") {
1679
1997
  const cb = h2HeadersCallbackAdapter(lowerer, args[1], "stream listeners", "http2Stream", false, loc);
1680
- return { kind: "libCall", fn: "http2.sessionOnStream", args: [receiver(), cb, once], type: VOID, loc };
1998
+ return {
1999
+ kind: "libCall",
2000
+ fn: "http2.sessionOnStream",
2001
+ args: [receiver(), cb, once],
2002
+ type: VOID,
2003
+ loc,
2004
+ };
1681
2005
  }
1682
2006
  if (event === "goaway") {
1683
2007
  const cb = lowerer.lowerExpr(args[1]);
@@ -1687,18 +2011,25 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
1687
2011
  if (cb.type.params.some((p) => p.kind !== "f64" && p.kind !== "bytes")) {
1688
2012
  lowerer.unsupported("SC1090", args[1], "goaway listeners whose parameters are not (errorCode, lastStreamID, opaqueData?)");
1689
2013
  }
1690
- return { kind: "libCall", fn: "http2.sessionOnGoaway", args: [receiver(), voidizedCallback(lowerer, cb, loc), once], type: VOID, loc };
2014
+ return {
2015
+ kind: "libCall",
2016
+ fn: "http2.sessionOnGoaway",
2017
+ args: [receiver(), voidizedCallback(lowerer, cb, loc), once],
2018
+ type: VOID,
2019
+ loc,
2020
+ };
1691
2021
  }
1692
2022
  lowerer.noLowering(`session.${name}("${event ?? "?"}", ...)`, args[0], '"close", "error", "connect", "stream", and "goaway" are the supported session events');
1693
2023
  }
1694
- lowerer.noLowering(`session.${name}`, call, "close/destroy/request and on(\"close\"|\"error\"|\"connect\"|\"stream\"|\"goaway\") are the lowered session members");
2024
+ lowerer.noLowering(`session.${name}`, call, 'close/destroy/request and on("close"|"error"|"connect"|"stream"|"goaway") are the lowered session members');
1695
2025
  }
1696
2026
  /** Method calls on ClientHttp2Stream / ServerHttp2Stream receivers. */
1697
2027
  function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
1698
2028
  const compatReqStream = ts.isPropertyAccessExpression(access.expression) &&
1699
2029
  access.expression.name.text === "stream" &&
1700
2030
  lowerer.mapTypeOf(lowerer.typeOf(access.expression.expression))?.kind === "httpReq";
1701
- if (lowerer.mapTypeOf(lowerer.typeOf(access.expression))?.kind !== "http2Stream" && !compatReqStream)
2031
+ if (lowerer.mapTypeOf(lowerer.typeOf(access.expression))?.kind !== "http2Stream" &&
2032
+ !compatReqStream)
1702
2033
  return null;
1703
2034
  if (!lowerer.isStdlibMember(access) && !compatReqStream)
1704
2035
  return null;
@@ -1712,7 +2043,13 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
1712
2043
  ? lowerH2HeadersArg(lowerer, args[0])
1713
2044
  : { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
1714
2045
  const end = h2EndStreamOption(lowerer, args[1]);
1715
- return { kind: "libCall", fn: "http2.streamRespond", args: [receiver(), headersArg, boolLit(end ?? false, loc)], type: VOID, loc };
2046
+ return {
2047
+ kind: "libCall",
2048
+ fn: "http2.streamRespond",
2049
+ args: [receiver(), headersArg, boolLit(end ?? false, loc)],
2050
+ type: VOID,
2051
+ loc,
2052
+ };
1716
2053
  }
1717
2054
  if (name === "write" || name === "end") {
1718
2055
  requireStatementPosition(lowerer, call, `stream.${name}(...)`);
@@ -1734,8 +2071,12 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
1734
2071
  lowerer.noLowering(`${name} with '${lowerer.fmt(data.type)}' data`, args[0], "the chunk is a string or a Uint8Array here");
1735
2072
  }
1736
2073
  const fn = name === "write"
1737
- ? (isBytes ? "http2.streamWriteBytes" : "http2.streamWrite")
1738
- : (isBytes ? "http2.streamEndBytes" : "http2.streamEndStr");
2074
+ ? isBytes
2075
+ ? "http2.streamWriteBytes"
2076
+ : "http2.streamWrite"
2077
+ : isBytes
2078
+ ? "http2.streamEndBytes"
2079
+ : "http2.streamEndStr";
1739
2080
  return { kind: "libCall", fn, args: [receiver(), data], type: VOID, loc };
1740
2081
  }
1741
2082
  if (name === "close") {
@@ -1746,7 +2087,13 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
1746
2087
  }
1747
2088
  if (args.length >= 2) {
1748
2089
  const { cb } = lowerCallbackArg(lowerer, args[1], "close callbacks", 0, () => false, "use ()", []);
1749
- return { kind: "libCall", fn: "http2.streamCloseCb", args: [receiver(), code, cb], type: VOID, loc };
2090
+ return {
2091
+ kind: "libCall",
2092
+ fn: "http2.streamCloseCb",
2093
+ args: [receiver(), code, cb],
2094
+ type: VOID,
2095
+ loc,
2096
+ };
1750
2097
  }
1751
2098
  return { kind: "libCall", fn: "http2.streamClose", args: [receiver(), code], type: VOID, loc };
1752
2099
  }
@@ -1757,17 +2104,35 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
1757
2104
  if (name === "setEncoding") {
1758
2105
  const enc = lowerer.lowerExpr(args[0]);
1759
2106
  if (enc.type.kind !== "string")
1760
- lowerer.noLowering("setEncoding with a non-string encoding", args[0], "pass \"utf8\"");
2107
+ lowerer.noLowering("setEncoding with a non-string encoding", args[0], 'pass "utf8"');
1761
2108
  if (ts.isExpressionStatement(call.parent) || ts.isArrowFunction(call.parent)) {
1762
- return { kind: "libCall", fn: "http2.streamSetEncoding", args: [receiver(), enc], type: VOID, loc };
2109
+ return {
2110
+ kind: "libCall",
2111
+ fn: "http2.streamSetEncoding",
2112
+ args: [receiver(), enc],
2113
+ type: VOID,
2114
+ loc,
2115
+ };
1763
2116
  }
1764
2117
  // The chaining spelling (`client.request(h).setEncoding("utf8")`):
1765
2118
  // same write, the result is the receiver — Node's return-this.
1766
- return { kind: "libCall", fn: "http2.streamSetEncodingRet", args: [receiver(), enc], type: HTTP2STREAM_T, loc };
2119
+ return {
2120
+ kind: "libCall",
2121
+ fn: "http2.streamSetEncodingRet",
2122
+ args: [receiver(), enc],
2123
+ type: HTTP2STREAM_T,
2124
+ loc,
2125
+ };
1767
2126
  }
1768
2127
  if (name === "resume" || name === "pause") {
1769
2128
  requireStatementPosition(lowerer, call, `stream.${name}(...)`);
1770
- return { kind: "libCall", fn: name === "resume" ? "http2.streamResume" : "http2.streamPause", args: [receiver()], type: VOID, loc };
2129
+ return {
2130
+ kind: "libCall",
2131
+ fn: name === "resume" ? "http2.streamResume" : "http2.streamPause",
2132
+ args: [receiver()],
2133
+ type: VOID,
2134
+ loc,
2135
+ };
1771
2136
  }
1772
2137
  if ((name === "on" || name === "once" || name === "addListener") && args.length === 2) {
1773
2138
  requireStatementPosition(lowerer, call, `stream.${name}(...)`);
@@ -1776,20 +2141,42 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
1776
2141
  const event = evT.isStringLiteralType() ? evT.value : null;
1777
2142
  if (event === "data") {
1778
2143
  const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => (p.kind === "bytes" && p.elem === "u8") || p.kind === "string" || p.kind === "dyn", "use (chunk) or ()", [BYTES_U8]);
1779
- return { kind: "libCall", fn: "http2.streamOnData", args: [receiver(), cb, once], type: VOID, loc };
2144
+ return {
2145
+ kind: "libCall",
2146
+ fn: "http2.streamOnData",
2147
+ args: [receiver(), cb, once],
2148
+ type: VOID,
2149
+ loc,
2150
+ };
1780
2151
  }
1781
2152
  if (event === "end" || event === "close" || event === "aborted") {
1782
2153
  const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use ()", []);
1783
- const fn = event === "end" ? "http2.streamOnEnd" : event === "close" ? "http2.streamOnClose" : "http2.streamOnAborted";
2154
+ const fn = event === "end"
2155
+ ? "http2.streamOnEnd"
2156
+ : event === "close"
2157
+ ? "http2.streamOnClose"
2158
+ : "http2.streamOnAborted";
1784
2159
  return { kind: "libCall", fn, args: [receiver(), cb, once], type: VOID, loc };
1785
2160
  }
1786
2161
  if (event === "error") {
1787
2162
  const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
1788
- return { kind: "libCall", fn: "http2.streamOnError", args: [receiver(), cb, once], type: VOID, loc };
2163
+ return {
2164
+ kind: "libCall",
2165
+ fn: "http2.streamOnError",
2166
+ args: [receiver(), cb, once],
2167
+ type: VOID,
2168
+ loc,
2169
+ };
1789
2170
  }
1790
2171
  if (event === "response") {
1791
2172
  const cb = h2HeadersCallbackAdapter(lowerer, args[1], "response listeners", null, true, loc);
1792
- return { kind: "libCall", fn: "http2.streamOnResponse", args: [receiver(), cb, once], type: VOID, loc };
2173
+ return {
2174
+ kind: "libCall",
2175
+ fn: "http2.streamOnResponse",
2176
+ args: [receiver(), cb, once],
2177
+ type: VOID,
2178
+ loc,
2179
+ };
1793
2180
  }
1794
2181
  lowerer.noLowering(`stream.${name}("${event ?? "?"}", ...)`, args[0], '"data", "end", "close", "aborted", "error", and "response" are the supported stream events');
1795
2182
  }
@@ -1803,11 +2190,15 @@ export function lowerCompatReqStreamOptionalCall(lowerer, call) {
1803
2190
  if (!ts.isPropertyAccessExpression(call.expression) || !call.expression.questionDotToken)
1804
2191
  return null;
1805
2192
  const stream = call.expression.expression;
1806
- if (!ts.isPropertyAccessExpression(stream) || stream.name.text !== "stream" ||
2193
+ if (!ts.isPropertyAccessExpression(stream) ||
2194
+ stream.name.text !== "stream" ||
1807
2195
  lowerer.mapTypeOf(lowerer.typeOf(stream.expression))?.kind !== "httpReq")
1808
2196
  return null;
1809
2197
  const loc = locOf(call);
1810
- const unionT = { kind: "union", unionId: lowerer.unions.intern([HTTP2STREAM_T, UNDEFINED_T]) };
2198
+ const unionT = {
2199
+ kind: "union",
2200
+ unionId: lowerer.unions.intern([HTTP2STREAM_T, UNDEFINED_T]),
2201
+ };
1811
2202
  const guarded = {
1812
2203
  kind: "libCall",
1813
2204
  fn: "http.reqH2Stream",
@@ -1816,7 +2207,12 @@ export function lowerCompatReqStreamOptionalCall(lowerer, call) {
1816
2207
  loc,
1817
2208
  };
1818
2209
  const id = `chain.${lowerer.chainCounter++}`;
1819
- const body = lowerH2StreamMethodCall(lowerer, call, call.expression, { kind: "chainRecv", id, type: HTTP2STREAM_T, loc });
2210
+ const body = lowerH2StreamMethodCall(lowerer, call, call.expression, {
2211
+ kind: "chainRecv",
2212
+ id,
2213
+ type: HTTP2STREAM_T,
2214
+ loc,
2215
+ });
1820
2216
  if (body === null)
1821
2217
  return null;
1822
2218
  return { kind: "optChain", id, receiver: guarded, body, type: VOID, loc };
@@ -1841,7 +2237,13 @@ export function lowerServerProperty(lowerer, expr) {
1841
2237
  if (field !== null) {
1842
2238
  const receiver = coerceToHandle(lowerer, expr.expression, NETSERVER_T);
1843
2239
  const selector = { kind: "numLit", value: field, type: F64, loc };
1844
- return { kind: "libCall", fn: "http.serverTimeoutGet", args: [receiver, selector], type: F64, loc };
2240
+ return {
2241
+ kind: "libCall",
2242
+ fn: "http.serverTimeoutGet",
2243
+ args: [receiver, selector],
2244
+ type: F64,
2245
+ loc,
2246
+ };
1845
2247
  }
1846
2248
  }
1847
2249
  if (recvKind === "httpReq" && lowerer.isStdlibMember(expr)) {
@@ -1855,7 +2257,13 @@ export function lowerServerProperty(lowerer, expr) {
1855
2257
  // `number | undefined` — a real status on client responses, the
1856
2258
  // undefined arm on server requests (Node's IncomingMessage split).
1857
2259
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPREQ_T);
1858
- return { kind: "libCall", fn: "http.reqStatusCode", args: [receiver], type: lowerer.withUndefinedArm(F64), loc };
2260
+ return {
2261
+ kind: "libCall",
2262
+ fn: "http.reqStatusCode",
2263
+ args: [receiver],
2264
+ type: lowerer.withUndefinedArm(F64),
2265
+ loc,
2266
+ };
1859
2267
  }
1860
2268
  if (name === "socket" || name === "connection") {
1861
2269
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPREQ_T);
@@ -1889,12 +2297,20 @@ export function lowerServerProperty(lowerer, expr) {
1889
2297
  // when the status line carried none), undefined on server requests
1890
2298
  // (the statusCode split).
1891
2299
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPREQ_T);
1892
- return { kind: "libCall", fn: "http.reqStatusMessage", args: [receiver], type: lowerer.envValueType(), loc };
2300
+ return {
2301
+ kind: "libCall",
2302
+ fn: "http.reqStatusMessage",
2303
+ args: [receiver],
2304
+ type: lowerer.envValueType(),
2305
+ loc,
2306
+ };
1893
2307
  }
1894
2308
  if (name === "stream") {
1895
2309
  const parent = expr.parent;
1896
- if (ts.isPropertyAccessExpression(parent) && parent.expression === expr &&
1897
- ts.isCallExpression(parent.parent) && parent.parent.expression === parent) {
2310
+ if (ts.isPropertyAccessExpression(parent) &&
2311
+ parent.expression === expr &&
2312
+ ts.isCallExpression(parent.parent) &&
2313
+ parent.parent.expression === parent) {
1898
2314
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPREQ_T);
1899
2315
  if (parent.questionDotToken) {
1900
2316
  const type = {
@@ -1919,14 +2335,18 @@ export function lowerServerProperty(lowerer, expr) {
1919
2335
  // guarded-no-op / unguarded-TypeError stance; other reads fence.
1920
2336
  lowerer.noLowering(`reading '${name}' (an HTTP/2-only member) from a request`, expr, "compatibility requests do not expose their backing h2 stream/session yet; guarded method calls no-op and other reads have no lowering");
1921
2337
  }
1922
- if (name === "headers" || name === "trailers" || name === "headersDistinct" || name === "trailersDistinct") {
2338
+ if (name === "headers" ||
2339
+ name === "trailers" ||
2340
+ name === "headersDistinct" ||
2341
+ name === "trailersDistinct") {
1923
2342
  // Whole-object reads materialize a typed snapshot record. Per-name
1924
2343
  // reads retain their direct lowerings.
1925
2344
  const mapped = lowerer.mapTypeOf(lowerer.typeOf(expr));
1926
2345
  if (mapped?.kind === "record") {
1927
2346
  const helper = name === "headers"
1928
2347
  ? headersSnapshotHelper(lowerer, mapped.shapeId, loc)
1929
- : name === "trailers" ? trailersSnapshotHelper(lowerer, mapped.shapeId, loc)
2348
+ : name === "trailers"
2349
+ ? trailersSnapshotHelper(lowerer, mapped.shapeId, loc)
1930
2350
  : distinctSnapshotHelper(lowerer, mapped.shapeId, loc, name);
1931
2351
  if (helper !== null) {
1932
2352
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPREQ_T);
@@ -1949,7 +2369,13 @@ export function lowerServerProperty(lowerer, expr) {
1949
2369
  // KIND is a real socket either way, and `encrypted` on a socket has
1950
2370
  // exactly one meaning.
1951
2371
  const receiver = coerceToHandle(lowerer, expr.expression, NETSOCKET_T);
1952
- return { kind: "libCall", fn: "net.sockEncrypted", args: [receiver], type: lowerer.withUndefinedArm(BOOL), loc };
2372
+ return {
2373
+ kind: "libCall",
2374
+ fn: "net.sockEncrypted",
2375
+ args: [receiver],
2376
+ type: lowerer.withUndefinedArm(BOOL),
2377
+ loc,
2378
+ };
1953
2379
  }
1954
2380
  if (recvKind === "netSocket" && expr.name.text === "authorized") {
1955
2381
  // TLSSocket.authorized — Node's verify verdict (false on plain
@@ -1980,7 +2406,9 @@ export function lowerServerProperty(lowerer, expr) {
1980
2406
  const receiver = coerceToHandle(lowerer, expr.expression, NETSOCKET_T);
1981
2407
  return { kind: "libCall", fn: "net.sockWritable", args: [receiver], type: BOOL, loc };
1982
2408
  }
1983
- if (recvKind === "netSocket" && lowerer.isStdlibMember(expr) && expr.name.text === "bytesWritten") {
2409
+ if (recvKind === "netSocket" &&
2410
+ lowerer.isStdlibMember(expr) &&
2411
+ expr.name.text === "bytesWritten") {
1984
2412
  // Every byte the write paths accepted (buffered included — Node
1985
2413
  // counts those too; plaintext on TLS sockets).
1986
2414
  const receiver = coerceToHandle(lowerer, expr.expression, NETSOCKET_T);
@@ -1991,41 +2419,65 @@ export function lowerServerProperty(lowerer, expr) {
1991
2419
  const receiver = coerceToHandle(lowerer, expr.expression, NETSOCKET_T);
1992
2420
  return { kind: "libCall", fn: "net.sockReadable", args: [receiver], type: BOOL, loc };
1993
2421
  }
1994
- if (recvKind === "netSocket" && lowerer.isStdlibMember(expr) && expr.name.text === "remoteAddress") {
2422
+ if (recvKind === "netSocket" &&
2423
+ lowerer.isStdlibMember(expr) &&
2424
+ expr.name.text === "remoteAddress") {
1995
2425
  // `string | undefined` — Node's read-time caching: a value read while
1996
2426
  // connected survives destroy; never-read sockets answer undefined
1997
2427
  // after close.
1998
2428
  const receiver = coerceToHandle(lowerer, expr.expression, NETSOCKET_T);
1999
- return { kind: "libCall", fn: "net.sockRemoteAddress", args: [receiver], type: lowerer.envValueType(), loc };
2429
+ return {
2430
+ kind: "libCall",
2431
+ fn: "net.sockRemoteAddress",
2432
+ args: [receiver],
2433
+ type: lowerer.envValueType(),
2434
+ loc,
2435
+ };
2000
2436
  }
2001
- if (recvKind === "httpClientReq" && lowerer.isStdlibMember(expr) && expr.name.text === "destroyed") {
2437
+ if (recvKind === "httpClientReq" &&
2438
+ lowerer.isStdlibMember(expr) &&
2439
+ expr.name.text === "destroyed") {
2002
2440
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPCLIENTREQ_T);
2003
2441
  return { kind: "libCall", fn: "http.clientDestroyed", args: [receiver], type: BOOL, loc };
2004
2442
  }
2005
- if (recvKind === "httpClientReq" && lowerer.isStdlibMember(expr) &&
2443
+ if (recvKind === "httpClientReq" &&
2444
+ lowerer.isStdlibMember(expr) &&
2006
2445
  (expr.name.text === "socket" || expr.name.text === "connection")) {
2007
2446
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPCLIENTREQ_T);
2008
2447
  return { kind: "libCall", fn: "http.clientSocket", args: [receiver], type: NETSOCKET_T, loc };
2009
2448
  }
2010
- if (recvKind === "httpClientReq" && lowerer.isStdlibMember(expr) && expr.name.text === "writableCorked") {
2449
+ if (recvKind === "httpClientReq" &&
2450
+ lowerer.isStdlibMember(expr) &&
2451
+ expr.name.text === "writableCorked") {
2011
2452
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPCLIENTREQ_T);
2012
2453
  return { kind: "libCall", fn: "http.clientWritableCorked", args: [receiver], type: F64, loc };
2013
2454
  }
2014
2455
  if (recvKind === "httpClientReq" && lowerer.isStdlibMember(expr)) {
2015
2456
  const name = expr.name.text;
2016
- const strFn = name === "method" ? "http.clientMethod"
2017
- : name === "path" ? "http.clientPath"
2018
- : name === "host" ? "http.clientHost"
2019
- : name === "protocol" ? "http.clientProtocol" : null;
2457
+ const strFn = name === "method"
2458
+ ? "http.clientMethod"
2459
+ : name === "path"
2460
+ ? "http.clientPath"
2461
+ : name === "host"
2462
+ ? "http.clientHost"
2463
+ : name === "protocol"
2464
+ ? "http.clientProtocol"
2465
+ : null;
2020
2466
  if (strFn !== null) {
2021
2467
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPCLIENTREQ_T);
2022
2468
  return { kind: "libCall", fn: strFn, args: [receiver], type: STRING, loc };
2023
2469
  }
2024
- const boolFn = name === "aborted" ? "http.clientAborted"
2025
- : name === "headersSent" ? "http.clientHeadersSent"
2026
- : name === "writableEnded" || name === "finished" ? "http.clientWritableEnded"
2027
- : name === "writableFinished" ? "http.clientWritableFinished"
2028
- : name === "reusedSocket" ? "http.clientReusedSocket" : null;
2470
+ const boolFn = name === "aborted"
2471
+ ? "http.clientAborted"
2472
+ : name === "headersSent"
2473
+ ? "http.clientHeadersSent"
2474
+ : name === "writableEnded" || name === "finished"
2475
+ ? "http.clientWritableEnded"
2476
+ : name === "writableFinished"
2477
+ ? "http.clientWritableFinished"
2478
+ : name === "reusedSocket"
2479
+ ? "http.clientReusedSocket"
2480
+ : null;
2029
2481
  if (boolFn !== null) {
2030
2482
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPCLIENTREQ_T);
2031
2483
  return { kind: "libCall", fn: boolFn, args: [receiver], type: BOOL, loc };
@@ -2035,17 +2487,25 @@ export function lowerServerProperty(lowerer, expr) {
2035
2487
  const collection = httpReqFieldCollection(lowerer, expr.expression);
2036
2488
  const receiver = coerceToHandle(lowerer, expr.expression.expression, HTTPREQ_T);
2037
2489
  const key = { kind: "strLit", value: expr.name.text, type: STRING, loc };
2038
- const fn = collection === "headers" ? "http.reqHeader"
2039
- : collection === "trailers" ? "http.reqTrailer"
2040
- : collection === "headersDistinct" ? "http.reqHeaderValues" : "http.reqTrailerValues";
2041
- const type = collection.endsWith("Distinct") ? lowerer.withUndefinedArm(arrayOf(STRING)) : lowerer.envValueType();
2490
+ const fn = collection === "headers"
2491
+ ? "http.reqHeader"
2492
+ : collection === "trailers"
2493
+ ? "http.reqTrailer"
2494
+ : collection === "headersDistinct"
2495
+ ? "http.reqHeaderValues"
2496
+ : "http.reqTrailerValues";
2497
+ const type = collection.endsWith("Distinct")
2498
+ ? lowerer.withUndefinedArm(arrayOf(STRING))
2499
+ : lowerer.envValueType();
2042
2500
  return { kind: "libCall", fn, args: [receiver, key], type, loc };
2043
2501
  }
2044
2502
  if (recvKind === "httpRes" && lowerer.isStdlibMember(expr) && expr.name.text === "headersSent") {
2045
2503
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
2046
2504
  return { kind: "libCall", fn: "http.resHeadersSent", args: [receiver], type: BOOL, loc };
2047
2505
  }
2048
- if (recvKind === "httpRes" && lowerer.isStdlibMember(expr) && expr.name.text === "writableEnded") {
2506
+ if (recvKind === "httpRes" &&
2507
+ lowerer.isStdlibMember(expr) &&
2508
+ expr.name.text === "writableEnded") {
2049
2509
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
2050
2510
  return { kind: "libCall", fn: "http.resWritableEnded", args: [receiver], type: BOOL, loc };
2051
2511
  }
@@ -2053,7 +2513,9 @@ export function lowerServerProperty(lowerer, expr) {
2053
2513
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
2054
2514
  return { kind: "libCall", fn: "http.resWritableEnded", args: [receiver], type: BOOL, loc };
2055
2515
  }
2056
- if (recvKind === "httpRes" && lowerer.isStdlibMember(expr) && expr.name.text === "writableCorked") {
2516
+ if (recvKind === "httpRes" &&
2517
+ lowerer.isStdlibMember(expr) &&
2518
+ expr.name.text === "writableCorked") {
2057
2519
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
2058
2520
  return { kind: "libCall", fn: "http.resWritableCorked", args: [receiver], type: F64, loc };
2059
2521
  }
@@ -2063,10 +2525,18 @@ export function lowerServerProperty(lowerer, expr) {
2063
2525
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
2064
2526
  return { kind: "libCall", fn: "http.resStatusGet", args: [receiver], type: F64, loc };
2065
2527
  }
2066
- if (recvKind === "httpRes" && lowerer.isStdlibMember(expr) && expr.name.text === "statusMessage") {
2528
+ if (recvKind === "httpRes" &&
2529
+ lowerer.isStdlibMember(expr) &&
2530
+ expr.name.text === "statusMessage") {
2067
2531
  // Unset until the head is sent; then the assigned or default reason.
2068
2532
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
2069
- return { kind: "libCall", fn: "http.resStatusMsgGet", args: [receiver], type: lowerer.withUndefinedArm(STRING), loc };
2533
+ return {
2534
+ kind: "libCall",
2535
+ fn: "http.resStatusMsgGet",
2536
+ args: [receiver],
2537
+ type: lowerer.withUndefinedArm(STRING),
2538
+ loc,
2539
+ };
2070
2540
  }
2071
2541
  if (recvKind === "httpRes" && lowerer.isStdlibMember(expr)) {
2072
2542
  const name = expr.name.text;
@@ -2105,13 +2575,22 @@ export function lowerServerProperty(lowerer, expr) {
2105
2575
  if (m === "socket")
2106
2576
  return { kind: "libCall", fn: "http2.sessionSocket", args: [recv()], type: NETSOCKET_T, loc };
2107
2577
  if (m === "pendingSettingsAck")
2108
- return { kind: "libCall", fn: "http2.sessionPendingSettingsAck", args: [recv()], type: BOOL, loc };
2578
+ return {
2579
+ kind: "libCall",
2580
+ fn: "http2.sessionPendingSettingsAck",
2581
+ args: [recv()],
2582
+ type: BOOL,
2583
+ loc,
2584
+ };
2109
2585
  if (m === "localSettings" || m === "remoteSettings") {
2110
2586
  // The settings record crosses as a dyn value (the d.ts types it
2111
2587
  // `any`): member reads ride the checked-dynamic keyed read.
2112
2588
  return {
2113
- kind: "libCall", fn: "http2.sessionSettingsGet",
2114
- args: [recv(), boolLit(m === "localSettings", loc)], type: DYN, loc,
2589
+ kind: "libCall",
2590
+ fn: "http2.sessionSettingsGet",
2591
+ args: [recv(), boolLit(m === "localSettings", loc)],
2592
+ type: DYN,
2593
+ loc,
2115
2594
  };
2116
2595
  }
2117
2596
  }
@@ -2131,7 +2610,13 @@ export function lowerServerProperty(lowerer, expr) {
2131
2610
  if (m === "pending")
2132
2611
  return { kind: "libCall", fn: "http2.streamPending", args: [recv()], type: BOOL, loc };
2133
2612
  if (m === "session")
2134
- return { kind: "libCall", fn: "http2.streamSession", args: [recv()], type: HTTP2SESSION_T, loc };
2613
+ return {
2614
+ kind: "libCall",
2615
+ fn: "http2.streamSession",
2616
+ args: [recv()],
2617
+ type: HTTP2SESSION_T,
2618
+ loc,
2619
+ };
2135
2620
  }
2136
2621
  if (expr.name.text !== "port")
2137
2622
  return null;
@@ -2166,7 +2651,12 @@ function lowerRequestHandlerArg(lowerer, node) {
2166
2651
  // calls the wrapper through the checked-dynamic machinery; member
2167
2652
  // uses inside the wrapped body dispatch back onto the same http
2168
2653
  // entry points at runtime.
2169
- return { kind: "dynCheck", value: cb, type: funcOf([HTTPREQ_T, HTTPRES_T], VOID), loc: locOf(node) };
2654
+ return {
2655
+ kind: "dynCheck",
2656
+ value: cb,
2657
+ type: funcOf([HTTPREQ_T, HTTPRES_T], VOID),
2658
+ loc: locOf(node),
2659
+ };
2170
2660
  }
2171
2661
  if (cb.type.kind === "func" &&
2172
2662
  (cb.type.rest === true ||
@@ -2178,7 +2668,12 @@ function lowerRequestHandlerArg(lowerer, node) {
2178
2668
  // like the dyn case — req/res arrive as HANDLE boxes and the body's
2179
2669
  // member uses dispatch at runtime.
2180
2670
  const boxed = { kind: "dynFrom", value: cb, type: DYN, loc: locOf(node) };
2181
- return { kind: "dynCheck", value: boxed, type: funcOf([HTTPREQ_T, HTTPRES_T], VOID), loc: locOf(node) };
2671
+ return {
2672
+ kind: "dynCheck",
2673
+ value: boxed,
2674
+ type: funcOf([HTTPREQ_T, HTTPRES_T], VOID),
2675
+ loc: locOf(node),
2676
+ };
2182
2677
  }
2183
2678
  if (cb.type.kind !== "func" || cb.type.params.length > 2) {
2184
2679
  lowerer.unsupported("SC1090", node, "request handlers with more than two parameters (use (req, res))");
@@ -2238,7 +2733,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
2238
2733
  joinDup = false; /* Node's default: repeats keep the first value */
2239
2734
  continue;
2240
2735
  }
2241
- lowerer.noLowering(`${what} with a non-literal joinDuplicateHeaders option`, prop, "the lowered forms are the literals joinDuplicateHeaders: true (repeats join \", \") and false (the keep-first default)");
2736
+ lowerer.noLowering(`${what} with a non-literal joinDuplicateHeaders option`, prop, 'the lowered forms are the literals joinDuplicateHeaders: true (repeats join ", ") and false (the keep-first default)');
2242
2737
  }
2243
2738
  if (key === "keepAliveTimeoutBuffer") {
2244
2739
  if (keepAliveTimeoutBuffer !== null) {
@@ -2290,7 +2785,13 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
2290
2785
  ? lowerHttpServerOptions(lowerer, optsNode, what)
2291
2786
  : { joinDup: false, allowMissingHost: false, keepAliveTimeoutBuffer: null };
2292
2787
  const server = handlerNode !== null
2293
- ? { kind: "libCall", fn: "http.createServer", args: [lowerRequestHandlerArg(lowerer, handlerNode)], type: NETSERVER_T, loc }
2788
+ ? {
2789
+ kind: "libCall",
2790
+ fn: "http.createServer",
2791
+ args: [lowerRequestHandlerArg(lowerer, handlerNode)],
2792
+ type: NETSERVER_T,
2793
+ loc,
2794
+ }
2294
2795
  : { kind: "libCall", fn: "http.createServerEmpty", args: [], type: NETSERVER_T, loc };
2295
2796
  if (!opts.joinDup && !opts.allowMissingHost && opts.keepAliveTimeoutBuffer === null)
2296
2797
  return server;
@@ -2315,7 +2816,13 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
2315
2816
  const value = { kind: "varRef", localId: "b.0", type: DYN, loc };
2316
2817
  body.push({
2317
2818
  kind: "exprStmt",
2318
- expr: { kind: "libCall", fn: "http.serverTimeoutOptionSet", args: [ref, selector, value], type: VOID, loc },
2819
+ expr: {
2820
+ kind: "libCall",
2821
+ fn: "http.serverTimeoutOptionSet",
2822
+ args: [ref, selector, value],
2823
+ type: VOID,
2824
+ loc,
2825
+ },
2319
2826
  loc,
2320
2827
  });
2321
2828
  }
@@ -2329,7 +2836,13 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
2329
2836
  if (opts.allowMissingHost) {
2330
2837
  body.push({
2331
2838
  kind: "exprStmt",
2332
- expr: { kind: "libCall", fn: "http.serverAllowMissingHostHeader", args: [ref], type: VOID, loc },
2839
+ expr: {
2840
+ kind: "libCall",
2841
+ fn: "http.serverAllowMissingHostHeader",
2842
+ args: [ref],
2843
+ type: VOID,
2844
+ loc,
2845
+ },
2333
2846
  loc,
2334
2847
  });
2335
2848
  }
@@ -2413,10 +2926,17 @@ export function lowerHttpAgentNew(lowerer, expr) {
2413
2926
  ? lowerer.lowerExpr(initializer)
2414
2927
  : lowerer.lowerShorthandValue(prop);
2415
2928
  if (v.type.kind === "dyn") {
2416
- return { kind: "dynCheck", value: v, type: want === "bool" ? BOOL : F64, loc: locOf(prop) };
2929
+ return {
2930
+ kind: "dynCheck",
2931
+ value: v,
2932
+ type: want === "bool" ? BOOL : F64,
2933
+ loc: locOf(prop),
2934
+ };
2417
2935
  }
2418
2936
  if (v.type.kind !== want) {
2419
- lowerer.noLowering(`a ${api} '${key}' option of '${lowerer.fmt(v.type)}' values`, prop, want === "bool" ? "the option value must be a boolean" : "the option value must be a number");
2937
+ lowerer.noLowering(`a ${api} '${key}' option of '${lowerer.fmt(v.type)}' values`, prop, want === "bool"
2938
+ ? "the option value must be a boolean"
2939
+ : "the option value must be a number");
2420
2940
  }
2421
2941
  return v;
2422
2942
  };
@@ -2455,7 +2975,15 @@ export function lowerHttpAgentNew(lowerer, expr) {
2455
2975
  return {
2456
2976
  kind: "libCall",
2457
2977
  fn: "http.agentNew",
2458
- args: [boolLit(bi.module === "https", loc), keepAlive, kaMsecs, maxSockets, maxFree, timeout, port],
2978
+ args: [
2979
+ boolLit(bi.module === "https", loc),
2980
+ keepAlive,
2981
+ kaMsecs,
2982
+ maxSockets,
2983
+ maxFree,
2984
+ timeout,
2985
+ port,
2986
+ ],
2459
2987
  type: DYN,
2460
2988
  loc,
2461
2989
  };
@@ -2480,7 +3008,9 @@ export function lowerHttpServerNew(lowerer, expr) {
2480
3008
  function lowerHttpModuleCall(lowerer, expr, bi, loc) {
2481
3009
  if (bi.member === "validateHeaderName") {
2482
3010
  requireStatementPosition(lowerer, expr, "http.validateHeaderName(...)");
2483
- if (expr.arguments.length < 1 || expr.arguments.length > 2 || expr.arguments.some(ts.isSpreadElement)) {
3011
+ if (expr.arguments.length < 1 ||
3012
+ expr.arguments.length > 2 ||
3013
+ expr.arguments.some(ts.isSpreadElement)) {
2484
3014
  lowerer.noLowering("http.validateHeaderName arguments", expr, "pass a header name and an optional label");
2485
3015
  }
2486
3016
  const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
@@ -2496,7 +3026,13 @@ function lowerHttpModuleCall(lowerer, expr, bi, loc) {
2496
3026
  }
2497
3027
  const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
2498
3028
  const value = lowerer.lowerExprExpecting(expr.arguments[1], DYN);
2499
- return { kind: "libCall", fn: "http.validateHeaderValue", args: [name, value], type: VOID, loc };
3029
+ return {
3030
+ kind: "libCall",
3031
+ fn: "http.validateHeaderValue",
3032
+ args: [name, value],
3033
+ type: VOID,
3034
+ loc,
3035
+ };
2500
3036
  }
2501
3037
  if (bi.member === "createServer" || bi.member === "Server") {
2502
3038
  return lowerHttpCreateServerForms(lowerer, expr, `http.${bi.member}`, loc);
@@ -2542,8 +3078,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
2542
3078
  // the runtime walk's split (effectful values keep the fence).
2543
3079
  continue;
2544
3080
  }
2545
- if (k === "requestCert" &&
2546
- (init === null || init.kind === ts.SyntaxKind.FalseKeyword)) {
3081
+ if (k === "requestCert" && (init === null || init.kind === ts.SyntaxKind.FalseKeyword)) {
2547
3082
  continue; // Node's false default, spelled out
2548
3083
  }
2549
3084
  fenceOrDropOptionKey(lowerer, prop, k, what, TLS_SERVER_DOCUMENTED_OPTIONS, "cert and key (PEM strings or Buffers) are the supported options", {
@@ -2556,7 +3091,8 @@ function lowerTlsServerOptions(lowerer, node, what) {
2556
3091
  ? lowerer.lowerExpr(initializer)
2557
3092
  : lowerer.lowerShorthandValue(prop);
2558
3093
  const isArrayOfPem = v.type.kind === "array" &&
2559
- (v.type.elem.kind === "string" || (v.type.elem.kind === "bytes" && v.type.elem.elem === "u8"));
3094
+ (v.type.elem.kind === "string" ||
3095
+ (v.type.elem.kind === "bytes" && v.type.elem.elem === "u8"));
2560
3096
  if (v.type.kind === "dyn" || isArrayOfPem) {
2561
3097
  // A runtime PEM value (fixtures.readKey(...) — the suite's shape) or
2562
3098
  // the one-element-array multi-context spelling: the runtime
@@ -2596,10 +3132,19 @@ function lowerTlsServerOptions(lowerer, node, what) {
2596
3132
  * rides WHOLE to the walker so the typed ladders run in Node's order
2597
3133
  * (the static walk would fence them before validating). */
2598
3134
  const TLS_VALIDATED_OPTIONS = new Set([
2599
- "ciphers", "passphrase", "ecdhCurve", "sessionIdContext",
2600
- "clientCertEngine", "privateKeyEngine", "privateKeyIdentifier",
2601
- "minVersion", "maxVersion", "handshakeTimeout", "keepAliveInitialDelay",
2602
- "sessionTimeout", "ticketKeys",
3135
+ "ciphers",
3136
+ "passphrase",
3137
+ "ecdhCurve",
3138
+ "sessionIdContext",
3139
+ "clientCertEngine",
3140
+ "privateKeyEngine",
3141
+ "privateKeyIdentifier",
3142
+ "minVersion",
3143
+ "maxVersion",
3144
+ "handshakeTimeout",
3145
+ "keepAliveInitialDelay",
3146
+ "sessionTimeout",
3147
+ "ticketKeys",
2603
3148
  ]);
2604
3149
  /** True when a literal options bag must ride the runtime walker: JS uses
2605
3150
  * it for the typed TLS validation ladders, and HTTPS uses it for
@@ -2645,7 +3190,8 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
2645
3190
  if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
2646
3191
  lowerer.noLowering(`tls.connect with ${args.length} arguments`, expr, FORMS_HINT);
2647
3192
  }
2648
- const isFuncish = (a) => ts.isFunctionExpression(a) || ts.isArrowFunction(a) ||
3193
+ const isFuncish = (a) => ts.isFunctionExpression(a) ||
3194
+ ts.isArrowFunction(a) ||
2649
3195
  lowerer.checker.getCallSignatures(lowerer.typeOf(a)).length > 0;
2650
3196
  const isObjectish = (a) => {
2651
3197
  if (ts.isObjectLiteralExpression(a))
@@ -2711,12 +3257,7 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
2711
3257
  }
2712
3258
  // No options: Node's defaults (rejectUnauthorized: true) — the
2713
3259
  // runtime walk reads an absent record (the dyn undefined).
2714
- opts = {
2715
- kind: "dynFrom",
2716
- value: { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc },
2717
- type: DYN,
2718
- loc,
2719
- };
3260
+ opts = dynUndefinedExpr(loc);
2720
3261
  }
2721
3262
  let cb = null;
2722
3263
  if (i < args.length) {
@@ -2745,17 +3286,37 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
2745
3286
  if (args.length === 1) {
2746
3287
  return opts.dyn !== undefined
2747
3288
  ? { kind: "libCall", fn: "tls.createServerDyn", args: [opts.dyn], type: NETSERVER_T, loc }
2748
- : { kind: "libCall", fn: "tls.createServer", args: [opts.cert, opts.key], type: NETSERVER_T, loc };
3289
+ : {
3290
+ kind: "libCall",
3291
+ fn: "tls.createServer",
3292
+ args: [opts.cert, opts.key],
3293
+ type: NETSERVER_T,
3294
+ loc,
3295
+ };
2749
3296
  }
2750
3297
  const { cb } = lowerCallbackArg(lowerer, args[1], "secureConnection listeners", 1, (p) => p.kind === "netSocket", "use (socket) or ()", [NETSOCKET_T]);
2751
3298
  return opts.dyn !== undefined
2752
- ? { kind: "libCall", fn: "tls.createServerDynCb", args: [opts.dyn, cb], type: NETSERVER_T, loc }
2753
- : { kind: "libCall", fn: "tls.createServerCb", args: [opts.cert, opts.key, cb], type: NETSERVER_T, loc };
3299
+ ? {
3300
+ kind: "libCall",
3301
+ fn: "tls.createServerDynCb",
3302
+ args: [opts.dyn, cb],
3303
+ type: NETSERVER_T,
3304
+ loc,
3305
+ }
3306
+ : {
3307
+ kind: "libCall",
3308
+ fn: "tls.createServerCb",
3309
+ args: [opts.cert, opts.key, cb],
3310
+ type: NETSERVER_T,
3311
+ loc,
3312
+ };
2754
3313
  }
2755
3314
  if (bi.member === "connect") {
2756
3315
  return lowerTlsConnectCall(lowerer, expr, loc);
2757
3316
  }
2758
- if (bi.member === "getCACertificates" && args.length === 1 && !args.some(ts.isSpreadElement) &&
3317
+ if (bi.member === "getCACertificates" &&
3318
+ args.length === 1 &&
3319
+ !args.some(ts.isSpreadElement) &&
2759
3320
  isJsSourceFile(expr.getSourceFile())) {
2760
3321
  // The type-argument ladder (validateString + the documented name
2761
3322
  // set); the real CA list has no lowering, so a valid name meets the
@@ -2782,9 +3343,21 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
2782
3343
  }
2783
3344
  const opts = lowerTlsServerOptionsOrDyn(lowerer, args[0], "tls.createSecureContext");
2784
3345
  if (opts.dyn !== undefined) {
2785
- return { kind: "libCall", fn: "tls.createSecureContextDyn", args: [opts.dyn], type: SECURECTX_T, loc };
3346
+ return {
3347
+ kind: "libCall",
3348
+ fn: "tls.createSecureContextDyn",
3349
+ args: [opts.dyn],
3350
+ type: SECURECTX_T,
3351
+ loc,
3352
+ };
2786
3353
  }
2787
- return { kind: "libCall", fn: "tls.createSecureContext", args: [opts.cert, opts.key], type: SECURECTX_T, loc };
3354
+ return {
3355
+ kind: "libCall",
3356
+ fn: "tls.createSecureContext",
3357
+ args: [opts.cert, opts.key],
3358
+ type: SECURECTX_T,
3359
+ loc,
3360
+ };
2788
3361
  }
2789
3362
  // The CA-store introspection pair (scr_tls_ca.c — its own link gate, no
2790
3363
  // mbedTLS): getCACertificates(type?) answers the per-type cached PEM
@@ -2840,7 +3413,8 @@ function clientFnRefOf(lowerer, node) {
2840
3413
  : null;
2841
3414
  if (!bi)
2842
3415
  return null;
2843
- if ((bi.module !== "http" && bi.module !== "https") || (bi.member !== "request" && bi.member !== "get")) {
3416
+ if ((bi.module !== "http" && bi.module !== "https") ||
3417
+ (bi.member !== "request" && bi.member !== "get")) {
2844
3418
  return null;
2845
3419
  }
2846
3420
  return { module: bi.module, member: bi.member };
@@ -2852,7 +3426,8 @@ function neverReassigned(lowerer, sym) {
2852
3426
  const decl = lowerer.checker.declarationsOf(sym)[0];
2853
3427
  if (!decl)
2854
3428
  return false;
2855
- if (ts.isVariableDeclaration(decl) && (ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0) {
3429
+ if (ts.isVariableDeclaration(decl) &&
3430
+ (ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0) {
2856
3431
  return true;
2857
3432
  }
2858
3433
  if (!ts.isParameter(decl) && !ts.isVariableDeclaration(decl))
@@ -2861,7 +3436,9 @@ function neverReassigned(lowerer, sym) {
2861
3436
  // source file for module-level bindings. Writes anywhere inside
2862
3437
  // (nested closures included) disqualify.
2863
3438
  let scope = decl;
2864
- while (scope.parent !== undefined && !ts.isFunctionLike(scope.parent) && !ts.isSourceFile(scope.parent))
3439
+ while (scope.parent !== undefined &&
3440
+ !ts.isFunctionLike(scope.parent) &&
3441
+ !ts.isSourceFile(scope.parent))
2865
3442
  scope = scope.parent;
2866
3443
  const root = scope.parent;
2867
3444
  if (root === undefined)
@@ -2890,8 +3467,10 @@ function neverReassigned(lowerer, sym) {
2890
3467
  }
2891
3468
  }
2892
3469
  if ((ts.isPrefixUnaryExpression(n) || ts.isPostfixUnaryExpression(n)) &&
2893
- (n.operator === ts.SyntaxKind.PlusPlusToken || n.operator === ts.SyntaxKind.MinusMinusToken) &&
2894
- ts.isIdentifier(n.operand) && lowerer.checker.getSymbolAtLocation(n.operand) === sym) {
3470
+ (n.operator === ts.SyntaxKind.PlusPlusToken ||
3471
+ n.operator === ts.SyntaxKind.MinusMinusToken) &&
3472
+ ts.isIdentifier(n.operand) &&
3473
+ lowerer.checker.getSymbolAtLocation(n.operand) === sym) {
2895
3474
  written = true;
2896
3475
  return;
2897
3476
  }
@@ -2934,7 +3513,11 @@ export function registerHttpClientFnBinding(lowerer, nameNode, init) {
2934
3513
  }
2935
3514
  const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
2936
3515
  if (symbol) {
2937
- lowerer.httpClientFnBindings.set(symbol, { cond, trueSecure: t.module === "https", member: t.member });
3516
+ lowerer.httpClientFnBindings.set(symbol, {
3517
+ cond,
3518
+ trueSecure: t.module === "https",
3519
+ member: t.member,
3520
+ });
2938
3521
  }
2939
3522
  return true;
2940
3523
  }
@@ -2959,14 +3542,32 @@ function lowerHttpsModuleCall(lowerer, expr, bi, loc) {
2959
3542
  // NULL-handler shape, here for the runtime-options record only
2960
3543
  // (the literal path keeps its historical two-argument surface).
2961
3544
  if (opts.dyn !== undefined) {
2962
- return { kind: "libCall", fn: "https.createServerDyn", args: [opts.dyn], type: NETSERVER_T, loc };
3545
+ return {
3546
+ kind: "libCall",
3547
+ fn: "https.createServerDyn",
3548
+ args: [opts.dyn],
3549
+ type: NETSERVER_T,
3550
+ loc,
3551
+ };
2963
3552
  }
2964
3553
  lowerer.noLowering("createServer with 1 arguments", expr, "the supported form is createServer({ cert, key }, (req, res) => ...)");
2965
3554
  }
2966
3555
  const cb = lowerRequestHandlerArg(lowerer, args[1]);
2967
3556
  return opts.dyn !== undefined
2968
- ? { kind: "libCall", fn: "https.createServerDynCb", args: [opts.dyn, cb], type: NETSERVER_T, loc }
2969
- : { kind: "libCall", fn: "https.createServer", args: [opts.cert, opts.key, cb], type: NETSERVER_T, loc };
3557
+ ? {
3558
+ kind: "libCall",
3559
+ fn: "https.createServerDynCb",
3560
+ args: [opts.dyn, cb],
3561
+ type: NETSERVER_T,
3562
+ loc,
3563
+ }
3564
+ : {
3565
+ kind: "libCall",
3566
+ fn: "https.createServer",
3567
+ args: [opts.cert, opts.key, cb],
3568
+ type: NETSERVER_T,
3569
+ loc,
3570
+ };
2970
3571
  }
2971
3572
  if (bi.member === "request" || bi.member === "get") {
2972
3573
  return lowerHttpClientCall(lowerer, expr, bi.member, loc, true);
@@ -3053,7 +3654,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3053
3654
  }
3054
3655
  const auth = lowerer.lowerExpr(args[0]);
3055
3656
  if (auth.type.kind !== "string") {
3056
- lowerer.noLowering(`http2.connect with a '${lowerer.fmt(auth.type)}' authority`, args[0], "the authority is a string here (\"http://host:port\")");
3657
+ lowerer.noLowering(`http2.connect with a '${lowerer.fmt(auth.type)}' authority`, args[0], 'the authority is a string here ("http://host:port")');
3057
3658
  }
3058
3659
  // connect(authority, options[, listener]): session-tuning options
3059
3660
  // are accepted and never evaluated (the core runs at defaults) —
@@ -3070,7 +3671,8 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3070
3671
  let ca = { kind: "strLit", value: "", type: STRING, loc };
3071
3672
  const arg1IsDyn = args.length >= 2 &&
3072
3673
  (lowerer.typeOf(args[1]).flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0;
3073
- if (args.length >= 2 && !arg1IsDyn &&
3674
+ if (args.length >= 2 &&
3675
+ !arg1IsDyn &&
3074
3676
  lowerer.checker.getCallSignatures(lowerer.typeOf(args[1])).length === 0) {
3075
3677
  if (ts.isObjectLiteralExpression(args[1])) {
3076
3678
  for (const pr of args[1].properties) {
@@ -3109,7 +3711,10 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3109
3711
  ca = {
3110
3712
  kind: "libCall",
3111
3713
  fn: "tls.pemDyn",
3112
- args: [v, { kind: "strLit", value: "an http2.connect 'ca' option", type: STRING, loc }],
3714
+ args: [
3715
+ v,
3716
+ { kind: "strLit", value: "an http2.connect 'ca' option", type: STRING, loc },
3717
+ ],
3113
3718
  type: BYTES_U8,
3114
3719
  loc,
3115
3720
  };
@@ -3129,9 +3734,21 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3129
3734
  // The listener is the 'connect' once-listener: (session, socket) or
3130
3735
  // fewer. Its result is ignored (voidized); handles pass by ref.
3131
3736
  const { cb } = lowerCallbackArg(lowerer, listenerNode, "connect listeners", 2, (p) => p.kind === "http2Session" || p.kind === "netSocket", "use (session, socket), (session), or ()", [HTTP2SESSION_T, NETSOCKET_T]);
3132
- return { kind: "libCall", fn: "http2.connectCb", args: [auth, reject, ca, cb], type: HTTP2SESSION_T, loc };
3737
+ return {
3738
+ kind: "libCall",
3739
+ fn: "http2.connectCb",
3740
+ args: [auth, reject, ca, cb],
3741
+ type: HTTP2SESSION_T,
3742
+ loc,
3743
+ };
3133
3744
  }
3134
- return { kind: "libCall", fn: "http2.connect", args: [auth, reject, ca], type: HTTP2SESSION_T, loc };
3745
+ return {
3746
+ kind: "libCall",
3747
+ fn: "http2.connect",
3748
+ args: [auth, reject, ca],
3749
+ type: HTTP2SESSION_T,
3750
+ loc,
3751
+ };
3135
3752
  }
3136
3753
  if (bi.member === "getDefaultSettings") {
3137
3754
  // The constant defaults record, as a dyn value (the d.ts types it
@@ -3166,10 +3783,22 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3166
3783
  lowerer.noLowering("createSecureServer with a non-literal options argument", optsNode, "pass the options as an object literal ({ allowHTTP1: true, cert, key }) or a runtime record of those members");
3167
3784
  }
3168
3785
  if (handlerNode === null) {
3169
- return { kind: "libCall", fn: "http2.createSecureServerDyn", args: [dynOpts], type: NETSERVER_T, loc };
3786
+ return {
3787
+ kind: "libCall",
3788
+ fn: "http2.createSecureServerDyn",
3789
+ args: [dynOpts],
3790
+ type: NETSERVER_T,
3791
+ loc,
3792
+ };
3170
3793
  }
3171
3794
  const cb = lowerRequestHandlerArg(lowerer, handlerNode);
3172
- return { kind: "libCall", fn: "http2.createSecureServerDynCb", args: [dynOpts, cb], type: NETSERVER_T, loc };
3795
+ return {
3796
+ kind: "libCall",
3797
+ fn: "http2.createSecureServerDynCb",
3798
+ args: [dynOpts, cb],
3799
+ type: NETSERVER_T,
3800
+ loc,
3801
+ };
3173
3802
  }
3174
3803
  let cert = null;
3175
3804
  let key = null;
@@ -3237,7 +3866,8 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3237
3866
  ts.isPropertyAssignment(whenTrue.properties[0]) &&
3238
3867
  (ts.isIdentifier(whenTrue.properties[0].name) ||
3239
3868
  ts.isStringLiteral(whenTrue.properties[0].name)) &&
3240
- whenTrue.properties[0].name.text === "SNICallback" &&
3869
+ whenTrue.properties[0].name.text ===
3870
+ "SNICallback" &&
3241
3871
  whenTrue.properties[0].initializer.getText() === condText;
3242
3872
  if (!ok) {
3243
3873
  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");
@@ -3286,7 +3916,10 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3286
3916
  v = {
3287
3917
  kind: "libCall",
3288
3918
  fn: "tls.pemDyn",
3289
- args: [v, { kind: "strLit", value: `a createSecureServer '${k}' option`, type: STRING, loc }],
3919
+ args: [
3920
+ v,
3921
+ { kind: "strLit", value: `a createSecureServer '${k}' option`, type: STRING, loc },
3922
+ ],
3290
3923
  type: BYTES_U8,
3291
3924
  loc,
3292
3925
  };
@@ -3306,13 +3939,18 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3306
3939
  // true }` — the portless RFC 8441 advertisement): every member is
3307
3940
  // itself inert h2-session state, so the same no-observable-skip
3308
3941
  // argument covers the one level of nesting.
3309
- const isScalarLiteral = (e) => ts.isNumericLiteral(e) || ts.isStringLiteralLike(e) ||
3310
- e.kind === ts.SyntaxKind.TrueKeyword || e.kind === ts.SyntaxKind.FalseKeyword;
3942
+ const isScalarLiteral = (e) => ts.isNumericLiteral(e) ||
3943
+ ts.isStringLiteralLike(e) ||
3944
+ e.kind === ts.SyntaxKind.TrueKeyword ||
3945
+ e.kind === ts.SyntaxKind.FalseKeyword;
3311
3946
  const isLiteralObjectOfLiterals = (e) => ts.isObjectLiteralExpression(e) &&
3312
- e.properties.every((p) => ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && isScalarLiteral(p.initializer));
3947
+ e.properties.every((p) => ts.isPropertyAssignment(p) &&
3948
+ ts.isIdentifier(p.name) &&
3949
+ isScalarLiteral(p.initializer));
3313
3950
  if (k === "settings" && initializer !== null && ts.isObjectLiteralExpression(initializer)) {
3314
3951
  for (const setting of initializer.properties) {
3315
- if (ts.isPropertyAssignment(setting) && ts.isIdentifier(setting.name) &&
3952
+ if (ts.isPropertyAssignment(setting) &&
3953
+ ts.isIdentifier(setting.name) &&
3316
3954
  setting.name.text === "enableConnectProtocol") {
3317
3955
  if (setting.initializer.kind !== ts.SyntaxKind.TrueKeyword &&
3318
3956
  setting.initializer.kind !== ts.SyntaxKind.FalseKeyword) {
@@ -3344,7 +3982,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3344
3982
  lowerer.noLowering("createSecureServer without both cert and key", optsNode, "the supported options object is { allowHTTP1?, cert, key } (PEM strings or Buffers)");
3345
3983
  }
3346
3984
  if (sni !== null && handlerNode !== null) {
3347
- lowerer.noLowering("createSecureServer with both an SNICallback and an eager handler", expr, "register the handler separately: server.on(\"request\", (req, res) => ...)");
3985
+ lowerer.noLowering("createSecureServer with both an SNICallback and an eager handler", expr, 'register the handler separately: server.on("request", (req, res) => ...)');
3348
3986
  }
3349
3987
  if (!allowHttp1) {
3350
3988
  // The REAL h2-over-TLS server (scr_http2.c + scr_tls.c): ALPN
@@ -3357,18 +3995,48 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
3357
3995
  }
3358
3996
  if (handlerNode !== null) {
3359
3997
  const cb = lowerRequestHandlerArg(lowerer, handlerNode);
3360
- return { kind: "libCall", fn: "http2.createSecureServerH2Req", args: [cert, key, cb, boolLit(enableConnectProtocol, loc)], type: NETSERVER_T, loc };
3998
+ return {
3999
+ kind: "libCall",
4000
+ fn: "http2.createSecureServerH2Req",
4001
+ args: [cert, key, cb, boolLit(enableConnectProtocol, loc)],
4002
+ type: NETSERVER_T,
4003
+ loc,
4004
+ };
3361
4005
  }
3362
- return { kind: "libCall", fn: "http2.createSecureServerH2", args: [cert, key, boolLit(enableConnectProtocol, loc)], type: NETSERVER_T, loc };
4006
+ return {
4007
+ kind: "libCall",
4008
+ fn: "http2.createSecureServerH2",
4009
+ args: [cert, key, boolLit(enableConnectProtocol, loc)],
4010
+ type: NETSERVER_T,
4011
+ loc,
4012
+ };
3363
4013
  }
3364
4014
  if (sni !== null) {
3365
- return { kind: "libCall", fn: "http2.createSecureServerSni", args: [cert, key, sni, boolLit(enableConnectProtocol, loc)], type: NETSERVER_T, loc };
4015
+ return {
4016
+ kind: "libCall",
4017
+ fn: "http2.createSecureServerSni",
4018
+ args: [cert, key, sni, boolLit(enableConnectProtocol, loc)],
4019
+ type: NETSERVER_T,
4020
+ loc,
4021
+ };
3366
4022
  }
3367
4023
  if (handlerNode !== null) {
3368
4024
  const cb = lowerRequestHandlerArg(lowerer, handlerNode);
3369
- return { kind: "libCall", fn: "http2.createSecureServerReq", args: [cert, key, cb, boolLit(enableConnectProtocol, loc)], type: NETSERVER_T, loc };
4025
+ return {
4026
+ kind: "libCall",
4027
+ fn: "http2.createSecureServerReq",
4028
+ args: [cert, key, cb, boolLit(enableConnectProtocol, loc)],
4029
+ type: NETSERVER_T,
4030
+ loc,
4031
+ };
3370
4032
  }
3371
- return { kind: "libCall", fn: "http2.createSecureServer", args: [cert, key, boolLit(enableConnectProtocol, loc)], type: NETSERVER_T, loc };
4033
+ return {
4034
+ kind: "libCall",
4035
+ fn: "http2.createSecureServer",
4036
+ args: [cert, key, boolLit(enableConnectProtocol, loc)],
4037
+ type: NETSERVER_T,
4038
+ loc,
4039
+ };
3372
4040
  }
3373
4041
  lowerer.noLowering(`http2.${bi.member}`, expr, builtinFenceHintOf("http2", bi.member) ??
3374
4042
  "createSecureServer({ allowHTTP1: true, cert, key }) and the h2-only form are lowered", lowerer.resolveValueSymbol(expr.expression));
@@ -3398,9 +4066,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3398
4066
  * read — each use is its own IR). */
3399
4067
  const secureExpr = () => {
3400
4068
  const c = lowerer.lowerCondition(binding.cond);
3401
- return binding.trueSecure
3402
- ? c
3403
- : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
4069
+ return binding.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
3404
4070
  };
3405
4071
  const args = expr.arguments;
3406
4072
  if (args.length < 1 || args.length > 2) {
@@ -3421,7 +4087,13 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3421
4087
  // A URL OBJECT is its href through the same parse — Node's own
3422
4088
  // reading of the argument, and the serialization round-trips.
3423
4089
  const url = t.kind === "url"
3424
- ? { kind: "libCall", fn: "url.href", args: [lowerer.lowerExpr(optsNode)], type: STRING, loc }
4090
+ ? {
4091
+ kind: "libCall",
4092
+ fn: "url.href",
4093
+ args: [lowerer.lowerExpr(optsNode)],
4094
+ type: STRING,
4095
+ loc,
4096
+ }
3425
4097
  : lowerer.lowerExprExpecting(optsNode, STRING);
3426
4098
  const methodLit = { kind: "strLit", value: "GET", type: STRING, loc };
3427
4099
  const autoEnd = boolLit(member === "get", loc);
@@ -3432,14 +4104,20 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3432
4104
  }
3433
4105
  const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
3434
4106
  const fn = isTls ? "https.requestUrlCb" : "http.requestUrlCb";
3435
- return { kind: "libCall", fn, args: [url, methodLit, autoEnd, cb], type: HTTPCLIENTREQ_T, loc };
4107
+ return {
4108
+ kind: "libCall",
4109
+ fn,
4110
+ args: [url, methodLit, autoEnd, cb],
4111
+ type: HTTPCLIENTREQ_T,
4112
+ loc,
4113
+ };
3436
4114
  }
3437
4115
  lowerer.noLowering(t?.kind === "string"
3438
4116
  ? `a URL-string first argument through a request-function binding`
3439
4117
  : `${member} with a non-literal options argument`, optsNode, t?.kind === "string"
3440
- // Only the binding mode reaches here now: the scheme would have to
3441
- // agree with a dial chosen at runtime.
3442
- ? "call http.request / https.request directly for the URL-string form, or pass the options as an object literal"
4118
+ ? // Only the binding mode reaches here now: the scheme would have to
4119
+ // agree with a dial chosen at runtime.
4120
+ "call http.request / https.request directly for the URL-string form, or pass the options as an object literal"
3443
4121
  : "pass the options as an object literal: { hostname, port, path, method, timeout?, headers? }");
3444
4122
  }
3445
4123
  let host = null;
@@ -3468,9 +4146,12 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3468
4146
  // plain client has no TLS layer to configure).
3469
4147
  if (ts.isSpreadAssignment(prop)) {
3470
4148
  const cs = conditionalSpreadOf(prop.expression);
3471
- if (cs !== null && cs !== "unsupported" && cs.props.length === 1 &&
4149
+ if (cs !== null &&
4150
+ cs !== "unsupported" &&
4151
+ cs.props.length === 1 &&
3472
4152
  cs.props[0].name.text === "rejectUnauthorized" &&
3473
- ts.isPropertyAssignment(cs.props[0]) && secureish) {
4153
+ ts.isPropertyAssignment(cs.props[0]) &&
4154
+ secureish) {
3474
4155
  const cond = lowerer.lowerCondition(cs.cond);
3475
4156
  const v = lowerer.lowerExpr(cs.props[0].initializer);
3476
4157
  if (v.type.kind !== "bool") {
@@ -3512,10 +4193,17 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3512
4193
  // option's type — a mismatch is the catchable path-annotated
3513
4194
  // TypeError, the boundary's stance.
3514
4195
  if (v.type.kind === "dyn") {
3515
- return { kind: "dynCheck", value: v, type: want === "string" ? STRING : F64, loc: locOf(prop) };
4196
+ return {
4197
+ kind: "dynCheck",
4198
+ value: v,
4199
+ type: want === "string" ? STRING : F64,
4200
+ loc: locOf(prop),
4201
+ };
3516
4202
  }
3517
4203
  if (v.type.kind !== want) {
3518
- lowerer.noLowering(`a ${member} '${key}' option of '${lowerer.fmt(v.type)}' values`, prop, want === "string" ? "the option value must be a string" : "the option value must be a number");
4204
+ lowerer.noLowering(`a ${member} '${key}' option of '${lowerer.fmt(v.type)}' values`, prop, want === "string"
4205
+ ? "the option value must be a string"
4206
+ : "the option value must be a number");
3519
4207
  }
3520
4208
  return v;
3521
4209
  };
@@ -3554,7 +4242,9 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3554
4242
  lowerer.noLowering(`${member} with a shorthand createConnection option`, prop, "spell it out: createConnection: theDialer");
3555
4243
  }
3556
4244
  const v = lowerer.lowerExpr(initializer);
3557
- if (v.type.kind !== "func" || v.type.params.length !== 0 || v.type.ret.kind !== "netSocket") {
4245
+ if (v.type.kind !== "func" ||
4246
+ v.type.params.length !== 0 ||
4247
+ v.type.ret.kind !== "netSocket") {
3558
4248
  lowerer.noLowering(`a ${member} 'createConnection' option of '${lowerer.fmt(v.type)}' values`, prop, "the dialer is () => net.Socket — no arguments, returning the socket to use");
3559
4249
  }
3560
4250
  connCb = v;
@@ -3603,8 +4293,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3603
4293
  break;
3604
4294
  }
3605
4295
  if (e !== null &&
3606
- (e.kind === ts.SyntaxKind.NullKeyword ||
3607
- (ts.isIdentifier(e) && e.text === "undefined"))) {
4296
+ (e.kind === ts.SyntaxKind.NullKeyword || (ts.isIdentifier(e) && e.text === "undefined"))) {
3608
4297
  break; // the default agent: what the agent-free call compiles
3609
4298
  }
3610
4299
  const v = initializer !== null
@@ -3631,17 +4320,25 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3631
4320
  // non-literal headers record cannot be checked for one, so the combo
3632
4321
  // fences instead of double-sending.
3633
4322
  if (headers === null) {
3634
- headers = { kind: "arrayLit", elems: [strLit("Connection", loc), strLit("close", loc)], type: arrayOf(STRING), loc };
4323
+ headers = {
4324
+ kind: "arrayLit",
4325
+ elems: [strLit("Connection", loc), strLit("close", loc)],
4326
+ type: arrayOf(STRING),
4327
+ loc,
4328
+ };
3635
4329
  }
3636
4330
  else if (headers.kind === "arrayLit") {
3637
4331
  const hasConnection = headers.elems.some((el, i) => i % 2 === 0 && el.kind === "strLit" && el.value.toLowerCase() === "connection");
3638
4332
  if (!hasConnection) {
3639
- headers = { ...headers, elems: [...headers.elems, strLit("Connection", loc), strLit("close", loc)] };
4333
+ headers = {
4334
+ ...headers,
4335
+ elems: [...headers.elems, strLit("Connection", loc), strLit("close", loc)],
4336
+ };
3640
4337
  }
3641
4338
  }
3642
4339
  else {
3643
4340
  lowerer.noLowering(`${member} with agent: false and a non-literal headers record`, agentClose, "agent: false lowers by injecting Connection: close into a LITERAL headers object — " +
3644
- "add connection: \"close\" to the record instead, or write the headers inline");
4341
+ 'add connection: "close" to the record instead, or write the headers inline');
3645
4342
  }
3646
4343
  }
3647
4344
  if (connCb !== null && (host !== null || port !== null)) {
@@ -3660,10 +4357,19 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3660
4357
  // TLS arm, 80 on the plain one — exactly each client's own default.
3661
4358
  // With an AGENT the sentinel -1 says "no port option": the runtime
3662
4359
  // consults the agent's (settable) defaultPort first, Node's merge.
3663
- port ??= binding !== null
3664
- ? { kind: "ternary", cond: secureExpr(), then: numLit(443, loc), else_: numLit(80, loc), type: F64, loc }
3665
- : agentVal !== null ? numLit(-1, loc)
3666
- : numLit(secure === true ? 443 : 80, loc);
4360
+ port ??=
4361
+ binding !== null
4362
+ ? {
4363
+ kind: "ternary",
4364
+ cond: secureExpr(),
4365
+ then: numLit(443, loc),
4366
+ else_: numLit(80, loc),
4367
+ type: F64,
4368
+ loc,
4369
+ }
4370
+ : agentVal !== null
4371
+ ? numLit(-1, loc)
4372
+ : numLit(secure === true ? 443 : 80, loc);
3667
4373
  path ??= strLit("/", loc);
3668
4374
  method ??= strLit("GET", loc);
3669
4375
  timeout ??= numLit(0, loc);
@@ -3675,7 +4381,13 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3675
4381
  return { kind: "libCall", fn: "http.requestConn", args: base, type: HTTPCLIENTREQ_T, loc };
3676
4382
  }
3677
4383
  const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
3678
- return { kind: "libCall", fn: "http.requestConnCb", args: [...base, cb], type: HTTPCLIENTREQ_T, loc };
4384
+ return {
4385
+ kind: "libCall",
4386
+ fn: "http.requestConnCb",
4387
+ args: [...base, cb],
4388
+ type: HTTPCLIENTREQ_T,
4389
+ loc,
4390
+ };
3679
4391
  }
3680
4392
  const base = [host, port, path, method, timeout, headers, autoEnd];
3681
4393
  if (secureish) {
@@ -3688,15 +4400,27 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
3688
4400
  if (binding !== null)
3689
4401
  base.unshift(secureExpr());
3690
4402
  if (args.length === 1) {
3691
- const fn = binding !== null ? "https.requestFn"
3692
- : secure === true ? (agentVal !== null ? "https.requestAgent" : "https.request")
3693
- : agentVal !== null ? "http.requestAgent" : "http.request";
4403
+ const fn = binding !== null
4404
+ ? "https.requestFn"
4405
+ : secure === true
4406
+ ? agentVal !== null
4407
+ ? "https.requestAgent"
4408
+ : "https.request"
4409
+ : agentVal !== null
4410
+ ? "http.requestAgent"
4411
+ : "http.request";
3694
4412
  return { kind: "libCall", fn, args: base, type: HTTPCLIENTREQ_T, loc };
3695
4413
  }
3696
4414
  const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
3697
- const fn = binding !== null ? "https.requestFnCb"
3698
- : secure === true ? (agentVal !== null ? "https.requestAgentCb" : "https.requestCb")
3699
- : agentVal !== null ? "http.requestAgentCb" : "http.requestCb";
4415
+ const fn = binding !== null
4416
+ ? "https.requestFnCb"
4417
+ : secure === true
4418
+ ? agentVal !== null
4419
+ ? "https.requestAgentCb"
4420
+ : "https.requestCb"
4421
+ : agentVal !== null
4422
+ ? "http.requestAgentCb"
4423
+ : "http.requestCb";
3700
4424
  return { kind: "libCall", fn, args: [...base, cb], type: HTTPCLIENTREQ_T, loc };
3701
4425
  }
3702
4426
  /** The headers option of http.request: an object literal with literal
@@ -3776,7 +4500,13 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
3776
4500
  const receiver = coerceToHandle(lowerer, access.expression, HTTPCLIENTREQ_T);
3777
4501
  const header = lowerer.lowerExprExpecting(args[0], STRING);
3778
4502
  const value = lowerer.lowerExprExpecting(args[1], STRING);
3779
- return { kind: "libCall", fn: "http.clientSetHeader", args: [receiver, header, value], type: VOID, loc };
4503
+ return {
4504
+ kind: "libCall",
4505
+ fn: "http.clientSetHeader",
4506
+ args: [receiver, header, value],
4507
+ type: VOID,
4508
+ loc,
4509
+ };
3780
4510
  }
3781
4511
  if (name === "getHeader" || name === "hasHeader" || name === "removeHeader") {
3782
4512
  if (name === "removeHeader")
@@ -3785,8 +4515,11 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
3785
4515
  lowerer.noLowering(`request.${name} arguments`, call, `pass one header name`);
3786
4516
  const receiver = coerceToHandle(lowerer, access.expression, HTTPCLIENTREQ_T);
3787
4517
  const header = lowerer.lowerExprExpecting(args[0], STRING);
3788
- const fn = name === "getHeader" ? "http.clientGetHeader"
3789
- : name === "hasHeader" ? "http.clientHasHeader" : "http.clientRemoveHeader";
4518
+ const fn = name === "getHeader"
4519
+ ? "http.clientGetHeader"
4520
+ : name === "hasHeader"
4521
+ ? "http.clientHasHeader"
4522
+ : "http.clientRemoveHeader";
3790
4523
  const type = name === "getHeader" ? lowerer.envValueType() : name === "hasHeader" ? BOOL : VOID;
3791
4524
  return { kind: "libCall", fn, args: [receiver, header], type, loc };
3792
4525
  }
@@ -3794,17 +4527,29 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
3794
4527
  if (args.length !== 0)
3795
4528
  lowerer.noLowering(`request.${name} arguments`, call, `${name}() takes no arguments`);
3796
4529
  const receiver = coerceToHandle(lowerer, access.expression, HTTPCLIENTREQ_T);
3797
- const fn = name === "getHeaderNames" ? "http.clientGetHeaderNames"
3798
- : name === "getRawHeaderNames" ? "http.clientGetRawHeaderNames" : "http.clientGetHeaders";
3799
- return { kind: "libCall", fn, args: [receiver], type: name === "getHeaders" ? DYN : arrayOf(STRING), loc };
4530
+ const fn = name === "getHeaderNames"
4531
+ ? "http.clientGetHeaderNames"
4532
+ : name === "getRawHeaderNames"
4533
+ ? "http.clientGetRawHeaderNames"
4534
+ : "http.clientGetHeaders";
4535
+ return {
4536
+ kind: "libCall",
4537
+ fn,
4538
+ args: [receiver],
4539
+ type: name === "getHeaders" ? DYN : arrayOf(STRING),
4540
+ loc,
4541
+ };
3800
4542
  }
3801
4543
  if (name === "flushHeaders" || name === "cork" || name === "uncork") {
3802
4544
  requireStatementPosition(lowerer, call, `request.${name}()`);
3803
4545
  if (args.length !== 0)
3804
4546
  lowerer.noLowering(`request.${name} with arguments`, call, `${name}() takes no arguments`);
3805
4547
  const receiver = coerceToHandle(lowerer, access.expression, HTTPCLIENTREQ_T);
3806
- const fn = name === "flushHeaders" ? "http.clientFlushHeaders"
3807
- : name === "cork" ? "http.clientCork" : "http.clientUncork";
4548
+ const fn = name === "flushHeaders"
4549
+ ? "http.clientFlushHeaders"
4550
+ : name === "cork"
4551
+ ? "http.clientCork"
4552
+ : "http.clientUncork";
3808
4553
  return { kind: "libCall", fn, args: [receiver], type: VOID, loc };
3809
4554
  }
3810
4555
  if (name === "setNoDelay") {
@@ -3813,7 +4558,13 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
3813
4558
  lowerer.noLowering("request.setNoDelay arguments", call, "pass an optional boolean");
3814
4559
  const receiver = coerceToHandle(lowerer, access.expression, HTTPCLIENTREQ_T);
3815
4560
  const enable = args.length === 0 ? boolLit(true, loc) : lowerer.lowerExprExpecting(args[0], BOOL);
3816
- return { kind: "libCall", fn: "http.clientSetNoDelay", args: [receiver, enable], type: VOID, loc };
4561
+ return {
4562
+ kind: "libCall",
4563
+ fn: "http.clientSetNoDelay",
4564
+ args: [receiver, enable],
4565
+ type: VOID,
4566
+ loc,
4567
+ };
3817
4568
  }
3818
4569
  if (name === "setSocketKeepAlive") {
3819
4570
  requireStatementPosition(lowerer, call, "request.setSocketKeepAlive(...)");
@@ -3822,7 +4573,13 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
3822
4573
  const receiver = coerceToHandle(lowerer, access.expression, HTTPCLIENTREQ_T);
3823
4574
  const enable = args.length === 0 ? boolLit(true, loc) : lowerer.lowerExprExpecting(args[0], BOOL);
3824
4575
  const delay = args.length < 2 ? numLit(0, loc) : lowerer.lowerExprExpecting(args[1], F64);
3825
- return { kind: "libCall", fn: "http.clientSetSocketKeepAlive", args: [receiver, enable, delay], type: VOID, loc };
4576
+ return {
4577
+ kind: "libCall",
4578
+ fn: "http.clientSetSocketKeepAlive",
4579
+ args: [receiver, enable, delay],
4580
+ type: VOID,
4581
+ loc,
4582
+ };
3826
4583
  }
3827
4584
  if (name === "setTimeout") {
3828
4585
  if (args.length < 1 || args.length > 2)
@@ -3844,13 +4601,21 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
3844
4601
  lowerer.noLowering("request.addTrailers argument count", call, "pass one trailer object or pair-list literal");
3845
4602
  const receiver = coerceToHandle(lowerer, access.expression, HTTPCLIENTREQ_T);
3846
4603
  const pairs = lowerHttpTrailersOption(lowerer, args[0]);
3847
- return { kind: "libCall", fn: "http.clientAddTrailers", args: [receiver, pairs], type: VOID, loc };
4604
+ return {
4605
+ kind: "libCall",
4606
+ fn: "http.clientAddTrailers",
4607
+ args: [receiver, pairs],
4608
+ type: VOID,
4609
+ loc,
4610
+ };
3848
4611
  }
3849
4612
  if (name === "write" || name === "end") {
3850
4613
  requireStatementPosition(lowerer, call, `request.${name}(...)`);
3851
4614
  const minArgs = name === "write" ? 1 : 0;
3852
4615
  if (args.length < minArgs || args.length > 1) {
3853
- lowerer.noLowering(`${name} with ${args.length} arguments`, call, name === "write" ? "the supported form is write(data)" : "the supported forms are end() and end(data)");
4616
+ lowerer.noLowering(`${name} with ${args.length} arguments`, call, name === "write"
4617
+ ? "the supported form is write(data)"
4618
+ : "the supported forms are end() and end(data)");
3854
4619
  }
3855
4620
  const receiver = lowerer.lowerExpr(access.expression);
3856
4621
  if (args.length === 0) {
@@ -3878,7 +4643,13 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
3878
4643
  lowerer.noLowering(`${name} with ${args.length} arguments`, call, `${name}() takes no arguments here`);
3879
4644
  }
3880
4645
  const receiver = lowerer.lowerExpr(access.expression);
3881
- return { kind: "libCall", fn: name === "destroy" ? "http.clientDestroy" : "http.clientAbort", args: [receiver], type: VOID, loc };
4646
+ return {
4647
+ kind: "libCall",
4648
+ fn: name === "destroy" ? "http.clientDestroy" : "http.clientAbort",
4649
+ args: [receiver],
4650
+ type: VOID,
4651
+ loc,
4652
+ };
3882
4653
  }
3883
4654
  if ((name === "on" || name === "once" || name === "addListener") && args.length === 2) {
3884
4655
  requireStatementPosition(lowerer, call, `request.${name}(...)`);
@@ -3888,21 +4659,43 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
3888
4659
  const receiver = lowerer.lowerExpr(access.expression);
3889
4660
  if (event === "response") {
3890
4661
  const { cb } = lowerCallbackArg(lowerer, args[1], "response listeners", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
3891
- return { kind: "libCall", fn: "http.clientOnResponse", args: [receiver, cb, once], type: VOID, loc };
4662
+ return {
4663
+ kind: "libCall",
4664
+ fn: "http.clientOnResponse",
4665
+ args: [receiver, cb, once],
4666
+ type: VOID,
4667
+ loc,
4668
+ };
3892
4669
  }
3893
4670
  if (event === "socket") {
3894
4671
  const { cb } = lowerCallbackArg(lowerer, args[1], "socket listeners", 1, (p) => p.kind === "netSocket", "use (socket) or ()", [NETSOCKET_T]);
3895
- return { kind: "libCall", fn: "http.clientOnSocket", args: [receiver, cb, once], type: VOID, loc };
4672
+ return {
4673
+ kind: "libCall",
4674
+ fn: "http.clientOnSocket",
4675
+ args: [receiver, cb, once],
4676
+ type: VOID,
4677
+ loc,
4678
+ };
3896
4679
  }
3897
4680
  if (event === "error") {
3898
4681
  const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
3899
- return { kind: "libCall", fn: "http.clientOnError", args: [receiver, cb, once], type: VOID, loc };
4682
+ return {
4683
+ kind: "libCall",
4684
+ fn: "http.clientOnError",
4685
+ args: [receiver, cb, once],
4686
+ type: VOID,
4687
+ loc,
4688
+ };
3900
4689
  }
3901
4690
  if (event === "timeout" || event === "close" || event === "finish" || event === "abort") {
3902
4691
  const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use ()", []);
3903
- const fn = event === "timeout" ? "http.clientOnTimeout"
3904
- : event === "close" ? "http.clientOnClose"
3905
- : event === "abort" ? "http.clientOnAbort" : "http.clientOnFinish";
4692
+ const fn = event === "timeout"
4693
+ ? "http.clientOnTimeout"
4694
+ : event === "close"
4695
+ ? "http.clientOnClose"
4696
+ : event === "abort"
4697
+ ? "http.clientOnAbort"
4698
+ : "http.clientOnFinish";
3906
4699
  return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
3907
4700
  }
3908
4701
  if (event === "upgrade") {
@@ -3922,7 +4715,13 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
3922
4715
  (p2 !== undefined && !(p2.kind === "bytes" && p2.elem === "u8"))) {
3923
4716
  lowerer.unsupported("SC1090", args[1], "upgrade listeners whose parameters are not (res: IncomingMessage, socket: Socket, head: Buffer)");
3924
4717
  }
3925
- return { kind: "libCall", fn: "http.clientOnUpgrade", args: [receiver, cb, once], type: VOID, loc };
4718
+ return {
4719
+ kind: "libCall",
4720
+ fn: "http.clientOnUpgrade",
4721
+ args: [receiver, cb, once],
4722
+ type: VOID,
4723
+ loc,
4724
+ };
3926
4725
  }
3927
4726
  lowerer.noLowering(`request.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"response", "socket", "upgrade", "error", "timeout", "finish", "abort", and "close" are the supported request events (as literals)');
3928
4727
  }
@@ -3958,7 +4757,8 @@ export function lowerSocketInstanceOf(lowerer, expr, loc) {
3958
4757
  const isNetSocketRef = (ts.isPropertyAccessExpression(rhs) &&
3959
4758
  rhs.name.text === "Socket" &&
3960
4759
  lowerer.builtinMemberOf(rhs)?.module === "net") ||
3961
- (ts.isIdentifier(rhs) && lowerer.builtinImportOf(rhs)?.module === "net" &&
4760
+ (ts.isIdentifier(rhs) &&
4761
+ lowerer.builtinImportOf(rhs)?.module === "net" &&
3962
4762
  lowerer.builtinImportOf(rhs)?.member === "Socket");
3963
4763
  if (!isNetSocketRef)
3964
4764
  return null;
@@ -3972,15 +4772,25 @@ export function lowerSocketInstanceOf(lowerer, expr, loc) {
3972
4772
  const left = lowerer.lowerExpr(expr.left);
3973
4773
  if (left.type.kind !== "union" || left.type.unionId !== leftT.unionId)
3974
4774
  return null;
3975
- return { kind: "unionIsTag", unionId: leftT.unionId, tag, negated: false, value: left, type: BOOL, loc };
4775
+ return {
4776
+ kind: "unionIsTag",
4777
+ unionId: leftT.unionId,
4778
+ tag,
4779
+ negated: false,
4780
+ value: left,
4781
+ type: BOOL,
4782
+ loc,
4783
+ };
3976
4784
  }
3977
4785
  /** True when `node` reads `.headers` off an IncomingMessage — the
3978
4786
  * receiver shape of both header-read forms. */
3979
4787
  function httpReqFieldCollection(lowerer, node) {
3980
4788
  if (ts.isPropertyAccessExpression(node) &&
3981
4789
  !node.questionDotToken &&
3982
- (node.name.text === "headers" || node.name.text === "trailers" ||
3983
- node.name.text === "headersDistinct" || node.name.text === "trailersDistinct") &&
4790
+ (node.name.text === "headers" ||
4791
+ node.name.text === "trailers" ||
4792
+ node.name.text === "headersDistinct" ||
4793
+ node.name.text === "trailersDistinct") &&
3984
4794
  lowerer.mapTypeOf(lowerer.typeOf(node.expression))?.kind === "httpReq" &&
3985
4795
  lowerer.isStdlibMember(node))
3986
4796
  return node.name.text;
@@ -4002,11 +4812,17 @@ export function lowerHttpHeadersElement(lowerer, expr) {
4002
4812
  const receiver = lowerer.lowerExpr(recv);
4003
4813
  return {
4004
4814
  kind: "libCall",
4005
- fn: collection === "headers" ? "http.reqHeader"
4006
- : collection === "trailers" ? "http.reqTrailer"
4007
- : collection === "headersDistinct" ? "http.reqHeaderValues" : "http.reqTrailerValues",
4815
+ fn: collection === "headers"
4816
+ ? "http.reqHeader"
4817
+ : collection === "trailers"
4818
+ ? "http.reqTrailer"
4819
+ : collection === "headersDistinct"
4820
+ ? "http.reqHeaderValues"
4821
+ : "http.reqTrailerValues",
4008
4822
  args: [receiver, key],
4009
- type: collection.endsWith("Distinct") ? lowerer.withUndefinedArm(arrayOf(STRING)) : lowerer.envValueType(),
4823
+ type: collection.endsWith("Distinct")
4824
+ ? lowerer.withUndefinedArm(arrayOf(STRING))
4825
+ : lowerer.envValueType(),
4010
4826
  loc: locOf(expr),
4011
4827
  };
4012
4828
  }
@@ -4029,7 +4845,13 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
4029
4845
  if (args.length === 1)
4030
4846
  return { kind: "libCall", fn: "http.reqSetTimeout", args: [receiver, ms], type: VOID, loc };
4031
4847
  const { cb } = lowerCallbackArg(lowerer, args[1], "message timeout callbacks", 0, () => false, "use ()", []);
4032
- return { kind: "libCall", fn: "http.reqSetTimeoutCb", args: [receiver, ms, cb], type: VOID, loc };
4848
+ return {
4849
+ kind: "libCall",
4850
+ fn: "http.reqSetTimeoutCb",
4851
+ args: [receiver, ms, cb],
4852
+ type: VOID,
4853
+ loc,
4854
+ };
4033
4855
  }
4034
4856
  if (name === "resume" || name === "destroy") {
4035
4857
  requireStatementPosition(lowerer, call, `req.${name}()`);
@@ -4062,9 +4884,12 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
4062
4884
  }
4063
4885
  const receiver = coerceToHandle(lowerer, access.expression, HTTPREQ_T);
4064
4886
  const dst = lowerer.lowerExpr(args[0]);
4065
- const fn = dst.type.kind === "httpRes" ? "http.reqPipeRes"
4066
- : dst.type.kind === "httpClientReq" ? "http.reqPipeClient"
4067
- : dst.type.kind === "netSocket" ? "http.reqPipeSock"
4887
+ const fn = dst.type.kind === "httpRes"
4888
+ ? "http.reqPipeRes"
4889
+ : dst.type.kind === "httpClientReq"
4890
+ ? "http.reqPipeClient"
4891
+ : dst.type.kind === "netSocket"
4892
+ ? "http.reqPipeSock"
4068
4893
  : null;
4069
4894
  if (fn === null) {
4070
4895
  lowerer.noLowering(`pipe into '${lowerer.fmt(dst.type)}' destinations`, args[0], "an IncomingMessage pipes into a ServerResponse, a ClientRequest, or a Socket");
@@ -4087,17 +4912,35 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
4087
4912
  }
4088
4913
  if (event === "error") {
4089
4914
  const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
4090
- return { kind: "libCall", fn: "http.reqOnError", args: [receiver, cb, once], type: VOID, loc };
4915
+ return {
4916
+ kind: "libCall",
4917
+ fn: "http.reqOnError",
4918
+ args: [receiver, cb, once],
4919
+ type: VOID,
4920
+ loc,
4921
+ };
4091
4922
  }
4092
4923
  if (event === "close") {
4093
4924
  const { cb } = lowerCallbackArg(lowerer, args[1], "close listeners", 0, () => false, "use ()", []);
4094
- return { kind: "libCall", fn: "http.reqOnClose", args: [receiver, cb, once], type: VOID, loc };
4925
+ return {
4926
+ kind: "libCall",
4927
+ fn: "http.reqOnClose",
4928
+ args: [receiver, cb, once],
4929
+ type: VOID,
4930
+ loc,
4931
+ };
4095
4932
  }
4096
4933
  if (event === "aborted") {
4097
4934
  // The h2 compat event (Http2ServerRequest 'aborted'); an http/1
4098
4935
  // request registers too and never fires — the parser lane's story.
4099
4936
  const { cb } = lowerCallbackArg(lowerer, args[1], "aborted listeners", 0, () => false, "use ()", []);
4100
- return { kind: "libCall", fn: "http.reqOnAborted", args: [receiver, cb, once], type: VOID, loc };
4937
+ return {
4938
+ kind: "libCall",
4939
+ fn: "http.reqOnAborted",
4940
+ args: [receiver, cb, once],
4941
+ type: VOID,
4942
+ loc,
4943
+ };
4101
4944
  }
4102
4945
  lowerer.noLowering(`req.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "error", "close", and "aborted" are the supported request events (as literals)');
4103
4946
  }
@@ -4137,7 +4980,13 @@ function lowerHttpResMethodCall(lowerer, call, access) {
4137
4980
  if (name !== "writeEarlyHints") {
4138
4981
  if (args.length !== 0)
4139
4982
  lowerer.noLowering(`res.${name} callback`, call, `${name}() supports no callback here`);
4140
- return { kind: "libCall", fn: name === "writeContinue" ? "http.resWriteContinue" : "http.resWriteProcessing", args: [receiver], type: VOID, loc };
4983
+ return {
4984
+ kind: "libCall",
4985
+ fn: name === "writeContinue" ? "http.resWriteContinue" : "http.resWriteProcessing",
4986
+ args: [receiver],
4987
+ type: VOID,
4988
+ loc,
4989
+ };
4141
4990
  }
4142
4991
  if (args.length !== 1)
4143
4992
  lowerer.noLowering("res.writeEarlyHints arguments", call, "pass one header object or Record<string, string> without a callback");
@@ -4169,23 +5018,41 @@ function lowerHttpResMethodCall(lowerer, call, access) {
4169
5018
  }
4170
5019
  pairs = { kind: "call", callee: helper, args: [value], type: arrayOf(STRING), loc };
4171
5020
  }
4172
- return { kind: "libCall", fn: "http.resWriteEarlyHints", args: [receiver, pairs], type: VOID, loc };
5021
+ return {
5022
+ kind: "libCall",
5023
+ fn: "http.resWriteEarlyHints",
5024
+ args: [receiver, pairs],
5025
+ type: VOID,
5026
+ loc,
5027
+ };
4173
5028
  }
4174
5029
  if (name === "getHeaderNames" || name === "getRawHeaderNames" || name === "getHeaders") {
4175
5030
  if (args.length !== 0)
4176
5031
  lowerer.noLowering(`res.${name} arguments`, call, `${name}() takes no arguments`);
4177
5032
  const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
4178
- const fn = name === "getHeaderNames" ? "http.resGetHeaderNames"
4179
- : name === "getRawHeaderNames" ? "http.resGetRawHeaderNames" : "http.resGetHeaders";
4180
- return { kind: "libCall", fn, args: [receiver], type: name === "getHeaders" ? DYN : arrayOf(STRING), loc };
5033
+ const fn = name === "getHeaderNames"
5034
+ ? "http.resGetHeaderNames"
5035
+ : name === "getRawHeaderNames"
5036
+ ? "http.resGetRawHeaderNames"
5037
+ : "http.resGetHeaders";
5038
+ return {
5039
+ kind: "libCall",
5040
+ fn,
5041
+ args: [receiver],
5042
+ type: name === "getHeaders" ? DYN : arrayOf(STRING),
5043
+ loc,
5044
+ };
4181
5045
  }
4182
5046
  if (name === "flushHeaders" || name === "cork" || name === "uncork") {
4183
5047
  requireStatementPosition(lowerer, call, `res.${name}()`);
4184
5048
  if (args.length !== 0)
4185
5049
  lowerer.noLowering(`res.${name} with arguments`, call, `${name}() takes no arguments`);
4186
5050
  const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
4187
- const fn = name === "flushHeaders" ? "http.resFlushHeaders"
4188
- : name === "cork" ? "http.resCork" : "http.resUncork";
5051
+ const fn = name === "flushHeaders"
5052
+ ? "http.resFlushHeaders"
5053
+ : name === "cork"
5054
+ ? "http.resCork"
5055
+ : "http.resUncork";
4189
5056
  return { kind: "libCall", fn, args: [receiver], type: VOID, loc };
4190
5057
  }
4191
5058
  if (name === "addTrailers") {
@@ -4224,7 +5091,13 @@ function lowerHttpResMethodCall(lowerer, call, access) {
4224
5091
  if (value.type.kind !== "string") {
4225
5092
  lowerer.noLowering(`setHeader with a '${lowerer.fmt(value.type)}' value`, args[1], "header values are strings or numbers here");
4226
5093
  }
4227
- return { kind: "libCall", fn: "http.resSetHeader", args: [receiver, header, value], type: VOID, loc };
5094
+ return {
5095
+ kind: "libCall",
5096
+ fn: "http.resSetHeader",
5097
+ args: [receiver, header, value],
5098
+ type: VOID,
5099
+ loc,
5100
+ };
4228
5101
  }
4229
5102
  if (name === "writeHead") {
4230
5103
  if (args.length < 1 || args.length > 3) {
@@ -4339,11 +5212,14 @@ function lowerHttpResMethodCall(lowerer, call, access) {
4339
5212
  const { cb } = lowerCallbackArg(lowerer, args[1], "end callbacks", 0, () => false, "use ()", []);
4340
5213
  cbArg = cb;
4341
5214
  }
4342
- else if (name === "end" && args.length === 1 &&
5215
+ else if (name === "end" &&
5216
+ args.length === 1 &&
4343
5217
  lowerer.mapTypeOf(lowerer.typeOf(args[0]))?.kind !== "string" &&
4344
5218
  lowerer.mapTypeOf(lowerer.typeOf(args[0]))?.kind !== "bytes") {
4345
5219
  const probe = lowerer.typeOf(args[0]);
4346
- if (lowerer.mapTypeOf(probe)?.kind === "func" || lowerer.mapTypeOf(probe) === null || lowerer.mapTypeOf(probe)?.kind === "dyn") {
5220
+ if (lowerer.mapTypeOf(probe)?.kind === "func" ||
5221
+ lowerer.mapTypeOf(probe) === null ||
5222
+ lowerer.mapTypeOf(probe)?.kind === "dyn") {
4347
5223
  const { cb } = lowerCallbackArg(lowerer, args[0], "end callbacks", 0, () => false, "use ()", []);
4348
5224
  cbArg = cb;
4349
5225
  dataNode = undefined;
@@ -4361,16 +5237,36 @@ function lowerHttpResMethodCall(lowerer, call, access) {
4361
5237
  name: helper,
4362
5238
  params,
4363
5239
  returnType: VOID,
4364
- locals: params.map((p) => ({ id: p.localId, name: p.name, type: p.type, mutable: false })),
5240
+ locals: params.map((p) => ({
5241
+ id: p.localId,
5242
+ name: p.name,
5243
+ type: p.type,
5244
+ mutable: false,
5245
+ })),
4365
5246
  body: [
4366
5247
  {
4367
5248
  kind: "exprStmt",
4368
- expr: { kind: "libCall", fn: "http.resOnFinish", args: [varRef(params[0].localId, params[0].type, loc), varRef(params[all.length - 1].localId, params[all.length - 1].type, loc)], type: VOID, loc },
5249
+ expr: {
5250
+ kind: "libCall",
5251
+ fn: "http.resOnFinish",
5252
+ args: [
5253
+ varRef(params[0].localId, params[0].type, loc),
5254
+ varRef(params[all.length - 1].localId, params[all.length - 1].type, loc),
5255
+ ],
5256
+ type: VOID,
5257
+ loc,
5258
+ },
4369
5259
  loc,
4370
5260
  },
4371
5261
  {
4372
5262
  kind: "exprStmt",
4373
- expr: { kind: "libCall", fn, args: callArgs.map((_, i) => varRef(params[i].localId, params[i].type, loc)), type: VOID, loc },
5263
+ expr: {
5264
+ kind: "libCall",
5265
+ fn,
5266
+ args: callArgs.map((_, i) => varRef(params[i].localId, params[i].type, loc)),
5267
+ type: VOID,
5268
+ loc,
5269
+ },
4374
5270
  loc,
4375
5271
  },
4376
5272
  ],
@@ -4420,12 +5316,30 @@ function lowerHttpResMethodCall(lowerer, call, access) {
4420
5316
  const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
4421
5317
  const header = lowerer.lowerExprExpecting(args[0], STRING);
4422
5318
  if (name === "getHeader") {
4423
- return { kind: "libCall", fn: "http.resGetHeader", args: [receiver, header], type: lowerer.envValueType(), loc };
5319
+ return {
5320
+ kind: "libCall",
5321
+ fn: "http.resGetHeader",
5322
+ args: [receiver, header],
5323
+ type: lowerer.envValueType(),
5324
+ loc,
5325
+ };
4424
5326
  }
4425
5327
  if (name === "hasHeader") {
4426
- return { kind: "libCall", fn: "http.resHasHeader", args: [receiver, header], type: BOOL, loc };
5328
+ return {
5329
+ kind: "libCall",
5330
+ fn: "http.resHasHeader",
5331
+ args: [receiver, header],
5332
+ type: BOOL,
5333
+ loc,
5334
+ };
4427
5335
  }
4428
- return { kind: "libCall", fn: "http.resRemoveHeader", args: [receiver, header], type: VOID, loc };
5336
+ return {
5337
+ kind: "libCall",
5338
+ fn: "http.resRemoveHeader",
5339
+ args: [receiver, header],
5340
+ type: VOID,
5341
+ loc,
5342
+ };
4429
5343
  }
4430
5344
  if (name === "destroy") {
4431
5345
  requireStatementPosition(lowerer, call, "res.destroy()");
@@ -4443,7 +5357,13 @@ function lowerHttpResMethodCall(lowerer, call, access) {
4443
5357
  const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
4444
5358
  if (event === "close") {
4445
5359
  const { cb } = lowerCallbackArg(lowerer, args[1], "close listeners", 0, () => false, "use ()", []);
4446
- return { kind: "libCall", fn: "http.resOnClose", args: [receiver, cb, once], type: VOID, loc };
5360
+ return {
5361
+ kind: "libCall",
5362
+ fn: "http.resOnClose",
5363
+ args: [receiver, cb, once],
5364
+ type: VOID,
5365
+ loc,
5366
+ };
4447
5367
  }
4448
5368
  if (event === "finish") {
4449
5369
  const { cb } = lowerCallbackArg(lowerer, args[1], "finish listeners", 0, () => false, "use ()", []);