@scriptc/compiler 0.3.6 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1358) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +717 -55
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +20 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +9 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/link-plan-core.d.ts +2 -0
  16. package/dist/backend/link-plan-core.js +2 -0
  17. package/dist/backend/link-plan-core.js.map +1 -1
  18. package/dist/backend/link-plan.d.ts +1 -0
  19. package/dist/backend/link-plan.js +1 -0
  20. package/dist/backend/link-plan.js.map +1 -1
  21. package/dist/backend/llvm/alloc.d.ts +41 -4
  22. package/dist/backend/llvm/alloc.js +138 -7
  23. package/dist/backend/llvm/alloc.js.map +1 -1
  24. package/dist/backend/llvm/alloc.test.js +30 -1
  25. package/dist/backend/llvm/alloc.test.js.map +1 -1
  26. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  27. package/dist/backend/llvm/array-search.js +3 -1
  28. package/dist/backend/llvm/array-search.js.map +1 -1
  29. package/dist/backend/llvm/array-search.test.js +1 -1
  30. package/dist/backend/llvm/blocks.d.ts +8 -0
  31. package/dist/backend/llvm/blocks.js +43 -1
  32. package/dist/backend/llvm/blocks.js.map +1 -1
  33. package/dist/backend/llvm/blocks.test.js +22 -1
  34. package/dist/backend/llvm/blocks.test.js.map +1 -1
  35. package/dist/backend/llvm/byte-numbers.js +15 -5
  36. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  37. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  38. package/dist/backend/llvm/bytes-alias.js +20 -0
  39. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  40. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  41. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  42. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  43. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  44. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  45. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  46. package/dist/backend/llvm/call-lifetimes.js +50 -1
  47. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  48. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  49. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  50. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  51. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  52. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  53. package/dist/backend/llvm/classes.d.ts +38 -1
  54. package/dist/backend/llvm/classes.js +185 -35
  55. package/dist/backend/llvm/classes.js.map +1 -1
  56. package/dist/backend/llvm/classes.test.js +79 -17
  57. package/dist/backend/llvm/classes.test.js.map +1 -1
  58. package/dist/backend/llvm/common.d.ts +21 -3
  59. package/dist/backend/llvm/common.js +51 -3
  60. package/dist/backend/llvm/common.js.map +1 -1
  61. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  62. package/dist/backend/llvm/constant-callbacks.js +55 -12
  63. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  64. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  65. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  66. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  67. package/dist/backend/llvm/counted-loops.js +37 -0
  68. package/dist/backend/llvm/counted-loops.js.map +1 -1
  69. package/dist/backend/llvm/dense-array-access.d.ts +15 -4
  70. package/dist/backend/llvm/dense-array-access.js +125 -44
  71. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  72. package/dist/backend/llvm/dense-array-access.test.js +63 -3
  73. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  74. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  75. package/dist/backend/llvm/dense-array-loops.js +162 -0
  76. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  77. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  78. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  79. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  80. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  81. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  82. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  83. package/dist/backend/llvm/dyn.d.ts +37 -4
  84. package/dist/backend/llvm/dyn.js +354 -183
  85. package/dist/backend/llvm/dyn.js.map +1 -1
  86. package/dist/backend/llvm/emit-function.d.ts +64 -0
  87. package/dist/backend/llvm/emit-function.js +1193 -0
  88. package/dist/backend/llvm/emit-function.js.map +1 -0
  89. package/dist/backend/llvm/emit-module.d.ts +24 -0
  90. package/dist/backend/llvm/emit-module.js +1557 -0
  91. package/dist/backend/llvm/emit-module.js.map +1 -0
  92. package/dist/backend/llvm/emit-statements.d.ts +59 -0
  93. package/dist/backend/llvm/emit-statements.js +2041 -0
  94. package/dist/backend/llvm/emit-statements.js.map +1 -0
  95. package/dist/backend/llvm/emitter.d.ts +566 -291
  96. package/dist/backend/llvm/emitter.js +728 -4671
  97. package/dist/backend/llvm/emitter.js.map +1 -1
  98. package/dist/backend/llvm/emitter.test.js +57 -3
  99. package/dist/backend/llvm/emitter.test.js.map +1 -1
  100. package/dist/backend/llvm/expr-async.js +73 -46
  101. package/dist/backend/llvm/expr-async.js.map +1 -1
  102. package/dist/backend/llvm/expr-async.test.js +1 -1
  103. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  104. package/dist/backend/llvm/expr-bytes.js +76 -29
  105. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  106. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  107. package/dist/backend/llvm/expr-callbacks.js +48 -11
  108. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  109. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  110. package/dist/backend/llvm/expr-calls.js +87 -56
  111. package/dist/backend/llvm/expr-calls.js.map +1 -1
  112. package/dist/backend/llvm/expr-calls.test.js +1 -1
  113. package/dist/backend/llvm/expr-containers.js +45 -24
  114. package/dist/backend/llvm/expr-containers.js.map +1 -1
  115. package/dist/backend/llvm/expr-control.js +16 -16
  116. package/dist/backend/llvm/expr-control.js.map +1 -1
  117. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  118. package/dist/backend/llvm/expr-dynamic.js +113 -66
  119. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  120. package/dist/backend/llvm/expr-primitives.js +124 -28
  121. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  122. package/dist/backend/llvm/expr-primitives.test.js +57 -2
  123. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  124. package/dist/backend/llvm/expr-records.d.ts +1 -1
  125. package/dist/backend/llvm/expr-records.js +32 -11
  126. package/dist/backend/llvm/expr-records.js.map +1 -1
  127. package/dist/backend/llvm/expr-stream-bridges.js +65 -27
  128. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  129. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  130. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  131. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  132. package/dist/backend/llvm/int32-abi.test.js +2 -2
  133. package/dist/backend/llvm/integer-clones.js +3 -3
  134. package/dist/backend/llvm/integer-clones.js.map +1 -1
  135. package/dist/backend/llvm/integer-clones.test.js +3 -3
  136. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  137. package/dist/backend/llvm/integer-remainder.js +156 -22
  138. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  139. package/dist/backend/llvm/intern-tables.test.js +1 -1
  140. package/dist/backend/llvm/js-ic.d.ts +18 -0
  141. package/dist/backend/llvm/js-ic.js +712 -0
  142. package/dist/backend/llvm/js-ic.js.map +1 -0
  143. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  144. package/dist/backend/llvm/jsval-encoding.js +20 -0
  145. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  146. package/dist/backend/llvm/jsval.d.ts +12 -0
  147. package/dist/backend/llvm/jsval.js +616 -0
  148. package/dist/backend/llvm/jsval.js.map +1 -0
  149. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  150. package/dist/backend/llvm/lazy-captures.js +39 -17
  151. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  152. package/dist/backend/llvm/lib-abi.js +1 -1
  153. package/dist/backend/llvm/lib-abi.js.map +1 -1
  154. package/dist/backend/llvm/lib-connect.js +1 -1
  155. package/dist/backend/llvm/lib-connect.js.map +1 -1
  156. package/dist/backend/llvm/lib-datagram.js +14 -8
  157. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  158. package/dist/backend/llvm/lib-dispatch.js +189 -23
  159. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  160. package/dist/backend/llvm/lib-filesystem.js +42 -13
  161. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  162. package/dist/backend/llvm/lib-http2.js +3 -3
  163. package/dist/backend/llvm/lib-http2.js.map +1 -1
  164. package/dist/backend/llvm/lib-lookup.js +2 -2
  165. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  166. package/dist/backend/llvm/lib-network.js +56 -22
  167. package/dist/backend/llvm/lib-network.js.map +1 -1
  168. package/dist/backend/llvm/lib-process.js +94 -53
  169. package/dist/backend/llvm/lib-process.js.map +1 -1
  170. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  171. package/dist/backend/llvm/lib-shared.js +209 -6
  172. package/dist/backend/llvm/lib-shared.js.map +1 -1
  173. package/dist/backend/llvm/lib-stream.js +46 -16
  174. package/dist/backend/llvm/lib-stream.js.map +1 -1
  175. package/dist/backend/llvm/lib-test.js +43 -7
  176. package/dist/backend/llvm/lib-test.js.map +1 -1
  177. package/dist/backend/llvm/lib-tls.js +4 -9
  178. package/dist/backend/llvm/lib-tls.js.map +1 -1
  179. package/dist/backend/llvm/local-array-reads.js +42 -33
  180. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  181. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  182. package/dist/backend/llvm/local-extents.d.ts +19 -0
  183. package/dist/backend/llvm/local-extents.js +169 -0
  184. package/dist/backend/llvm/local-extents.js.map +1 -0
  185. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  186. package/dist/backend/llvm/local-extents.test.js +92 -0
  187. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  188. package/dist/backend/llvm/local-union-storage.js +7 -7
  189. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  190. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  191. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  192. package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
  193. package/dist/backend/llvm/map-number-lookup.js +45 -9
  194. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  195. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  196. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  197. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  198. package/dist/backend/llvm/narrow-guards.js +215 -0
  199. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  200. package/dist/backend/llvm/nullable-unions.d.ts +64 -6
  201. package/dist/backend/llvm/nullable-unions.js +103 -6
  202. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  203. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  204. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  205. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  206. package/dist/backend/llvm/publish.d.ts +7 -0
  207. package/dist/backend/llvm/publish.js +50 -19
  208. package/dist/backend/llvm/publish.js.map +1 -1
  209. package/dist/backend/llvm/publish.test.js +1 -1
  210. package/dist/backend/llvm/receivers.d.ts +31 -0
  211. package/dist/backend/llvm/receivers.js +395 -0
  212. package/dist/backend/llvm/receivers.js.map +1 -0
  213. package/dist/backend/llvm/record-results.d.ts +12 -1
  214. package/dist/backend/llvm/record-results.js +64 -4
  215. package/dist/backend/llvm/record-results.js.map +1 -1
  216. package/dist/backend/llvm/reference-effects.js +9 -0
  217. package/dist/backend/llvm/reference-effects.js.map +1 -1
  218. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  219. package/dist/backend/llvm/reference-writes.js +142 -6
  220. package/dist/backend/llvm/reference-writes.js.map +1 -1
  221. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  222. package/dist/backend/llvm/reference-writes.test.js +88 -0
  223. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  224. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  225. package/dist/backend/llvm/regex-matchers.js +33 -0
  226. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  227. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  228. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  229. package/dist/backend/llvm/regions.d.ts +1 -1
  230. package/dist/backend/llvm/regions.js +10 -7
  231. package/dist/backend/llvm/regions.js.map +1 -1
  232. package/dist/backend/llvm/regions.test.js +8 -2
  233. package/dist/backend/llvm/regions.test.js.map +1 -1
  234. package/dist/backend/llvm/shapes.d.ts +74 -45
  235. package/dist/backend/llvm/shapes.js +289 -28
  236. package/dist/backend/llvm/shapes.js.map +1 -1
  237. package/dist/backend/llvm/shapes.test.js +37 -3
  238. package/dist/backend/llvm/shapes.test.js.map +1 -1
  239. package/dist/backend/llvm/speculative-integers.d.ts +20 -1
  240. package/dist/backend/llvm/speculative-integers.js +94 -6
  241. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  242. package/dist/backend/llvm/speculative-integers.test.js +55 -1
  243. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  244. package/dist/backend/llvm/split-loops.js +2 -2
  245. package/dist/backend/llvm/split-loops.js.map +1 -1
  246. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  247. package/dist/backend/llvm/stack-objects.js +133 -10
  248. package/dist/backend/llvm/stack-objects.js.map +1 -1
  249. package/dist/backend/llvm/stack-objects.test.js +55 -1
  250. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  251. package/dist/backend/llvm/stack-unions.test.js +1 -1
  252. package/dist/backend/llvm/string-construction.test.js +1 -1
  253. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  254. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  255. package/dist/backend/llvm/string-reads.d.ts +1 -1
  256. package/dist/backend/llvm/string-reads.js +4 -4
  257. package/dist/backend/llvm/string-reads.js.map +1 -1
  258. package/dist/backend/llvm/string-slices.d.ts +25 -0
  259. package/dist/backend/llvm/string-slices.js +207 -1
  260. package/dist/backend/llvm/string-slices.js.map +1 -1
  261. package/dist/backend/llvm/string-slices.test.js +139 -2
  262. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  263. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  264. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  265. package/dist/backend/llvm/thread-slots.js +142 -0
  266. package/dist/backend/llvm/thread-slots.js.map +1 -0
  267. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  268. package/dist/backend/llvm/thread-slots.test.js +111 -0
  269. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  270. package/dist/backend/llvm/union-repr.d.ts +7 -7
  271. package/dist/backend/llvm/union-repr.js +18 -2
  272. package/dist/backend/llvm/union-repr.js.map +1 -1
  273. package/dist/backend/llvm/union-retype.test.js +17 -3
  274. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  275. package/dist/backend/llvm/walkers.d.ts +2 -2
  276. package/dist/backend/llvm/walkers.js +51 -26
  277. package/dist/backend/llvm/walkers.js.map +1 -1
  278. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  279. package/dist/backend/llvm/wasm-modules.js +66 -0
  280. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  281. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  282. package/dist/backend/llvm/wrapping-sums.js +11 -3
  283. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  284. package/dist/backend/mangle.d.ts +12 -0
  285. package/dist/backend/mangle.js +18 -0
  286. package/dist/backend/mangle.js.map +1 -1
  287. package/dist/backend/may-throw.d.ts +3 -0
  288. package/dist/backend/may-throw.js +4 -2
  289. package/dist/backend/may-throw.js.map +1 -1
  290. package/dist/backend/may-throw.test.js +1 -1
  291. package/dist/backend/native/contracts.d.ts +57 -0
  292. package/dist/backend/native/executable.js +211 -139
  293. package/dist/backend/native/executable.js.map +1 -1
  294. package/dist/backend/native/library.js +2 -0
  295. package/dist/backend/native/library.js.map +1 -1
  296. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  297. package/dist/backend/native/runtime-inputs.js +1 -0
  298. package/dist/backend/native/runtime-inputs.js.map +1 -1
  299. package/dist/backend/native-codegen.d.ts +6 -0
  300. package/dist/backend/native-codegen.js +19 -0
  301. package/dist/backend/native-codegen.js.map +1 -1
  302. package/dist/backend/native-codegen.test.js +27 -0
  303. package/dist/backend/native-codegen.test.js.map +1 -1
  304. package/dist/backend/native-link-info-core.d.ts +48 -0
  305. package/dist/backend/native-link-info-core.js.map +1 -1
  306. package/dist/backend/native-profile.d.ts +32 -0
  307. package/dist/backend/native-profile.js +39 -0
  308. package/dist/backend/native-profile.js.map +1 -0
  309. package/dist/backend/native-profile.test.d.ts +1 -0
  310. package/dist/backend/native-profile.test.js +58 -0
  311. package/dist/backend/native-profile.test.js.map +1 -0
  312. package/dist/backend/native-tools.d.ts +14 -0
  313. package/dist/backend/native-tools.js +13 -0
  314. package/dist/backend/native-tools.js.map +1 -1
  315. package/dist/backend/publication.test.js +1 -1
  316. package/dist/backend/runtime-abi.d.ts +2 -2
  317. package/dist/backend/runtime-abi.js +2 -2
  318. package/dist/backend/runtime-pack-core.d.ts +13 -1
  319. package/dist/backend/runtime-pack-core.js +14 -1
  320. package/dist/backend/runtime-pack-core.js.map +1 -1
  321. package/dist/backend/runtime-pack-native.js +1 -1
  322. package/dist/backend/runtime-pack-native.js.map +1 -1
  323. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  324. package/dist/backend/runtime-pack-native.test.js +31 -0
  325. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  326. package/dist/backend/runtime-pack-targets.test.js +9 -1
  327. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  328. package/dist/backend/runtime-pack.test.js +9 -1
  329. package/dist/backend/runtime-pack.test.js.map +1 -1
  330. package/dist/backend/stack-observations.d.ts +22 -0
  331. package/dist/backend/stack-observations.js +382 -0
  332. package/dist/backend/stack-observations.js.map +1 -0
  333. package/dist/backend/stack-observations.test.d.ts +1 -0
  334. package/dist/backend/stack-observations.test.js +233 -0
  335. package/dist/backend/stack-observations.test.js.map +1 -0
  336. package/dist/backend/target-diagnostics.js +15 -0
  337. package/dist/backend/target-diagnostics.js.map +1 -1
  338. package/dist/backend/target-diagnostics.test.js +1 -1
  339. package/dist/backend/warm-cache.js +8 -0
  340. package/dist/backend/warm-cache.js.map +1 -1
  341. package/dist/backend/young-nursery.d.ts +7 -0
  342. package/dist/backend/young-nursery.js +10 -0
  343. package/dist/backend/young-nursery.js.map +1 -0
  344. package/dist/cli/command.js +106 -4
  345. package/dist/cli/command.js.map +1 -1
  346. package/dist/cli/host.d.ts +3 -0
  347. package/dist/cli/output-options.d.ts +2 -0
  348. package/dist/cli/output-options.js +9 -0
  349. package/dist/cli/output-options.js.map +1 -1
  350. package/dist/cli/usage.d.ts +21 -1
  351. package/dist/cli/usage.js +43 -1
  352. package/dist/cli/usage.js.map +1 -1
  353. package/dist/compat/fetch-profile.js +10 -1
  354. package/dist/compat/fetch-profile.js.map +1 -1
  355. package/dist/compile-types.d.ts +22 -0
  356. package/dist/contracts/check.js +25 -8
  357. package/dist/contracts/check.js.map +1 -1
  358. package/dist/contracts/int32-elements.d.ts +115 -0
  359. package/dist/contracts/int32-elements.js +1179 -0
  360. package/dist/contracts/int32-elements.js.map +1 -0
  361. package/dist/coverage/report.d.ts +16 -0
  362. package/dist/coverage/report.js +182 -1
  363. package/dist/coverage/report.js.map +1 -1
  364. package/dist/coverage/surface-manifest.js +16 -3
  365. package/dist/coverage/surface-manifest.js.map +1 -1
  366. package/dist/coverage/verdict-cache.d.ts +2 -0
  367. package/dist/coverage/verdict-cache.js +12 -0
  368. package/dist/coverage/verdict-cache.js.map +1 -1
  369. package/dist/coverage/verdict-cache.test.js +2 -1
  370. package/dist/coverage/verdict-cache.test.js.map +1 -1
  371. package/dist/diagnostics/diagnostic.d.ts +10 -6
  372. package/dist/diagnostics/diagnostic.js +29 -21
  373. package/dist/diagnostics/diagnostic.js.map +1 -1
  374. package/dist/diagnostics/envelope.d.ts +39 -2
  375. package/dist/diagnostics/envelope.js.map +1 -1
  376. package/dist/diagnostics/render.d.ts +7 -0
  377. package/dist/diagnostics/render.js +50 -13
  378. package/dist/diagnostics/render.js.map +1 -1
  379. package/dist/diagnostics/render.test.d.ts +1 -0
  380. package/dist/diagnostics/render.test.js +49 -0
  381. package/dist/diagnostics/render.test.js.map +1 -0
  382. package/dist/executable/executable-cache.d.ts +27 -0
  383. package/dist/executable/executable-cache.js +19 -1
  384. package/dist/executable/executable-cache.js.map +1 -1
  385. package/dist/executable/executable-cache.test.js +12 -1
  386. package/dist/executable/executable-cache.test.js.map +1 -1
  387. package/dist/executable/prepare.js +2 -1
  388. package/dist/executable/prepare.js.map +1 -1
  389. package/dist/frontend/analysis.js +6 -1
  390. package/dist/frontend/analysis.js.map +1 -1
  391. package/dist/frontend/arguments-usage.d.ts +8 -0
  392. package/dist/frontend/arguments-usage.js +98 -0
  393. package/dist/frontend/arguments-usage.js.map +1 -1
  394. package/dist/frontend/arguments-usage.test.d.ts +1 -0
  395. package/dist/frontend/arguments-usage.test.js +32 -0
  396. package/dist/frontend/arguments-usage.test.js.map +1 -0
  397. package/dist/frontend/builtin-modules.d.ts +16 -2
  398. package/dist/frontend/builtin-modules.js +40 -7
  399. package/dist/frontend/builtin-modules.js.map +1 -1
  400. package/dist/frontend/builtin-package-aliases.d.ts +24 -0
  401. package/dist/frontend/builtin-package-aliases.js +133 -0
  402. package/dist/frontend/builtin-package-aliases.js.map +1 -0
  403. package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
  404. package/dist/frontend/builtin-package-aliases.test.js +48 -0
  405. package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
  406. package/dist/frontend/cjs-syntax.js +52 -51
  407. package/dist/frontend/cjs-syntax.js.map +1 -1
  408. package/dist/frontend/contract-types.d.ts +3 -0
  409. package/dist/frontend/contract-types.js +36 -7
  410. package/dist/frontend/contract-types.js.map +1 -1
  411. package/dist/frontend/dts-paths.d.ts +4 -0
  412. package/dist/frontend/dts-paths.js +9 -1
  413. package/dist/frontend/dts-paths.js.map +1 -1
  414. package/dist/frontend/experimental-import.d.ts +5 -1
  415. package/dist/frontend/experimental-import.js +26 -7
  416. package/dist/frontend/experimental-import.js.map +1 -1
  417. package/dist/frontend/fork-target.js +20 -22
  418. package/dist/frontend/fork-target.js.map +1 -1
  419. package/dist/frontend/fork-target.test.js +2 -1
  420. package/dist/frontend/fork-target.test.js.map +1 -1
  421. package/dist/frontend/function-completion.js +6 -6
  422. package/dist/frontend/function-completion.js.map +1 -1
  423. package/dist/frontend/helper-tokens.js +15 -3
  424. package/dist/frontend/helper-tokens.js.map +1 -1
  425. package/dist/frontend/helper-tokens.test.js +7 -1
  426. package/dist/frontend/helper-tokens.test.js.map +1 -1
  427. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  428. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  429. package/dist/frontend/input-tracker.d.ts +3 -0
  430. package/dist/frontend/input-tracker.js +32 -3
  431. package/dist/frontend/input-tracker.js.map +1 -1
  432. package/dist/frontend/lib-contract.js +36 -32
  433. package/dist/frontend/lib-contract.js.map +1 -1
  434. package/dist/frontend/lib-exports.js +3 -3
  435. package/dist/frontend/lib-exports.js.map +1 -1
  436. package/dist/frontend/lowering/array-values.d.ts +8 -3
  437. package/dist/frontend/lowering/array-values.js +60 -11
  438. package/dist/frontend/lowering/array-values.js.map +1 -1
  439. package/dist/frontend/lowering/assert-instances.js +4 -4
  440. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  441. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  442. package/dist/frontend/lowering/assertion-identity.js +70 -0
  443. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  444. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  445. package/dist/frontend/lowering/assertion-members.js +185 -0
  446. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  447. package/dist/frontend/lowering/binding-analysis.js +27 -20
  448. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  449. package/dist/frontend/lowering/builtin-calls.js +63 -5
  450. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  451. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  452. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  453. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  454. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  455. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  457. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  459. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/blob.js +8 -6
  461. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  462. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +31 -0
  463. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +205 -0
  464. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  465. package/dist/frontend/lowering/builtins/callable-aliases.js +17 -5
  466. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  468. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  470. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  471. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  473. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  475. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  476. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  478. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  479. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
  481. package/dist/frontend/lowering/builtins/compression.js +107 -44
  482. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  483. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  484. package/dist/frontend/lowering/builtins/constants.js +28 -7
  485. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  486. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  487. package/dist/frontend/lowering/builtins/crypto.js +215 -38
  488. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  489. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  490. package/dist/frontend/lowering/builtins/dates.js +92 -16
  491. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  492. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  493. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  494. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  495. package/dist/frontend/lowering/builtins/ecdh.d.ts +10 -0
  496. package/dist/frontend/lowering/builtins/ecdh.js +208 -0
  497. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
  498. package/dist/frontend/lowering/builtins/environment.js +3 -3
  499. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  500. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  501. package/dist/frontend/lowering/builtins/errors.js +169 -3
  502. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  503. package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
  504. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  505. package/dist/frontend/lowering/builtins/filesystem.js +77 -77
  506. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  508. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  510. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  512. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  513. package/dist/frontend/lowering/builtins/json.js +284 -24
  514. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  515. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  516. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  517. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  518. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  519. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/module-calls.js +55 -44
  521. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  522. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  523. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  524. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  526. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  527. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  529. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  530. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  532. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  533. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  534. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  535. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  536. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  537. package/dist/frontend/lowering/builtins/performance.js +259 -8
  538. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  539. package/dist/frontend/lowering/builtins/process.d.ts +41 -1
  540. package/dist/frontend/lowering/builtins/process.js +505 -99
  541. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  542. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  543. package/dist/frontend/lowering/builtins/promises.js +326 -43
  544. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  545. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +40 -0
  546. package/dist/frontend/lowering/builtins/promisify-callback.js +338 -0
  547. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  548. package/dist/frontend/lowering/builtins/properties.js +37 -1
  549. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  550. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  551. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  552. package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
  553. package/dist/frontend/lowering/builtins/readline.js +136 -39
  554. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  555. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  556. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  557. package/dist/frontend/lowering/builtins/reflection.js +42 -14
  558. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  559. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  560. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  561. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  562. package/dist/frontend/lowering/builtins/strings.js +101 -12
  563. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  564. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  565. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  566. package/dist/frontend/lowering/builtins/timers.js +79 -30
  567. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  568. package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
  569. package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
  570. package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
  571. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  572. package/dist/frontend/lowering/builtins/url.js +120 -17
  573. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  574. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  575. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  576. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  577. package/dist/frontend/lowering/builtins/v8.js +105 -0
  578. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  579. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  580. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  581. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  582. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  583. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  584. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  585. package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
  586. package/dist/frontend/lowering/builtins/workers.js +193 -8
  587. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  588. package/dist/frontend/lowering/call-arguments.js +69 -14
  589. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  590. package/dist/frontend/lowering/call-signatures.d.ts +23 -1
  591. package/dist/frontend/lowering/call-signatures.js +379 -55
  592. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  593. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  594. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  595. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  596. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  597. package/dist/frontend/lowering/cjs-exports-object.js +561 -0
  598. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  599. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  600. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  601. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  602. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  603. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  604. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  605. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  606. package/dist/frontend/lowering/class-attributes.js +378 -0
  607. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  608. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  609. package/dist/frontend/lowering/class-callbacks.js +21 -10
  610. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  611. package/dist/frontend/lowering/class-construction.js +49 -4
  612. package/dist/frontend/lowering/class-construction.js.map +1 -1
  613. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  614. package/dist/frontend/lowering/class-descriptors.js +8 -8
  615. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  616. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  617. package/dist/frontend/lowering/class-dynamic-dispatch.js +1124 -90
  618. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  619. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  620. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  621. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  622. package/dist/frontend/lowering/class-iterables.js +31 -0
  623. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  624. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  625. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  626. package/dist/frontend/lowering/class-method-values.js +56 -10
  627. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  628. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  629. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  630. package/dist/frontend/lowering/class-protocols.d.ts +10 -0
  631. package/dist/frontend/lowering/class-protocols.js +76 -45
  632. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  633. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  634. package/dist/frontend/lowering/class-prototypes.js +86 -19
  635. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  636. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  637. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  638. package/dist/frontend/lowering/class-static-data.js +2 -2
  639. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  640. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  641. package/dist/frontend/lowering/class-to-primitive.js +264 -0
  642. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  643. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  644. package/dist/frontend/lowering/class-unions.js +102 -1
  645. package/dist/frontend/lowering/class-unions.js.map +1 -1
  646. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  647. package/dist/frontend/lowering/code-generation.js +127 -0
  648. package/dist/frontend/lowering/code-generation.js.map +1 -0
  649. package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
  650. package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
  651. package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
  652. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  653. package/dist/frontend/lowering/coercions/function-adapters.js +239 -68
  654. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  655. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  656. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  657. package/dist/frontend/lowering/coercions/structural.js +35 -3
  658. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  659. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  660. package/dist/frontend/lowering/coercions/unions.js +57 -1
  661. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  662. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  663. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  664. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  665. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  666. package/dist/frontend/lowering/construction-escapes.js +8 -8
  667. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  668. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  669. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  670. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  671. package/dist/frontend/lowering/constructor-returns.js +477 -0
  672. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  673. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  674. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  675. package/dist/frontend/lowering/containers/array-callbacks.d.ts +17 -0
  676. package/dist/frontend/lowering/containers/array-callbacks.js +287 -118
  677. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  678. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  679. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  680. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  681. package/dist/frontend/lowering/containers/array-construction.js +58 -13
  682. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  683. package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
  684. package/dist/frontend/lowering/containers/array-from-async.js +159 -14
  685. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  686. package/dist/frontend/lowering/containers/array-methods.js +94 -77
  687. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  688. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  689. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  690. package/dist/frontend/lowering/containers/bytes.d.ts +9 -0
  691. package/dist/frontend/lowering/containers/bytes.js +649 -113
  692. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  693. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  694. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  695. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  696. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  697. package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
  698. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  699. package/dist/frontend/lowering/containers/collection-methods.js +126 -28
  700. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  701. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  702. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  703. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  704. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  705. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  706. package/dist/frontend/lowering/containers/for-of.js +19 -19
  707. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  708. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  709. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  710. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  711. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  712. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  713. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  714. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  715. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  716. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  717. package/dist/frontend/lowering/containers/string-and-regexp.js +455 -30
  718. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  719. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  720. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  721. package/dist/frontend/lowering/cycle-initialization.d.ts +30 -10
  722. package/dist/frontend/lowering/cycle-initialization.js +191 -35
  723. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  724. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  725. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  726. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  727. package/dist/frontend/lowering/devirtualize.js +27 -7
  728. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  729. package/dist/frontend/lowering/divergences.d.ts +0 -5
  730. package/dist/frontend/lowering/divergences.js +62 -125
  731. package/dist/frontend/lowering/divergences.js.map +1 -1
  732. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  733. package/dist/frontend/lowering/dyn-streams.js +257 -0
  734. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  735. package/dist/frontend/lowering/error-methods.js +4 -1
  736. package/dist/frontend/lowering/error-methods.js.map +1 -1
  737. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  738. package/dist/frontend/lowering/error-name-order.js +93 -0
  739. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  740. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  741. package/dist/frontend/lowering/expressions/array-literals.js +723 -0
  742. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  743. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  744. package/dist/frontend/lowering/expressions/binary.js +2557 -0
  745. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  746. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  747. package/dist/frontend/lowering/expressions/element-access.js +1804 -0
  748. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  749. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  750. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  751. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  752. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  753. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  754. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  755. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  756. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  757. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +52 -0
  758. package/dist/frontend/lowering/expressions/keyed-field-targets.js +307 -0
  759. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  760. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  761. package/dist/frontend/lowering/expressions/narrowing.js +1337 -0
  762. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  763. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  764. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  765. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  766. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  767. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  768. package/dist/frontend/lowering/expressions/object-literals.js +301 -86
  769. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  770. package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -2
  771. package/dist/frontend/lowering/expressions/optional-chains.js +103 -17
  772. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  773. package/dist/frontend/lowering/expressions/property-access.d.ts +115 -0
  774. package/dist/frontend/lowering/expressions/property-access.js +3787 -0
  775. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  776. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  777. package/dist/frontend/lowering/expressions/relational.js +1724 -0
  778. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  779. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  780. package/dist/frontend/lowering/expressions/typeof.js +551 -0
  781. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  782. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  783. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  784. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  785. package/dist/frontend/lowering/expressions/updates.js +780 -0
  786. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  787. package/dist/frontend/lowering/function-context.d.ts +10 -0
  788. package/dist/frontend/lowering/function-context.js +11 -1
  789. package/dist/frontend/lowering/function-context.js.map +1 -1
  790. package/dist/frontend/lowering/function-returns.js +52 -28
  791. package/dist/frontend/lowering/function-returns.js.map +1 -1
  792. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  793. package/dist/frontend/lowering/general-streams.js +108 -0
  794. package/dist/frontend/lowering/general-streams.js.map +1 -0
  795. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  796. package/dist/frontend/lowering/generator-delegation.js +191 -1
  797. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  798. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  799. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  800. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  801. package/dist/frontend/lowering/generic-functions.d.ts +43 -0
  802. package/dist/frontend/lowering/generic-functions.js +593 -118
  803. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  804. package/dist/frontend/lowering/handle-properties.d.ts +24 -0
  805. package/dist/frontend/lowering/handle-properties.js +281 -0
  806. package/dist/frontend/lowering/handle-properties.js.map +1 -0
  807. package/dist/frontend/lowering/import-meta.js +2 -2
  808. package/dist/frontend/lowering/import-meta.js.map +1 -1
  809. package/dist/frontend/lowering/intern-tables.js +10 -9
  810. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  811. package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
  812. package/dist/frontend/lowering/iterable-spelling.js +38 -0
  813. package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
  814. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  815. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  816. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  817. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  818. package/dist/frontend/lowering/js-class-fields.js +170 -0
  819. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  820. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  821. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  822. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  823. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  824. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  825. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  826. package/dist/frontend/lowering/json-require.d.ts +22 -0
  827. package/dist/frontend/lowering/json-require.js +131 -0
  828. package/dist/frontend/lowering/json-require.js.map +1 -0
  829. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  830. package/dist/frontend/lowering/key-order-witness.js +641 -0
  831. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  832. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  833. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  834. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  835. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  836. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  837. package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
  838. package/dist/frontend/lowering/lower-array-sort.js +117 -21
  839. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  840. package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
  841. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  842. package/dist/frontend/lowering/lower-assert.js +61 -60
  843. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  844. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  845. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  846. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  847. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  848. package/dist/frontend/lowering/lower-builtin-values.js +33 -3
  849. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  850. package/dist/frontend/lowering/lower-calls.js +1404 -448
  851. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  852. package/dist/frontend/lowering/lower-classes.d.ts +54 -3
  853. package/dist/frontend/lowering/lower-classes.js +1529 -472
  854. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  855. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  856. package/dist/frontend/lowering/lower-comptime.js +111 -13
  857. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  858. package/dist/frontend/lowering/lower-console.js +13 -11
  859. package/dist/frontend/lowering/lower-console.js.map +1 -1
  860. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  861. package/dist/frontend/lowering/lower-dgram.js +241 -21
  862. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  863. package/dist/frontend/lowering/lower-enums.js +113 -14
  864. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  865. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  866. package/dist/frontend/lowering/lower-event-emitter.js +258 -70
  867. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  868. package/dist/frontend/lowering/lower-event-target.js +2 -2
  869. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  870. package/dist/frontend/lowering/lower-expando.js +17 -13
  871. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  872. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  873. package/dist/frontend/lowering/lower-exprs.js +1509 -12486
  874. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  875. package/dist/frontend/lowering/lower-functions.js +72 -22
  876. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  877. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  878. package/dist/frontend/lowering/lower-generators.js +39 -20
  879. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  880. package/dist/frontend/lowering/lower-global-value.js +5 -1
  881. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  882. package/dist/frontend/lowering/lower-inspect.js +900 -107
  883. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  884. package/dist/frontend/lowering/lower-mixins.js +23 -20
  885. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  886. package/dist/frontend/lowering/lower-mock.d.ts +8 -1
  887. package/dist/frontend/lowering/lower-mock.js +185 -18
  888. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  889. package/dist/frontend/lowering/lower-modules.d.ts +11 -3
  890. package/dist/frontend/lowering/lower-modules.js +445 -94
  891. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  892. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  893. package/dist/frontend/lowering/lower-namespaces.js +65 -33
  894. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  895. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  896. package/dist/frontend/lowering/lower-node-module.js +147 -14
  897. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  898. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  899. package/dist/frontend/lowering/lower-server.js +514 -101
  900. package/dist/frontend/lowering/lower-server.js.map +1 -1
  901. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  902. package/dist/frontend/lowering/lower-stdlib.js +179 -118
  903. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  904. package/dist/frontend/lowering/lower-stmts.d.ts +30 -7
  905. package/dist/frontend/lowering/lower-stmts.js +1950 -433
  906. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  907. package/dist/frontend/lowering/lower-stream.d.ts +3 -0
  908. package/dist/frontend/lowering/lower-stream.js +398 -56
  909. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  910. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  911. package/dist/frontend/lowering/lower-test.js +437 -62
  912. package/dist/frontend/lowering/lower-test.js.map +1 -1
  913. package/dist/frontend/lowering/lower-timers.js +96 -32
  914. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  915. package/dist/frontend/lowering/lower-url.js +1 -1
  916. package/dist/frontend/lowering/lower-url.js.map +1 -1
  917. package/dist/frontend/lowering/lowerer.d.ts +424 -27
  918. package/dist/frontend/lowering/lowerer.js +2062 -310
  919. package/dist/frontend/lowering/lowerer.js.map +1 -1
  920. package/dist/frontend/lowering/lowerer.test.js +10 -4
  921. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  922. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  923. package/dist/frontend/lowering/maybe-promise.js +249 -0
  924. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  925. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  926. package/dist/frontend/lowering/module-member-this.js +262 -0
  927. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  928. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  929. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  930. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  931. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  932. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  933. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  934. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  935. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  936. package/dist/frontend/lowering/native-ffi.js +11 -11
  937. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  938. package/dist/frontend/lowering/object-factory-new.js +6 -8
  939. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  940. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  941. package/dist/frontend/lowering/private-brands.js +265 -0
  942. package/dist/frontend/lowering/private-brands.js.map +1 -0
  943. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  944. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  945. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  946. package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
  947. package/dist/frontend/lowering/rebindable-functions.js +54 -0
  948. package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
  949. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  950. package/dist/frontend/lowering/require-initialization.js +246 -0
  951. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  952. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  953. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  954. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  955. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  956. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  957. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  958. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  959. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  960. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  961. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  962. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  963. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  964. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  965. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  966. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  967. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  968. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  969. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  970. package/dist/frontend/lowering/split-consumers.js +4 -4
  971. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  972. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  973. package/dist/frontend/lowering/static-function-names.js +212 -0
  974. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  975. package/dist/frontend/lowering/static-this.js +6 -6
  976. package/dist/frontend/lowering/static-this.js.map +1 -1
  977. package/dist/frontend/lowering/static-typeof.d.ts +26 -0
  978. package/dist/frontend/lowering/static-typeof.js +133 -0
  979. package/dist/frontend/lowering/static-typeof.js.map +1 -0
  980. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  981. package/dist/frontend/lowering/strict-mode.js +31 -0
  982. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  983. package/dist/frontend/lowering/string-index-bounds.js +13 -12
  984. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  985. package/dist/frontend/lowering/string-index.d.ts +12 -0
  986. package/dist/frontend/lowering/string-index.js +72 -1
  987. package/dist/frontend/lowering/string-index.js.map +1 -1
  988. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  989. package/dist/frontend/lowering/surfaces.js +282 -45
  990. package/dist/frontend/lowering/surfaces.js.map +1 -1
  991. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  992. package/dist/frontend/lowering/symbol-fields.js +204 -36
  993. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  994. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  995. package/dist/frontend/lowering/symbol-methods.js +24 -6
  996. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  997. package/dist/frontend/lowering/thenables.d.ts +16 -0
  998. package/dist/frontend/lowering/thenables.js +124 -0
  999. package/dist/frontend/lowering/thenables.js.map +1 -0
  1000. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  1001. package/dist/frontend/lowering/thread-slots.js +208 -0
  1002. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  1003. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  1004. package/dist/frontend/lowering/typed-arguments.js +472 -0
  1005. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  1006. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  1007. package/dist/frontend/lowering/union-retag.js +27 -0
  1008. package/dist/frontend/lowering/union-retag.js.map +1 -1
  1009. package/dist/frontend/lowering/union-retag.test.js +24 -1
  1010. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  1011. package/dist/frontend/lowering/var-hoisting.js +6 -6
  1012. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  1013. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  1014. package/dist/frontend/mock-shapes.js +13 -6
  1015. package/dist/frontend/mock-shapes.js.map +1 -1
  1016. package/dist/frontend/module-source-candidates.js +1 -1
  1017. package/dist/frontend/module-source-candidates.js.map +1 -1
  1018. package/dist/frontend/module-source-candidates.test.js +2 -1
  1019. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  1020. package/dist/frontend/module-syntax.js +8 -8
  1021. package/dist/frontend/module-syntax.js.map +1 -1
  1022. package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
  1023. package/dist/frontend/npm-static-builtin-aliases.js +65 -0
  1024. package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
  1025. package/dist/frontend/npm-static-bundled-chunks.d.ts +58 -0
  1026. package/dist/frontend/npm-static-bundled-chunks.js +981 -0
  1027. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  1028. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  1029. package/dist/frontend/npm-static-bundled-chunks.test.js +399 -0
  1030. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  1031. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  1032. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  1033. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  1034. package/dist/frontend/npm-static-bundled-esm.js +988 -0
  1035. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  1036. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  1037. package/dist/frontend/npm-static-bundled-esm.test.js +336 -0
  1038. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  1039. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  1040. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  1041. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  1042. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  1043. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  1044. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  1045. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  1046. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  1047. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  1048. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  1049. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  1050. package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
  1051. package/dist/frontend/npm-static-enum-iife.js +280 -0
  1052. package/dist/frontend/npm-static-enum-iife.js.map +1 -0
  1053. package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
  1054. package/dist/frontend/npm-static-enum-iife.test.js +116 -0
  1055. package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
  1056. package/dist/frontend/npm-static-prune.js +36 -24
  1057. package/dist/frontend/npm-static-prune.js.map +1 -1
  1058. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  1059. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  1060. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  1061. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  1062. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  1063. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  1064. package/dist/frontend/npm-static-subtyping.js +7 -9
  1065. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  1066. package/dist/frontend/npm-static.d.ts +25 -1
  1067. package/dist/frontend/npm-static.js +212 -16
  1068. package/dist/frontend/npm-static.js.map +1 -1
  1069. package/dist/frontend/npm-static.test.js +22 -1
  1070. package/dist/frontend/npm-static.test.js.map +1 -1
  1071. package/dist/frontend/npm.js +13 -0
  1072. package/dist/frontend/npm.js.map +1 -1
  1073. package/dist/frontend/package-shims.d.ts +47 -0
  1074. package/dist/frontend/package-shims.js +300 -0
  1075. package/dist/frontend/package-shims.js.map +1 -0
  1076. package/dist/frontend/pipeline.js +230 -26
  1077. package/dist/frontend/pipeline.js.map +1 -1
  1078. package/dist/frontend/pipeline.test.js +22 -1
  1079. package/dist/frontend/pipeline.test.js.map +1 -1
  1080. package/dist/frontend/program-analysis.d.ts +6 -1
  1081. package/dist/frontend/program-analysis.js +7 -0
  1082. package/dist/frontend/program-analysis.js.map +1 -1
  1083. package/dist/frontend/program.d.ts +100 -2
  1084. package/dist/frontend/program.js +1627 -262
  1085. package/dist/frontend/program.js.map +1 -1
  1086. package/dist/frontend/program.test.js +76 -6
  1087. package/dist/frontend/program.test.js.map +1 -1
  1088. package/dist/frontend/resolve.js +49 -2
  1089. package/dist/frontend/resolve.js.map +1 -1
  1090. package/dist/frontend/resolve.test.js +49 -0
  1091. package/dist/frontend/resolve.test.js.map +1 -1
  1092. package/dist/frontend/services.d.ts +26 -1
  1093. package/dist/frontend/services.js +59 -3
  1094. package/dist/frontend/services.js.map +1 -1
  1095. package/dist/frontend/services.test.js +2 -1
  1096. package/dist/frontend/services.test.js.map +1 -1
  1097. package/dist/frontend/threads-import.js +1 -1
  1098. package/dist/frontend/threads-import.js.map +1 -1
  1099. package/dist/frontend/tier-analysis.d.ts +71 -0
  1100. package/dist/frontend/tier-analysis.js +522 -0
  1101. package/dist/frontend/tier-analysis.js.map +1 -0
  1102. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1103. package/dist/frontend/ts7/api-conformance.js +7 -0
  1104. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1105. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1106. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1107. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1108. package/dist/frontend/ts7/ast-node.js +64 -18
  1109. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1110. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1111. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1112. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1113. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1114. package/dist/frontend/ts7/ast.d.ts +1 -0
  1115. package/dist/frontend/ts7/ast.js +3 -2
  1116. package/dist/frontend/ts7/ast.js.map +1 -1
  1117. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1118. package/dist/frontend/ts7/checker-backend.js +88 -0
  1119. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1120. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1121. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1122. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1123. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1124. package/dist/frontend/ts7/checker-cache.js +0 -6
  1125. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1126. package/dist/frontend/ts7/checker.d.ts +18 -11
  1127. package/dist/frontend/ts7/checker.js +42 -55
  1128. package/dist/frontend/ts7/checker.js.map +1 -1
  1129. package/dist/frontend/ts7/checker.test.js +10 -7
  1130. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1131. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1132. package/dist/frontend/ts7/diagnostic.js +22 -0
  1133. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1134. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1135. package/dist/frontend/ts7/node-functions.js +18 -0
  1136. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1137. package/dist/frontend/ts7/program-host.d.ts +10 -5
  1138. package/dist/frontend/ts7/program-host.js +19 -0
  1139. package/dist/frontend/ts7/program-host.js.map +1 -1
  1140. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1141. package/dist/frontend/ts7/rpc-api.js +8 -1
  1142. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1143. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1144. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1145. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1146. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1147. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1148. package/dist/frontend/ts7/semantic-model.d.ts +57 -24
  1149. package/dist/frontend/ts7/semantic-model.js +114 -16
  1150. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1151. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1152. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1153. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1154. package/dist/frontend/ts7/semantic-types.js +1 -1
  1155. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1156. package/dist/frontend/ts7/session.d.ts +30 -15
  1157. package/dist/frontend/ts7/session.js +8 -5
  1158. package/dist/frontend/ts7/session.js.map +1 -1
  1159. package/dist/frontend/ts7/session.test.js +9 -5
  1160. package/dist/frontend/ts7/session.test.js.map +1 -1
  1161. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1162. package/dist/frontend/ts7/source-parser.js +24 -3
  1163. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1164. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1165. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1166. package/dist/frontend/type-mapper.d.ts +122 -2
  1167. package/dist/frontend/type-mapper.js +2735 -723
  1168. package/dist/frontend/type-mapper.js.map +1 -1
  1169. package/dist/frontend/type-only-imports.d.ts +28 -0
  1170. package/dist/frontend/type-only-imports.js +122 -0
  1171. package/dist/frontend/type-only-imports.js.map +1 -0
  1172. package/dist/frontend/worker-target.js +8 -8
  1173. package/dist/frontend/worker-target.js.map +1 -1
  1174. package/dist/index.d.ts +4 -1
  1175. package/dist/index.js +87 -8
  1176. package/dist/index.js.map +1 -1
  1177. package/dist/ir/analysis.js +4 -2
  1178. package/dist/ir/analysis.js.map +1 -1
  1179. package/dist/ir/api.d.ts +1 -1
  1180. package/dist/ir/api.js +1 -1
  1181. package/dist/ir/api.js.map +1 -1
  1182. package/dist/ir/array-length-stability.d.ts +31 -0
  1183. package/dist/ir/array-length-stability.js +249 -0
  1184. package/dist/ir/array-length-stability.js.map +1 -0
  1185. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1186. package/dist/ir/array-length-stability.test.js +134 -0
  1187. package/dist/ir/array-length-stability.test.js.map +1 -0
  1188. package/dist/ir/build.d.ts +2 -2
  1189. package/dist/ir/build.js +1 -1
  1190. package/dist/ir/build.js.map +1 -1
  1191. package/dist/ir/builtin-effects.js +116 -0
  1192. package/dist/ir/builtin-effects.js.map +1 -1
  1193. package/dist/ir/builtin-signatures.d.ts +1 -1
  1194. package/dist/ir/builtin-signatures.js +540 -29
  1195. package/dist/ir/builtin-signatures.js.map +1 -1
  1196. package/dist/ir/byte-numbers.js +3 -0
  1197. package/dist/ir/byte-numbers.js.map +1 -1
  1198. package/dist/ir/callback-specialization.d.ts +37 -0
  1199. package/dist/ir/callback-specialization.js +459 -0
  1200. package/dist/ir/callback-specialization.js.map +1 -0
  1201. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1202. package/dist/ir/callback-specialization.test.js +208 -0
  1203. package/dist/ir/callback-specialization.test.js.map +1 -0
  1204. package/dist/ir/capture-values.d.ts +0 -1
  1205. package/dist/ir/capture-values.js +51 -40
  1206. package/dist/ir/capture-values.js.map +1 -1
  1207. package/dist/ir/constant-globals.test.js +1 -1
  1208. package/dist/ir/constant-tables.test.js +1 -1
  1209. package/dist/ir/field-values.test.js +1 -1
  1210. package/dist/ir/final-fields.test.js +1 -1
  1211. package/dist/ir/function-references.test.js +9 -1
  1212. package/dist/ir/function-references.test.js.map +1 -1
  1213. package/dist/ir/init-only-globals.test.js +1 -1
  1214. package/dist/ir/initializer-bindings.test.js +1 -1
  1215. package/dist/ir/int32-slots.d.ts +14 -0
  1216. package/dist/ir/int32-slots.js +97 -14
  1217. package/dist/ir/int32-slots.js.map +1 -1
  1218. package/dist/ir/int32-slots.test.js +1 -1
  1219. package/dist/ir/integer-loop-facts.d.ts +7 -0
  1220. package/dist/ir/integer-loop-facts.js +103 -17
  1221. package/dist/ir/integer-loop-facts.js.map +1 -1
  1222. package/dist/ir/integer-loops.d.ts +1 -1
  1223. package/dist/ir/integer-loops.js +39 -9
  1224. package/dist/ir/integer-loops.js.map +1 -1
  1225. package/dist/ir/integer-loops.test.js +104 -0
  1226. package/dist/ir/integer-loops.test.js.map +1 -1
  1227. package/dist/ir/integer-ranges.d.ts +13 -1
  1228. package/dist/ir/integer-ranges.js +125 -26
  1229. package/dist/ir/integer-ranges.js.map +1 -1
  1230. package/dist/ir/integer-ranges.test.js +273 -2
  1231. package/dist/ir/integer-ranges.test.js.map +1 -1
  1232. package/dist/ir/intrinsic-signatures.js +6 -0
  1233. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1234. package/dist/ir/ir.d.ts +221 -58
  1235. package/dist/ir/ir.js +127 -12
  1236. package/dist/ir/ir.js.map +1 -1
  1237. package/dist/ir/ir.test.js +10 -0
  1238. package/dist/ir/ir.test.js.map +1 -1
  1239. package/dist/ir/js-ic.d.ts +52 -0
  1240. package/dist/ir/js-ic.js +199 -0
  1241. package/dist/ir/js-ic.js.map +1 -0
  1242. package/dist/ir/js-ic.test.d.ts +1 -0
  1243. package/dist/ir/js-ic.test.js +148 -0
  1244. package/dist/ir/js-ic.test.js.map +1 -0
  1245. package/dist/ir/jsval.d.ts +8 -0
  1246. package/dist/ir/jsval.js +399 -0
  1247. package/dist/ir/jsval.js.map +1 -0
  1248. package/dist/ir/jsval.test.d.ts +1 -0
  1249. package/dist/ir/jsval.test.js +239 -0
  1250. package/dist/ir/jsval.test.js.map +1 -0
  1251. package/dist/ir/runtime-features.d.ts +183 -33
  1252. package/dist/ir/runtime-features.js +795 -422
  1253. package/dist/ir/runtime-features.js.map +1 -1
  1254. package/dist/ir/scalar-records.test.js +1 -1
  1255. package/dist/ir/self-captures.d.ts +33 -0
  1256. package/dist/ir/self-captures.js +245 -0
  1257. package/dist/ir/self-captures.js.map +1 -0
  1258. package/dist/ir/self-captures.test.d.ts +1 -0
  1259. package/dist/ir/self-captures.test.js +135 -0
  1260. package/dist/ir/self-captures.test.js.map +1 -0
  1261. package/dist/ir/serialize.d.ts +1 -1
  1262. package/dist/ir/serialize.js +7 -4
  1263. package/dist/ir/serialize.js.map +1 -1
  1264. package/dist/ir/tiers.d.ts +26 -0
  1265. package/dist/ir/tiers.js +101 -0
  1266. package/dist/ir/tiers.js.map +1 -0
  1267. package/dist/ir/tiers.test.d.ts +1 -0
  1268. package/dist/ir/tiers.test.js +140 -0
  1269. package/dist/ir/tiers.test.js.map +1 -0
  1270. package/dist/ir/traverse.js +201 -150
  1271. package/dist/ir/traverse.js.map +1 -1
  1272. package/dist/ir/traverse.test.js +33 -30
  1273. package/dist/ir/traverse.test.js.map +1 -1
  1274. package/dist/ir/unshare.js +65 -3
  1275. package/dist/ir/unshare.js.map +1 -1
  1276. package/dist/ir/unshare.test.js +1 -1
  1277. package/dist/ir/validate.js +196 -76
  1278. package/dist/ir/validate.js.map +1 -1
  1279. package/dist/ir/validate.test.js +41 -11
  1280. package/dist/ir/validate.test.js.map +1 -1
  1281. package/dist/library/fence-eval.test.js +1 -1
  1282. package/dist/library/int-infer.test.js +4 -4
  1283. package/dist/library/ir-policy.js +14 -0
  1284. package/dist/library/ir-policy.js.map +1 -1
  1285. package/dist/library/library-cache.d.ts +1 -0
  1286. package/dist/library/library-cache.js.map +1 -1
  1287. package/dist/library/library-cache.test.js +5 -5
  1288. package/dist/library/library-profile.d.ts +4 -4
  1289. package/dist/library/library-profile.js +35 -7
  1290. package/dist/library/library-profile.js.map +1 -1
  1291. package/dist/library/prepare.js +13 -1
  1292. package/dist/library/prepare.js.map +1 -1
  1293. package/dist/native/cli.js +22 -0
  1294. package/dist/native/cli.js.map +1 -1
  1295. package/dist/native/compiler.js +35 -6
  1296. package/dist/native/compiler.js.map +1 -1
  1297. package/dist/native/compiler.test.js +2 -2
  1298. package/dist/native/executable-cache.js +3 -0
  1299. package/dist/native/executable-cache.js.map +1 -1
  1300. package/dist/native/prepare.js +10 -0
  1301. package/dist/native/prepare.js.map +1 -1
  1302. package/dist/native/sanitizer.test.js +19 -0
  1303. package/dist/native/sanitizer.test.js.map +1 -1
  1304. package/dist/native/toolchain.d.ts +2 -0
  1305. package/dist/native/toolchain.js +10 -1
  1306. package/dist/native/toolchain.js.map +1 -1
  1307. package/dist/native/toolchain.test.js +39 -1
  1308. package/dist/native/toolchain.test.js.map +1 -1
  1309. package/dist/startup-cache.d.ts +1 -0
  1310. package/dist/startup-cache.js +1 -0
  1311. package/dist/startup-cache.js.map +1 -1
  1312. package/dist/wasm/base64.d.ts +5 -0
  1313. package/dist/wasm/base64.js +62 -0
  1314. package/dist/wasm/base64.js.map +1 -0
  1315. package/dist/wasm/binary.d.ts +36 -0
  1316. package/dist/wasm/binary.js +1976 -0
  1317. package/dist/wasm/binary.js.map +1 -0
  1318. package/dist/wasm/binary.test.d.ts +1 -0
  1319. package/dist/wasm/binary.test.js +190 -0
  1320. package/dist/wasm/binary.test.js.map +1 -0
  1321. package/dist/wasm/discover.d.ts +38 -0
  1322. package/dist/wasm/discover.js +377 -0
  1323. package/dist/wasm/discover.js.map +1 -0
  1324. package/dist/wasm/discover.test.d.ts +1 -0
  1325. package/dist/wasm/discover.test.js +24 -0
  1326. package/dist/wasm/discover.test.js.map +1 -0
  1327. package/dist/wasm/module.d.ts +151 -0
  1328. package/dist/wasm/module.js +575 -0
  1329. package/dist/wasm/module.js.map +1 -0
  1330. package/dist/wasm/translate.d.ts +48 -0
  1331. package/dist/wasm/translate.js +2129 -0
  1332. package/dist/wasm/translate.js.map +1 -0
  1333. package/dist/wasm/translate.test.d.ts +1 -0
  1334. package/dist/wasm/translate.test.js +207 -0
  1335. package/dist/wasm/translate.test.js.map +1 -0
  1336. package/package.json +22 -20
  1337. package/shims/fs-extra/core/api.ts +1192 -0
  1338. package/shims/fs-extra/index.ts +9 -0
  1339. package/shims/undici/core/agent.ts +163 -0
  1340. package/shims/undici/core/api.ts +93 -0
  1341. package/shims/undici/core/client.ts +1304 -0
  1342. package/shims/undici/core/connector.ts +157 -0
  1343. package/shims/undici/core/diagnostics-types.ts +68 -0
  1344. package/shims/undici/core/diagnostics.ts +16 -0
  1345. package/shims/undici/core/dispatcher.ts +574 -0
  1346. package/shims/undici/core/errors-v5.ts +22 -0
  1347. package/shims/undici/core/errors-v7.ts +25 -0
  1348. package/shims/undici/core/errors.ts +255 -0
  1349. package/shims/undici/core/fetch.ts +635 -0
  1350. package/shims/undici/core/pool.ts +280 -0
  1351. package/shims/undici/core/readable.ts +268 -0
  1352. package/shims/undici/core/request.ts +313 -0
  1353. package/shims/undici/core/timers.ts +80 -0
  1354. package/shims/undici/core/types.ts +167 -0
  1355. package/shims/undici/core/util.ts +67 -0
  1356. package/shims/undici/v5.ts +119 -0
  1357. package/shims/undici/v7.ts +119 -0
  1358. package/surface-manifest.json +304 -22
