@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,3 +1,4 @@
1
+ import { keyedHelperName } from "./stable-names.js";
1
2
  import { dynUndefinedExpr, nodeThrowExpr, boolLit, numLit, strLit, varRef, } from "../../ir/build.js";
2
3
  import * as ts from "../ts7/adapter.js";
3
4
  import { ladderFenceExpr } from "./lowerer.js";
@@ -124,7 +125,7 @@ export function voidizedCallback(lowerer, cb, loc) {
124
125
  const toT = funcOf([...fromT.params], VOID);
125
126
  const key = `server.voidcb:${typeKey(fromT)}`;
126
127
  const existing = lowerer.arrHofHelpers.get(key);
127
- const name = existing ?? `%server.voidcb.${lowerer.arrHofHelpers.size}`;
128
+ const name = existing ?? keyedHelperName(lowerer, "%server.voidcb", key);
128
129
  if (!existing) {
129
130
  lowerer.arrHofHelpers.set(key, name);
130
131
  const impl = `${name}.impl`;
@@ -197,7 +198,7 @@ function lowerSocketDynListener(lowerer, node, what) {
197
198
  function receiverReturningCall(lowerer, fn, callArgs, recvT, loc, opts) {
198
199
  const key = `server.recvret:${fn}:${opts?.prefix?.fn ?? ""}:${(opts?.mainArgIndices ?? []).join(".")}:${callArgs.map((a) => typeKey(a.type)).join(",")}`;
199
200
  const existing = lowerer.arrHofHelpers.get(key);
200
- const name = existing ?? `%server.recvret.${lowerer.arrHofHelpers.size}`;
201
+ const name = existing ?? keyedHelperName(lowerer, "%server.recvret", key);
201
202
  if (!existing) {
202
203
  lowerer.arrHofHelpers.set(key, name);
203
204
  const params = callArgs.map((a, i) => ({ localId: `p${i}.0`, name: `p${i}`, type: a.type }));
@@ -472,7 +473,7 @@ function h2HeadersCallbackAdapter(lowerer, node, what, handleKind, withStatus, l
472
473
  const toT = funcOf(abiParams.map((p) => p.type), VOID);
473
474
  const key = `h2.hdrcb:${handleKind}:${withStatus}:${typeKey(fromT)}:${shapeId ?? ""}`;
474
475
  const existing = lowerer.arrHofHelpers.get(key);
475
- const name = existing ?? `%h2.hdrcb.${lowerer.arrHofHelpers.size}`;
476
+ const name = existing ?? keyedHelperName(lowerer, "%h2.hdrcb", key);
476
477
  if (!existing) {
477
478
  lowerer.arrHofHelpers.set(key, name);
478
479
  const impl = `${name}.impl`;
@@ -758,6 +759,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
758
759
  let port = null;
759
760
  let host = null;
760
761
  let lookup = null;
762
+ let dynLookup = null;
761
763
  let autoSelect = false;
762
764
  let attempt = null;
763
765
  let optionThrow = null;
@@ -840,7 +842,19 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
840
842
  lowerer.noLowering(`${member} with a shorthand lookup option`, prop, "spell it out: lookup: theResolver");
841
843
  }
842
844
  lookup = lowerer.lowerExpr(initializer);
843
- if (!lookupFnShapeOk(lowerer, lookup.type)) {
845
+ // A lookup of Node's own type (net.LookupFunction: options and a
846
+ // callback taking an address string or list) crosses as a checked-
847
+ // dynamic function the runtime calls the way Node's dial does.
848
+ if (!lookupFnShapeOk(lowerer, lookup.type) &&
849
+ lookup.type.kind === "func" &&
850
+ lookup.type.params.length === 3 &&
851
+ canBoxFuncIntoDyn(lookup.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))) {
852
+ dynLookup = { kind: "dynFrom", value: lookup, type: DYN, loc: locOf(initializer) };
853
+ }
854
+ else if (lookup.type.kind === "dyn") {
855
+ dynLookup = lookup;
856
+ }
857
+ else if (!lookupFnShapeOk(lowerer, lookup.type)) {
844
858
  lowerer.noLowering(`a ${member} 'lookup' option of '${lowerer.fmt(lookup.type)}' values`, prop, "the lowered resolver is (hostname: string, options: unknown, callback: (err: NodeJS.ErrnoException | null, addresses: { address: string; family: number }[]) => void) => void");
845
859
  }
846
860
  }
@@ -869,6 +883,18 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
869
883
  loc,
870
884
  };
871
885
  }
886
+ if (dynLookup !== null) {
887
+ if (args.length !== 1) {
888
+ lowerer.noLowering(`${member} with a lookup and a connect listener`, expr, "register the listener separately: socket.once('connect', ...)");
889
+ }
890
+ return {
891
+ kind: "libCall",
892
+ fn: "net.connectLookupDyn",
893
+ args: [port, host, dynLookup],
894
+ type: NETSOCKET_T,
895
+ loc,
896
+ };
897
+ }
872
898
  if (lookup !== null) {
873
899
  if (!autoSelect) {
874
900
  lowerer.noLowering(`${member} with a lookup but no autoSelectFamily: true`, optsNode, "the lookup form dials every answered address in order — Node does that under autoSelectFamily: true, so spell it");
@@ -2293,6 +2319,18 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
2293
2319
  loc,
2294
2320
  };
2295
2321
  }
2322
+ if (event === "secure") {
2323
+ // The handshake's completion on a TLS socket (after secureConnect on
2324
+ // a client); plain sockets never fire it.
2325
+ const { cb } = lowerCallbackArg(lowerer, args[1], "secure listeners", 0, () => false, "use ()", []);
2326
+ return {
2327
+ kind: "libCall",
2328
+ fn: "tls.sockOnSecure",
2329
+ args: [receiver, cb, once],
2330
+ type: VOID,
2331
+ loc,
2332
+ };
2333
+ }
2296
2334
  if (event === "session") {
2297
2335
  // The received-ticket event: fires once per TLS client socket with
2298
2336
  // the serialized session (a Buffer); plain sockets never fire it.
@@ -2305,7 +2343,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
2305
2343
  loc,
2306
2344
  };
2307
2345
  }
2308
- lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "lookup", "ready", "timeout", "readable", "secureConnect", and "session" are the supported socket events (as literals)');
2346
+ lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "lookup", "ready", "timeout", "readable", "secureConnect", "secure", and "session" are the supported socket events (as literals)');
2309
2347
  }
2310
2348
  lowerer.noLowering(`Socket.${name}`, call, "write, end, destroy, pipe, setTimeout, setKeepAlive, setNoDelay, the address fields, read, unshift, and on/once of data/end/close/error/connect/ready/timeout/readable are the supported Socket members", lowerer.checker.getSymbolAtLocation(access.name));
2311
2349
  }
