@scriptc/compiler 0.4.7 → 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 (776) 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 +23 -5
  4. package/ambient/node-fallback/fs.d.ts +3 -2
  5. package/ambient/node-fallback/http.d.ts +23 -17
  6. package/ambient/node-fallback/https.d.ts +5 -2
  7. package/ambient/node-fallback/net.d.ts +6 -0
  8. package/ambient/node-fallback/os.d.ts +11 -1
  9. package/ambient/node-fallback/path-posix.d.ts +6 -0
  10. package/ambient/node-fallback/path-win32.d.ts +5 -0
  11. package/ambient/node-fallback/path.d.ts +2 -0
  12. package/ambient/node-fallback/zlib.d.ts +31 -2
  13. package/ambient/scriptc-node-fallback.d.ts +37 -7
  14. package/ambient/scriptc.d.ts +7 -2
  15. package/dist/backend/executable-features.js +11 -3
  16. package/dist/backend/executable-features.js.map +1 -1
  17. package/dist/backend/library-pack.d.ts +6 -0
  18. package/dist/backend/library-pack.js +17 -6
  19. package/dist/backend/library-pack.js.map +1 -1
  20. package/dist/backend/library-pack.test.d.ts +1 -0
  21. package/dist/backend/library-pack.test.js +28 -0
  22. package/dist/backend/library-pack.test.js.map +1 -0
  23. package/dist/backend/linker.d.ts +9 -2
  24. package/dist/backend/linker.js +190 -32
  25. package/dist/backend/linker.js.map +1 -1
  26. package/dist/backend/lld.d.ts +8 -4
  27. package/dist/backend/lld.js +19 -13
  28. package/dist/backend/lld.js.map +1 -1
  29. package/dist/backend/lld.test.js +3 -1
  30. package/dist/backend/lld.test.js.map +1 -1
  31. package/dist/backend/llvm/alloc.d.ts +15 -2
  32. package/dist/backend/llvm/alloc.js +172 -36
  33. package/dist/backend/llvm/alloc.js.map +1 -1
  34. package/dist/backend/llvm/alloc.test.js +69 -1
  35. package/dist/backend/llvm/alloc.test.js.map +1 -1
  36. package/dist/backend/llvm/arenas.d.ts +17 -4
  37. package/dist/backend/llvm/arenas.js +105 -10
  38. package/dist/backend/llvm/arenas.js.map +1 -1
  39. package/dist/backend/llvm/arenas.test.js +229 -0
  40. package/dist/backend/llvm/arenas.test.js.map +1 -1
  41. package/dist/backend/llvm/bytes-alias.js +10 -1
  42. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  43. package/dist/backend/llvm/bytes-headers.js +6 -0
  44. package/dist/backend/llvm/bytes-headers.js.map +1 -1
  45. package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
  46. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  47. package/dist/backend/llvm/call-lifetimes.js +10 -0
  48. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  49. package/dist/backend/llvm/classes.d.ts +16 -9
  50. package/dist/backend/llvm/classes.js +142 -37
  51. package/dist/backend/llvm/classes.js.map +1 -1
  52. package/dist/backend/llvm/classes.test.js +42 -0
  53. package/dist/backend/llvm/classes.test.js.map +1 -1
  54. package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
  55. package/dist/backend/llvm/cpu-dispatch.js +31 -7
  56. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  57. package/dist/backend/llvm/dyn.d.ts +12 -3
  58. package/dist/backend/llvm/dyn.js +31 -7
  59. package/dist/backend/llvm/dyn.js.map +1 -1
  60. package/dist/backend/llvm/emit-function.js +67 -4
  61. package/dist/backend/llvm/emit-function.js.map +1 -1
  62. package/dist/backend/llvm/emit-module.js +90 -39
  63. package/dist/backend/llvm/emit-module.js.map +1 -1
  64. package/dist/backend/llvm/emit-module.test.d.ts +1 -0
  65. package/dist/backend/llvm/emit-module.test.js +52 -0
  66. package/dist/backend/llvm/emit-module.test.js.map +1 -0
  67. package/dist/backend/llvm/emit-statements.js +99 -15
  68. package/dist/backend/llvm/emit-statements.js.map +1 -1
  69. package/dist/backend/llvm/emitter.d.ts +113 -8
  70. package/dist/backend/llvm/emitter.js +438 -67
  71. package/dist/backend/llvm/emitter.js.map +1 -1
  72. package/dist/backend/llvm/emitter.test.js +31 -3
  73. package/dist/backend/llvm/emitter.test.js.map +1 -1
  74. package/dist/backend/llvm/expr-async.js +19 -1
  75. package/dist/backend/llvm/expr-async.js.map +1 -1
  76. package/dist/backend/llvm/expr-bytes.js +16 -1
  77. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  78. package/dist/backend/llvm/expr-calls.js +18 -2
  79. package/dist/backend/llvm/expr-calls.js.map +1 -1
  80. package/dist/backend/llvm/expr-dynamic.js +31 -10
  81. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  82. package/dist/backend/llvm/expr-primitives.js +31 -3
  83. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  84. package/dist/backend/llvm/expr-records.d.ts +1 -1
  85. package/dist/backend/llvm/expr-records.js +124 -56
  86. package/dist/backend/llvm/expr-records.js.map +1 -1
  87. package/dist/backend/llvm/expr-stream-bridges.js +17 -0
  88. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  89. package/dist/backend/llvm/js-groups.d.ts +21 -0
  90. package/dist/backend/llvm/js-groups.js +277 -0
  91. package/dist/backend/llvm/js-groups.js.map +1 -0
  92. package/dist/backend/llvm/js-ic.d.ts +19 -1
  93. package/dist/backend/llvm/js-ic.js +96 -23
  94. package/dist/backend/llvm/js-ic.js.map +1 -1
  95. package/dist/backend/llvm/lib-dispatch.js +132 -1
  96. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  97. package/dist/backend/llvm/lib-network.js +33 -6
  98. package/dist/backend/llvm/lib-network.js.map +1 -1
  99. package/dist/backend/llvm/lib-process.js +44 -3
  100. package/dist/backend/llvm/lib-process.js.map +1 -1
  101. package/dist/backend/llvm/lib-shared.js +69 -2
  102. package/dist/backend/llvm/lib-shared.js.map +1 -1
  103. package/dist/backend/llvm/local-union-storage.test.js +32 -0
  104. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  105. package/dist/backend/llvm/loop-state.js +7 -2
  106. package/dist/backend/llvm/loop-state.js.map +1 -1
  107. package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
  108. package/dist/backend/llvm/map-entry-fusion.js +3 -3
  109. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  110. package/dist/backend/llvm/map-number-lookup.test.js +6 -6
  111. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  112. package/dist/backend/llvm/nullable-unions.js +7 -6
  113. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  114. package/dist/backend/llvm/nullable-unions.test.js +4 -1
  115. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  116. package/dist/backend/llvm/receivers.js +3 -0
  117. package/dist/backend/llvm/receivers.js.map +1 -1
  118. package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
  119. package/dist/backend/llvm/record-entry-fusion.js +217 -0
  120. package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
  121. package/dist/backend/llvm/record-results.d.ts +5 -2
  122. package/dist/backend/llvm/record-results.js +13 -12
  123. package/dist/backend/llvm/record-results.js.map +1 -1
  124. package/dist/backend/llvm/record-views.js +12 -6
  125. package/dist/backend/llvm/record-views.js.map +1 -1
  126. package/dist/backend/llvm/reference-effects.js +1 -0
  127. package/dist/backend/llvm/reference-effects.js.map +1 -1
  128. package/dist/backend/llvm/reference-writes.js +3 -0
  129. package/dist/backend/llvm/reference-writes.js.map +1 -1
  130. package/dist/backend/llvm/region-ir.js +1 -0
  131. package/dist/backend/llvm/region-ir.js.map +1 -1
  132. package/dist/backend/llvm/region-sites.d.ts +18 -0
  133. package/dist/backend/llvm/region-sites.js +79 -1
  134. package/dist/backend/llvm/region-sites.js.map +1 -1
  135. package/dist/backend/llvm/runtime-registries.test.js +53 -6
  136. package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
  137. package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
  138. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  139. package/dist/backend/llvm/shapes.d.ts +33 -3
  140. package/dist/backend/llvm/shapes.js +183 -13
  141. package/dist/backend/llvm/shapes.js.map +1 -1
  142. package/dist/backend/llvm/stack-objects.d.ts +1 -2
  143. package/dist/backend/llvm/stack-objects.js +8 -5
  144. package/dist/backend/llvm/stack-objects.js.map +1 -1
  145. package/dist/backend/llvm/walkers.d.ts +12 -0
  146. package/dist/backend/llvm/walkers.js +46 -2
  147. package/dist/backend/llvm/walkers.js.map +1 -1
  148. package/dist/backend/may-throw.js +12 -2
  149. package/dist/backend/may-throw.js.map +1 -1
  150. package/dist/backend/may-throw.test.js +13 -0
  151. package/dist/backend/may-throw.test.js.map +1 -1
  152. package/dist/backend/native/contracts.d.ts +48 -8
  153. package/dist/backend/native/executable.js +55 -13
  154. package/dist/backend/native/executable.js.map +1 -1
  155. package/dist/backend/native/helper-identity-record.d.ts +11 -0
  156. package/dist/backend/native/helper-identity-record.js +76 -0
  157. package/dist/backend/native/helper-identity-record.js.map +1 -0
  158. package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
  159. package/dist/backend/native/helper-identity-record.test.js +101 -0
  160. package/dist/backend/native/helper-identity-record.test.js.map +1 -0
  161. package/dist/backend/native/library.js +9 -1
  162. package/dist/backend/native/library.js.map +1 -1
  163. package/dist/backend/native/runtime-inputs.js +4 -1
  164. package/dist/backend/native/runtime-inputs.js.map +1 -1
  165. package/dist/backend/native/vendor.d.ts +1 -1
  166. package/dist/backend/native/vendor.js +1 -1
  167. package/dist/backend/native/vendor.js.map +1 -1
  168. package/dist/backend/native-codegen-core.d.ts +13 -10
  169. package/dist/backend/native-codegen-core.js +26 -13
  170. package/dist/backend/native-codegen-core.js.map +1 -1
  171. package/dist/backend/native-codegen.js +27 -8
  172. package/dist/backend/native-codegen.js.map +1 -1
  173. package/dist/backend/native-codegen.test.js +110 -14
  174. package/dist/backend/native-codegen.test.js.map +1 -1
  175. package/dist/backend/native-link-info-core.d.ts +37 -8
  176. package/dist/backend/native-link-info-core.js.map +1 -1
  177. package/dist/backend/runtime-pack-core.d.ts +17 -2
  178. package/dist/backend/runtime-pack-core.js +18 -3
  179. package/dist/backend/runtime-pack-core.js.map +1 -1
  180. package/dist/backend/runtime-pack-targets.test.js +1 -1
  181. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  182. package/dist/backend/runtime-pack.test.js +211 -2
  183. package/dist/backend/runtime-pack.test.js.map +1 -1
  184. package/dist/backend/tree-classes.d.ts +42 -0
  185. package/dist/backend/tree-classes.js +723 -0
  186. package/dist/backend/tree-classes.js.map +1 -0
  187. package/dist/backend/tree-classes.test.d.ts +1 -0
  188. package/dist/backend/tree-classes.test.js +338 -0
  189. package/dist/backend/tree-classes.test.js.map +1 -0
  190. package/dist/backend/vendor-archives.d.ts +5 -1
  191. package/dist/backend/vendor-archives.js +51 -7
  192. package/dist/backend/vendor-archives.js.map +1 -1
  193. package/dist/backend/vendor-inputs.d.ts +25 -4
  194. package/dist/backend/vendor-inputs.js +68 -4
  195. package/dist/backend/vendor-inputs.js.map +1 -1
  196. package/dist/backend/vendor-inputs.test.js +35 -1
  197. package/dist/backend/vendor-inputs.test.js.map +1 -1
  198. package/dist/backend/warm-cache.js +1 -1
  199. package/dist/backend/warm-cache.js.map +1 -1
  200. package/dist/compat/fetch-profile.js +2 -2
  201. package/dist/coverage/report.js +47 -0
  202. package/dist/coverage/report.js.map +1 -1
  203. package/dist/coverage/surface-manifest.js +1 -1
  204. package/dist/diagnostics/codes.d.ts +8 -0
  205. package/dist/diagnostics/codes.js +8 -0
  206. package/dist/diagnostics/codes.js.map +1 -1
  207. package/dist/diagnostics/diagnostic.d.ts +27 -9
  208. package/dist/diagnostics/diagnostic.js +60 -19
  209. package/dist/diagnostics/diagnostic.js.map +1 -1
  210. package/dist/diagnostics/envelope.d.ts +18 -0
  211. package/dist/diagnostics/envelope.js.map +1 -1
  212. package/dist/executable/executable-cache.d.ts +21 -2
  213. package/dist/executable/executable-cache.js +21 -1
  214. package/dist/executable/executable-cache.js.map +1 -1
  215. package/dist/executable/executable-cache.test.js +123 -1
  216. package/dist/executable/executable-cache.test.js.map +1 -1
  217. package/dist/executable/prepare.js +199 -248
  218. package/dist/executable/prepare.js.map +1 -1
  219. package/dist/frontend/analysis.js +200 -18
  220. package/dist/frontend/analysis.js.map +1 -1
  221. package/dist/frontend/builtin-modules.d.ts +4 -0
  222. package/dist/frontend/builtin-modules.js +10 -0
  223. package/dist/frontend/builtin-modules.js.map +1 -1
  224. package/dist/frontend/early-errors.d.ts +12 -2
  225. package/dist/frontend/early-errors.js +535 -4
  226. package/dist/frontend/early-errors.js.map +1 -1
  227. package/dist/frontend/early-errors.test.js +165 -0
  228. package/dist/frontend/early-errors.test.js.map +1 -1
  229. package/dist/frontend/inferred-js-diagnostics.test.js +65 -0
  230. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  231. package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
  232. package/dist/frontend/jsx-opinion-sites.test.js +86 -0
  233. package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
  234. package/dist/frontend/lib-exports.d.ts +23 -4
  235. package/dist/frontend/lib-exports.js +98 -26
  236. package/dist/frontend/lib-exports.js.map +1 -1
  237. package/dist/frontend/lowering/binding-analysis.js +21 -3
  238. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  239. package/dist/frontend/lowering/buffers.d.ts +8 -0
  240. package/dist/frontend/lowering/buffers.js +43 -0
  241. package/dist/frontend/lowering/buffers.js.map +1 -0
  242. package/dist/frontend/lowering/builtin-calls.js +4 -0
  243. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  244. package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
  245. package/dist/frontend/lowering/builtin-namespaces.js +24 -3
  246. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  247. package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
  248. package/dist/frontend/lowering/builtin-statics.js +407 -0
  249. package/dist/frontend/lowering/builtin-statics.js.map +1 -0
  250. package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
  251. package/dist/frontend/lowering/builtins/arguments.js +12 -0
  252. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  253. package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
  254. package/dist/frontend/lowering/builtins/atomics.js +87 -1
  255. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  256. package/dist/frontend/lowering/builtins/child-process-methods.js +2 -2
  257. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  258. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
  259. package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
  260. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  261. package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
  262. package/dist/frontend/lowering/builtins/child-process.js +560 -27
  263. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  264. package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
  265. package/dist/frontend/lowering/builtins/compression.js +41 -21
  266. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  267. package/dist/frontend/lowering/builtins/constants.js +7 -2
  268. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  269. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  270. package/dist/frontend/lowering/builtins/filesystem-calls.js +28 -2
  271. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  272. package/dist/frontend/lowering/builtins/json.js +4 -0
  273. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  274. package/dist/frontend/lowering/builtins/module-calls.js +3 -1
  275. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  276. package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
  277. package/dist/frontend/lowering/builtins/numbers.js +10 -2
  278. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  279. package/dist/frontend/lowering/builtins/operating-system.d.ts +6 -3
  280. package/dist/frontend/lowering/builtins/operating-system.js +96 -16
  281. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  282. package/dist/frontend/lowering/builtins/process.d.ts +2 -2
  283. package/dist/frontend/lowering/builtins/process.js +103 -8
  284. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  285. package/dist/frontend/lowering/builtins/promises.js +169 -8
  286. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  287. package/dist/frontend/lowering/builtins/properties.js +6 -2
  288. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  289. package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
  290. package/dist/frontend/lowering/builtins/readline.js +180 -36
  291. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  292. package/dist/frontend/lowering/builtins/url.js +35 -12
  293. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  294. package/dist/frontend/lowering/builtins/webassembly.js +2 -0
  295. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  296. package/dist/frontend/lowering/call-arguments.d.ts +10 -0
  297. package/dist/frontend/lowering/call-arguments.js +37 -2
  298. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  299. package/dist/frontend/lowering/call-signatures.d.ts +10 -0
  300. package/dist/frontend/lowering/call-signatures.js +103 -0
  301. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  302. package/dist/frontend/lowering/class-construction.d.ts +14 -2
  303. package/dist/frontend/lowering/class-construction.js +99 -5
  304. package/dist/frontend/lowering/class-construction.js.map +1 -1
  305. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +9 -0
  306. package/dist/frontend/lowering/class-dynamic-dispatch.js +1283 -1030
  307. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  308. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
  309. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  310. package/dist/frontend/lowering/class-prototypes.js +20 -15
  311. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  312. package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
  313. package/dist/frontend/lowering/class-runtime-statics.js +20 -1
  314. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  315. package/dist/frontend/lowering/class-unions.js +21 -4
  316. package/dist/frontend/lowering/class-unions.js.map +1 -1
  317. package/dist/frontend/lowering/coercions/function-adapters.js +9 -0
  318. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  319. package/dist/frontend/lowering/coercions/state.d.ts +8 -0
  320. package/dist/frontend/lowering/coercions/state.js +17 -0
  321. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  322. package/dist/frontend/lowering/coercions/structural-plans.js +20 -5
  323. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  324. package/dist/frontend/lowering/coercions/structural.js +10 -1
  325. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  326. package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
  327. package/dist/frontend/lowering/coercions/unions.js +54 -10
  328. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  329. package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
  330. package/dist/frontend/lowering/constructor-returns.js +284 -58
  331. package/dist/frontend/lowering/constructor-returns.js.map +1 -1
  332. package/dist/frontend/lowering/containers/array-callbacks.js +156 -62
  333. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  334. package/dist/frontend/lowering/containers/array-construction.js +21 -3
  335. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  336. package/dist/frontend/lowering/containers/array-from-async.js +139 -3
  337. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  338. package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
  339. package/dist/frontend/lowering/containers/array-iteration.js +24 -7
  340. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
  341. package/dist/frontend/lowering/containers/array-methods.js +14 -11
  342. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  343. package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
  344. package/dist/frontend/lowering/containers/bytes.js +446 -86
  345. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  346. package/dist/frontend/lowering/containers/callback-arguments.d.ts +5 -0
  347. package/dist/frontend/lowering/containers/callback-arguments.js +21 -12
  348. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  349. package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
  350. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  351. package/dist/frontend/lowering/containers/collection-methods.js +52 -17
  352. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  353. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
  354. package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
  355. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  356. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
  357. package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
  358. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  359. package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
  360. package/dist/frontend/lowering/crypto-tables.js +5 -5
  361. package/dist/frontend/lowering/dispatch-sites.js +3 -0
  362. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  363. package/dist/frontend/lowering/divergences.d.ts +40 -0
  364. package/dist/frontend/lowering/divergences.js +239 -20
  365. package/dist/frontend/lowering/divergences.js.map +1 -1
  366. package/dist/frontend/lowering/effect-free.d.ts +12 -0
  367. package/dist/frontend/lowering/effect-free.js +44 -0
  368. package/dist/frontend/lowering/effect-free.js.map +1 -0
  369. package/dist/frontend/lowering/expressions/array-literals.d.ts +10 -0
  370. package/dist/frontend/lowering/expressions/array-literals.js +62 -0
  371. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  372. package/dist/frontend/lowering/expressions/binary.js +115 -5
  373. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  374. package/dist/frontend/lowering/expressions/element-access.js +151 -7
  375. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  376. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
  377. package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
  378. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
  379. package/dist/frontend/lowering/expressions/identifiers.js +31 -2
  380. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  381. package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
  382. package/dist/frontend/lowering/expressions/narrowing.js +175 -22
  383. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  384. package/dist/frontend/lowering/expressions/object-literals.js +173 -11
  385. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  386. package/dist/frontend/lowering/expressions/optional-chains.js +5 -1
  387. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  388. package/dist/frontend/lowering/expressions/property-access.d.ts +8 -0
  389. package/dist/frontend/lowering/expressions/property-access.js +379 -109
  390. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  391. package/dist/frontend/lowering/expressions/relational.js +237 -7
  392. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  393. package/dist/frontend/lowering/expressions/typeof.js +8 -0
  394. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  395. package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
  396. package/dist/frontend/lowering/expressions/union-fields.js +103 -13
  397. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  398. package/dist/frontend/lowering/expressions/updates.js +74 -55
  399. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  400. package/dist/frontend/lowering/function-returns.js +37 -10
  401. package/dist/frontend/lowering/function-returns.js.map +1 -1
  402. package/dist/frontend/lowering/general-streams.js +5 -0
  403. package/dist/frontend/lowering/general-streams.js.map +1 -1
  404. package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
  405. package/dist/frontend/lowering/generator-delegation.js +301 -118
  406. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  407. package/dist/frontend/lowering/generic-functions.d.ts +27 -1
  408. package/dist/frontend/lowering/generic-functions.js +432 -18
  409. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  410. package/dist/frontend/lowering/global-function-values.d.ts +25 -0
  411. package/dist/frontend/lowering/global-function-values.js +193 -0
  412. package/dist/frontend/lowering/global-function-values.js.map +1 -0
  413. package/dist/frontend/lowering/global-values.d.ts +6 -4
  414. package/dist/frontend/lowering/global-values.js +24 -10
  415. package/dist/frontend/lowering/global-values.js.map +1 -1
  416. package/dist/frontend/lowering/host-global-values.d.ts +31 -0
  417. package/dist/frontend/lowering/host-global-values.js +121 -0
  418. package/dist/frontend/lowering/host-global-values.js.map +1 -0
  419. package/dist/frontend/lowering/host-globals.d.ts +74 -0
  420. package/dist/frontend/lowering/host-globals.js +344 -0
  421. package/dist/frontend/lowering/host-globals.js.map +1 -0
  422. package/dist/frontend/lowering/http2-constants.js +1 -1
  423. package/dist/frontend/lowering/iterator-adapters.js +46 -17
  424. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  425. package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
  426. package/dist/frontend/lowering/iterator-prototype.js +160 -0
  427. package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
  428. package/dist/frontend/lowering/key-order-witness.js +43 -22
  429. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  430. package/dist/frontend/lowering/key-order-witness.test.js +1 -0
  431. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  432. package/dist/frontend/lowering/lib-boundary.js +11 -3
  433. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  434. package/dist/frontend/lowering/lower-assert.js +30 -15
  435. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  436. package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
  437. package/dist/frontend/lowering/lower-async-iteration.js +15 -0
  438. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  439. package/dist/frontend/lowering/lower-builtin-values.js +11 -1
  440. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  441. package/dist/frontend/lowering/lower-calls.d.ts +25 -0
  442. package/dist/frontend/lowering/lower-calls.js +929 -227
  443. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  444. package/dist/frontend/lowering/lower-calls.test.js +59 -16
  445. package/dist/frontend/lowering/lower-calls.test.js.map +1 -1
  446. package/dist/frontend/lowering/lower-classes.d.ts +20 -0
  447. package/dist/frontend/lowering/lower-classes.js +468 -44
  448. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  449. package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -2
  450. package/dist/frontend/lowering/lower-event-emitter.js +253 -83
  451. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  452. package/dist/frontend/lowering/lower-exprs.d.ts +1 -1
  453. package/dist/frontend/lowering/lower-exprs.js +71 -20
  454. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  455. package/dist/frontend/lowering/lower-functions.js +25 -6
  456. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  457. package/dist/frontend/lowering/lower-generators.js +57 -10
  458. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  459. package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
  460. package/dist/frontend/lowering/lower-global-value.js +14 -5
  461. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  462. package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
  463. package/dist/frontend/lowering/lower-inspect.js +638 -64
  464. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  465. package/dist/frontend/lowering/lower-modules.js +48 -2
  466. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  467. package/dist/frontend/lowering/lower-namespaces.js +18 -0
  468. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  469. package/dist/frontend/lowering/lower-node-island.js +16 -6
  470. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  471. package/dist/frontend/lowering/lower-server.js +303 -87
  472. package/dist/frontend/lowering/lower-server.js.map +1 -1
  473. package/dist/frontend/lowering/lower-stdlib.js +45 -0
  474. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  475. package/dist/frontend/lowering/lower-stmts.d.ts +14 -11
  476. package/dist/frontend/lowering/lower-stmts.js +270 -52
  477. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  478. package/dist/frontend/lowering/lower-timers.js +110 -27
  479. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  480. package/dist/frontend/lowering/lower-url.js +6 -3
  481. package/dist/frontend/lowering/lower-url.js.map +1 -1
  482. package/dist/frontend/lowering/lowerer.d.ts +227 -21
  483. package/dist/frontend/lowering/lowerer.js +651 -92
  484. package/dist/frontend/lowering/lowerer.js.map +1 -1
  485. package/dist/frontend/lowering/lowerer.test.js +18 -0
  486. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  487. package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
  488. package/dist/frontend/lowering/lowering-facts.js +323 -0
  489. package/dist/frontend/lowering/lowering-facts.js.map +1 -0
  490. package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
  491. package/dist/frontend/lowering/lowering-facts.test.js +100 -0
  492. package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
  493. package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
  494. package/dist/frontend/lowering/nan-coded-reads.js +112 -9
  495. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  496. package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
  497. package/dist/frontend/lowering/optional-arguments.js +26 -2
  498. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  499. package/dist/frontend/lowering/partial-assertions.d.ts +0 -3
  500. package/dist/frontend/lowering/partial-assertions.js +9 -15
  501. package/dist/frontend/lowering/partial-assertions.js.map +1 -1
  502. package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
  503. package/dist/frontend/lowering/primitive-throws.js +241 -0
  504. package/dist/frontend/lowering/primitive-throws.js.map +1 -0
  505. package/dist/frontend/lowering/primitive-wrappers.js +1 -0
  506. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
  507. package/dist/frontend/lowering/record-inherited.d.ts +17 -1
  508. package/dist/frontend/lowering/record-inherited.js +16 -2
  509. package/dist/frontend/lowering/record-inherited.js.map +1 -1
  510. package/dist/frontend/lowering/record-links.d.ts +73 -0
  511. package/dist/frontend/lowering/record-links.js +797 -0
  512. package/dist/frontend/lowering/record-links.js.map +1 -0
  513. package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
  514. package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
  515. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  516. package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
  517. package/dist/frontend/lowering/runtime-optional-report.js +300 -0
  518. package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
  519. package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
  520. package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
  521. package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
  522. package/dist/frontend/lowering/static-typeof.d.ts +3 -1
  523. package/dist/frontend/lowering/static-typeof.js +6 -1
  524. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  525. package/dist/frontend/lowering/strict-mode.d.ts +1 -5
  526. package/dist/frontend/lowering/strict-mode.js +4 -30
  527. package/dist/frontend/lowering/strict-mode.js.map +1 -1
  528. package/dist/frontend/lowering/structural-instances.d.ts +7 -0
  529. package/dist/frontend/lowering/structural-instances.js +23 -0
  530. package/dist/frontend/lowering/structural-instances.js.map +1 -1
  531. package/dist/frontend/lowering/surfaces.d.ts +15 -1
  532. package/dist/frontend/lowering/surfaces.js +78 -10
  533. package/dist/frontend/lowering/surfaces.js.map +1 -1
  534. package/dist/frontend/lowering/union-retag.d.ts +13 -1
  535. package/dist/frontend/lowering/union-retag.js +55 -1
  536. package/dist/frontend/lowering/union-retag.js.map +1 -1
  537. package/dist/frontend/lowering/union-retag.test.js +51 -0
  538. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  539. package/dist/frontend/lowering/unit-journal.d.ts +8 -0
  540. package/dist/frontend/lowering/unit-journal.js +14 -0
  541. package/dist/frontend/lowering/unit-journal.js.map +1 -1
  542. package/dist/frontend/lowering/unit-journal.test.js +36 -1
  543. package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
  544. package/dist/frontend/lowering/zlib-constants.js +3 -2
  545. package/dist/frontend/lowering/zlib-constants.js.map +1 -1
  546. package/dist/frontend/npm-static.js +78 -9
  547. package/dist/frontend/npm-static.js.map +1 -1
  548. package/dist/frontend/npm-static.test.js +95 -2
  549. package/dist/frontend/npm-static.test.js.map +1 -1
  550. package/dist/frontend/pipeline.d.ts +5 -4
  551. package/dist/frontend/pipeline.js +94 -31
  552. package/dist/frontend/pipeline.js.map +1 -1
  553. package/dist/frontend/pipeline.test.js +68 -11
  554. package/dist/frontend/pipeline.test.js.map +1 -1
  555. package/dist/frontend/program.d.ts +62 -2
  556. package/dist/frontend/program.js +695 -422
  557. package/dist/frontend/program.js.map +1 -1
  558. package/dist/frontend/program.test.js +37 -1
  559. package/dist/frontend/program.test.js.map +1 -1
  560. package/dist/frontend/services-node.d.ts +7 -0
  561. package/dist/frontend/services-node.js +32 -1
  562. package/dist/frontend/services-node.js.map +1 -1
  563. package/dist/frontend/services-node.test.js +51 -0
  564. package/dist/frontend/services-node.test.js.map +1 -1
  565. package/dist/frontend/shape-inference/overlay.js +68 -2
  566. package/dist/frontend/shape-inference/overlay.js.map +1 -1
  567. package/dist/frontend/tier-analysis.d.ts +9 -0
  568. package/dist/frontend/tier-analysis.js +1 -0
  569. package/dist/frontend/tier-analysis.js.map +1 -1
  570. package/dist/frontend/tsc-codes.d.ts +57 -3
  571. package/dist/frontend/tsc-codes.js +935 -150
  572. package/dist/frontend/tsc-codes.js.map +1 -1
  573. package/dist/frontend/tsc-codes.test.js +221 -12
  574. package/dist/frontend/tsc-codes.test.js.map +1 -1
  575. package/dist/frontend/type-mapper.d.ts +91 -9
  576. package/dist/frontend/type-mapper.js +622 -181
  577. package/dist/frontend/type-mapper.js.map +1 -1
  578. package/dist/index.d.ts +1 -1
  579. package/dist/index.js +80 -15
  580. package/dist/index.js.map +1 -1
  581. package/dist/index.test.d.ts +1 -0
  582. package/dist/index.test.js +60 -0
  583. package/dist/index.test.js.map +1 -0
  584. package/dist/ir/builtin-effects.js +43 -0
  585. package/dist/ir/builtin-effects.js.map +1 -1
  586. package/dist/ir/builtin-signatures.d.ts +1 -1
  587. package/dist/ir/builtin-signatures.js +242 -16
  588. package/dist/ir/builtin-signatures.js.map +1 -1
  589. package/dist/ir/callback-specialization.d.ts +3 -2
  590. package/dist/ir/callback-specialization.js +35 -25
  591. package/dist/ir/callback-specialization.js.map +1 -1
  592. package/dist/ir/capture-values.d.ts +8 -4
  593. package/dist/ir/capture-values.js +9 -6
  594. package/dist/ir/capture-values.js.map +1 -1
  595. package/dist/ir/char-unit-locals.d.ts +6 -2
  596. package/dist/ir/char-unit-locals.js +11 -2
  597. package/dist/ir/char-unit-locals.js.map +1 -1
  598. package/dist/ir/class-key-index.d.ts +18 -0
  599. package/dist/ir/class-key-index.js +29 -0
  600. package/dist/ir/class-key-index.js.map +1 -0
  601. package/dist/ir/class-key-index.test.d.ts +1 -0
  602. package/dist/ir/class-key-index.test.js +25 -0
  603. package/dist/ir/class-key-index.test.js.map +1 -0
  604. package/dist/ir/codec.generated.d.ts +1 -1
  605. package/dist/ir/codec.generated.js +724 -648
  606. package/dist/ir/codec.generated.js.map +1 -1
  607. package/dist/ir/constant-globals.d.ts +5 -2
  608. package/dist/ir/constant-globals.js +25 -27
  609. package/dist/ir/constant-globals.js.map +1 -1
  610. package/dist/ir/expression-inlining.d.ts +4 -2
  611. package/dist/ir/expression-inlining.js +8 -2
  612. package/dist/ir/expression-inlining.js.map +1 -1
  613. package/dist/ir/field-values.d.ts +5 -2
  614. package/dist/ir/field-values.js +32 -21
  615. package/dist/ir/field-values.js.map +1 -1
  616. package/dist/ir/fields.generated.d.ts +11 -2
  617. package/dist/ir/fields.generated.js +8 -0
  618. package/dist/ir/fields.generated.js.map +1 -1
  619. package/dist/ir/final-fields.js +1 -1
  620. package/dist/ir/final-fields.js.map +1 -1
  621. package/dist/ir/function-references.d.ts +5 -4
  622. package/dist/ir/function-references.js +7 -4
  623. package/dist/ir/function-references.js.map +1 -1
  624. package/dist/ir/function-references.test.js +7 -0
  625. package/dist/ir/function-references.test.js.map +1 -1
  626. package/dist/ir/init-only-globals.d.ts +4 -2
  627. package/dist/ir/init-only-globals.js +17 -18
  628. package/dist/ir/init-only-globals.js.map +1 -1
  629. package/dist/ir/inline-array-views.js +1 -0
  630. package/dist/ir/inline-array-views.js.map +1 -1
  631. package/dist/ir/int32-slots.js +7 -0
  632. package/dist/ir/int32-slots.js.map +1 -1
  633. package/dist/ir/ir.d.ts +59 -4
  634. package/dist/ir/ir.js +7 -0
  635. package/dist/ir/ir.js.map +1 -1
  636. package/dist/ir/js-groups.d.ts +51 -0
  637. package/dist/ir/js-groups.js +394 -0
  638. package/dist/ir/js-groups.js.map +1 -0
  639. package/dist/ir/js-groups.test.d.ts +1 -0
  640. package/dist/ir/js-groups.test.js +555 -0
  641. package/dist/ir/js-groups.test.js.map +1 -0
  642. package/dist/ir/js-ic.js +30 -5
  643. package/dist/ir/js-ic.js.map +1 -1
  644. package/dist/ir/js-ic.test.js +27 -1
  645. package/dist/ir/js-ic.test.js.map +1 -1
  646. package/dist/ir/node-index.d.ts +23 -6
  647. package/dist/ir/node-index.js +126 -49
  648. package/dist/ir/node-index.js.map +1 -1
  649. package/dist/ir/numeric-call-specialization.d.ts +4 -2
  650. package/dist/ir/numeric-call-specialization.js +40 -26
  651. package/dist/ir/numeric-call-specialization.js.map +1 -1
  652. package/dist/ir/paired-while-loops.d.ts +4 -2
  653. package/dist/ir/paired-while-loops.js +8 -2
  654. package/dist/ir/paired-while-loops.js.map +1 -1
  655. package/dist/ir/parameter-versions.d.ts +13 -4
  656. package/dist/ir/parameter-versions.js +63 -42
  657. package/dist/ir/parameter-versions.js.map +1 -1
  658. package/dist/ir/property-bags.d.ts +4 -2
  659. package/dist/ir/property-bags.js +22 -17
  660. package/dist/ir/property-bags.js.map +1 -1
  661. package/dist/ir/row-pairs.d.ts +4 -2
  662. package/dist/ir/row-pairs.js +12 -11
  663. package/dist/ir/row-pairs.js.map +1 -1
  664. package/dist/ir/runtime-features.d.ts +87 -12
  665. package/dist/ir/runtime-features.js +263 -160
  666. package/dist/ir/runtime-features.js.map +1 -1
  667. package/dist/ir/runtime-features.test.js +109 -139
  668. package/dist/ir/runtime-features.test.js.map +1 -1
  669. package/dist/ir/runtime-jam-loops.d.ts +35 -0
  670. package/dist/ir/runtime-jam-loops.js +604 -0
  671. package/dist/ir/runtime-jam-loops.js.map +1 -0
  672. package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
  673. package/dist/ir/runtime-jam-loops.test.js +565 -0
  674. package/dist/ir/runtime-jam-loops.test.js.map +1 -0
  675. package/dist/ir/saturating-loop-jams.d.ts +4 -2
  676. package/dist/ir/saturating-loop-jams.js +11 -10
  677. package/dist/ir/saturating-loop-jams.js.map +1 -1
  678. package/dist/ir/scalar-records.d.ts +5 -2
  679. package/dist/ir/scalar-records.js +12 -2
  680. package/dist/ir/scalar-records.js.map +1 -1
  681. package/dist/ir/self-captures.d.ts +4 -2
  682. package/dist/ir/self-captures.js +32 -27
  683. package/dist/ir/self-captures.js.map +1 -1
  684. package/dist/ir/serialize.d.ts +6 -1
  685. package/dist/ir/serialize.js +87 -23
  686. package/dist/ir/serialize.js.map +1 -1
  687. package/dist/ir/serialize.test.js +26 -0
  688. package/dist/ir/serialize.test.js.map +1 -1
  689. package/dist/ir/tiers.js +1 -0
  690. package/dist/ir/tiers.js.map +1 -1
  691. package/dist/ir/traverse.js +4 -0
  692. package/dist/ir/traverse.js.map +1 -1
  693. package/dist/ir/typed-argument-clones.d.ts +30 -0
  694. package/dist/ir/typed-argument-clones.js +789 -0
  695. package/dist/ir/typed-argument-clones.js.map +1 -0
  696. package/dist/ir/union-arm-loops.d.ts +3 -0
  697. package/dist/ir/union-arm-loops.js +373 -0
  698. package/dist/ir/union-arm-loops.js.map +1 -0
  699. package/dist/ir/union-arm-loops.test.d.ts +1 -0
  700. package/dist/ir/union-arm-loops.test.js +230 -0
  701. package/dist/ir/union-arm-loops.test.js.map +1 -0
  702. package/dist/ir/validate.js +88 -18
  703. package/dist/ir/validate.js.map +1 -1
  704. package/dist/library/compiler-self-identity.d.ts +8 -2
  705. package/dist/library/compiler-self-identity.js +92 -18
  706. package/dist/library/compiler-self-identity.js.map +1 -1
  707. package/dist/library/compiler-self-identity.test.js +150 -3
  708. package/dist/library/compiler-self-identity.test.js.map +1 -1
  709. package/dist/library/int-infer.d.ts +5 -0
  710. package/dist/library/int-infer.js +15 -3
  711. package/dist/library/int-infer.js.map +1 -1
  712. package/dist/library/ir-policy.js +1 -0
  713. package/dist/library/ir-policy.js.map +1 -1
  714. package/dist/library/library-cache.d.ts +4 -0
  715. package/dist/library/library-cache.js +2 -0
  716. package/dist/library/library-cache.js.map +1 -1
  717. package/dist/library/library-cache.test.js +26 -0
  718. package/dist/library/library-cache.test.js.map +1 -1
  719. package/dist/library/prepare.js +99 -31
  720. package/dist/library/prepare.js.map +1 -1
  721. package/dist/native/cache.d.ts +7 -0
  722. package/dist/native/cache.js +47 -0
  723. package/dist/native/cache.js.map +1 -1
  724. package/dist/native/cache.test.js +13 -1
  725. package/dist/native/cache.test.js.map +1 -1
  726. package/dist/native/cli.js +1 -1
  727. package/dist/native/cli.js.map +1 -1
  728. package/dist/native/compiler.js +18 -3
  729. package/dist/native/compiler.js.map +1 -1
  730. package/dist/native/executable-cache-open.test.js +31 -5
  731. package/dist/native/executable-cache-open.test.js.map +1 -1
  732. package/dist/native/executable-cache.d.ts +6 -1
  733. package/dist/native/executable-cache.js +7 -1
  734. package/dist/native/executable-cache.js.map +1 -1
  735. package/dist/native/prepare.d.ts +3 -0
  736. package/dist/native/prepare.js +43 -26
  737. package/dist/native/prepare.js.map +1 -1
  738. package/dist/native/prepare.test.js +25 -3
  739. package/dist/native/prepare.test.js.map +1 -1
  740. package/dist/native/sanitizer.js +10 -1
  741. package/dist/native/sanitizer.js.map +1 -1
  742. package/dist/native/sanitizer.test.js +7 -2
  743. package/dist/native/sanitizer.test.js.map +1 -1
  744. package/dist/node-islands/boundary.d.ts +12 -0
  745. package/dist/node-islands/boundary.js +38 -6
  746. package/dist/node-islands/boundary.js.map +1 -1
  747. package/dist/node-islands/boundary.test.d.ts +1 -0
  748. package/dist/node-islands/boundary.test.js +76 -0
  749. package/dist/node-islands/boundary.test.js.map +1 -0
  750. package/dist/node-islands/detect.d.ts +9 -0
  751. package/dist/node-islands/detect.js +110 -0
  752. package/dist/node-islands/detect.js.map +1 -1
  753. package/dist/node-islands/detect.test.js +24 -0
  754. package/dist/node-islands/detect.test.js.map +1 -1
  755. package/dist/node-islands/graph-islands.d.ts +40 -0
  756. package/dist/node-islands/graph-islands.js +128 -0
  757. package/dist/node-islands/graph-islands.js.map +1 -0
  758. package/dist/node-islands/growth.d.ts +57 -0
  759. package/dist/node-islands/growth.js +205 -0
  760. package/dist/node-islands/growth.js.map +1 -0
  761. package/dist/node-islands/report.d.ts +12 -0
  762. package/dist/node-islands/report.js +28 -0
  763. package/dist/node-islands/report.js.map +1 -1
  764. package/dist/node-islands/report.test.js +2 -0
  765. package/dist/node-islands/report.test.js.map +1 -1
  766. package/dist/node-islands/rules.js +5 -0
  767. package/dist/node-islands/rules.js.map +1 -1
  768. package/dist/node-islands/scan.d.ts +11 -2
  769. package/dist/node-islands/scan.js +61 -9
  770. package/dist/node-islands/scan.js.map +1 -1
  771. package/dist/wasm/translate.js +11 -5
  772. package/dist/wasm/translate.js.map +1 -1
  773. package/dist/wasm/translate.test.js +35 -0
  774. package/dist/wasm/translate.test.js.map +1 -1
  775. package/package.json +20 -20
  776. package/surface-manifest.json +184 -117
