@scriptc/compiler 0.4.1 → 0.4.3

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 (999) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +977 -113
  2. package/dist/backend/cycle-analysis.d.ts +5 -1
  3. package/dist/backend/cycle-analysis.js +6 -4
  4. package/dist/backend/cycle-analysis.js.map +1 -1
  5. package/dist/backend/cycle-analysis.test.js +55 -0
  6. package/dist/backend/cycle-analysis.test.js.map +1 -1
  7. package/dist/backend/cycle-mutability.d.ts +9 -1
  8. package/dist/backend/cycle-mutability.js +21 -3
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +6 -1
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.d.ts +7 -3
  13. package/dist/backend/immutability.js +33 -29
  14. package/dist/backend/immutability.js.map +1 -1
  15. package/dist/backend/library-pack.js +5 -0
  16. package/dist/backend/library-pack.js.map +1 -1
  17. package/dist/backend/llvm/alloc.d.ts +23 -4
  18. package/dist/backend/llvm/alloc.js +61 -8
  19. package/dist/backend/llvm/alloc.js.map +1 -1
  20. package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
  21. package/dist/backend/llvm/appended-array-literals.js +44 -36
  22. package/dist/backend/llvm/appended-array-literals.js.map +1 -1
  23. package/dist/backend/llvm/appended-array-literals.test.js +4 -3
  24. package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
  25. package/dist/backend/llvm/array-search.d.ts +4 -3
  26. package/dist/backend/llvm/array-search.js +23 -10
  27. package/dist/backend/llvm/array-search.js.map +1 -1
  28. package/dist/backend/llvm/blocks.d.ts +1 -1
  29. package/dist/backend/llvm/blocks.js +2 -2
  30. package/dist/backend/llvm/blocks.js.map +1 -1
  31. package/dist/backend/llvm/byte-windows.js +2 -0
  32. package/dist/backend/llvm/byte-windows.js.map +1 -1
  33. package/dist/backend/llvm/bytes-alias.d.ts +6 -1
  34. package/dist/backend/llvm/bytes-alias.js +8 -2
  35. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  36. package/dist/backend/llvm/bytes-loop-versions.d.ts +70 -7
  37. package/dist/backend/llvm/bytes-loop-versions.js +567 -30
  38. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  39. package/dist/backend/llvm/bytes-loop-versions.test.js +389 -2
  40. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  41. package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
  42. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  43. package/dist/backend/llvm/classes.d.ts +74 -1
  44. package/dist/backend/llvm/classes.js +364 -54
  45. package/dist/backend/llvm/classes.js.map +1 -1
  46. package/dist/backend/llvm/classes.test.js +384 -17
  47. package/dist/backend/llvm/classes.test.js.map +1 -1
  48. package/dist/backend/llvm/common.d.ts +10 -6
  49. package/dist/backend/llvm/common.js +10 -6
  50. package/dist/backend/llvm/common.js.map +1 -1
  51. package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
  52. package/dist/backend/llvm/constant-callbacks.js +91 -56
  53. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  54. package/dist/backend/llvm/constant-callbacks.test.js +4 -4
  55. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  56. package/dist/backend/llvm/counted-loops.d.ts +11 -1
  57. package/dist/backend/llvm/counted-loops.js +80 -23
  58. package/dist/backend/llvm/counted-loops.js.map +1 -1
  59. package/dist/backend/llvm/dense-array-access.d.ts +39 -8
  60. package/dist/backend/llvm/dense-array-access.js +222 -52
  61. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  62. package/dist/backend/llvm/dense-array-access.test.js +36 -0
  63. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  64. package/dist/backend/llvm/dense-array-loops.d.ts +35 -16
  65. package/dist/backend/llvm/dense-array-loops.js +237 -12
  66. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  67. package/dist/backend/llvm/dense-array-loops.test.js +140 -15
  68. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  69. package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
  70. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
  71. package/dist/backend/llvm/dyn.d.ts +51 -1
  72. package/dist/backend/llvm/dyn.js +683 -69
  73. package/dist/backend/llvm/dyn.js.map +1 -1
  74. package/dist/backend/llvm/emit-function.js +33 -26
  75. package/dist/backend/llvm/emit-function.js.map +1 -1
  76. package/dist/backend/llvm/emit-journal.d.ts +93 -0
  77. package/dist/backend/llvm/emit-journal.js +170 -0
  78. package/dist/backend/llvm/emit-journal.js.map +1 -0
  79. package/dist/backend/llvm/emit-module.js +208 -34
  80. package/dist/backend/llvm/emit-module.js.map +1 -1
  81. package/dist/backend/llvm/emit-statements.d.ts +0 -27
  82. package/dist/backend/llvm/emit-statements.js +577 -93
  83. package/dist/backend/llvm/emit-statements.js.map +1 -1
  84. package/dist/backend/llvm/emitter-state.d.ts +7 -0
  85. package/dist/backend/llvm/emitter-state.js +14 -0
  86. package/dist/backend/llvm/emitter-state.js.map +1 -0
  87. package/dist/backend/llvm/emitter.d.ts +314 -49
  88. package/dist/backend/llvm/emitter.js +1241 -129
  89. package/dist/backend/llvm/emitter.js.map +1 -1
  90. package/dist/backend/llvm/emitter.test.js +54 -5
  91. package/dist/backend/llvm/emitter.test.js.map +1 -1
  92. package/dist/backend/llvm/expr-async.js +19 -0
  93. package/dist/backend/llvm/expr-async.js.map +1 -1
  94. package/dist/backend/llvm/expr-bytes.d.ts +5 -2
  95. package/dist/backend/llvm/expr-bytes.js +144 -52
  96. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  97. package/dist/backend/llvm/expr-callbacks.js +47 -0
  98. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  99. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  100. package/dist/backend/llvm/expr-calls.js +62 -36
  101. package/dist/backend/llvm/expr-calls.js.map +1 -1
  102. package/dist/backend/llvm/expr-containers.d.ts +14 -2
  103. package/dist/backend/llvm/expr-containers.js +148 -40
  104. package/dist/backend/llvm/expr-containers.js.map +1 -1
  105. package/dist/backend/llvm/expr-context.d.ts +14 -0
  106. package/dist/backend/llvm/expr-control.js +2 -3
  107. package/dist/backend/llvm/expr-control.js.map +1 -1
  108. package/dist/backend/llvm/expr-dynamic.js +71 -16
  109. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  110. package/dist/backend/llvm/expr-primitives.js +126 -36
  111. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  112. package/dist/backend/llvm/expr-primitives.test.js +11 -6
  113. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  114. package/dist/backend/llvm/expr-records.d.ts +12 -0
  115. package/dist/backend/llvm/expr-records.js +106 -0
  116. package/dist/backend/llvm/expr-records.js.map +1 -1
  117. package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
  118. package/dist/backend/llvm/expr-stream-bridges.js +225 -64
  119. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  120. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  121. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  122. package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
  123. package/dist/backend/llvm/expr-stream-callbacks.js +200 -50
  124. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  125. package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
  126. package/dist/backend/llvm/int32-kind-loops.js +106 -0
  127. package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
  128. package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
  129. package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
  130. package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
  131. package/dist/backend/llvm/integer-values.d.ts +20 -1
  132. package/dist/backend/llvm/integer-values.js +71 -0
  133. package/dist/backend/llvm/integer-values.js.map +1 -1
  134. package/dist/backend/llvm/js-ic.d.ts +1 -1
  135. package/dist/backend/llvm/js-ic.js +1 -1
  136. package/dist/backend/llvm/js-ic.js.map +1 -1
  137. package/dist/backend/llvm/key-orders.d.ts +7 -0
  138. package/dist/backend/llvm/key-orders.js +33 -0
  139. package/dist/backend/llvm/key-orders.js.map +1 -0
  140. package/dist/backend/llvm/lib-connect.js +4 -0
  141. package/dist/backend/llvm/lib-connect.js.map +1 -1
  142. package/dist/backend/llvm/lib-datagram.js +11 -0
  143. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  144. package/dist/backend/llvm/lib-dispatch.js +90 -2
  145. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  146. package/dist/backend/llvm/lib-filesystem.js +65 -4
  147. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  148. package/dist/backend/llvm/lib-http2.d.ts +4 -0
  149. package/dist/backend/llvm/lib-http2.js +24 -17
  150. package/dist/backend/llvm/lib-http2.js.map +1 -1
  151. package/dist/backend/llvm/lib-lookup.js +16 -6
  152. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  153. package/dist/backend/llvm/lib-process.js +65 -14
  154. package/dist/backend/llvm/lib-process.js.map +1 -1
  155. package/dist/backend/llvm/lib-shared.js +126 -3
  156. package/dist/backend/llvm/lib-shared.js.map +1 -1
  157. package/dist/backend/llvm/lib-stream.js +97 -30
  158. package/dist/backend/llvm/lib-stream.js.map +1 -1
  159. package/dist/backend/llvm/lib-tls.js +23 -0
  160. package/dist/backend/llvm/lib-tls.js.map +1 -1
  161. package/dist/backend/llvm/local-array-reads.js +181 -64
  162. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  163. package/dist/backend/llvm/local-array-reads.test.js +28 -0
  164. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  165. package/dist/backend/llvm/loop-state.d.ts +33 -0
  166. package/dist/backend/llvm/loop-state.js +42 -0
  167. package/dist/backend/llvm/loop-state.js.map +1 -0
  168. package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
  169. package/dist/backend/llvm/map-number-lookup.js +91 -31
  170. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  171. package/dist/backend/llvm/map-number-lookup.test.js +55 -0
  172. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  173. package/dist/backend/llvm/map-read-lifetimes.js +4 -2
  174. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  175. package/dist/backend/llvm/nullable-unions.d.ts +2 -1
  176. package/dist/backend/llvm/nullable-unions.js +15 -3
  177. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  178. package/dist/backend/llvm/publish.d.ts +18 -1
  179. package/dist/backend/llvm/publish.js +76 -25
  180. package/dist/backend/llvm/publish.js.map +1 -1
  181. package/dist/backend/llvm/publish.test.js +3 -0
  182. package/dist/backend/llvm/publish.test.js.map +1 -1
  183. package/dist/backend/llvm/receivers.js +7 -2
  184. package/dist/backend/llvm/receivers.js.map +1 -1
  185. package/dist/backend/llvm/record-results.d.ts +1 -9
  186. package/dist/backend/llvm/record-results.js +2 -11
  187. package/dist/backend/llvm/record-results.js.map +1 -1
  188. package/dist/backend/llvm/reference-writes.d.ts +7 -2
  189. package/dist/backend/llvm/reference-writes.js +91 -72
  190. package/dist/backend/llvm/reference-writes.js.map +1 -1
  191. package/dist/backend/llvm/regex-matchers.js +161 -14
  192. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  193. package/dist/backend/llvm/regex-matchers.test.js +18 -0
  194. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  195. package/dist/backend/llvm/running-extrema.d.ts +11 -0
  196. package/dist/backend/llvm/running-extrema.js +115 -0
  197. package/dist/backend/llvm/running-extrema.js.map +1 -0
  198. package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
  199. package/dist/backend/llvm/running-extrema.test.js +89 -0
  200. package/dist/backend/llvm/running-extrema.test.js.map +1 -0
  201. package/dist/backend/llvm/shapes.d.ts +79 -21
  202. package/dist/backend/llvm/shapes.js +233 -42
  203. package/dist/backend/llvm/shapes.js.map +1 -1
  204. package/dist/backend/llvm/shapes.test.js +53 -7
  205. package/dist/backend/llvm/shapes.test.js.map +1 -1
  206. package/dist/backend/llvm/speculative-integers.d.ts +6 -0
  207. package/dist/backend/llvm/speculative-integers.js +2 -2
  208. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  209. package/dist/backend/llvm/stack-objects.d.ts +3 -2
  210. package/dist/backend/llvm/stack-objects.js +5 -2
  211. package/dist/backend/llvm/stack-objects.js.map +1 -1
  212. package/dist/backend/llvm/string-lifetimes.test.js +2 -1
  213. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  214. package/dist/backend/llvm/string-reads.d.ts +15 -0
  215. package/dist/backend/llvm/string-reads.js +128 -0
  216. package/dist/backend/llvm/string-reads.js.map +1 -1
  217. package/dist/backend/llvm/walk-borrows.d.ts +3 -0
  218. package/dist/backend/llvm/walk-borrows.js +46 -41
  219. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  220. package/dist/backend/llvm/walkers.d.ts +3 -0
  221. package/dist/backend/llvm/walkers.js +88 -65
  222. package/dist/backend/llvm/walkers.js.map +1 -1
  223. package/dist/backend/llvm/wasm-modules.d.ts +6 -5
  224. package/dist/backend/llvm/wasm-modules.js +32 -9
  225. package/dist/backend/llvm/wasm-modules.js.map +1 -1
  226. package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
  227. package/dist/backend/llvm/wrapping-sums.js +126 -0
  228. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  229. package/dist/backend/mangle.d.ts +3 -0
  230. package/dist/backend/mangle.js +5 -0
  231. package/dist/backend/mangle.js.map +1 -1
  232. package/dist/backend/may-throw.d.ts +8 -10
  233. package/dist/backend/may-throw.js +14 -10
  234. package/dist/backend/may-throw.js.map +1 -1
  235. package/dist/backend/native/contracts.d.ts +27 -4
  236. package/dist/backend/native/executable.js +31 -8
  237. package/dist/backend/native/executable.js.map +1 -1
  238. package/dist/backend/native/library.js +1 -0
  239. package/dist/backend/native/library.js.map +1 -1
  240. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  241. package/dist/backend/native/runtime-inputs.js +1 -0
  242. package/dist/backend/native/runtime-inputs.js.map +1 -1
  243. package/dist/backend/native-codegen.d.ts +11 -6
  244. package/dist/backend/native-codegen.js +36 -9
  245. package/dist/backend/native-codegen.js.map +1 -1
  246. package/dist/backend/native-codegen.test.js +0 -23
  247. package/dist/backend/native-codegen.test.js.map +1 -1
  248. package/dist/backend/native-link-info-core.d.ts +18 -4
  249. package/dist/backend/native-link-info-core.js.map +1 -1
  250. package/dist/backend/optimization.d.ts +2 -2
  251. package/dist/backend/publication.d.ts +12 -1
  252. package/dist/backend/publication.js +37 -14
  253. package/dist/backend/publication.js.map +1 -1
  254. package/dist/backend/publication.test.js +30 -0
  255. package/dist/backend/publication.test.js.map +1 -1
  256. package/dist/backend/result-slots.d.ts +16 -0
  257. package/dist/backend/result-slots.js +23 -0
  258. package/dist/backend/result-slots.js.map +1 -0
  259. package/dist/backend/runtime-abi.d.ts +2 -2
  260. package/dist/backend/runtime-abi.js +2 -2
  261. package/dist/backend/runtime-pack-core.d.ts +2 -1
  262. package/dist/backend/runtime-pack-core.js +2 -1
  263. package/dist/backend/runtime-pack-core.js.map +1 -1
  264. package/dist/backend/runtime-pack-targets.test.js +5 -1
  265. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  266. package/dist/backend/runtime-pack.d.ts +0 -21
  267. package/dist/backend/runtime-pack.js +0 -29
  268. package/dist/backend/runtime-pack.js.map +1 -1
  269. package/dist/backend/runtime-pack.test.js +10 -69
  270. package/dist/backend/runtime-pack.test.js.map +1 -1
  271. package/dist/backend/stack-observations.d.ts +2 -1
  272. package/dist/backend/stack-observations.js +67 -42
  273. package/dist/backend/stack-observations.js.map +1 -1
  274. package/dist/backend/target-diagnostics.js +33 -1
  275. package/dist/backend/target-diagnostics.js.map +1 -1
  276. package/dist/backend/warm-cache.js +4 -0
  277. package/dist/backend/warm-cache.js.map +1 -1
  278. package/dist/cli/command.js +26 -6
  279. package/dist/cli/command.js.map +1 -1
  280. package/dist/cli/usage.d.ts +5 -1
  281. package/dist/cli/usage.js +10 -5
  282. package/dist/cli/usage.js.map +1 -1
  283. package/dist/compat/fetch-profile.js +1 -1
  284. package/dist/compat/fetch-profile.js.map +1 -1
  285. package/dist/contracts/check.js +5 -4
  286. package/dist/contracts/check.js.map +1 -1
  287. package/dist/contracts/int32-elements.js +10 -2
  288. package/dist/contracts/int32-elements.js.map +1 -1
  289. package/dist/coverage/report.d.ts +7 -2
  290. package/dist/coverage/report.js +30 -3
  291. package/dist/coverage/report.js.map +1 -1
  292. package/dist/coverage/verdict-cache.d.ts +1 -0
  293. package/dist/coverage/verdict-cache.js +4 -0
  294. package/dist/coverage/verdict-cache.js.map +1 -1
  295. package/dist/coverage/verdict-semantic.js +4 -0
  296. package/dist/coverage/verdict-semantic.js.map +1 -1
  297. package/dist/diagnostics/diagnostic.d.ts +4 -0
  298. package/dist/diagnostics/diagnostic.js.map +1 -1
  299. package/dist/diagnostics/dynamic-tier.d.ts +40 -0
  300. package/dist/diagnostics/dynamic-tier.js +57 -0
  301. package/dist/diagnostics/dynamic-tier.js.map +1 -0
  302. package/dist/diagnostics/envelope.d.ts +5 -1
  303. package/dist/diagnostics/envelope.js +6 -2
  304. package/dist/diagnostics/envelope.js.map +1 -1
  305. package/dist/executable/executable-cache.d.ts +25 -1
  306. package/dist/executable/executable-cache.js +60 -7
  307. package/dist/executable/executable-cache.js.map +1 -1
  308. package/dist/executable/executable-cache.test.js +46 -3
  309. package/dist/executable/executable-cache.test.js.map +1 -1
  310. package/dist/executable/prepare.js +3 -1
  311. package/dist/executable/prepare.js.map +1 -1
  312. package/dist/frontend/analysis.js +1 -0
  313. package/dist/frontend/analysis.js.map +1 -1
  314. package/dist/frontend/decl-projection.d.ts +41 -0
  315. package/dist/frontend/decl-projection.js +854 -0
  316. package/dist/frontend/decl-projection.js.map +1 -0
  317. package/dist/frontend/decl-projection.test.d.ts +1 -0
  318. package/dist/frontend/decl-projection.test.js +30 -0
  319. package/dist/frontend/decl-projection.test.js.map +1 -0
  320. package/dist/frontend/dispose-hook.d.ts +2 -0
  321. package/dist/frontend/dispose-hook.js +14 -0
  322. package/dist/frontend/dispose-hook.js.map +1 -0
  323. package/dist/frontend/dts-paths.d.ts +15 -0
  324. package/dist/frontend/dts-paths.js +25 -0
  325. package/dist/frontend/dts-paths.js.map +1 -1
  326. package/dist/frontend/input-tracker.d.ts +6 -0
  327. package/dist/frontend/input-tracker.js +51 -28
  328. package/dist/frontend/input-tracker.js.map +1 -1
  329. package/dist/frontend/input-tracker.test.js +19 -0
  330. package/dist/frontend/input-tracker.test.js.map +1 -1
  331. package/dist/frontend/jsx-entities.d.ts +4 -0
  332. package/dist/frontend/jsx-entities.js +259 -0
  333. package/dist/frontend/jsx-entities.js.map +1 -0
  334. package/dist/frontend/jsx-source.d.ts +71 -0
  335. package/dist/frontend/jsx-source.js +781 -0
  336. package/dist/frontend/jsx-source.js.map +1 -0
  337. package/dist/frontend/jsx-source.test.d.ts +1 -0
  338. package/dist/frontend/jsx-source.test.js +200 -0
  339. package/dist/frontend/jsx-source.test.js.map +1 -0
  340. package/dist/frontend/literal-values.test.js +8 -9
  341. package/dist/frontend/literal-values.test.js.map +1 -1
  342. package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
  343. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  344. package/dist/frontend/lowering/array-values.js +103 -4
  345. package/dist/frontend/lowering/array-values.js.map +1 -1
  346. package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
  347. package/dist/frontend/lowering/binding-analysis.js +2 -2
  348. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  349. package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
  350. package/dist/frontend/lowering/builtins/arguments.js +30 -15
  351. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  352. package/dist/frontend/lowering/builtins/atomics.js +10 -6
  353. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  354. package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
  355. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  356. package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
  357. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  358. package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
  359. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  360. package/dist/frontend/lowering/builtins/child-process.js +13 -2
  361. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  362. package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
  363. package/dist/frontend/lowering/builtins/crypto.js +136 -5
  364. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  365. package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
  366. package/dist/frontend/lowering/builtins/date-classes.js +477 -0
  367. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
  368. package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
  369. package/dist/frontend/lowering/builtins/dates.js +55 -26
  370. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  371. package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
  372. package/dist/frontend/lowering/builtins/dh.js +151 -0
  373. package/dist/frontend/lowering/builtins/dh.js.map +1 -0
  374. package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
  375. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  376. package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
  377. package/dist/frontend/lowering/builtins/ecdh.js +7 -7
  378. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
  379. package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
  380. package/dist/frontend/lowering/builtins/errors.js +110 -0
  381. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  382. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
  383. package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
  384. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  385. package/dist/frontend/lowering/builtins/filesystem.js +6 -4
  386. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  387. package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
  388. package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
  389. package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
  390. package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
  391. package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
  392. package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
  393. package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
  394. package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
  395. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
  396. package/dist/frontend/lowering/builtins/json.js +2 -1
  397. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  398. package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
  399. package/dist/frontend/lowering/builtins/key-object.js +20 -7
  400. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  401. package/dist/frontend/lowering/builtins/module-calls.js +11 -4
  402. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  403. package/dist/frontend/lowering/builtins/numbers.js +18 -6
  404. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  405. package/dist/frontend/lowering/builtins/operating-system.js +4 -3
  406. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  407. package/dist/frontend/lowering/builtins/performance.js +3 -2
  408. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  409. package/dist/frontend/lowering/builtins/process.js +3 -2
  410. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  411. package/dist/frontend/lowering/builtins/promises.d.ts +6 -0
  412. package/dist/frontend/lowering/builtins/promises.js +91 -4
  413. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  414. package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
  415. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  416. package/dist/frontend/lowering/builtins/readline.d.ts +7 -2
  417. package/dist/frontend/lowering/builtins/readline.js +58 -9
  418. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  419. package/dist/frontend/lowering/builtins/strings.js +13 -5
  420. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  421. package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
  422. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  423. package/dist/frontend/lowering/builtins/timers.js +1 -1
  424. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  425. package/dist/frontend/lowering/builtins/url.js +28 -4
  426. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  427. package/dist/frontend/lowering/builtins/v8.js +2 -1
  428. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  429. package/dist/frontend/lowering/builtins/webassembly.js +6 -3
  430. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  431. package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
  432. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
  433. package/dist/frontend/lowering/call-arguments.js +2 -1
  434. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  435. package/dist/frontend/lowering/call-signatures.js +13 -6
  436. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  437. package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
  438. package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
  439. package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
  440. package/dist/frontend/lowering/class-assertions.js +3 -2
  441. package/dist/frontend/lowering/class-assertions.js.map +1 -1
  442. package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
  443. package/dist/frontend/lowering/class-callbacks.js +82 -12
  444. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  445. package/dist/frontend/lowering/class-construction.d.ts +6 -2
  446. package/dist/frontend/lowering/class-construction.js +25 -16
  447. package/dist/frontend/lowering/class-construction.js.map +1 -1
  448. package/dist/frontend/lowering/class-descriptors.js +1 -1
  449. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  450. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +73 -2
  451. package/dist/frontend/lowering/class-dynamic-dispatch.js +1334 -259
  452. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  453. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +124 -0
  454. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  455. package/dist/frontend/lowering/class-iterables.d.ts +2 -1
  456. package/dist/frontend/lowering/class-iterables.js +9 -1
  457. package/dist/frontend/lowering/class-iterables.js.map +1 -1
  458. package/dist/frontend/lowering/class-method-mutations.js +35 -9
  459. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  460. package/dist/frontend/lowering/class-method-values.js +1 -1
  461. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  462. package/dist/frontend/lowering/class-protocols.d.ts +7 -0
  463. package/dist/frontend/lowering/class-protocols.js +64 -4
  464. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  465. package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
  466. package/dist/frontend/lowering/class-prototypes.js +67 -5
  467. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  468. package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
  469. package/dist/frontend/lowering/class-runtime-statics.js +29 -4
  470. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  471. package/dist/frontend/lowering/class-to-primitive.js +25 -5
  472. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  473. package/dist/frontend/lowering/class-unions.js +2 -1
  474. package/dist/frontend/lowering/class-unions.js.map +1 -1
  475. package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
  476. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  477. package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
  478. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  479. package/dist/frontend/lowering/coercions/structural.js +99 -8
  480. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  481. package/dist/frontend/lowering/coercions/unions.js +8 -7
  482. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  483. package/dist/frontend/lowering/collection-ingestion.js +2 -1
  484. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  485. package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
  486. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  487. package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
  488. package/dist/frontend/lowering/containers/array-callbacks.js +352 -31
  489. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  490. package/dist/frontend/lowering/containers/array-concat.js +12 -1
  491. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  492. package/dist/frontend/lowering/containers/array-construction.js +25 -4
  493. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  494. package/dist/frontend/lowering/containers/array-methods.js +21 -5
  495. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  496. package/dist/frontend/lowering/containers/array-pipelines.js +21 -9
  497. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  498. package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
  499. package/dist/frontend/lowering/containers/bytes.js +131 -29
  500. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  501. package/dist/frontend/lowering/containers/callback-arguments.js +55 -2
  502. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  503. package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
  504. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  505. package/dist/frontend/lowering/containers/collection-methods.js +15 -9
  506. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  507. package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
  508. package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
  509. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
  510. package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
  511. package/dist/frontend/lowering/containers/indexed-objects.js +54 -14
  512. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  513. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
  514. package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
  515. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  516. package/dist/frontend/lowering/containers/string-and-regexp.js +87 -14
  517. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  518. package/dist/frontend/lowering/containers/string-replacement.js +45 -20
  519. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  520. package/dist/frontend/lowering/cycle-initialization.js +25 -4
  521. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  522. package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
  523. package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
  524. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  525. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  526. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  527. package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
  528. package/dist/frontend/lowering/dispatch-sites.js +218 -0
  529. package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
  530. package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
  531. package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
  532. package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
  533. package/dist/frontend/lowering/divergences.js +9 -1
  534. package/dist/frontend/lowering/divergences.js.map +1 -1
  535. package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
  536. package/dist/frontend/lowering/dyn-streams.js +1 -1
  537. package/dist/frontend/lowering/dyn-streams.js.map +1 -1
  538. package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
  539. package/dist/frontend/lowering/dynamic-tier.js +327 -0
  540. package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
  541. package/dist/frontend/lowering/error-methods.js +51 -2
  542. package/dist/frontend/lowering/error-methods.js.map +1 -1
  543. package/dist/frontend/lowering/expressions/array-literals.js +62 -0
  544. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  545. package/dist/frontend/lowering/expressions/binary.js +81 -5
  546. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  547. package/dist/frontend/lowering/expressions/element-access.js +107 -14
  548. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  549. package/dist/frontend/lowering/expressions/identifiers.js +79 -11
  550. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  551. package/dist/frontend/lowering/expressions/narrowing.js +130 -6
  552. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  553. package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
  554. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  555. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -3
  556. package/dist/frontend/lowering/expressions/object-literals.js +164 -56
  557. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  558. package/dist/frontend/lowering/expressions/optional-chains.js +17 -5
  559. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  560. package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
  561. package/dist/frontend/lowering/expressions/property-access.js +211 -17
  562. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  563. package/dist/frontend/lowering/expressions/relational.js +267 -30
  564. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  565. package/dist/frontend/lowering/expressions/union-fields.js +4 -0
  566. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  567. package/dist/frontend/lowering/expressions/updates.js +85 -12
  568. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  569. package/dist/frontend/lowering/frozen-records.d.ts +28 -0
  570. package/dist/frontend/lowering/frozen-records.js +322 -0
  571. package/dist/frontend/lowering/frozen-records.js.map +1 -0
  572. package/dist/frontend/lowering/function-returns.js +49 -0
  573. package/dist/frontend/lowering/function-returns.js.map +1 -1
  574. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
  575. package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
  576. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  577. package/dist/frontend/lowering/generic-functions.d.ts +42 -1
  578. package/dist/frontend/lowering/generic-functions.js +455 -20
  579. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  580. package/dist/frontend/lowering/intern-tables.js +2 -1
  581. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  582. package/dist/frontend/lowering/iterable-values.d.ts +49 -0
  583. package/dist/frontend/lowering/iterable-values.js +297 -0
  584. package/dist/frontend/lowering/iterable-values.js.map +1 -0
  585. package/dist/frontend/lowering/iterator-adapters.js +195 -9
  586. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  587. package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
  588. package/dist/frontend/lowering/js-class-fields.js +45 -10
  589. package/dist/frontend/lowering/js-class-fields.js.map +1 -1
  590. package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
  591. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
  592. package/dist/frontend/lowering/json-require.js +2 -1
  593. package/dist/frontend/lowering/json-require.js.map +1 -1
  594. package/dist/frontend/lowering/key-order-witness.d.ts +24 -4
  595. package/dist/frontend/lowering/key-order-witness.js +790 -25
  596. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  597. package/dist/frontend/lowering/key-order-witness.test.js +466 -10
  598. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
  599. package/dist/frontend/lowering/lifetime-regions.js +2 -1
  600. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  601. package/dist/frontend/lowering/lower-assert.js +6 -5
  602. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  603. package/dist/frontend/lowering/lower-async-iteration.js +7 -2
  604. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  605. package/dist/frontend/lowering/lower-calls.d.ts +11 -0
  606. package/dist/frontend/lowering/lower-calls.js +776 -126
  607. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  608. package/dist/frontend/lowering/lower-classes.d.ts +29 -2
  609. package/dist/frontend/lowering/lower-classes.js +581 -46
  610. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  611. package/dist/frontend/lowering/lower-dgram.js +6 -3
  612. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  613. package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
  614. package/dist/frontend/lowering/lower-event-emitter.js +267 -20
  615. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  616. package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
  617. package/dist/frontend/lowering/lower-exprs.js +126 -13
  618. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  619. package/dist/frontend/lowering/lower-functions.d.ts +11 -0
  620. package/dist/frontend/lowering/lower-functions.js +387 -72
  621. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  622. package/dist/frontend/lowering/lower-generators.js +41 -31
  623. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  624. package/dist/frontend/lowering/lower-global-value.js +6 -3
  625. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  626. package/dist/frontend/lowering/lower-inspect.js +28 -12
  627. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  628. package/dist/frontend/lowering/lower-mixins.js +2 -1
  629. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  630. package/dist/frontend/lowering/lower-mock.js +2 -1
  631. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  632. package/dist/frontend/lowering/lower-modules.js +47 -5
  633. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  634. package/dist/frontend/lowering/lower-modules.test.js +2 -2
  635. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  636. package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
  637. package/dist/frontend/lowering/lower-namespaces.js +9 -4
  638. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  639. package/dist/frontend/lowering/lower-server.d.ts +10 -0
  640. package/dist/frontend/lowering/lower-server.js +239 -61
  641. package/dist/frontend/lowering/lower-server.js.map +1 -1
  642. package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
  643. package/dist/frontend/lowering/lower-stdlib.js +42 -10
  644. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  645. package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
  646. package/dist/frontend/lowering/lower-stmts.js +622 -68
  647. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  648. package/dist/frontend/lowering/lower-stmts.test.js +1 -1
  649. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  650. package/dist/frontend/lowering/lower-stream.d.ts +20 -2
  651. package/dist/frontend/lowering/lower-stream.js +2055 -318
  652. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  653. package/dist/frontend/lowering/lower-timers.js +4 -3
  654. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  655. package/dist/frontend/lowering/lowerer.d.ts +197 -29
  656. package/dist/frontend/lowering/lowerer.js +862 -84
  657. package/dist/frontend/lowering/lowerer.js.map +1 -1
  658. package/dist/frontend/lowering/lowerer.test.js +21 -9
  659. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  660. package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
  661. package/dist/frontend/lowering/module-namespace-elements.js +82 -5
  662. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  663. package/dist/frontend/lowering/narrowing-stability.js +5 -0
  664. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  665. package/dist/frontend/lowering/native-ffi.js +1 -1
  666. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  667. package/dist/frontend/lowering/new-target.d.ts +12 -0
  668. package/dist/frontend/lowering/new-target.js +280 -0
  669. package/dist/frontend/lowering/new-target.js.map +1 -0
  670. package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
  671. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  672. package/dist/frontend/lowering/pairs-snapshot.js +2 -1
  673. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  674. package/dist/frontend/lowering/private-brands.d.ts +9 -0
  675. package/dist/frontend/lowering/private-brands.js +66 -15
  676. package/dist/frontend/lowering/private-brands.js.map +1 -1
  677. package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
  678. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
  679. package/dist/frontend/lowering/require-initialization.js +2 -1
  680. package/dist/frontend/lowering/require-initialization.js.map +1 -1
  681. package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
  682. package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
  683. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  684. package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
  685. package/dist/frontend/lowering/runtime-optional-records.js +18 -5
  686. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  687. package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
  688. package/dist/frontend/lowering/site-dependencies.js +84 -0
  689. package/dist/frontend/lowering/site-dependencies.js.map +1 -0
  690. package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
  691. package/dist/frontend/lowering/site-dependencies.test.js +53 -0
  692. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
  693. package/dist/frontend/lowering/stable-names.d.ts +11 -0
  694. package/dist/frontend/lowering/stable-names.js +35 -0
  695. package/dist/frontend/lowering/stable-names.js.map +1 -0
  696. package/dist/frontend/lowering/static-typeof.d.ts +2 -2
  697. package/dist/frontend/lowering/static-typeof.js +42 -3
  698. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  699. package/dist/frontend/lowering/strict-equality.js +2 -1
  700. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  701. package/dist/frontend/lowering/structural-positions.d.ts +32 -0
  702. package/dist/frontend/lowering/structural-positions.js +108 -0
  703. package/dist/frontend/lowering/structural-positions.js.map +1 -0
  704. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  705. package/dist/frontend/lowering/surfaces.js +60 -32
  706. package/dist/frontend/lowering/surfaces.js.map +1 -1
  707. package/dist/frontend/lowering/undefined-index.d.ts +27 -0
  708. package/dist/frontend/lowering/undefined-index.js +82 -0
  709. package/dist/frontend/lowering/undefined-index.js.map +1 -0
  710. package/dist/frontend/lowering/var-hoisting.js +66 -16
  711. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  712. package/dist/frontend/lowering/width-lift.d.ts +18 -0
  713. package/dist/frontend/npm-static-bundled-chunks.js +9 -11
  714. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
  715. package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
  716. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
  717. package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
  718. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  719. package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
  720. package/dist/frontend/npm-static-tsc-helpers.js +106 -0
  721. package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
  722. package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
  723. package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
  724. package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
  725. package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
  726. package/dist/frontend/npm-static-type-exports-host.js +214 -0
  727. package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
  728. package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
  729. package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
  730. package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
  731. package/dist/frontend/npm-static-type-exports.d.ts +52 -0
  732. package/dist/frontend/npm-static-type-exports.js +261 -0
  733. package/dist/frontend/npm-static-type-exports.js.map +1 -0
  734. package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
  735. package/dist/frontend/npm-static-type-exports.test.js +103 -0
  736. package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
  737. package/dist/frontend/npm-static-umd.d.ts +6 -0
  738. package/dist/frontend/npm-static-umd.js +203 -0
  739. package/dist/frontend/npm-static-umd.js.map +1 -0
  740. package/dist/frontend/npm-static-umd.test.d.ts +1 -0
  741. package/dist/frontend/npm-static-umd.test.js +105 -0
  742. package/dist/frontend/npm-static-umd.test.js.map +1 -0
  743. package/dist/frontend/npm-static.d.ts +8 -0
  744. package/dist/frontend/npm-static.js +51 -22
  745. package/dist/frontend/npm-static.js.map +1 -1
  746. package/dist/frontend/package-shims.d.ts +3 -0
  747. package/dist/frontend/package-shims.js +71 -8
  748. package/dist/frontend/package-shims.js.map +1 -1
  749. package/dist/frontend/pipeline.js +18 -10
  750. package/dist/frontend/pipeline.js.map +1 -1
  751. package/dist/frontend/process-fork.d.ts +25 -0
  752. package/dist/frontend/process-fork.js +2 -0
  753. package/dist/frontend/process-fork.js.map +1 -0
  754. package/dist/frontend/program.d.ts +21 -1
  755. package/dist/frontend/program.js +586 -74
  756. package/dist/frontend/program.js.map +1 -1
  757. package/dist/frontend/program.test.js +44 -4
  758. package/dist/frontend/program.test.js.map +1 -1
  759. package/dist/frontend/services.d.ts +6 -0
  760. package/dist/frontend/services.js +18 -0
  761. package/dist/frontend/services.js.map +1 -1
  762. package/dist/frontend/token-equivalence.d.ts +3 -0
  763. package/dist/frontend/token-equivalence.js +409 -0
  764. package/dist/frontend/token-equivalence.js.map +1 -0
  765. package/dist/frontend/token-equivalence.test.d.ts +1 -0
  766. package/dist/frontend/token-equivalence.test.js +67 -0
  767. package/dist/frontend/token-equivalence.test.js.map +1 -0
  768. package/dist/frontend/ts7/ast-node.d.ts +43 -7
  769. package/dist/frontend/ts7/ast-node.js +1176 -129
  770. package/dist/frontend/ts7/ast-node.js.map +1 -1
  771. package/dist/frontend/ts7/ast-node.test.js +84 -0
  772. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  773. package/dist/frontend/ts7/ast-wire.d.ts +29 -3
  774. package/dist/frontend/ts7/ast-wire.js +144 -31
  775. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  776. package/dist/frontend/ts7/ast-wire.test.js +23 -0
  777. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  778. package/dist/frontend/ts7/ast.d.ts +23 -2
  779. package/dist/frontend/ts7/ast.js +143 -2
  780. package/dist/frontend/ts7/ast.js.map +1 -1
  781. package/dist/frontend/ts7/checker-backend.d.ts +3 -4
  782. package/dist/frontend/ts7/checker-backend.js +2 -2
  783. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  784. package/dist/frontend/ts7/checker-backend.test.js +5 -9
  785. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  786. package/dist/frontend/ts7/checker.d.ts +17 -1
  787. package/dist/frontend/ts7/checker.js +82 -1
  788. package/dist/frontend/ts7/checker.js.map +1 -1
  789. package/dist/frontend/ts7/checker.test.js +9 -6
  790. package/dist/frontend/ts7/checker.test.js.map +1 -1
  791. package/dist/frontend/ts7/enums.d.ts +3 -3
  792. package/dist/frontend/ts7/enums.generated.d.ts +10 -0
  793. package/dist/frontend/ts7/enums.generated.js +21 -0
  794. package/dist/frontend/ts7/enums.generated.js.map +1 -1
  795. package/dist/frontend/ts7/enums.js +19 -0
  796. package/dist/frontend/ts7/enums.js.map +1 -1
  797. package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
  798. package/dist/frontend/ts7/lib-diagnostics.js +307 -0
  799. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
  800. package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
  801. package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
  802. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
  803. package/dist/frontend/ts7/program-host.d.ts +7 -0
  804. package/dist/frontend/ts7/program-host.js +30 -4
  805. package/dist/frontend/ts7/program-host.js.map +1 -1
  806. package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
  807. package/dist/frontend/ts7/semantic-checker.js +25 -20
  808. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  809. package/dist/frontend/ts7/semantic-json.d.ts +13 -0
  810. package/dist/frontend/ts7/semantic-json.js +146 -0
  811. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  812. package/dist/frontend/ts7/semantic-json.test.js +57 -1
  813. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  814. package/dist/frontend/ts7/semantic-model.d.ts +15 -0
  815. package/dist/frontend/ts7/semantic-model.js +67 -19
  816. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  817. package/dist/frontend/ts7/semantic-model.test.js +3 -2
  818. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  819. package/dist/frontend/ts7/session.d.ts +14 -1
  820. package/dist/frontend/ts7/session.js +23 -1
  821. package/dist/frontend/ts7/session.js.map +1 -1
  822. package/dist/frontend/tsc-codes.d.ts +1 -1
  823. package/dist/frontend/tsc-codes.js +7 -0
  824. package/dist/frontend/tsc-codes.js.map +1 -1
  825. package/dist/frontend/type-mapper.d.ts +51 -7
  826. package/dist/frontend/type-mapper.js +456 -43
  827. package/dist/frontend/type-mapper.js.map +1 -1
  828. package/dist/frontend/type-mapper.test.js +1 -1
  829. package/dist/frontend/type-mapper.test.js.map +1 -1
  830. package/dist/frontend-process-args.d.ts +4 -0
  831. package/dist/frontend-process-args.js +52 -0
  832. package/dist/frontend-process-args.js.map +1 -0
  833. package/dist/frontend-process-args.test.d.ts +1 -0
  834. package/dist/frontend-process-args.test.js +47 -0
  835. package/dist/frontend-process-args.test.js.map +1 -0
  836. package/dist/frontend-process.d.ts +1 -0
  837. package/dist/frontend-process.js +23 -0
  838. package/dist/frontend-process.js.map +1 -0
  839. package/dist/heap-collection.d.ts +16 -0
  840. package/dist/heap-collection.js +42 -0
  841. package/dist/heap-collection.js.map +1 -0
  842. package/dist/heap-collection.test.d.ts +1 -0
  843. package/dist/heap-collection.test.js +59 -0
  844. package/dist/heap-collection.test.js.map +1 -0
  845. package/dist/heap-pressure.d.ts +2 -0
  846. package/dist/heap-pressure.js +12 -0
  847. package/dist/heap-pressure.js.map +1 -0
  848. package/dist/index.d.ts +2 -0
  849. package/dist/index.js +435 -89
  850. package/dist/index.js.map +1 -1
  851. package/dist/ir/analysis.js +5 -3
  852. package/dist/ir/analysis.js.map +1 -1
  853. package/dist/ir/array-length-stability.d.ts +4 -0
  854. package/dist/ir/array-length-stability.js +26 -6
  855. package/dist/ir/array-length-stability.js.map +1 -1
  856. package/dist/ir/array-length-stability.test.js +49 -0
  857. package/dist/ir/array-length-stability.test.js.map +1 -1
  858. package/dist/ir/builtin-effects.d.ts +7 -0
  859. package/dist/ir/builtin-effects.js +80 -0
  860. package/dist/ir/builtin-effects.js.map +1 -1
  861. package/dist/ir/builtin-signatures.d.ts +7 -1
  862. package/dist/ir/builtin-signatures.js +303 -21
  863. package/dist/ir/builtin-signatures.js.map +1 -1
  864. package/dist/ir/callback-specialization.d.ts +2 -1
  865. package/dist/ir/callback-specialization.js +23 -18
  866. package/dist/ir/callback-specialization.js.map +1 -1
  867. package/dist/ir/char-unit-locals.d.ts +19 -0
  868. package/dist/ir/char-unit-locals.js +185 -0
  869. package/dist/ir/char-unit-locals.js.map +1 -0
  870. package/dist/ir/char-unit-locals.test.d.ts +1 -0
  871. package/dist/ir/char-unit-locals.test.js +94 -0
  872. package/dist/ir/char-unit-locals.test.js.map +1 -0
  873. package/dist/ir/final-fields.d.ts +3 -1
  874. package/dist/ir/final-fields.js +15 -17
  875. package/dist/ir/final-fields.js.map +1 -1
  876. package/dist/ir/function-references.d.ts +2 -0
  877. package/dist/ir/function-references.js +2 -0
  878. package/dist/ir/function-references.js.map +1 -1
  879. package/dist/ir/function-references.test.js +5 -0
  880. package/dist/ir/function-references.test.js.map +1 -1
  881. package/dist/ir/initializer-bindings.d.ts +2 -1
  882. package/dist/ir/initializer-bindings.js +27 -20
  883. package/dist/ir/initializer-bindings.js.map +1 -1
  884. package/dist/ir/int32-arrays.d.ts +108 -0
  885. package/dist/ir/int32-arrays.js +831 -0
  886. package/dist/ir/int32-arrays.js.map +1 -0
  887. package/dist/ir/int32-slots.d.ts +36 -6
  888. package/dist/ir/int32-slots.js +370 -171
  889. package/dist/ir/int32-slots.js.map +1 -1
  890. package/dist/ir/int32-slots.test.js +3 -1
  891. package/dist/ir/int32-slots.test.js.map +1 -1
  892. package/dist/ir/integer-loop-facts.d.ts +9 -4
  893. package/dist/ir/integer-loop-facts.js +93 -18
  894. package/dist/ir/integer-loop-facts.js.map +1 -1
  895. package/dist/ir/integer-loops.d.ts +49 -0
  896. package/dist/ir/integer-loops.js +202 -40
  897. package/dist/ir/integer-loops.js.map +1 -1
  898. package/dist/ir/integer-loops.test.js +211 -1
  899. package/dist/ir/integer-loops.test.js.map +1 -1
  900. package/dist/ir/integer-ranges.d.ts +5 -0
  901. package/dist/ir/integer-ranges.js +125 -12
  902. package/dist/ir/integer-ranges.js.map +1 -1
  903. package/dist/ir/integer-ranges.test.js +94 -0
  904. package/dist/ir/integer-ranges.test.js.map +1 -1
  905. package/dist/ir/ir.d.ts +87 -9
  906. package/dist/ir/ir.js +61 -2
  907. package/dist/ir/ir.js.map +1 -1
  908. package/dist/ir/ir.test.js +21 -1
  909. package/dist/ir/ir.test.js.map +1 -1
  910. package/dist/ir/js-ic.d.ts +19 -2
  911. package/dist/ir/js-ic.js +95 -11
  912. package/dist/ir/js-ic.js.map +1 -1
  913. package/dist/ir/js-ic.test.js +188 -0
  914. package/dist/ir/js-ic.test.js.map +1 -1
  915. package/dist/ir/node-index.d.ts +57 -0
  916. package/dist/ir/node-index.js +215 -0
  917. package/dist/ir/node-index.js.map +1 -0
  918. package/dist/ir/paired-while-loops.d.ts +25 -0
  919. package/dist/ir/paired-while-loops.js +335 -0
  920. package/dist/ir/paired-while-loops.js.map +1 -0
  921. package/dist/ir/paired-while-loops.test.d.ts +1 -0
  922. package/dist/ir/paired-while-loops.test.js +163 -0
  923. package/dist/ir/paired-while-loops.test.js.map +1 -0
  924. package/dist/ir/parameter-versions.d.ts +25 -0
  925. package/dist/ir/parameter-versions.js +300 -0
  926. package/dist/ir/parameter-versions.js.map +1 -0
  927. package/dist/ir/runtime-features.d.ts +60 -15
  928. package/dist/ir/runtime-features.js +276 -35
  929. package/dist/ir/runtime-features.js.map +1 -1
  930. package/dist/ir/serialize.d.ts +12 -2
  931. package/dist/ir/serialize.js +16 -3
  932. package/dist/ir/serialize.js.map +1 -1
  933. package/dist/ir/serialize.test.js +17 -0
  934. package/dist/ir/serialize.test.js.map +1 -1
  935. package/dist/ir/tiers.js +1 -0
  936. package/dist/ir/tiers.js.map +1 -1
  937. package/dist/ir/traverse.d.ts +2 -0
  938. package/dist/ir/traverse.js +29 -5
  939. package/dist/ir/traverse.js.map +1 -1
  940. package/dist/ir/validate.js +171 -45
  941. package/dist/ir/validate.js.map +1 -1
  942. package/dist/library/ir-policy.js +12 -0
  943. package/dist/library/ir-policy.js.map +1 -1
  944. package/dist/library/library-cache.d.ts +2 -0
  945. package/dist/library/library-cache.js.map +1 -1
  946. package/dist/library/prepare.js +2 -0
  947. package/dist/library/prepare.js.map +1 -1
  948. package/dist/native/cache.d.ts +6 -1
  949. package/dist/native/cache.js +28 -5
  950. package/dist/native/cache.js.map +1 -1
  951. package/dist/native/cache.test.js +16 -2
  952. package/dist/native/cache.test.js.map +1 -1
  953. package/dist/native/cli.js +26 -1
  954. package/dist/native/cli.js.map +1 -1
  955. package/dist/native/compiler.js +8 -6
  956. package/dist/native/compiler.js.map +1 -1
  957. package/dist/native/executable-cache.d.ts +1 -1
  958. package/dist/native/executable-cache.js +2 -2
  959. package/dist/native/executable-cache.js.map +1 -1
  960. package/dist/native/prepare.d.ts +3 -1
  961. package/dist/native/prepare.js +123 -31
  962. package/dist/native/prepare.js.map +1 -1
  963. package/dist/native/prepare.test.js +78 -18
  964. package/dist/native/prepare.test.js.map +1 -1
  965. package/dist/native/sanitizer.test.js +6 -1
  966. package/dist/native/sanitizer.test.js.map +1 -1
  967. package/dist/native/text-file.d.ts +13 -3
  968. package/dist/native/text-file.js +63 -9
  969. package/dist/native/text-file.js.map +1 -1
  970. package/dist/native/text-file.test.d.ts +1 -0
  971. package/dist/native/text-file.test.js +49 -0
  972. package/dist/native/text-file.test.js.map +1 -0
  973. package/dist/native/toolchain.js +4 -4
  974. package/dist/native/toolchain.js.map +1 -1
  975. package/dist/native/toolchain.test.js +3 -3
  976. package/dist/native/toolchain.test.js.map +1 -1
  977. package/dist/startup-cache.d.ts +1 -0
  978. package/dist/startup-cache.js +1 -0
  979. package/dist/startup-cache.js.map +1 -1
  980. package/dist/text-parts.d.ts +7 -0
  981. package/dist/text-parts.js +44 -0
  982. package/dist/text-parts.js.map +1 -1
  983. package/dist/text-parts.test.d.ts +1 -0
  984. package/dist/text-parts.test.js +46 -0
  985. package/dist/text-parts.test.js.map +1 -0
  986. package/dist/timing.d.ts +9 -2
  987. package/dist/timing.js +7 -4
  988. package/dist/timing.js.map +1 -1
  989. package/dist/wasm/translate.d.ts +4 -0
  990. package/dist/wasm/translate.js +2 -2
  991. package/dist/wasm/translate.js.map +1 -1
  992. package/package.json +21 -21
  993. package/shims/chalk/v5.ts +688 -0
  994. package/shims/hono-node-server/v2.ts +645 -0
  995. package/shims/hot-shots/client.ts +1126 -0
  996. package/shims/hot-shots/v8-unix-dgram.ts +8 -0
  997. package/shims/hot-shots/v8.ts +8 -0
  998. package/shims/undici/core/client.ts +4 -4
  999. package/surface-manifest.json +44 -52
