@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,587 @@
1
+ /**
2
+ * Solve a lazily discovered dependency graph. `all-dependencies` admits a
3
+ * recursive component when every member has complete local facts and every
4
+ * dependency outside it is complete. `seeded-origin` preserves the legacy
5
+ * seed rule. `grounding-domains` enforces only domains required by members of
6
+ * a cycle and propagates witnesses over explicitly labelled dependency edges.
7
+ * An acyclic unseeded node remains a complete, vacuous answer.
8
+ */
9
+ export const dependencyComponentSolver = (expand, mode) => {
10
+ const nodes = new Map();
11
+ // No `groundedDomains` here. It is a pure function of the expanded graph
12
+ // (`groundingDomainsFrom`, memoized by key), never of how components closed,
13
+ // so storing it per node only meant computing it for every node of every
14
+ // component -- the whole value-origin subgraph walked ~115,000 times on
15
+ // the three.js app -- when the only places it can change an answer are a cyclic
16
+ // component's requirement check and the published result of a node someone
17
+ // actually asks about.
18
+ const results = new Map();
19
+ const componentOf = new Map();
20
+ const nodeOf = (key) => {
21
+ let node = nodes.get(key);
22
+ if (node === undefined) {
23
+ node = expand(key);
24
+ nodes.set(key, node);
25
+ // Checked here, once per node, rather than inside the grounding walk.
26
+ // There it was `dependencies.includes(...)` per grounding edge, so a node
27
+ // carrying g grounding edges over d required ones paid g*d comparisons --
28
+ // and paid them again for every root whose walk reached it. One Set of
29
+ // the node's own dependencies answers all g in O(d + g), and moving the
30
+ // check to expansion makes it cover EVERY node the solver sees instead of
31
+ // only the ones some grounding walk happened to reach.
32
+ const grounding = node.groundingDependencies;
33
+ if (grounding !== undefined && grounding.length > 0) {
34
+ const declared = new Set(node.dependencies);
35
+ for (const edge of grounding)
36
+ if (!declared.has(edge.dependency))
37
+ throw new Error('grounding dependency must also be a closure dependency');
38
+ }
39
+ }
40
+ return node;
41
+ };
42
+ /**
43
+ * Grounding walks only the domain-labelled subgraph, never all closure edges.
44
+ *
45
+ * One walk, labelled by the domain of the edge it arrived on -- not a walk to
46
+ * collect the domain universe followed by a per-domain walk to search it. The
47
+ * collecting walk visited every node reachable over ANY grounding edge and
48
+ * could not stop early, because its purpose was to enumerate; the searching
49
+ * walk stops at the first witness. In this compiler there is exactly one
50
+ * domain (`source-value-session.ts`'s `VALUE_ORIGIN`), so the enumeration
51
+ * pass was a full traversal of the value-origin subgraph -- repeated for
52
+ * every node of every component -- to rediscover the single domain the
53
+ * search was about to walk anyway.
54
+ *
55
+ * Dropping it is answer-preserving, not an approximation. A domain can only
56
+ * enter the result by being witnessed on a path of its OWN edges from the
57
+ * root, so the domains the enumeration pass added from a node's
58
+ * `groundingRequirements`, or from an edge of some other domain, could never
59
+ * survive the search: the search would walk no edge of such a domain out of
60
+ * the root and would find nothing but the root's own seeds -- which are
61
+ * admitted here unconditionally, before any edge is walked.
62
+ */
63
+ const NO_DOMAINS = new Set();
64
+ const groundingCache = new Map();
65
+ const groundingDomainsFrom = (root) => {
66
+ const known = groundingCache.get(root);
67
+ if (known !== undefined)
68
+ return known;
69
+ const rootNode = nodeOf(root);
70
+ // A node that neither witnesses a domain nor labels an edge with one can
71
+ // only ever answer the empty set, and that is most of them: `seeded-origin`
72
+ // clients (`seeded-origins.ts`) never set a grounding field at all, and a
73
+ // solver is built per query there. Answering without allocating a walk is
74
+ // what keeps this off that path entirely.
75
+ if (!rootNode.groundingSeeds?.length && !rootNode.groundingDependencies?.length) {
76
+ groundingCache.set(root, NO_DOMAINS);
77
+ return NO_DOMAINS;
78
+ }
79
+ const found = new Set(rootNode.groundingSeeds ?? []);
80
+ const seen = new Map();
81
+ const frontier = [];
82
+ const follow = (node, domain) => {
83
+ for (const edge of node.groundingDependencies ?? [])
84
+ if (domain === null || edge.domain === domain)
85
+ frontier.push({ key: edge.dependency, domain: edge.domain });
86
+ };
87
+ follow(rootNode, null);
88
+ for (let cursor = 0; cursor < frontier.length; cursor++) {
89
+ const { key, domain } = frontier[cursor];
90
+ if (found.has(domain))
91
+ continue;
92
+ let visited = seen.get(domain);
93
+ if (visited === undefined)
94
+ seen.set(domain, (visited = new Set()));
95
+ if (visited.has(key))
96
+ continue;
97
+ visited.add(key);
98
+ const node = nodeOf(key);
99
+ if (node.groundingSeeds?.includes(domain)) {
100
+ found.add(domain);
101
+ continue;
102
+ }
103
+ follow(node, domain);
104
+ }
105
+ groundingCache.set(root, found);
106
+ return found;
107
+ };
108
+ const explainFrom = (root) => {
109
+ const paths = new Map([[root, [root]]]);
110
+ const queue = [root];
111
+ const emittedOpaque = new Map();
112
+ const emittedIncomplete = new Set();
113
+ const emittedCycles = new Set();
114
+ const emittedDomainCycles = new Map();
115
+ const causes = [];
116
+ for (let cursor = 0; cursor < queue.length; cursor++) {
117
+ const key = queue[cursor];
118
+ const node = nodeOf(key);
119
+ const path = paths.get(key);
120
+ const reasons = node.causes ?? [];
121
+ if (!node.locallyComplete && reasons.length === 0 && !emittedIncomplete.has(key)) {
122
+ emittedIncomplete.add(key);
123
+ causes.push({ kind: 'incomplete-node', root: key, path });
124
+ }
125
+ if (!node.locallyComplete) {
126
+ let emitted = emittedOpaque.get(key);
127
+ if (!emitted)
128
+ emittedOpaque.set(key, (emitted = new Set()));
129
+ for (const cause of reasons) {
130
+ if (emitted.has(cause))
131
+ continue;
132
+ emitted.add(cause);
133
+ causes.push({ kind: 'opaque', root: key, cause, path });
134
+ }
135
+ }
136
+ const component = componentOf.get(key);
137
+ if (component?.unseededCycle && !emittedCycles.has(component)) {
138
+ emittedCycles.add(component);
139
+ causes.push({ kind: 'unseeded-cycle', members: component.members, path });
140
+ }
141
+ if (component?.unseededDomains.size) {
142
+ let emitted = emittedDomainCycles.get(component);
143
+ if (!emitted)
144
+ emittedDomainCycles.set(component, (emitted = new Set()));
145
+ for (const domain of component.unseededDomains) {
146
+ if (emitted.has(domain))
147
+ continue;
148
+ emitted.add(domain);
149
+ causes.push({ kind: 'unseeded-cycle', domain, members: component.members, unmet: component.unmet, path });
150
+ }
151
+ }
152
+ for (const dependency of node.dependencies) {
153
+ if (paths.has(dependency))
154
+ continue;
155
+ paths.set(dependency, [...path, dependency]);
156
+ queue.push(dependency);
157
+ }
158
+ }
159
+ return causes;
160
+ };
161
+ /**
162
+ * A node's published grounding, computed when someone asks for it rather than
163
+ * when its component closed. Same function, same memo, same answer: the walk
164
+ * reads only `expand`ed nodes, which never change, so when it runs cannot
165
+ * change what it returns. In `grounding-domains` mode the legacy aggregate
166
+ * flag is the domain set's emptiness, exactly as the component loop used to
167
+ * record it; in the other modes it stays the seed witness that loop computes.
168
+ *
169
+ * A plain object, not one with accessors. Deferring these two fields behind
170
+ * getters was tried and cost 4.7% of a whole compile in this one function:
171
+ * a result is built for every top-level query, a solver is built per query,
172
+ * and an object literal carrying accessors is far more expensive to create
173
+ * than one carrying values. The walk itself is memoized and answers the
174
+ * no-grounding case without allocating, which is the cheap half anyway.
175
+ */
176
+ const publish = (root, known) => {
177
+ const groundedDomains = groundingDomainsFrom(root);
178
+ return {
179
+ status: known.status,
180
+ grounded: mode === 'grounding-domains' ? groundedDomains.size > 0 : known.grounded,
181
+ groundedDomains,
182
+ explain: () => explainFrom(root)
183
+ };
184
+ };
185
+ return (root) => {
186
+ const known = results.get(root);
187
+ if (known !== undefined)
188
+ return publish(root, known);
189
+ const indices = new Map();
190
+ const low = new Map();
191
+ const stack = [];
192
+ const active = new Set();
193
+ let next = 0;
194
+ // The low-link is kept in a local for the length of the loop and written to
195
+ // `low` once, on the way out. Nothing reads a node's low-link while its own
196
+ // visit is running -- a back edge reads `indices`, and a tree edge reads the
197
+ // child's low-link only after that child's visit has returned -- so the
198
+ // read-modify-write through the map on every edge was three map operations
199
+ // per edge to maintain a number only this frame could see.
200
+ const visit = (key) => {
201
+ const index = next++;
202
+ indices.set(key, index);
203
+ let lowest = index;
204
+ stack.push(key);
205
+ active.add(key);
206
+ for (const dependency of nodeOf(key).dependencies) {
207
+ if (results.has(dependency))
208
+ continue;
209
+ const seen = indices.get(dependency);
210
+ if (seen === undefined) {
211
+ visit(dependency);
212
+ const reached = low.get(dependency);
213
+ if (reached < lowest)
214
+ lowest = reached;
215
+ }
216
+ else if (seen < lowest && active.has(dependency))
217
+ lowest = seen;
218
+ }
219
+ low.set(key, lowest);
220
+ if (lowest !== index)
221
+ return;
222
+ const members = [];
223
+ let member;
224
+ do {
225
+ member = stack.pop();
226
+ active.delete(member);
227
+ members.push(member);
228
+ } while (member !== key);
229
+ // A singleton component's only member is `key` itself, so membership is
230
+ // an identity test. Most components are singletons, and building a Set to
231
+ // ask one question about one element is the allocation that shows up.
232
+ const memberSet = members.length === 1 ? null : new Set(members);
233
+ let complete = true;
234
+ let grounded = false;
235
+ let cyclic = members.length > 1;
236
+ const unseededDomains = new Set();
237
+ const unmet = [];
238
+ for (const current of members) {
239
+ const node = nodeOf(current);
240
+ complete &&= node.locallyComplete;
241
+ grounded ||= node.seed === true;
242
+ for (const dependency of node.dependencies) {
243
+ if (memberSet === null ? dependency === key : memberSet.has(dependency)) {
244
+ cyclic = true;
245
+ continue;
246
+ }
247
+ const dependencyResult = results.get(dependency);
248
+ complete &&= dependencyResult?.status === 'complete';
249
+ grounded ||= dependencyResult?.grounded === true;
250
+ }
251
+ }
252
+ const unseededCycle = mode === 'seeded-origin' && complete && cyclic && !grounded;
253
+ if (unseededCycle)
254
+ complete = false;
255
+ // Only a cyclic component can fail a grounding requirement -- an acyclic
256
+ // node's requirement is discharged by the ordinary completeness rule --
257
+ // so this is the one place the walk has to run before an answer is
258
+ // published, and the members of one cycle are all it has to run for.
259
+ if (mode === 'grounding-domains' && complete && cyclic) {
260
+ for (const current of members) {
261
+ const groundedForNode = groundingDomainsFrom(current);
262
+ for (const domain of nodeOf(current).groundingRequirements ?? []) {
263
+ if (groundedForNode.has(domain))
264
+ continue;
265
+ unseededDomains.add(domain);
266
+ unmet.push(current);
267
+ }
268
+ }
269
+ if (unseededDomains.size > 0)
270
+ complete = false;
271
+ }
272
+ const component = { members, unseededCycle, unseededDomains, unmet };
273
+ for (const current of members) {
274
+ componentOf.set(current, component);
275
+ results.set(current, { status: complete ? 'complete' : 'refused', grounded });
276
+ }
277
+ };
278
+ visit(root);
279
+ return publish(root, results.get(root));
280
+ };
281
+ };
282
+ export const dependencyFactSolver = (expand, mode) => {
283
+ const states = new Map();
284
+ // States, not keys: `propagate` used to hold keys and call `stateOf(key)`
285
+ // on every drain, a Map lookup per edge fire across the three.js app's 14.7M
286
+ // observe edges. The State is already in hand wherever an edge fires or is
287
+ // created, so the queue (and `dependents`, on State above) carry it
288
+ // directly and dedupe on State identity, which is 1:1 with key identity
289
+ // because `states` is the only minter.
290
+ const queue = [];
291
+ const queued = new Set();
292
+ let dependencyRevision = 0;
293
+ // Every reason a node's TRANSFER must run again is a reason its SEAL must run
294
+ // again: the seal is the same transfer with `sealing` set, so it reads the
295
+ // same dependencies and answers differently only when they do. `queue` is
296
+ // drained by `propagate`; this set outlives it, because a seal pass happens
297
+ // after the drain and needs to know what the drain touched.
298
+ const sealDirty = new Set();
299
+ const enqueue = (state) => {
300
+ sealDirty.add(state.key);
301
+ if (queued.has(state))
302
+ return;
303
+ queued.add(state);
304
+ queue.push(state);
305
+ };
306
+ const stateOf = (key) => {
307
+ let state = states.get(key);
308
+ if (state === undefined) {
309
+ const built = {
310
+ key,
311
+ definition: expand(key),
312
+ observedDependencies: new Map(),
313
+ requiredDependencies: new Set(),
314
+ facts: new Set(),
315
+ dependents: new Set(),
316
+ read: (dependency) => readFrom(built, dependency),
317
+ observe: (dependency) => observeFrom(built, dependency),
318
+ holdersOf: (fact) => holdersOfFrom(built, fact)
319
+ };
320
+ state = built;
321
+ states.set(key, state);
322
+ enqueue(built);
323
+ }
324
+ return state;
325
+ };
326
+ /**
327
+ * `seed` is exactly this, exposed: create the state (a no-op if it already
328
+ * exists) and let `stateOf`'s own `enqueue` schedule its first transfer.
329
+ * No edge is recorded anywhere -- nothing subscribes and nothing is
330
+ * subscribed to -- because the only purpose is to make the node exist and
331
+ * run, not to make anyone depend on it.
332
+ */
333
+ const seed = (key) => {
334
+ stateOf(key);
335
+ };
336
+ // The reverse of `observedDependencies`/`dependents`: every state that has
337
+ // published a given fact VALUE, and every state that has ever asked
338
+ // `holdersOf` about it. Global across every query kind on purpose -- a fact
339
+ // is a fact regardless of which kind of node published it, and the size
340
+ // this costs is bounded by facts actually published (three.js app: ~205,000
341
+ // (state, fact) pairs total), not by how many candidates asked about them
342
+ // (the 456,000 edges this primitive exists to avoid storing).
343
+ const holders = new Map();
344
+ const valueSubscribers = new Map();
345
+ const NO_HOLDERS = [];
346
+ const holdersOfFrom = (ownerState, fact) => {
347
+ let subscribers = valueSubscribers.get(fact);
348
+ if (subscribers === undefined)
349
+ valueSubscribers.set(fact, (subscribers = new Set()));
350
+ // Idempotent by construction (a Set), so re-asking on every re-evaluation
351
+ // of the same node costs a lookup and nothing else -- no revision to bump,
352
+ // no queue entry to make, because registering the subscription changes
353
+ // nothing about what THIS transfer already computed with the holders it
354
+ // just read below. It only matters for facts published AFTER this call,
355
+ // which `propagate` below wakes through this same set.
356
+ subscribers.add(ownerState);
357
+ const holding = holders.get(fact);
358
+ if (holding === undefined)
359
+ return NO_HOLDERS;
360
+ const found = [];
361
+ for (const holder of holding)
362
+ found.push(holder.key);
363
+ return found;
364
+ };
365
+ // The owner's state is handed in rather than looked up: every transfer and
366
+ // every seal reads its dependencies through this, so a map lookup per edge
367
+ // for a state the caller is already holding was, on the three.js app, a quarter of
368
+ // the whole compile.
369
+ const factsFrom = (ownerState, dependency, required) => {
370
+ let dependencyState = ownerState.observedDependencies.get(dependency);
371
+ let changed = false;
372
+ if (dependencyState === undefined) {
373
+ dependencyState = stateOf(dependency);
374
+ ownerState.observedDependencies.set(dependency, dependencyState);
375
+ dependencyState.dependents.add(ownerState);
376
+ dependencyRevision++;
377
+ changed = true;
378
+ }
379
+ if (required && !ownerState.requiredDependencies.has(dependency)) {
380
+ ownerState.requiredDependencies.add(dependency);
381
+ dependencyRevision++;
382
+ changed = true;
383
+ }
384
+ // A new observation may expose facts on the next pass. An upgrade also
385
+ // invalidates the current seal even though the fact edge already existed.
386
+ if (changed)
387
+ enqueue(ownerState);
388
+ // The fact set is handed over as `ReadonlySet`, not as a copy. Copying per
389
+ // edge read was quadratic and made three's WebGLRenderer unfinishable;
390
+ // copying per (node, size) fixed the time and doubled the memory, which is
391
+ // what put the three.js app's third solve into a 4 GB OOM. Neither is necessary:
392
+ // `propagate` adds a node's facts only AFTER its transfer has returned --
393
+ // `evaluate` builds its result eagerly and hands back a set of its own --
394
+ // so no reader is ever iterating a set that is being written.
395
+ return dependencyState.facts;
396
+ };
397
+ const readFrom = (ownerState, dependency) => factsFrom(ownerState, dependency, true);
398
+ const observeFrom = (ownerState, dependency) => factsFrom(ownerState, dependency, false);
399
+ const propagate = () => {
400
+ for (let cursor = 0; cursor < queue.length; cursor++) {
401
+ const state = queue[cursor];
402
+ queued.delete(state);
403
+ counts.transfers++;
404
+ if (countsEnabled && counts.transfers % 200000 === 0)
405
+ report();
406
+ for (const fact of state.definition.transfer(state.read, state.observe, state.holdersOf)) {
407
+ if (state.facts.has(fact))
408
+ continue;
409
+ state.facts.add(fact);
410
+ // This state is now a holder of `fact` -- recorded at the exact point
411
+ // a fact is genuinely NEW, same as `state.facts.add` beside it, so
412
+ // `holders` never grows for a re-observed fact.
413
+ let holding = holders.get(fact);
414
+ if (holding === undefined)
415
+ holders.set(fact, (holding = new Set()));
416
+ holding.add(state);
417
+ for (const dependent of state.dependents)
418
+ enqueue(dependent);
419
+ // A node that asked `holdersOf(fact)` before this state held it named
420
+ // no `K` to depend on -- there was nothing to name -- so an ordinary
421
+ // dependent edge cannot wake it. This is the other half of that
422
+ // subscription: without it, a container whose holder shows up only
423
+ // after `unknown-reads` first ran would publish an incomplete answer
424
+ // forever and never be asked again, which is the silently-wrong
425
+ // result SEMANTIC-AUTHORITY ranks below a slow one.
426
+ const subscribers = valueSubscribers.get(fact);
427
+ if (subscribers !== undefined)
428
+ for (const subscriber of subscribers)
429
+ enqueue(subscriber);
430
+ }
431
+ }
432
+ queue.length = 0;
433
+ };
434
+ // Seals survive between roots. A solved node whose facts and dependencies
435
+ // have not moved seals to the same answer, and re-deriving it is the cost
436
+ // that made this solver quadratic in (top-level queries x nodes discovered):
437
+ // every query re-sealed the whole graph it had explored so far, so the last
438
+ // query of a large program paid for all of it. Only what `enqueue` marked is
439
+ // re-sealed, which is exactly what could have changed.
440
+ const sealed = new Map();
441
+ // `sealRevision` invalidates the hoisted component-solve memo below, so
442
+ // bumping it on a re-seal that reproduces the same answer throws that memo
443
+ // away and forces a full component rebuild for nothing -- on the three.js app every
444
+ // seal was doing exactly that. The grounding fields compare soundly by
445
+ // value: `DependencyGroundingDomain` is `string | symbol`, and a grounding
446
+ // edge's `dependency` is a `K`, which this solver's own contract already
447
+ // requires to have stable identity. `causes` is `R`, a type this solver
448
+ // never gives an equality contract to -- source-value-session's `Cause` is
449
+ // a fresh `{reason, node}` object literal built on every seal call, so
450
+ // `===` per element is the only sound comparison available here. That
451
+ // reports "changed" for a content-identical-but-freshly-allocated cause
452
+ // list, which only over-invalidates (safe, never wrong); the common case --
453
+ // a node that resolves, whose `causes` is `[]` on every seal -- still
454
+ // compares equal by length alone, which is where the savings are.
455
+ const domainsEqual = (a, b) => a.length === b.length && a.every((domain, index) => domain === b[index]);
456
+ const groundingEdgesEqual = (a, b) => a.length === b.length && a.every((edge, index) => edge.domain === b[index].domain && edge.dependency === b[index].dependency);
457
+ const causesEqual = (a, b) => a.length === b.length && a.every((cause, index) => cause === b[index]);
458
+ const sealChanged = (previous, next) => previous === undefined ||
459
+ previous.locallyComplete !== next.locallyComplete ||
460
+ previous.seed !== next.seed ||
461
+ !causesEqual(previous.causes ?? [], next.causes ?? []) ||
462
+ !domainsEqual(previous.groundingRequirements ?? [], next.groundingRequirements ?? []) ||
463
+ !domainsEqual(previous.groundingSeeds ?? [], next.groundingSeeds ?? []) ||
464
+ !groundingEdgesEqual(previous.groundingDependencies ?? [], next.groundingDependencies ?? []);
465
+ const counts = { roots: 0, transfers: 0, seals: 0, componentNodes: 0 };
466
+ // What the heap is actually holding, for the runs where memory is the wall
467
+ // rather than time. Counted only when asked for: it walks every state.
468
+ const sizes = () => {
469
+ if (process.env['GEA_SOLVER_SIZES'] === undefined)
470
+ return '';
471
+ let observed = 0;
472
+ let required = 0;
473
+ let dependents = 0;
474
+ let facts = 0;
475
+ // This solver is generic over K by design -- SEMANTIC-AUTHORITY section 3
476
+ // requires one solved graph, not a solver bespoke to one key shape -- so
477
+ // nothing outside this debug path may assume a key has a `kind`. But
478
+ // attributing the three.js app's 14.7M observe edges to a fix means knowing which
479
+ // caller's loop owns them, and the one real caller's key (`Query` in
480
+ // source-value-session.ts) is a `{ kind: ... }` discriminated union. This
481
+ // reflects into that shape defensively, only inside the
482
+ // GEA_SOLVER_SIZES-gated path that prints nothing in production, and
483
+ // falls back to a single 'unknown' bucket for any key not shaped this way.
484
+ const perKind = new Map();
485
+ for (const state of states.values()) {
486
+ observed += state.observedDependencies.size;
487
+ required += state.requiredDependencies.size;
488
+ dependents += state.dependents.size;
489
+ facts += state.facts.size;
490
+ const kind = state.key.kind;
491
+ const bucketKey = typeof kind === 'string' ? kind : 'unknown';
492
+ let bucket = perKind.get(bucketKey);
493
+ if (bucket === undefined)
494
+ perKind.set(bucketKey, (bucket = { states: 0, observed: 0, required: 0, facts: 0 }));
495
+ bucket.states++;
496
+ bucket.observed += state.observedDependencies.size;
497
+ bucket.required += state.requiredDependencies.size;
498
+ bucket.facts += state.facts.size;
499
+ }
500
+ const byKind = [...perKind]
501
+ .sort(([, a], [, b]) => b.observed - a.observed)
502
+ .map(([kind, kindSizes]) => `\n[SOLVER-KIND] kind=${kind} states=${kindSizes.states} observed=${kindSizes.observed} required=${kindSizes.required} facts=${kindSizes.facts}`)
503
+ .join('');
504
+ return ` observed=${observed} required=${required} dependents=${dependents} facts=${facts}${byKind}`;
505
+ };
506
+ let sealRevision = 0;
507
+ let componentSolve = null;
508
+ let componentDependencyRevision = -1;
509
+ let componentSealRevision = -1;
510
+ const countsEnabled = process.env['GEA_SOLVER_COUNTS'] !== undefined;
511
+ const report = () => {
512
+ if (!countsEnabled)
513
+ return;
514
+ console.error(`[SOLVER] roots=${counts.roots} states=${states.size} transfers=${counts.transfers} seals=${counts.seals} component-expansions=${counts.componentNodes}${sizes()}`);
515
+ };
516
+ if (countsEnabled)
517
+ process.on('exit', report);
518
+ const NO_DEPENDENCIES = [];
519
+ const solve = (root) => {
520
+ counts.roots++;
521
+ // Reported as it goes, not only at exit: a run that has to be killed to be
522
+ // observed reports nothing, which is how a 20-minute compile stayed
523
+ // unattributed for two profiling attempts.
524
+ stateOf(root);
525
+ // Sealing may itself discover a dependency. In that case its transfer and
526
+ // every affected dependent must run again before any status is published.
527
+ while (true) {
528
+ propagate();
529
+ const revisionBeforeSeal = dependencyRevision;
530
+ const dirty = [...sealDirty];
531
+ sealDirty.clear();
532
+ for (const key of dirty) {
533
+ const state = states.get(key);
534
+ if (state === undefined)
535
+ continue;
536
+ counts.seals++;
537
+ if (countsEnabled && counts.seals % 200000 === 0)
538
+ report();
539
+ const next = state.definition.seal(state.read, state.observe, state.holdersOf);
540
+ if (sealChanged(sealed.get(key), next))
541
+ sealRevision++;
542
+ sealed.set(key, next);
543
+ }
544
+ if (queue.length === 0 && sealDirty.size === 0 && dependencyRevision === revisionBeforeSeal)
545
+ break;
546
+ }
547
+ // The component solve reads the SEALED graph, so its answer stands for
548
+ // exactly as long as no node's seal and no node's dependency set has moved
549
+ // -- and both of those are counted. Built inside this per-root call it was
550
+ // thrown away and rebuilt for every root, taking its `results`, `nodes` and
551
+ // `componentOf` caches with it: on the three.js app the graph stopped growing at the
552
+ // eighth root and the next twenty-two thousand each re-expanded ~470 nodes
553
+ // of it, 10.4M expansions of an answer that had not changed. Rebuilding on
554
+ // a revision rather than on every call is the same walk, done once per
555
+ // change instead of once per question.
556
+ if (componentSolve === null || componentDependencyRevision !== dependencyRevision || componentSealRevision !== sealRevision) {
557
+ componentSolve = dependencyComponentSolver((key) => {
558
+ counts.componentNodes++;
559
+ if (countsEnabled && counts.componentNodes % 200000 === 0)
560
+ report();
561
+ const state = states.get(key);
562
+ const local = sealed.get(key);
563
+ if (state === undefined || local === undefined)
564
+ throw new Error('unsealed dependency fact node');
565
+ return { ...local, dependencies: [...state.requiredDependencies] };
566
+ }, mode);
567
+ componentDependencyRevision = dependencyRevision;
568
+ componentSealRevision = sealRevision;
569
+ }
570
+ const result = componentSolve(root);
571
+ if (result.status === 'complete')
572
+ return {
573
+ status: 'complete',
574
+ grounded: result.grounded,
575
+ groundedDomains: result.groundedDomains,
576
+ facts: new Set(stateOf(root).facts),
577
+ explain: result.explain
578
+ };
579
+ return {
580
+ status: 'refused',
581
+ grounded: result.grounded,
582
+ groundedDomains: result.groundedDomains,
583
+ explain: result.explain
584
+ };
585
+ };
586
+ return { solve, requiredDependenciesOf: (key) => states.get(key)?.requiredDependencies ?? NO_DEPENDENCIES, seed };
587
+ };
@@ -0,0 +1,84 @@
1
+ import ts from 'typescript';
2
+ import { type ValueFlowIndex } from './model.js';
3
+ import type { PrototypeKeyQuery } from '../host-mutation-keys.js';
4
+ import type { OriginAuthority } from './origin-authority.js';
5
+ /**
6
+ * Which property keys a computed key can take, proven from closed callers.
7
+ *
8
+ * Three's `Material.setValues( values )` and `Texture.setValues( values )`
9
+ * store `this[ key ] = newValue` for every `key` of `for ( const key in
10
+ * values )`. Read as "a store under any key", that one write tells every
11
+ * class-family, array-cell, host-mutation and reflection census that each
12
+ * material and texture may have grown an arbitrary property. But `values`
13
+ * only ever holds the options literals the program itself writes --
14
+ * `new MeshPhongMaterial( { color, flatShading: true } )` through the
15
+ * subclass's `this.setValues( parameters )`, and RenderTarget's local
16
+ * `values` literal plus its named writes -- so the key is one of a finite,
17
+ * enumerable set of names.
18
+ *
19
+ * The answer is an UPPER bound: every key the expression can evaluate to at
20
+ * run time is in the set. It is proven, never assumed:
21
+ *
22
+ * - A key spelled as a string (or numeric) literal, a conditional of such,
23
+ * or a binding whose every write is one of those. When the checker types
24
+ * the key as a literal union, the flow proof must fall inside it.
25
+ * - The binding of `for ( k in o )`: every own enumerable key of every value
26
+ * `o` can hold, plus the intrinsic `Object.prototype`'s -- which is why that
27
+ * arm carries an `Object` protocol requirement.
28
+ * - The binding of `for ( k of Object.keys( o ) )` or the first parameter of
29
+ * `Object.keys( o ).forEach( ( k ) => ... )`: own keys only, requiring the
30
+ * intact `Object.keys` and Array protocol.
31
+ *
32
+ * What `o` can hold comes from `sourceRecordDataWritePlanOf`, the shared
33
+ * record-origin authority (cells, complete parameter frames, factories,
34
+ * storage reads). Every origin must be an object literal with static keys, no
35
+ * spread, no accessor and no `__proto__`; `null`/`undefined` add nothing.
36
+ * Then each literal's key set is closed forward: every alias it reaches --
37
+ * cells, and parameters through resolved calls, including every override a
38
+ * method call can dispatch to -- is enumerated, a NAMED write through any of
39
+ * them adds its name, and any computed write, `delete`, bulk merge, method
40
+ * call through the record (which hands it out as `this`), `arguments`
41
+ * exposure, or escape into storage, a return, or an unresolved callee
42
+ * refuses. The order of writes does not matter: the set holds every name any
43
+ * write can add.
44
+ *
45
+ * `GEA_KEY_SET_DEBUG=1` prints every refusal with its reason and location.
46
+ */
47
+ /** @semanticCategory generic-primitive */
48
+ export interface ComputedKeySetAuthority extends OriginAuthority {
49
+ /**
50
+ * The intrinsic an enumeration depends on is intact: `('Object', undefined)`
51
+ * -- `Object.prototype` carries no enumerable string key a `for-in` would
52
+ * walk; `('Object', 'keys')` -- the static `Object.keys` is the original;
53
+ * `('Array', undefined)` -- the array iteration protocol. Absent, each
54
+ * requirement is registered on the flow's deferred intrinsic ledger (the
55
+ * production path, discharged by the sealed host-mutation census); with
56
+ * neither, the enumeration refuses.
57
+ */
58
+ readonly intrinsicIntact?: (intrinsic: 'Object' | 'Array', member: string | undefined, location: ts.Node) => boolean;
59
+ }
60
+ export type ComputedKeySetVerdict = {
61
+ readonly kind: 'keys';
62
+ readonly keys: ReadonlySet<string>;
63
+ } | {
64
+ readonly kind: 'refused';
65
+ readonly reason: string;
66
+ readonly at: ts.Node;
67
+ };
68
+ /**
69
+ * The complete set of property keys `keyExpression` can evaluate to, with the
70
+ * reason and location when that set cannot be proven. See the module comment.
71
+ */
72
+ export declare const computedKeySetVerdictOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, keyExpression: ts.Expression, authority: ComputedKeySetAuthority) => ComputedKeySetVerdict;
73
+ /** `for ( k of Object.keys( o ) )` and `Object.keys( o ).forEach( ... )` read these from Array.prototype and its iterator. */
74
+ export declare const arrayIterationKeys: PrototypeKeyQuery;
75
+ /**
76
+ * The complete set of property keys `keyExpression` can evaluate to, or null
77
+ * when the set is open or unknown. A for-in arm registers an `Object`
78
+ * prototype requirement (and an `Object.keys` arm an `Object.keys` member and
79
+ * `Array` requirement) through `authority.intrinsicIntact`, else on the flow's
80
+ * deferred intrinsic ledger -- so a consumer asks this inside its own ledger
81
+ * capture, exactly as it does for `sourceRecordDataWritePlanOf`'s prototype
82
+ * obligation.
83
+ */
84
+ export declare const computedKeySetOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, keyExpression: ts.Expression, authority: ComputedKeySetAuthority) => ReadonlySet<string> | null;