@scriptc/compiler 0.4.5 → 0.4.6

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 (1200) hide show
  1. package/ambient/node-fallback/assert-strict.d.ts +47 -0
  2. package/ambient/node-fallback/assert.d.ts +86 -0
  3. package/ambient/node-fallback/async_hooks.d.ts +41 -0
  4. package/ambient/node-fallback/buffer.d.ts +23 -0
  5. package/ambient/node-fallback/child_process.d.ts +242 -0
  6. package/ambient/node-fallback/cluster.d.ts +17 -0
  7. package/ambient/node-fallback/constants.d.ts +15 -0
  8. package/ambient/node-fallback/crypto.d.ts +837 -0
  9. package/ambient/node-fallback/dgram.d.ts +58 -0
  10. package/ambient/node-fallback/diagnostics_channel.d.ts +87 -0
  11. package/ambient/node-fallback/dns-promises.d.ts +27 -0
  12. package/ambient/node-fallback/dns.d.ts +65 -0
  13. package/ambient/node-fallback/events.d.ts +60 -0
  14. package/ambient/node-fallback/fs-promises.d.ts +225 -0
  15. package/ambient/node-fallback/fs.d.ts +641 -0
  16. package/ambient/node-fallback/graceful-fs.d.ts +9 -0
  17. package/ambient/node-fallback/http.d.ts +326 -0
  18. package/ambient/node-fallback/http2.d.ts +816 -0
  19. package/ambient/node-fallback/https.d.ts +59 -0
  20. package/ambient/node-fallback/module.d.ts +10 -0
  21. package/ambient/node-fallback/net.d.ts +374 -0
  22. package/ambient/node-fallback/os.d.ts +288 -0
  23. package/ambient/node-fallback/path-posix.d.ts +22 -0
  24. package/ambient/node-fallback/path-win32.d.ts +22 -0
  25. package/ambient/node-fallback/path.d.ts +55 -0
  26. package/ambient/node-fallback/process.d.ts +11 -0
  27. package/ambient/node-fallback/punycode.d.ts +18 -0
  28. package/ambient/node-fallback/querystring.d.ts +55 -0
  29. package/ambient/node-fallback/stream-consumers.d.ts +21 -0
  30. package/ambient/node-fallback/stream-promises.d.ts +28 -0
  31. package/ambient/node-fallback/stream-web.d.ts +36 -0
  32. package/ambient/node-fallback/stream.d.ts +644 -0
  33. package/ambient/node-fallback/string_decoder.d.ts +20 -0
  34. package/ambient/node-fallback/test.d.ts +236 -0
  35. package/ambient/node-fallback/timers-promises.d.ts +31 -0
  36. package/ambient/node-fallback/timers.d.ts +28 -0
  37. package/ambient/node-fallback/tls.d.ts +169 -0
  38. package/ambient/node-fallback/url.d.ts +95 -0
  39. package/ambient/node-fallback/util-types.d.ts +50 -0
  40. package/ambient/node-fallback/util.d.ts +416 -0
  41. package/ambient/node-fallback/v8.d.ts +43 -0
  42. package/ambient/node-fallback/worker_threads.d.ts +113 -0
  43. package/ambient/node-fallback/zlib.d.ts +422 -0
  44. package/ambient/scriptc-node-fallback.d.ts +224 -6688
  45. package/dist/backend/cycle-analysis.js +4 -0
  46. package/dist/backend/cycle-analysis.js.map +1 -1
  47. package/dist/backend/executable-features.d.ts +1 -1
  48. package/dist/backend/executable-features.js +15 -2
  49. package/dist/backend/executable-features.js.map +1 -1
  50. package/dist/backend/huge-text.d.ts +16 -0
  51. package/dist/backend/huge-text.js +103 -0
  52. package/dist/backend/huge-text.js.map +1 -0
  53. package/dist/backend/huge-text.test.d.ts +1 -0
  54. package/dist/backend/huge-text.test.js +73 -0
  55. package/dist/backend/huge-text.test.js.map +1 -0
  56. package/dist/backend/library-pack.js +1 -1
  57. package/dist/backend/library-pack.js.map +1 -1
  58. package/dist/backend/link-plan-core.d.ts +10 -0
  59. package/dist/backend/link-plan-core.js +14 -2
  60. package/dist/backend/link-plan-core.js.map +1 -1
  61. package/dist/backend/link-plan-core.test.d.ts +1 -0
  62. package/dist/backend/link-plan-core.test.js +20 -0
  63. package/dist/backend/link-plan-core.test.js.map +1 -0
  64. package/dist/backend/link-plan.d.ts +8 -0
  65. package/dist/backend/link-plan.js +7 -0
  66. package/dist/backend/link-plan.js.map +1 -1
  67. package/dist/backend/linker.js +37 -14
  68. package/dist/backend/linker.js.map +1 -1
  69. package/dist/backend/lld.d.ts +13 -0
  70. package/dist/backend/lld.js +18 -1
  71. package/dist/backend/lld.js.map +1 -1
  72. package/dist/backend/lld.test.js +7 -1
  73. package/dist/backend/lld.test.js.map +1 -1
  74. package/dist/backend/llvm/alloc.d.ts +2 -0
  75. package/dist/backend/llvm/alloc.js +1 -1
  76. package/dist/backend/llvm/alloc.js.map +1 -1
  77. package/dist/backend/llvm/arenas.d.ts +78 -0
  78. package/dist/backend/llvm/arenas.js +313 -0
  79. package/dist/backend/llvm/arenas.js.map +1 -0
  80. package/dist/backend/llvm/arenas.test.d.ts +1 -0
  81. package/dist/backend/llvm/arenas.test.js +140 -0
  82. package/dist/backend/llvm/arenas.test.js.map +1 -0
  83. package/dist/backend/llvm/blocks.d.ts +11 -1
  84. package/dist/backend/llvm/blocks.js +23 -5
  85. package/dist/backend/llvm/blocks.js.map +1 -1
  86. package/dist/backend/llvm/bytes-headers.d.ts +19 -0
  87. package/dist/backend/llvm/bytes-headers.js +55 -0
  88. package/dist/backend/llvm/bytes-headers.js.map +1 -0
  89. package/dist/backend/llvm/bytes-loop-versions.d.ts +4 -3
  90. package/dist/backend/llvm/bytes-loop-versions.js +42 -7
  91. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  92. package/dist/backend/llvm/bytes-loop-versions.test.js +39 -4
  93. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  94. package/dist/backend/llvm/call-lifetimes.d.ts +5 -0
  95. package/dist/backend/llvm/call-lifetimes.js +43 -8
  96. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  97. package/dist/backend/llvm/call-lifetimes.test.js +26 -0
  98. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  99. package/dist/backend/llvm/checked-narrows.d.ts +3 -0
  100. package/dist/backend/llvm/checked-narrows.js +8 -1
  101. package/dist/backend/llvm/checked-narrows.js.map +1 -1
  102. package/dist/backend/llvm/class-unions.d.ts +21 -0
  103. package/dist/backend/llvm/class-unions.js +141 -0
  104. package/dist/backend/llvm/class-unions.js.map +1 -0
  105. package/dist/backend/llvm/class-unions.test.d.ts +1 -0
  106. package/dist/backend/llvm/class-unions.test.js +137 -0
  107. package/dist/backend/llvm/class-unions.test.js.map +1 -0
  108. package/dist/backend/llvm/classes.d.ts +46 -8
  109. package/dist/backend/llvm/classes.js +259 -32
  110. package/dist/backend/llvm/classes.js.map +1 -1
  111. package/dist/backend/llvm/classes.test.js +4 -0
  112. package/dist/backend/llvm/classes.test.js.map +1 -1
  113. package/dist/backend/llvm/common.d.ts +23 -0
  114. package/dist/backend/llvm/common.js +34 -0
  115. package/dist/backend/llvm/common.js.map +1 -1
  116. package/dist/backend/llvm/constant-callbacks.test.js +39 -0
  117. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  118. package/dist/backend/llvm/constant-choices.d.ts +32 -0
  119. package/dist/backend/llvm/constant-choices.js +209 -0
  120. package/dist/backend/llvm/constant-choices.js.map +1 -0
  121. package/dist/backend/llvm/constant-choices.test.d.ts +1 -0
  122. package/dist/backend/llvm/constant-choices.test.js +94 -0
  123. package/dist/backend/llvm/constant-choices.test.js.map +1 -0
  124. package/dist/backend/llvm/counted-loops.d.ts +14 -2
  125. package/dist/backend/llvm/counted-loops.js +60 -7
  126. package/dist/backend/llvm/counted-loops.js.map +1 -1
  127. package/dist/backend/llvm/counted-loops.test.d.ts +1 -0
  128. package/dist/backend/llvm/counted-loops.test.js +34 -0
  129. package/dist/backend/llvm/counted-loops.test.js.map +1 -0
  130. package/dist/backend/llvm/cpu-dispatch.d.ts +26 -0
  131. package/dist/backend/llvm/cpu-dispatch.js +279 -0
  132. package/dist/backend/llvm/cpu-dispatch.js.map +1 -0
  133. package/dist/backend/llvm/dense-array-access.d.ts +13 -2
  134. package/dist/backend/llvm/dense-array-access.js +60 -6
  135. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  136. package/dist/backend/llvm/dyn-handle-tags.test.js +40 -14
  137. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
  138. package/dist/backend/llvm/dyn.d.ts +28 -2
  139. package/dist/backend/llvm/dyn.js +176 -27
  140. package/dist/backend/llvm/dyn.js.map +1 -1
  141. package/dist/backend/llvm/emit-function.js +25 -3
  142. package/dist/backend/llvm/emit-function.js.map +1 -1
  143. package/dist/backend/llvm/emit-journal.d.ts +1 -0
  144. package/dist/backend/llvm/emit-journal.js.map +1 -1
  145. package/dist/backend/llvm/emit-module.d.ts +5 -3
  146. package/dist/backend/llvm/emit-module.js +362 -74
  147. package/dist/backend/llvm/emit-module.js.map +1 -1
  148. package/dist/backend/llvm/emit-statements.js +327 -59
  149. package/dist/backend/llvm/emit-statements.js.map +1 -1
  150. package/dist/backend/llvm/emitter.d.ts +223 -33
  151. package/dist/backend/llvm/emitter.js +713 -100
  152. package/dist/backend/llvm/emitter.js.map +1 -1
  153. package/dist/backend/llvm/emitter.test.js +20 -1
  154. package/dist/backend/llvm/emitter.test.js.map +1 -1
  155. package/dist/backend/llvm/expr-async.js +32 -6
  156. package/dist/backend/llvm/expr-async.js.map +1 -1
  157. package/dist/backend/llvm/expr-bytes.d.ts +9 -1
  158. package/dist/backend/llvm/expr-bytes.js +105 -9
  159. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  160. package/dist/backend/llvm/expr-callbacks.d.ts +1 -1
  161. package/dist/backend/llvm/expr-callbacks.js +29 -22
  162. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  163. package/dist/backend/llvm/expr-calls.d.ts +0 -4
  164. package/dist/backend/llvm/expr-calls.js +116 -14
  165. package/dist/backend/llvm/expr-calls.js.map +1 -1
  166. package/dist/backend/llvm/expr-containers.js +77 -12
  167. package/dist/backend/llvm/expr-containers.js.map +1 -1
  168. package/dist/backend/llvm/expr-context.d.ts +22 -0
  169. package/dist/backend/llvm/expr-control.d.ts +4 -0
  170. package/dist/backend/llvm/expr-control.js +485 -426
  171. package/dist/backend/llvm/expr-control.js.map +1 -1
  172. package/dist/backend/llvm/expr-dispatch.js +4 -0
  173. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  174. package/dist/backend/llvm/expr-dynamic.js +3 -3
  175. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  176. package/dist/backend/llvm/expr-primitives.d.ts +6 -0
  177. package/dist/backend/llvm/expr-primitives.js +119 -58
  178. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  179. package/dist/backend/llvm/expr-primitives.test.js +11 -2
  180. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  181. package/dist/backend/llvm/expr-records.d.ts +36 -4
  182. package/dist/backend/llvm/expr-records.js +249 -37
  183. package/dist/backend/llvm/expr-records.js.map +1 -1
  184. package/dist/backend/llvm/expr-stream-bridges.js +124 -7
  185. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  186. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  187. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  188. package/dist/backend/llvm/expr-stream-callbacks.js +13 -14
  189. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  190. package/dist/backend/llvm/frame-escapes.d.ts +11 -0
  191. package/dist/backend/llvm/frame-escapes.js +219 -0
  192. package/dist/backend/llvm/frame-escapes.js.map +1 -0
  193. package/dist/backend/llvm/function-layout.d.ts +15 -0
  194. package/dist/backend/llvm/function-layout.js +40 -0
  195. package/dist/backend/llvm/function-layout.js.map +1 -0
  196. package/dist/backend/llvm/heap-census.d.ts +34 -0
  197. package/dist/backend/llvm/heap-census.js +163 -0
  198. package/dist/backend/llvm/heap-census.js.map +1 -0
  199. package/dist/backend/llvm/inline-arrays.d.ts +41 -0
  200. package/dist/backend/llvm/inline-arrays.js +195 -0
  201. package/dist/backend/llvm/inline-arrays.js.map +1 -0
  202. package/dist/backend/llvm/int32-kind-loops.js +2 -0
  203. package/dist/backend/llvm/int32-kind-loops.js.map +1 -1
  204. package/dist/backend/llvm/integer-clones.d.ts +32 -5
  205. package/dist/backend/llvm/integer-clones.js +237 -44
  206. package/dist/backend/llvm/integer-clones.js.map +1 -1
  207. package/dist/backend/llvm/integer-clones.test.js +120 -0
  208. package/dist/backend/llvm/integer-clones.test.js.map +1 -1
  209. package/dist/backend/llvm/iterative-teardown.test.d.ts +1 -0
  210. package/dist/backend/llvm/iterative-teardown.test.js +62 -0
  211. package/dist/backend/llvm/iterative-teardown.test.js.map +1 -0
  212. package/dist/backend/llvm/js-ic.js +246 -62
  213. package/dist/backend/llvm/js-ic.js.map +1 -1
  214. package/dist/backend/llvm/lib-connect.js +1 -1
  215. package/dist/backend/llvm/lib-connect.js.map +1 -1
  216. package/dist/backend/llvm/lib-datagram.js +2 -2
  217. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  218. package/dist/backend/llvm/lib-dispatch.js +153 -16
  219. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  220. package/dist/backend/llvm/lib-filesystem.d.ts +8 -0
  221. package/dist/backend/llvm/lib-filesystem.js +48 -4
  222. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  223. package/dist/backend/llvm/lib-http2.js +4 -3
  224. package/dist/backend/llvm/lib-http2.js.map +1 -1
  225. package/dist/backend/llvm/lib-lookup.js +1 -1
  226. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  227. package/dist/backend/llvm/lib-network.js +15 -1
  228. package/dist/backend/llvm/lib-network.js.map +1 -1
  229. package/dist/backend/llvm/lib-process.js +32 -8
  230. package/dist/backend/llvm/lib-process.js.map +1 -1
  231. package/dist/backend/llvm/lib-shared.d.ts +3 -0
  232. package/dist/backend/llvm/lib-shared.js +191 -28
  233. package/dist/backend/llvm/lib-shared.js.map +1 -1
  234. package/dist/backend/llvm/lib-stream.js +1 -1
  235. package/dist/backend/llvm/lib-stream.js.map +1 -1
  236. package/dist/backend/llvm/local-array-reads.js +15 -1
  237. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  238. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  239. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  240. package/dist/backend/llvm/local-extents.d.ts +22 -0
  241. package/dist/backend/llvm/local-extents.js +102 -0
  242. package/dist/backend/llvm/local-extents.js.map +1 -1
  243. package/dist/backend/llvm/local-union-storage.js +15 -2
  244. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  245. package/dist/backend/llvm/local-union-storage.test.js +1 -1
  246. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  247. package/dist/backend/llvm/loop-callees.d.ts +21 -0
  248. package/dist/backend/llvm/loop-callees.js +119 -0
  249. package/dist/backend/llvm/loop-callees.js.map +1 -0
  250. package/dist/backend/llvm/loop-callees.test.d.ts +1 -0
  251. package/dist/backend/llvm/loop-callees.test.js +65 -0
  252. package/dist/backend/llvm/loop-callees.test.js.map +1 -0
  253. package/dist/backend/llvm/loop-entry-versions.d.ts +17 -0
  254. package/dist/backend/llvm/loop-entry-versions.js +185 -0
  255. package/dist/backend/llvm/loop-entry-versions.js.map +1 -0
  256. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  257. package/dist/backend/llvm/map-number-lookup.test.js +13 -4
  258. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  259. package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -0
  260. package/dist/backend/llvm/map-read-lifetimes.js +51 -1
  261. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  262. package/dist/backend/llvm/map-read-lifetimes.test.js +6 -3
  263. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  264. package/dist/backend/llvm/nullable-unions.d.ts +67 -10
  265. package/dist/backend/llvm/nullable-unions.js +218 -22
  266. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  267. package/dist/backend/llvm/nullable-unions.test.js +124 -1
  268. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  269. package/dist/backend/llvm/periodic-guards.d.ts +16 -0
  270. package/dist/backend/llvm/periodic-guards.js +91 -0
  271. package/dist/backend/llvm/periodic-guards.js.map +1 -0
  272. package/dist/backend/llvm/periodic-guards.test.d.ts +1 -0
  273. package/dist/backend/llvm/periodic-guards.test.js +64 -0
  274. package/dist/backend/llvm/periodic-guards.test.js.map +1 -0
  275. package/dist/backend/llvm/publish.d.ts +12 -2
  276. package/dist/backend/llvm/publish.js +15 -8
  277. package/dist/backend/llvm/publish.js.map +1 -1
  278. package/dist/backend/llvm/rebound-parameters.d.ts +4 -1
  279. package/dist/backend/llvm/rebound-parameters.js +17 -1
  280. package/dist/backend/llvm/rebound-parameters.js.map +1 -1
  281. package/dist/backend/llvm/receivers.d.ts +7 -0
  282. package/dist/backend/llvm/receivers.js +77 -10
  283. package/dist/backend/llvm/receivers.js.map +1 -1
  284. package/dist/backend/llvm/record-union-keys.test.js +29 -0
  285. package/dist/backend/llvm/record-union-keys.test.js.map +1 -1
  286. package/dist/backend/llvm/record-views.d.ts +29 -0
  287. package/dist/backend/llvm/record-views.js +249 -0
  288. package/dist/backend/llvm/record-views.js.map +1 -0
  289. package/dist/backend/llvm/record-views.test.d.ts +1 -0
  290. package/dist/backend/llvm/record-views.test.js +118 -0
  291. package/dist/backend/llvm/record-views.test.js.map +1 -0
  292. package/dist/backend/llvm/reference-writes.js +21 -0
  293. package/dist/backend/llvm/reference-writes.js.map +1 -1
  294. package/dist/backend/llvm/reference-writes.test.js +42 -0
  295. package/dist/backend/llvm/reference-writes.test.js.map +1 -1
  296. package/dist/backend/llvm/regex-matchers.d.ts +5 -1
  297. package/dist/backend/llvm/regex-matchers.js +173 -21
  298. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  299. package/dist/backend/llvm/regex-matchers.test.js +39 -1
  300. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  301. package/dist/backend/llvm/region-groups.d.ts +67 -0
  302. package/dist/backend/llvm/region-groups.js +1719 -0
  303. package/dist/backend/llvm/region-groups.js.map +1 -0
  304. package/dist/backend/llvm/region-groups.test.d.ts +1 -0
  305. package/dist/backend/llvm/region-groups.test.js +197 -0
  306. package/dist/backend/llvm/region-groups.test.js.map +1 -0
  307. package/dist/backend/llvm/region-ir.d.ts +31 -0
  308. package/dist/backend/llvm/region-ir.js +256 -0
  309. package/dist/backend/llvm/region-ir.js.map +1 -0
  310. package/dist/backend/llvm/region-sites.d.ts +20 -0
  311. package/dist/backend/llvm/region-sites.js +327 -0
  312. package/dist/backend/llvm/region-sites.js.map +1 -0
  313. package/dist/backend/llvm/region-sites.test.d.ts +1 -0
  314. package/dist/backend/llvm/region-sites.test.js +216 -0
  315. package/dist/backend/llvm/region-sites.test.js.map +1 -0
  316. package/dist/backend/llvm/repr-report.d.ts +9 -0
  317. package/dist/backend/llvm/repr-report.js +143 -0
  318. package/dist/backend/llvm/repr-report.js.map +1 -0
  319. package/dist/backend/llvm/repr-report.test.d.ts +1 -0
  320. package/dist/backend/llvm/repr-report.test.js +62 -0
  321. package/dist/backend/llvm/repr-report.test.js.map +1 -0
  322. package/dist/backend/llvm/runtime-registries.test.d.ts +1 -0
  323. package/dist/backend/llvm/runtime-registries.test.js +88 -0
  324. package/dist/backend/llvm/runtime-registries.test.js.map +1 -0
  325. package/dist/backend/llvm/serialized-ir-emission.test.js +1 -0
  326. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  327. package/dist/backend/llvm/shape-union-tags.test.d.ts +1 -0
  328. package/dist/backend/llvm/shape-union-tags.test.js +75 -0
  329. package/dist/backend/llvm/shape-union-tags.test.js.map +1 -0
  330. package/dist/backend/llvm/shapes.d.ts +60 -10
  331. package/dist/backend/llvm/shapes.js +233 -51
  332. package/dist/backend/llvm/shapes.js.map +1 -1
  333. package/dist/backend/llvm/shapes.test.js +37 -18
  334. package/dist/backend/llvm/shapes.test.js.map +1 -1
  335. package/dist/backend/llvm/speculative-integers.d.ts +3 -0
  336. package/dist/backend/llvm/speculative-integers.js +20 -8
  337. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  338. package/dist/backend/llvm/split.js +6 -1
  339. package/dist/backend/llvm/split.js.map +1 -1
  340. package/dist/backend/llvm/split.test.js +23 -0
  341. package/dist/backend/llvm/split.test.js.map +1 -1
  342. package/dist/backend/llvm/stack-callbacks.js +4 -2
  343. package/dist/backend/llvm/stack-callbacks.js.map +1 -1
  344. package/dist/backend/llvm/stack-objects.d.ts +12 -3
  345. package/dist/backend/llvm/stack-objects.js +110 -22
  346. package/dist/backend/llvm/stack-objects.js.map +1 -1
  347. package/dist/backend/llvm/stack-objects.test.js +144 -0
  348. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  349. package/dist/backend/llvm/stack-unions.test.js +24 -1
  350. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  351. package/dist/backend/llvm/string-lifetimes.js +2 -1
  352. package/dist/backend/llvm/string-lifetimes.js.map +1 -1
  353. package/dist/backend/llvm/string-lifetimes.test.js +1 -1
  354. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  355. package/dist/backend/llvm/string-reads.d.ts +4 -0
  356. package/dist/backend/llvm/string-reads.js +27 -0
  357. package/dist/backend/llvm/string-reads.js.map +1 -1
  358. package/dist/backend/llvm/test-boxed-unions.d.ts +10 -8
  359. package/dist/backend/llvm/test-boxed-unions.js +20 -25
  360. package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
  361. package/dist/backend/llvm/union-repr.js +9 -8
  362. package/dist/backend/llvm/union-repr.js.map +1 -1
  363. package/dist/backend/llvm/union-retype.test.js +45 -2
  364. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  365. package/dist/backend/llvm/unwind-abi.d.ts +20 -8
  366. package/dist/backend/llvm/unwind-abi.js +177 -70
  367. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  368. package/dist/backend/llvm/unwind-abi.test.js +90 -3
  369. package/dist/backend/llvm/unwind-abi.test.js.map +1 -1
  370. package/dist/backend/llvm/walk-borrows.d.ts +3 -2
  371. package/dist/backend/llvm/walk-borrows.js +2 -2
  372. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  373. package/dist/backend/llvm/walk-borrows.test.js +18 -0
  374. package/dist/backend/llvm/walk-borrows.test.js.map +1 -1
  375. package/dist/backend/llvm/walkers.d.ts +14 -1
  376. package/dist/backend/llvm/walkers.js +103 -11
  377. package/dist/backend/llvm/walkers.js.map +1 -1
  378. package/dist/backend/llvm/wrapping-sums.d.ts +26 -6
  379. package/dist/backend/llvm/wrapping-sums.js +64 -12
  380. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  381. package/dist/backend/loop-polls.d.ts +4 -2
  382. package/dist/backend/loop-polls.js +11 -2
  383. package/dist/backend/loop-polls.js.map +1 -1
  384. package/dist/backend/mangle.d.ts +0 -5
  385. package/dist/backend/mangle.js +0 -9
  386. package/dist/backend/mangle.js.map +1 -1
  387. package/dist/backend/may-throw.d.ts +10 -9
  388. package/dist/backend/may-throw.js +189 -27
  389. package/dist/backend/may-throw.js.map +1 -1
  390. package/dist/backend/may-throw.test.js +44 -7
  391. package/dist/backend/may-throw.test.js.map +1 -1
  392. package/dist/backend/native/compiler-fingerprint.d.ts +5 -0
  393. package/dist/backend/native/compiler-fingerprint.js +62 -16
  394. package/dist/backend/native/compiler-fingerprint.js.map +1 -1
  395. package/dist/backend/native/contracts.d.ts +31 -8
  396. package/dist/backend/native/executable.js +56 -32
  397. package/dist/backend/native/executable.js.map +1 -1
  398. package/dist/backend/native/library.js +3 -4
  399. package/dist/backend/native/library.js.map +1 -1
  400. package/dist/backend/native/object-merge.d.ts +3 -1
  401. package/dist/backend/native/object-merge.js +24 -11
  402. package/dist/backend/native/object-merge.js.map +1 -1
  403. package/dist/backend/native/program-shards.js +6 -3
  404. package/dist/backend/native/program-shards.js.map +1 -1
  405. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  406. package/dist/backend/native/runtime-inputs.js +3 -0
  407. package/dist/backend/native/runtime-inputs.js.map +1 -1
  408. package/dist/backend/native/vendor.d.ts +1 -1
  409. package/dist/backend/native-codegen-core.d.ts +15 -6
  410. package/dist/backend/native-codegen-core.js +20 -9
  411. package/dist/backend/native-codegen-core.js.map +1 -1
  412. package/dist/backend/native-codegen.js +51 -5
  413. package/dist/backend/native-codegen.js.map +1 -1
  414. package/dist/backend/native-codegen.test.js +82 -8
  415. package/dist/backend/native-codegen.test.js.map +1 -1
  416. package/dist/backend/native-link-info-core.d.ts +30 -0
  417. package/dist/backend/native-link-info-core.js.map +1 -1
  418. package/dist/backend/native-profile.d.ts +68 -4
  419. package/dist/backend/native-profile.js +86 -14
  420. package/dist/backend/native-profile.js.map +1 -1
  421. package/dist/backend/native-profile.test.js +127 -4
  422. package/dist/backend/native-profile.test.js.map +1 -1
  423. package/dist/backend/native-toolchain.d.ts +1 -1
  424. package/dist/backend/native-toolchain.js +1 -1
  425. package/dist/backend/native-toolchain.js.map +1 -1
  426. package/dist/backend/native-toolchain.test.js +58 -4
  427. package/dist/backend/native-toolchain.test.js.map +1 -1
  428. package/dist/backend/native-tools.d.ts +17 -3
  429. package/dist/backend/native-tools.js +12 -4
  430. package/dist/backend/native-tools.js.map +1 -1
  431. package/dist/backend/native-tools.test.d.ts +1 -0
  432. package/dist/backend/native-tools.test.js +76 -0
  433. package/dist/backend/native-tools.test.js.map +1 -0
  434. package/dist/backend/object-localize.js +69 -9
  435. package/dist/backend/object-localize.js.map +1 -1
  436. package/dist/backend/object-localize.test.js +99 -10
  437. package/dist/backend/object-localize.test.js.map +1 -1
  438. package/dist/backend/publication.d.ts +2 -0
  439. package/dist/backend/publication.js +4 -0
  440. package/dist/backend/publication.js.map +1 -1
  441. package/dist/backend/runtime-abi.d.ts +2 -2
  442. package/dist/backend/runtime-abi.js +2 -2
  443. package/dist/backend/runtime-pack-core.d.ts +19 -0
  444. package/dist/backend/runtime-pack-core.js +23 -3
  445. package/dist/backend/runtime-pack-core.js.map +1 -1
  446. package/dist/backend/runtime-pack-targets.test.js +1 -1
  447. package/dist/backend/runtime-pack.test.js +48 -2
  448. package/dist/backend/runtime-pack.test.js.map +1 -1
  449. package/dist/backend/target-cpu.d.ts +2 -0
  450. package/dist/backend/target-cpu.js +4 -0
  451. package/dist/backend/target-cpu.js.map +1 -1
  452. package/dist/backend/target-diagnostics.js +1 -19
  453. package/dist/backend/target-diagnostics.js.map +1 -1
  454. package/dist/backend/target-diagnostics.test.js +1 -1
  455. package/dist/backend/target-diagnostics.test.js.map +1 -1
  456. package/dist/backend/targets.d.ts +28 -0
  457. package/dist/backend/targets.js +70 -0
  458. package/dist/backend/targets.js.map +1 -1
  459. package/dist/backend/targets.test.js +75 -1
  460. package/dist/backend/targets.test.js.map +1 -1
  461. package/dist/backend/vendor-archives.d.ts +1 -1
  462. package/dist/backend/vendor-archives.js +25 -12
  463. package/dist/backend/vendor-archives.js.map +1 -1
  464. package/dist/backend/vendor-inputs.d.ts +15 -2
  465. package/dist/backend/vendor-inputs.js +59 -3
  466. package/dist/backend/vendor-inputs.js.map +1 -1
  467. package/dist/backend/vendor-inputs.test.d.ts +1 -0
  468. package/dist/backend/vendor-inputs.test.js +74 -0
  469. package/dist/backend/vendor-inputs.test.js.map +1 -0
  470. package/dist/cli/command.js +95 -5
  471. package/dist/cli/command.js.map +1 -1
  472. package/dist/cli/host.d.ts +3 -0
  473. package/dist/cli/output-options.d.ts +3 -0
  474. package/dist/cli/output-options.js +8 -2
  475. package/dist/cli/output-options.js.map +1 -1
  476. package/dist/cli/usage.d.ts +28 -1
  477. package/dist/cli/usage.js +56 -6
  478. package/dist/cli/usage.js.map +1 -1
  479. package/dist/compat/fetch-profile.d.ts +3 -0
  480. package/dist/compat/fetch-profile.js +23 -3
  481. package/dist/compat/fetch-profile.js.map +1 -1
  482. package/dist/compile-types.d.ts +45 -0
  483. package/dist/contracts/check.js +70 -2
  484. package/dist/contracts/check.js.map +1 -1
  485. package/dist/contracts/int32-elements.d.ts +2 -1
  486. package/dist/contracts/int32-elements.js.map +1 -1
  487. package/dist/coverage/report.d.ts +5 -1
  488. package/dist/coverage/report.js +83 -2
  489. package/dist/coverage/report.js.map +1 -1
  490. package/dist/coverage/verdict-cache.d.ts +2 -0
  491. package/dist/coverage/verdict-cache.js +5 -10
  492. package/dist/coverage/verdict-cache.js.map +1 -1
  493. package/dist/diagnostics/codes.d.ts +145 -0
  494. package/dist/diagnostics/codes.js +159 -0
  495. package/dist/diagnostics/codes.js.map +1 -0
  496. package/dist/diagnostics/codes.test.d.ts +1 -0
  497. package/dist/diagnostics/codes.test.js +78 -0
  498. package/dist/diagnostics/codes.test.js.map +1 -0
  499. package/dist/diagnostics/diagnostic.d.ts +101 -2
  500. package/dist/diagnostics/diagnostic.js +155 -0
  501. package/dist/diagnostics/diagnostic.js.map +1 -1
  502. package/dist/diagnostics/dynamic-slots.d.ts +23 -0
  503. package/dist/diagnostics/dynamic-slots.js +29 -0
  504. package/dist/diagnostics/dynamic-slots.js.map +1 -0
  505. package/dist/diagnostics/dynamic-tier.d.ts +6 -0
  506. package/dist/diagnostics/dynamic-tier.js +8 -1
  507. package/dist/diagnostics/dynamic-tier.js.map +1 -1
  508. package/dist/diagnostics/envelope.d.ts +43 -1
  509. package/dist/diagnostics/envelope.js +19 -1
  510. package/dist/diagnostics/envelope.js.map +1 -1
  511. package/dist/diagnostics/envelope.test.js.map +1 -1
  512. package/dist/diagnostics/render.d.ts +3 -1
  513. package/dist/diagnostics/render.js +27 -6
  514. package/dist/diagnostics/render.js.map +1 -1
  515. package/dist/executable/executable-cache.d.ts +41 -0
  516. package/dist/executable/executable-cache.js +39 -1
  517. package/dist/executable/executable-cache.js.map +1 -1
  518. package/dist/executable/executable-cache.test.js +4 -1
  519. package/dist/executable/executable-cache.test.js.map +1 -1
  520. package/dist/executable/prepare.d.ts +2 -1
  521. package/dist/executable/prepare.js +421 -10
  522. package/dist/executable/prepare.js.map +1 -1
  523. package/dist/frontend/analysis.js +1 -0
  524. package/dist/frontend/analysis.js.map +1 -1
  525. package/dist/frontend/canon-map.d.ts +17 -0
  526. package/dist/frontend/canon-map.js +177 -0
  527. package/dist/frontend/canon-map.js.map +1 -0
  528. package/dist/frontend/canon.d.ts +122 -0
  529. package/dist/frontend/canon.js +462 -0
  530. package/dist/frontend/canon.js.map +1 -0
  531. package/dist/frontend/contract-types.d.ts +9 -1
  532. package/dist/frontend/contract-types.js +46 -4
  533. package/dist/frontend/contract-types.js.map +1 -1
  534. package/dist/frontend/decl-projection.d.ts +3 -0
  535. package/dist/frontend/decl-projection.js +121 -3
  536. package/dist/frontend/decl-projection.js.map +1 -1
  537. package/dist/frontend/dts-paths.d.ts +17 -4
  538. package/dist/frontend/dts-paths.js +149 -5
  539. package/dist/frontend/dts-paths.js.map +1 -1
  540. package/dist/frontend/fork-target.js +4 -4
  541. package/dist/frontend/fork-target.js.map +1 -1
  542. package/dist/frontend/fork-target.test.js +3 -3
  543. package/dist/frontend/fork-target.test.js.map +1 -1
  544. package/dist/frontend/heritage-elements.d.ts +15 -0
  545. package/dist/frontend/heritage-elements.js +18 -0
  546. package/dist/frontend/heritage-elements.js.map +1 -0
  547. package/dist/frontend/heritage-elements.test.d.ts +1 -0
  548. package/dist/frontend/heritage-elements.test.js +68 -0
  549. package/dist/frontend/heritage-elements.test.js.map +1 -0
  550. package/dist/frontend/input-tracker.d.ts +20 -0
  551. package/dist/frontend/input-tracker.js +74 -4
  552. package/dist/frontend/input-tracker.js.map +1 -1
  553. package/dist/frontend/input-tracker.test.js +66 -0
  554. package/dist/frontend/input-tracker.test.js.map +1 -1
  555. package/dist/frontend/lowering/any-collection-residue.d.ts +9 -0
  556. package/dist/frontend/lowering/any-collection-residue.js +42 -0
  557. package/dist/frontend/lowering/any-collection-residue.js.map +1 -0
  558. package/dist/frontend/lowering/array-values.d.ts +44 -2
  559. package/dist/frontend/lowering/array-values.js +193 -3
  560. package/dist/frontend/lowering/array-values.js.map +1 -1
  561. package/dist/frontend/lowering/builtin-namespaces.d.ts +6 -2
  562. package/dist/frontend/lowering/builtin-namespaces.js +28 -6
  563. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  564. package/dist/frontend/lowering/builtins/array-classes.d.ts +69 -0
  565. package/dist/frontend/lowering/builtins/array-classes.js +729 -0
  566. package/dist/frontend/lowering/builtins/array-classes.js.map +1 -0
  567. package/dist/frontend/lowering/builtins/callable-aliases.js +4 -0
  568. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  569. package/dist/frontend/lowering/builtins/child-process-methods.js +34 -0
  570. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  571. package/dist/frontend/lowering/builtins/disposable-stack.js +1 -3
  572. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
  573. package/dist/frontend/lowering/builtins/errors.d.ts +13 -9
  574. package/dist/frontend/lowering/builtins/errors.js +136 -56
  575. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  576. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
  577. package/dist/frontend/lowering/builtins/filesystem-calls.js +85 -4
  578. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  579. package/dist/frontend/lowering/builtins/filesystem.d.ts +11 -6
  580. package/dist/frontend/lowering/builtins/filesystem.js +270 -24
  581. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  582. package/dist/frontend/lowering/builtins/json.js +7 -1
  583. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  584. package/dist/frontend/lowering/builtins/mime.d.ts +25 -0
  585. package/dist/frontend/lowering/builtins/mime.js +167 -0
  586. package/dist/frontend/lowering/builtins/mime.js.map +1 -0
  587. package/dist/frontend/lowering/builtins/module-bindings.d.ts +3 -0
  588. package/dist/frontend/lowering/builtins/module-bindings.js +6 -0
  589. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  590. package/dist/frontend/lowering/builtins/module-calls.js +79 -12
  591. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  592. package/dist/frontend/lowering/builtins/module-resolution.d.ts +7 -4
  593. package/dist/frontend/lowering/builtins/module-resolution.js +115 -13
  594. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  595. package/dist/frontend/lowering/builtins/navigator.d.ts +3 -1
  596. package/dist/frontend/lowering/builtins/navigator.js +22 -8
  597. package/dist/frontend/lowering/builtins/navigator.js.map +1 -1
  598. package/dist/frontend/lowering/builtins/process.js +49 -9
  599. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  600. package/dist/frontend/lowering/builtins/promises.js +18 -3
  601. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  602. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +6 -2
  603. package/dist/frontend/lowering/builtins/promisify-callback.js +19 -6
  604. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
  605. package/dist/frontend/lowering/builtins/properties.js +23 -5
  606. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  607. package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +42 -0
  608. package/dist/frontend/lowering/builtins/web-streams-dyn.js +321 -0
  609. package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -0
  610. package/dist/frontend/lowering/builtins/x509.js +35 -5
  611. package/dist/frontend/lowering/builtins/x509.js.map +1 -1
  612. package/dist/frontend/lowering/call-arguments.d.ts +14 -1
  613. package/dist/frontend/lowering/call-arguments.js +84 -70
  614. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  615. package/dist/frontend/lowering/call-signatures.js +108 -24
  616. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  617. package/dist/frontend/lowering/class-attributes.js +6 -5
  618. package/dist/frontend/lowering/class-attributes.js.map +1 -1
  619. package/dist/frontend/lowering/class-dynamic-dispatch.js +40 -19
  620. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  621. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
  622. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  623. package/dist/frontend/lowering/class-protocol-dispatch.js +4 -0
  624. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  625. package/dist/frontend/lowering/class-protocols.d.ts +61 -1
  626. package/dist/frontend/lowering/class-protocols.js +297 -21
  627. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  628. package/dist/frontend/lowering/class-to-primitive.d.ts +3 -2
  629. package/dist/frontend/lowering/class-to-primitive.js +15 -5
  630. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  631. package/dist/frontend/lowering/coercions/asserted.d.ts +16 -0
  632. package/dist/frontend/lowering/coercions/asserted.js +79 -0
  633. package/dist/frontend/lowering/coercions/asserted.js.map +1 -0
  634. package/dist/frontend/lowering/coercions/function-adapters.d.ts +13 -0
  635. package/dist/frontend/lowering/coercions/function-adapters.js +70 -3
  636. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  637. package/dist/frontend/lowering/coercions/state.d.ts +23 -0
  638. package/dist/frontend/lowering/coercions/state.js +9 -0
  639. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  640. package/dist/frontend/lowering/coercions/structural-plans.js +67 -1
  641. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  642. package/dist/frontend/lowering/coercions/structural.d.ts +10 -0
  643. package/dist/frontend/lowering/coercions/structural.js +134 -4
  644. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  645. package/dist/frontend/lowering/coercions/unions.d.ts +11 -0
  646. package/dist/frontend/lowering/coercions/unions.js +83 -4
  647. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  648. package/dist/frontend/lowering/completion-callbacks.js +3 -2
  649. package/dist/frontend/lowering/completion-callbacks.js.map +1 -1
  650. package/dist/frontend/lowering/containers/array-callbacks.d.ts +10 -0
  651. package/dist/frontend/lowering/containers/array-callbacks.js +224 -81
  652. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  653. package/dist/frontend/lowering/containers/array-concat.d.ts +5 -2
  654. package/dist/frontend/lowering/containers/array-concat.js +76 -7
  655. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  656. package/dist/frontend/lowering/containers/array-construction.d.ts +9 -4
  657. package/dist/frontend/lowering/containers/array-construction.js +112 -100
  658. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  659. package/dist/frontend/lowering/containers/array-methods.js +193 -45
  660. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  661. package/dist/frontend/lowering/containers/array-pipelines.d.ts +3 -0
  662. package/dist/frontend/lowering/containers/array-pipelines.js +81 -13
  663. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  664. package/dist/frontend/lowering/containers/callback-arguments.d.ts +1 -0
  665. package/dist/frontend/lowering/containers/callback-arguments.js +28 -2
  666. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  667. package/dist/frontend/lowering/containers/collection-methods.js +13 -3
  668. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  669. package/dist/frontend/lowering/containers/filter-predicates.js +34 -3
  670. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  671. package/dist/frontend/lowering/containers/indexed-objects.d.ts +34 -1
  672. package/dist/frontend/lowering/containers/indexed-objects.js +131 -72
  673. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  674. package/dist/frontend/lowering/cycle-initialization.js +43 -6
  675. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  676. package/dist/frontend/lowering/decl-origin.d.ts +49 -0
  677. package/dist/frontend/lowering/decl-origin.js +402 -0
  678. package/dist/frontend/lowering/decl-origin.js.map +1 -0
  679. package/dist/frontend/lowering/deferred-module-initializers.d.ts +2 -0
  680. package/dist/frontend/lowering/deferred-module-initializers.js +7 -0
  681. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  682. package/dist/frontend/lowering/divergences.js +5 -0
  683. package/dist/frontend/lowering/divergences.js.map +1 -1
  684. package/dist/frontend/lowering/dynamic-tier.d.ts +8 -2
  685. package/dist/frontend/lowering/dynamic-tier.js +111 -3
  686. package/dist/frontend/lowering/dynamic-tier.js.map +1 -1
  687. package/dist/frontend/lowering/expressions/array-literals.d.ts +14 -1
  688. package/dist/frontend/lowering/expressions/array-literals.js +43 -5
  689. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  690. package/dist/frontend/lowering/expressions/asserted-receiver.d.ts +48 -0
  691. package/dist/frontend/lowering/expressions/asserted-receiver.js +233 -0
  692. package/dist/frontend/lowering/expressions/asserted-receiver.js.map +1 -0
  693. package/dist/frontend/lowering/expressions/binary.js +136 -1
  694. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  695. package/dist/frontend/lowering/expressions/element-access.d.ts +7 -0
  696. package/dist/frontend/lowering/expressions/element-access.js +363 -12
  697. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  698. package/dist/frontend/lowering/expressions/identifiers.d.ts +3 -0
  699. package/dist/frontend/lowering/expressions/identifiers.js +78 -62
  700. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  701. package/dist/frontend/lowering/expressions/message-listeners.d.ts +3 -0
  702. package/dist/frontend/lowering/expressions/message-listeners.js +19 -0
  703. package/dist/frontend/lowering/expressions/message-listeners.js.map +1 -0
  704. package/dist/frontend/lowering/expressions/narrowing.js +224 -6
  705. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  706. package/dist/frontend/lowering/expressions/nullish-assignment.js +5 -2
  707. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  708. package/dist/frontend/lowering/expressions/object-literals.d.ts +1 -1
  709. package/dist/frontend/lowering/expressions/object-literals.js +282 -24
  710. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  711. package/dist/frontend/lowering/expressions/property-access.d.ts +15 -3
  712. package/dist/frontend/lowering/expressions/property-access.js +397 -74
  713. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  714. package/dist/frontend/lowering/expressions/relational.js +202 -70
  715. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  716. package/dist/frontend/lowering/expressions/typeof.js +9 -1
  717. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  718. package/dist/frontend/lowering/expressions/union-fields.d.ts +28 -8
  719. package/dist/frontend/lowering/expressions/union-fields.js +168 -14
  720. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  721. package/dist/frontend/lowering/frozen-records.d.ts +8 -0
  722. package/dist/frontend/lowering/frozen-records.js +56 -9
  723. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  724. package/dist/frontend/lowering/function-context.d.ts +3 -0
  725. package/dist/frontend/lowering/function-context.js +4 -1
  726. package/dist/frontend/lowering/function-context.js.map +1 -1
  727. package/dist/frontend/lowering/function-returns.d.ts +4 -0
  728. package/dist/frontend/lowering/function-returns.js +231 -2
  729. package/dist/frontend/lowering/function-returns.js.map +1 -1
  730. package/dist/frontend/lowering/generator-delegation.js +3 -2
  731. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  732. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +26 -0
  733. package/dist/frontend/lowering/generator-dynamic-dispatch.js +294 -2
  734. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  735. package/dist/frontend/lowering/generic-functions.d.ts +10 -0
  736. package/dist/frontend/lowering/generic-functions.js +67 -7
  737. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  738. package/dist/frontend/lowering/global-values.d.ts +37 -0
  739. package/dist/frontend/lowering/global-values.js +395 -0
  740. package/dist/frontend/lowering/global-values.js.map +1 -0
  741. package/dist/frontend/lowering/handle-properties.js +3 -2
  742. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  743. package/dist/frontend/lowering/handle-properties.test.d.ts +1 -0
  744. package/dist/frontend/lowering/handle-properties.test.js +25 -0
  745. package/dist/frontend/lowering/handle-properties.test.js.map +1 -0
  746. package/dist/frontend/lowering/import-meta.d.ts +3 -0
  747. package/dist/frontend/lowering/import-meta.js +8 -3
  748. package/dist/frontend/lowering/import-meta.js.map +1 -1
  749. package/dist/frontend/lowering/iterator-adapters.js +3 -3
  750. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  751. package/dist/frontend/lowering/key-order-witness.d.ts +2 -0
  752. package/dist/frontend/lowering/key-order-witness.js +10 -0
  753. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  754. package/dist/frontend/lowering/lower-array-sort.d.ts +5 -1
  755. package/dist/frontend/lowering/lower-array-sort.js +16 -2
  756. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  757. package/dist/frontend/lowering/lower-builtin-values.d.ts +7 -0
  758. package/dist/frontend/lowering/lower-builtin-values.js +65 -16
  759. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  760. package/dist/frontend/lowering/lower-calls.js +222 -24
  761. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  762. package/dist/frontend/lowering/lower-classes.d.ts +6 -0
  763. package/dist/frontend/lowering/lower-classes.js +154 -20
  764. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  765. package/dist/frontend/lowering/lower-console.js +25 -2
  766. package/dist/frontend/lowering/lower-console.js.map +1 -1
  767. package/dist/frontend/lowering/lower-exprs.d.ts +29 -0
  768. package/dist/frontend/lowering/lower-exprs.js +544 -24
  769. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  770. package/dist/frontend/lowering/lower-functions.js +93 -18
  771. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  772. package/dist/frontend/lowering/lower-global-value.d.ts +4 -1
  773. package/dist/frontend/lowering/lower-global-value.js +10 -3
  774. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  775. package/dist/frontend/lowering/lower-inspect.d.ts +44 -4
  776. package/dist/frontend/lowering/lower-inspect.js +723 -26
  777. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  778. package/dist/frontend/lowering/lower-modules.d.ts +3 -1
  779. package/dist/frontend/lowering/lower-modules.js +189 -24
  780. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  781. package/dist/frontend/lowering/lower-namespaces.d.ts +7 -0
  782. package/dist/frontend/lowering/lower-namespaces.js +23 -0
  783. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  784. package/dist/frontend/lowering/lower-node-island.d.ts +74 -0
  785. package/dist/frontend/lowering/lower-node-island.js +1931 -0
  786. package/dist/frontend/lowering/lower-node-island.js.map +1 -0
  787. package/dist/frontend/lowering/lower-server.js +44 -0
  788. package/dist/frontend/lowering/lower-server.js.map +1 -1
  789. package/dist/frontend/lowering/lower-shared-modules.d.ts +27 -0
  790. package/dist/frontend/lowering/lower-shared-modules.js +611 -0
  791. package/dist/frontend/lowering/lower-shared-modules.js.map +1 -0
  792. package/dist/frontend/lowering/lower-stdlib.js +85 -9
  793. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  794. package/dist/frontend/lowering/lower-stmts.d.ts +2 -6
  795. package/dist/frontend/lowering/lower-stmts.js +781 -143
  796. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  797. package/dist/frontend/lowering/lower-stream.js +548 -36
  798. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  799. package/dist/frontend/lowering/lower-timers.js +9 -0
  800. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  801. package/dist/frontend/lowering/lowerer.d.ts +514 -10
  802. package/dist/frontend/lowering/lowerer.js +2667 -163
  803. package/dist/frontend/lowering/lowerer.js.map +1 -1
  804. package/dist/frontend/lowering/lowerer.test.js +44 -1
  805. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  806. package/dist/frontend/lowering/maybe-promise.d.ts +6 -0
  807. package/dist/frontend/lowering/maybe-promise.js +13 -0
  808. package/dist/frontend/lowering/maybe-promise.js.map +1 -1
  809. package/dist/frontend/lowering/module-namespace-elements.d.ts +12 -0
  810. package/dist/frontend/lowering/module-namespace-elements.js +114 -18
  811. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  812. package/dist/frontend/lowering/nan-coded-reads.d.ts +11 -0
  813. package/dist/frontend/lowering/nan-coded-reads.js +45 -2
  814. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  815. package/dist/frontend/lowering/narrowing-stability.d.ts +4 -0
  816. package/dist/frontend/lowering/narrowing-stability.js +14 -6
  817. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  818. package/dist/frontend/lowering/receiver-returns.d.ts +3 -0
  819. package/dist/frontend/lowering/receiver-returns.js +134 -0
  820. package/dist/frontend/lowering/receiver-returns.js.map +1 -0
  821. package/dist/frontend/lowering/record-inherited.d.ts +26 -0
  822. package/dist/frontend/lowering/record-inherited.js +807 -0
  823. package/dist/frontend/lowering/record-inherited.js.map +1 -0
  824. package/dist/frontend/lowering/runtime-optional-elements.d.ts +31 -1
  825. package/dist/frontend/lowering/runtime-optional-elements.js +105 -13
  826. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  827. package/dist/frontend/lowering/runtime-optional-guards.d.ts +3 -0
  828. package/dist/frontend/lowering/runtime-optional-guards.js +35 -7
  829. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  830. package/dist/frontend/lowering/runtime-optional-guards.test.js +59 -1
  831. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  832. package/dist/frontend/lowering/stable-names.d.ts +8 -0
  833. package/dist/frontend/lowering/stable-names.js +22 -0
  834. package/dist/frontend/lowering/stable-names.js.map +1 -1
  835. package/dist/frontend/lowering/stable-names.test.d.ts +1 -0
  836. package/dist/frontend/lowering/stable-names.test.js +16 -0
  837. package/dist/frontend/lowering/stable-names.test.js.map +1 -0
  838. package/dist/frontend/lowering/static-typeof.d.ts +5 -4
  839. package/dist/frontend/lowering/static-typeof.js +10 -4
  840. package/dist/frontend/lowering/static-typeof.js.map +1 -1
  841. package/dist/frontend/lowering/structural-instances.d.ts +22 -0
  842. package/dist/frontend/lowering/structural-instances.js +282 -0
  843. package/dist/frontend/lowering/structural-instances.js.map +1 -0
  844. package/dist/frontend/lowering/surfaces.d.ts +3 -0
  845. package/dist/frontend/lowering/surfaces.js +108 -12
  846. package/dist/frontend/lowering/surfaces.js.map +1 -1
  847. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  848. package/dist/frontend/lowering/symbol-fields.js +32 -0
  849. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  850. package/dist/frontend/lowering/type-failure.d.ts +17 -0
  851. package/dist/frontend/lowering/type-failure.js +163 -0
  852. package/dist/frontend/lowering/type-failure.js.map +1 -0
  853. package/dist/frontend/lowering/typed-arguments.d.ts +5 -6
  854. package/dist/frontend/lowering/typed-arguments.js +10 -2
  855. package/dist/frontend/lowering/typed-arguments.js.map +1 -1
  856. package/dist/frontend/lowering/union-narrow.d.ts +9 -1
  857. package/dist/frontend/lowering/union-narrow.js +31 -2
  858. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  859. package/dist/frontend/lowering/union-retag.test.js +42 -2
  860. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  861. package/dist/frontend/lowering/unit-journal.d.ts +194 -0
  862. package/dist/frontend/lowering/unit-journal.js +556 -0
  863. package/dist/frontend/lowering/unit-journal.js.map +1 -0
  864. package/dist/frontend/lowering/unit-journal.test.d.ts +1 -0
  865. package/dist/frontend/lowering/unit-journal.test.js +335 -0
  866. package/dist/frontend/lowering/unit-journal.test.js.map +1 -0
  867. package/dist/frontend/lowering/width-lift.d.ts +19 -0
  868. package/dist/frontend/node-api-import.d.ts +21 -0
  869. package/dist/frontend/node-api-import.js +88 -0
  870. package/dist/frontend/node-api-import.js.map +1 -0
  871. package/dist/frontend/npm-static-type-exports-host.js +4 -3
  872. package/dist/frontend/npm-static-type-exports-host.js.map +1 -1
  873. package/dist/frontend/npm-static.js +9 -2
  874. package/dist/frontend/npm-static.js.map +1 -1
  875. package/dist/frontend/package-shims.d.ts +6 -2
  876. package/dist/frontend/package-shims.js +13 -2
  877. package/dist/frontend/package-shims.js.map +1 -1
  878. package/dist/frontend/pipeline.d.ts +11 -4
  879. package/dist/frontend/pipeline.js +249 -26
  880. package/dist/frontend/pipeline.js.map +1 -1
  881. package/dist/frontend/process-fork.d.ts +3 -0
  882. package/dist/frontend/process-fork.js.map +1 -1
  883. package/dist/frontend/program-analysis.d.ts +6 -0
  884. package/dist/frontend/program-analysis.js +4 -0
  885. package/dist/frontend/program-analysis.js.map +1 -1
  886. package/dist/frontend/program.d.ts +12 -1
  887. package/dist/frontend/program.js +256 -36
  888. package/dist/frontend/program.js.map +1 -1
  889. package/dist/frontend/resolve.js +8 -2
  890. package/dist/frontend/resolve.js.map +1 -1
  891. package/dist/frontend/shape-inference/analyze.d.ts +23 -1
  892. package/dist/frontend/shape-inference/analyze.js +982 -97
  893. package/dist/frontend/shape-inference/analyze.js.map +1 -1
  894. package/dist/frontend/shape-inference/constant-graphs.d.ts +2 -0
  895. package/dist/frontend/shape-inference/constant-graphs.js +39 -4
  896. package/dist/frontend/shape-inference/constant-graphs.js.map +1 -1
  897. package/dist/frontend/shape-inference/domain.d.ts +2 -0
  898. package/dist/frontend/shape-inference/domain.js.map +1 -1
  899. package/dist/frontend/shape-inference/fallback.d.ts +17 -0
  900. package/dist/frontend/shape-inference/fallback.js +303 -0
  901. package/dist/frontend/shape-inference/fallback.js.map +1 -0
  902. package/dist/frontend/shape-inference/index.d.ts +75 -1
  903. package/dist/frontend/shape-inference/index.js +531 -2
  904. package/dist/frontend/shape-inference/index.js.map +1 -1
  905. package/dist/frontend/shape-inference/inferred-checks.d.ts +2 -0
  906. package/dist/frontend/shape-inference/inferred-checks.js +90 -0
  907. package/dist/frontend/shape-inference/inferred-checks.js.map +1 -0
  908. package/dist/frontend/shape-inference/memo.d.ts +30 -0
  909. package/dist/frontend/shape-inference/memo.js +99 -0
  910. package/dist/frontend/shape-inference/memo.js.map +1 -0
  911. package/dist/frontend/shape-inference/overlay.d.ts +81 -0
  912. package/dist/frontend/shape-inference/overlay.js +1160 -0
  913. package/dist/frontend/shape-inference/overlay.js.map +1 -0
  914. package/dist/frontend/shape-inference/registry.test.d.ts +1 -0
  915. package/dist/frontend/shape-inference/registry.test.js +34 -0
  916. package/dist/frontend/shape-inference/registry.test.js.map +1 -0
  917. package/dist/frontend/shape-inference/report.js +42 -8
  918. package/dist/frontend/shape-inference/report.js.map +1 -1
  919. package/dist/frontend/shape-inference/static-objects.d.ts +29 -0
  920. package/dist/frontend/shape-inference/static-objects.js +1951 -0
  921. package/dist/frontend/shape-inference/static-objects.js.map +1 -0
  922. package/dist/frontend/tier-analysis.d.ts +53 -1
  923. package/dist/frontend/tier-analysis.js +133 -0
  924. package/dist/frontend/tier-analysis.js.map +1 -1
  925. package/dist/frontend/ts7/api.js +4 -2
  926. package/dist/frontend/ts7/api.js.map +1 -1
  927. package/dist/frontend/ts7/ast-node.d.ts +9 -0
  928. package/dist/frontend/ts7/ast-node.js +42 -10
  929. package/dist/frontend/ts7/ast-node.js.map +1 -1
  930. package/dist/frontend/ts7/ast-node.test.js +23 -0
  931. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  932. package/dist/frontend/ts7/ast-wire-protocols.test.d.ts +1 -0
  933. package/dist/frontend/ts7/ast-wire-protocols.test.js +93 -0
  934. package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -0
  935. package/dist/frontend/ts7/ast-wire.d.ts +18 -0
  936. package/dist/frontend/ts7/ast-wire.js +66 -4
  937. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  938. package/dist/frontend/ts7/checker-server.d.ts +12 -11
  939. package/dist/frontend/ts7/checker-server.js +28 -12
  940. package/dist/frontend/ts7/checker-server.js.map +1 -1
  941. package/dist/frontend/ts7/checker-server.test.js +8 -3
  942. package/dist/frontend/ts7/checker-server.test.js.map +1 -1
  943. package/dist/frontend/ts7/checker.d.ts +4 -0
  944. package/dist/frontend/ts7/checker.js +9 -0
  945. package/dist/frontend/ts7/checker.js.map +1 -1
  946. package/dist/frontend/ts7/checker.test.js +216 -205
  947. package/dist/frontend/ts7/checker.test.js.map +1 -1
  948. package/dist/frontend/ts7/lib-diagnostics.d.ts +71 -4
  949. package/dist/frontend/ts7/lib-diagnostics.js +337 -20
  950. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
  951. package/dist/frontend/ts7/lib-diagnostics.test.js +268 -5
  952. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
  953. package/dist/frontend/ts7/native-api.d.ts +4 -0
  954. package/dist/frontend/ts7/native-api.js +36 -1
  955. package/dist/frontend/ts7/native-api.js.map +1 -1
  956. package/dist/frontend/ts7/program-host.d.ts +19 -2
  957. package/dist/frontend/ts7/program-host.js +69 -9
  958. package/dist/frontend/ts7/program-host.js.map +1 -1
  959. package/dist/frontend/ts7/program-host.test.js +42 -1
  960. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  961. package/dist/frontend/ts7/rpc-filesystem.d.ts +4 -2
  962. package/dist/frontend/ts7/rpc-filesystem.js +23 -2
  963. package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
  964. package/dist/frontend/ts7/rpc-filesystem.test.js +28 -2
  965. package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
  966. package/dist/frontend/ts7/semantic-checker.js +73 -5
  967. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  968. package/dist/frontend/ts7/semantic-checker.test.js +106 -74
  969. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  970. package/dist/frontend/ts7/semantic-json.d.ts +2 -6
  971. package/dist/frontend/ts7/semantic-model-71.test.d.ts +1 -0
  972. package/dist/frontend/ts7/semantic-model-71.test.js +131 -0
  973. package/dist/frontend/ts7/semantic-model-71.test.js.map +1 -0
  974. package/dist/frontend/ts7/semantic-model.d.ts +121 -3
  975. package/dist/frontend/ts7/semantic-model.js +245 -8
  976. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  977. package/dist/frontend/ts7/session.d.ts +19 -1
  978. package/dist/frontend/ts7/session.js +111 -11
  979. package/dist/frontend/ts7/session.js.map +1 -1
  980. package/dist/frontend/ts7/session.test.js +259 -239
  981. package/dist/frontend/ts7/session.test.js.map +1 -1
  982. package/dist/frontend/ts7/test-servers.d.ts +12 -0
  983. package/dist/frontend/ts7/test-servers.js +16 -0
  984. package/dist/frontend/ts7/test-servers.js.map +1 -0
  985. package/dist/frontend/tsc-codes.js +6 -3
  986. package/dist/frontend/tsc-codes.js.map +1 -1
  987. package/dist/frontend/type-mapper.d.ts +61 -1
  988. package/dist/frontend/type-mapper.js +577 -28
  989. package/dist/frontend/type-mapper.js.map +1 -1
  990. package/dist/frontend/type-patches/command.d.ts +19 -0
  991. package/dist/frontend/type-patches/command.js +352 -0
  992. package/dist/frontend/type-patches/command.js.map +1 -0
  993. package/dist/frontend/type-patches/layer.d.ts +45 -0
  994. package/dist/frontend/type-patches/layer.js +409 -0
  995. package/dist/frontend/type-patches/layer.js.map +1 -0
  996. package/dist/frontend/type-patches/locate.d.ts +41 -0
  997. package/dist/frontend/type-patches/locate.js +914 -0
  998. package/dist/frontend/type-patches/locate.js.map +1 -0
  999. package/dist/frontend/type-patches/locate.test.d.ts +1 -0
  1000. package/dist/frontend/type-patches/locate.test.js +179 -0
  1001. package/dist/frontend/type-patches/locate.test.js.map +1 -0
  1002. package/dist/frontend/type-patches/selector.d.ts +43 -0
  1003. package/dist/frontend/type-patches/selector.js +126 -0
  1004. package/dist/frontend/type-patches/selector.js.map +1 -0
  1005. package/dist/frontend/type-patches/selector.test.d.ts +1 -0
  1006. package/dist/frontend/type-patches/selector.test.js +56 -0
  1007. package/dist/frontend/type-patches/selector.test.js.map +1 -0
  1008. package/dist/frontend/type-patches/semver.d.ts +19 -0
  1009. package/dist/frontend/type-patches/semver.js +221 -0
  1010. package/dist/frontend/type-patches/semver.js.map +1 -0
  1011. package/dist/frontend/type-patches/semver.test.d.ts +1 -0
  1012. package/dist/frontend/type-patches/semver.test.js +47 -0
  1013. package/dist/frontend/type-patches/semver.test.js.map +1 -0
  1014. package/dist/frontend/worker-target.test.js +2 -2
  1015. package/dist/frontend/worker-target.test.js.map +1 -1
  1016. package/dist/index.d.ts +4 -1
  1017. package/dist/index.js +292 -27
  1018. package/dist/index.js.map +1 -1
  1019. package/dist/ir/builtin-effects.js +51 -5
  1020. package/dist/ir/builtin-effects.js.map +1 -1
  1021. package/dist/ir/builtin-signatures.d.ts +4 -3
  1022. package/dist/ir/builtin-signatures.js +277 -12
  1023. package/dist/ir/builtin-signatures.js.map +1 -1
  1024. package/dist/ir/callback-specialization.js +108 -67
  1025. package/dist/ir/callback-specialization.js.map +1 -1
  1026. package/dist/ir/capture-values.d.ts +7 -1
  1027. package/dist/ir/capture-values.js +28 -5
  1028. package/dist/ir/capture-values.js.map +1 -1
  1029. package/dist/ir/char-unit-locals.js +38 -42
  1030. package/dist/ir/char-unit-locals.js.map +1 -1
  1031. package/dist/ir/expression-inlining.js +12 -6
  1032. package/dist/ir/expression-inlining.js.map +1 -1
  1033. package/dist/ir/fields.generated.d.ts +751 -0
  1034. package/dist/ir/fields.generated.js +2071 -0
  1035. package/dist/ir/fields.generated.js.map +1 -0
  1036. package/dist/ir/fields.test.d.ts +1 -0
  1037. package/dist/ir/fields.test.js +113 -0
  1038. package/dist/ir/fields.test.js.map +1 -0
  1039. package/dist/ir/function-references.js +4 -0
  1040. package/dist/ir/function-references.js.map +1 -1
  1041. package/dist/ir/function-references.test.js +25 -0
  1042. package/dist/ir/function-references.test.js.map +1 -1
  1043. package/dist/ir/inline-array-sources.d.ts +15 -0
  1044. package/dist/ir/inline-array-sources.js +1825 -0
  1045. package/dist/ir/inline-array-sources.js.map +1 -0
  1046. package/dist/ir/inline-arrays.d.ts +41 -0
  1047. package/dist/ir/inline-arrays.js +533 -0
  1048. package/dist/ir/inline-arrays.js.map +1 -0
  1049. package/dist/ir/inline-arrays.test.d.ts +1 -0
  1050. package/dist/ir/inline-arrays.test.js +225 -0
  1051. package/dist/ir/inline-arrays.test.js.map +1 -0
  1052. package/dist/ir/int32-slots.d.ts +6 -0
  1053. package/dist/ir/int32-slots.js +154 -16
  1054. package/dist/ir/int32-slots.js.map +1 -1
  1055. package/dist/ir/int32-slots.test.js +48 -0
  1056. package/dist/ir/int32-slots.test.js.map +1 -1
  1057. package/dist/ir/integer-loops.d.ts +12 -0
  1058. package/dist/ir/integer-loops.js +23 -0
  1059. package/dist/ir/integer-loops.js.map +1 -1
  1060. package/dist/ir/integer-ranges.d.ts +7 -1
  1061. package/dist/ir/integer-ranges.js +29 -2
  1062. package/dist/ir/integer-ranges.js.map +1 -1
  1063. package/dist/ir/intrinsic-signatures.js +2 -1
  1064. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1065. package/dist/ir/ir.d.ts +103 -5
  1066. package/dist/ir/ir.js +38 -4
  1067. package/dist/ir/ir.js.map +1 -1
  1068. package/dist/ir/ir.test.js +134 -1
  1069. package/dist/ir/ir.test.js.map +1 -1
  1070. package/dist/ir/jsval.js +211 -29
  1071. package/dist/ir/jsval.js.map +1 -1
  1072. package/dist/ir/jsval.test.js +120 -0
  1073. package/dist/ir/jsval.test.js.map +1 -1
  1074. package/dist/ir/loop-entry-ranges.d.ts +38 -0
  1075. package/dist/ir/loop-entry-ranges.js +259 -0
  1076. package/dist/ir/loop-entry-ranges.js.map +1 -0
  1077. package/dist/ir/loop-entry-ranges.test.d.ts +1 -0
  1078. package/dist/ir/loop-entry-ranges.test.js +191 -0
  1079. package/dist/ir/loop-entry-ranges.test.js.map +1 -0
  1080. package/dist/ir/node-index.d.ts +3 -0
  1081. package/dist/ir/node-index.js +6 -0
  1082. package/dist/ir/node-index.js.map +1 -1
  1083. package/dist/ir/numeric-call-specialization.d.ts +9 -6
  1084. package/dist/ir/numeric-call-specialization.js +164 -34
  1085. package/dist/ir/numeric-call-specialization.js.map +1 -1
  1086. package/dist/ir/paired-while-loops.js +23 -19
  1087. package/dist/ir/paired-while-loops.js.map +1 -1
  1088. package/dist/ir/parameter-versions.js +6 -3
  1089. package/dist/ir/parameter-versions.js.map +1 -1
  1090. package/dist/ir/receiver-readers.d.ts +10 -0
  1091. package/dist/ir/receiver-readers.js +65 -28
  1092. package/dist/ir/receiver-readers.js.map +1 -1
  1093. package/dist/ir/row-pairs.d.ts +9 -1
  1094. package/dist/ir/row-pairs.js +136 -43
  1095. package/dist/ir/row-pairs.js.map +1 -1
  1096. package/dist/ir/row-pairs.test.js +25 -5
  1097. package/dist/ir/row-pairs.test.js.map +1 -1
  1098. package/dist/ir/runtime-features.d.ts +33 -1
  1099. package/dist/ir/runtime-features.js +104 -6
  1100. package/dist/ir/runtime-features.js.map +1 -1
  1101. package/dist/ir/runtime-features.test.js +13 -0
  1102. package/dist/ir/runtime-features.test.js.map +1 -1
  1103. package/dist/ir/saturating-loop-jams.d.ts +24 -0
  1104. package/dist/ir/saturating-loop-jams.js +420 -0
  1105. package/dist/ir/saturating-loop-jams.js.map +1 -0
  1106. package/dist/ir/saturating-loop-jams.test.d.ts +1 -0
  1107. package/dist/ir/saturating-loop-jams.test.js +196 -0
  1108. package/dist/ir/saturating-loop-jams.test.js.map +1 -0
  1109. package/dist/ir/scalar-records.js +9 -3
  1110. package/dist/ir/scalar-records.js.map +1 -1
  1111. package/dist/ir/self-captures.js +2 -1
  1112. package/dist/ir/self-captures.js.map +1 -1
  1113. package/dist/ir/serialize.d.ts +5 -1
  1114. package/dist/ir/serialize.js +7 -1
  1115. package/dist/ir/serialize.js.map +1 -1
  1116. package/dist/ir/traverse.js +3 -0
  1117. package/dist/ir/traverse.js.map +1 -1
  1118. package/dist/ir/validate.js +91 -9
  1119. package/dist/ir/validate.js.map +1 -1
  1120. package/dist/library/ir-policy.js +1 -0
  1121. package/dist/library/ir-policy.js.map +1 -1
  1122. package/dist/native/cache.js +2 -0
  1123. package/dist/native/cache.js.map +1 -1
  1124. package/dist/native/cli.js +54 -7
  1125. package/dist/native/cli.js.map +1 -1
  1126. package/dist/native/compiler.d.ts +3 -0
  1127. package/dist/native/compiler.js +173 -36
  1128. package/dist/native/compiler.js.map +1 -1
  1129. package/dist/native/compiler.test.js +86 -3
  1130. package/dist/native/compiler.test.js.map +1 -1
  1131. package/dist/native/executable-cache.d.ts +20 -2
  1132. package/dist/native/executable-cache.js +17 -10
  1133. package/dist/native/executable-cache.js.map +1 -1
  1134. package/dist/native/executable-cache.test.js +38 -1
  1135. package/dist/native/executable-cache.test.js.map +1 -1
  1136. package/dist/native/linker-job.d.ts +71 -0
  1137. package/dist/native/linker-job.js +242 -0
  1138. package/dist/native/linker-job.js.map +1 -0
  1139. package/dist/native/linker-job.test.d.ts +1 -0
  1140. package/dist/native/linker-job.test.js +349 -0
  1141. package/dist/native/linker-job.test.js.map +1 -0
  1142. package/dist/native/prepare.js +15 -2
  1143. package/dist/native/prepare.js.map +1 -1
  1144. package/dist/native/sanitizer.js +10 -15
  1145. package/dist/native/sanitizer.js.map +1 -1
  1146. package/dist/native/sanitizer.test.js +152 -66
  1147. package/dist/native/sanitizer.test.js.map +1 -1
  1148. package/dist/native/toolchain.d.ts +11 -2
  1149. package/dist/native/toolchain.js +43 -17
  1150. package/dist/native/toolchain.js.map +1 -1
  1151. package/dist/native/toolchain.test.js +75 -0
  1152. package/dist/native/toolchain.test.js.map +1 -1
  1153. package/dist/node-islands/boundary.d.ts +37 -0
  1154. package/dist/node-islands/boundary.js +135 -0
  1155. package/dist/node-islands/boundary.js.map +1 -0
  1156. package/dist/node-islands/classify.js +1 -1
  1157. package/dist/node-islands/classify.js.map +1 -1
  1158. package/dist/node-islands/effect-gate.d.ts +11 -0
  1159. package/dist/node-islands/effect-gate.js +746 -0
  1160. package/dist/node-islands/effect-gate.js.map +1 -0
  1161. package/dist/node-islands/effect-gate.test.d.ts +1 -0
  1162. package/dist/node-islands/effect-gate.test.js +152 -0
  1163. package/dist/node-islands/effect-gate.test.js.map +1 -0
  1164. package/dist/node-islands/libnode-pack.d.ts +68 -0
  1165. package/dist/node-islands/libnode-pack.js +199 -0
  1166. package/dist/node-islands/libnode-pack.js.map +1 -0
  1167. package/dist/node-islands/libnode-pack.test.d.ts +1 -0
  1168. package/dist/node-islands/libnode-pack.test.js +258 -0
  1169. package/dist/node-islands/libnode-pack.test.js.map +1 -0
  1170. package/dist/node-islands/libnode.d.ts +32 -0
  1171. package/dist/node-islands/libnode.js +212 -0
  1172. package/dist/node-islands/libnode.js.map +1 -0
  1173. package/dist/node-islands/libnode.test.d.ts +1 -0
  1174. package/dist/node-islands/libnode.test.js +170 -0
  1175. package/dist/node-islands/libnode.test.js.map +1 -0
  1176. package/dist/node-islands/modules.d.ts +96 -0
  1177. package/dist/node-islands/modules.js +803 -0
  1178. package/dist/node-islands/modules.js.map +1 -0
  1179. package/dist/node-islands/modules.test.d.ts +1 -0
  1180. package/dist/node-islands/modules.test.js +276 -0
  1181. package/dist/node-islands/modules.test.js.map +1 -0
  1182. package/dist/node-islands/resolve.d.ts +8 -0
  1183. package/dist/node-islands/resolve.js +10 -0
  1184. package/dist/node-islands/resolve.js.map +1 -0
  1185. package/dist/node-islands/snapshot.d.ts +16 -0
  1186. package/dist/node-islands/snapshot.js +486 -0
  1187. package/dist/node-islands/snapshot.js.map +1 -0
  1188. package/dist/node-islands/snapshot.test.d.ts +1 -0
  1189. package/dist/node-islands/snapshot.test.js +56 -0
  1190. package/dist/node-islands/snapshot.test.js.map +1 -0
  1191. package/dist/project-config.d.ts +37 -1
  1192. package/dist/project-config.js +159 -7
  1193. package/dist/project-config.js.map +1 -1
  1194. package/dist/project-config.test.js +153 -0
  1195. package/dist/project-config.test.js.map +1 -1
  1196. package/dist/startup-cache.d.ts +1 -0
  1197. package/dist/startup-cache.js +1 -0
  1198. package/dist/startup-cache.js.map +1 -1
  1199. package/package.json +24 -21
  1200. package/surface-manifest.json +47 -7
