@scriptc/compiler 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1243) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +960 -82
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +13 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +6 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +41 -4
  16. package/dist/backend/llvm/alloc.js +138 -7
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/alloc.test.js +30 -1
  19. package/dist/backend/llvm/alloc.test.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  21. package/dist/backend/llvm/array-search.test.js +1 -1
  22. package/dist/backend/llvm/blocks.d.ts +8 -0
  23. package/dist/backend/llvm/blocks.js +43 -1
  24. package/dist/backend/llvm/blocks.js.map +1 -1
  25. package/dist/backend/llvm/blocks.test.js +22 -1
  26. package/dist/backend/llvm/blocks.test.js.map +1 -1
  27. package/dist/backend/llvm/byte-numbers.js +15 -5
  28. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  29. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  30. package/dist/backend/llvm/bytes-alias.js +20 -0
  31. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  32. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  33. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  34. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  35. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  36. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  37. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  38. package/dist/backend/llvm/call-lifetimes.js +50 -1
  39. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  40. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  41. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  42. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  43. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  44. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  45. package/dist/backend/llvm/classes.d.ts +11 -0
  46. package/dist/backend/llvm/classes.js +71 -14
  47. package/dist/backend/llvm/classes.js.map +1 -1
  48. package/dist/backend/llvm/classes.test.js +58 -8
  49. package/dist/backend/llvm/classes.test.js.map +1 -1
  50. package/dist/backend/llvm/common.js +1 -0
  51. package/dist/backend/llvm/common.js.map +1 -1
  52. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  53. package/dist/backend/llvm/constant-callbacks.js +55 -12
  54. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  55. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  56. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  57. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  58. package/dist/backend/llvm/counted-loops.js +37 -0
  59. package/dist/backend/llvm/counted-loops.js.map +1 -1
  60. package/dist/backend/llvm/dense-array-access.d.ts +12 -3
  61. package/dist/backend/llvm/dense-array-access.js +72 -14
  62. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  63. package/dist/backend/llvm/dense-array-access.test.js +59 -3
  64. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  65. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  66. package/dist/backend/llvm/dense-array-loops.js +162 -0
  67. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  68. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  69. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  70. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  71. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  72. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  73. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  74. package/dist/backend/llvm/dyn.d.ts +28 -4
  75. package/dist/backend/llvm/dyn.js +324 -179
  76. package/dist/backend/llvm/dyn.js.map +1 -1
  77. package/dist/backend/llvm/emit-function.d.ts +64 -0
  78. package/dist/backend/llvm/emit-function.js +1190 -0
  79. package/dist/backend/llvm/emit-function.js.map +1 -0
  80. package/dist/backend/llvm/emit-module.d.ts +24 -0
  81. package/dist/backend/llvm/emit-module.js +1535 -0
  82. package/dist/backend/llvm/emit-module.js.map +1 -0
  83. package/dist/backend/llvm/emit-statements.d.ts +58 -0
  84. package/dist/backend/llvm/emit-statements.js +1964 -0
  85. package/dist/backend/llvm/emit-statements.js.map +1 -0
  86. package/dist/backend/llvm/emitter.d.ts +576 -268
  87. package/dist/backend/llvm/emitter.js +801 -4447
  88. package/dist/backend/llvm/emitter.js.map +1 -1
  89. package/dist/backend/llvm/emitter.test.js +57 -3
  90. package/dist/backend/llvm/emitter.test.js.map +1 -1
  91. package/dist/backend/llvm/expr-async.js +73 -46
  92. package/dist/backend/llvm/expr-async.js.map +1 -1
  93. package/dist/backend/llvm/expr-async.test.js +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  95. package/dist/backend/llvm/expr-bytes.js +76 -29
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  98. package/dist/backend/llvm/expr-callbacks.js +48 -11
  99. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  100. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  101. package/dist/backend/llvm/expr-calls.js +71 -53
  102. package/dist/backend/llvm/expr-calls.js.map +1 -1
  103. package/dist/backend/llvm/expr-calls.test.js +1 -1
  104. package/dist/backend/llvm/expr-containers.js +39 -15
  105. package/dist/backend/llvm/expr-containers.js.map +1 -1
  106. package/dist/backend/llvm/expr-control.js +16 -16
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dispatch.js +1 -0
  109. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  110. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  111. package/dist/backend/llvm/expr-dynamic.js +92 -63
  112. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  113. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  114. package/dist/backend/llvm/expr-primitives.js +132 -25
  115. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  116. package/dist/backend/llvm/expr-primitives.test.js +2 -2
  117. package/dist/backend/llvm/expr-records.d.ts +1 -1
  118. package/dist/backend/llvm/expr-records.js +32 -11
  119. package/dist/backend/llvm/expr-records.js.map +1 -1
  120. package/dist/backend/llvm/expr-stream-bridges.js +54 -12
  121. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  122. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  123. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  124. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  125. package/dist/backend/llvm/int32-abi.test.js +2 -2
  126. package/dist/backend/llvm/integer-clones.test.js +3 -3
  127. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  128. package/dist/backend/llvm/integer-remainder.js +156 -22
  129. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  130. package/dist/backend/llvm/intern-tables.test.js +1 -1
  131. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  132. package/dist/backend/llvm/jsval-encoding.js +20 -0
  133. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  134. package/dist/backend/llvm/jsval.d.ts +12 -0
  135. package/dist/backend/llvm/jsval.js +488 -0
  136. package/dist/backend/llvm/jsval.js.map +1 -0
  137. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  138. package/dist/backend/llvm/lazy-captures.js +39 -17
  139. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  140. package/dist/backend/llvm/lib-abi.js +1 -1
  141. package/dist/backend/llvm/lib-abi.js.map +1 -1
  142. package/dist/backend/llvm/lib-connect.js +1 -1
  143. package/dist/backend/llvm/lib-connect.js.map +1 -1
  144. package/dist/backend/llvm/lib-datagram.js +14 -8
  145. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  146. package/dist/backend/llvm/lib-dispatch.js +217 -24
  147. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  148. package/dist/backend/llvm/lib-filesystem.js +102 -13
  149. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  150. package/dist/backend/llvm/lib-http2.js +3 -3
  151. package/dist/backend/llvm/lib-http2.js.map +1 -1
  152. package/dist/backend/llvm/lib-lookup.js +2 -2
  153. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  154. package/dist/backend/llvm/lib-network.js +77 -25
  155. package/dist/backend/llvm/lib-network.js.map +1 -1
  156. package/dist/backend/llvm/lib-process.js +100 -50
  157. package/dist/backend/llvm/lib-process.js.map +1 -1
  158. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  159. package/dist/backend/llvm/lib-shared.js +229 -5
  160. package/dist/backend/llvm/lib-shared.js.map +1 -1
  161. package/dist/backend/llvm/lib-stream.js +46 -16
  162. package/dist/backend/llvm/lib-stream.js.map +1 -1
  163. package/dist/backend/llvm/lib-test.js +57 -8
  164. package/dist/backend/llvm/lib-test.js.map +1 -1
  165. package/dist/backend/llvm/lib-tls.js +4 -9
  166. package/dist/backend/llvm/lib-tls.js.map +1 -1
  167. package/dist/backend/llvm/local-array-reads.js +2 -2
  168. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  169. package/dist/backend/llvm/local-extents.d.ts +19 -0
  170. package/dist/backend/llvm/local-extents.js +169 -0
  171. package/dist/backend/llvm/local-extents.js.map +1 -0
  172. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  173. package/dist/backend/llvm/local-extents.test.js +92 -0
  174. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  175. package/dist/backend/llvm/local-union-storage.js +7 -7
  176. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  177. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  178. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  179. package/dist/backend/llvm/map-number-lookup.js +2 -2
  180. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  181. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  182. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  183. package/dist/backend/llvm/narrow-guards.js +151 -0
  184. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  185. package/dist/backend/llvm/nullable-unions.d.ts +70 -9
  186. package/dist/backend/llvm/nullable-unions.js +105 -6
  187. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  188. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  189. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  190. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  191. package/dist/backend/llvm/publish.d.ts +4 -0
  192. package/dist/backend/llvm/publish.js +14 -2
  193. package/dist/backend/llvm/publish.js.map +1 -1
  194. package/dist/backend/llvm/publish.test.js +1 -1
  195. package/dist/backend/llvm/receivers.d.ts +31 -0
  196. package/dist/backend/llvm/receivers.js +395 -0
  197. package/dist/backend/llvm/receivers.js.map +1 -0
  198. package/dist/backend/llvm/record-results.d.ts +13 -2
  199. package/dist/backend/llvm/record-results.js +66 -6
  200. package/dist/backend/llvm/record-results.js.map +1 -1
  201. package/dist/backend/llvm/reference-effects.js +9 -0
  202. package/dist/backend/llvm/reference-effects.js.map +1 -1
  203. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  204. package/dist/backend/llvm/reference-writes.js +143 -6
  205. package/dist/backend/llvm/reference-writes.js.map +1 -1
  206. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  207. package/dist/backend/llvm/reference-writes.test.js +88 -0
  208. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  209. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  210. package/dist/backend/llvm/regex-matchers.js +33 -0
  211. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  212. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  213. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  214. package/dist/backend/llvm/regions.d.ts +1 -1
  215. package/dist/backend/llvm/regions.js +9 -6
  216. package/dist/backend/llvm/regions.js.map +1 -1
  217. package/dist/backend/llvm/regions.test.js +1 -1
  218. package/dist/backend/llvm/shapes.d.ts +69 -43
  219. package/dist/backend/llvm/shapes.js +285 -21
  220. package/dist/backend/llvm/shapes.js.map +1 -1
  221. package/dist/backend/llvm/shapes.test.js +37 -3
  222. package/dist/backend/llvm/shapes.test.js.map +1 -1
  223. package/dist/backend/llvm/speculative-integers.d.ts +74 -0
  224. package/dist/backend/llvm/speculative-integers.js +571 -0
  225. package/dist/backend/llvm/speculative-integers.js.map +1 -0
  226. package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
  227. package/dist/backend/llvm/speculative-integers.test.js +148 -0
  228. package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
  229. package/dist/backend/llvm/split-loops.js +2 -2
  230. package/dist/backend/llvm/split-loops.js.map +1 -1
  231. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  232. package/dist/backend/llvm/stack-objects.js +133 -10
  233. package/dist/backend/llvm/stack-objects.js.map +1 -1
  234. package/dist/backend/llvm/stack-objects.test.js +55 -1
  235. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  236. package/dist/backend/llvm/stack-unions.test.js +1 -1
  237. package/dist/backend/llvm/string-construction.test.js +1 -1
  238. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  239. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  240. package/dist/backend/llvm/string-slices.d.ts +25 -0
  241. package/dist/backend/llvm/string-slices.js +207 -1
  242. package/dist/backend/llvm/string-slices.js.map +1 -1
  243. package/dist/backend/llvm/string-slices.test.js +139 -2
  244. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  245. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  246. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  247. package/dist/backend/llvm/thread-slots.js +142 -0
  248. package/dist/backend/llvm/thread-slots.js.map +1 -0
  249. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  250. package/dist/backend/llvm/thread-slots.test.js +110 -0
  251. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  252. package/dist/backend/llvm/union-repr.d.ts +7 -7
  253. package/dist/backend/llvm/union-repr.js +18 -2
  254. package/dist/backend/llvm/union-repr.js.map +1 -1
  255. package/dist/backend/llvm/union-retype.test.js +17 -3
  256. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  257. package/dist/backend/llvm/walkers.d.ts +2 -2
  258. package/dist/backend/llvm/walkers.js +51 -26
  259. package/dist/backend/llvm/walkers.js.map +1 -1
  260. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  261. package/dist/backend/llvm/wasm-modules.js +66 -0
  262. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  263. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  264. package/dist/backend/llvm/wrapping-sums.js +11 -3
  265. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  266. package/dist/backend/mangle.d.ts +7 -0
  267. package/dist/backend/mangle.js +11 -0
  268. package/dist/backend/mangle.js.map +1 -1
  269. package/dist/backend/may-throw.d.ts +3 -0
  270. package/dist/backend/may-throw.js +6 -2
  271. package/dist/backend/may-throw.js.map +1 -1
  272. package/dist/backend/may-throw.test.js +1 -1
  273. package/dist/backend/native/contracts.d.ts +37 -0
  274. package/dist/backend/native/executable.js +192 -134
  275. package/dist/backend/native/executable.js.map +1 -1
  276. package/dist/backend/native/library.js +1 -0
  277. package/dist/backend/native/library.js.map +1 -1
  278. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  279. package/dist/backend/native/runtime-inputs.js +2 -0
  280. package/dist/backend/native/runtime-inputs.js.map +1 -1
  281. package/dist/backend/native-link-info-core.d.ts +30 -0
  282. package/dist/backend/native-link-info-core.js.map +1 -1
  283. package/dist/backend/publication.test.js +1 -1
  284. package/dist/backend/runtime-pack-core.d.ts +9 -1
  285. package/dist/backend/runtime-pack-core.js +10 -1
  286. package/dist/backend/runtime-pack-core.js.map +1 -1
  287. package/dist/backend/runtime-pack-native.js +1 -1
  288. package/dist/backend/runtime-pack-native.js.map +1 -1
  289. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  290. package/dist/backend/runtime-pack-native.test.js +31 -0
  291. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  292. package/dist/backend/runtime-pack-targets.test.js +5 -0
  293. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  294. package/dist/backend/runtime-pack.d.ts +7 -3
  295. package/dist/backend/runtime-pack.js +12 -6
  296. package/dist/backend/runtime-pack.js.map +1 -1
  297. package/dist/backend/runtime-pack.test.js +20 -6
  298. package/dist/backend/runtime-pack.test.js.map +1 -1
  299. package/dist/backend/stack-observations.d.ts +22 -0
  300. package/dist/backend/stack-observations.js +382 -0
  301. package/dist/backend/stack-observations.js.map +1 -0
  302. package/dist/backend/stack-observations.test.d.ts +1 -0
  303. package/dist/backend/stack-observations.test.js +233 -0
  304. package/dist/backend/stack-observations.test.js.map +1 -0
  305. package/dist/backend/target-diagnostics.js +8 -0
  306. package/dist/backend/target-diagnostics.js.map +1 -1
  307. package/dist/backend/target-diagnostics.test.js +1 -1
  308. package/dist/backend/warm-cache.js +5 -0
  309. package/dist/backend/warm-cache.js.map +1 -1
  310. package/dist/backend/young-nursery.d.ts +7 -0
  311. package/dist/backend/young-nursery.js +10 -0
  312. package/dist/backend/young-nursery.js.map +1 -0
  313. package/dist/cli/command.js +44 -4
  314. package/dist/cli/command.js.map +1 -1
  315. package/dist/cli/usage.d.ts +11 -1
  316. package/dist/cli/usage.js +20 -1
  317. package/dist/cli/usage.js.map +1 -1
  318. package/dist/compat/fetch-profile.js +10 -1
  319. package/dist/compat/fetch-profile.js.map +1 -1
  320. package/dist/compile-types.d.ts +13 -0
  321. package/dist/contracts/check.js +25 -6
  322. package/dist/contracts/check.js.map +1 -1
  323. package/dist/contracts/int32-elements.d.ts +115 -0
  324. package/dist/contracts/int32-elements.js +1179 -0
  325. package/dist/contracts/int32-elements.js.map +1 -0
  326. package/dist/coverage/report.d.ts +16 -0
  327. package/dist/coverage/report.js +182 -1
  328. package/dist/coverage/report.js.map +1 -1
  329. package/dist/coverage/surface-manifest.js +19 -6
  330. package/dist/coverage/surface-manifest.js.map +1 -1
  331. package/dist/coverage/verdict-cache.d.ts +2 -0
  332. package/dist/coverage/verdict-cache.js +12 -0
  333. package/dist/coverage/verdict-cache.js.map +1 -1
  334. package/dist/coverage/verdict-cache.test.js +2 -1
  335. package/dist/coverage/verdict-cache.test.js.map +1 -1
  336. package/dist/diagnostics/diagnostic.d.ts +11 -7
  337. package/dist/diagnostics/diagnostic.js +35 -23
  338. package/dist/diagnostics/diagnostic.js.map +1 -1
  339. package/dist/diagnostics/envelope.d.ts +39 -2
  340. package/dist/diagnostics/envelope.js.map +1 -1
  341. package/dist/diagnostics/render.d.ts +7 -0
  342. package/dist/diagnostics/render.js +50 -13
  343. package/dist/diagnostics/render.js.map +1 -1
  344. package/dist/diagnostics/render.test.d.ts +1 -0
  345. package/dist/diagnostics/render.test.js +49 -0
  346. package/dist/diagnostics/render.test.js.map +1 -0
  347. package/dist/executable/executable-cache.d.ts +17 -0
  348. package/dist/executable/executable-cache.js +13 -1
  349. package/dist/executable/executable-cache.js.map +1 -1
  350. package/dist/executable/executable-cache.test.js +7 -1
  351. package/dist/executable/executable-cache.test.js.map +1 -1
  352. package/dist/executable/prepare.js +2 -1
  353. package/dist/executable/prepare.js.map +1 -1
  354. package/dist/frontend/analysis.js +6 -1
  355. package/dist/frontend/analysis.js.map +1 -1
  356. package/dist/frontend/builtin-modules.d.ts +16 -2
  357. package/dist/frontend/builtin-modules.js +40 -7
  358. package/dist/frontend/builtin-modules.js.map +1 -1
  359. package/dist/frontend/cjs-syntax.js +52 -51
  360. package/dist/frontend/cjs-syntax.js.map +1 -1
  361. package/dist/frontend/contract-types.d.ts +3 -0
  362. package/dist/frontend/contract-types.js +36 -7
  363. package/dist/frontend/contract-types.js.map +1 -1
  364. package/dist/frontend/experimental-import.d.ts +5 -1
  365. package/dist/frontend/experimental-import.js +26 -7
  366. package/dist/frontend/experimental-import.js.map +1 -1
  367. package/dist/frontend/fork-target.js +20 -22
  368. package/dist/frontend/fork-target.js.map +1 -1
  369. package/dist/frontend/fork-target.test.js +2 -1
  370. package/dist/frontend/fork-target.test.js.map +1 -1
  371. package/dist/frontend/function-completion.js +6 -6
  372. package/dist/frontend/function-completion.js.map +1 -1
  373. package/dist/frontend/helper-tokens.js +15 -3
  374. package/dist/frontend/helper-tokens.js.map +1 -1
  375. package/dist/frontend/helper-tokens.test.js +7 -1
  376. package/dist/frontend/helper-tokens.test.js.map +1 -1
  377. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  378. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  379. package/dist/frontend/input-tracker.d.ts +3 -0
  380. package/dist/frontend/input-tracker.js +32 -3
  381. package/dist/frontend/input-tracker.js.map +1 -1
  382. package/dist/frontend/lib-contract.js +36 -32
  383. package/dist/frontend/lib-contract.js.map +1 -1
  384. package/dist/frontend/lib-exports.js +3 -3
  385. package/dist/frontend/lib-exports.js.map +1 -1
  386. package/dist/frontend/lowering/array-values.d.ts +8 -3
  387. package/dist/frontend/lowering/array-values.js +60 -11
  388. package/dist/frontend/lowering/array-values.js.map +1 -1
  389. package/dist/frontend/lowering/assert-instances.js +4 -4
  390. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  391. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  392. package/dist/frontend/lowering/assertion-identity.js +70 -0
  393. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  394. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  395. package/dist/frontend/lowering/assertion-members.js +185 -0
  396. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  397. package/dist/frontend/lowering/binding-analysis.js +27 -20
  398. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  399. package/dist/frontend/lowering/builtin-calls.js +72 -4
  400. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  401. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  402. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  403. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  404. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  405. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  406. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  407. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  408. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  409. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  410. package/dist/frontend/lowering/builtins/blob.js +8 -6
  411. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  412. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
  413. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
  414. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  415. package/dist/frontend/lowering/builtins/callable-aliases.js +45 -6
  416. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  417. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  418. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  419. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  420. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  421. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  422. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  423. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  424. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  425. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  426. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  428. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  429. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  430. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  431. package/dist/frontend/lowering/builtins/compression.js +230 -52
  432. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  433. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  434. package/dist/frontend/lowering/builtins/constants.js +28 -7
  435. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  436. package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
  437. package/dist/frontend/lowering/builtins/crypto.js +223 -38
  438. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  439. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  440. package/dist/frontend/lowering/builtins/dates.js +92 -16
  441. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  442. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  443. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  444. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  445. package/dist/frontend/lowering/builtins/environment.js +3 -3
  446. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  447. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  448. package/dist/frontend/lowering/builtins/errors.js +174 -6
  449. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  450. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +4 -0
  451. package/dist/frontend/lowering/builtins/filesystem-calls.js +136 -113
  452. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  453. package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
  454. package/dist/frontend/lowering/builtins/filesystem.js +213 -76
  455. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  457. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  459. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
  461. package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
  462. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  464. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  465. package/dist/frontend/lowering/builtins/json.js +232 -24
  466. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  468. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  470. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  471. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/module-calls.js +67 -46
  473. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  475. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  476. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  478. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  479. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  481. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  482. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  483. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  484. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  485. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  486. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  487. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  488. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  489. package/dist/frontend/lowering/builtins/performance.js +259 -8
  490. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  491. package/dist/frontend/lowering/builtins/process.d.ts +32 -1
  492. package/dist/frontend/lowering/builtins/process.js +468 -99
  493. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  494. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  495. package/dist/frontend/lowering/builtins/promises.js +326 -43
  496. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  497. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
  498. package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
  499. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  500. package/dist/frontend/lowering/builtins/properties.js +37 -1
  501. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  502. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  503. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  504. package/dist/frontend/lowering/builtins/readline.d.ts +55 -13
  505. package/dist/frontend/lowering/builtins/readline.js +931 -69
  506. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  508. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/reflection.js +16 -14
  510. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  512. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  513. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  514. package/dist/frontend/lowering/builtins/strings.js +101 -12
  515. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  516. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  517. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  518. package/dist/frontend/lowering/builtins/timers.js +75 -30
  519. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  521. package/dist/frontend/lowering/builtins/url.js +120 -17
  522. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  523. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  524. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  526. package/dist/frontend/lowering/builtins/v8.js +105 -0
  527. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  529. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  530. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  532. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  533. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  534. package/dist/frontend/lowering/builtins/workers.d.ts +16 -0
  535. package/dist/frontend/lowering/builtins/workers.js +246 -3
  536. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  537. package/dist/frontend/lowering/call-arguments.js +69 -14
  538. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  539. package/dist/frontend/lowering/call-signatures.d.ts +19 -1
  540. package/dist/frontend/lowering/call-signatures.js +254 -47
  541. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  542. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  543. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  544. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  545. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  546. package/dist/frontend/lowering/cjs-exports-object.js +528 -0
  547. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  548. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  549. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  550. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  551. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  552. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  553. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  554. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  555. package/dist/frontend/lowering/class-attributes.js +378 -0
  556. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  557. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  558. package/dist/frontend/lowering/class-callbacks.js +21 -10
  559. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  560. package/dist/frontend/lowering/class-construction.js +49 -4
  561. package/dist/frontend/lowering/class-construction.js.map +1 -1
  562. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  563. package/dist/frontend/lowering/class-descriptors.js +8 -8
  564. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  565. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  566. package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
  567. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  568. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  569. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  570. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  571. package/dist/frontend/lowering/class-iterables.js +31 -0
  572. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  573. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  574. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  575. package/dist/frontend/lowering/class-method-values.js +56 -10
  576. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  577. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  578. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  579. package/dist/frontend/lowering/class-protocols.d.ts +55 -0
  580. package/dist/frontend/lowering/class-protocols.js +738 -22
  581. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  582. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  583. package/dist/frontend/lowering/class-prototypes.js +80 -18
  584. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  585. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  586. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  587. package/dist/frontend/lowering/class-static-data.js +2 -2
  588. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  589. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  590. package/dist/frontend/lowering/class-to-primitive.js +261 -0
  591. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  592. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  593. package/dist/frontend/lowering/class-unions.js +102 -1
  594. package/dist/frontend/lowering/class-unions.js.map +1 -1
  595. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  596. package/dist/frontend/lowering/code-generation.js +127 -0
  597. package/dist/frontend/lowering/code-generation.js.map +1 -0
  598. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  599. package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
  600. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  601. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  602. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  603. package/dist/frontend/lowering/coercions/structural.js +35 -3
  604. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  605. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  606. package/dist/frontend/lowering/coercions/unions.js +57 -1
  607. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  608. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  609. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  610. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  611. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  612. package/dist/frontend/lowering/construction-escapes.js +8 -8
  613. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  614. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  615. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  616. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  617. package/dist/frontend/lowering/constructor-returns.js +477 -0
  618. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  619. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  620. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  621. package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
  622. package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
  623. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  624. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  625. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  626. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  627. package/dist/frontend/lowering/containers/array-construction.js +51 -13
  628. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  629. package/dist/frontend/lowering/containers/array-from-async.d.ts +19 -0
  630. package/dist/frontend/lowering/containers/array-from-async.js +427 -0
  631. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
  632. package/dist/frontend/lowering/containers/array-methods.js +89 -77
  633. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  634. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  635. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  636. package/dist/frontend/lowering/containers/bytes.js +161 -101
  637. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  638. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  639. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  640. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  641. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  642. package/dist/frontend/lowering/containers/collection-grouping.js +219 -27
  643. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  644. package/dist/frontend/lowering/containers/collection-methods.js +81 -48
  645. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  646. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  647. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  648. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  649. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  650. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  651. package/dist/frontend/lowering/containers/for-of.js +19 -19
  652. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  653. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  654. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  655. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  656. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  657. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  658. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  659. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  660. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  661. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  662. package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
  663. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  664. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  665. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  666. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
  667. package/dist/frontend/lowering/cycle-initialization.js +39 -0
  668. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  669. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  670. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  671. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  672. package/dist/frontend/lowering/devirtualize.js +27 -7
  673. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  674. package/dist/frontend/lowering/divergences.d.ts +0 -5
  675. package/dist/frontend/lowering/divergences.js +238 -128
  676. package/dist/frontend/lowering/divergences.js.map +1 -1
  677. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  678. package/dist/frontend/lowering/dyn-streams.js +257 -0
  679. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  680. package/dist/frontend/lowering/error-methods.js +4 -1
  681. package/dist/frontend/lowering/error-methods.js.map +1 -1
  682. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  683. package/dist/frontend/lowering/error-name-order.js +93 -0
  684. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  685. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  686. package/dist/frontend/lowering/expressions/array-literals.js +703 -0
  687. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  688. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  689. package/dist/frontend/lowering/expressions/binary.js +2483 -0
  690. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  691. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  692. package/dist/frontend/lowering/expressions/element-access.js +1797 -0
  693. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  694. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  695. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  696. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  697. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  698. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  699. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  700. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  701. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  702. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
  703. package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
  704. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  705. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  706. package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
  707. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  708. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  709. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  710. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  711. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  712. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  713. package/dist/frontend/lowering/expressions/object-literals.js +253 -85
  714. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  715. package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
  716. package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
  717. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  718. package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
  719. package/dist/frontend/lowering/expressions/property-access.js +3544 -0
  720. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  721. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  722. package/dist/frontend/lowering/expressions/relational.js +1679 -0
  723. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  724. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  725. package/dist/frontend/lowering/expressions/typeof.js +538 -0
  726. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  727. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  728. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  729. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  730. package/dist/frontend/lowering/expressions/updates.js +780 -0
  731. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  732. package/dist/frontend/lowering/function-context.d.ts +10 -0
  733. package/dist/frontend/lowering/function-context.js +11 -1
  734. package/dist/frontend/lowering/function-context.js.map +1 -1
  735. package/dist/frontend/lowering/function-returns.js +52 -28
  736. package/dist/frontend/lowering/function-returns.js.map +1 -1
  737. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  738. package/dist/frontend/lowering/general-streams.js +108 -0
  739. package/dist/frontend/lowering/general-streams.js.map +1 -0
  740. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  741. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  742. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  743. package/dist/frontend/lowering/generic-functions.d.ts +39 -0
  744. package/dist/frontend/lowering/generic-functions.js +393 -75
  745. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  746. package/dist/frontend/lowering/import-meta.js +2 -2
  747. package/dist/frontend/lowering/import-meta.js.map +1 -1
  748. package/dist/frontend/lowering/intern-tables.js +10 -9
  749. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  750. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  751. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  752. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  753. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  754. package/dist/frontend/lowering/js-class-fields.js +170 -0
  755. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  756. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  757. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  758. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  759. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  760. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  761. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  762. package/dist/frontend/lowering/json-require.d.ts +22 -0
  763. package/dist/frontend/lowering/json-require.js +131 -0
  764. package/dist/frontend/lowering/json-require.js.map +1 -0
  765. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  766. package/dist/frontend/lowering/key-order-witness.js +641 -0
  767. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  768. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  769. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  770. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  771. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  772. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  773. package/dist/frontend/lowering/lower-assert.js +61 -60
  774. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  775. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  776. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  777. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  778. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  779. package/dist/frontend/lowering/lower-builtin-values.js +32 -3
  780. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  781. package/dist/frontend/lowering/lower-calls.js +1298 -452
  782. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  783. package/dist/frontend/lowering/lower-classes.d.ts +50 -3
  784. package/dist/frontend/lowering/lower-classes.js +1499 -456
  785. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  786. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  787. package/dist/frontend/lowering/lower-comptime.js +111 -13
  788. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  789. package/dist/frontend/lowering/lower-console.js +13 -11
  790. package/dist/frontend/lowering/lower-console.js.map +1 -1
  791. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  792. package/dist/frontend/lowering/lower-dgram.js +179 -8
  793. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  794. package/dist/frontend/lowering/lower-enums.js +113 -14
  795. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  796. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  797. package/dist/frontend/lowering/lower-event-emitter.js +268 -71
  798. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  799. package/dist/frontend/lowering/lower-event-target.js +2 -2
  800. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  801. package/dist/frontend/lowering/lower-expando.js +17 -13
  802. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  803. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  804. package/dist/frontend/lowering/lower-exprs.js +1493 -12407
  805. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  806. package/dist/frontend/lowering/lower-functions.js +68 -22
  807. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  808. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  809. package/dist/frontend/lowering/lower-generators.js +29 -16
  810. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  811. package/dist/frontend/lowering/lower-global-value.js +5 -1
  812. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  813. package/dist/frontend/lowering/lower-inspect.js +354 -99
  814. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  815. package/dist/frontend/lowering/lower-mixins.js +23 -20
  816. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  817. package/dist/frontend/lowering/lower-mock.d.ts +19 -2
  818. package/dist/frontend/lowering/lower-mock.js +557 -74
  819. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  820. package/dist/frontend/lowering/lower-modules.js +268 -61
  821. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  822. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  823. package/dist/frontend/lowering/lower-namespaces.js +45 -33
  824. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  825. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  826. package/dist/frontend/lowering/lower-node-module.js +147 -14
  827. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  828. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  829. package/dist/frontend/lowering/lower-server.js +638 -105
  830. package/dist/frontend/lowering/lower-server.js.map +1 -1
  831. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  832. package/dist/frontend/lowering/lower-stdlib.js +151 -109
  833. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  834. package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
  835. package/dist/frontend/lowering/lower-stmts.js +1589 -398
  836. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  837. package/dist/frontend/lowering/lower-stream.d.ts +4 -3
  838. package/dist/frontend/lowering/lower-stream.js +714 -75
  839. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  840. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  841. package/dist/frontend/lowering/lower-test.js +574 -100
  842. package/dist/frontend/lowering/lower-test.js.map +1 -1
  843. package/dist/frontend/lowering/lower-timers.js +80 -32
  844. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  845. package/dist/frontend/lowering/lower-url.js +1 -1
  846. package/dist/frontend/lowering/lower-url.js.map +1 -1
  847. package/dist/frontend/lowering/lowerer.d.ts +409 -26
  848. package/dist/frontend/lowering/lowerer.js +1918 -305
  849. package/dist/frontend/lowering/lowerer.js.map +1 -1
  850. package/dist/frontend/lowering/lowerer.test.js +10 -4
  851. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  852. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  853. package/dist/frontend/lowering/maybe-promise.js +249 -0
  854. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  855. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  856. package/dist/frontend/lowering/module-member-this.js +262 -0
  857. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  858. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  859. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  860. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  861. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  862. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  863. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  864. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  865. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  866. package/dist/frontend/lowering/native-ffi.js +11 -11
  867. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  868. package/dist/frontend/lowering/null-prototype.d.ts +13 -0
  869. package/dist/frontend/lowering/null-prototype.js +33 -0
  870. package/dist/frontend/lowering/null-prototype.js.map +1 -0
  871. package/dist/frontend/lowering/object-factory-new.js +6 -8
  872. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  873. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  874. package/dist/frontend/lowering/private-brands.js +265 -0
  875. package/dist/frontend/lowering/private-brands.js.map +1 -0
  876. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  877. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  878. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  879. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  880. package/dist/frontend/lowering/require-initialization.js +246 -0
  881. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  882. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  883. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  884. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  885. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  886. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  887. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  888. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  889. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  890. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  891. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  892. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  893. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  894. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  895. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  896. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  897. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  898. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  899. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  900. package/dist/frontend/lowering/split-consumers.js +4 -4
  901. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  902. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  903. package/dist/frontend/lowering/static-function-names.js +212 -0
  904. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  905. package/dist/frontend/lowering/static-this.js +6 -6
  906. package/dist/frontend/lowering/static-this.js.map +1 -1
  907. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  908. package/dist/frontend/lowering/strict-mode.js +31 -0
  909. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  910. package/dist/frontend/lowering/string-index-bounds.js +10 -10
  911. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  912. package/dist/frontend/lowering/string-index.d.ts +12 -0
  913. package/dist/frontend/lowering/string-index.js +72 -1
  914. package/dist/frontend/lowering/string-index.js.map +1 -1
  915. package/dist/frontend/lowering/surfaces.d.ts +15 -6
  916. package/dist/frontend/lowering/surfaces.js +278 -45
  917. package/dist/frontend/lowering/surfaces.js.map +1 -1
  918. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  919. package/dist/frontend/lowering/symbol-fields.js +204 -36
  920. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  921. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  922. package/dist/frontend/lowering/symbol-methods.js +24 -6
  923. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  924. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  925. package/dist/frontend/lowering/thread-slots.js +208 -0
  926. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  927. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  928. package/dist/frontend/lowering/typed-arguments.js +472 -0
  929. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  930. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  931. package/dist/frontend/lowering/union-retag.js +27 -0
  932. package/dist/frontend/lowering/union-retag.js.map +1 -1
  933. package/dist/frontend/lowering/union-retag.test.js +24 -1
  934. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  935. package/dist/frontend/lowering/var-hoisting.js +6 -6
  936. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  937. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  938. package/dist/frontend/mock-shapes.d.ts +5 -0
  939. package/dist/frontend/mock-shapes.js +39 -7
  940. package/dist/frontend/mock-shapes.js.map +1 -1
  941. package/dist/frontend/module-source-candidates.js +1 -1
  942. package/dist/frontend/module-source-candidates.js.map +1 -1
  943. package/dist/frontend/module-source-candidates.test.js +2 -1
  944. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  945. package/dist/frontend/module-syntax.js +8 -8
  946. package/dist/frontend/module-syntax.js.map +1 -1
  947. package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
  948. package/dist/frontend/npm-static-bundled-chunks.js +810 -0
  949. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  950. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  951. package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
  952. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  953. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  954. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  955. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  956. package/dist/frontend/npm-static-bundled-esm.js +768 -0
  957. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  958. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  959. package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
  960. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  961. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  962. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  963. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  964. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  965. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  966. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  967. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  968. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  969. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  970. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  971. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  972. package/dist/frontend/npm-static-prune.js +36 -24
  973. package/dist/frontend/npm-static-prune.js.map +1 -1
  974. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  975. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  976. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  977. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  978. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  979. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  980. package/dist/frontend/npm-static-subtyping.js +7 -9
  981. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  982. package/dist/frontend/npm-static.d.ts +17 -1
  983. package/dist/frontend/npm-static.js +167 -16
  984. package/dist/frontend/npm-static.js.map +1 -1
  985. package/dist/frontend/npm-static.test.js +22 -1
  986. package/dist/frontend/npm-static.test.js.map +1 -1
  987. package/dist/frontend/pipeline.js +164 -26
  988. package/dist/frontend/pipeline.js.map +1 -1
  989. package/dist/frontend/pipeline.test.js +22 -1
  990. package/dist/frontend/pipeline.test.js.map +1 -1
  991. package/dist/frontend/program-analysis.d.ts +6 -1
  992. package/dist/frontend/program-analysis.js +7 -0
  993. package/dist/frontend/program-analysis.js.map +1 -1
  994. package/dist/frontend/program.d.ts +92 -2
  995. package/dist/frontend/program.js +1557 -254
  996. package/dist/frontend/program.js.map +1 -1
  997. package/dist/frontend/program.test.js +76 -6
  998. package/dist/frontend/program.test.js.map +1 -1
  999. package/dist/frontend/resolve.js +36 -2
  1000. package/dist/frontend/resolve.js.map +1 -1
  1001. package/dist/frontend/resolve.test.js +49 -0
  1002. package/dist/frontend/resolve.test.js.map +1 -1
  1003. package/dist/frontend/services.d.ts +20 -1
  1004. package/dist/frontend/services.js +40 -3
  1005. package/dist/frontend/services.js.map +1 -1
  1006. package/dist/frontend/services.test.js +2 -1
  1007. package/dist/frontend/services.test.js.map +1 -1
  1008. package/dist/frontend/threads-import.js +1 -1
  1009. package/dist/frontend/threads-import.js.map +1 -1
  1010. package/dist/frontend/tier-analysis.d.ts +71 -0
  1011. package/dist/frontend/tier-analysis.js +522 -0
  1012. package/dist/frontend/tier-analysis.js.map +1 -0
  1013. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1014. package/dist/frontend/ts7/api-conformance.js +7 -0
  1015. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1016. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1017. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1018. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1019. package/dist/frontend/ts7/ast-node.js +64 -18
  1020. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1021. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1022. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1023. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1024. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1025. package/dist/frontend/ts7/ast.d.ts +1 -0
  1026. package/dist/frontend/ts7/ast.js +3 -2
  1027. package/dist/frontend/ts7/ast.js.map +1 -1
  1028. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1029. package/dist/frontend/ts7/checker-backend.js +88 -0
  1030. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1031. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1032. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1033. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1034. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1035. package/dist/frontend/ts7/checker-cache.js +0 -6
  1036. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1037. package/dist/frontend/ts7/checker.d.ts +18 -11
  1038. package/dist/frontend/ts7/checker.js +42 -55
  1039. package/dist/frontend/ts7/checker.js.map +1 -1
  1040. package/dist/frontend/ts7/checker.test.js +10 -7
  1041. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1042. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1043. package/dist/frontend/ts7/diagnostic.js +22 -0
  1044. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1045. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1046. package/dist/frontend/ts7/node-functions.js +18 -0
  1047. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1048. package/dist/frontend/ts7/program-host.d.ts +5 -1
  1049. package/dist/frontend/ts7/program-host.js +12 -0
  1050. package/dist/frontend/ts7/program-host.js.map +1 -1
  1051. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1052. package/dist/frontend/ts7/rpc-api.js +8 -1
  1053. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1054. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1055. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1056. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1057. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1058. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1059. package/dist/frontend/ts7/semantic-model.d.ts +54 -24
  1060. package/dist/frontend/ts7/semantic-model.js +88 -16
  1061. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1062. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1063. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1064. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1065. package/dist/frontend/ts7/semantic-types.js +1 -1
  1066. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1067. package/dist/frontend/ts7/session.d.ts +11 -11
  1068. package/dist/frontend/ts7/session.js +8 -5
  1069. package/dist/frontend/ts7/session.js.map +1 -1
  1070. package/dist/frontend/ts7/session.test.js +9 -5
  1071. package/dist/frontend/ts7/session.test.js.map +1 -1
  1072. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1073. package/dist/frontend/ts7/source-parser.js +24 -3
  1074. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1075. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1076. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1077. package/dist/frontend/type-mapper.d.ts +122 -2
  1078. package/dist/frontend/type-mapper.js +2612 -695
  1079. package/dist/frontend/type-mapper.js.map +1 -1
  1080. package/dist/frontend/type-only-imports.d.ts +28 -0
  1081. package/dist/frontend/type-only-imports.js +122 -0
  1082. package/dist/frontend/type-only-imports.js.map +1 -0
  1083. package/dist/frontend/worker-target.js +8 -8
  1084. package/dist/frontend/worker-target.js.map +1 -1
  1085. package/dist/index.d.ts +3 -1
  1086. package/dist/index.js +47 -10
  1087. package/dist/index.js.map +1 -1
  1088. package/dist/ir/analysis.js +4 -2
  1089. package/dist/ir/analysis.js.map +1 -1
  1090. package/dist/ir/api.d.ts +1 -1
  1091. package/dist/ir/api.js +1 -1
  1092. package/dist/ir/api.js.map +1 -1
  1093. package/dist/ir/array-length-stability.d.ts +30 -0
  1094. package/dist/ir/array-length-stability.js +236 -0
  1095. package/dist/ir/array-length-stability.js.map +1 -0
  1096. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1097. package/dist/ir/array-length-stability.test.js +113 -0
  1098. package/dist/ir/array-length-stability.test.js.map +1 -0
  1099. package/dist/ir/build.d.ts +2 -2
  1100. package/dist/ir/build.js +1 -1
  1101. package/dist/ir/build.js.map +1 -1
  1102. package/dist/ir/builtin-effects.js +139 -0
  1103. package/dist/ir/builtin-effects.js.map +1 -1
  1104. package/dist/ir/builtin-signatures.d.ts +1 -1
  1105. package/dist/ir/builtin-signatures.js +655 -25
  1106. package/dist/ir/builtin-signatures.js.map +1 -1
  1107. package/dist/ir/byte-numbers.js +3 -0
  1108. package/dist/ir/byte-numbers.js.map +1 -1
  1109. package/dist/ir/callback-specialization.d.ts +37 -0
  1110. package/dist/ir/callback-specialization.js +459 -0
  1111. package/dist/ir/callback-specialization.js.map +1 -0
  1112. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1113. package/dist/ir/callback-specialization.test.js +208 -0
  1114. package/dist/ir/callback-specialization.test.js.map +1 -0
  1115. package/dist/ir/capture-values.d.ts +0 -1
  1116. package/dist/ir/capture-values.js +51 -40
  1117. package/dist/ir/capture-values.js.map +1 -1
  1118. package/dist/ir/constant-globals.test.js +1 -1
  1119. package/dist/ir/constant-tables.test.js +1 -1
  1120. package/dist/ir/field-values.test.js +1 -1
  1121. package/dist/ir/final-fields.test.js +1 -1
  1122. package/dist/ir/function-references.test.js +10 -1
  1123. package/dist/ir/function-references.test.js.map +1 -1
  1124. package/dist/ir/init-only-globals.test.js +1 -1
  1125. package/dist/ir/initializer-bindings.test.js +1 -1
  1126. package/dist/ir/int32-slots.d.ts +14 -0
  1127. package/dist/ir/int32-slots.js +119 -14
  1128. package/dist/ir/int32-slots.js.map +1 -1
  1129. package/dist/ir/int32-slots.test.js +29 -1
  1130. package/dist/ir/int32-slots.test.js.map +1 -1
  1131. package/dist/ir/integer-loop-facts.d.ts +16 -6
  1132. package/dist/ir/integer-loop-facts.js +143 -38
  1133. package/dist/ir/integer-loop-facts.js.map +1 -1
  1134. package/dist/ir/integer-loops.d.ts +1 -1
  1135. package/dist/ir/integer-loops.js +39 -9
  1136. package/dist/ir/integer-loops.js.map +1 -1
  1137. package/dist/ir/integer-loops.test.js +104 -0
  1138. package/dist/ir/integer-loops.test.js.map +1 -1
  1139. package/dist/ir/integer-ranges.d.ts +3 -0
  1140. package/dist/ir/integer-ranges.js +4 -6
  1141. package/dist/ir/integer-ranges.js.map +1 -1
  1142. package/dist/ir/integer-ranges.test.js +142 -1
  1143. package/dist/ir/integer-ranges.test.js.map +1 -1
  1144. package/dist/ir/intrinsic-signatures.js +6 -0
  1145. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1146. package/dist/ir/ir.d.ts +234 -58
  1147. package/dist/ir/ir.js +123 -12
  1148. package/dist/ir/ir.js.map +1 -1
  1149. package/dist/ir/ir.test.js +10 -0
  1150. package/dist/ir/ir.test.js.map +1 -1
  1151. package/dist/ir/jsval.d.ts +8 -0
  1152. package/dist/ir/jsval.js +365 -0
  1153. package/dist/ir/jsval.js.map +1 -0
  1154. package/dist/ir/jsval.test.d.ts +1 -0
  1155. package/dist/ir/jsval.test.js +239 -0
  1156. package/dist/ir/jsval.test.js.map +1 -0
  1157. package/dist/ir/runtime-features.d.ts +150 -33
  1158. package/dist/ir/runtime-features.js +672 -339
  1159. package/dist/ir/runtime-features.js.map +1 -1
  1160. package/dist/ir/runtime-features.test.js +62 -0
  1161. package/dist/ir/runtime-features.test.js.map +1 -1
  1162. package/dist/ir/scalar-records.test.js +1 -1
  1163. package/dist/ir/self-captures.d.ts +33 -0
  1164. package/dist/ir/self-captures.js +245 -0
  1165. package/dist/ir/self-captures.js.map +1 -0
  1166. package/dist/ir/self-captures.test.d.ts +1 -0
  1167. package/dist/ir/self-captures.test.js +135 -0
  1168. package/dist/ir/self-captures.test.js.map +1 -0
  1169. package/dist/ir/serialize.d.ts +1 -1
  1170. package/dist/ir/serialize.js +7 -4
  1171. package/dist/ir/serialize.js.map +1 -1
  1172. package/dist/ir/tiers.d.ts +26 -0
  1173. package/dist/ir/tiers.js +101 -0
  1174. package/dist/ir/tiers.js.map +1 -0
  1175. package/dist/ir/tiers.test.d.ts +1 -0
  1176. package/dist/ir/tiers.test.js +140 -0
  1177. package/dist/ir/tiers.test.js.map +1 -0
  1178. package/dist/ir/traverse.js +107 -94
  1179. package/dist/ir/traverse.js.map +1 -1
  1180. package/dist/ir/traverse.test.js +33 -30
  1181. package/dist/ir/traverse.test.js.map +1 -1
  1182. package/dist/ir/unshare.js +65 -3
  1183. package/dist/ir/unshare.js.map +1 -1
  1184. package/dist/ir/unshare.test.js +1 -1
  1185. package/dist/ir/validate.js +220 -71
  1186. package/dist/ir/validate.js.map +1 -1
  1187. package/dist/ir/validate.test.js +64 -9
  1188. package/dist/ir/validate.test.js.map +1 -1
  1189. package/dist/library/fence-eval.test.js +1 -1
  1190. package/dist/library/int-infer.test.js +4 -4
  1191. package/dist/library/ir-policy.js +18 -0
  1192. package/dist/library/ir-policy.js.map +1 -1
  1193. package/dist/library/library-cache.d.ts +1 -0
  1194. package/dist/library/library-cache.js.map +1 -1
  1195. package/dist/library/library-cache.test.js +5 -5
  1196. package/dist/library/library-profile.d.ts +4 -4
  1197. package/dist/library/library-profile.js +35 -7
  1198. package/dist/library/library-profile.js.map +1 -1
  1199. package/dist/library/prepare.js +13 -1
  1200. package/dist/library/prepare.js.map +1 -1
  1201. package/dist/native/cli.js +5 -0
  1202. package/dist/native/cli.js.map +1 -1
  1203. package/dist/native/compiler.js +2 -2
  1204. package/dist/native/compiler.js.map +1 -1
  1205. package/dist/native/compiler.test.js +2 -2
  1206. package/dist/native/prepare.js +7 -0
  1207. package/dist/native/prepare.js.map +1 -1
  1208. package/dist/native/sanitizer.test.js +12 -0
  1209. package/dist/native/sanitizer.test.js.map +1 -1
  1210. package/dist/native/toolchain.d.ts +2 -0
  1211. package/dist/native/toolchain.js +10 -1
  1212. package/dist/native/toolchain.js.map +1 -1
  1213. package/dist/native/toolchain.test.js +39 -1
  1214. package/dist/native/toolchain.test.js.map +1 -1
  1215. package/dist/startup-cache.d.ts +1 -0
  1216. package/dist/startup-cache.js +1 -0
  1217. package/dist/startup-cache.js.map +1 -1
  1218. package/dist/wasm/base64.d.ts +5 -0
  1219. package/dist/wasm/base64.js +62 -0
  1220. package/dist/wasm/base64.js.map +1 -0
  1221. package/dist/wasm/binary.d.ts +36 -0
  1222. package/dist/wasm/binary.js +1976 -0
  1223. package/dist/wasm/binary.js.map +1 -0
  1224. package/dist/wasm/binary.test.d.ts +1 -0
  1225. package/dist/wasm/binary.test.js +190 -0
  1226. package/dist/wasm/binary.test.js.map +1 -0
  1227. package/dist/wasm/discover.d.ts +38 -0
  1228. package/dist/wasm/discover.js +377 -0
  1229. package/dist/wasm/discover.js.map +1 -0
  1230. package/dist/wasm/discover.test.d.ts +1 -0
  1231. package/dist/wasm/discover.test.js +24 -0
  1232. package/dist/wasm/discover.test.js.map +1 -0
  1233. package/dist/wasm/module.d.ts +151 -0
  1234. package/dist/wasm/module.js +575 -0
  1235. package/dist/wasm/module.js.map +1 -0
  1236. package/dist/wasm/translate.d.ts +48 -0
  1237. package/dist/wasm/translate.js +2129 -0
  1238. package/dist/wasm/translate.js.map +1 -0
  1239. package/dist/wasm/translate.test.d.ts +1 -0
  1240. package/dist/wasm/translate.test.js +207 -0
  1241. package/dist/wasm/translate.test.js.map +1 -0
  1242. package/package.json +21 -20
  1243. package/surface-manifest.json +332 -36
