@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
@@ -1,21 +1,28 @@
1
+ import { widensReducedRecords } from "../function-returns.js";
2
+ import { widthNarrowHelper } from "../coercions/unions.js";
1
3
  /* Property reads (`a.b`): lowerExprInner's property-access branch, intrinsic and union properties, field reads and targets, and match-group reads. */
4
+ import { jsSpecialGlobalValue } from "../global-values.js";
5
+ import { arrayClassMemberOwner, arrayClassReceiver, lowerArrayClassConstructorRead, } from "../builtins/array-classes.js";
2
6
  import { indexedUnionArms, lowerIndexedUnionMember } from "../indexed-unions.js";
3
7
  import { keyedHelperName } from "../stable-names.js";
4
8
  import { builtinNamespaceValue } from "../builtin-namespaces.js";
5
9
  import { staticallySelected } from "../static-typeof.js";
10
+ import { lowerWebStreamClassRead } from "../builtins/web-streams-dyn.js";
6
11
  import * as ts from "../../ts7/adapter.js";
7
12
  import { lowerHistogramProperty } from "../builtins/performance.js";
8
13
  import { staticFunctionNameRead } from "../static-function-names.js";
9
14
  import { typedArgumentsArity } from "../typed-arguments.js";
15
+ import { INSPECT_CUSTOM_DESCRIPTION, isInspectCustomAccess } from "../symbol-fields.js";
10
16
  import { isThisParameter } from "../call-signatures.js";
11
17
  import { argumentCountSlot, contextualCallCount, usedAsValue } from "../argument-counts.js";
12
18
  import { checkedPrivateValue, localPrivateBrandClass, privateNameClass, } from "../private-brands.js";
13
- import { PoisonError, jsFuncNameOf, neverTaintedJsType, own } from "../lowerer.js";
19
+ import { PoisonError, builtinValueNameOf, jsFuncNameOf, neverTaintedJsType, own, } from "../lowerer.js";
14
20
  import { ARRAY_METHODS, MAP_METHODS, NARROW_FIRST, OBJECT_CALLABLE_VALUES, SET_METHODS, STDLIB_SURFACE, STRING_INDEX_METHODS, STR_METHODS, isChildSurfaceMember, stdlibGlobalNameOf, } from "../surfaces.js";
15
21
  import { isGenericCallableMemberType, isLegacyUrlSymbol, isOsConstantsType, isParseArgsDynTypeName, } from "../../type-mapper.js";
16
- import { BOOL, BYTES_ELEMENT_NAME, BYTES_U8, DYN, F64, NULL_T, SEARCH_PARAMS_T, STRING, SYMBOL_T, UNDEFINED_T, arrayOf, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isUnitType, typeEquals, typeKey, unionContainerArmsOk, BYTES_ELEMENT_SIZE, } from "../../../ir/ir.js";
17
- import { lowerNavigatorMember } from "../builtins/navigator.js";
22
+ import { BIGINT_T, BOOL, BYTES_U8, DYN, F64, NULL_T, SEARCH_PARAMS_T, STRING, SYMBOL_T, UNDEFINED_T, arrayOf, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isUnitType, typeEquals, typeKey, unionContainerArmsOk, BYTES_ELEMENT_SIZE, } from "../../../ir/ir.js";
23
+ import { lowerNavigatorMember, navigatorValue } from "../builtins/navigator.js";
18
24
  import { lowerX509PublicKey } from "../builtins/x509.js";
25
+ import { fenceMimeStaticRead } from "../builtins/mime.js";
19
26
  import { NODE_COMPAT_VERSION } from "../builtins/process.js";
20
27
  import { inlineNamespaceRequireOf, lowerWithInlineRequireInit, wholeExportValue, } from "../cjs-inline-require.js";
21
28
  import { cjsAccessorCall, constInitializerOf, exactUnionWidening, hasClassPayload, lowerExpr, matchAllCallbackRegexOf, matchAllRegexOf, namedCaptureGroupsOfPattern, primitiveCtorClosure, recordKeyResultOk, representedClassFieldTarget, staticRegexPatternOf, } from "../lower-exprs.js";
@@ -35,6 +42,8 @@ import { dynUndefinedExpr, nodeThrowExpr, numLit, strLit, varRef } from "../../.
35
42
  import { typedArrayLacksMember } from "../builtins/typed-array-members.js";
36
43
  import { TEMPORAL_GLOBAL } from "../../builtin-modules.js";
37
44
  import { tryLowerExpression } from "./try-lower-expression.js";
45
+ import { applyDeferredAssertion, assertedReceiverNode, deferredMemberReadTarget, deferredProbeReadAccess, } from "./asserted-receiver.js";
46
+ import { lowerRecordInheritedMember } from "../record-inherited.js";
38
47
  import { DATE_METHOD_HINT } from "../builtins/dates.js";
39
48
  import { cjsClassExprWholeExportOf, cjsExportAssignmentOf, cjsExportDiscardReason, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, isNodeEsmFile, locOf, } from "../../program.js";
40
49
  import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, contextualUndefReadType, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "../lower-namespaces.js";
@@ -53,7 +62,7 @@ import { blockedBindingUseDiag } from "../../../diagnostics/diagnostic.js";
53
62
  import { npmStaticPackageOfPath } from "../../npm-static.js";
54
63
  import { importMetaField, isImportMeta } from "../import-meta.js";
55
64
  import { createRequireCalleeFileOf } from "../builtins/module-bindings.js";
56
- import { createRequireResolveFenceValue } from "../builtins/module-resolution.js";
65
+ import { createRequireResolveFenceValue, createRequireResolveValue, } from "../builtins/module-resolution.js";
57
66
  import { builtinPrototypeMethod, lowerArrayIsArrayValue, lowerCheckedPredicateValue, lowerNumberParserValue, lowerObjectAssignValue, lowerStringCodesValue, } from "../lower-builtin-values.js";
58
67
  import { lowerArrayFromValue } from "../containers/array-construction.js";
59
68
  import { lowerBufferPrototypeMember } from "../containers/bytes.js";
