@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
@@ -24,13 +24,16 @@
24
24
  * same vector handles varying or inference-unknown JavaScript emit tuples
25
25
  * when every known listener accepts checked-dynamic parameters or no
26
26
  * parameters. Typed listener constraints keep the fixed-tuple refusal.
27
- * The remaining cases are fenced:
28
- * unrestricted names, symbol names, conflicting literal tuples, the
29
- * meta-events' listener-function argument (meta listeners take at most
27
+ * Unrestricted names on plain emitters take the checked-dynamic receiver's
28
+ * bridge. The remaining cases are fenced:
29
+ * unrestricted names on streams, symbol names, conflicting literal tuples,
30
+ * the meta-events' listener-function argument (meta listeners take at most
30
31
  * the event name; dyn meta listeners fence — Node
31
32
  * passes the listener function second, which has no dyn conversion), and
32
33
  * listeners()/rawListeners() of an event with any dynamic
33
- * registration (the bucket has no one honest element type).
34
+ * registration, or, once the program registers a listener under an
35
+ * unrestricted name, of an event that literal names register with typed
36
+ * listeners (the bucket has no one honest element type).
34
37
  *
35
38
  * Two special names: 'error' is forced to the one-%Error tuple (emit
36
39
  * routes through emitter.emitError — no listener means the payload
@@ -44,9 +47,15 @@
44
47
  * super.emit as the prototype chain). */
45
48
  import { keyedHelperName } from "./stable-names.js";
46
49
  import { checkKeypressListener } from "./builtins/readline.js";
50
+ import { stripTypeCasts } from "./builtins/arguments.js";
47
51
  import * as ts from "../ts7/adapter.js";
48
52
  import { dynFallbackType, newFnCtx } from "./lowerer.js";
49
53
  import { isJsSourceFile, locOf } from "../program.js";
54
+ import { bodyReadsArguments } from "../arguments-usage.js";
55
+ import { nullishExprUnitOf, stripValueWrappers } from "./binding-analysis.js";
56
+ import { isPureReference } from "./effect-free.js";
57
+ import { functionUsesThis } from "./cjs-exports-object.js";
58
+ import { isThisParameter } from "./call-signatures.js";
50
59
  import { arrayOf, BOOL, canBoxFuncIntoDyn, canConvertToDyn, canDynCheckTo, isDynTypedRefType, DYN, F64, isUnitType, STRING, typeEquals, typeKey, VOID, } from "../../ir/ir.js";
51
60
  import { STREAM_FORCED_EVENT_NAMES, streamForcedTuple, streamSidesOf } from "./lower-stream.js";
52
61
  import { boolLit, dynUndefinedExpr, strLit, varRef } from "../../ir/build.js";
@@ -70,6 +79,47 @@ const REGISTER_MEMBERS = new Set([
70
79
  "prependOnceListener",
71
80
  ]);
72
81
  const META_EVENTS = new Set(["newListener", "removeListener"]);
