@geastack/compiler 1.0.15

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 (966) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +149 -0
  3. package/dist/cli-analyze.d.ts +1 -0
  4. package/dist/cli-analyze.js +61 -0
  5. package/dist/cli-coverage.d.ts +1 -0
  6. package/dist/cli-coverage.js +329 -0
  7. package/dist/cli-emit.d.ts +10 -0
  8. package/dist/cli-emit.js +398 -0
  9. package/dist/cli-module-graph.d.ts +18 -0
  10. package/dist/cli-module-graph.js +123 -0
  11. package/dist/cli-package-source.d.ts +5 -0
  12. package/dist/cli-package-source.js +116 -0
  13. package/dist/cli-project.d.ts +2 -0
  14. package/dist/cli-project.js +60 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +199 -0
  17. package/dist/compiler.d.ts +228 -0
  18. package/dist/compiler.js +1029 -0
  19. package/dist/conversion/algebra.d.ts +218 -0
  20. package/dist/conversion/algebra.js +155 -0
  21. package/dist/conversion/build.d.ts +67 -0
  22. package/dist/conversion/build.js +1378 -0
  23. package/dist/conversion/derive.d.ts +37 -0
  24. package/dist/conversion/derive.js +260 -0
  25. package/dist/conversion/graph-validation.d.ts +8 -0
  26. package/dist/conversion/graph-validation.js +97 -0
  27. package/dist/conversion/native-callable-adapter.d.ts +13 -0
  28. package/dist/conversion/native-callable-adapter.js +53 -0
  29. package/dist/conversion/native-class-reference.d.ts +12 -0
  30. package/dist/conversion/native-class-reference.js +39 -0
  31. package/dist/conversion/native-payload-transport.d.ts +25 -0
  32. package/dist/conversion/native-payload-transport.js +33 -0
  33. package/dist/conversion/native-selection.d.ts +49 -0
  34. package/dist/conversion/native-selection.js +135 -0
  35. package/dist/conversion/native-sum.d.ts +42 -0
  36. package/dist/conversion/native-sum.js +115 -0
  37. package/dist/conversion/nodes.d.ts +55 -0
  38. package/dist/conversion/nodes.js +91 -0
  39. package/dist/conversion/operand-view.d.ts +14 -0
  40. package/dist/conversion/operand-view.js +20 -0
  41. package/dist/conversion/record-view.d.ts +157 -0
  42. package/dist/conversion/record-view.js +273 -0
  43. package/dist/conversion/registry.d.ts +217 -0
  44. package/dist/conversion/registry.js +1 -0
  45. package/dist/diagnostics/model.d.ts +76 -0
  46. package/dist/diagnostics/model.js +60 -0
  47. package/dist/diagnostics/sweep.d.ts +31 -0
  48. package/dist/diagnostics/sweep.js +112 -0
  49. package/dist/identity/ids.d.ts +179 -0
  50. package/dist/identity/ids.js +212 -0
  51. package/dist/ir/absent-class-arm.d.ts +48 -0
  52. package/dist/ir/absent-class-arm.js +157 -0
  53. package/dist/ir/borrow-effects.d.ts +23 -0
  54. package/dist/ir/borrow-effects.js +151 -0
  55. package/dist/ir/borrowed-call-arguments.d.ts +40 -0
  56. package/dist/ir/borrowed-call-arguments.js +117 -0
  57. package/dist/ir/build.d.ts +168 -0
  58. package/dist/ir/build.js +459 -0
  59. package/dist/ir/call-dispatch.d.ts +38 -0
  60. package/dist/ir/call-dispatch.js +502 -0
  61. package/dist/ir/call-entry.d.ts +142 -0
  62. package/dist/ir/call-entry.js +386 -0
  63. package/dist/ir/callable-class-flow.d.ts +27 -0
  64. package/dist/ir/callable-class-flow.js +1386 -0
  65. package/dist/ir/callable-field-slots.d.ts +22 -0
  66. package/dist/ir/callable-field-slots.js +166 -0
  67. package/dist/ir/callable-identity-demand.d.ts +52 -0
  68. package/dist/ir/callable-identity-demand.js +460 -0
  69. package/dist/ir/callable-member-candidates.d.ts +9 -0
  70. package/dist/ir/callable-member-candidates.js +39 -0
  71. package/dist/ir/callable-records.d.ts +21 -0
  72. package/dist/ir/callable-records.js +411 -0
  73. package/dist/ir/captures.d.ts +26 -0
  74. package/dist/ir/captures.js +335 -0
  75. package/dist/ir/certificate.d.ts +45 -0
  76. package/dist/ir/certificate.js +47 -0
  77. package/dist/ir/certify/carrier-keys.d.ts +73 -0
  78. package/dist/ir/certify/carrier-keys.js +221 -0
  79. package/dist/ir/certify/function-source.d.ts +4 -0
  80. package/dist/ir/certify/function-source.js +28 -0
  81. package/dist/ir/certify/has-property-key.d.ts +88 -0
  82. package/dist/ir/certify/has-property-key.js +116 -0
  83. package/dist/ir/certify/instanceof-key.d.ts +24 -0
  84. package/dist/ir/certify/instanceof-key.js +35 -0
  85. package/dist/ir/certify/property-access-keys.d.ts +172 -0
  86. package/dist/ir/certify/property-access-keys.js +291 -0
  87. package/dist/ir/certify/property-access.d.ts +3 -0
  88. package/dist/ir/certify/property-access.js +597 -0
  89. package/dist/ir/certify/runtime-helper.d.ts +3 -0
  90. package/dist/ir/certify/runtime-helper.js +326 -0
  91. package/dist/ir/certify/typeof-operand.d.ts +14 -0
  92. package/dist/ir/certify/typeof-operand.js +16 -0
  93. package/dist/ir/certify.d.ts +123 -0
  94. package/dist/ir/certify.js +481 -0
  95. package/dist/ir/class-evaluation.d.ts +26 -0
  96. package/dist/ir/class-evaluation.js +50 -0
  97. package/dist/ir/class-static-fields.d.ts +60 -0
  98. package/dist/ir/class-static-fields.js +108 -0
  99. package/dist/ir/construct-entry.d.ts +26 -0
  100. package/dist/ir/construct-entry.js +117 -0
  101. package/dist/ir/dead-values.d.ts +90 -0
  102. package/dist/ir/dead-values.js +184 -0
  103. package/dist/ir/deferral.d.ts +99 -0
  104. package/dist/ir/deferral.js +409 -0
  105. package/dist/ir/dense-loops.d.ts +230 -0
  106. package/dist/ir/dense-loops.js +697 -0
  107. package/dist/ir/dominance.d.ts +82 -0
  108. package/dist/ir/dominance.js +268 -0
  109. package/dist/ir/emission-representations.d.ts +71 -0
  110. package/dist/ir/emission-representations.js +350 -0
  111. package/dist/ir/facts.d.ts +218 -0
  112. package/dist/ir/facts.js +181 -0
  113. package/dist/ir/fixed-data-definition.d.ts +19 -0
  114. package/dist/ir/fixed-data-definition.js +49 -0
  115. package/dist/ir/generator-split.d.ts +38 -0
  116. package/dist/ir/generator-split.js +329 -0
  117. package/dist/ir/hoist.d.ts +55 -0
  118. package/dist/ir/hoist.js +375 -0
  119. package/dist/ir/instantiation.d.ts +61 -0
  120. package/dist/ir/instantiation.js +137 -0
  121. package/dist/ir/integer-storage.d.ts +170 -0
  122. package/dist/ir/integer-storage.js +822 -0
  123. package/dist/ir/integers.d.ts +161 -0
  124. package/dist/ir/integers.js +539 -0
  125. package/dist/ir/integrity-restrictions.d.ts +50 -0
  126. package/dist/ir/integrity-restrictions.js +118 -0
  127. package/dist/ir/local-iterators.d.ts +4 -0
  128. package/dist/ir/local-iterators.js +27 -0
  129. package/dist/ir/lower-allocation.d.ts +4 -0
  130. package/dist/ir/lower-allocation.js +325 -0
  131. package/dist/ir/lower-completion.d.ts +15 -0
  132. package/dist/ir/lower-completion.js +25 -0
  133. package/dist/ir/lower-destructuring.d.ts +5 -0
  134. package/dist/ir/lower-destructuring.js +693 -0
  135. package/dist/ir/lower-element.d.ts +29 -0
  136. package/dist/ir/lower-element.js +111 -0
  137. package/dist/ir/lower-exceptions.d.ts +47 -0
  138. package/dist/ir/lower-exceptions.js +92 -0
  139. package/dist/ir/lower-flow.d.ts +137 -0
  140. package/dist/ir/lower-flow.js +600 -0
  141. package/dist/ir/lower-graph.d.ts +218 -0
  142. package/dist/ir/lower-graph.js +687 -0
  143. package/dist/ir/lower-invocation.d.ts +4 -0
  144. package/dist/ir/lower-invocation.js +514 -0
  145. package/dist/ir/lower-narrow.d.ts +53 -0
  146. package/dist/ir/lower-narrow.js +320 -0
  147. package/dist/ir/lower-operands.d.ts +272 -0
  148. package/dist/ir/lower-operands.js +461 -0
  149. package/dist/ir/lower-property.d.ts +21 -0
  150. package/dist/ir/lower-property.js +132 -0
  151. package/dist/ir/lower-protocol.d.ts +11 -0
  152. package/dist/ir/lower-protocol.js +118 -0
  153. package/dist/ir/lower-short-circuit.d.ts +41 -0
  154. package/dist/ir/lower-short-circuit.js +63 -0
  155. package/dist/ir/lower.d.ts +82 -0
  156. package/dist/ir/lower.js +1346 -0
  157. package/dist/ir/model.d.ts +1474 -0
  158. package/dist/ir/model.js +6 -0
  159. package/dist/ir/native-absent-property.d.ts +3 -0
  160. package/dist/ir/native-absent-property.js +13 -0
  161. package/dist/ir/native-array-transport.d.ts +7 -0
  162. package/dist/ir/native-array-transport.js +46 -0
  163. package/dist/ir/native-callable-bind.d.ts +9 -0
  164. package/dist/ir/native-callable-bind.js +30 -0
  165. package/dist/ir/native-carrier-predicate.d.ts +34 -0
  166. package/dist/ir/native-carrier-predicate.js +49 -0
  167. package/dist/ir/native-class-accessor.d.ts +18 -0
  168. package/dist/ir/native-class-accessor.js +52 -0
  169. package/dist/ir/native-class-construction.d.ts +16 -0
  170. package/dist/ir/native-class-construction.js +71 -0
  171. package/dist/ir/native-class-initialization.d.ts +15 -0
  172. package/dist/ir/native-class-initialization.js +56 -0
  173. package/dist/ir/native-class-origins.d.ts +13 -0
  174. package/dist/ir/native-class-origins.js +237 -0
  175. package/dist/ir/native-dictionary-transport.d.ts +6 -0
  176. package/dist/ir/native-dictionary-transport.js +37 -0
  177. package/dist/ir/native-enumeration.d.ts +14 -0
  178. package/dist/ir/native-enumeration.js +26 -0
  179. package/dist/ir/native-equality.d.ts +10 -0
  180. package/dist/ir/native-equality.js +18 -0
  181. package/dist/ir/native-field-owner.d.ts +37 -0
  182. package/dist/ir/native-field-owner.js +183 -0
  183. package/dist/ir/native-fixed-layout.d.ts +41 -0
  184. package/dist/ir/native-fixed-layout.js +232 -0
  185. package/dist/ir/native-host-construction.d.ts +53 -0
  186. package/dist/ir/native-host-construction.js +62 -0
  187. package/dist/ir/native-key-query.d.ts +4 -0
  188. package/dist/ir/native-key-query.js +38 -0
  189. package/dist/ir/native-merge-transport.d.ts +25 -0
  190. package/dist/ir/native-merge-transport.js +71 -0
  191. package/dist/ir/native-record-index-transport.d.ts +11 -0
  192. package/dist/ir/native-record-index-transport.js +34 -0
  193. package/dist/ir/native-record-index.d.ts +12 -0
  194. package/dist/ir/native-record-index.js +27 -0
  195. package/dist/ir/native-reflect-field.d.ts +5 -0
  196. package/dist/ir/native-reflect-field.js +33 -0
  197. package/dist/ir/native-sequence-transport.d.ts +7 -0
  198. package/dist/ir/native-sequence-transport.js +53 -0
  199. package/dist/ir/numeric-intrinsics.d.ts +13 -0
  200. package/dist/ir/numeric-intrinsics.js +57 -0
  201. package/dist/ir/object-value-conversions.d.ts +20 -0
  202. package/dist/ir/object-value-conversions.js +50 -0
  203. package/dist/ir/physical-class-reflection.d.ts +9 -0
  204. package/dist/ir/physical-class-reflection.js +57 -0
  205. package/dist/ir/presence-proof.d.ts +42 -0
  206. package/dist/ir/presence-proof.js +490 -0
  207. package/dist/ir/program-facts.d.ts +106 -0
  208. package/dist/ir/program-facts.js +319 -0
  209. package/dist/ir/proven-branches.d.ts +16 -0
  210. package/dist/ir/proven-branches.js +219 -0
  211. package/dist/ir/queries.d.ts +41 -0
  212. package/dist/ir/queries.js +213 -0
  213. package/dist/ir/reflection-demand.d.ts +64 -0
  214. package/dist/ir/reflection-demand.js +1394 -0
  215. package/dist/ir/refusal.d.ts +43 -0
  216. package/dist/ir/refusal.js +28 -0
  217. package/dist/ir/shake.d.ts +37 -0
  218. package/dist/ir/shake.js +1078 -0
  219. package/dist/ir/static-callables.d.ts +11 -0
  220. package/dist/ir/static-callables.js +163 -0
  221. package/dist/ir/string-layout-reuse.d.ts +13 -0
  222. package/dist/ir/string-layout-reuse.js +39 -0
  223. package/dist/ir/string-length-reuse.d.ts +8 -0
  224. package/dist/ir/string-length-reuse.js +47 -0
  225. package/dist/ir/transfer.d.ts +78 -0
  226. package/dist/ir/transfer.js +270 -0
  227. package/dist/ir/type-query-results.d.ts +25 -0
  228. package/dist/ir/type-query-results.js +96 -0
  229. package/dist/ir/typed-property-access.d.ts +100 -0
  230. package/dist/ir/typed-property-access.js +161 -0
  231. package/dist/ir/verify.d.ts +19 -0
  232. package/dist/ir/verify.js +355 -0
  233. package/dist/plugins/apple/constructors.d.ts +112 -0
  234. package/dist/plugins/apple/constructors.js +217 -0
  235. package/dist/plugins/apple/host.d.ts +181 -0
  236. package/dist/plugins/apple/host.js +262 -0
  237. package/dist/plugins/apple/jsx.d.ts +2 -0
  238. package/dist/plugins/apple/jsx.js +293 -0
  239. package/dist/plugins/apple/members.d.ts +16 -0
  240. package/dist/plugins/apple/members.js +190 -0
  241. package/dist/plugins/apple/plugin.d.ts +2 -0
  242. package/dist/plugins/apple/plugin.js +156 -0
  243. package/dist/plugins/gea/component-classes.d.ts +25 -0
  244. package/dist/plugins/gea/component-classes.js +162 -0
  245. package/dist/plugins/gea/component-inline.d.ts +13 -0
  246. package/dist/plugins/gea/component-inline.js +532 -0
  247. package/dist/plugins/gea/constructors.d.ts +23 -0
  248. package/dist/plugins/gea/constructors.js +100 -0
  249. package/dist/plugins/gea/contract.d.ts +150 -0
  250. package/dist/plugins/gea/contract.js +195 -0
  251. package/dist/plugins/gea/element-ref.d.ts +31 -0
  252. package/dist/plugins/gea/element-ref.js +45 -0
  253. package/dist/plugins/gea/host.d.ts +520 -0
  254. package/dist/plugins/gea/host.js +762 -0
  255. package/dist/plugins/gea/lower.d.ts +6 -0
  256. package/dist/plugins/gea/lower.js +195 -0
  257. package/dist/plugins/gea/members.d.ts +22 -0
  258. package/dist/plugins/gea/members.js +221 -0
  259. package/dist/plugins/gea/plugin.d.ts +22 -0
  260. package/dist/plugins/gea/plugin.js +307 -0
  261. package/dist/plugins/gea/prelude.d.ts +78 -0
  262. package/dist/plugins/gea/prelude.js +153 -0
  263. package/dist/plugins/gea/producer.d.ts +5 -0
  264. package/dist/plugins/gea/producer.js +52 -0
  265. package/dist/plugins/gea/reactive-slots.d.ts +49 -0
  266. package/dist/plugins/gea/reactive-slots.js +578 -0
  267. package/dist/plugins/gea/render-bridge.d.ts +6 -0
  268. package/dist/plugins/gea/render-bridge.js +281 -0
  269. package/dist/plugins/gea/slots.d.ts +15 -0
  270. package/dist/plugins/gea/slots.js +36 -0
  271. package/dist/plugins/gea/template-analysis.d.ts +151 -0
  272. package/dist/plugins/gea/template-analysis.js +346 -0
  273. package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
  274. package/dist/plugins/gea/user-agent-styles.js +94 -0
  275. package/dist/plugins/installed.d.ts +19 -0
  276. package/dist/plugins/installed.js +21 -0
  277. package/dist/plugins/load.d.ts +7 -0
  278. package/dist/plugins/load.js +207 -0
  279. package/dist/plugins/model.d.ts +735 -0
  280. package/dist/plugins/model.js +47 -0
  281. package/dist/plugins/webgl/host.d.ts +77 -0
  282. package/dist/plugins/webgl/host.js +162 -0
  283. package/dist/plugins/webgl/plugin.d.ts +40 -0
  284. package/dist/plugins/webgl/plugin.js +99 -0
  285. package/dist/preflight/obligations.d.ts +206 -0
  286. package/dist/preflight/obligations.js +36 -0
  287. package/dist/preflight/report.d.ts +20 -0
  288. package/dist/preflight/report.js +61 -0
  289. package/dist/preflight/run.d.ts +39 -0
  290. package/dist/preflight/run.js +403 -0
  291. package/dist/project-preparation.d.ts +33 -0
  292. package/dist/project-preparation.js +314 -0
  293. package/dist/projection/abi.d.ts +82 -0
  294. package/dist/projection/abi.js +349 -0
  295. package/dist/projection/apply-arguments.d.ts +12 -0
  296. package/dist/projection/apply-arguments.js +20 -0
  297. package/dist/projection/bindings.d.ts +250 -0
  298. package/dist/projection/bindings.js +340 -0
  299. package/dist/projection/callee.d.ts +196 -0
  300. package/dist/projection/callee.js +444 -0
  301. package/dist/projection/class-property-presence.d.ts +28 -0
  302. package/dist/projection/class-property-presence.js +58 -0
  303. package/dist/projection/class-prototype.d.ts +5 -0
  304. package/dist/projection/class-prototype.js +23 -0
  305. package/dist/projection/class-storage.d.ts +26 -0
  306. package/dist/projection/class-storage.js +236 -0
  307. package/dist/projection/classes.d.ts +283 -0
  308. package/dist/projection/classes.js +944 -0
  309. package/dist/projection/coercions.d.ts +20 -0
  310. package/dist/projection/coercions.js +33 -0
  311. package/dist/projection/dispatch.d.ts +167 -0
  312. package/dist/projection/dispatch.js +379 -0
  313. package/dist/projection/fields.d.ts +123 -0
  314. package/dist/projection/fields.js +383 -0
  315. package/dist/projection/instance-test.d.ts +78 -0
  316. package/dist/projection/instance-test.js +156 -0
  317. package/dist/projection/slots.d.ts +146 -0
  318. package/dist/projection/slots.js +663 -0
  319. package/dist/projection/synthesized-abi.d.ts +61 -0
  320. package/dist/projection/synthesized-abi.js +94 -0
  321. package/dist/representation/array-index.d.ts +14 -0
  322. package/dist/representation/array-index.js +17 -0
  323. package/dist/representation/callable-object.d.ts +3 -0
  324. package/dist/representation/callable-object.js +6 -0
  325. package/dist/representation/collections.d.ts +84 -0
  326. package/dist/representation/collections.js +139 -0
  327. package/dist/representation/derive.d.ts +159 -0
  328. package/dist/representation/derive.js +2546 -0
  329. package/dist/representation/difference.d.ts +30 -0
  330. package/dist/representation/difference.js +240 -0
  331. package/dist/representation/field-descriptor-policy.d.ts +19 -0
  332. package/dist/representation/field-descriptor-policy.js +39 -0
  333. package/dist/representation/function-constructor.d.ts +13 -0
  334. package/dist/representation/function-constructor.js +9 -0
  335. package/dist/representation/host-abi.d.ts +32 -0
  336. package/dist/representation/host-abi.js +97 -0
  337. package/dist/representation/host-templates.d.ts +67 -0
  338. package/dist/representation/host-templates.js +94 -0
  339. package/dist/representation/intersection.d.ts +84 -0
  340. package/dist/representation/intersection.js +149 -0
  341. package/dist/representation/literal-destination.d.ts +43 -0
  342. package/dist/representation/literal-destination.js +133 -0
  343. package/dist/representation/merge.d.ts +18 -0
  344. package/dist/representation/merge.js +83 -0
  345. package/dist/representation/model.d.ts +1160 -0
  346. package/dist/representation/model.js +1019 -0
  347. package/dist/representation/numeric-index.d.ts +13 -0
  348. package/dist/representation/numeric-index.js +29 -0
  349. package/dist/representation/object-shape.d.ts +109 -0
  350. package/dist/representation/object-shape.js +123 -0
  351. package/dist/representation/optional.d.ts +12 -0
  352. package/dist/representation/optional.js +87 -0
  353. package/dist/representation/plan.d.ts +60 -0
  354. package/dist/representation/plan.js +78 -0
  355. package/dist/representation/policies.d.ts +589 -0
  356. package/dist/representation/policies.js +107 -0
  357. package/dist/representation/primitive-domain.d.ts +1 -0
  358. package/dist/representation/primitive-domain.js +1 -0
  359. package/dist/representation/primitives.d.ts +44 -0
  360. package/dist/representation/primitives.js +78 -0
  361. package/dist/representation/publish.d.ts +49 -0
  362. package/dist/representation/publish.js +648 -0
  363. package/dist/representation/record-fields.d.ts +96 -0
  364. package/dist/representation/record-fields.js +116 -0
  365. package/dist/representation/template-object.d.ts +11 -0
  366. package/dist/representation/template-object.js +26 -0
  367. package/dist/representation/union.d.ts +30 -0
  368. package/dist/representation/union.js +324 -0
  369. package/dist/representation/value-records.d.ts +3 -0
  370. package/dist/representation/value-records.js +307 -0
  371. package/dist/representation/verify.d.ts +17 -0
  372. package/dist/representation/verify.js +221 -0
  373. package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
  374. package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
  375. package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
  376. package/dist/semantics/ambient-type-realization-transform.js +168 -0
  377. package/dist/semantics/ambient.d.ts +24 -0
  378. package/dist/semantics/ambient.js +119 -0
  379. package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
  380. package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
  381. package/dist/semantics/callable-origins.d.ts +46 -0
  382. package/dist/semantics/callable-origins.js +354 -0
  383. package/dist/semantics/class-alias.d.ts +7 -0
  384. package/dist/semantics/class-alias.js +37 -0
  385. package/dist/semantics/class-heritage.d.ts +34 -0
  386. package/dist/semantics/class-heritage.js +104 -0
  387. package/dist/semantics/commonjs-wrapper.d.ts +69 -0
  388. package/dist/semantics/commonjs-wrapper.js +231 -0
  389. package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
  390. package/dist/semantics/constructor-slot-subclasses.js +112 -0
  391. package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
  392. package/dist/semantics/declaration-overlay-transform.js +2157 -0
  393. package/dist/semantics/define-property-source-transform.d.ts +4 -0
  394. package/dist/semantics/define-property-source-transform.js +437 -0
  395. package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
  396. package/dist/semantics/diagnostic-source-preparation.js +82 -0
  397. package/dist/semantics/documentation-ranges.d.ts +22 -0
  398. package/dist/semantics/documentation-ranges.js +36 -0
  399. package/dist/semantics/dynamic-fallback.d.ts +86 -0
  400. package/dist/semantics/dynamic-fallback.js +249 -0
  401. package/dist/semantics/frontend-timing.d.ts +6 -0
  402. package/dist/semantics/frontend-timing.js +35 -0
  403. package/dist/semantics/frontend.d.ts +504 -0
  404. package/dist/semantics/frontend.js +1157 -0
  405. package/dist/semantics/host-declaration-provenance.d.ts +11 -0
  406. package/dist/semantics/host-declaration-provenance.js +18 -0
  407. package/dist/semantics/host-methods.d.ts +24 -0
  408. package/dist/semantics/host-methods.js +74 -0
  409. package/dist/semantics/host-protocols.d.ts +429 -0
  410. package/dist/semantics/host-protocols.js +1501 -0
  411. package/dist/semantics/inherited-accessor.d.ts +7 -0
  412. package/dist/semantics/inherited-accessor.js +48 -0
  413. package/dist/semantics/interface-families.d.ts +70 -0
  414. package/dist/semantics/interface-families.js +180 -0
  415. package/dist/semantics/interface-implementors.d.ts +53 -0
  416. package/dist/semantics/interface-implementors.js +87 -0
  417. package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
  418. package/dist/semantics/jsdoc-namepath-transform.js +85 -0
  419. package/dist/semantics/model/coverage.d.ts +68 -0
  420. package/dist/semantics/model/coverage.js +73 -0
  421. package/dist/semantics/model/edges.d.ts +103 -0
  422. package/dist/semantics/model/edges.js +20 -0
  423. package/dist/semantics/model/graph.d.ts +55 -0
  424. package/dist/semantics/model/graph.js +129 -0
  425. package/dist/semantics/model/operands.d.ts +159 -0
  426. package/dist/semantics/model/operands.js +26 -0
  427. package/dist/semantics/model/operations.d.ts +496 -0
  428. package/dist/semantics/model/operations.js +2 -0
  429. package/dist/semantics/model/primitive-domain.d.ts +26 -0
  430. package/dist/semantics/model/primitive-domain.js +38 -0
  431. package/dist/semantics/model/selected-signature.d.ts +261 -0
  432. package/dist/semantics/model/selected-signature.js +55 -0
  433. package/dist/semantics/model/structural-type-table.d.ts +93 -0
  434. package/dist/semantics/model/structural-type-table.js +237 -0
  435. package/dist/semantics/model/structural-types.d.ts +367 -0
  436. package/dist/semantics/model/structural-types.js +200 -0
  437. package/dist/semantics/module-resolution.d.ts +23 -0
  438. package/dist/semantics/module-resolution.js +227 -0
  439. package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
  440. package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
  441. package/dist/semantics/node-project.d.ts +13 -0
  442. package/dist/semantics/node-project.js +107 -0
  443. package/dist/semantics/node-source-hooks.d.ts +1 -0
  444. package/dist/semantics/node-source-hooks.js +63 -0
  445. package/dist/semantics/normalize/absent-globals.d.ts +143 -0
  446. package/dist/semantics/normalize/absent-globals.js +191 -0
  447. package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
  448. package/dist/semantics/normalize/arguments-objects.js +60 -0
  449. package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
  450. package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
  451. package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
  452. package/dist/semantics/normalize/assignment-patterns.js +147 -0
  453. package/dist/semantics/normalize/bag-absence.d.ts +8 -0
  454. package/dist/semantics/normalize/bag-absence.js +42 -0
  455. package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
  456. package/dist/semantics/normalize/binding-fixpoint.js +140 -0
  457. package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
  458. package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
  459. package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
  460. package/dist/semantics/normalize/cells/agreement.js +34 -0
  461. package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
  462. package/dist/semantics/normalize/cells/candidates.js +35 -0
  463. package/dist/semantics/normalize/cells/facts.d.ts +19 -0
  464. package/dist/semantics/normalize/cells/facts.js +90 -0
  465. package/dist/semantics/normalize/cells/index.d.ts +10 -0
  466. package/dist/semantics/normalize/cells/index.js +6 -0
  467. package/dist/semantics/normalize/cells/model.d.ts +98 -0
  468. package/dist/semantics/normalize/cells/model.js +2 -0
  469. package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
  470. package/dist/semantics/normalize/cells/policies/bag.js +114 -0
  471. package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
  472. package/dist/semantics/normalize/cells/policies/collection.js +218 -0
  473. package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
  474. package/dist/semantics/normalize/cells/policies/field.js +40 -0
  475. package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
  476. package/dist/semantics/normalize/cells/policies/index.js +58 -0
  477. package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
  478. package/dist/semantics/normalize/cells/policies/local.js +37 -0
  479. package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
  480. package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
  481. package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
  482. package/dist/semantics/normalize/cells/policies/return.js +45 -0
  483. package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
  484. package/dist/semantics/normalize/cells/policies/shared.js +45 -0
  485. package/dist/semantics/normalize/cells/policy.d.ts +72 -0
  486. package/dist/semantics/normalize/cells/policy.js +18 -0
  487. package/dist/semantics/normalize/cells/registry.d.ts +14 -0
  488. package/dist/semantics/normalize/cells/registry.js +17 -0
  489. package/dist/semantics/normalize/census-refusal.d.ts +62 -0
  490. package/dist/semantics/normalize/census-refusal.js +27 -0
  491. package/dist/semantics/normalize/census.d.ts +109 -0
  492. package/dist/semantics/normalize/census.js +667 -0
  493. package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
  494. package/dist/semantics/normalize/collection-bindings.js +677 -0
  495. package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
  496. package/dist/semantics/normalize/commonjs-module-record.js +289 -0
  497. package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
  498. package/dist/semantics/normalize/commonjs-require.js +1527 -0
  499. package/dist/semantics/normalize/contribution.d.ts +63 -0
  500. package/dist/semantics/normalize/contribution.js +172 -0
  501. package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
  502. package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
  503. package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
  504. package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
  505. package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
  506. package/dist/semantics/normalize/derived-expression-type.js +3463 -0
  507. package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
  508. package/dist/semantics/normalize/evaluation-order.js +37 -0
  509. package/dist/semantics/normalize/field-bindings.d.ts +167 -0
  510. package/dist/semantics/normalize/field-bindings.js +1125 -0
  511. package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
  512. package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
  513. package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
  514. package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
  515. package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
  516. package/dist/semantics/normalize/flow/callable-completions.js +82 -0
  517. package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
  518. package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
  519. package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
  520. package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
  521. package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
  522. package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
  523. package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
  524. package/dist/semantics/normalize/flow/component-solver.js +587 -0
  525. package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
  526. package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
  527. package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
  528. package/dist/semantics/normalize/flow/export-importers.js +269 -0
  529. package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
  530. package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
  531. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
  532. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
  533. package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
  534. package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
  535. package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
  536. package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
  537. package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
  538. package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
  539. package/dist/semantics/normalize/flow/model.d.ts +357 -0
  540. package/dist/semantics/normalize/flow/model.js +177 -0
  541. package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
  542. package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
  543. package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
  544. package/dist/semantics/normalize/flow/node-path-token.js +53 -0
  545. package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
  546. package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
  547. package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
  548. package/dist/semantics/normalize/flow/origin-authority.js +2 -0
  549. package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
  550. package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
  551. package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
  552. package/dist/semantics/normalize/flow/parameter-values.js +251 -0
  553. package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
  554. package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
  555. package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
  556. package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
  557. package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
  558. package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
  559. package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
  560. package/dist/semantics/normalize/flow/source-class-data.js +838 -0
  561. package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
  562. package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
  563. package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
  564. package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
  565. package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
  566. package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
  567. package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
  568. package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
  569. package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
  570. package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
  571. package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
  572. package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
  573. package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
  574. package/dist/semantics/normalize/flow/source-record-data.js +626 -0
  575. package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
  576. package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
  577. package/dist/semantics/normalize/flow/targets.d.ts +118 -0
  578. package/dist/semantics/normalize/flow/targets.js +405 -0
  579. package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
  580. package/dist/semantics/normalize/flow/value-flow.js +823 -0
  581. package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
  582. package/dist/semantics/normalize/flow/value-provenance.js +112 -0
  583. package/dist/semantics/normalize/gating.d.ts +51 -0
  584. package/dist/semantics/normalize/gating.js +560 -0
  585. package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
  586. package/dist/semantics/normalize/generic-function-choice.js +115 -0
  587. package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
  588. package/dist/semantics/normalize/global-host-mutations.js +5989 -0
  589. package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
  590. package/dist/semantics/normalize/host-effect-contracts.js +143 -0
  591. package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
  592. package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
  593. package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
  594. package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
  595. package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
  596. package/dist/semantics/normalize/host-mutation-keys.js +183 -0
  597. package/dist/semantics/normalize/identities.d.ts +172 -0
  598. package/dist/semantics/normalize/identities.js +426 -0
  599. package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
  600. package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
  601. package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
  602. package/dist/semantics/normalize/implicit-arguments.js +39 -0
  603. package/dist/semantics/normalize/instantiation.d.ts +73 -0
  604. package/dist/semantics/normalize/instantiation.js +399 -0
  605. package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
  606. package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
  607. package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
  608. package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
  609. package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
  610. package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
  611. package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
  612. package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
  613. package/dist/semantics/normalize/keyof.d.ts +32 -0
  614. package/dist/semantics/normalize/keyof.js +110 -0
  615. package/dist/semantics/normalize/local-bindings.d.ts +176 -0
  616. package/dist/semantics/normalize/local-bindings.js +1826 -0
  617. package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
  618. package/dist/semantics/normalize/logical-result-type.js +102 -0
  619. package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
  620. package/dist/semantics/normalize/namespace-paths.js +108 -0
  621. package/dist/semantics/normalize/normalize.d.ts +57 -0
  622. package/dist/semantics/normalize/normalize.js +68 -0
  623. package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
  624. package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
  625. package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
  626. package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
  627. package/dist/semantics/normalize/open-type-form.d.ts +10 -0
  628. package/dist/semantics/normalize/open-type-form.js +32 -0
  629. package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
  630. package/dist/semantics/normalize/parameter-bindings.js +3339 -0
  631. package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
  632. package/dist/semantics/normalize/parameter-slot.js +491 -0
  633. package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
  634. package/dist/semantics/normalize/physical-overload-result.js +99 -0
  635. package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
  636. package/dist/semantics/normalize/primitive-property-absence.js +60 -0
  637. package/dist/semantics/normalize/producer-context.d.ts +376 -0
  638. package/dist/semantics/normalize/producer-context.js +1 -0
  639. package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
  640. package/dist/semantics/normalize/producers/allocations.js +863 -0
  641. package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
  642. package/dist/semantics/normalize/producers/binding-kind.js +36 -0
  643. package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
  644. package/dist/semantics/normalize/producers/bindings.js +710 -0
  645. package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
  646. package/dist/semantics/normalize/producers/boundary.js +123 -0
  647. package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
  648. package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
  649. package/dist/semantics/normalize/producers/computations.d.ts +3 -0
  650. package/dist/semantics/normalize/producers/computations.js +613 -0
  651. package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
  652. package/dist/semantics/normalize/producers/control-loops.js +91 -0
  653. package/dist/semantics/normalize/producers/control.d.ts +30 -0
  654. package/dist/semantics/normalize/producers/control.js +923 -0
  655. package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
  656. package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
  657. package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
  658. package/dist/semantics/normalize/producers/destructuring.js +1180 -0
  659. package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
  660. package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
  661. package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
  662. package/dist/semantics/normalize/producers/erasure.js +90 -0
  663. package/dist/semantics/normalize/producers/installed.d.ts +3 -0
  664. package/dist/semantics/normalize/producers/installed.js +55 -0
  665. package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
  666. package/dist/semantics/normalize/producers/invocations.js +1796 -0
  667. package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
  668. package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
  669. package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
  670. package/dist/semantics/normalize/producers/jsx.js +360 -0
  671. package/dist/semantics/normalize/producers/mint.d.ts +39 -0
  672. package/dist/semantics/normalize/producers/mint.js +44 -0
  673. package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
  674. package/dist/semantics/normalize/producers/nullish.js +27 -0
  675. package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
  676. package/dist/semantics/normalize/producers/object-assignment.js +204 -0
  677. package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
  678. package/dist/semantics/normalize/producers/object-tag.js +119 -0
  679. package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
  680. package/dist/semantics/normalize/producers/optional-chain.js +75 -0
  681. package/dist/semantics/normalize/producers/properties.d.ts +21 -0
  682. package/dist/semantics/normalize/producers/properties.js +1053 -0
  683. package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
  684. package/dist/semantics/normalize/producers/protocol.js +695 -0
  685. package/dist/semantics/normalize/producers/references.d.ts +53 -0
  686. package/dist/semantics/normalize/producers/references.js +1027 -0
  687. package/dist/semantics/normalize/producers/shared.d.ts +561 -0
  688. package/dist/semantics/normalize/producers/shared.js +1683 -0
  689. package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
  690. package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
  691. package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
  692. package/dist/semantics/normalize/producers/tagged-template.js +307 -0
  693. package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
  694. package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
  695. package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
  696. package/dist/semantics/normalize/property-key-domain.js +150 -0
  697. package/dist/semantics/normalize/reachability.d.ts +189 -0
  698. package/dist/semantics/normalize/reachability.js +1057 -0
  699. package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
  700. package/dist/semantics/normalize/reassigned-bindings.js +41 -0
  701. package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
  702. package/dist/semantics/normalize/record-storage-families.js +109 -0
  703. package/dist/semantics/normalize/return-bindings.d.ts +260 -0
  704. package/dist/semantics/normalize/return-bindings.js +1311 -0
  705. package/dist/semantics/normalize/return-paths.d.ts +2 -0
  706. package/dist/semantics/normalize/return-paths.js +28 -0
  707. package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
  708. package/dist/semantics/normalize/script-global-redefinition.js +75 -0
  709. package/dist/semantics/normalize/specialization.d.ts +201 -0
  710. package/dist/semantics/normalize/specialization.js +1824 -0
  711. package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
  712. package/dist/semantics/normalize/structural-array-element.js +700 -0
  713. package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
  714. package/dist/semantics/normalize/structural-array-read.js +124 -0
  715. package/dist/semantics/normalize/structural-callable.d.ts +12 -0
  716. package/dist/semantics/normalize/structural-callable.js +82 -0
  717. package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
  718. package/dist/semantics/normalize/structural-creation-order.js +111 -0
  719. package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
  720. package/dist/semantics/normalize/structural-declarations.js +968 -0
  721. package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
  722. package/dist/semantics/normalize/structural-declared-body.js +147 -0
  723. package/dist/semantics/normalize/structural-generics.d.ts +56 -0
  724. package/dist/semantics/normalize/structural-generics.js +120 -0
  725. package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
  726. package/dist/semantics/normalize/structural-indexed-access.js +126 -0
  727. package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
  728. package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
  729. package/dist/semantics/normalize/structural-joins.d.ts +44 -0
  730. package/dist/semantics/normalize/structural-joins.js +143 -0
  731. package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
  732. package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
  733. package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
  734. package/dist/semantics/normalize/structural-layout-type.js +1468 -0
  735. package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
  736. package/dist/semantics/normalize/structural-leaves.js +125 -0
  737. package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
  738. package/dist/semantics/normalize/structural-local-union.js +133 -0
  739. package/dist/semantics/normalize/structural-members.d.ts +26 -0
  740. package/dist/semantics/normalize/structural-members.js +84 -0
  741. package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
  742. package/dist/semantics/normalize/structural-mutable-method.js +109 -0
  743. package/dist/semantics/normalize/structural-parts.d.ts +131 -0
  744. package/dist/semantics/normalize/structural-parts.js +737 -0
  745. package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
  746. package/dist/semantics/normalize/structural-receiver.js +551 -0
  747. package/dist/semantics/normalize/structural-rules.d.ts +112 -0
  748. package/dist/semantics/normalize/structural-rules.js +93 -0
  749. package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
  750. package/dist/semantics/normalize/structural-self-reference.js +494 -0
  751. package/dist/semantics/normalize/structural.d.ts +202 -0
  752. package/dist/semantics/normalize/structural.js +4218 -0
  753. package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
  754. package/dist/semantics/normalize/unreduced-type-form.js +53 -0
  755. package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
  756. package/dist/semantics/normalize/unresolvable-names.js +140 -0
  757. package/dist/semantics/package-sources.d.ts +16 -0
  758. package/dist/semantics/package-sources.js +365 -0
  759. package/dist/semantics/program.d.ts +151 -0
  760. package/dist/semantics/program.js +667 -0
  761. package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
  762. package/dist/semantics/prototype-install-source-transform.js +341 -0
  763. package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
  764. package/dist/semantics/prototype-object-class-source-transform.js +525 -0
  765. package/dist/semantics/prototype-reparenting.d.ts +50 -0
  766. package/dist/semantics/prototype-reparenting.js +317 -0
  767. package/dist/semantics/stable-checker.d.ts +10 -0
  768. package/dist/semantics/stable-checker.js +148 -0
  769. package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
  770. package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
  771. package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
  772. package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
  773. package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
  774. package/dist/semantics/this-constructor-source-transform.js +122 -0
  775. package/dist/semantics/uninstantiable-classes.d.ts +22 -0
  776. package/dist/semantics/uninstantiable-classes.js +75 -0
  777. package/dist/targets/cpp/balanced-units.d.ts +3 -0
  778. package/dist/targets/cpp/balanced-units.js +58 -0
  779. package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
  780. package/dist/targets/cpp/borrowed-call-entry.js +68 -0
  781. package/dist/targets/cpp/captures.d.ts +68 -0
  782. package/dist/targets/cpp/captures.js +269 -0
  783. package/dist/targets/cpp/class-layout.d.ts +313 -0
  784. package/dist/targets/cpp/class-layout.js +483 -0
  785. package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
  786. package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
  787. package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
  788. package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
  789. package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
  790. package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
  791. package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
  792. package/dist/targets/cpp/class-ref-transport.js +32 -0
  793. package/dist/targets/cpp/conversions.d.ts +3 -0
  794. package/dist/targets/cpp/conversions.js +2027 -0
  795. package/dist/targets/cpp/deferral-safety.d.ts +82 -0
  796. package/dist/targets/cpp/deferral-safety.js +86 -0
  797. package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
  798. package/dist/targets/cpp/direct-call-receivers.js +79 -0
  799. package/dist/targets/cpp/document.d.ts +74 -0
  800. package/dist/targets/cpp/document.js +106 -0
  801. package/dist/targets/cpp/emit-allocation.d.ts +60 -0
  802. package/dist/targets/cpp/emit-allocation.js +573 -0
  803. package/dist/targets/cpp/emit-arrays.d.ts +119 -0
  804. package/dist/targets/cpp/emit-arrays.js +1047 -0
  805. package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
  806. package/dist/targets/cpp/emit-binding-reference.js +120 -0
  807. package/dist/targets/cpp/emit-bindings.d.ts +158 -0
  808. package/dist/targets/cpp/emit-bindings.js +769 -0
  809. package/dist/targets/cpp/emit-buffers.d.ts +156 -0
  810. package/dist/targets/cpp/emit-buffers.js +573 -0
  811. package/dist/targets/cpp/emit-callable.d.ts +230 -0
  812. package/dist/targets/cpp/emit-callable.js +2154 -0
  813. package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
  814. package/dist/targets/cpp/emit-carrier-members.js +1224 -0
  815. package/dist/targets/cpp/emit-coercion.d.ts +26 -0
  816. package/dist/targets/cpp/emit-coercion.js +39 -0
  817. package/dist/targets/cpp/emit-context.d.ts +1882 -0
  818. package/dist/targets/cpp/emit-context.js +904 -0
  819. package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
  820. package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
  821. package/dist/targets/cpp/emit-equality.d.ts +39 -0
  822. package/dist/targets/cpp/emit-equality.js +472 -0
  823. package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
  824. package/dist/targets/cpp/emit-exceptions.js +513 -0
  825. package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
  826. package/dist/targets/cpp/emit-field-owner.js +27 -0
  827. package/dist/targets/cpp/emit-in.d.ts +31 -0
  828. package/dist/targets/cpp/emit-in.js +426 -0
  829. package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
  830. package/dist/targets/cpp/emit-instanceof.js +601 -0
  831. package/dist/targets/cpp/emit-integers.d.ts +68 -0
  832. package/dist/targets/cpp/emit-integers.js +184 -0
  833. package/dist/targets/cpp/emit-iterator.d.ts +100 -0
  834. package/dist/targets/cpp/emit-iterator.js +1137 -0
  835. package/dist/targets/cpp/emit-json.d.ts +73 -0
  836. package/dist/targets/cpp/emit-json.js +823 -0
  837. package/dist/targets/cpp/emit-jsx.d.ts +74 -0
  838. package/dist/targets/cpp/emit-jsx.js +806 -0
  839. package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
  840. package/dist/targets/cpp/emit-mixed-binary.js +60 -0
  841. package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
  842. package/dist/targets/cpp/emit-namespaces.js +133 -0
  843. package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
  844. package/dist/targets/cpp/emit-narrowing.js +3967 -0
  845. package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
  846. package/dist/targets/cpp/emit-native-equality.js +14 -0
  847. package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
  848. package/dist/targets/cpp/emit-native-selection.js +37 -0
  849. package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
  850. package/dist/targets/cpp/emit-object-tag.js +108 -0
  851. package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
  852. package/dist/targets/cpp/emit-owned-record.js +15 -0
  853. package/dist/targets/cpp/emit-presence.d.ts +78 -0
  854. package/dist/targets/cpp/emit-presence.js +376 -0
  855. package/dist/targets/cpp/emit-properties.d.ts +105 -0
  856. package/dist/targets/cpp/emit-properties.js +1640 -0
  857. package/dist/targets/cpp/emit-record-view.d.ts +20 -0
  858. package/dist/targets/cpp/emit-record-view.js +354 -0
  859. package/dist/targets/cpp/emit-return.d.ts +5 -0
  860. package/dist/targets/cpp/emit-return.js +237 -0
  861. package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
  862. package/dist/targets/cpp/emit-sum-widening.js +69 -0
  863. package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
  864. package/dist/targets/cpp/emit-tonumber.js +177 -0
  865. package/dist/targets/cpp/emit-tostring.d.ts +92 -0
  866. package/dist/targets/cpp/emit-tostring.js +556 -0
  867. package/dist/targets/cpp/emit-typeof.d.ts +49 -0
  868. package/dist/targets/cpp/emit-typeof.js +317 -0
  869. package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
  870. package/dist/targets/cpp/emit-union-properties.js +1281 -0
  871. package/dist/targets/cpp/emit.d.ts +45 -0
  872. package/dist/targets/cpp/emit.js +2225 -0
  873. package/dist/targets/cpp/error-types.d.ts +4 -0
  874. package/dist/targets/cpp/error-types.js +11 -0
  875. package/dist/targets/cpp/function-source-reads.d.ts +72 -0
  876. package/dist/targets/cpp/function-source-reads.js +148 -0
  877. package/dist/targets/cpp/host/atomics.d.ts +25 -0
  878. package/dist/targets/cpp/host/atomics.js +63 -0
  879. package/dist/targets/cpp/host/core-globals.d.ts +108 -0
  880. package/dist/targets/cpp/host/core-globals.js +158 -0
  881. package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
  882. package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
  883. package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
  884. package/dist/targets/cpp/host/emit-host-arity.js +232 -0
  885. package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
  886. package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
  887. package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
  888. package/dist/targets/cpp/host/emit-host-object.js +2206 -0
  889. package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
  890. package/dist/targets/cpp/host/emit-host-properties.js +533 -0
  891. package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
  892. package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
  893. package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
  894. package/dist/targets/cpp/host/emit-host-value.js +392 -0
  895. package/dist/targets/cpp/host/host-members.d.ts +505 -0
  896. package/dist/targets/cpp/host/host-members.js +819 -0
  897. package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
  898. package/dist/targets/cpp/host/host-method-aliases.js +76 -0
  899. package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
  900. package/dist/targets/cpp/host/native-protocols.js +183 -0
  901. package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
  902. package/dist/targets/cpp/host/object-protocol.js +671 -0
  903. package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
  904. package/dist/targets/cpp/host-namespace-reads.js +113 -0
  905. package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
  906. package/dist/targets/cpp/manifest/capabilities.js +1484 -0
  907. package/dist/targets/cpp/manifest.d.ts +23 -0
  908. package/dist/targets/cpp/manifest.js +113 -0
  909. package/dist/targets/cpp/native-error-base.d.ts +38 -0
  910. package/dist/targets/cpp/native-error-base.js +74 -0
  911. package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
  912. package/dist/targets/cpp/native-narrowing-transport.js +151 -0
  913. package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
  914. package/dist/targets/cpp/native-selection-helpers.js +46 -0
  915. package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
  916. package/dist/targets/cpp/native-symbol-keys.js +34 -0
  917. package/dist/targets/cpp/ownership.d.ts +43 -0
  918. package/dist/targets/cpp/ownership.js +38 -0
  919. package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
  920. package/dist/targets/cpp/owning-conversion-input.js +12 -0
  921. package/dist/targets/cpp/property-read-claims.d.ts +62 -0
  922. package/dist/targets/cpp/property-read-claims.js +23 -0
  923. package/dist/targets/cpp/property-store-claims.d.ts +62 -0
  924. package/dist/targets/cpp/property-store-claims.js +26 -0
  925. package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
  926. package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
  927. package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
  928. package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
  929. package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
  930. package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
  931. package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
  932. package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
  933. package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
  934. package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
  935. package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
  936. package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
  937. package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
  938. package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
  939. package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
  940. package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
  941. package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
  942. package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
  943. package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
  944. package/dist/targets/cpp/reactive-dependencies.js +432 -0
  945. package/dist/targets/cpp/reactive-origins.d.ts +44 -0
  946. package/dist/targets/cpp/reactive-origins.js +82 -0
  947. package/dist/targets/cpp/records.d.ts +277 -0
  948. package/dist/targets/cpp/records.js +2427 -0
  949. package/dist/targets/cpp/recursive-containers.d.ts +43 -0
  950. package/dist/targets/cpp/recursive-containers.js +144 -0
  951. package/dist/targets/cpp/regexp-types.d.ts +56 -0
  952. package/dist/targets/cpp/regexp-types.js +59 -0
  953. package/dist/targets/cpp/substrate.d.ts +125 -0
  954. package/dist/targets/cpp/substrate.js +12 -0
  955. package/dist/targets/cpp/translation-unit.d.ts +219 -0
  956. package/dist/targets/cpp/translation-unit.js +2063 -0
  957. package/dist/targets/cpp/types.d.ts +280 -0
  958. package/dist/targets/cpp/types.js +1135 -0
  959. package/dist/targets/cpp/virtual-methods.d.ts +95 -0
  960. package/dist/targets/cpp/virtual-methods.js +264 -0
  961. package/package.json +95 -0
  962. package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
  963. package/src/targets/cpp/runtime/gea_eval.h +1376 -0
  964. package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
  965. package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
  966. package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
