@scriptc/compiler 0.4.0 → 0.4.2

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 (866) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +617 -83
  2. package/dist/backend/cycle-analysis.d.ts +2 -1
  3. package/dist/backend/cycle-analysis.js +4 -4
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-mutability.d.ts +2 -1
  6. package/dist/backend/cycle-mutability.js +2 -2
  7. package/dist/backend/cycle-mutability.js.map +1 -1
  8. package/dist/backend/executable-features.js +10 -0
  9. package/dist/backend/executable-features.js.map +1 -1
  10. package/dist/backend/immutability.d.ts +2 -1
  11. package/dist/backend/immutability.js +2 -2
  12. package/dist/backend/immutability.js.map +1 -1
  13. package/dist/backend/library-pack.js +7 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/link-plan-core.d.ts +2 -0
  16. package/dist/backend/link-plan-core.js +2 -0
  17. package/dist/backend/link-plan-core.js.map +1 -1
  18. package/dist/backend/link-plan.d.ts +1 -0
  19. package/dist/backend/link-plan.js +1 -0
  20. package/dist/backend/link-plan.js.map +1 -1
  21. package/dist/backend/llvm/alloc.d.ts +7 -3
  22. package/dist/backend/llvm/alloc.js +7 -4
  23. package/dist/backend/llvm/alloc.js.map +1 -1
  24. package/dist/backend/llvm/array-search.js +4 -1
  25. package/dist/backend/llvm/array-search.js.map +1 -1
  26. package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
  27. package/dist/backend/llvm/bytes-loop-versions.js +115 -19
  28. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  29. package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
  30. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  31. package/dist/backend/llvm/classes.d.ts +99 -2
  32. package/dist/backend/llvm/classes.js +436 -57
  33. package/dist/backend/llvm/classes.js.map +1 -1
  34. package/dist/backend/llvm/classes.test.js +235 -16
  35. package/dist/backend/llvm/classes.test.js.map +1 -1
  36. package/dist/backend/llvm/common.d.ts +21 -5
  37. package/dist/backend/llvm/common.js +50 -5
  38. package/dist/backend/llvm/common.js.map +1 -1
  39. package/dist/backend/llvm/constant-callbacks.js +8 -4
  40. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  41. package/dist/backend/llvm/constant-callbacks.test.js +4 -4
  42. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  43. package/dist/backend/llvm/counted-loops.d.ts +4 -1
  44. package/dist/backend/llvm/counted-loops.js +62 -23
  45. package/dist/backend/llvm/counted-loops.js.map +1 -1
  46. package/dist/backend/llvm/dense-array-access.d.ts +3 -1
  47. package/dist/backend/llvm/dense-array-access.js +61 -38
  48. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  49. package/dist/backend/llvm/dense-array-access.test.js +4 -0
  50. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  51. package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
  52. package/dist/backend/llvm/dense-array-loops.js +49 -13
  53. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  54. package/dist/backend/llvm/dense-array-loops.test.js +50 -14
  55. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  56. package/dist/backend/llvm/dyn.d.ts +34 -1
  57. package/dist/backend/llvm/dyn.js +393 -14
  58. package/dist/backend/llvm/dyn.js.map +1 -1
  59. package/dist/backend/llvm/emit-function.js +27 -8
  60. package/dist/backend/llvm/emit-function.js.map +1 -1
  61. package/dist/backend/llvm/emit-module.js +67 -39
  62. package/dist/backend/llvm/emit-module.js.map +1 -1
  63. package/dist/backend/llvm/emit-statements.d.ts +3 -25
  64. package/dist/backend/llvm/emit-statements.js +414 -37
  65. package/dist/backend/llvm/emit-statements.js.map +1 -1
  66. package/dist/backend/llvm/emitter.d.ts +159 -22
  67. package/dist/backend/llvm/emitter.js +573 -89
  68. package/dist/backend/llvm/emitter.js.map +1 -1
  69. package/dist/backend/llvm/expr-async.js +19 -0
  70. package/dist/backend/llvm/expr-async.js.map +1 -1
  71. package/dist/backend/llvm/expr-bytes.d.ts +5 -2
  72. package/dist/backend/llvm/expr-bytes.js +110 -40
  73. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  74. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  75. package/dist/backend/llvm/expr-calls.js +51 -26
  76. package/dist/backend/llvm/expr-calls.js.map +1 -1
  77. package/dist/backend/llvm/expr-containers.js +27 -14
  78. package/dist/backend/llvm/expr-containers.js.map +1 -1
  79. package/dist/backend/llvm/expr-control.js +2 -3
  80. package/dist/backend/llvm/expr-control.js.map +1 -1
  81. package/dist/backend/llvm/expr-dynamic.js +95 -5
  82. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  83. package/dist/backend/llvm/expr-primitives.js +29 -11
  84. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  85. package/dist/backend/llvm/expr-primitives.test.js +55 -0
  86. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  87. package/dist/backend/llvm/expr-stream-bridges.js +48 -20
  88. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  89. package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
  90. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  91. package/dist/backend/llvm/integer-clones.js +3 -3
  92. package/dist/backend/llvm/integer-clones.js.map +1 -1
  93. package/dist/backend/llvm/js-ic.d.ts +18 -0
  94. package/dist/backend/llvm/js-ic.js +712 -0
  95. package/dist/backend/llvm/js-ic.js.map +1 -0
  96. package/dist/backend/llvm/jsval.js +139 -11
  97. package/dist/backend/llvm/jsval.js.map +1 -1
  98. package/dist/backend/llvm/lib-dispatch.js +10 -0
  99. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  100. package/dist/backend/llvm/lib-filesystem.js +61 -0
  101. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  102. package/dist/backend/llvm/lib-http2.d.ts +4 -0
  103. package/dist/backend/llvm/lib-http2.js +20 -17
  104. package/dist/backend/llvm/lib-http2.js.map +1 -1
  105. package/dist/backend/llvm/lib-process.js +69 -17
  106. package/dist/backend/llvm/lib-process.js.map +1 -1
  107. package/dist/backend/llvm/lib-shared.js +75 -1
  108. package/dist/backend/llvm/lib-shared.js.map +1 -1
  109. package/dist/backend/llvm/lib-stream.js +65 -28
  110. package/dist/backend/llvm/lib-stream.js.map +1 -1
  111. package/dist/backend/llvm/lib-tls.js +23 -0
  112. package/dist/backend/llvm/lib-tls.js.map +1 -1
  113. package/dist/backend/llvm/local-array-reads.js +91 -61
  114. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  115. package/dist/backend/llvm/local-array-reads.test.js +14 -0
  116. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  117. package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
  118. package/dist/backend/llvm/map-number-lookup.js +43 -7
  119. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  120. package/dist/backend/llvm/narrow-guards.js +64 -0
  121. package/dist/backend/llvm/narrow-guards.js.map +1 -1
  122. package/dist/backend/llvm/publish.d.ts +11 -1
  123. package/dist/backend/llvm/publish.js +80 -22
  124. package/dist/backend/llvm/publish.js.map +1 -1
  125. package/dist/backend/llvm/publish.test.js +3 -0
  126. package/dist/backend/llvm/publish.test.js.map +1 -1
  127. package/dist/backend/llvm/receivers.js +1 -1
  128. package/dist/backend/llvm/receivers.js.map +1 -1
  129. package/dist/backend/llvm/reference-writes.js +2 -0
  130. package/dist/backend/llvm/reference-writes.js.map +1 -1
  131. package/dist/backend/llvm/regex-matchers.js +161 -14
  132. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  133. package/dist/backend/llvm/regex-matchers.test.js +18 -0
  134. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  135. package/dist/backend/llvm/regions.js +2 -2
  136. package/dist/backend/llvm/regions.js.map +1 -1
  137. package/dist/backend/llvm/regions.test.js +7 -1
  138. package/dist/backend/llvm/regions.test.js.map +1 -1
  139. package/dist/backend/llvm/shapes.d.ts +17 -9
  140. package/dist/backend/llvm/shapes.js +21 -17
  141. package/dist/backend/llvm/shapes.js.map +1 -1
  142. package/dist/backend/llvm/speculative-integers.d.ts +20 -1
  143. package/dist/backend/llvm/speculative-integers.js +94 -6
  144. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  145. package/dist/backend/llvm/speculative-integers.test.js +55 -1
  146. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  147. package/dist/backend/llvm/string-lifetimes.test.js +2 -1
  148. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  149. package/dist/backend/llvm/string-reads.d.ts +4 -1
  150. package/dist/backend/llvm/string-reads.js +88 -4
  151. package/dist/backend/llvm/string-reads.js.map +1 -1
  152. package/dist/backend/llvm/thread-slots.test.js +5 -4
  153. package/dist/backend/llvm/thread-slots.test.js.map +1 -1
  154. package/dist/backend/llvm/wasm-modules.d.ts +6 -5
  155. package/dist/backend/llvm/wasm-modules.js +32 -9
  156. package/dist/backend/llvm/wasm-modules.js.map +1 -1
  157. package/dist/backend/mangle.d.ts +8 -0
  158. package/dist/backend/mangle.js +12 -0
  159. package/dist/backend/mangle.js.map +1 -1
  160. package/dist/backend/native/contracts.d.ts +40 -2
  161. package/dist/backend/native/executable.js +40 -7
  162. package/dist/backend/native/executable.js.map +1 -1
  163. package/dist/backend/native/library.js +3 -1
  164. package/dist/backend/native/library.js.map +1 -1
  165. package/dist/backend/native-codegen.d.ts +17 -6
  166. package/dist/backend/native-codegen.js +55 -9
  167. package/dist/backend/native-codegen.js.map +1 -1
  168. package/dist/backend/native-codegen.test.js +18 -14
  169. package/dist/backend/native-codegen.test.js.map +1 -1
  170. package/dist/backend/native-link-info-core.d.ts +30 -2
  171. package/dist/backend/native-link-info-core.js.map +1 -1
  172. package/dist/backend/native-profile.d.ts +32 -0
  173. package/dist/backend/native-profile.js +39 -0
  174. package/dist/backend/native-profile.js.map +1 -0
  175. package/dist/backend/native-profile.test.d.ts +1 -0
  176. package/dist/backend/native-profile.test.js +58 -0
  177. package/dist/backend/native-profile.test.js.map +1 -0
  178. package/dist/backend/native-tools.d.ts +14 -0
  179. package/dist/backend/native-tools.js +13 -0
  180. package/dist/backend/native-tools.js.map +1 -1
  181. package/dist/backend/optimization.d.ts +2 -2
  182. package/dist/backend/runtime-abi.d.ts +2 -2
  183. package/dist/backend/runtime-abi.js +2 -2
  184. package/dist/backend/runtime-pack-core.d.ts +4 -0
  185. package/dist/backend/runtime-pack-core.js +4 -0
  186. package/dist/backend/runtime-pack-core.js.map +1 -1
  187. package/dist/backend/runtime-pack-targets.test.js +7 -1
  188. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  189. package/dist/backend/runtime-pack.d.ts +0 -21
  190. package/dist/backend/runtime-pack.js +0 -29
  191. package/dist/backend/runtime-pack.js.map +1 -1
  192. package/dist/backend/runtime-pack.test.js +12 -69
  193. package/dist/backend/runtime-pack.test.js.map +1 -1
  194. package/dist/backend/target-diagnostics.js +38 -1
  195. package/dist/backend/target-diagnostics.js.map +1 -1
  196. package/dist/backend/warm-cache.js +6 -0
  197. package/dist/backend/warm-cache.js.map +1 -1
  198. package/dist/cli/command.js +89 -7
  199. package/dist/cli/command.js.map +1 -1
  200. package/dist/cli/host.d.ts +3 -0
  201. package/dist/cli/output-options.d.ts +2 -0
  202. package/dist/cli/output-options.js +9 -0
  203. package/dist/cli/output-options.js.map +1 -1
  204. package/dist/cli/usage.d.ts +15 -1
  205. package/dist/cli/usage.js +30 -2
  206. package/dist/cli/usage.js.map +1 -1
  207. package/dist/compile-types.d.ts +9 -0
  208. package/dist/contracts/check.js +2 -3
  209. package/dist/contracts/check.js.map +1 -1
  210. package/dist/coverage/report.d.ts +7 -2
  211. package/dist/coverage/report.js +18 -0
  212. package/dist/coverage/report.js.map +1 -1
  213. package/dist/coverage/verdict-cache.d.ts +1 -0
  214. package/dist/coverage/verdict-cache.js +4 -0
  215. package/dist/coverage/verdict-cache.js.map +1 -1
  216. package/dist/coverage/verdict-semantic.js +4 -0
  217. package/dist/coverage/verdict-semantic.js.map +1 -1
  218. package/dist/diagnostics/diagnostic.js.map +1 -1
  219. package/dist/diagnostics/dynamic-tier.d.ts +40 -0
  220. package/dist/diagnostics/dynamic-tier.js +57 -0
  221. package/dist/diagnostics/dynamic-tier.js.map +1 -0
  222. package/dist/diagnostics/envelope.d.ts +2 -1
  223. package/dist/diagnostics/envelope.js +5 -2
  224. package/dist/diagnostics/envelope.js.map +1 -1
  225. package/dist/executable/executable-cache.d.ts +32 -0
  226. package/dist/executable/executable-cache.js +65 -7
  227. package/dist/executable/executable-cache.js.map +1 -1
  228. package/dist/executable/executable-cache.test.js +50 -3
  229. package/dist/executable/executable-cache.test.js.map +1 -1
  230. package/dist/executable/prepare.js +3 -1
  231. package/dist/executable/prepare.js.map +1 -1
  232. package/dist/frontend/analysis.js +1 -0
  233. package/dist/frontend/analysis.js.map +1 -1
  234. package/dist/frontend/arguments-usage.d.ts +8 -0
  235. package/dist/frontend/arguments-usage.js +98 -0
  236. package/dist/frontend/arguments-usage.js.map +1 -1
  237. package/dist/frontend/arguments-usage.test.d.ts +1 -0
  238. package/dist/frontend/arguments-usage.test.js +32 -0
  239. package/dist/frontend/arguments-usage.test.js.map +1 -0
  240. package/dist/frontend/builtin-package-aliases.d.ts +24 -0
  241. package/dist/frontend/builtin-package-aliases.js +133 -0
  242. package/dist/frontend/builtin-package-aliases.js.map +1 -0
  243. package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
  244. package/dist/frontend/builtin-package-aliases.test.js +48 -0
  245. package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
  246. package/dist/frontend/dispose-hook.d.ts +2 -0
  247. package/dist/frontend/dispose-hook.js +14 -0
  248. package/dist/frontend/dispose-hook.js.map +1 -0
  249. package/dist/frontend/dts-paths.d.ts +4 -0
  250. package/dist/frontend/dts-paths.js +9 -1
  251. package/dist/frontend/dts-paths.js.map +1 -1
  252. package/dist/frontend/jsx-entities.d.ts +4 -0
  253. package/dist/frontend/jsx-entities.js +259 -0
  254. package/dist/frontend/jsx-entities.js.map +1 -0
  255. package/dist/frontend/jsx-source.d.ts +71 -0
  256. package/dist/frontend/jsx-source.js +781 -0
  257. package/dist/frontend/jsx-source.js.map +1 -0
  258. package/dist/frontend/jsx-source.test.d.ts +1 -0
  259. package/dist/frontend/jsx-source.test.js +200 -0
  260. package/dist/frontend/jsx-source.test.js.map +1 -0
  261. package/dist/frontend/literal-values.test.js +8 -9
  262. package/dist/frontend/literal-values.test.js.map +1 -1
  263. package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
  264. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  265. package/dist/frontend/lowering/array-values.js +3 -2
  266. package/dist/frontend/lowering/array-values.js.map +1 -1
  267. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  268. package/dist/frontend/lowering/binding-analysis.js +2 -2
  269. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  270. package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
  271. package/dist/frontend/lowering/builtins/arguments.js +30 -15
  272. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  273. package/dist/frontend/lowering/builtins/atomics.js +10 -6
  274. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  275. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +8 -0
  276. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +50 -1
  277. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -1
  278. package/dist/frontend/lowering/builtins/callable-aliases.js +3 -2
  279. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  280. package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
  281. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  282. package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
  283. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  284. package/dist/frontend/lowering/builtins/crypto.d.ts +7 -2
  285. package/dist/frontend/lowering/builtins/crypto.js +63 -4
  286. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  287. package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
  288. package/dist/frontend/lowering/builtins/date-classes.js +477 -0
  289. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
  290. package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
  291. package/dist/frontend/lowering/builtins/dates.js +55 -26
  292. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  293. package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
  294. package/dist/frontend/lowering/builtins/dh.js +151 -0
  295. package/dist/frontend/lowering/builtins/dh.js.map +1 -0
  296. package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
  297. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  298. package/dist/frontend/lowering/builtins/ecdh.d.ts +21 -0
  299. package/dist/frontend/lowering/builtins/ecdh.js +208 -0
  300. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
  301. package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
  302. package/dist/frontend/lowering/builtins/errors.js +110 -0
  303. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  304. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
  305. package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
  306. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  307. package/dist/frontend/lowering/builtins/filesystem.js +6 -4
  308. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  309. package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
  310. package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
  311. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
  312. package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
  313. package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
  314. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
  315. package/dist/frontend/lowering/builtins/json.js +54 -1
  316. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  317. package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
  318. package/dist/frontend/lowering/builtins/key-object.js +20 -7
  319. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  320. package/dist/frontend/lowering/builtins/module-calls.js +11 -4
  321. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  322. package/dist/frontend/lowering/builtins/numbers.js +9 -5
  323. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  324. package/dist/frontend/lowering/builtins/operating-system.js +4 -3
  325. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  326. package/dist/frontend/lowering/builtins/performance.js +3 -2
  327. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  328. package/dist/frontend/lowering/builtins/process.d.ts +9 -0
  329. package/dist/frontend/lowering/builtins/process.js +47 -2
  330. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  331. package/dist/frontend/lowering/builtins/promises.js +3 -2
  332. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  333. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +3 -0
  334. package/dist/frontend/lowering/builtins/promisify-callback.js +23 -4
  335. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  336. package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
  337. package/dist/frontend/lowering/builtins/readline.js +23 -6
  338. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  339. package/dist/frontend/lowering/builtins/reflection.js +26 -0
  340. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  341. package/dist/frontend/lowering/builtins/strings.js +13 -5
  342. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  343. package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
  344. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  345. package/dist/frontend/lowering/builtins/timers.js +6 -2
  346. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  347. package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
  348. package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
  349. package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
  350. package/dist/frontend/lowering/builtins/url.js +4 -3
  351. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  352. package/dist/frontend/lowering/builtins/v8.js +2 -1
  353. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  354. package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
  355. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
  356. package/dist/frontend/lowering/call-arguments.js +2 -1
  357. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  358. package/dist/frontend/lowering/call-signatures.d.ts +4 -0
  359. package/dist/frontend/lowering/call-signatures.js +137 -13
  360. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  361. package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
  362. package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
  363. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
  364. package/dist/frontend/lowering/cjs-exports-object.js +34 -1
  365. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  366. package/dist/frontend/lowering/class-assertions.js +3 -2
  367. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  368. package/dist/frontend/lowering/class-construction.d.ts +2 -1
  369. package/dist/frontend/lowering/class-construction.js +8 -13
  370. package/dist/frontend/lowering/class-construction.js.map +1 -1
  371. package/dist/frontend/lowering/class-descriptors.js +1 -1
  372. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  373. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
  374. package/dist/frontend/lowering/class-dynamic-dispatch.js +577 -152
  375. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  376. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
  377. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  378. package/dist/frontend/lowering/class-method-mutations.js +3 -0
  379. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  380. package/dist/frontend/lowering/class-method-values.js +1 -1
  381. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  382. package/dist/frontend/lowering/class-protocols.d.ts +17 -0
  383. package/dist/frontend/lowering/class-protocols.js +117 -7
  384. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  385. package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
  386. package/dist/frontend/lowering/class-prototypes.js +42 -4
  387. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  388. package/dist/frontend/lowering/class-to-primitive.d.ts +2 -2
  389. package/dist/frontend/lowering/class-to-primitive.js +31 -8
  390. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  391. package/dist/frontend/lowering/class-unions.js +2 -1
  392. package/dist/frontend/lowering/class-unions.js.map +1 -1
  393. package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
  394. package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
  395. package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
  396. package/dist/frontend/lowering/coercions/function-adapters.js +105 -75
  397. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  398. package/dist/frontend/lowering/coercions/structural.js +8 -7
  399. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  400. package/dist/frontend/lowering/coercions/unions.js +8 -7
  401. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  402. package/dist/frontend/lowering/collection-ingestion.js +2 -1
  403. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  404. package/dist/frontend/lowering/containers/array-callbacks.d.ts +15 -0
  405. package/dist/frontend/lowering/containers/array-callbacks.js +36 -32
  406. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  407. package/dist/frontend/lowering/containers/array-concat.js +2 -1
  408. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  409. package/dist/frontend/lowering/containers/array-construction.js +32 -4
  410. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  411. package/dist/frontend/lowering/containers/array-methods.js +11 -5
  412. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  413. package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
  414. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  415. package/dist/frontend/lowering/containers/bytes.d.ts +10 -1
  416. package/dist/frontend/lowering/containers/bytes.js +601 -24
  417. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  418. package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
  419. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  420. package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
  421. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  422. package/dist/frontend/lowering/containers/collection-methods.js +80 -10
  423. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  424. package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
  425. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  426. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
  427. package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
  428. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  429. package/dist/frontend/lowering/containers/string-and-regexp.js +85 -22
  430. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  431. package/dist/frontend/lowering/containers/string-replacement.js +2 -1
  432. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  433. package/dist/frontend/lowering/cycle-initialization.d.ts +26 -10
  434. package/dist/frontend/lowering/cycle-initialization.js +177 -39
  435. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  436. package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
  437. package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
  438. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  439. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  440. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  441. package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
  442. package/dist/frontend/lowering/dispatch-sites.js +204 -0
  443. package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
  444. package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
  445. package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
  446. package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
  447. package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
  448. package/dist/frontend/lowering/dyn-streams.js +1 -1
  449. package/dist/frontend/lowering/dyn-streams.js.map +1 -1
  450. package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
  451. package/dist/frontend/lowering/dynamic-tier.js +327 -0
  452. package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
  453. package/dist/frontend/lowering/error-methods.js +4 -0
  454. package/dist/frontend/lowering/error-methods.js.map +1 -1
  455. package/dist/frontend/lowering/expressions/array-literals.js +48 -13
  456. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  457. package/dist/frontend/lowering/expressions/binary.js +124 -8
  458. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  459. package/dist/frontend/lowering/expressions/element-access.js +30 -7
  460. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  461. package/dist/frontend/lowering/expressions/identifiers.js +46 -7
  462. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  463. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +14 -2
  464. package/dist/frontend/lowering/expressions/keyed-field-targets.js +91 -10
  465. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
  466. package/dist/frontend/lowering/expressions/narrowing.js +52 -7
  467. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  468. package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
  469. package/dist/frontend/lowering/expressions/object-literals.js +75 -7
  470. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  471. package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
  472. package/dist/frontend/lowering/expressions/optional-chains.js +17 -8
  473. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  474. package/dist/frontend/lowering/expressions/property-access.d.ts +5 -4
  475. package/dist/frontend/lowering/expressions/property-access.js +351 -16
  476. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  477. package/dist/frontend/lowering/expressions/relational.js +112 -9
  478. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  479. package/dist/frontend/lowering/expressions/typeof.js +13 -0
  480. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  481. package/dist/frontend/lowering/expressions/updates.js +64 -10
  482. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  483. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  484. package/dist/frontend/lowering/generator-delegation.js +191 -1
  485. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  486. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
  487. package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
  488. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  489. package/dist/frontend/lowering/generic-functions.d.ts +46 -1
  490. package/dist/frontend/lowering/generic-functions.js +660 -73
  491. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  492. package/dist/frontend/lowering/handle-properties.d.ts +24 -0
  493. package/dist/frontend/lowering/handle-properties.js +281 -0
  494. package/dist/frontend/lowering/handle-properties.js.map +1 -0
  495. package/dist/frontend/lowering/intern-tables.js +2 -1
  496. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  497. package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
  498. package/dist/frontend/lowering/iterable-spelling.js +38 -0
  499. package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
  500. package/dist/frontend/lowering/iterator-adapters.js +9 -8
  501. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  502. package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
  503. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
  504. package/dist/frontend/lowering/json-require.js +2 -1
  505. package/dist/frontend/lowering/json-require.js.map +1 -1
  506. package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
  507. package/dist/frontend/lowering/key-order-witness.js +21 -4
  508. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  509. package/dist/frontend/lowering/key-order-witness.test.js +38 -2
  510. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  511. package/dist/frontend/lowering/lifetime-regions.js +2 -1
  512. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  513. package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
  514. package/dist/frontend/lowering/lower-array-sort.js +117 -21
  515. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  516. package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
  517. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  518. package/dist/frontend/lowering/lower-assert.js +6 -5
  519. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  520. package/dist/frontend/lowering/lower-async-iteration.js +3 -1
  521. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  522. package/dist/frontend/lowering/lower-builtin-values.js +1 -0
  523. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  524. package/dist/frontend/lowering/lower-calls.d.ts +4 -0
  525. package/dist/frontend/lowering/lower-calls.js +504 -97
  526. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  527. package/dist/frontend/lowering/lower-classes.d.ts +22 -0
  528. package/dist/frontend/lowering/lower-classes.js +339 -32
  529. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  530. package/dist/frontend/lowering/lower-dgram.js +65 -15
  531. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  532. package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
  533. package/dist/frontend/lowering/lower-event-emitter.js +267 -20
  534. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  535. package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
  536. package/dist/frontend/lowering/lower-exprs.js +148 -12
  537. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  538. package/dist/frontend/lowering/lower-functions.js +308 -72
  539. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  540. package/dist/frontend/lowering/lower-generators.js +10 -4
  541. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  542. package/dist/frontend/lowering/lower-inspect.js +578 -16
  543. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  544. package/dist/frontend/lowering/lower-mixins.js +2 -1
  545. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  546. package/dist/frontend/lowering/lower-mock.js +2 -1
  547. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  548. package/dist/frontend/lowering/lower-modules.d.ts +11 -3
  549. package/dist/frontend/lowering/lower-modules.js +227 -72
  550. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  551. package/dist/frontend/lowering/lower-modules.test.js +2 -2
  552. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  553. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
  554. package/dist/frontend/lowering/lower-namespaces.js +24 -3
  555. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  556. package/dist/frontend/lowering/lower-server.d.ts +10 -0
  557. package/dist/frontend/lowering/lower-server.js +263 -60
  558. package/dist/frontend/lowering/lower-server.js.map +1 -1
  559. package/dist/frontend/lowering/lower-stdlib.js +39 -18
  560. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  561. package/dist/frontend/lowering/lower-stmts.d.ts +7 -10
  562. package/dist/frontend/lowering/lower-stmts.js +584 -69
  563. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  564. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  565. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  566. package/dist/frontend/lowering/lower-stream.js +575 -165
  567. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  568. package/dist/frontend/lowering/lower-timers.js +21 -4
  569. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  570. package/dist/frontend/lowering/lowerer.d.ts +151 -30
  571. package/dist/frontend/lowering/lowerer.js +725 -84
  572. package/dist/frontend/lowering/lowerer.js.map +1 -1
  573. package/dist/frontend/lowering/lowerer.test.js +21 -9
  574. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  575. package/dist/frontend/lowering/narrowing-stability.js +5 -0
  576. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  577. package/dist/frontend/lowering/native-ffi.js +1 -1
  578. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  579. package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
  580. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  581. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  582. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  583. package/dist/frontend/lowering/private-brands.d.ts +9 -0
  584. package/dist/frontend/lowering/private-brands.js +66 -15
  585. package/dist/frontend/lowering/private-brands.js.map +1 -1
  586. package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
  587. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  588. package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
  589. package/dist/frontend/lowering/rebindable-functions.js +54 -0
  590. package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
  591. package/dist/frontend/lowering/require-initialization.js +2 -1
  592. package/dist/frontend/lowering/require-initialization.js.map +1 -1
  593. package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
  594. package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
  595. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  596. package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
  597. package/dist/frontend/lowering/runtime-optional-records.js +18 -5
  598. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  599. package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
  600. package/dist/frontend/lowering/site-dependencies.js +84 -0
  601. package/dist/frontend/lowering/site-dependencies.js.map +1 -0
  602. package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
  603. package/dist/frontend/lowering/site-dependencies.test.js +53 -0
  604. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
  605. package/dist/frontend/lowering/stable-names.d.ts +11 -0
  606. package/dist/frontend/lowering/stable-names.js +35 -0
  607. package/dist/frontend/lowering/stable-names.js.map +1 -0
  608. package/dist/frontend/lowering/static-typeof.d.ts +26 -0
  609. package/dist/frontend/lowering/static-typeof.js +172 -0
  610. package/dist/frontend/lowering/static-typeof.js.map +1 -0
  611. package/dist/frontend/lowering/strict-equality.js +2 -1
  612. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  613. package/dist/frontend/lowering/string-index-bounds.js +3 -2
  614. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  615. package/dist/frontend/lowering/structural-positions.d.ts +32 -0
  616. package/dist/frontend/lowering/structural-positions.js +108 -0
  617. package/dist/frontend/lowering/structural-positions.js.map +1 -0
  618. package/dist/frontend/lowering/surfaces.js +72 -30
  619. package/dist/frontend/lowering/surfaces.js.map +1 -1
  620. package/dist/frontend/lowering/thenables.d.ts +16 -0
  621. package/dist/frontend/lowering/thenables.js +124 -0
  622. package/dist/frontend/lowering/thenables.js.map +1 -0
  623. package/dist/frontend/lowering/var-hoisting.js +37 -3
  624. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  625. package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
  626. package/dist/frontend/npm-static-builtin-aliases.js +65 -0
  627. package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
  628. package/dist/frontend/npm-static-bundled-chunks.d.ts +8 -1
  629. package/dist/frontend/npm-static-bundled-chunks.js +173 -2
  630. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  631. package/dist/frontend/npm-static-bundled-chunks.test.js +112 -0
  632. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  633. package/dist/frontend/npm-static-bundled-esm.js +224 -4
  634. package/dist/frontend/npm-static-bundled-esm.js.map +1 -1
  635. package/dist/frontend/npm-static-bundled-esm.test.js +129 -0
  636. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -1
  637. package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
  638. package/dist/frontend/npm-static-enum-iife.js +280 -0
  639. package/dist/frontend/npm-static-enum-iife.js.map +1 -0
  640. package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
  641. package/dist/frontend/npm-static-enum-iife.test.js +116 -0
  642. package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
  643. package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
  644. package/dist/frontend/npm-static-tsc-helpers.js +106 -0
  645. package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
  646. package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
  647. package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
  648. package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
  649. package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
  650. package/dist/frontend/npm-static-type-exports-host.js +214 -0
  651. package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
  652. package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
  653. package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
  654. package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
  655. package/dist/frontend/npm-static-type-exports.d.ts +52 -0
  656. package/dist/frontend/npm-static-type-exports.js +261 -0
  657. package/dist/frontend/npm-static-type-exports.js.map +1 -0
  658. package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
  659. package/dist/frontend/npm-static-type-exports.test.js +103 -0
  660. package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
  661. package/dist/frontend/npm-static-umd.d.ts +6 -0
  662. package/dist/frontend/npm-static-umd.js +203 -0
  663. package/dist/frontend/npm-static-umd.js.map +1 -0
  664. package/dist/frontend/npm-static-umd.test.d.ts +1 -0
  665. package/dist/frontend/npm-static-umd.test.js +105 -0
  666. package/dist/frontend/npm-static-umd.test.js.map +1 -0
  667. package/dist/frontend/npm-static.d.ts +16 -0
  668. package/dist/frontend/npm-static.js +93 -3
  669. package/dist/frontend/npm-static.js.map +1 -1
  670. package/dist/frontend/npm.js +13 -0
  671. package/dist/frontend/npm.js.map +1 -1
  672. package/dist/frontend/package-shims.d.ts +47 -0
  673. package/dist/frontend/package-shims.js +300 -0
  674. package/dist/frontend/package-shims.js.map +1 -0
  675. package/dist/frontend/pipeline.js +67 -1
  676. package/dist/frontend/pipeline.js.map +1 -1
  677. package/dist/frontend/program.d.ts +21 -0
  678. package/dist/frontend/program.js +174 -14
  679. package/dist/frontend/program.js.map +1 -1
  680. package/dist/frontend/program.test.js +1 -1
  681. package/dist/frontend/program.test.js.map +1 -1
  682. package/dist/frontend/resolve.js +13 -0
  683. package/dist/frontend/resolve.js.map +1 -1
  684. package/dist/frontend/services.d.ts +12 -0
  685. package/dist/frontend/services.js +37 -0
  686. package/dist/frontend/services.js.map +1 -1
  687. package/dist/frontend/ts7/ast-node.d.ts +21 -7
  688. package/dist/frontend/ts7/ast-node.js +131 -29
  689. package/dist/frontend/ts7/ast-node.js.map +1 -1
  690. package/dist/frontend/ts7/ast-node.test.js +60 -0
  691. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  692. package/dist/frontend/ts7/ast-wire.d.ts +27 -2
  693. package/dist/frontend/ts7/ast-wire.js +124 -21
  694. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  695. package/dist/frontend/ts7/ast.d.ts +23 -2
  696. package/dist/frontend/ts7/ast.js +143 -2
  697. package/dist/frontend/ts7/ast.js.map +1 -1
  698. package/dist/frontend/ts7/checker.d.ts +13 -1
  699. package/dist/frontend/ts7/checker.js +75 -1
  700. package/dist/frontend/ts7/checker.js.map +1 -1
  701. package/dist/frontend/ts7/checker.test.js +9 -6
  702. package/dist/frontend/ts7/checker.test.js.map +1 -1
  703. package/dist/frontend/ts7/enums.d.ts +3 -3
  704. package/dist/frontend/ts7/enums.generated.d.ts +10 -0
  705. package/dist/frontend/ts7/enums.generated.js +21 -0
  706. package/dist/frontend/ts7/enums.generated.js.map +1 -1
  707. package/dist/frontend/ts7/enums.js +19 -0
  708. package/dist/frontend/ts7/enums.js.map +1 -1
  709. package/dist/frontend/ts7/program-host.d.ts +6 -5
  710. package/dist/frontend/ts7/program-host.js +12 -2
  711. package/dist/frontend/ts7/program-host.js.map +1 -1
  712. package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
  713. package/dist/frontend/ts7/semantic-checker.js +25 -20
  714. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  715. package/dist/frontend/ts7/semantic-json.d.ts +13 -0
  716. package/dist/frontend/ts7/semantic-json.js +146 -0
  717. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  718. package/dist/frontend/ts7/semantic-json.test.js +57 -1
  719. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  720. package/dist/frontend/ts7/semantic-model.d.ts +18 -0
  721. package/dist/frontend/ts7/semantic-model.js +90 -16
  722. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  723. package/dist/frontend/ts7/semantic-model.test.js +3 -2
  724. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  725. package/dist/frontend/ts7/session.d.ts +19 -4
  726. package/dist/frontend/ts7/session.js +1 -1
  727. package/dist/frontend/ts7/session.js.map +1 -1
  728. package/dist/frontend/tsc-codes.d.ts +1 -1
  729. package/dist/frontend/tsc-codes.js +7 -0
  730. package/dist/frontend/tsc-codes.js.map +1 -1
  731. package/dist/frontend/type-mapper.d.ts +38 -6
  732. package/dist/frontend/type-mapper.js +466 -47
  733. package/dist/frontend/type-mapper.js.map +1 -1
  734. package/dist/frontend/type-mapper.test.js +1 -1
  735. package/dist/frontend/type-mapper.test.js.map +1 -1
  736. package/dist/frontend-process-args.d.ts +4 -0
  737. package/dist/frontend-process-args.js +52 -0
  738. package/dist/frontend-process-args.js.map +1 -0
  739. package/dist/frontend-process-args.test.d.ts +1 -0
  740. package/dist/frontend-process-args.test.js +47 -0
  741. package/dist/frontend-process-args.test.js.map +1 -0
  742. package/dist/frontend-process.d.ts +1 -0
  743. package/dist/frontend-process.js +23 -0
  744. package/dist/frontend-process.js.map +1 -0
  745. package/dist/heap-collection.d.ts +16 -0
  746. package/dist/heap-collection.js +42 -0
  747. package/dist/heap-collection.js.map +1 -0
  748. package/dist/heap-collection.test.d.ts +1 -0
  749. package/dist/heap-collection.test.js +59 -0
  750. package/dist/heap-collection.test.js.map +1 -0
  751. package/dist/heap-pressure.d.ts +2 -0
  752. package/dist/heap-pressure.js +12 -0
  753. package/dist/heap-pressure.js.map +1 -0
  754. package/dist/index.d.ts +8 -0
  755. package/dist/index.js +453 -85
  756. package/dist/index.js.map +1 -1
  757. package/dist/ir/array-length-stability.d.ts +3 -2
  758. package/dist/ir/array-length-stability.js +22 -2
  759. package/dist/ir/array-length-stability.js.map +1 -1
  760. package/dist/ir/array-length-stability.test.js +47 -1
  761. package/dist/ir/array-length-stability.test.js.map +1 -1
  762. package/dist/ir/builtin-effects.js +41 -0
  763. package/dist/ir/builtin-effects.js.map +1 -1
  764. package/dist/ir/builtin-signatures.d.ts +5 -1
  765. package/dist/ir/builtin-signatures.js +187 -16
  766. package/dist/ir/builtin-signatures.js.map +1 -1
  767. package/dist/ir/final-fields.d.ts +2 -1
  768. package/dist/ir/final-fields.js +2 -2
  769. package/dist/ir/final-fields.js.map +1 -1
  770. package/dist/ir/function-references.test.js +2 -0
  771. package/dist/ir/function-references.test.js.map +1 -1
  772. package/dist/ir/int32-slots.d.ts +13 -5
  773. package/dist/ir/int32-slots.js +112 -115
  774. package/dist/ir/int32-slots.js.map +1 -1
  775. package/dist/ir/int32-slots.test.js +3 -1
  776. package/dist/ir/int32-slots.test.js.map +1 -1
  777. package/dist/ir/integer-loop-facts.d.ts +14 -4
  778. package/dist/ir/integer-loop-facts.js +172 -32
  779. package/dist/ir/integer-loop-facts.js.map +1 -1
  780. package/dist/ir/integer-loops.d.ts +49 -0
  781. package/dist/ir/integer-loops.js +193 -39
  782. package/dist/ir/integer-loops.js.map +1 -1
  783. package/dist/ir/integer-loops.test.js +201 -1
  784. package/dist/ir/integer-loops.test.js.map +1 -1
  785. package/dist/ir/integer-ranges.d.ts +10 -1
  786. package/dist/ir/integer-ranges.js +122 -25
  787. package/dist/ir/integer-ranges.js.map +1 -1
  788. package/dist/ir/integer-ranges.test.js +255 -1
  789. package/dist/ir/integer-ranges.test.js.map +1 -1
  790. package/dist/ir/ir.d.ts +17 -2
  791. package/dist/ir/ir.js +11 -1
  792. package/dist/ir/ir.js.map +1 -1
  793. package/dist/ir/js-ic.d.ts +52 -0
  794. package/dist/ir/js-ic.js +199 -0
  795. package/dist/ir/js-ic.js.map +1 -0
  796. package/dist/ir/js-ic.test.d.ts +1 -0
  797. package/dist/ir/js-ic.test.js +148 -0
  798. package/dist/ir/js-ic.test.js.map +1 -0
  799. package/dist/ir/jsval.js +38 -4
  800. package/dist/ir/jsval.js.map +1 -1
  801. package/dist/ir/runtime-features.d.ts +64 -5
  802. package/dist/ir/runtime-features.js +358 -101
  803. package/dist/ir/runtime-features.js.map +1 -1
  804. package/dist/ir/tiers.js +1 -0
  805. package/dist/ir/tiers.js.map +1 -1
  806. package/dist/ir/traverse.d.ts +2 -0
  807. package/dist/ir/traverse.js +124 -70
  808. package/dist/ir/traverse.js.map +1 -1
  809. package/dist/ir/validate.js +77 -24
  810. package/dist/ir/validate.js.map +1 -1
  811. package/dist/ir/validate.test.js +15 -2
  812. package/dist/ir/validate.test.js.map +1 -1
  813. package/dist/library/ir-policy.js +11 -0
  814. package/dist/library/ir-policy.js.map +1 -1
  815. package/dist/library/library-cache.d.ts +2 -0
  816. package/dist/library/library-cache.js.map +1 -1
  817. package/dist/library/prepare.js +2 -0
  818. package/dist/library/prepare.js.map +1 -1
  819. package/dist/native/cli.js +22 -0
  820. package/dist/native/cli.js.map +1 -1
  821. package/dist/native/compiler.js +33 -4
  822. package/dist/native/compiler.js.map +1 -1
  823. package/dist/native/executable-cache.js +3 -0
  824. package/dist/native/executable-cache.js.map +1 -1
  825. package/dist/native/prepare.js +8 -1
  826. package/dist/native/prepare.js.map +1 -1
  827. package/dist/native/sanitizer.test.js +10 -0
  828. package/dist/native/sanitizer.test.js.map +1 -1
  829. package/dist/startup-cache.d.ts +1 -0
  830. package/dist/startup-cache.js +1 -0
  831. package/dist/startup-cache.js.map +1 -1
  832. package/dist/text-parts.d.ts +7 -0
  833. package/dist/text-parts.js +44 -0
  834. package/dist/text-parts.js.map +1 -1
  835. package/dist/text-parts.test.d.ts +1 -0
  836. package/dist/text-parts.test.js +46 -0
  837. package/dist/text-parts.test.js.map +1 -0
  838. package/dist/timing.d.ts +9 -2
  839. package/dist/timing.js +7 -4
  840. package/dist/timing.js.map +1 -1
  841. package/dist/wasm/translate.d.ts +4 -0
  842. package/dist/wasm/translate.js +2 -2
  843. package/dist/wasm/translate.js.map +1 -1
  844. package/package.json +22 -21
  845. package/shims/fs-extra/core/api.ts +1192 -0
  846. package/shims/fs-extra/index.ts +9 -0
  847. package/shims/undici/core/agent.ts +163 -0
  848. package/shims/undici/core/api.ts +93 -0
  849. package/shims/undici/core/client.ts +1304 -0
  850. package/shims/undici/core/connector.ts +157 -0
  851. package/shims/undici/core/diagnostics-types.ts +68 -0
  852. package/shims/undici/core/diagnostics.ts +16 -0
  853. package/shims/undici/core/dispatcher.ts +574 -0
  854. package/shims/undici/core/errors-v5.ts +22 -0
  855. package/shims/undici/core/errors-v7.ts +25 -0
  856. package/shims/undici/core/errors.ts +255 -0
  857. package/shims/undici/core/fetch.ts +635 -0
  858. package/shims/undici/core/pool.ts +280 -0
  859. package/shims/undici/core/readable.ts +268 -0
  860. package/shims/undici/core/request.ts +313 -0
  861. package/shims/undici/core/timers.ts +80 -0
  862. package/shims/undici/core/types.ts +167 -0
  863. package/shims/undici/core/util.ts +67 -0
  864. package/shims/undici/v5.ts +119 -0
  865. package/shims/undici/v7.ts +119 -0
  866. package/surface-manifest.json +20 -52
