@scriptc/compiler 0.3.5 → 0.4.0

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 (1243) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +960 -82
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +13 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +6 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +41 -4
  16. package/dist/backend/llvm/alloc.js +138 -7
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/alloc.test.js +30 -1
  19. package/dist/backend/llvm/alloc.test.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  21. package/dist/backend/llvm/array-search.test.js +1 -1
  22. package/dist/backend/llvm/blocks.d.ts +8 -0
  23. package/dist/backend/llvm/blocks.js +43 -1
  24. package/dist/backend/llvm/blocks.js.map +1 -1
  25. package/dist/backend/llvm/blocks.test.js +22 -1
  26. package/dist/backend/llvm/blocks.test.js.map +1 -1
  27. package/dist/backend/llvm/byte-numbers.js +15 -5
  28. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  29. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  30. package/dist/backend/llvm/bytes-alias.js +20 -0
  31. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  32. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  33. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  34. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  35. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  36. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  37. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  38. package/dist/backend/llvm/call-lifetimes.js +50 -1
  39. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  40. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  41. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  42. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  43. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  44. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  45. package/dist/backend/llvm/classes.d.ts +11 -0
  46. package/dist/backend/llvm/classes.js +71 -14
  47. package/dist/backend/llvm/classes.js.map +1 -1
  48. package/dist/backend/llvm/classes.test.js +58 -8
  49. package/dist/backend/llvm/classes.test.js.map +1 -1
  50. package/dist/backend/llvm/common.js +1 -0
  51. package/dist/backend/llvm/common.js.map +1 -1
  52. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  53. package/dist/backend/llvm/constant-callbacks.js +55 -12
  54. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  55. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  56. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  57. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  58. package/dist/backend/llvm/counted-loops.js +37 -0
  59. package/dist/backend/llvm/counted-loops.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.d.ts +12 -3
  61. package/dist/backend/llvm/dense-array-access.js +72 -14
  62. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  63. package/dist/backend/llvm/dense-array-access.test.js +59 -3
  64. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  66. package/dist/backend/llvm/dense-array-loops.js +162 -0
  67. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  68. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  69. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  70. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  71. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  72. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  73. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  74. package/dist/backend/llvm/dyn.d.ts +28 -4
  75. package/dist/backend/llvm/dyn.js +324 -179
  76. package/dist/backend/llvm/dyn.js.map +1 -1
  77. package/dist/backend/llvm/emit-function.d.ts +64 -0
  78. package/dist/backend/llvm/emit-function.js +1190 -0
  79. package/dist/backend/llvm/emit-function.js.map +1 -0
  80. package/dist/backend/llvm/emit-module.d.ts +24 -0
  81. package/dist/backend/llvm/emit-module.js +1535 -0
  82. package/dist/backend/llvm/emit-module.js.map +1 -0
  83. package/dist/backend/llvm/emit-statements.d.ts +58 -0
  84. package/dist/backend/llvm/emit-statements.js +1964 -0
  85. package/dist/backend/llvm/emit-statements.js.map +1 -0
  86. package/dist/backend/llvm/emitter.d.ts +576 -268
  87. package/dist/backend/llvm/emitter.js +801 -4447
  88. package/dist/backend/llvm/emitter.js.map +1 -1
  89. package/dist/backend/llvm/emitter.test.js +57 -3
  90. package/dist/backend/llvm/emitter.test.js.map +1 -1
  91. package/dist/backend/llvm/expr-async.js +73 -46
  92. package/dist/backend/llvm/expr-async.js.map +1 -1
  93. package/dist/backend/llvm/expr-async.test.js +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  95. package/dist/backend/llvm/expr-bytes.js +76 -29
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  98. package/dist/backend/llvm/expr-callbacks.js +48 -11
  99. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  100. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  101. package/dist/backend/llvm/expr-calls.js +71 -53
  102. package/dist/backend/llvm/expr-calls.js.map +1 -1
  103. package/dist/backend/llvm/expr-calls.test.js +1 -1
  104. package/dist/backend/llvm/expr-containers.js +39 -15
  105. package/dist/backend/llvm/expr-containers.js.map +1 -1
  106. package/dist/backend/llvm/expr-control.js +16 -16
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dispatch.js +1 -0
  109. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  110. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  111. package/dist/backend/llvm/expr-dynamic.js +92 -63
  112. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  113. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  114. package/dist/backend/llvm/expr-primitives.js +132 -25
  115. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  116. package/dist/backend/llvm/expr-primitives.test.js +2 -2
  117. package/dist/backend/llvm/expr-records.d.ts +1 -1
  118. package/dist/backend/llvm/expr-records.js +32 -11
  119. package/dist/backend/llvm/expr-records.js.map +1 -1
  120. package/dist/backend/llvm/expr-stream-bridges.js +54 -12
  121. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  122. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  123. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  124. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  125. package/dist/backend/llvm/int32-abi.test.js +2 -2
  126. package/dist/backend/llvm/integer-clones.test.js +3 -3
  127. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  128. package/dist/backend/llvm/integer-remainder.js +156 -22
  129. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  130. package/dist/backend/llvm/intern-tables.test.js +1 -1
  131. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  132. package/dist/backend/llvm/jsval-encoding.js +20 -0
  133. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  134. package/dist/backend/llvm/jsval.d.ts +12 -0
  135. package/dist/backend/llvm/jsval.js +488 -0
  136. package/dist/backend/llvm/jsval.js.map +1 -0
  137. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  138. package/dist/backend/llvm/lazy-captures.js +39 -17
  139. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  140. package/dist/backend/llvm/lib-abi.js +1 -1
  141. package/dist/backend/llvm/lib-abi.js.map +1 -1
  142. package/dist/backend/llvm/lib-connect.js +1 -1
  143. package/dist/backend/llvm/lib-connect.js.map +1 -1
  144. package/dist/backend/llvm/lib-datagram.js +14 -8
  145. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  146. package/dist/backend/llvm/lib-dispatch.js +217 -24
  147. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  148. package/dist/backend/llvm/lib-filesystem.js +102 -13
  149. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  150. package/dist/backend/llvm/lib-http2.js +3 -3
  151. package/dist/backend/llvm/lib-http2.js.map +1 -1
  152. package/dist/backend/llvm/lib-lookup.js +2 -2
  153. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  154. package/dist/backend/llvm/lib-network.js +77 -25
  155. package/dist/backend/llvm/lib-network.js.map +1 -1
  156. package/dist/backend/llvm/lib-process.js +100 -50
  157. package/dist/backend/llvm/lib-process.js.map +1 -1
  158. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  159. package/dist/backend/llvm/lib-shared.js +229 -5
  160. package/dist/backend/llvm/lib-shared.js.map +1 -1
  161. package/dist/backend/llvm/lib-stream.js +46 -16
  162. package/dist/backend/llvm/lib-stream.js.map +1 -1
  163. package/dist/backend/llvm/lib-test.js +57 -8
  164. package/dist/backend/llvm/lib-test.js.map +1 -1
  165. package/dist/backend/llvm/lib-tls.js +4 -9
  166. package/dist/backend/llvm/lib-tls.js.map +1 -1
  167. package/dist/backend/llvm/local-array-reads.js +2 -2
  168. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  169. package/dist/backend/llvm/local-extents.d.ts +19 -0
  170. package/dist/backend/llvm/local-extents.js +169 -0
  171. package/dist/backend/llvm/local-extents.js.map +1 -0
  172. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  173. package/dist/backend/llvm/local-extents.test.js +92 -0
  174. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  175. package/dist/backend/llvm/local-union-storage.js +7 -7
  176. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  177. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  178. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  179. package/dist/backend/llvm/map-number-lookup.js +2 -2
  180. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  181. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  182. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  183. package/dist/backend/llvm/narrow-guards.js +151 -0
  184. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  185. package/dist/backend/llvm/nullable-unions.d.ts +70 -9
  186. package/dist/backend/llvm/nullable-unions.js +105 -6
  187. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  188. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  189. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  190. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  191. package/dist/backend/llvm/publish.d.ts +4 -0
  192. package/dist/backend/llvm/publish.js +14 -2
  193. package/dist/backend/llvm/publish.js.map +1 -1
  194. package/dist/backend/llvm/publish.test.js +1 -1
  195. package/dist/backend/llvm/receivers.d.ts +31 -0
  196. package/dist/backend/llvm/receivers.js +395 -0
  197. package/dist/backend/llvm/receivers.js.map +1 -0
  198. package/dist/backend/llvm/record-results.d.ts +13 -2
  199. package/dist/backend/llvm/record-results.js +66 -6
  200. package/dist/backend/llvm/record-results.js.map +1 -1
  201. package/dist/backend/llvm/reference-effects.js +9 -0
  202. package/dist/backend/llvm/reference-effects.js.map +1 -1
  203. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  204. package/dist/backend/llvm/reference-writes.js +143 -6
  205. package/dist/backend/llvm/reference-writes.js.map +1 -1
  206. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  207. package/dist/backend/llvm/reference-writes.test.js +88 -0
  208. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  209. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  210. package/dist/backend/llvm/regex-matchers.js +33 -0
  211. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  212. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  213. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  214. package/dist/backend/llvm/regions.d.ts +1 -1
  215. package/dist/backend/llvm/regions.js +9 -6
  216. package/dist/backend/llvm/regions.js.map +1 -1
  217. package/dist/backend/llvm/regions.test.js +1 -1
  218. package/dist/backend/llvm/shapes.d.ts +69 -43
  219. package/dist/backend/llvm/shapes.js +285 -21
  220. package/dist/backend/llvm/shapes.js.map +1 -1
  221. package/dist/backend/llvm/shapes.test.js +37 -3
  222. package/dist/backend/llvm/shapes.test.js.map +1 -1
  223. package/dist/backend/llvm/speculative-integers.d.ts +74 -0
  224. package/dist/backend/llvm/speculative-integers.js +571 -0
  225. package/dist/backend/llvm/speculative-integers.js.map +1 -0
  226. package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
  227. package/dist/backend/llvm/speculative-integers.test.js +148 -0
  228. package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
  229. package/dist/backend/llvm/split-loops.js +2 -2
  230. package/dist/backend/llvm/split-loops.js.map +1 -1
  231. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  232. package/dist/backend/llvm/stack-objects.js +133 -10
  233. package/dist/backend/llvm/stack-objects.js.map +1 -1
  234. package/dist/backend/llvm/stack-objects.test.js +55 -1
  235. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  236. package/dist/backend/llvm/stack-unions.test.js +1 -1
  237. package/dist/backend/llvm/string-construction.test.js +1 -1
  238. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  239. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  240. package/dist/backend/llvm/string-slices.d.ts +25 -0
  241. package/dist/backend/llvm/string-slices.js +207 -1
  242. package/dist/backend/llvm/string-slices.js.map +1 -1
  243. package/dist/backend/llvm/string-slices.test.js +139 -2
  244. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  245. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  246. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  247. package/dist/backend/llvm/thread-slots.js +142 -0
  248. package/dist/backend/llvm/thread-slots.js.map +1 -0
  249. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  250. package/dist/backend/llvm/thread-slots.test.js +110 -0
  251. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  252. package/dist/backend/llvm/union-repr.d.ts +7 -7
  253. package/dist/backend/llvm/union-repr.js +18 -2
  254. package/dist/backend/llvm/union-repr.js.map +1 -1
  255. package/dist/backend/llvm/union-retype.test.js +17 -3
  256. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  257. package/dist/backend/llvm/walkers.d.ts +2 -2
  258. package/dist/backend/llvm/walkers.js +51 -26
  259. package/dist/backend/llvm/walkers.js.map +1 -1
  260. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  261. package/dist/backend/llvm/wasm-modules.js +66 -0
  262. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  263. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  264. package/dist/backend/llvm/wrapping-sums.js +11 -3
  265. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  266. package/dist/backend/mangle.d.ts +7 -0
  267. package/dist/backend/mangle.js +11 -0
  268. package/dist/backend/mangle.js.map +1 -1
  269. package/dist/backend/may-throw.d.ts +3 -0
  270. package/dist/backend/may-throw.js +6 -2
  271. package/dist/backend/may-throw.js.map +1 -1
  272. package/dist/backend/may-throw.test.js +1 -1
  273. package/dist/backend/native/contracts.d.ts +37 -0
  274. package/dist/backend/native/executable.js +192 -134
  275. package/dist/backend/native/executable.js.map +1 -1
  276. package/dist/backend/native/library.js +1 -0
  277. package/dist/backend/native/library.js.map +1 -1
  278. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  279. package/dist/backend/native/runtime-inputs.js +2 -0
  280. package/dist/backend/native/runtime-inputs.js.map +1 -1
  281. package/dist/backend/native-link-info-core.d.ts +30 -0
  282. package/dist/backend/native-link-info-core.js.map +1 -1
  283. package/dist/backend/publication.test.js +1 -1
  284. package/dist/backend/runtime-pack-core.d.ts +9 -1
  285. package/dist/backend/runtime-pack-core.js +10 -1
  286. package/dist/backend/runtime-pack-core.js.map +1 -1
  287. package/dist/backend/runtime-pack-native.js +1 -1
  288. package/dist/backend/runtime-pack-native.js.map +1 -1
  289. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  290. package/dist/backend/runtime-pack-native.test.js +31 -0
  291. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  292. package/dist/backend/runtime-pack-targets.test.js +5 -0
  293. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  294. package/dist/backend/runtime-pack.d.ts +7 -3
  295. package/dist/backend/runtime-pack.js +12 -6
  296. package/dist/backend/runtime-pack.js.map +1 -1
  297. package/dist/backend/runtime-pack.test.js +20 -6
  298. package/dist/backend/runtime-pack.test.js.map +1 -1
  299. package/dist/backend/stack-observations.d.ts +22 -0
  300. package/dist/backend/stack-observations.js +382 -0
  301. package/dist/backend/stack-observations.js.map +1 -0
  302. package/dist/backend/stack-observations.test.d.ts +1 -0
  303. package/dist/backend/stack-observations.test.js +233 -0
  304. package/dist/backend/stack-observations.test.js.map +1 -0
  305. package/dist/backend/target-diagnostics.js +8 -0
  306. package/dist/backend/target-diagnostics.js.map +1 -1
  307. package/dist/backend/target-diagnostics.test.js +1 -1
  308. package/dist/backend/warm-cache.js +5 -0
  309. package/dist/backend/warm-cache.js.map +1 -1
  310. package/dist/backend/young-nursery.d.ts +7 -0
  311. package/dist/backend/young-nursery.js +10 -0
  312. package/dist/backend/young-nursery.js.map +1 -0
  313. package/dist/cli/command.js +44 -4
  314. package/dist/cli/command.js.map +1 -1
  315. package/dist/cli/usage.d.ts +11 -1
  316. package/dist/cli/usage.js +20 -1
  317. package/dist/cli/usage.js.map +1 -1
  318. package/dist/compat/fetch-profile.js +10 -1
  319. package/dist/compat/fetch-profile.js.map +1 -1
  320. package/dist/compile-types.d.ts +13 -0
  321. package/dist/contracts/check.js +25 -6
  322. package/dist/contracts/check.js.map +1 -1
  323. package/dist/contracts/int32-elements.d.ts +115 -0
  324. package/dist/contracts/int32-elements.js +1179 -0
  325. package/dist/contracts/int32-elements.js.map +1 -0
  326. package/dist/coverage/report.d.ts +16 -0
  327. package/dist/coverage/report.js +182 -1
  328. package/dist/coverage/report.js.map +1 -1
  329. package/dist/coverage/surface-manifest.js +19 -6
  330. package/dist/coverage/surface-manifest.js.map +1 -1
  331. package/dist/coverage/verdict-cache.d.ts +2 -0
  332. package/dist/coverage/verdict-cache.js +12 -0
  333. package/dist/coverage/verdict-cache.js.map +1 -1
  334. package/dist/coverage/verdict-cache.test.js +2 -1
  335. package/dist/coverage/verdict-cache.test.js.map +1 -1
  336. package/dist/diagnostics/diagnostic.d.ts +11 -7
  337. package/dist/diagnostics/diagnostic.js +35 -23
  338. package/dist/diagnostics/diagnostic.js.map +1 -1
  339. package/dist/diagnostics/envelope.d.ts +39 -2
  340. package/dist/diagnostics/envelope.js.map +1 -1
  341. package/dist/diagnostics/render.d.ts +7 -0
  342. package/dist/diagnostics/render.js +50 -13
  343. package/dist/diagnostics/render.js.map +1 -1
  344. package/dist/diagnostics/render.test.d.ts +1 -0
  345. package/dist/diagnostics/render.test.js +49 -0
  346. package/dist/diagnostics/render.test.js.map +1 -0
  347. package/dist/executable/executable-cache.d.ts +17 -0
  348. package/dist/executable/executable-cache.js +13 -1
  349. package/dist/executable/executable-cache.js.map +1 -1
  350. package/dist/executable/executable-cache.test.js +7 -1
  351. package/dist/executable/executable-cache.test.js.map +1 -1
  352. package/dist/executable/prepare.js +2 -1
  353. package/dist/executable/prepare.js.map +1 -1
  354. package/dist/frontend/analysis.js +6 -1
  355. package/dist/frontend/analysis.js.map +1 -1
  356. package/dist/frontend/builtin-modules.d.ts +16 -2
  357. package/dist/frontend/builtin-modules.js +40 -7
  358. package/dist/frontend/builtin-modules.js.map +1 -1
  359. package/dist/frontend/cjs-syntax.js +52 -51
  360. package/dist/frontend/cjs-syntax.js.map +1 -1
  361. package/dist/frontend/contract-types.d.ts +3 -0
  362. package/dist/frontend/contract-types.js +36 -7
  363. package/dist/frontend/contract-types.js.map +1 -1
  364. package/dist/frontend/experimental-import.d.ts +5 -1
  365. package/dist/frontend/experimental-import.js +26 -7
  366. package/dist/frontend/experimental-import.js.map +1 -1
  367. package/dist/frontend/fork-target.js +20 -22
  368. package/dist/frontend/fork-target.js.map +1 -1
  369. package/dist/frontend/fork-target.test.js +2 -1
  370. package/dist/frontend/fork-target.test.js.map +1 -1
  371. package/dist/frontend/function-completion.js +6 -6
  372. package/dist/frontend/function-completion.js.map +1 -1
  373. package/dist/frontend/helper-tokens.js +15 -3
  374. package/dist/frontend/helper-tokens.js.map +1 -1
  375. package/dist/frontend/helper-tokens.test.js +7 -1
  376. package/dist/frontend/helper-tokens.test.js.map +1 -1
  377. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  378. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  379. package/dist/frontend/input-tracker.d.ts +3 -0
  380. package/dist/frontend/input-tracker.js +32 -3
  381. package/dist/frontend/input-tracker.js.map +1 -1
  382. package/dist/frontend/lib-contract.js +36 -32
  383. package/dist/frontend/lib-contract.js.map +1 -1
  384. package/dist/frontend/lib-exports.js +3 -3
  385. package/dist/frontend/lib-exports.js.map +1 -1
  386. package/dist/frontend/lowering/array-values.d.ts +8 -3
  387. package/dist/frontend/lowering/array-values.js +60 -11
  388. package/dist/frontend/lowering/array-values.js.map +1 -1
  389. package/dist/frontend/lowering/assert-instances.js +4 -4
  390. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  391. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  392. package/dist/frontend/lowering/assertion-identity.js +70 -0
  393. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  394. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  395. package/dist/frontend/lowering/assertion-members.js +185 -0
  396. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  397. package/dist/frontend/lowering/binding-analysis.js +27 -20
  398. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  399. package/dist/frontend/lowering/builtin-calls.js +72 -4
  400. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  401. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  402. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  403. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  404. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  405. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  406. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  407. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  408. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  409. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  410. package/dist/frontend/lowering/builtins/blob.js +8 -6
  411. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  412. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
  413. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
  414. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  415. package/dist/frontend/lowering/builtins/callable-aliases.js +45 -6
  416. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  417. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  418. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  419. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  420. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  421. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  422. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  423. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  424. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  425. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  426. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  428. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  429. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  430. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  431. package/dist/frontend/lowering/builtins/compression.js +230 -52
  432. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  433. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  434. package/dist/frontend/lowering/builtins/constants.js +28 -7
  435. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  436. package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
  437. package/dist/frontend/lowering/builtins/crypto.js +223 -38
  438. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  439. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  440. package/dist/frontend/lowering/builtins/dates.js +92 -16
  441. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  442. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  443. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  444. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  445. package/dist/frontend/lowering/builtins/environment.js +3 -3
  446. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  447. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  448. package/dist/frontend/lowering/builtins/errors.js +174 -6
  449. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  450. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +4 -0
  451. package/dist/frontend/lowering/builtins/filesystem-calls.js +136 -113
  452. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  453. package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
  454. package/dist/frontend/lowering/builtins/filesystem.js +213 -76
  455. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  457. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  459. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
  461. package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
  462. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  464. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  465. package/dist/frontend/lowering/builtins/json.js +232 -24
  466. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  468. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  470. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  471. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/module-calls.js +67 -46
  473. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  475. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  476. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  478. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  479. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  481. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  482. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  483. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  484. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  485. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  486. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  487. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  488. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  489. package/dist/frontend/lowering/builtins/performance.js +259 -8
  490. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  491. package/dist/frontend/lowering/builtins/process.d.ts +32 -1
  492. package/dist/frontend/lowering/builtins/process.js +468 -99
  493. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  494. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  495. package/dist/frontend/lowering/builtins/promises.js +326 -43
  496. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  497. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
  498. package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
  499. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  500. package/dist/frontend/lowering/builtins/properties.js +37 -1
  501. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  502. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  503. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  504. package/dist/frontend/lowering/builtins/readline.d.ts +55 -13
  505. package/dist/frontend/lowering/builtins/readline.js +931 -69
  506. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  508. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/reflection.js +16 -14
  510. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  512. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  513. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  514. package/dist/frontend/lowering/builtins/strings.js +101 -12
  515. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  516. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  517. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  518. package/dist/frontend/lowering/builtins/timers.js +75 -30
  519. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  521. package/dist/frontend/lowering/builtins/url.js +120 -17
  522. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  523. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  524. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  526. package/dist/frontend/lowering/builtins/v8.js +105 -0
  527. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  529. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  530. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  532. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  533. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  534. package/dist/frontend/lowering/builtins/workers.d.ts +16 -0
  535. package/dist/frontend/lowering/builtins/workers.js +246 -3
  536. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  537. package/dist/frontend/lowering/call-arguments.js +69 -14
  538. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  539. package/dist/frontend/lowering/call-signatures.d.ts +19 -1
  540. package/dist/frontend/lowering/call-signatures.js +254 -47
  541. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  542. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  543. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  544. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  545. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  546. package/dist/frontend/lowering/cjs-exports-object.js +528 -0
  547. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  548. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  549. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  550. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  551. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  552. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  553. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  554. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  555. package/dist/frontend/lowering/class-attributes.js +378 -0
  556. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  557. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  558. package/dist/frontend/lowering/class-callbacks.js +21 -10
  559. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  560. package/dist/frontend/lowering/class-construction.js +49 -4
  561. package/dist/frontend/lowering/class-construction.js.map +1 -1
  562. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  563. package/dist/frontend/lowering/class-descriptors.js +8 -8
  564. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  565. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  566. package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
  567. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  568. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  569. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  570. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  571. package/dist/frontend/lowering/class-iterables.js +31 -0
  572. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  573. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  574. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  575. package/dist/frontend/lowering/class-method-values.js +56 -10
  576. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  577. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  578. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  579. package/dist/frontend/lowering/class-protocols.d.ts +55 -0
  580. package/dist/frontend/lowering/class-protocols.js +738 -22
  581. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  582. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  583. package/dist/frontend/lowering/class-prototypes.js +80 -18
  584. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  585. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  586. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  587. package/dist/frontend/lowering/class-static-data.js +2 -2
  588. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  589. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  590. package/dist/frontend/lowering/class-to-primitive.js +261 -0
  591. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  592. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  593. package/dist/frontend/lowering/class-unions.js +102 -1
  594. package/dist/frontend/lowering/class-unions.js.map +1 -1
  595. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  596. package/dist/frontend/lowering/code-generation.js +127 -0
  597. package/dist/frontend/lowering/code-generation.js.map +1 -0
  598. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  599. package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
  600. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  601. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  602. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  603. package/dist/frontend/lowering/coercions/structural.js +35 -3
  604. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  605. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  606. package/dist/frontend/lowering/coercions/unions.js +57 -1
  607. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  608. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  609. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  610. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  611. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  612. package/dist/frontend/lowering/construction-escapes.js +8 -8
  613. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  614. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  615. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  616. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  617. package/dist/frontend/lowering/constructor-returns.js +477 -0
  618. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  619. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  620. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  621. package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
  622. package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
  623. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  624. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  625. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  626. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  627. package/dist/frontend/lowering/containers/array-construction.js +51 -13
  628. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  629. package/dist/frontend/lowering/containers/array-from-async.d.ts +19 -0
  630. package/dist/frontend/lowering/containers/array-from-async.js +427 -0
  631. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
  632. package/dist/frontend/lowering/containers/array-methods.js +89 -77
  633. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  634. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  635. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  636. package/dist/frontend/lowering/containers/bytes.js +161 -101
  637. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  638. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  639. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  640. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  641. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  642. package/dist/frontend/lowering/containers/collection-grouping.js +219 -27
  643. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  644. package/dist/frontend/lowering/containers/collection-methods.js +81 -48
  645. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  646. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  647. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  648. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  649. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  650. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  651. package/dist/frontend/lowering/containers/for-of.js +19 -19
  652. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  653. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  654. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  655. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  656. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  657. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  658. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  659. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  660. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  661. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  662. package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
  663. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  664. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  665. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  666. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
  667. package/dist/frontend/lowering/cycle-initialization.js +39 -0
  668. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  669. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  670. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  671. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  672. package/dist/frontend/lowering/devirtualize.js +27 -7
  673. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  674. package/dist/frontend/lowering/divergences.d.ts +0 -5
  675. package/dist/frontend/lowering/divergences.js +238 -128
  676. package/dist/frontend/lowering/divergences.js.map +1 -1
  677. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  678. package/dist/frontend/lowering/dyn-streams.js +257 -0
  679. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  680. package/dist/frontend/lowering/error-methods.js +4 -1
  681. package/dist/frontend/lowering/error-methods.js.map +1 -1
  682. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  683. package/dist/frontend/lowering/error-name-order.js +93 -0
  684. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  685. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  686. package/dist/frontend/lowering/expressions/array-literals.js +703 -0
  687. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  688. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  689. package/dist/frontend/lowering/expressions/binary.js +2483 -0
  690. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  691. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  692. package/dist/frontend/lowering/expressions/element-access.js +1797 -0
  693. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  694. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  695. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  696. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  697. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  698. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  699. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  700. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  701. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  702. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
  703. package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
  704. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  705. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  706. package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
  707. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  708. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  709. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  710. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  711. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  712. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  713. package/dist/frontend/lowering/expressions/object-literals.js +253 -85
  714. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  715. package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
  716. package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
  717. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  718. package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
  719. package/dist/frontend/lowering/expressions/property-access.js +3544 -0
  720. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  721. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  722. package/dist/frontend/lowering/expressions/relational.js +1679 -0
  723. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  724. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  725. package/dist/frontend/lowering/expressions/typeof.js +538 -0
  726. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  727. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  728. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  729. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  730. package/dist/frontend/lowering/expressions/updates.js +780 -0
  731. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  732. package/dist/frontend/lowering/function-context.d.ts +10 -0
  733. package/dist/frontend/lowering/function-context.js +11 -1
  734. package/dist/frontend/lowering/function-context.js.map +1 -1
  735. package/dist/frontend/lowering/function-returns.js +52 -28
  736. package/dist/frontend/lowering/function-returns.js.map +1 -1
  737. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  738. package/dist/frontend/lowering/general-streams.js +108 -0
  739. package/dist/frontend/lowering/general-streams.js.map +1 -0
  740. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  741. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  742. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  743. package/dist/frontend/lowering/generic-functions.d.ts +39 -0
  744. package/dist/frontend/lowering/generic-functions.js +393 -75
  745. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  746. package/dist/frontend/lowering/import-meta.js +2 -2
  747. package/dist/frontend/lowering/import-meta.js.map +1 -1
  748. package/dist/frontend/lowering/intern-tables.js +10 -9
  749. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  750. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  751. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  752. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  753. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  754. package/dist/frontend/lowering/js-class-fields.js +170 -0
  755. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  756. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  757. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  758. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  759. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  760. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  761. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  762. package/dist/frontend/lowering/json-require.d.ts +22 -0
  763. package/dist/frontend/lowering/json-require.js +131 -0
  764. package/dist/frontend/lowering/json-require.js.map +1 -0
  765. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  766. package/dist/frontend/lowering/key-order-witness.js +641 -0
  767. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  768. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  769. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  770. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  771. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  772. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  773. package/dist/frontend/lowering/lower-assert.js +61 -60
  774. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  775. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  776. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  777. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  778. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  779. package/dist/frontend/lowering/lower-builtin-values.js +32 -3
  780. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  781. package/dist/frontend/lowering/lower-calls.js +1298 -452
  782. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  783. package/dist/frontend/lowering/lower-classes.d.ts +50 -3
  784. package/dist/frontend/lowering/lower-classes.js +1499 -456
  785. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  786. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  787. package/dist/frontend/lowering/lower-comptime.js +111 -13
  788. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  789. package/dist/frontend/lowering/lower-console.js +13 -11
  790. package/dist/frontend/lowering/lower-console.js.map +1 -1
  791. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  792. package/dist/frontend/lowering/lower-dgram.js +179 -8
  793. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  794. package/dist/frontend/lowering/lower-enums.js +113 -14
  795. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  796. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  797. package/dist/frontend/lowering/lower-event-emitter.js +268 -71
  798. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  799. package/dist/frontend/lowering/lower-event-target.js +2 -2
  800. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  801. package/dist/frontend/lowering/lower-expando.js +17 -13
  802. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  803. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  804. package/dist/frontend/lowering/lower-exprs.js +1493 -12407
  805. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  806. package/dist/frontend/lowering/lower-functions.js +68 -22
  807. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  808. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  809. package/dist/frontend/lowering/lower-generators.js +29 -16
  810. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  811. package/dist/frontend/lowering/lower-global-value.js +5 -1
  812. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  813. package/dist/frontend/lowering/lower-inspect.js +354 -99
  814. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  815. package/dist/frontend/lowering/lower-mixins.js +23 -20
  816. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  817. package/dist/frontend/lowering/lower-mock.d.ts +19 -2
  818. package/dist/frontend/lowering/lower-mock.js +557 -74
  819. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  820. package/dist/frontend/lowering/lower-modules.js +268 -61
  821. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  822. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  823. package/dist/frontend/lowering/lower-namespaces.js +45 -33
  824. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  825. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  826. package/dist/frontend/lowering/lower-node-module.js +147 -14
  827. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  828. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  829. package/dist/frontend/lowering/lower-server.js +638 -105
  830. package/dist/frontend/lowering/lower-server.js.map +1 -1
  831. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  832. package/dist/frontend/lowering/lower-stdlib.js +151 -109
  833. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  834. package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
  835. package/dist/frontend/lowering/lower-stmts.js +1589 -398
  836. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  837. package/dist/frontend/lowering/lower-stream.d.ts +4 -3
  838. package/dist/frontend/lowering/lower-stream.js +714 -75
  839. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  840. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  841. package/dist/frontend/lowering/lower-test.js +574 -100
  842. package/dist/frontend/lowering/lower-test.js.map +1 -1
  843. package/dist/frontend/lowering/lower-timers.js +80 -32
  844. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  845. package/dist/frontend/lowering/lower-url.js +1 -1
  846. package/dist/frontend/lowering/lower-url.js.map +1 -1
  847. package/dist/frontend/lowering/lowerer.d.ts +409 -26
  848. package/dist/frontend/lowering/lowerer.js +1918 -305
  849. package/dist/frontend/lowering/lowerer.js.map +1 -1
  850. package/dist/frontend/lowering/lowerer.test.js +10 -4
  851. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  852. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  853. package/dist/frontend/lowering/maybe-promise.js +249 -0
  854. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  855. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  856. package/dist/frontend/lowering/module-member-this.js +262 -0
  857. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  858. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  859. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  860. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  861. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  862. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  863. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  864. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  865. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  866. package/dist/frontend/lowering/native-ffi.js +11 -11
  867. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  868. package/dist/frontend/lowering/null-prototype.d.ts +13 -0
  869. package/dist/frontend/lowering/null-prototype.js +33 -0
  870. package/dist/frontend/lowering/null-prototype.js.map +1 -0
  871. package/dist/frontend/lowering/object-factory-new.js +6 -8
  872. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  873. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  874. package/dist/frontend/lowering/private-brands.js +265 -0
  875. package/dist/frontend/lowering/private-brands.js.map +1 -0
  876. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  877. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  878. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  879. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  880. package/dist/frontend/lowering/require-initialization.js +246 -0
  881. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  882. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  883. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  884. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  885. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  886. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  887. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  888. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  889. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  890. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  891. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  892. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  893. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  894. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  895. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  896. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  897. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  898. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  899. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  900. package/dist/frontend/lowering/split-consumers.js +4 -4
  901. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  902. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  903. package/dist/frontend/lowering/static-function-names.js +212 -0
  904. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  905. package/dist/frontend/lowering/static-this.js +6 -6
  906. package/dist/frontend/lowering/static-this.js.map +1 -1
  907. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  908. package/dist/frontend/lowering/strict-mode.js +31 -0
  909. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  910. package/dist/frontend/lowering/string-index-bounds.js +10 -10
  911. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  912. package/dist/frontend/lowering/string-index.d.ts +12 -0
  913. package/dist/frontend/lowering/string-index.js +72 -1
  914. package/dist/frontend/lowering/string-index.js.map +1 -1
  915. package/dist/frontend/lowering/surfaces.d.ts +15 -6
  916. package/dist/frontend/lowering/surfaces.js +278 -45
  917. package/dist/frontend/lowering/surfaces.js.map +1 -1
  918. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  919. package/dist/frontend/lowering/symbol-fields.js +204 -36
  920. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  921. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  922. package/dist/frontend/lowering/symbol-methods.js +24 -6
  923. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  924. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  925. package/dist/frontend/lowering/thread-slots.js +208 -0
  926. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  927. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  928. package/dist/frontend/lowering/typed-arguments.js +472 -0
  929. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  930. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  931. package/dist/frontend/lowering/union-retag.js +27 -0
  932. package/dist/frontend/lowering/union-retag.js.map +1 -1
  933. package/dist/frontend/lowering/union-retag.test.js +24 -1
  934. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  935. package/dist/frontend/lowering/var-hoisting.js +6 -6
  936. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  937. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  938. package/dist/frontend/mock-shapes.d.ts +5 -0
  939. package/dist/frontend/mock-shapes.js +39 -7
  940. package/dist/frontend/mock-shapes.js.map +1 -1
  941. package/dist/frontend/module-source-candidates.js +1 -1
  942. package/dist/frontend/module-source-candidates.js.map +1 -1
  943. package/dist/frontend/module-source-candidates.test.js +2 -1
  944. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  945. package/dist/frontend/module-syntax.js +8 -8
  946. package/dist/frontend/module-syntax.js.map +1 -1
  947. package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
  948. package/dist/frontend/npm-static-bundled-chunks.js +810 -0
  949. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  950. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  951. package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
  952. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  953. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  954. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  955. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  956. package/dist/frontend/npm-static-bundled-esm.js +768 -0
  957. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  958. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  959. package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
  960. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  961. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  962. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  963. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  964. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  965. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  966. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  967. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  968. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  969. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  970. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  971. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  972. package/dist/frontend/npm-static-prune.js +36 -24
  973. package/dist/frontend/npm-static-prune.js.map +1 -1
  974. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  975. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  976. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  977. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  978. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  979. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  980. package/dist/frontend/npm-static-subtyping.js +7 -9
  981. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  982. package/dist/frontend/npm-static.d.ts +17 -1
  983. package/dist/frontend/npm-static.js +167 -16
  984. package/dist/frontend/npm-static.js.map +1 -1
  985. package/dist/frontend/npm-static.test.js +22 -1
  986. package/dist/frontend/npm-static.test.js.map +1 -1
  987. package/dist/frontend/pipeline.js +164 -26
  988. package/dist/frontend/pipeline.js.map +1 -1
  989. package/dist/frontend/pipeline.test.js +22 -1
  990. package/dist/frontend/pipeline.test.js.map +1 -1
  991. package/dist/frontend/program-analysis.d.ts +6 -1
  992. package/dist/frontend/program-analysis.js +7 -0
  993. package/dist/frontend/program-analysis.js.map +1 -1
  994. package/dist/frontend/program.d.ts +92 -2
  995. package/dist/frontend/program.js +1557 -254
  996. package/dist/frontend/program.js.map +1 -1
  997. package/dist/frontend/program.test.js +76 -6
  998. package/dist/frontend/program.test.js.map +1 -1
  999. package/dist/frontend/resolve.js +36 -2
  1000. package/dist/frontend/resolve.js.map +1 -1
  1001. package/dist/frontend/resolve.test.js +49 -0
  1002. package/dist/frontend/resolve.test.js.map +1 -1
  1003. package/dist/frontend/services.d.ts +20 -1
  1004. package/dist/frontend/services.js +40 -3
  1005. package/dist/frontend/services.js.map +1 -1
  1006. package/dist/frontend/services.test.js +2 -1
  1007. package/dist/frontend/services.test.js.map +1 -1
  1008. package/dist/frontend/threads-import.js +1 -1
  1009. package/dist/frontend/threads-import.js.map +1 -1
  1010. package/dist/frontend/tier-analysis.d.ts +71 -0
  1011. package/dist/frontend/tier-analysis.js +522 -0
  1012. package/dist/frontend/tier-analysis.js.map +1 -0
  1013. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1014. package/dist/frontend/ts7/api-conformance.js +7 -0
  1015. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1016. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1017. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1018. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1019. package/dist/frontend/ts7/ast-node.js +64 -18
  1020. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1021. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1022. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1023. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1024. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1025. package/dist/frontend/ts7/ast.d.ts +1 -0
  1026. package/dist/frontend/ts7/ast.js +3 -2
  1027. package/dist/frontend/ts7/ast.js.map +1 -1
  1028. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1029. package/dist/frontend/ts7/checker-backend.js +88 -0
  1030. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1031. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1032. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1033. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1034. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1035. package/dist/frontend/ts7/checker-cache.js +0 -6
  1036. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1037. package/dist/frontend/ts7/checker.d.ts +18 -11
  1038. package/dist/frontend/ts7/checker.js +42 -55
  1039. package/dist/frontend/ts7/checker.js.map +1 -1
  1040. package/dist/frontend/ts7/checker.test.js +10 -7
  1041. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1042. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1043. package/dist/frontend/ts7/diagnostic.js +22 -0
  1044. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1045. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1046. package/dist/frontend/ts7/node-functions.js +18 -0
  1047. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1048. package/dist/frontend/ts7/program-host.d.ts +5 -1
  1049. package/dist/frontend/ts7/program-host.js +12 -0
  1050. package/dist/frontend/ts7/program-host.js.map +1 -1
  1051. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1052. package/dist/frontend/ts7/rpc-api.js +8 -1
  1053. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1054. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1055. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1056. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1057. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1058. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1059. package/dist/frontend/ts7/semantic-model.d.ts +54 -24
  1060. package/dist/frontend/ts7/semantic-model.js +88 -16
  1061. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1062. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1063. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1064. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1065. package/dist/frontend/ts7/semantic-types.js +1 -1
  1066. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1067. package/dist/frontend/ts7/session.d.ts +11 -11
  1068. package/dist/frontend/ts7/session.js +8 -5
  1069. package/dist/frontend/ts7/session.js.map +1 -1
  1070. package/dist/frontend/ts7/session.test.js +9 -5
  1071. package/dist/frontend/ts7/session.test.js.map +1 -1
  1072. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1073. package/dist/frontend/ts7/source-parser.js +24 -3
  1074. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1075. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1076. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1077. package/dist/frontend/type-mapper.d.ts +122 -2
  1078. package/dist/frontend/type-mapper.js +2612 -695
  1079. package/dist/frontend/type-mapper.js.map +1 -1
  1080. package/dist/frontend/type-only-imports.d.ts +28 -0
  1081. package/dist/frontend/type-only-imports.js +122 -0
  1082. package/dist/frontend/type-only-imports.js.map +1 -0
  1083. package/dist/frontend/worker-target.js +8 -8
  1084. package/dist/frontend/worker-target.js.map +1 -1
  1085. package/dist/index.d.ts +3 -1
  1086. package/dist/index.js +47 -10
  1087. package/dist/index.js.map +1 -1
  1088. package/dist/ir/analysis.js +4 -2
  1089. package/dist/ir/analysis.js.map +1 -1
  1090. package/dist/ir/api.d.ts +1 -1
  1091. package/dist/ir/api.js +1 -1
  1092. package/dist/ir/api.js.map +1 -1
  1093. package/dist/ir/array-length-stability.d.ts +30 -0
  1094. package/dist/ir/array-length-stability.js +236 -0
  1095. package/dist/ir/array-length-stability.js.map +1 -0
  1096. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1097. package/dist/ir/array-length-stability.test.js +113 -0
  1098. package/dist/ir/array-length-stability.test.js.map +1 -0
  1099. package/dist/ir/build.d.ts +2 -2
  1100. package/dist/ir/build.js +1 -1
  1101. package/dist/ir/build.js.map +1 -1
  1102. package/dist/ir/builtin-effects.js +139 -0
  1103. package/dist/ir/builtin-effects.js.map +1 -1
  1104. package/dist/ir/builtin-signatures.d.ts +1 -1
  1105. package/dist/ir/builtin-signatures.js +655 -25
  1106. package/dist/ir/builtin-signatures.js.map +1 -1
  1107. package/dist/ir/byte-numbers.js +3 -0
  1108. package/dist/ir/byte-numbers.js.map +1 -1
  1109. package/dist/ir/callback-specialization.d.ts +37 -0
  1110. package/dist/ir/callback-specialization.js +459 -0
  1111. package/dist/ir/callback-specialization.js.map +1 -0
  1112. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1113. package/dist/ir/callback-specialization.test.js +208 -0
  1114. package/dist/ir/callback-specialization.test.js.map +1 -0
  1115. package/dist/ir/capture-values.d.ts +0 -1
  1116. package/dist/ir/capture-values.js +51 -40
  1117. package/dist/ir/capture-values.js.map +1 -1
  1118. package/dist/ir/constant-globals.test.js +1 -1
  1119. package/dist/ir/constant-tables.test.js +1 -1
  1120. package/dist/ir/field-values.test.js +1 -1
  1121. package/dist/ir/final-fields.test.js +1 -1
  1122. package/dist/ir/function-references.test.js +10 -1
  1123. package/dist/ir/function-references.test.js.map +1 -1
  1124. package/dist/ir/init-only-globals.test.js +1 -1
  1125. package/dist/ir/initializer-bindings.test.js +1 -1
  1126. package/dist/ir/int32-slots.d.ts +14 -0
  1127. package/dist/ir/int32-slots.js +119 -14
  1128. package/dist/ir/int32-slots.js.map +1 -1
  1129. package/dist/ir/int32-slots.test.js +29 -1
  1130. package/dist/ir/int32-slots.test.js.map +1 -1
  1131. package/dist/ir/integer-loop-facts.d.ts +16 -6
  1132. package/dist/ir/integer-loop-facts.js +143 -38
  1133. package/dist/ir/integer-loop-facts.js.map +1 -1
  1134. package/dist/ir/integer-loops.d.ts +1 -1
  1135. package/dist/ir/integer-loops.js +39 -9
  1136. package/dist/ir/integer-loops.js.map +1 -1
  1137. package/dist/ir/integer-loops.test.js +104 -0
  1138. package/dist/ir/integer-loops.test.js.map +1 -1
  1139. package/dist/ir/integer-ranges.d.ts +3 -0
  1140. package/dist/ir/integer-ranges.js +4 -6
  1141. package/dist/ir/integer-ranges.js.map +1 -1
  1142. package/dist/ir/integer-ranges.test.js +142 -1
  1143. package/dist/ir/integer-ranges.test.js.map +1 -1
  1144. package/dist/ir/intrinsic-signatures.js +6 -0
  1145. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1146. package/dist/ir/ir.d.ts +234 -58
  1147. package/dist/ir/ir.js +123 -12
  1148. package/dist/ir/ir.js.map +1 -1
  1149. package/dist/ir/ir.test.js +10 -0
  1150. package/dist/ir/ir.test.js.map +1 -1
  1151. package/dist/ir/jsval.d.ts +8 -0
  1152. package/dist/ir/jsval.js +365 -0
  1153. package/dist/ir/jsval.js.map +1 -0
  1154. package/dist/ir/jsval.test.d.ts +1 -0
  1155. package/dist/ir/jsval.test.js +239 -0
  1156. package/dist/ir/jsval.test.js.map +1 -0
  1157. package/dist/ir/runtime-features.d.ts +150 -33
  1158. package/dist/ir/runtime-features.js +672 -339
  1159. package/dist/ir/runtime-features.js.map +1 -1
  1160. package/dist/ir/runtime-features.test.js +62 -0
  1161. package/dist/ir/runtime-features.test.js.map +1 -1
  1162. package/dist/ir/scalar-records.test.js +1 -1
  1163. package/dist/ir/self-captures.d.ts +33 -0
  1164. package/dist/ir/self-captures.js +245 -0
  1165. package/dist/ir/self-captures.js.map +1 -0
  1166. package/dist/ir/self-captures.test.d.ts +1 -0
  1167. package/dist/ir/self-captures.test.js +135 -0
  1168. package/dist/ir/self-captures.test.js.map +1 -0
  1169. package/dist/ir/serialize.d.ts +1 -1
  1170. package/dist/ir/serialize.js +7 -4
  1171. package/dist/ir/serialize.js.map +1 -1
  1172. package/dist/ir/tiers.d.ts +26 -0
  1173. package/dist/ir/tiers.js +101 -0
  1174. package/dist/ir/tiers.js.map +1 -0
  1175. package/dist/ir/tiers.test.d.ts +1 -0
  1176. package/dist/ir/tiers.test.js +140 -0
  1177. package/dist/ir/tiers.test.js.map +1 -0
  1178. package/dist/ir/traverse.js +107 -94
  1179. package/dist/ir/traverse.js.map +1 -1
  1180. package/dist/ir/traverse.test.js +33 -30
  1181. package/dist/ir/traverse.test.js.map +1 -1
  1182. package/dist/ir/unshare.js +65 -3
  1183. package/dist/ir/unshare.js.map +1 -1
  1184. package/dist/ir/unshare.test.js +1 -1
  1185. package/dist/ir/validate.js +220 -71
  1186. package/dist/ir/validate.js.map +1 -1
  1187. package/dist/ir/validate.test.js +64 -9
  1188. package/dist/ir/validate.test.js.map +1 -1
  1189. package/dist/library/fence-eval.test.js +1 -1
  1190. package/dist/library/int-infer.test.js +4 -4
  1191. package/dist/library/ir-policy.js +18 -0
  1192. package/dist/library/ir-policy.js.map +1 -1
  1193. package/dist/library/library-cache.d.ts +1 -0
  1194. package/dist/library/library-cache.js.map +1 -1
  1195. package/dist/library/library-cache.test.js +5 -5
  1196. package/dist/library/library-profile.d.ts +4 -4
  1197. package/dist/library/library-profile.js +35 -7
  1198. package/dist/library/library-profile.js.map +1 -1
  1199. package/dist/library/prepare.js +13 -1
  1200. package/dist/library/prepare.js.map +1 -1
  1201. package/dist/native/cli.js +5 -0
  1202. package/dist/native/cli.js.map +1 -1
  1203. package/dist/native/compiler.js +2 -2
  1204. package/dist/native/compiler.js.map +1 -1
  1205. package/dist/native/compiler.test.js +2 -2
  1206. package/dist/native/prepare.js +7 -0
  1207. package/dist/native/prepare.js.map +1 -1
  1208. package/dist/native/sanitizer.test.js +12 -0
  1209. package/dist/native/sanitizer.test.js.map +1 -1
  1210. package/dist/native/toolchain.d.ts +2 -0
  1211. package/dist/native/toolchain.js +10 -1
  1212. package/dist/native/toolchain.js.map +1 -1
  1213. package/dist/native/toolchain.test.js +39 -1
  1214. package/dist/native/toolchain.test.js.map +1 -1
  1215. package/dist/startup-cache.d.ts +1 -0
  1216. package/dist/startup-cache.js +1 -0
  1217. package/dist/startup-cache.js.map +1 -1
  1218. package/dist/wasm/base64.d.ts +5 -0
  1219. package/dist/wasm/base64.js +62 -0
  1220. package/dist/wasm/base64.js.map +1 -0
  1221. package/dist/wasm/binary.d.ts +36 -0
  1222. package/dist/wasm/binary.js +1976 -0
  1223. package/dist/wasm/binary.js.map +1 -0
  1224. package/dist/wasm/binary.test.d.ts +1 -0
  1225. package/dist/wasm/binary.test.js +190 -0
  1226. package/dist/wasm/binary.test.js.map +1 -0
  1227. package/dist/wasm/discover.d.ts +38 -0
  1228. package/dist/wasm/discover.js +377 -0
  1229. package/dist/wasm/discover.js.map +1 -0
  1230. package/dist/wasm/discover.test.d.ts +1 -0
  1231. package/dist/wasm/discover.test.js +24 -0
  1232. package/dist/wasm/discover.test.js.map +1 -0
  1233. package/dist/wasm/module.d.ts +151 -0
  1234. package/dist/wasm/module.js +575 -0
  1235. package/dist/wasm/module.js.map +1 -0
  1236. package/dist/wasm/translate.d.ts +48 -0
  1237. package/dist/wasm/translate.js +2129 -0
  1238. package/dist/wasm/translate.js.map +1 -0
  1239. package/dist/wasm/translate.test.d.ts +1 -0
  1240. package/dist/wasm/translate.test.js +207 -0
  1241. package/dist/wasm/translate.test.js.map +1 -0
  1242. package/package.json +21 -20
  1243. package/surface-manifest.json +332 -36
