@scriptc/compiler 0.4.6 → 0.4.8

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 (1082) hide show
  1. package/ambient/node-fallback/child_process.d.ts +71 -22
  2. package/ambient/node-fallback/crypto.d.ts +15 -7
  3. package/ambient/node-fallback/events.d.ts +29 -6
  4. package/ambient/node-fallback/fs-promises.d.ts +1 -1
  5. package/ambient/node-fallback/fs.d.ts +57 -12
  6. package/ambient/node-fallback/http.d.ts +26 -18
  7. package/ambient/node-fallback/https.d.ts +5 -2
  8. package/ambient/node-fallback/net.d.ts +25 -0
  9. package/ambient/node-fallback/os.d.ts +11 -1
  10. package/ambient/node-fallback/path-posix.d.ts +6 -0
  11. package/ambient/node-fallback/path-win32.d.ts +5 -0
  12. package/ambient/node-fallback/path.d.ts +2 -0
  13. package/ambient/node-fallback/querystring.d.ts +3 -3
  14. package/ambient/node-fallback/zlib.d.ts +31 -2
  15. package/ambient/scriptc-node-fallback.d.ts +95 -20
  16. package/ambient/scriptc.d.ts +7 -2
  17. package/dist/backend/executable-features.js +22 -1
  18. package/dist/backend/executable-features.js.map +1 -1
  19. package/dist/backend/immutability.d.ts +12 -1
  20. package/dist/backend/immutability.js +50 -4
  21. package/dist/backend/immutability.js.map +1 -1
  22. package/dist/backend/immutability.test.js +95 -1
  23. package/dist/backend/immutability.test.js.map +1 -1
  24. package/dist/backend/library-pack.d.ts +6 -0
  25. package/dist/backend/library-pack.js +18 -5
  26. package/dist/backend/library-pack.js.map +1 -1
  27. package/dist/backend/library-pack.test.d.ts +1 -0
  28. package/dist/backend/library-pack.test.js +28 -0
  29. package/dist/backend/library-pack.test.js.map +1 -0
  30. package/dist/backend/linker.d.ts +20 -2
  31. package/dist/backend/linker.js +221 -35
  32. package/dist/backend/linker.js.map +1 -1
  33. package/dist/backend/lld.d.ts +15 -6
  34. package/dist/backend/lld.js +24 -16
  35. package/dist/backend/lld.js.map +1 -1
  36. package/dist/backend/lld.test.js +13 -5
  37. package/dist/backend/lld.test.js.map +1 -1
  38. package/dist/backend/llvm/alloc.d.ts +15 -2
  39. package/dist/backend/llvm/alloc.js +172 -36
  40. package/dist/backend/llvm/alloc.js.map +1 -1
  41. package/dist/backend/llvm/alloc.test.js +69 -1
  42. package/dist/backend/llvm/alloc.test.js.map +1 -1
  43. package/dist/backend/llvm/arenas.d.ts +17 -4
  44. package/dist/backend/llvm/arenas.js +105 -10
  45. package/dist/backend/llvm/arenas.js.map +1 -1
  46. package/dist/backend/llvm/arenas.test.js +229 -0
  47. package/dist/backend/llvm/arenas.test.js.map +1 -1
  48. package/dist/backend/llvm/bytes-alias.js +10 -1
  49. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  50. package/dist/backend/llvm/bytes-headers.js +6 -0
  51. package/dist/backend/llvm/bytes-headers.js.map +1 -1
  52. package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
  53. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  54. package/dist/backend/llvm/call-lifetimes.js +10 -0
  55. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  56. package/dist/backend/llvm/classes.d.ts +16 -9
  57. package/dist/backend/llvm/classes.js +142 -37
  58. package/dist/backend/llvm/classes.js.map +1 -1
  59. package/dist/backend/llvm/classes.test.js +42 -0
  60. package/dist/backend/llvm/classes.test.js.map +1 -1
  61. package/dist/backend/llvm/constant-callbacks.test.js +50 -1
  62. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  63. package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
  64. package/dist/backend/llvm/cpu-dispatch.js +34 -9
  65. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  66. package/dist/backend/llvm/dyn.d.ts +64 -3
  67. package/dist/backend/llvm/dyn.js +251 -15
  68. package/dist/backend/llvm/dyn.js.map +1 -1
  69. package/dist/backend/llvm/emit-function.js +68 -5
  70. package/dist/backend/llvm/emit-function.js.map +1 -1
  71. package/dist/backend/llvm/emit-module.js +226 -77
  72. package/dist/backend/llvm/emit-module.js.map +1 -1
  73. package/dist/backend/llvm/emit-module.test.d.ts +1 -0
  74. package/dist/backend/llvm/emit-module.test.js +52 -0
  75. package/dist/backend/llvm/emit-module.test.js.map +1 -0
  76. package/dist/backend/llvm/emit-statements.js +138 -34
  77. package/dist/backend/llvm/emit-statements.js.map +1 -1
  78. package/dist/backend/llvm/emitter.d.ts +142 -10
  79. package/dist/backend/llvm/emitter.js +523 -73
  80. package/dist/backend/llvm/emitter.js.map +1 -1
  81. package/dist/backend/llvm/emitter.test.js +31 -3
  82. package/dist/backend/llvm/emitter.test.js.map +1 -1
  83. package/dist/backend/llvm/expr-async.js +19 -1
  84. package/dist/backend/llvm/expr-async.js.map +1 -1
  85. package/dist/backend/llvm/expr-bytes.js +16 -1
  86. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  87. package/dist/backend/llvm/expr-calls.d.ts +4 -1
  88. package/dist/backend/llvm/expr-calls.js +38 -6
  89. package/dist/backend/llvm/expr-calls.js.map +1 -1
  90. package/dist/backend/llvm/expr-dynamic.js +237 -23
  91. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  92. package/dist/backend/llvm/expr-primitives.js +123 -12
  93. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  94. package/dist/backend/llvm/expr-records.d.ts +1 -1
  95. package/dist/backend/llvm/expr-records.js +124 -56
  96. package/dist/backend/llvm/expr-records.js.map +1 -1
  97. package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
  98. package/dist/backend/llvm/expr-stream-bridges.js +59 -2
  99. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  100. package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
  101. package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
  102. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  103. package/dist/backend/llvm/integer-values.d.ts +2 -0
  104. package/dist/backend/llvm/integer-values.js +6 -0
  105. package/dist/backend/llvm/integer-values.js.map +1 -1
  106. package/dist/backend/llvm/js-groups.d.ts +21 -0
  107. package/dist/backend/llvm/js-groups.js +277 -0
  108. package/dist/backend/llvm/js-groups.js.map +1 -0
  109. package/dist/backend/llvm/js-ic.d.ts +57 -1
  110. package/dist/backend/llvm/js-ic.js +389 -22
  111. package/dist/backend/llvm/js-ic.js.map +1 -1
  112. package/dist/backend/llvm/lib-dispatch.js +152 -1
  113. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  114. package/dist/backend/llvm/lib-filesystem.js +116 -11
  115. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  116. package/dist/backend/llvm/lib-network.js +33 -6
  117. package/dist/backend/llvm/lib-network.js.map +1 -1
  118. package/dist/backend/llvm/lib-process.js +180 -27
  119. package/dist/backend/llvm/lib-process.js.map +1 -1
  120. package/dist/backend/llvm/lib-shared.js +139 -2
  121. package/dist/backend/llvm/lib-shared.js.map +1 -1
  122. package/dist/backend/llvm/lib-stream.js +67 -0
  123. package/dist/backend/llvm/lib-stream.js.map +1 -1
  124. package/dist/backend/llvm/local-union-storage.test.js +32 -0
  125. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  126. package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
  127. package/dist/backend/llvm/loop-entry-versions.js +43 -21
  128. package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
  129. package/dist/backend/llvm/loop-state.d.ts +7 -1
  130. package/dist/backend/llvm/loop-state.js +26 -3
  131. package/dist/backend/llvm/loop-state.js.map +1 -1
  132. package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
  133. package/dist/backend/llvm/map-entry-fusion.js +3 -3
  134. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  135. package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
  136. package/dist/backend/llvm/map-number-lookup.js +7 -3
  137. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  138. package/dist/backend/llvm/map-number-lookup.test.js +58 -17
  139. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  140. package/dist/backend/llvm/nullable-unions.js +7 -6
  141. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  142. package/dist/backend/llvm/nullable-unions.test.js +4 -1
  143. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  144. package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
  145. package/dist/backend/llvm/receiver-brackets.test.js +68 -0
  146. package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
  147. package/dist/backend/llvm/receivers.js +3 -0
  148. package/dist/backend/llvm/receivers.js.map +1 -1
  149. package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
  150. package/dist/backend/llvm/record-entry-fusion.js +217 -0
  151. package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
  152. package/dist/backend/llvm/record-results.d.ts +5 -2
  153. package/dist/backend/llvm/record-results.js +13 -12
  154. package/dist/backend/llvm/record-results.js.map +1 -1
  155. package/dist/backend/llvm/record-views.d.ts +22 -2
  156. package/dist/backend/llvm/record-views.js +147 -12
  157. package/dist/backend/llvm/record-views.js.map +1 -1
  158. package/dist/backend/llvm/record-views.test.js +76 -0
  159. package/dist/backend/llvm/record-views.test.js.map +1 -1
  160. package/dist/backend/llvm/reference-effects.js +1 -0
  161. package/dist/backend/llvm/reference-effects.js.map +1 -1
  162. package/dist/backend/llvm/reference-writes.js +4 -0
  163. package/dist/backend/llvm/reference-writes.js.map +1 -1
  164. package/dist/backend/llvm/region-ir.js +1 -0
  165. package/dist/backend/llvm/region-ir.js.map +1 -1
  166. package/dist/backend/llvm/region-sites.d.ts +18 -0
  167. package/dist/backend/llvm/region-sites.js +79 -1
  168. package/dist/backend/llvm/region-sites.js.map +1 -1
  169. package/dist/backend/llvm/runtime-registries.test.js +53 -6
  170. package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
  171. package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
  172. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  173. package/dist/backend/llvm/shapes.d.ts +36 -3
  174. package/dist/backend/llvm/shapes.js +201 -16
  175. package/dist/backend/llvm/shapes.js.map +1 -1
  176. package/dist/backend/llvm/shapes.test.js +4 -0
  177. package/dist/backend/llvm/shapes.test.js.map +1 -1
  178. package/dist/backend/llvm/speculative-integers.d.ts +10 -1
  179. package/dist/backend/llvm/speculative-integers.js +59 -8
  180. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  181. package/dist/backend/llvm/stack-objects.d.ts +1 -2
  182. package/dist/backend/llvm/stack-objects.js +8 -5
  183. package/dist/backend/llvm/stack-objects.js.map +1 -1
  184. package/dist/backend/llvm/unwind-abi.d.ts +3 -3
  185. package/dist/backend/llvm/unwind-abi.js +8 -3
  186. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  187. package/dist/backend/llvm/walkers.d.ts +12 -0
  188. package/dist/backend/llvm/walkers.js +47 -3
  189. package/dist/backend/llvm/walkers.js.map +1 -1
  190. package/dist/backend/may-throw.js +12 -2
  191. package/dist/backend/may-throw.js.map +1 -1
  192. package/dist/backend/may-throw.test.js +13 -0
  193. package/dist/backend/may-throw.test.js.map +1 -1
  194. package/dist/backend/native/contracts.d.ts +94 -0
  195. package/dist/backend/native/executable.js +134 -10
  196. package/dist/backend/native/executable.js.map +1 -1
  197. package/dist/backend/native/helper-identity-record.d.ts +11 -0
  198. package/dist/backend/native/helper-identity-record.js +76 -0
  199. package/dist/backend/native/helper-identity-record.js.map +1 -0
  200. package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
  201. package/dist/backend/native/helper-identity-record.test.js +101 -0
  202. package/dist/backend/native/helper-identity-record.test.js.map +1 -0
  203. package/dist/backend/native/library.js +10 -2
  204. package/dist/backend/native/library.js.map +1 -1
  205. package/dist/backend/native/runtime-inputs.js +8 -1
  206. package/dist/backend/native/runtime-inputs.js.map +1 -1
  207. package/dist/backend/native/vendor.d.ts +1 -1
  208. package/dist/backend/native/vendor.js +1 -1
  209. package/dist/backend/native/vendor.js.map +1 -1
  210. package/dist/backend/native-codegen-core.d.ts +13 -10
  211. package/dist/backend/native-codegen-core.js +26 -13
  212. package/dist/backend/native-codegen-core.js.map +1 -1
  213. package/dist/backend/native-codegen.js +30 -8
  214. package/dist/backend/native-codegen.js.map +1 -1
  215. package/dist/backend/native-codegen.test.js +110 -14
  216. package/dist/backend/native-codegen.test.js.map +1 -1
  217. package/dist/backend/native-link-info-core.d.ts +72 -0
  218. package/dist/backend/native-link-info-core.js.map +1 -1
  219. package/dist/backend/native-link-info.js +1 -0
  220. package/dist/backend/native-link-info.js.map +1 -1
  221. package/dist/backend/native-profile.d.ts +4 -1
  222. package/dist/backend/native-profile.js +12 -1
  223. package/dist/backend/native-profile.js.map +1 -1
  224. package/dist/backend/native-profile.test.js +10 -0
  225. package/dist/backend/native-profile.test.js.map +1 -1
  226. package/dist/backend/publication.d.ts +4 -1
  227. package/dist/backend/publication.js +4 -2
  228. package/dist/backend/publication.js.map +1 -1
  229. package/dist/backend/runtime-abi.d.ts +2 -2
  230. package/dist/backend/runtime-abi.js +2 -2
  231. package/dist/backend/runtime-pack-core.d.ts +46 -7
  232. package/dist/backend/runtime-pack-core.js +37 -2
  233. package/dist/backend/runtime-pack-core.js.map +1 -1
  234. package/dist/backend/runtime-pack-native.d.ts +18 -1
  235. package/dist/backend/runtime-pack-native.js +138 -29
  236. package/dist/backend/runtime-pack-native.js.map +1 -1
  237. package/dist/backend/runtime-pack-native.test.js +166 -4
  238. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  239. package/dist/backend/runtime-pack-targets.test.js +3 -1
  240. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  241. package/dist/backend/runtime-pack.d.ts +7 -0
  242. package/dist/backend/runtime-pack.js +25 -3
  243. package/dist/backend/runtime-pack.js.map +1 -1
  244. package/dist/backend/runtime-pack.test.js +213 -12
  245. package/dist/backend/runtime-pack.test.js.map +1 -1
  246. package/dist/backend/tree-classes.d.ts +42 -0
  247. package/dist/backend/tree-classes.js +723 -0
  248. package/dist/backend/tree-classes.js.map +1 -0
  249. package/dist/backend/tree-classes.test.d.ts +1 -0
  250. package/dist/backend/tree-classes.test.js +338 -0
  251. package/dist/backend/tree-classes.test.js.map +1 -0
  252. package/dist/backend/vendor-archives.d.ts +8 -1
  253. package/dist/backend/vendor-archives.js +313 -8
  254. package/dist/backend/vendor-archives.js.map +1 -1
  255. package/dist/backend/vendor-inputs.d.ts +60 -3
  256. package/dist/backend/vendor-inputs.js +109 -3
  257. package/dist/backend/vendor-inputs.js.map +1 -1
  258. package/dist/backend/vendor-inputs.test.js +62 -1
  259. package/dist/backend/vendor-inputs.test.js.map +1 -1
  260. package/dist/backend/warm-cache.js +2 -0
  261. package/dist/backend/warm-cache.js.map +1 -1
  262. package/dist/compat/fetch-profile.d.ts +7 -1
  263. package/dist/compat/fetch-profile.js +25 -12
  264. package/dist/compat/fetch-profile.js.map +1 -1
  265. package/dist/compile-types.d.ts +7 -0
  266. package/dist/contracts/check.d.ts +3 -0
  267. package/dist/contracts/check.js +18 -5
  268. package/dist/contracts/check.js.map +1 -1
  269. package/dist/coverage/report.js +47 -0
  270. package/dist/coverage/report.js.map +1 -1
  271. package/dist/coverage/surface-manifest.js +1 -1
  272. package/dist/coverage/surface-manifest.js.map +1 -1
  273. package/dist/diagnostics/codes.d.ts +14 -0
  274. package/dist/diagnostics/codes.js +14 -0
  275. package/dist/diagnostics/codes.js.map +1 -1
  276. package/dist/diagnostics/diagnostic.d.ts +68 -0
  277. package/dist/diagnostics/diagnostic.js +186 -6
  278. package/dist/diagnostics/diagnostic.js.map +1 -1
  279. package/dist/diagnostics/dynamic-tier.js +3 -1
  280. package/dist/diagnostics/dynamic-tier.js.map +1 -1
  281. package/dist/diagnostics/envelope.d.ts +18 -0
  282. package/dist/diagnostics/envelope.js.map +1 -1
  283. package/dist/executable/executable-cache.d.ts +48 -0
  284. package/dist/executable/executable-cache.js +38 -0
  285. package/dist/executable/executable-cache.js.map +1 -1
  286. package/dist/executable/executable-cache.test.js +127 -1
  287. package/dist/executable/executable-cache.test.js.map +1 -1
  288. package/dist/executable/prepare.d.ts +13 -3
  289. package/dist/executable/prepare.js +438 -234
  290. package/dist/executable/prepare.js.map +1 -1
  291. package/dist/frontend/analysis.js +200 -18
  292. package/dist/frontend/analysis.js.map +1 -1
  293. package/dist/frontend/builtin-modules.d.ts +4 -0
  294. package/dist/frontend/builtin-modules.js +10 -0
  295. package/dist/frontend/builtin-modules.js.map +1 -1
  296. package/dist/frontend/early-errors.d.ts +24 -0
  297. package/dist/frontend/early-errors.js +836 -0
  298. package/dist/frontend/early-errors.js.map +1 -0
  299. package/dist/frontend/early-errors.test.d.ts +1 -0
  300. package/dist/frontend/early-errors.test.js +207 -0
  301. package/dist/frontend/early-errors.test.js.map +1 -0
  302. package/dist/frontend/inferred-js-diagnostics.test.js +88 -0
  303. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  304. package/dist/frontend/input-tracker.d.ts +47 -0
  305. package/dist/frontend/input-tracker.js +173 -36
  306. package/dist/frontend/input-tracker.js.map +1 -1
  307. package/dist/frontend/input-tracker.test.js +86 -2
  308. package/dist/frontend/input-tracker.test.js.map +1 -1
  309. package/dist/frontend/js-inference.d.ts +2 -0
  310. package/dist/frontend/js-inference.js +18 -0
  311. package/dist/frontend/js-inference.js.map +1 -0
  312. package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
  313. package/dist/frontend/jsx-opinion-sites.test.js +86 -0
  314. package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
  315. package/dist/frontend/lib-exports.d.ts +23 -4
  316. package/dist/frontend/lib-exports.js +98 -26
  317. package/dist/frontend/lib-exports.js.map +1 -1
  318. package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
  319. package/dist/frontend/lowering/binding-analysis.js +86 -4
  320. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  321. package/dist/frontend/lowering/buffers.d.ts +8 -0
  322. package/dist/frontend/lowering/buffers.js +43 -0
  323. package/dist/frontend/lowering/buffers.js.map +1 -0
  324. package/dist/frontend/lowering/builtin-calls.js +13 -0
  325. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  326. package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
  327. package/dist/frontend/lowering/builtin-namespaces.js +41 -3
  328. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  329. package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
  330. package/dist/frontend/lowering/builtin-statics.js +407 -0
  331. package/dist/frontend/lowering/builtin-statics.js.map +1 -0
  332. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  333. package/dist/frontend/lowering/builtins/arguments.js +12 -0
  334. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  335. package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
  336. package/dist/frontend/lowering/builtins/atomics.js +87 -1
  337. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  338. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
  339. package/dist/frontend/lowering/builtins/child-process-methods.js +52 -12
  340. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  341. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
  342. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
  343. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  344. package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
  345. package/dist/frontend/lowering/builtins/child-process.js +565 -28
  346. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  347. package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
  348. package/dist/frontend/lowering/builtins/compression.js +41 -21
  349. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  350. package/dist/frontend/lowering/builtins/constants.js +7 -2
  351. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  352. package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
  353. package/dist/frontend/lowering/builtins/dates.js +23 -1
  354. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  355. package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
  356. package/dist/frontend/lowering/builtins/environment.js +213 -2
  357. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  358. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  359. package/dist/frontend/lowering/builtins/filesystem-calls.js +75 -18
  360. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  361. package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
  362. package/dist/frontend/lowering/builtins/filesystem.js +185 -16
  363. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  364. package/dist/frontend/lowering/builtins/json.js +4 -0
  365. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  366. package/dist/frontend/lowering/builtins/module-calls.js +42 -3
  367. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  368. package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
  369. package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
  370. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  371. package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
  372. package/dist/frontend/lowering/builtins/numbers.js +10 -2
  373. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  374. package/dist/frontend/lowering/builtins/operating-system.d.ts +9 -5
  375. package/dist/frontend/lowering/builtins/operating-system.js +101 -20
  376. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  377. package/dist/frontend/lowering/builtins/process.d.ts +18 -2
  378. package/dist/frontend/lowering/builtins/process.js +386 -25
  379. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  380. package/dist/frontend/lowering/builtins/promises.js +169 -8
  381. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  382. package/dist/frontend/lowering/builtins/properties.js +6 -2
  383. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  384. package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
  385. package/dist/frontend/lowering/builtins/querystring.js +202 -18
  386. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  387. package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
  388. package/dist/frontend/lowering/builtins/readline.js +200 -38
  389. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  390. package/dist/frontend/lowering/builtins/reflection.js +60 -1
  391. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  392. package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
  393. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  394. package/dist/frontend/lowering/builtins/url.js +55 -13
  395. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  396. package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
  397. package/dist/frontend/lowering/builtins/v8.js +7 -5
  398. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  399. package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
  400. package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
  401. package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
  402. package/dist/frontend/lowering/builtins/webassembly.js +2 -0
  403. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  404. package/dist/frontend/lowering/call-arguments.d.ts +10 -0
  405. package/dist/frontend/lowering/call-arguments.js +37 -2
  406. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  407. package/dist/frontend/lowering/call-signatures.d.ts +10 -0
  408. package/dist/frontend/lowering/call-signatures.js +180 -0
  409. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  410. package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
  411. package/dist/frontend/lowering/cjs-exports-object.js +1 -1
  412. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  413. package/dist/frontend/lowering/cjs-inline-require.js +5 -0
  414. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  415. package/dist/frontend/lowering/class-construction.d.ts +14 -2
  416. package/dist/frontend/lowering/class-construction.js +99 -5
  417. package/dist/frontend/lowering/class-construction.js.map +1 -1
  418. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +14 -0
  419. package/dist/frontend/lowering/class-dynamic-dispatch.js +1376 -1009
  420. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  421. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
  422. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  423. package/dist/frontend/lowering/class-protocols.js +59 -10
  424. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  425. package/dist/frontend/lowering/class-prototypes.js +20 -15
  426. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  427. package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
  428. package/dist/frontend/lowering/class-runtime-statics.js +35 -1
  429. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  430. package/dist/frontend/lowering/class-unions.js +21 -4
  431. package/dist/frontend/lowering/class-unions.js.map +1 -1
  432. package/dist/frontend/lowering/class-views.d.ts +13 -0
  433. package/dist/frontend/lowering/class-views.js +51 -0
  434. package/dist/frontend/lowering/class-views.js.map +1 -0
  435. package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
  436. package/dist/frontend/lowering/coercions/function-adapters.js +63 -10
  437. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  438. package/dist/frontend/lowering/coercions/state.d.ts +15 -0
  439. package/dist/frontend/lowering/coercions/state.js +24 -0
  440. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  441. package/dist/frontend/lowering/coercions/structural-plans.js +75 -3
  442. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  443. package/dist/frontend/lowering/coercions/structural.js +39 -2
  444. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  445. package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
  446. package/dist/frontend/lowering/coercions/unions.js +54 -10
  447. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  448. package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
  449. package/dist/frontend/lowering/constructor-returns.js +284 -58
  450. package/dist/frontend/lowering/constructor-returns.js.map +1 -1
  451. package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
  452. package/dist/frontend/lowering/containers/array-callbacks.js +288 -90
  453. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  454. package/dist/frontend/lowering/containers/array-construction.js +37 -8
  455. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  456. package/dist/frontend/lowering/containers/array-from-async.js +139 -3
  457. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  458. package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
  459. package/dist/frontend/lowering/containers/array-iteration.js +24 -7
  460. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
  461. package/dist/frontend/lowering/containers/array-methods.js +30 -11
  462. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  463. package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
  464. package/dist/frontend/lowering/containers/bytes.js +450 -86
  465. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  466. package/dist/frontend/lowering/containers/callback-arguments.d.ts +16 -0
  467. package/dist/frontend/lowering/containers/callback-arguments.js +74 -12
  468. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  469. package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
  470. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  471. package/dist/frontend/lowering/containers/collection-methods.js +52 -17
  472. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  473. package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
  474. package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
  475. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  476. package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
  477. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  478. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
  479. package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
  480. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  481. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
  482. package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
  483. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  484. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  485. package/dist/frontend/lowering/crypto-tables.js +5 -5
  486. package/dist/frontend/lowering/dispatch-sites.js +3 -0
  487. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  488. package/dist/frontend/lowering/divergences.d.ts +40 -0
  489. package/dist/frontend/lowering/divergences.js +239 -20
  490. package/dist/frontend/lowering/divergences.js.map +1 -1
  491. package/dist/frontend/lowering/effect-free.d.ts +12 -0
  492. package/dist/frontend/lowering/effect-free.js +44 -0
  493. package/dist/frontend/lowering/effect-free.js.map +1 -0
  494. package/dist/frontend/lowering/expressions/array-literals.d.ts +24 -0
  495. package/dist/frontend/lowering/expressions/array-literals.js +88 -10
  496. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  497. package/dist/frontend/lowering/expressions/binary.js +216 -14
  498. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  499. package/dist/frontend/lowering/expressions/element-access.js +272 -11
  500. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  501. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
  502. package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
  503. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
  504. package/dist/frontend/lowering/expressions/identifiers.js +173 -4
  505. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  506. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
  507. package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
  508. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
  509. package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
  510. package/dist/frontend/lowering/expressions/narrowing.js +195 -18
  511. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  512. package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
  513. package/dist/frontend/lowering/expressions/object-literals.js +951 -240
  514. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  515. package/dist/frontend/lowering/expressions/optional-chains.js +71 -21
  516. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  517. package/dist/frontend/lowering/expressions/property-access.d.ts +39 -0
  518. package/dist/frontend/lowering/expressions/property-access.js +1141 -87
  519. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  520. package/dist/frontend/lowering/expressions/relational.js +262 -4
  521. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  522. package/dist/frontend/lowering/expressions/typeof.js +25 -0
  523. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  524. package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
  525. package/dist/frontend/lowering/expressions/union-fields.js +103 -13
  526. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  527. package/dist/frontend/lowering/expressions/updates.js +156 -22
  528. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  529. package/dist/frontend/lowering/frozen-records.d.ts +6 -0
  530. package/dist/frontend/lowering/frozen-records.js +10 -4
  531. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  532. package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
  533. package/dist/frontend/lowering/frozen-records.test.js +44 -0
  534. package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
  535. package/dist/frontend/lowering/function-names.d.ts +9 -0
  536. package/dist/frontend/lowering/function-names.js +95 -0
  537. package/dist/frontend/lowering/function-names.js.map +1 -0
  538. package/dist/frontend/lowering/function-returns.js +42 -13
  539. package/dist/frontend/lowering/function-returns.js.map +1 -1
  540. package/dist/frontend/lowering/general-streams.js +5 -0
  541. package/dist/frontend/lowering/general-streams.js.map +1 -1
  542. package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
  543. package/dist/frontend/lowering/generator-delegation.js +301 -118
  544. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  545. package/dist/frontend/lowering/generic-functions.d.ts +75 -0
  546. package/dist/frontend/lowering/generic-functions.js +790 -18
  547. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  548. package/dist/frontend/lowering/global-function-values.d.ts +25 -0
  549. package/dist/frontend/lowering/global-function-values.js +193 -0
  550. package/dist/frontend/lowering/global-function-values.js.map +1 -0
  551. package/dist/frontend/lowering/global-values.d.ts +15 -4
  552. package/dist/frontend/lowering/global-values.js +67 -9
  553. package/dist/frontend/lowering/global-values.js.map +1 -1
  554. package/dist/frontend/lowering/handle-properties.js +34 -1
  555. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  556. package/dist/frontend/lowering/host-global-values.d.ts +31 -0
  557. package/dist/frontend/lowering/host-global-values.js +121 -0
  558. package/dist/frontend/lowering/host-global-values.js.map +1 -0
  559. package/dist/frontend/lowering/host-globals.d.ts +74 -0
  560. package/dist/frontend/lowering/host-globals.js +344 -0
  561. package/dist/frontend/lowering/host-globals.js.map +1 -0
  562. package/dist/frontend/lowering/http2-constants.js +1 -1
  563. package/dist/frontend/lowering/iterator-adapters.js +46 -17
  564. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  565. package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
  566. package/dist/frontend/lowering/iterator-prototype.js +160 -0
  567. package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
  568. package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
  569. package/dist/frontend/lowering/key-order-witness.js +571 -9
  570. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  571. package/dist/frontend/lowering/key-order-witness.test.js +1 -0
  572. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  573. package/dist/frontend/lowering/lib-boundary.js +25 -3
  574. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  575. package/dist/frontend/lowering/lower-assert.js +140 -16
  576. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  577. package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
  578. package/dist/frontend/lowering/lower-async-iteration.js +15 -0
  579. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  580. package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
  581. package/dist/frontend/lowering/lower-builtin-values.js +342 -58
  582. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  583. package/dist/frontend/lowering/lower-calls.d.ts +47 -1
  584. package/dist/frontend/lowering/lower-calls.js +1354 -273
  585. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  586. package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
  587. package/dist/frontend/lowering/lower-calls.test.js +121 -0
  588. package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
  589. package/dist/frontend/lowering/lower-classes.d.ts +36 -5
  590. package/dist/frontend/lowering/lower-classes.js +630 -89
  591. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  592. package/dist/frontend/lowering/lower-event-emitter.d.ts +15 -2
  593. package/dist/frontend/lowering/lower-event-emitter.js +610 -98
  594. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  595. package/dist/frontend/lowering/lower-exprs.d.ts +15 -1
  596. package/dist/frontend/lowering/lower-exprs.js +96 -20
  597. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  598. package/dist/frontend/lowering/lower-functions.js +27 -6
  599. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  600. package/dist/frontend/lowering/lower-generators.js +57 -10
  601. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  602. package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
  603. package/dist/frontend/lowering/lower-global-value.js +14 -5
  604. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  605. package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
  606. package/dist/frontend/lowering/lower-inspect.js +713 -92
  607. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  608. package/dist/frontend/lowering/lower-modules.js +135 -27
  609. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  610. package/dist/frontend/lowering/lower-namespaces.js +18 -0
  611. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  612. package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
  613. package/dist/frontend/lowering/lower-node-island.js +472 -67
  614. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  615. package/dist/frontend/lowering/lower-server.js +463 -96
  616. package/dist/frontend/lowering/lower-server.js.map +1 -1
  617. package/dist/frontend/lowering/lower-shared-modules.js +13 -1
  618. package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
  619. package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
  620. package/dist/frontend/lowering/lower-stdlib.js +77 -18
  621. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  622. package/dist/frontend/lowering/lower-stmts.d.ts +24 -4
  623. package/dist/frontend/lowering/lower-stmts.js +831 -136
  624. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  625. package/dist/frontend/lowering/lower-stream.js +126 -8
  626. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  627. package/dist/frontend/lowering/lower-timers.js +243 -48
  628. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  629. package/dist/frontend/lowering/lower-url.js +6 -3
  630. package/dist/frontend/lowering/lower-url.js.map +1 -1
  631. package/dist/frontend/lowering/lowerer.d.ts +363 -21
  632. package/dist/frontend/lowering/lowerer.js +1224 -129
  633. package/dist/frontend/lowering/lowerer.js.map +1 -1
  634. package/dist/frontend/lowering/lowerer.test.js +19 -1
  635. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  636. package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
  637. package/dist/frontend/lowering/lowering-facts.js +323 -0
  638. package/dist/frontend/lowering/lowering-facts.js.map +1 -0
  639. package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
  640. package/dist/frontend/lowering/lowering-facts.test.js +100 -0
  641. package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
  642. package/dist/frontend/lowering/module-namespace-elements.js +15 -0
  643. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  644. package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
  645. package/dist/frontend/lowering/nan-coded-reads.js +112 -9
  646. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  647. package/dist/frontend/lowering/new-target.js +2 -2
  648. package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
  649. package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
  650. package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
  651. package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
  652. package/dist/frontend/lowering/optional-arguments.js +26 -2
  653. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  654. package/dist/frontend/lowering/partial-assertions.d.ts +36 -0
  655. package/dist/frontend/lowering/partial-assertions.js +189 -0
  656. package/dist/frontend/lowering/partial-assertions.js.map +1 -0
  657. package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
  658. package/dist/frontend/lowering/primitive-throws.js +241 -0
  659. package/dist/frontend/lowering/primitive-throws.js.map +1 -0
  660. package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
  661. package/dist/frontend/lowering/primitive-wrappers.js +221 -0
  662. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
  663. package/dist/frontend/lowering/private-statics.d.ts +46 -0
  664. package/dist/frontend/lowering/private-statics.js +322 -0
  665. package/dist/frontend/lowering/private-statics.js.map +1 -0
  666. package/dist/frontend/lowering/record-inherited.d.ts +17 -1
  667. package/dist/frontend/lowering/record-inherited.js +16 -2
  668. package/dist/frontend/lowering/record-inherited.js.map +1 -1
  669. package/dist/frontend/lowering/record-links.d.ts +73 -0
  670. package/dist/frontend/lowering/record-links.js +797 -0
  671. package/dist/frontend/lowering/record-links.js.map +1 -0
  672. package/dist/frontend/lowering/record-sources.d.ts +12 -1
  673. package/dist/frontend/lowering/record-sources.js +60 -0
  674. package/dist/frontend/lowering/record-sources.js.map +1 -1
  675. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
  676. package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
  677. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  678. package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
  679. package/dist/frontend/lowering/runtime-optional-report.js +300 -0
  680. package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
  681. package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
  682. package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
  683. package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
  684. package/dist/frontend/lowering/static-typeof.d.ts +3 -1
  685. package/dist/frontend/lowering/static-typeof.js +6 -1
  686. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  687. package/dist/frontend/lowering/strict-equality.d.ts +4 -0
  688. package/dist/frontend/lowering/strict-equality.js +14 -0
  689. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  690. package/dist/frontend/lowering/strict-mode.d.ts +1 -5
  691. package/dist/frontend/lowering/strict-mode.js +4 -30
  692. package/dist/frontend/lowering/strict-mode.js.map +1 -1
  693. package/dist/frontend/lowering/structural-instances.d.ts +7 -0
  694. package/dist/frontend/lowering/structural-instances.js +23 -0
  695. package/dist/frontend/lowering/structural-instances.js.map +1 -1
  696. package/dist/frontend/lowering/surfaces.d.ts +42 -1
  697. package/dist/frontend/lowering/surfaces.js +212 -71
  698. package/dist/frontend/lowering/surfaces.js.map +1 -1
  699. package/dist/frontend/lowering/union-retag.d.ts +13 -1
  700. package/dist/frontend/lowering/union-retag.js +55 -1
  701. package/dist/frontend/lowering/union-retag.js.map +1 -1
  702. package/dist/frontend/lowering/union-retag.test.js +51 -0
  703. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  704. package/dist/frontend/lowering/unit-journal.d.ts +136 -17
  705. package/dist/frontend/lowering/unit-journal.js +324 -53
  706. package/dist/frontend/lowering/unit-journal.js.map +1 -1
  707. package/dist/frontend/lowering/unit-journal.test.js +126 -3
  708. package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
  709. package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
  710. package/dist/frontend/lowering/unit-reuse.js +1008 -0
  711. package/dist/frontend/lowering/unit-reuse.js.map +1 -0
  712. package/dist/frontend/lowering/width-lift.d.ts +12 -0
  713. package/dist/frontend/lowering/zlib-constants.js +3 -2
  714. package/dist/frontend/lowering/zlib-constants.js.map +1 -1
  715. package/dist/frontend/npm-file-import.test.d.ts +1 -0
  716. package/dist/frontend/npm-file-import.test.js +76 -0
  717. package/dist/frontend/npm-file-import.test.js.map +1 -0
  718. package/dist/frontend/npm-static.js +95 -11
  719. package/dist/frontend/npm-static.js.map +1 -1
  720. package/dist/frontend/npm-static.test.js +95 -2
  721. package/dist/frontend/npm-static.test.js.map +1 -1
  722. package/dist/frontend/npm.d.ts +9 -0
  723. package/dist/frontend/npm.js +82 -0
  724. package/dist/frontend/npm.js.map +1 -1
  725. package/dist/frontend/pipeline-native.js +2 -1
  726. package/dist/frontend/pipeline-native.js.map +1 -1
  727. package/dist/frontend/pipeline.d.ts +9 -4
  728. package/dist/frontend/pipeline.js +162 -38
  729. package/dist/frontend/pipeline.js.map +1 -1
  730. package/dist/frontend/pipeline.test.js +68 -11
  731. package/dist/frontend/pipeline.test.js.map +1 -1
  732. package/dist/frontend/program-node.d.ts +3 -0
  733. package/dist/frontend/program-node.js +13 -6
  734. package/dist/frontend/program-node.js.map +1 -1
  735. package/dist/frontend/program.d.ts +71 -2
  736. package/dist/frontend/program.js +836 -411
  737. package/dist/frontend/program.js.map +1 -1
  738. package/dist/frontend/program.test.js +37 -1
  739. package/dist/frontend/program.test.js.map +1 -1
  740. package/dist/frontend/provenance-core.js +4 -0
  741. package/dist/frontend/provenance-core.js.map +1 -1
  742. package/dist/frontend/services-node.d.ts +7 -0
  743. package/dist/frontend/services-node.js +32 -1
  744. package/dist/frontend/services-node.js.map +1 -1
  745. package/dist/frontend/services-node.test.js +51 -0
  746. package/dist/frontend/services-node.test.js.map +1 -1
  747. package/dist/frontend/services.d.ts +14 -0
  748. package/dist/frontend/services.js +52 -2
  749. package/dist/frontend/services.js.map +1 -1
  750. package/dist/frontend/services.test.js +61 -1
  751. package/dist/frontend/services.test.js.map +1 -1
  752. package/dist/frontend/shape-inference/analyze.d.ts +5 -0
  753. package/dist/frontend/shape-inference/analyze.js +104 -4
  754. package/dist/frontend/shape-inference/analyze.js.map +1 -1
  755. package/dist/frontend/shape-inference/domain.js +0 -1
  756. package/dist/frontend/shape-inference/domain.js.map +1 -1
  757. package/dist/frontend/shape-inference/index.js +5 -1
  758. package/dist/frontend/shape-inference/index.js.map +1 -1
  759. package/dist/frontend/shape-inference/memo.d.ts +2 -1
  760. package/dist/frontend/shape-inference/memo.js +6 -2
  761. package/dist/frontend/shape-inference/memo.js.map +1 -1
  762. package/dist/frontend/shape-inference/overlay.d.ts +1 -1
  763. package/dist/frontend/shape-inference/overlay.js +184 -4
  764. package/dist/frontend/shape-inference/overlay.js.map +1 -1
  765. package/dist/frontend/shape-inference/static-objects.js +11 -6
  766. package/dist/frontend/shape-inference/static-objects.js.map +1 -1
  767. package/dist/frontend/source-phase-imports.test.d.ts +1 -0
  768. package/dist/frontend/source-phase-imports.test.js +37 -0
  769. package/dist/frontend/source-phase-imports.test.js.map +1 -0
  770. package/dist/frontend/tier-analysis.d.ts +9 -0
  771. package/dist/frontend/tier-analysis.js +1 -0
  772. package/dist/frontend/tier-analysis.js.map +1 -1
  773. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  774. package/dist/frontend/ts7/ast-node.js +12 -0
  775. package/dist/frontend/ts7/ast-node.js.map +1 -1
  776. package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
  777. package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
  778. package/dist/frontend/ts7/ast-wire.js +3 -5
  779. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  780. package/dist/frontend/ts7/checker-backend.d.ts +13 -0
  781. package/dist/frontend/ts7/checker-backend.js +84 -2
  782. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  783. package/dist/frontend/ts7/checker-backend.test.js +126 -2
  784. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  785. package/dist/frontend/ts7/program-host.d.ts +22 -1
  786. package/dist/frontend/ts7/program-host.js +49 -4
  787. package/dist/frontend/ts7/program-host.js.map +1 -1
  788. package/dist/frontend/ts7/program-host.test.js +83 -0
  789. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  790. package/dist/frontend/ts7/rpc-process.d.ts +16 -1
  791. package/dist/frontend/ts7/rpc-process.js +170 -92
  792. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  793. package/dist/frontend/ts7/rpc-process.test.js +49 -21
  794. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  795. package/dist/frontend/tsc-codes.d.ts +57 -3
  796. package/dist/frontend/tsc-codes.js +956 -101
  797. package/dist/frontend/tsc-codes.js.map +1 -1
  798. package/dist/frontend/tsc-codes.test.js +221 -12
  799. package/dist/frontend/tsc-codes.test.js.map +1 -1
  800. package/dist/frontend/type-mapper.d.ts +98 -11
  801. package/dist/frontend/type-mapper.js +770 -182
  802. package/dist/frontend/type-mapper.js.map +1 -1
  803. package/dist/index.d.ts +1 -1
  804. package/dist/index.js +224 -15
  805. package/dist/index.js.map +1 -1
  806. package/dist/index.test.d.ts +1 -0
  807. package/dist/index.test.js +60 -0
  808. package/dist/index.test.js.map +1 -0
  809. package/dist/ir/api.d.ts +1 -1
  810. package/dist/ir/api.js +1 -1
  811. package/dist/ir/api.js.map +1 -1
  812. package/dist/ir/build.d.ts +3 -2
  813. package/dist/ir/build.js +4 -2
  814. package/dist/ir/build.js.map +1 -1
  815. package/dist/ir/builtin-effects.js +96 -0
  816. package/dist/ir/builtin-effects.js.map +1 -1
  817. package/dist/ir/builtin-signatures.d.ts +1 -1
  818. package/dist/ir/builtin-signatures.js +453 -26
  819. package/dist/ir/builtin-signatures.js.map +1 -1
  820. package/dist/ir/callback-specialization.d.ts +3 -2
  821. package/dist/ir/callback-specialization.js +35 -25
  822. package/dist/ir/callback-specialization.js.map +1 -1
  823. package/dist/ir/capture-values.d.ts +8 -4
  824. package/dist/ir/capture-values.js +9 -6
  825. package/dist/ir/capture-values.js.map +1 -1
  826. package/dist/ir/char-unit-locals.d.ts +6 -2
  827. package/dist/ir/char-unit-locals.js +11 -2
  828. package/dist/ir/char-unit-locals.js.map +1 -1
  829. package/dist/ir/class-key-index.d.ts +18 -0
  830. package/dist/ir/class-key-index.js +29 -0
  831. package/dist/ir/class-key-index.js.map +1 -0
  832. package/dist/ir/class-key-index.test.d.ts +1 -0
  833. package/dist/ir/class-key-index.test.js +25 -0
  834. package/dist/ir/class-key-index.test.js.map +1 -0
  835. package/dist/ir/codec.d.ts +82 -0
  836. package/dist/ir/codec.generated.d.ts +13 -0
  837. package/dist/ir/codec.generated.js +5350 -0
  838. package/dist/ir/codec.generated.js.map +1 -0
  839. package/dist/ir/codec.js +325 -0
  840. package/dist/ir/codec.js.map +1 -0
  841. package/dist/ir/codec.test.d.ts +1 -0
  842. package/dist/ir/codec.test.js +225 -0
  843. package/dist/ir/codec.test.js.map +1 -0
  844. package/dist/ir/constant-globals.d.ts +5 -2
  845. package/dist/ir/constant-globals.js +25 -27
  846. package/dist/ir/constant-globals.js.map +1 -1
  847. package/dist/ir/expression-inlining.d.ts +4 -2
  848. package/dist/ir/expression-inlining.js +8 -2
  849. package/dist/ir/expression-inlining.js.map +1 -1
  850. package/dist/ir/field-values.d.ts +5 -2
  851. package/dist/ir/field-values.js +32 -21
  852. package/dist/ir/field-values.js.map +1 -1
  853. package/dist/ir/fields.generated.d.ts +29 -10
  854. package/dist/ir/fields.generated.js +1039 -11
  855. package/dist/ir/fields.generated.js.map +1 -1
  856. package/dist/ir/fields.test.js +46 -2
  857. package/dist/ir/fields.test.js.map +1 -1
  858. package/dist/ir/final-fields.js +1 -1
  859. package/dist/ir/final-fields.js.map +1 -1
  860. package/dist/ir/function-references.d.ts +6 -4
  861. package/dist/ir/function-references.js +11 -4
  862. package/dist/ir/function-references.js.map +1 -1
  863. package/dist/ir/function-references.test.js +14 -0
  864. package/dist/ir/function-references.test.js.map +1 -1
  865. package/dist/ir/init-only-globals.d.ts +4 -2
  866. package/dist/ir/init-only-globals.js +17 -18
  867. package/dist/ir/init-only-globals.js.map +1 -1
  868. package/dist/ir/inline-array-sources.js +4 -1
  869. package/dist/ir/inline-array-sources.js.map +1 -1
  870. package/dist/ir/inline-array-views.d.ts +13 -0
  871. package/dist/ir/inline-array-views.js +945 -0
  872. package/dist/ir/inline-array-views.js.map +1 -0
  873. package/dist/ir/inline-arrays.d.ts +7 -0
  874. package/dist/ir/inline-arrays.js +190 -55
  875. package/dist/ir/inline-arrays.js.map +1 -1
  876. package/dist/ir/inline-arrays.test.js +140 -2
  877. package/dist/ir/inline-arrays.test.js.map +1 -1
  878. package/dist/ir/int32-slots.js +7 -0
  879. package/dist/ir/int32-slots.js.map +1 -1
  880. package/dist/ir/integer-ranges.js +16 -6
  881. package/dist/ir/integer-ranges.js.map +1 -1
  882. package/dist/ir/ir.d.ts +130 -44
  883. package/dist/ir/ir.js +7 -0
  884. package/dist/ir/ir.js.map +1 -1
  885. package/dist/ir/js-groups.d.ts +51 -0
  886. package/dist/ir/js-groups.js +394 -0
  887. package/dist/ir/js-groups.js.map +1 -0
  888. package/dist/ir/js-groups.test.d.ts +1 -0
  889. package/dist/ir/js-groups.test.js +555 -0
  890. package/dist/ir/js-groups.test.js.map +1 -0
  891. package/dist/ir/js-ic.d.ts +10 -9
  892. package/dist/ir/js-ic.js +58 -25
  893. package/dist/ir/js-ic.js.map +1 -1
  894. package/dist/ir/js-ic.test.js +37 -3
  895. package/dist/ir/js-ic.test.js.map +1 -1
  896. package/dist/ir/jsval.js +374 -63
  897. package/dist/ir/jsval.js.map +1 -1
  898. package/dist/ir/jsval.test.js +96 -2
  899. package/dist/ir/jsval.test.js.map +1 -1
  900. package/dist/ir/loop-entry-ranges.js +112 -9
  901. package/dist/ir/loop-entry-ranges.js.map +1 -1
  902. package/dist/ir/loop-entry-ranges.test.js +40 -0
  903. package/dist/ir/loop-entry-ranges.test.js.map +1 -1
  904. package/dist/ir/node-index.d.ts +23 -6
  905. package/dist/ir/node-index.js +126 -49
  906. package/dist/ir/node-index.js.map +1 -1
  907. package/dist/ir/numeric-call-specialization.d.ts +4 -2
  908. package/dist/ir/numeric-call-specialization.js +40 -26
  909. package/dist/ir/numeric-call-specialization.js.map +1 -1
  910. package/dist/ir/paired-while-loops.d.ts +4 -2
  911. package/dist/ir/paired-while-loops.js +8 -2
  912. package/dist/ir/paired-while-loops.js.map +1 -1
  913. package/dist/ir/parameter-versions.d.ts +13 -3
  914. package/dist/ir/parameter-versions.js +63 -40
  915. package/dist/ir/parameter-versions.js.map +1 -1
  916. package/dist/ir/property-bags.d.ts +4 -2
  917. package/dist/ir/property-bags.js +22 -17
  918. package/dist/ir/property-bags.js.map +1 -1
  919. package/dist/ir/receiver-readers.js +58 -2
  920. package/dist/ir/receiver-readers.js.map +1 -1
  921. package/dist/ir/row-pairs.d.ts +4 -2
  922. package/dist/ir/row-pairs.js +12 -11
  923. package/dist/ir/row-pairs.js.map +1 -1
  924. package/dist/ir/runtime-features.d.ts +139 -5
  925. package/dist/ir/runtime-features.js +397 -19
  926. package/dist/ir/runtime-features.js.map +1 -1
  927. package/dist/ir/runtime-features.test.js +135 -1
  928. package/dist/ir/runtime-features.test.js.map +1 -1
  929. package/dist/ir/runtime-jam-loops.d.ts +35 -0
  930. package/dist/ir/runtime-jam-loops.js +604 -0
  931. package/dist/ir/runtime-jam-loops.js.map +1 -0
  932. package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
  933. package/dist/ir/runtime-jam-loops.test.js +565 -0
  934. package/dist/ir/runtime-jam-loops.test.js.map +1 -0
  935. package/dist/ir/saturating-loop-jams.d.ts +11 -2
  936. package/dist/ir/saturating-loop-jams.js +56 -16
  937. package/dist/ir/saturating-loop-jams.js.map +1 -1
  938. package/dist/ir/saturating-loop-jams.test.js +39 -1
  939. package/dist/ir/saturating-loop-jams.test.js.map +1 -1
  940. package/dist/ir/scalar-records.d.ts +5 -2
  941. package/dist/ir/scalar-records.js +12 -2
  942. package/dist/ir/scalar-records.js.map +1 -1
  943. package/dist/ir/self-captures.d.ts +4 -2
  944. package/dist/ir/self-captures.js +40 -28
  945. package/dist/ir/self-captures.js.map +1 -1
  946. package/dist/ir/self-captures.test.js +15 -0
  947. package/dist/ir/self-captures.test.js.map +1 -1
  948. package/dist/ir/serialize.d.ts +8 -2
  949. package/dist/ir/serialize.js +92 -24
  950. package/dist/ir/serialize.js.map +1 -1
  951. package/dist/ir/serialize.test.js +26 -0
  952. package/dist/ir/serialize.test.js.map +1 -1
  953. package/dist/ir/tiers.js +1 -0
  954. package/dist/ir/tiers.js.map +1 -1
  955. package/dist/ir/traverse.js +4 -0
  956. package/dist/ir/traverse.js.map +1 -1
  957. package/dist/ir/typed-argument-clones.d.ts +30 -0
  958. package/dist/ir/typed-argument-clones.js +789 -0
  959. package/dist/ir/typed-argument-clones.js.map +1 -0
  960. package/dist/ir/union-arm-loops.d.ts +3 -0
  961. package/dist/ir/union-arm-loops.js +373 -0
  962. package/dist/ir/union-arm-loops.js.map +1 -0
  963. package/dist/ir/union-arm-loops.test.d.ts +1 -0
  964. package/dist/ir/union-arm-loops.test.js +230 -0
  965. package/dist/ir/union-arm-loops.test.js.map +1 -0
  966. package/dist/ir/validate.js +170 -22
  967. package/dist/ir/validate.js.map +1 -1
  968. package/dist/ir/validate.test.js +46 -0
  969. package/dist/ir/validate.test.js.map +1 -1
  970. package/dist/library/compiler-self-identity.d.ts +8 -2
  971. package/dist/library/compiler-self-identity.js +92 -18
  972. package/dist/library/compiler-self-identity.js.map +1 -1
  973. package/dist/library/compiler-self-identity.test.js +150 -3
  974. package/dist/library/compiler-self-identity.test.js.map +1 -1
  975. package/dist/library/int-infer.d.ts +5 -0
  976. package/dist/library/int-infer.js +15 -3
  977. package/dist/library/int-infer.js.map +1 -1
  978. package/dist/library/ir-policy.js +4 -0
  979. package/dist/library/ir-policy.js.map +1 -1
  980. package/dist/library/library-cache.d.ts +4 -0
  981. package/dist/library/library-cache.js +2 -0
  982. package/dist/library/library-cache.js.map +1 -1
  983. package/dist/library/library-cache.test.js +26 -0
  984. package/dist/library/library-cache.test.js.map +1 -1
  985. package/dist/library/prepare.js +99 -31
  986. package/dist/library/prepare.js.map +1 -1
  987. package/dist/native/cache.d.ts +7 -0
  988. package/dist/native/cache.js +49 -0
  989. package/dist/native/cache.js.map +1 -1
  990. package/dist/native/cache.test.js +13 -1
  991. package/dist/native/cache.test.js.map +1 -1
  992. package/dist/native/cli.js +2 -0
  993. package/dist/native/cli.js.map +1 -1
  994. package/dist/native/compiler.js +26 -5
  995. package/dist/native/compiler.js.map +1 -1
  996. package/dist/native/executable-cache-open.test.js +31 -5
  997. package/dist/native/executable-cache-open.test.js.map +1 -1
  998. package/dist/native/executable-cache.d.ts +6 -1
  999. package/dist/native/executable-cache.js +7 -1
  1000. package/dist/native/executable-cache.js.map +1 -1
  1001. package/dist/native/prepare.d.ts +3 -0
  1002. package/dist/native/prepare.js +74 -28
  1003. package/dist/native/prepare.js.map +1 -1
  1004. package/dist/native/prepare.test.js +25 -3
  1005. package/dist/native/prepare.test.js.map +1 -1
  1006. package/dist/native/sanitizer.js +63 -4
  1007. package/dist/native/sanitizer.js.map +1 -1
  1008. package/dist/native/sanitizer.test.js +93 -2
  1009. package/dist/native/sanitizer.test.js.map +1 -1
  1010. package/dist/native/toolchain.js +9 -2
  1011. package/dist/native/toolchain.js.map +1 -1
  1012. package/dist/node-islands/boundary.d.ts +37 -1
  1013. package/dist/node-islands/boundary.js +65 -7
  1014. package/dist/node-islands/boundary.js.map +1 -1
  1015. package/dist/node-islands/boundary.test.d.ts +1 -0
  1016. package/dist/node-islands/boundary.test.js +76 -0
  1017. package/dist/node-islands/boundary.test.js.map +1 -0
  1018. package/dist/node-islands/detect.d.ts +27 -1
  1019. package/dist/node-islands/detect.js +475 -40
  1020. package/dist/node-islands/detect.js.map +1 -1
  1021. package/dist/node-islands/detect.test.js +175 -4
  1022. package/dist/node-islands/detect.test.js.map +1 -1
  1023. package/dist/node-islands/effect-gate.js +30 -20
  1024. package/dist/node-islands/effect-gate.js.map +1 -1
  1025. package/dist/node-islands/effect-gate.test.js +4 -1
  1026. package/dist/node-islands/effect-gate.test.js.map +1 -1
  1027. package/dist/node-islands/graph-islands.d.ts +40 -0
  1028. package/dist/node-islands/graph-islands.js +128 -0
  1029. package/dist/node-islands/graph-islands.js.map +1 -0
  1030. package/dist/node-islands/growth.d.ts +57 -0
  1031. package/dist/node-islands/growth.js +205 -0
  1032. package/dist/node-islands/growth.js.map +1 -0
  1033. package/dist/node-islands/libnode.d.ts +1 -1
  1034. package/dist/node-islands/libnode.js +1 -1
  1035. package/dist/node-islands/libnode.js.map +1 -1
  1036. package/dist/node-islands/modules.d.ts +28 -0
  1037. package/dist/node-islands/modules.js +156 -0
  1038. package/dist/node-islands/modules.js.map +1 -1
  1039. package/dist/node-islands/modules.test.js +105 -1
  1040. package/dist/node-islands/modules.test.js.map +1 -1
  1041. package/dist/node-islands/policy.js +2 -3
  1042. package/dist/node-islands/policy.js.map +1 -1
  1043. package/dist/node-islands/probe-recorder.d.ts +1 -0
  1044. package/dist/node-islands/probe-recorder.js +596 -0
  1045. package/dist/node-islands/probe-recorder.js.map +1 -0
  1046. package/dist/node-islands/probe-recorder.test.d.ts +1 -0
  1047. package/dist/node-islands/probe-recorder.test.js +80 -0
  1048. package/dist/node-islands/probe-recorder.test.js.map +1 -0
  1049. package/dist/node-islands/report.d.ts +12 -0
  1050. package/dist/node-islands/report.js +28 -0
  1051. package/dist/node-islands/report.js.map +1 -1
  1052. package/dist/node-islands/report.test.js +4 -0
  1053. package/dist/node-islands/report.test.js.map +1 -1
  1054. package/dist/node-islands/rules.js +9 -0
  1055. package/dist/node-islands/rules.js.map +1 -1
  1056. package/dist/node-islands/scan.d.ts +16 -1
  1057. package/dist/node-islands/scan.js +110 -9
  1058. package/dist/node-islands/scan.js.map +1 -1
  1059. package/dist/node-islands/snapshot.d.ts +38 -1
  1060. package/dist/node-islands/snapshot.js +165 -161
  1061. package/dist/node-islands/snapshot.js.map +1 -1
  1062. package/dist/node-islands/snapshot.test.js +63 -2
  1063. package/dist/node-islands/snapshot.test.js.map +1 -1
  1064. package/dist/node-islands/summary.js +8 -0
  1065. package/dist/node-islands/summary.js.map +1 -1
  1066. package/dist/node-islands/type-strip.d.ts +11 -0
  1067. package/dist/node-islands/type-strip.js +157 -0
  1068. package/dist/node-islands/type-strip.js.map +1 -0
  1069. package/dist/node-islands/type-strip.test.d.ts +1 -0
  1070. package/dist/node-islands/type-strip.test.js +31 -0
  1071. package/dist/node-islands/type-strip.test.js.map +1 -0
  1072. package/dist/project-config.d.ts +4 -0
  1073. package/dist/project-config.js +19 -0
  1074. package/dist/project-config.js.map +1 -1
  1075. package/dist/project-config.test.js +10 -0
  1076. package/dist/project-config.test.js.map +1 -1
  1077. package/dist/wasm/translate.js +11 -5
  1078. package/dist/wasm/translate.js.map +1 -1
  1079. package/dist/wasm/translate.test.js +35 -0
  1080. package/dist/wasm/translate.test.js.map +1 -1
  1081. package/package.json +20 -20
  1082. package/surface-manifest.json +221 -122