@@ -1,9 +1,13 @@
1
+ import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
2
+ import { lowerDateStaticCall } from "./builtins/dates.js";
3
+ import { keyedHelperName } from "./stable-names.js";
1
4
  import { lowerValueReturningConstructorNew } from "./js-dynamic-objects.js";
2
5
  import { adaptPromiseExecutor } from "./promise-executor-adapter.js";
3
6
  import { dynUndefinedExpr, nodeThrowExpr, varRef } from "../../ir/build.js";
4
7
  import { constructedFromValue, constructedValue, superIntoResultSlot, } from "./constructor-returns.js";
5
8
  import { checkedIterableSpread } from "./checked-iterable-spread.js";
6
9
  import { lowerReadlineUiNew } from "./builtins/readline.js";
10
+ import { builtinMemberRequireDecl } from "./builtins/module-bindings.js";
7
11
  import { checkedClassUnionAssertion } from "./class-assertions.js";
8
12
  import { collectClassMethodMutations } from "./class-method-mutations.js";
9
13
  import { InternalCompilerError } from "../../errors.js";
@@ -28,14 +32,15 @@ import { bodyReadsArguments } from "../arguments-usage.js";
28
32
  import { errorNameAfterField, errorViewFields } from "./error-name-order.js";
29
33
  import { checkedJsDocumentedParameter, documentedParameter, generatorMeta, } from "./call-signatures.js";
