@scriptc/compiler 0.3.6 → 0.4.1

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 (1358) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +717 -55
  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 +20 -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 +9 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/link-plan-core.d.ts +2 -0
  16. package/dist/backend/link-plan-core.js +2 -0
  17. package/dist/backend/link-plan-core.js.map +1 -1
  18. package/dist/backend/link-plan.d.ts +1 -0
  19. package/dist/backend/link-plan.js +1 -0
  20. package/dist/backend/link-plan.js.map +1 -1
  21. package/dist/backend/llvm/alloc.d.ts +41 -4
  22. package/dist/backend/llvm/alloc.js +138 -7
  23. package/dist/backend/llvm/alloc.js.map +1 -1
  24. package/dist/backend/llvm/alloc.test.js +30 -1
  25. package/dist/backend/llvm/alloc.test.js.map +1 -1
  26. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  27. package/dist/backend/llvm/array-search.js +3 -1
  28. package/dist/backend/llvm/array-search.js.map +1 -1
  29. package/dist/backend/llvm/array-search.test.js +1 -1
  30. package/dist/backend/llvm/blocks.d.ts +8 -0
  31. package/dist/backend/llvm/blocks.js +43 -1
  32. package/dist/backend/llvm/blocks.js.map +1 -1
  33. package/dist/backend/llvm/blocks.test.js +22 -1
  34. package/dist/backend/llvm/blocks.test.js.map +1 -1
  35. package/dist/backend/llvm/byte-numbers.js +15 -5
  36. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  37. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  38. package/dist/backend/llvm/bytes-alias.js +20 -0
  39. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  40. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  41. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  42. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  43. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  44. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  45. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  46. package/dist/backend/llvm/call-lifetimes.js +50 -1
  47. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  48. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  49. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  50. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  51. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  52. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  53. package/dist/backend/llvm/classes.d.ts +38 -1
  54. package/dist/backend/llvm/classes.js +185 -35
  55. package/dist/backend/llvm/classes.js.map +1 -1
  56. package/dist/backend/llvm/classes.test.js +79 -17
  57. package/dist/backend/llvm/classes.test.js.map +1 -1
  58. package/dist/backend/llvm/common.d.ts +21 -3
  59. package/dist/backend/llvm/common.js +51 -3
  60. package/dist/backend/llvm/common.js.map +1 -1
  61. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  62. package/dist/backend/llvm/constant-callbacks.js +55 -12
  63. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  64. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  65. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  66. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  67. package/dist/backend/llvm/counted-loops.js +37 -0
  68. package/dist/backend/llvm/counted-loops.js.map +1 -1
  69. package/dist/backend/llvm/dense-array-access.d.ts +15 -4
  70. package/dist/backend/llvm/dense-array-access.js +125 -44
  71. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  72. package/dist/backend/llvm/dense-array-access.test.js +63 -3
  73. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  74. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  75. package/dist/backend/llvm/dense-array-loops.js +162 -0
  76. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  77. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  78. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  79. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  80. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  81. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  82. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  83. package/dist/backend/llvm/dyn.d.ts +37 -4
  84. package/dist/backend/llvm/dyn.js +354 -183
  85. package/dist/backend/llvm/dyn.js.map +1 -1
  86. package/dist/backend/llvm/emit-function.d.ts +64 -0
  87. package/dist/backend/llvm/emit-function.js +1193 -0
  88. package/dist/backend/llvm/emit-function.js.map +1 -0
  89. package/dist/backend/llvm/emit-module.d.ts +24 -0
  90. package/dist/backend/llvm/emit-module.js +1557 -0
  91. package/dist/backend/llvm/emit-module.js.map +1 -0
  92. package/dist/backend/llvm/emit-statements.d.ts +59 -0
  93. package/dist/backend/llvm/emit-statements.js +2041 -0
  94. package/dist/backend/llvm/emit-statements.js.map +1 -0
  95. package/dist/backend/llvm/emitter.d.ts +566 -291
  96. package/dist/backend/llvm/emitter.js +728 -4671
  97. package/dist/backend/llvm/emitter.js.map +1 -1
  98. package/dist/backend/llvm/emitter.test.js +57 -3
  99. package/dist/backend/llvm/emitter.test.js.map +1 -1
  100. package/dist/backend/llvm/expr-async.js +73 -46
  101. package/dist/backend/llvm/expr-async.js.map +1 -1
  102. package/dist/backend/llvm/expr-async.test.js +1 -1
  103. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  104. package/dist/backend/llvm/expr-bytes.js +76 -29
  105. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  106. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  107. package/dist/backend/llvm/expr-callbacks.js +48 -11
  108. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  109. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  110. package/dist/backend/llvm/expr-calls.js +87 -56
  111. package/dist/backend/llvm/expr-calls.js.map +1 -1
  112. package/dist/backend/llvm/expr-calls.test.js +1 -1
  113. package/dist/backend/llvm/expr-containers.js +45 -24
  114. package/dist/backend/llvm/expr-containers.js.map +1 -1
  115. package/dist/backend/llvm/expr-control.js +16 -16
  116. package/dist/backend/llvm/expr-control.js.map +1 -1
  117. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  118. package/dist/backend/llvm/expr-dynamic.js +113 -66
  119. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  120. package/dist/backend/llvm/expr-primitives.js +124 -28
  121. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  122. package/dist/backend/llvm/expr-primitives.test.js +57 -2
  123. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  124. package/dist/backend/llvm/expr-records.d.ts +1 -1
  125. package/dist/backend/llvm/expr-records.js +32 -11
  126. package/dist/backend/llvm/expr-records.js.map +1 -1
  127. package/dist/backend/llvm/expr-stream-bridges.js +65 -27
  128. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  129. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  130. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  131. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  132. package/dist/backend/llvm/int32-abi.test.js +2 -2
  133. package/dist/backend/llvm/integer-clones.js +3 -3
  134. package/dist/backend/llvm/integer-clones.js.map +1 -1
  135. package/dist/backend/llvm/integer-clones.test.js +3 -3
  136. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  137. package/dist/backend/llvm/integer-remainder.js +156 -22
  138. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  139. package/dist/backend/llvm/intern-tables.test.js +1 -1
  140. package/dist/backend/llvm/js-ic.d.ts +18 -0
  141. package/dist/backend/llvm/js-ic.js +712 -0
  142. package/dist/backend/llvm/js-ic.js.map +1 -0
  143. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  144. package/dist/backend/llvm/jsval-encoding.js +20 -0
  145. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  146. package/dist/backend/llvm/jsval.d.ts +12 -0
  147. package/dist/backend/llvm/jsval.js +616 -0
  148. package/dist/backend/llvm/jsval.js.map +1 -0
  149. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  150. package/dist/backend/llvm/lazy-captures.js +39 -17
  151. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  152. package/dist/backend/llvm/lib-abi.js +1 -1
  153. package/dist/backend/llvm/lib-abi.js.map +1 -1
  154. package/dist/backend/llvm/lib-connect.js +1 -1
  155. package/dist/backend/llvm/lib-connect.js.map +1 -1
  156. package/dist/backend/llvm/lib-datagram.js +14 -8
  157. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  158. package/dist/backend/llvm/lib-dispatch.js +189 -23
  159. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  160. package/dist/backend/llvm/lib-filesystem.js +42 -13
  161. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  162. package/dist/backend/llvm/lib-http2.js +3 -3
  163. package/dist/backend/llvm/lib-http2.js.map +1 -1
  164. package/dist/backend/llvm/lib-lookup.js +2 -2
  165. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  166. package/dist/backend/llvm/lib-network.js +56 -22
  167. package/dist/backend/llvm/lib-network.js.map +1 -1
  168. package/dist/backend/llvm/lib-process.js +94 -53
  169. package/dist/backend/llvm/lib-process.js.map +1 -1
  170. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  171. package/dist/backend/llvm/lib-shared.js +209 -6
  172. package/dist/backend/llvm/lib-shared.js.map +1 -1
  173. package/dist/backend/llvm/lib-stream.js +46 -16
  174. package/dist/backend/llvm/lib-stream.js.map +1 -1
  175. package/dist/backend/llvm/lib-test.js +43 -7
  176. package/dist/backend/llvm/lib-test.js.map +1 -1
  177. package/dist/backend/llvm/lib-tls.js +4 -9
  178. package/dist/backend/llvm/lib-tls.js.map +1 -1
  179. package/dist/backend/llvm/local-array-reads.js +42 -33
  180. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  181. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  182. package/dist/backend/llvm/local-extents.d.ts +19 -0
  183. package/dist/backend/llvm/local-extents.js +169 -0
  184. package/dist/backend/llvm/local-extents.js.map +1 -0
  185. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  186. package/dist/backend/llvm/local-extents.test.js +92 -0
  187. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  188. package/dist/backend/llvm/local-union-storage.js +7 -7
  189. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  190. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  191. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  192. package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
  193. package/dist/backend/llvm/map-number-lookup.js +45 -9
  194. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  195. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  196. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  197. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  198. package/dist/backend/llvm/narrow-guards.js +215 -0
  199. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  200. package/dist/backend/llvm/nullable-unions.d.ts +64 -6
  201. package/dist/backend/llvm/nullable-unions.js +103 -6
  202. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  203. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  204. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  205. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  206. package/dist/backend/llvm/publish.d.ts +7 -0
  207. package/dist/backend/llvm/publish.js +50 -19
  208. package/dist/backend/llvm/publish.js.map +1 -1
  209. package/dist/backend/llvm/publish.test.js +1 -1
  210. package/dist/backend/llvm/receivers.d.ts +31 -0
  211. package/dist/backend/llvm/receivers.js +395 -0
  212. package/dist/backend/llvm/receivers.js.map +1 -0
  213. package/dist/backend/llvm/record-results.d.ts +12 -1
  214. package/dist/backend/llvm/record-results.js +64 -4
  215. package/dist/backend/llvm/record-results.js.map +1 -1
  216. package/dist/backend/llvm/reference-effects.js +9 -0
  217. package/dist/backend/llvm/reference-effects.js.map +1 -1
  218. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  219. package/dist/backend/llvm/reference-writes.js +142 -6
  220. package/dist/backend/llvm/reference-writes.js.map +1 -1
  221. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  222. package/dist/backend/llvm/reference-writes.test.js +88 -0
  223. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  224. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  225. package/dist/backend/llvm/regex-matchers.js +33 -0
  226. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  227. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  228. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  229. package/dist/backend/llvm/regions.d.ts +1 -1
  230. package/dist/backend/llvm/regions.js +10 -7
  231. package/dist/backend/llvm/regions.js.map +1 -1
  232. package/dist/backend/llvm/regions.test.js +8 -2
  233. package/dist/backend/llvm/regions.test.js.map +1 -1
  234. package/dist/backend/llvm/shapes.d.ts +74 -45
  235. package/dist/backend/llvm/shapes.js +289 -28
  236. package/dist/backend/llvm/shapes.js.map +1 -1
  237. package/dist/backend/llvm/shapes.test.js +37 -3
  238. package/dist/backend/llvm/shapes.test.js.map +1 -1
  239. package/dist/backend/llvm/speculative-integers.d.ts +20 -1
  240. package/dist/backend/llvm/speculative-integers.js +94 -6
  241. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  242. package/dist/backend/llvm/speculative-integers.test.js +55 -1
  243. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  244. package/dist/backend/llvm/split-loops.js +2 -2
  245. package/dist/backend/llvm/split-loops.js.map +1 -1
  246. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  247. package/dist/backend/llvm/stack-objects.js +133 -10
  248. package/dist/backend/llvm/stack-objects.js.map +1 -1
  249. package/dist/backend/llvm/stack-objects.test.js +55 -1
  250. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  251. package/dist/backend/llvm/stack-unions.test.js +1 -1
  252. package/dist/backend/llvm/string-construction.test.js +1 -1
  253. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  254. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  255. package/dist/backend/llvm/string-reads.d.ts +1 -1
  256. package/dist/backend/llvm/string-reads.js +4 -4
  257. package/dist/backend/llvm/string-reads.js.map +1 -1
  258. package/dist/backend/llvm/string-slices.d.ts +25 -0
  259. package/dist/backend/llvm/string-slices.js +207 -1
  260. package/dist/backend/llvm/string-slices.js.map +1 -1
  261. package/dist/backend/llvm/string-slices.test.js +139 -2
  262. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  263. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  264. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  265. package/dist/backend/llvm/thread-slots.js +142 -0
  266. package/dist/backend/llvm/thread-slots.js.map +1 -0
  267. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  268. package/dist/backend/llvm/thread-slots.test.js +111 -0
  269. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  270. package/dist/backend/llvm/union-repr.d.ts +7 -7
  271. package/dist/backend/llvm/union-repr.js +18 -2
  272. package/dist/backend/llvm/union-repr.js.map +1 -1
  273. package/dist/backend/llvm/union-retype.test.js +17 -3
  274. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  275. package/dist/backend/llvm/walkers.d.ts +2 -2
  276. package/dist/backend/llvm/walkers.js +51 -26
  277. package/dist/backend/llvm/walkers.js.map +1 -1
  278. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  279. package/dist/backend/llvm/wasm-modules.js +66 -0
  280. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  281. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  282. package/dist/backend/llvm/wrapping-sums.js +11 -3
  283. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  284. package/dist/backend/mangle.d.ts +12 -0
  285. package/dist/backend/mangle.js +18 -0
  286. package/dist/backend/mangle.js.map +1 -1
  287. package/dist/backend/may-throw.d.ts +3 -0
  288. package/dist/backend/may-throw.js +4 -2
  289. package/dist/backend/may-throw.js.map +1 -1
  290. package/dist/backend/may-throw.test.js +1 -1
  291. package/dist/backend/native/contracts.d.ts +57 -0
  292. package/dist/backend/native/executable.js +211 -139
  293. package/dist/backend/native/executable.js.map +1 -1
  294. package/dist/backend/native/library.js +2 -0
  295. package/dist/backend/native/library.js.map +1 -1
  296. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  297. package/dist/backend/native/runtime-inputs.js +1 -0
  298. package/dist/backend/native/runtime-inputs.js.map +1 -1
  299. package/dist/backend/native-codegen.d.ts +6 -0
  300. package/dist/backend/native-codegen.js +19 -0
  301. package/dist/backend/native-codegen.js.map +1 -1
  302. package/dist/backend/native-codegen.test.js +27 -0
  303. package/dist/backend/native-codegen.test.js.map +1 -1
  304. package/dist/backend/native-link-info-core.d.ts +48 -0
  305. package/dist/backend/native-link-info-core.js.map +1 -1
  306. package/dist/backend/native-profile.d.ts +32 -0
  307. package/dist/backend/native-profile.js +39 -0
  308. package/dist/backend/native-profile.js.map +1 -0
  309. package/dist/backend/native-profile.test.d.ts +1 -0
  310. package/dist/backend/native-profile.test.js +58 -0
  311. package/dist/backend/native-profile.test.js.map +1 -0
  312. package/dist/backend/native-tools.d.ts +14 -0
  313. package/dist/backend/native-tools.js +13 -0
  314. package/dist/backend/native-tools.js.map +1 -1
  315. package/dist/backend/publication.test.js +1 -1
  316. package/dist/backend/runtime-abi.d.ts +2 -2
  317. package/dist/backend/runtime-abi.js +2 -2
  318. package/dist/backend/runtime-pack-core.d.ts +13 -1
  319. package/dist/backend/runtime-pack-core.js +14 -1
  320. package/dist/backend/runtime-pack-core.js.map +1 -1
  321. package/dist/backend/runtime-pack-native.js +1 -1
  322. package/dist/backend/runtime-pack-native.js.map +1 -1
  323. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  324. package/dist/backend/runtime-pack-native.test.js +31 -0
  325. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  326. package/dist/backend/runtime-pack-targets.test.js +9 -1
  327. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  328. package/dist/backend/runtime-pack.test.js +9 -1
  329. package/dist/backend/runtime-pack.test.js.map +1 -1
  330. package/dist/backend/stack-observations.d.ts +22 -0
  331. package/dist/backend/stack-observations.js +382 -0
  332. package/dist/backend/stack-observations.js.map +1 -0
  333. package/dist/backend/stack-observations.test.d.ts +1 -0
  334. package/dist/backend/stack-observations.test.js +233 -0
  335. package/dist/backend/stack-observations.test.js.map +1 -0
  336. package/dist/backend/target-diagnostics.js +15 -0
  337. package/dist/backend/target-diagnostics.js.map +1 -1
  338. package/dist/backend/target-diagnostics.test.js +1 -1
  339. package/dist/backend/warm-cache.js +8 -0
  340. package/dist/backend/warm-cache.js.map +1 -1
  341. package/dist/backend/young-nursery.d.ts +7 -0
  342. package/dist/backend/young-nursery.js +10 -0
  343. package/dist/backend/young-nursery.js.map +1 -0
  344. package/dist/cli/command.js +106 -4
  345. package/dist/cli/command.js.map +1 -1
  346. package/dist/cli/host.d.ts +3 -0
  347. package/dist/cli/output-options.d.ts +2 -0
  348. package/dist/cli/output-options.js +9 -0
  349. package/dist/cli/output-options.js.map +1 -1
  350. package/dist/cli/usage.d.ts +21 -1
  351. package/dist/cli/usage.js +43 -1
  352. package/dist/cli/usage.js.map +1 -1
  353. package/dist/compat/fetch-profile.js +10 -1
  354. package/dist/compat/fetch-profile.js.map +1 -1
  355. package/dist/compile-types.d.ts +22 -0
  356. package/dist/contracts/check.js +25 -8
  357. package/dist/contracts/check.js.map +1 -1
  358. package/dist/contracts/int32-elements.d.ts +115 -0
  359. package/dist/contracts/int32-elements.js +1179 -0
  360. package/dist/contracts/int32-elements.js.map +1 -0
  361. package/dist/coverage/report.d.ts +16 -0
  362. package/dist/coverage/report.js +182 -1
  363. package/dist/coverage/report.js.map +1 -1
  364. package/dist/coverage/surface-manifest.js +16 -3
  365. package/dist/coverage/surface-manifest.js.map +1 -1
  366. package/dist/coverage/verdict-cache.d.ts +2 -0
  367. package/dist/coverage/verdict-cache.js +12 -0
  368. package/dist/coverage/verdict-cache.js.map +1 -1
  369. package/dist/coverage/verdict-cache.test.js +2 -1
  370. package/dist/coverage/verdict-cache.test.js.map +1 -1
  371. package/dist/diagnostics/diagnostic.d.ts +10 -6
  372. package/dist/diagnostics/diagnostic.js +29 -21
  373. package/dist/diagnostics/diagnostic.js.map +1 -1
  374. package/dist/diagnostics/envelope.d.ts +39 -2
  375. package/dist/diagnostics/envelope.js.map +1 -1
  376. package/dist/diagnostics/render.d.ts +7 -0
  377. package/dist/diagnostics/render.js +50 -13
  378. package/dist/diagnostics/render.js.map +1 -1
  379. package/dist/diagnostics/render.test.d.ts +1 -0
  380. package/dist/diagnostics/render.test.js +49 -0
  381. package/dist/diagnostics/render.test.js.map +1 -0
  382. package/dist/executable/executable-cache.d.ts +27 -0
  383. package/dist/executable/executable-cache.js +19 -1
  384. package/dist/executable/executable-cache.js.map +1 -1
  385. package/dist/executable/executable-cache.test.js +12 -1
  386. package/dist/executable/executable-cache.test.js.map +1 -1
  387. package/dist/executable/prepare.js +2 -1
  388. package/dist/executable/prepare.js.map +1 -1
  389. package/dist/frontend/analysis.js +6 -1
  390. package/dist/frontend/analysis.js.map +1 -1
  391. package/dist/frontend/arguments-usage.d.ts +8 -0
  392. package/dist/frontend/arguments-usage.js +98 -0
  393. package/dist/frontend/arguments-usage.js.map +1 -1
  394. package/dist/frontend/arguments-usage.test.d.ts +1 -0
  395. package/dist/frontend/arguments-usage.test.js +32 -0
  396. package/dist/frontend/arguments-usage.test.js.map +1 -0
  397. package/dist/frontend/builtin-modules.d.ts +16 -2
  398. package/dist/frontend/builtin-modules.js +40 -7
  399. package/dist/frontend/builtin-modules.js.map +1 -1
  400. package/dist/frontend/builtin-package-aliases.d.ts +24 -0
  401. package/dist/frontend/builtin-package-aliases.js +133 -0
  402. package/dist/frontend/builtin-package-aliases.js.map +1 -0
  403. package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
  404. package/dist/frontend/builtin-package-aliases.test.js +48 -0
  405. package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
  406. package/dist/frontend/cjs-syntax.js +52 -51
  407. package/dist/frontend/cjs-syntax.js.map +1 -1
  408. package/dist/frontend/contract-types.d.ts +3 -0
  409. package/dist/frontend/contract-types.js +36 -7
  410. package/dist/frontend/contract-types.js.map +1 -1
  411. package/dist/frontend/dts-paths.d.ts +4 -0
  412. package/dist/frontend/dts-paths.js +9 -1
  413. package/dist/frontend/dts-paths.js.map +1 -1
  414. package/dist/frontend/experimental-import.d.ts +5 -1
  415. package/dist/frontend/experimental-import.js +26 -7
  416. package/dist/frontend/experimental-import.js.map +1 -1
  417. package/dist/frontend/fork-target.js +20 -22
  418. package/dist/frontend/fork-target.js.map +1 -1
  419. package/dist/frontend/fork-target.test.js +2 -1
  420. package/dist/frontend/fork-target.test.js.map +1 -1
  421. package/dist/frontend/function-completion.js +6 -6
  422. package/dist/frontend/function-completion.js.map +1 -1
  423. package/dist/frontend/helper-tokens.js +15 -3
  424. package/dist/frontend/helper-tokens.js.map +1 -1
  425. package/dist/frontend/helper-tokens.test.js +7 -1
  426. package/dist/frontend/helper-tokens.test.js.map +1 -1
  427. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  428. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  429. package/dist/frontend/input-tracker.d.ts +3 -0
  430. package/dist/frontend/input-tracker.js +32 -3
  431. package/dist/frontend/input-tracker.js.map +1 -1
  432. package/dist/frontend/lib-contract.js +36 -32
  433. package/dist/frontend/lib-contract.js.map +1 -1
  434. package/dist/frontend/lib-exports.js +3 -3
  435. package/dist/frontend/lib-exports.js.map +1 -1
  436. package/dist/frontend/lowering/array-values.d.ts +8 -3
  437. package/dist/frontend/lowering/array-values.js +60 -11
  438. package/dist/frontend/lowering/array-values.js.map +1 -1
  439. package/dist/frontend/lowering/assert-instances.js +4 -4
  440. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  441. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  442. package/dist/frontend/lowering/assertion-identity.js +70 -0
  443. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  444. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  445. package/dist/frontend/lowering/assertion-members.js +185 -0
  446. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  447. package/dist/frontend/lowering/binding-analysis.js +27 -20
  448. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  449. package/dist/frontend/lowering/builtin-calls.js +63 -5
  450. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  451. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  452. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  453. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  454. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  455. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  457. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  459. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/blob.js +8 -6
  461. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  462. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +31 -0
  463. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +205 -0
  464. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  465. package/dist/frontend/lowering/builtins/callable-aliases.js +17 -5
  466. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  468. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  470. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  471. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  473. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  475. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  476. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  478. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  479. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
  481. package/dist/frontend/lowering/builtins/compression.js +107 -44
  482. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  483. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  484. package/dist/frontend/lowering/builtins/constants.js +28 -7
  485. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  486. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  487. package/dist/frontend/lowering/builtins/crypto.js +215 -38
  488. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  489. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  490. package/dist/frontend/lowering/builtins/dates.js +92 -16
  491. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  492. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  493. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  494. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  495. package/dist/frontend/lowering/builtins/ecdh.d.ts +10 -0
  496. package/dist/frontend/lowering/builtins/ecdh.js +208 -0
  497. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
  498. package/dist/frontend/lowering/builtins/environment.js +3 -3
  499. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  500. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  501. package/dist/frontend/lowering/builtins/errors.js +169 -3
  502. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  503. package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
  504. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  505. package/dist/frontend/lowering/builtins/filesystem.js +77 -77
  506. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  508. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  510. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  512. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  513. package/dist/frontend/lowering/builtins/json.js +284 -24
  514. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  515. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  516. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  517. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  518. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  519. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/module-calls.js +55 -44
  521. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  522. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  523. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  524. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  526. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  527. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  529. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  530. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  532. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  533. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  534. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  535. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  536. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  537. package/dist/frontend/lowering/builtins/performance.js +259 -8
  538. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  539. package/dist/frontend/lowering/builtins/process.d.ts +41 -1
  540. package/dist/frontend/lowering/builtins/process.js +505 -99
  541. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  542. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  543. package/dist/frontend/lowering/builtins/promises.js +326 -43
  544. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  545. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +40 -0
  546. package/dist/frontend/lowering/builtins/promisify-callback.js +338 -0
  547. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  548. package/dist/frontend/lowering/builtins/properties.js +37 -1
  549. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  550. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  551. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  552. package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
  553. package/dist/frontend/lowering/builtins/readline.js +136 -39
  554. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  555. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  556. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  557. package/dist/frontend/lowering/builtins/reflection.js +42 -14
  558. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  559. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  560. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  561. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  562. package/dist/frontend/lowering/builtins/strings.js +101 -12
  563. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  564. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  565. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  566. package/dist/frontend/lowering/builtins/timers.js +79 -30
  567. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  568. package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
  569. package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
  570. package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
  571. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  572. package/dist/frontend/lowering/builtins/url.js +120 -17
  573. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  574. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  575. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  576. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  577. package/dist/frontend/lowering/builtins/v8.js +105 -0
  578. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  579. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  580. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  581. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  582. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  583. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  584. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  585. package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
  586. package/dist/frontend/lowering/builtins/workers.js +193 -8
  587. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  588. package/dist/frontend/lowering/call-arguments.js +69 -14
  589. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  590. package/dist/frontend/lowering/call-signatures.d.ts +23 -1
  591. package/dist/frontend/lowering/call-signatures.js +379 -55
  592. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  593. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  594. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  595. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  596. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  597. package/dist/frontend/lowering/cjs-exports-object.js +561 -0
  598. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  599. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  600. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  601. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  602. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  603. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  604. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  605. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  606. package/dist/frontend/lowering/class-attributes.js +378 -0
  607. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  608. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  609. package/dist/frontend/lowering/class-callbacks.js +21 -10
  610. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  611. package/dist/frontend/lowering/class-construction.js +49 -4
  612. package/dist/frontend/lowering/class-construction.js.map +1 -1
  613. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  614. package/dist/frontend/lowering/class-descriptors.js +8 -8
  615. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  616. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  617. package/dist/frontend/lowering/class-dynamic-dispatch.js +1124 -90
  618. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  619. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  620. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  621. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  622. package/dist/frontend/lowering/class-iterables.js +31 -0
  623. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  624. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  625. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  626. package/dist/frontend/lowering/class-method-values.js +56 -10
  627. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  628. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  629. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  630. package/dist/frontend/lowering/class-protocols.d.ts +10 -0
  631. package/dist/frontend/lowering/class-protocols.js +76 -45
  632. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  633. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  634. package/dist/frontend/lowering/class-prototypes.js +86 -19
  635. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  636. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  637. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  638. package/dist/frontend/lowering/class-static-data.js +2 -2
  639. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  640. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  641. package/dist/frontend/lowering/class-to-primitive.js +264 -0
  642. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  643. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  644. package/dist/frontend/lowering/class-unions.js +102 -1
  645. package/dist/frontend/lowering/class-unions.js.map +1 -1
  646. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  647. package/dist/frontend/lowering/code-generation.js +127 -0
  648. package/dist/frontend/lowering/code-generation.js.map +1 -0
  649. package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
  650. package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
  651. package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
  652. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  653. package/dist/frontend/lowering/coercions/function-adapters.js +239 -68
  654. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  655. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  656. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  657. package/dist/frontend/lowering/coercions/structural.js +35 -3
  658. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  659. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  660. package/dist/frontend/lowering/coercions/unions.js +57 -1
  661. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  662. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  663. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  664. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  665. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  666. package/dist/frontend/lowering/construction-escapes.js +8 -8
  667. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  668. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  669. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  670. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  671. package/dist/frontend/lowering/constructor-returns.js +477 -0
  672. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  673. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  674. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  675. package/dist/frontend/lowering/containers/array-callbacks.d.ts +17 -0
  676. package/dist/frontend/lowering/containers/array-callbacks.js +287 -118
  677. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  678. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  679. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  680. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  681. package/dist/frontend/lowering/containers/array-construction.js +58 -13
  682. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  683. package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
  684. package/dist/frontend/lowering/containers/array-from-async.js +159 -14
  685. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  686. package/dist/frontend/lowering/containers/array-methods.js +94 -77
  687. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  688. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  689. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  690. package/dist/frontend/lowering/containers/bytes.d.ts +9 -0
  691. package/dist/frontend/lowering/containers/bytes.js +649 -113
  692. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  693. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  694. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  695. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  696. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  697. package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
  698. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  699. package/dist/frontend/lowering/containers/collection-methods.js +126 -28
  700. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  701. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  702. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  703. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  704. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  705. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  706. package/dist/frontend/lowering/containers/for-of.js +19 -19
  707. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  708. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  709. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  710. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  711. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  712. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  713. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  714. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  715. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  716. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  717. package/dist/frontend/lowering/containers/string-and-regexp.js +455 -30
  718. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  719. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  720. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  721. package/dist/frontend/lowering/cycle-initialization.d.ts +30 -10
  722. package/dist/frontend/lowering/cycle-initialization.js +191 -35
  723. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  724. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  725. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  726. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  727. package/dist/frontend/lowering/devirtualize.js +27 -7
  728. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  729. package/dist/frontend/lowering/divergences.d.ts +0 -5
  730. package/dist/frontend/lowering/divergences.js +62 -125
  731. package/dist/frontend/lowering/divergences.js.map +1 -1
  732. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  733. package/dist/frontend/lowering/dyn-streams.js +257 -0
  734. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  735. package/dist/frontend/lowering/error-methods.js +4 -1
  736. package/dist/frontend/lowering/error-methods.js.map +1 -1
  737. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  738. package/dist/frontend/lowering/error-name-order.js +93 -0
  739. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  740. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  741. package/dist/frontend/lowering/expressions/array-literals.js +723 -0
  742. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  743. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  744. package/dist/frontend/lowering/expressions/binary.js +2557 -0
  745. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  746. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  747. package/dist/frontend/lowering/expressions/element-access.js +1804 -0
  748. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  749. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  750. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  751. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  752. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  753. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  754. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  755. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  756. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  757. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +52 -0
  758. package/dist/frontend/lowering/expressions/keyed-field-targets.js +307 -0
  759. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  760. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  761. package/dist/frontend/lowering/expressions/narrowing.js +1337 -0
  762. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  763. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  764. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  765. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  766. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  767. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  768. package/dist/frontend/lowering/expressions/object-literals.js +301 -86
  769. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  770. package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -2
  771. package/dist/frontend/lowering/expressions/optional-chains.js +103 -17
  772. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  773. package/dist/frontend/lowering/expressions/property-access.d.ts +115 -0
  774. package/dist/frontend/lowering/expressions/property-access.js +3787 -0
  775. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  776. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  777. package/dist/frontend/lowering/expressions/relational.js +1724 -0
  778. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  779. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  780. package/dist/frontend/lowering/expressions/typeof.js +551 -0
  781. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  782. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  783. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  784. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  785. package/dist/frontend/lowering/expressions/updates.js +780 -0
  786. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  787. package/dist/frontend/lowering/function-context.d.ts +10 -0
  788. package/dist/frontend/lowering/function-context.js +11 -1
  789. package/dist/frontend/lowering/function-context.js.map +1 -1
  790. package/dist/frontend/lowering/function-returns.js +52 -28
  791. package/dist/frontend/lowering/function-returns.js.map +1 -1
  792. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  793. package/dist/frontend/lowering/general-streams.js +108 -0
  794. package/dist/frontend/lowering/general-streams.js.map +1 -0
  795. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  796. package/dist/frontend/lowering/generator-delegation.js +191 -1
  797. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  798. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  799. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  800. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  801. package/dist/frontend/lowering/generic-functions.d.ts +43 -0
  802. package/dist/frontend/lowering/generic-functions.js +593 -118
  803. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  804. package/dist/frontend/lowering/handle-properties.d.ts +24 -0
  805. package/dist/frontend/lowering/handle-properties.js +281 -0
  806. package/dist/frontend/lowering/handle-properties.js.map +1 -0
  807. package/dist/frontend/lowering/import-meta.js +2 -2
  808. package/dist/frontend/lowering/import-meta.js.map +1 -1
  809. package/dist/frontend/lowering/intern-tables.js +10 -9
  810. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  811. package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
  812. package/dist/frontend/lowering/iterable-spelling.js +38 -0
  813. package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
  814. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  815. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  816. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  817. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  818. package/dist/frontend/lowering/js-class-fields.js +170 -0
  819. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  820. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  821. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  822. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  823. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  824. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  825. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  826. package/dist/frontend/lowering/json-require.d.ts +22 -0
  827. package/dist/frontend/lowering/json-require.js +131 -0
  828. package/dist/frontend/lowering/json-require.js.map +1 -0
  829. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  830. package/dist/frontend/lowering/key-order-witness.js +641 -0
  831. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  832. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  833. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  834. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  835. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  836. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  837. package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
  838. package/dist/frontend/lowering/lower-array-sort.js +117 -21
  839. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  840. package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
  841. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  842. package/dist/frontend/lowering/lower-assert.js +61 -60
  843. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  844. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  845. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  846. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  847. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  848. package/dist/frontend/lowering/lower-builtin-values.js +33 -3
  849. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  850. package/dist/frontend/lowering/lower-calls.js +1404 -448
  851. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  852. package/dist/frontend/lowering/lower-classes.d.ts +54 -3
  853. package/dist/frontend/lowering/lower-classes.js +1529 -472
  854. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  855. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  856. package/dist/frontend/lowering/lower-comptime.js +111 -13
  857. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  858. package/dist/frontend/lowering/lower-console.js +13 -11
  859. package/dist/frontend/lowering/lower-console.js.map +1 -1
  860. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  861. package/dist/frontend/lowering/lower-dgram.js +241 -21
  862. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  863. package/dist/frontend/lowering/lower-enums.js +113 -14
  864. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  865. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  866. package/dist/frontend/lowering/lower-event-emitter.js +258 -70
  867. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  868. package/dist/frontend/lowering/lower-event-target.js +2 -2
  869. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  870. package/dist/frontend/lowering/lower-expando.js +17 -13
  871. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  872. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  873. package/dist/frontend/lowering/lower-exprs.js +1509 -12486
  874. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  875. package/dist/frontend/lowering/lower-functions.js +72 -22
  876. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  877. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  878. package/dist/frontend/lowering/lower-generators.js +39 -20
  879. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  880. package/dist/frontend/lowering/lower-global-value.js +5 -1
  881. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  882. package/dist/frontend/lowering/lower-inspect.js +900 -107
  883. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  884. package/dist/frontend/lowering/lower-mixins.js +23 -20
  885. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  886. package/dist/frontend/lowering/lower-mock.d.ts +8 -1
  887. package/dist/frontend/lowering/lower-mock.js +185 -18
  888. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  889. package/dist/frontend/lowering/lower-modules.d.ts +11 -3
  890. package/dist/frontend/lowering/lower-modules.js +445 -94
  891. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  892. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  893. package/dist/frontend/lowering/lower-namespaces.js +65 -33
  894. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  895. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  896. package/dist/frontend/lowering/lower-node-module.js +147 -14
  897. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  898. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  899. package/dist/frontend/lowering/lower-server.js +514 -101
  900. package/dist/frontend/lowering/lower-server.js.map +1 -1
  901. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  902. package/dist/frontend/lowering/lower-stdlib.js +179 -118
  903. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  904. package/dist/frontend/lowering/lower-stmts.d.ts +30 -7
  905. package/dist/frontend/lowering/lower-stmts.js +1950 -433
  906. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  907. package/dist/frontend/lowering/lower-stream.d.ts +3 -0
  908. package/dist/frontend/lowering/lower-stream.js +398 -56
  909. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  910. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  911. package/dist/frontend/lowering/lower-test.js +437 -62
  912. package/dist/frontend/lowering/lower-test.js.map +1 -1
  913. package/dist/frontend/lowering/lower-timers.js +96 -32
  914. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  915. package/dist/frontend/lowering/lower-url.js +1 -1
  916. package/dist/frontend/lowering/lower-url.js.map +1 -1
  917. package/dist/frontend/lowering/lowerer.d.ts +424 -27
  918. package/dist/frontend/lowering/lowerer.js +2062 -310
  919. package/dist/frontend/lowering/lowerer.js.map +1 -1
  920. package/dist/frontend/lowering/lowerer.test.js +10 -4
  921. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  922. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  923. package/dist/frontend/lowering/maybe-promise.js +249 -0
  924. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  925. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  926. package/dist/frontend/lowering/module-member-this.js +262 -0
  927. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  928. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  929. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  930. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  931. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  932. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  933. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  934. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  935. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  936. package/dist/frontend/lowering/native-ffi.js +11 -11
  937. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  938. package/dist/frontend/lowering/object-factory-new.js +6 -8
  939. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  940. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  941. package/dist/frontend/lowering/private-brands.js +265 -0
  942. package/dist/frontend/lowering/private-brands.js.map +1 -0
  943. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  944. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  945. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  946. package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
  947. package/dist/frontend/lowering/rebindable-functions.js +54 -0
  948. package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
  949. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  950. package/dist/frontend/lowering/require-initialization.js +246 -0
  951. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  952. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  953. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  954. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  955. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  956. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  957. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  958. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  959. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  960. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  961. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  962. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  963. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  964. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  965. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  966. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  967. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  968. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  969. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  970. package/dist/frontend/lowering/split-consumers.js +4 -4
  971. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  972. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  973. package/dist/frontend/lowering/static-function-names.js +212 -0
  974. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  975. package/dist/frontend/lowering/static-this.js +6 -6
  976. package/dist/frontend/lowering/static-this.js.map +1 -1
  977. package/dist/frontend/lowering/static-typeof.d.ts +26 -0
  978. package/dist/frontend/lowering/static-typeof.js +133 -0
  979. package/dist/frontend/lowering/static-typeof.js.map +1 -0
  980. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  981. package/dist/frontend/lowering/strict-mode.js +31 -0
  982. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  983. package/dist/frontend/lowering/string-index-bounds.js +13 -12
  984. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  985. package/dist/frontend/lowering/string-index.d.ts +12 -0
  986. package/dist/frontend/lowering/string-index.js +72 -1
  987. package/dist/frontend/lowering/string-index.js.map +1 -1
  988. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  989. package/dist/frontend/lowering/surfaces.js +282 -45
  990. package/dist/frontend/lowering/surfaces.js.map +1 -1
  991. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  992. package/dist/frontend/lowering/symbol-fields.js +204 -36
  993. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  994. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  995. package/dist/frontend/lowering/symbol-methods.js +24 -6
  996. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  997. package/dist/frontend/lowering/thenables.d.ts +16 -0
  998. package/dist/frontend/lowering/thenables.js +124 -0
  999. package/dist/frontend/lowering/thenables.js.map +1 -0
  1000. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  1001. package/dist/frontend/lowering/thread-slots.js +208 -0
  1002. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  1003. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  1004. package/dist/frontend/lowering/typed-arguments.js +472 -0
  1005. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  1006. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  1007. package/dist/frontend/lowering/union-retag.js +27 -0
  1008. package/dist/frontend/lowering/union-retag.js.map +1 -1
  1009. package/dist/frontend/lowering/union-retag.test.js +24 -1
  1010. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  1011. package/dist/frontend/lowering/var-hoisting.js +6 -6
  1012. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  1013. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  1014. package/dist/frontend/mock-shapes.js +13 -6
  1015. package/dist/frontend/mock-shapes.js.map +1 -1
  1016. package/dist/frontend/module-source-candidates.js +1 -1
  1017. package/dist/frontend/module-source-candidates.js.map +1 -1
  1018. package/dist/frontend/module-source-candidates.test.js +2 -1
  1019. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  1020. package/dist/frontend/module-syntax.js +8 -8
  1021. package/dist/frontend/module-syntax.js.map +1 -1
  1022. package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
  1023. package/dist/frontend/npm-static-builtin-aliases.js +65 -0
  1024. package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
  1025. package/dist/frontend/npm-static-bundled-chunks.d.ts +58 -0
  1026. package/dist/frontend/npm-static-bundled-chunks.js +981 -0
  1027. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  1028. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  1029. package/dist/frontend/npm-static-bundled-chunks.test.js +399 -0
  1030. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  1031. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  1032. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  1033. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  1034. package/dist/frontend/npm-static-bundled-esm.js +988 -0
  1035. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  1036. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  1037. package/dist/frontend/npm-static-bundled-esm.test.js +336 -0
  1038. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  1039. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  1040. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  1041. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  1042. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  1043. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  1044. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  1045. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  1046. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  1047. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  1048. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  1049. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  1050. package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
  1051. package/dist/frontend/npm-static-enum-iife.js +280 -0
  1052. package/dist/frontend/npm-static-enum-iife.js.map +1 -0
  1053. package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
  1054. package/dist/frontend/npm-static-enum-iife.test.js +116 -0
  1055. package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
  1056. package/dist/frontend/npm-static-prune.js +36 -24
  1057. package/dist/frontend/npm-static-prune.js.map +1 -1
  1058. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  1059. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  1060. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  1061. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  1062. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  1063. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  1064. package/dist/frontend/npm-static-subtyping.js +7 -9
  1065. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  1066. package/dist/frontend/npm-static.d.ts +25 -1
  1067. package/dist/frontend/npm-static.js +212 -16
  1068. package/dist/frontend/npm-static.js.map +1 -1
  1069. package/dist/frontend/npm-static.test.js +22 -1
  1070. package/dist/frontend/npm-static.test.js.map +1 -1
  1071. package/dist/frontend/npm.js +13 -0
  1072. package/dist/frontend/npm.js.map +1 -1
  1073. package/dist/frontend/package-shims.d.ts +47 -0
  1074. package/dist/frontend/package-shims.js +300 -0
  1075. package/dist/frontend/package-shims.js.map +1 -0
  1076. package/dist/frontend/pipeline.js +230 -26
  1077. package/dist/frontend/pipeline.js.map +1 -1
  1078. package/dist/frontend/pipeline.test.js +22 -1
  1079. package/dist/frontend/pipeline.test.js.map +1 -1
  1080. package/dist/frontend/program-analysis.d.ts +6 -1
  1081. package/dist/frontend/program-analysis.js +7 -0
  1082. package/dist/frontend/program-analysis.js.map +1 -1
  1083. package/dist/frontend/program.d.ts +100 -2
  1084. package/dist/frontend/program.js +1627 -262
  1085. package/dist/frontend/program.js.map +1 -1
  1086. package/dist/frontend/program.test.js +76 -6
  1087. package/dist/frontend/program.test.js.map +1 -1
  1088. package/dist/frontend/resolve.js +49 -2
  1089. package/dist/frontend/resolve.js.map +1 -1
  1090. package/dist/frontend/resolve.test.js +49 -0
  1091. package/dist/frontend/resolve.test.js.map +1 -1
  1092. package/dist/frontend/services.d.ts +26 -1
  1093. package/dist/frontend/services.js +59 -3
  1094. package/dist/frontend/services.js.map +1 -1
  1095. package/dist/frontend/services.test.js +2 -1
  1096. package/dist/frontend/services.test.js.map +1 -1
  1097. package/dist/frontend/threads-import.js +1 -1
  1098. package/dist/frontend/threads-import.js.map +1 -1
  1099. package/dist/frontend/tier-analysis.d.ts +71 -0
  1100. package/dist/frontend/tier-analysis.js +522 -0
  1101. package/dist/frontend/tier-analysis.js.map +1 -0
  1102. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1103. package/dist/frontend/ts7/api-conformance.js +7 -0
  1104. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1105. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1106. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1107. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1108. package/dist/frontend/ts7/ast-node.js +64 -18
  1109. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1110. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1111. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1112. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1113. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1114. package/dist/frontend/ts7/ast.d.ts +1 -0
  1115. package/dist/frontend/ts7/ast.js +3 -2
  1116. package/dist/frontend/ts7/ast.js.map +1 -1
  1117. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1118. package/dist/frontend/ts7/checker-backend.js +88 -0
  1119. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1120. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1121. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1122. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1123. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1124. package/dist/frontend/ts7/checker-cache.js +0 -6
  1125. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1126. package/dist/frontend/ts7/checker.d.ts +18 -11
  1127. package/dist/frontend/ts7/checker.js +42 -55
  1128. package/dist/frontend/ts7/checker.js.map +1 -1
  1129. package/dist/frontend/ts7/checker.test.js +10 -7
  1130. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1131. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1132. package/dist/frontend/ts7/diagnostic.js +22 -0
  1133. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1134. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1135. package/dist/frontend/ts7/node-functions.js +18 -0
  1136. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1137. package/dist/frontend/ts7/program-host.d.ts +10 -5
  1138. package/dist/frontend/ts7/program-host.js +19 -0
  1139. package/dist/frontend/ts7/program-host.js.map +1 -1
  1140. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1141. package/dist/frontend/ts7/rpc-api.js +8 -1
  1142. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1143. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1144. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1145. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1146. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1147. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1148. package/dist/frontend/ts7/semantic-model.d.ts +57 -24
  1149. package/dist/frontend/ts7/semantic-model.js +114 -16
  1150. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1151. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1152. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1153. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1154. package/dist/frontend/ts7/semantic-types.js +1 -1
  1155. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1156. package/dist/frontend/ts7/session.d.ts +30 -15
  1157. package/dist/frontend/ts7/session.js +8 -5
  1158. package/dist/frontend/ts7/session.js.map +1 -1
  1159. package/dist/frontend/ts7/session.test.js +9 -5
  1160. package/dist/frontend/ts7/session.test.js.map +1 -1
  1161. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1162. package/dist/frontend/ts7/source-parser.js +24 -3
  1163. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1164. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1165. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1166. package/dist/frontend/type-mapper.d.ts +122 -2
  1167. package/dist/frontend/type-mapper.js +2735 -723
  1168. package/dist/frontend/type-mapper.js.map +1 -1
  1169. package/dist/frontend/type-only-imports.d.ts +28 -0
  1170. package/dist/frontend/type-only-imports.js +122 -0
  1171. package/dist/frontend/type-only-imports.js.map +1 -0
  1172. package/dist/frontend/worker-target.js +8 -8
  1173. package/dist/frontend/worker-target.js.map +1 -1
  1174. package/dist/index.d.ts +4 -1
  1175. package/dist/index.js +87 -8
  1176. package/dist/index.js.map +1 -1
  1177. package/dist/ir/analysis.js +4 -2
  1178. package/dist/ir/analysis.js.map +1 -1
  1179. package/dist/ir/api.d.ts +1 -1
  1180. package/dist/ir/api.js +1 -1
  1181. package/dist/ir/api.js.map +1 -1
  1182. package/dist/ir/array-length-stability.d.ts +31 -0
  1183. package/dist/ir/array-length-stability.js +249 -0
  1184. package/dist/ir/array-length-stability.js.map +1 -0
  1185. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1186. package/dist/ir/array-length-stability.test.js +134 -0
  1187. package/dist/ir/array-length-stability.test.js.map +1 -0
  1188. package/dist/ir/build.d.ts +2 -2
  1189. package/dist/ir/build.js +1 -1
  1190. package/dist/ir/build.js.map +1 -1
  1191. package/dist/ir/builtin-effects.js +116 -0
  1192. package/dist/ir/builtin-effects.js.map +1 -1
  1193. package/dist/ir/builtin-signatures.d.ts +1 -1
  1194. package/dist/ir/builtin-signatures.js +540 -29
  1195. package/dist/ir/builtin-signatures.js.map +1 -1
  1196. package/dist/ir/byte-numbers.js +3 -0
  1197. package/dist/ir/byte-numbers.js.map +1 -1
  1198. package/dist/ir/callback-specialization.d.ts +37 -0
  1199. package/dist/ir/callback-specialization.js +459 -0
  1200. package/dist/ir/callback-specialization.js.map +1 -0
  1201. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1202. package/dist/ir/callback-specialization.test.js +208 -0
  1203. package/dist/ir/callback-specialization.test.js.map +1 -0
  1204. package/dist/ir/capture-values.d.ts +0 -1
  1205. package/dist/ir/capture-values.js +51 -40
  1206. package/dist/ir/capture-values.js.map +1 -1
  1207. package/dist/ir/constant-globals.test.js +1 -1
  1208. package/dist/ir/constant-tables.test.js +1 -1
  1209. package/dist/ir/field-values.test.js +1 -1
  1210. package/dist/ir/final-fields.test.js +1 -1
  1211. package/dist/ir/function-references.test.js +9 -1
  1212. package/dist/ir/function-references.test.js.map +1 -1
  1213. package/dist/ir/init-only-globals.test.js +1 -1
  1214. package/dist/ir/initializer-bindings.test.js +1 -1
  1215. package/dist/ir/int32-slots.d.ts +14 -0
  1216. package/dist/ir/int32-slots.js +97 -14
  1217. package/dist/ir/int32-slots.js.map +1 -1
  1218. package/dist/ir/int32-slots.test.js +1 -1
  1219. package/dist/ir/integer-loop-facts.d.ts +7 -0
  1220. package/dist/ir/integer-loop-facts.js +103 -17
  1221. package/dist/ir/integer-loop-facts.js.map +1 -1
  1222. package/dist/ir/integer-loops.d.ts +1 -1
  1223. package/dist/ir/integer-loops.js +39 -9
  1224. package/dist/ir/integer-loops.js.map +1 -1
  1225. package/dist/ir/integer-loops.test.js +104 -0
  1226. package/dist/ir/integer-loops.test.js.map +1 -1
  1227. package/dist/ir/integer-ranges.d.ts +13 -1
  1228. package/dist/ir/integer-ranges.js +125 -26
  1229. package/dist/ir/integer-ranges.js.map +1 -1
  1230. package/dist/ir/integer-ranges.test.js +273 -2
  1231. package/dist/ir/integer-ranges.test.js.map +1 -1
  1232. package/dist/ir/intrinsic-signatures.js +6 -0
  1233. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1234. package/dist/ir/ir.d.ts +221 -58
  1235. package/dist/ir/ir.js +127 -12
  1236. package/dist/ir/ir.js.map +1 -1
  1237. package/dist/ir/ir.test.js +10 -0
  1238. package/dist/ir/ir.test.js.map +1 -1
  1239. package/dist/ir/js-ic.d.ts +52 -0
  1240. package/dist/ir/js-ic.js +199 -0
  1241. package/dist/ir/js-ic.js.map +1 -0
  1242. package/dist/ir/js-ic.test.d.ts +1 -0
  1243. package/dist/ir/js-ic.test.js +148 -0
  1244. package/dist/ir/js-ic.test.js.map +1 -0
  1245. package/dist/ir/jsval.d.ts +8 -0
  1246. package/dist/ir/jsval.js +399 -0
  1247. package/dist/ir/jsval.js.map +1 -0
  1248. package/dist/ir/jsval.test.d.ts +1 -0
  1249. package/dist/ir/jsval.test.js +239 -0
  1250. package/dist/ir/jsval.test.js.map +1 -0
  1251. package/dist/ir/runtime-features.d.ts +183 -33
  1252. package/dist/ir/runtime-features.js +795 -422
  1253. package/dist/ir/runtime-features.js.map +1 -1
  1254. package/dist/ir/scalar-records.test.js +1 -1
  1255. package/dist/ir/self-captures.d.ts +33 -0
  1256. package/dist/ir/self-captures.js +245 -0
  1257. package/dist/ir/self-captures.js.map +1 -0
  1258. package/dist/ir/self-captures.test.d.ts +1 -0
  1259. package/dist/ir/self-captures.test.js +135 -0
  1260. package/dist/ir/self-captures.test.js.map +1 -0
  1261. package/dist/ir/serialize.d.ts +1 -1
  1262. package/dist/ir/serialize.js +7 -4
  1263. package/dist/ir/serialize.js.map +1 -1
  1264. package/dist/ir/tiers.d.ts +26 -0
  1265. package/dist/ir/tiers.js +101 -0
  1266. package/dist/ir/tiers.js.map +1 -0
  1267. package/dist/ir/tiers.test.d.ts +1 -0
  1268. package/dist/ir/tiers.test.js +140 -0
  1269. package/dist/ir/tiers.test.js.map +1 -0
  1270. package/dist/ir/traverse.js +201 -150
  1271. package/dist/ir/traverse.js.map +1 -1
  1272. package/dist/ir/traverse.test.js +33 -30
  1273. package/dist/ir/traverse.test.js.map +1 -1
  1274. package/dist/ir/unshare.js +65 -3
  1275. package/dist/ir/unshare.js.map +1 -1
  1276. package/dist/ir/unshare.test.js +1 -1
  1277. package/dist/ir/validate.js +196 -76
  1278. package/dist/ir/validate.js.map +1 -1
  1279. package/dist/ir/validate.test.js +41 -11
  1280. package/dist/ir/validate.test.js.map +1 -1
  1281. package/dist/library/fence-eval.test.js +1 -1
  1282. package/dist/library/int-infer.test.js +4 -4
  1283. package/dist/library/ir-policy.js +14 -0
  1284. package/dist/library/ir-policy.js.map +1 -1
  1285. package/dist/library/library-cache.d.ts +1 -0
  1286. package/dist/library/library-cache.js.map +1 -1
  1287. package/dist/library/library-cache.test.js +5 -5
  1288. package/dist/library/library-profile.d.ts +4 -4
  1289. package/dist/library/library-profile.js +35 -7
  1290. package/dist/library/library-profile.js.map +1 -1
  1291. package/dist/library/prepare.js +13 -1
  1292. package/dist/library/prepare.js.map +1 -1
  1293. package/dist/native/cli.js +22 -0
  1294. package/dist/native/cli.js.map +1 -1
  1295. package/dist/native/compiler.js +35 -6
  1296. package/dist/native/compiler.js.map +1 -1
  1297. package/dist/native/compiler.test.js +2 -2
  1298. package/dist/native/executable-cache.js +3 -0
  1299. package/dist/native/executable-cache.js.map +1 -1
  1300. package/dist/native/prepare.js +10 -0
  1301. package/dist/native/prepare.js.map +1 -1
  1302. package/dist/native/sanitizer.test.js +19 -0
  1303. package/dist/native/sanitizer.test.js.map +1 -1
  1304. package/dist/native/toolchain.d.ts +2 -0
  1305. package/dist/native/toolchain.js +10 -1
  1306. package/dist/native/toolchain.js.map +1 -1
  1307. package/dist/native/toolchain.test.js +39 -1
  1308. package/dist/native/toolchain.test.js.map +1 -1
  1309. package/dist/startup-cache.d.ts +1 -0
  1310. package/dist/startup-cache.js +1 -0
  1311. package/dist/startup-cache.js.map +1 -1
  1312. package/dist/wasm/base64.d.ts +5 -0
  1313. package/dist/wasm/base64.js +62 -0
  1314. package/dist/wasm/base64.js.map +1 -0
  1315. package/dist/wasm/binary.d.ts +36 -0
  1316. package/dist/wasm/binary.js +1976 -0
  1317. package/dist/wasm/binary.js.map +1 -0
  1318. package/dist/wasm/binary.test.d.ts +1 -0
  1319. package/dist/wasm/binary.test.js +190 -0
  1320. package/dist/wasm/binary.test.js.map +1 -0
  1321. package/dist/wasm/discover.d.ts +38 -0
  1322. package/dist/wasm/discover.js +377 -0
  1323. package/dist/wasm/discover.js.map +1 -0
  1324. package/dist/wasm/discover.test.d.ts +1 -0
  1325. package/dist/wasm/discover.test.js +24 -0
  1326. package/dist/wasm/discover.test.js.map +1 -0
  1327. package/dist/wasm/module.d.ts +151 -0
  1328. package/dist/wasm/module.js +575 -0
  1329. package/dist/wasm/module.js.map +1 -0
  1330. package/dist/wasm/translate.d.ts +48 -0
  1331. package/dist/wasm/translate.js +2129 -0
  1332. package/dist/wasm/translate.js.map +1 -0
  1333. package/dist/wasm/translate.test.d.ts +1 -0
  1334. package/dist/wasm/translate.test.js +207 -0
  1335. package/dist/wasm/translate.test.js.map +1 -0
  1336. package/package.json +22 -20
  1337. package/shims/fs-extra/core/api.ts +1192 -0
  1338. package/shims/fs-extra/index.ts +9 -0
  1339. package/shims/undici/core/agent.ts +163 -0
  1340. package/shims/undici/core/api.ts +93 -0
  1341. package/shims/undici/core/client.ts +1304 -0
  1342. package/shims/undici/core/connector.ts +157 -0
  1343. package/shims/undici/core/diagnostics-types.ts +68 -0
  1344. package/shims/undici/core/diagnostics.ts +16 -0
  1345. package/shims/undici/core/dispatcher.ts +574 -0
  1346. package/shims/undici/core/errors-v5.ts +22 -0
  1347. package/shims/undici/core/errors-v7.ts +25 -0
  1348. package/shims/undici/core/errors.ts +255 -0
  1349. package/shims/undici/core/fetch.ts +635 -0
  1350. package/shims/undici/core/pool.ts +280 -0
  1351. package/shims/undici/core/readable.ts +268 -0
  1352. package/shims/undici/core/request.ts +313 -0
  1353. package/shims/undici/core/timers.ts +80 -0
  1354. package/shims/undici/core/types.ts +167 -0
  1355. package/shims/undici/core/util.ts +67 -0
  1356. package/shims/undici/v5.ts +119 -0
  1357. package/shims/undici/v7.ts +119 -0
  1358. package/surface-manifest.json +304 -22
