@scriptc/compiler 0.4.5 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1200) hide show
  1. package/ambient/node-fallback/assert-strict.d.ts +47 -0
  2. package/ambient/node-fallback/assert.d.ts +86 -0
  3. package/ambient/node-fallback/async_hooks.d.ts +41 -0
  4. package/ambient/node-fallback/buffer.d.ts +23 -0
  5. package/ambient/node-fallback/child_process.d.ts +242 -0
  6. package/ambient/node-fallback/cluster.d.ts +17 -0
  7. package/ambient/node-fallback/constants.d.ts +15 -0
  8. package/ambient/node-fallback/crypto.d.ts +837 -0
  9. package/ambient/node-fallback/dgram.d.ts +58 -0
  10. package/ambient/node-fallback/diagnostics_channel.d.ts +87 -0
  11. package/ambient/node-fallback/dns-promises.d.ts +27 -0
  12. package/ambient/node-fallback/dns.d.ts +65 -0
  13. package/ambient/node-fallback/events.d.ts +60 -0
  14. package/ambient/node-fallback/fs-promises.d.ts +225 -0
  15. package/ambient/node-fallback/fs.d.ts +641 -0
  16. package/ambient/node-fallback/graceful-fs.d.ts +9 -0
  17. package/ambient/node-fallback/http.d.ts +326 -0
  18. package/ambient/node-fallback/http2.d.ts +816 -0
  19. package/ambient/node-fallback/https.d.ts +59 -0
  20. package/ambient/node-fallback/module.d.ts +10 -0
  21. package/ambient/node-fallback/net.d.ts +374 -0
  22. package/ambient/node-fallback/os.d.ts +288 -0
  23. package/ambient/node-fallback/path-posix.d.ts +22 -0
  24. package/ambient/node-fallback/path-win32.d.ts +22 -0
  25. package/ambient/node-fallback/path.d.ts +55 -0
  26. package/ambient/node-fallback/process.d.ts +11 -0
  27. package/ambient/node-fallback/punycode.d.ts +18 -0
  28. package/ambient/node-fallback/querystring.d.ts +55 -0
  29. package/ambient/node-fallback/stream-consumers.d.ts +21 -0
  30. package/ambient/node-fallback/stream-promises.d.ts +28 -0
  31. package/ambient/node-fallback/stream-web.d.ts +36 -0
  32. package/ambient/node-fallback/stream.d.ts +644 -0
  33. package/ambient/node-fallback/string_decoder.d.ts +20 -0
  34. package/ambient/node-fallback/test.d.ts +236 -0
  35. package/ambient/node-fallback/timers-promises.d.ts +31 -0
  36. package/ambient/node-fallback/timers.d.ts +28 -0
  37. package/ambient/node-fallback/tls.d.ts +169 -0
  38. package/ambient/node-fallback/url.d.ts +95 -0
  39. package/ambient/node-fallback/util-types.d.ts +50 -0
  40. package/ambient/node-fallback/util.d.ts +416 -0
  41. package/ambient/node-fallback/v8.d.ts +43 -0
  42. package/ambient/node-fallback/worker_threads.d.ts +113 -0
  43. package/ambient/node-fallback/zlib.d.ts +422 -0
  44. package/ambient/scriptc-node-fallback.d.ts +224 -6688
  45. package/dist/backend/cycle-analysis.js +4 -0
  46. package/dist/backend/cycle-analysis.js.map +1 -1
  47. package/dist/backend/executable-features.d.ts +1 -1
  48. package/dist/backend/executable-features.js +15 -2
  49. package/dist/backend/executable-features.js.map +1 -1
  50. package/dist/backend/huge-text.d.ts +16 -0
  51. package/dist/backend/huge-text.js +103 -0
  52. package/dist/backend/huge-text.js.map +1 -0
  53. package/dist/backend/huge-text.test.d.ts +1 -0
  54. package/dist/backend/huge-text.test.js +73 -0
  55. package/dist/backend/huge-text.test.js.map +1 -0
  56. package/dist/backend/library-pack.js +1 -1
  57. package/dist/backend/library-pack.js.map +1 -1
  58. package/dist/backend/link-plan-core.d.ts +10 -0
  59. package/dist/backend/link-plan-core.js +14 -2
  60. package/dist/backend/link-plan-core.js.map +1 -1
  61. package/dist/backend/link-plan-core.test.d.ts +1 -0
  62. package/dist/backend/link-plan-core.test.js +20 -0
  63. package/dist/backend/link-plan-core.test.js.map +1 -0
  64. package/dist/backend/link-plan.d.ts +8 -0
  65. package/dist/backend/link-plan.js +7 -0
  66. package/dist/backend/link-plan.js.map +1 -1
  67. package/dist/backend/linker.js +37 -14
  68. package/dist/backend/linker.js.map +1 -1
  69. package/dist/backend/lld.d.ts +13 -0
  70. package/dist/backend/lld.js +18 -1
  71. package/dist/backend/lld.js.map +1 -1
  72. package/dist/backend/lld.test.js +7 -1
  73. package/dist/backend/lld.test.js.map +1 -1
  74. package/dist/backend/llvm/alloc.d.ts +2 -0
  75. package/dist/backend/llvm/alloc.js +1 -1
  76. package/dist/backend/llvm/alloc.js.map +1 -1
  77. package/dist/backend/llvm/arenas.d.ts +78 -0
  78. package/dist/backend/llvm/arenas.js +313 -0
  79. package/dist/backend/llvm/arenas.js.map +1 -0
  80. package/dist/backend/llvm/arenas.test.d.ts +1 -0
  81. package/dist/backend/llvm/arenas.test.js +140 -0
  82. package/dist/backend/llvm/arenas.test.js.map +1 -0
  83. package/dist/backend/llvm/blocks.d.ts +11 -1
  84. package/dist/backend/llvm/blocks.js +23 -5
  85. package/dist/backend/llvm/blocks.js.map +1 -1
  86. package/dist/backend/llvm/bytes-headers.d.ts +19 -0
  87. package/dist/backend/llvm/bytes-headers.js +55 -0
  88. package/dist/backend/llvm/bytes-headers.js.map +1 -0
  89. package/dist/backend/llvm/bytes-loop-versions.d.ts +4 -3
  90. package/dist/backend/llvm/bytes-loop-versions.js +42 -7
  91. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  92. package/dist/backend/llvm/bytes-loop-versions.test.js +39 -4
  93. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  94. package/dist/backend/llvm/call-lifetimes.d.ts +5 -0
  95. package/dist/backend/llvm/call-lifetimes.js +43 -8
  96. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  97. package/dist/backend/llvm/call-lifetimes.test.js +26 -0
  98. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  99. package/dist/backend/llvm/checked-narrows.d.ts +3 -0
  100. package/dist/backend/llvm/checked-narrows.js +8 -1
  101. package/dist/backend/llvm/checked-narrows.js.map +1 -1
  102. package/dist/backend/llvm/class-unions.d.ts +21 -0
  103. package/dist/backend/llvm/class-unions.js +141 -0
  104. package/dist/backend/llvm/class-unions.js.map +1 -0
  105. package/dist/backend/llvm/class-unions.test.d.ts +1 -0
  106. package/dist/backend/llvm/class-unions.test.js +137 -0
  107. package/dist/backend/llvm/class-unions.test.js.map +1 -0
  108. package/dist/backend/llvm/classes.d.ts +46 -8
  109. package/dist/backend/llvm/classes.js +259 -32
  110. package/dist/backend/llvm/classes.js.map +1 -1
  111. package/dist/backend/llvm/classes.test.js +4 -0
  112. package/dist/backend/llvm/classes.test.js.map +1 -1
  113. package/dist/backend/llvm/common.d.ts +23 -0
  114. package/dist/backend/llvm/common.js +34 -0
  115. package/dist/backend/llvm/common.js.map +1 -1
  116. package/dist/backend/llvm/constant-callbacks.test.js +39 -0
  117. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  118. package/dist/backend/llvm/constant-choices.d.ts +32 -0
  119. package/dist/backend/llvm/constant-choices.js +209 -0
  120. package/dist/backend/llvm/constant-choices.js.map +1 -0
  121. package/dist/backend/llvm/constant-choices.test.d.ts +1 -0
  122. package/dist/backend/llvm/constant-choices.test.js +94 -0
  123. package/dist/backend/llvm/constant-choices.test.js.map +1 -0
  124. package/dist/backend/llvm/counted-loops.d.ts +14 -2
  125. package/dist/backend/llvm/counted-loops.js +60 -7
  126. package/dist/backend/llvm/counted-loops.js.map +1 -1
  127. package/dist/backend/llvm/counted-loops.test.d.ts +1 -0
  128. package/dist/backend/llvm/counted-loops.test.js +34 -0
  129. package/dist/backend/llvm/counted-loops.test.js.map +1 -0
  130. package/dist/backend/llvm/cpu-dispatch.d.ts +26 -0
  131. package/dist/backend/llvm/cpu-dispatch.js +279 -0
  132. package/dist/backend/llvm/cpu-dispatch.js.map +1 -0
  133. package/dist/backend/llvm/dense-array-access.d.ts +13 -2
  134. package/dist/backend/llvm/dense-array-access.js +60 -6
  135. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  136. package/dist/backend/llvm/dyn-handle-tags.test.js +40 -14
  137. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
  138. package/dist/backend/llvm/dyn.d.ts +28 -2
  139. package/dist/backend/llvm/dyn.js +176 -27
  140. package/dist/backend/llvm/dyn.js.map +1 -1
  141. package/dist/backend/llvm/emit-function.js +25 -3
  142. package/dist/backend/llvm/emit-function.js.map +1 -1
  143. package/dist/backend/llvm/emit-journal.d.ts +1 -0
  144. package/dist/backend/llvm/emit-journal.js.map +1 -1
  145. package/dist/backend/llvm/emit-module.d.ts +5 -3
  146. package/dist/backend/llvm/emit-module.js +362 -74
  147. package/dist/backend/llvm/emit-module.js.map +1 -1
  148. package/dist/backend/llvm/emit-statements.js +327 -59
  149. package/dist/backend/llvm/emit-statements.js.map +1 -1
  150. package/dist/backend/llvm/emitter.d.ts +223 -33
  151. package/dist/backend/llvm/emitter.js +713 -100
  152. package/dist/backend/llvm/emitter.js.map +1 -1
  153. package/dist/backend/llvm/emitter.test.js +20 -1
  154. package/dist/backend/llvm/emitter.test.js.map +1 -1
  155. package/dist/backend/llvm/expr-async.js +32 -6
  156. package/dist/backend/llvm/expr-async.js.map +1 -1
  157. package/dist/backend/llvm/expr-bytes.d.ts +9 -1
  158. package/dist/backend/llvm/expr-bytes.js +105 -9
  159. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  160. package/dist/backend/llvm/expr-callbacks.d.ts +1 -1
  161. package/dist/backend/llvm/expr-callbacks.js +29 -22
  162. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  163. package/dist/backend/llvm/expr-calls.d.ts +0 -4
  164. package/dist/backend/llvm/expr-calls.js +116 -14
  165. package/dist/backend/llvm/expr-calls.js.map +1 -1
  166. package/dist/backend/llvm/expr-containers.js +77 -12
  167. package/dist/backend/llvm/expr-containers.js.map +1 -1
  168. package/dist/backend/llvm/expr-context.d.ts +22 -0
  169. package/dist/backend/llvm/expr-control.d.ts +4 -0
  170. package/dist/backend/llvm/expr-control.js +485 -426
  171. package/dist/backend/llvm/expr-control.js.map +1 -1
  172. package/dist/backend/llvm/expr-dispatch.js +4 -0
  173. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  174. package/dist/backend/llvm/expr-dynamic.js +3 -3
  175. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  176. package/dist/backend/llvm/expr-primitives.d.ts +6 -0
  177. package/dist/backend/llvm/expr-primitives.js +119 -58
  178. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  179. package/dist/backend/llvm/expr-primitives.test.js +11 -2
  180. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  181. package/dist/backend/llvm/expr-records.d.ts +36 -4
  182. package/dist/backend/llvm/expr-records.js +249 -37
  183. package/dist/backend/llvm/expr-records.js.map +1 -1
  184. package/dist/backend/llvm/expr-stream-bridges.js +124 -7
  185. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  186. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  187. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  188. package/dist/backend/llvm/expr-stream-callbacks.js +13 -14
  189. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  190. package/dist/backend/llvm/frame-escapes.d.ts +11 -0
  191. package/dist/backend/llvm/frame-escapes.js +219 -0
  192. package/dist/backend/llvm/frame-escapes.js.map +1 -0
  193. package/dist/backend/llvm/function-layout.d.ts +15 -0
  194. package/dist/backend/llvm/function-layout.js +40 -0
  195. package/dist/backend/llvm/function-layout.js.map +1 -0
  196. package/dist/backend/llvm/heap-census.d.ts +34 -0
  197. package/dist/backend/llvm/heap-census.js +163 -0
  198. package/dist/backend/llvm/heap-census.js.map +1 -0
  199. package/dist/backend/llvm/inline-arrays.d.ts +41 -0
  200. package/dist/backend/llvm/inline-arrays.js +195 -0
  201. package/dist/backend/llvm/inline-arrays.js.map +1 -0
  202. package/dist/backend/llvm/int32-kind-loops.js +2 -0
  203. package/dist/backend/llvm/int32-kind-loops.js.map +1 -1
  204. package/dist/backend/llvm/integer-clones.d.ts +32 -5
  205. package/dist/backend/llvm/integer-clones.js +237 -44
  206. package/dist/backend/llvm/integer-clones.js.map +1 -1
  207. package/dist/backend/llvm/integer-clones.test.js +120 -0
  208. package/dist/backend/llvm/integer-clones.test.js.map +1 -1
  209. package/dist/backend/llvm/iterative-teardown.test.d.ts +1 -0
  210. package/dist/backend/llvm/iterative-teardown.test.js +62 -0
  211. package/dist/backend/llvm/iterative-teardown.test.js.map +1 -0
  212. package/dist/backend/llvm/js-ic.js +246 -62
  213. package/dist/backend/llvm/js-ic.js.map +1 -1
  214. package/dist/backend/llvm/lib-connect.js +1 -1
  215. package/dist/backend/llvm/lib-connect.js.map +1 -1
  216. package/dist/backend/llvm/lib-datagram.js +2 -2
  217. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  218. package/dist/backend/llvm/lib-dispatch.js +153 -16
  219. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  220. package/dist/backend/llvm/lib-filesystem.d.ts +8 -0
  221. package/dist/backend/llvm/lib-filesystem.js +48 -4
  222. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  223. package/dist/backend/llvm/lib-http2.js +4 -3
  224. package/dist/backend/llvm/lib-http2.js.map +1 -1
  225. package/dist/backend/llvm/lib-lookup.js +1 -1
  226. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  227. package/dist/backend/llvm/lib-network.js +15 -1
  228. package/dist/backend/llvm/lib-network.js.map +1 -1
  229. package/dist/backend/llvm/lib-process.js +32 -8
  230. package/dist/backend/llvm/lib-process.js.map +1 -1
  231. package/dist/backend/llvm/lib-shared.d.ts +3 -0
  232. package/dist/backend/llvm/lib-shared.js +191 -28
  233. package/dist/backend/llvm/lib-shared.js.map +1 -1
  234. package/dist/backend/llvm/lib-stream.js +1 -1
  235. package/dist/backend/llvm/lib-stream.js.map +1 -1
  236. package/dist/backend/llvm/local-array-reads.js +15 -1
  237. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  238. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  239. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  240. package/dist/backend/llvm/local-extents.d.ts +22 -0
  241. package/dist/backend/llvm/local-extents.js +102 -0
  242. package/dist/backend/llvm/local-extents.js.map +1 -1
  243. package/dist/backend/llvm/local-union-storage.js +15 -2
  244. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  245. package/dist/backend/llvm/local-union-storage.test.js +1 -1
  246. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  247. package/dist/backend/llvm/loop-callees.d.ts +21 -0
  248. package/dist/backend/llvm/loop-callees.js +119 -0
  249. package/dist/backend/llvm/loop-callees.js.map +1 -0
  250. package/dist/backend/llvm/loop-callees.test.d.ts +1 -0
  251. package/dist/backend/llvm/loop-callees.test.js +65 -0
  252. package/dist/backend/llvm/loop-callees.test.js.map +1 -0
  253. package/dist/backend/llvm/loop-entry-versions.d.ts +17 -0
  254. package/dist/backend/llvm/loop-entry-versions.js +185 -0
  255. package/dist/backend/llvm/loop-entry-versions.js.map +1 -0
  256. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  257. package/dist/backend/llvm/map-number-lookup.test.js +13 -4
  258. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  259. package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -0
  260. package/dist/backend/llvm/map-read-lifetimes.js +51 -1
  261. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  262. package/dist/backend/llvm/map-read-lifetimes.test.js +6 -3
  263. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  264. package/dist/backend/llvm/nullable-unions.d.ts +67 -10
  265. package/dist/backend/llvm/nullable-unions.js +218 -22
  266. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  267. package/dist/backend/llvm/nullable-unions.test.js +124 -1
  268. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  269. package/dist/backend/llvm/periodic-guards.d.ts +16 -0
  270. package/dist/backend/llvm/periodic-guards.js +91 -0
  271. package/dist/backend/llvm/periodic-guards.js.map +1 -0
  272. package/dist/backend/llvm/periodic-guards.test.d.ts +1 -0
  273. package/dist/backend/llvm/periodic-guards.test.js +64 -0
  274. package/dist/backend/llvm/periodic-guards.test.js.map +1 -0
  275. package/dist/backend/llvm/publish.d.ts +12 -2
  276. package/dist/backend/llvm/publish.js +15 -8
  277. package/dist/backend/llvm/publish.js.map +1 -1
  278. package/dist/backend/llvm/rebound-parameters.d.ts +4 -1
  279. package/dist/backend/llvm/rebound-parameters.js +17 -1
  280. package/dist/backend/llvm/rebound-parameters.js.map +1 -1
  281. package/dist/backend/llvm/receivers.d.ts +7 -0
  282. package/dist/backend/llvm/receivers.js +77 -10
  283. package/dist/backend/llvm/receivers.js.map +1 -1
  284. package/dist/backend/llvm/record-union-keys.test.js +29 -0
  285. package/dist/backend/llvm/record-union-keys.test.js.map +1 -1
  286. package/dist/backend/llvm/record-views.d.ts +29 -0
  287. package/dist/backend/llvm/record-views.js +249 -0
  288. package/dist/backend/llvm/record-views.js.map +1 -0
  289. package/dist/backend/llvm/record-views.test.d.ts +1 -0
  290. package/dist/backend/llvm/record-views.test.js +118 -0
  291. package/dist/backend/llvm/record-views.test.js.map +1 -0
  292. package/dist/backend/llvm/reference-writes.js +21 -0
  293. package/dist/backend/llvm/reference-writes.js.map +1 -1
  294. package/dist/backend/llvm/reference-writes.test.js +42 -0
  295. package/dist/backend/llvm/reference-writes.test.js.map +1 -1
  296. package/dist/backend/llvm/regex-matchers.d.ts +5 -1
  297. package/dist/backend/llvm/regex-matchers.js +173 -21
  298. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  299. package/dist/backend/llvm/regex-matchers.test.js +39 -1
  300. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  301. package/dist/backend/llvm/region-groups.d.ts +67 -0
  302. package/dist/backend/llvm/region-groups.js +1719 -0
  303. package/dist/backend/llvm/region-groups.js.map +1 -0
  304. package/dist/backend/llvm/region-groups.test.d.ts +1 -0
  305. package/dist/backend/llvm/region-groups.test.js +197 -0
  306. package/dist/backend/llvm/region-groups.test.js.map +1 -0
  307. package/dist/backend/llvm/region-ir.d.ts +31 -0
  308. package/dist/backend/llvm/region-ir.js +256 -0
  309. package/dist/backend/llvm/region-ir.js.map +1 -0
  310. package/dist/backend/llvm/region-sites.d.ts +20 -0
  311. package/dist/backend/llvm/region-sites.js +327 -0
  312. package/dist/backend/llvm/region-sites.js.map +1 -0
  313. package/dist/backend/llvm/region-sites.test.d.ts +1 -0
  314. package/dist/backend/llvm/region-sites.test.js +216 -0
  315. package/dist/backend/llvm/region-sites.test.js.map +1 -0
  316. package/dist/backend/llvm/repr-report.d.ts +9 -0
  317. package/dist/backend/llvm/repr-report.js +143 -0
  318. package/dist/backend/llvm/repr-report.js.map +1 -0
  319. package/dist/backend/llvm/repr-report.test.d.ts +1 -0
  320. package/dist/backend/llvm/repr-report.test.js +62 -0
  321. package/dist/backend/llvm/repr-report.test.js.map +1 -0
  322. package/dist/backend/llvm/runtime-registries.test.d.ts +1 -0
  323. package/dist/backend/llvm/runtime-registries.test.js +88 -0
  324. package/dist/backend/llvm/runtime-registries.test.js.map +1 -0
  325. package/dist/backend/llvm/serialized-ir-emission.test.js +1 -0
  326. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  327. package/dist/backend/llvm/shape-union-tags.test.d.ts +1 -0
  328. package/dist/backend/llvm/shape-union-tags.test.js +75 -0
  329. package/dist/backend/llvm/shape-union-tags.test.js.map +1 -0
  330. package/dist/backend/llvm/shapes.d.ts +60 -10
  331. package/dist/backend/llvm/shapes.js +233 -51
  332. package/dist/backend/llvm/shapes.js.map +1 -1
  333. package/dist/backend/llvm/shapes.test.js +37 -18
  334. package/dist/backend/llvm/shapes.test.js.map +1 -1
  335. package/dist/backend/llvm/speculative-integers.d.ts +3 -0
  336. package/dist/backend/llvm/speculative-integers.js +20 -8
  337. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  338. package/dist/backend/llvm/split.js +6 -1
  339. package/dist/backend/llvm/split.js.map +1 -1
  340. package/dist/backend/llvm/split.test.js +23 -0
  341. package/dist/backend/llvm/split.test.js.map +1 -1
  342. package/dist/backend/llvm/stack-callbacks.js +4 -2
  343. package/dist/backend/llvm/stack-callbacks.js.map +1 -1
  344. package/dist/backend/llvm/stack-objects.d.ts +12 -3
  345. package/dist/backend/llvm/stack-objects.js +110 -22
  346. package/dist/backend/llvm/stack-objects.js.map +1 -1
  347. package/dist/backend/llvm/stack-objects.test.js +144 -0
  348. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  349. package/dist/backend/llvm/stack-unions.test.js +24 -1
  350. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  351. package/dist/backend/llvm/string-lifetimes.js +2 -1
  352. package/dist/backend/llvm/string-lifetimes.js.map +1 -1
  353. package/dist/backend/llvm/string-lifetimes.test.js +1 -1
  354. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  355. package/dist/backend/llvm/string-reads.d.ts +4 -0
  356. package/dist/backend/llvm/string-reads.js +27 -0
  357. package/dist/backend/llvm/string-reads.js.map +1 -1
  358. package/dist/backend/llvm/test-boxed-unions.d.ts +10 -8
  359. package/dist/backend/llvm/test-boxed-unions.js +20 -25
  360. package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
  361. package/dist/backend/llvm/union-repr.js +9 -8
  362. package/dist/backend/llvm/union-repr.js.map +1 -1
  363. package/dist/backend/llvm/union-retype.test.js +45 -2
  364. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  365. package/dist/backend/llvm/unwind-abi.d.ts +20 -8
  366. package/dist/backend/llvm/unwind-abi.js +177 -70
  367. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  368. package/dist/backend/llvm/unwind-abi.test.js +90 -3
  369. package/dist/backend/llvm/unwind-abi.test.js.map +1 -1
  370. package/dist/backend/llvm/walk-borrows.d.ts +3 -2
  371. package/dist/backend/llvm/walk-borrows.js +2 -2
  372. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  373. package/dist/backend/llvm/walk-borrows.test.js +18 -0
  374. package/dist/backend/llvm/walk-borrows.test.js.map +1 -1
  375. package/dist/backend/llvm/walkers.d.ts +14 -1
  376. package/dist/backend/llvm/walkers.js +103 -11
  377. package/dist/backend/llvm/walkers.js.map +1 -1
  378. package/dist/backend/llvm/wrapping-sums.d.ts +26 -6
  379. package/dist/backend/llvm/wrapping-sums.js +64 -12
  380. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  381. package/dist/backend/loop-polls.d.ts +4 -2
  382. package/dist/backend/loop-polls.js +11 -2
  383. package/dist/backend/loop-polls.js.map +1 -1
  384. package/dist/backend/mangle.d.ts +0 -5
  385. package/dist/backend/mangle.js +0 -9
  386. package/dist/backend/mangle.js.map +1 -1
  387. package/dist/backend/may-throw.d.ts +10 -9
  388. package/dist/backend/may-throw.js +189 -27
  389. package/dist/backend/may-throw.js.map +1 -1
  390. package/dist/backend/may-throw.test.js +44 -7
  391. package/dist/backend/may-throw.test.js.map +1 -1
  392. package/dist/backend/native/compiler-fingerprint.d.ts +5 -0
  393. package/dist/backend/native/compiler-fingerprint.js +62 -16
  394. package/dist/backend/native/compiler-fingerprint.js.map +1 -1
  395. package/dist/backend/native/contracts.d.ts +31 -8
  396. package/dist/backend/native/executable.js +56 -32
  397. package/dist/backend/native/executable.js.map +1 -1
  398. package/dist/backend/native/library.js +3 -4
  399. package/dist/backend/native/library.js.map +1 -1
  400. package/dist/backend/native/object-merge.d.ts +3 -1
  401. package/dist/backend/native/object-merge.js +24 -11
  402. package/dist/backend/native/object-merge.js.map +1 -1
  403. package/dist/backend/native/program-shards.js +6 -3
  404. package/dist/backend/native/program-shards.js.map +1 -1
  405. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  406. package/dist/backend/native/runtime-inputs.js +3 -0
  407. package/dist/backend/native/runtime-inputs.js.map +1 -1
  408. package/dist/backend/native/vendor.d.ts +1 -1
  409. package/dist/backend/native-codegen-core.d.ts +15 -6
  410. package/dist/backend/native-codegen-core.js +20 -9
  411. package/dist/backend/native-codegen-core.js.map +1 -1
  412. package/dist/backend/native-codegen.js +51 -5
  413. package/dist/backend/native-codegen.js.map +1 -1
  414. package/dist/backend/native-codegen.test.js +82 -8
  415. package/dist/backend/native-codegen.test.js.map +1 -1
  416. package/dist/backend/native-link-info-core.d.ts +30 -0
  417. package/dist/backend/native-link-info-core.js.map +1 -1
  418. package/dist/backend/native-profile.d.ts +68 -4
  419. package/dist/backend/native-profile.js +86 -14
  420. package/dist/backend/native-profile.js.map +1 -1
  421. package/dist/backend/native-profile.test.js +127 -4
  422. package/dist/backend/native-profile.test.js.map +1 -1
  423. package/dist/backend/native-toolchain.d.ts +1 -1
  424. package/dist/backend/native-toolchain.js +1 -1
  425. package/dist/backend/native-toolchain.js.map +1 -1
  426. package/dist/backend/native-toolchain.test.js +58 -4
  427. package/dist/backend/native-toolchain.test.js.map +1 -1
  428. package/dist/backend/native-tools.d.ts +17 -3
  429. package/dist/backend/native-tools.js +12 -4
  430. package/dist/backend/native-tools.js.map +1 -1
  431. package/dist/backend/native-tools.test.d.ts +1 -0
  432. package/dist/backend/native-tools.test.js +76 -0
  433. package/dist/backend/native-tools.test.js.map +1 -0
  434. package/dist/backend/object-localize.js +69 -9
  435. package/dist/backend/object-localize.js.map +1 -1
  436. package/dist/backend/object-localize.test.js +99 -10
  437. package/dist/backend/object-localize.test.js.map +1 -1
  438. package/dist/backend/publication.d.ts +2 -0
  439. package/dist/backend/publication.js +4 -0
  440. package/dist/backend/publication.js.map +1 -1
  441. package/dist/backend/runtime-abi.d.ts +2 -2
  442. package/dist/backend/runtime-abi.js +2 -2
  443. package/dist/backend/runtime-pack-core.d.ts +19 -0
  444. package/dist/backend/runtime-pack-core.js +23 -3
  445. package/dist/backend/runtime-pack-core.js.map +1 -1
  446. package/dist/backend/runtime-pack-targets.test.js +1 -1
  447. package/dist/backend/runtime-pack.test.js +48 -2
  448. package/dist/backend/runtime-pack.test.js.map +1 -1
  449. package/dist/backend/target-cpu.d.ts +2 -0
  450. package/dist/backend/target-cpu.js +4 -0
  451. package/dist/backend/target-cpu.js.map +1 -1
  452. package/dist/backend/target-diagnostics.js +1 -19
  453. package/dist/backend/target-diagnostics.js.map +1 -1
  454. package/dist/backend/target-diagnostics.test.js +1 -1
  455. package/dist/backend/target-diagnostics.test.js.map +1 -1
  456. package/dist/backend/targets.d.ts +28 -0
  457. package/dist/backend/targets.js +70 -0
  458. package/dist/backend/targets.js.map +1 -1
  459. package/dist/backend/targets.test.js +75 -1
  460. package/dist/backend/targets.test.js.map +1 -1
  461. package/dist/backend/vendor-archives.d.ts +1 -1
  462. package/dist/backend/vendor-archives.js +25 -12
  463. package/dist/backend/vendor-archives.js.map +1 -1
  464. package/dist/backend/vendor-inputs.d.ts +15 -2
  465. package/dist/backend/vendor-inputs.js +59 -3
  466. package/dist/backend/vendor-inputs.js.map +1 -1
  467. package/dist/backend/vendor-inputs.test.d.ts +1 -0
  468. package/dist/backend/vendor-inputs.test.js +74 -0
  469. package/dist/backend/vendor-inputs.test.js.map +1 -0
  470. package/dist/cli/command.js +95 -5
  471. package/dist/cli/command.js.map +1 -1
  472. package/dist/cli/host.d.ts +3 -0
  473. package/dist/cli/output-options.d.ts +3 -0
  474. package/dist/cli/output-options.js +8 -2
  475. package/dist/cli/output-options.js.map +1 -1
  476. package/dist/cli/usage.d.ts +28 -1
  477. package/dist/cli/usage.js +56 -6
  478. package/dist/cli/usage.js.map +1 -1
  479. package/dist/compat/fetch-profile.d.ts +3 -0
  480. package/dist/compat/fetch-profile.js +23 -3
  481. package/dist/compat/fetch-profile.js.map +1 -1
  482. package/dist/compile-types.d.ts +45 -0
  483. package/dist/contracts/check.js +70 -2
  484. package/dist/contracts/check.js.map +1 -1
  485. package/dist/contracts/int32-elements.d.ts +2 -1
  486. package/dist/contracts/int32-elements.js.map +1 -1
  487. package/dist/coverage/report.d.ts +5 -1
  488. package/dist/coverage/report.js +83 -2
  489. package/dist/coverage/report.js.map +1 -1
  490. package/dist/coverage/verdict-cache.d.ts +2 -0
  491. package/dist/coverage/verdict-cache.js +5 -10
  492. package/dist/coverage/verdict-cache.js.map +1 -1
  493. package/dist/diagnostics/codes.d.ts +145 -0
  494. package/dist/diagnostics/codes.js +159 -0
  495. package/dist/diagnostics/codes.js.map +1 -0
  496. package/dist/diagnostics/codes.test.d.ts +1 -0
  497. package/dist/diagnostics/codes.test.js +78 -0
  498. package/dist/diagnostics/codes.test.js.map +1 -0
  499. package/dist/diagnostics/diagnostic.d.ts +101 -2
  500. package/dist/diagnostics/diagnostic.js +155 -0
  501. package/dist/diagnostics/diagnostic.js.map +1 -1
  502. package/dist/diagnostics/dynamic-slots.d.ts +23 -0
  503. package/dist/diagnostics/dynamic-slots.js +29 -0
  504. package/dist/diagnostics/dynamic-slots.js.map +1 -0
  505. package/dist/diagnostics/dynamic-tier.d.ts +6 -0
  506. package/dist/diagnostics/dynamic-tier.js +8 -1
  507. package/dist/diagnostics/dynamic-tier.js.map +1 -1
  508. package/dist/diagnostics/envelope.d.ts +43 -1
  509. package/dist/diagnostics/envelope.js +19 -1
  510. package/dist/diagnostics/envelope.js.map +1 -1
  511. package/dist/diagnostics/envelope.test.js.map +1 -1
  512. package/dist/diagnostics/render.d.ts +3 -1
  513. package/dist/diagnostics/render.js +27 -6
  514. package/dist/diagnostics/render.js.map +1 -1
  515. package/dist/executable/executable-cache.d.ts +41 -0
  516. package/dist/executable/executable-cache.js +39 -1
  517. package/dist/executable/executable-cache.js.map +1 -1
  518. package/dist/executable/executable-cache.test.js +4 -1
  519. package/dist/executable/executable-cache.test.js.map +1 -1
  520. package/dist/executable/prepare.d.ts +2 -1
  521. package/dist/executable/prepare.js +421 -10
  522. package/dist/executable/prepare.js.map +1 -1
  523. package/dist/frontend/analysis.js +1 -0
  524. package/dist/frontend/analysis.js.map +1 -1
  525. package/dist/frontend/canon-map.d.ts +17 -0
  526. package/dist/frontend/canon-map.js +177 -0
  527. package/dist/frontend/canon-map.js.map +1 -0
  528. package/dist/frontend/canon.d.ts +122 -0
  529. package/dist/frontend/canon.js +462 -0
  530. package/dist/frontend/canon.js.map +1 -0
  531. package/dist/frontend/contract-types.d.ts +9 -1
  532. package/dist/frontend/contract-types.js +46 -4
  533. package/dist/frontend/contract-types.js.map +1 -1
  534. package/dist/frontend/decl-projection.d.ts +3 -0
  535. package/dist/frontend/decl-projection.js +121 -3
  536. package/dist/frontend/decl-projection.js.map +1 -1
  537. package/dist/frontend/dts-paths.d.ts +17 -4
  538. package/dist/frontend/dts-paths.js +149 -5
  539. package/dist/frontend/dts-paths.js.map +1 -1
  540. package/dist/frontend/fork-target.js +4 -4
  541. package/dist/frontend/fork-target.js.map +1 -1
  542. package/dist/frontend/fork-target.test.js +3 -3
  543. package/dist/frontend/fork-target.test.js.map +1 -1
  544. package/dist/frontend/heritage-elements.d.ts +15 -0
  545. package/dist/frontend/heritage-elements.js +18 -0
  546. package/dist/frontend/heritage-elements.js.map +1 -0
  547. package/dist/frontend/heritage-elements.test.d.ts +1 -0
  548. package/dist/frontend/heritage-elements.test.js +68 -0
  549. package/dist/frontend/heritage-elements.test.js.map +1 -0
  550. package/dist/frontend/input-tracker.d.ts +20 -0
  551. package/dist/frontend/input-tracker.js +74 -4
  552. package/dist/frontend/input-tracker.js.map +1 -1
  553. package/dist/frontend/input-tracker.test.js +66 -0
  554. package/dist/frontend/input-tracker.test.js.map +1 -1
  555. package/dist/frontend/lowering/any-collection-residue.d.ts +9 -0
  556. package/dist/frontend/lowering/any-collection-residue.js +42 -0
  557. package/dist/frontend/lowering/any-collection-residue.js.map +1 -0
  558. package/dist/frontend/lowering/array-values.d.ts +44 -2
  559. package/dist/frontend/lowering/array-values.js +193 -3
  560. package/dist/frontend/lowering/array-values.js.map +1 -1
  561. package/dist/frontend/lowering/builtin-namespaces.d.ts +6 -2
  562. package/dist/frontend/lowering/builtin-namespaces.js +28 -6
  563. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  564. package/dist/frontend/lowering/builtins/array-classes.d.ts +69 -0
  565. package/dist/frontend/lowering/builtins/array-classes.js +729 -0
  566. package/dist/frontend/lowering/builtins/array-classes.js.map +1 -0
  567. package/dist/frontend/lowering/builtins/callable-aliases.js +4 -0
  568. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  569. package/dist/frontend/lowering/builtins/child-process-methods.js +34 -0
  570. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  571. package/dist/frontend/lowering/builtins/disposable-stack.js +1 -3
  572. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  573. package/dist/frontend/lowering/builtins/errors.d.ts +13 -9
  574. package/dist/frontend/lowering/builtins/errors.js +136 -56
  575. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  576. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  577. package/dist/frontend/lowering/builtins/filesystem-calls.js +85 -4
  578. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  579. package/dist/frontend/lowering/builtins/filesystem.d.ts +11 -6
  580. package/dist/frontend/lowering/builtins/filesystem.js +270 -24
  581. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  582. package/dist/frontend/lowering/builtins/json.js +7 -1
  583. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  584. package/dist/frontend/lowering/builtins/mime.d.ts +25 -0
  585. package/dist/frontend/lowering/builtins/mime.js +167 -0
  586. package/dist/frontend/lowering/builtins/mime.js.map +1 -0
  587. package/dist/frontend/lowering/builtins/module-bindings.d.ts +3 -0
  588. package/dist/frontend/lowering/builtins/module-bindings.js +6 -0
  589. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  590. package/dist/frontend/lowering/builtins/module-calls.js +79 -12
  591. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  592. package/dist/frontend/lowering/builtins/module-resolution.d.ts +7 -4
  593. package/dist/frontend/lowering/builtins/module-resolution.js +115 -13
  594. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  595. package/dist/frontend/lowering/builtins/navigator.d.ts +3 -1
  596. package/dist/frontend/lowering/builtins/navigator.js +22 -8
  597. package/dist/frontend/lowering/builtins/navigator.js.map +1 -1
  598. package/dist/frontend/lowering/builtins/process.js +49 -9
  599. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  600. package/dist/frontend/lowering/builtins/promises.js +18 -3
  601. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  602. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +6 -2
  603. package/dist/frontend/lowering/builtins/promisify-callback.js +19 -6
  604. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  605. package/dist/frontend/lowering/builtins/properties.js +23 -5
  606. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  607. package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +42 -0
  608. package/dist/frontend/lowering/builtins/web-streams-dyn.js +321 -0
  609. package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -0
  610. package/dist/frontend/lowering/builtins/x509.js +35 -5
  611. package/dist/frontend/lowering/builtins/x509.js.map +1 -1
  612. package/dist/frontend/lowering/call-arguments.d.ts +14 -1
  613. package/dist/frontend/lowering/call-arguments.js +84 -70
  614. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  615. package/dist/frontend/lowering/call-signatures.js +108 -24
  616. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  617. package/dist/frontend/lowering/class-attributes.js +6 -5
  618. package/dist/frontend/lowering/class-attributes.js.map +1 -1
  619. package/dist/frontend/lowering/class-dynamic-dispatch.js +40 -19
  620. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  621. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
  622. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  623. package/dist/frontend/lowering/class-protocol-dispatch.js +4 -0
  624. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  625. package/dist/frontend/lowering/class-protocols.d.ts +61 -1
  626. package/dist/frontend/lowering/class-protocols.js +297 -21
  627. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  628. package/dist/frontend/lowering/class-to-primitive.d.ts +3 -2
  629. package/dist/frontend/lowering/class-to-primitive.js +15 -5
  630. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  631. package/dist/frontend/lowering/coercions/asserted.d.ts +16 -0
  632. package/dist/frontend/lowering/coercions/asserted.js +79 -0
  633. package/dist/frontend/lowering/coercions/asserted.js.map +1 -0
  634. package/dist/frontend/lowering/coercions/function-adapters.d.ts +13 -0
  635. package/dist/frontend/lowering/coercions/function-adapters.js +70 -3
  636. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  637. package/dist/frontend/lowering/coercions/state.d.ts +23 -0
  638. package/dist/frontend/lowering/coercions/state.js +9 -0
  639. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  640. package/dist/frontend/lowering/coercions/structural-plans.js +67 -1
  641. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  642. package/dist/frontend/lowering/coercions/structural.d.ts +10 -0
  643. package/dist/frontend/lowering/coercions/structural.js +134 -4
  644. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  645. package/dist/frontend/lowering/coercions/unions.d.ts +11 -0
  646. package/dist/frontend/lowering/coercions/unions.js +83 -4
  647. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  648. package/dist/frontend/lowering/completion-callbacks.js +3 -2
  649. package/dist/frontend/lowering/completion-callbacks.js.map +1 -1
  650. package/dist/frontend/lowering/containers/array-callbacks.d.ts +10 -0
  651. package/dist/frontend/lowering/containers/array-callbacks.js +224 -81
  652. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  653. package/dist/frontend/lowering/containers/array-concat.d.ts +5 -2
  654. package/dist/frontend/lowering/containers/array-concat.js +76 -7
  655. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  656. package/dist/frontend/lowering/containers/array-construction.d.ts +9 -4
  657. package/dist/frontend/lowering/containers/array-construction.js +112 -100
  658. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  659. package/dist/frontend/lowering/containers/array-methods.js +193 -45
  660. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  661. package/dist/frontend/lowering/containers/array-pipelines.d.ts +3 -0
  662. package/dist/frontend/lowering/containers/array-pipelines.js +81 -13
  663. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  664. package/dist/frontend/lowering/containers/callback-arguments.d.ts +1 -0
  665. package/dist/frontend/lowering/containers/callback-arguments.js +28 -2
  666. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  667. package/dist/frontend/lowering/containers/collection-methods.js +13 -3
  668. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  669. package/dist/frontend/lowering/containers/filter-predicates.js +34 -3
  670. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  671. package/dist/frontend/lowering/containers/indexed-objects.d.ts +34 -1
  672. package/dist/frontend/lowering/containers/indexed-objects.js +131 -72
  673. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  674. package/dist/frontend/lowering/cycle-initialization.js +43 -6
  675. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  676. package/dist/frontend/lowering/decl-origin.d.ts +49 -0
  677. package/dist/frontend/lowering/decl-origin.js +402 -0
  678. package/dist/frontend/lowering/decl-origin.js.map +1 -0
  679. package/dist/frontend/lowering/deferred-module-initializers.d.ts +2 -0
  680. package/dist/frontend/lowering/deferred-module-initializers.js +7 -0
  681. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  682. package/dist/frontend/lowering/divergences.js +5 -0
  683. package/dist/frontend/lowering/divergences.js.map +1 -1
  684. package/dist/frontend/lowering/dynamic-tier.d.ts +8 -2
  685. package/dist/frontend/lowering/dynamic-tier.js +111 -3
  686. package/dist/frontend/lowering/dynamic-tier.js.map +1 -1
  687. package/dist/frontend/lowering/expressions/array-literals.d.ts +14 -1
  688. package/dist/frontend/lowering/expressions/array-literals.js +43 -5
  689. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  690. package/dist/frontend/lowering/expressions/asserted-receiver.d.ts +48 -0
  691. package/dist/frontend/lowering/expressions/asserted-receiver.js +233 -0
  692. package/dist/frontend/lowering/expressions/asserted-receiver.js.map +1 -0
  693. package/dist/frontend/lowering/expressions/binary.js +136 -1
  694. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  695. package/dist/frontend/lowering/expressions/element-access.d.ts +7 -0
  696. package/dist/frontend/lowering/expressions/element-access.js +363 -12
  697. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  698. package/dist/frontend/lowering/expressions/identifiers.d.ts +3 -0
  699. package/dist/frontend/lowering/expressions/identifiers.js +78 -62
  700. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  701. package/dist/frontend/lowering/expressions/message-listeners.d.ts +3 -0
  702. package/dist/frontend/lowering/expressions/message-listeners.js +19 -0
  703. package/dist/frontend/lowering/expressions/message-listeners.js.map +1 -0
  704. package/dist/frontend/lowering/expressions/narrowing.js +224 -6
  705. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  706. package/dist/frontend/lowering/expressions/nullish-assignment.js +5 -2
  707. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  708. package/dist/frontend/lowering/expressions/object-literals.d.ts +1 -1
  709. package/dist/frontend/lowering/expressions/object-literals.js +282 -24
  710. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  711. package/dist/frontend/lowering/expressions/property-access.d.ts +15 -3
  712. package/dist/frontend/lowering/expressions/property-access.js +397 -74
  713. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  714. package/dist/frontend/lowering/expressions/relational.js +202 -70
  715. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  716. package/dist/frontend/lowering/expressions/typeof.js +9 -1
  717. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  718. package/dist/frontend/lowering/expressions/union-fields.d.ts +28 -8
  719. package/dist/frontend/lowering/expressions/union-fields.js +168 -14
  720. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  721. package/dist/frontend/lowering/frozen-records.d.ts +8 -0
  722. package/dist/frontend/lowering/frozen-records.js +56 -9
  723. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  724. package/dist/frontend/lowering/function-context.d.ts +3 -0
  725. package/dist/frontend/lowering/function-context.js +4 -1
  726. package/dist/frontend/lowering/function-context.js.map +1 -1
  727. package/dist/frontend/lowering/function-returns.d.ts +4 -0
  728. package/dist/frontend/lowering/function-returns.js +231 -2
  729. package/dist/frontend/lowering/function-returns.js.map +1 -1
  730. package/dist/frontend/lowering/generator-delegation.js +3 -2
  731. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  732. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +26 -0
  733. package/dist/frontend/lowering/generator-dynamic-dispatch.js +294 -2
  734. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  735. package/dist/frontend/lowering/generic-functions.d.ts +10 -0
  736. package/dist/frontend/lowering/generic-functions.js +67 -7
  737. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  738. package/dist/frontend/lowering/global-values.d.ts +37 -0
  739. package/dist/frontend/lowering/global-values.js +395 -0
  740. package/dist/frontend/lowering/global-values.js.map +1 -0
  741. package/dist/frontend/lowering/handle-properties.js +3 -2
  742. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  743. package/dist/frontend/lowering/handle-properties.test.d.ts +1 -0
  744. package/dist/frontend/lowering/handle-properties.test.js +25 -0
  745. package/dist/frontend/lowering/handle-properties.test.js.map +1 -0
  746. package/dist/frontend/lowering/import-meta.d.ts +3 -0
  747. package/dist/frontend/lowering/import-meta.js +8 -3
  748. package/dist/frontend/lowering/import-meta.js.map +1 -1
  749. package/dist/frontend/lowering/iterator-adapters.js +3 -3
  750. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  751. package/dist/frontend/lowering/key-order-witness.d.ts +2 -0
  752. package/dist/frontend/lowering/key-order-witness.js +10 -0
  753. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  754. package/dist/frontend/lowering/lower-array-sort.d.ts +5 -1
  755. package/dist/frontend/lowering/lower-array-sort.js +16 -2
  756. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  757. package/dist/frontend/lowering/lower-builtin-values.d.ts +7 -0
  758. package/dist/frontend/lowering/lower-builtin-values.js +65 -16
  759. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  760. package/dist/frontend/lowering/lower-calls.js +222 -24
  761. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  762. package/dist/frontend/lowering/lower-classes.d.ts +6 -0
  763. package/dist/frontend/lowering/lower-classes.js +154 -20
  764. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  765. package/dist/frontend/lowering/lower-console.js +25 -2
  766. package/dist/frontend/lowering/lower-console.js.map +1 -1
  767. package/dist/frontend/lowering/lower-exprs.d.ts +29 -0
  768. package/dist/frontend/lowering/lower-exprs.js +544 -24
  769. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  770. package/dist/frontend/lowering/lower-functions.js +93 -18
  771. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  772. package/dist/frontend/lowering/lower-global-value.d.ts +4 -1
  773. package/dist/frontend/lowering/lower-global-value.js +10 -3
  774. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  775. package/dist/frontend/lowering/lower-inspect.d.ts +44 -4
  776. package/dist/frontend/lowering/lower-inspect.js +723 -26
  777. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  778. package/dist/frontend/lowering/lower-modules.d.ts +3 -1
  779. package/dist/frontend/lowering/lower-modules.js +189 -24
  780. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  781. package/dist/frontend/lowering/lower-namespaces.d.ts +7 -0
  782. package/dist/frontend/lowering/lower-namespaces.js +23 -0
  783. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  784. package/dist/frontend/lowering/lower-node-island.d.ts +74 -0
  785. package/dist/frontend/lowering/lower-node-island.js +1931 -0
  786. package/dist/frontend/lowering/lower-node-island.js.map +1 -0
  787. package/dist/frontend/lowering/lower-server.js +44 -0
  788. package/dist/frontend/lowering/lower-server.js.map +1 -1
  789. package/dist/frontend/lowering/lower-shared-modules.d.ts +27 -0
  790. package/dist/frontend/lowering/lower-shared-modules.js +611 -0
  791. package/dist/frontend/lowering/lower-shared-modules.js.map +1 -0
  792. package/dist/frontend/lowering/lower-stdlib.js +85 -9
  793. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  794. package/dist/frontend/lowering/lower-stmts.d.ts +2 -6
  795. package/dist/frontend/lowering/lower-stmts.js +781 -143
  796. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  797. package/dist/frontend/lowering/lower-stream.js +548 -36
  798. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  799. package/dist/frontend/lowering/lower-timers.js +9 -0
  800. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  801. package/dist/frontend/lowering/lowerer.d.ts +514 -10
  802. package/dist/frontend/lowering/lowerer.js +2667 -163
  803. package/dist/frontend/lowering/lowerer.js.map +1 -1
  804. package/dist/frontend/lowering/lowerer.test.js +44 -1
  805. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  806. package/dist/frontend/lowering/maybe-promise.d.ts +6 -0
  807. package/dist/frontend/lowering/maybe-promise.js +13 -0
  808. package/dist/frontend/lowering/maybe-promise.js.map +1 -1
  809. package/dist/frontend/lowering/module-namespace-elements.d.ts +12 -0
  810. package/dist/frontend/lowering/module-namespace-elements.js +114 -18
  811. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  812. package/dist/frontend/lowering/nan-coded-reads.d.ts +11 -0
  813. package/dist/frontend/lowering/nan-coded-reads.js +45 -2
  814. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  815. package/dist/frontend/lowering/narrowing-stability.d.ts +4 -0
  816. package/dist/frontend/lowering/narrowing-stability.js +14 -6
  817. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  818. package/dist/frontend/lowering/receiver-returns.d.ts +3 -0
  819. package/dist/frontend/lowering/receiver-returns.js +134 -0
  820. package/dist/frontend/lowering/receiver-returns.js.map +1 -0
  821. package/dist/frontend/lowering/record-inherited.d.ts +26 -0
  822. package/dist/frontend/lowering/record-inherited.js +807 -0
  823. package/dist/frontend/lowering/record-inherited.js.map +1 -0
  824. package/dist/frontend/lowering/runtime-optional-elements.d.ts +31 -1
  825. package/dist/frontend/lowering/runtime-optional-elements.js +105 -13
  826. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  827. package/dist/frontend/lowering/runtime-optional-guards.d.ts +3 -0
  828. package/dist/frontend/lowering/runtime-optional-guards.js +35 -7
  829. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  830. package/dist/frontend/lowering/runtime-optional-guards.test.js +59 -1
  831. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  832. package/dist/frontend/lowering/stable-names.d.ts +8 -0
  833. package/dist/frontend/lowering/stable-names.js +22 -0
  834. package/dist/frontend/lowering/stable-names.js.map +1 -1
  835. package/dist/frontend/lowering/stable-names.test.d.ts +1 -0
  836. package/dist/frontend/lowering/stable-names.test.js +16 -0
  837. package/dist/frontend/lowering/stable-names.test.js.map +1 -0
  838. package/dist/frontend/lowering/static-typeof.d.ts +5 -4
  839. package/dist/frontend/lowering/static-typeof.js +10 -4
  840. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  841. package/dist/frontend/lowering/structural-instances.d.ts +22 -0
  842. package/dist/frontend/lowering/structural-instances.js +282 -0
  843. package/dist/frontend/lowering/structural-instances.js.map +1 -0
  844. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  845. package/dist/frontend/lowering/surfaces.js +108 -12
  846. package/dist/frontend/lowering/surfaces.js.map +1 -1
  847. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  848. package/dist/frontend/lowering/symbol-fields.js +32 -0
  849. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  850. package/dist/frontend/lowering/type-failure.d.ts +17 -0
  851. package/dist/frontend/lowering/type-failure.js +163 -0
  852. package/dist/frontend/lowering/type-failure.js.map +1 -0
  853. package/dist/frontend/lowering/typed-arguments.d.ts +5 -6
  854. package/dist/frontend/lowering/typed-arguments.js +10 -2
  855. package/dist/frontend/lowering/typed-arguments.js.map +1 -1
  856. package/dist/frontend/lowering/union-narrow.d.ts +9 -1
  857. package/dist/frontend/lowering/union-narrow.js +31 -2
  858. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  859. package/dist/frontend/lowering/union-retag.test.js +42 -2
  860. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  861. package/dist/frontend/lowering/unit-journal.d.ts +194 -0
  862. package/dist/frontend/lowering/unit-journal.js +556 -0
  863. package/dist/frontend/lowering/unit-journal.js.map +1 -0
  864. package/dist/frontend/lowering/unit-journal.test.d.ts +1 -0
  865. package/dist/frontend/lowering/unit-journal.test.js +335 -0
  866. package/dist/frontend/lowering/unit-journal.test.js.map +1 -0
  867. package/dist/frontend/lowering/width-lift.d.ts +19 -0
  868. package/dist/frontend/node-api-import.d.ts +21 -0
  869. package/dist/frontend/node-api-import.js +88 -0
  870. package/dist/frontend/node-api-import.js.map +1 -0
  871. package/dist/frontend/npm-static-type-exports-host.js +4 -3
  872. package/dist/frontend/npm-static-type-exports-host.js.map +1 -1
  873. package/dist/frontend/npm-static.js +9 -2
  874. package/dist/frontend/npm-static.js.map +1 -1
  875. package/dist/frontend/package-shims.d.ts +6 -2
  876. package/dist/frontend/package-shims.js +13 -2
  877. package/dist/frontend/package-shims.js.map +1 -1
  878. package/dist/frontend/pipeline.d.ts +11 -4
  879. package/dist/frontend/pipeline.js +249 -26
  880. package/dist/frontend/pipeline.js.map +1 -1
  881. package/dist/frontend/process-fork.d.ts +3 -0
  882. package/dist/frontend/process-fork.js.map +1 -1
  883. package/dist/frontend/program-analysis.d.ts +6 -0
  884. package/dist/frontend/program-analysis.js +4 -0
  885. package/dist/frontend/program-analysis.js.map +1 -1
  886. package/dist/frontend/program.d.ts +12 -1
  887. package/dist/frontend/program.js +256 -36
  888. package/dist/frontend/program.js.map +1 -1
  889. package/dist/frontend/resolve.js +8 -2
  890. package/dist/frontend/resolve.js.map +1 -1
  891. package/dist/frontend/shape-inference/analyze.d.ts +23 -1
  892. package/dist/frontend/shape-inference/analyze.js +982 -97
  893. package/dist/frontend/shape-inference/analyze.js.map +1 -1
  894. package/dist/frontend/shape-inference/constant-graphs.d.ts +2 -0
  895. package/dist/frontend/shape-inference/constant-graphs.js +39 -4
  896. package/dist/frontend/shape-inference/constant-graphs.js.map +1 -1
  897. package/dist/frontend/shape-inference/domain.d.ts +2 -0
  898. package/dist/frontend/shape-inference/domain.js.map +1 -1
  899. package/dist/frontend/shape-inference/fallback.d.ts +17 -0
  900. package/dist/frontend/shape-inference/fallback.js +303 -0
  901. package/dist/frontend/shape-inference/fallback.js.map +1 -0
  902. package/dist/frontend/shape-inference/index.d.ts +75 -1
  903. package/dist/frontend/shape-inference/index.js +531 -2
  904. package/dist/frontend/shape-inference/index.js.map +1 -1
  905. package/dist/frontend/shape-inference/inferred-checks.d.ts +2 -0
  906. package/dist/frontend/shape-inference/inferred-checks.js +90 -0
  907. package/dist/frontend/shape-inference/inferred-checks.js.map +1 -0
  908. package/dist/frontend/shape-inference/memo.d.ts +30 -0
  909. package/dist/frontend/shape-inference/memo.js +99 -0
  910. package/dist/frontend/shape-inference/memo.js.map +1 -0
  911. package/dist/frontend/shape-inference/overlay.d.ts +81 -0
  912. package/dist/frontend/shape-inference/overlay.js +1160 -0
  913. package/dist/frontend/shape-inference/overlay.js.map +1 -0
  914. package/dist/frontend/shape-inference/registry.test.d.ts +1 -0
  915. package/dist/frontend/shape-inference/registry.test.js +34 -0
  916. package/dist/frontend/shape-inference/registry.test.js.map +1 -0
  917. package/dist/frontend/shape-inference/report.js +42 -8
  918. package/dist/frontend/shape-inference/report.js.map +1 -1
  919. package/dist/frontend/shape-inference/static-objects.d.ts +29 -0
  920. package/dist/frontend/shape-inference/static-objects.js +1951 -0
  921. package/dist/frontend/shape-inference/static-objects.js.map +1 -0
  922. package/dist/frontend/tier-analysis.d.ts +53 -1
  923. package/dist/frontend/tier-analysis.js +133 -0
  924. package/dist/frontend/tier-analysis.js.map +1 -1
  925. package/dist/frontend/ts7/api.js +4 -2
  926. package/dist/frontend/ts7/api.js.map +1 -1
  927. package/dist/frontend/ts7/ast-node.d.ts +9 -0
  928. package/dist/frontend/ts7/ast-node.js +42 -10
  929. package/dist/frontend/ts7/ast-node.js.map +1 -1
  930. package/dist/frontend/ts7/ast-node.test.js +23 -0
  931. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  932. package/dist/frontend/ts7/ast-wire-protocols.test.d.ts +1 -0
  933. package/dist/frontend/ts7/ast-wire-protocols.test.js +93 -0
  934. package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -0
  935. package/dist/frontend/ts7/ast-wire.d.ts +18 -0
  936. package/dist/frontend/ts7/ast-wire.js +66 -4
  937. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  938. package/dist/frontend/ts7/checker-server.d.ts +12 -11
  939. package/dist/frontend/ts7/checker-server.js +28 -12
  940. package/dist/frontend/ts7/checker-server.js.map +1 -1
  941. package/dist/frontend/ts7/checker-server.test.js +8 -3
  942. package/dist/frontend/ts7/checker-server.test.js.map +1 -1
  943. package/dist/frontend/ts7/checker.d.ts +4 -0
  944. package/dist/frontend/ts7/checker.js +9 -0
  945. package/dist/frontend/ts7/checker.js.map +1 -1
  946. package/dist/frontend/ts7/checker.test.js +216 -205
  947. package/dist/frontend/ts7/checker.test.js.map +1 -1
  948. package/dist/frontend/ts7/lib-diagnostics.d.ts +71 -4
  949. package/dist/frontend/ts7/lib-diagnostics.js +337 -20
  950. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
  951. package/dist/frontend/ts7/lib-diagnostics.test.js +268 -5
  952. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
  953. package/dist/frontend/ts7/native-api.d.ts +4 -0
  954. package/dist/frontend/ts7/native-api.js +36 -1
  955. package/dist/frontend/ts7/native-api.js.map +1 -1
  956. package/dist/frontend/ts7/program-host.d.ts +19 -2
  957. package/dist/frontend/ts7/program-host.js +69 -9
  958. package/dist/frontend/ts7/program-host.js.map +1 -1
  959. package/dist/frontend/ts7/program-host.test.js +42 -1
  960. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  961. package/dist/frontend/ts7/rpc-filesystem.d.ts +4 -2
  962. package/dist/frontend/ts7/rpc-filesystem.js +23 -2
  963. package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
  964. package/dist/frontend/ts7/rpc-filesystem.test.js +28 -2
  965. package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
  966. package/dist/frontend/ts7/semantic-checker.js +73 -5
  967. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  968. package/dist/frontend/ts7/semantic-checker.test.js +106 -74
  969. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  970. package/dist/frontend/ts7/semantic-json.d.ts +2 -6
  971. package/dist/frontend/ts7/semantic-model-71.test.d.ts +1 -0
  972. package/dist/frontend/ts7/semantic-model-71.test.js +131 -0
  973. package/dist/frontend/ts7/semantic-model-71.test.js.map +1 -0
  974. package/dist/frontend/ts7/semantic-model.d.ts +121 -3
  975. package/dist/frontend/ts7/semantic-model.js +245 -8
  976. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  977. package/dist/frontend/ts7/session.d.ts +19 -1
  978. package/dist/frontend/ts7/session.js +111 -11
  979. package/dist/frontend/ts7/session.js.map +1 -1
  980. package/dist/frontend/ts7/session.test.js +259 -239
  981. package/dist/frontend/ts7/session.test.js.map +1 -1
  982. package/dist/frontend/ts7/test-servers.d.ts +12 -0
  983. package/dist/frontend/ts7/test-servers.js +16 -0
  984. package/dist/frontend/ts7/test-servers.js.map +1 -0
  985. package/dist/frontend/tsc-codes.js +6 -3
  986. package/dist/frontend/tsc-codes.js.map +1 -1
  987. package/dist/frontend/type-mapper.d.ts +61 -1
  988. package/dist/frontend/type-mapper.js +577 -28
  989. package/dist/frontend/type-mapper.js.map +1 -1
  990. package/dist/frontend/type-patches/command.d.ts +19 -0
  991. package/dist/frontend/type-patches/command.js +352 -0
  992. package/dist/frontend/type-patches/command.js.map +1 -0
  993. package/dist/frontend/type-patches/layer.d.ts +45 -0
  994. package/dist/frontend/type-patches/layer.js +409 -0
  995. package/dist/frontend/type-patches/layer.js.map +1 -0
  996. package/dist/frontend/type-patches/locate.d.ts +41 -0
  997. package/dist/frontend/type-patches/locate.js +914 -0
  998. package/dist/frontend/type-patches/locate.js.map +1 -0
  999. package/dist/frontend/type-patches/locate.test.d.ts +1 -0
  1000. package/dist/frontend/type-patches/locate.test.js +179 -0
  1001. package/dist/frontend/type-patches/locate.test.js.map +1 -0
  1002. package/dist/frontend/type-patches/selector.d.ts +43 -0
  1003. package/dist/frontend/type-patches/selector.js +126 -0
  1004. package/dist/frontend/type-patches/selector.js.map +1 -0
  1005. package/dist/frontend/type-patches/selector.test.d.ts +1 -0
  1006. package/dist/frontend/type-patches/selector.test.js +56 -0
  1007. package/dist/frontend/type-patches/selector.test.js.map +1 -0
  1008. package/dist/frontend/type-patches/semver.d.ts +19 -0
  1009. package/dist/frontend/type-patches/semver.js +221 -0
  1010. package/dist/frontend/type-patches/semver.js.map +1 -0
  1011. package/dist/frontend/type-patches/semver.test.d.ts +1 -0
  1012. package/dist/frontend/type-patches/semver.test.js +47 -0
  1013. package/dist/frontend/type-patches/semver.test.js.map +1 -0
  1014. package/dist/frontend/worker-target.test.js +2 -2
  1015. package/dist/frontend/worker-target.test.js.map +1 -1
  1016. package/dist/index.d.ts +4 -1
  1017. package/dist/index.js +292 -27
  1018. package/dist/index.js.map +1 -1
  1019. package/dist/ir/builtin-effects.js +51 -5
  1020. package/dist/ir/builtin-effects.js.map +1 -1
  1021. package/dist/ir/builtin-signatures.d.ts +4 -3
  1022. package/dist/ir/builtin-signatures.js +277 -12
  1023. package/dist/ir/builtin-signatures.js.map +1 -1
  1024. package/dist/ir/callback-specialization.js +108 -67
  1025. package/dist/ir/callback-specialization.js.map +1 -1
  1026. package/dist/ir/capture-values.d.ts +7 -1
  1027. package/dist/ir/capture-values.js +28 -5
  1028. package/dist/ir/capture-values.js.map +1 -1
  1029. package/dist/ir/char-unit-locals.js +38 -42
  1030. package/dist/ir/char-unit-locals.js.map +1 -1
  1031. package/dist/ir/expression-inlining.js +12 -6
  1032. package/dist/ir/expression-inlining.js.map +1 -1
  1033. package/dist/ir/fields.generated.d.ts +751 -0
  1034. package/dist/ir/fields.generated.js +2071 -0
  1035. package/dist/ir/fields.generated.js.map +1 -0
  1036. package/dist/ir/fields.test.d.ts +1 -0
  1037. package/dist/ir/fields.test.js +113 -0
  1038. package/dist/ir/fields.test.js.map +1 -0
  1039. package/dist/ir/function-references.js +4 -0
  1040. package/dist/ir/function-references.js.map +1 -1
  1041. package/dist/ir/function-references.test.js +25 -0
  1042. package/dist/ir/function-references.test.js.map +1 -1
  1043. package/dist/ir/inline-array-sources.d.ts +15 -0
  1044. package/dist/ir/inline-array-sources.js +1825 -0
  1045. package/dist/ir/inline-array-sources.js.map +1 -0
  1046. package/dist/ir/inline-arrays.d.ts +41 -0
  1047. package/dist/ir/inline-arrays.js +533 -0
  1048. package/dist/ir/inline-arrays.js.map +1 -0
  1049. package/dist/ir/inline-arrays.test.d.ts +1 -0
  1050. package/dist/ir/inline-arrays.test.js +225 -0
  1051. package/dist/ir/inline-arrays.test.js.map +1 -0
  1052. package/dist/ir/int32-slots.d.ts +6 -0
  1053. package/dist/ir/int32-slots.js +154 -16
  1054. package/dist/ir/int32-slots.js.map +1 -1
  1055. package/dist/ir/int32-slots.test.js +48 -0
  1056. package/dist/ir/int32-slots.test.js.map +1 -1
  1057. package/dist/ir/integer-loops.d.ts +12 -0
  1058. package/dist/ir/integer-loops.js +23 -0
  1059. package/dist/ir/integer-loops.js.map +1 -1
  1060. package/dist/ir/integer-ranges.d.ts +7 -1
  1061. package/dist/ir/integer-ranges.js +29 -2
  1062. package/dist/ir/integer-ranges.js.map +1 -1
  1063. package/dist/ir/intrinsic-signatures.js +2 -1
  1064. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1065. package/dist/ir/ir.d.ts +103 -5
  1066. package/dist/ir/ir.js +38 -4
  1067. package/dist/ir/ir.js.map +1 -1
  1068. package/dist/ir/ir.test.js +134 -1
  1069. package/dist/ir/ir.test.js.map +1 -1
  1070. package/dist/ir/jsval.js +211 -29
  1071. package/dist/ir/jsval.js.map +1 -1
  1072. package/dist/ir/jsval.test.js +120 -0
  1073. package/dist/ir/jsval.test.js.map +1 -1
  1074. package/dist/ir/loop-entry-ranges.d.ts +38 -0
  1075. package/dist/ir/loop-entry-ranges.js +259 -0
  1076. package/dist/ir/loop-entry-ranges.js.map +1 -0
  1077. package/dist/ir/loop-entry-ranges.test.d.ts +1 -0
  1078. package/dist/ir/loop-entry-ranges.test.js +191 -0
  1079. package/dist/ir/loop-entry-ranges.test.js.map +1 -0
  1080. package/dist/ir/node-index.d.ts +3 -0
  1081. package/dist/ir/node-index.js +6 -0
  1082. package/dist/ir/node-index.js.map +1 -1
  1083. package/dist/ir/numeric-call-specialization.d.ts +9 -6
  1084. package/dist/ir/numeric-call-specialization.js +164 -34
  1085. package/dist/ir/numeric-call-specialization.js.map +1 -1
  1086. package/dist/ir/paired-while-loops.js +23 -19
  1087. package/dist/ir/paired-while-loops.js.map +1 -1
  1088. package/dist/ir/parameter-versions.js +6 -3
  1089. package/dist/ir/parameter-versions.js.map +1 -1
  1090. package/dist/ir/receiver-readers.d.ts +10 -0
  1091. package/dist/ir/receiver-readers.js +65 -28
  1092. package/dist/ir/receiver-readers.js.map +1 -1
  1093. package/dist/ir/row-pairs.d.ts +9 -1
  1094. package/dist/ir/row-pairs.js +136 -43
  1095. package/dist/ir/row-pairs.js.map +1 -1
  1096. package/dist/ir/row-pairs.test.js +25 -5
  1097. package/dist/ir/row-pairs.test.js.map +1 -1
  1098. package/dist/ir/runtime-features.d.ts +33 -1
  1099. package/dist/ir/runtime-features.js +104 -6
  1100. package/dist/ir/runtime-features.js.map +1 -1
  1101. package/dist/ir/runtime-features.test.js +13 -0
  1102. package/dist/ir/runtime-features.test.js.map +1 -1
  1103. package/dist/ir/saturating-loop-jams.d.ts +24 -0
  1104. package/dist/ir/saturating-loop-jams.js +420 -0
  1105. package/dist/ir/saturating-loop-jams.js.map +1 -0
  1106. package/dist/ir/saturating-loop-jams.test.d.ts +1 -0
  1107. package/dist/ir/saturating-loop-jams.test.js +196 -0
  1108. package/dist/ir/saturating-loop-jams.test.js.map +1 -0
  1109. package/dist/ir/scalar-records.js +9 -3
  1110. package/dist/ir/scalar-records.js.map +1 -1
  1111. package/dist/ir/self-captures.js +2 -1
  1112. package/dist/ir/self-captures.js.map +1 -1
  1113. package/dist/ir/serialize.d.ts +5 -1
  1114. package/dist/ir/serialize.js +7 -1
  1115. package/dist/ir/serialize.js.map +1 -1
  1116. package/dist/ir/traverse.js +3 -0
  1117. package/dist/ir/traverse.js.map +1 -1
  1118. package/dist/ir/validate.js +91 -9
  1119. package/dist/ir/validate.js.map +1 -1
  1120. package/dist/library/ir-policy.js +1 -0
  1121. package/dist/library/ir-policy.js.map +1 -1
  1122. package/dist/native/cache.js +2 -0
  1123. package/dist/native/cache.js.map +1 -1
  1124. package/dist/native/cli.js +54 -7
  1125. package/dist/native/cli.js.map +1 -1
  1126. package/dist/native/compiler.d.ts +3 -0
  1127. package/dist/native/compiler.js +173 -36
  1128. package/dist/native/compiler.js.map +1 -1
  1129. package/dist/native/compiler.test.js +86 -3
  1130. package/dist/native/compiler.test.js.map +1 -1
  1131. package/dist/native/executable-cache.d.ts +20 -2
  1132. package/dist/native/executable-cache.js +17 -10
  1133. package/dist/native/executable-cache.js.map +1 -1
  1134. package/dist/native/executable-cache.test.js +38 -1
  1135. package/dist/native/executable-cache.test.js.map +1 -1
  1136. package/dist/native/linker-job.d.ts +71 -0
  1137. package/dist/native/linker-job.js +242 -0
  1138. package/dist/native/linker-job.js.map +1 -0
  1139. package/dist/native/linker-job.test.d.ts +1 -0
  1140. package/dist/native/linker-job.test.js +349 -0
  1141. package/dist/native/linker-job.test.js.map +1 -0
  1142. package/dist/native/prepare.js +15 -2
  1143. package/dist/native/prepare.js.map +1 -1
  1144. package/dist/native/sanitizer.js +10 -15
  1145. package/dist/native/sanitizer.js.map +1 -1
  1146. package/dist/native/sanitizer.test.js +152 -66
  1147. package/dist/native/sanitizer.test.js.map +1 -1
  1148. package/dist/native/toolchain.d.ts +11 -2
  1149. package/dist/native/toolchain.js +43 -17
  1150. package/dist/native/toolchain.js.map +1 -1
  1151. package/dist/native/toolchain.test.js +75 -0
  1152. package/dist/native/toolchain.test.js.map +1 -1
  1153. package/dist/node-islands/boundary.d.ts +37 -0
  1154. package/dist/node-islands/boundary.js +135 -0
  1155. package/dist/node-islands/boundary.js.map +1 -0
  1156. package/dist/node-islands/classify.js +1 -1
  1157. package/dist/node-islands/classify.js.map +1 -1
  1158. package/dist/node-islands/effect-gate.d.ts +11 -0
  1159. package/dist/node-islands/effect-gate.js +746 -0
  1160. package/dist/node-islands/effect-gate.js.map +1 -0
  1161. package/dist/node-islands/effect-gate.test.d.ts +1 -0
  1162. package/dist/node-islands/effect-gate.test.js +152 -0
  1163. package/dist/node-islands/effect-gate.test.js.map +1 -0
  1164. package/dist/node-islands/libnode-pack.d.ts +68 -0
  1165. package/dist/node-islands/libnode-pack.js +199 -0
  1166. package/dist/node-islands/libnode-pack.js.map +1 -0
  1167. package/dist/node-islands/libnode-pack.test.d.ts +1 -0
  1168. package/dist/node-islands/libnode-pack.test.js +258 -0
  1169. package/dist/node-islands/libnode-pack.test.js.map +1 -0
  1170. package/dist/node-islands/libnode.d.ts +32 -0
  1171. package/dist/node-islands/libnode.js +212 -0
  1172. package/dist/node-islands/libnode.js.map +1 -0
  1173. package/dist/node-islands/libnode.test.d.ts +1 -0
  1174. package/dist/node-islands/libnode.test.js +170 -0
  1175. package/dist/node-islands/libnode.test.js.map +1 -0
  1176. package/dist/node-islands/modules.d.ts +96 -0
  1177. package/dist/node-islands/modules.js +803 -0
  1178. package/dist/node-islands/modules.js.map +1 -0
  1179. package/dist/node-islands/modules.test.d.ts +1 -0
  1180. package/dist/node-islands/modules.test.js +276 -0
  1181. package/dist/node-islands/modules.test.js.map +1 -0
  1182. package/dist/node-islands/resolve.d.ts +8 -0
  1183. package/dist/node-islands/resolve.js +10 -0
  1184. package/dist/node-islands/resolve.js.map +1 -0
  1185. package/dist/node-islands/snapshot.d.ts +16 -0
  1186. package/dist/node-islands/snapshot.js +486 -0
  1187. package/dist/node-islands/snapshot.js.map +1 -0
  1188. package/dist/node-islands/snapshot.test.d.ts +1 -0
  1189. package/dist/node-islands/snapshot.test.js +56 -0
  1190. package/dist/node-islands/snapshot.test.js.map +1 -0
  1191. package/dist/project-config.d.ts +37 -1
  1192. package/dist/project-config.js +159 -7
  1193. package/dist/project-config.js.map +1 -1
  1194. package/dist/project-config.test.js +153 -0
  1195. package/dist/project-config.test.js.map +1 -1
  1196. package/dist/startup-cache.d.ts +1 -0
  1197. package/dist/startup-cache.js +1 -0
  1198. package/dist/startup-cache.js.map +1 -1
  1199. package/package.json +24 -21
  1200. package/surface-manifest.json +47 -7