30
34
  import { omittedArgFor } from "./call-arguments.js";
31
- import { isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
32
- import { cjsClassExprWholeExportOf, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, locOf, } from "../program.js";
35
+ import { checkerTypeDescription, isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
36
+ import { canonicalBuiltinModule, cjsClassExprWholeExportOf, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, locOf, requireSpecOf, } from "../program.js";
33
37
  import { PoisonError, dynFallbackType, jsFuncNameOf, newFnCtx, own } from "./lowerer.js";
34
38
  import { isAssertClassNew } from "./assert-instances.js";
39
+ import { isCjsRequireGlobal } from "./lower-node-module.js";
35
40
  import { lowerArrayConstructor } from "./containers/array-construction.js";
36
41
  import { lowerMapSeedNew, lowerSetSeedNew } from "./containers/collection-methods.js";
37
42
  import { lowerObjectConstructor } from "./containers/indexed-objects.js";
38
- import { knownBufEncoding } from "./containers/bytes.js";
43
+ import { knownBufEncoding, lowerNodeModulesBufferConstruct } from "./containers/bytes.js";
39
44
  import { isSafeToRepeat } from "./expressions/evaluation-safety.js";
40
45
  import { lowerSearchParamsNew } from "./builtins/url.js";
41
46
  import { lowerTextCodecNew } from "./builtins/text-codecs.js";
@@ -46,7 +51,7 @@ import { builtinEventTargetBaseOf, eventTargetApiMembers, eventTargetApiMethod,
46
51
  import { emitOverrideShapeReason, emitSpecSuperForward, emitterRooted, lowerEmitterSuperCall, } from "./lower-event-emitter.js";
47
52
  import { declSymbolOf } from "./lower-modules.js";
48
53
  import { classSymbolKeyOf, classSymbolKeyOfSymbol, symbolFieldDisplayName, } from "./symbol-fields.js";
49
- import { lowerHttpAgentNew, lowerHttpServerNew } from "./lower-server.js";
54
+ import { lowerHttpAgentNew, lowerHttpServerNew, lowerTlsSocketNew } from "./lower-server.js";
50
55
  import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, ambientUndefinedFnSymbolOf, contextualUndefReadType, fenceEarlyAliasUse, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "./lower-namespaces.js";
51
56
  import { mixinResultBindingClassOf } from "./lower-mixins.js";
52
57
  import { hasLexicalPrivateReference, hasStaticThis, rejectStaticThis } from "./static-this.js";
@@ -491,8 +496,10 @@ export function registerBuiltinErrorClasses(lowerer) {
491
496
  throwingSetters: [],
492
497
  staticFields: [],
493
498
  };
494
- if (base)
499
+ if (base) {
495
500
  base.subclasses.push(info);
501
+ lowerer.subclassLinks++;
502
+ }
496
503
  lowerer.classes.set(irName, info);
497
504
  }
498
505
  }
@@ -526,6 +533,22 @@ export function registerBuiltinEmitterClass(lowerer) {
526
533
  };
527
534
  lowerer.classes.set(RUNTIME_EMITTER_CLASS, info);
528
535
  }