@@ -1198,8 +1198,8 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1198
1198
  return { kind: "libCall", fn, args: [receiver], type: VOID, loc };
1199
1199
  }
1200
1200
  if (name === "listen") {
1201
- if (args.length < 1 || args.length > 3) {
1202
- lowerer.noLowering(`listen with ${args.length} arguments`, call, "the supported form is listen(port[, host][, callback]) — port 0 binds an ephemeral port");
1201
+ if (args.length > 3) {
1202
+ lowerer.noLowering(`listen with ${args.length} arguments`, call, "the supported form is listen([port][, host][, callback]) — port 0 binds an ephemeral port");
1203
1203
  }
1204
1204
  // Node answers the server (`return this` chaining — `const s =
1205
1205
  // http.createServer(...).listen(0)`, `server.listen(0).address()`):
@@ -1212,6 +1212,77 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1212
1212
  return receiverReturningCall(lowerer, fn, callArgs, NETSERVER_T, loc);
1213
1213
  };
1214
1214
  const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
1215
+ // listen() and listen(callback): Node binds an arbitrary unused port
1216
+ // (normalizeArgs takes a function first argument as the callback).
1217
+ if (args.length === 0)
1218
+ return listenResult("net.listen", [receiver, numLit(0, loc)]);
1219
+ const first = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
1220
+ // An untyped first argument: a checked-dynamic value, a JavaScript value
1221
+ // read into an untyped slot, or a checker `any`.
1222
+ const untyped = args.length > 0 &&
1223
+ (first?.kind === "dyn" ||
1224
+ first?.kind === "jsval" ||
1225
+ (lowerer.typeOf(args[0]).flags & ts.TypeFlags.Any) !== 0);
1226
+ if (args.length === 1 && first?.kind === "func") {
1227
+ const { cb } = lowerCallbackArg(lowerer, args[0], "listen callbacks", 0, () => false, "use ()", []);
1228
+ return listenResult("net.listenCb", [receiver, numLit(0, loc), cb]);
1229
+ }
1230
+ // An untyped first argument takes its port from net.listenPortDyn,
1231
+ // Node's normalizeArgs and validatePort at run time: 0 for a function,
1232
+ // undefined or null, the number of a port number or numeric string,
1233
+ // ERR_SOCKET_BAD_PORT for a bad port, and the fence for an options
1234
+ // object or a pipe path, which have no lowering from untyped values.
1235
+ const portOfUntyped = (value) => ({
1236
+ kind: "libCall",
1237
+ fn: "net.listenPortDyn",
1238
+ args: [
1239
+ value,
1240
+ ladderFenceExpr(lowerer, "listen with a runtime options object or pipe path", args[0], "pass the port as a number, the path as a string, or the options as an object literal"),
1241
+ ],
1242
+ type: F64,
1243
+ loc,
1244
+ });
1245
+ if (args.length === 1 && untyped) {
1246
+ // An untyped single argument: a function is the callback on an
1247
+ // arbitrary port; any other value is the port.
1248
+ const server = lowerer.declareHiddenLocal("%listenServer", NETSERVER_T);
1249
+ const arg = lowerer.declareHiddenLocal("%listenArg", DYN);
1250
+ const serverRef = () => varRef(server.id, NETSERVER_T, loc);
1251
+ const argRef = () => varRef(arg.id, DYN, loc);
1252
+ const listenStmt = (fn, callArgs) => ({
1253
+ kind: "exprStmt",
1254
+ expr: { kind: "libCall", fn, args: callArgs, type: VOID, loc },
1255
+ loc,
1256
+ });
1257
+ return {
1258
+ kind: "seqExpr",
1259
+ stmts: [
1260
+ { kind: "varDecl", localId: server.id, init: receiver, loc },
1261
+ {
1262
+ kind: "varDecl",
1263
+ localId: arg.id,
1264
+ init: lowerer.coerceToExpected(lowerer.lowerExpr(args[0]), DYN),
1265
+ loc,
1266
+ },
1267
+ {
1268
+ kind: "if",
1269
+ cond: { kind: "dynTest", test: "function", value: argRef(), type: BOOL, loc },
1270
+ then: [
1271
+ listenStmt("net.listenCb", [
1272
+ serverRef(),
1273
+ numLit(0, loc),
1274
+ { kind: "dynCheck", value: argRef(), type: funcOf([], VOID), loc },
1275
+ ]),
1276
+ ],
1277
+ else_: [listenStmt("net.listen", [serverRef(), portOfUntyped(argRef())])],
1278
+ loc,
1279
+ },
1280
+ ],
1281
+ result: serverRef(),
1282
+ type: NETSERVER_T,
1283
+ loc,
1284
+ };
1285
+ }
1215
1286
  // The options-object form — listen({ port, host?, ipv6Only?, reusePort? }[, cb]),
1216
1287
  // the portless listenOnProxyInterface shape: host binds that ONE
1217
1288
  // address (an IP literal — the runtime has no resolver here; absent
@@ -1370,7 +1441,9 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1370
1441
  const { cb } = lowerCallbackArg(lowerer, args[1], "listen callbacks", 0, () => false, "use ()", []);
1371
1442
  return listenResult("net.listenPathCb", [receiver, path, cb]);
1372
1443
  }