@@ -3,7 +3,7 @@ import { keyedHelperName } from "./lowering/stable-names.js";
3
3
  import { mockCallRecordType, mockContextType } from "./mock-shapes.js";
4
4
  import * as ts from "./ts7/adapter.js";
5
5
  import { bodyReadsArguments } from "./arguments-usage.js";
6
- import { BYTES_ELEMENT_NAME, arrayOf, isDynTypedRefType, BOOL, bytesOf, canConvertToDyn, canDynCheckTo, CHILD_T, CRYPTOHASH_T, CRYPTOHMAC_T, DATE_T, DYN, F64, funcOf, isSupportedArrayElem, isSupportedIndexValue, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, iterableArmsElem, isUnitType, mapOf, NULL_T, PROCSTREAM_T, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, ZLIB_STREAM_MODES, setOf, STRING, SYMBOL_T, typeEquals, typeKey, maybePromiseUnionArmsOk, unionContainerArmsOk, UNDEFINED_T, VOID, } from "../ir/ir.js";
6
+ import { BYTES_ELEMENT_NAME, arrayOf, isDynTypedRefType, BOOL, bytesOf, canBoxFuncIntoDyn, canConvertToDyn, canDynCheckTo, CHILD_T, CRYPTOHASH_T, CRYPTOHMAC_T, DATE_T, DYN, FOREIGN, F64, funcOf, isSupportedArrayElem, isSupportedIndexValue, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, iterableArmsElem, isUnitType, mapOf, NULL_T, PROCSTREAM_T, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, ZLIB_STREAM_MODES, setOf, STRING, SYMBOL_T, typeEquals, typeKey, maybePromiseUnionArmsOk, unionContainerArmsOk, UNDEFINED_T, VOID, } from "../ir/ir.js";
7
7
  import { BIGINT_T, KEY_ORDER_FIELD } from "../ir/ir.js";