@@ -2745,7 +2783,7 @@ export function lowerCompatReqStreamOptionalCall(lowerer, call) {
2745
2783
  type: unionT,
2746
2784
  loc,
2747
2785
  };
2748
- const id = `chain.${lowerer.chainCounter++}`;
2786
+ const id = lowerer.closureName(loc, "", "chain");
2749
2787
  const body = lowerH2StreamMethodCall(lowerer, call, call.expression, {
2750
2788
  kind: "chainRecv",
2751
2789
  id,
@@ -3463,7 +3501,7 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
3463
3501
  const hasMax = opts.maxHeaderSize !== null;
3464
3502
  const key = `server.opts:${opts.joinDup ? 1 : 0}:${opts.allowMissingHost ? 1 : 0}:${hasBuffer ? 1 : 0}:${hasMax ? 1 : 0}`;
3465
3503
  const existing = lowerer.arrHofHelpers.get(key);
3466
- const name = existing ?? `%server.opts.${lowerer.arrHofHelpers.size}`;
3504
+ const name = existing ?? keyedHelperName(lowerer, "%server.opts", key);
3467
3505
  if (!existing) {
3468
3506
  lowerer.arrHofHelpers.set(key, name);
3469
3507
  const params = [
@@ -3685,6 +3723,96 @@ export function lowerHttpServerNew(lowerer, expr) {
3685
3723
  return null;
3686
3724
  return lowerHttpCreateServerForms(lowerer, expr, "new http.Server", locOf(expr));
3687
3725
  }
3726
+ /** `new tls.TLSSocket(socket, options)` in server mode: a new TLS socket
3727
+ * takes over the socket's connection and runs the server handshake
3728
+ * (scr_tls_wrap_socket). The options record reads at runtime, the
3729
+ * tls.connect precedent. A literal's secureContext member is a
3730
+ * SecureContext handle, which the checked-dynamic record cannot hold, so
3731
+ * it passes as its own argument; members after it must be free of side
3732
+ * effects, because it is read after them. Node never starts the handshake
3733
+ * of a client-mode TLSSocket, so a literal without isServer: true fences
3734
+ * here. */
3735
+ export function lowerTlsSocketNew(lowerer, expr) {
3736
+ const callee = expr.expression;
3737
+ const isTlsSocket = (ts.isPropertyAccessExpression(callee) &&
3738
+ callee.name.text === "TLSSocket" &&
3739
+ lowerer.builtinMemberOf(callee)?.module === "tls") ||
3740
+ (ts.isIdentifier(callee) &&
3741
+ lowerer.builtinImportOf(callee)?.module === "tls" &&
3742
+ lowerer.builtinImportOf(callee)?.member === "TLSSocket");
3743
+ if (!isTlsSocket)
3744
+ return null;
3745
+ const loc = locOf(expr);
3746
+ const HINT = "the supported forms are new tls.TLSSocket(socket, { isServer: true, cert, key }) and new tls.TLSSocket(socket, { isServer: true, secureContext })";
3747
+ const args = expr.arguments?.nodes ?? [];
3748
+ if (args.length !== 2 || args.some(ts.isSpreadElement)) {
3749
+ lowerer.noLowering(`new tls.TLSSocket with ${args.length} argument(s)`, expr, HINT);
3750
+ }
3751
+ const socket = lowerer.lowerExpr(args[0]);
3752
+ if (socket.type.kind !== "netSocket") {
3753
+ lowerer.noLowering(`new tls.TLSSocket over a '${lowerer.fmt(socket.type)}' value`, args[0], "the wrapped value must be a net.Socket (a server connection or an http CONNECT socket)");
3754
+ }
3755
+ let optsNode = args[1];
3756
+ while (ts.isParenthesizedExpression(optsNode))
3757
+ optsNode = optsNode.expression;
3758
+ if (!ts.isObjectLiteralExpression(optsNode)) {
3759
+ const o = lowerer.lowerExpr(optsNode);
3760
+ const opts = o.type.kind === "dyn"
3761
+ ? o
3762
+ : canConvertToDyn(o.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))
3763
+ ? { kind: "dynFrom", value: o, type: DYN, loc }
3764
+ : lowerer.noLowering(`new tls.TLSSocket with a '${lowerer.fmt(o.type)}' options record`, optsNode, `${HINT} — a secureContext member lowers in an options object literal`);
3765
+ return { kind: "libCall", fn: "tls.wrapSocket", args: [socket, opts], type: NETSOCKET_T, loc };
3766
+ }
3767
+ const props = optsNode.properties.nodes;
3768
+ const nameOf = (p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
3769
+ (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))
3770
+ ? p.name.text
3771
+ : null;
3772
+ const isServer = props.find((p) => nameOf(p) === "isServer");
3773
+ if (isServer === undefined ||
3774
+ (ts.isPropertyAssignment(isServer) && isServer.initializer.kind === ts.SyntaxKind.FalseKeyword)) {
3775
+ lowerer.noLowering("new tls.TLSSocket in client mode", optsNode, "Node starts no handshake for a client-mode TLSSocket — pass isServer: true for the server side; tls.connect makes client sockets");
3776
+ }
3777
+ const ctxIndex = props.findIndex((p) => nameOf(p) === "secureContext");
3778
+ if (ctxIndex < 0) {
3779
+ const opts = lowerDynObjectLiteral(lowerer, optsNode);
3780
+ return { kind: "libCall", fn: "tls.wrapSocket", args: [socket, opts], type: NETSOCKET_T, loc };
3781
+ }
3782
+ const ctxProp = props[ctxIndex];
3783
+ const ctxNode = ts.isShorthandPropertyAssignment(ctxProp)
3784
+ ? ctxProp.name
3785
+ : ctxProp.initializer;
3786
+ for (const p of props.slice(ctxIndex + 1)) {
3787
+ const pure = ts.isShorthandPropertyAssignment(p) ||
3788
+ (ts.isPropertyAssignment(p) && sideEffectFreeOptionValue(p.initializer));
3789
+ if (!pure) {
3790
+ lowerer.noLowering("a new tls.TLSSocket options literal with side effects after secureContext", p, "secureContext is read after the other members — move it to the end of the object");
3791
+ }
3792
+ }
3793
+ let ctx = null;
3794
+ const opts = lowerDynObjectLiteral(lowerer, optsNode, (node, value) => {
3795
+ if (node !== ctxNode)
3796
+ return lowerer.coerceToExpected(value, DYN);
3797
+ if (value.type.kind !== "secureCtx") {
3798
+ lowerer.noLowering(`a '${lowerer.fmt(value.type)}' secureContext`, node, "pass a tls.createSecureContext({ cert, key }) result");
3799
+ }
3800
+ ctx = value;
3801
+ return {
3802
+ kind: "dynFrom",
3803
+ value: { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc },
3804
+ type: DYN,
3805
+ loc,
3806
+ };
3807
+ });
3808
+ return {
3809
+ kind: "libCall",
3810
+ fn: "tls.wrapSocketCtx",
3811
+ args: [socket, opts, ctx],
3812
+ type: NETSOCKET_T,
3813
+ loc,
3814
+ };
3815
+ }
3688
3816
  /** Module-function calls on http import bindings: createServer([options][,
3689
3817
  * handler]) and the call-form Server (Node's constructor works without
3690
3818
  * `new` — test/parallel's http.Server(fn) spelling). The handler takes
@@ -3733,13 +3861,15 @@ function lowerHttpModuleCall(lowerer, expr, bi, loc) {
3733
3861
  * runtime-valued (dyn) entry rides the tls.pemDyn extraction, throwing
3734
3862
  * the fence at runtime for non-PEM kinds (the divergence-66 stance).
3735
3863
  * Every other key fences by name; SNICallback gets the pointed hint. */
3736
- function lowerTlsServerOptions(lowerer, node, what) {
3864
+ function lowerTlsServerOptions(lowerer, node, what, allowSni = false) {
3737
3865
  if (!ts.isObjectLiteralExpression(node)) {
3738
3866
  lowerer.noLowering(`${what} with a non-literal options argument`, node, "pass the options as an object literal: { cert, key }");
3739
3867
  }
3740
3868
  const loc = locOf(node);
3741
3869
  let cert = null;
3742
3870
  let key = null;
3871
+ let sni;
3872
+ let pendingSni = null;
3743
3873
  for (const prop of node.properties.nodes) {
3744
3874
  let initializer;
3745
3875
  if (ts.isPropertyAssignment(prop) &&
@@ -3753,6 +3883,25 @@ function lowerTlsServerOptions(lowerer, node, what) {
3753
3883
  lowerer.noLowering(`${what} options with computed keys or spreads`, prop, "each option must be a plain `name: value` (or shorthand) entry with a literal key");
3754
3884
  }
3755
3885
  const k = prop.name.text;
3886
+ if (k === "SNICallback" && allowSni) {
3887
+ const value = initializer !== null
3888
+ ? lowerer.lowerExpr(initializer)
3889
+ : lowerer.lowerShorthandValue(prop);
3890
+ const checked = checkSniCallbackValue(lowerer, value, prop, what);
3891
+ if (cert !== null && key !== null) {
3892
+ sni = checked;
3893
+ }
3894
+ else {
3895
+ // The runtime call reads cert and key first. A cert or key entry
3896
+ // after the callback can change the binding the callback reads,
3897
+ // so the callback is saved ahead of the next of them, in source
3898
+ // order.
3899
+ const saved = lowerer.declareHiddenLocal("%sniCallback", checked.type);
3900
+ pendingSni = { kind: "varDecl", localId: saved.id, init: checked, loc: locOf(prop) };
3901
+ sni = varRef(saved.id, checked.type, locOf(prop));
3902
+ }
3903
+ continue;
3904
+ }
3756
3905
  if (k !== "cert" && k !== "key") {
3757
3906
  const init = ts.isPropertyAssignment(prop) ? prop.initializer : null;
3758
3907
  if ((k === "ca" || k === "rejectUnauthorized") &&
@@ -3767,7 +3916,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
3767
3916
  continue; // Node's false default, spelled out
3768
3917
  }
3769
3918
  fenceOrDropOptionKey(lowerer, prop, k, what, TLS_SERVER_DOCUMENTED_OPTIONS, "cert and key (PEM strings or Buffers) are the supported options", {
3770
- SNICallback: "SNICallback lowers only on http2.createSecureServer({ allowHTTP1: true, ... }) — serve one cert/key pair here",
3919
+ SNICallback: "SNICallback lowers on tls.createServer and http2.createSecureServer({ allowHTTP1: true, ... }) — serve one cert/key pair here",
3771
3920
  requestCert: "client-certificate handshakes are not modeled (SEMANTICS.md divergence 55) — requestCert: false is the lowered value",
3772
3921
  });
3773
3922
  continue; // an undocumented key, dropped like Node drops it
@@ -3797,6 +3946,10 @@ function lowerTlsServerOptions(lowerer, node, what) {
3797
3946
  else if (v.type.kind !== "string" && !(v.type.kind === "bytes" && v.type.elem === "u8")) {
3798
3947
  lowerer.noLowering(`a ${what} '${k}' option of '${lowerer.fmt(v.type)}' values`, prop, "cert/key are PEM strings or Buffers here");
3799
3948
  }
3949
+ if (pendingSni !== null) {
3950
+ v = { kind: "seqExpr", stmts: [pendingSni], result: v, type: v.type, loc };
3951
+ pendingSni = null;
3952
+ }
3800
3953
  if (k === "cert")
3801
3954
  cert = v;
3802
3955
  else
@@ -3805,7 +3958,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
3805
3958
  if (cert === null || key === null) {
3806
3959
  lowerer.noLowering(`${what} without both cert and key`, node, "the supported options object is { cert, key } (PEM strings or Buffers)");
3807
3960
  }
3808
- return { cert, key };
3961
+ return sni === undefined ? { cert, key } : { cert, key, sni };
3809
3962
  }
3810
3963
  /** The options argument of tls/https createServer, split three ways: an
3811
3964
  * object literal takes the static walk above; a RUNTIME (dyn) value — the
@@ -3832,20 +3985,35 @@ const TLS_VALIDATED_OPTIONS = new Set([
3832
3985
  "ticketKeys",
3833
3986
  ]);
3834
3987
  /** True when a literal options bag must ride the runtime walker: JS uses
3835
- * it for the typed TLS validation ladders, and HTTPS uses it for
3988
+ * it for the typed TLS validation ladders, HTTPS uses it for
3836
3989
  * keepAliveTimeoutBuffer so the HTTP option is consumed without losing
3837
- * the literal's evaluation order. */
3838
- function tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions = false) {
3990
+ * the literal's evaluation order, and `runtimeKeys` names options only the
3991
+ * runtime walk implements (tls.createServer's ALPNProtocols). */
3992
+ function tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions = false, runtimeKeys = new Set()) {
3839
3993
  const jsSource = isJsSourceFile(ts.getSourceFileOfNode(node));
3840
3994
  return node.properties.nodes.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
3841
3995
  (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
3842
3996
  ((includeHttpTimeoutOptions && p.name.text === "keepAliveTimeoutBuffer") ||
3997
+ runtimeKeys.has(p.name.text) ||
3843
3998
  (jsSource && TLS_VALIDATED_OPTIONS.has(p.name.text))));
3844
3999
  }
3845
- function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptions = false) {
3846
- if (ts.isObjectLiteralExpression(node) &&
3847
- !tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions)) {
3848
- return lowerTlsServerOptions(lowerer, node, what);
4000
+ /** tls.createServer options the runtime walk implements and the literal
4001
+ * cert/key lowering does not. */
4002
+ const TLS_SERVER_RUNTIME_OPTIONS = new Set([
4003
+ "ALPNProtocols",
4004
+ "minVersion",
4005
+ "maxVersion",
4006
+ ]);
4007
+ function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptions = false, runtimeKeys = new Set(), allowSni = false) {
4008
+ if (ts.isObjectLiteralExpression(node)) {
4009
+ if (!tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions, runtimeKeys))
4010
+ return lowerTlsServerOptions(lowerer, node, what, allowSni);
4011
+ const sniOption = node.properties.nodes.find((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
4012
+ (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
4013
+ p.name.text === "SNICallback");
4014
+ if (allowSni && sniOption !== undefined) {
4015
+ lowerer.noLowering(`${what} with SNICallback and options the runtime walk reads`, sniOption, "SNICallback lowers with cert and key; ALPNProtocols, minVersion, maxVersion and the validated options are not combined with it yet");
4016
+ }
3849
4017
  }
3850
4018
  const v = lowerer.lowerExpr(node);
3851
4019
  if (v.type.kind === "dyn")
@@ -3865,13 +4033,13 @@ function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptio
3865
4033
  * connect(options[, cb]) and connect(port[, host][, options][, cb]) with
3866
4034
  * a RUNTIME options record (the checked-dynamic JS lane's shape — a dyn
3867
4035
  * value, or a record that converts): the runtime walk implements
3868
- * port/host/rejectUnauthorized/ca/servername and throws the catchable
4036
+ * port/host/socket/rejectUnauthorized/ca/servername/ALPNProtocols/minVersion/maxVersion/timeout and throws the catchable
3869
4037
  * fence for other documented members (the divergence-66 stance). The
3870
4038
  * callback (and 'secureConnect'/'connect' listeners) fires
3871
4039
  * post-handshake — Node's secureConnect timing. */
3872
4040
  function lowerTlsConnectCall(lowerer, expr, loc) {
3873
4041
  const args = expr.arguments.nodes;
3874
- const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/rejectUnauthorized/ca/servername";
4042
+ const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/socket/rejectUnauthorized/ca/servername/ALPNProtocols/minVersion/maxVersion/timeout";
3875
4043
  if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
3876
4044
  lowerer.noLowering(`tls.connect with ${args.length} arguments`, expr, FORMS_HINT);
3877
4045
  }
@@ -3924,7 +4092,19 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
3924
4092
  // The options value rides whole to the runtime walk: dyn passes
3925
4093
  // directly; a typed record that converts boxes into the checked-dynamic tree.
3926
4094
  let opts;
3927
- if (optsNode !== null) {
4095
+ let literal = optsNode;
4096
+ while (literal !== null && ts.isParenthesizedExpression(literal))
4097
+ literal = literal.expression;
4098
+ if (literal !== null &&
4099
+ ts.isObjectLiteralExpression(literal) &&
4100
+ literal.properties.nodes.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
4101
+ ts.isIdentifier(p.name) &&
4102
+ p.name.text === "socket")) {
4103
+ // A socket member is a handle the record form cannot box: the literal
4104
+ // builds the checked-dynamic object member by member.
4105
+ opts = lowerDynObjectLiteral(lowerer, literal);
4106
+ }
4107
+ else if (optsNode !== null) {
3928
4108
  const o = lowerer.lowerExpr(optsNode);
3929
4109
  if (o.type.kind === "dyn") {
3930
4110
  opts = o;
@@ -3967,10 +4147,24 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
3967
4147
  if (args.length < 1 || args.length > 2) {
3968
4148
  lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, socket => ...)");
3969
4149
  }
3970
- const opts = lowerTlsServerOptionsOrDyn(lowerer, args[0], "tls.createServer");
4150
+ const opts = lowerTlsServerOptionsOrDyn(lowerer, args[0], "tls.createServer", false, TLS_SERVER_RUNTIME_OPTIONS, true);
3971
4151
  if (args.length === 1) {
3972
- return opts.dyn !== undefined
3973
- ? { kind: "libCall", fn: "tls.createServerDyn", args: [opts.dyn], type: NETSERVER_T, loc }
4152
+ if (opts.dyn !== undefined)
4153
+ return {
4154
+ kind: "libCall",
4155
+ fn: "tls.createServerDyn",
4156
+ args: [opts.dyn],
4157
+ type: NETSERVER_T,
4158
+ loc,
4159
+ };
4160
+ return opts.sni !== undefined
4161
+ ? {
4162
+ kind: "libCall",
4163
+ fn: "tls.createServerSni",
4164
+ args: [opts.cert, opts.key, opts.sni],
4165
+ type: NETSERVER_T,
4166
+ loc,
4167
+ }
3974
4168
  : {
3975
4169
  kind: "libCall",
3976
4170
  fn: "tls.createServer",
@@ -3980,13 +4174,21 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
3980
4174
  };
3981
4175
  }
3982
4176
  const { cb } = lowerCallbackArg(lowerer, args[1], "secureConnection listeners", 1, (p) => p.kind === "netSocket", "use (socket) or ()", [NETSOCKET_T]);
3983
- return opts.dyn !== undefined
3984
- ? {
4177
+ if (opts.dyn !== undefined)
4178
+ return {
3985
4179
  kind: "libCall",
3986
4180
  fn: "tls.createServerDynCb",
3987
4181
  args: [opts.dyn, cb],
3988
4182
  type: NETSERVER_T,
3989
4183
  loc,
4184
+ };
4185
+ return opts.sni !== undefined
4186
+ ? {
4187
+ kind: "libCall",
4188
+ fn: "tls.createServerSniCb",
4189
+ args: [opts.cert, opts.key, opts.sni, cb],
4190
+ type: NETSERVER_T,
4191
+ loc,
3990
4192
  }
3991
4193
  : {
3992
4194
  kind: "libCall",
@@ -4279,6 +4481,40 @@ const HTTP2_IGNORED_TUNING_OPTIONS = new Set([
4279
4481
  const SNI_HINT = "SNICallback lowers as a direct option or the conditional spread " +
4280
4482
  "...(x ? { SNICallback: x } : {}) — the callback is (servername, cb) => void " +
4281
4483
  "with cb: (err: Error | null, ctx?: tls.SecureContext) => void";
4484
+ /** An SNICallback option value: (servername: string, cb) => void where cb
4485
+ * is (err: Error | null, ctx?: SecureContext) => void, or that function
4486
+ * unioned with undefined (no callback). cb may declare fewer params (the
4487
+ * emitted answer thunk matches its ABI), but what it does declare must
4488
+ * carry the arms the thunk decodes. */
4489
+ function lowerSniCallbackValue(lowerer, node, blame, what) {
4490
+ return checkSniCallbackValue(lowerer, lowerer.lowerExpr(node), blame, what);
4491
+ }
4492
+ function checkSniCallbackValue(lowerer, v, blame, what) {
4493
+ const shapeOk = (t) => {
4494
+ if (t.kind !== "func" || t.ret.kind !== "void" || t.params.length !== 2)
4495
+ return false;
4496
+ if (t.params[0].kind !== "string")
4497
+ return false;
4498
+ const cbT = t.params[1];
4499
+ if (cbT.kind !== "func" || cbT.ret.kind !== "void" || cbT.params.length > 2)
4500
+ return false;
4501
+ const armKinds = (u) => u.kind === "union" ? (lowerer.unions.get(u.unionId)?.arms ?? []).map((a) => a.kind) : [];
4502
+ const p0 = cbT.params[0];
4503
+ if (p0 !== undefined && !armKinds(p0).includes("nullT"))
4504
+ return false;
4505
+ const p1 = cbT.params[1];
4506
+ if (p1 !== undefined && !armKinds(p1).includes("secureCtx"))
4507
+ return false;
4508
+ return true;
4509
+ };
4510
+ const arms = v.type.kind === "union" ? (lowerer.unions.get(v.type.unionId)?.arms ?? []) : [];
4511
+ const funcArm = v.type.kind === "func" ? v.type : arms.find((a) => a.kind === "func");
4512
+ const unionOk = v.type.kind !== "union" || (arms.length === 2 && arms.some((a) => a.kind === "undefinedT"));
4513
+ if (funcArm === undefined || !unionOk || !shapeOk(funcArm)) {
4514
+ lowerer.noLowering(`a ${what} SNICallback of '${lowerer.fmt(v.type)}' values`, blame, SNI_HINT);
4515
+ }
4516
+ return v;
4517
+ }
4282
4518
  /** Strips parentheses and type assertions: the portless spelling wraps
4283
4519
  * an options spread as `...({ ... } as Record<string, unknown>)`. */
4284
4520
  function stripParensAndCasts(node) {
@@ -4490,41 +4726,8 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
4490
4726
  let sni = null;
4491
4727
  let allowHttp1 = false;
4492
4728
  let enableConnectProtocol = false;
4493
- // The SNICallback value shape: (servername: string, cb) => void where
4494
- // cb is (err: Error | null, ctx?: SecureContext) => void — cb may
4495
- // declare fewer params (the emitted answer thunk matches its ABI),
4496
- // but what it does declare must carry the arms the thunk decodes.
4497
- const sniShapeOk = (t) => {
4498
- if (t.kind !== "func" || t.ret.kind !== "void" || t.params.length !== 2)
4499
- return false;
4500
- if (t.params[0].kind !== "string")
4501
- return false;
4502
- const cbT = t.params[1];
4503
- if (cbT.kind !== "func" || cbT.ret.kind !== "void" || cbT.params.length > 2)
4504
- return false;
4505
- const armKinds = (u) => u.kind === "union" ? (lowerer.unions.get(u.unionId)?.arms ?? []).map((a) => a.kind) : [];
4506
- const p0 = cbT.params[0];
4507
- if (p0 !== undefined && !armKinds(p0).includes("nullT"))
4508
- return false;
4509
- const p1 = cbT.params[1];
4510
- if (p1 !== undefined && !armKinds(p1).includes("secureCtx"))
4511
- return false;
4512
- return true;
4513
- };
4514
4729
  const lowerSniValue = (node, blame) => {
4515
- const v = lowerer.lowerExpr(node);
4516
- const funcArm = v.type.kind === "func"
4517
- ? v.type
4518
- : v.type.kind === "union"
4519
- ? (lowerer.unions.get(v.type.unionId)?.arms ?? []).find((a) => a.kind === "func")
4520
- : undefined;
4521
- const unionOk = v.type.kind !== "union" ||
4522
- ((lowerer.unions.get(v.type.unionId)?.arms ?? []).length === 2 &&
4523
- (lowerer.unions.get(v.type.unionId)?.arms ?? []).some((a) => a.kind === "undefinedT"));
4524
- if (funcArm === undefined || !unionOk || !sniShapeOk(funcArm)) {
4525
- lowerer.noLowering(`a createSecureServer SNICallback of '${lowerer.fmt(v.type)}' values`, blame, SNI_HINT);
4526
- }
4527
- sni = v;
4730
+ sni = lowerSniCallbackValue(lowerer, node, blame, "createSecureServer");
4528
4731
  };
4529
4732
  const lowerOption = (prop) => {
4530
4733
  if (ts.isSpreadAssignment(prop)) {
@@ -6150,7 +6353,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
6150
6353
  const all = [...callArgs, cb];
6151
6354
  const key = `server.endcb:${fn}:${all.map((a) => typeKey(a.type)).join(",")}`;
6152
6355
  const existing = lowerer.arrHofHelpers.get(key);
6153
- const helper = existing ?? `%server.endcb.${lowerer.arrHofHelpers.size}`;
6356
+ const helper = existing ?? keyedHelperName(lowerer, "%server.endcb", key);
6154
6357
  if (!existing) {
6155
6358
  lowerer.arrHofHelpers.set(key, helper);
6156
6359
  const params = all.map((a, i) => ({ localId: `p${i}.0`, name: `p${i}`, type: a.type }));