@@ -1,3 +1,4 @@
1
+ import { dateJsonType, isDateJsonSource } from "../builtins/dates.js";
1
2
  import { dynUndefinedExpr, numLit, strLit, varRef } from "../../../ir/build.js";
2
3
  import { pathModuleValue } from "../lower-builtin-values.js";
3
4
  import { InternalCompilerError } from "../../../errors.js";
@@ -6,14 +7,14 @@ import { BOOL, DYN, F64, STRING, UNDEFINED_T, VOID, arrayOf, canDynCheckTo, isUn
6
7
  import { isCjsExportTableLiteral, isJsSourceFile, locOf } from "../../program.js";
7
8
  import { NARROW_FIRST } from "../surfaces.js";
8
9
  import { recordShapeMismatchDiag } from "../../../diagnostics/diagnostic.js";
9
- import { PoisonError, neverTaintedJsType } from "../lowerer.js";
10
+ import { PoisonError, jsFuncNameOf, neverTaintedJsType } from "../lowerer.js";
10
11
  import { lowerIndexMergeHelper } from "../containers/indexed-objects.js";
11
12
  import { PERF_ENTRY_MARKER, isGenericCallableMemberType, jsOpenObjectType, } from "../../type-mapper.js";
12
13
  import { isSafeToRepeat } from "./evaluation-safety.js";
13
14
  import { tryLowerExpression } from "./try-lower-expression.js";
14
15
  import { fenceSymbolFieldCopy } from "../symbol-fields.js";
15
16
  import { planUnionRetag } from "../union-retag.js";
16
- import { runtimeOptionalStorageOperand } from "../lower-exprs.js";
17
+ import { jsHoldsDynObject, runtimeOptionalStorageOperand } from "../lower-exprs.js";
17
18
  /** `{ a: 1, b: "x" }` → recordLit. The record type comes from the
18
19
  * contextual type when tsc has one (annotated declarations, arguments,
19
20
  * nested literals) and from the literal's own type otherwise — both intern
@@ -51,7 +52,7 @@ export function foldedStringKeyOf(lowerer, expr) {
51
52
  // fallback (a template the checker DID type as one literal).
52
53
  let out = expr.head.text;
53
54
  let folded = true;
54
- for (const span of expr.templateSpans) {
55
+ for (const span of expr.templateSpans.nodes) {
55
56
  const part = foldedStringKeyOf(lowerer, span.expression);
56
57
  if (part === null) {
57
58
  folded = false;
@@ -146,7 +147,7 @@ function pureKeyExpr(lowerer, expr) {
146
147
  pureKeyExpr(lowerer, expr.whenFalse));
147
148
  }
148
149
  if (ts.isTemplateExpression(expr))
149
- return expr.templateSpans.every((s) => pureKeyExpr(lowerer, s.expression));
150
+ return expr.templateSpans.nodes.every((s) => pureKeyExpr(lowerer, s.expression));
150
151
  return false;
151
152
  }
152
153
  /** A property's field name: identifier/string-literal keys directly,
@@ -165,6 +166,18 @@ function propNameText(lowerer, name) {
165
166
  return String(Number(name.text));
166
167
  return name.text;
167
168
  }
169
+ /** The name an anonymous function or a method takes from its property key
170
+ * (NamedEvaluation): an identifier, string or numeric key, or a computed
171
+ * key that folds to one string. Null for other keys. */
172
+ function propertyFunctionName(lowerer, name) {
173
+ if (ts.isComputedPropertyName(name))
174
+ return literalComputedKey(lowerer, name);
175
+ if (ts.isNumericLiteral(name))
176
+ return String(Number(name.text));
177
+ if (ts.isIdentifier(name) || ts.isStringLiteral(name))
178
+ return name.text;
179
+ return null;
180
+ }
168
181
  /** The runtime-keyed JS object literal (a computed key that doesn't fold):
169
182
  * builds a dyn object member-by-member. Keys evaluate before their values,
170
183
  * properties in source order — JS's object-literal evaluation exactly.
@@ -221,7 +234,7 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
221
234
  : { kind: "libCall", fn: "dyn.assign", args: [acc, chunk], type: DYN, loc };
222
235
  fields = [];
223
236
  };
224
- for (const prop of expr.properties) {
237
+ for (const prop of expr.properties.nodes) {
225
238
  if (ts.isPropertyAssignment(prop) &&
226
239
  !ts.isComputedPropertyName(prop.name) &&
227
240
  prop.name.text === "__proto__") {
@@ -243,7 +256,7 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
243
256
  const builtin = lowerer.builtinNamespaceModuleOf(prop.expression);
244
257
  const raw = builtin === "path" || builtin === "path/posix" || builtin === "path/win32"
245
258
  ? pathModuleValue(lowerer, builtin === "path" ? "path/posix" : builtin, locOf(prop))
246
- : isJsSourceFile(expr.getSourceFile())
259
+ : isJsSourceFile(ts.getSourceFileOfNode(expr))
247
260
  ? lowerer.lowerExprExpecting(prop.expression, DYN)
248
261
  : lowerer.lowerExpr(prop.expression);
249
262
  fenceSymbolFieldCopy(lowerer, prop.expression, raw.type);
@@ -372,10 +385,29 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
372
385
  let v = boxValue
373
386
  ? boxValue(valueExpr, raw)
374
387
  : lowerer.coerceToExpected(raw, DYN);
388
+ // A function that boxes into a property takes its name as Node gives
389
+ // it: a function read by name keeps that name (`{ f }`, `{ k: f }`),
390
+ // and an anonymous function or a method takes the property's name
391
+ // (`{ g: function () {} }`, `{ m() {} }`).
392
+ if (!boxValue &&
393
+ v.kind === "dynFrom" &&
394
+ v.value.type.kind === "func" &&
395
+ v.fnName === undefined) {
396
+ let anonymous = valueExpr;
397
+ while (ts.isParenthesizedExpression(anonymous))
398
+ anonymous = anonymous.expression;
399
+ const name = ts.isMethodDeclaration(prop) ||
400
+ ((ts.isFunctionExpression(anonymous) || ts.isArrowFunction(anonymous)) &&
401
+ !(ts.isFunctionExpression(anonymous) && anonymous.name))
402
+ ? propertyFunctionName(lowerer, prop.name)
403
+ : jsFuncNameOf(valueExpr, lowerer);
404
+ if (name !== null)
405
+ v = { ...v, fnName: name };
406
+ }
375
407
  // A JS object's array-valued properties retain the same source array.
376
408
  // Repeated references must compare equal and mutations remain shared.
377
409
  if (!boxValue &&
378
- isJsSourceFile(prop.getSourceFile()) &&
410
+ isJsSourceFile(ts.getSourceFileOfNode(prop)) &&
379
411
  v.kind === "dynFrom" &&
380
412
  v.value.type.kind === "array") {
381
413
  v = { ...v, liveRef: true };
@@ -442,7 +474,7 @@ function laterSpreadType(lowerer, expr) {
442
474
  * the fallback does not apply (not a JS file, not a lambda, no func slot)
443
475
  * — the caller lowers normally. ICEs (SC9001) never convert. */
444
476
  function fenceClosureProbe(lowerer, node, slotType, attempt) {
445
- if (!isJsSourceFile(node.getSourceFile()))
477
+ if (!isJsSourceFile(ts.getSourceFileOfNode(node)))
446
478
  return null;
447
479
  let inner = node;
448
480
  while (ts.isParenthesizedExpression(inner))
@@ -458,7 +490,7 @@ function fenceClosureProbe(lowerer, node, slotType, attempt) {
458
490
  // admits.
459
491
  const fieldType = slotType !== undefined && slotType.kind === "func"
460
492
  ? slotType
461
- : { kind: "func", params: inner.parameters.map(() => DYN), ret: DYN };
493
+ : { kind: "func", params: inner.parameters.nodes.map(() => DYN), ret: DYN };
462
494
  if (slotType !== undefined && slotType.kind !== "func")
463
495
  return null;
464
496
  const diagsBefore = lowerer.diags.length;
@@ -508,7 +540,7 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
508
540
  return null;
509
541
  const props = [];
510
542
  let hasSpread = false;
511
- for (const p of expr.properties) {
543
+ for (const p of expr.properties.nodes) {
512
544
  if (ts.isPropertyAssignment(p) && !ts.isComputedPropertyName(p.name)) {
513
545
  props.push({ name: propNameText(lowerer, p.name), type: lowerer.typeOf(p.initializer) });
514
546
  }
@@ -529,7 +561,10 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
529
561
  return null;
530
562
  props.length = 0;
531
563
  for (const property of lowerer.checker.getPropertiesOfType(own)) {
532
- props.push({ name: property.name, type: lowerer.checker.getTypeOfSymbol(property) });
564
+ props.push({
565
+ name: ts.symbolName(property),
566
+ type: lowerer.checker.getTypeOfSymbol(property),
567
+ });
533
568
  }
534
569
  }
535
570
  /** Cheap literal discriminants avoid checker traffic for unrelated arms.
@@ -596,6 +631,64 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
596
631
  /** Object spread treats nullish sources as empty. Preserve evaluation once,
597
632
  * then turn `Record<K, V> | undefined` into either that record or a fresh
598
633
  * empty record of the same represented shape. */
634
+ /** `{ ...unknownValue }` into a pure index-signature record (headers
635
+ * forwarded from an untyped parameter): Node copies the source's own
636
+ * enumerable keys in order, and spreads nothing for null, undefined,
637
+ * numbers and booleans. An object source converts through the checked
638
+ * extraction into the target's own shape, which keeps its keys and order
639
+ * and checks each value against the slot type (a value outside it throws
640
+ * the catchable TypeError of every unknown-to-typed conversion). A string
641
+ * source takes the same extraction, which rejects it, rather than
642
+ * silently dropping the characters Node would spread. Null for other
643
+ * sources and targets. */
644
+ function dynIndexSpreadSource(lowerer, source, target, loc) {
645
+ if (source.type.kind !== "dyn" || target.kind !== "record")
646
+ return null;
647
+ const shape = lowerer.shapes.get(target.shapeId);
648
+ if (!shape?.indexValue || shape.fields.length > 0 || shape.tuple)
649
+ return null;
650
+ if (!canDynCheckTo(target, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)))
651
+ return null;
652
+ const local = lowerer.declareHiddenLocal("%dynSpread", DYN);
653
+ const ref = varRef(local.id, DYN, loc);
654
+ const test = (kind) => ({
655
+ kind: "dynTest",
656
+ test: kind,
657
+ value: ref,
658
+ type: BOOL,
659
+ loc,
660
+ });
661
+ const extract = { kind: "dynCheck", value: ref, type: target, loc };
662
+ const empty = { kind: "recordLit", fields: [], type: target, loc };
663
+ return {
664
+ kind: "seqExpr",
665
+ stmts: [{ kind: "varDecl", localId: local.id, init: source, loc }],
666
+ result: {
667
+ kind: "ternary",
668
+ cond: test("nullish"),
669
+ then: empty,
670
+ else_: {
671
+ kind: "ternary",
672
+ cond: {
673
+ kind: "logical",
674
+ op: "||",
675
+ left: test("object"),
676
+ right: test("string"),
677
+ type: BOOL,
678
+ loc,
679
+ },
680
+ then: extract,
681
+ else_: empty,
682
+ type: target,
683
+ loc,
684
+ },
685
+ type: target,
686
+ loc,
687
+ },
688
+ type: target,
689
+ loc,
690
+ };
691
+ }
599
692
  function lowerOptionalIndexSpreadSource(lowerer, source, loc) {
600
693
  if (source.type.kind !== "union")
601
694
  return null;
@@ -647,16 +740,16 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
647
740
  // Unannotated JavaScript accumulator fields have no element contract.
648
741
  // Preserve their checked arrays instead of assigning never[] a numeric ABI.
649
742
  if (!expected &&
650
- isJsSourceFile(expr.getSourceFile()) &&
651
- expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
743
+ isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
744
+ expr.properties.nodes.some((prop) => ts.isPropertyAssignment(prop) &&
652
745
  ((ts.isArrayLiteralExpression(prop.initializer) &&
653
- prop.initializer.elements.length === 0) ||
746
+ prop.initializer.elements.nodes.length === 0) ||
654
747
  neverTaintedJsType(lowerer, prop.initializer, lowerer.typeOf(prop.initializer))))) {
655
748
  return lowerDynObjectLiteral(lowerer, expr);
656
749
  }
657
750
  if (!expected &&
658
- isJsSourceFile(expr.getSourceFile()) &&
659
- expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
751
+ isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
752
+ expr.properties.nodes.some((prop) => ts.isPropertyAssignment(prop) &&
660
753
  lowerer.mapTypeOf(lowerer.typeOf(prop.initializer))?.kind === "array" &&
661
754
  tryLowerExpression(lowerer, prop.initializer)?.type.kind === "dyn")) {
662
755
  return lowerDynObjectLiteral(lowerer, expr);
@@ -665,8 +758,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
665
758
  // documentation names a number. Inferred literal fields must preserve
666
759
  // the represented binding rather than checking it back into that type.
667
760
  if (!expected &&
668
- isJsSourceFile(expr.getSourceFile()) &&
669
- expr.properties.some((prop) => {
761
+ isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
762
+ expr.properties.nodes.some((prop) => {
670
763
  let value = ts.isPropertyAssignment(prop)
671
764
  ? prop.initializer
672
765
  : ts.isShorthandPropertyAssignment(prop)
@@ -674,6 +767,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
674
767
  : null;
675
768
  while (value && ts.isParenthesizedExpression(value))
676
769
  value = value.expression;
770
+ // A nested literal holding such a binding: building it as a static
771
+ // record would copy the binding's object.
772
+ if (value && (ts.isArrayLiteralExpression(value) || ts.isObjectLiteralExpression(value)))
773
+ return jsHoldsDynObject(lowerer, value);
677
774
  if (!value || !ts.isIdentifier(value))
678
775
  return false;
679
776
  const stored = lowerer.peekLocal(value)?.type ?? lowerer.globalOf(value)?.type;
@@ -687,9 +784,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
687
784
  }
688
785
  // JavaScript object methods/accessors carry a live receiver. Keep the
689
786
  // literal in checked native storage instead of erasing its prototype ABI.
690
- if (isJsSourceFile(expr.getSourceFile()) &&
691
- (expr.properties.length === 0 ||
692
- expr.properties.some((prop) => ts.isMethodDeclaration(prop) ||
787
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
788
+ (expr.properties.nodes.length === 0 ||
789
+ expr.properties.nodes.some((prop) => ts.isMethodDeclaration(prop) ||
693
790
  ts.isGetAccessorDeclaration(prop) ||
694
791
  ts.isSetAccessorDeclaration(prop)))) {
695
792
  return lowerDynObjectLiteral(lowerer, expr);
@@ -698,7 +795,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
698
795
  // Module collection already chose checked storage for this JavaScript
699
796
  // binding. Construct in that representation: an intermediate record would
700
797
  // check nested aliases back into inferred shapes and lose their identity.
701
- if (isJsSourceFile(expr.getSourceFile()) &&
798
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
702
799
  ts.isVariableDeclaration(expr.parent) &&
703
800
  expr.parent.initializer === expr &&
704
801
  ts.isIdentifier(expr.parent.name) &&
@@ -708,8 +805,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
708
805
  // A checked spread carries runtime symbol keys and receiver-sensitive
709
806
  // methods absent from its inferred record shape. Copy the real properties.
710
807
  if (!expected &&
711
- isJsSourceFile(expr.getSourceFile()) &&
712
- expr.properties.some((property) => ts.isSpreadAssignment(property) &&
808
+ isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
809
+ expr.properties.nodes.some((property) => ts.isSpreadAssignment(property) &&
713
810
  (lowerer.builtinNamespaceModuleOf(property.expression)?.startsWith("path") ||
714
811
  tryLowerExpression(lowerer, property.expression)?.type.kind === "dyn"))) {
715
812
  return lowerDynObjectLiteral(lowerer, expr);
@@ -724,8 +821,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
724
821
  // test/common's _mustCallInner context), where keys are runtime string
725
822
  // values. TypeScript keeps the record world and its fence: this shape
726
823
  // only arises in checked-dynamic JS.
727
- if (isJsSourceFile(expr.getSourceFile()) &&
728
- expr.properties.some((p) => {
824
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
825
+ expr.properties.nodes.some((p) => {
729
826
  const n = ts.isSpreadAssignment(p) ? undefined : p.name;
730
827
  return n !== undefined && ts.isComputedPropertyName(n);
731
828
  })) {
@@ -735,7 +832,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
735
832
  // message even when they also make the literal's type unmappable
736
833
  // (a getter or a `this`-returning method would otherwise surface as an
737
834
  // opaque type fence on the whole literal).
738
- for (const prop of expr.properties) {
835
+ for (const prop of expr.properties.nodes) {
739
836
  if (ts.isSpreadAssignment(prop)) {
740
837
  // Supported shapes: FULL spreads of known record shapes read as
741
838
  // identifiers or other side-effect-free reads, all BEFORE any
@@ -745,7 +842,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
745
842
  // `k?: ...` — which desugar to one conditional field at the
746
843
  // spread's own position (any position: they introduce one fresh
747
844
  // name, collision-fenced below). Everything else stays fenced.
748
- const cs = conditionalSpreadOf(prop.expression);
845
+ const cs = conditionalSpreadOf(prop.expression) ?? andSpreadOf(lowerer, prop.expression);
749
846
  if (cs === "unsupported" || (cs && cs.props.length !== 1)) {
750
847
  lowerer.unsupported("SC1090", prop, "conditional spreads beyond `...(c ? { field: v } : {})` (exactly one property against an empty arm — spell other shapes as optional fields)");
751
848
  }
@@ -766,7 +863,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
766
863
  // receiver (capturing the record under construction would be an
767
864
  // RC cycle), and the generic lexical-this walk would incorrectly
768
865
  // capture an ENCLOSING method's `this` — the object-method rule.
769
- if (!isJsSourceFile(expr.getSourceFile())) {
866
+ if (!isJsSourceFile(ts.getSourceFileOfNode(expr))) {
770
867
  rejectThisInObjectAccessor(lowerer, prop.body ?? prop);
771
868
  }
772
869
  }
@@ -838,7 +935,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
838
935
  // type narrows away (a field written as `lanIp: null` types as bare
839
936
  // `null`, which maps to nothing on its own).
840
937
  if (tsType.isUnionType() &&
841
- ts.constituentTypes(tsType).some((t) => t.getSymbol()?.name === "PromiseLike")) {
938
+ ts.constituentTypes(tsType).some((t) => ts.symbolNameOf(t.getSymbol()) === "PromiseLike")) {
842
939
  tsType = lowerer.checker.getAwaitedType(tsType) ?? tsType;
843
940
  }
844
941
  let mapped = lowerer.mapTypeOf(tsType);
@@ -847,13 +944,13 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
847
944
  // Keep a checked-dynamic destination in that representation so copying
848
945
  // preserves keys, evaluation order, and fields overwritten afterwards.
849
946
  if (mapped?.kind === "dyn" &&
850
- expr.properties.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
947
+ expr.properties.nodes.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
851
948
  return lowerDynObjectLiteral(lowerer, expr);
852
949
  }
853
950
  // A JavaScript call can contextually type an object literal as string even
854
951
  // though the literal itself is a record. Keep its own shape so a caller
855
952
  // performing ToString can convert it after the value is built.
856
- if (mapped?.kind === "string" && isJsSourceFile(expr.getSourceFile())) {
953
+ if (mapped?.kind === "string" && isJsSourceFile(ts.getSourceFileOfNode(expr))) {
857
954
  const own = lowerer.mapTypeOf(lowerer.typeOf(expr));
858
955
  if (own?.kind === "record")
859
956
  mapped = own;
@@ -863,7 +960,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
863
960
  // object): `{}` carries no shape information, so the literal builds as
864
961
  // its OWN type, exactly the unmappable-context fallback below. An
865
962
  // empty LITERAL keeps the context (the shapes agree).
866
- if (mapped?.kind === "record" && expr.properties.length > 0) {
963
+ if (mapped?.kind === "record" && expr.properties.nodes.length > 0) {
867
964
  const ctxShape = lowerer.shapes.get(mapped.shapeId);
868
965
  if (ctxShape && ctxShape.fields.length === 0 && !ctxShape.indexValue && !ctxShape.tuple) {
869
966
  mapped = lowerer.mapTypeOf(lowerer.typeOf(expr)) ?? mapped;
@@ -879,7 +976,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
879
976
  // type carries but the shape dropped (settled value/reason,
880
977
  // generic-callable members) belongs to the drop paths below, and
881
978
  // index-signature contexts keep every key (overflow capture).
882
- if (mapped?.kind === "record" && expr.properties.length > 0) {
979
+ if (mapped?.kind === "record" && expr.properties.nodes.length > 0) {
883
980
  const ctxShape = lowerer.shapes.get(mapped.shapeId);
884
981
  if (ctxShape && !ctxShape.indexValue && !ctxShape.tuple) {
885
982
  const names = new Set(ctxShape.fields.map((f) => f.name));
@@ -888,7 +985,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
888
985
  return members.some((m) => lowerer.checker.getPropertyOfType(m, name) !== undefined);
889
986
  };
890
987
  const extraOf = (text) => !names.has(text) && !ctxHasProp(text);
891
- const extra = expr.properties.some((p) => {
988
+ const extra = expr.properties.nodes.some((p) => {
892
989
  if (ts.isSpreadAssignment(p) || !p.name)
893
990
  return false;
894
991
  if (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))
@@ -945,7 +1042,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
945
1042
  !armShape?.tuple &&
946
1043
  // `{} | undefined` supplies no layout for a populated options
947
1044
  // literal, just as a bare empty-record context supplies none.
948
- (expr.properties.length === 0 ||
1045
+ (expr.properties.nodes.length === 0 ||
949
1046
  (armShape && (armShape.fields.length > 0 || armShape.indexValue)))) {
950
1047
  mapped = recordArms[0];
951
1048
  }
@@ -970,7 +1067,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
970
1067
  // already appears in the union.
971
1068
  if (ownShapeId === null ||
972
1069
  !recordArms.some((a) => a.shapeId === ownShapeId) ||
973
- expr.properties.some(ts.isSpreadAssignment)) {
1070
+ expr.properties.nodes.some(ts.isSpreadAssignment)) {
974
1071
  const arm = literalUnionArmOf(lowerer, expr, tsType, recordArms);
975
1072
  if (arm)
976
1073
  mapped = arm;
@@ -985,12 +1082,12 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
985
1082
  // lower; accessor entries and members with no value representation
986
1083
  // (rest-param function types) narrow away. SEMANTICS.md documents the
987
1084
  // enumeration divergence.
988
- if (isJsSourceFile(expr.getSourceFile()) &&
1085
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
989
1086
  (!mapped ||
990
- expr.properties.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
1087
+ expr.properties.nodes.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
991
1088
  isCjsExportTableLiteral(expr)) {
992
1089
  const fields = [];
993
- for (const prop of expr.properties) {
1090
+ for (const prop of expr.properties.nodes) {
994
1091
  if (ts.isGetAccessorDeclaration(prop) || ts.isSetAccessorDeclaration(prop))
995
1092
  continue;
996
1093
  const propName = ts.isSpreadAssignment(prop) ? undefined : prop.name;
@@ -1024,7 +1121,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1024
1121
  // each field converts through the usual dyn boundary, and dynamic
1025
1122
  // consumers ride the keyed-dyn paths. TypeScript keeps the fence.
1026
1123
  if (mapped?.kind === "dyn" ||
1027
- (!mapped && isJsSourceFile(expr.getSourceFile())) ||
1124
+ (!mapped && isJsSourceFile(ts.getSourceFileOfNode(expr))) ||
1028
1125
  (!expected &&
1029
1126
  mapped &&
1030
1127
  jsOpenObjectType(expr, mapped, lowerer.shapes, lowerer.unions).kind === "dyn")) {
@@ -1039,8 +1136,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1039
1136
  // until the join supplies it. Existing values still use width coercion;
1040
1137
  // extra fields, spreads, accessors, and keyed shapes retain their paths.
1041
1138
  if (expected &&
1042
- !isJsSourceFile(expr.getSourceFile()) &&
1043
- expr.properties.every((p) => ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p))) {
1139
+ !isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
1140
+ expr.properties.nodes.every((p) => ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p))) {
1044
1141
  const own = lowerer.shapes.get(type.shapeId);
1045
1142
  const target = lowerer.shapes.get(expected.shapeId);
1046
1143
  if (!own.tuple &&
@@ -1055,10 +1152,29 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1055
1152
  type = { kind: "record", shapeId: expected.shapeId };
1056
1153
  }
1057
1154
  }
1155
+ // A Date's toJSON() result keeps its null in a field with no declared
1156
+ // destination: the lib types say string.
1157
+ if (!expected) {
1158
+ for (const property of expr.properties.nodes) {
1159
+ const value = ts.isPropertyAssignment(property)
1160
+ ? property.initializer
1161
+ : ts.isShorthandPropertyAssignment(property)
1162
+ ? property.name
1163
+ : null;
1164
+ if (value &&
1165
+ property.name &&
1166
+ (ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)) &&
1167
+ isDateJsonSource(lowerer, value)) {
1168
+ const widened = lowerer.runtimeOptionalRecordField(type, property.name.text, dateJsonType(lowerer));
1169
+ if (widened.kind === "record")
1170
+ type = { kind: "record", shapeId: widened.shapeId };
1171
+ }
1172
+ }
1173
+ }
1058
1174
  let shape = lowerer.shapes.get(type.shapeId);
1059
1175
  // JavaScript Dates carry native object identity in checked storage. An
1060
1176
  // inferred scalar Date field would erase that identity before boxing.
1061
- if (isJsSourceFile(expr.getSourceFile()) &&
1177
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
1062
1178
  shape.fields.some((field) => field.type.kind === "date")) {
1063
1179
  return lowerDynObjectLiteral(lowerer, expr);
1064
1180
  }
@@ -1067,8 +1183,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1067
1183
  // so the literal's shape NARROWS to its plain fields (reads resolve
1068
1184
  // through the lifted accessors; Object.keys over the value omits
1069
1185
  // accessor names — the documented divergence).
1070
- if (isJsSourceFile(expr.getSourceFile())) {
1071
- const accessorNames = new Set(expr.properties
1186
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr))) {
1187
+ const accessorNames = new Set(expr.properties.nodes
1072
1188
  .filter((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))
1073
1189
  .map((p) => p.name && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) ? p.name.text : "")
1074
1190
  .filter((n) => n !== ""));
@@ -1088,10 +1204,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1088
1204
  expr.parent.initializer === expr &&
1089
1205
  ts.isVariableStatement(expr.parent?.parent?.parent) &&
1090
1206
  ts.isSourceFile(expr.parent?.parent?.parent?.parent);
1091
- const assignedProperties = expr.properties.filter((prop) => ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop));
1207
+ const assignedProperties = expr.properties.nodes.filter((prop) => ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop));
1092
1208
  if (topLevelJsDecl &&
1093
- isJsSourceFile(expr.getSourceFile()) &&
1094
- assignedProperties.length === expr.properties.length) {
1209
+ isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
1210
+ assignedProperties.length === expr.properties.nodes.length) {
1095
1211
  const provided = new Set(assignedProperties.map((prop) => propNameText(lowerer, prop.name)));
1096
1212
  if (shape.fields.some((field) => !provided.has(field.name))) {
1097
1213
  return lowerDynObjectLiteral(lowerer, expr);
@@ -1114,14 +1230,15 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1114
1230
  // Stay deliberately narrow. Tuple/index/accessor shapes, conditional or
1115
1231
  // multiple spreads, spread-after-explicit order, and shape-changing width
1116
1232
  // copies retain their existing lowering and diagnostics.
1117
- if (!isJsSourceFile(expr.getSourceFile()) &&
1233
+ if (!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
1118
1234
  !shape.indexValue &&
1119
1235
  !shape.tuple &&
1120
1236
  !shapeHasAccessorSlots(shape) &&
1121
- expr.properties.length >= 2 &&
1122
- ts.isSpreadAssignment(expr.properties[0]) &&
1123
- !conditionalSpreadOf(expr.properties[0].expression) &&
1124
- expr.properties
1237
+ expr.properties.nodes.length >= 2 &&
1238
+ ts.isSpreadAssignment(expr.properties.nodes[0]) &&
1239
+ !conditionalSpreadOf(expr.properties.nodes[0].expression) &&
1240
+ !andSpreadOf(lowerer, expr.properties.nodes[0].expression) &&
1241
+ expr.properties.nodes
1125
1242
  .slice(1)
1126
1243
  .every((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
1127
1244
  p.name !== undefined &&
@@ -1129,8 +1246,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1129
1246
  ts.isStringLiteral(p.name) ||
1130
1247
  ts.isNumericLiteral(p.name) ||
1131
1248
  (ts.isComputedPropertyName(p.name) && literalComputedKey(lowerer, p.name) !== null)))) {
1132
- const spread = expr.properties[0];
1133
- const props = expr.properties.slice(1);
1249
+ const spread = expr.properties.nodes[0];
1250
+ const props = expr.properties.nodes.slice(1);
1134
1251
  const names = props.map((p) => propNameText(lowerer, p.name));
1135
1252
  const unique = new Set(names);
1136
1253
  const sourceType = lowerer.mapTypeOf(lowerer.typeOf(spread.expression));
@@ -1178,13 +1295,13 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1178
1295
  if (shape.indexValue &&
1179
1296
  shape.fields.length === 0 &&
1180
1297
  !shape.tuple &&
1181
- (expr.properties.some((p) => ts.isSpreadAssignment(p)) ||
1182
- expr.properties.some(isRuntimeComputedKey))) {
1298
+ (expr.properties.nodes.some((p) => ts.isSpreadAssignment(p)) ||
1299
+ expr.properties.nodes.some(isRuntimeComputedKey))) {
1183
1300
  const contributors = [];
1184
1301
  let mergeable = true;
1185
- for (const prop of expr.properties) {
1302
+ for (const prop of expr.properties.nodes) {
1186
1303
  if (ts.isSpreadAssignment(prop)) {
1187
- const cs = conditionalSpreadOf(prop.expression);
1304
+ const cs = conditionalSpreadOf(prop.expression) ?? andSpreadOf(lowerer, prop.expression);
1188
1305
  if (cs === "unsupported" || (cs && cs.props.length !== 1)) {
1189
1306
  lowerer.unsupported("SC1090", prop, "conditional spreads beyond `...(c ? { field: v } : {})` (exactly one property against an empty arm)");
1190
1307
  }
@@ -1200,7 +1317,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1200
1317
  ? lowerer.lowerExpr(csProp.initializer)
1201
1318
  : lowerer.lowerShorthandValue(csProp), shape.indexValue, vNode);
1202
1319
  contributors.push({
1203
- kind: "field",
1320
+ kind: "condField",
1204
1321
  name: csProp.name.text,
1205
1322
  value: {
1206
1323
  kind: "ternary",
@@ -1215,6 +1332,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1215
1332
  }
1216
1333
  let src = lowerer.lowerExpr(prop.expression);
1217
1334
  src = lowerOptionalIndexSpreadSource(lowerer, src, locOf(prop)) ?? src;
1335
+ src = dynIndexSpreadSource(lowerer, src, type, locOf(prop)) ?? src;
1218
1336
  if (src.type.kind !== "record") {
1219
1337
  lowerer.unsupported("SC1090", prop, `object spread of '${lowerer.fmt(src.type)}' sources into an index-signature shape (only index-signature records merge — ${NARROW_FIRST})`);
1220
1338
  }
@@ -1272,7 +1390,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1272
1390
  }
1273
1391
  // Unfoldable computed keys outside the index-signature merge path:
1274
1392
  // no record shape can hold a runtime-decided name.
1275
- for (const prop of expr.properties) {
1393
+ for (const prop of expr.properties.nodes) {
1276
1394
  if (isRuntimeComputedKey(prop)) {
1277
1395
  lowerer.unsupported("SC1090", prop.name, "computed property keys (compile-time-known keys fold — a pure expression whose checker type is one string or number literal: consts, enum members, quoted keys, templates of those — `{ [MARKER]: v }`; runtime string keys write through an index-signature target; symbol keys stay out)");
1278
1396
  }
@@ -1284,9 +1402,11 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1284
1402
  if (!shape.indexValue &&
1285
1403
  !shape.tuple &&
1286
1404
  shape.fields.length > 0 &&
1287
- expr.properties.length > 0 &&
1288
- expr.properties.every((p) => ts.isSpreadAssignment(p) && !conditionalSpreadOf(p.expression)) &&
1289
- expr.properties.some((p) => {
1405
+ expr.properties.nodes.length > 0 &&
1406
+ expr.properties.nodes.every((p) => ts.isSpreadAssignment(p) &&
1407
+ !conditionalSpreadOf(p.expression) &&
1408
+ !andSpreadOf(lowerer, p.expression)) &&
1409
+ expr.properties.nodes.some((p) => {
1290
1410
  const t = lowerer.mapTypeOf(lowerer.typeOf(p.expression));
1291
1411
  return (t?.kind === "dyn" || (t?.kind === "record" && !!lowerer.shapes.get(t.shapeId)?.indexValue));
1292
1412
  })) {
@@ -1301,7 +1421,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1301
1421
  };
1302
1422
  const fields = [];
1303
1423
  const spreadStmts = [];
1304
- const hasSpread = expr.properties.some(ts.isSpreadAssignment);
1424
+ const hasSpread = expr.properties.nodes.some(ts.isSpreadAssignment);
1305
1425
  const captured = new Set();
1306
1426
  const capture = (value) => {
1307
1427
  const local = lowerer.declareHiddenLocal("%spreadValue", value.type);
@@ -1380,7 +1500,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1380
1500
  // Member names DROPPED from the shape (JS deferral — unlowerable pure
1381
1501
  // member reads narrow away; see the catch in the property loop).
1382
1502
  const droppedNames = new Set();
1383
- for (const prop of expr.properties) {
1503
+ // The order this literal creates its keys in (key-order-witness.ts).
1504
+ const orderSegments = [];
1505
+ for (const prop of expr.properties.nodes) {
1384
1506
  // A later contributor can mutate an earlier source or overwrite a
1385
1507
  // value with effects. Snapshot pending fields at their source position,
1386
1508
  // before evaluating the next contributor, even if they are overwritten.
@@ -1391,7 +1513,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1391
1513
  }
1392
1514
  }
1393
1515
  if (ts.isSpreadAssignment(prop)) {
1394
- const cs = conditionalSpreadOf(prop.expression);
1516
+ const cs = conditionalSpreadOf(prop.expression) ?? andSpreadOf(lowerer, prop.expression);
1395
1517
  if (cs && cs !== "unsupported") {
1396
1518
  // `...(c ? { k: v } : {})` — ONE conditional field at the
1397
1519
  // spread's own position: cond evaluates exactly once, `v` only
@@ -1408,7 +1530,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1408
1530
  }
1409
1531
  shapeMismatch(prop);
1410
1532
  }
1411
- const absent = lowerer.absentFieldValue(fieldType, locOf(prop));
1533
+ // An 'unknown' slot holds the checked-dynamic undefined for the
1534
+ // empty arm, the absent-property read the width copy uses too.
1535
+ const absent = lowerer.absentFieldValue(fieldType, locOf(prop)) ??
1536
+ (fieldType.kind === "dyn" ? dynUndefinedExpr(locOf(prop)) : null);
1412
1537
  if (!absent) {
1413
1538
  lowerer.unsupported("SC1090", prop, `conditional spreads onto the required field '${name}' (the empty arm leaves it undefined — declare the field optional)`);
1414
1539
  }
@@ -1424,6 +1549,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1424
1549
  if (!typeEquals(v.type, fieldType))
1425
1550
  lowerer.badType(valueNode, lowerer.typeOf(valueNode));
1426
1551
  conditionalNames.add(name);
1552
+ orderSegments.push({ kind: "key", name, definite: false });
1427
1553
  fields.push({
1428
1554
  name,
1429
1555
  value: {
@@ -1447,7 +1573,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1447
1573
  let srcNode = prop.expression;
1448
1574
  while (ts.isParenthesizedExpression(srcNode))
1449
1575
  srcNode = srcNode.expression;
1450
- const srcLowered = capture(prop === expr.properties[0] && leadingSpreadLowered !== null
1576
+ const srcLowered = capture(prop === expr.properties.nodes[0] && leadingSpreadLowered !== null
1451
1577
  ? leadingSpreadLowered
1452
1578
  : lowerer.lowerExpr(srcNode));
1453
1579
  // Array callbacks can receive a record-or-undefined ABI even when
@@ -1491,9 +1617,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1491
1617
  lowerer.unsupported("SC1090", prop, "object spread involving index-signature shapes (overflow keys are runtime state — copy the fields you need explicitly)");
1492
1618
  }
1493
1619
  const laterNames = new Set();
1494
- for (const later of expr.properties.slice(expr.properties.indexOf(prop) + 1)) {
1620
+ for (const later of expr.properties.nodes.slice(expr.properties.nodes.indexOf(prop) + 1)) {
1495
1621
  if (ts.isSpreadAssignment(later)) {
1496
- if (conditionalSpreadOf(later.expression))
1622
+ if (conditionalSpreadOf(later.expression) || andSpreadOf(lowerer, later.expression))
1497
1623
  continue;
1498
1624
  const lt = laterSpreadType(lowerer, later.expression);
1499
1625
  if (lt?.kind === "record") {
@@ -1514,6 +1640,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1514
1640
  }
1515
1641
  }
1516
1642
  const srcRef = () => srcLowered ?? lowerer.lowerExpr(srcNode);
1643
+ orderSegments.push({ kind: "spread", shapeId: recArm.shapeId, maybeAbsent: true });
1517
1644
  for (const f of srcShape.fields) {
1518
1645
  if (laterNames.has(f.name))
1519
1646
  continue;
@@ -1689,9 +1816,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1689
1816
  // exactly like Node does. Conditional spreads don't count (their
1690
1817
  // empty arm defines nothing) — their own collision fences hold.
1691
1818
  const laterNames = new Set();
1692
- for (const later of expr.properties.slice(expr.properties.indexOf(prop) + 1)) {
1819
+ for (const later of expr.properties.nodes.slice(expr.properties.nodes.indexOf(prop) + 1)) {
1693
1820
  if (ts.isSpreadAssignment(later)) {
1694
- if (conditionalSpreadOf(later.expression))
1821
+ if (conditionalSpreadOf(later.expression) || andSpreadOf(lowerer, later.expression))
1695
1822
  continue;
1696
1823
  const lt = laterSpreadType(lowerer, later.expression);
1697
1824
  if (lt?.kind === "record") {
@@ -1711,6 +1838,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1711
1838
  laterNames.add(propNameText(lowerer, later.name));
1712
1839
  }
1713
1840
  }
1841
+ // A checked-dynamic source's keys are a run-time fact.
1842
+ orderSegments.push(srcLowered.type.kind === "dyn"
1843
+ ? { kind: "opaque" }
1844
+ : { kind: "spread", shapeId: srcType.shapeId, maybeAbsent: false });
1714
1845
  for (const f of srcShape.fields) {
1715
1846
  if (laterNames.has(f.name))
1716
1847
  continue;
@@ -1836,7 +1967,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1836
1967
  // closures is side-effect-free, so their position among the data
1837
1968
  // fields' source-order evaluation is unobservable — exactly JS,
1838
1969
  // where accessor definitions evaluate nothing.
1839
- if (isJsSourceFile(expr.getSourceFile()))
1970
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)))
1840
1971
  continue;
1841
1972
  const name = propNameText(lowerer, prop.name); // key-form-checked above
1842
1973
  const slotName = `${ts.isGetAccessorDeclaration(prop) ? "%get" : "%set"}:${name}`;
@@ -1912,7 +2043,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1912
2043
  // reads; the field promotion below adopts that layout.
1913
2044
  (fieldType?.kind === "record" &&
1914
2045
  ts.isObjectLiteralExpression(init) &&
1915
- init.properties.length > 0
2046
+ init.properties.nodes.length > 0
1916
2047
  ? (() => {
1917
2048
  const nested = lowerer.lowerObjectLiteral(init, fieldType);
1918
2049
  return lowerer.isRuntimeOptionalRecordVariant(nested.type, fieldType)
@@ -1951,7 +2082,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1951
2082
  (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.initializer));
1952
2083
  if (!(err instanceof PoisonError) ||
1953
2084
  !pureMember ||
1954
- !isJsSourceFile(expr.getSourceFile()) ||
2085
+ !isJsSourceFile(ts.getSourceFileOfNode(expr)) ||
1955
2086
  lowerer.diagSink !== null ||
1956
2087
  lowerer.diags.length <= propDiagsBefore ||
1957
2088
  lowerer.diags.slice(propDiagsBefore).some((d) => d.code === "SC9001")) {
@@ -1999,6 +2130,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
1999
2130
  if (at >= 0)
2000
2131
  fields.splice(at, 1);
2001
2132
  fields.push({ name, value });
2133
+ orderSegments.push({ kind: "key", name, definite: true });
2002
2134
  }
2003
2135
  // Optional fields may be omitted: the field holds its absent state.
2004
2136
  // tsc rejects omission of required fields before lowering.
@@ -2024,7 +2156,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
2024
2156
  fields.push({ name: f.name, value: absent });
2025
2157
  }
2026
2158
  }
2027
- const result = { kind: "recordLit", fields, type, loc };
2159
+ const result = lowerer.keyOrder.literal({ kind: "recordLit", fields, type, loc }, orderSegments);
2028
2160
  return spreadStmts.length === 0
2029
2161
  ? result
2030
2162
  : { kind: "seqExpr", stmts: spreadStmts, result, type, loc };
@@ -2036,9 +2168,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
2036
2168
  * their identity. Changing a discriminator or adding variant-specific
2037
2169
  * fields needs a different result layout and stays on the ordinary path. */
2038
2170
  function lowerUnionRecordClone(lowerer, expr) {
2039
- if (isJsSourceFile(expr.getSourceFile()))
2171
+ if (isJsSourceFile(ts.getSourceFileOfNode(expr)))
2040
2172
  return null;
2041
- const spread = expr.properties[0];
2173
+ const spread = expr.properties.nodes[0];
2042
2174
  if (!spread || !ts.isSpreadAssignment(spread))
2043
2175
  return null;
2044
2176
  let sourceNode = spread.expression;
@@ -2056,7 +2188,7 @@ function lowerUnionRecordClone(lowerer, expr) {
2056
2188
  return null;
2057
2189
  const props = [];
2058
2190
  const names = [];
2059
- for (const prop of expr.properties.slice(1)) {
2191
+ for (const prop of expr.properties.nodes.slice(1)) {
2060
2192
  if ((!ts.isPropertyAssignment(prop) && !ts.isShorthandPropertyAssignment(prop)) ||
2061
2193
  (!ts.isIdentifier(prop.name) && !ts.isStringLiteral(prop.name)))
2062
2194
  return null;
@@ -2196,6 +2328,73 @@ function lowerUnionRecordClone(lowerer, expr) {
2196
2328
  loc,
2197
2329
  };
2198
2330
  }
2331
+ /** `...(c && { k: v })`: spreading a falsy primitive (false, 0, "", NaN)
2332
+ * copies nothing, so the idiom is `...(c ? { k: v } : {})` with `c`
2333
+ * evaluated once. Recognized only where the spread's own type mixes the
2334
+ * record with primitive arms; a record or record-or-unit spread keeps the
2335
+ * ordinary source-copy path. */
2336
+ export function andSpreadOf(lowerer, expr) {
2337
+ let e = expr;
2338
+ while (ts.isParenthesizedExpression(e))
2339
+ e = e.expression;
2340
+ if (!ts.isBinaryExpression(e) || e.operatorToken.kind !== ts.SyntaxKind.AmpersandAmpersandToken)
2341
+ return null;
2342
+ let right = e.right;
2343
+ while (ts.isParenthesizedExpression(right))
2344
+ right = right.expression;
2345
+ if (!ts.isObjectLiteralExpression(right))
2346
+ return null;
2347
+ const spreadType = lowerer.mapTypeOf(lowerer.typeOf(e));
2348
+ // Every falsy value is a primitive, which spreads nothing, so `c && {
2349
+ // ... }` contributes the literal's members exactly when c is truthy,
2350
+ // whatever c's type. The checker's union of the two decides the
2351
+ // representation where it maps; where it does not (a member typed by a
2352
+ // checked-dynamic value such as an AbortSignal), the syntax decides.
2353
+ if (spreadType === null || spreadType.kind === "dyn") {
2354
+ return syntacticAndSpread(right, e.left);
2355
+ }
2356
+ if (spreadType?.kind !== "union")
2357
+ return null;
2358
+ const arms = lowerer.unions.get(spreadType.unionId)?.arms ?? [];
2359
+ if (arms.filter((arm) => arm.kind === "record").length !== 1 ||
2360
+ !arms.some((arm) => arm.kind === "bool" || arm.kind === "f64" || arm.kind === "string") ||
2361
+ !arms.every((arm) => arm.kind === "record" ||
2362
+ arm.kind === "bool" ||
2363
+ arm.kind === "f64" ||
2364
+ arm.kind === "string" ||
2365
+ isUnitType(arm)))
2366
+ return null;
2367
+ if (right.properties.nodes.length === 0)
2368
+ return "unsupported";
2369
+ const props = [];
2370
+ for (const p of right.properties.nodes) {
2371
+ if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
2372
+ p.name &&
2373
+ (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
2374
+ props.push(p);
2375
+ }
2376
+ else {
2377
+ return "unsupported";
2378
+ }
2379
+ }
2380
+ return { cond: e.left, props, whenTrue: true };
2381
+ }
2382
+ function syntacticAndSpread(right, cond) {
2383
+ if (right.properties.nodes.length === 0)
2384
+ return "unsupported";
2385
+ const props = [];
2386
+ for (const p of right.properties.nodes) {
2387
+ if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
2388
+ p.name &&
2389
+ (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
2390
+ props.push(p);
2391
+ }
2392
+ else {
2393
+ return "unsupported";
2394
+ }
2395
+ }
2396
+ return { cond, props, whenTrue: true };
2397
+ }
2199
2398
  export function conditionalSpreadOf(expr) {
2200
2399
  let e = expr;
2201
2400
  while (ts.isParenthesizedExpression(e))
@@ -2213,13 +2412,13 @@ export function conditionalSpreadOf(expr) {
2213
2412
  if (!ts.isObjectLiteralExpression(whenTrue) || !ts.isObjectLiteralExpression(whenFalse)) {
2214
2413
  return "unsupported";
2215
2414
  }
2216
- const trueCarries = whenFalse.properties.length === 0 && whenTrue.properties.length > 0;
2217
- const falseCarries = whenTrue.properties.length === 0 && whenFalse.properties.length > 0;
2415
+ const trueCarries = whenFalse.properties.nodes.length === 0 && whenTrue.properties.nodes.length > 0;
2416
+ const falseCarries = whenTrue.properties.nodes.length === 0 && whenFalse.properties.nodes.length > 0;
2218
2417
  if (!trueCarries && !falseCarries)
2219
2418
  return "unsupported"; // both empty is tsc-unreachable; both non-empty has no single desugar
2220
2419
  const carrier = trueCarries ? whenTrue : whenFalse;
2221
2420
  const props = [];
2222
- for (const p of carrier.properties) {
2421
+ for (const p of carrier.properties.nodes) {
2223
2422
  if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
2224
2423
  p.name &&
2225
2424
  (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
@@ -2249,7 +2448,7 @@ export function conditionalSpreadOf(expr) {
2249
2448
  * (last-write-wins). Fixed, hybrid, and pure index records may contribute. */
2250
2449
  function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
2251
2450
  const srcs = [];
2252
- for (const prop of expr.properties) {
2451
+ for (const prop of expr.properties.nodes) {
2253
2452
  const spread = prop; // caller-checked: all spreads
2254
2453
  const value = lowerer.lowerExpr(spread.expression);
2255
2454
  if (value.type.kind === "dyn") {
@@ -2620,7 +2819,7 @@ export function lowerShorthandValue(lowerer, prop) {
2620
2819
  return lowerer.maybeNarrow({ kind: "varRef", localId: g.id, type: g.type, loc }, propName);
2621
2820
  }
2622
2821
  const sig = lowerer.fnSigsBySymbol.get(resolved);
2623
- const decl = lowerer.checker.declarationsOf(resolved)[0];
2822
+ const decl = resolved.declarations[0];
2624
2823
  if (sig &&
2625
2824
  decl &&
2626
2825
  ts.isFunctionDeclaration(decl) &&
@@ -2642,6 +2841,22 @@ export function lowerShorthandValue(lowerer, prop) {
2642
2841
  if (generic) {
2643
2842
  lowerer.unsupported("SC1090", prop, `generic functions as values (call '${propName.text}' directly)`);
2644
2843
  }
2844
+ // A program class name (`{ parse, TomlError }`, an imported class
2845
+ // included): the class object, exactly the long form `{ C: C }`.
2846
+ // Generic classes keep the identifier path's contextual pinning.
2847
+ const classInfo = lowerer.classBySymbol.get(resolved);
2848
+ if (classInfo && !classInfo.generic) {
2849
+ const decoratedGlobal = classInfo.classDecorators?.valueGlobalId;
2850
+ if (decoratedGlobal !== undefined) {
2851
+ return {
2852
+ kind: "varRef",
2853
+ localId: decoratedGlobal,
2854
+ type: { kind: "classval", className: classInfo.def.name },
2855
+ loc,
2856
+ };
2857
+ }
2858
+ return lowerer.classValueRef(classInfo, propName);
2859
+ }
2645
2860
  }
2646
2861
  lowerer.rejectUnresolvedSymbol(symbol
2647
2862
  ? symbol.flags & ts.SymbolFlags.Alias