@@ -15,11 +15,27 @@
15
15
  import * as ts from "../ts7/adapter.js";
16
16
  import { resultIsDiscarded } from "./call-position.js";
17
17
  import { locOf } from "../program.js";
18
- import { F64, STRING, VOID, isUnitType, } from "../../ir/ir.js";
19
- import { numLit, strLit } from "../../ir/build.js";
20
- import { lowerMockContextCall, lowerMockContextProperty, lowerMockFn } from "./lower-mock.js";
18
+ import { BOOL, DYN, F64, STRING, TESTCTX_T, VOID, isUnitType, } from "../../ir/ir.js";
19
+ import { dynUndefinedExpr, numLit, strLit, varRef } from "../../ir/build.js";
20
+ import { lowerMockContextCall, lowerMockContextProperty, lowerMockFn, lowerMockMethod, lowerMockTimersCall, lowerMockTrackerCall, } from "./lower-mock.js";
21
+ const MOCK_HINT = "mock.fn, mock.method, mock.restoreAll, mock.reset and mock.timers are the supported mock members";
22
+ /** The mock tracker members that lower, for the module's `mock` (tracker
23
+ * null) and t.mock. Null for other members. */
24
+ function lowerMockTrackerMember(lowerer, call, member, what, tracker) {
25
+ switch (member) {
26
+ case "fn":
27
+ return lowerMockFn(lowerer, call, `${what}.fn`, tracker());
28
+ case "method":
29
+ return lowerMockMethod(lowerer, call, `${what}.method`, tracker());
30
+ case "restoreAll":
31
+ case "reset":
32
+ return lowerMockTrackerCall(lowerer, call, member, tracker());
33
+ default:
34
+ return null;
35
+ }
36
+ }
21
37
  const TEST_FN_HINT = "test bodies take () or (t: TestContext) and return void or Promise<void>";