@@ -1,7 +1,9 @@
1
+ import { stdinKeypressListener } from "./readline.js";
1
2
  import { envSnapshotHelper, lowerProcessLoadEnvFile } from "./environment.js";
2
3
  import { dynUndefinedExpr, boolLit, numLit, strLit, varRef } from "../../../ir/build.js";
3
4
  import { timerStyleCallback } from "../lower-timers.js";
4
5
  import * as ts from "../../ts7/adapter.js";
6
+ import { requestGeneralStreamSurface } from "../general-streams.js";
5
7
  import { own } from "../lowerer.js";
6
8
  import { isJsSourceFile, locOf } from "../../program.js";
7
9
  import { isSafeToDiscard } from "../expressions/evaluation-safety.js";
@@ -9,8 +11,150 @@ import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "../opti
9
11
  import { voidizedCallback } from "../lower-server.js";
10
12
  import { BOOL, BYTES_U8, DYN, F64, PROCSTREAM_T, STRING, UNDEFINED_T, VOID, arrayOf, canBoxFuncIntoDyn, funcOf, } from "../../../ir/ir.js";
11
13
  import { lowerBuiltinLoaderValue } from "../lower-builtin-values.js";
14
+ import { builtinFunctionValue } from "../lower-exprs.js";
15
+ import { canonicalBuiltinModule } from "../../builtin-modules.js";
12
16
  import { lowerProcessIpcSend, ipcMessageListener, ipcDisconnectListener } from "./ipc.js";
