@virune/compiler 1.1.0-rc.0

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 (300) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +2 -0
  3. package/dist/src/analysis/control-flow.d.ts +9 -0
  4. package/dist/src/analysis/control-flow.d.ts.map +1 -0
  5. package/dist/src/analysis/control-flow.js +47 -0
  6. package/dist/src/analysis/control-flow.js.map +1 -0
  7. package/dist/src/ast/nodes.d.ts +495 -0
  8. package/dist/src/ast/nodes.d.ts.map +1 -0
  9. package/dist/src/ast/nodes.js +2 -0
  10. package/dist/src/ast/nodes.js.map +1 -0
  11. package/dist/src/binder/symbols.d.ts +36 -0
  12. package/dist/src/binder/symbols.d.ts.map +1 -0
  13. package/dist/src/binder/symbols.js +30 -0
  14. package/dist/src/binder/symbols.js.map +1 -0
  15. package/dist/src/checker/builtin-members.d.ts +4 -0
  16. package/dist/src/checker/builtin-members.d.ts.map +1 -0
  17. package/dist/src/checker/builtin-members.js +175 -0
  18. package/dist/src/checker/builtin-members.js.map +1 -0
  19. package/dist/src/checker/checker.d.ts +148 -0
  20. package/dist/src/checker/checker.d.ts.map +1 -0
  21. package/dist/src/checker/checker.js +2985 -0
  22. package/dist/src/checker/checker.js.map +1 -0
  23. package/dist/src/checker/effect-registry.d.ts +14 -0
  24. package/dist/src/checker/effect-registry.d.ts.map +1 -0
  25. package/dist/src/checker/effect-registry.js +11 -0
  26. package/dist/src/checker/effect-registry.js.map +1 -0
  27. package/dist/src/checker/type-operations.d.ts +27 -0
  28. package/dist/src/checker/type-operations.d.ts.map +1 -0
  29. package/dist/src/checker/type-operations.js +268 -0
  30. package/dist/src/checker/type-operations.js.map +1 -0
  31. package/dist/src/codegen/emitter.d.ts +83 -0
  32. package/dist/src/codegen/emitter.d.ts.map +1 -0
  33. package/dist/src/codegen/emitter.js +1029 -0
  34. package/dist/src/codegen/emitter.js.map +1 -0
  35. package/dist/src/codegen/helpers.d.ts +7 -0
  36. package/dist/src/codegen/helpers.d.ts.map +1 -0
  37. package/dist/src/codegen/helpers.js +48 -0
  38. package/dist/src/codegen/helpers.js.map +1 -0
  39. package/dist/src/codegen/runtime-imports.d.ts +6 -0
  40. package/dist/src/codegen/runtime-imports.d.ts.map +1 -0
  41. package/dist/src/codegen/runtime-imports.js +45 -0
  42. package/dist/src/codegen/runtime-imports.js.map +1 -0
  43. package/dist/src/codegen/writer.d.ts +14 -0
  44. package/dist/src/codegen/writer.d.ts.map +1 -0
  45. package/dist/src/codegen/writer.js +56 -0
  46. package/dist/src/codegen/writer.js.map +1 -0
  47. package/dist/src/compiler.d.ts +24 -0
  48. package/dist/src/compiler.d.ts.map +1 -0
  49. package/dist/src/compiler.js +97 -0
  50. package/dist/src/compiler.js.map +1 -0
  51. package/dist/src/diagnostics/codes.d.ts +18 -0
  52. package/dist/src/diagnostics/codes.d.ts.map +1 -0
  53. package/dist/src/diagnostics/codes.js +43 -0
  54. package/dist/src/diagnostics/codes.js.map +1 -0
  55. package/dist/src/diagnostics/diagnostic.d.ts +41 -0
  56. package/dist/src/diagnostics/diagnostic.d.ts.map +1 -0
  57. package/dist/src/diagnostics/diagnostic.js +50 -0
  58. package/dist/src/diagnostics/diagnostic.js.map +1 -0
  59. package/dist/src/diagnostics/render.d.ts +44 -0
  60. package/dist/src/diagnostics/render.d.ts.map +1 -0
  61. package/dist/src/diagnostics/render.js +44 -0
  62. package/dist/src/diagnostics/render.js.map +1 -0
  63. package/dist/src/experimental-api.d.ts +19 -0
  64. package/dist/src/experimental-api.d.ts.map +1 -0
  65. package/dist/src/experimental-api.js +17 -0
  66. package/dist/src/experimental-api.js.map +1 -0
  67. package/dist/src/hir/lower.d.ts +6 -0
  68. package/dist/src/hir/lower.d.ts.map +1 -0
  69. package/dist/src/hir/lower.js +124 -0
  70. package/dist/src/hir/lower.js.map +1 -0
  71. package/dist/src/hir/nodes.d.ts +12 -0
  72. package/dist/src/hir/nodes.d.ts.map +1 -0
  73. package/dist/src/hir/nodes.js +2 -0
  74. package/dist/src/hir/nodes.js.map +1 -0
  75. package/dist/src/index.d.ts +2 -0
  76. package/dist/src/index.d.ts.map +1 -0
  77. package/dist/src/index.js +2 -0
  78. package/dist/src/index.js.map +1 -0
  79. package/dist/src/interop/checked-api.d.ts +21 -0
  80. package/dist/src/interop/checked-api.d.ts.map +1 -0
  81. package/dist/src/interop/checked-api.js +46 -0
  82. package/dist/src/interop/checked-api.js.map +1 -0
  83. package/dist/src/interop/decision.d.ts +24 -0
  84. package/dist/src/interop/decision.d.ts.map +1 -0
  85. package/dist/src/interop/decision.js +96 -0
  86. package/dist/src/interop/decision.js.map +1 -0
  87. package/dist/src/interop/frontend-component-emission.d.ts +17 -0
  88. package/dist/src/interop/frontend-component-emission.d.ts.map +1 -0
  89. package/dist/src/interop/frontend-component-emission.js +271 -0
  90. package/dist/src/interop/frontend-component-emission.js.map +1 -0
  91. package/dist/src/interop/jsx-view-validation.d.ts +20 -0
  92. package/dist/src/interop/jsx-view-validation.d.ts.map +1 -0
  93. package/dist/src/interop/jsx-view-validation.js +847 -0
  94. package/dist/src/interop/jsx-view-validation.js.map +1 -0
  95. package/dist/src/interop/operation-api.d.ts +32 -0
  96. package/dist/src/interop/operation-api.d.ts.map +1 -0
  97. package/dist/src/interop/operation-api.js +61 -0
  98. package/dist/src/interop/operation-api.js.map +1 -0
  99. package/dist/src/interop/operation.d.ts +136 -0
  100. package/dist/src/interop/operation.d.ts.map +1 -0
  101. package/dist/src/interop/operation.js +575 -0
  102. package/dist/src/interop/operation.js.map +1 -0
  103. package/dist/src/interop/repetition-host-locator.d.ts +25 -0
  104. package/dist/src/interop/repetition-host-locator.d.ts.map +1 -0
  105. package/dist/src/interop/repetition-host-locator.js +61 -0
  106. package/dist/src/interop/repetition-host-locator.js.map +1 -0
  107. package/dist/src/interop/repetition-host-usage-validation.d.ts +11 -0
  108. package/dist/src/interop/repetition-host-usage-validation.d.ts.map +1 -0
  109. package/dist/src/interop/repetition-host-usage-validation.js +89 -0
  110. package/dist/src/interop/repetition-host-usage-validation.js.map +1 -0
  111. package/dist/src/interop/types.d.ts +365 -0
  112. package/dist/src/interop/types.d.ts.map +1 -0
  113. package/dist/src/interop/types.js +2 -0
  114. package/dist/src/interop/types.js.map +1 -0
  115. package/dist/src/mir/lower.d.ts +4 -0
  116. package/dist/src/mir/lower.d.ts.map +1 -0
  117. package/dist/src/mir/lower.js +131 -0
  118. package/dist/src/mir/lower.js.map +1 -0
  119. package/dist/src/mir/nodes.d.ts +36 -0
  120. package/dist/src/mir/nodes.d.ts.map +1 -0
  121. package/dist/src/mir/nodes.js +2 -0
  122. package/dist/src/mir/nodes.js.map +1 -0
  123. package/dist/src/project/incremental.d.ts +9 -0
  124. package/dist/src/project/incremental.d.ts.map +1 -0
  125. package/dist/src/project/incremental.js +15 -0
  126. package/dist/src/project/incremental.js.map +1 -0
  127. package/dist/src/project/project.d.ts +98 -0
  128. package/dist/src/project/project.d.ts.map +1 -0
  129. package/dist/src/project/project.js +884 -0
  130. package/dist/src/project/project.js.map +1 -0
  131. package/dist/src/public-api.d.ts +45 -0
  132. package/dist/src/public-api.d.ts.map +1 -0
  133. package/dist/src/public-api.js +37 -0
  134. package/dist/src/public-api.js.map +1 -0
  135. package/dist/src/reference/evaluator.d.ts +13 -0
  136. package/dist/src/reference/evaluator.d.ts.map +1 -0
  137. package/dist/src/reference/evaluator.js +304 -0
  138. package/dist/src/reference/evaluator.js.map +1 -0
  139. package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts +65 -0
  140. package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts.map +1 -0
  141. package/dist/src/selfhost/bootstrap-artifact-normalizer.js +226 -0
  142. package/dist/src/selfhost/bootstrap-artifact-normalizer.js.map +1 -0
  143. package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts +23 -0
  144. package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts.map +1 -0
  145. package/dist/src/selfhost/bootstrap-artifact-snapshot.js +122 -0
  146. package/dist/src/selfhost/bootstrap-artifact-snapshot.js.map +1 -0
  147. package/dist/src/selfhost/bootstrap-compiler-selection.d.ts +36 -0
  148. package/dist/src/selfhost/bootstrap-compiler-selection.d.ts.map +1 -0
  149. package/dist/src/selfhost/bootstrap-compiler-selection.js +52 -0
  150. package/dist/src/selfhost/bootstrap-compiler-selection.js.map +1 -0
  151. package/dist/src/selfhost/bootstrap-execution-probe.d.ts +42 -0
  152. package/dist/src/selfhost/bootstrap-execution-probe.d.ts.map +1 -0
  153. package/dist/src/selfhost/bootstrap-execution-probe.js +115 -0
  154. package/dist/src/selfhost/bootstrap-execution-probe.js.map +1 -0
  155. package/dist/src/selfhost/bootstrap-rollback-decision.d.ts +40 -0
  156. package/dist/src/selfhost/bootstrap-rollback-decision.d.ts.map +1 -0
  157. package/dist/src/selfhost/bootstrap-rollback-decision.js +144 -0
  158. package/dist/src/selfhost/bootstrap-rollback-decision.js.map +1 -0
  159. package/dist/src/selfhost/bootstrap-shadow-history.d.ts +49 -0
  160. package/dist/src/selfhost/bootstrap-shadow-history.d.ts.map +1 -0
  161. package/dist/src/selfhost/bootstrap-shadow-history.js +348 -0
  162. package/dist/src/selfhost/bootstrap-shadow-history.js.map +1 -0
  163. package/dist/src/selfhost/bootstrap-shadow-report.d.ts +43 -0
  164. package/dist/src/selfhost/bootstrap-shadow-report.d.ts.map +1 -0
  165. package/dist/src/selfhost/bootstrap-shadow-report.js +94 -0
  166. package/dist/src/selfhost/bootstrap-shadow-report.js.map +1 -0
  167. package/dist/src/selfhost/bootstrap-stage-executor.d.ts +53 -0
  168. package/dist/src/selfhost/bootstrap-stage-executor.d.ts.map +1 -0
  169. package/dist/src/selfhost/bootstrap-stage-executor.js +159 -0
  170. package/dist/src/selfhost/bootstrap-stage-executor.js.map +1 -0
  171. package/dist/src/selfhost/bootstrap-stage-loader.d.ts +14 -0
  172. package/dist/src/selfhost/bootstrap-stage-loader.d.ts.map +1 -0
  173. package/dist/src/selfhost/bootstrap-stage-loader.js +112 -0
  174. package/dist/src/selfhost/bootstrap-stage-loader.js.map +1 -0
  175. package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts +8 -0
  176. package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts.map +1 -0
  177. package/dist/src/selfhost/bootstrap-stage-pipeline.js +85 -0
  178. package/dist/src/selfhost/bootstrap-stage-pipeline.js.map +1 -0
  179. package/dist/src/selfhost/bootstrap-stage-runner.d.ts +47 -0
  180. package/dist/src/selfhost/bootstrap-stage-runner.d.ts.map +1 -0
  181. package/dist/src/selfhost/bootstrap-stage-runner.js +106 -0
  182. package/dist/src/selfhost/bootstrap-stage-runner.js.map +1 -0
  183. package/dist/src/selfhost/clean-bootstrap-evidence.d.ts +83 -0
  184. package/dist/src/selfhost/clean-bootstrap-evidence.d.ts.map +1 -0
  185. package/dist/src/selfhost/clean-bootstrap-evidence.js +233 -0
  186. package/dist/src/selfhost/clean-bootstrap-evidence.js.map +1 -0
  187. package/dist/src/selfhost/compiler-facade.d.ts +33 -0
  188. package/dist/src/selfhost/compiler-facade.d.ts.map +1 -0
  189. package/dist/src/selfhost/compiler-facade.js +65 -0
  190. package/dist/src/selfhost/compiler-facade.js.map +1 -0
  191. package/dist/src/selfhost/contract.d.ts +151 -0
  192. package/dist/src/selfhost/contract.d.ts.map +1 -0
  193. package/dist/src/selfhost/contract.js +335 -0
  194. package/dist/src/selfhost/contract.js.map +1 -0
  195. package/dist/src/selfhost/differential-artifacts.d.ts +8 -0
  196. package/dist/src/selfhost/differential-artifacts.d.ts.map +1 -0
  197. package/dist/src/selfhost/differential-artifacts.js +50 -0
  198. package/dist/src/selfhost/differential-artifacts.js.map +1 -0
  199. package/dist/src/selfhost/differential-harness.d.ts +91 -0
  200. package/dist/src/selfhost/differential-harness.d.ts.map +1 -0
  201. package/dist/src/selfhost/differential-harness.js +246 -0
  202. package/dist/src/selfhost/differential-harness.js.map +1 -0
  203. package/dist/src/selfhost/full-language-inventory-runner.d.ts +49 -0
  204. package/dist/src/selfhost/full-language-inventory-runner.d.ts.map +1 -0
  205. package/dist/src/selfhost/full-language-inventory-runner.js +225 -0
  206. package/dist/src/selfhost/full-language-inventory-runner.js.map +1 -0
  207. package/dist/src/selfhost/full-language-inventory.d.ts +42 -0
  208. package/dist/src/selfhost/full-language-inventory.d.ts.map +1 -0
  209. package/dist/src/selfhost/full-language-inventory.js +163 -0
  210. package/dist/src/selfhost/full-language-inventory.js.map +1 -0
  211. package/dist/src/selfhost/interop-resolution-witness.d.ts +35 -0
  212. package/dist/src/selfhost/interop-resolution-witness.d.ts.map +1 -0
  213. package/dist/src/selfhost/interop-resolution-witness.js +186 -0
  214. package/dist/src/selfhost/interop-resolution-witness.js.map +1 -0
  215. package/dist/src/selfhost/kernel-model-host-adapter.d.ts +28 -0
  216. package/dist/src/selfhost/kernel-model-host-adapter.d.ts.map +1 -0
  217. package/dist/src/selfhost/kernel-model-host-adapter.js +36 -0
  218. package/dist/src/selfhost/kernel-model-host-adapter.js.map +1 -0
  219. package/dist/src/selfhost/legacy-adapter.d.ts +8 -0
  220. package/dist/src/selfhost/legacy-adapter.d.ts.map +1 -0
  221. package/dist/src/selfhost/legacy-adapter.js +186 -0
  222. package/dist/src/selfhost/legacy-adapter.js.map +1 -0
  223. package/dist/src/selfhost/module-graph.d.ts +57 -0
  224. package/dist/src/selfhost/module-graph.d.ts.map +1 -0
  225. package/dist/src/selfhost/module-graph.js +267 -0
  226. package/dist/src/selfhost/module-graph.js.map +1 -0
  227. package/dist/src/selfhost/mvp-adapter.d.ts +19 -0
  228. package/dist/src/selfhost/mvp-adapter.d.ts.map +1 -0
  229. package/dist/src/selfhost/mvp-adapter.js +186 -0
  230. package/dist/src/selfhost/mvp-adapter.js.map +1 -0
  231. package/dist/src/selfhost/node-executor.d.ts +6 -0
  232. package/dist/src/selfhost/node-executor.d.ts.map +1 -0
  233. package/dist/src/selfhost/node-executor.js +138 -0
  234. package/dist/src/selfhost/node-executor.js.map +1 -0
  235. package/dist/src/selfhost/project-compiler-adapter.d.ts +77 -0
  236. package/dist/src/selfhost/project-compiler-adapter.d.ts.map +1 -0
  237. package/dist/src/selfhost/project-compiler-adapter.js +358 -0
  238. package/dist/src/selfhost/project-compiler-adapter.js.map +1 -0
  239. package/dist/src/selfhost/project-differential-adapter.d.ts +15 -0
  240. package/dist/src/selfhost/project-differential-adapter.d.ts.map +1 -0
  241. package/dist/src/selfhost/project-differential-adapter.js +65 -0
  242. package/dist/src/selfhost/project-differential-adapter.js.map +1 -0
  243. package/dist/src/selfhost/promotion-evidence.d.ts +62 -0
  244. package/dist/src/selfhost/promotion-evidence.d.ts.map +1 -0
  245. package/dist/src/selfhost/promotion-evidence.js +332 -0
  246. package/dist/src/selfhost/promotion-evidence.js.map +1 -0
  247. package/dist/src/selfhost/promotion-policy-replay-v2.d.ts +54 -0
  248. package/dist/src/selfhost/promotion-policy-replay-v2.d.ts.map +1 -0
  249. package/dist/src/selfhost/promotion-policy-replay-v2.js +343 -0
  250. package/dist/src/selfhost/promotion-policy-replay-v2.js.map +1 -0
  251. package/dist/src/selfhost/promotion-shadow-history-v2.d.ts +55 -0
  252. package/dist/src/selfhost/promotion-shadow-history-v2.d.ts.map +1 -0
  253. package/dist/src/selfhost/promotion-shadow-history-v2.js +227 -0
  254. package/dist/src/selfhost/promotion-shadow-history-v2.js.map +1 -0
  255. package/dist/src/selfhost/promotion-subject.d.ts +34 -0
  256. package/dist/src/selfhost/promotion-subject.d.ts.map +1 -0
  257. package/dist/src/selfhost/promotion-subject.js +141 -0
  258. package/dist/src/selfhost/promotion-subject.js.map +1 -0
  259. package/dist/src/selfhost/source-manifest.d.ts +31 -0
  260. package/dist/src/selfhost/source-manifest.d.ts.map +1 -0
  261. package/dist/src/selfhost/source-manifest.js +194 -0
  262. package/dist/src/selfhost/source-manifest.js.map +1 -0
  263. package/dist/src/selfhost/stage-compiler-facade.d.ts +25 -0
  264. package/dist/src/selfhost/stage-compiler-facade.d.ts.map +1 -0
  265. package/dist/src/selfhost/stage-compiler-facade.js +100 -0
  266. package/dist/src/selfhost/stage-compiler-facade.js.map +1 -0
  267. package/dist/src/semantic-evidence/snapshot.d.ts +114 -0
  268. package/dist/src/semantic-evidence/snapshot.d.ts.map +1 -0
  269. package/dist/src/semantic-evidence/snapshot.js +336 -0
  270. package/dist/src/semantic-evidence/snapshot.js.map +1 -0
  271. package/dist/src/source.d.ts +25 -0
  272. package/dist/src/source.d.ts.map +1 -0
  273. package/dist/src/source.js +10 -0
  274. package/dist/src/source.js.map +1 -0
  275. package/dist/src/syntax/cst-to-ast.d.ts +108 -0
  276. package/dist/src/syntax/cst-to-ast.d.ts.map +1 -0
  277. package/dist/src/syntax/cst-to-ast.js +383 -0
  278. package/dist/src/syntax/cst-to-ast.js.map +1 -0
  279. package/dist/src/syntax/documentation.d.ts +11 -0
  280. package/dist/src/syntax/documentation.d.ts.map +1 -0
  281. package/dist/src/syntax/documentation.js +261 -0
  282. package/dist/src/syntax/documentation.js.map +1 -0
  283. package/dist/src/syntax/parser.d.ts +114 -0
  284. package/dist/src/syntax/parser.d.ts.map +1 -0
  285. package/dist/src/syntax/parser.js +970 -0
  286. package/dist/src/syntax/parser.js.map +1 -0
  287. package/dist/src/syntax/syntax-metadata.d.ts +8 -0
  288. package/dist/src/syntax/syntax-metadata.d.ts.map +1 -0
  289. package/dist/src/syntax/syntax-metadata.js +14 -0
  290. package/dist/src/syntax/syntax-metadata.js.map +1 -0
  291. package/dist/src/syntax/tokens.d.ts +96 -0
  292. package/dist/src/syntax/tokens.d.ts.map +1 -0
  293. package/dist/src/syntax/tokens.js +260 -0
  294. package/dist/src/syntax/tokens.js.map +1 -0
  295. package/dist/src/types/types.d.ts +97 -0
  296. package/dist/src/types/types.d.ts.map +1 -0
  297. package/dist/src/types/types.js +105 -0
  298. package/dist/src/types/types.js.map +1 -0
  299. package/package.json +47 -0
  300. package/schema/diagnostics-v1.schema.json +75 -0