1373
- const port = lowerer.lowerExprExpecting(args[0], F64);
1444
+ const port = untyped
1445
+ ? portOfUntyped(lowerer.coerceToExpected(lowerer.lowerExpr(args[0]), DYN))
1446
+ : lowerer.lowerExprExpecting(args[0], F64);
1374
1447
  // The optional middle host — listen(port, '127.0.0.1'[, cb]): a
1375
1448
  // string-typed second argument is the bind address (the net.connect
1376
1449
  // disambiguation), routed through the options-form entry.
@@ -1669,6 +1742,26 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1669
1742
  loc,
1670
1743
  };
1671
1744
  }
1745
+ if (event === "clientError") {
1746
+ // (err, socket): a request the parser rejects, or a connection error,
1747
+ // goes to the listeners instead of the default answer.
1748
+ const cb = lowerer.lowerExpr(args[1]);
1749
+ if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 2) {
1750
+ lowerer.unsupported("SC1090", args[1], "clientError listeners with more than two parameters or returning a value (use (err, socket) with a block body)");
1751
+ }
1752
+ const [err, socket] = cb.type.params;
1753
+ if ((err !== undefined && !(err.kind === "object" && err.className === "%Error")) ||
1754
+ (socket !== undefined && socket.kind !== "netSocket")) {
1755
+ lowerer.unsupported("SC1090", args[1], "clientError listeners whose parameters are not (err: Error, socket: Socket)");
1756
+ }
1757
+ return {
1758
+ kind: "libCall",
1759
+ fn: "http.serverOnClientError",
1760
+ args: [receiver, cb, once],
1761
+ type: VOID,
1762
+ loc,
1763
+ };
1764
+ }
1672
1765
  if (event === "sessionError") {
1673
1766
  const cb = lowerer.lowerExpr(args[1]);
1674
1767
  if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 2) {
@@ -1687,7 +1780,46 @@ function lowerNetServerMethodCall(lowerer, call, access) {
1687
1780
  loc,
1688
1781
  };
1689
1782
  }