@@ -171,11 +180,15 @@ function isCreateRequireResolveValue(lowerer, expr) {
171
180
  ts.isPropertyAccessExpression(expr.expression) &&
172
181
  !expr.expression.questionDotToken)
173
182
  resolve = expr.expression;
174
- return (ts.isPropertyAccessExpression(resolve) &&
183
+ return (!expr.questionDotToken &&
184
+ ts.isPropertyAccessExpression(resolve) &&
175
185
  resolve.name.text === "resolve" &&
176
186
  createRequireCalleeFileOf(lowerer, resolve.expression) !== null);
177
187
  }
178
188
  export function lowerPropertyAccessExpr(lowerer, expr, loc) {
189
+ const arrayClassConstructor = lowerArrayClassConstructorRead(lowerer, expr, loc);
190
+ if (arrayClassConstructor !== null)
191
+ return arrayClassConstructor;
179
192
  // `value.#x` on a checked-dynamic value, or on a checked extraction of
180
193
  // one: the field of the brand-checked receiver (checkedPrivateValue).
181
194
  if (ts.isPrivateIdentifier(expr.name)) {
@@ -199,6 +212,16 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
199
212
  const navigator = lowerNavigatorMember(lowerer, expr, NODE_COMPAT_VERSION);
200
213
  if (navigator)
201
214
  return navigator;
215
+ // util.inspect.custom: Symbol.for('nodejs.util.inspect.custom').
216
+ if (isInspectCustomAccess(lowerer, expr)) {
217
+ return {
218
+ kind: "libCall",
219
+ fn: "sym.for",
220
+ args: [{ kind: "strLit", value: INSPECT_CUSTOM_DESCRIPTION, type: STRING, loc }],
221
+ type: SYMBOL_T,
222
+ loc,
223
+ };
224
+ }
202
225
  {
203
226
  const member = lowerBufferPrototypeMember(lowerer, expr);
204
227
  if (member)
@@ -439,6 +462,12 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
439
462
  if (lowerer.stdlibGlobalMember(expr, "globalThis") === "console") {
440
463
  return { kind: "libCall", fn: "console.native", args: [], type: DYN, loc };
441
464
  }
465
+ {
466
+ // `globalThis.ReadableStream` in JavaScript: the class value.
467
+ const webStream = lowerWebStreamClassRead(lowerer, expr);
468
+ if (webStream)
469
+ return webStream;
470
+ }
442
471
  if (lowerer.stdlibGlobalMember(expr, "console") !== null) {
443
472
  return {
444
473
  kind: "dynKeyGet",
@@ -458,7 +487,8 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
458
487
  // (`(_a = globalThis).__config ?? (_a.__config = {})`) reads back from
459
488
  // the global object's own properties.
460
489
  const globalType = lowerer.typeOf(staticallySelected(lowerer, expr.expression));
461
- if (globalThisWrittenNames(lowerer, globalType).has(expr.name.text)) {
490
+ if (globalThisWrittenNames(lowerer, globalType).has(expr.name.text) ||
491
+ lowerer.globalThisComputedWrite) {
462
492
  return {
463
493
  kind: "dynKeyGet",
464
494
  value: lowerer.coerceToExpected(lowerer.lowerExpr(expr.expression), DYN),
@@ -467,6 +497,10 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
467
497
  loc,
468
498
  };
469
499
  }
500
+ // Node's navigator, which JavaScript reads as a free name when no
501
+ // declaration types it (isNavigatorGlobal).
502
+ if (expr.name.text === "navigator" && isJsSourceFile(ts.getSourceFileOfNode(expr)))
503
+ return navigatorValue(loc);
470
504
  return dynUndefinedExpr(loc);
471
505
  }
472
506
  // `Uint8Array.prototype.toBase64` and its siblings, the base64/hex
@@ -769,6 +803,7 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
769
803
  // prototype that no lowering above claimed keeps the SC2020 fence
770
804
  // rather than reading undefined through the field and dynamic reads.
771
805
  fenceBuiltinConstructorStaticRead(lowerer, expr) ??
806
+ fenceMimeStaticRead(lowerer, expr) ??
772
807
  lowerer.lowerFieldRead(expr);
773
808
  // A union-typed field read narrows like an identifier when the
774
809
  // checker has narrowed this use to one arm.
@@ -810,18 +845,9 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
810
845
  // Typed for the programs that name it, absent in Node 24.
811
846
  if (canonical === TEMPORAL_GLOBAL)
812
847
  return dynUndefinedExpr(loc);
813
- if (canonical === "ArrayBuffer")
814
- return { kind: "libCall", fn: "arrayBuffer.constructor", args: [], type: DYN, loc };
815
- if (canonical === "fetch")
816
- return { kind: "libCall", fn: "fetch.function", args: [], type: DYN, loc };
817
- if (Object.values(BYTES_ELEMENT_NAME).includes(canonical))
818
- return {
819
- kind: "libCall",
820
- fn: "bytes.constructor",
821
- args: [{ kind: "strLit", value: canonical, type: STRING, loc }],
822
- type: DYN,
823
- loc,
824
- };
848
+ const value = jsSpecialGlobalValue(lowerer, canonical, loc);
849
+ if (value)
850
+ return value;
825
851
  return (builtinGlobalValueAt(lowerer, expr, canonical, loc, true) ?? {
826
852
  kind: "strLit",
827
853
  value: `[builtin ${canonical}]`,
@@ -973,12 +999,14 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
973
999
  if ((isJsSourceFile(ts.getSourceFileOfNode(expr)) || expr.name.text === "constructor") &&
974
1000
  probed?.type.kind === "func" &&
975
1001
  canBoxFuncIntoDyn(probed.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))) {
976
- const fnName = jsFuncNameOf(expr.expression);
977
- // A builtin function value whose length is not its adapter's
978
- // parameter count (`Math.max.length` is 2).
979
- const fnLength = probed.kind === "closure"
980
- ? lowerer.builtinCallableValueLengths.get(probed.fnName)
981
- : undefined;
1002
+ // A function is named by its definition, through const aliases: a
1003
+ // builtin module member whose Node name differs from the member
1004
+ // (`process.cwd` is `wrappedCwd`) by the module table, anything else
1005
+ // by the property or function it reads. A builtin function value
1006
+ // keeps its length when that is not its adapter's parameter count
1007
+ // (`Math.max.length` is 2).
1008
+ const fnName = builtinValueNameOf(expr.expression, lowerer) ?? jsFuncNameOf(expr.expression, lowerer);
1009
+ const fnLength = lowerer.builtinFunctionIdentity(probed).fnLength;
982
1010
  const boxed = {
983
1011
  kind: "dynFrom",
984
1012
  value: probed,
@@ -1124,10 +1152,13 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1124
1152
  }
1125
1153
  }
1126
1154
  // A createRequire loader's resolve read as a value (passed on, or
1127
- // picked by `??`): resolution happens at build time, so only calls
1128
- // with a literal specifier lower.
1155
+ // picked by `??`): a function that resolves its request at run time.
1156
+ // resolve.paths read as a value has no run-time lowering: a function
1157
+ // that throws the fence when called.
1129
1158
  if (isCreateRequireResolveValue(lowerer, expr))
1130
- return createRequireResolveFenceValue(lowerer, expr, loc);
1159
+ return expr.name.text === "paths"
1160
+ ? createRequireResolveFenceValue(lowerer, expr, loc)
1161
+ : createRequireResolveValue(lowerer, expr, loc);
1131
1162
  // The lib fence's PROPERTY chokepoint: a stdlib-declared member that
1132
1163
  // no lowering above claimed ([1,2].entries, Math.SQRT2, Promise.all,
1133
1164
  // re.exec as a value, ...) reports SC2020 here.
@@ -1153,7 +1184,41 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1153
1184
  // honest one, not a generic recitation about the outer dot. A
1154
1185
  // receiver that lowers cleanly means the MEMBER is the gap — name
1155
1186
  // the property and the receiver's type instead of "property access".
1156
- const recvLowered = lowerer.lowerExpr(expr.expression);
1187
+ let recvLowered = lowerer.lowerExpr(expr.expression);
1188
+ // A PRESENCE PROBE of a member read through an erased assertion
1189
+ // (`typeof (u as R).member`, `(u as R).member !== undefined`): Node
1190
+ // reads the property off the value actually stored, so an arm that does
1191
+ // not declare it answers undefined. lowerAsExpression deferred the
1192
+ // assertion's checked extraction for this read; answer it per arm
1193
+ // (assertedMemberRead), and only a member with no per-arm answer applies
1194
+ // the extraction the assertion would otherwise have taken (a lying
1195
+ // assertion still throws on a real use, never on the probe).
1196
+ {
1197
+ const assertion = assertedReceiverNode(expr.expression);
1198
+ const target = assertion
1199
+ ? deferredMemberReadTarget(lowerer, assertion, expr, recvLowered)
1200
+ : null;
1201
+ if (target !== null) {
1202
+ const read = assertedMemberRead(lowerer, expr.expression, expr.name.text, recvLowered, loc);
1203
+ if (read)
1204
+ return read;
1205
+ recvLowered = applyDeferredAssertion(lowerer, recvLowered, target, loc);
1206
+ }
1207
+ }
1208
+ // A receiver whose value union holds record types the checker's subtype
1209
+ // reduction folded into its type (`{ status } | { status, value }` typed
1210
+ // `{ status }`, a call of a function with an inferred return type): read
1211
+ // through the checker's type, converting the wider arms.
1212
+ if (recvLowered.type.kind === "union") {
1213
+ const declared = lowerer.mapTypeOf(lowerer.typeOf(expr.expression));
1214
+ if (declared !== null &&
1215
+ declared.kind === "record" &&
1216
+ widensReducedRecords(lowerer, declared, recvLowered.type)) {
1217
+ const helper = widthNarrowHelper(lowerer, recvLowered.type.unionId, declared, loc);
1218
+ if (helper !== null)
1219
+ recvLowered = lowerer.checkedNarrowCall(helper, recvLowered, declared, loc);
1220
+ }
1221
+ }
1157
1222
  // A dyn receiver — JSON.parse's `any`, or `unknown` the checker
1158
1223
  // narrowed to `object` — reads through the dyn keyed read: member
1159
1224
  // or undefined (JS's own-property answer), throwing JS's TypeError
@@ -1295,7 +1360,7 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
1295
1360
  const mapped = lowerer.mapTypeOf(lowerer.typeOf(expr));
1296
1361
  return mapped && mapped.kind !== "void" ? lowerer.coerceInto(expr, read, mapped) : read;
1297
1362
  }
1298
- const asserted = assertedMemberRead(lowerer, expr, recvLowered, loc);
1363
+ const asserted = assertedMemberRead(lowerer, expr.expression, expr.name.text, recvLowered, loc);
1299
1364
  if (asserted)
1300
1365
  return asserted;
1301
1366
  // A checker-`any` receiver whose value is a FRESH typed result of an
@@ -1371,14 +1436,17 @@ function isFreshCallResult(node) {
1371
1436
  /** `(source as { repoName: string }).repoName` where the assertion names a
1372
1437
  * member some arms of the stored union of records do not declare: Node
1373
1438
  * reads the property off whichever object it is, so arms that declare it
1374
- * answer their slot, and the others answer undefined (native records are
1375
- * closed, so they cannot hold it). The result keeps that undefined arm
1376
- * whatever the assertion claims; a consumer that needs the asserted type
1377
- * checks it like any other narrowing. The arms that declare the member
1378
- * must agree on its type. Null when the receiver is not such an
1379
- * assertion over records, or no arm declares the member. */
1380
- function assertedMemberRead(lowerer, expr, recv, loc) {
1381
- let receiverNode = expr.expression;
1439
+ * answer their slot (a getter arm calls its getter), an index-signature arm
1440
+ * answers its own key (a declared miss reads undefined), an arm with only a
1441
+ * setter of that name reads undefined, and the rest answer undefined
1442
+ * (native records are closed, so they cannot hold it). The result keeps
1443
+ * that undefined arm whatever the assertion claims; a consumer that needs
1444
+ * the asserted type checks it like any other narrowing. The arms that
1445
+ * declare the member must agree on its type. `receiverNode` is the asserted
1446
+ * expression and `name` the member read (the dot and bracket spellings
1447
+ * share this answer). Null when the receiver is not such an assertion over
1448
+ * records, or no arm answers the member. */
1449
+ export function assertedMemberRead(lowerer, receiverNode, name, recv, loc) {
1382
1450
  while (ts.isParenthesizedExpression(receiverNode))
1383
1451
  receiverNode = receiverNode.expression;
1384
1452
  if (!ts.isAsExpression(receiverNode) && !ts.isTypeAssertion(receiverNode))
@@ -1387,10 +1455,14 @@ function assertedMemberRead(lowerer, expr, recv, loc) {
1387
1455
  return null;
1388
1456
  const unionId = recv.type.unionId;
1389
1457
  const arms = lowerer.unions.get(unionId)?.arms ?? [];
1390
- const name = expr.name.text;
1391
1458
  let resultType = null;
1392
1459
  let records = 0;
1460
+ // A getter arm answers by calling its getter, once per read, as Node's
1461
+ // read does; a data arm reads its slot.
1393
1462
  const declaring = [];
1463
+ // An index-signature arm may hold the key in its overflow map: the read
1464
+ // probes it per value (the stored value, or undefined).
1465
+ const keyed = [];
1394
1466
  const units = [];
1395
1467
  for (let tag = 0; tag < arms.length; tag++) {
1396
1468
  const arm = arms[tag];
@@ -1402,20 +1474,44 @@ function assertedMemberRead(lowerer, expr, recv, loc) {
1402
1474
  return null;
1403
1475
  records++;
1404
1476
  const shape = lowerer.shapes.get(arm.shapeId);
1405
- if (!shape || shape.tuple || shape.indexValue)
1477
+ if (!shape || shape.tuple)
1406
1478
  return null;
1407
- const field = shape.fields.find((f) => f.name === name);
1408
- if (!field)
1479
+ const getter = shape.fields.find((f) => f.name === `%get:${name}`);
1480
+ if (getter && getter.type.kind !== "func")
1481
+ return null;
1482
+ const field = getter ?? shape.fields.find((f) => f.name === name);
1483
+ if (!field) {
1484
+ // A setter-only arm reads undefined (Node never invokes a setter on
1485
+ // a read); an index-signature arm answers its own key.
1486
+ if (shape.indexValue)
1487
+ keyed.push({ tag, shapeId: arm.shapeId, type: shape.indexValue });
1409
1488
  continue;
1489
+ }
1490
+ const fieldType = field.type.kind === "func" && getter ? field.type.ret : field.type;
1410
1491
  // The declaring arms agree up to an undefined arm (`string` beside
1411
1492
  // `string | undefined`).
1412
- const armResult = lowerer.withUndefinedArmOf(field.type);
1493
+ const armResult = lowerer.withUndefinedArmOf(fieldType);
1413
1494
  if (!armResult || (resultType && !typeEquals(resultType, armResult)))
1414
1495
  return null;
1415
1496
  resultType = armResult;
1416
- declaring.push({ tag, shapeId: arm.shapeId, type: field.type });
1497
+ declaring.push({ tag, shapeId: arm.shapeId, type: field.type, getter: getter !== undefined });
1498
+ }
1499
+ // The index-signature arms answer their value type armed with undefined;
1500
+ // a union with several shapes uses the union of every arm's answer.
1501
+ for (const k of keyed) {
1502
+ const armResult = lowerer.withUndefinedArmOf(k.type);
1503
+ if (!armResult)
1504
+ return null;
1505
+ if (resultType === null || typeEquals(resultType, armResult)) {
1506
+ resultType = armResult;
1507
+ continue;
1508
+ }
1509
+ const merged = mergeReadTypes(lowerer, [resultType, armResult]);
1510
+ if (!merged)
1511
+ return null;
1512
+ resultType = merged;
1417
1513
  }
1418
- if (!resultType || declaring.length === records)
1514
+ if (!resultType || (declaring.length === records && declaring.every((d) => !d.getter)))
1419
1515
  return null;
1420
1516
  const stable = lowerer.declareHiddenLocal("%assertedRecv", recv.type);
1421
1517
  const ref = () => ({ kind: "varRef", localId: stable.id, type: recv.type, loc });
@@ -1434,15 +1530,41 @@ function assertedMemberRead(lowerer, expr, recv, loc) {
1434
1530
  loc,
1435
1531
  };
1436
1532
  }
1437
- for (const { tag, shapeId, type: fieldType } of declaring) {
1438
- const read = {
1533
+ for (const { tag, shapeId, type: fieldType, getter } of declaring) {
1534
+ const slot = {
1439
1535
  kind: "recordGet",
1440
1536
  obj: { kind: "unionNarrow", unionId, tag, value: ref(), type: arms[tag], loc },
1441
1537
  shapeId,
1442
- field: name,
1538
+ field: getter ? `%get:${name}` : name,
1443
1539
  type: fieldType,
1444
1540
  loc,
1445
1541
  };
1542
+ const read = getter && fieldType.kind === "func"
1543
+ ? { kind: "callValue", callee: slot, args: [], type: fieldType.ret, loc }
1544
+ : slot;
1545
+ result = {
1546
+ kind: "ternary",
1547
+ cond: { kind: "unionIsTag", unionId, tag, negated: false, value: ref(), type: BOOL, loc },
1548
+ then: lowerer.coerceToExpected(read, resultType),
1549
+ else_: result,
1550
+ type: resultType,
1551
+ loc,
1552
+ };
1553
+ }
1554
+ for (const { tag, shapeId, type: valueType } of keyed) {
1555
+ const axis = { kind: "unionNarrow", unionId, tag, value: ref(), type: arms[tag], loc };
1556
+ const answer = lowerer.withUndefinedArmOf(valueType);
1557
+ if (!answer)
1558
+ return null;
1559
+ const read = {
1560
+ kind: "recordKeyGet",
1561
+ obj: axis,
1562
+ shapeId,
1563
+ key: { kind: "strLit", value: name, type: STRING, loc },
1564
+ overflowOnly: true,
1565
+ type: answer,
1566
+ loc,
1567
+ };
1446
1568
  result = {
1447
1569
  kind: "ternary",
1448
1570
  cond: { kind: "unionIsTag", unionId, tag, negated: false, value: ref(), type: BOOL, loc },
@@ -1460,6 +1582,23 @@ function assertedMemberRead(lowerer, expr, recv, loc) {
1460
1582
  loc,
1461
1583
  };
1462
1584
  }
1585
+ /** The union of two per-arm read answers (each already carries its
1586
+ * undefined arm), or null when the shapes cannot intern as one union. */
1587
+ function mergeReadTypes(lowerer, types) {
1588
+ const arms = [];
1589
+ for (const t of types) {
1590
+ const list = t.kind === "union" ? (lowerer.unions.get(t.unionId)?.arms ?? []) : [t];
1591
+ for (const arm of list)
1592
+ if (!arms.some((a) => typeEquals(a, arm)))
1593
+ arms.push(arm);
1594
+ }
1595
+ if (arms.length === 0)
1596
+ return null;
1597
+ if (arms.length === 1)
1598
+ return arms[0];
1599
+ const canonical = arms.sort((a, b) => typeKey(a) < typeKey(b) ? -1 : typeKey(a) > typeKey(b) ? 1 : 0);
1600
+ return { kind: "union", unionId: lowerer.unions.intern(canonical) };
1601
+ }
1463
1602
  function importMetaProperty(lowerer, expr) {
1464
1603
  return isImportMeta(expr.expression) ? importMetaField(lowerer, expr, expr.name.text) : null;
1465
1604
  }
@@ -1666,6 +1805,7 @@ export function lowerIntrinsicProperty(lowerer, expr) {
1666
1805
  kind !== "url" &&
1667
1806
  kind !== "searchParams" &&
1668
1807
  kind !== "stats" &&
1808
+ kind !== "bigintStats" &&
1669
1809
  kind !== "spawnRes" &&
1670
1810
  kind !== "child" &&
1671
1811
  kind !== "bytes" &&
@@ -1745,6 +1885,19 @@ export function lowerIntrinsicProperty(lowerer, expr) {
1745
1885
  const receiver = lowerer.lowerExpr(expr.expression);
1746
1886
  return { kind: "libCall", fn: "child.killed", args: [receiver], type: BOOL, loc };
1747
1887
  }
1888
+ // signalCode: `NodeJS.Signals | null`, the signal that terminated the
1889
+ // child (null while running, after a normal exit, and after a spawn
1890
+ // failure) — the exit listener's second parameter, read as a property.
1891
+ // The `string | null` union builds type-directedly over a has/get
1892
+ // runtime pair (the spawnRes.signal pattern).
1893
+ if (name === "signalCode") {
1894
+ const receiver = lowerer.lowerExpr(expr.expression);
1895
+ const type = {
1896
+ kind: "union",
1897
+ unionId: lowerer.unions.intern([STRING, NULL_T]),
1898
+ };
1899
+ return { kind: "libCall", fn: "child.signalCode", args: [receiver], type, loc };
1900
+ }
1748
1901
  if (name === "on" || name === "once" || name === "kill" || name === "unref") {
1749
1902
  lowerer.unsupported("SC1090", expr, `child methods as values (call '${name}' directly)`);
1750
1903
  }
@@ -1790,15 +1943,24 @@ export function lowerIntrinsicProperty(lowerer, expr) {
1790
1943
  }
1791
1944
  lowerer.noLowering(`SpawnSyncReturns.${name}`, expr, "status, stdout, stderr, and error are the supported spawnSync-result members", lowerer.checker.getSymbolAtLocation(expr.name));
1792
1945
  }
1793
- if (kind === "stats") {
1946
+ if (kind === "stats" || kind === "bigintStats") {
1947
+ const bigintStats = kind === "bigintStats";
1794
1948
  if (name === "size") {
1795
1949
  const receiver = lowerer.lowerExpr(expr.expression);
1796
- return { kind: "libCall", fn: "stats.size", args: [receiver], type: F64, loc: locOf(expr) };
1950
+ return {
1951
+ kind: "libCall",
1952
+ fn: bigintStats ? "bigstats.size" : "stats.size",
1953
+ args: [receiver],
1954
+ type: bigintStats ? BIGINT_T : F64,
1955
+ loc: locOf(expr),
1956
+ };
1797
1957
  }
1798
1958
  if (Object.hasOwn(STATS_TYPE_TESTS, name)) {
1799
- lowerer.unsupported("SC1090", expr, `Stats methods as values (call '${name}' directly)`);
1959
+ lowerer.unsupported("SC1090", expr, `${bigintStats ? "BigIntStats" : "Stats"} methods as values (call '${name}' directly)`);
1800
1960
  }
1801
- lowerer.noLowering(`Stats.${name}`, expr, "isFile(), isDirectory(), isSymbolicLink(), isBlockDevice(), isCharacterDevice(), isFIFO(), isSocket(), dev, mode, nlink, uid, gid, rdev, blksize, ino, size, blocks, atimeMs, mtimeMs, ctimeMs, birthtimeMs, atime, mtime, ctime, and birthtime are the supported Stats members", lowerer.checker.getSymbolAtLocation(expr.name));
1961
+ lowerer.noLowering(`${bigintStats ? "BigIntStats" : "Stats"}.${name}`, expr, bigintStats
1962
+ ? "BigIntStats' isFile(), isDirectory(), isSymbolicLink(), isBlockDevice(), isCharacterDevice(), isFIFO(), isSocket(), dev, mode, nlink, uid, gid, rdev, blksize, ino, size, blocks, atimeNs, mtimeNs, ctimeNs, birthtimeNs, atimeMs, mtimeMs, ctimeMs, birthtimeMs, atime, mtime, ctime, and birthtime are the supported members"
1963
+ : "isFile(), isDirectory(), isSymbolicLink(), isBlockDevice(), isCharacterDevice(), isFIFO(), isSocket(), dev, mode, nlink, uid, gid, rdev, blksize, ino, size, blocks, atimeMs, mtimeMs, ctimeMs, birthtimeMs, atime, mtime, ctime, and birthtime are the supported Stats members", lowerer.checker.getSymbolAtLocation(expr.name));
1802
1964
  }
1803
1965
  if (kind === "date") {
1804
1966
  // A Date held as a checked-dynamic value (a Date a JavaScript file
@@ -2696,6 +2858,23 @@ export function lowerGroupsProjection(lowerer, recv, groups, loc) {
2696
2858
  }
2697
2859
  /** Field reads use the shared FieldTarget union. Native method reads select
2698
2860
  * an interned unbound callable; invocation supplies its receiver separately. */
2861
+ /** Whether a receiver is a binding or `this`, or a chain of property reads
2862
+ * from one whose every member is a plain property (no accessor), so that
2863
+ * reading it has no effect. */
2864
+ function plainReadChain(lowerer, node) {
2865
+ let current = node;
2866
+ while (ts.isPropertyAccessExpression(current)) {
2867
+ if (current.questionDotToken)
2868
+ return false;
2869
+ const member = lowerer.checker.getSymbolAtLocation(current.name);
2870
+ if (member === undefined || (member.flags & ts.SymbolFlags.Property) === 0)
2871
+ return false;
2872
+ if ((member.flags & (ts.SymbolFlags.GetAccessor | ts.SymbolFlags.SetAccessor)) !== 0)
2873
+ return false;
2874
+ current = current.expression;
2875
+ }
2876
+ return ts.isIdentifier(current) || current.kind === ts.SyntaxKind.ThisKeyword;
2877
+ }
2699
2878
  export function lowerFieldRead(lowerer, expr) {
2700
2879
  // A checked receiver already owns its property table. An ambient
2701
2880
  // generic method signature must not divert its value into native
@@ -2717,6 +2896,13 @@ export function lowerFieldRead(lowerer, expr) {
2717
2896
  };
2718
2897
  }
2719
2898
  }
2899
+ // A presence probe of a member read through a record assertion
2900
+ // (`typeof (u as R).member`): the field target comes from the ASSERTED
2901
+ // checker type and would apply the checked extraction, trapping on the
2902
+ // very arm the probe exists to detect. Leave the read to the per-arm
2903
+ // answer in lowerPropertyAccessExpr (asserted-receiver.ts).
2904
+ if (deferredProbeReadAccess(lowerer, expr))
2905
+ return null;
2720
2906
  const target = lowerer.fieldTarget(expr);
2721
2907
  if (target)
2722
2908
  return lowerer.fieldGetExpr(target, locOf(expr), expr);
@@ -2792,6 +2978,13 @@ export function lowerFieldRead(lowerer, expr) {
2792
2978
  loc: locOf(expr),
2793
2979
  };
2794
2980
  }
2981
+ // Object.prototype's methods read as values: an own entry of the
2982
+ // member's function type, else the built-in.
2983
+ if (actual?.type.kind === "record") {
2984
+ const inherited = lowerRecordInheritedMember(lowerer, actual, expr);
2985
+ if (inherited)
2986
+ return inherited;
2987
+ }
2795
2988
  // A member the checker declares on the receiver, stored in a pure
2796
2989
  // index-signature record (an object literal that spread one, see
2797
2990
  // dictSpreadLiteralShape): the key is always present, so the keyed
@@ -2812,23 +3005,89 @@ export function lowerFieldRead(lowerer, expr) {
2812
3005
  }
2813
3006
  }
2814
3007
  // `t.length` on a tuple: the arity CONSTANT (tuples are fixed-shape —
2815
- // the checker types it as the literal arity too). Folding discards the
2816
- // receiver's evaluation, so only side-effect-free receivers fold;
2817
- // anything else (a call result) binds to a const first.
3008
+ // the checker types it as the literal arity too). A binding or `this`,
3009
+ // or a chain of plain property reads from one, folds; any other receiver
3010
+ // (a call result, a ternary, an assertion, a chain through an accessor)
3011
+ // is evaluated first, for its side effects and exceptions, and its value
3012
+ // discarded.
2818
3013
  if (receiverIr?.kind === "record" && expr.name.text === "length") {
2819
3014
  const shape = lowerer.shapes.get(receiverIr.shapeId);
2820
3015
  if (shape?.tuple) {
2821
- let root = expr.expression;
2822
- while (ts.isPropertyAccessExpression(root))
2823
- root = root.expression;
2824
- if (!ts.isIdentifier(root) && root.kind !== ts.SyntaxKind.ThisKeyword) {
2825
- lowerer.unsupported("SC1090", expr, "'.length' of a computed tuple expression (the arity is a constant — bind the tuple to a const first)");
3016
+ const arity = {
3017
+ kind: "numLit",
3018
+ value: shape.fields.length,
3019
+ type: F64,
3020
+ loc: locOf(expr),
3021
+ };
3022
+ if (plainReadChain(lowerer, expr.expression))
3023
+ return arity;
3024
+ const receiver = checkerArray ?? lowerer.lowerExpr(expr.expression);
3025
+ const loc = locOf(expr);
3026
+ // An unchecked element read (`rows[i].length` with `rows: T[]`) answers
3027
+ // the element's optional value: a missing element is undefined, and
3028
+ // reading `length` from it throws Node's TypeError.
3029
+ if (receiver.type.kind === "union") {
3030
+ const unionId = receiver.type.unionId;
3031
+ const held = lowerer.declareHiddenLocal("%tupleLengthReceiver", receiver.type);
3032
+ let result = arity;
3033
+ for (const unit of ["undefined", "null"]) {
3034
+ const tag = lowerer.armTag(unionId, unit === "undefined" ? UNDEFINED_T : NULL_T);
3035
+ if (tag < 0)
3036
+ continue;
3037
+ result = {
3038
+ kind: "ternary",
3039
+ cond: {
3040
+ kind: "unionIsTag",
3041
+ unionId,
3042
+ tag,
3043
+ negated: false,
3044
+ value: varRef(held.id, receiver.type, loc),
3045
+ type: BOOL,
3046
+ loc,
3047
+ },
3048
+ then: nodeThrowExpr(1, "", `Cannot read properties of ${unit} (reading 'length')`, F64, loc),
3049
+ else_: result,
3050
+ type: F64,
3051
+ loc,
3052
+ };
3053
+ }
3054
+ return {
3055
+ kind: "seqExpr",
3056
+ stmts: [{ kind: "varDecl", localId: held.id, init: receiver, loc }],
3057
+ result,
3058
+ type: F64,
3059
+ loc,
3060
+ };
2826
3061
  }
2827
- return { kind: "numLit", value: shape.fields.length, type: F64, loc: locOf(expr) };
3062
+ return {
3063
+ kind: "seqExpr",
3064
+ stmts: [{ kind: "exprStmt", expr: receiver, loc: locOf(expr.expression) }],
3065
+ result: arity,
3066
+ type: F64,
3067
+ loc,
3068
+ };
2828
3069
  }
2829
3070
  }
2830
3071
  return null;
2831
3072
  }
3073
+ /** Whether a receiver is a value the checker ruled UNREACHABLE (`never`),
3074
+ * directly or through the parenthesized assertion chain that escapes it
3075
+ * (`(x as any)`, `(x as unknown)`, `x!`). The erasure is what hides the
3076
+ * value's stored union from the checker; the value itself still holds it. */
3077
+ function unreachableReceiver(lowerer, expr) {
3078
+ let node = expr.expression;
3079
+ for (;;) {
3080
+ if ((lowerer.typeOf(node).flags & ts.TypeFlags.Never) !== 0)
3081
+ return true;
3082
+ if (ts.isParenthesizedExpression(node) ||
3083
+ ts.isNonNullExpression(node) ||
3084
+ ts.isAssertionExpression(node)) {
3085
+ node = node.expression;
3086
+ continue;
3087
+ }
3088
+ return false;
3089
+ }
3090
+ }
2832
3091
  /** Shared-field read `r.f` on a UNION receiver: supported exactly when
2833
3092
  * every arm is a record/class possessing the field with ONE shared IR
2834
3093
  * type — the discriminant pattern (`r.kind`, primitive) and the
@@ -2843,7 +3102,15 @@ export function lowerUnionProperty(lowerer, expr) {
2843
3102
  return null;
2844
3103
  const receiverIr = structuralReadType(lowerer, expr.expression) ??
2845
3104
  lowerer.mapTypeOf(lowerer.typeOf(expr.expression));
2846
- if (receiverIr?.kind !== "union")
3105
+ // The checker can rule the receiver UNREACHABLE and the assertion that
3106
+ // escapes it (`const x: never = event; (event as any).type` — the
3107
+ // `default:` branch of a switch that exhausts every arm) erases to
3108
+ // checked-dynamic, hiding the union the value actually holds. Node reads
3109
+ // the member off the object it is; the arms all declare it, so the read
3110
+ // is the shared-field read. `never` admits no reachable call site, so no
3111
+ // reachable program changes shape.
3112
+ const unreachable = receiverIr?.kind !== "union" && unreachableReceiver(lowerer, expr);
3113
+ if (receiverIr?.kind !== "union" && !unreachable)
2847
3114
  return null;
2848
3115
  // Lower the receiver first: its runtime value can still carry the full
2849
3116
  // binding union even when the checker has removed several variants.
@@ -2851,7 +3118,9 @@ export function lowerUnionProperty(lowerer, expr) {
2851
3118
  // A guard can remove several variants without selecting one record.
2852
3119
  // Materialize that sub-union before looking for common fields; arms
2853
3120
  // ruled out by the guard must not veto a field shared by the survivors.
2854
- if (value.type.kind === "union" && !typeEquals(value.type, receiverIr)) {
3121
+ if (receiverIr?.kind === "union" &&
3122
+ value.type.kind === "union" &&
3123
+ !typeEquals(value.type, receiverIr)) {
2855
3124
  const helper = lowerer.narrowedRetagHelper(expr.expression, value.type.unionId, receiverIr.unionId, locOf(expr));
2856
3125
  if (helper)
2857
3126
  value = { kind: "call", callee: helper, args: [value], type: receiverIr, loc: locOf(expr) };
@@ -2908,6 +3177,18 @@ export function lowerUnionProperty(lowerer, expr) {
2908
3177
  if (getter)
2909
3178
  return lowerer.fieldGetExpr({ container: "accessor", obj: value, className, field, fieldType: getter.sig.ret }, locOf(expr), expr);
2910
3179
  }
3180
+ // An array the checker sees through a union of arrays (`readdirSync`'s
3181
+ // `string[] | Buffer[]`, whose lowering answers the string[] arm).
3182
+ if (value.type.kind === "array" && expr.name.text === "length") {
3183
+ return {
3184
+ kind: "arrIntrinsic",
3185
+ method: "length",
3186
+ receiver: value,
3187
+ args: [],
3188
+ type: F64,
3189
+ loc: locOf(expr),
3190
+ };
3191
+ }
2911
3192
  if (value.type.kind !== "union") {
2912
3193
  lowerer.unsupported("SC1090", expr, "shared property access without a represented union receiver");
2913
3194
  }
@@ -3040,7 +3321,7 @@ export function lowerUnionProperty(lowerer, expr) {
3040
3321
  * Array reads retain the ordinary invalid-index trap policy.
3041
3322
  * Returns null when any arm cannot answer — the caller owns the fence
3042
3323
  * message. The caller (the property/element dispatch) maybeNarrows. */
3043
- export function lowerUnionKeyedRead(lowerer, expr, unionId, value, key, literalField) {
3324
+ export function lowerUnionKeyedRead(lowerer, expr, unionId, value, key, literalField, missingFieldAsUndefined = false) {
3044
3325
  const def = lowerer.unions.get(unionId);
3045
3326
  if (!def)
3046
3327
  return null;
@@ -3099,6 +3380,14 @@ export function lowerUnionKeyedRead(lowerer, expr, unionId, value, key, literalF
3099
3380
  if (!shape.indexValue) {
3100
3381
  if (literalField === null && shape.fields.length > 0)
3101
3382
  continue;
3383
+ // A record arm that does not declare the key at all answers
3384
+ // UNDEFINED in JS. Destructuring asks for that answer (its own
3385
+ // desugar reads a missing property as undefined, Node-exact); a
3386
+ // dotted read keeps refusing until narrowing proves the arm.
3387
+ if (literalField !== null && missingFieldAsUndefined) {
3388
+ push(UNDEFINED_T);
3389
+ continue;
3390
+ }
3102
3391
  return null;
3103
3392
  }
3104
3393
  if (!pushAnswer(shape.indexValue))
@@ -3145,6 +3434,13 @@ export function lowerUnionKeyedRead(lowerer, expr, unionId, value, key, literalF
3145
3434
  return null;
3146
3435
  continue;
3147
3436
  }
3437
+ if (literalField !== null && !shape.indexValue && missingFieldAsUndefined) {
3438
+ // The missing-field answer above must surface as the join's
3439
+ // undefined arm (the backend's keyed-read miss path stores it).
3440
+ if (!(type.kind === "union" && lowerer.armTag(type.unionId, UNDEFINED_T) >= 0))
3441
+ return null;
3442
+ continue;
3443
+ }
3148
3444
  const ovfShape = literalField !== null && shape.indexValue ? { ...shape, fields: [] } : shape;
3149
3445
  if (!recordKeyResultOk(lowerer, ovfShape, type))
3150
3446
  return null;
@@ -3161,13 +3457,13 @@ export function classFieldTarget(lowerer, receiverNode, receiverType, fieldName,
3161
3457
  !fieldName.startsWith("#")) {
3162
3458
  return { container: "dynamic", obj: represented, field: fieldName, fieldType: DYN };
3163
3459
  }
3164
- const info = lowerer.classes.get(receiverType.className);
3165
- if (!info) {
3166
- // A receiver typed as a class whose collection deferred: the
3167
- // deferred diagnostics are what explains the miss.
3460
+ // A receiver typed as a class whose collection deferred: the deferred
3461
+ // diagnostics are what explains the miss (unless the flush registers
3462
+ // the class with dynamic slots, retryDeferred).
3463
+ const info = lowerer.classes.get(receiverType.className) ??
3168
3464
  lowerer.flushDeferredClass(receiverType.className);
3465
+ if (!info)
3169
3466
  return null;
3170
- }
3171
3467
  const fieldType = info.fields.get(fieldName);
3172
3468
  const lowerObjectReceiver = () => {
3173
3469
  let obj = represented;
@@ -3305,6 +3601,19 @@ export function fieldTarget(lowerer, access) {
3305
3601
  return classFieldTarget(lowerer, access.expression, { kind: "object", className: owner.def.name }, access.name.text, receiver);
3306
3602
  }
3307
3603
  }
3604
+ // A field declared by a class that extends Array, on an instance (whose
3605
+ // type maps to its array): the class object's field.
3606
+ {
3607
+ const owner = arrayClassMemberOwner(lowerer, access);
3608
+ const name = access.name.text;
3609
+ if (owner !== null &&
3610
+ (owner.fields.has(name) ||
3611
+ lowerer.findMethodOn(owner, `get:${name}`) ||
3612
+ lowerer.findMethodOn(owner, `set:${name}`))) {
3613
+ const receiver = arrayClassReceiver(lowerer, owner, lowerer.lowerExpr(access.expression), access.expression);
3614
+ return classFieldTarget(lowerer, access.expression, { kind: "object", className: owner.def.name }, access.name.text, receiver);
3615
+ }
3616
+ }
3308
3617
  const stored = ts.isIdentifier(access.expression)
3309
3618
  ? (lowerer.peekLocal(access.expression)?.type ?? lowerer.globalOf(access.expression)?.type)
3310
3619
  : undefined;
@@ -3717,9 +4026,13 @@ const GLOBAL_CONSTRUCTOR_VALUES = new Set([
3717
4026
  ]);
3718
4027
  /** The builtin global functions JavaScript sources read as interned
3719
4028
  * function values (the `cond ? setImmediate : process.nextTick` feature
3720
- * probe of bcryptjs and async libraries): typeof answers "function",
3721
- * identity holds across spellings, and calls run the timer APIs. */
4029
+ * probe of bcryptjs and async libraries, and the known globals Node's test
4030
+ * harness collects): typeof answers "function", identity holds across
4031
+ * spellings, and calls run what the direct calls run. */
3722
4032
  const GLOBAL_FUNCTION_VALUES = new Set([
4033
+ "atob",
4034
+ "btoa",
4035
+ "structuredClone",
3723
4036
  "setTimeout",
3724
4037
  "setInterval",
3725
4038
  "setImmediate",
@@ -4056,10 +4369,20 @@ function globalThisWrittenNames(lowerer, globalType) {
4056
4369
  (node.operatorToken.kind === ts.SyntaxKind.EqualsToken ||
4057
4370
  node.operatorToken.kind === ts.SyntaxKind.QuestionQuestionEqualsToken ||
4058
4371
  node.operatorToken.kind === ts.SyntaxKind.BarBarEqualsToken ||
4059
- node.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandEqualsToken) &&
4060
- ts.isPropertyAccessExpression(node.left) &&
4061
- lowerer.typeOf(node.left.expression) === globalType)
4062
- names.add(node.left.name.text);
4372
+ node.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandEqualsToken)) {
4373
+ if (ts.isPropertyAccessExpression(node.left) &&
4374
+ lowerer.typeOf(node.left.expression) === globalType)
4375
+ names.add(node.left.name.text);
4376
+ // A write by computed name may store any name: every read of a
4377
+ // name the program does not declare consults the global object.
4378
+ if (ts.isElementAccessExpression(node.left) &&
4379
+ lowerer.typeOf(node.left.expression) === globalType) {
4380
+ if (ts.isStringLiteralLike(node.left.argumentExpression))
4381
+ names.add(node.left.argumentExpression.text);
4382
+ else
4383
+ lowerer.globalThisComputedWrite = true;
4384
+ }
4385
+ }
4063
4386
  return undefined;
4064
4387
  });
4065
4388
  }