@scriptc/compiler 0.4.1 → 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 (680) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +582 -78
  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 +4 -1
  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 +4 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/llvm/alloc.d.ts +7 -3
  16. package/dist/backend/llvm/alloc.js +7 -4
  17. package/dist/backend/llvm/alloc.js.map +1 -1
  18. package/dist/backend/llvm/array-search.js +2 -1
  19. package/dist/backend/llvm/array-search.js.map +1 -1
  20. package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
  21. package/dist/backend/llvm/bytes-loop-versions.js +115 -19
  22. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  23. package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
  24. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  25. package/dist/backend/llvm/classes.d.ts +72 -1
  26. package/dist/backend/llvm/classes.js +331 -45
  27. package/dist/backend/llvm/classes.js.map +1 -1
  28. package/dist/backend/llvm/classes.test.js +223 -16
  29. package/dist/backend/llvm/classes.test.js.map +1 -1
  30. package/dist/backend/llvm/common.d.ts +1 -3
  31. package/dist/backend/llvm/common.js +1 -3
  32. package/dist/backend/llvm/common.js.map +1 -1
  33. package/dist/backend/llvm/constant-callbacks.js +8 -4
  34. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  35. package/dist/backend/llvm/constant-callbacks.test.js +4 -4
  36. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  37. package/dist/backend/llvm/counted-loops.d.ts +4 -1
  38. package/dist/backend/llvm/counted-loops.js +62 -23
  39. package/dist/backend/llvm/counted-loops.js.map +1 -1
  40. package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
  41. package/dist/backend/llvm/dense-array-loops.js +46 -10
  42. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  43. package/dist/backend/llvm/dense-array-loops.test.js +50 -14
  44. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  45. package/dist/backend/llvm/dyn.d.ts +25 -1
  46. package/dist/backend/llvm/dyn.js +331 -8
  47. package/dist/backend/llvm/dyn.js.map +1 -1
  48. package/dist/backend/llvm/emit-function.js +22 -6
  49. package/dist/backend/llvm/emit-function.js.map +1 -1
  50. package/dist/backend/llvm/emit-module.js +17 -11
  51. package/dist/backend/llvm/emit-module.js.map +1 -1
  52. package/dist/backend/llvm/emit-statements.d.ts +0 -23
  53. package/dist/backend/llvm/emit-statements.js +325 -25
  54. package/dist/backend/llvm/emit-statements.js.map +1 -1
  55. package/dist/backend/llvm/emitter.d.ts +141 -15
  56. package/dist/backend/llvm/emitter.js +537 -64
  57. package/dist/backend/llvm/emitter.js.map +1 -1
  58. package/dist/backend/llvm/expr-async.js +19 -0
  59. package/dist/backend/llvm/expr-async.js.map +1 -1
  60. package/dist/backend/llvm/expr-bytes.d.ts +5 -2
  61. package/dist/backend/llvm/expr-bytes.js +110 -40
  62. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  63. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  64. package/dist/backend/llvm/expr-calls.js +34 -22
  65. package/dist/backend/llvm/expr-calls.js.map +1 -1
  66. package/dist/backend/llvm/expr-containers.js +21 -5
  67. package/dist/backend/llvm/expr-containers.js.map +1 -1
  68. package/dist/backend/llvm/expr-control.js +2 -3
  69. package/dist/backend/llvm/expr-control.js.map +1 -1
  70. package/dist/backend/llvm/expr-dynamic.js +54 -6
  71. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  72. package/dist/backend/llvm/expr-primitives.js +26 -8
  73. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  74. package/dist/backend/llvm/expr-stream-bridges.js +38 -6
  75. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  76. package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
  77. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  78. package/dist/backend/llvm/lib-dispatch.js +10 -0
  79. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  80. package/dist/backend/llvm/lib-filesystem.js +61 -0
  81. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  82. package/dist/backend/llvm/lib-http2.d.ts +4 -0
  83. package/dist/backend/llvm/lib-http2.js +20 -17
  84. package/dist/backend/llvm/lib-http2.js.map +1 -1
  85. package/dist/backend/llvm/lib-process.js +65 -14
  86. package/dist/backend/llvm/lib-process.js.map +1 -1
  87. package/dist/backend/llvm/lib-shared.js +53 -1
  88. package/dist/backend/llvm/lib-shared.js.map +1 -1
  89. package/dist/backend/llvm/lib-stream.js +65 -28
  90. package/dist/backend/llvm/lib-stream.js.map +1 -1
  91. package/dist/backend/llvm/lib-tls.js +23 -0
  92. package/dist/backend/llvm/lib-tls.js.map +1 -1
  93. package/dist/backend/llvm/local-array-reads.js +66 -45
  94. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  95. package/dist/backend/llvm/local-array-reads.test.js +14 -0
  96. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  97. package/dist/backend/llvm/publish.d.ts +8 -1
  98. package/dist/backend/llvm/publish.js +64 -25
  99. package/dist/backend/llvm/publish.js.map +1 -1
  100. package/dist/backend/llvm/publish.test.js +3 -0
  101. package/dist/backend/llvm/publish.test.js.map +1 -1
  102. package/dist/backend/llvm/receivers.js +1 -1
  103. package/dist/backend/llvm/receivers.js.map +1 -1
  104. package/dist/backend/llvm/reference-writes.js +2 -0
  105. package/dist/backend/llvm/reference-writes.js.map +1 -1
  106. package/dist/backend/llvm/regex-matchers.js +161 -14
  107. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  108. package/dist/backend/llvm/regex-matchers.test.js +18 -0
  109. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  110. package/dist/backend/llvm/shapes.d.ts +9 -7
  111. package/dist/backend/llvm/shapes.js +12 -10
  112. package/dist/backend/llvm/shapes.js.map +1 -1
  113. package/dist/backend/llvm/string-lifetimes.test.js +2 -1
  114. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  115. package/dist/backend/llvm/string-reads.d.ts +3 -0
  116. package/dist/backend/llvm/string-reads.js +84 -0
  117. package/dist/backend/llvm/string-reads.js.map +1 -1
  118. package/dist/backend/llvm/wasm-modules.d.ts +6 -5
  119. package/dist/backend/llvm/wasm-modules.js +32 -9
  120. package/dist/backend/llvm/wasm-modules.js.map +1 -1
  121. package/dist/backend/mangle.d.ts +3 -0
  122. package/dist/backend/mangle.js +5 -0
  123. package/dist/backend/mangle.js.map +1 -1
  124. package/dist/backend/native/contracts.d.ts +22 -4
  125. package/dist/backend/native/executable.js +24 -8
  126. package/dist/backend/native/executable.js.map +1 -1
  127. package/dist/backend/native/library.js +1 -0
  128. package/dist/backend/native/library.js.map +1 -1
  129. package/dist/backend/native-codegen.d.ts +11 -6
  130. package/dist/backend/native-codegen.js +36 -9
  131. package/dist/backend/native-codegen.js.map +1 -1
  132. package/dist/backend/native-codegen.test.js +0 -23
  133. package/dist/backend/native-codegen.test.js.map +1 -1
  134. package/dist/backend/native-link-info-core.d.ts +14 -4
  135. package/dist/backend/native-link-info-core.js.map +1 -1
  136. package/dist/backend/optimization.d.ts +2 -2
  137. package/dist/backend/runtime-abi.d.ts +2 -2
  138. package/dist/backend/runtime-abi.js +2 -2
  139. package/dist/backend/runtime-pack-core.d.ts +1 -1
  140. package/dist/backend/runtime-pack-core.js +1 -1
  141. package/dist/backend/runtime-pack-core.js.map +1 -1
  142. package/dist/backend/runtime-pack-targets.test.js +4 -1
  143. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  144. package/dist/backend/runtime-pack.d.ts +0 -21
  145. package/dist/backend/runtime-pack.js +0 -29
  146. package/dist/backend/runtime-pack.js.map +1 -1
  147. package/dist/backend/runtime-pack.test.js +9 -69
  148. package/dist/backend/runtime-pack.test.js.map +1 -1
  149. package/dist/backend/target-diagnostics.js +31 -1
  150. package/dist/backend/target-diagnostics.js.map +1 -1
  151. package/dist/backend/warm-cache.js +3 -0
  152. package/dist/backend/warm-cache.js.map +1 -1
  153. package/dist/cli/command.js +26 -6
  154. package/dist/cli/command.js.map +1 -1
  155. package/dist/cli/usage.d.ts +5 -1
  156. package/dist/cli/usage.js +7 -2
  157. package/dist/cli/usage.js.map +1 -1
  158. package/dist/contracts/check.js +1 -1
  159. package/dist/contracts/check.js.map +1 -1
  160. package/dist/coverage/report.d.ts +7 -2
  161. package/dist/coverage/report.js +18 -0
  162. package/dist/coverage/report.js.map +1 -1
  163. package/dist/coverage/verdict-cache.d.ts +1 -0
  164. package/dist/coverage/verdict-cache.js +4 -0
  165. package/dist/coverage/verdict-cache.js.map +1 -1
  166. package/dist/coverage/verdict-semantic.js +4 -0
  167. package/dist/coverage/verdict-semantic.js.map +1 -1
  168. package/dist/diagnostics/diagnostic.js.map +1 -1
  169. package/dist/diagnostics/dynamic-tier.d.ts +40 -0
  170. package/dist/diagnostics/dynamic-tier.js +57 -0
  171. package/dist/diagnostics/dynamic-tier.js.map +1 -0
  172. package/dist/diagnostics/envelope.d.ts +2 -1
  173. package/dist/diagnostics/envelope.js +5 -2
  174. package/dist/diagnostics/envelope.js.map +1 -1
  175. package/dist/executable/executable-cache.d.ts +23 -1
  176. package/dist/executable/executable-cache.js +59 -7
  177. package/dist/executable/executable-cache.js.map +1 -1
  178. package/dist/executable/executable-cache.test.js +45 -3
  179. package/dist/executable/executable-cache.test.js.map +1 -1
  180. package/dist/executable/prepare.js +3 -1
  181. package/dist/executable/prepare.js.map +1 -1
  182. package/dist/frontend/analysis.js +1 -0
  183. package/dist/frontend/analysis.js.map +1 -1
  184. package/dist/frontend/dispose-hook.d.ts +2 -0
  185. package/dist/frontend/dispose-hook.js +14 -0
  186. package/dist/frontend/dispose-hook.js.map +1 -0
  187. package/dist/frontend/jsx-entities.d.ts +4 -0
  188. package/dist/frontend/jsx-entities.js +259 -0
  189. package/dist/frontend/jsx-entities.js.map +1 -0
  190. package/dist/frontend/jsx-source.d.ts +71 -0
  191. package/dist/frontend/jsx-source.js +781 -0
  192. package/dist/frontend/jsx-source.js.map +1 -0
  193. package/dist/frontend/jsx-source.test.d.ts +1 -0
  194. package/dist/frontend/jsx-source.test.js +200 -0
  195. package/dist/frontend/jsx-source.test.js.map +1 -0
  196. package/dist/frontend/literal-values.test.js +8 -9
  197. package/dist/frontend/literal-values.test.js.map +1 -1
  198. package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
  199. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  200. package/dist/frontend/lowering/array-values.js +3 -2
  201. package/dist/frontend/lowering/array-values.js.map +1 -1
  202. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  203. package/dist/frontend/lowering/binding-analysis.js +2 -2
  204. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  205. package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
  206. package/dist/frontend/lowering/builtins/arguments.js +30 -15
  207. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  208. package/dist/frontend/lowering/builtins/atomics.js +10 -6
  209. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  210. package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
  211. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  212. package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
  213. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  214. package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
  215. package/dist/frontend/lowering/builtins/crypto.js +59 -3
  216. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  217. package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
  218. package/dist/frontend/lowering/builtins/date-classes.js +477 -0
  219. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
  220. package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
  221. package/dist/frontend/lowering/builtins/dates.js +55 -26
  222. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  223. package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
  224. package/dist/frontend/lowering/builtins/dh.js +151 -0
  225. package/dist/frontend/lowering/builtins/dh.js.map +1 -0
  226. package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
  227. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  228. package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
  229. package/dist/frontend/lowering/builtins/ecdh.js +7 -7
  230. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
  231. package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
  232. package/dist/frontend/lowering/builtins/errors.js +110 -0
  233. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  234. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
  235. package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
  236. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  237. package/dist/frontend/lowering/builtins/filesystem.js +6 -4
  238. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  239. package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
  240. package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
  241. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
  242. package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
  243. package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
  244. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
  245. package/dist/frontend/lowering/builtins/json.js +2 -1
  246. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  247. package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
  248. package/dist/frontend/lowering/builtins/key-object.js +20 -7
  249. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  250. package/dist/frontend/lowering/builtins/module-calls.js +11 -4
  251. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  252. package/dist/frontend/lowering/builtins/numbers.js +9 -5
  253. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  254. package/dist/frontend/lowering/builtins/operating-system.js +4 -3
  255. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  256. package/dist/frontend/lowering/builtins/performance.js +3 -2
  257. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  258. package/dist/frontend/lowering/builtins/process.js +3 -2
  259. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  260. package/dist/frontend/lowering/builtins/promises.js +3 -2
  261. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  262. package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
  263. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  264. package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
  265. package/dist/frontend/lowering/builtins/readline.js +23 -6
  266. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  267. package/dist/frontend/lowering/builtins/strings.js +13 -5
  268. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  269. package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
  270. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  271. package/dist/frontend/lowering/builtins/timers.js +1 -1
  272. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  273. package/dist/frontend/lowering/builtins/url.js +4 -3
  274. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  275. package/dist/frontend/lowering/builtins/v8.js +2 -1
  276. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  277. package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
  278. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
  279. package/dist/frontend/lowering/call-arguments.js +2 -1
  280. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  281. package/dist/frontend/lowering/call-signatures.js +13 -6
  282. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  283. package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
  284. package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
  285. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
  286. package/dist/frontend/lowering/class-assertions.js +3 -2
  287. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  288. package/dist/frontend/lowering/class-construction.d.ts +2 -1
  289. package/dist/frontend/lowering/class-construction.js +8 -13
  290. package/dist/frontend/lowering/class-construction.js.map +1 -1
  291. package/dist/frontend/lowering/class-descriptors.js +1 -1
  292. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  293. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
  294. package/dist/frontend/lowering/class-dynamic-dispatch.js +568 -151
  295. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  296. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
  297. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  298. package/dist/frontend/lowering/class-method-mutations.js +3 -0
  299. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  300. package/dist/frontend/lowering/class-method-values.js +1 -1
  301. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  302. package/dist/frontend/lowering/class-protocols.d.ts +7 -0
  303. package/dist/frontend/lowering/class-protocols.js +64 -4
  304. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  305. package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
  306. package/dist/frontend/lowering/class-prototypes.js +36 -3
  307. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  308. package/dist/frontend/lowering/class-to-primitive.js +25 -5
  309. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  310. package/dist/frontend/lowering/class-unions.js +2 -1
  311. package/dist/frontend/lowering/class-unions.js.map +1 -1
  312. package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
  313. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  314. package/dist/frontend/lowering/coercions/structural.js +8 -7
  315. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  316. package/dist/frontend/lowering/coercions/unions.js +8 -7
  317. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  318. package/dist/frontend/lowering/collection-ingestion.js +2 -1
  319. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  320. package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
  321. package/dist/frontend/lowering/containers/array-callbacks.js +14 -13
  322. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  323. package/dist/frontend/lowering/containers/array-concat.js +2 -1
  324. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  325. package/dist/frontend/lowering/containers/array-construction.js +25 -4
  326. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  327. package/dist/frontend/lowering/containers/array-methods.js +6 -5
  328. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  329. package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
  330. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  331. package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
  332. package/dist/frontend/lowering/containers/bytes.js +129 -28
  333. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  334. package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
  335. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  336. package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
  337. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  338. package/dist/frontend/lowering/containers/collection-methods.js +8 -7
  339. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  340. package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
  341. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  342. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
  343. package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
  344. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  345. package/dist/frontend/lowering/containers/string-and-regexp.js +36 -9
  346. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  347. package/dist/frontend/lowering/containers/string-replacement.js +2 -1
  348. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  349. package/dist/frontend/lowering/cycle-initialization.js +25 -4
  350. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  351. package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
  352. package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
  353. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  354. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  355. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  356. package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
  357. package/dist/frontend/lowering/dispatch-sites.js +204 -0
  358. package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
  359. package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
  360. package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
  361. package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
  362. package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
  363. package/dist/frontend/lowering/dyn-streams.js +1 -1
  364. package/dist/frontend/lowering/dyn-streams.js.map +1 -1
  365. package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
  366. package/dist/frontend/lowering/dynamic-tier.js +327 -0
  367. package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
  368. package/dist/frontend/lowering/error-methods.js +4 -0
  369. package/dist/frontend/lowering/error-methods.js.map +1 -1
  370. package/dist/frontend/lowering/expressions/array-literals.js +15 -0
  371. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  372. package/dist/frontend/lowering/expressions/binary.js +45 -3
  373. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  374. package/dist/frontend/lowering/expressions/element-access.js +17 -1
  375. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  376. package/dist/frontend/lowering/expressions/identifiers.js +46 -7
  377. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  378. package/dist/frontend/lowering/expressions/narrowing.js +35 -5
  379. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  380. package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
  381. package/dist/frontend/lowering/expressions/object-literals.js +27 -6
  382. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  383. package/dist/frontend/lowering/expressions/optional-chains.js +5 -5
  384. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  385. package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
  386. package/dist/frontend/lowering/expressions/property-access.js +99 -7
  387. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  388. package/dist/frontend/lowering/expressions/relational.js +63 -5
  389. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  390. package/dist/frontend/lowering/expressions/updates.js +63 -9
  391. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  392. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
  393. package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
  394. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  395. package/dist/frontend/lowering/generic-functions.d.ts +42 -1
  396. package/dist/frontend/lowering/generic-functions.js +448 -18
  397. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  398. package/dist/frontend/lowering/intern-tables.js +2 -1
  399. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  400. package/dist/frontend/lowering/iterator-adapters.js +9 -8
  401. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  402. package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
  403. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
  404. package/dist/frontend/lowering/json-require.js +2 -1
  405. package/dist/frontend/lowering/json-require.js.map +1 -1
  406. package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
  407. package/dist/frontend/lowering/key-order-witness.js +21 -4
  408. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  409. package/dist/frontend/lowering/key-order-witness.test.js +38 -2
  410. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  411. package/dist/frontend/lowering/lifetime-regions.js +2 -1
  412. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  413. package/dist/frontend/lowering/lower-assert.js +6 -5
  414. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  415. package/dist/frontend/lowering/lower-async-iteration.js +3 -1
  416. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  417. package/dist/frontend/lowering/lower-calls.d.ts +4 -0
  418. package/dist/frontend/lowering/lower-calls.js +339 -91
  419. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  420. package/dist/frontend/lowering/lower-classes.d.ts +18 -0
  421. package/dist/frontend/lowering/lower-classes.js +280 -25
  422. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  423. package/dist/frontend/lowering/lower-dgram.js +3 -2
  424. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  425. package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
  426. package/dist/frontend/lowering/lower-event-emitter.js +267 -20
  427. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  428. package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
  429. package/dist/frontend/lowering/lower-exprs.js +116 -11
  430. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  431. package/dist/frontend/lowering/lower-functions.js +304 -72
  432. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  433. package/dist/frontend/lowering/lower-inspect.js +10 -6
  434. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  435. package/dist/frontend/lowering/lower-mixins.js +2 -1
  436. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  437. package/dist/frontend/lowering/lower-mock.js +2 -1
  438. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  439. package/dist/frontend/lowering/lower-modules.js +15 -5
  440. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  441. package/dist/frontend/lowering/lower-modules.test.js +2 -2
  442. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  443. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
  444. package/dist/frontend/lowering/lower-namespaces.js +4 -3
  445. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  446. package/dist/frontend/lowering/lower-server.d.ts +10 -0
  447. package/dist/frontend/lowering/lower-server.js +237 -59
  448. package/dist/frontend/lowering/lower-server.js.map +1 -1
  449. package/dist/frontend/lowering/lower-stdlib.js +12 -10
  450. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  451. package/dist/frontend/lowering/lower-stmts.js +168 -20
  452. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  453. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  454. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  455. package/dist/frontend/lowering/lower-stream.js +575 -165
  456. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  457. package/dist/frontend/lowering/lower-timers.js +4 -3
  458. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  459. package/dist/frontend/lowering/lowerer.d.ts +125 -28
  460. package/dist/frontend/lowering/lowerer.js +557 -63
  461. package/dist/frontend/lowering/lowerer.js.map +1 -1
  462. package/dist/frontend/lowering/lowerer.test.js +21 -9
  463. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  464. package/dist/frontend/lowering/narrowing-stability.js +5 -0
  465. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  466. package/dist/frontend/lowering/native-ffi.js +1 -1
  467. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  468. package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
  469. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  470. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  471. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  472. package/dist/frontend/lowering/private-brands.d.ts +9 -0
  473. package/dist/frontend/lowering/private-brands.js +66 -15
  474. package/dist/frontend/lowering/private-brands.js.map +1 -1
  475. package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
  476. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  477. package/dist/frontend/lowering/require-initialization.js +2 -1
  478. package/dist/frontend/lowering/require-initialization.js.map +1 -1
  479. package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
  480. package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
  481. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  482. package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
  483. package/dist/frontend/lowering/runtime-optional-records.js +18 -5
  484. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  485. package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
  486. package/dist/frontend/lowering/site-dependencies.js +84 -0
  487. package/dist/frontend/lowering/site-dependencies.js.map +1 -0
  488. package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
  489. package/dist/frontend/lowering/site-dependencies.test.js +53 -0
  490. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
  491. package/dist/frontend/lowering/stable-names.d.ts +11 -0
  492. package/dist/frontend/lowering/stable-names.js +35 -0
  493. package/dist/frontend/lowering/stable-names.js.map +1 -0
  494. package/dist/frontend/lowering/static-typeof.d.ts +2 -2
  495. package/dist/frontend/lowering/static-typeof.js +42 -3
  496. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  497. package/dist/frontend/lowering/strict-equality.js +2 -1
  498. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  499. package/dist/frontend/lowering/structural-positions.d.ts +32 -0
  500. package/dist/frontend/lowering/structural-positions.js +108 -0
  501. package/dist/frontend/lowering/structural-positions.js.map +1 -0
  502. package/dist/frontend/lowering/surfaces.js +42 -26
  503. package/dist/frontend/lowering/surfaces.js.map +1 -1
  504. package/dist/frontend/lowering/var-hoisting.js +37 -3
  505. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  506. package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
  507. package/dist/frontend/npm-static-tsc-helpers.js +106 -0
  508. package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
  509. package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
  510. package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
  511. package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
  512. package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
  513. package/dist/frontend/npm-static-type-exports-host.js +214 -0
  514. package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
  515. package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
  516. package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
  517. package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
  518. package/dist/frontend/npm-static-type-exports.d.ts +52 -0
  519. package/dist/frontend/npm-static-type-exports.js +261 -0
  520. package/dist/frontend/npm-static-type-exports.js.map +1 -0
  521. package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
  522. package/dist/frontend/npm-static-type-exports.test.js +103 -0
  523. package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
  524. package/dist/frontend/npm-static-umd.d.ts +6 -0
  525. package/dist/frontend/npm-static-umd.js +203 -0
  526. package/dist/frontend/npm-static-umd.js.map +1 -0
  527. package/dist/frontend/npm-static-umd.test.d.ts +1 -0
  528. package/dist/frontend/npm-static-umd.test.js +105 -0
  529. package/dist/frontend/npm-static-umd.test.js.map +1 -0
  530. package/dist/frontend/npm-static.d.ts +8 -0
  531. package/dist/frontend/npm-static.js +47 -2
  532. package/dist/frontend/npm-static.js.map +1 -1
  533. package/dist/frontend/program.d.ts +13 -0
  534. package/dist/frontend/program.js +103 -6
  535. package/dist/frontend/program.js.map +1 -1
  536. package/dist/frontend/program.test.js +1 -1
  537. package/dist/frontend/program.test.js.map +1 -1
  538. package/dist/frontend/services.d.ts +6 -0
  539. package/dist/frontend/services.js +18 -0
  540. package/dist/frontend/services.js.map +1 -1
  541. package/dist/frontend/ts7/ast-node.d.ts +21 -7
  542. package/dist/frontend/ts7/ast-node.js +131 -29
  543. package/dist/frontend/ts7/ast-node.js.map +1 -1
  544. package/dist/frontend/ts7/ast-node.test.js +60 -0
  545. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  546. package/dist/frontend/ts7/ast-wire.d.ts +27 -2
  547. package/dist/frontend/ts7/ast-wire.js +124 -21
  548. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  549. package/dist/frontend/ts7/ast.d.ts +23 -2
  550. package/dist/frontend/ts7/ast.js +143 -2
  551. package/dist/frontend/ts7/ast.js.map +1 -1
  552. package/dist/frontend/ts7/checker.d.ts +13 -1
  553. package/dist/frontend/ts7/checker.js +75 -1
  554. package/dist/frontend/ts7/checker.js.map +1 -1
  555. package/dist/frontend/ts7/checker.test.js +9 -6
  556. package/dist/frontend/ts7/checker.test.js.map +1 -1
  557. package/dist/frontend/ts7/enums.d.ts +3 -3
  558. package/dist/frontend/ts7/enums.generated.d.ts +10 -0
  559. package/dist/frontend/ts7/enums.generated.js +21 -0
  560. package/dist/frontend/ts7/enums.generated.js.map +1 -1
  561. package/dist/frontend/ts7/enums.js +19 -0
  562. package/dist/frontend/ts7/enums.js.map +1 -1
  563. package/dist/frontend/ts7/program-host.js +5 -2
  564. package/dist/frontend/ts7/program-host.js.map +1 -1
  565. package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
  566. package/dist/frontend/ts7/semantic-checker.js +25 -20
  567. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  568. package/dist/frontend/ts7/semantic-json.d.ts +13 -0
  569. package/dist/frontend/ts7/semantic-json.js +146 -0
  570. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  571. package/dist/frontend/ts7/semantic-json.test.js +57 -1
  572. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  573. package/dist/frontend/ts7/semantic-model.d.ts +15 -0
  574. package/dist/frontend/ts7/semantic-model.js +67 -19
  575. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  576. package/dist/frontend/ts7/semantic-model.test.js +3 -2
  577. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  578. package/dist/frontend/ts7/session.js +1 -1
  579. package/dist/frontend/ts7/session.js.map +1 -1
  580. package/dist/frontend/tsc-codes.d.ts +1 -1
  581. package/dist/frontend/tsc-codes.js +7 -0
  582. package/dist/frontend/tsc-codes.js.map +1 -1
  583. package/dist/frontend/type-mapper.d.ts +38 -6
  584. package/dist/frontend/type-mapper.js +265 -32
  585. package/dist/frontend/type-mapper.js.map +1 -1
  586. package/dist/frontend/type-mapper.test.js +1 -1
  587. package/dist/frontend/type-mapper.test.js.map +1 -1
  588. package/dist/frontend-process-args.d.ts +4 -0
  589. package/dist/frontend-process-args.js +52 -0
  590. package/dist/frontend-process-args.js.map +1 -0
  591. package/dist/frontend-process-args.test.d.ts +1 -0
  592. package/dist/frontend-process-args.test.js +47 -0
  593. package/dist/frontend-process-args.test.js.map +1 -0
  594. package/dist/frontend-process.d.ts +1 -0
  595. package/dist/frontend-process.js +23 -0
  596. package/dist/frontend-process.js.map +1 -0
  597. package/dist/heap-collection.d.ts +16 -0
  598. package/dist/heap-collection.js +42 -0
  599. package/dist/heap-collection.js.map +1 -0
  600. package/dist/heap-collection.test.d.ts +1 -0
  601. package/dist/heap-collection.test.js +59 -0
  602. package/dist/heap-collection.test.js.map +1 -0
  603. package/dist/heap-pressure.d.ts +2 -0
  604. package/dist/heap-pressure.js +12 -0
  605. package/dist/heap-pressure.js.map +1 -0
  606. package/dist/index.d.ts +7 -0
  607. package/dist/index.js +402 -86
  608. package/dist/index.js.map +1 -1
  609. package/dist/ir/array-length-stability.js +7 -0
  610. package/dist/ir/array-length-stability.js.map +1 -1
  611. package/dist/ir/array-length-stability.test.js +25 -0
  612. package/dist/ir/array-length-stability.test.js.map +1 -1
  613. package/dist/ir/builtin-effects.js +28 -0
  614. package/dist/ir/builtin-effects.js.map +1 -1
  615. package/dist/ir/builtin-signatures.d.ts +5 -1
  616. package/dist/ir/builtin-signatures.js +141 -12
  617. package/dist/ir/builtin-signatures.js.map +1 -1
  618. package/dist/ir/final-fields.d.ts +2 -1
  619. package/dist/ir/final-fields.js +2 -2
  620. package/dist/ir/final-fields.js.map +1 -1
  621. package/dist/ir/function-references.test.js +2 -0
  622. package/dist/ir/function-references.test.js.map +1 -1
  623. package/dist/ir/int32-slots.d.ts +13 -5
  624. package/dist/ir/int32-slots.js +112 -115
  625. package/dist/ir/int32-slots.js.map +1 -1
  626. package/dist/ir/int32-slots.test.js +3 -1
  627. package/dist/ir/int32-slots.test.js.map +1 -1
  628. package/dist/ir/integer-loop-facts.d.ts +9 -4
  629. package/dist/ir/integer-loop-facts.js +93 -18
  630. package/dist/ir/integer-loop-facts.js.map +1 -1
  631. package/dist/ir/integer-loops.d.ts +49 -0
  632. package/dist/ir/integer-loops.js +193 -39
  633. package/dist/ir/integer-loops.js.map +1 -1
  634. package/dist/ir/integer-loops.test.js +201 -1
  635. package/dist/ir/integer-loops.test.js.map +1 -1
  636. package/dist/ir/integer-ranges.test.js +64 -0
  637. package/dist/ir/integer-ranges.test.js.map +1 -1
  638. package/dist/ir/ir.d.ts +17 -2
  639. package/dist/ir/ir.js +3 -1
  640. package/dist/ir/ir.js.map +1 -1
  641. package/dist/ir/runtime-features.d.ts +31 -7
  642. package/dist/ir/runtime-features.js +138 -11
  643. package/dist/ir/runtime-features.js.map +1 -1
  644. package/dist/ir/tiers.js +1 -0
  645. package/dist/ir/tiers.js.map +1 -1
  646. package/dist/ir/traverse.d.ts +2 -0
  647. package/dist/ir/traverse.js +14 -2
  648. package/dist/ir/traverse.js.map +1 -1
  649. package/dist/ir/validate.js +56 -16
  650. package/dist/ir/validate.js.map +1 -1
  651. package/dist/library/ir-policy.js +10 -0
  652. package/dist/library/ir-policy.js.map +1 -1
  653. package/dist/library/library-cache.d.ts +2 -0
  654. package/dist/library/library-cache.js.map +1 -1
  655. package/dist/library/prepare.js +2 -0
  656. package/dist/library/prepare.js.map +1 -1
  657. package/dist/native/cli.js +5 -0
  658. package/dist/native/cli.js.map +1 -1
  659. package/dist/native/prepare.js +5 -1
  660. package/dist/native/prepare.js.map +1 -1
  661. package/dist/native/sanitizer.test.js +4 -1
  662. package/dist/native/sanitizer.test.js.map +1 -1
  663. package/dist/startup-cache.d.ts +1 -0
  664. package/dist/startup-cache.js +1 -0
  665. package/dist/startup-cache.js.map +1 -1
  666. package/dist/text-parts.d.ts +7 -0
  667. package/dist/text-parts.js +44 -0
  668. package/dist/text-parts.js.map +1 -1
  669. package/dist/text-parts.test.d.ts +1 -0
  670. package/dist/text-parts.test.js +46 -0
  671. package/dist/text-parts.test.js.map +1 -0
  672. package/dist/timing.d.ts +9 -2
  673. package/dist/timing.js +7 -4
  674. package/dist/timing.js.map +1 -1
  675. package/dist/wasm/translate.d.ts +4 -0
  676. package/dist/wasm/translate.js +2 -2
  677. package/dist/wasm/translate.js.map +1 -1
  678. package/package.json +21 -21
  679. package/shims/undici/core/client.ts +4 -4
  680. package/surface-manifest.json +19 -49