8
8
  import { literalValues } from "./literal-values.js";
9
9
  import { remapUnionDiscriminant } from "./union-discriminants.js";
@@ -244,8 +244,31 @@ export class ShapeRegistry {
244
244
  * writer after all priority candidates have closed. */
245
245
  derivedDeclaredOrderFinalizers = [];
246
246
  currentDeclaredOrderPriority = [0, 0];
247
+ /** The declared-order candidates and the attached names the registry
248
+ * holds, counted as they are added (journalSizes). */
249
+ candidateCount = 0;
250
+ extendedCount = 0;
247
251
  /** All interned shapes in first-seen order. */
248
252
  shapes = [];
253
+ /** The sizes of the registry's tables, which only grow while shapes are
254
+ * interned (unit-journal.ts). */
255
+ journalSizes() {
256
+ return [
257
+ this.revision,
258
+ this.shapes.length,
259
+ this.byKey.size,
260
+ this.byId.size,
261
+ this.keyedNameKeys.size,
262
+ this.declaredOrderPriority.size,
263
+ this.declaredOrderCandidates.size,
264
+ this.candidateCount,
265
+ this.derivedDeclaredOrderFinalizers.length,
266
+ this.recIds.size,
267
+ this.pendingRec.size,
268
+ this.extendedNames.size,
269
+ this.extendedCount,
270
+ ];
271
+ }
249
272
  /** ts.Types currently being mapped — a BACK-REFERENCE to one of these is
250
273
  * the recursive knot (`interface TreeNode { children: TreeNode[] }`):
251
274
  * mapType answers a NAMED RECURSIVE SHAPE (recursiveRef) whose fields
@@ -291,6 +314,7 @@ export class ShapeRegistry {
291
314
  adoptDeclaredOrder(shape, declaredOrder) {
292
315
  if (declaredOrder === undefined)
293
316
  return;
317
+ this.candidateCount++;
294
318
  const candidates = this.declaredOrderCandidates.get(shape.id);
295
319
  const candidate = { order: declaredOrder, priority: this.currentDeclaredOrderPriority };
296
320
  if (candidates)
@@ -424,6 +448,7 @@ export class ShapeRegistry {
424
448
  this.byId.set(id, shape);
425
449
  this.shapes.push(shape);
426
450
  if (declaredOrder !== undefined) {
451
+ this.candidateCount++;
427
452
  this.declaredOrderCandidates.set(id, [
428
453
  { order: declaredOrder, priority: this.currentDeclaredOrderPriority },
429
454
  ]);
@@ -482,6 +507,7 @@ export class ShapeRegistry {
482
507
  if (fresh.length === 0)
483
508
  return;
484
509
  shape.fields = [...shape.fields, ...fresh].sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
510
+ this.extendedCount += fresh.length;
485
511
  this.extendedNames.set(shapeId, [
486
512
  ...(this.extendedNames.get(shapeId) ?? []),
487
513
  ...fresh.map((f) => f.name),
@@ -551,6 +577,99 @@ export class UnionRegistry {
551
577
  armTags = new Map();
552
578
  /** All interned unions in first-seen order. */
553
579
  unions = [];
580
+ /** The sizes of the tables recursive unions change, which no unit
581
+ * record carries (unit-journal.ts). */
582
+ journalSizes() {
583
+ return [this.revision, this.recIds.size, this.pendingRec.size];
584
+ }
585
+ /** The interned unions as a table unit records carry (unit-journal.ts).
586
+ * An entry is a union's definition; applying it interns the union under
587
+ * the key its arms give. A unit that adds a recursive union changes
588
+ * journalSizes, so the unions past a unit's start are interned ones. */
589
+ journalTable() {
590
+ return {
591
+ name: "unions",
592
+ size: () => this.unions.length,
593
+ entries: (from) => {
594
+ const out = [];
595
+ for (const def of this.unions.slice(from)) {
596
+ // JSON writes a number that is not finite as null.
597
+ const text = JSON.stringify(def);
598
+ if (/[:,[]null\b/.test(text))
599
+ return null;
600
+ out.push(text);
601
+ }
602
+ return out;
603
+ },
604
+ apply: (entries) => {
605
+ for (const entry of entries) {
606
+ const def = JSON.parse(entry);
607
+ const key = unionKey(def.arms, def.discriminant);
608
+ if (this.byKey.has(key))
609
+ continue;
610
+ if (keyedHelperName(this, "u", key, "") !== def.id)
611
+ throw new InternalCompilerError(`union record ${def.id} does not match its arms`);
612
+ this.byKey.set(key, def.id);
613
+ this.byId.set(def.id, def);
614
+ this.unions.push(def);
615
+ }
616
+ },
617
+ truncate: (from) => {
618
+ while (this.unions.length > from) {
619
+ const def = this.unions.pop();
620
+ this.byKey.delete(unionKey(def.arms, def.discriminant));
621
+ this.byId.delete(def.id);
622
+ this.keyedNameKeys.delete(def.id);
623
+ }
624
+ },
625
+ contents: () => {
626
+ // A recursive placeholder still pending fills in place when its
627
+ // outer frame completes, which changes journalSizes.
628
+ const texts = [];
629
+ const indexes = new Map();
630
+ const differs = (index) => {
631
+ const text = texts[index] ?? null;
632
+ return (text !== null &&
633
+ index < this.unions.length &&
634
+ JSON.stringify(this.unions[index]) !== text);
635
+ };
636
+ const held = {
637
+ extend: () => {
638
+ for (let index = texts.length; index < this.unions.length; index++) {
639
+ const def = this.unions[index];
640
+ texts.push(this.pendingRec.has(def.id) ? null : JSON.stringify(def));
641
+ indexes.set(def.id, index);
642
+ }
643
+ },
644
+ changed: () => {
645
+ for (let index = 0; index < texts.length; index++)
646
+ if (differs(index))
647
+ return this.unions[index].id;
648
+ return null;
649
+ },
650
+ changedAmong: (keys) => {
651
+ for (const key of keys) {
652
+ const index = indexes.get(key);
653
+ if (index !== undefined && differs(index))
654
+ return key;
655
+ }
656
+ return null;
657
+ },
658
+ refresh: (keys) => {
659
+ for (const key of keys) {
660
+ const index = indexes.get(key);
661
+ if (index !== undefined &&
662
+ index < this.unions.length &&
663
+ (texts[index] ?? null) !== null)
664
+ texts[index] = JSON.stringify(this.unions[index]);
665
+ }
666
+ },
667
+ };
668
+ held.extend();
669
+ return held;
670
+ },
671
+ };
672
+ }
554
673
  /** ts.Types currently being mapped — a back-reference to one is the
555
674
  * recursive knot passing through a union (`type Tree = Leaf | Branch`
556
675
  * whose Branch arm carries `Tree[]`, the optional field `a?: A` of a
@@ -590,6 +709,11 @@ export class UnionRegistry {
590
709
  const id = this.recIds.get(t);
591
710
  return id !== undefined && this.pendingRec.has(id);
592
711
  }
712
+ /** True when `unionId` is a recursive placeholder whose arms are not
713
+ * known yet (its outer frame is still mapping, or failed). */
714
+ isPendingPlaceholder(unionId) {
715
+ return this.pendingRec.has(unionId);
716
+ }
593
717
  /** Completes a recursive placeholder with its canonical arm list and
594
718
  * registers the structural key (first writer wins, like shapes). */
595
719
  finalizeRecursive(t, arms, discriminant) {
@@ -612,7 +736,7 @@ export class UnionRegistry {
612
736
  }
613
737
  /** Interns canonical arms and discriminator cases, returning their unionId. */
614
738
  intern(arms, discriminant) {
615
- const key = JSON.stringify([arms.map(typeKey), discriminant]);
739
+ const key = unionKey(arms, discriminant);
616
740
  let id = this.byKey.get(key);
617
741
  if (id === undefined) {
618
742
  id = keyedHelperName(this, "u", key, "");
@@ -654,6 +778,10 @@ export class UnionRegistry {
654
778
  return tags.get(typeKey(arm))?.find((tag) => typeEquals(def.arms[tag], arm)) ?? -1;
655
779
  }
656
780
  }
781
+ /** The key UnionRegistry interns a union's arms and discriminant under. */
782
+ function unionKey(arms, discriminant) {
783
+ return JSON.stringify([arms.map(typeKey), discriminant]);
784
+ }
657
785
  /** Human-readable rendering of an IrType for diagnostics (records expand to
658
786
  * their canonical field list, unions to their arms; `checker.typeToString`
659
787
  * can't — it never sees IR types). Bound the traversal as well as its output:
@@ -837,6 +965,8 @@ export function formatIrType(t, shapes, unions, seen = new Set()) {
837
965
  return append("bigint");
838
966
  case "stats":
839
967
  return append("Stats");
968
+ case "bigintStats":
969
+ return append("BigIntStats");
840
970
  case "fileHandle":
841
971
  return append("FileHandle");
842
972
  case "dir":
@@ -1164,6 +1294,23 @@ export function isLegacyUrlSymbol(symbol, ctx) {
1164
1294
  * (errno, dlopen, priority) and SignalConstants, and the fallback's twins:
1165
1295
  * the runtime's checked-dynamic constants object, whose members vary by
1166
1296
  * platform. */
1297
+ /** True for node:path's platform-specific namespaces ("path/posix",
1298
+ * "path/win32"). Their values are the path module object, so they map to
1299
+ * the checked-dynamic module value (see pathModuleValue in
1300
+ * lowering/lower-builtin-values.ts), not to a module declaration. */
1301
+ export function isPathPlatformNamespaceId(moduleId) {
1302
+ return moduleId === "builtin:path/posix" || moduleId === "builtin:path/win32";
1303
+ }
1304
+ /** @types/node's `PlatformPath` interface (module "path"): the declared type
1305
+ * of `path.posix`/`path.win32`. Its values are the path module object. */
1306
+ function isPlatformPathType(type, ctx) {
1307
+ const sym = type.getSymbol();
1308
+ if (sym === undefined || ts.symbolName(sym) !== "PlatformPath")
1309
+ return false;
1310
+ return sym.declarations.some((decl) => ts.isInterfaceDeclaration(decl) &&
1311
+ ctx.isStdlibFile(ts.getSourceFileOfNode(decl)) &&
1312
+ isDeclaredInAmbientModule(decl, "path"));
1313
+ }
1167
1314
  export function isOsConstantsType(type, ctx) {
1168
1315
  return (isOsConstantsSymbol(type.getAliasSymbol(), ctx, true) ||
1169
1316
  isOsConstantsSymbol(type.getSymbol(), ctx, true));
@@ -1431,7 +1578,46 @@ export function isFetchHandleType(type, ctx) {
1431
1578
  }
1432
1579
  return handle;
1433
1580
  }
1581
+ /** The array type a class declared `extends Array` maps to (its base type,
1582
+ * `T[]`), or null for every other class. */
1583
+ function arrayClassBaseType(classDecl, instance, ctx) {
1584
+ const heritage = classDecl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0];
1585
+ if (heritage === undefined || !ts.isIdentifier(heritage.expression))
1586
+ return null;
1587
+ if (heritage.expression.text !== "Array")
1588
+ return null;
1589
+ // The polymorphic `this` type of the class names the class's own type.
1590
+ const symbol = instance.getSymbol();
1591
+ const declared = (instance.flags & ts.TypeFlags.TypeParameter) !== 0 && symbol !== undefined
1592
+ ? ctx.checker.getDeclaredTypeOfSymbol(symbol)
1593
+ : instance;
1594
+ if ((declared.flags & ts.TypeFlags.Object) === 0)
1595
+ return null;
1596
+ const target = declared.isTypeReference() ? (declared.getTarget() ?? declared) : declared;
1597
+ const bases = ctx.checker.getBaseTypes(target);
1598
+ const base = bases[0];
1599
+ if (base === undefined || !ctx.checker.isArrayType(base))
1600
+ return null;
1601
+ const mapped = mapType(base, ctx);
1602
+ if (mapped?.kind === "array")
1603
+ return mapped;
1604
+ // `extends Array` in JavaScript reads `any[]`: dyn elements (the class's
1605
+ // arrayClassBase).
1606
+ return isJsSourceFile(ts.getSourceFileOfNode(classDecl)) ? { kind: "array", elem: DYN } : null;
1607
+ }
1434
1608
  export function mapType(type, ctx) {
1609
+ const shadow = ctx.canonShadow;
1610
+ if (shadow === undefined || mapTypeDepth !== 0)
1611
+ return mapTypeEntry(type, ctx);
1612
+ // Shadow mode observes every successful top-level mapping, including the
1613
+ // intrinsic primitives, local class values and memo hits that return
1614
+ // before the mapping proper.
1615
+ const mapped = mapTypeEntry(type, ctx);
1616
+ if (mapped !== null)
1617
+ shadow(type, mapped, ctx);
1618
+ return mapped;
1619
+ }
1620
+ function mapTypeEntry(type, ctx) {
1435
1621
  if (mapTypeDepth >= MAP_TYPE_MAX_DEPTH)
1436
1622
  return null;
1437
1623
  // These intrinsic domains cannot depend on generic bindings, declaration
@@ -1446,6 +1632,8 @@ export function mapType(type, ctx) {
1446
1632
  if (flags & (ts.TypeFlags.Boolean | ts.TypeFlags.BooleanLiteral))
1447
1633
  return BOOL;
1448
1634
  }
1635
+ if (ctx.foreignType !== undefined && ctx.foreignType(type))
1636
+ return FOREIGN;
1449
1637
  const localValue = ctx.localClassValue?.(type);
1450
1638
  if (localValue) {
1451
1639
  contextResolutions++;
@@ -1456,8 +1644,8 @@ export function mapType(type, ctx) {
1456
1644
  const memoizable = typeId !== undefined && (ctx.canMemoizeType?.() ?? true);
1457
1645
  // An empty literal's type maps to the empty record as an unreduced union's
1458
1646
  // arm (emptyLiteralArm) and to the checked-dynamic value elsewhere: the two
1459
- // answers keep separate memo entries.
1460
- const memoKey = memoizable ? `${ctx.emptyLiteralArm ? 1 : 0}:${typeId}` : null;
1647
+ // answers keep separate memo entries. Type ids are non-negative integers.
1648
+ const memoKey = memoizable ? typeId * 2 + (ctx.emptyLiteralArm ? 1 : 0) : null;
1461
1649
  if (memoKey !== null) {
1462
1650
  const memo = ctx.typeMemo?.get(memoKey);
1463
1651
  if (memo !== undefined)
@@ -1478,10 +1666,39 @@ export function mapType(type, ctx) {
1478
1666
  throw e;
1479
1667
  mapped = null;
1480
1668
  }
1669
+ // A generic alias the body spells over its own type parameters (`x as
1670
+ // Catalog<G, P>`) stays symbolic in the checker; when that form does not
1671
+ // map, the instance's concrete instantiation of the same alias does.
1672
+ if (mapped === null && ctx.resolveBoundAliasTs) {
1673
+ const concrete = ctx.resolveBoundAliasTs(type);
1674
+ if (concrete !== null && concrete !== type) {
1675
+ mapped = mapType(concrete, ctx);
1676
+ if (mapped !== null)
1677
+ contextResolutions++;
1678
+ }
1679
+ }
1680
+ // Localized failure: a type that failed at a committed slot maps to its
1681
+ // lenient form. It counts as a context resolution so neither it nor a
1682
+ // type containing it is memoized: the strict form may map elsewhere.
1683
+ if (mapped === null && ctx.degradedType) {
1684
+ const lenient = ctx.degradedType(type);
1685
+ if (lenient !== null) {
1686
+ mapped = lenient;
1687
+ contextResolutions++;
1688
+ }
1689
+ }
1690
+ // Push-down (stage L3): in a lenient mapping, the smallest failing
1691
+ // component is the checked dynamic.
1692
+ if (mapped === null && ctx.lenient === true && !topLevel) {
1693
+ mapped = DYN;
1694
+ contextResolutions++;
1695
+ ctx.onLenientPiece?.(type);
1696
+ }
1481
1697
  if (mapped !== null &&
1482
1698
  memoKey !== null &&
1483
1699
  topLevel &&
1484
1700
  contextResolutions === sensitivityAtEntry &&
1701
+ ctx.erasingSignature === undefined &&
1485
1702
  (ctx.canMemoizeType?.() ?? true)) {
1486
1703
  ctx.typeMemo?.set(memoKey, mapped);
1487
1704
  }
@@ -1543,8 +1760,16 @@ function mapTypeInner(type, ctx) {
1543
1760
  }
1544
1761
  {
1545
1762
  const moduleId = ctx.moduleNamespaceId?.(type) ?? null;
1546
- if (moduleId !== null)
1763
+ // node:path's platform namespaces (`path.posix`, `path.win32`) are
1764
+ // ordinary objects at run time: the same module object the whole
1765
+ // namespace lowers to (pathModuleValue). Typing them as a module
1766
+ // namespace declaration made every value read a static type with no
1767
+ // value lowering; the checked-dynamic module value is the honest
1768
+ // type, and a union with a plain record arm collapses onto it.
1769
+ if (moduleId !== null && !isPathPlatformNamespaceId(moduleId))
1547
1770
  return { kind: "moduleNs", moduleId };
1771
+ if (moduleId !== null)
1772
+ return DYN;
1548
1773
  }
1549
1774
  // A TypeScript object literal that spreads a checked-dynamic value
1550
1775
  // (`{ ...requestOptions, path, timeout }`): its keys are the source's
@@ -1590,6 +1815,11 @@ function mapTypeInner(type, ctx) {
1590
1815
  isDeclaredInAmbientModule(decl, "child_process"))) {
1591
1816
  return { kind: "object", className: "%Error" };
1592
1817
  }
1818
+ // @types/node declares the platform-path namespace value as the
1819
+ // `PlatformPath` interface of module "path"; its values ARE the path
1820
+ // module object (the checked-dynamic module value).
1821
+ if (isPlatformPathType(type, ctx))
1822
+ return DYN;
1593
1823
  if (isOsConstantsType(type, ctx) || isLegacyUrlType(type, ctx))
1594
1824
  return DYN;
1595
1825
  // The WebAssembly API's values have the checked-dynamic representation, so
@@ -1627,7 +1857,8 @@ function mapTypeInner(type, ctx) {
1627
1857
  !checker.getCallSignatures(type).some((sig) => sig === ctx.erasingSignature) &&
1628
1858
  !ERASURE_KEPT_CONTAINERS.has(ts.symbolNameOf(type.getSymbol()) ?? "") &&
1629
1859
  mentionsErasedTypeParam(type, ctx, 0)) {
1630
- contextResolutions++;
1860
+ if (!ctx.erasedMember || ctx.erasedMember.outerConsulted)
1861
+ contextResolutions++;
1631
1862
  return DYN;
1632
1863
  }
1633
1864
  // Readonly<C> over a program class (Object.freeze's result type) is the
@@ -1638,7 +1869,8 @@ function mapTypeInner(type, ctx) {
1638
1869
  if (resolveTypeParam && type.flags & ts.TypeFlags.TypeParameter) {
1639
1870
  const bound = resolveTypeParam(type);
1640
1871
  if (bound) {
1641
- contextResolutions++;
1872
+ if (!ctx.erasedMember?.own.has(type))
1873
+ contextResolutions++;
1642
1874
  return bound;
1643
1875
  }
1644
1876
  }
@@ -1693,6 +1925,11 @@ function mapTypeInner(type, ctx) {
1693
1925
  return viaConditional;
1694
1926
  }
1695
1927
  }
1928
+ const viaDistribution = mapDistributedConditional(type, ctx);
1929
+ if (viaDistribution !== null) {
1930
+ contextResolutions++;
1931
+ return viaDistribution;
1932
+ }
1696
1933
  }
1697
1934
  }
1698
1935
  const widened = checker.getBaseTypeOfLiteralType(type);
@@ -2196,6 +2433,13 @@ function mapTypeInner(type, ctx) {
2196
2433
  return viaMixin;
2197
2434
  }
2198
2435
  }
2436
+ // A class declared `extends Array` (frontend/lowering/builtins/
2437
+ // array-classes.ts): its instances are arrays of the base's elements.
2438
+ {
2439
+ const arrayBase = arrayClassBaseType(classDecl, widened, ctx);
2440
+ if (arrayBase !== null)
2441
+ return arrayBase;
2442
+ }
2199
2443
  if (classExprNeedsContext(classDecl)) {
2200
2444
  const local = ctx.localClassInstance?.(classDecl, widened);
2201
2445
  if (local)
@@ -2555,6 +2799,21 @@ function mapTypeInner(type, ctx) {
2555
2799
  // stdio and env values. Keep it checked-dynamic for native normalization.
2556
2800
  if (isStdlibInterface("SpawnOptions"))
2557
2801
  return DYN;
2802
+ // util.inspect as a value (a custom inspect method's third parameter is
2803
+ // `typeof inspect`): the runtime's inspect function, called through the
2804
+ // checked-dynamic boundary.
2805
+ if (psym !== undefined &&
2806
+ ts.symbolName(psym) === "inspect" &&
2807
+ psym.declarations.some((d) => ts.isFunctionDeclaration(d) &&
2808
+ ctx.isStdlibFile(ts.getSourceFileOfNode(d)) &&
2809
+ isDeclaredInAmbientModule(d, "util")))
2810
+ return DYN;
2811
+ // util.inspect's options bag, which inspect and formatWithOptions read
2812
+ // at run time (its sorted option can be a comparator function), and the
2813
+ // options custom inspect functions receive.
2814
+ if ((isStdlibInterface("InspectOptions") || isStdlibInterface("InspectOptionsStylized")) &&
2815
+ psym.declarations.some((d) => ts.isInterfaceDeclaration(d) && isDeclaredInAmbientModule(d, "util")))
2816
+ return DYN;
2558
2817
  // dns.LookupAllOptions (`all: true`, the overload whose callback takes
2559
2818
  // an address list): a lookup option bag dns.lookup reads at run time.
2560
2819
  // It rides checked-dynamic storage, so the lookup function type that
@@ -2608,14 +2867,25 @@ function mapTypeInner(type, ctx) {
2608
2867
  return null;
2609
2868
  return genResultRecord(elem, VOID, ctx.shapes, ctx.unions);
2610
2869
  }
2611
- // node:net's SocketAddress and BlockList: native handles (scr_net.c)
2612
- // whose getters and methods dispatch through the handle.
2870
+ // node:net's SocketAddress and BlockList (scr_net.c) and node:util's
2871
+ // MIMEType and MIMEParams (scr_mime.c): native handles whose getters and
2872
+ // methods dispatch through the handle.
2613
2873
  if (((psym !== undefined && ts.symbolName(psym) === "SocketAddress") ||
2614
- (psym !== undefined && ts.symbolName(psym) === "BlockList")) &&
2874
+ (psym !== undefined && ts.symbolName(psym) === "BlockList") ||
2875
+ (psym !== undefined && ts.symbolName(psym) === "MIMEType") ||
2876
+ (psym !== undefined && ts.symbolName(psym) === "MIMEParams")) &&
2615
2877
  psym.declarations.some((d) => (ts.isClassDeclaration(d) || ts.isInterfaceDeclaration(d)) &&
2616
2878
  ctx.isStdlibFile(ts.getSourceFileOfNode(d)))) {
2617
2879
  return DYN;
2618
2880
  }
2881
+ // The functions node:util's debounce and throttle return
2882
+ // (scr_util_timing.c): native functions with their own members and
2883
+ // getters.
2884
+ if (psym !== undefined &&
2885
+ (ts.symbolName(psym) === "DebouncedFunction" || ts.symbolName(psym) === "ThrottledFunction") &&
2886
+ psym.declarations.some((d) => ts.isInterfaceDeclaration(d) && ctx.isStdlibFile(ts.getSourceFileOfNode(d)))) {
2887
+ return DYN;
2888
+ }
2619
2889
  // WebCrypto: the crypto global and its subtle object are dynamic
2620
2890
  // objects, CryptoKey values are native handles (scr_webcrypto.c), and
2621
2891
  // the algorithm dictionaries the methods take and keys report are plain
@@ -2874,6 +3144,16 @@ function mapTypeInner(type, ctx) {
2874
3144
  ctx.isStdlibFile(ts.getSourceFileOfNode(d)))) {
2875
3145
  return { kind: "stats" };
2876
3146
  }
3147
+ // fs.BigIntStats: the SAME snapshot handle under Node's bigint member
3148
+ // table (`statSync(p, { bigint: true })`). Declared by @types/node as
3149
+ // `class BigIntStats` in "fs"; the fallback declarations keep the class
3150
+ // shape too. Provenance-checked like Stats.
3151
+ if (psym !== undefined &&
3152
+ ts.symbolName(psym) === "BigIntStats" &&
3153
+ psym.declarations.some((d) => (ts.isInterfaceDeclaration(d) || ts.isClassDeclaration(d)) &&
3154
+ ctx.isStdlibFile(ts.getSourceFileOfNode(d)))) {
3155
+ return { kind: "bigintStats" };
3156
+ }
2877
3157
  // Capacity snapshots and options keep their live object representation
2878
3158
  // across numeric/BigInt overloads, runtime options, and callbacks.
2879
3159
  if (((psym !== undefined && ts.symbolName(psym) === "StatsFs") ||
@@ -4198,6 +4478,8 @@ function mapTypeInner(type, ctx) {
4198
4478
  parts.some((part) => (part.flags & nullish) === 0 &&
4199
4479
  !checker.isNeverType(part) &&
4200
4480
  !isEmptyObjectLiteralType(part, ctx));
4481
+ let neverConditionalPart = false;
4482
+ let undefinedPart;
4201
4483
  for (const part of parts) {
4202
4484
  if (hasArrayPart && emptyTuple(part))
4203
4485
  continue;
@@ -4205,6 +4487,12 @@ function mapTypeInner(type, ctx) {
4205
4487
  // distributed union. They have no inhabitants and no runtime tag.
4206
4488
  if (checker.isNeverType(part))
4207
4489
  continue;
4490
+ // A conditional over a bound parameter whose every member selects
4491
+ // `never` contributes no arm either.
4492
+ if (distributedConditionalParts(part, ctx)?.length === 0) {
4493
+ neverConditionalPart = true;
4494
+ continue;
4495
+ }
4208
4496
  // A `void` PART is inhabited only by undefined (`Promise<void> |
4209
4497
  // void` return types, `string | void`): it becomes the undefinedT
4210
4498
  // unit arm, exactly like an undefined part — the value either
@@ -4212,6 +4500,7 @@ function mapTypeInner(type, ctx) {
4212
4500
  // void stays VOID (the return-position mapping above).
4213
4501
  if (part.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) {
4214
4502
  byKey.set(typeKey(UNDEFINED_T), UNDEFINED_T);
4503
+ undefinedPart ??= part;
4215
4504
  continue;
4216
4505
  }
4217
4506
  if (part.flags & ts.TypeFlags.Null) {
@@ -4258,6 +4547,11 @@ function mapTypeInner(type, ctx) {
4258
4547
  const arms = [...byKey.values()];
4259
4548
  if (arms.length === 0)
4260
4549
  return F64; // same unreachable placeholder as standalone never
4550
+ // `Cond<T> | undefined` whose conditional selects never for the
4551
+ // instance's binding is the plain `undefined` the concrete
4552
+ // instantiation's optional member has.
4553
+ if (neverConditionalPart && arms.length === 1 && undefinedPart !== undefined)
4554
+ return mapType(undefinedPart, ctx);
4261
4555
  // A single surviving UNIT arm cannot stand alone (degenerate — the
4262
4556
  // checker collapsed everything else away); anything else single is
4263
4557
  // just that type. A single arm UNDER A MINTED PLACEHOLDER cannot
@@ -4296,19 +4590,42 @@ function mapTypeInner(type, ctx) {
4296
4590
  !unions.recursivePending(widened)) {
4297
4591
  return DYN;
4298
4592
  }
4299
- if (arms.some((a) => a.kind === "void" ||
4593
+ // SEVERAL PROMISE ARMS are ONE: `Promise<A> | Promise<B>` is
4594
+ // `Promise<A | B>`. A promise arm's tag IS the `instanceof Promise`
4595
+ // test, so JavaScript cannot tell the arms apart at run time (both
4596
+ // answer true, both `await` to a value of their payload), and the
4597
+ // merged payload union is exactly what `await` produces either way.
4598
+ // The merge happens here, in the union the checker gave us, so every
4599
+ // use site (a declaration slot, an argument, an `await`, `.then`)
4600
+ // sees the same one-promise-arm layout; the conversion of a
4601
+ // `Promise<A>` value into it is the checked promise-payload widening
4602
+ // (promisePayloadWidens / promiseWiden). A payload that cannot ride
4603
+ // that union (a promise of a promise, a regex or generator payload)
4604
+ // keeps the whole union fenced.
4605
+ const mergedArms = mergePromiseArms(arms, ctx);
4606
+ if (mergedArms === null)
4607
+ return null;
4608
+ // Promise arms were the whole union (`Promise<void> | Promise<undefined>`
4609
+ // merges to the plain `Promise<void>`): a one-armed union has no
4610
+ // representation and needs none — the merge left the arm alone.
4611
+ if (mergedArms.length === 1) {
4612
+ if (unions.recursivePending(widened))
4613
+ return null;
4614
+ return mergedArms[0];
4615
+ }
4616
+ if (mergedArms.some((a) => a.kind === "void" ||
4300
4617
  a.kind === "union" ||
4301
4618
  a.kind === "dyn" ||
4302
4619
  // A generator arm only comes from an Iterable<T> (an optional
4303
4620
  // one keeps its unit arms beside the iterable union's).
4304
- (a.kind === "generator" && iterableArmsElem(arms) === null)) ||
4305
- !maybePromiseUnionOk(parts, arms, ctx)) {
4621
+ (a.kind === "generator" && iterableArmsElem(mergedArms) === null)) ||
4622
+ !maybePromiseUnionOk(parts, mergedArms, ctx)) {
4306
4623
  return null;
4307
4624
  }
4308
- arms.sort((a, b) => (typeKey(a) < typeKey(b) ? -1 : 1));
4309
- const discriminant = unionDiscriminant(recordParts, arms, ctx) ??
4625
+ mergedArms.sort((a, b) => (typeKey(a) < typeKey(b) ? -1 : 1));
4626
+ const discriminant = unionDiscriminant(recordParts, mergedArms, ctx) ??
4310
4627
  (substitutedUnions.length === 1
4311
- ? remapUnionDiscriminant(substitutedUnions[0], arms)
4628
+ ? remapUnionDiscriminant(substitutedUnions[0], mergedArms)
4312
4629
  : undefined);
4313
4630
  if (unions.recursivePending(widened)) {
4314
4631
  // The knot closed through this union. A frame that resolved
@@ -4318,9 +4635,12 @@ function mapTypeInner(type, ctx) {
4318
4635
  // recursive generic-open unions stay fenced.
4319
4636
  if (contextResolutions !== sensitivityAtEntry)
4320
4637
  return null;
4321
- return { kind: "union", unionId: unions.finalizeRecursive(widened, arms, discriminant) };
4638
+ return {
4639
+ kind: "union",
4640
+ unionId: unions.finalizeRecursive(widened, mergedArms, discriminant),
4641
+ };
4322
4642
  }
4323
- return { kind: "union", unionId: unions.intern(arms, discriminant) };
4643
+ return { kind: "union", unionId: unions.intern(mergedArms, discriminant) };
4324
4644
  }
4325
4645
  finally {
4326
4646
  unions.inProgress.delete(widened);
@@ -4401,10 +4721,12 @@ function mapCallSignature(sig, ctx) {
4401
4721
  // A parameter a TypeScript program types `any` takes whatever the
4402
4722
  // caller passes: the checked-dynamic slot, as an `any`-typed binding
4403
4723
  // already is (dynFallbackType). Declaration files keep their paths.
4404
- // Only function declarations, spelled function types and lambda
4405
- // parameters whose default is the only source of their type (`(n =
4406
- // lookup() ?? 5) => ...` with an `any` lookup): other lambdas and
4407
- // methods in object literals keep their existing checked-dynamic story.
4724
+ // Only function declarations, spelled function types, method and call
4725
+ // signatures of interfaces and type literals (`execute(params: any):
4726
+ // Promise<R>`), and lambda parameters whose default is the only source
4727
+ // of their type (`(n = lookup() ?? 5) => ...` with an `any` lookup):
4728
+ // other lambdas and methods in object literals keep their existing
4729
+ // checked-dynamic story.
4408
4730
  if (!pt &&
4409
4731
  !rest &&
4410
4732
  decl !== undefined &&
@@ -4412,6 +4734,8 @@ function mapCallSignature(sig, ctx) {
4412
4734
  decl.parent !== undefined &&
4413
4735
  (ts.isFunctionDeclaration(decl.parent) ||
4414
4736
  ts.isFunctionTypeNode(decl.parent) ||
4737
+ ts.isMethodSignatureDeclaration(decl.parent) ||
4738
+ ts.isCallSignatureDeclaration(decl.parent) ||
4415
4739
  ((ts.isArrowFunction(decl.parent) || ts.isFunctionExpression(decl.parent)) &&
4416
4740
  decl.initializer !== undefined &&
4417
4741
  decl.type === undefined &&
@@ -4474,8 +4798,18 @@ function mapCallSignature(sig, ctx) {
4474
4798
  pt = jsOpenObjectType(decl, pt, ctx.shapes, ctx.unions);
4475
4799
  // Belt and braces for non-strict type worlds: an optional param's
4476
4800
  // ABI slot is always the undefined-armed union (strictNullChecks
4477
- // already spells it that way; arm it here if the world didn't).
4478
- if (optional && pt && pt.kind !== "void" && pt.kind !== "dyn") {
4801
+ // already spells it that way; arm it here if the world didn't). A
4802
+ // back-reference to a union still being mapped (`options?: { then?:
4803
+ // (ctx: Sub) => void }` where Sub extends the interface declaring the
4804
+ // method) is a recursive placeholder with no arms yet; when the checker
4805
+ // spelled the parameter `X | undefined`, the placeholder receives that
4806
+ // undefined arm when its frame finishes.
4807
+ const pendingOptional = pt?.kind === "union" &&
4808
+ ctx.unions.isPendingPlaceholder(pt.unionId) &&
4809
+ ts
4810
+ .constituentTypes(checker.getTypeOfSymbol(p))
4811
+ .some((part) => (part.flags & ts.TypeFlags.Undefined) !== 0);
4812
+ if (optional && pt && pt.kind !== "void" && pt.kind !== "dyn" && !pendingOptional) {
4479
4813
  const armed = withUndefinedArm(pt, ctx.unions);
4480
4814
  if (!armed)
4481
4815
  return null;
@@ -5278,6 +5612,121 @@ function mapGenericIndexedAccess(type, ctx) {
5278
5612
  arms.sort((a, b) => (typeKey(a) < typeKey(b) ? -1 : 1));
5279
5613
  return { kind: "union", unionId: ctx.unions.intern(arms) };
5280
5614
  }
5615
+ /** A distributive conditional (`T extends "a" ? A : T extends "b" ? B :
5616
+ * never`, its check type a naked type parameter) over a parameter the
5617
+ * instance binds: evaluated once per member of the binding (`"a" | "b"`,
5618
+ * or the open `"a" | (string & {})` spelling), as the checker distributes
5619
+ * it. Answers the non-never results (empty when every member selects
5620
+ * never, so an optional member of that type holds only undefined, as in
5621
+ * the concrete instantiation), or null when the conditional is another
5622
+ * shape or a member does not evaluate. */
5623
+ function distributedConditionalParts(type, ctx) {
5624
+ const { checker, resolveTypeParamTs } = ctx;
5625
+ if (!resolveTypeParamTs || !type.isConditionalType())
5626
+ return null;
5627
+ const checkType = type.getCheckType();
5628
+ if (!checkType || !(checkType.flags & ts.TypeFlags.TypeParameter))
5629
+ return null;
5630
+ const symbol = checkType.getSymbol();
5631
+ const bound = resolveTypeParamTs(checkType);
5632
+ if (!symbol || !bound)
5633
+ return null;
5634
+ // The answer depends on the instance's binding: a mapping that consults
5635
+ // it, even one that drops an all-never part, is not context-free.
5636
+ contextResolutions++;
5637
+ const parts = [];
5638
+ for (const member of bound.isUnionType() ? ts.constituentTypes(bound) : [bound]) {
5639
+ // `string & {}` (the open-union spelling) extends exactly what `string`
5640
+ // extends: the empty object adds nothing to a primitive.
5641
+ const emptyObject = (part) => (part.flags & ts.TypeFlags.Object) !== 0 &&
5642
+ checker.getPropertiesOfType(part).length === 0 &&
5643
+ checker.getIndexInfosOfType(part).length === 0 &&
5644
+ checker.getCallSignatures(part).length === 0 &&
5645
+ checker.getConstructSignatures(part).length === 0;
5646
+ const primitive = member.isIntersectionType()
5647
+ ? ts.constituentTypes(member).filter((part) => !emptyObject(part))
5648
+ : [member];
5649
+ if (primitive.length !== 1)
5650
+ return null;
5651
+ const evaluated = evalMappedTemplate(type, new Map(), new Map([[symbol, primitive[0]]]), ctx);
5652
+ if (!evaluated)
5653
+ return null;
5654
+ if (checker.isNeverType(evaluated))
5655
+ continue;
5656
+ if (!parts.includes(evaluated))
5657
+ parts.push(evaluated);
5658
+ }
5659
+ return parts;
5660
+ }
5661
+ /** A unit-only type once its conditionals over bound parameters are
5662
+ * distributed: `Cond<T> | undefined` where every member of T's binding
5663
+ * selects never (the optional member's type in a generic body). */
5664
+ function neverConditionalUnitOnly(t, ctx) {
5665
+ const UNIT = ts.TypeFlags.Undefined | ts.TypeFlags.Void | ts.TypeFlags.Null;
5666
+ if (!t.isUnionType())
5667
+ return false;
5668
+ let conditional = false;
5669
+ for (const part of ts.constituentTypes(t)) {
5670
+ if ((part.flags & UNIT) !== 0)
5671
+ continue;
5672
+ if (distributedConditionalParts(part, ctx)?.length !== 0)
5673
+ return false;
5674
+ conditional = true;
5675
+ }
5676
+ return conditional;
5677
+ }
5678
+ /** mapType of a distributed conditional (distributedConditionalParts): the
5679
+ * union of its members' results, as the concrete conditional's union maps
5680
+ * them. An `unknown` or `any` result absorbs the rest (the checker's union
5681
+ * is that type), as does a result that maps to the checked-dynamic value
5682
+ * (`{}`, `object`, `Object`: the checker's union of one with a concrete
5683
+ * result is the top type), and `undefined` and `null` results are the unit
5684
+ * arms. Null when it does not distribute, when a result does not map, when
5685
+ * every member selects never (the enclosing union drops such a part), or
5686
+ * when only units remain. */
5687
+ function mapDistributedConditional(type, ctx) {
5688
+ const parts = distributedConditionalParts(type, ctx);
5689
+ if (!parts || parts.length === 0)
5690
+ return null;
5691
+ const top = parts.find((part) => (part.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0);
5692
+ if (top !== undefined)
5693
+ return mapType(top, ctx);
5694
+ const arms = [];
5695
+ for (const part of parts) {
5696
+ if (part.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void)) {
5697
+ if (!arms.some((a) => typeEquals(a, UNDEFINED_T)))
5698
+ arms.push(UNDEFINED_T);
5699
+ continue;
5700
+ }
5701
+ if (part.flags & ts.TypeFlags.Null) {
5702
+ if (!arms.some((a) => typeEquals(a, NULL_T)))
5703
+ arms.push(NULL_T);
5704
+ continue;
5705
+ }
5706
+ const mapped = mapType(part, ctx);
5707
+ if (!mapped)
5708
+ return null;
5709
+ // A top-type result (`{}`, `object`, `Object`): the checker's union with
5710
+ // a concrete result is the top type itself, so the member is
5711
+ // checked-dynamic. A `dyn` arm would be invalid union IR (SC9001).
5712
+ if (mapped.kind === "dyn")
5713
+ return DYN;
5714
+ const members = mapped.kind === "union" ? (ctx.unions.get(mapped.unionId)?.arms ?? null) : [mapped];
5715
+ if (!members)
5716
+ return null;
5717
+ for (const arm of members)
5718
+ if (!arms.some((a) => typeEquals(a, arm)))
5719
+ arms.push(arm);
5720
+ }
5721
+ if (arms.every(isUnitType))
5722
+ return null;
5723
+ if (arms.length === 1)
5724
+ return arms[0];
5725
+ if (!unionContainerArmsOk(arms))
5726
+ return null;
5727
+ arms.sort((a, b) => (typeKey(a) < typeKey(b) ? -1 : 1));
5728
+ return { kind: "union", unionId: ctx.unions.intern(arms) };
5729
+ }
5281
5730
  /** `keyof T extends never ? A : B` over a bound record T (the lib's
5282
5731
  * Object.entries element spelling): decided by whether the binding has any
5283
5732
  * key. */
@@ -6297,7 +6746,9 @@ function isTypeOnlyNamespace(d) {
6297
6746
  isTypeOnlyNamespace(statement));
6298
6747
  }
6299
6748
  function packageTypeFile(sf, ctx) {
6300
- return (sf.isDeclarationFile && /[\\/]node_modules[\\/]/.test(sf.fileName) && !ctx.isStdlibFile(sf));
6749
+ return (sf.isDeclarationFile &&
6750
+ (/[\\/]node_modules[\\/]/.test(sf.fileName) || ctx.isExperimentalFile?.(sf) === true) &&
6751
+ !ctx.isStdlibFile(sf));
6301
6752
  }
6302
6753
  /** The record path's provenance fence. Declared shapes (object literals,
6303
6754
  * interfaces, type literals) must come from user code or an explicitly
@@ -6411,10 +6862,23 @@ export function erasedGenericMemberType(t, ctx) {
6411
6862
  const sig = sigs[0];
6412
6863
  const own = new Set(sig.getTypeParameters());
6413
6864
  const outer = ctx.resolveTypeParam;
6865
+ // Resolving only the member's own parameters does not make the erasure
6866
+ // context-sensitive, so a recursive record holding a generic method
6867
+ // (`interface Sub extends Base { send<T>(m: Msg<T>): void }` reached
6868
+ // from Base) still closes its knot. Consulting an enclosing binding does.
6869
+ const erasedMember = { own, outerConsulted: false };
6414
6870
  const erased = mapType(t, {
6415
6871
  ...ctx,
6416
6872
  erasingSignature: sig,
6417
- resolveTypeParam: (param) => (own.has(param) ? DYN : (outer?.(param) ?? null)),
6873
+ erasedMember,
6874
+ resolveTypeParam: (param) => {
6875
+ if (own.has(param))
6876
+ return DYN;
6877
+ if (outer === undefined)
6878
+ return null;
6879
+ erasedMember.outerConsulted = true;
6880
+ return outer(param);
6881
+ },
6418
6882
  });
6419
6883
  return erased?.kind === "func" ? erased : undefined;
6420
6884
  }
@@ -7306,7 +7770,8 @@ function mapRecordTypeInner(widened, ctx) {
7306
7770
  // absent-field idiom — and `{ p: undefined }` spellings): the
7307
7771
  // unit-only union. The runtime value is the interned unit, JSON
7308
7772
  // omits the undefined arm exactly like an omitted optional.
7309
- if (pt?.kind === "void" && isUnitOnlyTsType(fieldTs, ctx.resolveTypeParam))
7773
+ if (pt?.kind === "void" &&
7774
+ (isUnitOnlyTsType(fieldTs, ctx.resolveTypeParam) || neverConditionalUnitOnly(fieldTs, ctx)))
7310
7775
  pt = unitOnlyUnion(ctx.unions);
7311
7776
  if (pt !== null && isUnitOnlyIr(pt, ctx) && jsObjectLiteralProperty(p))
7312
7777
  pt = DYN;
@@ -7402,6 +7867,12 @@ function dynSubsumableUnionArm(arm, ctx) {
7402
7867
  // `string | URL | Request`, fetch's own input type under @types/node.
7403
7868
  case "url":
7404
7869
  return true;
7870
+ // A function the checked-dynamic tree can box (each parameter checks
7871
+ // in, the result converts out) is held by reference there, and
7872
+ // `typeof x === "function"` narrows it back out: `Progress | AbortSignal`
7873
+ // beside fetch's handles.
7874
+ case "func":
7875
+ return canBoxFuncIntoDyn(arm, (id) => ctx.shapes.get(id), (id) => ctx.unions.get(id));
7405
7876
  case "record":
7406
7877
  case "array":
7407
7878
  // `T | Promise<T>` with T bound to `unknown`: the checked-dynamic value
@@ -7451,6 +7922,84 @@ function maybePromiseUnionOk(parts, arms, ctx) {
7451
7922
  return false;
7452
7923
  return maybePromiseThenableArm(parts, ctx) === null;
7453
7924
  }
7925
+ /** Merge the promise arms of one union into a single `Promise<A | B>`
7926
+ * (mapTypeInner's union rule): JavaScript-wise the arms are
7927
+ * indistinguishable — `instanceof Promise` answers true for both, and
7928
+ * `await` settles to the payload union — so the merged arm is the same
7929
+ * value in the same slot. Payloads join like union arms: a `void` payload
7930
+ * becomes the undefined unit, a payload that is already a union flattens,
7931
+ * and a checked-dynamic payload (`Promise<unknown>`) absorbs the arms the
7932
+ * checked-dynamic representation holds faithfully (dynSubsumableUnionArm).
7933
+ * Null keeps the whole union fenced: a promise-of-a-promise payload, a
7934
+ * payload with no union home (regex, generator), or a dyn payload beside an
7935
+ * arm whose semantics would degrade. */
7936
+ function mergePromiseArms(arms, ctx) {
7937
+ let promiseArms = 0;
7938
+ for (const arm of arms)
7939
+ if (arm.kind === "promise")
7940
+ promiseArms++;
7941
+ if (promiseArms < 2)
7942
+ return arms;
7943
+ const payloads = [];
7944
+ let dynamic = false;
7945
+ for (const arm of arms) {
7946
+ if (arm.kind !== "promise")
7947
+ continue;
7948
+ const inner = arm.inner;
7949
+ if (inner.kind === "void") {
7950
+ payloads.push(UNDEFINED_T);
7951
+ continue;
7952
+ }
7953
+ if (inner.kind === "dyn") {
7954
+ dynamic = true;
7955
+ continue;
7956
+ }
7957
+ if (inner.kind === "union") {
7958
+ const substituted = ctx.unions.get(inner.unionId);
7959
+ if (!substituted?.arms.length)
7960
+ return null;
7961
+ payloads.push(...substituted.arms);
7962
+ continue;
7963
+ }
7964
+ payloads.push(inner);
7965
+ }
7966
+ if (dynamic) {
7967
+ if (!payloads.every((arm) => dynSubsumableUnionArm(arm, ctx)))
7968
+ return null;
7969
+ payloads.length = 0;
7970
+ payloads.push(DYN);
7971
+ }
7972
+ const byKey = new Map();
7973
+ for (const arm of payloads) {
7974
+ // A promise payload has no arm home beside the others: `await` of the
7975
+ // merged promise would adopt it as a thenable, which no union tag does.
7976
+ if (arm.kind === "promise")
7977
+ return null;
7978
+ byKey.set(typeKey(arm), arm);
7979
+ }
7980
+ const payload = [...byKey.values()];
7981
+ if (payload.length === 0)
7982
+ return null;
7983
+ // Every arm is the undefined unit: the promise never settles a value,
7984
+ // exactly `Promise<void>`.
7985
+ if (payload.every((arm) => arm.kind === "undefinedT"))
7986
+ payload.length = 0;
7987
+ // One payload arm is that arm itself (a regex or a promise payload has a
7988
+ // promise slot but no union arm); a JOINT payload is a union, so its arms
7989
+ // need union homes.
7990
+ const inner = payload.length === 0
7991
+ ? VOID
7992
+ : payload.length === 1
7993
+ ? payload[0]
7994
+ : payload.every((arm) => armHasUnionHome(arm))
7995
+ ? {
7996
+ kind: "union",
7997
+ unionId: ctx.unions.intern([...payload].sort((a, b) => (typeKey(a) < typeKey(b) ? -1 : 1))),
7998
+ }
7999
+ : null;
8000
+ const merged = inner === null ? null : { kind: "promise", inner };
8001
+ return merged === null ? null : [...arms.filter((arm) => arm.kind !== "promise"), merged];
8002
+ }
7454
8003
  /** The first non-promise constituent of a promise-armed union whose type
7455
8004
  * has a `then` member (a thenable data arm), or null. */
7456
8005
  function maybePromiseThenableArm(parts, ctx) {
@@ -7587,7 +8136,7 @@ export function describeComponentBlocker(widened, ctx) {
7587
8136
  }
7588
8137
  const promiseArms = mappedArms.filter(({ mapped }) => mapped?.kind === "promise");
7589
8138
  if (promiseArms.length > 1) {
7590
- return `the union shape is supported, but it has several promise arms ('${text(promiseArms[0].p)}' and '${text(promiseArms[1].p)}'), and a compiled union holds at most one (the union tag is the 'instanceof Promise' test)`;
8139
+ return `the union shape is supported, but its promise arms ('${text(promiseArms[0].p)}' and '${text(promiseArms[1].p)}') do not merge into one promise (their payloads have no common union layout)`;
7591
8140
  }
7592
8141
  if (promiseArms.length === 1 && dataArms.length > 1) {
7593
8142
  const callable = mappedArms.find(({ mapped }) => mapped?.kind === "func");