536
+ /** `class Bus extends require("events") {}` in a CommonJS module: the
537
+ * events module is the EventEmitter class itself, so the base is the
538
+ * runtime emitter, exactly as through a `require("events")` binding. */
539
+ export function builtinRequireBaseOf(lowerer, node) {
540
+ let expr = node;
541
+ while (ts.isParenthesizedExpression(expr))
542
+ expr = expr.expression;
543
+ if (!ts.isCallExpression(expr) || !isJsSourceFile(expr.getSourceFile()))
544
+ return null;
545
+ const spec = requireSpecOf(expr);
546
+ if (spec === null || canonicalBuiltinModule(spec) !== "events")
547
+ return null;
548
+ if (!isCjsRequireGlobal(lowerer, expr.expression))
549
+ return null;
550
+ return lowerer.classes.get(RUNTIME_EMITTER_CLASS) ?? null;
551
+ }
529
552
  /** The runtime-provided node:stream classes as eagerly-registered
530
553
  * ClassInfos (the emitter story): mapType names `%Readable` et al the
531
554
  * moment a stream type appears, so the infos must exist before any
@@ -557,8 +580,10 @@ export function registerBuiltinStreamClasses(lowerer) {
557
580
  throwingSetters: [],
558
581
  staticFields: [],
559
582
  };
560
- if (base)
583
+ if (base) {
561
584
  base.subclasses.push(info);
585
+ lowerer.subclassLinks++;
586
+ }
562
587
  lowerer.classes.set(irName, info);
563
588
  }
564
589
  }
@@ -583,10 +608,15 @@ export function builtinStreamInfoOf(lowerer, symbol) {
583
608
  // member to the stdlib class symbol. The declaration itself is
584
609
  // alias plumbing (streamClassAliasDecl — both declaration walks
585
610
  // skip it).
611
+ // A `var`/`let` binding of the inline require member
612
+ // (`var Transform = require("stream").Transform`) is the same alias
613
+ // plumbing as builtinMemberRequireDecl's: its declaration owns no
614
+ // storage either way.
586
615
  const decl = symbol.valueDeclaration;
587
616
  if (decl &&
588
617
  ts.isVariableDeclaration(decl) &&
589
- (ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0 &&
618
+ ((ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0 ||
619
+ builtinMemberRequireDecl(decl.name, decl.initializer)) &&
590
620
  decl.initializer !== undefined &&
591
621
  ts.isPropertyAccessExpression(decl.initializer) &&
592
622
  !decl.initializer.questionDotToken &&
@@ -891,7 +921,8 @@ export function builtinEmitterInfoOf(lowerer, symbol) {
891
921
  const decl = symbol.valueDeclaration;
892
922
  if (decl !== undefined &&
893
923
  ts.isVariableDeclaration(decl) &&
894
- (ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0 &&
924
+ ((ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0 ||
925
+ builtinMemberRequireDecl(decl.name, decl.initializer)) &&
895
926
  decl.initializer !== undefined &&
896
927
  ts.isPropertyAccessExpression(decl.initializer) &&
897
928
  !decl.initializer.questionDotToken &&
@@ -1334,6 +1365,7 @@ mixin) {
1334
1365
  : (computedBase?.classInfo ?? null);
1335
1366
  let genericBase;
1336
1367
  let callableBase;
1368
+ let extendsDate = false;
1337
1369
  let factoryBaseExpression;
1338
1370
  const adoptCallableBase = (expression) => {
1339
1371
  if (familyMode || inst || mixin)
@@ -1491,6 +1523,11 @@ mixin) {
1491
1523
  // callee is NOT a mixin function keeps the computed-expression
1492
1524
  // fence below.
1493
1525
  if (t && ts.isCallExpression(t.expression) && !t.typeArguments?.nodes) {
1526
+ const requiredBase = builtinRequireBaseOf(lowerer, t.expression);
1527
+ if (requiredBase) {
1528
+ base = requiredBase;
1529
+ continue;
1530
+ }
1494
1531
  const mixinBase = lowerer.mixinCallClassInfoOf(t.expression);
1495
1532
  if (mixinBase) {
1496
1533
  base = mixinBase;
@@ -1509,6 +1546,12 @@ mixin) {
1509
1546
  continue;
1510
1547
  lowerer.unsupported("SC1090", clause, "extending computed expressions");
1511
1548
  }
1549
+ if (!familyMode && !inst && !mixin && lowerer.isStdlibGlobal(t.expression, "Date")) {
1550
+ if (t.typeArguments?.nodes)
1551
+ lowerer.unsupported("SC1090", t, "extending generic classes");
1552
+ extendsDate = true;
1553
+ continue;
1554
+ }
1512
1555
  const symbol = lowerer.resolveValueSymbol(t.expression);
1513
1556
  // Extending a REBINDABLE decorated class (analysis already ran —
1514
1557
  // this collection is a class expression or a generic
@@ -1709,7 +1752,8 @@ mixin) {
1709
1752
  };
1710
1753
  for (const member of decl.members.nodes) {
1711
1754
  if ((functionLocalClass(decl) || checkedStatics) &&
1712
- isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
1755
+ (isJsSourceFile(ts.getSourceFileOfNode(decl)) ||
1756
+ (functionLocalClass(decl) && ts.isMethodDeclaration(member))) &&
1713
1757
  (ts.isClassStaticBlockDeclaration(member) ||
1714
1758
  ts
1715
1759
  .getModifiers(member)
@@ -3365,7 +3409,8 @@ mixin) {
3365
3409
  // synthesized constructor forwards the same params to super).
3366
3410
  const ctorParams = ctor && !mixinForwarding
3367
3411
  ? lowerer.paramShapes(ctor.parameters.nodes)
3368
- : (base?.ctorParams ?? (callableBase ? [{ type: DYN, mode: "dynRest" }] : []));
3412
+ : (base?.ctorParams ??
3413
+ (callableBase || extendsDate ? [{ type: DYN, mode: "dynRest" }] : []));
3369
3414
  if (ctor &&
3370
3415
  !mixinForwarding &&
3371
3416
  isJsSourceFile(ts.getSourceFileOfNode(ctor)) &&
@@ -3392,6 +3437,7 @@ mixin) {
3392
3437
  // Redeclared INHERITED fields contribute no slot (their
3393
3438
  // initializers assign the prefix slot).
3394
3439
  fields: [
3440
+ ...(extendsDate ? [{ name: DATE_TIME_FIELD, type: DATE_T }] : []),
3395
3441
  ...(base?.def.fields ?? []),
3396
3442
  ...fieldOrder
3397
3443
  .filter((f) => f.redeclared !== true)
@@ -3423,6 +3469,7 @@ mixin) {
3423
3469
  base,
3424
3470
  ...(genericBase ? { genericBase } : {}),
3425
3471
  ...(callableBase ? { callableBase } : {}),
3472
+ ...(extendsDate ? { extendsDate: true } : {}),
3426
3473
  ...(factoryBaseExpression ? { factoryBaseExpression } : {}),
3427
3474
  subclasses: [],
3428
3475
  throwingSetters,
@@ -3463,6 +3510,7 @@ mixin) {
3463
3510
  path: inst.path,
3464
3511
  family: inst.family,
3465
3512
  bindings: inst.bindings,
3513
+ tsBindings: inst.tsBindings,
3466
3514
  typeArgsText: inst.typeArgsText,
3467
3515
  ordinal: inst.ordinal,
3468
3516
  };
@@ -3493,8 +3541,10 @@ mixin) {
3493
3541
  };
3494
3542
  lowerer.genericClassByDecl.set(decl, info.generic);
3495
3543
  }
3496
- if (base)
3544
+ if (base) {
3497
3545
  base.subclasses.push(info);
3546
+ lowerer.subclassLinks++;
3547
+ }
3498
3548
  lowerer.classes.set(className, info);
3499
3549
  if (computedBase && !functionLocalClass(decl)) {
3500
3550
  info.def.baseValueGlobal = `%g.${className}.computedBase`;
@@ -3596,8 +3646,10 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3596
3646
  .getTypeArguments(ref)
3597
3647
  .slice(0, gci.typeParams.length);
3598
3648
  const mapped = [];
3649
+ const tsArgs = [];
3599
3650
  if (args.length === gci.typeParams.length) {
3600
3651
  for (const a of args) {
3652
+ tsArgs.push(lowerer.typeParamTsResolver(a) ?? a);
3601
3653
  const m = lowerer.mapTypeOf(a, mapArgument);
3602
3654
  if (!m || m.kind === "void") {
3603
3655
  // An UNBOUND type parameter argument (`Box<T>` outside any
@@ -3618,9 +3670,34 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3618
3670
  if (!b)
3619
3671
  return null;
3620
3672
  mapped.push(b);
3621
- }
3622
- }
3623
- const key = mapped.map(typeKey).join(",");
3673
+ const bound = lowerer.typeParamTsBindings?.get(tp);
3674
+ if (bound)
3675
+ tsArgs.push(bound);
3676
+ }
3677
+ }
3678
+ // A type parameter that a conditional type in the class depends on
3679
+ // (`K extends "required" ? T : T | undefined`) is bound to its checker
3680
+ // type for the members, and that type keys the instance: mapType alone
3681
+ // widens a literal, so Field<string, "required"> and Field<string,
3682
+ // "optional"> would otherwise share one layout. The other parameters get
3683
+ // no checker binding, so nothing in the members depends on a literal
3684
+ // the key does not carry.
3685
+ gci.literalSensitive ??= literalSensitiveTypeParams(lowerer, gci);
3686
+ const sensitive = (i) => tsArgs.length === gci.typeParams.length && gci.literalSensitive.has(gci.typeParams[i]);
3687
+ const checkerKey = gci.typeParams
3688
+ .map((_, i) => (sensitive(i) ? `#${tsArgs[i].id}` : "*"))
3689
+ .join(",");
3690
+ const key = mapped.map(typeKey).join(",") + (gci.literalSensitive.size > 0 ? `@${checkerKey}` : "");
3691
+ const literalText = (i) => {
3692
+ const arg = sensitive(i) ? tsArgs[i] : undefined;
3693
+ if (arg?.isStringLiteralType())
3694
+ return JSON.stringify(arg.value);
3695
+ if (arg?.isNumberLiteralType())
3696
+ return String(arg.value);
3697
+ if (arg && arg.flags & ts.TypeFlags.BooleanLiteral)
3698
+ return lowerer.checker.typeToString(arg);
3699
+ return null;
3700
+ };
3624
3701
  const existing = gci.instances.get(key);
3625
3702
  if (existing) {
3626
3703
  if (existing.info)
@@ -3634,18 +3711,40 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3634
3711
  lowerer.unsupported("SC1090", decl, `unbounded generic class instantiation ('${gci.baseName}' exceeded ${MAX_INSTANTIATION_RECURSION} recursive specializations on one demand path)`);
3635
3712
  }
3636
3713
  const ordinal = gci.instances.size;
3637
- const name = `${gci.family.def.name}%${ordinal}`;
3714
+ // The name does not take the checker type ids of the key: a literal
3715
+ // argument is named by its text, another checker type by its
3716
+ // description. Two keys that still describe alike number the later one.
3717
+ const nameKey = mapped.map(typeKey).join(",") +
3718
+ (gci.literalSensitive.size > 0
3719
+ ? `@${gci.typeParams
3720
+ .map((_, i) => sensitive(i)
3721
+ ? (literalText(i) ?? checkerTypeDescription(tsArgs[i], lowerer.typeCtx))
3722
+ : "*")
3723
+ .join(",")}`
3724
+ : "");
3725
+ const prefix = `${gci.family.def.name}%`;
3726
+ const taken = new Set([...gci.instances.values()].map((instance) => instance.name));
3727
+ let name = keyedHelperName(lowerer, prefix, nameKey, "");
3728
+ for (let n = 1; taken.has(name); n++)
3729
+ name = keyedHelperName(lowerer, prefix, `${nameKey}#${n}`, "");
3638
3730
  const entry = { name, info: null };
3639
3731
  gci.instances.set(key, entry);
3640
3732
  const bindings = new Map();
3641
3733
  gci.typeParams.forEach((tp, i) => bindings.set(tp, mapped[i]));
3642
- const rendered = mapped.map((m) => lowerer.fmt(m)).join(", ");
3734
+ const tsBindings = new Map();
3735
+ gci.typeParams.forEach((tp, i) => {
3736
+ if (sensitive(i))
3737
+ tsBindings.set(tp, tsArgs[i]);
3738
+ });
3739
+ const rendered = mapped.map((m, i) => literalText(i) ?? lowerer.fmt(m)).join(", ");
3643
3740
  const typeArgsText = `<${rendered.length > 80 ? rendered.slice(0, 77) + "..." : rendered}>`;
3644
3741
  const prevBindings = lowerer.typeParamBindings;
3742
+ const prevTsBindings = lowerer.typeParamTsBindings;
3645
3743
  const prevContext = lowerer.instantiationContext;
3646
3744
  const previousPath = lowerer.genericInstantiationPath;
3647
3745
  lowerer.genericInstantiationPath = path;
3648
3746
  lowerer.typeParamBindings = bindings;
3747
+ lowerer.typeParamTsBindings = tsBindings;
3649
3748
  lowerer.instantiationContext = `instantiating class '${gci.baseName}' with ${typeArgsText}`;
3650
3749
  try {
3651
3750
  lowerer.collectClassShapeInner(decl, undefined, {
@@ -3653,6 +3752,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3653
3752
  family: gci.family,
3654
3753
  name,
3655
3754
  bindings,
3755
+ tsBindings,
3656
3756
  typeArgsText,
3657
3757
  ordinal,
3658
3758
  });
@@ -3667,6 +3767,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3667
3767
  }
3668
3768
  finally {
3669
3769
  lowerer.typeParamBindings = prevBindings;
3770
+ lowerer.typeParamTsBindings = prevTsBindings;
3670
3771
  lowerer.instantiationContext = prevContext;
3671
3772
  lowerer.genericInstantiationPath = previousPath;
3672
3773
  }
@@ -3681,6 +3782,65 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3681
3782
  lowerer.onLateClassCollected?.(info);
3682
3783
  return { kind: "object", className: name };
3683
3784
  }
3785
+ /** The class's type parameters that a conditional type inside it depends
3786
+ * on: the parameters named within a type node that is a conditional type
3787
+ * or reaches one through the type aliases and interfaces it refers to
3788
+ * (`get(): Value<T, K>` with `type Value<T, K> = K extends "required" ? T
3789
+ * : T | undefined`, also when the alias wraps the conditional in a union
3790
+ * or another alias). Their arguments pick the conditional's branch. */
3791
+ function literalSensitiveTypeParams(lowerer, gci) {
3792
+ const params = new Set(gci.typeParams);
3793
+ const found = new Set();
3794
+ const reaches = new Map();
3795
+ const declarationsReach = (symbol) => {
3796
+ const target = symbol.flags & ts.SymbolFlags.Alias ? lowerer.checker.getAliasedSymbol(symbol) : symbol;
3797
+ const known = reaches.get(target);
3798
+ if (known !== undefined)
3799
+ return known;
3800
+ reaches.set(target, false); // a recursive alias reaches through its other parts
3801
+ const result = target.declarations.some((d) => ts.isTypeAliasDeclaration(d)
3802
+ ? reachesConditional(d.type)
3803
+ : ts.isInterfaceDeclaration(d)
3804
+ ? d.members.nodes.some(reachesConditional)
3805
+ : false);
3806
+ reaches.set(target, result);
3807
+ return result;
3808
+ };
3809
+ const reachesConditional = (node) => {
3810
+ if (ts.isConditionalTypeNode(node))
3811
+ return true;
3812
+ if (ts.isTypeReferenceNode(node)) {
3813
+ const name = ts.isIdentifier(node.typeName) ? node.typeName : node.typeName.right;
3814
+ const symbol = lowerer.checker.getSymbolAtLocation(name);
3815
+ if (symbol && !params.has(symbol) && declarationsReach(symbol))
3816
+ return true;
3817
+ }
3818
+ let found = false;
3819
+ ts.forEachChild(node, (child) => {
3820
+ if (!found && reachesConditional(child))
3821
+ found = true;
3822
+ });
3823
+ return found;
3824
+ };
3825
+ const collect = (node) => {
3826
+ if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName)) {
3827
+ const symbol = lowerer.checker.getSymbolAtLocation(node.typeName);
3828
+ if (symbol && params.has(symbol))
3829
+ found.add(symbol);
3830
+ }
3831
+ ts.forEachChild(node, collect);
3832
+ };
3833
+ const visit = (node) => {
3834
+ if (ts.isTypeNode(node) && reachesConditional(node)) {
3835
+ collect(node);
3836
+ return;
3837
+ }
3838
+ ts.forEachChild(node, visit);
3839
+ };
3840
+ for (const member of gci.decl.members.nodes)
3841
+ visit(member);
3842
+ return found;
3843
+ }
3684
3844
  /** Runs a member-lowering thunk under an INSTANTIATION's type-parameter
3685
3845
  * bindings (the generic-fn typeParamResolver mechanism) — the checker
3686
3846
  * keeps reporting the unsubstituted `T`s inside the shared body AST.
@@ -3716,11 +3876,13 @@ function withInstanceBindings(lowerer, info, fn) {
3716
3876
  }
3717
3877
  }
3718
3878
  const prevBindings = lowerer.typeParamBindings;
3879
+ const prevTsBindings = lowerer.typeParamTsBindings;
3719
3880
  const prevContext = lowerer.instantiationContext;
3720
3881
  const prevSuppress = lowerer.suppressStats;
3721
3882
  const previousPath = lowerer.genericInstantiationPath;
3722
3883
  lowerer.genericInstantiationPath = gi.path;
3723
3884
  lowerer.typeParamBindings = gi.bindings;
3885
+ lowerer.typeParamTsBindings = gi.tsBindings;
3724
3886
  lowerer.instantiationContext = `instantiating class '${gi.family.generic?.baseName ?? info.def.jsName ?? ""}' with ${gi.typeArgsText}`;
3725
3887
  lowerer.suppressStats = prevSuppress || gi.ordinal > 0;
3726
3888
  try {
@@ -3728,6 +3890,7 @@ function withInstanceBindings(lowerer, info, fn) {
3728
3890
  }
3729
3891
  finally {
3730
3892
  lowerer.typeParamBindings = prevBindings;
3893
+ lowerer.typeParamTsBindings = prevTsBindings;
3731
3894
  lowerer.instantiationContext = prevContext;
3732
3895
  lowerer.suppressStats = prevSuppress;
3733
3896
  lowerer.genericInstantiationPath = previousPath;
@@ -4455,6 +4618,13 @@ export function lowerStaticFieldRead(lowerer, expr) {
4455
4618
  return null;
4456
4619
  const loc = locOf(expr);
4457
4620
  const found = findStaticOn(lowerer, info, expr.name.text);
4621
+ // A Date static read as a value through a class declared `extends Date`:
4622
+ // the statics lower only as calls.
4623
+ if (!found &&
4624
+ dateRootOf(info) &&
4625
+ ["now", "parse", "UTC"].includes(expr.name.text) &&
4626
+ !(ts.isCallExpression(expr.parent) && expr.parent.expression === expr))
4627
+ lowerer.noLowering(`Date.${expr.name.text} read through a class that extends Date`, expr);
4458
4628
  if (hasRuntimeStatics(info) && !found?.field)
4459
4629
  return {
4460
4630
  kind: "dynKeyGet",
@@ -4492,8 +4662,18 @@ export function lowerStaticFieldRead(lowerer, expr) {
4492
4662
  }
4493
4663
  // `C.name` — the JS-observable class name, a compile-time constant on
4494
4664
  // the direct spelling (tsc rejects user statics named `name`, so the
4495
- // chain above can never shadow it in TypeScript sources).
4665
+ // chain above can never shadow it in TypeScript sources). A class of an
4666
+ // import cycle reads it from its class object instead, whose reference
4667
+ // checks the class's initialization (checkCycleBindingAccesses).
4496
4668
  if (expr.name.text === "name" && info.def.jsName !== undefined) {
4669
+ if (lowerer.classInitFlags.get(info.def.name)?.cycle === true)
4670
+ return {
4671
+ kind: "libCall",
4672
+ fn: "class.name",
4673
+ args: [classValueRef(lowerer, info, expr.expression)],
4674
+ type: STRING,
4675
+ loc,
4676
+ };
4497
4677
  return { kind: "strLit", value: info.def.jsName, type: STRING, loc };
4498
4678
  }
4499
4679
  if (info.callableBase)
@@ -4648,9 +4828,10 @@ export function lowerClassExpressionInfo(lowerer, expr) {
4648
4828
  expr.members.nodes.some((member) => decoratorNodesOf(member).length ||
4649
4829
  (!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
4650
4830
  (ts.isClassStaticBlockDeclaration(member) ||
4651
- ts
4652
- .getModifiers(member)
4653
- ?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) ||
4831
+ (!ts.isMethodDeclaration(member) &&
4832
+ ts
4833
+ .getModifiers(member)
4834
+ ?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword)))) ||
4654
4835
  (ts.isMethodDeclaration(member) && member.typeParameters?.nodes.length)))) {
4655
4836
  lowerer.unsupported("SC1090", expr, "function-local classes with statics, decorators, or generic members");
4656
4837
  }
@@ -4661,7 +4842,7 @@ export function lowerClassExpressionInfo(lowerer, expr) {
4661
4842
  !lowerer.computedClassBases.has(lowerer.classNamer(expr))) {
4662
4843
  const heritage = expr.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0]?.expression;
4663
4844
  if (heritage &&
4664
- (ts.isCallExpression(heritage) ||
4845
+ ((ts.isCallExpression(heritage) && !builtinRequireBaseOf(lowerer, heritage)) ||
4665
4846
  (ts.isIdentifier(heritage) &&
4666
4847
  (lowerer.peekLocal(heritage) ?? lowerer.globalOf(heritage)) != null))) {
4667
4848
  let value = lowerer.lowerExpr(heritage);
@@ -4893,9 +5074,49 @@ export function lowerClassExpression(lowerer, expr) {
4893
5074
  loc,
4894
5075
  });
4895
5076
  }
4896
- return info.localClass
4897
- ? initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value)
4898
- : value;
5077
+ if (!info.localClass)
5078
+ return value;
5079
+ const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value);
5080
+ // The base resolves statically here, but Node still evaluates the
5081
+ // heritage expression each time the class definition runs, first.
5082
+ const heritage = heritageWithEffects(expr);
5083
+ if (heritage === undefined)
5084
+ return classValue;
5085
+ return {
5086
+ kind: "seqExpr",
5087
+ stmts: [lowerer.lowerExprStatement(heritage)],
5088
+ result: classValue,
5089
+ type: classValue.type,
5090
+ loc: classValue.loc,
5091
+ };
5092
+ }
5093
+ /** The `extends` expression of `decl` when evaluating it can have effects
5094
+ * (a call, construction, assignment, update, delete, await or yield
5095
+ * outside nested functions). */
5096
+ function heritageWithEffects(decl) {
5097
+ const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0]?.expression;
5098
+ if (heritage === undefined)
5099
+ return undefined;
5100
+ const effects = (node) => {
5101
+ if (ts.isFunctionLike(node) || ts.isClassDeclaration(node) || ts.isClassExpression(node))
5102
+ return false;
5103
+ if (ts.isCallExpression(node) ||
5104
+ ts.isNewExpression(node) ||
5105
+ ts.isTaggedTemplateExpression(node) ||
5106
+ ts.isDeleteExpression(node) ||
5107
+ ts.isAwaitExpression(node) ||
5108
+ ts.isYieldExpression(node) ||
5109
+ (ts.isPrefixUnaryExpression(node) &&
5110
+ (node.operator === ts.SyntaxKind.PlusPlusToken ||
5111
+ node.operator === ts.SyntaxKind.MinusMinusToken)) ||
5112
+ ts.isPostfixUnaryExpression(node) ||
5113
+ (ts.isBinaryExpression(node) &&
5114
+ node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
5115
+ node.operatorToken.kind <= ts.SyntaxKind.LastAssignment))
5116
+ return true;
5117
+ return ts.forEachChild(node, (child) => effects(child) || undefined) ?? false;
5118
+ };
5119
+ return effects(heritage) ? heritage : undefined;
4899
5120
  }