@@ -136,6 +136,11 @@ export interface ClassInfo {
136
136
  * lower-event-target.ts over any class rooted here. Subclass structs
137
137
  * embed the runtime prefix. */
138
138
  builtinEventTarget?: "target" | "event";
139
+ /** A class declared `extends Date` (builtins/date-classes.ts): its first
140
+ * field is the hidden `%time` value, super() sets it with the Date
141
+ * constructor's rules, and the Date methods it does not declare lower
142
+ * over that value. Subclasses inherit the field. */
143
+ extendsDate?: true;
139
144
  /** The synthetic LifetimeRegion class (@scriptc/experimental,
140
145
  * lifetime-regions.ts): its constructor is synthesized with the class,
141
146
  * and its methods lower at their call sites. */
@@ -265,6 +270,9 @@ export interface ClassInfo {
265
270
  path: InstantiationPath;
266
271
  family: ClassInfo;
267
272
  bindings: Map<ts.Symbol, IrType>;
273
+ /** The type arguments as checker types, for the resolutions that need
274
+ * literal identity (a conditional type over a literal argument). */
275
+ tsBindings: Map<ts.Symbol, ts.Type>;
268
276
  typeArgsText: string;
269
277
  ordinal: number;
270
278
  };
@@ -354,6 +362,9 @@ export interface GenericClassInfo {
354
362
  info: ClassInfo | null;
355
363
  poisoned?: boolean;
356
364
  }>;
365
+ /** The type parameters a conditional type in the class depends on
366
+ * (literalSensitiveTypeParams), computed on first instantiation. */
367
+ literalSensitive?: Set<ts.Symbol>;
357
368
  }