@@ -0,0 +1,854 @@
1
+ /* The declaration-typed boundary's projection pass.
2
+ *
3
+ * An opted-in npm package compiles from its JavaScript, and the program the
4
+ * lowering compiles types it from that JavaScript: where the package's
5
+ * published declarations are richer (zod's `z.infer`), user code sees `any`.
6
+ * This pass asks the DECLARATION world (the same entry checked against the
7
+ * packages' declarations) for the types of those user-code positions. Where
8
+ * the declared type is pure data, it is printed as structural TypeScript into
9
+ * a generated global declaration file, and the user file is rewritten in the
10
+ * lowering world:
11
+ *
12
+ * - type positions that name package types (`z.infer<typeof S>`) name the
13
+ * projected alias instead;
14
+ * - package-produced expressions (`S.parse(x)`, `r.data`) are wrapped in
15
+ * `(<expr> as __scriptc_decl_N)`, the boundary cast;
16
+ * - untyped parameters of user callbacks the package calls gain the alias.
17
+ *
18
+ * The lowering world is then rebuilt from the rewritten text, so the
19
+ * checker's own inference carries the projected types through the rest of
20
+ * the user code, and the lowering sees an ordinary checked cast at each
21
+ * crossing (lowered with `adopt`, see narrowing.ts). No edit adds or removes
22
+ * a line break, so positions keep their lines. IR records are structural,
23
+ * so a printed type interns to the same shape as any equal type.
24
+ *
25
+ * Only programs whose user code has such positions are rewritten; every
26
+ * other program is untouched (the zero-cost rule). See
27
+ * scriptc-perf/results/design-decl-boundary/DESIGN.md. */
28
+ import * as ts from "./ts7/adapter.js";
29
+ /** Alias names of projected types start with this prefix; the lowering
30
+ * recognizes boundary casts and parameters by it. */
31
+ export const DECL_BOUNDARY_PREFIX = "__scriptc_decl_";
32
+ /** The generated declaration file's base name. */
33
+ export const DECL_BOUNDARY_FILE = "__scriptc_decl_boundary__.d.ts";
34
+ export function isDeclBoundaryFile(fileName) {
35
+ return fileName.split("\\").join("/").endsWith(`/${DECL_BOUNDARY_FILE}`);
36
+ }
37
+ export function isDeclBoundaryTypeName(name) {
38
+ return name.startsWith(DECL_BOUNDARY_PREFIX);
39
+ }
40
+ /** True for `T` in `x as T` / `(p: T) =>` when T names a projected alias. */
41
+ export function isDeclBoundaryTypeNode(node) {
42
+ return (node !== undefined &&
43
+ ts.isTypeReferenceNode(node) &&
44
+ ts.isIdentifier(node.typeName) &&
45
+ isDeclBoundaryTypeName(node.typeName.text) &&
46
+ node.typeArguments === undefined);
47
+ }
48
+ function isPackageDeclarationFile(sf) {
49
+ if (sf === undefined || !sf.isDeclarationFile)
50
+ return false;
51
+ const f = sf.fileName.split("\\").join("/");
52
+ // The TypeScript standard library ships inside node_modules too.
53
+ if (/(^|\/)lib(\.[\w.-]+)?\.d\.ts$/.test(f) || f.startsWith("bundled:"))
54
+ return false;
55
+ return (f.includes("/node_modules/") &&
56
+ !f.includes("/node_modules/@types/node/") &&
57
+ !f.includes("/node_modules/typescript/") &&
58
+ !f.includes("/node_modules/@typescript/"));
59
+ }
60
+ function declaredInPackage(symbol) {
61
+ if (symbol === undefined)
62
+ return false;
63
+ return symbol.declarations.some((d) => isPackageDeclarationFile(ts.getSourceFileOfNode(d)));
64
+ }
65
+ /** The parts of a call signature's declaration that pass-through detection
66
+ * reads, for the declaration kinds a resolved call signature has. */
67
+ function signatureParts(node) {
68
+ if (node === undefined)
69
+ return null;
70
+ if (ts.isFunctionTypeNode(node))
71
+ return {
72
+ typeParameters: node.typeParameters?.nodes ?? [],
73
+ parameters: node.parameters.nodes,
74
+ type: node.type,
75
+ };
76
+ if (ts.isFunctionDeclaration(node))
77
+ return {
78
+ typeParameters: node.typeParameters?.nodes ?? [],
79
+ parameters: node.parameters.nodes,
80
+ type: node.type,
81
+ };
82
+ if (ts.isMethodDeclaration(node))
83
+ return {
84
+ typeParameters: node.typeParameters?.nodes ?? [],
85
+ parameters: node.parameters.nodes,
86
+ type: node.type,
87
+ };
88
+ if (ts.isMethodSignatureDeclaration(node))
89
+ return {
90
+ typeParameters: node.typeParameters?.nodes ?? [],
91
+ parameters: node.parameters.nodes,
92
+ type: node.type,
93
+ };
94
+ if (ts.isCallSignatureDeclaration(node))
95
+ return {
96
+ typeParameters: node.typeParameters?.nodes ?? [],
97
+ parameters: node.parameters.nodes,
98
+ type: node.type,
99
+ };
100
+ return null;
101
+ }
102
+ /** A signature that returns one of its own type parameters which also types
103
+ * a parameter (`<T extends object>(obj: T) => T`) hands back the argument
104
+ * or something standing in for it, a proxy or a marked object, whose
105
+ * identity the package may track (Effect's `Equal.byReference`). Its result
106
+ * type comes from the caller's argument, not from data the package
107
+ * declares, so the boundary leaves it alone: converting it would build a
108
+ * separate native value. */
109
+ function passesArgumentThrough(declaration) {
110
+ const sig = signatureParts(declaration);
111
+ if (sig === null || sig.type === undefined || !ts.isTypeReferenceNode(sig.type))
112
+ return false;
113
+ const ret = sig.type;
114
+ if (!ts.isIdentifier(ret.typeName) || ret.typeArguments !== undefined)
115
+ return false;
116
+ const name = ret.typeName.text;
117
+ if (!sig.typeParameters.some((tp) => tp.name.text === name))
118
+ return false;
119
+ return sig.parameters.some((param) => param.type !== undefined &&
120
+ ts.isTypeReferenceNode(param.type) &&
121
+ ts.isIdentifier(param.type.typeName) &&
122
+ param.type.typeName.text === name);
123
+ }
124
+ function declaredInUserFile(symbol) {
125
+ if (symbol === undefined)
126
+ return false;
127
+ const decls = symbol.declarations;
128
+ return (decls.length > 0 &&
129
+ decls.every((d) => {
130
+ const sf = ts.getSourceFileOfNode(d);
131
+ return !sf.isDeclarationFile && !sf.fileName.split("\\").join("/").includes("/node_modules/");
132
+ }));
133
+ }
134
+ const ANYISH = ts.TypeFlags.Any | ts.TypeFlags.Unknown;
135
+ const READONLY_CHECK_FLAG = 8;
136
+ /** Prints declaration-world types as structural TypeScript, or answers null
137
+ * when a type is not pure data (DESIGN.md §4.3). */
138
+ class TypePrinter {
139
+ checker;
140
+ aliases = new Map();
141
+ declarations = [];
142
+ inProgress = new Map();
143
+ constructor(checker) {
144
+ this.checker = checker;
145
+ }
146
+ /** The alias naming a projectable type, or null. Top-level any/unknown
147
+ * never projects. */
148
+ project(type) {
149
+ if (type.flags & ANYISH)
150
+ return null;
151
+ const text = this.print(type, 0);
152
+ if (text === null || text === "unknown")
153
+ return null;
154
+ let name = this.aliases.get(text);
155
+ if (name === undefined) {
156
+ name = `${DECL_BOUNDARY_PREFIX}${this.aliases.size}`;
157
+ this.aliases.set(text, name);
158
+ this.declarations.push(`type ${name} = ${text};`);
159
+ }
160
+ return name;
161
+ }
162
+ print(type, depth) {
163
+ if (depth > 24)
164
+ return null;
165
+ const f = type.flags;
166
+ if (f & ANYISH)
167
+ return "unknown";
168
+ if (f & ts.TypeFlags.String)
169
+ return "string";
170
+ if (f & ts.TypeFlags.Number)
171
+ return "number";
172
+ if (f & ts.TypeFlags.Boolean)
173
+ return "boolean";
174
+ if (f & ts.TypeFlags.Null)
175
+ return "null";
176
+ if (f & ts.TypeFlags.Undefined)
177
+ return "undefined";
178
+ if (f & ts.TypeFlags.EnumLiteral || f & ts.TypeFlags.Enum)
179
+ return null;
180
+ if (f & ts.TypeFlags.BooleanLiteral)
181
+ return type.intrinsicName === "true" ? "true" : "false";
182
+ if (f & ts.TypeFlags.StringLiteral)
183
+ return JSON.stringify(String(type.value));
184
+ if (f & ts.TypeFlags.NumberLiteral) {
185
+ const v = Number(type.value);
186
+ return Number.isFinite(v) ? String(v) : null;
187
+ }
188
+ if (type.isUnionType()) {
189
+ const parts = [];
190
+ for (const arm of type.getTypes()) {
191
+ const p = this.print(arm, depth + 1);
192
+ if (p === null || p === "unknown")
193
+ return null;
194
+ if (!parts.includes(p))
195
+ parts.push(p);
196
+ }
197
+ // `true | false` reads better as boolean, and maps the same.
198
+ const t = parts.indexOf("true");
199
+ const fl = parts.indexOf("false");
200
+ if (t >= 0 && fl >= 0) {
201
+ parts.splice(Math.max(t, fl), 1);
202
+ parts.splice(Math.min(t, fl), 1, "boolean");
203
+ }
204
+ return parts.map((p) => (/=>/.test(p) ? `(${p})` : p)).join(" | ");
205
+ }
206
+ if (type.isIntersectionType()) {
207
+ // Brands: drop members that only carry unique-symbol keys.
208
+ const kept = type.getTypes().filter((m) => !this.isBrandOnly(m));
209
+ if (kept.length === 1)
210
+ return this.print(kept[0], depth + 1);
211
+ if (kept.length === 0)
212
+ return null;
213
+ if (!kept.every((m) => (m.flags & ts.TypeFlags.Object) !== 0))
214
+ return null;
215
+ return this.printObject(type, depth);
216
+ }
217
+ if (f & ts.TypeFlags.Object)
218
+ return this.printObject(type, depth);
219
+ return null;
220
+ }
221
+ isBrandOnly(type) {
222
+ if (!(type.flags & ts.TypeFlags.Object) || type.isIntersectionType())
223
+ return false;
224
+ const props = this.checker.getPropertiesOfType(type);
225
+ return props.length > 0 && props.every((p) => String(p.escapedName).startsWith("__@"));
226
+ }
227
+ /** Whether an interface type and every type it extends are declared in
228
+ * user files. */
229
+ userInterface(type, seen = new Set()) {
230
+ if (!declaredInUserFile(type.getSymbol()))
231
+ return false;
232
+ const target = type.isTypeReference() ? type.getTarget() : type;
233
+ if (target === undefined || !target.isClassOrInterface() || seen.has(target))
234
+ return true;
235
+ seen.add(target);
236
+ return this.checker.getBaseTypes(target).every((base) => this.userInterface(base, seen));
237
+ }
238
+ printObject(type, depth) {
239
+ const checker = this.checker;
240
+ if (checker.isArrayType(type)) {
241
+ const [elem] = checker.getTypeArguments(type);
242
+ if (elem === undefined)
243
+ return null;
244
+ const e = this.print(elem, depth + 1);
245
+ if (e === null)
246
+ return null;
247
+ const ro = type.getSymbol()?.escapedName === "ReadonlyArray" ? "readonly " : "";
248
+ return `${ro}(${e})[]`;
249
+ }
250
+ if (checker.isTupleType(type)) {
251
+ const target = type.getTarget() ?? type;
252
+ const flags = target.elementFlags ?? [];
253
+ if (flags.some((fl) => fl !== ts.ElementFlags.Required))
254
+ return null;
255
+ const elems = checker.getTypeArguments(type).slice(0, flags.length);
256
+ const out = [];
257
+ for (const e of elems) {
258
+ const p = this.print(e, depth + 1);
259
+ if (p === null)
260
+ return null;
261
+ out.push(p);
262
+ }
263
+ return `${target.readonly === true ? "readonly " : ""}[${out.join(", ")}]`;
264
+ }
265
+ const symbol = type.getSymbol();
266
+ if (symbol !== undefined) {
267
+ if (symbol.flags & (ts.SymbolFlags.Class | ts.SymbolFlags.Function | ts.SymbolFlags.Method))
268
+ return null;
269
+ // Interfaces: only user-declared ones describe plain data reliably
270
+ // (package and lib interfaces often describe class instances), and
271
+ // only when every interface they extend is user-declared too: a user
272
+ // interface extending a package one (effect's Request.Request)
273
+ // inherits members the package's own constructors create.
274
+ if (symbol.flags & ts.SymbolFlags.Interface && !this.userInterface(type))
275
+ return null;
276
+ }
277
+ if (checker.getCallSignatures(type).length > 0 ||
278
+ checker.getConstructSignatures(type).length > 0)
279
+ return null;
280
+ const memo = this.inProgress.get(type.id);
281
+ if (memo !== undefined) {
282
+ memo.name ??= `${DECL_BOUNDARY_PREFIX}r${type.id}`;
283
+ return memo.name;
284
+ }
285
+ const frame = { name: null };
286
+ this.inProgress.set(type.id, frame);
287
+ try {
288
+ const members = [];
289
+ let readonlyCount = 0;
290
+ const props = checker.getPropertiesOfType(type);
291
+ for (const prop of props) {
292
+ const key = String(prop.escapedName);
293
+ if (key.startsWith("__@"))
294
+ continue; // symbol-keyed (brands)
295
+ if (prop.flags &
296
+ (ts.SymbolFlags.Method | ts.SymbolFlags.GetAccessor | ts.SymbolFlags.SetAccessor))
297
+ return null;
298
+ const propType = checker.getTypeOfSymbol(prop);
299
+ const optional = (prop.flags & ts.SymbolFlags.Optional) !== 0;
300
+ let p = this.print(propType, depth + 1);
301
+ if (p === null)
302
+ return null;
303
+ const readonly = (prop.checkFlags & READONLY_CHECK_FLAG) !== 0 || hasReadonlyModifier(prop);
304
+ if (readonly)
305
+ readonlyCount++;
306
+ const name = /^[A-Za-z_$][\w$]*$/.test(key) ? key : JSON.stringify(key);
307
+ if (optional && !/\bundefined\b/.test(p))
308
+ p = `${p} | undefined`;
309
+ members.push(`${readonly ? "readonly " : ""}${name}${optional ? "?" : ""}: ${p}`);
310
+ }
311
+ for (const info of checker.getIndexInfosOfType(type)) {
312
+ if (!(info.keyType.flags & ts.TypeFlags.String))
313
+ return null;
314
+ const v = this.print(info.type, depth + 1);
315
+ if (v === null)
316
+ return null;
317
+ members.push(`[key: string]: ${v}`);
318
+ }
319
+ if (members.length === 0)
320
+ return null; // `{}` admits any non-nullish value
321
+ // All-readonly object types may describe frozen values (.readonly()).
322
+ if (props.length > 0 && readonlyCount === props.length)
323
+ return null;
324
+ const text = `{ ${members.join("; ")} }`;
325
+ if (frame.name !== null) {
326
+ this.declarations.push(`type ${frame.name} = ${text};`);
327
+ return frame.name;
328
+ }
329
+ return text;
330
+ }
331
+ finally {
332
+ this.inProgress.delete(type.id);
333
+ }
334
+ }
335
+ }
336
+ function hasReadonlyModifier(prop) {
337
+ return prop.declarations.some((d) => (ts.isPropertySignature(d) || ts.isPropertyDeclaration(d)) &&
338
+ (d.modifiers?.nodes ?? []).some((m) => m.kind === ts.SyntaxKind.ReadonlyKeyword));
339
+ }
340
+ /** Children of a node in source order (forEachChild order). */
341
+ function childrenOf(node) {
342
+ const out = [];
343
+ ts.forEachChild(node, (c) => {
344
+ out.push(c);
345
+ return undefined;
346
+ }, (list) => {
347
+ for (const c of list.nodes)
348
+ out.push(c);
349
+ return undefined;
350
+ });
351
+ return out;
352
+ }
353
+ function isWriteTarget(node) {
354
+ let child = node;
355
+ let parent = node.parent;
356
+ while (parent !== undefined && ts.isParenthesizedExpression(parent)) {
357
+ child = parent;
358
+ parent = parent.parent;
359
+ }
360
+ if (parent === undefined)
361
+ return false;
362
+ if (ts.isBinaryExpression(parent) && parent.left === child) {
363
+ const k = parent.operatorToken.kind;
364
+ return k >= ts.SyntaxKind.FirstAssignment && k <= ts.SyntaxKind.LastAssignment;
365
+ }
366
+ if (ts.isPrefixUnaryExpression(parent) || ts.isPostfixUnaryExpression(parent)) {
367
+ const op = parent.operator;
368
+ return op === ts.SyntaxKind.PlusPlusToken || op === ts.SyntaxKind.MinusMinusToken;
369
+ }
370
+ if (ts.isDeleteExpression(parent))
371
+ return true;
372
+ if (ts.isForOfStatement(parent) || ts.isForInStatement(parent))
373
+ return parent.initializer === child;
374
+ if (ts.isShorthandPropertyAssignment(parent))
375
+ return true;
376
+ if (ts.isArrayLiteralExpression(parent) ||
377
+ ts.isPropertyAssignment(parent) ||
378
+ ts.isSpreadElement(parent)) {
379
+ // Destructuring assignment targets: conservative, skip.
380
+ let up = parent;
381
+ while (up !== undefined &&
382
+ (ts.isArrayLiteralExpression(up) ||
383
+ ts.isObjectLiteralExpression(up) ||
384
+ ts.isPropertyAssignment(up) ||
385
+ ts.isSpreadElement(up)))
386
+ up = up.parent;
387
+ if (up !== undefined &&
388
+ ts.isBinaryExpression(up) &&
389
+ up.operatorToken.kind === ts.SyntaxKind.EqualsToken)
390
+ return true;
391
+ }
392
+ return false;
393
+ }
394
+ function inOptionalChain(node) {
395
+ const parent = node.parent;
396
+ if (parent === undefined)
397
+ return false;
398
+ if ((ts.isPropertyAccessExpression(parent) ||
399
+ ts.isElementAccessExpression(parent) ||
400
+ ts.isCallExpression(parent)) &&
401
+ parent.expression === node &&
402
+ (parent.questionDotToken !== undefined || (parent.flags & ts.NodeFlags.OptionalChain) !== 0))
403
+ return true;
404
+ return ((ts.isPropertyAccessExpression(node) ||
405
+ ts.isElementAccessExpression(node) ||
406
+ ts.isCallExpression(node)) &&
407
+ (node.flags & ts.NodeFlags.OptionalChain) !== 0);
408
+ }
409
+ function isCallee(node) {
410
+ const p = node.parent;
411
+ return (p !== undefined &&
412
+ (ts.isCallExpression(p) || ts.isNewExpression(p) || ts.isTaggedTemplateExpression(p)) &&
413
+ (ts.isTaggedTemplateExpression(p) ? p.tag === node : p.expression === node));
414
+ }
415
+ function inTypeContext(node) {
416
+ for (let p = node.parent; p !== undefined; p = p.parent) {
417
+ if (ts.isTypeNode(p) || ts.isTypeQueryNode(p))
418
+ return true;
419
+ if (ts.isExpressionWithTypeArguments(p) && p.parent && ts.isHeritageClause(p.parent))
420
+ return true;
421
+ if (ts.isStatement(p))
422
+ return false;
423
+ }
424
+ return false;
425
+ }
426
+ function unwrapTransparent(node) {
427
+ let e = node;
428
+ while (ts.isParenthesizedExpression(e) || ts.isNonNullExpression(e) || ts.isAwaitExpression(e))
429
+ e = e.expression;
430
+ return e;
431
+ }
432
+ /** Plans the projection for one program pair. Answers null when nothing
433
+ * in the user files projects (the program stays as it is). */
434
+ export function planDeclProjection(input) {
435
+ const jsChecker = input.jsProgram.getTypeChecker();
436
+ const declChecker = input.declProgram.getTypeChecker();
437
+ const printer = new TypePrinter(declChecker);
438
+ const plan = [];
439
+ const edits = new Map();
440
+ const typeAt = (checker, node) => {
441
+ try {
442
+ return checker.getTypeAtLocation(node);
443
+ }
444
+ catch {
445
+ return null;
446
+ }
447
+ };
448
+ const isAnyish = (t) => t !== null && (t.flags & ANYISH) !== 0;
449
+ const resolveAlias = (s) => {
450
+ if (s === undefined || !(s.flags & ts.SymbolFlags.Alias))
451
+ return s;
452
+ try {
453
+ return declChecker.getAliasedSymbol(s);
454
+ }
455
+ catch {
456
+ return s;
457
+ }
458
+ };
459
+ const declSymbol = (n) => {
460
+ try {
461
+ return resolveAlias(declChecker.getSymbolAtLocation(n));
462
+ }
463
+ catch {
464
+ return undefined;
465
+ }
466
+ };
467
+ const namesPackageSymbol = (node) => {
468
+ let found = false;
469
+ const visit = (n) => {
470
+ if (found)
471
+ return;
472
+ if (ts.isIdentifier(n) && declaredInPackage(declSymbol(n))) {
473
+ found = true;
474
+ return;
475
+ }
476
+ for (const c of childrenOf(n))
477
+ visit(c);
478
+ };
479
+ visit(node);
480
+ return found;
481
+ };
482
+ for (const file of input.userFiles) {
483
+ const jsSf = input.jsProgram.getSourceFile(file);
484
+ const declSf = input.declProgram.getSourceFile(file);
485
+ if (jsSf === undefined || declSf === undefined || jsSf.text !== declSf.text)
486
+ continue;
487
+ const fileEdits = [];
488
+ /** Candidate expressions (by js node) with their alias. */
489
+ const exprCandidates = new Map();
490
+ const exprOrder = [];
491
+ const considerType = (jsNode, declNode) => {
492
+ if (!ts.isTypeReferenceNode(jsNode) &&
493
+ !ts.isIndexedAccessTypeNode(jsNode) &&
494
+ !ts.isExpressionWithTypeArguments(jsNode))
495
+ return false;
496
+ if (ts.isExpressionWithTypeArguments(jsNode)) {
497
+ if (!jsNode.parent || !ts.isHeritageClause(jsNode.parent))
498
+ return false;
499
+ if (!jsNode.parent.parent || !ts.isInterfaceDeclaration(jsNode.parent.parent))
500
+ return false;
501
+ }
502
+ let jsType;
503
+ let declType;
504
+ try {
505
+ jsType = ts.isExpressionWithTypeArguments(jsNode)
506
+ ? jsChecker.getTypeAtLocation(jsNode)
507
+ : jsChecker.getTypeFromTypeNode(jsNode);
508
+ declType = ts.isExpressionWithTypeArguments(declNode)
509
+ ? declChecker.getTypeAtLocation(declNode)
510
+ : declChecker.getTypeFromTypeNode(declNode);
511
+ }
512
+ catch {
513
+ return false;
514
+ }
515
+ if (!isAnyish(jsType) || declType === null)
516
+ return false;
517
+ if (!namesPackageSymbol(declNode))
518
+ return false;
519
+ const alias = printer.project(declType);
520
+ if (alias === null)
521
+ return false;
522
+ const start = ts.tokenStartOfNode(jsNode);
523
+ fileEdits.push({ start, end: jsNode.end, text: alias });
524
+ plan.push(`${file}:${start}: type ${jsSf.text.slice(start, jsNode.end)} -> ${alias}`);
525
+ return true;
526
+ };
527
+ const considerExpr = (jsNode, declNode) => {
528
+ if (!ts.isExpression(jsNode))
529
+ return;
530
+ const isCall = ts.isCallExpression(jsNode) ||
531
+ ts.isNewExpression(jsNode) ||
532
+ ts.isTaggedTemplateExpression(jsNode);
533
+ const isAccess = ts.isPropertyAccessExpression(jsNode) || ts.isElementAccessExpression(jsNode);
534
+ const isAwait = ts.isAwaitExpression(jsNode);
535
+ if (!isCall && !isAccess && !isAwait && !ts.isIdentifier(jsNode))
536
+ return;
537
+ if (inTypeContext(jsNode) || isCallee(jsNode) || isWriteTarget(jsNode))
538
+ return;
539
+ if (inOptionalChain(jsNode))
540
+ return;
541
+ const parent = jsNode.parent;
542
+ if (parent !== undefined && ts.isExpressionStatement(parent))
543
+ return;
544
+ if (parent !== undefined &&
545
+ (ts.isImportSpecifier(parent) ||
546
+ ts.isImportClause(parent) ||
547
+ ts.isNamespaceImport(parent) ||
548
+ ts.isExportSpecifier(parent)))
549
+ return;
550
+ if (ts.isIdentifier(jsNode)) {
551
+ if (parent !== undefined && ts.isPropertyAccessExpression(parent) && parent.name === jsNode)
552
+ return;
553
+ }
554
+ const jsType = typeAt(jsChecker, jsNode);
555
+ if (!isAnyish(jsType))
556
+ return;
557
+ // Package-produced?
558
+ const d = declNode;
559
+ let produced = false;
560
+ if (ts.isCallExpression(d) || ts.isNewExpression(d)) {
561
+ const callee = d.expression;
562
+ const target = ts.isPropertyAccessExpression(callee) ? callee.name : callee;
563
+ let decl;
564
+ try {
565
+ decl = declChecker.getResolvedSignature(d)?.declaration;
566
+ }
567
+ catch {
568
+ decl = undefined;
569
+ }
570
+ produced =
571
+ (declaredInPackage(declSymbol(target)) ||
572
+ (decl !== undefined && isPackageDeclarationFile(ts.getSourceFileOfNode(decl)))) &&
573
+ !passesArgumentThrough(decl);
574
+ }
575
+ else if (ts.isTaggedTemplateExpression(d)) {
576
+ produced = declaredInPackage(declSymbol(d.tag));
577
+ }
578
+ else if (ts.isPropertyAccessExpression(d) || ts.isElementAccessExpression(d)) {
579
+ const recvDecl = typeAt(declChecker, d.expression);
580
+ const recvJs = typeAt(jsChecker, jsNode.expression);
581
+ const recvProjectable = recvDecl !== null && printer.project(recvDecl) !== null;
582
+ produced = !recvProjectable || (recvJs !== null && !isAnyish(recvJs));
583
+ }
584
+ else if (ts.isAwaitExpression(d)) {
585
+ const inner = unwrapTransparent(d.expression);
586
+ produced =
587
+ (ts.isCallExpression(inner) || ts.isPropertyAccessExpression(inner)) &&
588
+ (declaredInPackage(declSymbol(ts.isCallExpression(inner)
589
+ ? ts.isPropertyAccessExpression(inner.expression)
590
+ ? inner.expression.name
591
+ : inner.expression
592
+ : inner.name)) ||
593
+ isAnyish(typeAt(jsChecker, inner)));
594
+ }
595
+ else if (ts.isIdentifier(d)) {
596
+ const raw = (() => {
597
+ try {
598
+ return declChecker.getSymbolAtLocation(d);
599
+ }
600
+ catch {
601
+ return undefined;
602
+ }
603
+ })();
604
+ produced =
605
+ raw !== undefined &&
606
+ (raw.flags & ts.SymbolFlags.Alias) !== 0 &&
607
+ declaredInPackage(resolveAlias(raw));
608
+ }
609
+ if (!produced)
610
+ return;
611
+ // A consumer that takes anything needs no conversion.
612
+ try {
613
+ const ctx = declChecker.getContextualType(d);
614
+ if (ctx !== undefined && ctx.flags & ANYISH)
615
+ return;
616
+ }
617
+ catch {
618
+ // no contextual type
619
+ }
620
+ const declType = typeAt(declChecker, d);
621
+ if (declType === null)
622
+ return;
623
+ const alias = printer.project(declType);
624
+ if (alias === null)
625
+ return;
626
+ exprCandidates.set(jsNode, alias);
627
+ exprOrder.push(jsNode);
628
+ };
629
+ const annotated = new Set();
630
+ const considerParam = (jsNode, declNode) => {
631
+ if (!ts.isParameter(jsNode) || jsNode.type !== undefined || !ts.isIdentifier(jsNode.name))
632
+ return;
633
+ const fn = jsNode.parent;
634
+ if (fn === undefined || !(ts.isArrowFunction(fn) || ts.isFunctionExpression(fn)))
635
+ return;
636
+ if (jsNode.dotDotDotToken !== undefined)
637
+ return;
638
+ const jsType = typeAt(jsChecker, jsNode.name);
639
+ if (!isAnyish(jsType))
640
+ return;
641
+ const declType = typeAt(declChecker, declNode.name);
642
+ if (declType === null)
643
+ return;
644
+ // Only parameters the package's declarations type (a callback the
645
+ // package calls), not ones the user typed elsewhere.
646
+ try {
647
+ const ctxFn = declChecker.getContextualType(declNode.parent);
648
+ if (ctxFn === undefined)
649
+ return;
650
+ const sigs = declChecker.getCallSignatures(ctxFn);
651
+ if (!sigs.some((s) => s.declaration !== undefined &&
652
+ isPackageDeclarationFile(ts.getSourceFileOfNode(s.declaration))))
653
+ return;
654
+ }
655
+ catch {
656
+ return;
657
+ }
658
+ const alias = printer.project(declType);
659
+ if (alias === null)
660
+ return;
661
+ annotated.add(jsNode);
662
+ const name = jsNode.name;
663
+ const nameStart = ts.tokenStartOfNode(name);
664
+ const text = jsSf.text;
665
+ // `x => ...` or `async x => ...`: nothing but the modifiers comes
666
+ // before the parameter, which then needs parentheses for its type.
667
+ const head = ts.isArrowFunction(fn)
668
+ ? ((ts.getModifiers(fn) ?? []).at(-1)?.end ?? ts.tokenStartOfNode(fn))
669
+ : nameStart;
670
+ const bareArrow = ts.isArrowFunction(fn) &&
671
+ fn.parameters.nodes.length === 1 &&
672
+ text.slice(head, nameStart).trim() === "";
673
+ const afterName = jsNode.questionToken !== undefined ? jsNode.questionToken.end : name.end;
674
+ if (bareArrow) {
675
+ fileEdits.push({ start: nameStart, end: nameStart, text: "(" });
676
+ fileEdits.push({ start: afterName, end: afterName, text: `: ${alias})` });
677
+ }
678
+ else {
679
+ fileEdits.push({ start: afterName, end: afterName, text: `: ${alias}` });
680
+ }
681
+ plan.push(`${file}:${nameStart}: parameter ${name.text}: ${alias}`);
682
+ };
683
+ const walk = (jsNode, declNode) => {
684
+ if (jsNode.kind !== declNode.kind)
685
+ return;
686
+ if (ts.isTypeNode(jsNode) || ts.isExpressionWithTypeArguments(jsNode)) {
687
+ if (considerType(jsNode, declNode))
688
+ return;
689
+ }
690
+ else {
691
+ considerParam(jsNode, declNode);
692
+ considerExpr(jsNode, declNode);
693
+ }
694
+ const a = childrenOf(jsNode);
695
+ const b = childrenOf(declNode);
696
+ if (a.length !== b.length)
697
+ return;
698
+ for (let i = 0; i < a.length; i++)
699
+ walk(a[i], b[i]);
700
+ };
701
+ walk(jsSf, declSf);
702
+ // Suppress candidates whose receiver chain another candidate types.
703
+ const symbolTyped = new Map();
704
+ const willBeTyped = (e, depth = 0) => {
705
+ if (depth > 32)
706
+ return false;
707
+ if (exprCandidates.has(e))
708
+ return true;
709
+ if (ts.isParenthesizedExpression(e) || ts.isNonNullExpression(e) || ts.isAwaitExpression(e))
710
+ return willBeTyped(e.expression, depth + 1);
711
+ if (ts.isAsExpression(e))
712
+ return false;
713
+ if (ts.isPropertyAccessExpression(e) || ts.isElementAccessExpression(e))
714
+ return willBeTyped(e.expression, depth + 1);
715
+ if (ts.isIdentifier(e)) {
716
+ let sym;
717
+ try {
718
+ sym = jsChecker.getSymbolAtLocation(e);
719
+ }
720
+ catch {
721
+ return false;
722
+ }
723
+ if (sym === undefined)
724
+ return false;
725
+ const known = symbolTyped.get(sym);
726
+ if (known !== undefined)
727
+ return known;
728
+ symbolTyped.set(sym, false);
729
+ let result = false;
730
+ const decls = sym.declarations;
731
+ if (decls.length === 1) {
732
+ const decl = decls[0];
733
+ if (ts.isVariableDeclaration(decl) &&
734
+ decl.initializer !== undefined &&
735
+ decl.type === undefined)
736
+ result = willBeTyped(decl.initializer, depth + 1);
737
+ else if (ts.isParameter(decl) && annotated.has(decl))
738
+ result = true;
739
+ else if (ts.isBindingElement(decl))
740
+ result = false;
741
+ }
742
+ symbolTyped.set(sym, result);
743
+ return result;
744
+ }
745
+ return false;
746
+ };
747
+ const receiverOf = (e) => {
748
+ if (ts.isPropertyAccessExpression(e) || ts.isElementAccessExpression(e))
749
+ return e.expression;
750
+ if (ts.isIdentifier(e))
751
+ return null;
752
+ return null;
753
+ };
754
+ const kept = [];
755
+ for (const e of exprOrder) {
756
+ const recv = receiverOf(e);
757
+ if (recv !== null && willBeTyped(recv))
758
+ continue;
759
+ // An identifier candidate that is a user binding never gets here
760
+ // (only package imports are candidates).
761
+ kept.push(e);
762
+ }
763
+ // Nested candidates: keep only the innermost (an outer one is typed by
764
+ // the inner wrap).
765
+ const keptSet = new Set(kept);
766
+ const containsKept = (outer) => {
767
+ let found = false;
768
+ const visit = (n) => {
769
+ if (found)
770
+ return;
771
+ for (const c of childrenOf(n)) {
772
+ if (keptSet.has(c)) {
773
+ found = true;
774
+ return;
775
+ }
776
+ visit(c);
777
+ }
778
+ };
779
+ visit(outer);
780
+ return found;
781
+ };
782
+ for (const e of kept) {
783
+ if (!ts.isAwaitExpression(e) &&
784
+ containsKept(e) &&
785
+ (ts.isPropertyAccessExpression(e) || ts.isElementAccessExpression(e))) {
786
+ // `a.b.c` with `a.b` wrapped: the outer access reads typed data.
787
+ const recv = receiverOf(e);
788
+ if (recv !== null &&
789
+ (keptSet.has(unwrapTransparent(recv)) || willBeTyped(recv)))
790
+ continue;
791
+ }
792
+ const alias = exprCandidates.get(e);
793
+ const start = ts.tokenStartOfNode(e);
794
+ const stmt = e.parent;
795
+ let prefix = "(";
796
+ // A statement that would start with `(` after a line without a
797
+ // semicolon continues the previous expression: guard it.
798
+ let up = e;
799
+ while (up?.parent !== undefined && !ts.isStatement(up.parent))
800
+ up = up.parent;
801
+ // Only a statement in a statement list can follow such a line; an
802
+ // unbraced body (`for (...) S.parse(x).run()`) follows its header,
803
+ // and a `;` there would become the body.
804
+ const list = up?.parent?.parent;
805
+ if (up?.parent !== undefined &&
806
+ ts.isExpressionStatement(up.parent) &&
807
+ ts.tokenStartOfNode(up.parent) === start &&
808
+ list !== undefined &&
809
+ (ts.isBlock(list) ||
810
+ ts.isSourceFile(list) ||
811
+ ts.isModuleBlock(list) ||
812
+ ts.isCaseClause(list) ||
813
+ ts.isDefaultClause(list)))
814
+ prefix = ";(";
815
+ void stmt;
816
+ fileEdits.push({ start, end: start, text: prefix });
817
+ // Closing parts at one position close inner wraps first.
818
+ fileEdits.push({ start: e.end, end: e.end, text: ` as ${alias})`, rank: -start });
819
+ plan.push(`${file}:${start}: cast ${jsSf.text.slice(start, Math.min(e.end, start + 60)).replace(/\s+/g, " ")} as ${alias}`);
820
+ }
821
+ if (fileEdits.length === 0)
822
+ continue;
823
+ edits.set(file, fileEdits);
824
+ }
825
+ if (edits.size === 0)
826
+ return null;
827
+ const files = new Map();
828
+ for (const [file, list] of edits) {
829
+ const sf = input.jsProgram.getSourceFile(file);
830
+ files.set(file, applyEdits(sf.text, list));
831
+ }
832
+ const declFile = `${input.outDir.split("\\").join("/")}/${DECL_BOUNDARY_FILE}`;
833
+ const declText = "// Generated by scriptc: types projected from npm package declarations.\n" +
834
+ printer.declarations.join("\n") +
835
+ "\n";
836
+ return { files, declFile, declText, plan };
837
+ }
838
+ /** Applies insertions and replacements; overlapping replacements keep the
839
+ * first. Insertions at one position keep their order. */
840
+ export function applyEdits(text, edits) {
841
+ const sorted = edits
842
+ .map((e, i) => ({ ...e, i }))
843
+ .sort((a, b) => a.start - b.start || a.end - b.end || (a.rank ?? 0) - (b.rank ?? 0) || a.i - b.i);
844
+ let out = "";
845
+ let at = 0;
846
+ for (const e of sorted) {
847
+ if (e.start < at)
848
+ continue; // overlaps an earlier replacement
849
+ out += text.slice(at, e.start) + e.text;
850
+ at = e.end;
851
+ }
852
+ return out + text.slice(at);
853
+ }
854
+ //# sourceMappingURL=decl-projection.js.map