4900
5121
  /** The EXACT class a receiver expression is statically known to BE (not
4901
5122
  * merely be typed by): the class name itself, or a `const` binding
@@ -5156,6 +5377,13 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
5156
5377
  const runtimeStatic = directRuntimeStaticCall(lowerer, call, access, info, throughValue);
5157
5378
  if (runtimeStatic)
5158
5379
  return runtimeStatic;
5380
+ // Date's statics through a class declared `extends Date`
5381
+ // (`Moment.UTC(...)`), which inherits them.
5382
+ if (dateRootOf(info) && !findStaticOn(lowerer, info, access.name.text)) {
5383
+ const date = lowerDateStaticCall(lowerer, call, access.name.text);
5384
+ if (date)
5385
+ return date;
5386
+ }
5159
5387
  if ((hasRuntimeStatics(info) && !findStaticOn(lowerer, info, access.name.text)?.field) ||
5160
5388
  (info.callableBase &&
5161
5389
  !findStaticOn(lowerer, info, access.name.text) &&
@@ -5568,14 +5796,21 @@ function thunkAsyncSlot(overridden, mName) {
5568
5796
  if (overridden.sig.async !== true)
5569
5797
  return;
5570
5798
  const declarer = overridden.declarer;
5799
+ // The slot answers the body's promise: an untyped async method's `dyn`
5800
+ // result is the promise's payload, so the slot's ABI is that promise. An
5801
+ // async generator method's slot keeps its generator object.
5802
+ const ret = overridden.sig.gen || overridden.sig.ret.kind === "promise"
5803
+ ? overridden.sig.ret
5804
+ : { kind: "promise", inner: overridden.sig.ret };
5571
5805
  declarer.returnAdapters ??= new Map();
5572
5806
  if (!declarer.returnAdapters.has(mName)) {
5573
5807
  declarer.returnAdapters.set(mName, {
5574
5808
  params: [...overridden.sig.params],
5575
- ret: overridden.sig.ret,
5809
+ ret,
5576
5810
  async: true,
5577
5811
  });
5578
5812
  }
5813
+ overridden.sig.ret = ret;
5579
5814
  delete overridden.sig.async;
5580
5815
  }
5581
5816
  function overrideReturnAbi(lowerer, declared, inherited, className, base) {
@@ -6242,7 +6477,7 @@ function lowerClassCtorInner(lowerer, info) {
6242
6477
  lowerer.ctx.argumentsLocal = local;
6243
6478
  }
6244
6479
  body.push(...declared.prologue);
6245
- if (!ctorBase && !info.callableBase) {
6480
+ if (!ctorBase && !info.callableBase && !info.extendsDate) {
6246
6481
  // Node's base-class order: field initializers run at the start
6247
6482
  // of construction, the parameter-property assignments open the
6248
6483
  // constructor body (probed — a field initializer reading a
@@ -6257,7 +6492,7 @@ function lowerClassCtorInner(lowerer, info) {
6257
6492
  }
6258
6493
  }
6259
6494
  else {
6260
- if (ctorBase || info.callableBase) {
6495
+ if (ctorBase || info.callableBase || info.extendsDate) {
6261
6496
  // Synthetic forwarding params (the inherited ABI signature).
6262
6497
  // Nothing references them by symbol — only the super call below,
6263
6498
  // which forwards the already-completed values UNCHANGED (defaults
@@ -6440,7 +6675,7 @@ export function classIteratorDrainCall(lowerer, src, loc, elemT) {
6440
6675
  const key = `${cit.className}:${typeKey(outElem)}`;
6441
6676
  let name = lowerer.iterDrainHelpers.get(key);
6442
6677
  if (!name) {
6443
- name = `%iter.drain.${lowerer.iterDrainHelpers.size}`;
6678
+ name = keyedHelperName(lowerer, "%iter.drain", key);
6444
6679
  lowerer.iterDrainHelpers.set(key, name);
6445
6680
  const recvT = { kind: "object", className: cit.className };
6446
6681
  const recvRef = { kind: "varRef", localId: "r.0", type: recvT, loc };
@@ -6548,7 +6783,7 @@ export function classIteratorRestDrainCall(lowerer, cit, itVal, loc) {
6548
6783
  const key = `it:${cit.iterT.className}`;
6549
6784
  let name = lowerer.iterDrainHelpers.get(key);
6550
6785
  if (!name) {
6551
- name = `%iter.drain.${lowerer.iterDrainHelpers.size}`;
6786
+ name = keyedHelperName(lowerer, "%iter.drain", key);
6552
6787
  lowerer.iterDrainHelpers.set(key, name);
6553
6788
  const itRef = { kind: "varRef", localId: "it.0", type: cit.iterT, loc };
6554
6789
  const outRef = { kind: "varRef", localId: "out.0", type: outT, loc };
@@ -7043,12 +7278,39 @@ function superCallInStatementPosition(call) {
7043
7278
  const parent = node.parent;
7044
7279
  if (ts.isExpressionStatement(parent))
7045
7280
  return true;
7281
+ if (ts.isIfStatement(parent)) {
7282
+ const lead = superConditionLead(parent.expression);
7283
+ return lead !== null && call.pos >= lead.left.pos && call.end <= lead.left.end;
7284
+ }
7046
7285
  const comma = ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.CommaToken;
7047
7286
  if (!comma && !ts.isParenthesizedExpression(parent))
7048
7287
  return false;
7049
7288
  node = parent;
7050
7289
  }
7051
7290
  }
7291
+ /** The comma chain of an `if` condition whose leading operands hold a
7292
+ * super() call (`if (super(), r === 0) throw ...`, as minifiers join a
7293
+ * super statement with the next test), or null. The if statement runs the
7294
+ * chain's left operand as a statement first and tests its right operand,
7295
+ * which is what the comma evaluates. */
7296
+ export function superConditionLead(cond) {
7297
+ let expr = cond;
7298
+ while (ts.isParenthesizedExpression(expr))
7299
+ expr = expr.expression;
7300
+ if (!ts.isBinaryExpression(expr) || expr.operatorToken.kind !== ts.SyntaxKind.CommaToken)
7301
+ return null;
7302
+ const holdsSuperCall = (operand) => {
7303
+ let e = operand;
7304
+ while (ts.isParenthesizedExpression(e))
7305
+ e = e.expression;
7306
+ if (ts.isCallExpression(e))
7307
+ return e.expression.kind === ts.SyntaxKind.SuperKeyword;
7308
+ return (ts.isBinaryExpression(e) &&
7309
+ e.operatorToken.kind === ts.SyntaxKind.CommaToken &&
7310
+ (holdsSuperCall(e.left) || holdsSuperCall(e.right)));
7311
+ };
7312
+ return holdsSuperCall(expr.left) ? expr : null;
7313
+ }
7052
7314
  /** Super statements initialize the base and then the derived fields on
7053
7315
  * whichever control-flow path executes. Repeated calls are explicitly
7054
7316
  * refused until native layouts can allocate a second receiver. */