13
17
  import { lowerDiagnosticsSubscriber, lowerTracingArguments } from "./async-context.js";
18
+ /** Whether the process has an IPC channel, Node's test for defining
19
+ * process.send and process.disconnect: a channel this fork child opened
20
+ * (programs with fork targets only), or a non-empty NODE_CHANNEL_FD from a
21
+ * Node.js parent, the variable Node itself tests at startup. Built from the
22
+ * existing environment read, so the presence test links no runtime code. */
23
+ export function processHasIpc(lowerer, loc) {
24
+ const envT = lowerer.envValueType();
25
+ const unionId = envT.unionId;
26
+ const stringTag = lowerer.armTag(unionId, STRING);
27
+ const value = lowerer.declareHiddenLocal("%channelFd", envT);
28
+ const fromNode = {
29
+ kind: "seqExpr",
30
+ stmts: [
31
+ {
32
+ kind: "varDecl",
33
+ localId: value.id,
34
+ init: {
35
+ kind: "libCall",
36
+ fn: "process.envGet",
37
+ args: [strLit("NODE_CHANNEL_FD", loc)],
38
+ type: envT,
39
+ loc,
40
+ },
41
+ loc,
42
+ },
43
+ ],
44
+ result: {
45
+ kind: "logical",
46
+ op: "&&",
47
+ left: {
48
+ kind: "unionIsTag",
49
+ unionId,
50
+ tag: stringTag,
51
+ negated: false,
52
+ value: varRef(value.id, envT, loc),
53
+ type: BOOL,
54
+ loc,
55
+ },
56
+ right: {
57
+ kind: "toBool",
58
+ operand: {
59
+ kind: "unionNarrow",
60
+ unionId,
61
+ tag: stringTag,
62
+ value: varRef(value.id, envT, loc),
63
+ type: STRING,
64
+ loc,
65
+ },
66
+ type: BOOL,
67
+ loc,
68
+ },
69
+ type: BOOL,
70
+ loc,
71
+ },
72
+ type: BOOL,
73
+ loc,
74
+ };
75
+ if (lowerer.forkTargets.length === 0)
76
+ return fromNode;
77
+ return {
78
+ kind: "logical",
79
+ op: "||",
80
+ left: { kind: "libCall", fn: "process.ipcOpen", args: [], type: BOOL, loc },
81
+ right: fromNode,
82
+ type: BOOL,
83
+ loc,
84
+ };
85
+ }
86
+ /** True when the value of `node` is consumed only by ToBoolean: a
87
+ * condition, the operand of `!`, `Boolean(node)`, or an operand of `&&` /
88
+ * `||` whose own value is consumed that way (or discarded, for the left
89
+ * operand). */
90
+ export function isTruthinessOnlyRead(lowerer, node) {
91
+ let child = node;
92
+ let parent = node.parent;
93
+ while (parent !== undefined && ts.isParenthesizedExpression(parent)) {
94
+ child = parent;
95
+ parent = parent.parent;
96
+ }
97
+ if (parent === undefined)
98
+ return false;
99
+ if (ts.isIfStatement(parent) || ts.isWhileStatement(parent) || ts.isDoStatement(parent))
100
+ return parent.expression === child;
101
+ if (ts.isForStatement(parent))
102
+ return parent.condition === child;
103
+ if (ts.isConditionalExpression(parent))
104
+ return parent.condition === child;
105
+ if (ts.isPrefixUnaryExpression(parent))
106
+ return parent.operator === ts.SyntaxKind.ExclamationToken;
107
+ if (ts.isCallExpression(parent)) {
108
+ return (!parent.questionDotToken &&
109
+ parent.arguments.nodes.length === 1 &&
110
+ parent.arguments.nodes[0] === child &&
111
+ lowerer.isStdlibGlobal(parent.expression, "Boolean"));
112
+ }
113
+ if (ts.isBinaryExpression(parent)) {
114
+ const op = parent.operatorToken.kind;
115
+ if (op !== ts.SyntaxKind.AmpersandAmpersandToken && op !== ts.SyntaxKind.BarBarToken)
116
+ return false;
117
+ if (isTruthinessOnlyRead(lowerer, parent))
118
+ return true;
119
+ let outer = parent.parent;
120
+ while (outer !== undefined && ts.isParenthesizedExpression(outer))
121
+ outer = outer.parent;
122
+ return parent.left === child && outer !== undefined && ts.isExpressionStatement(outer);
123
+ }
124
+ return false;
125
+ }
126
+ /** Whether a program source reads process.exitCode. Such a program
127
+ * records its exit-code assignments (process.setExitCodeTracked), so a
128
+ * read can tell an unset code from 0; other programs keep the untracked
129
+ * write. Computed once per lowering pass. */
130
+ export function programReadsExitCode(lowerer) {
131
+ if (lowerer.readsExitCode !== null)
132
+ return lowerer.readsExitCode;
133
+ let found = false;
134
+ const walk = (node) => {
135
+ if (found)
136
+ return;
137
+ if (ts.isPropertyAccessExpression(node) &&
138
+ node.name.text === "exitCode" &&
139
+ !(ts.isBinaryExpression(node.parent) &&
140
+ node.parent.left === node &&
141
+ node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken) &&
142
+ lowerer.stdlibGlobalMember(node, "process") === "exitCode") {
143
+ found = true;
144
+ return;
145
+ }
146
+ ts.forEachChild(node, walk);
147
+ };
148
+ for (const sf of lowerer.program.getImplementationSourceFiles()) {
149
+ if (sf.isDeclarationFile)
150
+ continue;
151
+ walk(sf);
152
+ if (found)
153
+ break;
154
+ }
155
+ lowerer.readsExitCode = found;
156
+ return found;
157
+ }
14
158
  /** The pinned Node release the runtime reports as process.versions.node
15
159
  * (packages/runtime/src/scr_lib.c SCR_NODE_COMPAT_VERSION, kept equal to
16
160
  * internal/compatibility/node-v24.json by test/node-pin.test.ts). */