358
369
  /** The builtin Error hierarchy
359
370
  * as eagerly-registered ClassInfos: mapType names them the moment a lib
@@ -438,6 +449,7 @@ export declare function collectClassShapeInner(lowerer: Lowerer, decl: ts.ClassL
438
449
  family: ClassInfo;
439
450
  name: string;
440
451
  bindings: Map<ts.Symbol, IrType>;
452
+ tsBindings: Map<ts.Symbol, ts.Type>;
441
453
  typeArgsText: string;
442
454
  ordinal: number;
443
455
  },
@@ -777,6 +789,12 @@ export declare function throwingSetterFn(lowerer: Lowerer, info: ClassInfo, prop
777
789
  * order) — a base constructor's prologue, a derived constructor's
778
790
  * super()-return continuation. */
779
791
  export declare function fieldInitStmts(lowerer: Lowerer, info: ClassInfo, thisLocal: IrLocal): IrStmt[];
792
+ /** The comma chain of an `if` condition whose leading operands hold a
793
+ * super() call (`if (super(), r === 0) throw ...`, as minifiers join a
794
+ * super statement with the next test), or null. The if statement runs the
795
+ * chain's left operand as a statement first and tests its right operand,
796
+ * which is what the comma evaluates. */
797
+ export declare function superConditionLead(cond: ts.Expression): ts.BinaryExpression | null;
780
798
  /** Super statements initialize the base and then the derived fields on
781
799
  * whichever control-flow path executes. Repeated calls are explicitly
782
800
  * refused until native layouts can allocate a second receiver. */