@@ -7080,9 +7342,11 @@ export function lowerDerivedCtorBody(lowerer, info, thisLocal, forward) {
7080
7342
  loc,
7081
7343
  },
7082
7344
  ];
7083
- if (info.callableBase) {
7345
+ if (info.callableBase || info.extendsDate) {
7084
7346
  if (superCall.arguments.nodes.some(ts.isSpreadElement))
7085
- lowerer.unsupported("SC1090", superCall, "spreading explicit super arguments into an ordinary constructor");
7347
+ lowerer.unsupported("SC1090", superCall, info.extendsDate
7348
+ ? "spreading super arguments into the Date constructor"
7349
+ : "spreading explicit super arguments into an ordinary constructor");
7086
7350
  const pack = {
7087
7351
  kind: "dynArrLit",
7088
7352
  elems: superCall.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
@@ -7225,6 +7489,8 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
7225
7489
  type: { kind: "object", className: info.def.name },
7226
7490
  loc,
7227
7491
  };
7492
+ if (info.extendsDate)
7493
+ return dateSuperCall(thisRef, info, args[0], loc);
7228
7494
  if (info.callableBase)
7229
7495
  return {
7230
7496
  kind: "exprStmt",
@@ -7327,6 +7593,22 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
7327
7593
  * super dispatch is static in JS too, never through the dynamic class. */
7328
7594
  export function lowerSuperMethodCall(lowerer, call, access) {
7329
7595
  const cls = lowerer.currentClass;
7596
+ // `super.toISOString()` in a class declared `extends Date`.
7597
+ if (cls?.extendsDate && !cls.base) {
7598
+ const thisL = lowerer.resolveThis();
7599
+ if (!thisL)
7600
+ lowerer.unsupported("SC1080", access);
7601
+ const thisRef = {
7602
+ kind: "varRef",
7603
+ localId: thisL.id,
7604
+ type: thisL.type,
7605
+ loc: locOf(call),
7606
+ };
7607
+ const date = lowerDateSuperMethodCall(lowerer, call, access.name.text, cls, thisRef);
7608
+ if (date)
7609
+ return date;
7610
+ lowerer.unsupported("SC1090", access, `'super.${access.name.text}' (Date.prototype does not declare it)`);
7611
+ }
7330
7612
  if (!cls?.base) {
7331
7613
  // tsc rejects super outside derived-class bodies first; defensive.
7332
7614
  lowerer.unsupported("SC1090", access, "'super' outside a derived class");
@@ -7374,6 +7656,18 @@ export function lowerSuperMethodCall(lowerer, call, access) {
7374
7656
  // `super.dispatchEvent(e)`, `super.preventDefault()`: the inherited
7375
7657
  // runtime members over this method's own `this` (subclasses cannot
7376
7658
  // override them, so the static answer is the runtime's).
7659
+ if (dateRootOf(cls.base) && isDatePrototypeMethod(access.name.text)) {
7660
+ const thisL = lowerer.resolveThis();
7661
+ if (!thisL)
7662
+ lowerer.unsupported("SC1080", access);
7663
+ const thisRef = {
7664
+ kind: "varRef",
7665
+ localId: thisL.id,
7666
+ type: thisL.type,
7667
+ loc: locOf(call),
7668
+ };
7669
+ return lowerDateSuperMethodCall(lowerer, call, access.name.text, cls.base, thisRef);
7670
+ }
7377
7671
  if (eventTargetApiMethod(cls.base, access.name.text)) {
7378
7672
  const thisL = lowerer.resolveThis();
7379
7673
  if (!thisL)
@@ -7738,6 +8032,12 @@ function isCollectionOrErrorClass(ref) {
7738
8032
  }
7739
8033
  export function lowerNew(lowerer, expr) {
7740
8034
  const loc = locOf(expr);
8035
+ // A dependency's deprecated `new Buffer(...)` fallback (containers/bytes.ts).
8036
+ {
8037
+ const buffer = lowerNodeModulesBufferConstruct(lowerer, expr);
8038
+ if (buffer)
8039
+ return buffer;
8040
+ }
7741
8041
  // new Function(...): Node's EvalError under
7742
8042
  // --disallow-code-generation-from-strings (code-generation.ts).
7743
8043
  if (codeGenerationCalleeOf(lowerer, expr.expression) === "Function")
@@ -8005,6 +8305,13 @@ export function lowerNew(lowerer, expr) {
8005
8305
  if (httpServer)
8006
8306
  return httpServer;
8007
8307
  }
8308
+ // `new tls.TLSSocket(socket, options)` — the server-mode wrap of an open
8309
+ // socket (lower-server).
8310
+ {
8311
+ const tlsSocket = lowerTlsSocketNew(lowerer, expr);
8312
+ if (tlsSocket)
8313
+ return tlsSocket;
8314
+ }
8008
8315
  // `new http.Agent(opts?)` / `new https.Agent(opts?)` — the Agent
8009
8316
  // handle (lower-server): getName/destroy/counters through the dyn
8010
8317
  // handle ops, requests thread it via the agent option.
@@ -8730,7 +9037,7 @@ export function lowerNew(lowerer, expr) {
8730
9037
  const key = `x509.record:${isBytes ? "bytes" : "str"}`;
8731
9038
  let helper = lowerer.valueHelpers.get(key);
8732
9039
  if (!helper) {
8733
- helper = `%x509.record.${lowerer.valueHelpers.size}`;
9040
+ helper = keyedHelperName(lowerer, "%x509.record", key);
8734
9041
  lowerer.valueHelpers.set(key, helper);
8735
9042
  const dataT = data.type;
8736
9043
  const dRef = { kind: "varRef", localId: "d.0", type: dataT, loc };