@@ -1,77 +1,300 @@
1
1
  import { isDirentShape, RUNTIME_EMITTER_CLASS, RUNTIME_EVENT_CLASS, RUNTIME_EVENT_TARGET_CLASS, RUNTIME_STREAM_CLASSES, } from "./ir.js";
2
2
  import { everyModuleNode } from "./traverse.js";
3
+ import { JsIcSites, hasJsIcSite } from "./js-ic.js";
4
+ /** The fixed-width Buffer read/write method names (both "UInt" and "Uint"
5
+ * spellings) a checked-dynamic method call routes to scr_bytes_dyn.c. */
6
+ export const DYN_BUFFER_NUM_METHODS = new Set(["read", "write"].flatMap((rw) => [
7
+ ...["UInt", "Uint"].flatMap((u) => ["8", "16LE", "16BE", "32LE", "32BE"].map((w) => `${rw}${u}${w}`)),
8
+ ...[
9
+ "Int8",
10
+ "Int16LE",
11
+ "Int16BE",
12
+ "Int32LE",
13
+ "Int32BE",
14
+ "FloatLE",
15
+ "FloatBE",
16
+ "DoubleLE",
17
+ "DoubleBE",
18
+ ].map((n) => `${rw}${n}`),
19
+ ]));
3
20
  const DYN_ASYNC_LIB_FNS = new Set([
4
- "fs.callbackValue",
5
- "fs.callbackCall",
6
- "fs.callbackGlob",
21
+ // DEP0040 rides the dyn-async unit's warning machinery.
7
22
  "async.awaitDyn",
8
- "timers.immediatePromise",
23
+ // The child property table adopts thenables through the dyn-async unit.
24
+ "child.propsInstall",
25
+ "child.propsResolve",
9
26
  "crypto.native",
10
27
  "dyn.promiseAll",
11
28
  "dyn.promiseAllSettled",
12
29
  "dyn.promiseAny",
13
- "process.onUncaughtException",
30
+ "dyn.promiseResolve",
31
+ "fs.callbackCall",
32
+ "fs.callbackGlob",
33
+ "fs.callbackValue",
34
+ "process.deprecationFlag",
35
+ "process.emitWarning",
36
+ "process.emitWarningText",
37
+ "process.offRejectionHandled",
14
38
  "process.offUncaughtException",
15
- "process.onUnhandledRejection",
16
39
  "process.offUnhandledRejection",
40
+ "process.offWarning",
17
41
  "process.onRejectionHandled",
18
- "process.offRejectionHandled",
42
+ "process.onUncaughtException",
43
+ "process.onUnhandledRejection",
19
44
  "process.onWarning",
20
- "process.offWarning",
21
- "process.emitWarning",
22
- "process.emitWarningText",
23
- "process.deprecationFlag",
24
45
  "process.setDeprecationFlag",
46
+ "process.setEmitWarning",
47
+ "punycode.warn",
48
+ "timers.immediatePromise",
25
49
  // The performance timeline (scr_perf.c, linked with this unit for its
26
50
  // MaxPerformanceEntryBufferExceededWarning).
27
- "perf.mark",
28
- "perf.measure",
29
- "perf.entries",
30
51
  "perf.clearMarks",
31
52
  "perf.clearMeasures",
32
- "perf.entryName",
33
- "perf.entryType",
34
- "perf.entryStart",
35
- "perf.entryDuration",
53
+ "perf.entries",
36
54
  "perf.entryDetail",
55
+ "perf.entryDuration",
37
56
  "perf.entryKeep",
57
+ "perf.entryName",
38
58
  "perf.entryRef",
59
+ "perf.entryStart",
60
+ "perf.entryType",
61
+ "perf.mark",
62
+ "perf.measure",
39
63
  // Blob and File (scr_blob.c, linked with this unit, which boxes their
40
64
  // reads as dyn promises).
41
- "blob.new",
65
+ "als.disable",
66
+ "als.enterWith",
67
+ "als.exitRun",
68
+ "als.get",
69
+ "als.new",
70
+ "als.run",
71
+ "blob.arrayBuffer",
72
+ "blob.bytes",
42
73
  "blob.fileNew",
74
+ "blob.is",
75
+ "blob.new",
43
76
  "blob.slice",
44
77
  "blob.text",
45
- "blob.bytes",
46
- "blob.arrayBuffer",
47
- "blob.is",
48
- "util.styleText",
49
- "util.inherits",
50
- "util.deprecate",
78
+ "dc.chanBindStore",
79
+ "dc.chanRunStores",
80
+ "dc.chanUnbindStore",
51
81
  "util.callbackify",
82
+ "util.promisifyDyn",
52
83
  "util.debuglog",
53
- "als.new",
54
- "als.get",
55
- "als.run",
56
- "als.exitRun",
84
+ "util.deprecate",
85
+ "util.inherits",
86
+ "util.styleText",
87
+ ]);
88
+ /** The libCalls that enter AsyncLocalStorage stores (RuntimeFeatures
89
+ * asyncContext). */
90
+ const ASYNC_CONTEXT_LIB_FNS = new Set([
57
91
  "als.enterWith",
58
- "als.disable",
92
+ "als.exitRun",
93
+ "als.run",
59
94
  "dc.chanBindStore",
60
- "dc.chanUnbindStore",
61
95
  "dc.chanRunStores",
96
+ // getTestContext() reads the test runner's entry in the same snapshot.
97
+ "test.context",
98
+ "test.hasContext",
62
99
  ]);