82
+ /** Whether `t` is an instance type of the Error hierarchy. */
83
+ function rootsAtError(lowerer, t) {
84
+ if (t?.kind !== "object")
85
+ return false;
86
+ for (let c = lowerer.classes.get(t.className) ?? null; c; c = c.base) {
87
+ if (c.def.name === "%Error")
88
+ return true;
89
+ }
90
+ return false;
91
+ }
92
+ /** Whether the scan recorded a dyn-flavored 'newListener' or 'removeListener'
93
+ * listener. Then every listener registers through the adapter, typed meta
94
+ * listeners included, so each entry has a function value to pass. */
95
+ function hasDynMetaListener(table) {
96
+ return [...META_EVENTS].some((meta) => table.get(meta)?.dynListener === true);
97
+ }
98
+ /** Whether a typed listener of `name` registers through the dyn adapter, so
99
+ * its entry holds a checked-dynamic function value: a dyn-flavored
100
+ * 'newListener' or 'removeListener' listener receives every added or
101
+ * removed listener as one, and a read listener array beside dyn-flavored
102
+ * listeners holds them. Listeners of 'error' and errorMonitor do when an
103
+ * emit passes a payload that is not an Error: the adapter's checked
104
+ * conversion admits it or throws a TypeError. */
105
+ function registersAsDyn(lowerer, name, streamForced) {
106
+ const table = emitterEvents(lowerer);
107
+ if (hasDynMetaListener(table))
108
+ return true;
109
+ if ((name === "error" || name === ERROR_MONITOR_EVENT) && table.get("error")?.valueEmit === true)
110
+ return true;
111
+ const sig = streamForced ? undefined : table.get(name);
112
+ return sig?.dynListener === true && sig.listenersRead === true;
113
+ }
114
+ /** Whether the event's listener array is read as checked-dynamic values:
115
+ * its registrations all hold a checked-dynamic function value (flexible
116
+ * and computed-name events, or a dyn-flavored listener beside a read of
117
+ * the array). */
118
+ function listenerArrayIsDyn(lowerer, name, sig) {
119
+ return ((sig?.dynListener === true && sig.listenersRead === true) ||
120
+ flexibleJsEvent(name, sig) ||
121
+ computedPatterns(lowerer).some((pattern) => pattern.listener && patternMatchesName(pattern, name)));
122
+ }
73
123
  function flexibleJsEvent(name, sig) {
74
124
  // A stream may be upcast to EventEmitter. Its runtime-emitted payloads
75
125
  // keep their fixed ABI even when the static receiver looks ordinary.
@@ -115,6 +165,7 @@ function emitterEvents(lowerer) {
115
165
  return lowerer.emitterEventTable;
116
166
  const table = new Map();
117
167
  const computedPatterns = [];
168
+ let anyNameListener = false;
118
169
  const sigOf = (name) => {
119
170
  let sig = table.get(name);
120
171
  if (!sig)
@@ -223,25 +274,62 @@ function emitterEvents(lowerer) {
223
274
  }
224
275
  }
225
276
  };
277
+ // Events whose listener array is read; applied to the table after the
278
+ // walk, so a read alone adds no entry.
279
+ const listenersRead = new Set();
226
280
  for (const sf of lowerer.program.getImplementationSourceFiles()) {
227
281
  if (sf.isDeclarationFile)
228
282
  continue;
229
283
  const walk = (node) => {
230
284
  ts.forEachChild(node, walk);
231
- if (!ts.isCallExpression(node) || !ts.isPropertyAccessExpression(node.expression))
285
+ if (!ts.isCallExpression(node))
286
+ return;
287
+ const callee = node.expression;
288
+ if ((ts.isIdentifier(callee) || ts.isPropertyAccessExpression(callee)) &&
289
+ (ts.isIdentifier(callee) ? callee : callee.name).text === "getEventListeners" &&
290
+ node.arguments.nodes.length === 2) {
291
+ const key = scannedEventKey(lowerer, node.arguments.nodes[1]);
292
+ if (key !== null && key !== ERROR_MONITOR_EVENT)
293
+ listenersRead.add(key);
294
+ return;
295
+ }
296
+ if (!ts.isPropertyAccessExpression(callee))
297
+ return;
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
+ }
310
+ if (member === "listeners" || member === "rawListeners") {
311
+ const arg = callArgs[0];
312
+ try {
313
+ if (!arg || !scannedEmitterInfo(lowerer, lowerer.mapTypeOf(lowerer.typeOf(recvNode))))
314
+ return;
315
+ }
316
+ catch {
317
+ return;
318
+ }
319
+ const key = scannedEventKey(lowerer, arg);
320
+ if (key !== null && key !== ERROR_MONITOR_EVENT)
321
+ listenersRead.add(key);
232
322
  return;
233
- const member = node.expression.name.text;
323
+ }
234
324
  const isEmit = member === "emit";
235
325
  if (!isEmit && !REGISTER_MEMBERS.has(member))
236
326
  return;
237
- const arg0 = node.arguments.nodes[0];
327
+ const arg0 = callArgs[0];
238
328
  if (!arg0)
239
329
  return;
240
330
  let recvT = null;
241
- let nameT = null;
242
331
  try {
243
- recvT = lowerer.mapTypeOf(lowerer.typeOf(node.expression.expression));
244
- nameT = lowerer.typeOf(arg0);
332
+ recvT = lowerer.mapTypeOf(lowerer.typeOf(recvNode));
245
333
  }
246
334
  catch {
247
335
  return; // checker trouble is the lowering's business, not the scan's
@@ -249,11 +337,7 @@ function emitterEvents(lowerer) {
249
337
  const info = scannedEmitterInfo(lowerer, recvT);
250
338
  if (!info)
251
339
  return;
252
- const literal = isErrorMonitorRef(lowerer, arg0)
253
- ? ERROR_MONITOR_EVENT
254
- : nameT.isStringLiteralType()
255
- ? literalEventKey(nameT.value)
256
- : null;
340
+ const literal = scannedEventKey(lowerer, arg0);
257
341
  if (literal === null) {
258
342
  const pattern = computedEventPatternOf(lowerer, arg0);
259
343
  if (pattern &&
@@ -261,9 +345,54 @@ function emitterEvents(lowerer) {
261
345
  !computedPatternOverlapsReserved(pattern)) {
262
346
  computedPatterns.push({ ...pattern, listener: !isEmit });
263
347
  }
348
+ // A listener under an unrestricted name may receive any event
349
+ // (lowerFlexListenerCall's any-name path).
350
+ if (!pattern && !isEmit && streamSidesOf(lowerer, info) === null)
351
+ anyNameListener = true;
264
352
  return;
265
353
  }
266
354
  const name = literal;
355
+ if (META_EVENTS.has(name) && !isEmit && callArgs[1]) {
356
+ // A dyn-flavored meta listener receives each added or removed
357
+ // listener as a checked-dynamic function value. The scan cannot
358
+ // lower the listener as dynListenerFlavor does, so it counts every
359
+ // listener that is not statically a typed function: a factory's
360
+ // result (a wrapper whose runtime value is checked-dynamic), a
361
+ // JavaScript function without parameters, and the dyn-flavored
362
+ // forms. Counting one too many only routes more registrations
363
+ // through the adapter.
364
+ const cbNode = callArgs[1];
365
+ let typed = false;
366
+ try {
367
+ const cbCt = lowerer.typeOf(cbNode);
368
+ const cbT = lowerer.mapTypeOf(cbCt) ?? dynFallbackType(lowerer, cbNode, cbCt);
369
+ typed =
370
+ cbT?.kind === "func" &&
371
+ !ts.isCallExpression(stripTypeCasts(cbNode)) &&
372
+ !(cbT.params.length === 0 && isJsSourceFile(sf)) &&
373
+ !cbT.params.some((p) => p.kind === "dyn") &&
374
+ !readsArgumentsPack(lowerer, cbNode);
375
+ }
376
+ catch {
377
+ typed = false;
378
+ }
379
+ if (!typed)
380
+ table.get(name).dynListener = true;
381
+ return;
382
+ }
383
+ if (isEmit && name === "error") {
384
+ try {
385
+ const payload = callArgs.slice(1);
386
+ if (payload.length !== 1 ||
387
+ !rootsAtError(lowerer, lowerer.mapTypeOf(lowerer.typeOf(payload[0])))) {
388
+ table.get("error").valueEmit = true;
389
+ }
390
+ }
391
+ catch {
392
+ table.get("error").valueEmit = true;
393
+ }
394
+ return;
395
+ }
267
396
  if (META_EVENTS.has(name) || name === "error" || name === ERROR_MONITOR_EVENT)
268
397
  return; // forced tuples
269
398
  // Stream receivers' runtime-emitted events carry PER-BASE forced
@@ -274,16 +403,18 @@ function emitterEvents(lowerer) {
274
403
  return;
275
404
  try {
276
405
  if (isEmit) {
277
- 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));
278
407
  }
279
- else if (node.arguments.nodes[1]) {
280
- const cbCt = lowerer.typeOf(node.arguments.nodes[1]);
281
- const cbT = lowerer.mapTypeOf(cbCt) ?? dynFallbackType(lowerer, node.arguments.nodes[1], cbCt);
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]);
282
412
  // A TypeScript listener with no parameters is typed too: it
283
413
  // registers without the adapter, so an untyped emit reaches it
284
414
  // only through the event's fixed ABI. A JavaScript function
285
415
  // without parameters can still read `arguments`.
286
- if (cbT?.kind !== "dyn" &&
416
+ if (!pack &&
417
+ cbT?.kind !== "dyn" &&
287
418
  (cbT?.kind !== "func" ||
288
419
  (cbT.params.length === 0 && !isJsSourceFile(sf)) ||
289
420
  cbT.params.some((p) => p.kind !== "dyn"))) {
@@ -295,7 +426,8 @@ function emitterEvents(lowerer) {
295
426
  // tuple position, and positions past the tuple read the boxed
296
427
  // undefined (exactly JS's extra-parameter semantics).
297
428
  if (cbT?.kind === "dyn" ||
298
- (cbT?.kind === "func" && cbT.params.some((p) => p.kind === "dyn"))) {
429
+ (cbT?.kind === "func" && cbT.params.some((p) => p.kind === "dyn")) ||
430
+ pack) {
299
431
  const sig = sigOf(name);
300
432
  sig.hasListener = true;
301
433
  sig.dynListener = true;
@@ -311,8 +443,14 @@ function emitterEvents(lowerer) {
311
443
  };
312
444
  walk(sf);
313
445
  }
446
+ for (const name of listenersRead) {
447
+ const sig = table.get(name);
448
+ if (sig)
449
+ sig.listenersRead = true;
450
+ }
314
451
  lowerer.emitterEventTable = table;
315
452
  lowerer.emitterComputedPatterns = computedPatterns;
453
+ lowerer.emitterAnyNameListener = anyNameListener;
316
454
  return table;
317
455
  }
318
456
  function computedPatterns(lowerer) {
@@ -383,14 +521,108 @@ function isErrorMonitorRef(lowerer, arg) {
383
521
  const property = lowerer.checker.getPropertyOfType(lowerer.typeOf(variable.initializer), key.text);
384
522
  return property !== undefined && isMonitorType(lowerer.checker.getTypeOfSymbol(property));
385
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
+ }
386
555
  /** A compile-time event key (literalEventKey): a string-literal TYPE
387
556
  * (const bindings and literal unions of one member count — the
388
- * 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'. */
389
562
  function literalEventName(lowerer, arg) {
390
- if (isErrorMonitorRef(lowerer, arg))
563
+ const staticName = staticNameExpr(lowerer, arg);
564
+ if (staticName && isErrorMonitorRef(lowerer, arg))
391
565
  return ERROR_MONITOR_EVENT;
392
- const t = lowerer.typeOf(arg);
393
- 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
+ }
394
626
  }
395
627
  /** The compile-time key for a literal-only operation, or a pointed fence. */
396
628
  function eventNameOf(lowerer, member, arg) {
@@ -467,6 +699,16 @@ function patternMatchesName(pattern, key) {
467
699
  const name = eventKeyName(key);
468
700
  return name.startsWith(pattern.prefix) && name.endsWith(pattern.suffix);
469
701
  }
702
+ /** Whether a listener registered under a computed name may sit in the
703
+ * bucket of the event keyed `key`: a pattern registration that matches it,
704
+ * or any registration under an unrestricted name (a string, so never the
705
+ * errorMonitor key). Such a listener crossed
706
+ * the checked-dynamic boundary, so the bucket has no one static signature. */
707
+ function computedListenerMayHold(lowerer, key) {
708
+ emitterEvents(lowerer);
709
+ return ((lowerer.emitterAnyNameListener && key !== ERROR_MONITOR_EVENT) ||
710
+ computedPatterns(lowerer).some((pattern) => pattern.listener && patternMatchesName(pattern, key)));
711
+ }
470
712
  /** A computed event can use the variable-arity dyn path only when its
471
713
  * syntax proves a nonempty prefix or suffix excluding internal events. */
472
714
  function computedEventPattern(lowerer, info, member, arg) {
@@ -483,7 +725,7 @@ function computedEventPattern(lowerer, info, member, arg) {
483
725
  * checked-dynamic function boundary, which validates typed parameters.
484
726
  * The runtime retains the original closure and its checked-dynamic thunk,
485
727
  * supplying the exact emit argc without a fixed-tuple or varargs ABI. */
486
- function lowerFlexListenerCall(lowerer, member, name, receiver, cbNode, registering, once, prepend, loc) {
728
+ function lowerFlexListenerCall(lowerer, member, name, receiver, cbNode, registering, once, prepend, loc, onFn = "emitter.onFlex", bridge = false) {
487
729
  if (receiver.type.kind !== "object") {
488
730
  lowerer.noLowering(`${member} with a nullable or non-emitter receiver`, cbNode, "narrow the receiver to an EventEmitter instance before registering or removing a computed-name listener");
489
731
  }
@@ -507,10 +749,20 @@ function lowerFlexListenerCall(lowerer, member, name, receiver, cbNode, register
507
749
  lowerer.noLowering(`${member} with a non-function computed-name listener`, cbNode);
508
750
  }
509
751
  const recvT = receiver.type;
510
- const key = `emitter.${registering ? "onFlex" : "offDyn"}:${typeKey(recvT)}`;
752
+ // An UNRESTRICTED name (`bridge`) may be any event, including 'error',
753
+ // the meta events, and the literal events typed code fixes a tuple for:
754
+ // register through the checked-dynamic receiver's bridge (typed adapters
755
+ // for those events, the thunk alone otherwise), which keeps Node's
756
+ // contract for each.
757
+ if (bridge && registering) {
758
+ const bridged = lowerDynamicEmitterOn(lowerer, receiver, name, boxed, once, prepend, loc);
759
+ if (bridged)
760
+ return bridged;
761
+ }
762
+ const key = `${registering ? onFn : "emitter.offDyn"}:${typeKey(recvT)}`;
511
763
  let helper = lowerer.arrHofHelpers.get(key);
512
764
  if (!helper) {
513
- helper = keyedHelperName(lowerer, `%emitter.${registering ? "onFlex" : "offFlex"}`, key);
765
+ helper = keyedHelperName(lowerer, `%${registering ? onFn : "emitter.offFlex"}`, key);
514
766
  lowerer.arrHofHelpers.set(key, helper);
515
767
  const params = [
516
768
  { localId: "r.0", name: "r", type: recvT },
@@ -545,7 +797,7 @@ function lowerFlexListenerCall(lowerer, member, name, receiver, cbNode, register
545
797
  kind: "return",
546
798
  value: {
547
799
  kind: "libCall",
548
- fn: registering ? "emitter.onFlex" : "emitter.offDyn",
800
+ fn: registering ? onFn : "emitter.offDyn",
549
801
  args: [
550
802
  varRef("r.0", recvT, loc),
551
803
  varRef("n.0", STRING, loc),
@@ -573,6 +825,44 @@ function lowerFlexListenerCall(lowerer, member, name, receiver, cbNode, register
573
825
  loc,
574
826
  };
575
827
  }
828
+ /** A lowered value as a checked-dynamic payload: boxed as any untyped
829
+ * value is (records and arrays keep their identity), otherwise a refusal
830
+ * at the argument. */
831
+ function boxedPayload(lowerer, value, node) {
832
+ if (value.type.kind === "dyn")
833
+ return value;
834
+ if (value.kind === "unitLit" ||
835
+ canConvertToDyn(value.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))) {
836
+ return lowerer.coerceToExpected(value, DYN);
837
+ }
838
+ lowerer.noLowering(`emit('error') with a '${lowerer.fmt(value.type)}' payload`, node, "the payload cannot box into a dynamic value");
839
+ }
840
+ /** The listener array of an event whose registrations all hold a checked-
841
+ * dynamic function value (listenerArrayIsDyn), each comparing equal to the
842
+ * function that was registered. JavaScript sources read the untyped array,
843
+ * whose functions take every argument a call passes. TypeScript sources
844
+ * read the element type the typed path declares, the event's tuple: a
845
+ * listener of exactly that signature unwraps to the original closure. An
846
+ * event no literal emit or listener gives a tuple (one registered only under
847
+ * computed names) reads the untyped array in both. */
848
+ function dynListenerArray(lowerer, table, receiver, name, call, loc) {
849
+ const array = {
850
+ kind: "libCall",
851
+ fn: "emitter.listenersDyn",
852
+ args: [receiver, eventNameExpr(name, loc)],
853
+ type: DYN,
854
+ loc,
855
+ };
856
+ if (isJsSourceFile(ts.getSourceFileOfNode(call)) || !table.has(name))
857
+ return array;
858
+ const tuple = tupleOf(lowerer, table, name, call);
859
+ return {
860
+ kind: "dynCheck",
861
+ value: array,
862
+ type: arrayOf({ kind: "func", params: tuple, ret: { kind: "void" } }),
863
+ loc,
864
+ };
865
+ }
576
866
  /** The event's unified tuple, with conflicts reported at this site. */
577
867
  function tupleOf(lowerer, table, name, blame) {
578
868
  const sig = table.get(name);
@@ -583,6 +873,24 @@ function tupleOf(lowerer, table, name, blame) {
583
873
  }
584
874
  return sig.tuple;
585
875
  }
876
+ /** True when the listener is a function whose body reads `arguments`: it
877
+ * lowers with an arguments-pack ABI and takes every emitted argument,
878
+ * which the typed path's call with a prefix of the event's tuple would not
879
+ * pass, so it registers as a checked-dynamic listener. */
880
+ function readsArgumentsPack(lowerer, node) {
881
+ let declaration;
882
+ try {
883
+ declaration = lowerer.checker.getCallSignatures(lowerer.typeOf(node))[0]?.declaration;
884
+ }
885
+ catch {
886
+ return false;
887
+ }
888
+ return (declaration !== undefined &&
889
+ ts.isFunctionLike(declaration) &&
890
+ !ts.isArrowFunction(declaration) &&
891
+ isJsSourceFile(ts.getSourceFileOfNode(declaration)) &&
892
+ bodyReadsArguments(declaration));
893
+ }
586
894
  /** How a listener argument is dyn-flavored: "dyn" for a checked-dynamic
587
895
  * VALUE (a mustCall wrapper, a listener that rode an untyped binding),
588
896
  * "func" for a function whose parameters include dyn (the JS lane's
@@ -606,6 +914,8 @@ function dynListenerFlavor(lowerer, node) {
606
914
  if (t?.kind === "func") {
607
915
  if (t.params.some((p) => p.kind === "dyn"))
608
916
  return "func";
917
+ if (readsArgumentsPack(lowerer, node))
918
+ return "func";
609
919
  // The inferred signature of a wrapper can omit its runtime arguments
610
920
  // pack. Register the checked callable produced by the factory itself.
611
921
  return tryLowerExpression(lowerer, node)?.type.kind === "dyn" ? "dyn" : null;
@@ -648,7 +958,16 @@ function lowerDynListenerCall(lowerer, member, name, tuple, receiver, cbNode, fl
648
958
  * tuple is [DYN] — the adapter passes the boxed chunk through. */
649
959
  streamData) {
650
960
  if (META_EVENTS.has(name)) {
651
- lowerer.noLowering(`'${member}' of '${name}' with a checked-dynamic listener`, cbNode, "Node passes the listener FUNCTION as the meta event's second argument, which has no dynamic conversion — annotate the listener's parameter as a string");
961
+ // The registration installs the registry's dynamic half: the listener
962
+ // receives the event name and the added or removed listener's
963
+ // checked-dynamic function value, as in Node. Every other listener
964
+ // then registers through the adapter (registersAsDyn), which the event
965
+ // table's scan arranges when it records a dyn-flavored listener of
966
+ // either meta event; a typed listener of the other one arrives here too.
967
+ if (registering && !hasDynMetaListener(emitterEvents(lowerer))) {
968
+ lowerer.noLowering(`'${member}' of '${name}' with a checked-dynamic listener the event table did not record`, cbNode, "register the listener directly at this call");
969
+ }
970
+ return lowerFlexListenerCall(lowerer, member, eventNameExpr(name, loc), receiver, cbNode, registering, once, prepend, loc, "emitter.onAny");
652
971
  }
653
972
  const getRecord = (id) => lowerer.shapes.get(id);
654
973
  const getUnion = (id) => lowerer.unions.get(id);
@@ -1063,11 +1382,13 @@ function lowerListenerArg(lowerer, member, name, node, tuple) {
1063
1382
  * routes here): the receiver is the current method's `this`, and emit
1064
1383
  * NEVER dispatches through an override at-or-below the lexical class —
1065
1384
  * JS's static super dispatch (the nearest override STRICTLY ABOVE the
1066
- * lexical class still answers, exactly like a prototype-chain walk). */
1067
- 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) {
1068
1389
  const member = access.name.text;
1069
1390
  const loc = locOf(call);
1070
- const args = call.arguments.nodes;
1391
+ const args = argsOverride ?? call.arguments.nodes;
1071
1392
  const lowerReceiver = () => {
1072
1393
  if (superRecv)
1073
1394
  return superRecv.thisRef;
@@ -1087,7 +1408,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1087
1408
  }
1088
1409
  return receiver;
1089
1410
  };
1090
- const lowerFlexEmit = (name, kind = "computed-name") => {
1411
+ const lowerFlexEmit = (name, kind = "computed-name", anyName = false) => {
1091
1412
  const below = [];
1092
1413
  collectEmitOverridesBelow(info, below);
1093
1414
  if (emitOverrideAtOrAbove(info) || below.length > 0) {
@@ -1098,6 +1419,18 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1098
1419
  lowerer.noLowering(`${kind} emit on a nullable or non-emitter receiver`, access.expression, "narrow the receiver to an EventEmitter instance before emitting");
1099
1420
  }
1100
1421
  const payload = args.slice(1).map((arg) => lowerer.lowerExprExpecting(arg, DYN));
1422
+ if (anyName) {
1423
+ // Any event name: the checked-dynamic receiver's emit, which keeps
1424
+ // 'error' and the meta events' contracts and converts the arguments
1425
+ // for listeners registered with a typed tuple.
1426
+ return (lowerDynamicEmitterEmit(lowerer, receiver, name, payload, loc) ?? {
1427
+ kind: "libCall",
1428
+ fn: "emitter.emitAny",
1429
+ args: [receiver, name, ...payload],
1430
+ type: BOOL,
1431
+ loc,
1432
+ });
1433
+ }
1101
1434
  return {
1102
1435
  kind: "libCall",
1103
1436
  fn: "emitter.emitFlex",
@@ -1182,10 +1515,21 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1182
1515
  }
1183
1516
  const registering = REGISTER_MEMBERS.has(member);
1184
1517
  if (literalEventName(lowerer, args[0]) === null) {
1185
- computedEventPattern(lowerer, info, member, args[0]);
1518
+ // An unrestricted name on a plain emitter takes the any-name path;
1519
+ // streams keep the fence (their runtime events carry fixed ABIs).
1520
+ const anyName = bridgesUnrestrictedName(lowerer, info, args[0]);
1521
+ if (!anyName)
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
+ }
1186
1528
  const receiver = lowerReceiver();
1187
- const name = lowerer.lowerExprExpecting(args[0], STRING);
1188
- return lowerFlexListenerCall(lowerer, member, name, receiver, args[1], registering, member === "once" || member === "prependOnceListener", member === "prependListener" || member === "prependOnceListener", loc);
1529
+ const name = anyName
1530
+ ? eventNameArg(lowerer, member, args[0])
1531
+ : lowerer.lowerExprExpecting(args[0], STRING);
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);
1189
1533
  }
1190
1534
  const name = eventNameOf(lowerer, member, args[0]);
1191
1535
  if (!META_EVENTS.has(name) &&
@@ -1216,7 +1560,8 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1216
1560
  // to the declared type, or take the value (dyn).
1217
1561
  const sides = streamSidesOf(lowerer, info);
1218
1562
  if (name === "data" && (sides === "r" || sides === "rw")) {
1219
- const dynFlavor = dynListenerFlavor(lowerer, args[1]);
1563
+ const dynFlavor = dynListenerFlavor(lowerer, args[1]) ??
1564
+ (registersAsDyn(lowerer, name, true) ? "func" : null);
1220
1565
  if (dynFlavor !== null) {
1221
1566
  return lowerDynListenerCall(lowerer, member, name, [DYN], receiver, args[1], dynFlavor, registering, once, prepend, loc, true);
1222
1567
  }
@@ -1259,6 +1604,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1259
1604
  args: [receiver, eventNameExpr(name, loc), cb, boolLit(once, loc), boolLit(prepend, loc)],
1260
1605
  type: receiver.type,
1261
1606
  loc,
1607
+ ...(listenerReadsThis(lowerer, args[1]) ? { bindsThis: true } : {}),
1262
1608
  };
1263
1609
  }
1264
1610
  // Stream-rooted receivers consult the per-base FORCED tuples first
@@ -1273,7 +1619,10 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1273
1619
  if (probe)
1274
1620
  checkKeypressListener(lowerer, args[1], probe);
1275
1621
  }
1276
- const dynFlavor = dynListenerFlavor(lowerer, args[1]) ?? (keypress ? "func" : null);
1622
+ const dynFlavor = dynListenerFlavor(lowerer, args[1]) ??
1623
+ (keypress || registersAsDyn(lowerer, name, streamForcedTuple(lowerer, info, name) !== null)
1624
+ ? "func"
1625
+ : null);
1277
1626
  if (dynFlavor !== null) {
1278
1627
  return lowerDynListenerCall(lowerer, member, name, tuple, receiver, args[1], dynFlavor, registering, once, prepend, loc, false);
1279
1628
  }
@@ -1286,6 +1635,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1286
1635
  : [receiver, eventNameExpr(name, loc), cb],
1287
1636
  type: receiver.type,
1288
1637
  loc,
1638
+ ...(registering && listenerReadsThis(lowerer, args[1]) ? { bindsThis: true } : {}),
1289
1639
  };
1290
1640
  }
1291
1641
  if (member === "emit") {
@@ -1295,6 +1645,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1295
1645
  if (literalEventName(lowerer, args[0]) === null) {
1296
1646
  const pattern = computedEventPatternOf(lowerer, args[0]);
1297
1647
  const mayBeObserved = pattern === null ||
1648
+ lowerer.emitterAnyNameListener ||
1298
1649
  computedPatternOverlapsReserved(pattern) ||
1299
1650
  [...table].some(([candidate, sig]) => (candidate === "error" || sig.hasListener) && patternMatchesName(pattern, candidate)) ||
1300
1651
  computedPatterns(lowerer).some((registered) => registered.listener && computedPatternsOverlap(pattern, registered));
@@ -1314,6 +1665,10 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1314
1665
  loc,
1315
1666
  };
1316
1667
  }
1668
+ if (bridgesUnrestrictedName(lowerer, info, args[0])) {
1669
+ const name = eventNameArg(lowerer, member, args[0]);
1670
+ return lowerFlexEmit(name, "computed-name", true);
1671
+ }
1317
1672
  computedEventPattern(lowerer, info, member, args[0]);
1318
1673
  const name = lowerer.lowerExprExpecting(args[0], STRING);
1319
1674
  return lowerFlexEmit(name);
@@ -1327,23 +1682,30 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1327
1682
  return lowerFlexEmit(eventNameExpr(name, loc), flexibleJsEvent(name, table.get(name)) ? "variable-arity" : "computed-name");
1328
1683
  const receiver = lowerReceiver();
1329
1684
  if (name === "error") {
1330
- // The special event: exactly one %Error-rooted payload; no listener
1331
- // means the runtime THROWS it (emitter.emitError, may-throw).
1332
- if (args.length !== 2) {
1333
- lowerer.noLowering(`emit('error') with ${args.length - 1} payload arguments`, call, "the supported form is emit('error', err) with an Error-hierarchy payload (non-Error payloads would need Node's ERR_UNHANDLED_ERROR wrapping — no lowering yet)");
1334
- }
1335
- const err = lowerer.lowerExpr(args[1]);
1336
- const rootsAtError = (t) => {
1337
- if (t.kind !== "object")
1338
- return false;
1339
- for (let c = lowerer.classes.get(t.className) ?? null; c; c = c.base) {
1340
- if (c.def.name === "%Error")
1341
- return true;
1685
+ // The special event: one %Error-rooted payload; no listener means the
1686
+ // runtime THROWS it (emitter.emitError, may-throw).
1687
+ const err = args.length === 2 ? lowerer.lowerExpr(args[1]) : null;
1688
+ if (err === null || !rootsAtError(lowerer, err.type)) {
1689
+ // Any other payload, or another argument count: the arguments box
1690
+ // to dyn. With no 'error' listener the runtime throws Node's
1691
+ // ERR_UNHANDLED_ERROR (the payload's util.inspect in the message,
1692
+ // the payload as `context`); listeners receive the arguments as
1693
+ // given.
1694
+ if (emitOverrideAtOrAbove(info) || superRecv !== undefined) {
1695
+ lowerer.noLowering(`emit('error') with a non-Error payload through an emit override`, call, "the override specialization takes the event's one Error payload");
1342
1696
  }
1343
- return false;
1344
- };
1345
- if (!rootsAtError(err.type)) {
1346
- lowerer.noLowering(`emit('error') with a '${lowerer.fmt(err.type)}' payload`, args[1], "the supported payload is an Error-hierarchy instance");
1697
+ const payload = args
1698
+ .slice(1)
1699
+ .map((arg, i) => i === 0 && err !== null
1700
+ ? boxedPayload(lowerer, err, arg)
1701
+ : lowerer.lowerExprExpecting(arg, DYN));
1702
+ return {
1703
+ kind: "libCall",
1704
+ fn: "emitter.emitErrorValue",
1705
+ args: [receiver, ...payload],
1706
+ type: BOOL,
1707
+ loc,
1708
+ };
1347
1709
  }
1348
1710
  return emitDispatchExpr(lowerer, info, name, [{ kind: "object", className: "%Error" }], receiver, [lowerer.upcastTo(err, "%Error")], superRecv?.cls, loc);
1349
1711
  }
@@ -1390,14 +1752,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1390
1752
  }
1391
1753
  const all = args.length === 0;
1392
1754
  const receiver = lowerReceiver();
1393
- const name = all
1394
- ? strLit("", loc)
1395
- : isErrorMonitorRef(lowerer, args[0])
1396
- ? eventNameExpr(ERROR_MONITOR_EVENT, loc)
1397
- : lowerer.lowerExprExpecting(args[0], STRING);
1398
- if (name.type.kind !== "string") {
1399
- lowerer.noLowering(`removeAllListeners with a '${lowerer.fmt(name.type)}' event name`, args[0] ?? call);
1400
- }
1755
+ const name = all ? strLit("", loc) : eventNameArg(lowerer, member, args[0]);
1401
1756
  return {
1402
1757
  kind: "libCall",
1403
1758
  fn: "emitter.removeAll",
@@ -1411,12 +1766,7 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1411
1766
  lowerer.noLowering(`listenerCount with ${args.length} arguments`, call);
1412
1767
  }
1413
1768
  const receiver = lowerReceiver();
1414
- const name = isErrorMonitorRef(lowerer, args[0])
1415
- ? eventNameExpr(ERROR_MONITOR_EVENT, loc)
1416
- : lowerer.lowerExprExpecting(args[0], STRING);
1417
- if (name.type.kind !== "string") {
1418
- lowerer.noLowering(`listenerCount with a '${lowerer.fmt(name.type)}' event name`, args[0]);
1419
- }
1769
+ const name = eventNameArg(lowerer, member, args[0]);
1420
1770
  if (args.length === 2) {
1421
1771
  // The fn filter matches by identity — the listener's own type is
1422
1772
  // its word; no tuple check is needed to count.
@@ -1450,11 +1800,24 @@ export function lowerEmitterMethodCall(lowerer, call, access, info, superRecv) {
1450
1800
  if (args.length !== 1) {
1451
1801
  lowerer.noLowering(`${member} with ${args.length} arguments`, call, "the supported form is (eventName)");
1452
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
+ }
1453
1815
  const name = eventNameOf(lowerer, member, args[0]);
1454
1816
  const sig = table.get(name);
1455
- if (sig?.dynListener ||
1456
- flexibleJsEvent(name, sig) ||
1457
- computedPatterns(lowerer).some((pattern) => pattern.listener && patternMatchesName(pattern, name))) {
1817
+ if (listenerArrayIsDyn(lowerer, name, sig)) {
1818
+ return dynListenerArray(lowerer, table, lowerReceiver(), name, call, loc);
1819
+ }
1820
+ if (sig?.dynListener || computedListenerMayHold(lowerer, name)) {
1458
1821
  // A dyn-adapted registration means the runtime bucket can hold
1459
1822
  // originals of MIXED signatures — no one honest element type.
1460
1823
  lowerer.noLowering(`${member} of the event '${name}'`, call, "a listener of this event uses checked-dynamic dispatch, so the listener array has no one static element type — listenerCount(name) counts");
@@ -1673,7 +2036,7 @@ function isWriteTarget(id) {
1673
2036
  }
1674
2037
  }
1675
2038
  /** The nearest class at-or-above `info` declaring an emit override. */
1676
- function emitOverrideAtOrAbove(info) {
2039
+ export function emitOverrideAtOrAbove(info) {
1677
2040
  for (let c = info ?? null; c; c = c.base) {
1678
2041
  if (c.emitOverride)
1679
2042
  return c;
@@ -2070,6 +2433,44 @@ export function lowerEventsOnce(lowerer, call, loc) {
2070
2433
  const arrayT = arrayOf(DYN);
2071
2434
  const resultT = { kind: "promise", inner: arrayT };
2072
2435
  let receiver = lowerer.lowerExpr(args[0]);
2436
+ // events.once(process.stdout, "drain"): the next 'drain' of a stream
2437
+ // whose writes are synchronous never comes (Node emits it only after a
2438
+ // write returned false), so the promise stays pending. A pending promise
2439
+ // holds nothing: the process exits when the loop is empty, as in Node.
2440
+ {
2441
+ let target = args[0];
2442
+ while (ts.isParenthesizedExpression(target))
2443
+ target = target.expression;
2444
+ const stream = ts.isPropertyAccessExpression(target)
2445
+ ? lowerer.stdlibGlobalMember(target, "process")
2446
+ : null;
2447
+ const nameT = lowerer.typeOf(args[1]);
2448
+ if ((stream === "stdout" || stream === "stderr") &&
2449
+ nameT.isStringLiteralType() &&
2450
+ nameT.value === "drain" &&
2451
+ args.length === 2) {
2452
+ const pending = {
2453
+ kind: "libCall",
2454
+ fn: "events.pendingForever",
2455
+ args: [],
2456
+ type: resultT,
2457
+ loc,
2458
+ };
2459
+ let name = args[1];
2460
+ while (ts.isParenthesizedExpression(name))
2461
+ name = name.expression;
2462
+ if (ts.isStringLiteralLike(name))
2463
+ return pending;
2464
+ // A name expression typed "drain" still runs (`pick()`, `(log(), "drain")`).
2465
+ return {
2466
+ kind: "seqExpr",
2467
+ stmts: [{ kind: "exprStmt", expr: lowerer.lowerExpr(args[1]), loc }],
2468
+ result: pending,
2469
+ type: resultT,
2470
+ loc,
2471
+ };
2472
+ }
2473
+ }
2073
2474
  // A checked-dynamic NodeJS stream slot (dyn-streams.ts): a native stream
2074
2475
  // unboxes by identity; any other value throws the not-supported Error.
2075
2476
  if (receiver.type.kind === "dyn" &&
@@ -2126,15 +2527,43 @@ export function lowerEventsOnce(lowerer, call, loc) {
2126
2527
  loc,
2127
2528
  };
2128
2529
  }
2129
- /** The EventEmitter argument of an events-module helper: an emitter
2130
- * instance (not a stream, whose listener tuples the runtime pins). */
2131
- 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) {
2132
2535
  const value = lowerer.lowerExpr(node);
2133
- const info = value.type.kind === "object" ? lowerer.classes.get(value.type.className) : undefined;
2134
- if (!emitterRooted(lowerer, info) || streamSidesOf(lowerer, info) !== null) {
2135
- 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");
2136
2565
  }
2137
- return value;
2566
+ return { expr: converted, dyn: true };
2138
2567
  }
2139
2568
  /** setMaxListeners(n) with no targets: the process-wide default, through
2140
2569
  * Node's validateNumber(n, 'setMaxListeners', 0) ladder. */
@@ -2174,7 +2603,18 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
2174
2603
  if (member === "listenerCount") {
2175
2604
  if (args.length !== 2)
2176
2605
  lowerer.noLowering(`events.listenerCount with ${args.length} arguments`, call);
2177
- 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;
2178
2618
  const name = isErrorMonitorRef(lowerer, args[1])
2179
2619
  ? eventNameExpr(ERROR_MONITOR_EVENT, loc)
2180
2620
  : lowerer.lowerExprExpecting(args[1], STRING);
@@ -2186,8 +2626,14 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
2186
2626
  if (member === "getMaxListeners") {
2187
2627
  if (args.length !== 1)
2188
2628
  lowerer.noLowering(`events.getMaxListeners with ${args.length} arguments`, call);
2189
- const receiver = helperEmitter(lowerer, member, args[0]);
2190
- 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
+ };
2191
2637
  }
2192
2638
  if (member === "setMaxListeners") {
2193
2639
  // An omitted n is the current default, assigned again.
@@ -2210,21 +2656,29 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
2210
2656
  const limit = lowerer.declareHiddenLocal("%maxListeners", F64);
2211
2657
  const stmts = [{ kind: "varDecl", localId: limit.id, init: n, loc }];
2212
2658
  const targets = args.slice(1).map((node) => {
2213
- const value = helperEmitter(lowerer, member, node);
2214
- const slot = lowerer.declareHiddenLocal("%maxListenersTarget", value.type);
2215
- stmts.push({ kind: "varDecl", localId: slot.id, init: value, loc });
2216
- 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) };
2217
2663
  });
2218
2664
  for (const target of targets) {
2219
2665
  stmts.push({
2220
2666
  kind: "exprStmt",
2221
- expr: {
2222
- kind: "libCall",
2223
- fn: "emitter.setMax",
2224
- args: [target, varRef(limit.id, F64, loc)],
2225
- type: target.type,
2226
- loc,
2227
- },
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
+ },
2228
2682
  loc,
2229
2683
  });
2230
2684
  }
@@ -2235,15 +2689,32 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
2235
2689
  if (member === "getEventListeners") {
2236
2690
  if (args.length !== 2)
2237
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
+ }
2238
2708
  // emitter.listeners(name): the event's listener array, typed by the
2239
2709
  // event's unified tuple (the instance method's rules).
2240
- const receiver = helperEmitter(lowerer, member, args[0]);
2710
+ const receiver = helper.value;
2241
2711
  const name = eventNameOf(lowerer, "events.getEventListeners", args[1]);
2242
2712
  const table = emitterEvents(lowerer);
2243
2713
  const sig = table.get(name);
2244
- if (sig?.dynListener ||
2245
- flexibleJsEvent(name, sig) ||
2246
- computedPatterns(lowerer).some((pattern) => pattern.listener && patternMatchesName(pattern, name))) {
2714
+ if (listenerArrayIsDyn(lowerer, name, sig)) {
2715
+ return dynListenerArray(lowerer, table, receiver, name, call, loc);
2716
+ }
2717
+ if (sig?.dynListener || computedListenerMayHold(lowerer, name)) {
2247
2718
  lowerer.noLowering(`events.getEventListeners of the event '${name}'`, call, "a listener of this event uses checked-dynamic dispatch, so the listener array has no one static element type — listenerCount(emitter, name) counts");
2248
2719
  }
2249
2720
  const tuple = tupleOf(lowerer, table, name, call);
@@ -2257,4 +2728,45 @@ export function lowerEventsEmitterHelper(lowerer, call, member, loc) {
2257
2728
  }
2258
2729
  return null;
2259
2730
  }
2731
+ /** Whether a typed listener can read the `this` its calls bind (Node calls
2732
+ * listeners with the emitter as `this`): a function expression, or a
2733
+ * function declaration or `const` function binding, whose own body reads
2734
+ * `this`; any other listener value except an arrow in a JavaScript source;
2735
+ * and in a TypeScript source, where a function reads `this` only through a
2736
+ * declared `this` parameter, a value whose call signature declares one.
2737
+ * Arrows read the enclosing `this`. */
2738
+ function listenerReadsThis(lowerer, node) {
2739
+ let listener = node;
2740
+ while (ts.isParenthesizedExpression(listener))
2741
+ listener = listener.expression;
2742
+ if (ts.isArrowFunction(listener))
2743
+ return false;
2744
+ if (ts.isFunctionExpression(listener))
2745
+ return functionUsesThis(listener);
2746
+ if (ts.isIdentifier(listener)) {
2747
+ const decls = lowerer.checker.getSymbolAtLocation(listener)?.declarations ?? [];
2748
+ // An overloaded function's implementation is the declaration with a
2749
+ // body; its overload signatures have none.
2750
+ const fn = decls.find((d) => ts.isFunctionDeclaration(d) && d.body !== undefined);
2751
+ if (fn !== undefined)
2752
+ return functionUsesThis(fn);
2753
+ const binding = decls.find(ts.isVariableDeclaration);
2754
+ let init = binding?.initializer;
2755
+ while (init !== undefined && ts.isParenthesizedExpression(init))
2756
+ init = init.expression;
2757
+ if (binding !== undefined &&
2758
+ init !== undefined &&
2759
+ (ts.getCombinedNodeFlags(binding) & ts.NodeFlags.Const) !== 0) {
2760
+ if (ts.isArrowFunction(init))
2761
+ return false;
2762
+ if (ts.isFunctionExpression(init))
2763
+ return functionUsesThis(init);
2764
+ }
2765
+ }
2766
+ if (isJsSourceFile(ts.getSourceFileOfNode(node)))
2767
+ return true;
2768
+ return lowerer.checker
2769
+ .getCallSignatures(lowerer.typeOf(listener))
2770
+ .some((signature) => (signature.declaration?.parameters?.nodes ?? []).some(isThisParameter));
2771
+ }
2260
2772
  //# sourceMappingURL=lower-event-emitter.js.map