22
- const TESTCTX_SURFACE_HINT = "t.test, t.skip, t.todo, t.diagnostic, t.plan, t.before, t.after, t.beforeEach, t.afterEach, t.name, t.fullName, and t.assert.* are the supported TestContext members";
38
+ const TESTCTX_SURFACE_HINT = "t.test, t.skip, t.todo, t.diagnostic, t.plan, t.before, t.after, t.beforeEach, t.afterEach, t.name, t.fullName, t.filePath, t.attempt, t.passed, t.workerId, t.tags, and t.assert.* are the supported TestContext members";
23
39
  /** Registration calls return Node's Promise<void>, but the promise only
24
40
  * resolves through the runner — consuming it outside `await t.test(...)`
25
41
  * has no lowering, so top-level registrations stand as statements. */
@@ -34,55 +50,142 @@ function requireStatementPosition(lowerer, call, what) {
34
50
  * reports the `test` property's column), at the call for plain ones. */
35
51
  function atStringOf(expr) {
36
52
  const target = ts.isPropertyAccessExpression(expr.expression) ? expr.expression.name : expr;
37
- const sf = expr.getSourceFile();
38
- const pos = sf.getLineAndCharacterOfPosition(target.getStart());
53
+ const sf = ts.getSourceFileOfNode(expr);
54
+ const pos = sf.getLineAndCharacterOfPosition(ts.tokenStartOfNode(target));
39
55
  return `${sf.fileName}:${pos.line + 1}:${pos.character + 1}`;
40
56
  }
57
+ const noOptions = () => ({
58
+ skip: false,
59
+ skipMsg: null,
60
+ todo: false,
61
+ todoMsg: null,
62
+ only: false,
63
+ plan: -1,
64
+ timeout: null,
65
+ concurrency: null,
66
+ pre: [],
67
+ });
68
+ /** The runtime mode (0 run / 1 skip / 2 todo) and directive message of a
69
+ * test or suite, as Node's Test constructor settles them: the skip and todo
70
+ * method twins override the options of the same name, skip wins over
71
+ * todo, and the message is the skip string, else the todo string. */
72
+ function directiveOf(opts, methodMode, loc) {
73
+ if (methodMode === 1) {
74
+ opts.skip = true;
75
+ opts.skipMsg = null;
76
+ }
77
+ if (methodMode === 2) {
78
+ opts.todo = true;
79
+ opts.todoMsg = null;
80
+ }
81
+ const mode = opts.skip ? 1 : opts.todo ? 2 : 0;
82
+ return [numLit(mode, loc), opts.skipMsg ?? opts.todoMsg ?? strLit("", loc)];
83
+ }
84
+ /** Flags 8 and 16: a { timeout } and a { concurrency } are given. */
85
+ const optionFlags = (opts) => (opts.only ? 4 : 0) | (opts.timeout ? 8 : 0) | (opts.concurrency ? 16 : 0);
86
+ /** Evaluates a non-literal option value into a hidden local, so option
87
+ * values run in source order. */
88
+ function optionValue(lowerer, out, value, loc) {
89
+ if (value.kind === "strLit" || value.kind === "numLit")
90
+ return value;
91
+ const slot = lowerer.declareHiddenLocal("%testOption", value.type);
92
+ out.pre.push({ kind: "varDecl", localId: slot.id, init: value, loc });
93
+ return { kind: "varRef", localId: slot.id, type: value.type, loc };
94
+ }
41
95
  /** Parses a test/describe options argument — an OBJECT LITERAL whose
42
96
  * skip/todo values are boolean literals or string messages and whose
43
- * only is the boolean literal. Everything else fences with the option
44
- * name (concurrency/timeout/plan included — bounded surface, honest
45
- * fence). */
46
- function lowerTestOptions(lowerer, node, what) {
97
+ * only is the boolean literal, and concurrency, a boolean literal or a
98
+ * number. Tests also take plan, a non-negative integer literal, and
99
+ * timeout, a number. Everything else fences with the option name. */
100
+ function lowerTestOptions(lowerer, node, what, suite) {
47
101
  if (!ts.isObjectLiteralExpression(node)) {
48
- lowerer.noLowering(`${what} with a non-literal options argument`, node, "pass the options as an object literal: { skip?, todo?, only? }");
102
+ lowerer.noLowering(`${what} with a non-literal options argument`, node, suite
103
+ ? "pass the options as an object literal: { skip?, todo?, only?, concurrency? }"
104
+ : "pass the options as an object literal: { skip?, todo?, only?, concurrency?, plan?, timeout? }");
49
105
  }
50
- const out = { mode: 0, msg: null, only: false };
51
- for (const prop of node.properties) {
52
- if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
53
- lowerer.noLowering(`${what} options with computed keys, spreads, or shorthand entries`, prop, "each option must be a plain `name: value` entry with a literal key");
106
+ const out = noOptions();
107
+ for (const prop of node.properties.nodes) {
108
+ if (!(ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) &&
109
+ !ts.isShorthandPropertyAssignment(prop)) {
110
+ lowerer.noLowering(`${what} options with computed keys or spreads`, prop, "each option must be a `name: value` or shorthand entry with a literal key");
54
111
  }
55
- const name = prop.name.text;
112
+ const key = prop.name;
113
+ const name = key.text;
114
+ // A shorthand entry's value is the binding of the same name.
115
+ const init = ts.isPropertyAssignment(prop) ? prop.initializer : key;
56
116
  if (name === "skip" || name === "todo") {
57
- const mode = name === "skip" ? 1 : 2;
58
- const t = lowerer.typeOf(prop.initializer);
117
+ const t = lowerer.typeOf(init);
59
118
  if (t.isStringLiteralType() || lowerer.mapTypeOf(t)?.kind === "string") {
60
- out.mode = mode;
61
- out.msg = lowerer.lowerExprExpecting(prop.initializer, STRING);
62
- }
63
- else if (prop.initializer.kind === ts.SyntaxKind.TrueKeyword) {
64
- out.mode = mode;
119
+ const msg = optionValue(lowerer, out, lowerer.lowerExprExpecting(init, STRING), locOf(init));
120
+ if (name === "skip") {
121
+ out.skip = true;
122
+ out.skipMsg = msg;
123
+ }
124
+ else {
125
+ out.todo = true;
126
+ out.todoMsg = msg;
127
+ }
65
128
  }
66
- else if (prop.initializer.kind === ts.SyntaxKind.FalseKeyword) {
67
- // explicit false: run normally
129
+ else if (init.kind === ts.SyntaxKind.TrueKeyword ||
130
+ init.kind === ts.SyntaxKind.FalseKeyword) {
131
+ const on = init.kind === ts.SyntaxKind.TrueKeyword;
132
+ if (name === "skip") {
133
+ out.skip = on;
134
+ out.skipMsg = null;
135
+ }
136
+ else {
137
+ out.todo = on;
138
+ out.todoMsg = null;
139
+ }
68
140
  }
69
141
  else {
70
- lowerer.noLowering(`${what} with a non-literal ${name} value`, prop.initializer, `${name} takes the literal true/false or a string message here`);
142
+ lowerer.noLowering(`${what} with a non-literal ${name} value`, init, `${name} takes the literal true/false or a string message here`);
71
143
  }
72
144
  }
73
145
  else if (name === "only") {
74
- if (prop.initializer.kind === ts.SyntaxKind.TrueKeyword)
146
+ if (init.kind === ts.SyntaxKind.TrueKeyword)
75
147
  out.only = true;
76
- else if (prop.initializer.kind !== ts.SyntaxKind.FalseKeyword) {
77
- lowerer.noLowering(`${what} with a non-literal only value`, prop.initializer, "only takes the literal true/false here");
148
+ else if (init.kind !== ts.SyntaxKind.FalseKeyword) {
149
+ lowerer.noLowering(`${what} with a non-literal only value`, init, "only takes the literal true/false here");
78
150
  }
79
151
  }
152
+ else if (name === "plan" && !suite) {
153
+ const value = ts.isNumericLiteral(init) ? Number(init.text) : NaN;
154
+ if (!Number.isInteger(value) || value > 2147483647) {
155
+ lowerer.noLowering(`${what} with a non-literal plan value`, init, "plan takes a non-negative integer literal here");
156
+ }
157
+ out.plan = value;
158
+ }
159
+ else if (name === "concurrency") {
160
+ const loc = locOf(init);
161
+ if (init.kind === ts.SyntaxKind.TrueKeyword)
162
+ out.concurrency = numLit(-1, loc);
163
+ else if (init.kind === ts.SyntaxKind.FalseKeyword)
164
+ out.concurrency = numLit(1, loc);
165
+ else if (lowerer.mapTypeOf(lowerer.typeOf(init))?.kind === "f64") {
166
+ out.concurrency = optionValue(lowerer, out, lowerer.lowerExprExpecting(init, F64), loc);
167
+ }
168
+ else {
169
+ lowerer.noLowering(`${what} with a non-literal concurrency value`, init, "concurrency takes the literal true/false or a number here");
170
+ }
171
+ }
172
+ else if (name === "timeout" && !suite) {
173
+ out.timeout = optionValue(lowerer, out, lowerer.lowerExprExpecting(init, F64), locOf(init));
174
+ }
80
175
  else {
81
- lowerer.noLowering(`${what} option '${name}'`, prop, "skip, todo, and only are the supported options");
176
+ lowerer.noLowering(`${what} option '${name}'`, prop, suite
177
+ ? "skip, todo, only, and concurrency are the supported suite options"
178
+ : "skip, todo, only, concurrency, plan, and timeout are the supported options");
82
179
  }
83
180
  }
84
181
  return out;
85
182
  }
183
+ /** The registration call, after the option values it reads. */
184
+ function withOptionValues(call, opts, loc) {
185
+ if (opts.pre.length === 0)
186
+ return call;
187
+ return { kind: "seqExpr", stmts: opts.pre, result: call, type: call.type, loc };
188
+ }
86
189
  /** Lowers a test/hook body, pinning the shape: 0 params or the one
87
190
  * TestContext param, returning void (sync) or Promise<void> (async —
88
191
  * the runner awaits through the emitted spawn wrapper). Returns the
@@ -117,112 +220,226 @@ function lowerBodyArg(lowerer, node, what, allowCtx) {
117
220
  /** The shared registration lowering behind test/it and their skip/todo/
118
221
  * only method twins — and, with `sub`, behind t.test. Argument shapes:
119
222
  * (name), (name, fn), (name, options, fn). */
223
+ /** The `name` a function value has in JavaScript, when the compiler can
224
+ * tell: "" for an anonymous function expression, the declared or binding
225
+ * name otherwise; null for other expressions. */
226
+ function staticFunctionName(lowerer, node) {
227
+ while (ts.isParenthesizedExpression(node))
228
+ node = node.expression;
229
+ if (ts.isArrowFunction(node))
230
+ return "";
231
+ if (ts.isFunctionExpression(node))
232
+ return node.name?.text ?? "";
233
+ if (!ts.isIdentifier(node))
234
+ return null;
235
+ const symbol = lowerer.resolveValueSymbol(node);
236
+ if (!symbol)
237
+ return null;
238
+ for (const decl of symbol.declarations) {
239
+ if (ts.isFunctionDeclaration(decl))
240
+ return decl.name?.text ?? "default";
241
+ if (ts.isVariableDeclaration(decl) && ts.isIdentifier(decl.name) && decl.initializer) {
242
+ let init = decl.initializer;
243
+ while (ts.isParenthesizedExpression(init))
244
+ init = init.expression;
245
+ if (ts.isFunctionExpression(init) && init.name)
246
+ return init.name.text;
247
+ if (ts.isArrowFunction(init) || ts.isFunctionExpression(init))
248
+ return decl.name.text;
249
+ }
250
+ }
251
+ return null;
252
+ }
253
+ /** Node's (name?, options?, fn?) argument forms (`Test#createSubtest`): a
254
+ * leading function is the body, a leading object the options, otherwise
255
+ * the first argument is the name and a following object the options. */
256
+ function splitTestArgs(lowerer, expr, what) {
257
+ const args = expr.arguments.nodes;
258
+ const isFn = (a) => lowerer.checker.getCallSignatures(lowerer.typeOf(a)).length > 0;
259
+ const isOptions = (a) => ts.isObjectLiteralExpression(a);
260
+ const unsupported = () => lowerer.noLowering(`${what} with these arguments`, expr, "the supported forms are (name?, options?, fn?) with a string name, an options object literal, and a function");
261
+ if (args.length > 3 || args.some(ts.isSpreadElement))
262
+ unsupported();
263
+ const out = {};
264
+ let i = 0;
265
+ const next = args[i];
266
+ if (next !== undefined && !isFn(next) && !isOptions(next)) {
267
+ out.nameNode = next;
268
+ i++;
269
+ }
270
+ const options = args[i];
271
+ if (options !== undefined && isOptions(options)) {
272
+ out.optionsNode = options;
273
+ i++;
274
+ }
275
+ const fn = args[i];
276
+ if (fn !== undefined && isFn(fn)) {
277
+ out.fnNode = fn;
278
+ i++;
279
+ }
280
+ if (i < args.length)
281
+ unsupported();
282
+ return out;
283
+ }
284
+ /** The test's name, as Node's Test constructor completes it: a missing or
285
+ * empty name takes the function's name, or "<anonymous>". */
286
+ function lowerTestName(lowerer, expr, what, nameNode, fnNode, loc) {
287
+ const fallback = () => {
288
+ const fnName = fnNode ? staticFunctionName(lowerer, fnNode) : "";
289
+ if (fnName === null) {
290
+ lowerer.noLowering(`${what} without a name, with a function whose name is not known at compile time`, fnNode ?? expr, "give the test a name, or pass a function expression or a declared function");
291
+ }
292
+ return fnName || "<anonymous>";
293
+ };
294
+ if (!nameNode)
295
+ return strLit(fallback(), loc);
296
+ const name = lowerer.lowerExprExpecting(nameNode, STRING);
297
+ if (name.kind === "strLit")
298
+ return name.value === "" ? strLit(fallback(), loc) : name;
299
+ // A name computed at run time: when the function's own name is not known
300
+ // at compile time (a function passed in as a parameter, say), the name
301
+ // is used as given, and an empty one stays empty (the limitations page
302
+ // notes it). Refusing here would refuse every helper that registers
303
+ // tests for its callers.
304
+ if (fnNode && staticFunctionName(lowerer, fnNode) === null)
305
+ return name;
306
+ const slot = lowerer.declareHiddenLocal("%testName", STRING);
307
+ const value = varRef(slot.id, STRING, loc);
308
+ return {
309
+ kind: "seqExpr",
310
+ stmts: [{ kind: "varDecl", localId: slot.id, init: name, loc }],
311
+ result: {
312
+ kind: "ternary",
313
+ cond: { kind: "strEq", negated: false, left: value, right: strLit("", loc), type: BOOL, loc },
314
+ then: strLit(fallback(), loc),
315
+ else_: value,
316
+ type: STRING,
317
+ loc,
318
+ },
319
+ type: STRING,
320
+ loc,
321
+ };
322
+ }
120
323
  function lowerRegistration(lowerer, expr, what, loc, methodMode, // 0 none, 1 skip, 2 todo, 3 only
121
324
  sub) {
122
325
  if (sub === null)
123
326
  requireStatementPosition(lowerer, expr, what);
124
- const args = expr.arguments;
125
- if (args.length < 1 || args.length > 3) {
126
- lowerer.noLowering(`${what} with ${args.length} arguments`, expr, "the supported forms are (name), (name, fn), and (name, options, fn)");
127
- }
128
- const name = lowerer.lowerExprExpecting(args[0], STRING);
129
- let opts = { mode: 0, msg: null, only: false };
130
- let fnNode;
131
- if (args.length === 2)
132
- fnNode = args[1];
133
- if (args.length === 3) {
134
- opts = lowerTestOptions(lowerer, args[1], what);
135
- fnNode = args[2];
136
- }
137
- if (methodMode === 1 || methodMode === 2)
138
- opts.mode = methodMode;
327
+ const { nameNode, optionsNode, fnNode } = splitTestArgs(lowerer, expr, what);
328
+ let name = lowerTestName(lowerer, expr, what, nameNode, fnNode, loc);
329
+ let opts = noOptions();
330
+ if (optionsNode) {
331
+ opts = lowerTestOptions(lowerer, optionsNode, what, false);
332
+ // The name runs before the option values.
333
+ if (opts.pre.length > 0 && name.kind !== "strLit") {
334
+ const slot = lowerer.declareHiddenLocal("%testName", STRING);
335
+ opts.pre.unshift({ kind: "varDecl", localId: slot.id, init: name, loc });
336
+ name = { kind: "varRef", localId: slot.id, type: STRING, loc };
337
+ }
338
+ }
139
339
  if (methodMode === 3)
140
340
  opts.only = true;
141
341
  const at = strLit(atStringOf(expr), loc);
142
- const mode = numLit(opts.mode, loc);
143
- const msg = opts.msg ?? strLit("", loc);
342
+ const [mode, msg] = directiveOf(opts, methodMode, loc);
343
+ const flagBits = optionFlags(opts);
344
+ const planTimeout = [
345
+ numLit(opts.plan, loc),
346
+ opts.timeout ?? numLit(0, loc),
347
+ opts.concurrency ?? numLit(0, loc),
348
+ ];
144
349
  if (!fnNode) {
145
- const emptyFlags = numLit(opts.only ? 4 : 0, loc);
146
- return sub
147
- ? { kind: "libCall", fn: "test.subEmpty", args: [sub, name, mode, msg, at], type: VOID, loc }
350
+ const emptyFlags = numLit(flagBits, loc);
351
+ return withOptionValues(sub
352
+ ? {
353
+ kind: "libCall",
354
+ fn: "test.subEmpty",
355
+ args: [sub, name, mode, msg, emptyFlags, at, ...planTimeout],
356
+ type: VOID,
357
+ loc,
358
+ }
148
359
  : {
149
360
  kind: "libCall",
150
361
  fn: "test.registerEmpty",
151
- args: [name, mode, msg, emptyFlags, at],
362
+ args: [name, mode, msg, emptyFlags, at, ...planTimeout],
152
363
  type: VOID,
153
364
  loc,
154
- };
365
+ }, opts, loc);
155
366
  }
156
367
  const { cb, flags } = lowerBodyArg(lowerer, fnNode, what, true);
157
- const flagsLit = numLit(flags | (opts.only ? 4 : 0), loc);
368
+ const flagsLit = numLit(flags | flagBits, loc);
158
369
  if (sub) {
159
370
  const promiseVoid = { kind: "promise", inner: VOID };
160
- return {
371
+ return withOptionValues({
161
372
  kind: "libCall",
162
373
  fn: "test.sub",
163
- args: [sub, name, mode, msg, cb, flagsLit, at],
374
+ args: [sub, name, mode, msg, cb, flagsLit, at, ...planTimeout],
164
375
  type: promiseVoid,
165
376
  loc,
166
- };
377
+ }, opts, loc);
167
378
  }
168
- return {
379
+ return withOptionValues({
169
380
  kind: "libCall",
170
381
  fn: "test.register",
171
- args: [name, mode, msg, cb, flagsLit, at],
382
+ args: [name, mode, msg, cb, flagsLit, at, ...planTimeout],
172
383
  type: VOID,
173
384
  loc,
174
- };
385
+ }, opts, loc);
175
386
  }
176
387
  /** describe/suite (and describe.skip/todo/only): the body is a SYNC
177
388
  * zero-parameter closure that runs AT registration. */
178
389
  function lowerSuite(lowerer, expr, what, loc, methodMode) {
179
390
  requireStatementPosition(lowerer, expr, what);
180
- const args = expr.arguments;
181
- if (args.length < 2 || args.length > 3) {
182
- lowerer.noLowering(`${what} with ${args.length} arguments`, expr, "the supported forms are (name, fn) and (name, options, fn)");
183
- }
184
- const name = lowerer.lowerExprExpecting(args[0], STRING);
185
- let opts = { mode: 0, msg: null, only: false };
186
- let fnNode = args[1];
187
- if (args.length === 3) {
188
- opts = lowerTestOptions(lowerer, args[1], what);
189
- fnNode = args[2];
190
- }
191
- if (methodMode === 1 || methodMode === 2)
192
- opts.mode = methodMode;
391
+ const split = splitTestArgs(lowerer, expr, what);
392
+ let name = lowerTestName(lowerer, expr, what, split.nameNode, split.fnNode, loc);
393
+ let opts = noOptions();
394
+ if (split.optionsNode) {
395
+ opts = lowerTestOptions(lowerer, split.optionsNode, what, true);
396
+ if (opts.pre.length > 0 && name.kind !== "strLit") {
397
+ const slot = lowerer.declareHiddenLocal("%testName", STRING);
398
+ opts.pre.unshift({ kind: "varDecl", localId: slot.id, init: name, loc });
399
+ name = { kind: "varRef", localId: slot.id, type: STRING, loc };
400
+ }
401
+ }
402
+ const fnNode = split.fnNode;
403
+ if (!fnNode) {
404
+ lowerer.noLowering(`${what} without a body`, expr, "give the suite a body function");
405
+ }
193
406
  const cb = lowerer.lowerExpr(fnNode);
194
- if (cb.type.kind !== "func" || cb.type.params.length !== 0) {
195
- lowerer.noLowering(`${what} whose body is not a zero-parameter function`, fnNode, "suite bodies take no parameters (they run at registration)");
407
+ // The body may take the SuiteContext (flag 2, as test bodies take theirs).
408
+ if (cb.type.kind !== "func" ||
409
+ cb.type.params.length > 1 ||
410
+ (cb.type.params.length === 1 && cb.type.params[0].kind !== "testCtx")) {
411
+ lowerer.noLowering(`${what} whose body is not a function of the SuiteContext`, fnNode, "suite bodies take no parameters or the SuiteContext (they run at registration)");
196
412
  }
197
413
  if (cb.type.ret.kind !== "void" && !isUnitType(cb.type.ret)) {
198
414
  lowerer.noLowering(`${what} with a non-void body`, fnNode, "suite bodies are synchronous and return nothing");
199
415
  }
200
416
  const at = strLit(atStringOf(expr), loc);
201
- const mode = numLit(opts.mode, loc);
202
- const msg = opts.msg ?? strLit("", loc);
417
+ const [mode, msg] = directiveOf(opts, methodMode, loc);
203
418
  // describe.only and { only: true } mark the suite (flag 4, as for tests).
204
- const flags = numLit(methodMode === 3 || opts.only ? 4 : 0, loc);
205
- return {
419
+ const flags = numLit(optionFlags(opts) | (methodMode === 3 ? 4 : 0) | (cb.type.params.length === 1 ? 2 : 0), loc);
420
+ return withOptionValues({
206
421
  kind: "libCall",
207
422
  fn: "test.suite",
208
- args: [name, mode, msg, cb, at, flags],
423
+ args: [name, mode, msg, cb, at, flags, opts.concurrency ?? numLit(0, loc)],
209
424
  type: VOID,
210
425
  loc,
211
- };
426
+ }, opts, loc);
212
427
  }
213
428
  /** before/after/beforeEach/afterEach — hooks on the enclosing suite
214
429
  * (top-level hooks attach to the implicit root). */
215
430
  function lowerHook(lowerer, expr, which, what, loc) {
216
431
  requireStatementPosition(lowerer, expr, what);
217
- const args = expr.arguments;
432
+ const args = expr.arguments.nodes;
218
433
  if (args.length !== 1) {
219
- lowerer.noLowering(`${what} with ${args.length} arguments`, expr, "the supported form is one zero-parameter function (hook options have no lowering)");
434
+ lowerer.noLowering(`${what} with ${args.length} arguments`, expr, "the supported form is one function (hook options have no lowering)");
220
435
  }
221
- const { cb, flags } = lowerBodyArg(lowerer, args[0], what, false);
436
+ // A hook may take its context: the suite's for before/after, the test's
437
+ // for beforeEach/afterEach.
438
+ const { cb, flags } = lowerBodyArg(lowerer, args[0], what, true);
222
439
  return {
223
440
  kind: "libCall",
224
441
  fn: "test.hook",
225
- args: [numLit(which, loc), cb, numLit(flags, loc)],
442
+ args: [numLit(which, loc), cb, numLit(flags, loc), strLit(atStringOf(expr), loc)],
226
443
  type: VOID,
227
444
  loc,
228
445
  };
@@ -258,17 +475,41 @@ export function lowerNodeTestModuleCall(lowerer, expr, bi, loc) {
258
475
  case "beforeEach":
259
476
  case "afterEach":
260
477
  return lowerHook(lowerer, expr, HOOK_WHICH[bi.member], `${bi.member}(...)`, loc);
478
+ case "getTestContext":
479
+ return lowerGetTestContext(lowerer, expr, loc);
261
480
  case "run":
262
481
  lowerer.noLowering("test.run", expr, "the programmatic runner has no lowering — run tests by executing the compiled binary");
263
482
  break;
264
483
  case "snapshot":
265
- lowerer.noLowering("test.snapshot", expr, "snapshot testing has no lowering");
484
+ lowerer.noLowering("test.snapshot", expr, "t.assert.snapshot and t.assert.fileSnapshot are the supported snapshot surface");
266
485
  break;
267
486
  default:
268
- lowerer.noLowering(`test.${bi.member}`, expr, "test/it, describe/suite, before/after/beforeEach/afterEach, and the skip/todo/only twins are the lowered node:test members", ts.isIdentifier(expr.expression) ? lowerer.resolveValueSymbol(expr.expression) : undefined);
487
+ lowerer.noLowering(`test.${bi.member}`, expr, "test/it, describe/suite, before/after/beforeEach/afterEach, getTestContext, and the skip/todo/only twins are the lowered node:test members", ts.isIdentifier(expr.expression) ? lowerer.resolveValueSymbol(expr.expression) : undefined);
269
488
  }
270
489
  return null; // unreachable — noLowering throws
271
490
  }
491
+ /** getTestContext(): the context of the test, suite or hook running in
492
+ * the current async context, or undefined outside one (module top level,
493
+ * and code reached only through timer, immediate, nextTick and
494
+ * queueMicrotask callbacks). */
495
+ function lowerGetTestContext(lowerer, expr, loc) {
496
+ if (expr.arguments.nodes.length > 0) {
497
+ lowerer.noLowering(`getTestContext with ${expr.arguments.nodes.length} arguments`, expr, "the supported form is getTestContext()");
498
+ }
499
+ const declared = lowerer.mapTypeOf(lowerer.typeOf(expr));
500
+ const missing = declared ? lowerer.wrappedUndefined(declared, loc) : null;
501
+ if (!declared || !missing) {
502
+ lowerer.noLowering("getTestContext() of this type", expr, "getTestContext() lowers as TestContext | SuiteContext | undefined");
503
+ }
504
+ return {
505
+ kind: "ternary",
506
+ cond: { kind: "libCall", fn: "test.hasContext", args: [], type: BOOL, loc },
507
+ then: lowerer.coerceToExpected({ kind: "libCall", fn: "test.context", args: [], type: TESTCTX_T, loc }, declared),
508
+ else_: missing,
509
+ type: declared,
510
+ loc,
511
+ };
512
+ }
272
513
  /** The callable-module form: `test(...)` where the callee identifier IS
273
514
  * the node:test module binding — a default import (`import test from
274
515
  * "node:test"`) or the CJS `const test = require('node:test')` twin
@@ -281,20 +522,166 @@ export function lowerTestDirectCall(lowerer, expr, loc) {
281
522
  if (lowerer.builtinNamespaceModuleOf(callee) !== "test")
282
523
  return null;
283
524
  const calleeSym = lowerer.checker.getSymbolAtLocation(callee);
284
- const decl = calleeSym ? lowerer.checker.declarationsOf(calleeSym)[0] : undefined;
525
+ const decl = calleeSym ? calleeSym.declarations[0] : undefined;
285
526
  if (decl && ts.isNamespaceImport(decl)) {
286
527
  lowerer.unsupported("SC1013", expr, "calling a module namespace object (Node throws TypeError there — " +
287
528
  'use the default import: import test from "node:test")');
288
529
  }
289
530
  return lowerRegistration(lowerer, expr, "test(...)", loc, 0, null);
290
531
  }
532
+ /** t.assert.snapshot(value[, options]) and t.assert.fileSnapshot(value,
533
+ * path[, options]), Node's SnapshotManager assertions: the value runs
534
+ * through options.serializers, by default Node's JSON.stringify(value,
535
+ * null, 2), and String() of the result is compared with
536
+ * assert.strictEqual against the snapshot that scr_test.c reads from
537
+ * "<entry file>.snapshot" or `path`, or records in update mode. A throw
538
+ * while serializing becomes Node's ERR_INVALID_STATE. */
539
+ function lowerSnapshotAssert(lowerer, call, member, testCtx) {
540
+ const loc = locOf(call);
541
+ const what = `t.assert.${member}`;
542
+ const t = lowerer.lowerExpr(testCtx);
543
+ const stmts = [];
544
+ const slot = (name, type, init) => {
545
+ const local = lowerer.declareHiddenLocal(name, type);
546
+ stmts.push({ kind: "varDecl", localId: local.id, init, loc });
547
+ return varRef(local.id, type, loc);
548
+ };
549
+ // Arguments evaluate in order before the assertion serializes, as in Node.
550
+ const valueNode = call.arguments.nodes[0];
551
+ const input = slot("%snapshotInput", DYN, valueNode ? lowerer.lowerExprExpecting(valueNode, DYN) : dynUndefinedExpr(loc));
552
+ let path = null;
553
+ if (member === "fileSnapshot") {
554
+ const pathNode = call.arguments.nodes[1];
555
+ path = slot("%snapshotPath", STRING, pathNode ? lowerer.lowerExprExpecting(pathNode, STRING) : strLit("", loc));
556
+ }
557
+ const serializers = snapshotSerializers(lowerer, call.arguments.nodes[member === "snapshot" ? 1 : 2], what)?.map((fn) => slot("%snapshotSerializer", DYN, fn)) ?? null;
558
+ if (call.arguments.nodes.length > (member === "snapshot" ? 2 : 3)) {
559
+ lowerer.noLowering(`${what} with ${call.arguments.nodes.length} arguments`, call);
560
+ }
561
+ const text = {
562
+ kind: "toString",
563
+ operand: {
564
+ kind: "libCall",
565
+ fn: "test.snapshotSerialize",
566
+ args: [
567
+ input,
568
+ serializers === null
569
+ ? dynUndefinedExpr(loc)
570
+ : { kind: "dynArrLit", elems: serializers, type: DYN, loc },
571
+ ],
572
+ type: DYN,
573
+ loc,
574
+ },
575
+ type: STRING,
576
+ loc,
577
+ };
578
+ const actual = slot("%snapshotActual", STRING, member === "snapshot"
579
+ ? { kind: "libCall", fn: "test.snapshotValue", args: [text], type: STRING, loc }
580
+ : text);
581
+ const expected = member === "snapshot"
582
+ ? {
583
+ kind: "libCall",
584
+ fn: "test.ctxSnapshot",
585
+ args: [t, actual, strLit(`${lowerer.entry.fileName}.snapshot`, loc)],
586
+ type: STRING,
587
+ loc,
588
+ }
589
+ : { kind: "libCall", fn: "test.fileSnapshot", args: [actual, path], type: STRING, loc };
590
+ const no = { kind: "boolLit", value: false, type: BOOL, loc };
591
+ return {
592
+ kind: "seqExpr",
593
+ stmts,
594
+ result: {
595
+ kind: "libCall",
596
+ fn: "assert.eqStr",
597
+ args: [actual, expected, no, no, strLit("", loc), no],
598
+ type: VOID,
599
+ loc,
600
+ },
601
+ type: VOID,
602
+ loc,
603
+ };
604
+ }
605
+ /** The serializer functions of a snapshot options object literal, as
606
+ * checked-dynamic values in order; null without a serializers option.
607
+ * Options that are not an object literal, a serializers list that is not
608
+ * an array literal, and other options fence. */
609
+ function snapshotSerializers(lowerer, options, what) {
610
+ if (options === undefined)
611
+ return null;
612
+ const hint = "pass the options as an object literal: { serializers: [(value) => ...] }";
613
+ if (!ts.isObjectLiteralExpression(options)) {
614
+ lowerer.noLowering(`${what} options that are not an object literal`, options, hint);
615
+ }
616
+ let fns = null;
617
+ for (const prop of options.properties.nodes) {
618
+ const name = prop.name && ts.isIdentifier(prop.name) ? prop.name.text : null;
619
+ if (name !== "serializers" ||
620
+ !(ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop))) {
621
+ lowerer.noLowering(`${what} options other than serializers`, prop, hint);
622
+ }
623
+ const list = ts.isPropertyAssignment(prop) ? prop.initializer : prop.name;
624
+ if (!ts.isArrayLiteralExpression(list)) {
625
+ lowerer.noLowering(`${what} with a non-literal serializers list`, list, hint);
626
+ }
627
+ fns = list.elements.nodes.map((el) => {
628
+ if (ts.isSpreadElement(el))
629
+ lowerer.noLowering(`${what} with a spread serializer`, el, hint);
630
+ return lowerer.lowerExprExpecting(el, DYN);
631
+ });
632
+ }
633
+ return fns;
634
+ }
635
+ /** `mock.timers` (tracker null) or `t.mock.timers` on a TestContext;
636
+ * null for other expressions. */
637
+ function mockTimersReceiver(lowerer, expr) {
638
+ if (!ts.isPropertyAccessExpression(expr) ||
639
+ expr.questionDotToken ||
640
+ expr.name.text !== "timers" ||
641
+ !lowerer.isStdlibMember(expr)) {
642
+ return null;
643
+ }
644
+ const owner = expr.expression;
645
+ if (ts.isIdentifier(owner)) {
646
+ const bi = lowerer.builtinImportOf(owner);
647
+ return bi && bi.module === "test" && bi.member === "mock"
648
+ ? { what: "mock.timers", tracker: () => null }
649
+ : null;
650
+ }
651
+ if (ts.isPropertyAccessExpression(owner) &&
652
+ !owner.questionDotToken &&
653
+ owner.name.text === "mock" &&
654
+ lowerer.mapTypeOf(lowerer.typeOf(owner.expression))?.kind === "testCtx" &&
655
+ lowerer.isStdlibMember(owner)) {
656
+ const testCtx = owner.expression;
657
+ return { what: "t.mock.timers", tracker: () => lowerer.lowerExpr(testCtx) };
658
+ }
659
+ return null;
660
+ }
661
+ /** `mock.timers[Symbol.dispose]()` and its t.mock twin: an alias of
662
+ * reset(), as in Node. Null for other element-access calls. */
663
+ export function lowerMockTimersElementCall(lowerer, call, access) {
664
+ if (call.questionDotToken || access.questionDotToken)
665
+ return null;
666
+ const timers = mockTimersReceiver(lowerer, access.expression);
667
+ if (!timers)
668
+ return null;
669
+ const key = access.argumentExpression;
670
+ const isDispose = ts.isPropertyAccessExpression(key) &&
671
+ key.name.text === "dispose" &&
672
+ lowerer.stdlibGlobalMember(key, "Symbol") === "dispose";
673
+ if (!isDispose) {
674
+ lowerer.noLowering(`${timers.what} computed member calls`, call, "call timers[Symbol.dispose]()");
675
+ }
676
+ return lowerMockTimersCall(lowerer, call, "reset", timers.what, timers.tracker, null);
677
+ }
291
678
  /** Method-position node:test calls — one entry in lower-calls.ts's
292
679
  * intrinsic chain: skip/todo/only twins on NAMED import bindings
293
680
  * (`test.skip(...)` where `test` came from `{ test }`), the TestContext
294
681
  * surface (t.test/t.skip/t.todo/t.diagnostic), and t.assert.* (delegated
295
682
  * to the assert spoke). Null for other receivers. */
296
683
  export function lowerTestMethodCall(lowerer, call, access) {
297
- if (call.questionDotToken || access.questionDotToken)
684
+ if (call.questionDotToken || (access.questionDotToken && !lowerer.chainHandled.has(access)))
298
685
  return null;
299
686
  const loc = locOf(call);
300
687
  const member = access.name.text;
@@ -315,22 +702,32 @@ export function lowerTestMethodCall(lowerer, call, access) {
315
702
  (member === "skip" || member === "todo" || member === "only")) {
316
703
  return lowerSuite(lowerer, call, `${bi.member}.${member}(...)`, loc, member === "skip" ? 1 : member === "todo" ? 2 : 3);
317
704
  }
318
- if (bi.member === "mock" && member === "fn")
319
- return lowerMockFn(lowerer, call, "mock.fn");
320
705
  if (bi.member === "mock") {
321
- lowerer.noLowering(`test.mock.${member}`, call, "mock.fn and t.mock.fn are the supported mock members", lowerer.checker.getSymbolAtLocation(access.name));
706
+ const served = lowerMockTrackerMember(lowerer, call, member, "mock", () => null);
707
+ if (served)
708
+ return served;
709
+ lowerer.noLowering(`test.mock.${member}`, call, MOCK_HINT, lowerer.checker.getSymbolAtLocation(access.name));
322
710
  }
323
711
  lowerer.noLowering(`test.${bi.member}.${member}`, call, "skip, todo, and only are the supported method twins", lowerer.checker.getSymbolAtLocation(access.name));
324
712
  }
325
713
  }
326
- // t.mock.fn(...): the test's mock tracker.
327
- if (member === "fn" &&
328
- ts.isPropertyAccessExpression(access.expression) &&
714
+ // t.mock.fn(...) and the other tracker members: the test's mock tracker.
715
+ if (ts.isPropertyAccessExpression(access.expression) &&
329
716
  !access.expression.questionDotToken &&
330
717
  access.expression.name.text === "mock" &&
331
718
  lowerer.mapTypeOf(lowerer.typeOf(access.expression.expression))?.kind === "testCtx" &&
332
719
  lowerer.isStdlibMember(access.expression)) {
333
- return lowerMockFn(lowerer, call, "t.mock.fn");
720
+ const testCtx = access.expression.expression;
721
+ const served = lowerMockTrackerMember(lowerer, call, member, "t.mock", () => lowerer.lowerExpr(testCtx));
722
+ if (served)
723
+ return served;
724
+ }
725
+ // mock.timers.enable(...) and the other MockTimers members, on the
726
+ // module's `mock` and on t.mock.
727
+ const timers = mockTimersReceiver(lowerer, access.expression);
728
+ if (timers) {
729
+ const sym = lowerer.checker.getSymbolAtLocation(access.name) ?? null;
730
+ return lowerMockTimersCall(lowerer, call, member, timers.what, timers.tracker, sym);
334
731
  }
335
732
  // t.assert.strictEqual(...) — the callee's receiver is `t.assert` on a
336
733
  // TestContext: Node's t.assert methods ARE the assert functions (bound
@@ -341,7 +738,9 @@ export function lowerTestMethodCall(lowerer, call, access) {
341
738
  access.expression.name.text === "assert" &&
342
739
  lowerer.mapTypeOf(lowerer.typeOf(access.expression.expression))?.kind === "testCtx" &&
343
740
  lowerer.isStdlibMember(access.expression)) {
344
- const served = lowerer.lowerAssertModuleCall(call, { module: "assert", member }, loc);
741
+ const served = member === "snapshot" || member === "fileSnapshot"
742
+ ? lowerSnapshotAssert(lowerer, call, member, access.expression.expression)
743
+ : lowerer.lowerAssertModuleCall(call, { module: "assert", member }, loc);
345
744
  // Each t.assert call counts against the test's plan (t.plan).
346
745
  if (served)
347
746
  return {
@@ -370,7 +769,7 @@ export function lowerTestMethodCall(lowerer, call, access) {
370
769
  return null;
371
770
  if (!lowerer.isStdlibMember(access))
372
771
  return null;
373
- const args = call.arguments;
772
+ const args = call.arguments.nodes;
374
773
  if (member === "test") {
375
774
  const receiver = lowerer.lowerExpr(access.expression);
376
775
  return lowerRegistration(lowerer, call, "t.test(...)", loc, 0, receiver);
@@ -398,7 +797,8 @@ export function lowerTestMethodCall(lowerer, call, access) {
398
797
  lowerer.noLowering(`t.${member} with ${args.length} arguments`, call, "the supported form is one zero-parameter function (hook options have no lowering)");
399
798
  }
400
799
  const receiver = lowerer.lowerExpr(access.expression);
401
- const { cb, flags } = lowerBodyArg(lowerer, args[0], what, false);
800
+ // The hook may take the test's context.
801
+ const { cb, flags } = lowerBodyArg(lowerer, args[0], what, true);
402
802
  return {
403
803
  kind: "libCall",
404
804
  fn: "test.ctxHook",
@@ -427,11 +827,77 @@ export function lowerTestMethodCall(lowerer, call, access) {
427
827
  }
428
828
  lowerer.noLowering(`TestContext.${member}`, call, TESTCTX_SURFACE_HINT, lowerer.checker.getSymbolAtLocation(access.name));
429
829
  }
830
+ /** t.filePath (the entry file, as Node's entryFile), t.attempt (0: tests
831
+ * run once), t.passed, t.workerId (Number(NODE_TEST_WORKER_ID) ||
832
+ * undefined) and t.tags ([]: the tags option has no lowering), each
833
+ * coerced to the member's declared type. */
834
+ function lowerTestCtxValue(lowerer, expr, member) {
835
+ const loc = locOf(expr);
836
+ const receiver = lowerer.lowerExpr(expr.expression);
837
+ const declared = lowerer.mapTypeOf(lowerer.typeOf(expr));
838
+ if (!declared) {
839
+ lowerer.noLowering(`TestContext.${member} of this type`, expr, TESTCTX_SURFACE_HINT);
840
+ }
841
+ const after = (value) => ({
842
+ kind: "seqExpr",
843
+ stmts: [{ kind: "exprStmt", expr: receiver, loc }],
844
+ result: lowerer.coerceToExpected(value, declared),
845
+ type: declared,
846
+ loc,
847
+ });
848
+ switch (member) {
849
+ case "filePath":
850
+ return after(strLit(lowerer.entry.fileName, loc));
851
+ case "attempt":
852
+ return after(numLit(0, loc));
853
+ case "tags":
854
+ return after({ kind: "arrayLit", elems: [], type: declared, loc });
855
+ case "passed":
856
+ return lowerer.coerceToExpected({ kind: "libCall", fn: "test.ctxPassed", args: [receiver], type: BOOL, loc }, declared);
857
+ case "workerId": {
858
+ const id = lowerer.declareHiddenLocal("%workerId", F64);
859
+ const missing = lowerer.wrappedUndefined(declared, loc);
860
+ if (!missing)
861
+ lowerer.noLowering("TestContext.workerId of this type", expr, TESTCTX_SURFACE_HINT);
862
+ return {
863
+ kind: "seqExpr",
864
+ stmts: [
865
+ { kind: "exprStmt", expr: receiver, loc },
866
+ {
867
+ kind: "varDecl",
868
+ localId: id.id,
869
+ init: { kind: "libCall", fn: "test.workerId", args: [], type: F64, loc },
870
+ loc,
871
+ },
872
+ ],
873
+ result: {
874
+ kind: "ternary",
875
+ cond: {
876
+ kind: "bin",
877
+ op: "!==",
878
+ left: varRef(id.id, F64, loc),
879
+ right: numLit(0, loc),
880
+ type: BOOL,
881
+ loc,
882
+ },
883
+ then: lowerer.coerceToExpected(varRef(id.id, F64, loc), declared),
884
+ else_: missing,
885
+ type: declared,
886
+ loc,
887
+ },
888
+ type: declared,
889
+ loc,
890
+ };
891
+ }
892
+ }
893
+ }
430
894
  /** `t.name` as a VALUE — one entry in lower-exprs' property chain. Null
431
895
  * for other receivers/members (the chain keeps trying); unlowered
432
896
  * TestContext members fence member-qualified. */
433
897
  export function lowerTestCtxProperty(lowerer, expr) {
434
- if (expr.questionDotToken)
898
+ // `getTestContext()?.name`: the optional-chain step re-enters here with
899
+ // the receiver narrowed.
900
+ if (expr.questionDotToken && !lowerer.chainHandled.has(expr))
435
901
  return null;
436
902
  const mockCalls = lowerMockContextProperty(lowerer, expr);
437
903
  if (mockCalls)
@@ -451,7 +917,15 @@ export function lowerTestCtxProperty(lowerer, expr) {
451
917
  loc,
452
918
  };
453
919
  }
454
- if (expr.name.text === "assert")
920
+ const member = expr.name.text;
921
+ if (member === "filePath" ||
922
+ member === "attempt" ||
923
+ member === "passed" ||
924
+ member === "workerId" ||
925
+ member === "tags") {
926
+ return lowerTestCtxValue(lowerer, expr, member);
927
+ }
928
+ if (member === "assert")
455
929
  return null; // claimed by the call path
456
930
  lowerer.noLowering(`TestContext.${expr.name.text}`, expr, TESTCTX_SURFACE_HINT, lowerer.checker.getSymbolAtLocation(expr.name));
457
931
  }