63
100
  const LEGACY_URL_LIB_FNS = new Set([
64
- "url.legacyParse",
65
- "url.legacyFormat",
66
- "url.legacyResolve",
67
101
  "url.domainToASCII",
68
102
  "url.domainToUnicode",
103
+ "url.legacyFormat",
104
+ "url.legacyParse",
105
+ "url.legacyResolve",
69
106
  ]);
70
107
  const UTIL_CALLABLE_LIB_FNS = new Set([
71
- "util.inherits",
72
- "util.deprecate",
73
108
  "util.callbackify",
74
109
  "util.debuglog",
110
+ "util.deprecate",
111
+ "util.inherits",
112
+ ]);
113
+ /** Entry points that link the regex unit: the regex and glob matchers (fs.glob's walk compiles its patterns with the glob matcher), and readline's terminal unit (scr_readline_tty.c), which measures with the regex unit's stripVTControlCharacters. */
114
+ const REGEX_LIB_FNS = new Set([
115
+ "dyn.nativeRegexIs",
116
+ "fs.callbackGlob",
117
+ "fs.globSync",
118
+ "fs.globTypesSync",
119
+ "fsp.globError",
120
+ "fsp.globStrings",
121
+ "fsp.globTypes",
122
+ "path.matchesGlob",
123
+ "path.win32MatchesGlob",
124
+ "regexp.escape",
125
+ "rl.cursorPos",
126
+ "rl.keypressStdin",
127
+ "rl.keypressStream",
128
+ "stdin.onKeypress",
129
+ "util.stripVTControlCharacters",
130
+ ]);
131
+ /** TextDecoder entry points over the legacy encodings. */
132
+ const LEGACY_TEXT_DECODER_LIB_FNS = new Set([
133
+ "text.decodeLegacy",
134
+ "text.decodeLegacyOptions",
135
+ "text.decodeStream",
136
+ ]);
137
+ /** Signal-taking readline, stream and timers/promises entry points, which register abort listeners. */
138
+ const ABORT_SIGNAL_LIB_FNS = new Set([
139
+ "events.onceSignal",
140
+ "http.clientSignal",
141
+ "http.requestDyn",
142
+ "http.requestDynCb",
143
+ "https.requestDyn",
144
+ "https.requestDynCb",
145
+ "rl.createSignal",
146
+ "rl.questionAsyncSignal",
147
+ "sp.finishedOptsSignal",
148
+ "sp.pipelineOptsSignal",
149
+ "stream.addAbortSignal",
150
+ "stream.addAbortSignalFn",
151
+ "stream.finishedOptsSignal",
152
+ "tp.schedulerWaitSignal",
153
+ "tp.setImmediateSignal",
154
+ "tp.setTimeoutSignal",
155
+ ]);
156
+ /** Entry points that link the stream unit (with STREAM_LIB_PREFIXES). */
157
+ const STREAM_LIB_FNS = new Set([
158
+ "child.stdioStream",
159
+ "console.bind",
160
+ "crypto.hashStream",
161
+ "crypto.hashStreamPiped",
162
+ "fileHandle.createReadStream",
163
+ "fileHandle.createWriteStream",
164
+ "fs.createReadStream",
165
+ "fs.createWriteStream",
166
+ "rl.inputFromDyn",
167
+ "rl.outputFromDyn",
168
+ "sp.finished",
169
+ "sp.pipeline",
170
+ "sp.pipelineStages",
171
+ "stream.addAbortSignal",
172
+ "stream.addAbortSignalFn",
173
+ "stream.destroy",
174
+ "stream.destroyErr",
175
+ "stream.dynNative",
176
+ "stream.dynNativePipe",
177
+ "stream.errored",
178
+ "stream.pipeDyn",
179
+ "stream.prop",
180
+ "stream.stdioWritable",
181
+ "stream.unboxDyn",
182
+ "stream.unpipeDyn",
183
+ "stream.workerStdio",
184
+ ]);
185
+ /** libCall name prefixes that link the stream unit. */
186
+ const STREAM_LIB_PREFIXES = [
187
+ "duplex.",
188
+ "fs.fsStream",
189
+ "passthrough.",
190
+ "readable.",
191
+ "sc.",
192
+ "sp.finishedOpts",
193
+ "sp.pipelineOpts",
194
+ "stream.finishedOpts",
195
+ "stream.pipelineStages",
196
+ "stream.set",
197
+ "transform.",
198
+ "writable.",
199
+ "zlib.stream",
200
+ ];
201
+ /** The Readable operators and Readable.from over a compiled generator or a checked-dynamic iterator (scr_stream_ops.c), which await through the dyn-async unit (with READABLE_DYN_ASYNC_PREFIXES). */
202
+ const READABLE_DYN_ASYNC_LIB_FNS = new Set([
203
+ "readable.fromAsyncGen",
204
+ "readable.fromAsyncIter",
205
+ "readable.fromDone",
206
+ "readable.fromDyn",
207
+ "readable.fromIter",
208
+ ]);
209
+ /** libCall name prefixes of the Readable entry points that await through the dyn-async unit. */
210
+ const READABLE_DYN_ASYNC_PREFIXES = ["readable.fromGen", "readable.op"];
211
+ /** Entry points that link the dyn-invoke unit. */
212
+ const DYN_INVOKE_LIB_FNS = new Set([
213
+ "dyn.arrayProtoCall",
214
+ "dyn.arrayPrototype",
215
+ "dyn.builtinFunction",
216
+ "dyn.builtinMethod",
217
+ "dyn.defineProperty",
218
+ "child.propsDefine",
219
+ "dyn.defineProps",
220
+ "dyn.definePrototypeProps",
221
+ "dyn.functionApply",
222
+ "dyn.globalConstructor",
223
+ "dyn.objCreateWithProperties",
224
+ "dyn.objectTag",
225
+ "stream.dynNative",
226
+ "stream.dynNativePipe",
227
+ "stream.pipeDyn",
228
+ "stream.unpipeDyn",
229
+ ]);
230
+ /** Member names whose constant-key dynamic reads answer the inherited Object.prototype member through the dyn-invoke unit. Mirrors expr-dynamic.ts INHERITED_OBJECT_MEMBERS (the IR layer does not import the backend). */
231
+ const INHERITED_MEMBER_NAMES = new Set([
232
+ "constructor",
233
+ "hasOwnProperty",
234
+ "propertyIsEnumerable",
235
+ "toString",
236
+ "valueOf",
237
+ ]);
238
+ /** Entry points that link the child-process unit (with CHILD_PROCESS_LIB_PREFIXES): the fork IPC channel on the process object. */
239
+ const CHILD_PROCESS_LIB_FNS = new Set([
240
+ "process.connected",
241
+ "process.disconnect",
242
+ "process.forkTarget",
243
+ "process.ipcOpen",
244
+ "process.onDisconnect",
245
+ "process.onMessage",
246
+ "process.send",
247
+ "process.sendCb",
248
+ ]);
249
+ /** libCall name prefixes that link the child-process unit. */
250
+ const CHILD_PROCESS_LIB_PREFIXES = ["child.", "cp.", "spawnRes.", "writer."];
251
+ /** The entry points scr_dyn_builtin_class.c defines. The unit calls
252
+ * listeners through the dyn-invoke unit, renders unhandled 'error'
253
+ * payloads through the inspect unit, creates EventEmitter's private
254
+ * symbols through the symbol unit and shares defaultMaxListeners with the
255
+ * emitter unit, so each of them links all five. */
256
+ const BUILTIN_CLASS_LIB_FNS = [
257
+ "dyn.builtinClass",
258
+ // the stream classes, through scr_dyn_builtin_stream.c
259
+ "dyn.builtinInstanceOf",
260
+ "dyn.builtinStreamClass",
261
+ "dyn.functionInstanceOf",
262
+ ];
263
+ /** Entry points that link the symbol unit, besides the sym. and disposable. families. */
264
+ const SYMBOL_LIB_FNS = new Set([
265
+ // EventEmitter's kShapeMode and kCapture properties
266
+ ...BUILTIN_CLASS_LIB_FNS,
267
+ "dyn.usingDispose",
268
+ "dyn.usingMethod",
269
+ "util.isDeepStrictEqual",
270
+ ]);
271
+ /** Entry points that link the querystring unit. */
272
+ const QS_LIB_FNS = new Set(["qs.parse", "qs.stringify", "qs.unescape"]);
273
+ /** Entry points that link the parseArgs unit. */
274
+ const PARSE_ARGS_LIB_FNS = new Set([
275
+ "util.isDeepStrictEqual",
276
+ "util.parseArgs",
277
+ "util.styleText",
278
+ ]);
279
+ /** String methods whose Unicode tables live in the regex unit's libunicode. */
280
+ const CASE_MAPPING_STR_METHODS = new Set([
281
+ "normalize",
282
+ "toLowerCase",
283
+ "toUpperCase",
284
+ ]);
285
+ /** Array methods that link the copying unit. */
286
+ const COPYING_ARR_METHODS = new Set([
287
+ "toReversed",
288
+ "toSpliced",
289
+ "with",
290
+ "withUndefined",
291
+ ]);
292
+ /** Typed-array methods that link the copying unit. */
293
+ const COPYING_BYTES_METHODS = new Set([
294
+ "join",
295
+ "toArray",
296
+ "toReversed",
297
+ "with",
75
298
  ]);