@@ -1,3 +1,6 @@
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";
@@ -29,7 +32,7 @@ import { bodyReadsArguments } from "../arguments-usage.js";
29
32
  import { errorNameAfterField, errorViewFields } from "./error-name-order.js";
30
33
  import { checkedJsDocumentedParameter, documentedParameter, generatorMeta, } from "./call-signatures.js";
31
34
  import { omittedArgFor } from "./call-arguments.js";
32
- import { isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
35
+ import { checkerTypeDescription, isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
33
36
  import { canonicalBuiltinModule, cjsClassExprWholeExportOf, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, locOf, requireSpecOf, } from "../program.js";
34
37
  import { PoisonError, dynFallbackType, jsFuncNameOf, newFnCtx, own } from "./lowerer.js";
35
38
  import { isAssertClassNew } from "./assert-instances.js";
@@ -48,7 +51,7 @@ import { builtinEventTargetBaseOf, eventTargetApiMembers, eventTargetApiMethod,
48
51
  import { emitOverrideShapeReason, emitSpecSuperForward, emitterRooted, lowerEmitterSuperCall, } from "./lower-event-emitter.js";
49
52
  import { declSymbolOf } from "./lower-modules.js";
50
53
  import { classSymbolKeyOf, classSymbolKeyOfSymbol, symbolFieldDisplayName, } from "./symbol-fields.js";
51
- import { lowerHttpAgentNew, lowerHttpServerNew } from "./lower-server.js";
54
+ import { lowerHttpAgentNew, lowerHttpServerNew, lowerTlsSocketNew } from "./lower-server.js";
52
55
  import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, ambientUndefinedFnSymbolOf, contextualUndefReadType, fenceEarlyAliasUse, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "./lower-namespaces.js";
53
56
  import { mixinResultBindingClassOf } from "./lower-mixins.js";
54
57
  import { hasLexicalPrivateReference, hasStaticThis, rejectStaticThis } from "./static-this.js";
@@ -493,8 +496,10 @@ export function registerBuiltinErrorClasses(lowerer) {
493
496
  throwingSetters: [],
494
497
  staticFields: [],
495
498
  };
496
- if (base)
499
+ if (base) {
497
500
  base.subclasses.push(info);
501
+ lowerer.subclassLinks++;
502
+ }
498
503
  lowerer.classes.set(irName, info);
499
504
  }
500
505
  }
@@ -575,8 +580,10 @@ export function registerBuiltinStreamClasses(lowerer) {
575
580
  throwingSetters: [],
576
581
  staticFields: [],
577
582
  };
578
- if (base)
583
+ if (base) {
579
584
  base.subclasses.push(info);
585
+ lowerer.subclassLinks++;
586
+ }
580
587
  lowerer.classes.set(irName, info);
581
588
  }