@@ -0,0 +1,24 @@
1
+ import ts from 'typescript';
2
+ import type { ValueFlowIndex } from './model.js';
3
+ /**
4
+ * Every in-program mention of the import bindings that name this export -- an
5
+ * importer's local identifier, or `ns.name` for a namespace import whose
6
+ * every use selects a member -- or null when any path could expose the
7
+ * binding to code outside the compiled program.
8
+ *
9
+ * Null (open) when: the module set is unstated; the declaring file is not an
10
+ * ES module of the set, is CommonJS, or is an entry; some dynamic module
11
+ * reference is non-literal; the module (or any module re-exporting the
12
+ * binding) is reached by `import()`/`require`/`import = require`, is an
13
+ * entry, or matches an unresolved specifier; a namespace import of such a
14
+ * module is used other than by static member selection; `export * as ns`
15
+ * re-exports it; or `export =` publishes the import.
16
+ *
17
+ * Followed (closed): named and default imports, local `export { x }` /
18
+ * `export default x` of an import, and `export { x } from` / `export * from`
19
+ * re-exports -- each re-exporting module is itself subjected to the same
20
+ * proof. References inside the declaring module are NOT included; the caller
21
+ * has them from value flow. Type-only mentions are omitted. An export no
22
+ * module imports answers `[]`.
23
+ */
24
+ export declare const inProgramImportReferencesOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, specifierOrDeclaration: ts.ExportSpecifier | ts.Declaration) => readonly ts.Expression[] | null;
@@ -0,0 +1,269 @@
1
+ import ts from 'typescript';
2
+ import { isTypePositionReference, resolveFlowSymbolAlias, statedModuleSetOf } from './targets.js';
3
+ import { nodeIsReachable } from '../reachability.js';
4
+ const graphs = new WeakMap();
5
+ const lastSegment = (path) => path.replace(/^.*[\\/]/, '').replace(/\.[^.]*$/, '');
6
+ const DYNAMIC_MODULE_REFERENCE = /\bimport\s*\(|\brequire\s*\(/;
7
+ const importGraphOf = (checker, modules) => {
8
+ const known = graphs.get(modules);
9
+ if (known)
10
+ return known;
11
+ const edges = new Map();
12
+ const dynamic = new Set();
13
+ const unresolved = new Set();
14
+ let opaque = false;
15
+ const moduleAt = (specifier) => {
16
+ if (!specifier || !ts.isStringLiteralLike(specifier)) {
17
+ opaque = true;
18
+ return null;
19
+ }
20
+ const module = checker.getSymbolAtLocation(specifier);
21
+ if (!module)
22
+ unresolved.add(lastSegment(specifier.text));
23
+ return module ?? null;
24
+ };
25
+ const dynamicAt = (specifier) => {
26
+ const module = moduleAt(specifier);
27
+ if (module)
28
+ dynamic.add(module);
29
+ };
30
+ const scan = (node) => {
31
+ if (ts.isCallExpression(node) &&
32
+ (node.expression.kind === ts.SyntaxKind.ImportKeyword || (ts.isIdentifier(node.expression) && node.expression.text === 'require')))
33
+ dynamicAt(node.arguments[0]);
34
+ ts.forEachChild(node, scan);
35
+ };
36
+ for (const file of modules.files) {
37
+ if (file.isDeclarationFile)
38
+ continue;
39
+ for (const statement of file.statements) {
40
+ if (ts.isImportDeclaration(statement) || (ts.isExportDeclaration(statement) && statement.moduleSpecifier)) {
41
+ const typeOnly = ts.isImportDeclaration(statement) ? statement.importClause?.isTypeOnly === true : statement.isTypeOnly;
42
+ const module = moduleAt(statement.moduleSpecifier);
43
+ if (!module || typeOnly)
44
+ continue;
45
+ const list = edges.get(module) ?? [];
46
+ list.push({ file, declaration: statement });
47
+ edges.set(module, list);
48
+ }
49
+ else if (ts.isImportEqualsDeclaration(statement) && ts.isExternalModuleReference(statement.moduleReference)) {
50
+ dynamicAt(statement.moduleReference.expression);
51
+ }
52
+ }
53
+ if (DYNAMIC_MODULE_REFERENCE.test(file.text))
54
+ ts.forEachChild(file, scan);
55
+ }
56
+ const graph = {
57
+ opaque,
58
+ unresolved,
59
+ dynamic,
60
+ edges,
61
+ files: new Set(modules.files),
62
+ entries: new Set(modules.entries),
63
+ mentions: new Map()
64
+ };
65
+ graphs.set(modules, graph);
66
+ return graph;
67
+ };
68
+ /** Every identifier in `file` the checker resolves to `symbol`. */
69
+ const mentionsOf = (checker, graph, file, symbol) => {
70
+ let index = graph.mentions.get(file);
71
+ if (!index) {
72
+ const built = new Map();
73
+ const visit = (node) => {
74
+ if (ts.isIdentifier(node)) {
75
+ const resolved = ts.isShorthandPropertyAssignment(node.parent) && node.parent.name === node
76
+ ? checker.getShorthandAssignmentValueSymbol(node.parent)
77
+ : checker.getSymbolAtLocation(node);
78
+ if (resolved) {
79
+ const list = built.get(resolved) ?? [];
80
+ list.push(node);
81
+ built.set(resolved, list);
82
+ }
83
+ }
84
+ ts.forEachChild(node, visit);
85
+ };
86
+ ts.forEachChild(file, visit);
87
+ graph.mentions.set(file, (index = built));
88
+ }
89
+ return index.get(symbol) ?? [];
90
+ };
91
+ /** A mention that constructs, calls or reads nothing. */
92
+ const typeOnlyMention = (reference) => isTypePositionReference(reference) || ts.isTypeQueryNode(reference.parent) || ts.isImportTypeNode(reference.parent);
93
+ const exportedSymbolOf = (checker, specifierOrDeclaration) => {
94
+ if (ts.isExportSpecifier(specifierOrDeclaration))
95
+ return checker.getExportSpecifierLocalTargetSymbol(specifierOrDeclaration);
96
+ const name = ts.getNameOfDeclaration(specifierOrDeclaration);
97
+ return name ? checker.getSymbolAtLocation(name) : undefined;
98
+ };
99
+ /**
100
+ * Every in-program mention of the import bindings that name this export -- an
101
+ * importer's local identifier, or `ns.name` for a namespace import whose
102
+ * every use selects a member -- or null when any path could expose the
103
+ * binding to code outside the compiled program.
104
+ *
105
+ * Null (open) when: the module set is unstated; the declaring file is not an
106
+ * ES module of the set, is CommonJS, or is an entry; some dynamic module
107
+ * reference is non-literal; the module (or any module re-exporting the
108
+ * binding) is reached by `import()`/`require`/`import = require`, is an
109
+ * entry, or matches an unresolved specifier; a namespace import of such a
110
+ * module is used other than by static member selection; `export * as ns`
111
+ * re-exports it; or `export =` publishes the import.
112
+ *
113
+ * Followed (closed): named and default imports, local `export { x }` /
114
+ * `export default x` of an import, and `export { x } from` / `export * from`
115
+ * re-exports -- each re-exporting module is itself subjected to the same
116
+ * proof. References inside the declaring module are NOT included; the caller
117
+ * has them from value flow. Type-only mentions are omitted. An export no
118
+ * module imports answers `[]`.
119
+ */
120
+ export const inProgramImportReferencesOf = (checker, flow, specifierOrDeclaration) => {
121
+ const modules = statedModuleSetOf(flow);
122
+ const watched = process.env['GEA_IMPORTERS_DEBUG'];
123
+ const refuse = (reason, at) => {
124
+ if (watched !== undefined) {
125
+ const site = at ?? specifierOrDeclaration;
126
+ const source = site.getSourceFile();
127
+ const line = source.getLineAndCharacterOfPosition(site.getStart()).line + 1;
128
+ console.error(`[IMPORTERS] ${reason} ${source.fileName}:${line} ${site.getText().replace(/\s+/g, ' ').slice(0, 60)}`);
129
+ }
130
+ return null;
131
+ };
132
+ if (!modules)
133
+ return refuse('no-stated-module-set');
134
+ const file = specifierOrDeclaration.getSourceFile();
135
+ if (file.isDeclarationFile || !ts.isExternalModule(file) || file.commonJsModuleIndicator)
136
+ return refuse('not-an-es-module');
137
+ const graph = importGraphOf(checker, modules);
138
+ if (graph.opaque)
139
+ return refuse('import-graph-opaque');
140
+ const target = resolveFlowSymbolAlias(checker, exportedSymbolOf(checker, specifierOrDeclaration));
141
+ const module = checker.getSymbolAtLocation(file);
142
+ if (!target || (target.flags & ts.SymbolFlags.Alias) !== 0 || !module)
143
+ return refuse('export-target-unresolved');
144
+ const references = [];
145
+ const visited = new Set();
146
+ const resolvesToTarget = (symbol) => resolveFlowSymbolAlias(checker, symbol) === target;
147
+ // A mention in code the program never runs reads nothing and hands nothing
148
+ // on. `files` is every module the checker loaded, which is more than the
149
+ // program evaluates: three's `ColorSpaceNode.js` imports `ColorManagement`
150
+ // and passes it a fresh `Matrix3`, and counting that dead call left every
151
+ // `ColorManagement` method's parameters open -- boxed, and dispatched
152
+ // dynamically on the three.js app's first frame.
153
+ const reachable = modules.reachable;
154
+ const runs = (reference) => reachable === undefined || nodeIsReachable(reachable, reference);
155
+ /** Whether every module that can read `name` off `source` is enumerated. */
156
+ const exportedAs = (source, name) => {
157
+ const key = `${source.fileName}\0${name}`;
158
+ if (visited.has(key))
159
+ return true;
160
+ visited.add(key);
161
+ const sourceModule = checker.getSymbolAtLocation(source);
162
+ if (!sourceModule || !graph.files.has(source) || graph.entries.has(source) || graph.dynamic.has(sourceModule)) {
163
+ refuse(`module-${!sourceModule ? 'unnamed' : !graph.files.has(source) ? 'outside-graph' : graph.entries.has(source) ? 'is-entry' : 'dynamic'}`, source);
164
+ return false;
165
+ }
166
+ const segment = lastSegment(source.fileName);
167
+ if (graph.unresolved.has(segment)) {
168
+ refuse(`unresolved-specifier:${segment}`, source);
169
+ return false;
170
+ }
171
+ if (segment === 'index' && graph.unresolved.has(lastSegment(source.fileName.replace(/[\\/][^\\/]*$/, '')))) {
172
+ refuse('unresolved-index-directory', source);
173
+ return false;
174
+ }
175
+ for (const { file: importer, declaration } of graph.edges.get(sourceModule) ?? []) {
176
+ if (ts.isImportDeclaration(declaration)) {
177
+ const clause = declaration.importClause;
178
+ if (!clause)
179
+ continue;
180
+ if (clause.name && name === 'default' && !bindingUses(importer, clause.name))
181
+ return refuse('default-binding-open', clause) === null && false;
182
+ const bindings = clause.namedBindings;
183
+ if (bindings && ts.isNamespaceImport(bindings)) {
184
+ if (!namespaceUses(importer, bindings.name, name))
185
+ return refuse('namespace-import-open', bindings) === null && false;
186
+ }
187
+ else if (bindings) {
188
+ for (const element of bindings.elements)
189
+ if (!element.isTypeOnly && (element.propertyName ?? element.name).text === name && !bindingUses(importer, element.name))
190
+ return false;
191
+ }
192
+ continue;
193
+ }
194
+ const clause = declaration.exportClause;
195
+ if (clause && ts.isNamespaceExport(clause))
196
+ return refuse('namespace-re-export', clause) === null && false;
197
+ if (!clause) {
198
+ // `export * from` never forwards `default`, and a local export of the
199
+ // same name shadows the star.
200
+ if (name === 'default')
201
+ continue;
202
+ const forwarding = checker.getSymbolAtLocation(importer);
203
+ const forwarded = forwarding && checker.getExportsOfModule(forwarding).find((symbol) => symbol.name === name);
204
+ if (forwarded && resolvesToTarget(forwarded) && !exportedAs(importer, name))
205
+ return false;
206
+ continue;
207
+ }
208
+ for (const element of clause.elements)
209
+ if (!element.isTypeOnly && (element.propertyName ?? element.name).text === name && !exportedAs(importer, element.name.text))
210
+ return false;
211
+ }
212
+ return true;
213
+ };
214
+ /** A local import binding: its uses are references, its re-exports recurse. */
215
+ const bindingUses = (importer, binding) => {
216
+ const alias = checker.getSymbolAtLocation(binding);
217
+ if (!alias)
218
+ return false;
219
+ for (const statement of importer.statements) {
220
+ if (!ts.isExportDeclaration(statement) || statement.moduleSpecifier || statement.isTypeOnly)
221
+ continue;
222
+ const clause = statement.exportClause;
223
+ if (!clause || !ts.isNamedExports(clause))
224
+ continue;
225
+ for (const element of clause.elements)
226
+ if (!element.isTypeOnly &&
227
+ checker.getExportSpecifierLocalTargetSymbol(element) === alias &&
228
+ !exportedAs(importer, element.name.text))
229
+ return false;
230
+ }
231
+ for (const reference of mentionsOf(checker, graph, importer, alias)) {
232
+ if (reference === binding || typeOnlyMention(reference) || ts.isExportSpecifier(reference.parent) || !runs(reference))
233
+ continue;
234
+ const parent = reference.parent;
235
+ if (ts.isExportAssignment(parent)) {
236
+ if (parent.isExportEquals || !exportedAs(importer, 'default'))
237
+ return false;
238
+ continue;
239
+ }
240
+ references.push(reference);
241
+ }
242
+ return true;
243
+ };
244
+ /** A namespace import is closed only while every use selects a member statically. */
245
+ const namespaceUses = (importer, binding, name) => {
246
+ const alias = checker.getSymbolAtLocation(binding);
247
+ if (!alias)
248
+ return false;
249
+ for (const reference of mentionsOf(checker, graph, importer, alias)) {
250
+ if (reference === binding || typeOnlyMention(reference) || !runs(reference))
251
+ continue;
252
+ const parent = reference.parent;
253
+ const selected = ts.isPropertyAccessExpression(parent)
254
+ ? parent.name.text
255
+ : ts.isElementAccessExpression(parent) && ts.isStringLiteralLike(parent.argumentExpression)
256
+ ? parent.argumentExpression.text
257
+ : null;
258
+ if (selected === null || parent.expression !== reference)
259
+ return false;
260
+ if (selected === name)
261
+ references.push(parent);
262
+ }
263
+ return true;
264
+ };
265
+ for (const exported of checker.getExportsOfModule(module))
266
+ if (resolvesToTarget(exported) && !exportedAs(file, exported.name))
267
+ return null;
268
+ return references;
269
+ };
@@ -0,0 +1,25 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Whether stringifying a value of this type can execute code this program
4
+ * wrote. Only the intrinsic hooks matter: a data member is read by the
5
+ * emitter's own rendering, never by a source body.
6
+ */
7
+ /** Whether every coercion hook this type answers is the host's own. */
8
+ export declare const coercionHooksAreHost: (checker: ts.TypeChecker, type: ts.Type) => boolean;
9
+ export declare const coercesWithoutSourceCode: (checker: ts.TypeChecker, type: ts.Type) => boolean;
10
+ /**
11
+ * Whether `reference` is an argument of a `console.log`/`console.error` call on
12
+ * the host's own `console`, and is therefore CONSUMED AS TEXT rather than
13
+ * published.
14
+ *
15
+ * `host-members.ts` claims exactly these two members and lowers them to
16
+ * `gea::host::console::log/error(<text>)`, with `emit-tostring.ts`'s
17
+ * `consoleArgumentsText` rendering every operand at the call site. The host
18
+ * never receives the object, only characters -- so an argument is not a
19
+ * publication of the value, provided the rendering itself runs no source code.
20
+ * Three's `Object3D.add` reports `object` to the console on its
21
+ * added-to-itself guard, and that one argument was the terminal of 35 escapes.
22
+ *
23
+ * `null` means the site is not a text sink and the caller's other rules apply.
24
+ */
25
+ export declare const hostTextSinkArgumentOf: (checker: ts.TypeChecker, reference: ts.Expression) => boolean | null;
@@ -0,0 +1,87 @@
1
+ import ts from 'typescript';
2
+ import { unwrapErasedExpression } from '../producers/erasure.js';
3
+ const TEXT_SINK_MEMBERS = new Set(['log', 'error']);
4
+ /** The three hooks a ToString/ToPrimitive conversion can reach. */
5
+ const coercionHook = (name) => name === 'toString' || name === 'valueOf' || name.startsWith('__@toPrimitive');
6
+ const declaredByHost = (symbol) => (symbol.declarations?.length ?? 0) > 0 && symbol.declarations.every((declaration) => declaration.getSourceFile().hasNoDefaultLib);
7
+ /**
8
+ * Whether stringifying a value of this type can execute code this program
9
+ * wrote. Only the intrinsic hooks matter: a data member is read by the
10
+ * emitter's own rendering, never by a source body.
11
+ */
12
+ /** Whether every coercion hook this type answers is the host's own. */
13
+ export const coercionHooksAreHost = (checker, type) => checker
14
+ .getPropertiesOfType(checker.getApparentType(type))
15
+ .every((property) => !coercionHook(property.escapedName) || declaredByHost(property));
16
+ export const coercesWithoutSourceCode = (checker, type) => {
17
+ if (type.isUnion() || type.isIntersection())
18
+ return type.types.every((arm) => coercesWithoutSourceCode(checker, arm));
19
+ if ((type.flags & ts.TypeFlags.Any) !== 0 || (type.flags & ts.TypeFlags.Unknown) !== 0)
20
+ return false;
21
+ if ((type.flags & ts.TypeFlags.Object) === 0)
22
+ return true;
23
+ // An array is rendered by joining its elements, which reaches each element's
24
+ // own hooks. Following that is the element proof's job, not this one's.
25
+ if (checker.isArrayLikeType(type))
26
+ return false;
27
+ return coercionHooksAreHost(checker, type);
28
+ };
29
+ /**
30
+ * Whether `reference` is an argument of a `console.log`/`console.error` call on
31
+ * the host's own `console`, and is therefore CONSUMED AS TEXT rather than
32
+ * published.
33
+ *
34
+ * `host-members.ts` claims exactly these two members and lowers them to
35
+ * `gea::host::console::log/error(<text>)`, with `emit-tostring.ts`'s
36
+ * `consoleArgumentsText` rendering every operand at the call site. The host
37
+ * never receives the object, only characters -- so an argument is not a
38
+ * publication of the value, provided the rendering itself runs no source code.
39
+ * Three's `Object3D.add` reports `object` to the console on its
40
+ * added-to-itself guard, and that one argument was the terminal of 35 escapes.
41
+ *
42
+ * `null` means the site is not a text sink and the caller's other rules apply.
43
+ */
44
+ export const hostTextSinkArgumentOf = (checker, reference) => {
45
+ // A spread argument is not one value the sink might keep: it is however many
46
+ // the array holds, each rendered on its own. `console.error( message,
47
+ // ...params )` is the shape three's logging shim ends in.
48
+ const spread = ts.isSpreadElement(reference.parent) && reference.parent.expression === reference ? reference.parent : null;
49
+ const call = spread?.parent ?? reference.parent;
50
+ if (!ts.isCallExpression(call) || !call.arguments.includes(spread ?? reference))
51
+ return null;
52
+ if (spread === null && call.arguments.some(ts.isSpreadElement))
53
+ return null;
54
+ const callee = unwrapErasedExpression(call.expression);
55
+ // `String(value)` is ToString spelled as a call. It is the same consumption:
56
+ // characters come out, the value stays where it was. Source transforms emit
57
+ // it wherever a concatenation's operand has to be converted explicitly.
58
+ if (spread === null && ts.isIdentifier(callee) && callee.text === 'String' && call.arguments.length === 1) {
59
+ const intrinsic = checker.getSymbolAtLocation(callee);
60
+ if (!intrinsic || intrinsic.name !== 'String' || !declaredByHost(intrinsic))
61
+ return null;
62
+ return coercesWithoutSourceCode(checker, checker.getTypeAtLocation(reference));
63
+ }
64
+ if (!ts.isPropertyAccessExpression(callee) && !ts.isElementAccessExpression(callee))
65
+ return null;
66
+ const member = ts.isPropertyAccessExpression(callee)
67
+ ? callee.name.text
68
+ : ts.isStringLiteralLike(callee.argumentExpression)
69
+ ? callee.argumentExpression.text
70
+ : null;
71
+ if (member === null || !TEXT_SINK_MEMBERS.has(member))
72
+ return null;
73
+ const receiver = unwrapErasedExpression(callee.expression);
74
+ if (!ts.isIdentifier(receiver) || receiver.text !== 'console')
75
+ return null;
76
+ const console = checker.getSymbolAtLocation(receiver);
77
+ if (!console || console.name !== 'console' || !declaredByHost(console))
78
+ return null;
79
+ const method = checker.getPropertyOfType(checker.getTypeAtLocation(receiver), member);
80
+ if (!method || !declaredByHost(method))
81
+ return null;
82
+ const rendered = checker.getTypeAtLocation(reference);
83
+ if (spread === null)
84
+ return coercesWithoutSourceCode(checker, rendered);
85
+ const element = checker.getIndexTypeOfType(rendered, ts.IndexKind.Number);
86
+ return element !== undefined && coercesWithoutSourceCode(checker, element);
87
+ };
@@ -0,0 +1,84 @@
1
+ import ts from 'typescript';
2
+ import type { FlowCallSite, ValueFlowIndex } from './model.js';
3
+ import type { IntrinsicProtocolRequirement } from '../deferred-intrinsic-protocols.js';
4
+ export type IntrinsicArrayCallbackMethod = 'forEach' | 'map' | 'filter' | 'some' | 'every' | 'find' | 'findIndex' | 'findLast' | 'findLastIndex' | 'flatMap' | 'sort' | 'toSorted' | 'reduce' | 'reduceRight';
5
+ export type IntrinsicArrayCallbackRole = 'element' | 'index' | 'array' | 'sort-left' | 'sort-right' | 'reduce-accumulator' | 'reduce-current';
6
+ export type IntrinsicArrayCallbackValueSource = {
7
+ readonly kind: 'array-elements';
8
+ readonly receiver: ts.Expression;
9
+ readonly excludesSeedElement?: 'first' | 'last';
10
+ } | {
11
+ readonly kind: 'array-index';
12
+ } | {
13
+ readonly kind: 'receiver';
14
+ readonly receiver: ts.Expression;
15
+ } | {
16
+ readonly kind: 'reduce-accumulator';
17
+ readonly receiver: ts.Expression;
18
+ readonly initialValue: ts.Expression | null;
19
+ readonly seedElement: 'first' | 'last' | null;
20
+ /** Later callback invocations can receive the prior callback result. */
21
+ readonly feedback: 'callback-completion';
22
+ };
23
+ export interface IntrinsicArrayCallbackArgument {
24
+ /** Runtime callback argument position; callback `this` is described separately. */
25
+ readonly position: number;
26
+ readonly role: IntrinsicArrayCallbackRole;
27
+ readonly source: IntrinsicArrayCallbackValueSource;
28
+ }
29
+ export interface IntrinsicArrayCallbackFrame {
30
+ readonly call: ts.CallExpression;
31
+ readonly method: IntrinsicArrayCallbackMethod;
32
+ readonly receiver: ts.Expression;
33
+ readonly memberKey: string;
34
+ /** The expression occupying the intrinsic callback operand. The graph resolves its callable values. */
35
+ readonly callback: ts.Expression;
36
+ readonly callbackOperandPosition: number;
37
+ readonly arguments: readonly IntrinsicArrayCallbackArgument[];
38
+ readonly initialValue: ts.Expression | null;
39
+ readonly thisBinding: {
40
+ readonly kind: 'callback-thisArg';
41
+ /** null means the intrinsic supplies undefined; target strictness governs JS this conversion. */
42
+ readonly value: ts.Expression | null;
43
+ /** Arrow callback targets ignore thisArg and retain their lexical receiver. */
44
+ readonly arrowsUseLexicalThis: true;
45
+ };
46
+ /** The graph must prove a runtime Array root and no own receiver slot shadowing. */
47
+ readonly receiverObligations: {
48
+ readonly arrayBrand: true;
49
+ readonly unshadowedMember: true;
50
+ readonly memberKey: string;
51
+ };
52
+ /** Must be included by the graph's final seal; this helper does not discharge it. */
53
+ readonly protocolRequirements: readonly IntrinsicProtocolRequirement[];
54
+ /** Whether the method declaration itself was authenticated by checker identity. */
55
+ readonly identity: 'standard-array-member' | 'runtime-array-lookup';
56
+ }
57
+ export type IntrinsicArrayCallbackFrameResult = {
58
+ readonly kind: 'not-intrinsic';
59
+ } | {
60
+ readonly kind: 'unresolved';
61
+ readonly reason: string;
62
+ } | {
63
+ readonly kind: 'no-callback';
64
+ readonly call: ts.CallExpression;
65
+ readonly method: 'sort' | 'toSorted';
66
+ readonly receiver: ts.Expression;
67
+ readonly memberKey: string;
68
+ readonly receiverObligations: IntrinsicArrayCallbackFrame['receiverObligations'];
69
+ readonly protocolRequirements: readonly IntrinsicProtocolRequirement[];
70
+ readonly identity: IntrinsicArrayCallbackFrame['identity'];
71
+ } | {
72
+ readonly kind: 'frame';
73
+ readonly frame: IntrinsicArrayCallbackFrame;
74
+ };
75
+ /**
76
+ * Describe callback frames for authenticated Array/ReadonlyArray methods.
77
+ * This is an inventory leaf: it never resolves callback values, array
78
+ * contents, aliases, receiver closure, or callable completion. The caller
79
+ * must discharge the receiver and intrinsic-prototype obligations in its
80
+ * shared proof graph. A method name alone never authenticates a source
81
+ * lookalike; when checker attribution is absent on an `any` receiver, the
82
+ * result is explicitly only a runtime-array candidate.
83
+ */
84
+ export declare const intrinsicArrayCallbackFrameOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, site: FlowCallSite) => IntrinsicArrayCallbackFrameResult;
@@ -0,0 +1,180 @@
1
+ import ts from 'typescript';
2
+ const callbackShape = (method, optionalCallback, thisArgumentPosition, callbackRoles) => ({ method, optionalCallback, thisArgumentPosition, callbackRoles });
3
+ const methodShapes = new Map([
4
+ ...['forEach', 'map', 'filter', 'some', 'every', 'find', 'findIndex', 'findLast', 'findLastIndex', 'flatMap'].map((method) => [method, callbackShape(method, false, 1, ['element', 'index', 'array'])]),
5
+ ...['sort', 'toSorted'].map((method) => [
6
+ method,
7
+ callbackShape(method, true, null, ['sort-left', 'sort-right'])
8
+ ]),
9
+ ...['reduce', 'reduceRight'].map((method) => [
10
+ method,
11
+ callbackShape(method, false, null, ['reduce-accumulator', 'reduce-current', 'index', 'array'])
12
+ ])
13
+ ]);
14
+ const literalMemberKey = (callee) => {
15
+ if (ts.isPropertyAccessExpression(callee))
16
+ return callee.name.text;
17
+ if (!ts.isElementAccessExpression(callee) || !callee.argumentExpression)
18
+ return null;
19
+ const key = callee.argumentExpression;
20
+ return ts.isStringLiteralLike(key) || ts.isNumericLiteral(key) ? key.text : null;
21
+ };
22
+ const unionParts = (type) => (type.isUnion() ? type.types.flatMap(unionParts) : [type]);
23
+ const standardArrayMember = (checker, anchor, declaration) => {
24
+ const owner = declaration.parent;
25
+ return (ts.isInterfaceDeclaration(owner) &&
26
+ (owner.name.text === 'Array' || owner.name.text === 'ReadonlyArray') &&
27
+ declaration.getSourceFile().hasNoDefaultLib &&
28
+ checker.getSymbolAtLocation(owner.name) === checker.resolveName(owner.name.text, anchor, ts.SymbolFlags.Interface, false));
29
+ };
30
+ const isUndefinedValue = (checker, flow, expression) => {
31
+ const value = ts.isParenthesizedExpression(expression) ? expression.expression : expression;
32
+ if (ts.isVoidExpression(value))
33
+ return true;
34
+ if (!ts.isIdentifier(value) || value.text !== 'undefined' || flow.targetOf(value)?.declaration)
35
+ return false;
36
+ const symbol = checker.getSymbolAtLocation(value);
37
+ const declarations = symbol?.declarations ?? [];
38
+ const globalUndefined = checker.resolveName('undefined', value, ts.SymbolFlags.Value, false);
39
+ return (symbol !== undefined &&
40
+ symbol === globalUndefined &&
41
+ (checker.getTypeAtLocation(value).flags & ts.TypeFlags.Undefined) !== 0 &&
42
+ (declarations.length === 0 || declarations.every((declaration) => declaration.getSourceFile().hasNoDefaultLib)));
43
+ };
44
+ const sourceForRole = (role, receiver, initialValue, method) => {
45
+ switch (role) {
46
+ case 'element':
47
+ case 'sort-left':
48
+ case 'sort-right':
49
+ case 'reduce-current':
50
+ return {
51
+ kind: 'array-elements',
52
+ receiver,
53
+ ...(method === 'reduce' && initialValue === null ? { excludesSeedElement: 'first' } : {}),
54
+ ...(method === 'reduceRight' && initialValue === null ? { excludesSeedElement: 'last' } : {})
55
+ };
56
+ case 'index':
57
+ return { kind: 'array-index' };
58
+ case 'array':
59
+ return { kind: 'receiver', receiver };
60
+ case 'reduce-accumulator':
61
+ return {
62
+ kind: 'reduce-accumulator',
63
+ receiver,
64
+ initialValue,
65
+ seedElement: initialValue === null ? (method === 'reduce' ? 'first' : 'last') : null,
66
+ feedback: 'callback-completion'
67
+ };
68
+ }
69
+ };
70
+ /**
71
+ * Describe callback frames for authenticated Array/ReadonlyArray methods.
72
+ * This is an inventory leaf: it never resolves callback values, array
73
+ * contents, aliases, receiver closure, or callable completion. The caller
74
+ * must discharge the receiver and intrinsic-prototype obligations in its
75
+ * shared proof graph. A method name alone never authenticates a source
76
+ * lookalike; when checker attribution is absent on an `any` receiver, the
77
+ * result is explicitly only a runtime-array candidate.
78
+ */
79
+ export const intrinsicArrayCallbackFrameOf = (checker, flow, site) => {
80
+ if (!ts.isCallExpression(site.call) || site.operands.kind !== 'call' || site.operands.explicitThis)
81
+ return { kind: 'not-intrinsic' };
82
+ const callee = site.operands.callee;
83
+ if (!ts.isPropertyAccessExpression(callee) && !ts.isElementAccessExpression(callee))
84
+ return { kind: 'not-intrinsic' };
85
+ const memberKey = literalMemberKey(callee);
86
+ if (memberKey === null)
87
+ return { kind: 'not-intrinsic' };
88
+ const shape = methodShapes.get(memberKey);
89
+ if (!shape)
90
+ return { kind: 'not-intrinsic' };
91
+ if (site.operands.dispatch.kind !== 'member' || site.operands.receiver === null)
92
+ return { kind: 'unresolved', reason: 'not-a-normal-member-call' };
93
+ if (site.operands.receiver !== callee.expression)
94
+ return { kind: 'unresolved', reason: 'receiver-does-not-match-member-lookup' };
95
+ const receiver = site.operands.receiver;
96
+ const receiverType = checker.getTypeAtLocation(receiver);
97
+ const parts = unionParts(receiverType);
98
+ const anyReceiver = parts.some((part) => (part.flags & ts.TypeFlags.Any) !== 0);
99
+ const member = checker.getSymbolAtLocation(ts.isPropertyAccessExpression(callee) ? callee.name : callee.argumentExpression);
100
+ let identity;
101
+ if (member?.declarations?.length) {
102
+ if (!member.declarations.some((declaration) => standardArrayMember(checker, receiver, declaration)))
103
+ return { kind: 'not-intrinsic' };
104
+ identity = 'standard-array-member';
105
+ }
106
+ else if (anyReceiver)
107
+ identity = 'runtime-array-lookup';
108
+ else
109
+ return { kind: 'unresolved', reason: 'array-member-identity-unavailable' };
110
+ // The frame relies on the intrinsic method running with the intrinsic
111
+ // semantics, and what that reads off `Array.prototype` is finite: the method
112
+ // itself, every index (a hole read falls through to the prototype) and, for
113
+ // the species-creating methods (`map`/`filter`/`flatMap`/`toSorted`),
114
+ // `constructor` and `@@species`; `length` and the present elements are own.
115
+ // Demanding the whole prototype instead fails under ANY unattributed
116
+ // prototype-key write -- on hono-hello that was the one obligation the sealed
117
+ // census could not discharge (reg-exp-router `[middleware, routes].forEach`)
118
+ // while none of the keys the call reads was ever written. An `any` receiver
119
+ // proves nothing about the receiver's own shape, so the runtime lookup keeps
120
+ // the whole-prototype obligation.
121
+ const protocolRequirements = [
122
+ identity === 'standard-array-member'
123
+ ? { intrinsic: 'Array', prototypeKeys: { names: [memberKey, 'constructor', '@@species'], arrayIndices: true }, location: site.call }
124
+ : { intrinsic: 'Array', location: site.call }
125
+ ];
126
+ const receiverObligations = { arrayBrand: true, unshadowedMember: true, memberKey };
127
+ const args = site.operands.args;
128
+ if (args.some(ts.isSpreadElement))
129
+ return { kind: 'unresolved', reason: 'spread-arguments' };
130
+ const callback = args[0];
131
+ if (!callback) {
132
+ if (!shape.optionalCallback)
133
+ return { kind: 'unresolved', reason: 'missing-required-callback' };
134
+ return {
135
+ kind: 'no-callback',
136
+ call: site.call,
137
+ method: shape.method,
138
+ receiver,
139
+ memberKey,
140
+ receiverObligations,
141
+ protocolRequirements,
142
+ identity
143
+ };
144
+ }
145
+ if (shape.optionalCallback && isUndefinedValue(checker, flow, callback))
146
+ return {
147
+ kind: 'no-callback',
148
+ call: site.call,
149
+ method: shape.method,
150
+ receiver,
151
+ memberKey,
152
+ receiverObligations,
153
+ protocolRequirements,
154
+ identity
155
+ };
156
+ const initialValue = shape.method === 'reduce' || shape.method === 'reduceRight' ? (args[1] ?? null) : null;
157
+ const thisArgument = shape.thisArgumentPosition === null ? null : (args[shape.thisArgumentPosition] ?? null);
158
+ const arguments_ = shape.callbackRoles.map((role, position) => ({
159
+ position,
160
+ role,
161
+ source: sourceForRole(role, receiver, initialValue, shape.method)
162
+ }));
163
+ return {
164
+ kind: 'frame',
165
+ frame: {
166
+ call: site.call,
167
+ method: shape.method,
168
+ receiver,
169
+ memberKey,
170
+ callback,
171
+ callbackOperandPosition: 0,
172
+ arguments: arguments_,
173
+ initialValue,
174
+ thisBinding: { kind: 'callback-thisArg', value: thisArgument, arrowsUseLexicalThis: true },
175
+ receiverObligations,
176
+ protocolRequirements,
177
+ identity
178
+ }
179
+ };
180
+ };