@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
@@ -1,4 +1,5 @@
1
1
  import { InternalCompilerError } from "../errors.js";
2
+ import { keyedHelperName } from "./lowering/stable-names.js";
2
3
  import { mockCallRecordType, mockContextType } from "./mock-shapes.js";
3
4
  import * as ts from "./ts7/adapter.js";
4
5
  import { bodyReadsArguments } from "./arguments-usage.js";
@@ -7,6 +8,7 @@ import { BIGINT_T } from "../ir/ir.js";
7
8
  import { literalValues } from "./literal-values.js";
8
9
  import { remapUnionDiscriminant } from "./union-discriminants.js";
9
10
  import { isJsSourceFile, isNodeTypesPath } from "./program.js";
11
+ import { isProvenanceSourceFile } from "./provenance-registry.js";
10
12
  import { functionCanReturnUndefined } from "./function-completion.js";
11
13
  import { accessorSlotProp, recordTextCodecClass } from "../ir/ir.js";
12
14
  // typeKey moved to ir/ir.ts (the backend needs it too, for per-type
@@ -85,6 +87,46 @@ export const WEBCRYPTO_DYN_TYPES = new Set([
85
87
  "KeyAlgorithm",
86
88
  "HmacImportParams",
87
89
  "HmacKeyAlgorithm",
90
+ "CryptoKeyPair",
91
+ "EcKeyAlgorithm",
92
+ "RsaHashedKeyAlgorithm",
93
+ "EcKeyGenParams",
94
+ "EcKeyImportParams",
95
+ "EcdsaParams",
96
+ "RsaHashedKeyGenParams",
97
+ "RsaHashedImportParams",
98
+ "RsaPssParams",
99
+ "HmacKeyGenParams",
100
+ "AesKeyGenParams",
101
+ "AesKeyAlgorithm",
102
+ "JsonWebKey",
103
+ "AesGcmParams",
104
+ "AesCbcParams",
105
+ "AesCtrParams",
106
+ "Pbkdf2Params",
107
+ "HkdfParams",
108
+ "AesDerivedKeyParams",
109
+ ]);
110
+ /** node:crypto's key and signature option interfaces: the key functions,
111
+ * KeyObject.export and sign/verify take them as checked-dynamic arguments
112
+ * (scr_lib.c, scr_pki.c). */
113
+ export const CRYPTO_KEY_OPTION_DYN_TYPES = new Set([
114
+ "AsymmetricKeyExportOptions",
115
+ "ECKeyPairKeyObjectOptions",
116
+ "ECKeyPairOptions",
117
+ "ED25519KeyPairOptions",
118
+ "JsonWebKeyInput",
119
+ "JwkKeyExportOptions",
120
+ "KeyExportOptions",
121
+ "PrivateKeyInput",
122
+ "PublicKeyInput",
123
+ "RSAKeyPairKeyObjectOptions",
124
+ "RSAKeyPairOptions",
125
+ "SignKeyObjectInput",
126
+ "SignPrivateKeyInput",
127
+ "SigningOptions",
128
+ "VerifyKeyObjectInput",
129
+ "VerifyPublicKeyInput",
88
130
  ]);