@@ -70,11 +70,13 @@ export declare function lowerDynamicEmitterOn(lowerer: Lowerer, receiver: IrExpr
70
70
  * routes here): the receiver is the current method's `this`, and emit
71
71
  * NEVER dispatches through an override at-or-below the lexical class —
72
72
  * JS's static super dispatch (the nearest override STRICTLY ABOVE the
73
- * lexical class still answers, exactly like a prototype-chain walk). */
73
+ * lexical class still answers, exactly like a prototype-chain walk).
74
+ * `argsOverride` replaces the call's arguments (`method.call(thisArg,
75
+ * ...args)` passes the ones after thisArg). */
74
76
  export declare function lowerEmitterMethodCall(lowerer: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression, info: ClassInfo, superRecv?: {
75
77
  thisRef: IrExpr;
76
78
  cls: ClassInfo;
77
- }): IrExpr | null;
79
+ }, argsOverride?: readonly ts.Expression[]): IrExpr | null;
78
80
  export interface EmitOverrideRec {
79
81
  decl: ts.MethodDeclaration;
80
82
  eventSym: ts.Symbol;
@@ -105,6 +107,8 @@ export interface EmitSpecRequest {
105
107
  * when it conforms. Checked at class collection; the recorded override
106
108
  * then lowers per event with no further shape questions. */
107
109
  export declare function emitOverrideShapeReason(lowerer: Lowerer, member: ts.MethodDeclaration): string | null;
110
+ /** The nearest class at-or-above `info` declaring an emit override. */
111
+ export declare function emitOverrideAtOrAbove(info: ClassInfo | null | undefined): ClassInfo | null;
108
112
  /** One specialization body: the override method's statements lowered with
109
113
  * `event` bound to the name and hidden tuple parameters standing in for
110
114
  * the rest parameter (readable ONLY through the super-forward, which the
@@ -52,6 +52,8 @@ import * as ts from "../ts7/adapter.js";
52
52
  import { dynFallbackType, newFnCtx } from "./lowerer.js";
53
53
  import { isJsSourceFile, locOf } from "../program.js";
54
54
  import { bodyReadsArguments } from "../arguments-usage.js";
55
+ import { nullishExprUnitOf, stripValueWrappers } from "./binding-analysis.js";
56
+ import { isPureReference } from "./effect-free.js";
55
57
  import { functionUsesThis } from "./cjs-exports-object.js";
56
58
  import { isThisParameter } from "./call-signatures.js";
57
59
  import { arrayOf, BOOL, canBoxFuncIntoDyn, canConvertToDyn, canDynCheckTo, isDynTypedRefType, DYN, F64, isUnitType, STRING, typeEquals, typeKey, VOID, } from "../../ir/ir.js";
@@ -286,48 +288,48 @@ function emitterEvents(lowerer) {
286
288
  if ((ts.isIdentifier(callee) || ts.isPropertyAccessExpression(callee)) &&
287
289
  (ts.isIdentifier(callee) ? callee : callee.name).text === "getEventListeners" &&
288
290
  node.arguments.nodes.length === 2) {
289
- const nameT = (() => {
290
- try {
291
- return lowerer.typeOf(node.arguments.nodes[1]);
292
- }
293
- catch {
294
- return null;
295
- }
296
- })();
297
- if (nameT?.isStringLiteralType())
298
- listenersRead.add(literalEventKey(nameT.value));
291
+ const key = scannedEventKey(lowerer, node.arguments.nodes[1]);
292
+ if (key !== null && key !== ERROR_MONITOR_EVENT)
293
+ listenersRead.add(key);
299
294
  return;
300
295
  }
301
296
  if (!ts.isPropertyAccessExpression(callee))
302
297
  return;
303
- const member = callee.name.text;
298
+ let member = callee.name.text;
299
+ let recvNode = callee.expression;
300
+ let callArgs = node.arguments.nodes;
301
+ // `R.<method>.call(thisArg, ...args)` runs the method on thisArg
302
+ // (lowerEmitterMethodValueCall in lower-calls.ts).
303
+ if (member === "call" &&
304
+ ts.isPropertyAccessExpression(callee.expression) &&
305
+ callArgs.length > 0) {
306
+ member = callee.expression.name.text;
307
+ recvNode = callArgs[0];
308
+ callArgs = callArgs.slice(1);
309
+ }
304
310
  if (member === "listeners" || member === "rawListeners") {
305
- const arg = node.arguments.nodes[0];
306
- let nameT = null;
311
+ const arg = callArgs[0];
307
312
  try {
308
- if (!arg ||
309
- !scannedEmitterInfo(lowerer, lowerer.mapTypeOf(lowerer.typeOf(callee.expression))))
313
+ if (!arg || !scannedEmitterInfo(lowerer, lowerer.mapTypeOf(lowerer.typeOf(recvNode))))
310
314
  return;
311
- nameT = lowerer.typeOf(arg);
312
315
  }
313
316
  catch {
314
317
  return;
315
318
  }
316
- if (nameT.isStringLiteralType())
317
- listenersRead.add(literalEventKey(nameT.value));
319
+ const key = scannedEventKey(lowerer, arg);
320
+ if (key !== null && key !== ERROR_MONITOR_EVENT)
321
+ listenersRead.add(key);
318
322
  return;
319
323
  }
320
324
  const isEmit = member === "emit";
321
325
  if (!isEmit && !REGISTER_MEMBERS.has(member))
322
326
  return;
323
- const arg0 = node.arguments.nodes[0];
327
+ const arg0 = callArgs[0];
324
328
  if (!arg0)
325
329
  return;
326
330
  let recvT = null;
327
- let nameT = null;
328
331
  try {
329
- recvT = lowerer.mapTypeOf(lowerer.typeOf(callee.expression));
330
- nameT = lowerer.typeOf(arg0);
332
+ recvT = lowerer.mapTypeOf(lowerer.typeOf(recvNode));
331
333
  }
332
334
  catch {
333
335
  return; // checker trouble is the lowering's business, not the scan's
@@ -335,11 +337,7 @@ function emitterEvents(lowerer) {
335
337
  const info = scannedEmitterInfo(lowerer, recvT);
336
338
  if (!info)
337
339
  return;
338
- const literal = isErrorMonitorRef(lowerer, arg0)
339
- ? ERROR_MONITOR_EVENT
340
- : nameT.isStringLiteralType()
341
- ? literalEventKey(nameT.value)
342
- : null;
340
+ const literal = scannedEventKey(lowerer, arg0);
343
341
  if (literal === null) {
344
342
  const pattern = computedEventPatternOf(lowerer, arg0);
345
343
  if (pattern &&
@@ -354,7 +352,7 @@ function emitterEvents(lowerer) {
354
352
  return;
355
353
  }
356
354
  const name = literal;
357
- if (META_EVENTS.has(name) && !isEmit && node.arguments.nodes[1]) {
355
+ if (META_EVENTS.has(name) && !isEmit && callArgs[1]) {
358
356
  // A dyn-flavored meta listener receives each added or removed
359
357
  // listener as a checked-dynamic function value. The scan cannot
360
358
  // lower the listener as dynListenerFlavor does, so it counts every
@@ -363,7 +361,7 @@ function emitterEvents(lowerer) {
363
361
  // JavaScript function without parameters, and the dyn-flavored
364
362
  // forms. Counting one too many only routes more registrations
365
363
  // through the adapter.
366
- const cbNode = node.arguments.nodes[1];
364
+ const cbNode = callArgs[1];
367
365
  let typed = false;
368
366
  try {
369
367
  const cbCt = lowerer.typeOf(cbNode);
@@ -384,7 +382,7 @@ function emitterEvents(lowerer) {
384
382
  }
385
383
  if (isEmit && name === "error") {
386
384
  try {
387
- const payload = node.arguments.nodes.slice(1);
385
+ const payload = callArgs.slice(1);
388
386
  if (payload.length !== 1 ||
389
387
  !rootsAtError(lowerer, lowerer.mapTypeOf(lowerer.typeOf(payload[0])))) {
390
388
  table.get("error").valueEmit = true;
@@ -405,12 +403,12 @@ function emitterEvents(lowerer) {
405
403
  return;
406
404
  try {
407
405
  if (isEmit) {
408
- mergeEmit(name, node.arguments.nodes.slice(1).map((a) => lowerer.mapTypeOf(lowerer.typeOf(a))), isJsSourceFile(sf));
406
+ mergeEmit(name, callArgs.slice(1).map((a) => lowerer.mapTypeOf(lowerer.typeOf(a))), isJsSourceFile(sf));
409
407
  }
410
- else if (node.arguments.nodes[1]) {
411
- const cbCt = lowerer.typeOf(node.arguments.nodes[1]);
412
- const cbT = lowerer.mapTypeOf(cbCt) ?? dynFallbackType(lowerer, node.arguments.nodes[1], cbCt);
413
- const pack = readsArgumentsPack(lowerer, node.arguments.nodes[1]);
408
+ else if (callArgs[1]) {
409
+ const cbCt = lowerer.typeOf(callArgs[1]);
410
+ const cbT = lowerer.mapTypeOf(cbCt) ?? dynFallbackType(lowerer, callArgs[1], cbCt);
411
+ const pack = readsArgumentsPack(lowerer, callArgs[1]);
414
412
  // A TypeScript listener with no parameters is typed too: it
415
413
  // registers without the adapter, so an untyped emit reaches it
416
414
  // only through the event's fixed ABI. A JavaScript function
@@ -523,14 +521,108 @@ function isErrorMonitorRef(lowerer, arg) {
523
521
  const property = lowerer.checker.getPropertyOfType(lowerer.typeOf(variable.initializer), key.text);
524
522
  return property !== undefined && isMonitorType(lowerer.checker.getTypeOfSymbol(property));
525
523
  }
524
+ /** A name expression whose evaluation has no effects: a string or number
525
+ * literal, a `null`, `true` or `false` keyword, a binding read, or a stored
526
+ * field or record entry read. A call or an accessor lowers as a run-time
527
+ * name so its effects still run. */
528
+ function staticNameExpr(lowerer, arg) {
529
+ const expression = stripValueWrappers(arg);
530
+ if (ts.isStringLiteral(expression) ||
531
+ ts.isNoSubstitutionTemplateLiteral(expression) ||
532
+ ts.isNumericLiteral(expression) ||
533
+ expression.kind === ts.SyntaxKind.NullKeyword ||
534
+ expression.kind === ts.SyntaxKind.TrueKeyword ||
535
+ expression.kind === ts.SyntaxKind.FalseKeyword) {
536
+ return true;
537
+ }
538
+ return isPureReference(lowerer, expression) || staticStdlibRead(lowerer, expression);
539
+ }
540
+ /** A read of a standard library field (`events.errorMonitor`,
541
+ * `EventEmitter.errorMonitor`): a plain member of the standard library's
542
+ * declaration, so it runs no program code. */
543
+ function staticStdlibRead(lowerer, node) {
544
+ if (!ts.isPropertyAccessExpression(node) || node.questionDotToken)
545
+ return false;
546
+ if (!isPureReference(lowerer, node.expression))
547
+ return false;
548
+ const symbol = lowerer.checker.getSymbolAtLocation(node.name);
549
+ return (symbol !== undefined &&
550
+ lowerer.isStdlibSymbol(symbol) &&
551
+ (symbol.flags &
552
+ (ts.SymbolFlags.GetAccessor | ts.SymbolFlags.SetAccessor | ts.SymbolFlags.Method)) ===
553
+ 0);
554
+ }
526
555
  /** A compile-time event key (literalEventKey): a string-literal TYPE
527
556
  * (const bindings and literal unions of one member count — the
528
- * staticHeaderKeyOf stance) or the errorMonitor symbol. */
557
+ * staticHeaderKeyOf stance) or the errorMonitor symbol, read without
558
+ * effects. A number-literal type read without effects and a `null`,
559
+ * `undefined`, `true` or `false` literal name the string Node's listener
560
+ * table keys them by, the property key `String(name)`: `on(123, fn)`
561
+ * registers under '123'. */
529
562
  function literalEventName(lowerer, arg) {
530
- if (isErrorMonitorRef(lowerer, arg))
563
+ const staticName = staticNameExpr(lowerer, arg);
564
+ if (staticName && isErrorMonitorRef(lowerer, arg))
531
565
  return ERROR_MONITOR_EVENT;
532
- const t = lowerer.typeOf(arg);
533
- return t.isStringLiteralType() ? literalEventKey(t.value) : null;
566
+ if (staticName) {
567
+ const t = lowerer.typeOf(arg);
568
+ if (t.isStringLiteralType())
569
+ return literalEventKey(t.value);
570
+ if (t.isNumberLiteralType())
571
+ return literalEventKey(String(t.value));
572
+ }
573
+ const unit = nullishExprUnitOf(lowerer, arg);
574
+ if (unit !== null)
575
+ return unit;
576
+ let expression = arg;
577
+ while (ts.isParenthesizedExpression(expression))
578
+ expression = expression.expression;
579
+ if (expression.kind === ts.SyntaxKind.TrueKeyword)
580
+ return "true";
581
+ if (expression.kind === ts.SyntaxKind.FalseKeyword)
582
+ return "false";
583
+ return null;
584
+ }
585
+ /** An event-name argument as the string Node's listener table keys it by:
586
+ * a compile-time key, or a string, number or boolean value (or a union of
587
+ * those with null and undefined) converted as a property key
588
+ * (`String(name)`). An untyped value converts with the dynamic ToString,
589
+ * as the untyped emitter entries do. Other names are refused at the
590
+ * argument. */
591
+ function eventNameArg(lowerer, member, arg) {
592
+ const key = literalEventName(lowerer, arg);
593
+ if (key !== null)
594
+ return eventNameExpr(key, locOf(arg));
595
+ const value = lowerer.lowerExpr(arg);
596
+ if (value.type.kind === "string")
597
+ return value;
598
+ const converts = (t) => t.kind === "string" || t.kind === "f64" || t.kind === "bool" || isUnitType(t);
599
+ const union = value.type.kind === "union" ? lowerer.unions.get(value.type.unionId) : undefined;
600
+ if (value.type.kind === "f64" ||
601
+ value.type.kind === "bool" ||
602
+ value.type.kind === "dyn" ||
603
+ (union !== undefined && union.arms.every(converts))) {
604
+ return { kind: "toString", operand: value, type: STRING, loc: value.loc };
605
+ }
606
+ lowerer.noLowering(`${member} with a '${lowerer.fmt(value.type)}' event name`, arg, "event names lower as strings, numbers and booleans (symbol names have no lowering)");
607
+ }
608
+ /** Whether a name that is neither a compile-time key nor a computed name
609
+ * with a constant prefix or suffix reaches the emitter through the bridge
610
+ * typed code uses for untyped receivers (lowerDynamicEmitterOn and
611
+ * lowerDynamicEmitterEmit): the runtime matches the name against the
612
+ * events typed code fixes, and keeps Node's 'error' and meta-event behavior
613
+ * for any other name. Streams keep their fixed internal events. */
614
+ function bridgesUnrestrictedName(lowerer, info, arg) {
615
+ return computedEventPatternOf(lowerer, arg) === null && streamSidesOf(lowerer, info) === null;
616
+ }
617
+ /** literalEventName for the event table's scan, which leaves checker
618
+ * trouble to the lowering: null when the name's type cannot be read. */
619
+ function scannedEventKey(lowerer, arg) {
620
+ try {
621
+ return literalEventName(lowerer, arg);
622
+ }
623
+ catch {
624
+ return null;
625
+ }
534
626
  }
535
627
  /** The compile-time key for a literal-only operation, or a pointed fence. */
536
628
  function eventNameOf(lowerer, member, arg) {
@@ -1290,11 +1382,13 @@ function lowerListenerArg(lowerer, member, name, node, tuple) {
1290
1382
  * routes here): the receiver is the current method's `this`, and emit
1291
1383
  * NEVER dispatches through an override at-or-below the lexical class —
1292
1384
  * JS's static super dispatch (the nearest override STRICTLY ABOVE the
1293
- * lexical class still answers, exactly like a prototype-chain walk). */
1294
- export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1385
+ * lexical class still answers, exactly like a prototype-chain walk).
1386
+ * `argsOverride` replaces the call's arguments (`method.call(thisArg,
1387
+ * ...args)` passes the ones after thisArg). */
1388
+ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv, argsOverride) {
1295
1389
  const member = access.name.text;
1296
1390
  const loc = locOf(call);
1297
- const args = call.arguments.nodes;
1391
+ const args = argsOverride ?? call.arguments.nodes;
1298
1392
  const lowerReceiver = () => {
1299
1393
  if (superRecv)
1300
1394
  return superRecv.thisRef;
@@ -1423,11 +1517,18 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1423
1517
  if (literalEventName(lowerer, args[0]) === null) {
1424
1518
  // An unrestricted name on a plain emitter takes the any-name path;
1425
1519
  // streams keep the fence (their runtime events carry fixed ABIs).
1426
- const anyName = computedEventPatternOf(lowerer, args[0]) === null && streamSidesOf(lowerer, info) === null;
1520
+ const anyName = bridgesUnrestrictedName(lowerer, info, args[0]);
1427
1521
  if (!anyName)
1428
1522
  computedEventPattern(lowerer, info, member, args[0]);
1523
+ // The name may be a meta event, which the runtime fires internally.
1524
+ const ov = anyName && registering ? emitOverrideComparable(info) : null;
1525
+ if (ov) {
1526
+ lowerer.noLowering(`'${member}' with a runtime event name while '${ov.def.jsName || ov.def.name}' overrides emit`, call, "the runtime fires meta events internally, which cannot route through an emit override");
1527
+ }
1429
1528
  const receiver = lowerReceiver();
1430
- const name = lowerer.lowerExprExpecting(args[0], STRING);
1529
+ const name = anyName
1530
+ ? eventNameArg(lowerer, member, args[0])
1531
+ : lowerer.lowerExprExpecting(args[0], STRING);
1431
1532
  return lowerFlexListenerCall(lowerer, member, name, receiver, args[1], registering, member === "once" || member === "prependOnceListener", member === "prependListener" || member === "prependOnceListener", loc, anyName ? "emitter.onAny" : "emitter.onFlex", anyName);
1432
1533
  }
1433
1534
  const name = eventNameOf(lowerer, member, args[0]);
@@ -1564,8 +1665,8 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1564
1665
  loc,
1565
1666
  };
1566
1667
  }
1567
- if (pattern === null && streamSidesOf(lowerer, info) === null) {
1568
- const name = lowerer.lowerExprExpecting(args[0], STRING);
1668
+ if (bridgesUnrestrictedName(lowerer, info, args[0])) {
1669
+ const name = eventNameArg(lowerer, member, args[0]);
1569
1670
  return lowerFlexEmit(name, "computed-name", true);
1570
1671
  }
1571
1672
  computedEventPattern(lowerer, info, member, args[0]);
@@ -1651,14 +1752,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1651
1752
  }
1652
1753
  const all = args.length === 0;
1653
1754
  const receiver = lowerReceiver();
1654
- const name = all
1655
- ? strLit("", loc)
1656
- : isErrorMonitorRef(lowerer, args[0])
1657
- ? eventNameExpr(ERROR_MONITOR_EVENT, loc)
1658
- : lowerer.lowerExprExpecting(args[0], STRING);
1659
- if (name.type.kind !== "string") {
1660
- lowerer.noLowering(`removeAllListeners with a '${lowerer.fmt(name.type)}' event name`, args[0] ?? call);
1661
- }
1755
+ const name = all ? strLit("", loc) : eventNameArg(lowerer, member, args[0]);
1662
1756
  return {
1663
1757
  kind: "libCall",
1664
1758
  fn: "emitter.removeAll",
@@ -1672,12 +1766,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1672
1766
  lowerer.noLowering(`listenerCount with ${args.length} arguments`, call);
1673
1767
  }
1674
1768
  const receiver = lowerReceiver();
1675
- const name = isErrorMonitorRef(lowerer, args[0])
1676
- ? eventNameExpr(ERROR_MONITOR_EVENT, loc)
1677
- : lowerer.lowerExprExpecting(args[0], STRING);
1678
- if (name.type.kind !== "string") {
1679
- lowerer.noLowering(`listenerCount with a '${lowerer.fmt(name.type)}' event name`, args[0]);
1680
- }
1769
+ const name = eventNameArg(lowerer, member, args[0]);
1681
1770
  if (args.length === 2) {
1682
1771
  // The fn filter matches by identity — the listener's own type is
1683
1772
  // its word; no tuple check is needed to count.
@@ -1711,6 +1800,18 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1711
1800
  if (args.length !== 1) {
1712
1801
  lowerer.noLowering(`${member} with ${args.length} arguments`, call, "the supported form is (eventName)");
1713
1802
  }
1803
+ if (literalEventName(lowerer, args[0]) === null &&
1804
+ bridgesUnrestrictedName(lowerer, info, args[0])) {
1805
+ // A runtime name: the untyped array, as through an untyped receiver.
1806
+ const receiver = lowerReceiver();
1807
+ return {
1808
+ kind: "libCall",
1809
+ fn: "emitter.listenersDyn",
1810
+ args: [receiver, eventNameArg(lowerer, member, args[0])],
1811
+ type: DYN,
1812
+ loc,
1813
+ };
1814
+ }
1714
1815
  const name = eventNameOf(lowerer, member, args[0]);
1715
1816
  const sig = table.get(name);
1716
1817
  if (listenerArrayIsDyn(lowerer, name, sig)) {
@@ -1935,7 +2036,7 @@ function isWriteTarget(id) {
1935
2036
  }
1936
2037
  }
1937
2038
  /** The nearest class at-or-above `info` declaring an emit override. */
1938
- function emitOverrideAtOrAbove(info) {
2039
+ export function emitOverrideAtOrAbove(info) {
1939
2040
  for (let c = info ?? null; c; c = c.base) {
1940
2041
  if (c.emitOverride)
1941
2042
  return c;
@@ -2426,15 +2527,43 @@ export function lowerEventsOnce(lowerer, call, loc) {
2426
2527
  loc,
2427
2528
  };
2428
2529
  }
2429
- /** The EventEmitter argument of an events-module helper: an emitter
2430
- * instance (not a stream, whose listener tuples the runtime pins). */
2431
- function helperEmitter(lowerer, member, node) {
2530
+ /** The receiver of an events-module helper: an emitter, answered by its
2531
+ * own methods, or an EventTarget (a plain target, an AbortSignal, or a
2532
+ * compiled subclass), which crosses as a checked-dynamic value and is
2533
+ * answered from its listener state. */
2534
+ function helperReceiver(lowerer, member, node) {
2432
2535
  const value = lowerer.lowerExpr(node);
2433
- const info = value.type.kind === "object" ? lowerer.classes.get(value.type.className) : undefined;
2434
- if (!emitterRooted(lowerer, info) || streamSidesOf(lowerer, info) !== null) {
2435
- lowerer.noLowering(`events.${member} over this value`, node, "the argument must be an EventEmitter instance; EventTarget and stream arguments are not supported yet");
2536
+ // A target's lowered value is a checked-dynamic handle, so the class
2537
+ // comes from the static type the checker gives the expression.
2538
+ const staticType = value.type.kind === "object" ? null : lowerer.mapTypeOf(lowerer.typeOf(node));
2539
+ const type = value.type.kind === "object" ? value.type : staticType;
2540
+ const info = type?.kind === "object" ? lowerer.classes.get(type.className) : undefined;
2541
+ if (emitterRooted(lowerer, info)) {
2542
+ if (streamSidesOf(lowerer, info) === null)
2543
+ return { kind: "emitter", value };
2544
+ lowerer.noLowering(`events.${member} over a stream`, node, "a stream's own listenerCount/getMaxListeners/setMaxListeners/listeners answer its emitter; stream arguments are not supported yet");
2545
+ }
2546
+ // Everything else is resolved at runtime: an EventTarget (a plain target,
2547
+ // an AbortSignal, a compiled subclass, or a value whose static type is
2548
+ // checked-dynamic) answers from its own state, and any other value throws
2549
+ // Node's ERR_INVALID_ARG_TYPE.
2550
+ const dyn = lowerer.coerceToExpected(value, DYN);
2551
+ if (dyn.type.kind === "dyn")
2552
+ return { kind: "target", value: dyn };
2553
+ lowerer.noLowering(`events.${member} over this value`, node, "pass an EventEmitter instance, an EventTarget, or a value of a checked-dynamic type");
2554
+ }
2555
+ /** The event name of a helper over a target: the string itself, or a
2556
+ * checked-dynamic value (a value that is not a string matches no event
2557
+ * type, which the runtime answers as an empty result). */
2558
+ function helperTypeName(lowerer, node) {
2559
+ const value = lowerer.lowerExpr(node);
2560
+ if (value.type.kind === "string")
2561
+ return { expr: value, dyn: false };
2562
+ const converted = lowerer.coerceToExpected(value, DYN);
2563
+ if (converted.type.kind !== "dyn") {
2564
+ lowerer.noLowering(`an events helper with a '${lowerer.fmt(value.type)}' event name`, node, "pass a string, or a value whose type is checked-dynamic");
2436
2565
  }
2437
- return value;
2566
+ return { expr: converted, dyn: true };
2438
2567
  }
2439
2568
  /** setMaxListeners(n) with no targets: the process-wide default, through
2440
2569
  * Node's validateNumber(n, 'setMaxListeners', 0) ladder. */
@@ -2474,7 +2603,18 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
2474
2603
  if (member === "listenerCount") {
2475
2604
  if (args.length !== 2)
2476
2605
  lowerer.noLowering(`events.listenerCount with ${args.length} arguments`, call);
2477
- const receiver = helperEmitter(lowerer, member, args[0]);
2606
+ const helper = helperReceiver(lowerer, member, args[0]);
2607
+ if (helper.kind === "target") {
2608
+ const type = helperTypeName(lowerer, args[1]);
2609
+ return {
2610
+ kind: "libCall",
2611
+ fn: type.dyn ? "event.targetListenerCountDyn" : "event.targetListenerCount",
2612
+ args: [helper.value, type.expr],
2613
+ type: F64,
2614
+ loc,
2615
+ };
2616
+ }
2617
+ const receiver = helper.value;
2478
2618
  const name = isErrorMonitorRef(lowerer, args[1])
2479
2619
  ? eventNameExpr(ERROR_MONITOR_EVENT, loc)
2480
2620
  : lowerer.lowerExprExpecting(args[1], STRING);
@@ -2486,8 +2626,14 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
2486
2626
  if (member === "getMaxListeners") {
2487
2627
  if (args.length !== 1)
2488
2628
  lowerer.noLowering(`events.getMaxListeners with ${args.length} arguments`, call);
2489
- const receiver = helperEmitter(lowerer, member, args[0]);
2490
- return { kind: "libCall", fn: "emitter.getMax", args: [receiver], type: F64, loc };
2629
+ const helper = helperReceiver(lowerer, member, args[0]);
2630
+ return {
2631
+ kind: "libCall",
2632
+ fn: helper.kind === "target" ? "event.targetGetMax" : "emitter.getMax",
2633
+ args: [helper.value],
2634
+ type: F64,
2635
+ loc,
2636
+ };
2491
2637
  }
2492
2638
  if (member === "setMaxListeners") {
2493
2639
  // An omitted n is the current default, assigned again.
@@ -2510,21 +2656,29 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
2510
2656
  const limit = lowerer.declareHiddenLocal("%maxListeners", F64);
2511
2657
  const stmts = [{ kind: "varDecl", localId: limit.id, init: n, loc }];
2512
2658
  const targets = args.slice(1).map((node) => {
2513
- const value = helperEmitter(lowerer, member, node);
2514
- const slot = lowerer.declareHiddenLocal("%maxListenersTarget", value.type);
2515
- stmts.push({ kind: "varDecl", localId: slot.id, init: value, loc });
2516
- return varRef(slot.id, value.type, loc);
2659
+ const helper = helperReceiver(lowerer, member, node);
2660
+ const slot = lowerer.declareHiddenLocal("%maxListenersTarget", helper.value.type);
2661
+ stmts.push({ kind: "varDecl", localId: slot.id, init: helper.value, loc });
2662
+ return { kind: helper.kind, value: varRef(slot.id, helper.value.type, loc) };
2517
2663
  });
2518
2664
  for (const target of targets) {
2519
2665
  stmts.push({
2520
2666
  kind: "exprStmt",
2521
- expr: {
2522
- kind: "libCall",
2523
- fn: "emitter.setMax",
2524
- args: [target, varRef(limit.id, F64, loc)],
2525
- type: target.type,
2526
- loc,
2527
- },
2667
+ expr: target.kind === "target"
2668
+ ? {
2669
+ kind: "libCall",
2670
+ fn: "event.targetSetMax",
2671
+ args: [target.value, varRef(limit.id, F64, loc)],
2672
+ type: VOID,
2673
+ loc,
2674
+ }
2675
+ : {
2676
+ kind: "libCall",
2677
+ fn: "emitter.setMax",
2678
+ args: [target.value, varRef(limit.id, F64, loc)],
2679
+ type: target.value.type,
2680
+ loc,
2681
+ },
2528
2682
  loc,
2529
2683
  });
2530
2684
  }
@@ -2535,9 +2689,25 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
2535
2689
  if (member === "getEventListeners") {
2536
2690
  if (args.length !== 2)
2537
2691
  lowerer.noLowering(`events.getEventListeners with ${args.length} arguments`, call);
2692
+ const helper = helperReceiver(lowerer, member, args[0]);
2693
+ if (helper.kind === "target") {
2694
+ // The target's listeners of the type, in registration order.
2695
+ const type = helperTypeName(lowerer, args[1]);
2696
+ const listeners = {
2697
+ kind: "libCall",
2698
+ fn: type.dyn ? "event.targetListenersDyn" : "event.targetListeners",
2699
+ args: [helper.value, type.expr],
2700
+ type: DYN,
2701
+ loc,
2702
+ };
2703
+ // Node returns the listeners as registered, so a listener object with
2704
+ // handleEvent comes back as itself; typed reads of the array convert
2705
+ // each element where it is used.
2706
+ return { kind: "dynCheck", value: listeners, type: arrayOf(DYN), loc };
2707
+ }
2538
2708
  // emitter.listeners(name): the event's listener array, typed by the
2539
2709
  // event's unified tuple (the instance method's rules).
2540
- const receiver = helperEmitter(lowerer, member, args[0]);
2710
+ const receiver = helper.value;
2541
2711
  const name = eventNameOf(lowerer, "events.getEventListeners", args[1]);
2542
2712
  const table = emitterEvents(lowerer);
2543
2713
  const sig = table.get(name);