582
589
  }
@@ -1358,6 +1365,7 @@ mixin) {
1358
1365
  : (computedBase?.classInfo ?? null);
1359
1366
  let genericBase;
1360
1367
  let callableBase;
1368
+ let extendsDate = false;
1361
1369
  let factoryBaseExpression;
1362
1370
  const adoptCallableBase = (expression) => {
1363
1371
  if (familyMode || inst || mixin)
@@ -1538,6 +1546,12 @@ mixin) {
1538
1546
  continue;
1539
1547
  lowerer.unsupported("SC1090", clause, "extending computed expressions");
1540
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
+ }
1541
1555
  const symbol = lowerer.resolveValueSymbol(t.expression);
1542
1556
  // Extending a REBINDABLE decorated class (analysis already ran —
1543
1557
  // this collection is a class expression or a generic
@@ -1738,7 +1752,8 @@ mixin) {
1738
1752
  };
1739
1753
  for (const member of decl.members.nodes) {
1740
1754
  if ((functionLocalClass(decl) || checkedStatics) &&
1741
- isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
1755
+ (isJsSourceFile(ts.getSourceFileOfNode(decl)) ||
1756
+ (functionLocalClass(decl) && ts.isMethodDeclaration(member))) &&
1742
1757
  (ts.isClassStaticBlockDeclaration(member) ||
1743
1758
  ts
1744
1759
  .getModifiers(member)
@@ -3394,7 +3409,8 @@ mixin) {
3394
3409
  // synthesized constructor forwards the same params to super).
3395
3410
  const ctorParams = ctor && !mixinForwarding
3396
3411
  ? lowerer.paramShapes(ctor.parameters.nodes)
3397
- : (base?.ctorParams ?? (callableBase ? [{ type: DYN, mode: "dynRest" }] : []));
3412
+ : (base?.ctorParams ??
3413
+ (callableBase || extendsDate ? [{ type: DYN, mode: "dynRest" }] : []));
3398
3414
  if (ctor &&
3399
3415
  !mixinForwarding &&
3400
3416
  isJsSourceFile(ts.getSourceFileOfNode(ctor)) &&
@@ -3421,6 +3437,7 @@ mixin) {
3421
3437
  // Redeclared INHERITED fields contribute no slot (their
3422
3438
  // initializers assign the prefix slot).
3423
3439
  fields: [
3440
+ ...(extendsDate ? [{ name: DATE_TIME_FIELD, type: DATE_T }] : []),
3424
3441
  ...(base?.def.fields ?? []),
3425
3442
  ...fieldOrder
3426
3443
  .filter((f) => f.redeclared !== true)
@@ -3452,6 +3469,7 @@ mixin) {
3452
3469
  base,
3453
3470
  ...(genericBase ? { genericBase } : {}),
3454
3471
  ...(callableBase ? { callableBase } : {}),
3472
+ ...(extendsDate ? { extendsDate: true } : {}),
3455
3473
  ...(factoryBaseExpression ? { factoryBaseExpression } : {}),
3456
3474
  subclasses: [],
3457
3475
  throwingSetters,
@@ -3492,6 +3510,7 @@ mixin) {
3492
3510
  path: inst.path,
3493
3511
  family: inst.family,
3494
3512
  bindings: inst.bindings,
3513
+ tsBindings: inst.tsBindings,
3495
3514
  typeArgsText: inst.typeArgsText,
3496
3515
  ordinal: inst.ordinal,
3497
3516
  };
@@ -3522,8 +3541,10 @@ mixin) {
3522
3541
  };
3523
3542
  lowerer.genericClassByDecl.set(decl, info.generic);
3524
3543
  }
3525
- if (base)
3544
+ if (base) {
3526
3545
  base.subclasses.push(info);
3546
+ lowerer.subclassLinks++;
3547
+ }
3527
3548
  lowerer.classes.set(className, info);
3528
3549
  if (computedBase && !functionLocalClass(decl)) {
3529
3550
  info.def.baseValueGlobal = `%g.${className}.computedBase`;
@@ -3625,8 +3646,10 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3625
3646
  .getTypeArguments(ref)
3626
3647
  .slice(0, gci.typeParams.length);
3627
3648
  const mapped = [];
3649
+ const tsArgs = [];
3628
3650
  if (args.length === gci.typeParams.length) {
3629
3651
  for (const a of args) {
3652
+ tsArgs.push(lowerer.typeParamTsResolver(a) ?? a);
3630
3653
  const m = lowerer.mapTypeOf(a, mapArgument);
3631
3654
  if (!m || m.kind === "void") {
3632
3655
  // An UNBOUND type parameter argument (`Box<T>` outside any
@@ -3647,9 +3670,34 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3647
3670
  if (!b)
3648
3671
  return null;
3649
3672
  mapped.push(b);
3650
- }
3651
- }
3652
- 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
+ };
3653
3701
  const existing = gci.instances.get(key);
3654
3702
  if (existing) {
3655
3703
  if (existing.info)
@@ -3663,18 +3711,40 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3663
3711
  lowerer.unsupported("SC1090", decl, `unbounded generic class instantiation ('${gci.baseName}' exceeded ${MAX_INSTANTIATION_RECURSION} recursive specializations on one demand path)`);
3664
3712
  }
3665
3713
  const ordinal = gci.instances.size;
3666
- 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}`, "");
3667
3730
  const entry = { name, info: null };
3668
3731
  gci.instances.set(key, entry);
3669
3732
  const bindings = new Map();
3670
3733
  gci.typeParams.forEach((tp, i) => bindings.set(tp, mapped[i]));
3671
- 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(", ");
3672
3740
  const typeArgsText = `<${rendered.length > 80 ? rendered.slice(0, 77) + "..." : rendered}>`;
3673
3741
  const prevBindings = lowerer.typeParamBindings;
3742
+ const prevTsBindings = lowerer.typeParamTsBindings;
3674
3743
  const prevContext = lowerer.instantiationContext;
3675
3744
  const previousPath = lowerer.genericInstantiationPath;
3676
3745
  lowerer.genericInstantiationPath = path;
3677
3746
  lowerer.typeParamBindings = bindings;
3747
+ lowerer.typeParamTsBindings = tsBindings;
3678
3748
  lowerer.instantiationContext = `instantiating class '${gci.baseName}' with ${typeArgsText}`;
3679
3749
  try {
3680
3750
  lowerer.collectClassShapeInner(decl, undefined, {
@@ -3682,6 +3752,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3682
3752
  family: gci.family,
3683
3753
  name,
3684
3754
  bindings,
3755
+ tsBindings,
3685
3756
  typeArgsText,
3686
3757
  ordinal,
3687
3758
  });
@@ -3696,6 +3767,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3696
3767
  }
3697
3768
  finally {
3698
3769
  lowerer.typeParamBindings = prevBindings;
3770
+ lowerer.typeParamTsBindings = prevTsBindings;
3699
3771
  lowerer.instantiationContext = prevContext;
3700
3772
  lowerer.genericInstantiationPath = previousPath;
3701
3773
  }
@@ -3710,6 +3782,65 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
3710
3782
  lowerer.onLateClassCollected?.(info);
3711
3783
  return { kind: "object", className: name };
3712
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
+ }
3713
3844
  /** Runs a member-lowering thunk under an INSTANTIATION's type-parameter
3714
3845
  * bindings (the generic-fn typeParamResolver mechanism) — the checker
3715
3846
  * keeps reporting the unsubstituted `T`s inside the shared body AST.
@@ -3745,11 +3876,13 @@ function withInstanceBindings(lowerer, info, fn) {
3745
3876
  }
3746
3877
  }
3747
3878
  const prevBindings = lowerer.typeParamBindings;
3879
+ const prevTsBindings = lowerer.typeParamTsBindings;
3748
3880
  const prevContext = lowerer.instantiationContext;
3749
3881
  const prevSuppress = lowerer.suppressStats;
3750
3882
  const previousPath = lowerer.genericInstantiationPath;
3751
3883
  lowerer.genericInstantiationPath = gi.path;
3752
3884
  lowerer.typeParamBindings = gi.bindings;
3885
+ lowerer.typeParamTsBindings = gi.tsBindings;
3753
3886
  lowerer.instantiationContext = `instantiating class '${gi.family.generic?.baseName ?? info.def.jsName ?? ""}' with ${gi.typeArgsText}`;
3754
3887
  lowerer.suppressStats = prevSuppress || gi.ordinal > 0;
3755
3888
  try {
@@ -3757,6 +3890,7 @@ function withInstanceBindings(lowerer, info, fn) {
3757
3890
  }
3758
3891
  finally {
3759
3892
  lowerer.typeParamBindings = prevBindings;
3893
+ lowerer.typeParamTsBindings = prevTsBindings;
3760
3894
  lowerer.instantiationContext = prevContext;
3761
3895
  lowerer.suppressStats = prevSuppress;
3762
3896
  lowerer.genericInstantiationPath = previousPath;
@@ -4484,6 +4618,13 @@ export function lowerStaticFieldRead(lowerer, expr) {
4484
4618
  return null;
4485
4619
  const loc = locOf(expr);
4486
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);
4487
4628
  if (hasRuntimeStatics(info) && !found?.field)
4488
4629
  return {
4489
4630
  kind: "dynKeyGet",
@@ -4687,9 +4828,10 @@ export function lowerClassExpressionInfo(lowerer, expr) {
4687
4828
  expr.members.nodes.some((member) => decoratorNodesOf(member).length ||
4688
4829
  (!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
4689
4830
  (ts.isClassStaticBlockDeclaration(member) ||
4690
- ts
4691
- .getModifiers(member)
4692
- ?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) ||
4831
+ (!ts.isMethodDeclaration(member) &&
4832
+ ts
4833
+ .getModifiers(member)
4834
+ ?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword)))) ||
4693
4835
  (ts.isMethodDeclaration(member) && member.typeParameters?.nodes.length)))) {
4694
4836
  lowerer.unsupported("SC1090", expr, "function-local classes with statics, decorators, or generic members");
4695
4837
  }
@@ -4932,9 +5074,49 @@ export function lowerClassExpression(lowerer, expr) {
4932
5074
  loc,
4933
5075
  });
4934
5076
  }
4935
- return info.localClass
4936
- ? initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value)
4937
- : 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;
4938
5120
  }
4939
5121
  /** The EXACT class a receiver expression is statically known to BE (not
4940
5122
  * merely be typed by): the class name itself, or a `const` binding
@@ -5195,6 +5377,13 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
5195
5377
  const runtimeStatic = directRuntimeStaticCall(lowerer, call, access, info, throughValue);
5196
5378
  if (runtimeStatic)
5197
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
+ }
5198
5387
  if ((hasRuntimeStatics(info) && !findStaticOn(lowerer, info, access.name.text)?.field) ||
5199
5388
  (info.callableBase &&
5200
5389
  !findStaticOn(lowerer, info, access.name.text) &&
@@ -6288,7 +6477,7 @@ function lowerClassCtorInner(lowerer, info) {
6288
6477
  lowerer.ctx.argumentsLocal = local;
6289
6478
  }
6290
6479
  body.push(...declared.prologue);
6291
- if (!ctorBase && !info.callableBase) {
6480
+ if (!ctorBase && !info.callableBase && !info.extendsDate) {
6292
6481
  // Node's base-class order: field initializers run at the start
6293
6482
  // of construction, the parameter-property assignments open the
6294
6483
  // constructor body (probed — a field initializer reading a
@@ -6303,7 +6492,7 @@ function lowerClassCtorInner(lowerer, info) {
6303
6492
  }
6304
6493
  }
6305
6494
  else {
6306
- if (ctorBase || info.callableBase) {
6495
+ if (ctorBase || info.callableBase || info.extendsDate) {
6307
6496
  // Synthetic forwarding params (the inherited ABI signature).
6308
6497
  // Nothing references them by symbol — only the super call below,
6309
6498
  // which forwards the already-completed values UNCHANGED (defaults
@@ -6486,7 +6675,7 @@ export function classIteratorDrainCall(lowerer, src, loc, elemT) {
6486
6675
  const key = `${cit.className}:${typeKey(outElem)}`;
6487
6676
  let name = lowerer.iterDrainHelpers.get(key);
6488
6677
  if (!name) {
6489
- name = `%iter.drain.${lowerer.iterDrainHelpers.size}`;
6678
+ name = keyedHelperName(lowerer, "%iter.drain", key);
6490
6679
  lowerer.iterDrainHelpers.set(key, name);
6491
6680
  const recvT = { kind: "object", className: cit.className };
6492
6681
  const recvRef = { kind: "varRef", localId: "r.0", type: recvT, loc };
@@ -6594,7 +6783,7 @@ export function classIteratorRestDrainCall(lowerer, cit, itVal, loc) {
6594
6783
  const key = `it:${cit.iterT.className}`;
6595
6784
  let name = lowerer.iterDrainHelpers.get(key);
6596
6785
  if (!name) {
6597
- name = `%iter.drain.${lowerer.iterDrainHelpers.size}`;
6786
+ name = keyedHelperName(lowerer, "%iter.drain", key);
6598
6787
  lowerer.iterDrainHelpers.set(key, name);
6599
6788
  const itRef = { kind: "varRef", localId: "it.0", type: cit.iterT, loc };
6600
6789
  const outRef = { kind: "varRef", localId: "out.0", type: outT, loc };
@@ -7089,12 +7278,39 @@ function superCallInStatementPosition(call) {
7089
7278
  const parent = node.parent;
7090
7279
  if (ts.isExpressionStatement(parent))
7091
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
+ }
7092
7285
  const comma = ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.CommaToken;
7093
7286
  if (!comma && !ts.isParenthesizedExpression(parent))
7094
7287
  return false;
7095
7288
  node = parent;
7096
7289
  }
7097
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
+ }
7098
7314
  /** Super statements initialize the base and then the derived fields on
7099
7315
  * whichever control-flow path executes. Repeated calls are explicitly
7100
7316
  * refused until native layouts can allocate a second receiver. */
@@ -7126,9 +7342,11 @@ export function lowerDerivedCtorBody(lowerer, info, thisLocal, forward) {
7126
7342
  loc,
7127
7343
  },
7128
7344
  ];
7129
- if (info.callableBase) {
7345
+ if (info.callableBase || info.extendsDate) {
7130
7346
  if (superCall.arguments.nodes.some(ts.isSpreadElement))
7131
- 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");
7132
7350
  const pack = {
7133
7351
  kind: "dynArrLit",
7134
7352
  elems: superCall.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
@@ -7271,6 +7489,8 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
7271
7489
  type: { kind: "object", className: info.def.name },
7272
7490
  loc,
7273
7491
  };
7492
+ if (info.extendsDate)
7493
+ return dateSuperCall(thisRef, info, args[0], loc);
7274
7494
  if (info.callableBase)
7275
7495
  return {
7276
7496
  kind: "exprStmt",
@@ -7373,6 +7593,22 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
7373
7593
  * super dispatch is static in JS too, never through the dynamic class. */
7374
7594
  export function lowerSuperMethodCall(lowerer, call, access) {
7375
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
+ }
7376
7612
  if (!cls?.base) {
7377
7613
  // tsc rejects super outside derived-class bodies first; defensive.
7378
7614
  lowerer.unsupported("SC1090", access, "'super' outside a derived class");
@@ -7420,6 +7656,18 @@ export function lowerSuperMethodCall(lowerer, call, access) {
7420
7656
  // `super.dispatchEvent(e)`, `super.preventDefault()`: the inherited
7421
7657
  // runtime members over this method's own `this` (subclasses cannot
7422
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
+ }
7423
7671
  if (eventTargetApiMethod(cls.base, access.name.text)) {
7424
7672
  const thisL = lowerer.resolveThis();
7425
7673
  if (!thisL)
@@ -8057,6 +8305,13 @@ export function lowerNew(lowerer, expr) {
8057
8305
  if (httpServer)
8058
8306
  return httpServer;
8059
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
+ }
8060
8315
  // `new http.Agent(opts?)` / `new https.Agent(opts?)` — the Agent
8061
8316
  // handle (lower-server): getName/destroy/counters through the dyn
8062
8317
  // handle ops, requests thread it via the agent option.
@@ -8782,7 +9037,7 @@ export function lowerNew(lowerer, expr) {
8782
9037
  const key = `x509.record:${isBytes ? "bytes" : "str"}`;
8783
9038
  let helper = lowerer.valueHelpers.get(key);
8784
9039
  if (!helper) {
8785
- helper = `%x509.record.${lowerer.valueHelpers.size}`;
9040
+ helper = keyedHelperName(lowerer, "%x509.record", key);
8786
9041
  lowerer.valueHelpers.set(key, helper);
8787
9042
  const dataT = data.type;
8788
9043
  const dRef = { kind: "varRef", localId: "d.0", type: dataT, loc };