@@ -30,40 +174,42 @@ export function lowerProcStreamMethodCall(lowerer, call, access) {
30
174
  return null;
31
175
  const name = access.name.text;
32
176
  const loc = locOf(call);
33
- if (isJsSourceFile(call.getSourceFile())) {
177
+ if (isJsSourceFile(ts.getSourceFileOfNode(call))) {
34
178
  const receiver = lowerer.lowerExpr(access.expression);
35
179
  if (receiver.type.kind === "dyn") {
36
180
  return {
37
181
  kind: "dynInvoke",
38
182
  recv: receiver,
39
183
  method: name,
40
- calleeName: call.expression.getText(),
41
- args: call.arguments.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
184
+ calleeName: ts.getTextOfNode(call.expression),
185
+ args: call.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
42
186
  type: DYN,
43
187
  loc,
44
188
  };
45
189
  }
46
190
  }
47
- if (name === "getWindowSize" && call.arguments.length === 0) {
191
+ if (name === "getWindowSize" && call.arguments.nodes.length === 0) {
48
192
  const receiver = lowerer.coerceToExpected(lowerer.lowerExpr(access.expression), DYN);
49
193
  return lowerer.coerceInto(call, {
50
194
  kind: "dynInvoke",
51
195
  recv: receiver,
52
196
  method: name,
53
- calleeName: call.expression.getText(),
197
+ calleeName: ts.getTextOfNode(call.expression),
54
198
  args: [],
55
199
  type: DYN,
56
200
  loc,
57
201
  }, lowerer.irTypeOf(call));
58
202
  }
59
- if (name === "write" && call.arguments.length === 1) {
203
+ if (name === "write" && call.arguments.nodes.length === 1) {
60
204
  const receiver = lowerer.lowerExpr(access.expression);
61
- const data = lowerer.lowerExpr(call.arguments[0]);
205
+ const data = lowerer.lowerExpr(call.arguments.nodes[0]);
62
206
  if (data.type.kind !== "string") {
63
- lowerer.noLowering(`write of '${lowerer.fmt(data.type)}' data on a stream value`, call.arguments[0], "one string is the supported form here — narrow unions first");
207
+ requestGeneralStreamSurface(lowerer, access.expression);
208
+ lowerer.noLowering(`write of '${lowerer.fmt(data.type)}' data on a stream value`, call.arguments.nodes[0], "one string is the supported form here — narrow unions first");
64
209
  }
65
210
  return { kind: "libCall", fn: "procStream.write", args: [receiver, data], type: BOOL, loc };
66
211
  }
212
+ requestGeneralStreamSurface(lowerer, access.expression);
67
213
  lowerer.noLowering(`WritableStream.${name}`, call, "write(data) with one string and getWindowSize() are the supported stream-value methods", lowerer.checker.getSymbolAtLocation(access.name));
68
214
  }
69
215
  /** Standard streams expose optional terminal properties: pipes have no
@@ -90,7 +236,7 @@ export function lowerProcessStreamProperty(lowerer, expr) {
90
236
  const direct = ts.isPropertyAccessExpression(expr.expression)
91
237
  ? lowerer.stdlibGlobalMember(expr.expression, "process")
92
238
  : null;
93
- if (isJsSourceFile(expr.getSourceFile()) &&
239
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
94
240
  (direct === "stdin" ||
95
241
  direct === "stdout" ||
96
242
  direct === "stderr" ||
@@ -105,6 +251,18 @@ export function lowerProcessStreamProperty(lowerer, expr) {
105
251
  loc: locOf(expr),
106
252
  };
107
253
  }
254
+ // `if (process.stdin.setRawMode)`: Node's stdin has the method only
255
+ // when it is a TTY. The runtime's stream object answers the same
256
+ // presence (the method or undefined); calls keep their direct lowering.
257
+ if (direct === "stdin" && member === "setRawMode") {
258
+ return {
259
+ kind: "dynKeyGet",
260
+ value: lowerer.lowerExpr(expr.expression),
261
+ key: strLit(member, locOf(expr.name)),
262
+ type: DYN,
263
+ loc: locOf(expr),
264
+ };
265
+ }
108
266
  if (member !== "isTTY" && member !== "columns" && member !== "rows")
109
267
  return null;
110
268
  let recv = expr.expression;
@@ -182,6 +340,36 @@ export function lowerProcessStreamProperty(lowerer, expr) {
182
340
  * read in source order). Method members referenced without a call are
183
341
  * rejected specifically. Null for non-process receivers (the chain keeps
184
342
  * trying other property lowerings). */
343
+ /** The value of a DATA member of the process global taken off by
344
+ * destructuring (`const { env, argv } = process` in JavaScript, the
345
+ * supports-color opening): the same values the spelled `process.env` /
346
+ * `process.argv` reads produce, typed by the binding. Null for members
347
+ * this does not cover (methods keep the destructuring fence). */
348
+ export function processDataMemberValue(lowerer, member, binding, loc) {
349
+ switch (member) {
350
+ case "env": {
351
+ const mapped = lowerer.mapTypeOf(lowerer.typeOf(binding));
352
+ if (mapped?.kind !== "record")
353
+ return null;
354
+ const helper = envSnapshotHelper(lowerer, mapped.shapeId, loc);
355
+ return helper === null ? null : { kind: "call", callee: helper, args: [], type: mapped, loc };
356
+ }
357
+ case "argv":
358
+ return { kind: "libCall", fn: "process.argv", args: [], type: arrayOf(STRING), loc };
359
+ case "platform":
360
+ return { kind: "libCall", fn: "process.platform", args: [], type: STRING, loc };
361
+ case "arch":
362
+ return { kind: "libCall", fn: "process.arch", args: [], type: STRING, loc };
363
+ case "pid":
364
+ return { kind: "libCall", fn: "process.pid", args: [], type: F64, loc };
365
+ case "execPath":
366
+ return { kind: "libCall", fn: "process.execPath", args: [], type: STRING, loc };
367
+ case "versions":
368
+ return { kind: "libCall", fn: "process.versions", args: [], type: DYN, loc };
369
+ default:
370
+ return null;
371
+ }
372
+ }
185
373
  export function lowerProcessProperty(lowerer, expr) {
186
374
  if (!expr.questionDotToken &&
187
375
  expr.name.text === "bigint" &&
@@ -260,9 +448,46 @@ export function lowerProcessProperty(lowerer, expr) {
260
448
  if (member === null)
261
449
  return null;
262
450
  const loc = locOf(expr);
451
+ // `if (process.send)`: Node defines process.send and process.disconnect
452
+ // only when the process has an IPC channel. A read whose value only
453
+ // feeds a truthiness test answers that presence; other value uses keep
454
+ // the member fence.
455
+ if ((member === "send" || member === "disconnect") &&
456
+ !expr.questionDotToken &&
457
+ isTruthinessOnlyRead(lowerer, expr)) {
458
+ return processHasIpc(lowerer, loc);
459
+ }
263
460
  if (member === "versions") {
264
461
  return { kind: "libCall", fn: "process.versions", args: [], type: DYN, loc };
265
462
  }
463
+ // process.exitCode: undefined until something assigns it, then the
464
+ // assigned code. A read the checker narrowed to number follows an
465
+ // assignment, so the code is set.
466
+ if (member === "exitCode" && !expr.questionDotToken) {
467
+ const current = {
468
+ kind: "libCall",
469
+ fn: "process.currentExitCode",
470
+ args: [],
471
+ type: F64,
472
+ loc,
473
+ };
474
+ if (lowerer.mapTypeOf(lowerer.typeOf(expr))?.kind === "f64")
475
+ return current;
476
+ const type = { kind: "union", unionId: lowerer.unions.intern([F64, UNDEFINED_T]) };
477
+ return {
478
+ kind: "ternary",
479
+ cond: { kind: "libCall", fn: "process.hasExitCode", args: [], type: BOOL, loc },
480
+ then: lowerer.coerceToExpected(current, type),
481
+ else_: lowerer.coerceToExpected({ kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc }, type),
482
+ type,
483
+ loc,
484
+ };
485
+ }
486
+ // process.features as a value (`"sea" in process.features`): an object
487
+ // holding none of the flags, consistent with the member reads above.
488
+ if (member === "features") {
489
+ return { kind: "dynObjLit", type: DYN, loc };
490
+ }
266
491
  // process.noDeprecation / process.throwDeprecation: the values the
267
492
  // program assigned (undefined before that — no Node flags reach a
268
493
  // compiled binary).
@@ -284,6 +509,11 @@ export function lowerProcessProperty(lowerer, expr) {
284
509
  if (member === "hrtime") {
285
510
  return { kind: "libCall", fn: "process.hrtimeValue", args: [], type: DYN, loc };
286
511
  }
512
+ // A stored process.nextTick in JavaScript (`cond ? setImmediate :
513
+ // process.nextTick`): the interned builtin function value.
514
+ if (member === "nextTick" && isJsSourceFile(ts.getSourceFileOfNode(expr))) {
515
+ return builtinFunctionValue("process.nextTick", loc);
516
+ }
287
517
  if (member === "getBuiltinModule") {
288
518
  // Keep the native loader's argument validation when the function is
289
519
  // stored. The declaration's string signature must not insert a checked
@@ -296,10 +526,10 @@ export function lowerProcessProperty(lowerer, expr) {
296
526
  if (member === "connected") {
297
527
  return { kind: "libCall", fn: "process.connected", args: [], type: BOOL, loc };
298
528
  }
299
- // process.execArgv: the extra CLI arguments Node itself consumed — a
300
- // compiled binary consumed none, so the honest answer is a fresh [].
529
+ // process.execArgv: the Node runtime flags kept out of process.argv —
530
+ // a leading --test-update-snapshots in node:test programs, else [].
301
531
  if (member === "execArgv") {
302
- return { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
532
+ return { kind: "libCall", fn: "process.execArgv", args: [], type: arrayOf(STRING), loc };
303
533
  }
304
534
  // process._exiting — the runtime's exit-sequence flag (true while
305
535
  // 'exit' listeners run), Node's own undocumented member.
@@ -359,7 +589,7 @@ export function lowerProcessProperty(lowerer, expr) {
359
589
  // (`process.stdout.isTTY`, `.write(...)`) never reach here — their
360
590
  // OUTER expressions dispatch first.
361
591
  if (member === "stdin" ||
362
- ((member === "stdout" || member === "stderr") && isJsSourceFile(expr.getSourceFile()))) {
592
+ ((member === "stdout" || member === "stderr") && isJsSourceFile(ts.getSourceFileOfNode(expr)))) {
363
593
  return {
364
594
  kind: "libCall",
365
595
  fn: "process.stdio",
@@ -384,17 +614,18 @@ export function lowerProcessProperty(lowerer, expr) {
384
614
  export function lowerProcessMethodCall(lowerer, call, access) {
385
615
  if (call.questionDotToken)
386
616
  return null;
387
- if (isJsSourceFile(call.getSourceFile()) && ts.isPropertyAccessExpression(access.expression)) {
617
+ if (isJsSourceFile(ts.getSourceFileOfNode(call)) &&
618
+ ts.isPropertyAccessExpression(access.expression)) {
388
619
  const stream = lowerer.stdlibGlobalMember(access.expression, "process");
389
620
  if (stream === "stdin" || stream === "stdout" || stream === "stderr") {
390
- if (call.arguments.some(ts.isSpreadElement))
621
+ if (call.arguments.nodes.some(ts.isSpreadElement))
391
622
  lowerer.noLowering("process stream spread arguments", call);
392
623
  return {
393
624
  kind: "dynInvoke",
394
625
  recv: lowerer.lowerExpr(access.expression),
395
626
  method: access.name.text,
396
- calleeName: access.getText(),
397
- args: call.arguments.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
627
+ calleeName: ts.getTextOfNode(access),
628
+ args: call.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
398
629
  type: DYN,
399
630
  loc: locOf(call),
400
631
  };
@@ -404,31 +635,31 @@ export function lowerProcessMethodCall(lowerer, call, access) {
404
635
  if (directProcessMember === "loadEnvFile")
405
636
  return lowerProcessLoadEnvFile(lowerer, call);
406
637
  if (directProcessMember === "hrtime") {
407
- if (call.arguments.some(ts.isSpreadElement))
638
+ if (call.arguments.nodes.some(ts.isSpreadElement))
408
639
  lowerer.noLowering("process.hrtime with spread arguments", call);
409
640
  const loc = locOf(call);
410
641
  return {
411
642
  kind: "dynCall",
412
643
  callee: { kind: "libCall", fn: "process.hrtimeValue", args: [], type: DYN, loc },
413
- args: call.arguments.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
644
+ args: call.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
414
645
  calleeName: "process.hrtime",
415
646
  type: DYN,
416
647
  loc,
417
648
  };
418
649
  }
419
650
  if (directProcessMember === "getBuiltinModule") {
420
- if (call.arguments.some(ts.isSpreadElement))
651
+ if (call.arguments.nodes.some(ts.isSpreadElement))
421
652
  lowerer.noLowering("process.getBuiltinModule with spread arguments", call);
422
653
  const loc = locOf(call);
423
- const id = call.arguments[0]
424
- ? lowerer.lowerExprExpecting(call.arguments[0], DYN)
654
+ const id = call.arguments.nodes[0]
655
+ ? lowerer.lowerExprExpecting(call.arguments.nodes[0], DYN)
425
656
  : dynUndefinedExpr(loc);
426
657
  const binding = lowerer.declareHiddenLocal("%builtinId", DYN);
427
658
  return {
428
659
  kind: "seqExpr",
429
660
  stmts: [
430
661
  { kind: "varDecl", localId: binding.id, init: id, loc },
431
- ...call.arguments.slice(1).map((arg) => ({
662
+ ...call.arguments.nodes.slice(1).map((arg) => ({
432
663
  kind: "exprStmt",
433
664
  expr: lowerer.lowerExpr(arg),
434
665
  loc: locOf(arg),
@@ -448,8 +679,8 @@ export function lowerProcessMethodCall(lowerer, call, access) {
448
679
  if (directProcessMember === "send")
449
680
  return lowerProcessIpcSend(lowerer, call);
450
681
  if (directProcessMember === "disconnect") {
451
- if (call.arguments.length !== 0) {
452
- lowerer.noLowering(`process.disconnect with ${call.arguments.length} arguments`, call);
682
+ if (call.arguments.nodes.length !== 0) {
683
+ lowerer.noLowering(`process.disconnect with ${call.arguments.nodes.length} arguments`, call);
453
684
  }
454
685
  if (!ts.isExpressionStatement(call.parent)) {
455
686
  lowerer.unsupported("SC1090", call, "using the result of process.disconnect() (call it as its own statement)");
@@ -469,7 +700,7 @@ export function lowerProcessMethodCall(lowerer, call, access) {
469
700
  if (access.name.text === "destroy" &&
470
701
  ts.isPropertyAccessExpression(access.expression) &&
471
702
  lowerer.stdlibGlobalMember(access.expression, "process") === "stdin") {
472
- if (call.arguments.length !== 0) {
703
+ if (call.arguments.nodes.length !== 0) {
473
704
  lowerer.noLowering("stdin.destroy with arguments", call);
474
705
  }
475
706
  return { kind: "libCall", fn: "process.stdinDestroy", args: [], type: VOID, loc: locOf(call) };
@@ -489,15 +720,77 @@ export function lowerProcessMethodCall(lowerer, call, access) {
489
720
  if (!ts.isExpressionStatement(call.parent) && !ts.isArrowFunction(call.parent)) {
490
721
  lowerer.unsupported("SC1090", call, "using the result of stdin.setRawMode(...) (the ReadStream chain — call it as its own statement)");
491
722
  }
492
- if (call.arguments.length !== 1) {
493
- lowerer.noLowering(`stdin.setRawMode with ${call.arguments.length} arguments`, call, "the supported form is setRawMode(mode) with one boolean");
723
+ if (call.arguments.nodes.length !== 1) {
724
+ lowerer.noLowering(`stdin.setRawMode with ${call.arguments.nodes.length} arguments`, call, "the supported form is setRawMode(mode) with one boolean");
494
725
  }
495
- const mode = lowerer.lowerExpr(call.arguments[0]);
726
+ const mode = lowerer.lowerExpr(call.arguments.nodes[0]);
496
727
  if (mode.type.kind !== "bool") {
497
- lowerer.noLowering(`stdin.setRawMode of '${lowerer.fmt(mode.type)}' modes`, call.arguments[0], "the mode is a boolean here — narrow unions first");
728
+ lowerer.noLowering(`stdin.setRawMode of '${lowerer.fmt(mode.type)}' modes`, call.arguments.nodes[0], "the mode is a boolean here — narrow unions first");
498
729
  }
499
730
  return { kind: "libCall", fn: "process.stdinSetRawMode", args: [mode], type: VOID, loc };
500
731
  }
732
+ // process.stdout.on("resize", cb) (and once/off/removeListener/
733
+ // addListener, stderr too): the terminal resize event, registered on the
734
+ // runtime's process stream object (a SIGWINCH listener that emits when a
735
+ // TTY's size changed; it never keeps the loop alive). Statement position:
736
+ // Node returns the stream.
737
+ if (["on", "once", "off", "removeListener", "addListener"].includes(access.name.text) &&
738
+ ts.isPropertyAccessExpression(access.expression) &&
739
+ call.arguments.nodes.length === 2 &&
740
+ !call.arguments.nodes.some(ts.isSpreadElement) &&
741
+ ts.isExpressionStatement(call.parent)) {
742
+ const stream = lowerer.stdlibGlobalMember(access.expression, "process");
743
+ const evT = lowerer.typeOf(call.arguments.nodes[0]);
744
+ if ((stream === "stdout" || stream === "stderr") &&
745
+ evT.isStringLiteralType() &&
746
+ evT.value === "resize") {
747
+ const loc = locOf(call);
748
+ const receiverLocal = lowerer.declareHiddenLocal("%stdioReceiver", DYN);
749
+ const receiver = varRef(receiverLocal.id, DYN, loc);
750
+ const method = access.name.text === "off"
751
+ ? "removeListener"
752
+ : access.name.text === "addListener"
753
+ ? "on"
754
+ : access.name.text;
755
+ return {
756
+ kind: "seqExpr",
757
+ stmts: [
758
+ {
759
+ kind: "varDecl",
760
+ localId: receiverLocal.id,
761
+ init: {
762
+ kind: "libCall",
763
+ fn: "process.stdio",
764
+ args: [numLit(stream === "stdout" ? 1 : 2, loc)],
765
+ type: DYN,
766
+ loc,
767
+ },
768
+ loc,
769
+ },
770
+ ],
771
+ result: {
772
+ kind: "dynCall",
773
+ callee: {
774
+ kind: "dynKeyGet",
775
+ value: receiver,
776
+ key: strLit(method, locOf(access.name)),
777
+ type: DYN,
778
+ loc,
779
+ },
780
+ receiver,
781
+ calleeName: ts.getTextOfNode(access),
782
+ args: [
783
+ lowerer.lowerExprExpecting(call.arguments.nodes[0], DYN),
784
+ lowerer.lowerExprExpecting(call.arguments.nodes[1], DYN),
785
+ ],
786
+ type: DYN,
787
+ loc,
788
+ },
789
+ type: DYN,
790
+ loc,
791
+ };
792
+ }
793
+ }
501
794
  // process.stdin.on/once("data" | "end" | "error", cb): the piped-stdin
502
795
  // event slice. A 'data' listener keeps the event loop alive until EOF
503
796
  // (Node's flowing stdin); 'end'/'error' listeners alone do not. `once`
@@ -508,37 +801,48 @@ export function lowerProcessMethodCall(lowerer, call, access) {
508
801
  lowerer.stdlibGlobalMember(access.expression, "process") === "stdin") {
509
802
  const loc = locOf(call);
510
803
  const once = access.name.text === "once";
511
- if (call.arguments.length !== 2) {
512
- lowerer.noLowering(`stdin.${access.name.text} with ${call.arguments.length} arguments`, call);
804
+ if (call.arguments.nodes.length !== 2) {
805
+ lowerer.noLowering(`stdin.${access.name.text} with ${call.arguments.nodes.length} arguments`, call);
513
806
  }
514
- const evT = lowerer.typeOf(call.arguments[0]);
807
+ const evT = lowerer.typeOf(call.arguments.nodes[0]);
515
808
  const event = evT.isStringLiteralType() ? evT.value : null;
516
- if (event !== "data" && event !== "end" && event !== "error") {
517
- lowerer.noLowering(`stdin.${access.name.text}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, call.arguments[0], '"data", "end", and "error" are the supported stdin events (as literals)');
809
+ if (event !== "data" && event !== "end" && event !== "error" && event !== "keypress") {
810
+ lowerer.noLowering(`stdin.${access.name.text}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, call.arguments.nodes[0], '"data", "end", "error", and "keypress" are the supported stdin events (as literals)');
518
811
  }
519
812
  if (!ts.isExpressionStatement(call.parent)) {
520
813
  lowerer.unsupported("SC1090", call, "chaining stdin listener registration (the result is void here — register each listener as its own statement)");
521
814
  }
522
- const cb = lowerer.lowerExpr(call.arguments[1]);
815
+ if (event === "keypress") {
816
+ // readline.emitKeypressEvents' (str, key) events
817
+ const listener = stdinKeypressListener(lowerer, call.arguments.nodes[1]);
818
+ const onceKp = { kind: "boolLit", value: once, type: BOOL, loc };
819
+ return { kind: "libCall", fn: "stdin.onKeypress", args: [listener, onceKp], type: VOID, loc };
820
+ }
821
+ const cb = lowerer.lowerExpr(call.arguments.nodes[1]);
523
822
  if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 1) {
524
- lowerer.unsupported("SC1090", call.arguments[1], "stdin listeners with more than one parameter or a return value");
823
+ lowerer.unsupported("SC1090", call.arguments.nodes[1], "stdin listeners with more than one parameter or a return value");
525
824
  }
526
825
  const param = cb.type.params[0];
527
826
  const onceArg = { kind: "boolLit", value: once, type: BOOL, loc };
528
827
  if (event === "data") {
529
- if (param !== undefined && !(param.kind === "bytes" && param.elem === "u8")) {
530
- lowerer.unsupported("SC1090", call.arguments[1], `data listeners whose parameter is not 'Uint8Array' (got '${lowerer.fmt(param)}')`);
828
+ // A string parameter receives the chunks process.stdin.setEncoding
829
+ // decodes (pi-tui's terminal input); the runtime refuses a delivery
830
+ // while no encoding is set, where Node would pass a Buffer.
831
+ if (param !== undefined &&
832
+ !(param.kind === "bytes" && param.elem === "u8") &&
833
+ param.kind !== "string") {
834
+ lowerer.unsupported("SC1090", call.arguments.nodes[1], `data listeners whose parameter is not 'Uint8Array' or 'string' (got '${lowerer.fmt(param)}')`);
531
835
  }
532
836
  return { kind: "libCall", fn: "stdin.onData", args: [cb, onceArg], type: VOID, loc };
533
837
  }
534
838
  if (event === "end") {
535
839
  if (param !== undefined) {
536
- lowerer.unsupported("SC1090", call.arguments[1], "end listeners with parameters (use ())");
840
+ lowerer.unsupported("SC1090", call.arguments.nodes[1], "end listeners with parameters (use ())");
537
841
  }
538
842
  return { kind: "libCall", fn: "stdin.onEnd", args: [cb, onceArg], type: VOID, loc };
539
843
  }
540
844
  if (param !== undefined && !(param.kind === "object" && param.className === "%Error")) {
541
- lowerer.unsupported("SC1090", call.arguments[1], `error listeners whose parameter is not 'Error' (got '${lowerer.fmt(param)}')`);
845
+ lowerer.unsupported("SC1090", call.arguments.nodes[1], `error listeners whose parameter is not 'Error' (got '${lowerer.fmt(param)}')`);
542
846
  }
543
847
  return { kind: "libCall", fn: "stdin.onError", args: [cb, onceArg], type: VOID, loc };
544
848
  }
@@ -546,7 +850,7 @@ export function lowerProcessMethodCall(lowerer, call, access) {
546
850
  const stream = lowerer.stdlibGlobalMember(access.expression, "process");
547
851
  if (stream === "stdout" || stream === "stderr") {
548
852
  const loc = locOf(call);
549
- const args = call.arguments;
853
+ const args = call.arguments.nodes;
550
854
  if (args.length < 1 || args.length > 3 || args.some(ts.isSpreadElement)) {
551
855
  lowerer.noLowering(`process.${stream}.write with ${args.length} arguments`, call, "the supported forms are write(data[, encoding][, callback]) with a static BufferEncoding and completion callback");
552
856
  }
@@ -628,7 +932,7 @@ export function lowerProcessMethodCall(lowerer, call, access) {
628
932
  // `writeOut: (str) => process.stdout.write(str)` — str untyped):
629
933
  // a runtime string writes; anything else throws the dynCheck's
630
934
  // honest TypeError at the call.
631
- if (data.type.kind === "dyn" && isJsSourceFile(call.getSourceFile())) {
935
+ if (data.type.kind === "dyn" && isJsSourceFile(ts.getSourceFileOfNode(call))) {
632
936
  data = { kind: "dynCheck", value: data, type: STRING, loc };
633
937
  }
634
938
  const isBytes = data.type.kind === "bytes" && data.type.elem === "u8";
@@ -638,7 +942,7 @@ export function lowerProcessMethodCall(lowerer, call, access) {
638
942
  let callback;
639
943
  if (callbackNode) {
640
944
  callback = lowerer.lowerExpr(callbackNode);
641
- if (callback.type.kind === "dyn" && isJsSourceFile(call.getSourceFile())) {
945
+ if (callback.type.kind === "dyn" && isJsSourceFile(ts.getSourceFileOfNode(call))) {
642
946
  callback = {
643
947
  kind: "dynCheck",
644
948
  value: callback,
@@ -733,8 +1037,8 @@ export function lowerProcessMethodCall(lowerer, call, access) {
733
1037
  !access.questionDotToken &&
734
1038
  ts.isPropertyAccessExpression(access.expression) &&
735
1039
  lowerer.stdlibGlobalMember(access.expression, "process") === "memoryUsage") {
736
- if (call.arguments.length !== 0) {
737
- lowerer.noLowering(`process.memoryUsage.rss with ${call.arguments.length} arguments`, call);
1040
+ if (call.arguments.nodes.length !== 0) {
1041
+ lowerer.noLowering(`process.memoryUsage.rss with ${call.arguments.nodes.length} arguments`, call);
738
1042
  }
739
1043
  return { kind: "libCall", fn: "process.rss", args: [], type: F64, loc: locOf(call) };
740
1044
  }
@@ -753,18 +1057,18 @@ export function lowerProcessMethodCall(lowerer, call, access) {
753
1057
  // `removeListener` IS `off` — Node aliases them.
754
1058
  const isOff = member === "off" || member === "removeListener";
755
1059
  if (member === "on" || member === "once" || isOff) {
756
- if (call.arguments.length !== 2) {
757
- lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
1060
+ if (call.arguments.nodes.length !== 2) {
1061
+ lowerer.noLowering(`process.${member} with ${call.arguments.nodes.length} arguments`, call);
758
1062
  }
759
- const evT = lowerer.typeOf(call.arguments[0]);
1063
+ const evT = lowerer.typeOf(call.arguments.nodes[0]);
760
1064
  const event = evT.isStringLiteralType() ? evT.value : null;
761
1065
  if ((event === "message" || event === "disconnect") && !isOff) {
762
1066
  if (!ts.isExpressionStatement(call.parent)) {
763
1067
  lowerer.unsupported("SC1090", call, "chaining process IPC listener registration (register each listener as its own statement)");
764
1068
  }
765
1069
  const callback = event === "message"
766
- ? ipcMessageListener(lowerer, call.arguments[1])
767
- : ipcDisconnectListener(lowerer, call.arguments[1]);
1070
+ ? ipcMessageListener(lowerer, call.arguments.nodes[1])
1071
+ : ipcDisconnectListener(lowerer, call.arguments.nodes[1]);
768
1072
  return {
769
1073
  kind: "libCall",
770
1074
  fn: event === "message" ? "process.onMessage" : "process.onDisconnect",
@@ -777,7 +1081,7 @@ export function lowerProcessMethodCall(lowerer, call, access) {
777
1081
  if (!ts.isExpressionStatement(call.parent)) {
778
1082
  lowerer.unsupported("SC1090", call, "chaining process exception listener registration");
779
1083
  }
780
- const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
1084
+ const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments.nodes[1]);
781
1085
  const monitor = boolLit(event === "uncaughtExceptionMonitor", loc);
782
1086
  return {
783
1087
  kind: "libCall",
@@ -799,7 +1103,7 @@ export function lowerProcessMethodCall(lowerer, call, access) {
799
1103
  if (!ts.isExpressionStatement(call.parent)) {
800
1104
  lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
801
1105
  }
802
- const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
1106
+ const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments.nodes[1]);
803
1107
  const onceArg = { kind: "boolLit", value: member === "once", type: BOOL, loc };
804
1108
  const fn = event === "unhandledRejection"
805
1109
  ? isOff
@@ -817,7 +1121,7 @@ export function lowerProcessMethodCall(lowerer, call, access) {
817
1121
  if (!ts.isExpressionStatement(call.parent)) {
818
1122
  lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
819
1123
  }
820
- const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
1124
+ const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments.nodes[1]);
821
1125
  return {
822
1126
  kind: "libCall",
823
1127
  fn: isOff ? "process.offWarning" : "process.onWarning",
@@ -830,14 +1134,14 @@ export function lowerProcessMethodCall(lowerer, call, access) {
830
1134
  if (!ts.isExpressionStatement(call.parent)) {
831
1135
  lowerer.unsupported("SC1090", call, "chaining process signal listener registration");
832
1136
  }
833
- const name = lowerer.coerceToExpected(lowerer.lowerExpr(call.arguments[0]), STRING);
1137
+ const name = lowerer.coerceToExpected(lowerer.lowerExpr(call.arguments.nodes[0]), STRING);
834
1138
  if (name.type.kind !== "string" && name.type.kind !== "dyn") {
835
- lowerer.noLowering("process signal event name that is not a string", call.arguments[0]);
1139
+ lowerer.noLowering("process signal event name that is not a string", call.arguments.nodes[0]);
836
1140
  }
837
1141
  const signal = name.type.kind === "string"
838
1142
  ? name
839
1143
  : { kind: "dynCheck", value: name, type: STRING, loc };
840
- const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
1144
+ const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments.nodes[1]);
841
1145
  return {
842
1146
  kind: "libCall",
843
1147
  fn: isOff ? "process.offSignal" : "process.onSignal",
@@ -847,12 +1151,12 @@ export function lowerProcessMethodCall(lowerer, call, access) {
847
1151
  };
848
1152
  }
849
1153
  if (event !== "exit") {
850
- lowerer.noLowering(`process.${member}("${event}", ...)`, call.arguments[0]);
1154
+ lowerer.noLowering(`process.${member}("${event}", ...)`, call.arguments.nodes[0]);
851
1155
  }
852
1156
  if (!ts.isExpressionStatement(call.parent)) {
853
1157
  lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
854
1158
  }
855
- let cb = lowerer.lowerExpr(call.arguments[1]);
1159
+ let cb = lowerer.lowerExpr(call.arguments.nodes[1]);
856
1160
  // The checked-dynamic listener (test/common's `process.on('exit',
857
1161
  // runCallChecks)` — an implicit-any JS function, func(dyn)=>dyn, or
858
1162
  // a dyn VALUE that rode an untyped binding): adapt through the dyn
@@ -883,12 +1187,12 @@ export function lowerProcessMethodCall(lowerer, call, access) {
883
1187
  }
884
1188
  }
885
1189
  if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 1) {
886
- lowerer.unsupported("SC1090", call.arguments[1], "process listeners with more than one parameter or a return value");
1190
+ lowerer.unsupported("SC1090", call.arguments.nodes[1], "process listeners with more than one parameter or a return value");
887
1191
  }
888
1192
  const param = cb.type.params[0];
889
1193
  const onceArg = { kind: "boolLit", value: member === "once", type: BOOL, loc };
890
1194
  if (param !== undefined && param.kind !== "f64") {
891
- lowerer.unsupported("SC1090", call.arguments[1], `exit listeners whose parameter is not 'number' (got '${lowerer.fmt(param)}')`);
1195
+ lowerer.unsupported("SC1090", call.arguments.nodes[1], `exit listeners whose parameter is not 'number' (got '${lowerer.fmt(param)}')`);
892
1196
  }
893
1197
  if (isOff) {
894
1198
  return { kind: "libCall", fn: "process.offExit", args: [cb], type: VOID, loc };
@@ -903,17 +1207,17 @@ export function lowerProcessMethodCall(lowerer, call, access) {
903
1207
  // shape: `.forEach((args) => process.emitWarning(...args))`).
904
1208
  if (member === "emitWarning") {
905
1209
  let argsArr = null;
906
- if (call.arguments.length === 1 && ts.isSpreadElement(call.arguments[0])) {
907
- const spread = lowerer.lowerExpr(call.arguments[0].expression);
1210
+ if (call.arguments.nodes.length === 1 && ts.isSpreadElement(call.arguments.nodes[0])) {
1211
+ const spread = lowerer.lowerExpr(call.arguments.nodes[0].expression);
908
1212
  if (spread.type.kind === "dyn") {
909
1213
  argsArr = spread;
910
1214
  }
911
1215
  else {
912
- lowerer.noLowering("process.emitWarning with a typed spread argument", call.arguments[0], "spread an untyped (checked-dynamic) array, or write the arguments positionally");
1216
+ lowerer.noLowering("process.emitWarning with a typed spread argument", call.arguments.nodes[0], "spread an untyped (checked-dynamic) array, or write the arguments positionally");
913
1217
  }
914
1218
  }
915
1219
  else {
916
- argsArr = lowerTracingArguments(lowerer, call.arguments, loc);
1220
+ argsArr = lowerTracingArguments(lowerer, call.arguments.nodes, loc);
917
1221
  }
918
1222
  return { kind: "libCall", fn: "process.emitWarning", args: [argsArr], type: VOID, loc };
919
1223
  }
@@ -928,17 +1232,17 @@ export function lowerProcessMethodCall(lowerer, call, access) {
928
1232
  // through, boxable parameterized shapes ride the checked-dynamic
929
1233
  // boundary, trailing call arguments ride the interned dyn thunk.
930
1234
  if (member === "nextTick") {
931
- if (call.arguments.length === 0) {
1235
+ if (call.arguments.nodes.length === 0) {
932
1236
  lowerer.noLowering("process.nextTick with 0 arguments", call, "the supported form is process.nextTick(callback, ...args)");
933
1237
  }
934
- const cb = timerStyleCallback(lowerer, call.arguments, "process.nextTick", loc);
1238
+ const cb = timerStyleCallback(lowerer, call.arguments.nodes, "process.nextTick", loc);
935
1239
  return { kind: "libCall", fn: "process.nextTick", args: [cb], type: VOID, loc };
936
1240
  }
937
1241
  // The process introspection statics — plain reads of the process's
938
1242
  // own clocks and counters, Node's shapes exactly.
939
1243
  if (member === "uptime" || member === "availableMemory" || member === "constrainedMemory") {
940
- if (call.arguments.length !== 0) {
941
- lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
1244
+ if (call.arguments.nodes.length !== 0) {
1245
+ lowerer.noLowering(`process.${member} with ${call.arguments.nodes.length} arguments`, call);
942
1246
  }
943
1247
  const fn = member === "uptime"
944
1248
  ? "process.uptime"
@@ -970,7 +1274,7 @@ export function lowerProcessMethodCall(lowerer, call, access) {
970
1274
  type: F64,
971
1275
  loc,
972
1276
  });
973
- if (call.arguments.length === 0) {
1277
+ if (call.arguments.nodes.length === 0) {
974
1278
  return {
975
1279
  kind: "recordLit",
976
1280
  fields: shape.fields.map((f) => ({ name: f.name, value: sampleField(f.name) })),
@@ -978,15 +1282,15 @@ export function lowerProcessMethodCall(lowerer, call, access) {
978
1282
  loc,
979
1283
  };
980
1284
  }
981
- if (call.arguments.length !== 1) {
982
- lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
1285
+ if (call.arguments.nodes.length !== 1) {
1286
+ lowerer.noLowering(`process.${member} with ${call.arguments.nodes.length} arguments`, call);
983
1287
  }
984
- const prev = lowerer.lowerExpr(call.arguments[0]);
1288
+ const prev = lowerer.lowerExpr(call.arguments.nodes[0]);
985
1289
  const prevShape = prev.type.kind === "record" ? lowerer.shapes.get(prev.type.shapeId) : undefined;
986
1290
  const prevOk = prevShape !== undefined &&
987
1291
  ["user", "system"].every((n) => prevShape.fields.some((f) => f.name === n && f.type.kind === "f64"));
988
1292
  if (prev.type.kind !== "record" || !prevOk) {
989
- lowerer.noLowering(`process.${member} of a '${lowerer.fmt(prev.type)}' previous value`, call.arguments[0], "the previous value is the record a prior call answered ({ user, system } numbers) — Node's ERR_INVALID_ARG_TYPE shapes have no lowering");
1293
+ lowerer.noLowering(`process.${member} of a '${lowerer.fmt(prev.type)}' previous value`, call.arguments.nodes[0], "the previous value is the record a prior call answered ({ user, system } numbers) — Node's ERR_INVALID_ARG_TYPE shapes have no lowering");
990
1294
  }
991
1295
  const prevT = prev.type;
992
1296
  const key = `${prefix}usage.diff:${prevT.shapeId}:${t.shapeId}`;
@@ -1052,8 +1356,8 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1052
1356
  // storage lives in the same heap). One sample per call: the interned
1053
1357
  // helper takes it, then the record reads it field by field.
1054
1358
  if (member === "memoryUsage") {
1055
- if (call.arguments.length !== 0) {
1056
- lowerer.noLowering(`process.memoryUsage with ${call.arguments.length} arguments`, call);
1359
+ if (call.arguments.nodes.length !== 0) {
1360
+ lowerer.noLowering(`process.memoryUsage with ${call.arguments.nodes.length} arguments`, call);
1057
1361
  }
1058
1362
  const t = lowerer.mapTypeOf(lowerer.typeOf(call));
1059
1363
  if (t?.kind !== "record")
@@ -1107,8 +1411,8 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1107
1411
  // process.resourceUsage() — getrusage's 16 fields in Node's names and
1108
1412
  // units (CPU times in microseconds, maxRSS in kilobytes).
1109
1413
  if (member === "resourceUsage") {
1110
- if (call.arguments.length !== 0) {
1111
- lowerer.noLowering(`process.resourceUsage with ${call.arguments.length} arguments`, call);
1414
+ if (call.arguments.nodes.length !== 0) {
1415
+ lowerer.noLowering(`process.resourceUsage with ${call.arguments.nodes.length} arguments`, call);
1112
1416
  }
1113
1417
  const t = lowerer.mapTypeOf(lowerer.typeOf(call));
1114
1418
  if (t?.kind !== "record")
@@ -1158,8 +1462,8 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1158
1462
  // DIVERGENCE (SEMANTICS.md): resources this runtime does not model
1159
1463
  // as loop handles (TCP wraps, FS requests) are absent from the answer.
1160
1464
  if (member === "getActiveResourcesInfo") {
1161
- if (call.arguments.length !== 0) {
1162
- lowerer.noLowering(`process.getActiveResourcesInfo with ${call.arguments.length} arguments`, call);
1465
+ if (call.arguments.nodes.length !== 0) {
1466
+ lowerer.noLowering(`process.getActiveResourcesInfo with ${call.arguments.nodes.length} arguments`, call);
1163
1467
  }
1164
1468
  return { kind: "libCall", fn: "process.activeResources", args: [], type: arrayOf(STRING), loc };
1165
1469
  }
@@ -1167,25 +1471,25 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1167
1471
  // completes it to the -1 read sentinel); umask(mask) sets and answers
1168
1472
  // the previous mask, Node's shape either way.
1169
1473
  if (member === "umask") {
1170
- if (call.arguments.length > 1) {
1171
- lowerer.noLowering(`process.umask with ${call.arguments.length} arguments`, call);
1474
+ if (call.arguments.nodes.length > 1) {
1475
+ lowerer.noLowering(`process.umask with ${call.arguments.nodes.length} arguments`, call);
1172
1476
  }
1173
- const mask = call.arguments.length === 1
1174
- ? lowerer.lowerExpr(call.arguments[0])
1477
+ const mask = call.arguments.nodes.length === 1
1478
+ ? lowerer.lowerExpr(call.arguments.nodes[0])
1175
1479
  : { kind: "numLit", value: -1, type: F64, loc };
1176
1480
  if (mask.type.kind !== "f64") {
1177
- lowerer.noLowering("process.umask of non-number masks", call.arguments[0]);
1481
+ lowerer.noLowering("process.umask of non-number masks", call.arguments.nodes[0]);
1178
1482
  }
1179
1483
  return { kind: "libCall", fn: "process.umask", args: [mask], type: F64, loc };
1180
1484
  }
1181
1485
  // chdir(2) — throws Node's fs-shaped error on failure.
1182
1486
  if (member === "chdir") {
1183
- if (call.arguments.length !== 1) {
1184
- lowerer.noLowering(`process.chdir with ${call.arguments.length} arguments`, call);
1487
+ if (call.arguments.nodes.length !== 1) {
1488
+ lowerer.noLowering(`process.chdir with ${call.arguments.nodes.length} arguments`, call);
1185
1489
  }
1186
- const dir = lowerer.lowerExpr(call.arguments[0]);
1490
+ const dir = lowerer.lowerExpr(call.arguments.nodes[0]);
1187
1491
  if (dir.type.kind !== "string") {
1188
- lowerer.noLowering("process.chdir of non-string paths", call.arguments[0]);
1492
+ lowerer.noLowering("process.chdir of non-string paths", call.arguments.nodes[0]);
1189
1493
  }
1190
1494
  return { kind: "libCall", fn: "process.chdir", args: [dir], type: VOID, loc };
1191
1495
  }
@@ -1194,8 +1498,8 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1194
1498
  // the member optional (that optionality covers Windows). The `?.()`
1195
1499
  // spelling routes here through lowerProcessOptionalMethodCall.
1196
1500
  if (PROCESS_CREDENTIAL_FNS.has(member)) {
1197
- if (call.arguments.length !== 0) {
1198
- lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
1501
+ if (call.arguments.nodes.length !== 0) {
1502
+ lowerer.noLowering(`process.${member} with ${call.arguments.nodes.length} arguments`, call);
1199
1503
  }
1200
1504
  return processCredentialCall(member, loc);
1201
1505
  }
@@ -1207,11 +1511,11 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1207
1511
  // Node's `kill ESRCH`/`kill EPERM` Error. The result is Node's
1208
1512
  // constant true.
1209
1513
  if (member === "kill") {
1210
- if (call.arguments.length < 1 || call.arguments.length > 2) {
1211
- lowerer.noLowering(`process.kill with ${call.arguments.length} arguments`, call);
1514
+ if (call.arguments.nodes.length < 1 || call.arguments.nodes.length > 2) {
1515
+ lowerer.noLowering(`process.kill with ${call.arguments.nodes.length} arguments`, call);
1212
1516
  }
1213
- const pid = lowerer.lowerExprExpecting(call.arguments[0], F64);
1214
- const sigNode = call.arguments[1];
1517
+ const pid = lowerer.lowerExprExpecting(call.arguments.nodes[0], F64);
1518
+ const sigNode = call.arguments.nodes[1];
1215
1519
  if (!sigNode) {
1216
1520
  const dflt = { kind: "strLit", value: "SIGTERM", type: STRING, loc };
1217
1521
  return { kind: "libCall", fn: "process.kill", args: [pid, dflt], type: BOOL, loc };
@@ -1226,10 +1530,36 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1226
1530
  lowerer.noLowering(`process.kill with a '${lowerer.fmt(sig.type)}' signal`, sigNode, "pass a signal name string or number (narrow unions first)");
1227
1531
  }
1228
1532
  if (member === "exit") {
1229
- const arg = call.arguments[0];
1230
- const code = arg !== undefined
1533
+ const arg = call.arguments.nodes[0];
1534
+ let code = arg !== undefined
1231
1535
  ? lowerer.lowerExprExpecting(arg, F64)
1232
1536
  : { kind: "libCall", fn: "process.currentExitCode", args: [], type: F64, loc };
1537
+ // process.exit(code) assigns process.exitCode before the 'exit'
1538
+ // listeners run. Only a program that reads the property can observe
1539
+ // that, so only such a program records the assignment.
1540
+ if (arg !== undefined && programReadsExitCode(lowerer)) {
1541
+ const binding = lowerer.declareHiddenLocal("%exitCode", F64);
1542
+ code = {
1543
+ kind: "seqExpr",
1544
+ stmts: [
1545
+ { kind: "varDecl", localId: binding.id, init: code, loc },
1546
+ {
1547
+ kind: "exprStmt",
1548
+ expr: {
1549
+ kind: "libCall",
1550
+ fn: "process.setExitCodeTracked",
1551
+ args: [varRef(binding.id, F64, loc)],
1552
+ type: VOID,
1553
+ loc,
1554
+ },
1555
+ loc,
1556
+ },
1557
+ ],
1558
+ result: varRef(binding.id, F64, loc),
1559
+ type: F64,
1560
+ loc,
1561
+ };
1562
+ }
1233
1563
  return { kind: "libCall", fn: "process.exit", args: [code], type: VOID, loc };
1234
1564
  }
1235
1565
  return null; // process.argv(...) etc. are tsc errors before lowering
@@ -1241,6 +1571,14 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1241
1571
  * BEFORE the optional-chain machinery: `process.getuid` has no value
1242
1572
  * lowering for the chain to guard. Null when this isn't that shape. */
1243
1573
  export function lowerProcessOptionalMethodCall(lowerer, expr) {
1574
+ // `process.send!(message)`: the asserted direct call of the optional
1575
+ // member (the @types/node spelling under strict null checks).
1576
+ if (!expr.questionDotToken &&
1577
+ ts.isNonNullExpression(expr.expression) &&
1578
+ ts.isPropertyAccessExpression(expr.expression.expression) &&
1579
+ !expr.expression.expression.questionDotToken &&
1580
+ lowerer.stdlibGlobalMember(expr.expression.expression, "process") === "send")
1581
+ return lowerProcessIpcSend(lowerer, expr);
1244
1582
  if (!expr.questionDotToken)
1245
1583
  return null;
1246
1584
  if (!ts.isPropertyAccessExpression(expr.expression))
@@ -1250,8 +1588,8 @@ export function lowerProcessOptionalMethodCall(lowerer, expr) {
1250
1588
  return lowerProcessIpcSend(lowerer, expr);
1251
1589
  if (member === null || !PROCESS_CREDENTIAL_FNS.has(member))
1252
1590
  return null;
1253
- if (expr.arguments.length !== 0) {
1254
- lowerer.noLowering(`process.${member} with ${expr.arguments.length} arguments`, expr);
1591
+ if (expr.arguments.nodes.length !== 0) {
1592
+ lowerer.noLowering(`process.${member} with ${expr.arguments.nodes.length} arguments`, expr);
1255
1593
  }
1256
1594
  return processCredentialCall(member, locOf(expr));
1257
1595
  }
@@ -1277,4 +1615,35 @@ function processCredentialCall(member, loc) {
1277
1615
  loc,
1278
1616
  };
1279
1617
  }
1618
+ /** `process.getBuiltinModule("node:os")`: a string-literal id naming a
1619
+ * supported builtin whose call the checker types as that module's
1620
+ * namespace (@types/node's BuiltInModule map) answers the namespace value
1621
+ * `import * as ns` binds, so its members key the builtin tables at their
1622
+ * use sites. The receiver may be cast (`(process as P)`) and the call
1623
+ * optional: Node 24's process always has the member, and the cast changes
1624
+ * no runtime value. Other ids keep the dynamic loader (undefined for
1625
+ * unknown ids, Node's argument errors). */
1626
+ export function lowerProcessBuiltinModuleNamespace(lowerer, call) {
1627
+ const callee = call.expression;
1628
+ if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== "getBuiltinModule")
1629
+ return null;
1630
+ const id = call.arguments.nodes[0];
1631
+ if (call.arguments.nodes.length !== 1 || !id || !ts.isStringLiteralLike(id))
1632
+ return null;
1633
+ let receiver = callee.expression;
1634
+ while (ts.isParenthesizedExpression(receiver) ||
1635
+ ts.isAsExpression(receiver) ||
1636
+ ts.isSatisfiesExpression(receiver) ||
1637
+ ts.isNonNullExpression(receiver))
1638
+ receiver = receiver.expression;
1639
+ if (!lowerer.isStdlibGlobal(receiver, "process"))
1640
+ return null;
1641
+ const module = canonicalBuiltinModule(id.text);
1642
+ if (module === null)
1643
+ return null;
1644
+ const type = lowerer.mapTypeOf(lowerer.checker.getNonNullableType(lowerer.typeOf(call)));
1645
+ if (type?.kind !== "moduleNs" || type.moduleId !== `builtin:${module}`)
1646
+ return null;
1647
+ return { kind: "moduleNsRef", moduleId: type.moduleId, type, loc: locOf(call) };
1648
+ }
1280
1649
  //# sourceMappingURL=process.js.map