@@ -0,0 +1,96 @@
1
+ const DECISION_STATUSES = ['resolved', 'obligation-pending', 'unresolved'];
2
+ const MECHANISMS = ['direct', 'callable-shim', 'managed', 'host', 'user-adapter', 'unsafe'];
3
+ const AUTHORING_MODES = ['none', 'generated', 'user'];
4
+ const CLAIMS = [
5
+ 'foreign-identity-preserved',
6
+ 'primitive-bridge-validated',
7
+ 'receiver-preserved',
8
+ 'type-boundary-safe',
9
+ ];
10
+ const OBLIGATION_KINDS = ['runtime-resolution'];
11
+ const OBLIGATION_STAGES = ['check', 'codegen', 'build', 'runtime'];
12
+ const OBLIGATION_STATUSES = ['pending', 'discharged'];
13
+ const DECISION_KEYS = ['status', 'mechanism', 'authoring', 'claims', 'obligations'];
14
+ const OBLIGATION_KEYS = ['kind', 'stage', 'status'];
15
+ /** Canonicalize provider-independent decision facts without treating JS object identity as a security boundary. */
16
+ export function canonicalizeInteropDecision(decision) {
17
+ assertExactRecord(decision, DECISION_KEYS, 'Interop decision');
18
+ assertKnown(DECISION_STATUSES, decision.status, 'decision status');
19
+ assertKnown(MECHANISMS, decision.mechanism, 'Interop mechanism');
20
+ assertKnown(AUTHORING_MODES, decision.authoring, 'Interop authoring mode');
21
+ if (!Array.isArray(decision.claims))
22
+ throw new Error('Interop decision claims must be an array');
23
+ if (!Array.isArray(decision.obligations))
24
+ throw new Error('Interop decision obligations must be an array');
25
+ const claims = [...new Set(decision.claims.map(claim => {
26
+ assertKnown(CLAIMS, claim, 'Interop safety claim');
27
+ return claim;
28
+ }))].sort(compareText);
29
+ const obligations = [];
30
+ for (const obligation of decision.obligations) {
31
+ assertExactRecord(obligation, OBLIGATION_KEYS, 'Interop obligation');
32
+ assertKnown(OBLIGATION_KINDS, obligation.kind, 'Interop obligation kind');
33
+ assertKnown(OBLIGATION_STAGES, obligation.stage, 'Interop obligation stage');
34
+ assertKnown(OBLIGATION_STATUSES, obligation.status, 'Interop obligation status');
35
+ const previous = obligations.find(item => item.kind === obligation.kind && item.stage === obligation.stage);
36
+ if (previous !== undefined) {
37
+ if (previous.status !== obligation.status)
38
+ throw new Error(`Conflicting Interop obligation state for ${obligation.kind} at ${obligation.stage}`);
39
+ continue;
40
+ }
41
+ obligations.push(freezeObligation({ kind: obligation.kind, stage: obligation.stage, status: obligation.status }));
42
+ }
43
+ obligations.sort((left, right) => compareText(`${left.kind}\0${left.stage}\0${left.status}`, `${right.kind}\0${right.stage}\0${right.status}`));
44
+ const hasPending = obligations.some(obligation => obligation.status === 'pending');
45
+ if (decision.status === 'resolved' && hasPending)
46
+ throw new Error('Resolved Interop decision cannot retain pending obligations');
47
+ if (decision.status === 'obligation-pending' && !hasPending)
48
+ throw new Error('obligation-pending Interop decision requires at least one pending obligation');
49
+ return Object.freeze({
50
+ status: decision.status,
51
+ mechanism: decision.mechanism,
52
+ authoring: decision.authoring,
53
+ claims: Object.freeze(claims),
54
+ obligations: Object.freeze(obligations),
55
+ });
56
+ }
57
+ /** Only fully resolved, non-authored Direct decisions with discharged obligations are success evidence. */
58
+ export function isResolvedDirectInteropDecision(decision) {
59
+ try {
60
+ const canonical = canonicalizeInteropDecision(decision);
61
+ return canonical.status === 'resolved'
62
+ && canonical.mechanism === 'direct'
63
+ && canonical.authoring === 'none'
64
+ && canonical.obligations.every(obligation => obligation.status === 'discharged');
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ function freezeObligation(obligation) {
71
+ return Object.freeze(obligation);
72
+ }
73
+ function assertRecord(value, description) {
74
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
75
+ throw new Error(`${description} must be a record`);
76
+ }
77
+ function assertExactRecord(value, expected, description) {
78
+ assertRecord(value, description);
79
+ const keys = Object.keys(value);
80
+ for (const key of keys) {
81
+ if (!expected.includes(key))
82
+ throw new Error(`Unknown ${description} field: ${key}`);
83
+ }
84
+ for (const key of expected) {
85
+ if (!Object.hasOwn(value, key))
86
+ throw new Error(`Missing ${description} field: ${key}`);
87
+ }
88
+ }
89
+ function assertKnown(known, value, description) {
90
+ if (!known.includes(value))
91
+ throw new Error(`Unknown ${description}: ${String(value)}`);
92
+ }
93
+ function compareText(left, right) {
94
+ return left < right ? -1 : left > right ? 1 : 0;
95
+ }
96
+ //# sourceMappingURL=decision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision.js","sourceRoot":"","sources":["../../../src/interop/decision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type * as A from '../ast/nodes.js';
2
+ import type { SemanticModel } from '../checker/checker.js';
3
+ import type { DiagnosticBag } from '../diagnostics/diagnostic.js';
4
+ import type { TypeId } from '../source.js';
5
+ export type FrontendHostPrimitiveName = 'Bool' | 'Int' | 'Float' | 'BigInt' | 'String';
6
+ export declare function frontendHostPrimitiveName(typeId: TypeId, semantic: SemanticModel): FrontendHostPrimitiveName | undefined;
7
+ export declare function frontendScalarRecordFields(typeId: TypeId, semantic: SemanticModel, directTypeName?: string): readonly {
8
+ readonly name: string;
9
+ readonly primitive: FrontendHostPrimitiveName;
10
+ }[] | undefined;
11
+ /**
12
+ * Keep host-facing component values within the frontend boundary currently
13
+ * supported by preserved JSX emission. This check is shared by single-file and
14
+ * Project Build paths so one path cannot silently accept a wider boundary.
15
+ */
16
+ export declare function validateFrontendComponentEmissionBoundary(module: A.ModuleNode, semantic: SemanticModel, diagnostics: DiagnosticBag): void;
17
+ //# sourceMappingURL=frontend-component-emission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend-component-emission.d.ts","sourceRoot":"","sources":["../../../src/interop/frontend-component-emission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAc,MAAM,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAiBvF,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,yBAAyB,GAAG,SAAS,CAUxH;AAED,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EACvB,cAAc,CAAC,EAAE,MAAM,GACrB,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAA;CAAE,EAAE,GAAG,SAAS,CAyBjG;AAgJD;;;;GAIG;AACH,wBAAgB,yCAAyC,CACxD,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,aAAa,GACxB,IAAI,CAkBN"}
@@ -0,0 +1,271 @@
1
+ function directFrontendHostPrimitiveName(typeId, semantic) {
2
+ const type = semantic.arena.get(typeId);
3
+ if (type.kind !== 'primitive')
4
+ return undefined;
5
+ switch (type.name) {
6
+ case 'Bool':
7
+ case 'Int':
8
+ case 'Float':
9
+ case 'BigInt':
10
+ case 'String':
11
+ return type.name;
12
+ default:
13
+ return undefined;
14
+ }
15
+ }
16
+ export function frontendHostPrimitiveName(typeId, semantic) {
17
+ const direct = directFrontendHostPrimitiveName(typeId, semantic);
18
+ if (direct !== undefined)
19
+ return direct;
20
+ const type = semantic.arena.get(typeId);
21
+ if (type.kind !== 'named' || type.declarationKind !== 'newtype' || type.underlying === undefined || type.mustUse === true)
22
+ return undefined;
23
+ const symbol = semantic.globalScope.lookup(type.name);
24
+ if (symbol?.kind !== 'type' || symbol.declaration?.kind !== 'NewtypeDeclaration')
25
+ return undefined;
26
+ const declaration = symbol.declaration;
27
+ const primitive = directFrontendHostPrimitiveName(type.underlying, semantic);
28
+ return primitive !== undefined && declaration.underlying.name === primitive ? primitive : undefined;
29
+ }
30
+ export function frontendScalarRecordFields(typeId, semantic, directTypeName) {
31
+ const type = semantic.arena.get(typeId);
32
+ if (type.kind !== 'named' || type.declarationKind !== 'record' || type.fields === undefined || type.mustUse === true)
33
+ return undefined;
34
+ if (directTypeName !== undefined && directTypeName !== type.name)
35
+ return undefined;
36
+ const symbol = semantic.globalScope.lookup(type.name);
37
+ if (symbol?.kind !== 'type' || symbol.declaration?.kind !== 'RecordDeclaration')
38
+ return undefined;
39
+ const declaration = symbol.declaration;
40
+ if (declaration.typeParameters.length > 0 || declaration.attributes.length > 0 || declaration.fields.some(field => field.attributes.length > 0))
41
+ return undefined;
42
+ if (type.fields.size !== declaration.fields.length)
43
+ return undefined;
44
+ const fields = [];
45
+ for (const field of declaration.fields) {
46
+ const fieldType = type.fields.get(field.name);
47
+ if (fieldType === undefined)
48
+ return undefined;
49
+ const resolvedFieldType = semantic.arena.get(fieldType);
50
+ const directFieldTypeName = resolvedFieldType.kind === 'primitive'
51
+ ? resolvedFieldType.name
52
+ : resolvedFieldType.kind === 'named' && resolvedFieldType.declarationKind === 'newtype'
53
+ ? resolvedFieldType.name
54
+ : undefined;
55
+ if (directFieldTypeName === undefined || field.type.name !== directFieldTypeName)
56
+ return undefined;
57
+ const primitive = frontendHostPrimitiveName(fieldType, semantic);
58
+ if (primitive === undefined)
59
+ return undefined;
60
+ fields.push({ name: field.name, primitive });
61
+ }
62
+ return fields;
63
+ }
64
+ function hostDeferredCaptureTypeIsSafe(typeId, semantic) {
65
+ if (frontendHostPrimitiveName(typeId, semantic) !== undefined || frontendScalarRecordFields(typeId, semantic) !== undefined)
66
+ return true;
67
+ const type = semantic.arena.get(typeId);
68
+ if (type.kind === 'foreign')
69
+ return type.snapshot.mustUse !== true && type.snapshot.category !== 'unknown' && type.snapshot.category !== 'any';
70
+ return type.kind === 'list' && hostDeferredCaptureTypeIsSafe(type.element, semantic);
71
+ }
72
+ function hostDeferredCaptureSymbolIsSafe(symbolId, semantic) {
73
+ const symbol = semantic.symbols.get(symbolId);
74
+ if (symbol === undefined)
75
+ return false;
76
+ const type = semantic.arena.get(symbol.typeId);
77
+ if (symbol.mutable)
78
+ return false;
79
+ if (symbol.kind === 'import')
80
+ return hostDeferredCaptureTypeIsSafe(symbol.typeId, semantic);
81
+ if (symbol.kind === 'builtin' || symbol.kind === 'type')
82
+ return true;
83
+ if (type.kind === 'function')
84
+ return false;
85
+ return hostDeferredCaptureTypeIsSafe(symbol.typeId, semantic);
86
+ }
87
+ function unsafeHostDeferredSymbolCapture(symbolId, name, span, semantic) {
88
+ if (hostDeferredCaptureSymbolIsSafe(symbolId, semantic))
89
+ return undefined;
90
+ const symbol = semantic.symbols.get(symbolId);
91
+ return {
92
+ kind: 'symbol',
93
+ name: symbol?.name ?? name,
94
+ type: symbol === undefined ? '<unresolved>' : semantic.arena.display(symbol.typeId),
95
+ mutable: symbol?.mutable === true,
96
+ span,
97
+ };
98
+ }
99
+ function unsafeHostDeferredItemTransport(symbolId, name, span, semantic) {
100
+ const symbol = semantic.symbols.get(symbolId);
101
+ if (symbol !== undefined && hostDeferredCaptureTypeIsSafe(symbol.typeId, semantic))
102
+ return undefined;
103
+ return {
104
+ kind: 'transport',
105
+ name: symbol?.name ?? name,
106
+ type: symbol === undefined ? '<unresolved>' : semantic.arena.display(symbol.typeId),
107
+ span,
108
+ };
109
+ }
110
+ function hostDeferredLambdaLocalSymbols(lambda, semantic, inherited) {
111
+ const declarations = new Set();
112
+ const collect = (value) => {
113
+ if (Array.isArray(value)) {
114
+ for (const item of value)
115
+ collect(item);
116
+ return;
117
+ }
118
+ if (value === null || typeof value !== 'object')
119
+ return;
120
+ declarations.add(value);
121
+ for (const [key, child] of Object.entries(value)) {
122
+ if (key === 'span' || key === 'checkedEvidence')
123
+ continue;
124
+ collect(child);
125
+ }
126
+ };
127
+ collect(lambda);
128
+ const result = new Set(inherited);
129
+ for (const [symbolId, symbol] of semantic.symbols) {
130
+ if (symbol.declaration !== undefined && declarations.has(symbol.declaration))
131
+ result.add(symbolId);
132
+ }
133
+ return result;
134
+ }
135
+ function findUnsafeHostDeferredCapture(root, value, semantic, localSymbols) {
136
+ if (Array.isArray(value)) {
137
+ for (const item of value) {
138
+ const found = findUnsafeHostDeferredCapture(root, item, semantic, localSymbols);
139
+ if (found !== undefined)
140
+ return found;
141
+ }
142
+ return undefined;
143
+ }
144
+ if (value === null || typeof value !== 'object')
145
+ return undefined;
146
+ const node = value;
147
+ if (value !== root && node.kind === 'ViewRepetition' && node.identity !== undefined)
148
+ return undefined;
149
+ const scopedLocalSymbols = node.kind === 'LambdaExpression'
150
+ ? hostDeferredLambdaLocalSymbols(value, semantic, localSymbols)
151
+ : localSymbols;
152
+ if (node.kind === 'LiteralExpression' && node.literalKind === 'String' && typeof node.value === 'string' && /(?<!\{)\{[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\}(?!\})/u.test(node.value)) {
153
+ return { kind: 'interpolation', span: node.span };
154
+ }
155
+ if (node.kind === 'IdentifierExpression' && typeof node.symbolId === 'number' && !scopedLocalSymbols.has(node.symbolId)) {
156
+ const capture = unsafeHostDeferredSymbolCapture(node.symbolId, typeof node.name === 'string' ? node.name : '<unresolved>', node.span, semantic);
157
+ if (capture !== undefined)
158
+ return capture;
159
+ }
160
+ for (const [key, child] of Object.entries(node)) {
161
+ if (key === 'span' || key === 'checkedEvidence')
162
+ continue;
163
+ const found = findUnsafeHostDeferredCapture(root, child, semantic, scopedLocalSymbols);
164
+ if (found !== undefined)
165
+ return found;
166
+ }
167
+ return undefined;
168
+ }
169
+ function reportUnsafeHostDeferredCapture(capture, diagnostics) {
170
+ if (capture?.kind === 'interpolation') {
171
+ diagnostics.error('L4309', 'Host-deferred View repetition cannot use string interpolation because interpolation captures are not symbol-bound at this boundary; use an explicit View expression instead', capture.span);
172
+ }
173
+ else if (capture?.kind === 'transport') {
174
+ diagnostics.error('L4309', `Host-deferred View repetition Host snapshot cannot transport ${capture.name} of type ${capture.type}; use a frontend-safe value or a current resolved non-mustUse External value`, capture.span);
175
+ }
176
+ else if (capture !== undefined) {
177
+ const detail = capture.mutable ? `mutable value ${capture.name}` : `${capture.name} of type ${capture.type}`;
178
+ diagnostics.error('L4309', `Host-deferred View repetition cannot capture ${detail}; use an immutable frontend-safe value or a current resolved non-mustUse External value`, capture.span);
179
+ }
180
+ }
181
+ function validateHostDeferredViewRepetitions(value, semantic, diagnostics) {
182
+ if (Array.isArray(value)) {
183
+ for (const item of value)
184
+ validateHostDeferredViewRepetitions(item, semantic, diagnostics);
185
+ return;
186
+ }
187
+ if (value === null || typeof value !== 'object')
188
+ return;
189
+ const node = value;
190
+ if (node.kind === 'ViewRepetition' && node.identity !== undefined) {
191
+ const repetition = node;
192
+ const localSymbols = new Set();
193
+ const itemSymbolId = repetition.checkedEvidence?.itemSymbolId;
194
+ if (itemSymbolId !== undefined)
195
+ localSymbols.add(itemSymbolId);
196
+ if (repetition.checkedEvidence?.indexSymbolId !== undefined)
197
+ localSymbols.add(repetition.checkedEvidence.indexSymbolId);
198
+ const capture = findUnsafeHostDeferredCapture(repetition, repetition.source, semantic, new Set())
199
+ ?? (itemSymbolId === undefined ? undefined : unsafeHostDeferredItemTransport(itemSymbolId, repetition.itemName, repetition.span, semantic))
200
+ ?? findUnsafeHostDeferredCapture(repetition, repetition.identity, semantic, localSymbols)
201
+ ?? findUnsafeHostDeferredCapture(repetition, repetition.body, semantic, localSymbols);
202
+ reportUnsafeHostDeferredCapture(capture, diagnostics);
203
+ }
204
+ for (const [key, child] of Object.entries(node)) {
205
+ if (key === 'span' || key === 'checkedEvidence')
206
+ continue;
207
+ validateHostDeferredViewRepetitions(child, semantic, diagnostics);
208
+ }
209
+ }
210
+ /**
211
+ * Keep host-facing component values within the frontend boundary currently
212
+ * supported by preserved JSX emission. This check is shared by single-file and
213
+ * Project Build paths so one path cannot silently accept a wider boundary.
214
+ */
215
+ export function validateFrontendComponentEmissionBoundary(module, semantic, diagnostics) {
216
+ for (const declaration of module.declarations) {
217
+ if (declaration.kind !== 'ComponentDeclaration')
218
+ continue;
219
+ const parameterNames = new Set(declaration.parameters.map(parameter => parameter.name));
220
+ for (const parameter of declaration.parameters) {
221
+ const symbol = parameter.symbolId === undefined ? undefined : semantic.symbols.get(parameter.symbolId);
222
+ if (symbol !== undefined && (frontendHostPrimitiveName(symbol.typeId, semantic) !== undefined || frontendScalarRecordFields(symbol.typeId, semantic, parameter.type.name) !== undefined))
223
+ continue;
224
+ const display = symbol === undefined ? '<unresolved>' : semantic.arena.display(symbol.typeId);
225
+ diagnostics.error('L4309', `Component parameter ${parameter.name} has type ${display}; frontend JSX emission currently supports Bool, Int, Float, BigInt, String, direct non-mustUse source newtypes backed by those primitives, and non-generic unattributed source records containing only those scalar fields`, parameter.span);
226
+ }
227
+ const interpolation = findUnsupportedComponentInterpolation(declaration.body, parameterNames);
228
+ if (interpolation?.kind === 'view-text') {
229
+ diagnostics.error('L4309', 'Interpolated View text children are not available in frontend JSX emission; use an explicit View expression child instead', interpolation.span);
230
+ }
231
+ else if (interpolation !== undefined) {
232
+ diagnostics.error('L4309', `Component parameter ${interpolation.name} cannot be referenced directly through string interpolation because component parameters remain host-backed at each use site; bind it to an explicit local value first`, interpolation.span);
233
+ }
234
+ validateHostDeferredViewRepetitions(declaration.body, semantic, diagnostics);
235
+ }
236
+ }
237
+ function findUnsupportedComponentInterpolation(value, parameterNames) {
238
+ if (Array.isArray(value)) {
239
+ for (const item of value) {
240
+ const found = findUnsupportedComponentInterpolation(item, parameterNames);
241
+ if (found !== undefined)
242
+ return found;
243
+ }
244
+ return undefined;
245
+ }
246
+ if (value === null || typeof value !== 'object')
247
+ return undefined;
248
+ const node = value;
249
+ if (node.kind === 'ViewTextChild' && typeof node.value === 'string' && /(?<!\{)\{[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\}(?!\})/u.test(node.value)) {
250
+ return { kind: 'view-text', span: node.span };
251
+ }
252
+ if (node.kind === 'LiteralExpression' && node.literalKind === 'String' && typeof node.value === 'string') {
253
+ for (const match of node.value.matchAll(/(?<!\{)\{([A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*)\}(?!\})/gu)) {
254
+ const path = match[1];
255
+ if (path === undefined)
256
+ continue;
257
+ const name = path.split('.')[0];
258
+ if (parameterNames.has(name))
259
+ return { kind: 'host-parameter', name, span: node.span };
260
+ }
261
+ }
262
+ for (const [key, child] of Object.entries(node)) {
263
+ if (key === 'span')
264
+ continue;
265
+ const found = findUnsupportedComponentInterpolation(child, parameterNames);
266
+ if (found !== undefined)
267
+ return found;
268
+ }
269
+ return undefined;
270
+ }
271
+ //# sourceMappingURL=frontend-component-emission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend-component-emission.js","sourceRoot":"","sources":["../../../src/interop/frontend-component-emission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type * as A from '../ast/nodes.js';
2
+ import type { SemanticModel } from '../checker/checker.js';
3
+ import type { JsInteropProvider } from './types.js';
4
+ interface FrontendJsxValidationOptions {
5
+ readonly containingFile: string;
6
+ readonly platform: 'node' | 'browser' | 'neutral';
7
+ readonly jsInteropProvider?: JsInteropProvider;
8
+ readonly repetitionHost?: {
9
+ readonly moduleSpecifier: string;
10
+ readonly exportName: string;
11
+ };
12
+ }
13
+ /**
14
+ * Validate checked View structure against the project's real TypeScript JSX
15
+ * environment. This pass produces proof-only TSX and does not define emission
16
+ * or native component transport semantics.
17
+ */
18
+ export declare function validateFrontendJsxUsage(module: A.ModuleNode, semantic: SemanticModel, options: FrontendJsxValidationOptions): void;
19
+ export {};
20
+ //# sourceMappingURL=jsx-view-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-view-validation.d.ts","sourceRoot":"","sources":["../../../src/interop/jsx-view-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIpD,UAAU,4BAA4B;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,cAAc,CAAC,EAAE;QACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC5B,CAAC;CACF;AAsBD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,4BAA4B,GAAG,IAAI,CAgEnI"}