@scriptc/compiler 0.3.5 → 0.4.0

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