@@ -0,0 +1,1160 @@
1
+ /* Shape inference: the typed overlay (results/design-shape-inference,
2
+ * maintainer decision 2026-10-23). The analysis's proven facts become JSDoc
3
+ * types in a rewritten copy of each package JavaScript file, and the
4
+ * lowering treats the rewritten file like a checked JavaScript file, so the
5
+ * static tier compiles the package's hot code from those types.
6
+ *
7
+ * Only proven facts are written: a position whose value set contains ⊤
8
+ * (anything from islands, JSON.parse, the network or the file system,
9
+ * reflection, globals, `process`, caught exceptions, or code the analysis
10
+ * cannot see) stays untyped. A check the lowering inserts where a value
11
+ * meets an inferred type therefore fails only when the analysis is wrong;
12
+ * such checks carry the inferred-fact failure message.
13
+ *
14
+ * The package's own JSDoc is a declaration (maintainer decision
15
+ * 2026-10-25): it stays as written, and the overlay adds a type only where
16
+ * the package's JSDoc declares none (a documented parameter, return or
17
+ * binding keeps its documented type, as in the default build).
18
+ *
19
+ * Every edit is inline: no line breaks are added or removed, so positions
20
+ * keep their lines. */
21
+ import * as ts from "../ts7/adapter.js";
22
+ let protectedSpansOf = () => [];
23
+ /** Installs the source of patched spans: the overlay neither annotates nor
24
+ * rewrites a declaration a project type patch edited, since the patch is
25
+ * the project's own declaration of its type. */
26
+ export function setShapeOverlayProtectedSpans(spans) {
27
+ protectedSpansOf = spans ?? (() => []);
28
+ }
29
+ /** Whether a file has patched spans (static-objects.ts leaves it as served,
30
+ * so the spans keep their offsets). */
31
+ export function hasShapeOverlayProtectedSpans(fileName) {
32
+ return protectedSpansOf(fileName).length > 0;
33
+ }
34
+ /** Whether the declaration whose first token starts at `pos` overlaps a
35
+ * patched span: its leading comments and its header (up to its body). */
36
+ export function declarationPatched(sf, pos, spans) {
37
+ if (spans.length === 0)
38
+ return false;
39
+ let node = sf;
40
+ for (;;) {
41
+ let next;
42
+ ts.forEachChild(node, (c) => {
43
+ if (next === undefined && c.pos <= pos && c.end > pos)
44
+ next = c;
45
+ return undefined;
46
+ });
47
+ if (next === undefined || ts.tokenStartOfNode(next) > pos)
48
+ break;
49
+ node = next;
50
+ if (ts.tokenStartOfNode(node) === pos)
51
+ break;
52
+ }
53
+ if (node === sf)
54
+ return false;
55
+ const body = node.body;
56
+ const end = body !== undefined ? ts.tokenStartOfNode(body) : node.end;
57
+ return spans.some((span) => span.start < end && span.end > node.pos);
58
+ }
59
+ /** Marks the overlay's own comments (an unknown JSDoc tag, ignored). */
60
+ export const OVERLAY_MARK = "@scriptcShape";
61
+ const MARK = OVERLAY_MARK;
62
+ /** Above 1, values of several record key sets type as one merged record
63
+ * with optional fields (SCRIPTC_SHAPE_RECORD_ARMS; experimental). */
64
+ const MAX_RECORD_ARMS = Number(process.env.SCRIPTC_SHAPE_RECORD_ARMS ?? 1);
65
+ /** The most class or record arms an inferred union may have. */
66
+ const MAX_ARMS = 6;
67
+ function list(arr) {
68
+ return arr?.nodes ?? [];
69
+ }
70
+ let debugIndex = 0;
71
+ export const NO_EXCLUSIONS = { annotations: new Map(), files: new Set() };
72
+ /** The ids of the overlay annotations in a comment or trivia text. */
73
+ export function overlayAnnotationIds(text) {
74
+ const ids = [];
75
+ for (const m of text.matchAll(/@scriptcShape #(\d+)/g))
76
+ ids.push(Number(m[1]));
77
+ return ids;
78
+ }
79
+ export function planShapeOverlay(analysis, verdicts, packageFiles, exclusions = NO_EXCLUSIONS) {
80
+ // Debugging: SCRIPTC_DEBUG_SHAPE_FIELD=name prints that field's values per atom.
81
+ const debugField = process.env["SCRIPTC_DEBUG_SHAPE_FIELD"];
82
+ if (debugField !== undefined)
83
+ for (const [atom, fields] of analysis.fields) {
84
+ const id = fields.get(debugField);
85
+ if (id !== undefined)
86
+ process.stderr.write(`[shape-field] ${atom.kind}:${atom.label}.${debugField} = ${[...analysis.nodes[id].atoms].map((a) => `${a.kind}:${a.label}`).join(" | ")}\n`);
87
+ }
88
+ const pSites = new Map();
89
+ const siteVerdicts = new Set(verdicts.map((v) => v.site.atom));
90
+ const dynHeld = dynHeldSites(analysis, verdicts);
91
+ // Records and arrays print only for sites whose objects never escape: a
92
+ // native record that reached untyped code would be seen as a copy.
93
+ const siteKeys = new Map();
94
+ for (const v of verdicts) {
95
+ if (v.verdict !== "P-local" || dynHeld.has(v.site.atom))
96
+ continue;
97
+ if (v.site.kind === "array") {
98
+ pSites.set(v.site.atom, v);
99
+ continue;
100
+ }
101
+ const keys = keysOfSite(analysis, v);
102
+ if (keys === null)
103
+ continue;
104
+ siteKeys.set(v.site.atom, keys);
105
+ pSites.set(v.site.atom, v);
106
+ }
107
+ const parts = new Map();
108
+ const overlaid = new Set(packageFiles);
109
+ const exportedClasses = new Map();
110
+ debugIndex = 0;
111
+ // `if` branches no condition value allowed, per file: the overlay
112
+ // replaces each with a throwing check, so the checker and the lowering
113
+ // see the code the analysis saw.
114
+ const deadByFile = new Map();
115
+ if (process.env["SCRIPTC_SHAPE_DEAD_BRANCHES"] !== "0")
116
+ for (const s of analysis.branchIfs) {
117
+ for (const branch of [s.thenStatement, s.elseStatement]) {
118
+ if (branch === undefined || analysis.walkedBranches.has(branch))
119
+ continue;
120
+ const sf = s.getSourceFile();
121
+ let list = deadByFile.get(sf);
122
+ if (list === undefined)
123
+ deadByFile.set(sf, (list = []));
124
+ list.push(branch);
125
+ }
126
+ }
127
+ // Classes whose instances meet as the receivers of one member read, by
128
+ // member name: their same-named methods need one signature.
129
+ const cooccurring = new Map();
130
+ for (const op of analysis.ops) {
131
+ if (op.kind !== "read" || op.name === null)
132
+ continue;
133
+ const classes = new Set();
134
+ for (const a of analysis.nodes[op.recv].atoms)
135
+ if (a.kind === "instance" && a.node !== undefined)
136
+ classes.add(a.node);
137
+ if (classes.size < 2)
138
+ continue;
139
+ let l = cooccurring.get(op.name);
140
+ if (l === undefined)
141
+ cooccurring.set(op.name, (l = []));
142
+ l.push(classes);
143
+ }
144
+ for (const sf of packageFiles) {
145
+ if (exclusions.files.has(sf.fileName))
146
+ continue;
147
+ const typedefs = new Map();
148
+ const typedefText = [];
149
+ const edits = [];
150
+ // One annotation: a JSDoc comment at `pos` carrying MARK and the
151
+ // annotation's id (its position), so a refused lowering can name it and
152
+ // the next load drop it. `close`: the text that closes a type cast.
153
+ const patchedSpans = protectedSpansOf(sf.fileName);
154
+ const annotate = (pos, tags, close) => {
155
+ // A declaration a project type patch edited keeps the patch alone.
156
+ if (declarationPatched(sf, pos, patchedSpans))
157
+ return;
158
+ edits.push({
159
+ pos,
160
+ id: pos,
161
+ text: `/** ${tags} ${MARK} #${pos} */ ${close !== undefined ? "(" : ""}`,
162
+ });
163
+ if (close !== undefined)
164
+ edits.push({ pos: close, id: pos, text: ")" });
165
+ };
166
+ const className = (decl) => {
167
+ const own = decl.name;
168
+ // A top-level class of another overlaid file: named through the type
169
+ // alias the overlay exports from that file.
170
+ if (decl.getSourceFile() !== sf) {
171
+ const other = decl.getSourceFile();
172
+ if (process.env["SCRIPTC_SHAPE_CROSS_FILE"] === "0" ||
173
+ own === undefined ||
174
+ !ts.isClassDeclaration(decl) ||
175
+ decl.parent !== other ||
176
+ !overlaid.has(other) ||
177
+ exclusions.files.has(other.fileName))
178
+ return null;
179
+ const alias = `__shape_class_${own.text}`;
180
+ let names = exportedClasses.get(other);
181
+ if (names === undefined)
182
+ exportedClasses.set(other, (names = new Set()));
183
+ names.add(own.text);
184
+ return `import(${JSON.stringify(other.fileName)}).${alias}`;
185
+ }
186
+ if (own !== undefined && ts.isClassDeclaration(decl) && decl.parent === sf)
187
+ return own.text;
188
+ const p = decl.parent;
189
+ if (p !== undefined &&
190
+ ts.isVariableDeclaration(p) &&
191
+ ts.isIdentifier(p.name) &&
192
+ p.parent?.parent?.parent === sf)
193
+ return p.name.text;
194
+ return null;
195
+ };
196
+ // `inner`: inside a record field, where ⊤ and unprintable values are `any`.
197
+ const typeOf = (atoms, inner, depth) => {
198
+ if (atoms.size === 0)
199
+ return inner ? "any" : null;
200
+ const arms = new Set();
201
+ // Every array arm becomes one Array<…> of the joined element values.
202
+ const elements = new Set();
203
+ let hasArray = false;
204
+ const promised = new Set();
205
+ let hasPromise = false;
206
+ const recordSites = [];
207
+ for (const a of atoms) {
208
+ let t = null;
209
+ switch (a.kind) {
210
+ case "prim":
211
+ t =
212
+ a.label === "null" ||
213
+ a.label === "undefined" ||
214
+ a.label === "string" ||
215
+ a.label === "number" ||
216
+ a.label === "boolean" ||
217
+ a.label === "bigint"
218
+ ? a.label
219
+ : null;
220
+ break;
221
+ case "instance":
222
+ t = a.node !== undefined ? className(a.node) : null;
223
+ break;
224
+ case "object": {
225
+ const v = pSites.get(a);
226
+ if (v === undefined || depth >= 4 || !siteKeys.has(a))
227
+ return inner ? "any" : null;
228
+ recordSites.push(a);
229
+ continue;
230
+ }
231
+ case "array": {
232
+ if (analysis.escaped.has(a) || (siteVerdicts.has(a) && !pSites.has(a)))
233
+ return inner ? "any" : null;
234
+ // Only arrays the program writes as literals: a builtin's array
235
+ // (a match result, `new Array(n)`) may have holes, and the
236
+ // checker already types it from the library.
237
+ if (a.node === undefined ||
238
+ !ts.isArrayLiteralExpression(a.node) ||
239
+ a.node.elements.nodes.some((e) => e.kind === ts.SyntaxKind.OmittedExpression))
240
+ return inner ? "any" : null;
241
+ const el = analysis.elements.get(a);
242
+ if (el !== undefined)
243
+ for (const x of analysis.nodes[el].atoms)
244
+ elements.add(x);
245
+ hasArray = true;
246
+ continue;
247
+ }
248
+ case "promise": {
249
+ // One promise arm: the values it resolves to, joined.
250
+ const value = analysis.fields.get(a)?.get("value");
251
+ if (value !== undefined)
252
+ for (const x of analysis.nodes[value].atoms)
253
+ promised.add(x);
254
+ hasPromise = true;
255
+ continue;
256
+ }
257
+ default:
258
+ t = null;
259
+ }
260
+ if (t === null)
261
+ return inner ? "any" : null;
262
+ arms.add(t);
263
+ }
264
+ // Records of one key set print as their typedef; records of several
265
+ // key sets merge into one record whose fields missing from some sites
266
+ // are optional (unions of overlapping records would need the lowering
267
+ // to pick an arm per value).
268
+ if (recordSites.length > 0) {
269
+ const keySets = new Set(recordSites.map(keySetOf));
270
+ if (keySets.size === 1)
271
+ arms.add(recordType(recordSites[0], depth));
272
+ else if (MAX_RECORD_ARMS > 1)
273
+ arms.add(mergedRecordType(recordSites, depth));
274
+ else
275
+ return inner ? "any" : null;
276
+ }
277
+ if (hasArray) {
278
+ const inside = depth < 4 ? typeOf(elements, true, depth + 1) : "any";
279
+ arms.add(`Array<${inside ?? "any"}>`);
280
+ }
281
+ // A promise beside other values cannot cross into untyped code
282
+ // (maybe-promise unions stay typed-only), so it stays untyped here.
283
+ if (hasPromise)
284
+ return inner ? "any" : null;
285
+ // Arms, not atoms: per-site allocations of one record shape are one
286
+ // typedef.
287
+ if (arms.size > MAX_ARMS)
288
+ return inner ? "any" : null;
289
+ // Arithmetic on unknown values may answer a number or a bigint: the
290
+ // lowering has no useful mixed representation, so those stay untyped.
291
+ if (arms.has("number") && arms.has("bigint"))
292
+ return inner ? "any" : null;
293
+ if (arms.has("any"))
294
+ return inner ? "any" : null;
295
+ return [...arms].join(" | ");
296
+ };
297
+ // One typedef per key set: sites with the same keys intern to the same
298
+ // structural record, so their field types are joined.
299
+ const keySetOf = (site) => {
300
+ const k = siteKeys.get(site);
301
+ return k.keys
302
+ .map((key) => (k.optional.has(key) ? `${key}?` : key))
303
+ .sort()
304
+ .join(",");
305
+ };
306
+ const sitesByKeys = new Map();
307
+ for (const site of pSites.keys()) {
308
+ if (pSites.get(site).site.kind !== "object")
309
+ continue;
310
+ const k = keySetOf(site);
311
+ let l = sitesByKeys.get(k);
312
+ if (l === undefined)
313
+ sitesByKeys.set(k, (l = []));
314
+ l.push(site);
315
+ }
316
+ const recordType = (site, depth) => {
317
+ const keySet = keySetOf(site);
318
+ const existing = typedefs.get(keySet);
319
+ if (existing !== undefined)
320
+ return existing;
321
+ const name = `__shape_${typedefs.size}`;
322
+ typedefs.set(keySet, name);
323
+ const { keys, optional } = siteKeys.get(site);
324
+ const parts = keys.map((k) => {
325
+ const atoms = new Set();
326
+ for (const other of sitesByKeys.get(keySet) ?? [site]) {
327
+ const id = analysis.fields.get(other)?.get(k);
328
+ if (id !== undefined)
329
+ for (const a of analysis.nodes[id].atoms)
330
+ atoms.add(a);
331
+ }
332
+ const t = typeOf(atoms, true, depth + 1);
333
+ return `${/^[A-Za-z_$][\w$]*$/.test(k) ? k : JSON.stringify(k)}${optional.has(k) ? "?" : ""}: ${t ?? "any"}`;
334
+ });
335
+ typedefText.push(`/** @typedef {{${parts.join(", ")}}} ${name} ${MARK} */`);
336
+ return name;
337
+ };
338
+ const mergedRecordType = (sites, depth) => {
339
+ const all = new Set();
340
+ for (const site of sites)
341
+ for (const other of sitesByKeys.get(keySetOf(site)) ?? [site])
342
+ all.add(other);
343
+ const keys = [];
344
+ const optional = new Set();
345
+ for (const site of all) {
346
+ const k = siteKeys.get(site);
347
+ for (const key of k.keys) {
348
+ if (!keys.includes(key))
349
+ keys.push(key);
350
+ if (k.optional.has(key))
351
+ optional.add(key);
352
+ }
353
+ }
354
+ for (const site of all) {
355
+ const own = siteKeys.get(site).keys;
356
+ for (const key of keys)
357
+ if (!own.includes(key))
358
+ optional.add(key);
359
+ }
360
+ const keySet = `merged:${keys
361
+ .map((k) => (optional.has(k) ? `${k}?` : k))
362
+ .sort()
363
+ .join(",")}`;
364
+ const existing = typedefs.get(keySet);
365
+ if (existing !== undefined)
366
+ return existing;
367
+ const name = `__shape_${typedefs.size}`;
368
+ typedefs.set(keySet, name);
369
+ const parts = keys.map((k) => {
370
+ const atoms = new Set();
371
+ for (const site of all) {
372
+ const id = analysis.fields.get(site)?.get(k);
373
+ if (id !== undefined)
374
+ for (const a of analysis.nodes[id].atoms)
375
+ atoms.add(a);
376
+ }
377
+ const t = typeOf(atoms, true, depth + 1);
378
+ return `${/^[A-Za-z_$][\w$]*$/.test(k) ? k : JSON.stringify(k)}${optional.has(k) ? "?" : ""}: ${t ?? "any"}`;
379
+ });
380
+ typedefText.push(`/** @typedef {{${parts.join(", ")}}} ${name} ${MARK} */`);
381
+ return name;
382
+ };
383
+ // Functions called with `new` yield their instance, whatever they return.
384
+ // The set holds nodes only: compiled natively, a Set of `ts.Node |
385
+ // undefined` keeps that union in a box, and so every `ts.Node |
386
+ // undefined` value of the compiler, such as each optional child a syntax
387
+ // node returns.
388
+ const constructed = new Set();
389
+ for (const a of analysis.fnOfInstance.values())
390
+ if (a.node)
391
+ constructed.add(a.node);
392
+ // Return values merged over every analysis context of each function.
393
+ const returns = new Map();
394
+ for (const info of analysis.functions.values()) {
395
+ if (info.node.getSourceFile() !== sf || info.isAsync || info.isGenerator)
396
+ continue;
397
+ let set = returns.get(info.node);
398
+ if (set === undefined)
399
+ returns.set(info.node, (set = new Set()));
400
+ for (const a of analysis.nodes[info.ret].atoms)
401
+ set.add(a);
402
+ }
403
+ // Receivers each method runs on, merged over its analysis contexts.
404
+ const thisAtoms = new Map();
405
+ for (const info of analysis.functions.values()) {
406
+ if (info.node.getSourceFile() !== sf || !ts.isMethodDeclaration(info.node))
407
+ continue;
408
+ let set = thisAtoms.get(info.node);
409
+ if (set === undefined)
410
+ thisAtoms.set(info.node, (set = new Set()));
411
+ for (const a of analysis.nodes[info.thisNode].atoms)
412
+ set.add(a);
413
+ }
414
+ const declaresMember = (cls, name) => analysis.classChain(cls).some((c) => c.members.nodes.some((m) => {
415
+ const n = m.name;
416
+ return (n !== undefined && (ts.isIdentifier(n) || ts.isPrivateIdentifier(n)) && n.text === name);
417
+ }));
418
+ // `this.m(…)` in an inherited method whose class does not declare `m`
419
+ // (zod's ZodType._parseSync calls the subclasses' _parse): the receiver
420
+ // is cast to the classes the method runs on, so the call dispatches over
421
+ // them instead of through an untyped call.
422
+ const receiverCasts = (method) => {
423
+ const cls = method.parent;
424
+ const receivers = thisAtoms.get(method);
425
+ if (cls === undefined || receivers === undefined || receivers.size === 0)
426
+ return;
427
+ if (![...receivers].every((a) => a.kind === "instance"))
428
+ return;
429
+ const t = typeOf(receivers, false, 0);
430
+ if (t === null)
431
+ return;
432
+ const scan = (node) => {
433
+ if (ts.isFunctionLike(node) && !ts.isArrowFunction(node))
434
+ return;
435
+ if (ts.isCallExpression(node) &&
436
+ ts.isPropertyAccessExpression(node.expression) &&
437
+ node.expression.expression.kind === ts.SyntaxKind.ThisKeyword &&
438
+ ts.isIdentifier(node.expression.name) &&
439
+ !declaresMember(cls, node.expression.name.text)) {
440
+ const self = node.expression.expression;
441
+ annotate(ts.tokenStartOfNode(self), `@type {${t}}`, self.end);
442
+ }
443
+ ts.forEachChild(node, (c) => {
444
+ scan(c);
445
+ return undefined;
446
+ });
447
+ };
448
+ if (method.body !== undefined)
449
+ for (const st of method.body.statements.nodes)
450
+ scan(st);
451
+ };
452
+ // Same-named instance methods of the file's classes form a family when
453
+ // a call can reach several of them: a call on a union of those classes
454
+ // needs one signature, so each member's parameters and result join the
455
+ // whole family's values. Two members join when their classes' instances
456
+ // meet as the receivers of one read of the method, or when one class
457
+ // extends the other (an override keeps its base's signature). Members
458
+ // no union reaches keep their own values: ZodString's `_addCheck`
459
+ // returns a ZodString, not every schema class's `_addCheck` result.
460
+ const families = new Map();
461
+ const familyVisit = (node) => {
462
+ if (ts.isMethodDeclaration(node) &&
463
+ ts.isIdentifier(node.name) &&
464
+ !list(node.modifiers).some((m) => m.kind === ts.SyntaxKind.StaticKeyword)) {
465
+ let l = families.get(node.name.text);
466
+ if (l === undefined)
467
+ families.set(node.name.text, (l = []));
468
+ l.push(node);
469
+ }
470
+ ts.forEachChild(node, (c) => {
471
+ familyVisit(c);
472
+ return undefined;
473
+ });
474
+ };
475
+ familyVisit(sf);
476
+ const familyParent = new Map();
477
+ const familyFind = (m) => {
478
+ let r = m;
479
+ for (let p = familyParent.get(r); p !== undefined && p !== r; p = familyParent.get(r))
480
+ r = p;
481
+ return r;
482
+ };
483
+ const familyUnion = (a, b) => {
484
+ const ra = familyFind(a);
485
+ const rb = familyFind(b);
486
+ if (ra !== rb)
487
+ familyParent.set(rb, ra);
488
+ };
489
+ const classNameOf = (c) => {
490
+ const named = c;
491
+ if (named.name !== undefined && ts.isIdentifier(named.name))
492
+ return named.name.text;
493
+ const p = c.parent;
494
+ return p !== undefined && ts.isVariableDeclaration(p) && ts.isIdentifier(p.name)
495
+ ? p.name.text
496
+ : null;
497
+ };
498
+ const baseNameOf = (c) => {
499
+ const clauses = c
500
+ .heritageClauses;
501
+ for (const h of list(clauses)) {
502
+ if (h.token !== ts.SyntaxKind.ExtendsKeyword)
503
+ continue;
504
+ const t = list(h.types)[0];
505
+ if (t !== undefined && ts.isIdentifier(t.expression))
506
+ return t.expression.text;
507
+ }
508
+ return null;
509
+ };
510
+ for (const [name, members] of families) {
511
+ if (members.length < 2)
512
+ continue;
513
+ // The member a class's instances run: its own, or its nearest base's
514
+ // (by name, within the file).
515
+ const byClass = new Map();
516
+ for (const m of members)
517
+ if (m.parent !== undefined)
518
+ byClass.set(m.parent, m);
519
+ const classesByName = new Map();
520
+ const collect = (node) => {
521
+ if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) {
522
+ const n = classNameOf(node);
523
+ if (n !== null && !classesByName.has(n))
524
+ classesByName.set(n, node);
525
+ }
526
+ ts.forEachChild(node, (c) => {
527
+ collect(c);
528
+ return undefined;
529
+ });
530
+ };
531
+ const memberOf = (c) => {
532
+ let cur = c;
533
+ for (let depth = 0; cur !== undefined && depth < 16; depth++) {
534
+ const own = byClass.get(cur);
535
+ if (own !== undefined)
536
+ return own;
537
+ const base = baseNameOf(cur);
538
+ if (base === null)
539
+ return undefined;
540
+ if (classesByName.size === 0)
541
+ collect(sf);
542
+ cur = classesByName.get(base);
543
+ }
544
+ return undefined;
545
+ };
546
+ // Overrides join their base's member.
547
+ for (const m of members) {
548
+ const base = m.parent === undefined ? null : baseNameOf(m.parent);
549
+ if (base === null)
550
+ continue;
551
+ if (classesByName.size === 0)
552
+ collect(sf);
553
+ const baseClass = classesByName.get(base);
554
+ const inherited = baseClass === undefined ? undefined : memberOf(baseClass);
555
+ if (inherited !== undefined)
556
+ familyUnion(inherited, m);
557
+ }
558
+ for (const classes of cooccurring.get(name) ?? []) {
559
+ let first;
560
+ for (const c of classes) {
561
+ if (c.getSourceFile() !== sf)
562
+ continue;
563
+ const m = memberOf(c);
564
+ if (m === undefined)
565
+ continue;
566
+ if (first === undefined)
567
+ first = m;
568
+ else
569
+ familyUnion(first, m);
570
+ }
571
+ }
572
+ }
573
+ // Members the program runs (they have analysis contexts); members it
574
+ // never reaches would only widen the family's types.
575
+ const reached = new Set();
576
+ for (const info of analysis.functions.values())
577
+ if (info.node.getSourceFile() === sf)
578
+ reached.add(info.node);
579
+ const familyOf = (fn) => {
580
+ if (!ts.isMethodDeclaration(fn) || !ts.isIdentifier(fn.name))
581
+ return [fn];
582
+ const root = familyFind(fn);
583
+ const members = (families.get(fn.name.text) ?? [fn]).filter((m) => reached.has(m) && familyFind(m) === root);
584
+ return members.length > 0 ? members : [fn];
585
+ };
586
+ const paramValues = (fn, index) => {
587
+ const out = new Set();
588
+ for (const member of familyOf(fn)) {
589
+ const p = list(member.parameters)[index];
590
+ if (p === undefined)
591
+ continue;
592
+ for (const a of analysis.declValues(p))
593
+ out.add(a);
594
+ }
595
+ return out;
596
+ };
597
+ const returnValues = (fn) => {
598
+ let out;
599
+ for (const member of familyOf(fn)) {
600
+ const r = returns.get(member);
601
+ if (r === undefined)
602
+ continue;
603
+ out ??= new Set();
604
+ for (const a of r)
605
+ out.add(a);
606
+ }
607
+ return out;
608
+ };
609
+ const paramTags = (fn) => {
610
+ const tags = [];
611
+ // The package's JSDoc declares types: the overlay adds none where it
612
+ // has one, and none at all for a signature it types as a whole.
613
+ const doc = packageDocOf(fn);
614
+ if (doc.whole)
615
+ return null;
616
+ if (!ts.isConstructorDeclaration(fn) && !constructed.has(fn) && !doc.returns) {
617
+ const ret = returnValues(fn);
618
+ const t = ret !== undefined && ret.size > 0 ? typeOf(ret, false, 0) : null;
619
+ const why = process.env["SCRIPTC_DEBUG_SHAPE_OVERLAY_WHY"];
620
+ if (why !== undefined &&
621
+ t === null &&
622
+ ret !== undefined &&
623
+ ts.isMethodDeclaration(fn) &&
624
+ ts.isIdentifier(fn.name) &&
625
+ fn.name.text === why)
626
+ process.stderr.write(`[shape-overlay-why] ${fn.name.text}: ${[...ret].map((a) => `${a.kind}:${a.label}${analysis.escaped.has(a) ? "(escaped)" : ""}`).join(" | ")}\n`);
627
+ if (t !== null)
628
+ tags.push(`@returns {${t}}`);
629
+ }
630
+ list(fn.parameters).forEach((p, index) => {
631
+ if (!ts.isIdentifier(p.name) ||
632
+ p.dotDotDotToken !== undefined ||
633
+ p.initializer !== undefined ||
634
+ p.questionToken !== undefined)
635
+ return;
636
+ const values = paramValues(fn, index);
637
+ const t = typeOf(values, false, 0);
638
+ // A `typeof p === "…"` test the proven values never pass would
639
+ // narrow the typed parameter to never inside the branch, which the
640
+ // lowering refuses: such a parameter stays untyped.
641
+ if (t !== null && typeofTestsOutside(fn, p.name.text, values))
642
+ return;
643
+ if (doc.params.has(p.name.text))
644
+ return;
645
+ if (t !== null)
646
+ tags.push(`@param {${t}} ${p.name.text}`);
647
+ });
648
+ return tags.length > 0 ? tags.join(" ") : null;
649
+ };
650
+ const visit = (node) => {
651
+ if (ts.isMethodDeclaration(node))
652
+ receiverCasts(node);
653
+ if (ts.isMethodDeclaration(node) ||
654
+ ts.isConstructorDeclaration(node) ||
655
+ ts.isFunctionDeclaration(node) ||
656
+ // Functions stored as object members (`run: function (…) {…}`).
657
+ (process.env["SCRIPTC_SHAPE_MEMBER_FUNCTIONS"] !== "0" &&
658
+ ts.isFunctionExpression(node) &&
659
+ node.parent !== undefined &&
660
+ ts.isPropertyAssignment(node.parent) &&
661
+ node.parent.initializer === node)) {
662
+ if (node.body !== undefined) {
663
+ const tags = paramTags(node);
664
+ if (tags !== null)
665
+ annotate(ts.tokenStartOfNode(node), tags);
666
+ }
667
+ // `this.f = …` fields of a constructor's top-level statements.
668
+ if (ts.isConstructorDeclaration(node) && node.body !== undefined) {
669
+ const cls = node.parent;
670
+ const seen = new Set();
671
+ for (const st of list(node.body.statements)) {
672
+ if (!ts.isExpressionStatement(st) || !ts.isBinaryExpression(st.expression))
673
+ continue;
674
+ const b = st.expression;
675
+ if (b.operatorToken.kind !== ts.SyntaxKind.EqualsToken ||
676
+ !ts.isPropertyAccessExpression(b.left))
677
+ continue;
678
+ if (b.left.expression.kind !== ts.SyntaxKind.ThisKeyword ||
679
+ !ts.isIdentifier(b.left.name))
680
+ continue;
681
+ const name = b.left.name.text;
682
+ if (seen.has(name))
683
+ continue;
684
+ seen.add(name);
685
+ const t = cls !== undefined ? fieldType(cls, name) : null;
686
+ if (t !== null && !packageDocOf(st).type)
687
+ annotate(ts.tokenStartOfNode(st), `@type {${t}}`);
688
+ }
689
+ }
690
+ }
691
+ // Locals only: module-level bindings are initialized once (and a
692
+ // record-typed module constant can turn a return type into a union of
693
+ // overlapping records, which the lowering width-coerces).
694
+ if (ts.isVariableStatement(node) &&
695
+ (node.parent !== sf || process.env["SCRIPTC_SHAPE_OVERLAY_MODULE_VARS"] === "1") &&
696
+ node.declarationList.declarations.nodes.length === 1) {
697
+ const d = node.declarationList.declarations.nodes[0];
698
+ const init = d.initializer;
699
+ if (ts.isIdentifier(d.name) && init !== undefined && !literalInitializer(init)) {
700
+ const t = typeOf(analysis.declValues(d), false, 0);
701
+ if (process.env["SCRIPTC_DEBUG_SHAPE_OVERLAY_WHY"] === d.name.text)
702
+ process.stderr.write(`[shape-overlay-why] ${d.name.text}@${sf.getLineAndCharacterOfPosition(ts.tokenStartOfNode(d)).line + 1}: ${t} <- ${[...analysis.declValues(d)].map((a) => `${a.kind}:${a.label}`).join(" | ")}\n`);
703
+ if (t !== null && !packageDocOf(node).type)
704
+ annotate(ts.tokenStartOfNode(node), `@type {${t}}`);
705
+ }
706
+ }
707
+ ts.forEachChild(node, (c) => {
708
+ visit(c);
709
+ return undefined;
710
+ });
711
+ };
712
+ const fieldType = (cls, name) => {
713
+ const atoms = new Set();
714
+ for (const a of analysis.atoms.atoms) {
715
+ if (a.kind !== "instance" ||
716
+ a.node === undefined ||
717
+ !analysis.classChain(a.node).includes(cls))
718
+ continue;
719
+ const id = analysis.fields.get(a)?.get(name);
720
+ if (id !== undefined)
721
+ for (const x of analysis.nodes[id].atoms)
722
+ atoms.add(x);
723
+ }
724
+ return typeOf(atoms, false, 0);
725
+ };
726
+ visit(sf);
727
+ // Dead branches: outermost first; edits inside a replaced range drop.
728
+ const dead = (deadByFile.get(sf) ?? []).sort((a, b) => a.pos - b.pos);
729
+ const ranges = [];
730
+ const removed = new Set();
731
+ for (const branch of dead) {
732
+ const start = ts.tokenStartOfNode(branch);
733
+ if (ranges.some(([lo, hi]) => start >= lo && start < hi))
734
+ continue;
735
+ if (hoistedNames(branch, removed) === null)
736
+ continue;
737
+ removed.add(branch);
738
+ ranges.push([start, branch.end]);
739
+ }
740
+ // A var that only removed branches declare stays declared in each.
741
+ const hoisted = new Map();
742
+ for (const branch of removed)
743
+ hoisted.set(ts.tokenStartOfNode(branch), hoistedNames(branch, removed));
744
+ if (ranges.length > 0) {
745
+ const kept = edits.filter((e) => !ranges.some(([lo, hi]) => e.pos > lo && e.pos < hi));
746
+ edits.length = 0;
747
+ edits.push(...kept);
748
+ const pkg = packageNameOf(sf.fileName);
749
+ const rel = sf.fileName.split("/node_modules/").pop() ?? sf.fileName;
750
+ for (const [lo, hi] of ranges) {
751
+ const line = sf.getLineAndCharacterOfPosition(lo).line + 1;
752
+ const message = `scriptc internal error: shape inference proved the branch at ${rel}:${line} unreachable, but it ran. ` +
753
+ `This is a bug in scriptc's shape analysis, not in the program. Rebuild with --no-shape-overlay, ` +
754
+ `or set "scriptc": {"packages": {"${pkg}": {"shapes": false}}} in package.json.`;
755
+ // The branch's own var names stay declared in its scope, undefined.
756
+ const names = hoisted.get(lo);
757
+ const vars = names.length > 0 ? `var ${names.join(", ")}; ` : "";
758
+ edits.push({
759
+ pos: lo,
760
+ end: hi,
761
+ id: lo,
762
+ text: `{ /** ${MARK} #${lo} */ ${vars}throw new Error(${JSON.stringify(message)}); }`,
763
+ });
764
+ }
765
+ }
766
+ // Debugging: SCRIPTC_SHAPE_OVERLAY_ONLY=a-b keeps the annotations
767
+ // numbered a..b (program order across files), to bisect a miscompile.
768
+ const only = process.env["SCRIPTC_SHAPE_OVERLAY_ONLY"];
769
+ if (only !== undefined) {
770
+ const [lo, hi] = only.split("-").map(Number);
771
+ edits.sort((a, b) => a.pos - b.pos);
772
+ const kept = edits.filter(() => {
773
+ const n = debugIndex++;
774
+ return n >= lo && n <= hi;
775
+ });
776
+ edits.length = 0;
777
+ edits.push(...kept);
778
+ }
779
+ if (edits.length === 0 && typedefText.length === 0)
780
+ continue;
781
+ parts.set(sf.fileName, { text: sf.text, edits, suffix: typedefText.join("") });
782
+ }
783
+ // Type aliases other files name these files' classes through.
784
+ for (const [other, names] of exportedClasses) {
785
+ const aliases = [...names]
786
+ .sort()
787
+ .map((n) => `/** @typedef {${n}} __shape_class_${n} ${MARK} */`)
788
+ .join("");
789
+ const part = parts.get(other.fileName);
790
+ if (part !== undefined)
791
+ parts.set(other.fileName, { ...part, suffix: `${part.suffix}\n${aliases}` });
792
+ else
793
+ parts.set(other.fileName, {
794
+ text: other.text,
795
+ edits: [],
796
+ suffix: `\n${aliases}`,
797
+ });
798
+ }
799
+ return { parts };
800
+ }
801
+ /** The plan moved onto texts that structural rewrites changed: each
802
+ * annotation and dead-branch edit maps through the rewrite's edits, and an
803
+ * annotation whose position the rewrite replaced is left out (with its
804
+ * closing parenthesis). `rewritten` gives a rewritten file's text and its
805
+ * position map. */
806
+ export function planOnRewrittenTexts(plan, rewritten) {
807
+ const parts = new Map();
808
+ for (const [file, part] of plan.parts) {
809
+ const r = rewritten.get(file);
810
+ if (r === undefined) {
811
+ parts.set(file, part);
812
+ continue;
813
+ }
814
+ const lost = new Set();
815
+ const moved = [];
816
+ for (const e of part.edits) {
817
+ const pos = r.map(e.pos);
818
+ const end = e.end === undefined ? undefined : r.map(e.end);
819
+ if (pos === null || end === null || (end !== undefined && end < pos)) {
820
+ if (e.id !== undefined)
821
+ lost.add(e.id);
822
+ continue;
823
+ }
824
+ if (e.end !== undefined && end !== undefined && end - pos !== e.end - e.pos) {
825
+ // A rewrite inside a replaced dead branch.
826
+ if (e.id !== undefined)
827
+ lost.add(e.id);
828
+ continue;
829
+ }
830
+ moved.push(end === undefined ? { ...e, pos } : { ...e, pos, end });
831
+ }
832
+ const edits = moved.filter((e) => e.id === undefined || !lost.has(e.id));
833
+ parts.set(file, { text: r.text, edits, suffix: part.suffix });
834
+ }
835
+ return { parts };
836
+ }
837
+ /** The overlay's files with the annotations a build dropped left out. */
838
+ export function renderShapeOverlay(plan, exclusions = NO_EXCLUSIONS) {
839
+ const files = new Map();
840
+ const typed = new Set();
841
+ let annotations = 0;
842
+ let deadBranches = 0;
843
+ for (const [file, part] of plan.parts) {
844
+ const dropped = exclusions.annotations.get(file);
845
+ const edits = part.edits.filter((e) => e.id === undefined || dropped?.has(e.id) !== true);
846
+ for (const e of edits) {
847
+ if (e.id === undefined || e.text === ")")
848
+ continue;
849
+ if (e.end !== undefined)
850
+ deadBranches++;
851
+ else
852
+ annotations++;
853
+ }
854
+ if (edits.length === 0 && part.suffix === "")
855
+ continue;
856
+ const text = applyEdits(part.text, edits) + part.suffix;
857
+ files.set(file, text);
858
+ if (edits.some((e) => e.id !== undefined))
859
+ typed.add(file);
860
+ }
861
+ return { files, typed, annotations, deadBranches };
862
+ }
863
+ /** Literal sites whose objects some holder keeps in the lowering's dynamic
864
+ * representation: a module-level binding of a JavaScript file (the overlay
865
+ * does not type those, and the lowering keeps their objects dynamic), and,
866
+ * transitively, the fields and elements of those objects and of every
867
+ * object or array that is not P-local. A typed position that receives such
868
+ * an object converts it to a native record, which is a copy: identity
869
+ * comparisons and writes through either reference would diverge. */
870
+ function dynHeldSites(analysis, verdicts) {
871
+ const held = new Set();
872
+ const work = [];
873
+ const add = (a) => {
874
+ if ((a.kind === "object" || a.kind === "array") && !held.has(a)) {
875
+ held.add(a);
876
+ work.push(a);
877
+ }
878
+ };
879
+ for (const sf of analysis.files) {
880
+ if (!/\.[cm]?jsx?$/.test(sf.fileName))
881
+ continue;
882
+ for (const st of sf.statements.nodes) {
883
+ if (!ts.isVariableStatement(st))
884
+ continue;
885
+ for (const d of st.declarationList.declarations.nodes)
886
+ for (const a of analysis.declValues(d))
887
+ add(a);
888
+ }
889
+ }
890
+ const pLocal = new Set();
891
+ for (const v of verdicts)
892
+ if (v.verdict === "P-local")
893
+ pLocal.add(v.site.atom);
894
+ for (const a of analysis.atoms.atoms)
895
+ if ((a.kind === "object" || a.kind === "array") && !pLocal.has(a))
896
+ work.push(a);
897
+ const seen = new Set();
898
+ while (work.length > 0) {
899
+ const a = work.pop();
900
+ if (seen.has(a))
901
+ continue;
902
+ seen.add(a);
903
+ for (const id of analysis.fields.get(a)?.values() ?? [])
904
+ for (const x of analysis.nodes[id].atoms)
905
+ add(x);
906
+ const el = analysis.elements.get(a);
907
+ if (el !== undefined)
908
+ for (const x of analysis.nodes[el].atoms)
909
+ add(x);
910
+ }
911
+ return held;
912
+ }
913
+ /** The type tags of the package's own JSDoc for a declaration: in its
914
+ * leading trivia and in that of the statement or property holding it
915
+ * (`/** … *\/ const f = function (…) {}`, `exports.f = function …`). */
916
+ function packageDocOf(node) {
917
+ let text = "";
918
+ for (let n = node; n !== undefined; n = n.parent) {
919
+ const sf = n.getSourceFile();
920
+ for (const m of sf.text.slice(n.pos, ts.tokenStartOfNode(n)).matchAll(/\/\*\*[\s\S]*?\*\//g))
921
+ if (!m[0].includes(MARK))
922
+ text += m[0];
923
+ const p = n.parent;
924
+ if (p === undefined ||
925
+ !(ts.isVariableDeclaration(p) ||
926
+ ts.isVariableDeclarationList(p) ||
927
+ ts.isVariableStatement(p) ||
928
+ ts.isPropertyAssignment(p) ||
929
+ ts.isParenthesizedExpression(p) ||
930
+ ts.isExpressionStatement(p) ||
931
+ ts.isExportAssignment(p) ||
932
+ (ts.isBinaryExpression(p) &&
933
+ p.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
934
+ p.right === n)))
935
+ break;
936
+ }
937
+ const params = new Set();
938
+ for (const m of text.matchAll(/@(?:param|arg|argument)\b/g)) {
939
+ let i = m.index + m[0].length;
940
+ while (i < text.length && /\s/.test(text[i]))
941
+ i++;
942
+ if (text[i] === "{") {
943
+ let depth = 0;
944
+ for (; i < text.length; i++) {
945
+ if (text[i] === "{")
946
+ depth++;
947
+ else if (text[i] === "}" && --depth === 0) {
948
+ i++;
949
+ break;
950
+ }
951
+ }
952
+ }
953
+ const name = /^\s*\[?\s*([A-Za-z_$][\w$]*)/.exec(text.slice(i));
954
+ if (name !== null)
955
+ params.add(name[1]);
956
+ }
957
+ return {
958
+ params,
959
+ returns: /@returns?\b/.test(text),
960
+ type: /@type\b/.test(text),
961
+ whole: /@(?:type|template|this|overload|callback)\b/.test(text),
962
+ };
963
+ }
964
+ /** A comment range's JSDoc type tags made plain text (the range is
965
+ * trivia, so it holds no literal). The overlay's own comments carry MARK
966
+ * and are kept. Lengths are unchanged. */
967
+ export function neutralizeCommentTags(text) {
968
+ return text.replace(/\/\*\*[\s\S]*?\*\//g, (comment) => {
969
+ if (comment.includes(MARK))
970
+ return comment;
971
+ return comment.replace(/@(param|type|typedef|returns?|template|this|callback|property|prop|arg|argument|enum|implements|extends|augments|satisfies|overload|import)\b/g, "-$1");
972
+ });
973
+ }
974
+ /** The `var` names a dead branch declares that its function (or file)
975
+ * declares nowhere else outside the `removed` branches: replacing the
976
+ * branch must keep them bound, as undefined. Null when the branch declares
977
+ * a function in a block, whose binding outside the block depends on the
978
+ * file's strictness; such a branch is kept. */
979
+ function hoistedNames(branch, removed) {
980
+ let scope = branch.parent;
981
+ while (scope !== undefined && !ts.isSourceFile(scope) && !functionScope(scope))
982
+ scope = scope.parent;
983
+ if (scope === undefined)
984
+ return null;
985
+ const own = new Set();
986
+ let blockFunction = false;
987
+ ts.walkPreorder(branch, (n) => {
988
+ if (n !== branch && ts.isFunctionDeclaration(n)) {
989
+ blockFunction = true;
990
+ return "skip";
991
+ }
992
+ if (n !== branch && (functionScope(n) || ts.isClassDeclaration(n) || ts.isClassExpression(n)))
993
+ return "skip";
994
+ if (ts.isVariableDeclarationList(n) && (n.flags & ts.NodeFlags.BlockScoped) === 0)
995
+ for (const d of n.declarations.nodes)
996
+ addBindingNames(d.name, own);
997
+ return undefined;
998
+ });
999
+ if (blockFunction)
1000
+ return null;
1001
+ if (own.size === 0)
1002
+ return [];
1003
+ // Names the scope binds outside the branch: parameters, a function
1004
+ // expression's name, other var declarations and function declarations.
1005
+ const elsewhere = new Set();
1006
+ if (!ts.isSourceFile(scope)) {
1007
+ for (const p of list(scope.parameters))
1008
+ addBindingNames(p.name, elsewhere);
1009
+ const name = scope.name;
1010
+ if (name !== undefined && ts.isIdentifier(name))
1011
+ elsewhere.add(name.text);
1012
+ }
1013
+ const body = ts.isSourceFile(scope) ? scope : scope.body;
1014
+ if (body !== undefined)
1015
+ ts.walkPreorder(body, (n) => {
1016
+ if (n === branch || removed.has(n))
1017
+ return "skip";
1018
+ if (n !== body && ts.isFunctionDeclaration(n) && n.name !== undefined)
1019
+ elsewhere.add(n.name.text);
1020
+ if (n !== body && (functionScope(n) || ts.isClassDeclaration(n) || ts.isClassExpression(n)))
1021
+ return "skip";
1022
+ if (ts.isVariableDeclarationList(n) && (n.flags & ts.NodeFlags.BlockScoped) === 0)
1023
+ for (const d of n.declarations.nodes)
1024
+ addBindingNames(d.name, elsewhere);
1025
+ return undefined;
1026
+ });
1027
+ return [...own].filter((name) => !elsewhere.has(name));
1028
+ }
1029
+ function functionScope(n) {
1030
+ return (ts.isFunctionDeclaration(n) ||
1031
+ ts.isFunctionExpression(n) ||
1032
+ ts.isArrowFunction(n) ||
1033
+ ts.isMethodDeclaration(n) ||
1034
+ ts.isGetAccessorDeclaration(n) ||
1035
+ ts.isSetAccessorDeclaration(n) ||
1036
+ ts.isConstructorDeclaration(n) ||
1037
+ ts.isClassStaticBlockDeclaration(n));
1038
+ }
1039
+ function addBindingNames(name, out) {
1040
+ if (ts.isIdentifier(name)) {
1041
+ out.add(name.text);
1042
+ return;
1043
+ }
1044
+ for (const element of name.elements.nodes)
1045
+ if (!ts.isOmittedExpression(element) && element.name !== undefined)
1046
+ addBindingNames(element.name, out);
1047
+ }
1048
+ /** The `typeof` results the values can have. */
1049
+ function typeofResults(values) {
1050
+ const out = new Set();
1051
+ for (const a of values) {
1052
+ if (a.kind === "prim")
1053
+ out.add(a.label === "null" ? "object" : a.label === "symbol" ? "symbol" : a.label);
1054
+ else if (a.kind === "function" || a.kind === "class")
1055
+ out.add("function");
1056
+ else
1057
+ out.add("object");
1058
+ }
1059
+ return out;
1060
+ }
1061
+ /** Whether the function's body compares `typeof name` with a result the
1062
+ * values never have. */
1063
+ function typeofTestsOutside(fn, name, values) {
1064
+ const results = typeofResults(values);
1065
+ let outside = false;
1066
+ const visit = (n) => {
1067
+ if (outside)
1068
+ return;
1069
+ if (ts.isBinaryExpression(n) &&
1070
+ (n.operatorToken.kind === ts.SyntaxKind.EqualsEqualsEqualsToken ||
1071
+ n.operatorToken.kind === ts.SyntaxKind.EqualsEqualsToken ||
1072
+ n.operatorToken.kind === ts.SyntaxKind.ExclamationEqualsEqualsToken ||
1073
+ n.operatorToken.kind === ts.SyntaxKind.ExclamationEqualsToken)) {
1074
+ for (const [op, lit] of [
1075
+ [n.left, n.right],
1076
+ [n.right, n.left],
1077
+ ])
1078
+ if (ts.isTypeOfExpression(op) &&
1079
+ ts.isIdentifier(op.expression) &&
1080
+ op.expression.text === name &&
1081
+ ts.isStringLiteral(lit) &&
1082
+ !results.has(lit.text))
1083
+ outside = true;
1084
+ }
1085
+ ts.forEachChild(n, (c) => {
1086
+ visit(c);
1087
+ return undefined;
1088
+ });
1089
+ };
1090
+ if (fn.body !== undefined)
1091
+ visit(fn.body);
1092
+ return outside;
1093
+ }
1094
+ function packageNameOf(fileName) {
1095
+ const parts = (fileName.split("/node_modules/").pop() ?? "").split("/");
1096
+ return parts[0].startsWith("@") ? `${parts[0]}/${parts[1]}` : parts[0];
1097
+ }
1098
+ function literalInitializer(e) {
1099
+ return (ts.isObjectLiteralExpression(e) ||
1100
+ (ts.isArrayLiteralExpression(e) && e.elements.nodes.length > 0) ||
1101
+ ts.isStringLiteral(e) ||
1102
+ ts.isNumericLiteral(e) ||
1103
+ ts.isNoSubstitutionTemplateLiteral(e) ||
1104
+ ts.isArrowFunction(e) ||
1105
+ ts.isFunctionExpression(e) ||
1106
+ e.kind === ts.SyntaxKind.TrueKeyword ||
1107
+ e.kind === ts.SyntaxKind.FalseKeyword);
1108
+ }
1109
+ function applyEdits(text, edits) {
1110
+ const sorted = [...edits].sort((a, b) => a.pos - b.pos);
1111
+ let out = "";
1112
+ let at = 0;
1113
+ for (const e of sorted) {
1114
+ out += text.slice(at, e.pos) + e.text;
1115
+ at = e.end ?? e.pos;
1116
+ }
1117
+ return out + text.slice(at);
1118
+ }
1119
+ /** A record site's keys: its static keys, or for a literal with spreads its
1120
+ * own keys plus every key a spread source contributes (optional unless
1121
+ * every value of that source has it). Null when a computed key or an
1122
+ * untracked spread source makes the key set unknown. */
1123
+ function keysOfSite(analysis, v) {
1124
+ const site = v.site;
1125
+ if (site.keys !== null)
1126
+ return { keys: site.keys, optional: new Set() };
1127
+ if (site.hasComputedKey)
1128
+ return null;
1129
+ const fields = analysis.fields.get(site.atom);
1130
+ const any = fields?.get("*");
1131
+ if (any !== undefined && analysis.nodes[any].atoms.size > 0)
1132
+ return null;
1133
+ const required = new Set(site.ownKeys);
1134
+ for (const spread of site.spreads) {
1135
+ const sets = [];
1136
+ for (const a of analysis.nodes[spread].atoms) {
1137
+ if (a.kind === "prim" && (a.label === "undefined" || a.label === "null"))
1138
+ continue;
1139
+ if (a.kind !== "object")
1140
+ return null;
1141
+ const own = new Set();
1142
+ for (const k of analysis.fields.get(a)?.keys() ?? [])
1143
+ if (k !== "*")
1144
+ own.add(k);
1145
+ sets.push(own);
1146
+ }
1147
+ const first = sets[0];
1148
+ if (first === undefined)
1149
+ continue;
1150
+ for (const k of first)
1151
+ if (sets.every((set) => set.has(k)))
1152
+ required.add(k);
1153
+ }
1154
+ const all = [...site.ownKeys];
1155
+ for (const k of fields?.keys() ?? [])
1156
+ if (k !== "*" && !all.includes(k))
1157
+ all.push(k);
1158
+ return { keys: all, optional: new Set(all.filter((k) => !required.has(k))) };
1159
+ }
1160
+ //# sourceMappingURL=overlay.js.map