@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,762 @@
1
+ import { createRequire } from 'node:module';
2
+ import { templateArity } from '../../targets/cpp/host/host-members.js';
3
+ const require_ = createRequire(import.meta.url);
4
+ /**
5
+ * `nativeTypes`, narrowed at the boundary.
6
+ *
7
+ * Anything that is not a string-to-string record is refused whole rather than
8
+ * partially admitted: a table half of which is a carrier and half of which is
9
+ * something else would put this compiler back in the business of guessing.
10
+ */
11
+ const nativeTypesOf = (value) => {
12
+ if (typeof value !== 'object' || value === null)
13
+ return null;
14
+ const table = new Map();
15
+ for (const [name, carrier] of Object.entries(value)) {
16
+ if (typeof carrier !== 'string' || carrier.length === 0)
17
+ return null;
18
+ table.set(name, carrier);
19
+ }
20
+ return table;
21
+ };
22
+ let loaded;
23
+ let loadedSlice = null;
24
+ let loadedInterop = null;
25
+ /**
26
+ * The host type table, from the package that owns it.
27
+ *
28
+ * gea ships its declarations, its native implementation and this table
29
+ * together; the table is that package's statement about its own runtime, and a
30
+ * copy of it here would be a second authority that drifts the first time the
31
+ * runtime changes. So it is loaded, not restated.
32
+ *
33
+ * `require` rather than `import()`: this package is ESM, and Node's
34
+ * `require(esm)` (>= 22.12; this repo runs 24) resolves it synchronously, so
35
+ * `compile()` stays synchronous end to end and no caller has to await a plugin
36
+ * before compiling. A module graph with a top-level `await` would not load this
37
+ * way, and the `catch` below is what that fails into.
38
+ *
39
+ * `GEATSC2_GEA_PLUGIN` overrides the specifier with an explicit path -- how a
40
+ * different build of the plugin is measured against this compiler, and the only
41
+ * way an absolute path ever enters this decision.
42
+ *
43
+ * Two failures, told apart. The package simply not being installed is a
44
+ * configuration, not a defect: the table is empty, the plugin claims nothing
45
+ * but `jsx-element@1`, and every non-gea program compiles exactly as it did. A
46
+ * package that IS installed but does not answer -- a load error, a missing
47
+ * factory, a table that is not string-to-string -- is a defect, and it throws.
48
+ *
49
+ * That distinction is the whole point. Swallowing the second case returns an
50
+ * empty table indistinguishable from the first, so every gea program loses
51
+ * every carrier at once and is refused for obligations spelled in TypeScript
52
+ * names (`Document@1`) that nothing was ever going to claim -- a fail-open that
53
+ * reads as a compiler bug for as long as it takes to notice the plugin never
54
+ * loaded. A compiler that substituted a built-in table here would be back to
55
+ * hand-maintaining the data; one that quietly substituted an empty one is
56
+ * worse, because it looks like it read the data and disagreed.
57
+ */
58
+ export const geaNativeTypes = () => {
59
+ if (loaded !== undefined)
60
+ return loaded ?? new Map();
61
+ const requested = process.env.GEATSC2_GEA_PLUGIN;
62
+ const specifier = requested ?? '@geastack/geatsc-plugin-gea/host-shims';
63
+ let shims;
64
+ try {
65
+ shims = require_(specifier);
66
+ }
67
+ catch (error) {
68
+ // Not installed is a configuration; anything else is a defect. The
69
+ // override is held to the stricter rule on purpose: naming a plugin
70
+ // explicitly and then not finding it is a wrong path, not an absent
71
+ // package, and silently measuring against an empty table is exactly how a
72
+ // seam gets credited with a result it never produced.
73
+ const absent = error.code === 'MODULE_NOT_FOUND';
74
+ if (!absent || requested !== undefined) {
75
+ throw new Error(`gea host shims failed to load from '${specifier}': ${String(error)}`);
76
+ }
77
+ loaded = null;
78
+ return new Map();
79
+ }
80
+ const factory = shims.createGeaHostShims;
81
+ if (typeof factory !== 'function') {
82
+ throw new Error(`gea host shims at '${specifier}' export no createGeaHostShims function`);
83
+ }
84
+ const table = nativeTypesOf(factory().nativeTypes);
85
+ if (table === null) {
86
+ throw new Error(`gea host shims at '${specifier}' provided a nativeTypes table that is not string-to-string`);
87
+ }
88
+ loaded = table;
89
+ loadedSlice = factory();
90
+ return table;
91
+ };
92
+ /**
93
+ * The whole shim slice, once the table above has been admitted.
94
+ *
95
+ * Everything below reads a different field of the same statement, so they all
96
+ * go through the one load and the one narrowing gate: a package that answered
97
+ * a bad `nativeTypes` has already thrown by the time any of this is asked, and
98
+ * a package that is simply not installed answers every table empty.
99
+ */
100
+ const geaShims = () => {
101
+ geaNativeTypes();
102
+ return loadedSlice;
103
+ };
104
+ /** The member tables, exactly as the package states them; `null` when the package is not installed. */
105
+ export const geaMemberTables = () => geaShims();
106
+ /** A string-to-string table, or nothing -- the same narrowing `nativeTypes` gets, for the flat tables. */
107
+ const flatTable = (value) => {
108
+ const rows = new Map();
109
+ for (const [name, emit] of Object.entries(value ?? {})) {
110
+ if (typeof emit === 'string' && emit.length > 0)
111
+ rows.set(name, emit);
112
+ }
113
+ return rows;
114
+ };
115
+ /**
116
+ * A namespace member table, flattened to one key per member.
117
+ *
118
+ * The package states these two levels deep -- path, then member -- and states
119
+ * a nested namespace by spelling its whole path in the outer key
120
+ * (`navigator.bluetooth.keyboard`). Flattening to `path.member` keeps that
121
+ * spelling intact and makes the two questions this compiler asks -- "what does
122
+ * this member render to" and "is this path itself a namespace" -- one lookup
123
+ * and one prefix test over the same key space.
124
+ */
125
+ const nestedTable = (value) => {
126
+ const rows = new Map();
127
+ for (const [path, members] of Object.entries(value ?? {})) {
128
+ for (const [member, emit] of Object.entries(members ?? {})) {
129
+ if (typeof emit === 'string' && emit.length > 0)
130
+ rows.set(`${path}.${member}`, emit);
131
+ }
132
+ }
133
+ return rows;
134
+ };
135
+ /**
136
+ * The global names that are host namespaces rather than values.
137
+ *
138
+ * `deviceInfo` is not an object the program can hold: every use of it is a
139
+ * path to a C++ spelling, and the value itself never exists at run time. The
140
+ * table's own value -- the C++ prefix -- is deliberately not what this compiler
141
+ * keys by, because the member tables are keyed by the PROGRAM's path
142
+ * (`deviceInfo.deviceId`, `navigator.bluetooth.keyboard.tap`), and following the
143
+ * program's spelling is what makes a nested namespace one lookup rather than a
144
+ * translation step that could disagree.
145
+ *
146
+ * `hostGlobalObjects` names join this set too, but only the ones the package
147
+ * ALSO states members under (`hostNamespaceMethods.localStorage.*`, etc): the
148
+ * same "a path cannot be a namespace here and have no members there" rule
149
+ * `targets/cpp/host-members.ts`'s `isHostNamespacePath` already applies to
150
+ * every nested path, asked here of a top-level one. `localStorage` states
151
+ * only `hostGlobalObjects` -- unlike `navigator`/`window`, which state both,
152
+ * because a program may also want to HOLD one of those as a value -- but every
153
+ * one of its members (`gea::host::Storage.getItem`, `.setItem`, ...) is
154
+ * already spelled the same fixed-path-call shape `Display`'s are, with no
155
+ * `{receiver}` slot, so it is a namespace root by the identical test. Without
156
+ * this a `localStorage.getItem(...)` census-admitted `GeaLocalStorage` as an
157
+ * ordinary host protocol needing its own native boundary, when the host
158
+ * states no carrier for that name at all -- only for the global itself, under
159
+ * a different table.
160
+ */
161
+ export const geaHostNamespaceRoots = () => {
162
+ const shims = geaShims();
163
+ const roots = new Set(flatTable(shims?.hostNamespaces).keys());
164
+ const methods = shims?.hostNamespaceMethods ?? {};
165
+ const properties = shims?.hostNamespaceProperties ?? {};
166
+ for (const name of Object.keys(shims?.hostGlobalObjects ?? {})) {
167
+ if (Object.keys(methods[name] ?? {}).length > 0 || Object.keys(properties[name] ?? {}).length > 0)
168
+ roots.add(name);
169
+ }
170
+ // Console belongs to the compiler's core host protocol. The legacy shim
171
+ // table also names it as a namespace; importing that claim bypasses the
172
+ // core variadic renderer and packs statically typed arguments into any[].
173
+ // Keep the core's typed call path, just as coreHostMembers wins collisions.
174
+ roots.delete('console');
175
+ return roots;
176
+ };
177
+ /**
178
+ * The C++ type of the one object a host holds behind a namespace root.
179
+ *
180
+ * A root is a PATH, not a cell: `window.innerWidth` renders
181
+ * `gea::host::window.innerWidth()` and no object named `window` is ever
182
+ * materialized. But a path is not nothing either -- `gea::host::window` is a
183
+ * real `inline constexpr WindowFacade`, and this is the package saying so.
184
+ * Without it, a compiler asked what carries the ambient `window` has only its
185
+ * lib.dom declaration to answer from, and expands `Window & typeof globalThis`
186
+ * into a struct of its own.
187
+ *
188
+ * Restricted to names that really are roots (`geaHostNamespaceRoots`): the
189
+ * package's own table is keyed by global name, and a global it states a type
190
+ * for but no members under is a VALUE this compiler already places as a host
191
+ * constant or singleton -- claiming a path carrier for one would be a second
192
+ * authority over a name the first already answered.
193
+ */
194
+ export const geaHostNamespaceRootTypes = () => {
195
+ const roots = geaHostNamespaceRoots();
196
+ const rows = new Map();
197
+ for (const [name, type] of flatTable(geaShims()?.hostGlobalObjectTypes)) {
198
+ if (roots.has(name))
199
+ rows.set(name, type);
200
+ }
201
+ return rows;
202
+ };
203
+ /**
204
+ * What each namespace member renders to when it is CALLED.
205
+ *
206
+ * Both tables the package states, the NATIVE one first: where a member appears
207
+ * in both, the native row is the one that survives.
208
+ *
209
+ * The two tables are not two spellings of one fact. `hostNamespaceMethods`
210
+ * states a bare C++ path, which can only ever be called -- append arguments and
211
+ * that is the whole call. `nativeNamespaceMethods` states a TEMPLATE, which can
212
+ * also place the call inside something else, and the package writes one exactly
213
+ * where the bare path would lose the result's type: `getUserMedia` is
214
+ * `gea::host::MediaStream(gea::host::media::get_user_media_audio({args}))`,
215
+ * because the underlying host function hands back an opaque handle id and the
216
+ * `MediaStream` is what the program was promised.
217
+ *
218
+ * Precedence used to run the other way, with the bare row winning and the
219
+ * template admitted only when it reduced to a bare path (`gea::host::image.make
220
+ * ({args})` does; the `MediaStream` wrapper does not). That is the two-authority
221
+ * failure in its silent form: both tables answered, the LESS informative answer
222
+ * won, and the loss showed up three layers later as a `unsigned int` assigned
223
+ * into a `gea::Promise<gea::host::MediaStream>` that clang refused. A table that
224
+ * states more cannot be outranked by one that states less.
225
+ *
226
+ * Measured blast radius, against the package as it ships: 25 native rows, 21 of
227
+ * which agree with their bare twin exactly (`gea::host::Battery.level` versus
228
+ * `gea::host::Battery.level({args})`) and render identically either way. Of the
229
+ * remaining four, three are members the bare table does not state at all, and
230
+ * `navigator.mediaDevices.getUserMedia` is the single row where the two really
231
+ * disagree -- so flipping the precedence changes exactly the one call this
232
+ * exists to fix, plus `http.createServer`, which no table could reach before
233
+ * because its template does not reduce.
234
+ */
235
+ export const geaHostNamespaceMethods = () => {
236
+ const rows = new Map();
237
+ for (const [path, members] of Object.entries(geaShims()?.nativeNamespaceMethods ?? {})) {
238
+ for (const [member, binding] of Object.entries(members ?? {})) {
239
+ if (typeof binding?.emit === 'string' && binding.emit.length > 0)
240
+ rows.set(`${path}.${member}`, { kind: 'template', emit: binding.emit });
241
+ }
242
+ }
243
+ for (const [key, text] of nestedTable(geaShims()?.hostNamespaceMethods)) {
244
+ if (!rows.has(key))
245
+ rows.set(key, { kind: 'path', text });
246
+ }
247
+ return rows;
248
+ };
249
+ /**
250
+ * What each namespace member renders to when it is READ.
251
+ *
252
+ * `hostNamespaceProperties` alone, with `()` appended for every member the
253
+ * package also names in `hostNamespacePropertyAccessors`. That second table is
254
+ * a name SET, not a spelling table -- `{ Display: ['ctx', 'width', ...] }` --
255
+ * and what it states is that the C++ behind the spelling is a member function:
256
+ * `DisplayFacade::ctx()` and `DisplayFacade::width()` really are methods, so a
257
+ * read that did not call them would name a member function rather than read a
258
+ * value. v1 answers the same question the same way (`qualified-call` versus
259
+ * `qualified-value` in `host-runtime-protocol.ts`).
260
+ *
261
+ * The SETTER table is deliberately not merged in here. It states a different
262
+ * spelling for a different operation -- `Display.orientation` reads
263
+ * `gea::host::Display.orientation()` and writes
264
+ * `gea::host::Display.setOrientation` -- and every one of its 12 rows collides
265
+ * with a read row, so merging made the setter win and turned every one of those
266
+ * reads into a reference to the setter. It is its own table instead, right
267
+ * below (`geaHostNamespacePropertySetters`), for the write side of exactly
268
+ * this same member -- dropping it entirely left a namespace WRITE
269
+ * (`Display.autoRotate = true`) with nowhere to resolve, so `emitFieldStore`
270
+ * fell through to the ordinary struct-field path, asked `operandText` for a
271
+ * namespace receiver's value, and hit the "host namespace used as a value"
272
+ * refusal that path states for exactly this reason.
273
+ */
274
+ export const geaHostNamespaceProperties = () => {
275
+ const shims = geaShims();
276
+ const accessors = new Set();
277
+ for (const [path, members] of Object.entries(shims?.hostNamespacePropertyAccessors ?? {})) {
278
+ if (!Array.isArray(members))
279
+ continue;
280
+ for (const member of members)
281
+ if (typeof member === 'string')
282
+ accessors.add(`${path}.${member}`);
283
+ }
284
+ const rows = new Map();
285
+ for (const [key, emit] of nestedTable(shims?.hostNamespaceProperties)) {
286
+ rows.set(key, accessors.has(key) ? `${emit}()` : emit);
287
+ }
288
+ return rows;
289
+ };
290
+ /**
291
+ * What each namespace member renders to when it is WRITTEN.
292
+ *
293
+ * The write-side twin of `geaHostNamespaceProperties`, over
294
+ * `hostNamespacePropertySetters` instead of `hostNamespaceProperties`. Every
295
+ * row here is already a full call spelling -- `gea::host::Display.setAutoRotate`
296
+ * -- the same shape `hostNamespaceMethods` rows are, so nothing here appends a
297
+ * trailing `()` the way the read side's accessor rows do: the value argument
298
+ * fills that call's own parentheses at the write site instead.
299
+ */
300
+ export const geaHostNamespacePropertySetters = () => nestedTable(geaShims()?.hostNamespacePropertySetters);
301
+ /** The host's free functions, by the name the program writes. */
302
+ export const geaHostFunctions = () => flatTable(geaShims()?.embeddedHostFunctions);
303
+ /**
304
+ * `new <AmbientConstructor>(...)` spellings, transposed from the package's own
305
+ * `nativeConstructors` -- one of the two tables the package states a
306
+ * construction in, unioned with the other by `geaHostConstructors`
307
+ * (constructors.ts). This one (keyed by the constructor interface's declared name --
308
+ * `AudioConstructor`) to a `HostConstructorTable` (keyed by the CARRIER
309
+ * `nativeTypes` gives that same declared name, falling back to the declared
310
+ * name itself for a row `nativeTypes` does not also carry -- the identical
311
+ * fallback `HostConstructorTable`'s own doc comment states, and the same
312
+ * lookup `nativeHandleInvocationText` performs at the call site:
313
+ * `callee.native ?? protocol`).
314
+ *
315
+ * Arity is never stated by the package: it is counted off the template's own
316
+ * highest `{argN}` slot (`templateArity`, the same helper `addDocumentRows`,
317
+ * members.ts, already uses for a template with no receiver), so the arity a
318
+ * construction is checked against can never drift from the template that
319
+ * actually renders it.
320
+ */
321
+ export const geaAmbientConstructors = () => {
322
+ const rows = new Map();
323
+ const types = geaNativeTypes();
324
+ for (const [declaredName, emit] of Object.entries(geaShims()?.nativeConstructors ?? {})) {
325
+ if (typeof emit !== 'string' || emit.length === 0)
326
+ continue;
327
+ const carrier = types.get(declaredName) ?? declaredName;
328
+ rows.set(carrier, { emit, arity: templateArity(emit) });
329
+ }
330
+ return rows;
331
+ };
332
+ /** The host's global constants, by the name the program writes. */
333
+ export const geaHostConstants = () => {
334
+ const rows = new Map();
335
+ for (const [name, constant] of Object.entries(geaShims()?.embeddedHostConstants ?? {})) {
336
+ if (typeof constant?.emit === 'string' && constant.emit.length > 0)
337
+ rows.set(name, constant.emit);
338
+ }
339
+ return rows;
340
+ };
341
+ /**
342
+ * One of the package's templates, as this backend spells its slots.
343
+ *
344
+ * The package writes `$receiver` / `$args` / `$value`; `fillHostTemplate` reads
345
+ * `{receiver}` / `{args}` / `{value}`. Two spellings of the same three slots,
346
+ * so this is the transposition every other table here already gets -- not a
347
+ * rewrite of the template, whose text is otherwise carried through unchanged,
348
+ * comments and all. Shared with `members.ts` so the key a preamble is stored
349
+ * under and the row it belongs to are the same string by construction.
350
+ */
351
+ export const canvasSlotSpelling = (emit) => emit.split('$receiver').join('{receiver}').split('$args').join('{args}').split('$value').join('{value}');
352
+ /**
353
+ * The plugin package's own canvas dispatch, as C++ this unit carries.
354
+ *
355
+ * Every canvas row states a `gea_ir::canvas*` wrapper, and this is what defines
356
+ * them: `directCanvasInteropSource`, the same generator v1 emits into every
357
+ * canvas program. It is called with `boxedValueModel: false`, which drops the
358
+ * four overloads that exist only to accept geatsc v1's boxed carrier and its
359
+ * `gea_f32` scalar -- neither type is in a unit this compiler emits -- and
360
+ * changes nothing else.
361
+ *
362
+ * Loaded from a sibling of the shim module, so an explicitly pointed-at build
363
+ * of the plugin answers both questions. If it cannot answer, that throws: a
364
+ * package that states canvas MEMBERS but ships no generator for them would
365
+ * otherwise emit calls to an undefined namespace, and a link error names the
366
+ * symbol rather than the cause.
367
+ */
368
+ export const geaCanvasInterop = () => {
369
+ if (loadedInterop !== null)
370
+ return loadedInterop;
371
+ const requested = process.env.GEATSC2_GEA_PLUGIN;
372
+ const shimSuffix = 'host-shims';
373
+ const specifier = requested === undefined
374
+ ? '@geastack/geatsc-plugin-gea/cpp-ir'
375
+ : requested.endsWith(shimSuffix)
376
+ ? `${requested.slice(0, requested.length - shimSuffix.length)}cpp-ir`
377
+ : requested;
378
+ const loaded = require_(specifier);
379
+ const generate = loaded
380
+ .directCanvasInteropSource;
381
+ if (typeof generate !== 'function') {
382
+ throw new Error(`gea canvas interop at '${specifier}' exports no directCanvasInteropSource function`);
383
+ }
384
+ // The namespace the templates name. The generator produces the members
385
+ // only -- v1 opens `namespace gea_ir` around a larger block that also holds
386
+ // its stores and mounted renderers, none of which this compiler emits.
387
+ loadedInterop = ['namespace gea_ir {', ...generate(true, { boxedValueModel: false }), '} // namespace gea_ir'];
388
+ return loadedInterop;
389
+ };
390
+ /**
391
+ * The declarations a unit must carry before it may name a host spelling.
392
+ *
393
+ * Keyed by the spelling, because that is the question: a unit that emits
394
+ * `gea::host::device_info::deviceId` needs whatever declares it, and a unit that does
395
+ * not must not carry it. Every row this package states today is the same
396
+ * guarded `#include "gea/embedded.h"`, but they are stated one per spelling and
397
+ * are read that way -- collapsing them to a single preamble here would be this
398
+ * compiler deciding that a fact about 331 symbols is really a fact about one.
399
+ */
400
+ /**
401
+ * The guarded `#include "gea/embedded.h"` every one of the package's host
402
+ * spellings opens with, on its own.
403
+ *
404
+ * Taken from the package rather than restated, for the reason `geaHostPreambles`
405
+ * gives below: one spelling of the engine include in this compilation. A unit
406
+ * that needs it for a reactive field's cell but names no host spelling has
407
+ * nowhere else to get it, and one that needs it for both gets the identical
408
+ * string, so the preamble set collapses the two.
409
+ *
410
+ * Empty when the package is absent -- there is then no engine to include, and
411
+ * no reactive cell either.
412
+ */
413
+ export const geaEmbeddedIncludeGuard = () => {
414
+ for (const lines of Object.values(geaShims()?.hostExternDeclarations ?? {})) {
415
+ if (Array.isArray(lines) && lines.length >= 4 && lines.every((line) => typeof line === 'string'))
416
+ return lines.slice(0, 4);
417
+ }
418
+ return [];
419
+ };
420
+ export const geaHostPreambles = () => {
421
+ const rows = new Map();
422
+ const guard = [];
423
+ for (const [spelling, lines] of Object.entries(geaShims()?.hostExternDeclarations ?? {})) {
424
+ if (!Array.isArray(lines) || !lines.every((line) => typeof line === 'string'))
425
+ continue;
426
+ rows.set(spelling, lines);
427
+ // Every one of the package's 331 entries opens with the same guarded
428
+ // include; the canvas block needs it too, and taking it from the package
429
+ // rather than restating it keeps one spelling of it in the compilation.
430
+ if (guard.length === 0 && lines.length >= 4)
431
+ guard.push(...lines.slice(0, 4));
432
+ }
433
+ const canvas = geaCanvasTemplates();
434
+ if (canvas.length > 0 && guard.length > 0) {
435
+ // The block after the guard, in the same entry, so the include is
436
+ // physically ahead of the C++ that needs it whatever order the spellings
437
+ // are visited in. One string, not one per line: the preamble is unioned
438
+ // into a set, and a 283-line block whose blank lines and closing braces
439
+ // repeat cannot survive that.
440
+ const lines = [...guard, geaCanvasInterop().join('\n')];
441
+ for (const spelling of canvas)
442
+ rows.set(spelling, lines);
443
+ }
444
+ // A native namespace TEMPLATE is looked up by its own text, and the package
445
+ // keys its declarations by SYMBOL -- so
446
+ // `gea::host::MediaStream(gea::host::media::get_user_media_audio({args}))`
447
+ // finds nothing, and the unit that calls it would carry neither declaration.
448
+ //
449
+ // What the template needs is not a guess: it is a piece of C++ this
450
+ // compilation will emit verbatim, so every declared symbol whose spelling
451
+ // OCCURS IN IT is a symbol the emitted line names, and every one of them is
452
+ // therefore needed. That is why containment is the test rather than a
453
+ // reduction to a single bare path -- the whole reason a template exists is
454
+ // that it names more than one thing (a host function AND the type its result
455
+ // is carried as), and only the full text says which.
456
+ //
457
+ // Stated here rather than in the backend because it is a fact about how this
458
+ // package writes its two tables, and the backend's preamble lookup is one
459
+ // exact-key map for every host it may load.
460
+ const declaredSymbols = [...rows];
461
+ for (const spelling of geaHostNamespaceMethods().values()) {
462
+ if (spelling.kind !== 'template' || rows.has(spelling.emit))
463
+ continue;
464
+ const lines = new Set();
465
+ for (const [symbol, declared] of declaredSymbols) {
466
+ if (spelling.emit.includes(symbol))
467
+ for (const line of declared)
468
+ lines.add(line);
469
+ }
470
+ if (lines.size > 0)
471
+ rows.set(spelling.emit, [...lines]);
472
+ }
473
+ return rows;
474
+ };
475
+ /**
476
+ * The spellings the canvas block defines, as the package states them.
477
+ *
478
+ * The key a preamble is looked up by is the member row's own template, so
479
+ * these are the templates -- `emit` for the methods and `getContext`, `store`
480
+ * for the settable properties -- exactly as `plugins/gea/members.ts` installs
481
+ * them.
482
+ */
483
+ const geaCanvasTemplates = () => {
484
+ const shims = geaShims();
485
+ if (!shims)
486
+ return [];
487
+ const templates = new Set();
488
+ for (const table of [shims.canvasContextMethods, shims.canvasContextPropertySetters, shims.domElementMethods]) {
489
+ for (const emit of Object.values(table ?? {})) {
490
+ if (typeof emit === 'string' && emit.length > 0)
491
+ templates.add(canvasSlotSpelling(emit));
492
+ }
493
+ }
494
+ return [...templates];
495
+ };
496
+ /**
497
+ * The host object model gea installs, and the spellings that render it.
498
+ *
499
+ * TypeScript has no document. `Document`, `Element` and `HTMLElement` are
500
+ * declared in `lib.dom.d.ts`, which is a *host's* description of itself, not
501
+ * the language's -- a generic TypeScript-to-C++ compiler that knew how to
502
+ * render `document.getElementById` would be asserting something about the
503
+ * program's environment that nothing in the program says. So the backend does
504
+ * not know these, and this plugin does.
505
+ *
506
+ * The claim and the template live together on purpose. `nativeProtocols` says
507
+ * which protocols may be read at all and `hostMembers` says what each member
508
+ * renders to; when those two sit in different layers they become two
509
+ * authorities over one question, and the way they fail is silent -- preflight
510
+ * certifies a program on the strength of the claim, and emission then refuses
511
+ * it by name because the template was never there. Stating both here means a
512
+ * protocol cannot be claimed without its spelling arriving with it.
513
+ *
514
+ * What is deliberately *not* claimed matters as much as what is. Each interface
515
+ * below is a small, real subset -- the members corpus programs actually call --
516
+ * rather than the full `lib.dom.d.ts` surface. A member nothing renders is
517
+ * refused by name at the call site, which is the failure this table exists to
518
+ * produce instead of a call to a symbol the runtime never declared.
519
+ */
520
+ export const geaHostMembers = new Map([
521
+ // The document singleton. `gea::host::document` is a real node table in
522
+ // `gea_runtime.h`, mirroring the engine's own singleton-of-nodes shape the
523
+ // way `gea::jsx` already does, so emitted C++ runs standalone in the corpus
524
+ // and is replaced by the engine binding on device.
525
+ // Keyed by the CARRIER, not by the declared type name. `nativeTypes` maps
526
+ // `Document` to `gea::embedded::ui::Document` and thirteen DOM interface
527
+ // names to one `NodeHandle`, so a carrier-keyed row is stated once and
528
+ // answers for every name that reaches it. A name-keyed table could not:
529
+ // `HTMLElement.getAttribute` is declared one inheritance step away on
530
+ // `Element`, and `hostMemberOf`'s flat lookup does not walk up -- the exact
531
+ // miss `emit-properties.ts` records in its own comment. There is no step to
532
+ // walk once both names carry `NodeHandle`.
533
+ ['gea::embedded::ui::Document.getElementById', { kind: 'method', emit: 'gea::host::document::getElementById({arg0})', arity: 1 }],
534
+ ['gea::embedded::ui::Document.querySelector', { kind: 'method', emit: 'gea::host::document::querySelector({arg0})', arity: 1 }],
535
+ ['gea::embedded::ui::Document.createElement', { kind: 'method', emit: 'gea::host::document::createElement({arg0})', arity: 1 }],
536
+ ['gea::embedded::ui::Document.createTextNode', { kind: 'method', emit: 'gea::host::document::createTextNode({arg0})', arity: 1 }],
537
+ ['gea::embedded::ui::Document.body', { kind: 'property', store: null, emit: 'gea::host::document::body()' }],
538
+ // Element instance members. Flat free functions taking the handle first,
539
+ // not dot-calls on `NativeHandle`: the handle is a shared carrier spelling
540
+ // for every protocol, so the member set belongs to the protocol's namespace
541
+ // rather than to the handle type, which has no idea which protocol it is
542
+ // carrying.
543
+ [
544
+ 'gea::embedded::ui::NodeHandle.setAttribute',
545
+ { kind: 'method', emit: 'gea::host::element::setAttribute({receiver}, {arg0}, {arg1})', arity: 2 }
546
+ ],
547
+ [
548
+ 'gea::embedded::ui::NodeHandle.getAttribute',
549
+ { kind: 'method', emit: 'gea::host::element::getAttribute({receiver}, {arg0})', arity: 1 }
550
+ ],
551
+ [
552
+ 'gea::embedded::ui::NodeHandle.removeAttribute',
553
+ { kind: 'method', emit: 'gea::host::element::removeAttribute({receiver}, {arg0})', arity: 1 }
554
+ ],
555
+ [
556
+ 'gea::embedded::ui::NodeHandle.hasAttribute',
557
+ { kind: 'method', emit: 'gea::host::element::hasAttribute({receiver}, {arg0})', arity: 1 }
558
+ ],
559
+ ['gea::embedded::ui::NodeHandle.appendChild', { kind: 'method', emit: 'gea::host::element::appendChild({receiver}, {arg0})', arity: 1 }],
560
+ ['gea::embedded::ui::NodeHandle.remove', { kind: 'method', emit: 'gea::host::element::remove({receiver})', arity: 0 }]
561
+ ]);
562
+ /**
563
+ * The protocols this plugin's runtime installs.
564
+ *
565
+ * `jsx-element@1` is here because JSX is not a TypeScript *value* form at all:
566
+ * the language parses it and hands back a type the host decides the meaning of,
567
+ * and the meaning here is this plugin's element. `AudioContext@1` and
568
+ * `HTMLElement@1` are `lib.dom.d.ts` interfaces on the same footing as
569
+ * `Document` above.
570
+ *
571
+ * `AudioContext@1` claims no members below, on purpose: the protocol is
572
+ * readable -- a program may hold one and pass it around -- and every call on it
573
+ * refuses by name, which is the honest state of a boundary whose implementation
574
+ * is a tag struct and nothing else.
575
+ */
576
+ export const geaNativeProtocols = new Set(['jsx-element@1']);
577
+ /**
578
+ * The carrier a JSX element value is held in, added to the package's own table
579
+ * under the protocol's own name.
580
+ *
581
+ * `jsx-element@1` is the one protocol this plugin installs that the package
582
+ * states no row for, because it is not a declared TypeScript type: `JSX.Element`
583
+ * is an empty interface the language hands back from an element expression, and
584
+ * what it *is* on this host is an element of the engine's tree -- the same thing
585
+ * `Element`/`GeaElement` already name. So the spelling is read off the package's
586
+ * own `Element` row rather than written here: one authority, and a package that
587
+ * moves its element type moves this with it.
588
+ *
589
+ * Without the row the protocol carries `gea::NativeHandle<gea_native_protocol_jsx_element_v1>`,
590
+ * a tag type with no tree behind it -- C++ that compiles and renders nothing.
591
+ */
592
+ export const geaJsxElementCarrier = () => geaNativeTypes().get('Element') ?? null;
593
+ /**
594
+ * The declared name a *component function's* return type spells the element
595
+ * marker under, bound to the identical carrier `geaJsxElementCarrier` reads
596
+ * off `Element` above -- a second row for the same fact, not a second fact.
597
+ *
598
+ * `@geastack/core`'s `index.d.ts` declares `export interface GeaJsxElement
599
+ * {}`, has `namespace JSX { interface Element extends GeaJsxElement {} }`,
600
+ * and types every component (`function Image(props: ImageProps):
601
+ * GeaJsxElement`) by the base name rather than by `JSX.Element` -- two
602
+ * distinct declarations, structurally identical and semantically the one
603
+ * concept, but two different symbols the checker never unifies. A value-form
604
+ * JSX element (`<Image .../>`, `plugins/gea/lower.ts`'s `lowerElement`)
605
+ * desugars to a direct call of that function, so the CALL's result carries
606
+ * `Image`'s own declared return type -- `GeaJsxElement`'s declaration, not
607
+ * `JSX.Element`'s -- and `hostProtocolBindings`'s per-element census walk
608
+ * (`semantics/host-protocols.ts`), keyed on the JSX *expression* node's own
609
+ * type, never reaches it.
610
+ *
611
+ * Without this row `GeaJsxElement`'s declaration binds nothing, and
612
+ * `derive.ts`'s ambient/empty-body branch answers a `native-record-ref` to a
613
+ * zero-field struct -- code that compiles and renders nothing, the exact
614
+ * failure `geaJsxElementCarrier`'s own comment already names for the sibling
615
+ * case. Naming it here, rather than teaching the census walk to follow a
616
+ * type's own `extends` chain, keeps the fact singular: both spellings of
617
+ * "this is the host's element" resolve to the one carrier the package states
618
+ * for `Element`, and a package that moves its element type moves both rows
619
+ * with it.
620
+ */
621
+ const geaJsxElementReturnCarrier = () => geaNativeTypes().get('Element') ?? null;
622
+ /**
623
+ * The engine class a 2D canvas context is held in.
624
+ *
625
+ * The second carrier the package states no row for, and for a reason worth
626
+ * writing down: v1 never needed one. It reaches the canvas through a `gea_ir::`
627
+ * namespace it GENERATES into each program -- `gea_ir::canvasFillRect(ctx, ...)`
628
+ * and friends, produced by the plugin package's own `cpp-ir.ts` from a v1 IR
629
+ * bundle -- so the context's own C++ type is a fact that block knows and the
630
+ * shim tables never had to. This compiler has no such bundle and emits no such
631
+ * block: it calls the engine's class directly, and so it has to know what the
632
+ * class is.
633
+ *
634
+ * The name is the engine's own, from `core/packages/engine/ui/canvas_element.h`,
635
+ * and it is the same one the package's generated block names in the direct
636
+ * (unboxed) canvas mode `GEA_EMBEDDED_DIRECT_CANVAS_CONTEXT` selects:
637
+ * `gea::embedded::ui::CanvasElement(node.id()).getContext2D()` yields exactly
638
+ * this type. It belongs in the package beside the canvas member tables, and it
639
+ * is here rather than there because adding a `nativeTypes` row changes what v1
640
+ * does with the name too, and that is not a change this compiler's work should
641
+ * make on v1's behalf.
642
+ */
643
+ export const geaCanvasContextCarrier = 'gea::embedded::ui::CanvasRenderingContext2D';
644
+ /**
645
+ * The package's table, plus the carriers it states no explicit `nativeTypes`
646
+ * row for.
647
+ *
648
+ * `WebSocket`, `RTCPeerConnection` and `Audio` are the third such case, beside
649
+ * the two below. The package states these three only in `embeddedHostClasses`
650
+ * (a `wrapper` to construct, no `nativeTypes` entry), and this is not an
651
+ * oversight to route around: v1's own compiler resolves a carrier the
652
+ * identical way, `nativeTypeName(sourceName) ?? embeddedHostClassBindings[
653
+ * sourceName]?.wrapper` (`nativeCarrierRoles`, `geatsc/src/host-shims/
654
+ * host-runtime-protocol.ts`), because these three are `lib.dom.d.ts`
655
+ * `interface X` + `declare var X: { new(...): X }` pairs (not `declare
656
+ * class`), and this compiler's own `bindNativeType` (`semantics/host-
657
+ * protocols.ts`) has exactly one lookup for any of them: the flat
658
+ * `nativeTypes` map, keyed by the declared name. Reading the package's own
659
+ * fallback here is the transposition this file already performs for every
660
+ * other table, not a rule invented for these three names.
661
+ */
662
+ export const geaProtocolCarriers = () => {
663
+ const carriers = new Map(geaNativeTypes());
664
+ const element = geaJsxElementCarrier();
665
+ if (element !== null)
666
+ carriers.set('jsx-element', element);
667
+ const returnElement = geaJsxElementReturnCarrier();
668
+ if (returnElement !== null)
669
+ carriers.set('GeaJsxElement', returnElement);
670
+ // Only where the package really does claim the canvas: its member tables are
671
+ // what say this host has one, so a package that ships none claims no carrier
672
+ // either and a program naming `CanvasRenderingContext2D` keeps whatever the
673
+ // language's own `lib.dom` declaration makes of it.
674
+ if (Object.keys(geaMemberTables()?.canvasContextMethods ?? {}).length > 0) {
675
+ carriers.set('CanvasRenderingContext2D', geaCanvasContextCarrier);
676
+ }
677
+ for (const [className, entry] of Object.entries(geaMemberTables()?.embeddedHostClasses ?? {})) {
678
+ const wrapper = entry.wrapper;
679
+ if (typeof wrapper !== 'string' || wrapper.length === 0)
680
+ continue;
681
+ if (!carriers.has(className))
682
+ carriers.set(className, wrapper);
683
+ // `declare var MediaStream: { new(): MediaStream; ... }` -- an anonymous
684
+ // constructor object type, not a named interface -- and this compiler's
685
+ // own census gives that anonymous type's `class-constructor` shape the
686
+ // display name `${className}Constructor` (`MediaStreamConstructor`,
687
+ // `AudioConstructor`, ...) once it has no real declared name of its own,
688
+ // the same way `lib.es5.d.ts`'s named `ErrorConstructor`/`DateConstructor`
689
+ // already read here through the flat `nativeTypes` lookup. Measured
690
+ // directly (`node scripts/corpus.mjs --only=voice-notes`): without this
691
+ // row, `new MediaStream()`/`new MediaRecorder(...)`/`new Audio(...)`
692
+ // refuse on `native-boundary:MediaStreamConstructor@1` even though the
693
+ // INSTANCE carrier (`MediaStream` above) is already claimed -- the
694
+ // constructor reference and the instance it hands back are two different
695
+ // checker types needing two different claims.
696
+ if (!carriers.has(`${className}Constructor`))
697
+ carriers.set(`${className}Constructor`, wrapper);
698
+ }
699
+ return carriers;
700
+ };
701
+ /**
702
+ * The globals this host holds one instance of and reaches by name.
703
+ *
704
+ * `document` is derived, not written: the package ships `nativeDocumentMethods`
705
+ * -- a member table with no receiver list, every spelling going through
706
+ * `gea::embedded::ui::Document::instance()` -- and a receiverless member table
707
+ * for an object IS the statement that the object is reached by name. A package
708
+ * that stops shipping one stops claiming this, which is the correct answer.
709
+ *
710
+ * Left as a value, a read of `document` emitted `extern gea::embedded::ui::Document
711
+ * document;` (a cell the engine never defines) and copied it into a local of a
712
+ * type whose default constructor is private.
713
+ */
714
+ export const geaHostSingletons = () => {
715
+ const methods = geaMemberTables()?.nativeDocumentMethods;
716
+ const stated = methods !== undefined && Object.keys(methods).length > 0;
717
+ return stated ? new Set(['document']) : new Set();
718
+ };
719
+ /**
720
+ * What `<>...</>` builds on this host, read from the package rather than named
721
+ * here.
722
+ *
723
+ * A fragment has no tag, so there is nothing for the intrinsic recipe to pass
724
+ * and no way to derive the answer from the syntax. gea's answer is its
725
+ * document's own `createDocumentFragment`, which the package already ships as
726
+ * a receiverless document method returning a `NodeHandle` -- the engine's
727
+ * `Document::createDocumentFragment` (`engine/ui/document.h`), whose node
728
+ * `appendChild` splices into the parent instead of nesting.
729
+ *
730
+ * Reading the package's row rather than writing the call here is the same rule
731
+ * every other spelling in this file follows: a second copy of
732
+ * `gea::embedded::ui::Document::instance().createDocumentFragment()` would be a
733
+ * second authority over a question the package answers, free to drift from it.
734
+ * A package that stops shipping the row leaves this `null`, and every fragment
735
+ * is then refused by name at emission rather than rendered through a call the
736
+ * host no longer has.
737
+ */
738
+ export const geaElementFragment = () => {
739
+ const emit = geaMemberTables()?.nativeDocumentMethods?.createDocumentFragment?.emit;
740
+ return typeof emit === 'string' && emit.length > 0 ? emit : null;
741
+ };
742
+ /**
743
+ * The intrinsic tags gea builds as a TEXT NODE when they hold one text run.
744
+ *
745
+ * Read from the package rather than restated here, for the same reason every
746
+ * other host spelling is: `isTextNodeTag` in its `cpp-template-renderer.ts` is
747
+ * the list v1 has always used, and a second copy in this compiler is a second
748
+ * authority that can drift from it.
749
+ *
750
+ * Lowercased and de-duplicated on the way through, because the tag this
751
+ * compiler compares against is the one the SOURCE wrote and JSX intrinsics are
752
+ * lowercase by convention rather than by rule -- the same normalization the
753
+ * engine's own `Document::createElement` does before it dispatches.
754
+ */
755
+ export const geaElementTextLeafTags = () => {
756
+ const tags = new Set();
757
+ for (const tag of geaMemberTables()?.elementTextLeafTags ?? []) {
758
+ if (typeof tag === 'string' && tag.length > 0)
759
+ tags.add(tag.toLowerCase());
760
+ }
761
+ return [...tags];
762
+ };