1690
- lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"connection", "request", "checkContinue", "checkExpectation", "drop", "stream", "session", "upgrade", "connect", "error", "close", "listening", and "sessionError" are the supported server events (as literals)');
1783
+ lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"connection", "request", "checkContinue", "checkExpectation", "clientError", "drop", "stream", "session", "upgrade", "connect", "error", "close", "listening", and "sessionError" are the supported server events (as literals)');
1784
+ }
1785
+ if ((name === "off" || name === "removeListener") && args.length === 2) {
1786
+ // server.off(event, cb): the LAST listener standing for the same
1787
+ // function leaves that event's list (Node's removeListener order).
1788
+ // Only the event families whose registry keeps a removable list; the
1789
+ // rest refuse rather than silently leaving the listener in place.
1790
+ requireStatementPosition(lowerer, call, `server.${name}(...)`);
1791
+ const evT = lowerer.typeOf(args[0]);
1792
+ const event = evT.isStringLiteralType() ? evT.value : null;
1793
+ const kind = event === null
1794
+ ? null
1795
+ : event === "error"
1796
+ ? 1
1797
+ : event === "close"
1798
+ ? 2
1799
+ : event === "listening"
1800
+ ? 3
1801
+ : event === "connection" || event === "secureConnection"
1802
+ ? 4
1803
+ : event === "timeout"
1804
+ ? 5
1805
+ : event === "drop"
1806
+ ? 6
1807
+ : null;
1808
+ if (kind === null) {
1809
+ lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"error", "close", "listening", "connection", "secureConnection", "timeout", and "drop" are the events off/removeListener removes (as literals)');
1810
+ }
1811
+ const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
1812
+ const listener = lowerer.lowerExpr(args[1]);
1813
+ if (listener.type.kind !== "func") {
1814
+ lowerer.unsupported("SC1090", args[1], `server.${name} with a listener that is not a function`);
1815
+ }
1816
+ return {
1817
+ kind: "libCall",
1818
+ fn: "net.serverOff",
1819
+ args: [receiver, listener, numLit(kind, loc)],
1820
+ type: VOID,
1821
+ loc,
1822
+ };
1691
1823
  }