76
299
  /** Inspect types and expressions together in one traversal. This is a fresh
77
300
  * snapshot: callers may mutate an IR module between compilation passes. */
@@ -112,359 +335,553 @@ function boxesPromise(t, tables, seen) {
112
335
  const def = tables.unions.get(t.unionId);
113
336
  return def?.arms.some((a) => boxesPromise(a, tables, seen)) ?? false;
114
337
  }
338
+ case "object": {
339
+ // A boxed class instance exposes its fields as dyn values (Object.keys,
340
+ // spread, inspection), boxing a promise any field holds. It
341
+ // materializes inherited fields too, and the instance can be any
342
+ // subclass.
343
+ const key = `class:${t.className}`;
344
+ if (seen.has(key))
345
+ return false;
346
+ seen.add(key);
347
+ const related = (def) => {
348
+ for (let c = def; c; c = c.base ? tables.classes.get(c.base) : undefined)
349
+ if (c.name === t.className)
350
+ return true;
351
+ return false;
352
+ };
353
+ for (const def of tables.classes.values()) {
354
+ if (!related(def))
355
+ continue;
356
+ for (let c = def; c; c = c.base ? tables.classes.get(c.base) : undefined)
357
+ if (c.fields.some((f) => boxesPromise(f.type, tables, seen)))
358
+ return true;
359
+ }
360
+ return false;
361
+ }
115
362
  default:
116
363
  return false;
117
364
  }
118
365
  }
119
- function scanRuntimeFeatures(mod, stopAt) {
120
- const features = {
121
- regex: false,
366
+ /** Whether `t` carries a dgram socket, given the carrier sets so far:
367
+ * structural through functions (parameters and result), promises and
368
+ * collections; named records, unions and class instances by the sets. */
369
+ function carriesDgram(t, carriers) {
370
+ switch (t.kind) {
371
+ case "dgramSocket":
372
+ return true;
373
+ case "func":
374
+ return t.params.some((p) => carriesDgram(p, carriers)) || carriesDgram(t.ret, carriers);
375
+ case "promise":
376
+ return carriesDgram(t.inner, carriers);
377
+ case "array":
378
+ case "set":
379
+ return carriesDgram(t.elem, carriers);
380
+ case "map":
381
+ return carriesDgram(t.key, carriers) || carriesDgram(t.value, carriers);
382
+ case "record":
383
+ return carriers.records.has(t.shapeId);
384
+ case "union":
385
+ return carriers.unions.has(t.unionId);
386
+ case "object":
387
+ // Any class may be the instance's runtime class or one of its bases.
388
+ return carriers.anyClass;
389
+ default:
390
+ return false;
391
+ }
392
+ }
393
+ /** The module's dgram carriers: a fixpoint over its records, unions and
394
+ * class fields. */
395
+ function dgramCarriers(tables) {
396
+ const carriers = { records: new Set(), unions: new Set(), anyClass: false };
397
+ for (let changed = true; changed;) {
398
+ changed = false;
399
+ for (const [id, shape] of tables.records)
400
+ if (!carriers.records.has(id) && shape.fields.some((f) => carriesDgram(f.type, carriers))) {
401
+ carriers.records.add(id);
402
+ changed = true;
403
+ }
404
+ for (const [id, def] of tables.unions)
405
+ if (!carriers.unions.has(id) && def.arms.some((a) => carriesDgram(a, carriers))) {
406
+ carriers.unions.add(id);
407
+ changed = true;
408
+ }
409
+ if (!carriers.anyClass &&
410
+ [...tables.classes.values()].some((c) => c.fields.some((f) => carriesDgram(f.type, carriers)))) {
411
+ carriers.anyClass = true;
412
+ changed = true;
413
+ }
414
+ }
415
+ return carriers;
416
+ }
417
+ /** Whether converting a value of type `t` to or from dyn converts a dgram
418
+ * socket, which goes through scr_dgram_dyn.c: the socket itself, or a
419
+ * function, collection, record, union, promise or class instance that
420
+ * carries one (boxed functions convert their parameters too). */
421
+ function mentionsDgramSocket(t, tables) {
422
+ tables.dgramCarriers ??= dgramCarriers(tables);
423
+ return carriesDgram(t, tables.dgramCarriers);
424
+ }
425
+ /** The libCall fns served by the OPTIONAL events unit (scr_events.c):
426
+ * process signal/exit listeners and the piped-stdin surface. */
427
+ const PROCESS_EVENT_LIB_FNS = new Set([
428
+ "process.offExit",
429
+ "process.offSignal",
430
+ "process.onExit",
431
+ "process.onSignal",
432
+ "process.stdio",
433
+ "stdin.nextChunk",
434
+ "stdin.onData",
435
+ "stdin.onEnd",
436
+ "stdin.onError",
437
+ // node:readline rides the stdin unit (scr_readline.c links beside
438
+ // scr_events.c under the same gate).
439
+ "rl.checkCompleter",
440
+ "rl.checkOptions",
441
+ "rl.close",
442
+ "rl.create",
443
+ "rl.createSignal",
444
+ "rl.cursor",
445
+ "rl.cursorPos",
446
+ "rl.getPrompt",
447
+ "rl.history",
448
+ "rl.isPromises",
449
+ "rl.isTerminal",
450
+ "rl.iterNext",
451
+ "rl.iterOpen",
452
+ "rl.iterReturn",
453
+ "rl.keypressStdin",
454
+ "rl.keypressStream",
455
+ "rl.line",
456
+ "rl.moves",
457
+ "rl.numProp",
458
+ "rl.on",
459
+ "rl.pause",
460
+ "rl.prompt",
461
+ "rl.promptWith",
462
+ "rl.question",
463
+ "rl.questionAsync",
464
+ "rl.questionAsyncDyn",
465
+ "rl.questionAsyncSignal",
466
+ "rl.questionAsyncSignalDyn",
467
+ "rl.questionDyn",
468
+ "rl.resume",
469
+ "rl.seq",
470
+ "rl.setHistory",
471
+ "rl.setOptions",
472
+ "rl.setPrompt",
473
+ "rl.setPromptDyn",
474
+ "rl.terminal",
475
+ "rl.uiClearLine",
476
+ "rl.uiClearScreenDown",
477
+ "rl.uiCommit",
478
+ "rl.uiCursorTo",
479
+ "rl.uiMoveCursor",
480
+ "rl.uiOpen",
481
+ "rl.uiOpenStream",
482
+ "rl.uiRollback",
483
+ "rl.write",
484
+ "rl.writeKey",
485
+ "stdin.onKeypress",
486
+ ]);
487
+ /** The legacy http2.* libCalls implemented by scr_http.c/scr_tls.c (the
488
+ * allowHTTP1 compatibility slice) — they must NOT pull scr_http2.c, so
489
+ * divergence-57 binaries keep their exact link line. */
490
+ const HTTP2_LEGACY_FNS = new Set([
491
+ "http2.streamNoop",
492
+ "http2.streamUndefCall",
493
+ ]);
494
+ /** Names that reach the extended process-stream surface (the
495
+ * SCR_STDIO_EXTENDED events unit): stdin.setEncoding and 'resize'. */
496
+ const STDIO_EXTENDED_NAMES = new Set(["setEncoding", "resize"]);
497
+ /** Gives every rule in the table one type. */
498
+ const rule = (r) => r;
499
+ /* The HTTP, HTTPS, HTTP/2 and TLS surfaces, which link the net unit. */
500
+ const NET_PREFIXES = ["net.", "http.", "tls.", "https.", "http2."];
501
+ /** One rule per runtime feature, sorted by name. A new feature is an
502
+ * entry here and its line in noRuntimeFeatures; RuntimeFeatures, the scan
503
+ * and its early exit derive from this table. The lists above keep one
504
+ * entry per line, sorted within each commented group, so changes that add
505
+ * different entries touch different lines. */
506
+ const RUNTIME_FEATURE_RULES = {
507
+ assert: rule({ prefixes: ["assert."] }),
508
+ /** The program enters AsyncLocalStorage stores (store.run, enterWith,
509
+ * a diagnostics_channel store binding) or reads the test runner's
510
+ * context (getTestContext): its timer, immediate, tick and
511
+ * queueMicrotask scheduling goes through the runtime's *_als entry
512
+ * points, which carry the active stores into each callback. */
513
+ asyncContext: rule({ fns: [...ASYNC_CONTEXT_LIB_FNS] }),
514
+ /** scr_wasm.c converts i64 values through BigInt. */
515
+ bigint: rule({
516
+ fns: ["process.hrtimeValue"],
517
+ prefixes: ["bigint.", "wasm."],
518
+ types: ["bigint"],
519
+ }),
520
+ childProcess: rule({
521
+ fns: [...CHILD_PROCESS_LIB_FNS],
522
+ prefixes: CHILD_PROCESS_LIB_PREFIXES,
523
+ types: ["child", "childStream", "childWriter", "spawnRes"],
524
+ }),
525
+ /** scr_cipher.c over the mbedTLS archive; DEP0182 reports through the
526
+ * process-warning unit, and unknown output encodings render through the
527
+ * inspect unit. */
528
+ cipher: rule({ fns: ["crypto.cipherNew"] }),
529
+ copying: rule({
530
+ expr: (node, _tables) => (node.kind === "arrIntrinsic" && COPYING_ARR_METHODS.has(node.method)) ||
531
+ (node.kind === "bytesIntrinsic" && COPYING_BYTES_METHODS.has(node.method)),
532
+ }),
533
+ dc: rule({ prefixes: ["dc."] }),
534
+ /** dns.lookup lives in the dgram unit. */
535
+ dgram: rule({ prefixes: ["dgram.", "dns."], types: ["dgramSocket"] }),
536
+ /** A dgram socket converts to or from an untyped value (its handle box,
537
+ * a boxed function or record that carries one): scr_dgram_dyn.c over
538
+ * the dgram unit. */
539
+ dgramDyn: rule({
540
+ expr: (node, tables) => (node.kind === "dynFrom" && mentionsDgramSocket(node.value.type, tables())) ||
541
+ (node.kind === "dynCheck" && mentionsDgramSocket(node.type, tables())),
542
+ }),
543
+ /** node:dns/promises: scr_dns_promises.c over the dgram unit. */
544
+ dnsPromises: rule({ fns: ["dns.promisesLookup", "dns.promisesLookupService"] }),
545
+ dynAsync: rule({
546
+ initial: (mod) => mod.workers === true ||
547
+ mod.functions.some((fn) => fn.async === true && fn.generator === undefined && fn.returnType.kind === "dyn"),
548
+ // The legacy url functions, crypto.createCipheriv and
549
+ // ecdh.setPublicKey emit their deprecation warnings through the
550
+ // dyn-async unit; scr_wasm.c boxes its handles and promises through it.
551
+ fns: [
552
+ ...DYN_ASYNC_LIB_FNS,
553
+ ...READABLE_DYN_ASYNC_LIB_FNS,
554
+ ...LEGACY_URL_LIB_FNS,
555
+ "crypto.cipherNew",
556
+ "crypto.ecdhNew",
557
+ ],
558
+ prefixes: [...READABLE_DYN_ASYNC_PREFIXES, "wasm."],
559
+ expr: (node, tables) => (node.kind === "awaitExpr" && node.type.kind === "dyn") ||
560
+ // Rejection reasons cross as dyn values (allSettled's records, any's
561
+ // AggregateError list).
562
+ (node.kind === "intrinsic" &&
563
+ (node.name === "promise.allSettled" || node.name === "promise.any")) ||
564
+ (node.kind === "dynFrom" && boxesPromise(node.value.type, tables(), new Set())),
565
+ }),
566
+ /** EventEmitter and the stream classes as untyped constructor values
567
+ * (scr_dyn_builtin_class.c), which call listeners through the dyn-invoke
568
+ * unit, render unhandled 'error' payloads through the inspect unit and
569
+ * create EventEmitter's private symbols through the symbol unit. */
570
+ dynBuiltinClass: rule({
571
+ fns: [...BUILTIN_CLASS_LIB_FNS],
572
+ }),
573
+ /** The stream classes as untyped constructor values with their stream
574
+ * half (scr_dyn_builtin_stream.c): native stream state for constructor
575
+ * functions, over the stream unit. */
576
+ dynBuiltinStream: rule({ fns: ["dyn.builtinStreamClass"] }),
577
+ dynInvoke: rule({
578
+ initial: (mod) => mod.workers === true,
579
+ fns: [
580
+ ...DYN_INVOKE_LIB_FNS,
581
+ ...UTIL_CALLABLE_LIB_FNS,
582
+ ...BUILTIN_CLASS_LIB_FNS,
583
+ "util.promisifyDyn",
584
+ ],
585
+ // Constant-key reads of Object.prototype member names answer the
586
+ // inherited member through scr_dyn_invoke.c.
587
+ expr: (node, _tables) => node.kind === "dynInvoke" ||
588
+ (node.kind === "dynKeyGet" &&
589
+ node.key.kind === "strLit" &&
590
+ INHERITED_MEMBER_NAMES.has(node.key.value)),
591
+ }),
592
+ /** The program has dynamic-tier jsval operations (js.* builtins, the
593
+ * jsval pass): links the scr_js_* units (two-tier design I3). */
594
+ dynTier: rule({ prefixes: ["js."] }),
595
+ /** Checked-dynamic stream slots test values and pipe into JavaScript
596
+ * stream objects (scr_stream_dyn.c). */
597
+ streamDyn: rule({
598
+ fns: ["stream.dynNative", "stream.dynNativePipe", "stream.pipeDyn", "stream.unpipeDyn"],
599
+ }),
600
+ /** Own properties JavaScript adds to children (scr_dyn_handle_props.c). */
601
+ handleProps: rule({ fns: ["child.propsInstall"] }),
602
+ /** for await over checked-dynamic values (scr_dyn_for_await.c). */
603
+ dynForAwait: rule({ fns: ["dyn.asyncIteratorOpen", "dyn.asyncIteratorWasSync"] }),
604
+ /** Fixed-width Buffer read/write methods called on checked-dynamic
605
+ * values (scr_bytes_dyn.c). */
606
+ dynBufferNum: rule({
607
+ expr: (node, _tables) => node.kind === "dynInvoke" && DYN_BUFFER_NUM_METHODS.has(node.method),
608
+ }),
609
+ /** Builtin functions read as values (scr_builtin_values.c). */
610
+ builtinValues: rule({ fns: ["buffer.byteLenValue", "buffer.allocValue", "fs.realpathValue"] }),
611
+ /** The stream unit emits through the emitter unit, also when the
612
+ * program constructs no stream (a pipeline of functions). */
613
+ /** scr_ecdh.c over the mbedTLS archive; DEP0031 reports through the
614
+ * process-warning unit, and unknown encodings and formats render through
615
+ * the inspect unit. */
616
+ ecdh: rule({ fns: ["crypto.ecdhNew", "crypto.ecdhConvertKey"] }),
617
+ emitter: rule({
618
+ initial: (mod) => mod.workers === true || (mod.classes ?? []).some((c) => c.name === RUNTIME_EMITTER_CLASS),
619
+ fns: [...STREAM_LIB_FNS, ...BUILTIN_CLASS_LIB_FNS],
620
+ prefixes: ["emitter.", ...STREAM_LIB_PREFIXES],
621
+ }),
622
+ /** Subclasses of the runtime EventTarget/Event bases tear down and box
623
+ * through the EventTarget unit even when no event.* libCall survives. */
624
+ eventTarget: rule({
625
+ initial: (mod) => (mod.classes ?? []).some((c) => c.name === RUNTIME_EVENT_TARGET_CLASS || c.name === RUNTIME_EVENT_CLASS),
626
+ fns: ["events.addAbortListener", ...ABORT_SIGNAL_LIB_FNS],
627
+ prefixes: ["event."],
628
+ }),
629
+ /** events.once(emitter, name, { signal }) (scr_events_once_signal.c). */
630
+ eventsOnceSignal: rule({ fns: ["events.onceSignal"] }),
631
+ fetch: rule({ prefixes: ["fetch."] }),
632
+ fileHandle: rule({ types: ["fileHandle"] }),
633
+ fsWatch: rule({ prefixes: ["fs.watch", "watcher."], types: ["fsWatcher"] }),
634
+ /** A socket 'lookup' listener: the C main installs the net unit's
635
+ * lookup records (scr_net_lookup_install). */
636
+ netLookup: rule({ fns: ["net.sockOnLookup"] }),
637
+ http: rule({
638
+ prefixes: ["http.", "tls.", "https.", "http2."],
639
+ types: ["httpReq", "httpRes", "httpClientReq", "secureCtx"],
640
+ }),
641
+ /** The real h2 surface (scr_http2.c); the legacy http2.* libCalls of the
642
+ * allowHTTP1 slice are served by scr_http.c and scr_tls.c. */
643
+ http2: rule({
644
+ libCall: (node) => node.fn.startsWith("http2.") && !HTTP2_LEGACY_FNS.has(node.fn),
645
+ types: ["http2Session", "http2Stream"],
646
+ }),
647
+ /** scr_test.c renders thrown strings with the inspect unit's string
648
+ * formatting; scr_util_callable.c wraps the inspect unit; readline's
649
+ * terminal unit prints completion errors through it when there is a
650
+ * completer. */
651
+ inspect: rule({
652
+ fns: [
653
+ "global.native",
654
+ "util.styleText",
655
+ "crypto.cipherNew",
656
+ "crypto.ecdhNew",
657
+ "crypto.ecdhConvertKey",
658
+ ...BUILTIN_CLASS_LIB_FNS,
659
+ ...UTIL_CALLABLE_LIB_FNS,
660
+ ],
661
+ prefixes: ["insp.", "console.", "test."],
662
+ libCall: (node) => node.fn === "rl.terminal" && !isDynUndefined(node.args[3]),
663
+ }),
664
+ legacyTextDecoder: rule({ fns: [...LEGACY_TEXT_DECODER_LIB_FNS] }),
665
+ /** The program calls mock.timers members: its timer calls go through
666
+ * scr_test.c's mock-aware entry points. */
667
+ mockTimers: rule({ prefixes: ["test.mockTimers", "test.ctxMockTimers"] }),
668
+ net: rule({
669
+ prefixes: NET_PREFIXES,
670
+ types: [
671
+ "netServer",
672
+ "netSocket",
673
+ "http2Session",
674
+ "http2Stream",
675
+ "httpReq",
676
+ "httpRes",
677
+ "httpClientReq",
678
+ "secureCtx",
679
+ ],
680
+ }),
681
+ nodeTest: rule({ prefixes: ["test."], types: ["testCtx"] }),
682
+ /** scr_util_callable.c reads options through the parseArgs unit's
683
+ * descriptors. */
684
+ parseArgs: rule({ fns: [...PARSE_ARGS_LIB_FNS, ...UTIL_CALLABLE_LIB_FNS] }),
685
+ /** perf_hooks event-loop metrics (eventLoopUtilization,
686
+ * monitorEventLoopDelay): scr_perf_loop.c. */
687
+ perfLoop: rule({ fns: ["perf.idleTime"], prefixes: ["perf.loop", "perf.eld"] }),
688
+ processEvents: rule({ fns: [...PROCESS_EVENT_LIB_FNS, "util.styleText"], types: ["procStream"] }),
689
+ /** scr_url_legacy.c parses and stringifies queries. */
690
+ qs: rule({ fns: [...QS_LIB_FNS, ...LEGACY_URL_LIB_FNS] }),
691
+ /** scr_url_legacy.c lowercases and normalizes hostnames with the regex
692
+ * unit's libunicode, NODE_DEBUG matching in scr_util_callable.c and
693
+ * readline's terminal unit use the regex unit, and locale case mapping
694
+ * runs its default conversion. */
695
+ regex: rule({
696
+ fns: [
697
+ ...REGEX_LIB_FNS,
698
+ ...LEGACY_URL_LIB_FNS,
699
+ ...UTIL_CALLABLE_LIB_FNS,
700
+ "rl.terminal",
701
+ "str.localeCase",
702
+ ],
703
+ expr: (node, _tables) => node.kind === "regexLit" ||
704
+ node.kind === "regexIntrinsic" ||
705
+ (node.kind === "strIntrinsic" && CASE_MAPPING_STR_METHODS.has(node.method)),
706
+ types: ["regex"],
707
+ }),
708
+ searchParams: rule({ fns: ["url.searchParams"], prefixes: ["sp."], types: ["searchParams"] }),
709
+ /** stdin setEncoding / string data listeners / stdio 'resize' events. A
710
+ * typed string 'data' listener takes setEncoding-decoded chunks; the
711
+ * process stream object's setEncoding and 'resize' members are reached
712
+ * by name (dynamic member calls and event-name strings). */
713
+ stdioExtended: rule({
714
+ libCall: (node) => node.fn === "stdin.onData" &&
715
+ node.args[0]?.type.kind === "func" &&
716
+ node.args[0].type.params[0]?.kind === "string",
717
+ expr: (node, _tables) => (node.kind === "dynInvoke" && STDIO_EXTENDED_NAMES.has(node.method)) ||
718
+ (node.kind === "strLit" && STDIO_EXTENDED_NAMES.has(node.value)),
719
+ }),
720
+ stream: rule({
721
+ initial: (mod) => (mod.classes ?? []).some((c) => RUNTIME_STREAM_CLASSES.has(c.name)),
722
+ fns: [...STREAM_LIB_FNS, "dyn.builtinStreamClass"],
723
+ prefixes: STREAM_LIB_PREFIXES,
724
+ }),
725
+ /** A Dirent row converted to dyn carries Node's Symbol(type) key
726
+ * (scr_dyn_dirent_finish, defined in scr_symbol.c). */
727
+ symbol: rule({
728
+ initial: (mod) => (mod.records ?? []).some(isDirentShape),
729
+ fns: [...SYMBOL_LIB_FNS],
730
+ prefixes: ["sym.", "disposable."],
731
+ types: ["symbol"],
732
+ }),
733
+ tls: rule({ prefixes: ["tls.", "https.", "http2."], types: ["secureCtx"] }),
734
+ tlsCa: rule({ prefixes: ["tlsca."] }),
735
+ /** util.promisify over an untyped function (scr_util_promisify.c): its
736
+ * promises go through the dyn-async unit and its calls through the
737
+ * dyn-invoke unit. */
738
+ utilPromisify: rule({ fns: ["util.promisifyDyn"] }),
739
+ /** process.emitWarning is assigned (process.setEmitWarning). */
740
+ warningReplace: rule({ fns: ["process.setEmitWarning"] }),
741
+ /** The WebAssembly API (scr_wasm.c). */
742
+ wasm: rule({ prefixes: ["wasm."] }),
743
+ /** crypto.subtle importKey/sign/verify/digest and CryptoKey:
744
+ * scr_webcrypto.c. */
745
+ webcrypto: rule({ prefixes: ["webcrypto."] }),
746
+ zlib: rule({ prefixes: ["zlib."] }),
747
+ };
748
+ const RUNTIME_FEATURE_NAMES = [];
749
+ for (const name in RUNTIME_FEATURE_RULES)
750
+ RUNTIME_FEATURE_NAMES.push(name);
751
+ /** Every feature off, in the table's order. TypeScript rejects this
752
+ * literal when it misses a feature or names one without a rule. */
753
+ function noRuntimeFeatures() {
754
+ return {
755
+ assert: false,
756
+ asyncContext: false,
757
+ bigint: false,
758
+ childProcess: false,
759
+ cipher: false,
122
760
  copying: false,
123
- legacyTextDecoder: false,
124
- fileHandle: false,
125
- fetch: false,
126
- // Subclasses of the runtime EventTarget/Event bases tear down and box
127
- // through the EventTarget unit even when no event.* libCall survives.
128
- eventTarget: (mod.classes ?? []).some((c) => c.name === RUNTIME_EVENT_TARGET_CLASS || c.name === RUNTIME_EVENT_CLASS),
129
- processEvents: false,
130
- emitter: mod.workers === true || (mod.classes ?? []).some((c) => c.name === RUNTIME_EMITTER_CLASS),
131
- stream: (mod.classes ?? []).some((c) => RUNTIME_STREAM_CLASSES.has(c.name)),
132
- zlib: false,
133
761
  dc: false,
134
- assert: false,
135
- dynInvoke: mod.workers === true,
136
- dynAsync: mod.workers === true ||
137
- mod.functions.some((fn) => fn.async === true && fn.generator === undefined && fn.returnType.kind === "dyn"),
762
+ dgram: false,
763
+ dgramDyn: false,
764
+ dnsPromises: false,
765
+ dynAsync: false,
766
+ dynBuiltinClass: false,
767
+ dynBuiltinStream: false,
768
+ dynInvoke: false,
769
+ dynTier: false,
770
+ ecdh: false,
771
+ emitter: false,
772
+ eventTarget: false,
773
+ eventsOnceSignal: false,
774
+ fetch: false,
775
+ fileHandle: false,
776
+ fsWatch: false,
777
+ http2: false,
778
+ http: false,
138
779
  inspect: false,
139
- childProcess: false,
780
+ legacyTextDecoder: false,
781
+ mockTimers: false,
140
782
  net: false,
141
- // A Dirent row converted to dyn carries Node's Symbol(type) key
142
- // (scr_dyn_dirent_finish, defined in scr_symbol.c).
143
- symbol: (mod.records ?? []).some(isDirentShape),
144
- bigint: false,
145
- searchParams: false,
146
- qs: false,
147
- parseArgs: false,
148
- fsWatch: false,
783
+ netLookup: false,
149
784
  nodeTest: false,
150
- dgram: false,
151
- http: false,
152
- http2: false,
785
+ parseArgs: false,
786
+ perfLoop: false,
787
+ processEvents: false,
788
+ qs: false,
789
+ regex: false,
790
+ searchParams: false,
791
+ stdioExtended: false,
792
+ stream: false,
793
+ streamDyn: false,
794
+ handleProps: false,
795
+ dynForAwait: false,
796
+ dynBufferNum: false,
797
+ builtinValues: false,
798
+ symbol: false,
153
799
  tls: false,
154
800
  tlsCa: false,
155
- cipher: false,
801
+ utilPromisify: false,
802
+ warningReplace: false,
803
+ wasm: false,
804
+ webcrypto: false,
805
+ zlib: false,
156
806
  };
807
+ }
808
+ const ruleOf = (name) => RUNTIME_FEATURE_RULES[name];
809
+ /** The rules indexed for the scan: features by libCall name and by type
810
+ * kind, and the prefix and predicate conditions in rule order. */
811
+ const FEATURES_BY_FN = new Map();
812
+ const FEATURES_BY_TYPE = new Map();
813
+ const FEATURE_PREFIXES = [];
814
+ const FEATURE_LIBCALL_TESTS = [];
815
+ const FEATURE_EXPR_TESTS = [];
816
+ for (const name of RUNTIME_FEATURE_NAMES) {
817
+ const rule = ruleOf(name);
818
+ for (const fn of rule.fns ?? []) {
819
+ const names = FEATURES_BY_FN.get(fn);
820
+ if (names)
821
+ names.push(name);
822
+ else
823
+ FEATURES_BY_FN.set(fn, [name]);
824
+ }
825
+ for (const kind of rule.types ?? []) {
826
+ const names = FEATURES_BY_TYPE.get(kind);
827
+ if (names)
828
+ names.push(name);
829
+ else
830
+ FEATURES_BY_TYPE.set(kind, [name]);
831
+ }
832
+ for (const prefix of rule.prefixes ?? [])
833
+ FEATURE_PREFIXES.push({ prefix, name });
834
+ if (rule.libCall)
835
+ FEATURE_LIBCALL_TESTS.push(name);
836
+ if (rule.expr)
837
+ FEATURE_EXPR_TESTS.push(name);
838
+ }
839
+ function scanRuntimeFeatures(mod, stopAt) {
840
+ const features = noRuntimeFeatures();
841
+ for (const name of RUNTIME_FEATURE_NAMES) {
842
+ const initial = ruleOf(name).initial;
843
+ if (initial && initial(mod))
844
+ features[name] = true;
845
+ }
157
846
  const keepGoing = () => stopAt === undefined || !features[stopAt];
158
847
  let tables;
159
848
  const typeTables = () => (tables ??= {
160
849
  records: new Map((mod.records ?? []).map((r) => [r.id, r])),
161
850
  unions: new Map((mod.unions ?? []).map((u) => [u.id, u])),
851
+ classes: new Map((mod.classes ?? []).map((c) => [c.name, c])),
162
852
  });
163
853
  const expr = (node) => {
164
854
  if (node.kind === "libCall") {
165
855
  const fn = node.fn;
166
- if (fn === "regexp.escape" ||
167
- fn === "dyn.nativeRegexIs" ||
168
- fn === "util.stripVTControlCharacters" ||
169
- fn === "path.matchesGlob" ||
170
- fn === "path.win32MatchesGlob" ||
171
- // fs.glob's walk compiles its patterns with the glob matcher.
172
- fn === "fs.globSync" ||
173
- fn === "fs.globTypesSync" ||
174
- fn === "fs.callbackGlob" ||
175
- fn === "fsp.globStrings" ||
176
- fn === "fsp.globTypes" ||
177
- fn === "fsp.globError")
178
- features.regex = true;
179
- if (fn === "text.decodeLegacy" ||
180
- fn === "text.decodeLegacyOptions" ||
181
- fn === "text.decodeStream")
182
- features.legacyTextDecoder = true;
183
- if (fn.startsWith("fetch."))
184
- features.fetch = true;
185
- if (fn.startsWith("event.") || fn === "events.addAbortListener")
186
- features.eventTarget = true;
187
- // Signal-taking readline entry points call addAbortListener.
188
- if (fn === "rl.createSignal" ||
189
- fn === "rl.questionAsyncSignal" ||
190
- fn === "http.clientSignal" ||
191
- fn === "stream.addAbortSignal" ||
192
- fn === "stream.addAbortSignalFn" ||
193
- fn === "sp.finishedOptsSignal" ||
194
- fn === "sp.pipelineOptsSignal" ||
195
- fn === "stream.finishedOptsSignal") {
196
- features.eventTarget = true;
197
- }
198
- if (PROCESS_EVENT_LIB_FNS.has(fn))
199
- features.processEvents = true;
200
- // readline's terminal unit (scr_readline_tty.c) measures with the
201
- // regex unit's stripVTControlCharacters; with a completer it prints
202
- // completion errors through the inspect unit.
203
- if (fn === "rl.cursorPos" ||
204
- fn === "rl.keypressStdin" ||
205
- fn === "rl.keypressStream" ||
206
- fn === "stdin.onKeypress")
207
- features.regex = true;
208
- if (fn === "rl.terminal") {
209
- features.regex = true;
210
- if (!isDynUndefined(node.args[3]))
211
- features.inspect = true;
212
- }
213
- if (fn.startsWith("emitter."))
214
- features.emitter = true;
215
- if (fn.startsWith("readable.") ||
216
- fn.startsWith("writable.") ||
217
- fn.startsWith("duplex.") ||
218
- fn.startsWith("transform.") ||
219
- fn.startsWith("passthrough.") ||
220
- fn.startsWith("sc.") ||
221
- fn.startsWith("stream.set") ||
222
- fn === "stream.destroy" ||
223
- fn === "stream.destroyErr" ||
224
- fn === "stream.prop" ||
225
- fn === "stream.errored" ||
226
- fn === "sp.finished" ||
227
- fn === "sp.pipeline" ||
228
- fn === "sp.pipelineStages" ||
229
- fn.startsWith("stream.pipelineStages") ||
230
- fn === "console.bind" ||
231
- fn === "crypto.hashStream" ||
232
- fn === "crypto.hashStreamPiped" ||
233
- fn === "stream.addAbortSignal" ||
234
- fn === "stream.addAbortSignalFn" ||
235
- fn.startsWith("sp.finishedOpts") ||
236
- fn.startsWith("sp.pipelineOpts") ||
237
- fn.startsWith("stream.finishedOpts") ||
238
- fn.startsWith("zlib.stream") ||
239
- fn === "fs.createReadStream" ||
240
- fn === "fs.createWriteStream" ||
241
- fn === "fileHandle.createReadStream" ||
242
- fn === "fileHandle.createWriteStream" ||
243
- fn.startsWith("fs.fsStream")) {
244
- // the stream unit emits through the emitter unit, also when the
245
- // program constructs no stream (a pipeline of functions)
246
- features.stream = true;
247
- features.emitter = true;
248
- }
249
- if (fn.startsWith("zlib."))
250
- features.zlib = true;
251
- // The Readable operators and Readable.from over a compiled generator
252
- // or a checked-dynamic iterator (scr_stream_ops.c) await through the
253
- // dyn-async unit.
254
- if (fn.startsWith("readable.op") ||
255
- fn.startsWith("readable.fromGen") ||
256
- fn === "readable.fromDyn" ||
257
- fn === "readable.fromIter" ||
258
- fn === "readable.fromAsyncIter" ||
259
- fn === "readable.fromAsyncGen" ||
260
- fn === "readable.fromDone")
261
- features.dynAsync = true;
262
- if (fn.startsWith("dc."))
263
- features.dc = true;
264
- if (fn.startsWith("assert."))
265
- features.assert = true;
266
- if (fn === "dyn.defineProps" ||
267
- fn === "dyn.definePrototypeProps" ||
268
- fn === "dyn.defineProperty" ||
269
- fn === "dyn.objCreateWithProperties" ||
270
- fn === "dyn.arrayProtoCall" ||
271
- fn === "dyn.arrayPrototype" ||
272
- fn === "dyn.functionApply" ||
273
- fn === "dyn.builtinMethod")
274
- features.dynInvoke = true;
275
- if (DYN_ASYNC_LIB_FNS.has(fn))
276
- features.dynAsync = true;
277
- if (fn.startsWith("insp.") ||
278
- fn.startsWith("console.") ||
279
- fn === "global.native" ||
280
- fn === "util.styleText")
281
- features.inspect = true;
282
- if (fn.startsWith("cp.") ||
283
- fn.startsWith("child.") ||
284
- fn.startsWith("writer.") ||
285
- fn.startsWith("spawnRes.") ||
286
- fn === "process.forkTarget" ||
287
- fn === "process.connected" ||
288
- fn === "process.send" ||
289
- fn === "process.sendCb" ||
290
- fn === "process.disconnect" ||
291
- fn === "process.onMessage" ||
292
- fn === "process.onDisconnect")
293
- features.childProcess = true;
294
- if (fn.startsWith("net."))
295
- features.net = true;
296
- if (fn.startsWith("http.")) {
297
- features.net = true;
298
- features.http = true;
299
- }
300
- if (fn.startsWith("tls.") || fn.startsWith("https.") || fn.startsWith("http2.")) {
301
- features.net = true;
302
- features.http = true;
303
- features.tls = true;
304
- }
305
- if (fn.startsWith("http2.") && !HTTP2_LEGACY_FNS.has(fn))
306
- features.http2 = true;
307
- if (fn.startsWith("sym.") ||
308
- fn === "util.isDeepStrictEqual" ||
309
- fn === "dyn.usingMethod" ||
310
- fn === "dyn.usingDispose")
311
- features.symbol = true;
312
- if (fn === "process.hrtimeValue")
313
- features.bigint = true;
314
- if (fn.startsWith("bigint."))
315
- features.bigint = true;
316
- if (fn.startsWith("sp.") || fn === "url.searchParams")
317
- features.searchParams = true;
318
- if (fn === "qs.parse" || fn === "qs.stringify" || fn === "qs.unescape")
319
- features.qs = true;
320
- // scr_url_legacy.c lowercases and normalizes hostnames (the regex
321
- // unit's libunicode), parses and stringifies queries, and emits its
322
- // deprecation warnings through the dyn-async unit.
323
- if (LEGACY_URL_LIB_FNS.has(fn)) {
324
- features.regex = true;
325
- features.qs = true;
326
- features.dynAsync = true;
327
- }
328
- if (fn === "util.parseArgs" || fn === "util.isDeepStrictEqual" || fn === "util.styleText")
329
- features.parseArgs = true;
330
- if (fn === "util.styleText")
331
- features.processEvents = true;
332
- // scr_util_callable.c: dyn wrappers over the descriptor, inspect,
333
- // regex (NODE_DEBUG matching) and terminal-color units.
334
- if (UTIL_CALLABLE_LIB_FNS.has(fn)) {
335
- features.parseArgs = true;
336
- features.inspect = true;
337
- features.dynInvoke = true;
338
- features.regex = true;
339
- }
340
- if (fn.startsWith("fs.watch") || fn.startsWith("watcher."))
341
- features.fsWatch = true;
342
- // scr_test.c renders thrown strings in the failing-tests section with
343
- // the inspect unit's string formatting.
344
- if (fn.startsWith("test.")) {
345
- features.nodeTest = true;
346
- features.inspect = true;
347
- }
348
- if (fn.startsWith("dgram.") || fn.startsWith("dns."))
349
- features.dgram = true;
350
- if (fn.startsWith("tlsca."))
351
- features.tlsCa = true;
352
- // scr_cipher.c over the mbedTLS archive; DEP0182 reports through the
353
- // process-warning unit, and unknown output encodings render through
354
- // the inspect unit.
355
- if (fn === "crypto.cipherNew") {
356
- features.cipher = true;
357
- features.dynAsync = true;
358
- features.inspect = true;
359
- }
856
+ for (const name of FEATURES_BY_FN.get(fn) ?? [])
857
+ features[name] = true;
858
+ for (const { prefix, name } of FEATURE_PREFIXES)
859
+ if (!features[name] && fn.startsWith(prefix))
860
+ features[name] = true;
861
+ for (const name of FEATURE_LIBCALL_TESTS)
862
+ if (!features[name] && ruleOf(name).libCall(node))
863
+ features[name] = true;
360
864
  }
361
865
  else {
362
- switch (node.kind) {
363
- case "regexLit":
364
- case "regexIntrinsic":
365
- features.regex = true;
366
- break;
367
- case "strIntrinsic":
368
- if (node.method === "toLowerCase" ||
369
- node.method === "toUpperCase" ||
370
- node.method === "normalize")
371
- features.regex = true;
372
- break;
373
- case "arrIntrinsic":
374
- if (node.method === "toReversed" ||
375
- node.method === "toSpliced" ||
376
- node.method === "with" ||
377
- node.method === "withUndefined")
378
- features.copying = true;
379
- break;
380
- case "bytesIntrinsic":
381
- if (node.method === "toReversed" ||
382
- node.method === "with" ||
383
- node.method === "join" ||
384
- node.method === "toArray")
385
- features.copying = true;
386
- break;
387
- case "dynInvoke":
388
- features.dynInvoke = true;
389
- break;
390
- case "awaitExpr":
391
- if (node.type.kind === "dyn")
392
- features.dynAsync = true;
393
- break;
394
- case "intrinsic":
395
- // Rejection reasons cross as dyn values (allSettled's records,
396
- // any's AggregateError list).
397
- if (node.name === "promise.allSettled" || node.name === "promise.any")
398
- features.dynAsync = true;
399
- break;
400
- case "dynFrom":
401
- if (!features.dynAsync && boxesPromise(node.value.type, typeTables(), new Set()))
402
- features.dynAsync = true;
403
- break;
404
- }
866
+ for (const name of FEATURE_EXPR_TESTS)
867
+ if (!features[name] && ruleOf(name).expr(node, typeTables))
868
+ features[name] = true;
405
869
  }
406
870
  return keepGoing();
407
871
  };
408
872
  const type = (node) => {
409
- switch (node.kind) {
410
- case "regex":
411
- features.regex = true;
412
- break;
413
- case "fileHandle":
414
- features.fileHandle = true;
415
- break;
416
- case "procStream":
417
- features.processEvents = true;
418
- break;
419
- case "child":
420
- case "childStream":
421
- case "childWriter":
422
- case "spawnRes":
423
- features.childProcess = true;
424
- break;
425
- case "netServer":
426
- case "netSocket":
427
- features.net = true;
428
- break;
429
- case "http2Session":
430
- case "http2Stream":
431
- features.net = true;
432
- features.http2 = true;
433
- break;
434
- case "httpReq":
435
- case "httpRes":
436
- case "httpClientReq":
437
- features.net = true;
438
- features.http = true;
439
- break;
440
- case "secureCtx":
441
- features.net = true;
442
- features.http = true;
443
- features.tls = true;
444
- break;
445
- case "symbol":
446
- features.symbol = true;
447
- break;
448
- case "bigint":
449
- features.bigint = true;
450
- break;
451
- case "searchParams":
452
- features.searchParams = true;
453
- break;
454
- case "fsWatcher":
455
- features.fsWatch = true;
456
- break;
457
- case "testCtx":
458
- features.nodeTest = true;
459
- break;
460
- case "dgramSocket":
461
- features.dgram = true;
462
- break;
463
- }
873
+ for (const name of FEATURES_BY_TYPE.get(node.kind) ?? [])
874
+ features[name] = true;
464
875
  return keepGoing();
465
876
  };
466
877
  if (keepGoing())
467
878
  everyModuleNode(mod, { expr, stmt: keepGoing, type });
879
+ // Inline-cache sites of dynamic-tier functions use the tier's shapes
880
+ // (scr_js_object.c, with the SCR_JS_TIER build of scr_json.c).
881
+ if (!features.dynTier && mod.functions.some((fn) => fn.tier === "dynamic")) {
882
+ const sites = new JsIcSites(mod);
883
+ features.dynTier = mod.functions.some((fn) => fn.tier === "dynamic" && hasJsIcSite(fn, sites));
884
+ }
468
885
  return features;
469
886
  }
470
887
  /** True when the module contains any regex construct — a regexLit /
@@ -499,63 +916,6 @@ export function moduleUsesFileHandle(mod) {
499
916
  export function moduleUsesFetch(mod) {
500
917
  return scanRuntimeFeatures(mod, "fetch").fetch;
501
918
  }
502
- /** The libCall fns served by the OPTIONAL events unit (scr_events.c):
503
- * process signal/exit listeners and the piped-stdin surface. */
504
- const PROCESS_EVENT_LIB_FNS = new Set([
505
- "process.stdio",
506
- "process.onSignal",
507
- "process.offSignal",
508
- "process.onExit",
509
- "process.offExit",
510
- "stdin.onData",
511
- "stdin.onEnd",
512
- "stdin.onError",
513
- "stdin.nextChunk",
514
- // node:readline rides the stdin unit (scr_readline.c links beside
515
- // scr_events.c under the same gate).
516
- "rl.create",
517
- "rl.createSignal",
518
- "rl.question",
519
- "rl.questionAsync",
520
- "rl.questionAsyncSignal",
521
- "rl.close",
522
- "rl.pause",
523
- "rl.resume",
524
- "rl.prompt",
525
- "rl.promptWith",
526
- "rl.setPrompt",
527
- "rl.getPrompt",
528
- "rl.write",
529
- "rl.writeKey",
530
- "rl.on",
531
- "rl.iterOpen",
532
- "rl.iterNext",
533
- "rl.iterReturn",
534
- "rl.checkOptions",
535
- "rl.checkCompleter",
536
- "rl.setOptions",
537
- "rl.setHistory",
538
- "rl.history",
539
- "rl.numProp",
540
- "rl.terminal",
541
- "rl.line",
542
- "rl.isTerminal",
543
- "rl.cursor",
544
- "rl.seq",
545
- "rl.moves",
546
- "rl.cursorPos",
547
- "rl.keypressStdin",
548
- "rl.keypressStream",
549
- "stdin.onKeypress",
550
- "rl.uiOpen",
551
- "rl.uiOpenStream",
552
- "rl.uiCursorTo",
553
- "rl.uiMoveCursor",
554
- "rl.uiClearLine",
555
- "rl.uiClearScreenDown",
556
- "rl.uiRollback",
557
- "rl.uiCommit",
558
- ]);
559
919
  /** True when the module uses the process-events surface — the link switch
560
920
  * that pulls scr_events.c into the binary and has the emitted main call
561
921
  * scr_events_install (native-toolchain.ts + emitter; the scr_regex/scr_fetch/scr_zlib
@@ -586,6 +946,13 @@ export function moduleUsesEmitter(mod) {
586
946
  export function moduleUsesStream(mod) {
587
947
  return scanRuntimeFeatures(mod, "stream").stream;
588
948
  }
949
+ /** True when the program links scr_dyn_builtin_stream.c (stream classes
950
+ * as untyped constructor values): its runtime streams box through that
951
+ * unit's view and checked casts to the stream classes accept constructor-
952
+ * function streams. Programs without it keep their exact code. */
953
+ export function moduleUsesDynBuiltinStream(mod) {
954
+ return scanRuntimeFeatures(mod, "dynBuiltinStream").dynBuiltinStream;
955
+ }
589
956
  export const NPM_COMPRESS_MIN = 1024;
590
957
  export function moduleUsesZlib(mod) {
591
958
  return scanRuntimeFeatures(mod, "zlib").zlib;
@@ -701,6 +1068,13 @@ export function moduleUsesFsWatch(mod) {
701
1068
  export function moduleUsesNodeTest(mod) {
702
1069
  return scanRuntimeFeatures(mod, "nodeTest").nodeTest;
703
1070
  }
1071
+ /** True when the module calls a mock.timers member (a test.mockTimers* or
1072
+ * test.ctxMockTimers* libCall). The emitter then routes the timer calls
1073
+ * through scr_test.c's mock-aware entry points; other programs keep the
1074
+ * loop's timer functions. */
1075
+ export function moduleUsesMockTimers(mod) {
1076
+ return scanRuntimeFeatures(mod, "mockTimers").mockTimers;
1077
+ }
704
1078
  /** True when the module contains any dgram.* or dns.* libCall — the
705
1079
  * link switch that pulls scr_dgram.c into the binary and has the emitted
706
1080
  * main call scr_dgram_install (native-toolchain.ts + emitter; the scr_net gating
@@ -716,13 +1090,6 @@ export function moduleUsesDgram(mod) {
716
1090
  export function moduleUsesHttpServer(mod) {
717
1091
  return scanRuntimeFeatures(mod, "http").http;
718
1092
  }
719
- /** The legacy http2.* libCalls implemented by scr_http.c/scr_tls.c (the
720
- * allowHTTP1 compatibility slice) — they must NOT pull scr_http2.c, so
721
- * divergence-57 binaries keep their exact link line. */
722
- const HTTP2_LEGACY_FNS = new Set([
723
- "http2.streamNoop",
724
- "http2.streamUndefCall",
725
- ]);
726
1093
  /** True when the module uses the REAL h2 surface (scr_http2.c): any core
727
1094
  * http2.* libCall, or an h2 handle type left behind by a fenced statement
728
1095
  * (its emitted release call needs the unit — the moduleUsesNet story). */
@@ -747,4 +1114,10 @@ export function moduleUsesTls(mod) {
747
1114
  export function moduleUsesTlsCa(mod) {
748
1115
  return scanRuntimeFeatures(mod, "tlsCa").tlsCa;
749
1116
  }
1117
+ /** True when the module has dynamic-tier jsval operations or inline-cache
1118
+ * sites: the link switch for the scr_js_* runtime units (two-tier design
1119
+ * I3). Programs without them never link a scr_js_ symbol. */
1120
+ export function moduleUsesDynTier(mod) {
1121
+ return scanRuntimeFeatures(mod, "dynTier").dynTier;
1122
+ }
750
1123
  //# sourceMappingURL=runtime-features.js.map