89
131
  export const FETCH_AMBIENT_TYPES = [
90
132
  "Response",
@@ -179,6 +221,8 @@ function comparePriority(left, right) {
179
221
  export class ShapeRegistry {
180
222
  /** Existing layouts change only when a recursive placeholder closes. */
181
223
  revision = 0;
224
+ /** Each shape id with a second hash of its key (keyedHelperName). */
225
+ keyedNameKeys = new Map();
182
226
  byKey = new Map();
183
227
  byId = new Map();
184
228
  /** Historical emit-order rank of the declaration-order metadata each
@@ -194,7 +238,7 @@ export class ShapeRegistry {
194
238
  * writer after all priority candidates have closed. */
195
239
  derivedDeclaredOrderFinalizers = [];
196
240
  currentDeclaredOrderPriority = [0, 0];
197
- /** All interned shapes in first-seen (`r0`, `r1`, ...) order. */
241
+ /** All interned shapes in first-seen order. */
198
242
  shapes = [];
199
243
  /** ts.Types currently being mapped — a BACK-REFERENCE to one of these is
200
244
  * the recursive knot (`interface TreeNode { children: TreeNode[] }`):
@@ -299,11 +343,12 @@ export class ShapeRegistry {
299
343
  }
300
344
  /** The shape id a back-reference to an in-progress type resolves to:
301
345
  * reuses the type's persistent recursive id or mints a PLACEHOLDER
302
- * entry (empty fields) the outer frame finalizes. */
303
- recursiveRef(t) {
346
+ * entry (empty fields) the outer frame finalizes. `describe` names a new
347
+ * placeholder (checkerTypeDescription). */
348
+ recursiveRef(t, describe) {
304
349
  let id = this.recIds.get(t);
305
350
  if (id === undefined) {
306
- id = `r${this.shapes.length}`;
351
+ id = recursivePlaceholderName(this, "r", describe(), (name) => this.byId.has(name));
307
352
  const shape = { id, fields: [] };
308
353
  this.byId.set(id, shape);
309
354
  this.shapes.push(shape);
@@ -358,7 +403,7 @@ export class ShapeRegistry {
358
403
  const key = this.keyOf(fields, tuple, indexValue);
359
404
  let id = this.byKey.get(key);
360
405
  if (id === undefined) {
361
- id = `r${this.shapes.length}`;
406
+ id = keyedHelperName(this, "r", key, "");
362
407
  const shape = {
363
408
  id,
364
409
  fields,
@@ -434,6 +479,44 @@ export class ShapeRegistry {
434
479
  this.byKey.set(key, shapeId);
435
480
  }
436
481
  }
482
+ /** The id of a recursive placeholder described by `description`. Two
483
+ * different types can still share a description (checkerTypeDescription stops
484
+ * after a few levels of type arguments); the later one takes the first free
485
+ * name with a numbered suffix. */
486
+ function recursivePlaceholderName(owner, prefix, description, taken) {
487
+ let name = keyedHelperName(owner, prefix, `recursive:${description}`, "");
488
+ for (let n = 1; taken(name); n++)
489
+ name = keyedHelperName(owner, prefix, `recursive:${description}#${n}`, "");
490
+ return name;
491
+ }
492
+ /** How many levels of type arguments checkerTypeDescription describes. */
493
+ const RECURSIVE_NAME_DEPTH = 3;
494
+ /** A checker type's description for names that must not depend on checker
495
+ * type ids (a recursive placeholder, a generic class instance keyed by a
496
+ * literal): its printed form, the structural position of its first
497
+ * declaration, and the same for its type arguments (two instantiations
498
+ * print the same when their type arguments are type parameters or classes
499
+ * of the same name from different declarations). */
500
+ export function checkerTypeDescription(t, ctx, depth = 0) {
501
+ const symbol = t.getAliasSymbol() ?? t.getSymbol();
502
+ const declaration = symbol?.declarations[0];
503
+ const where = declaration
504
+ ? (ctx.positionOf?.(declaration) ??
505
+ `${ts.getSourceFileOfNode(declaration).fileName}:${declaration.pos}`)
506
+ : "";
507
+ let description = `${ctx.checker.typeToString(t)}@${where}`;
508
+ if (depth < RECURSIVE_NAME_DEPTH) {
509
+ const aliasArguments = t.getAliasSymbol() !== undefined ? (t.getAliasTypeArguments() ?? []) : [];
510
+ const typeArguments = aliasArguments.length > 0
511
+ ? aliasArguments
512
+ : t.isTypeReference()
513
+ ? ctx.checker.getTypeArguments(t)
514
+ : [];
515
+ if (typeArguments.length > 0)
516
+ description += `<${typeArguments.map((arg) => checkerTypeDescription(arg, ctx, depth + 1)).join(",")}>`;
517
+ }
518
+ return description;
519
+ }
437
520
  /** The frontend's union interner — mirrors ShapeRegistry. A union's
438
521
  * canonical identity includes its typeKey-sorted arms and literal
439
522
  * discriminator contract. An arm's index in that list IS its runtime tag.
@@ -441,10 +524,12 @@ export class ShapeRegistry {
441
524
  export class UnionRegistry {
442
525
  /** Existing arm/discriminator contracts change when a placeholder closes. */
443
526
  revision = 0;
527
+ /** Each union id with a second hash of its key (keyedHelperName). */
528
+ keyedNameKeys = new Map();
444
529
  byKey = new Map();
445
530
  byId = new Map();
446
531
  armTags = new Map();
447
- /** All interned unions in first-seen (`u0`, `u1`, ...) order. */
532
+ /** All interned unions in first-seen order. */
448
533
  unions = [];
449
534
  /** ts.Types currently being mapped — a back-reference to one is the
450
535
  * recursive knot passing through a union (`type Tree = Leaf | Branch`
@@ -459,11 +544,12 @@ export class UnionRegistry {
459
544
  pendingRec = new Set();
460
545
  /** The union id a back-reference to an in-progress union resolves to:
461
546
  * reuses the type's persistent recursive id or mints a PLACEHOLDER
462
- * entry (empty arms) the outer frame finalizes. */
463
- recursiveRef(t) {
547
+ * entry (empty arms) the outer frame finalizes. `describe` names a new
548
+ * placeholder (checkerTypeDescription). */
549
+ recursiveRef(t, describe) {
464
550
  let id = this.recIds.get(t);
465
551
  if (id === undefined) {
466
- id = `u${this.unions.length}`;
552
+ id = recursivePlaceholderName(this, "u", describe(), (name) => this.byId.has(name));
467
553
  const def = { id, arms: [] };
468
554
  this.byId.set(id, def);
469
555
  this.unions.push(def);
@@ -509,7 +595,7 @@ export class UnionRegistry {
509
595
  const key = JSON.stringify([arms.map(typeKey), discriminant]);
510
596
  let id = this.byKey.get(key);
511
597
  if (id === undefined) {
512
- id = `u${this.unions.length}`;
598
+ id = keyedHelperName(this, "u", key, "");
513
599
  const def = { id, arms, ...(discriminant ? { discriminant } : {}) };
514
600
  this.byKey.set(key, id);
515
601
  this.byId.set(id, def);
@@ -1325,10 +1411,18 @@ export function mapType(type, ctx) {
1325
1411
  if (flags & (ts.TypeFlags.Boolean | ts.TypeFlags.BooleanLiteral))
1326
1412
  return BOOL;
1327
1413
  }
1414
+ const localValue = ctx.localClassValue?.(type);
1415
+ if (localValue) {
1416
+ contextResolutions++;
1417
+ return localValue;
1418
+ }
1328
1419
  const topLevel = mapTypeDepth === 0;
1329
1420
  const typeId = type.id;
1330
1421
  const memoizable = typeId !== undefined && (ctx.canMemoizeType?.() ?? true);
1331
- const memoKey = memoizable ? `${0}:${typeId}` : null;
1422
+ // An empty literal's type maps to the empty record as an unreduced union's
1423
+ // arm (emptyLiteralArm) and to the checked-dynamic value elsewhere: the two
1424
+ // answers keep separate memo entries.
1425
+ const memoKey = memoizable ? `${ctx.emptyLiteralArm ? 1 : 0}:${typeId}` : null;
1332
1426
  if (memoKey !== null) {
1333
1427
  const memo = ctx.typeMemo?.get(memoKey);
1334
1428
  if (memo !== undefined)
@@ -2119,6 +2213,25 @@ function mapTypeInner(type, ctx) {
2119
2213
  return { kind: "classval", className: inst.className };
2120
2214
  }
2121
2215
  }
2216
+ // A constructable declared in the program whose instances are not one
2217
+ // program class's (`new () => unknown`, `abstract new () => S` over a
2218
+ // record, a type that also names static members such as `{ readonly
2219
+ // schema: unknown; new (): unknown }`, construct overloads): the class
2220
+ // value rides the checked-dynamic tree, as an `unknown` slot already
2221
+ // holds one. `new` through it and static reads dispatch at run time,
2222
+ // and the constructed value checks into the signature's instance type.
2223
+ // Lib and package constructables keep their fences, and so do those of
2224
+ // fetched provenance sources (third-party code under its own policies:
2225
+ // an unused `@__PURE__` const typed `{ new (): any }` elides there).
2226
+ if (ctorSigs.length > 0 &&
2227
+ checker.getCallSignatures(widened).length === 0 &&
2228
+ (widened.getSymbol()?.declarations.length ?? 0) > 0 &&
2229
+ widened.getSymbol().declarations.every((d) => {
2230
+ const sf = ts.getSourceFileOfNode(d);
2231
+ return ctx.isProgramFile(sf) && !isProvenanceSourceFile(sf.fileName);
2232
+ })) {
2233
+ return DYN;
2234
+ }
2122
2235
  }
2123
2236
  // Map<K, V>: a reference to the standard library's Map interface —
2124
2237
  // provenance, not the name (a user's own `interface Map` maps as a record
@@ -2441,15 +2554,35 @@ function mapTypeInner(type, ctx) {
2441
2554
  ctx.isStdlibFile(ts.getSourceFileOfNode(d)))) {
2442
2555
  return DYN;
2443
2556
  }
2444
- // node:crypto's KeyObject: secret keys are native handles (scr_lib.c)
2445
- // whose getters and methods dispatch through the handle. The JsonWebKey
2446
- // that export() returns is a plain checked-dynamic object.
2557
+ // node:crypto's KeyObject: secret keys (scr_lib.c) and private and
2558
+ // public keys (scr_pki.c) are native handles whose getters and methods
2559
+ // dispatch through the handle. The JsonWebKey that export() returns is a
2560
+ // plain checked-dynamic object.
2447
2561
  if (((psym !== undefined && ts.symbolName(psym) === "KeyObject") ||
2448
2562
  (psym !== undefined && ts.symbolName(psym) === "JsonWebKey")) &&
2449
2563
  psym.declarations.some((d) => (ts.isClassDeclaration(d) || ts.isInterfaceDeclaration(d)) &&
2450
2564
  ctx.isStdlibFile(ts.getSourceFileOfNode(d)))) {
2451
2565
  return DYN;
2452
2566
  }
2567
+ // node:crypto's key and signature options are plain checked-dynamic
2568
+ // objects, so a value asserted to one (`opts as
2569
+ // crypto.AsymmetricKeyExportOptions<"pem">`) reaches the call unchanged.
2570
+ if (psym !== undefined &&
2571
+ CRYPTO_KEY_OPTION_DYN_TYPES.has(ts.symbolName(psym)) &&
2572
+ psym.declarations.some((d) => ts.isInterfaceDeclaration(d) &&
2573
+ ctx.isStdlibFile(ts.getSourceFileOfNode(d)) &&
2574
+ isDeclaredInAmbientModule(d, "crypto"))) {
2575
+ return DYN;
2576
+ }
2577
+ // node:crypto's Sign and Verify (createSign/createVerify): native
2578
+ // handles over the digest state (scr_pki.c).
2579
+ if (psym !== undefined &&
2580
+ (ts.symbolName(psym) === "Sign" || ts.symbolName(psym) === "Verify") &&
2581
+ psym.declarations.some((d) => ts.isClassDeclaration(d) &&
2582
+ ctx.isStdlibFile(ts.getSourceFileOfNode(d)) &&
2583
+ isDeclaredInAmbientModule(d, "crypto"))) {
2584
+ return DYN;
2585
+ }
2453
2586
  if (psym &&
2454
2587
  FETCH_AMBIENT_TYPES.includes(ts.symbolName(psym)) &&
2455
2588
  !(ts.symbolName(psym) === "ReadableStream" &&
@@ -2487,6 +2620,18 @@ function mapTypeInner(type, ctx) {
2487
2620
  psym.declarations.some((d) => ts.isClassDeclaration(d) && ctx.isStdlibFile(ts.getSourceFileOfNode(d)))) {
2488
2621
  return DYN;
2489
2622
  }
2623
+ // node:crypto DiffieHellman values, and @types/node's DiffieHellmanGroup
2624
+ // alias over them, are native handles carried by the checked-dynamic
2625
+ // representation; lowerDiffieHellmanCall dispatches their methods.
2626
+ {
2627
+ const dhSym = widened.getAliasSymbol() ?? psym;
2628
+ if (dhSym !== undefined &&
2629
+ (ts.symbolName(dhSym) === "DiffieHellman" || ts.symbolName(dhSym) === "DiffieHellmanGroup") &&
2630
+ dhSym.declarations.some((d) => (ts.isClassDeclaration(d) || ts.isTypeAliasDeclaration(d)) &&
2631
+ ctx.isStdlibFile(ts.getSourceFileOfNode(d)))) {
2632
+ return DYN;
2633
+ }
2634
+ }
2490
2635
  // ReadonlyMap/ReadonlySet are the SAME runtime values as Map/Set — the
2491
2636
  // readonly-ness is a checker-only view (no mutating members on the
2492
2637
  // interface), so both map to the identical IR kinds and the read-side
@@ -3466,6 +3611,32 @@ function mapTypeInner(type, ctx) {
3466
3611
  };
3467
3612
  }
3468
3613
  }
3614
+ // crypto.generateKeyPairSync's results: KeyPairKeyObjectResult and
3615
+ // KeyPairSyncResult<T1, T2> as { publicKey, privateKey } records over the
3616
+ // mapped property types (KeyObjects, PEM strings or DER Buffers), in
3617
+ // Node's key order.
3618
+ if (psym !== undefined &&
3619
+ (ts.symbolName(psym) === "KeyPairKeyObjectResult" ||
3620
+ ts.symbolName(psym) === "KeyPairSyncResult") &&
3621
+ psym.declarations.some((d) => ts.isInterfaceDeclaration(d) &&
3622
+ ctx.isStdlibFile(ts.getSourceFileOfNode(d)) &&
3623
+ isDeclaredInAmbientModule(d, "crypto"))) {
3624
+ const field = (name) => {
3625
+ const prop = ctx.checker.getPropertyOfType(type, name);
3626
+ return prop ? mapType(ctx.checker.getTypeOfSymbol(prop), ctx) : null;
3627
+ };
3628
+ const publicKey = field("publicKey");
3629
+ const privateKey = field("privateKey");
3630
+ if (!publicKey || !privateKey)
3631
+ return null;
3632
+ return {
3633
+ kind: "record",
3634
+ shapeId: ctx.shapes.intern([
3635
+ { name: "privateKey", type: privateKey },
3636
+ { name: "publicKey", type: publicKey },
3637
+ ], false, undefined, ["publicKey", "privateKey"]),
3638
+ };
3639
+ }
3469
3640
  // crypto.X509Certificate — the Dirent-style data record: THREE visible
3470
3641
  // fields (fingerprint and the validFrom/validTo validity window, all
3471
3642
  // computed at construction by the new-expression lowering). Module-
@@ -3872,7 +4043,10 @@ function mapTypeInner(type, ctx) {
3872
4043
  if (knownRecursive !== undefined)
3873
4044
  return { kind: "union", unionId: knownRecursive };
3874
4045
  if (unions.inProgress.has(widened)) {
3875
- return { kind: "union", unionId: unions.recursiveRef(widened) };
4046
+ return {
4047
+ kind: "union",
4048
+ unionId: unions.recursiveRef(widened, () => checkerTypeDescription(widened, ctx)),
4049
+ };
3876
4050
  }
3877
4051
  unions.inProgress.add(widened);
3878
4052
  const sensitivityAtEntry = contextResolutions;
@@ -3896,6 +4070,14 @@ function mapTypeInner(type, ctx) {
3896
4070
  (part.getSymbol()?.declarations.some((d) => ctx.isStdlibFile(d.getSourceFile())) ?? false));
3897
4071
  };
3898
4072
  const hasArrayPart = parts.some((part) => checker.isArrayType(part) || matchArray(part));
4073
+ // Subtype reduction removes every arm assignable to `{}`, so a union
4074
+ // that keeps another non-nullish arm beside an empty literal's `{}`
4075
+ // was not reduced: that `{}` arm holds only the literal's objects.
4076
+ const nullish = ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void;
4077
+ const literalEmptyArms = parts.some((part) => isEmptyObjectLiteralType(part, ctx)) &&
4078
+ parts.some((part) => (part.flags & nullish) === 0 &&
4079
+ !checker.isNeverType(part) &&
4080
+ !isEmptyObjectLiteralType(part, ctx));
3899
4081
  for (const part of parts) {
3900
4082
  if (hasArrayPart && emptyTuple(part))
3901
4083
  continue;
@@ -3916,7 +4098,19 @@ function mapTypeInner(type, ctx) {
3916
4098
  byKey.set(typeKey(NULL_T), NULL_T);
3917
4099
  continue;
3918
4100
  }
3919
- const mapped = mapType(part, ctx);
4101
+ let mapped;
4102
+ if (literalEmptyArms && isEmptyObjectLiteralType(part, ctx)) {
4103
+ ctx.emptyLiteralArm = true;
4104
+ try {
4105
+ mapped = mapType(part, ctx);
4106
+ }
4107
+ finally {
4108
+ ctx.emptyLiteralArm = false;
4109
+ }
4110
+ }
4111
+ else {
4112
+ mapped = mapType(part, ctx);
4113
+ }
3920
4114
  if (!mapped) {
3921
4115
  return null;
3922
4116
  }
@@ -5050,7 +5244,8 @@ function evalMappedTemplate(type, keys, aliases, ctx) {
5050
5244
  const checked = evalMappedTemplate(checkType, keys, scope, ctx);
5051
5245
  if (!checked)
5052
5246
  return null;
5053
- const inferred = matchInferReference(checked, extendsType, ctx);
5247
+ const inferred = primitiveExtendsCheck(checked, extendsType, ctx) ??
5248
+ matchInferReference(checked, extendsType, ctx);
5054
5249
  if (inferred === undefined)
5055
5250
  return null;
5056
5251
  const branch = inferred ? type.getTrueType() : type.getFalseType();
@@ -5059,6 +5254,24 @@ function evalMappedTemplate(type, keys, aliases, ctx) {
5059
5254
  }
5060
5255
  return mentionsMappedParams(type, keys, aliases) ? null : type;
5061
5256
  }
5257
+ /** `checked extends X` where X is a primitive or literal type, or a union of
5258
+ * them (`K extends "required" ? ...`), and `checked` is one such type:
5259
+ * X has no infer positions, so assignability decides the branch (an empty
5260
+ * binding map for the true branch). A union `checked` distributes and stays
5261
+ * undecided here (undefined), as do other shapes. */
5262
+ function primitiveExtendsCheck(checked, extendsType, ctx) {
5263
+ const primitive = ts.TypeFlags.StringLike |
5264
+ ts.TypeFlags.NumberLike |
5265
+ ts.TypeFlags.BooleanLike |
5266
+ ts.TypeFlags.BigIntLike |
5267
+ ts.TypeFlags.Null |
5268
+ ts.TypeFlags.Undefined;
5269
+ const isPrimitive = (t) => !t.isUnionType() && (t.flags & primitive) !== 0 && (t.flags & ts.TypeFlags.TypeParameter) === 0;
5270
+ const extendsParts = extendsType.isUnionType() ? ts.constituentTypes(extendsType) : [extendsType];
5271
+ if (!isPrimitive(checked) || !extendsParts.every(isPrimitive))
5272
+ return undefined;
5273
+ return ctx.checker.isTypeAssignableTo(checked, extendsType) ? new Map() : false;
5274
+ }
5062
5275
  /** `checked extends G<..., infer T, ...>`: the infer bindings when
5063
5276
  * `checked` is a reference to the same generic `G` (its arguments bind the
5064
5277
  * infer positions; other positions must be the same types), false when it
@@ -6067,7 +6280,10 @@ function mapRecordType(widened, ctx) {
6067
6280
  // frame completes (finalizeRecursive below). Backends represent records
6068
6281
  // as heap references, so the self-reference is an ordinary pointer.
6069
6282
  if (shapes.inProgress.has(widened)) {
6070
- return { kind: "record", shapeId: shapes.recursiveRef(widened) };
6283
+ return {
6284
+ kind: "record",
6285
+ shapeId: shapes.recursiveRef(widened, () => checkerTypeDescription(widened, ctx)),
6286
+ };
6071
6287
  }
6072
6288
  shapes.inProgress.add(widened);
6073
6289
  const sensitivityAtEntry = contextResolutions;
@@ -6607,24 +6823,28 @@ function mapRecordTypeInner(widened, ctx) {
6607
6823
  // has zero declared members — the signature is the shape.
6608
6824
  if (computed && props.length === 0 && !indexValue)
6609
6825
  return null;
6610
- // A DECLARED empty object type — `{}` (spelled or the checker's shared
6611
- // intrinsic), `interface Empty {}` — is tsc's TOP type over non-nullish
6612
- // values: every number, string, record, array, function, or class
6613
- // instance is assignable into the slot, so the exact-record stance
6614
- // cannot hold it. It lowers like `unknown` (the dyn), the same rule
6615
- // as `object` and the lib's `Object`: assignments convert at the site
6616
- // (sources outside the checked-dynamic tree fence there, exactly as unknown does), reads
6617
- // narrow back out through the same checked casts. The type INFERRED
6618
- // from an empty object literal (`const o = {}`) stays the empty record
6619
- // — it describes a value the program built, not an annotation that
6620
- // admits everything — and computed empties (`Partial<T>` in a generic
6621
- // body) returned null above. Empty shapes WITH an index signature
6622
- // (`Record<string, T>`) are not empty: the signature is the shape.
6826
+ // An empty object type — `{}` (spelled, the checker's shared
6827
+ // intrinsic, or inferred from an empty object literal), `interface
6828
+ // Empty {}` — is tsc's TOP type over non-nullish values: every number,
6829
+ // string, record, array, function, or class instance is assignable
6830
+ // into the slot, so the exact-record stance cannot hold it. It lowers
6831
+ // like `unknown` (the dyn), the same rule as `object` and the lib's
6832
+ // `Object`: assignments convert at the site (sources outside the
6833
+ // checked-dynamic tree fence there, exactly as unknown does), reads
6834
+ // narrow back out through the same checked casts. A literal's inferred
6835
+ // `{}` is no exception: union subtype reduction folds primitives into
6836
+ // it (`["12", {}]` is `{}[]`, `flag ? "x" : {}` is `{}`), and `let o =
6837
+ // {}` admits `o = "x"`. As an arm beside another non-nullish arm (the
6838
+ // union was not reduced, `string | {} | DataView`) it holds only the
6839
+ // literal's objects and stays the empty record (emptyLiteralArm).
6840
+ // Computed empties (`Partial<T>` in a generic body) returned null
6841
+ // above. Empty shapes WITH an index signature (`Record<string, T>`) are
6842
+ // not empty: the signature is the shape.
6623
6843
  if (props.length === 0 &&
6624
6844
  indexValue === undefined &&
6625
6845
  checker.getCallSignatures(widened).length === 0 &&
6626
6846
  checker.getConstructSignatures(widened).length === 0 &&
6627
- !(anonSym !== undefined && anonSym.declarations.some((d) => ts.isObjectLiteralExpression(d)))) {
6847
+ !(ctx.emptyLiteralArm && isEmptyObjectLiteralType(widened, ctx))) {
6628
6848
  return DYN;
6629
6849
  }
6630
6850
  const fields = [];
@@ -7225,4 +7445,17 @@ function innerBlockedMember(t, ctx, seen) {
7225
7445
  }
7226
7446
  return here;
7227
7447
  }
7448
+ /** The type tsc infers from an empty object literal (`{}` written as a
7449
+ * value): no members, index signatures or signatures, declared by an object
7450
+ * literal expression. */
7451
+ function isEmptyObjectLiteralType(type, ctx) {
7452
+ const { checker } = ctx;
7453
+ const symbol = type.getSymbol();
7454
+ return (symbol !== undefined &&
7455
+ symbol.declarations.some((d) => ts.isObjectLiteralExpression(d)) &&
7456
+ checker.getPropertiesOfType(type).length === 0 &&
7457
+ checker.getIndexInfosOfType(type).length === 0 &&
7458
+ checker.getCallSignatures(type).length === 0 &&
7459
+ checker.getConstructSignatures(type).length === 0);
7460
+ }
7228
7461
  //# sourceMappingURL=type-mapper.js.map