1692
1824
  if (name === "emit") {
1693
1825
  // The demux route: emit("connection", socket) hands an accepted
@@ -3000,11 +3132,15 @@ export function lowerServerProperty(lowerer, expr) {
3000
3132
  const fn = name === "httpVersionMajor" ? "http.reqHttpVersionMajor" : "http.reqHttpVersionMinor";
3001
3133
  return { kind: "libCall", fn, args: [receiver], type: F64, loc };
3002
3134
  }
3003
- if (name === "aborted" || name === "complete") {
3004
- // The compat pair's flags (Http2ServerRequest); an http/1 request
3005
- // answers aborted: false and complete-once-ended the same way.
3135
+ if (name === "aborted" || name === "complete" || name === "destroyed") {
3136
+ // aborted: the connection (or the h2 stream) closed before the
3137
+ // response finished; complete: the whole message arrived.
3006
3138
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPREQ_T);
3007
- const fn = name === "aborted" ? "http.reqAborted" : "http.reqComplete";
3139
+ const fn = name === "aborted"
3140
+ ? "http.reqAborted"
3141
+ : name === "complete"
3142
+ ? "http.reqComplete"
3143
+ : "http.reqDestroyed";
3008
3144
  return { kind: "libCall", fn, args: [receiver], type: BOOL, loc };
3009
3145
  }
3010
3146
  if (name === "rawHeaders" || name === "rawTrailers") {
@@ -3343,6 +3479,10 @@ export function lowerServerProperty(lowerer, expr) {
3343
3479
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
3344
3480
  return { kind: "libCall", fn: "http.resWritableFinished", args: [receiver], type: BOOL, loc };
3345
3481
  }
3482
+ if (name === "destroyed") {
3483
+ const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
3484
+ return { kind: "libCall", fn: "http.resDestroyed", args: [receiver], type: BOOL, loc };
3485
+ }
3346
3486
  if (name === "sendDate" || name === "strictContentLength") {
3347
3487
  const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
3348
3488
  const fn = name === "sendDate" ? "http.resSendDateGet" : "http.resStrictContentLengthGet";
@@ -5065,6 +5205,27 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
5065
5205
  lowerer.noLowering(`http2.${bi.member}`, expr, builtinFenceHintOf("http2", bi.member) ??
5066
5206
  "createSecureServer({ allowHTTP1: true, cert, key }) and the h2-only form are lowered", lowerer.resolveValueSymbol(expr.expression));
5067
5207
  }
5208
+ /** The scalar request options the literal walk lowers, with the type it
5209
+ * lowers each one at. */
5210
+ const LITERAL_REQUEST_OPTION_KINDS = new Map([
5211
+ ["hostname", "string"],
5212
+ ["host", "string"],
5213
+ ["port", "f64"],
5214
+ ["path", "string"],
5215
+ ["method", "string"],
5216
+ ["timeout", "f64"],
5217
+ ["maxHeaderSize", "f64"],
5218
+ ]);
5219
+ /** Whether a literal's scalar option holds a value of another type than the
5220
+ * literal walk lowers it at, which sends the literal to the runtime walk. */
5221
+ function runtimeCheckedOption(lowerer, prop) {
5222
+ const want = LITERAL_REQUEST_OPTION_KINDS.get(prop.name.text);
5223
+ if (want === undefined)
5224
+ return false;
5225
+ const value = ts.isPropertyAssignment(prop) ? prop.initializer : prop.name;
5226
+ const t = lowerer.mapTypeOf(lowerer.typeOf(value));
5227
+ return t !== null && t.kind !== want;
5228
+ }
5068
5229
  /** The checked-dynamic options value of a request whose options the
5069
5230
  * runtime reads: a non-literal options value (a RequestOptions variable —
5070
5231
  * checked-dynamic storage — or a record that converts to one), or a
@@ -5087,7 +5248,11 @@ function runtimeRequestOptions(lowerer, optsNode, secureish) {
5087
5248
  (ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)) &&
5088
5249
  (prop.name.text === "socketPath" ||
5089
5250
  // a client certificate: the runtime request walk reads cert and key
5090
- (secureish && (prop.name.text === "cert" || prop.name.text === "key"))));
5251
+ (secureish && (prop.name.text === "cert" || prop.name.text === "key")) ||
5252
+ // a scalar option whose value is not the walk's type (an untyped
5253
+ // or union value, a string port): the runtime walk runs Node's
5254
+ // checks on it (ERR_INVALID_ARG_TYPE with the option's name)
5255
+ runtimeCheckedOption(lowerer, prop)));
5091
5256
  });
5092
5257
  if (!needsRuntime)
5093
5258
  return null;
@@ -5098,6 +5263,62 @@ function runtimeRequestOptions(lowerer, optsNode, secureish) {
5098
5263
  return null;
5099
5264
  return lowerer.coerceToExpected(lowerer.lowerExpr(optsNode), DYN);
5100
5265
  }
5266
+ /** Whether the second argument of a URL-form client call is the response
5267
+ * callback rather than an options value: a function literal, or a value
5268
+ * whose type is a function. Node's overloads disambiguate the same way —
5269
+ * a RequestOptions value is not callable. */
5270
+ function isResponseCallback(lowerer, node) {
5271
+ if (ts.isArrowFunction(node) || ts.isFunctionExpression(node))
5272
+ return true;
5273
+ const type = lowerer.typeOf(node);
5274
+ // An untyped value stays on the callback side: Node decides
5275
+ // `typeof options === 'function'` at run time, and the two-argument URL
5276
+ // call has always taken an untyped callback (`http.get(url, cb)` with
5277
+ // `cb: any`). The options form needs a value the lowering can hand to
5278
+ // the merge, which an untyped value is not.
5279
+ if ((type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
5280
+ return true;
5281
+ // A callable value is the callback (a function-typed variable, or a union
5282
+ // whose callable arm the checker widens). Everything else the mapper calls
5283
+ // a function is one too.
5284
+ if (lowerer.checker.getCallSignatures(type).length > 0)
5285
+ return true;
5286
+ const t = lowerer.mapTypeOf(type);
5287
+ // An OBJECT-SHAPED value is the options record: `RequestOptions` maps to
5288
+ // the checked-dynamic value, which the URL-form merge reads. A value with
5289
+ // no lowering type keeps the callback path it had.
5290
+ return t === null || t.kind === "func";
5291
+ }
5292
+ /** The options value of request(url, options[, cb]) as the checked-dynamic
5293
+ * record the runtime merges under the URL's fields: an object literal (the
5294
+ * merge reads it at run time, the same walk the options form's non-literal
5295
+ * path takes), or a value that converts to a dyn record. */
5296
+ function lowerUrlFormOptions(lowerer, node) {
5297
+ if (ts.isObjectLiteralExpression(node))
5298
+ return lowerDynObjectLiteral(lowerer, node);
5299
+ const t = lowerer.mapTypeOf(lowerer.typeOf(node));
5300
+ // `request(url, undefined, cb)`: Node's spread contributes no member, so
5301
+ // the URL's fields stand alone. The argument is still evaluated: an
5302
+ // expression with effects there runs, and its throw propagates, before
5303
+ // the request is built.
5304
+ if (t && (t.kind === "void" || t.kind === "undefinedT" || t.kind === "nullT")) {
5305
+ const loc = locOf(node);
5306
+ const value = lowerer.lowerExpr(node);
5307
+ if (value.kind === "unitLit")
5308
+ return dynUndefinedExpr(loc);
5309
+ return {
5310
+ kind: "seqExpr",
5311
+ stmts: [{ kind: "exprStmt", expr: value, loc }],
5312
+ result: dynUndefinedExpr(loc),
5313
+ type: DYN,
5314
+ loc,
5315
+ };
5316
+ }
5317
+ if (t && (t.kind === "dyn" || (t.kind === "record" && lowerer.dynConvertible(t)))) {
5318
+ return lowerer.coerceToExpected(lowerer.lowerExpr(node), DYN);
5319
+ }
5320
+ lowerer.noLowering(`the options of a URL-form request of '${t === null ? "unknown" : lowerer.fmt(t)}' values`, node, "pass an object literal or a Record value as the options");
5321
+ }
5101
5322
  /** http.request(options[, cb]) / http.get(options[, cb]) — the client.
5102
5323
  * The options argument must be an OBJECT LITERAL; the lowered keys are
5103
5324
  * hostname/host, port, path, method, timeout, and headers (a nested
@@ -5126,10 +5347,18 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
5126
5347
  return binding.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
5127
5348
  };
5128
5349
  const args = expr.arguments.nodes;
5129
- if (args.length < 1 || args.length > 2) {
5130
- lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported form is ${member}(options[, callback])`);
5350
+ if (args.length < 1 || args.length > 3) {
5351
+ lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported forms are ${member}(options[, callback]) and ${member}(url, options[, callback])`);
5131
5352
  }
5132
5353
  const optsNode = args[0];
5354
+ const optsType = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
5355
+ /** The URL-string / URL-object target of the (url[, options][, cb]) forms. */
5356
+ const urlTarget = !ts.isObjectLiteralExpression(optsNode) &&
5357
+ (optsType?.kind === "string" || optsType?.kind === "url");
5358
+ if (args.length === 3 && !(urlTarget && binding === null)) {
5359
+ // Only the URL form has a middle options argument: (url, options, cb).
5360
+ lowerer.noLowering(`${member} with 3 arguments`, expr, `the supported forms are ${member}(options[, callback]) and ${member}(url, options[, callback])`);
5361
+ }
5133
5362
  const runtimeOptions = binding === null ? runtimeRequestOptions(lowerer, optsNode, secureish) : null;
5134
5363
  if (runtimeOptions !== null) {
5135
5364
  // The options record is read at run time (the ClientRequest
@@ -5156,7 +5385,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
5156
5385
  };
5157
5386
  }
5158
5387
  if (!ts.isObjectLiteralExpression(optsNode)) {
5159
- const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
5388
+ const t = optsType;
5160
5389
  if ((t?.kind === "string" || t?.kind === "url") && binding === null) {
5161
5390
  // The URL-string form — http.get(`http://127.0.0.1:${port}/x`[, cb])
5162
5391
  // and its https spelling: the runtime parses through the WHATWG unit
@@ -5180,6 +5409,45 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
5180
5409
  const methodLit = { kind: "strLit", value: "GET", type: STRING, loc };
5181
5410
  const autoEnd = boolLit(member === "get", loc);
5182
5411
  const isTls = secure === true;
5412
+ // The options-carrying forms: (url, options[, cb]). Node's merge
5413
+ // puts the URL's fields under the options' — `{...urlToHttpOptions(
5414
+ // new URL(url)), ...options}` — which the runtime does once, so the
5415
+ // options value travels as a checked-dynamic record (a literal
5416
+ // included: the merge reads it at run time, like Node).
5417
+ let urlOpts = null;
5418
+ let cbNode = null;
5419
+ if (args.length === 3) {
5420
+ urlOpts = args[1];
5421
+ cbNode = args[2];
5422
+ }
5423
+ else if (args.length === 2) {
5424
+ if (isResponseCallback(lowerer, args[1]))
5425
+ cbNode = args[1];
5426
+ else
5427
+ urlOpts = args[1];
5428
+ }
5429
+ if (urlOpts !== null) {
5430
+ const dynOpts = lowerUrlFormOptions(lowerer, urlOpts);
5431
+ if (cbNode === null) {
5432
+ const fn = isTls ? "https.requestUrlDyn" : "http.requestUrlDyn";
5433
+ return {
5434
+ kind: "libCall",
5435
+ fn,
5436
+ args: [url, dynOpts, autoEnd],
5437
+ type: HTTPCLIENTREQ_T,
5438
+ loc,
5439
+ };
5440
+ }
5441
+ const { cb } = lowerCallbackArg(lowerer, cbNode, "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
5442
+ const fn = isTls ? "https.requestUrlDynCb" : "http.requestUrlDynCb";
5443
+ return {
5444
+ kind: "libCall",
5445
+ fn,
5446
+ args: [url, dynOpts, autoEnd, cb],
5447
+ type: HTTPCLIENTREQ_T,
5448
+ loc,
5449
+ };
5450
+ }
5183
5451
  if (args.length === 1) {
5184
5452
  const fn = isTls ? "https.requestUrl" : "http.requestUrl";
5185
5453
  return { kind: "libCall", fn, args: [url, methodLit, autoEnd], type: HTTPCLIENTREQ_T, loc };
@@ -5221,6 +5489,11 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
5221
5489
  let servername = null;
5222
5490
  /** maxHeaderSize: the response head's size bound. */
5223
5491
  let maxHeaderSize = null;
5492
+ /** protocol: the scheme the request claims. It dials nothing; Node
5493
+ * compares it against the agent's (the module's when there is no agent
5494
+ * value) and throws ERR_INVALID_PROTOCOL on a mismatch, so the check is
5495
+ * a runtime call before the request is built. */
5496
+ let protocol = null;
5224
5497
  for (const prop of optsNode.properties.nodes) {
5225
5498
  // Shorthand entries ({ port } for { port: port }) are the natural
5226
5499
  // spelling at these call sites — the shorthand's VALUE lowering
@@ -5331,12 +5604,31 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
5331
5604
  signal = lowerer.coerceToExpected(v, DYN);
5332
5605
  break;
5333
5606
  }
5334
- case "headers":
5335
- if (initializer === null) {
5336
- lowerer.noLowering(`${member} with a shorthand headers option`, prop, "spell it out: headers: theHeaders");
5607
+ case "headers": {
5608
+ // A shorthand `{ headers }` is the same option as `headers:
5609
+ // headers` — the entry's value, not the property symbol, is what
5610
+ // carries the record (lowerShorthandValue resolves it).
5611
+ const v = initializer !== null
5612
+ ? lowerClientHeadersOption(lowerer, initializer)
5613
+ : lowerClientHeadersValue(lowerer, lowerer.lowerShorthandValue(prop), prop);
5614
+ headers = v;
5615
+ break;
5616
+ }
5617
+ case "protocol": {
5618
+ // Node's ClientRequest compares the declared scheme against the
5619
+ // agent's and throws ERR_INVALID_PROTOCOL before it dials; a
5620
+ // truthy non-matching value is the error, a falsy one means "the
5621
+ // agent's". The runtime check carries that comparison (any value
5622
+ // coerces, as Node's message does).
5623
+ const v = initializer !== null
5624
+ ? lowerer.lowerExpr(initializer)
5625
+ : lowerer.lowerShorthandValue(prop);
5626
+ if (v.type.kind !== "string" && v.type.kind !== "dyn") {
5627
+ lowerer.noLowering(`a ${member} 'protocol' option of '${lowerer.fmt(v.type)}' values`, prop, "the option value must be a string ('http:' or 'https:')");
5337
5628
  }
5338
- headers = lowerClientHeadersOption(lowerer, initializer);
5629
+ protocol = v;
5339
5630
  break;
5631
+ }
5340
5632
  case "createConnection": {
5341
5633
  // The caller's own dialer: a `() => net.Socket` closure the
5342
5634
  // runtime invokes once, synchronously (the proxy's loopback
@@ -5415,9 +5707,21 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
5415
5707
  }
5416
5708
  default:
5417
5709
  fenceOrDropOptionKey(lowerer, prop, key, member, secureish ? HTTPS_CLIENT_DOCUMENTED_OPTIONS : HTTP_CLIENT_DOCUMENTED_OPTIONS, secureish
5418
- ? "hostname/host, port, path, method, timeout, headers, agent, signal, maxHeaderSize, rejectUnauthorized, ca, and servername are the supported options"
5419
- : "hostname/host, port, path, method, timeout, headers, agent, signal, and maxHeaderSize are the supported options");
5420
- }
5710
+ ? "hostname/host, port, path, method, timeout, headers, agent, signal, maxHeaderSize, protocol, rejectUnauthorized, ca, and servername are the supported options"
5711
+ : "hostname/host, port, path, method, timeout, headers, agent, signal, maxHeaderSize, and protocol are the supported options");
5712
+ }
5713
+ }
5714
+ /** A literal request carrying both a protocol option and an Agent VALUE
5715
+ * evaluates the agent expression once, into a hidden local: the protocol
5716
+ * check and the request then read the same object, as Node's options
5717
+ * object does. */
5718
+ let agentInit = null;
5719
+ let agentLocalId = null;
5720
+ if (protocol !== null && agentVal !== null) {
5721
+ const agentLocal = lowerer.declareHiddenLocal("%requestAgent", DYN);
5722
+ agentLocalId = agentLocal.id;
5723
+ agentInit = agentVal;
5724
+ agentVal = varRef(agentLocal.id, DYN, loc);
5421
5725
  }
5422
5726
  if (agentClose !== null) {
5423
5727
  // agent: false → Node sends `Connection: close` (its one-shot Agent
@@ -5489,11 +5793,14 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
5489
5793
  // built request (an already aborted signal destroys it at once, like
5490
5794
  // Node's constructor).
5491
5795
  const withSignal = (request) => {
5492
- if (signal === null && servername === null && maxHeaderSize === null)
5796
+ if (signal === null && servername === null && maxHeaderSize === null && protocol === null)
5493
5797
  return request;
5494
5798
  const local = lowerer.declareHiddenLocal("%requestOptions", HTTPCLIENTREQ_T);
5495
5799
  const ref = () => varRef(local.id, HTTPCLIENTREQ_T, loc);
5496
5800
  const steps = [];
5801
+ if (agentInit !== null && agentLocalId !== null) {
5802
+ steps.push({ kind: "varDecl", localId: agentLocalId, init: agentInit, loc });
5803
+ }
5497
5804
  let signalRef = null;
5498
5805
  if (signal !== null) {
5499
5806
  const signalLocal = lowerer.declareHiddenLocal("%requestSignal", DYN);
@@ -5511,6 +5818,34 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
5511
5818
  loc,
5512
5819
  });
5513
5820
  }
5821
+ if (protocol !== null) {
5822
+ // Node's constructor order: the signal's type, then the agent's
5823
+ // scheme against the declared protocol, then the request itself.
5824
+ // An Agent VALUE is the agent whose protocol counts; without one,
5825
+ // the calling module's (or the binding's, at run time).
5826
+ const secureArg = binding !== null ? secureExpr() : boolLit(secure === true, loc);
5827
+ // The runtime compares the coerced value, as Node's message does.
5828
+ const protocolArg = lowerer.coerceToExpected(protocol, DYN);
5829
+ steps.push({
5830
+ kind: "exprStmt",
5831
+ expr: agentVal !== null
5832
+ ? {
5833
+ kind: "libCall",
5834
+ fn: "http.clientProtocolCheckAgent",
5835
+ args: [protocolArg, secureArg, agentVal],
5836
+ type: VOID,
5837
+ loc,
5838
+ }
5839
+ : {
5840
+ kind: "libCall",
5841
+ fn: "http.clientProtocolCheck",
5842
+ args: [protocolArg, secureArg],
5843
+ type: VOID,
5844
+ loc,
5845
+ },
5846
+ loc,
5847
+ });
5848
+ }
5514
5849
  if (servername !== null) {
5515
5850
  steps.push({
5516
5851
  kind: "exprStmt",
@@ -5634,13 +5969,18 @@ function lowerClientHeadersOption(lowerer, node) {
5634
5969
  }
5635
5970
  return { kind: "arrayLit", elems, type: arrayOf(STRING), loc };
5636
5971
  }
5637
- const v = lowerer.lowerExpr(node);
5972
+ return lowerClientHeadersValue(lowerer, lowerer.lowerExpr(node), node);
5973
+ }
5974
+ /** The non-literal arm: a Record whose values are strings (or
5975
+ * `string | undefined`), flattened by the interned env.pairs helper. */
5976
+ function lowerClientHeadersValue(lowerer, v, blame) {
5977
+ const loc = locOf(blame);
5638
5978
  if (v.type.kind !== "record") {
5639
- lowerer.noLowering(`request headers of '${lowerer.fmt(v.type)}' values`, node, "pass an object literal or a Record<string, string>");
5979
+ lowerer.noLowering(`request headers of '${lowerer.fmt(v.type)}' values`, blame, "pass an object literal or a Record<string, string>");
5640
5980
  }
5641
5981
  const helper = lowerer.envToPairsHelper(v.type.shapeId, loc);
5642
5982
  if (helper === null) {
5643
- lowerer.noLowering(`request headers of '${lowerer.fmt(v.type)}' values`, node, "header values must be strings (or string | undefined)");
5983
+ lowerer.noLowering(`request headers of '${lowerer.fmt(v.type)}' values`, blame, "header values must be strings (or string | undefined)");
5644
5984
  }
5645
5985
  return { kind: "call", callee: helper, args: [v], type: arrayOf(STRING), loc };
5646
5986
  }
@@ -5852,84 +6192,105 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
5852
6192
  };
5853
6193
  }
5854
6194
  if ((name === "on" || name === "once" || name === "addListener") && args.length === 2) {
5855
- requireStatementPosition(lowerer, call, `request.${name}(...)`);
5856
6195
  const once = boolLit(name === "once", loc);
5857
6196
  const evT = lowerer.typeOf(args[0]);
5858
6197
  const event = evT.isStringLiteralType() ? evT.value : null;
5859
- const receiver = lowerer.lowerExpr(access.expression);
5860
- if (event === "response") {
5861
- const { cb } = lowerCallbackArg(lowerer, args[1], "response listeners", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
5862
- return {
5863
- kind: "libCall",
5864
- fn: "http.clientOnResponse",
5865
- args: [receiver, cb, once],
5866
- type: VOID,
5867
- loc,
5868
- };
5869
- }
5870
- if (event === "socket") {
5871
- const { cb } = lowerCallbackArg(lowerer, args[1], "socket listeners", 1, (p) => p.kind === "netSocket", "use (socket) or ()", [NETSOCKET_T]);
5872
- return {
5873
- kind: "libCall",
5874
- fn: "http.clientOnSocket",
5875
- args: [receiver, cb, once],
5876
- type: VOID,
5877
- loc,
5878
- };
5879
- }
5880
- if (event === "error") {
5881
- const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
5882
- return {
5883
- kind: "libCall",
5884
- fn: "http.clientOnError",
5885
- args: [receiver, cb, once],
5886
- type: VOID,
5887
- loc,
5888
- };
5889
- }
5890
- if (event === "timeout" ||
5891
- event === "close" ||
5892
- event === "finish" ||
5893
- event === "abort" ||
5894
- event === "continue") {
5895
- const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use ()", []);
5896
- const fn = event === "timeout"
5897
- ? "http.clientOnTimeout"
5898
- : event === "close"
5899
- ? "http.clientOnClose"
5900
- : event === "abort"
5901
- ? "http.clientOnAbort"
5902
- : event === "continue"
5903
- ? "http.clientOnContinue"
5904
- : "http.clientOnFinish";
5905
- return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
5906
- }
5907
- if (event === "upgrade") {
5908
- // The client half of the WebSocket handover: a 101 response fires
5909
- // (res, socket, head) INSTEAD of 'response'; no listener destroys
5910
- // the connection, Node's default.
5911
- const cb = lowerer.lowerExpr(args[1]);
5912
- if (cb.type.kind !== "func" || cb.type.params.length > 3) {
5913
- lowerer.unsupported("SC1090", args[1], "upgrade listeners with more than three parameters (use (res, socket, head))");
6198
+ // Node's on() answers the request: unless the call is an expression
6199
+ // statement (a chained .on(...).end(), a concise arrow body), the
6200
+ // receiver is bound once and the registration answers it.
6201
+ const lowered = lowerer.lowerExpr(access.expression);
6202
+ const chained = ts.isExpressionStatement(call.parent)
6203
+ ? null
6204
+ : lowerer.declareHiddenLocal("%request", lowered.type);
6205
+ const receiver = chained === null ? lowered : varRef(chained.id, lowered.type, loc);
6206
+ const register = () => {
6207
+ if (event === "response") {
6208
+ const { cb } = lowerCallbackArg(lowerer, args[1], "response listeners", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
6209
+ return {
6210
+ kind: "libCall",
6211
+ fn: "http.clientOnResponse",
6212
+ args: [receiver, cb, once],
6213
+ type: VOID,
6214
+ loc,
6215
+ };
5914
6216
  }
5915
- if (cb.type.ret.kind !== "void") {
5916
- lowerer.unsupported("SC1090", args[1], "upgrade listeners returning a value (make the callback body a block)");
6217
+ if (event === "socket") {
6218
+ const { cb } = lowerCallbackArg(lowerer, args[1], "socket listeners", 1, (p) => p.kind === "netSocket", "use (socket) or ()", [NETSOCKET_T]);
6219
+ return {
6220
+ kind: "libCall",
6221
+ fn: "http.clientOnSocket",
6222
+ args: [receiver, cb, once],
6223
+ type: VOID,
6224
+ loc,
6225
+ };
5917
6226
  }
5918
- const [p0, p1, p2] = cb.type.params;
5919
- if ((p0 !== undefined && p0.kind !== "httpReq") ||
5920
- (p1 !== undefined && p1.kind !== "netSocket") ||
5921
- (p2 !== undefined && !(p2.kind === "bytes" && p2.elem === "u8"))) {
5922
- lowerer.unsupported("SC1090", args[1], "upgrade listeners whose parameters are not (res: IncomingMessage, socket: Socket, head: Buffer)");
6227
+ if (event === "error") {
6228
+ const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
6229
+ return {
6230
+ kind: "libCall",
6231
+ fn: "http.clientOnError",
6232
+ args: [receiver, cb, once],
6233
+ type: VOID,
6234
+ loc,
6235
+ };
5923
6236
  }
5924
- return {
5925
- kind: "libCall",
5926
- fn: "http.clientOnUpgrade",
5927
- args: [receiver, cb, once],
5928
- type: VOID,
5929
- loc,
5930
- };
5931
- }
5932
- 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)');
6237
+ if (event === "timeout" ||
6238
+ event === "close" ||
6239
+ event === "finish" ||
6240
+ event === "abort" ||
6241
+ event === "continue") {
6242
+ const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use ()", []);
6243
+ const fn = event === "timeout"
6244
+ ? "http.clientOnTimeout"
6245
+ : event === "close"
6246
+ ? "http.clientOnClose"
6247
+ : event === "abort"
6248
+ ? "http.clientOnAbort"
6249
+ : event === "continue"
6250
+ ? "http.clientOnContinue"
6251
+ : "http.clientOnFinish";
6252
+ return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
6253
+ }
6254
+ if (event === "upgrade") {
6255
+ // The client half of the WebSocket handover: a 101 response fires
6256
+ // (res, socket, head) INSTEAD of 'response'; no listener destroys
6257
+ // the connection, Node's default.
6258
+ const cb = lowerer.lowerExpr(args[1]);
6259
+ if (cb.type.kind !== "func" || cb.type.params.length > 3) {
6260
+ lowerer.unsupported("SC1090", args[1], "upgrade listeners with more than three parameters (use (res, socket, head))");
6261
+ }
6262
+ if (cb.type.ret.kind !== "void") {
6263
+ lowerer.unsupported("SC1090", args[1], "upgrade listeners returning a value (make the callback body a block)");
6264
+ }
6265
+ const [p0, p1, p2] = cb.type.params;
6266
+ if ((p0 !== undefined && p0.kind !== "httpReq") ||
6267
+ (p1 !== undefined && p1.kind !== "netSocket") ||
6268
+ (p2 !== undefined && !(p2.kind === "bytes" && p2.elem === "u8"))) {
6269
+ lowerer.unsupported("SC1090", args[1], "upgrade listeners whose parameters are not (res: IncomingMessage, socket: Socket, head: Buffer)");
6270
+ }
6271
+ return {
6272
+ kind: "libCall",
6273
+ fn: "http.clientOnUpgrade",
6274
+ args: [receiver, cb, once],
6275
+ type: VOID,
6276
+ loc,
6277
+ };
6278
+ }
6279
+ 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)');
6280
+ };
6281
+ const registration = register();
6282
+ if (chained === null)
6283
+ return registration;
6284
+ return {
6285
+ kind: "seqExpr",
6286
+ stmts: [
6287
+ { kind: "varDecl", localId: chained.id, init: lowered, loc },
6288
+ { kind: "exprStmt", expr: registration, loc },
6289
+ ],
6290
+ result: varRef(chained.id, lowered.type, loc),
6291
+ type: lowered.type,
6292
+ loc,
6293
+ };
5933
6294
  }
5934
6295
  lowerer.noLowering(`ClientRequest.${name}`, call, "header reads/mutations, write, end, destroy, and on/once of response/error/timeout/close are the supported ClientRequest members", lowerer.checker.getSymbolAtLocation(access.name));
5935
6296
  }
@@ -6378,7 +6739,13 @@ function lowerHttpResMethodCall(lowerer, call, access) {
6378
6739
  headersNode = args[1];
6379
6740
  }
6380
6741
  else if (args.length === 3) {
6381
- msg = lowerer.lowerExprExpecting(args[1], STRING);
6742
+ // writeHead(status, undefined | null, headers): Node takes a reason
6743
+ // that is not a string as absent and reads the third argument.
6744
+ const reason = args[1];
6745
+ const absent = reason.kind === ts.SyntaxKind.NullKeyword ||
6746
+ (ts.isIdentifier(reason) && reason.text === "undefined");
6747
+ if (!absent)
6748
+ msg = lowerer.lowerExprExpecting(reason, STRING);
6382
6749
  headersNode = args[2];
6383
6750
  }
6384
6751
  // Node answers the response (`return this` — the chaining shape