@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,159 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { PROJECT_COMPILER_RESULT_SCHEMA, compileWithProjectCompilerBoundary, } from './project-compiler-adapter.js';
3
+ export const BOOTSTRAP_STAGE_EXECUTOR_VERSION = 3;
4
+ export const BOOTSTRAP_STAGE_DIAGNOSTIC_SCHEMA = `${PROJECT_COMPILER_RESULT_SCHEMA}#diagnostics`;
5
+ export function compilerFromSelfhostModule(module) {
6
+ return {
7
+ compile: input => compileWithProjectCompilerBoundary(module, input),
8
+ };
9
+ }
10
+ export async function executeBootstrapStages(stage0, input, loadStage1) {
11
+ const stage1Result = requireAccepted(stage0.compile(input), 'Stage 1');
12
+ const stage1 = stageArtifact('stage1', stage1Result);
13
+ const stage1Compiler = await loadStage1(stage1);
14
+ const stage2Result = requireAccepted(stage1Compiler.compile(input), 'Stage 2');
15
+ const stage2 = stageArtifact('stage2', stage2Result);
16
+ const differences = compareStageArtifacts(stage1, stage2);
17
+ return {
18
+ stage1,
19
+ stage2,
20
+ equivalent: stage1.sha256 === stage2.sha256 && differences.length === 0,
21
+ differences,
22
+ };
23
+ }
24
+ export function stageArtifact(stage, result) {
25
+ const accepted = requireAccepted(result, stage === 'stage1' ? 'Stage 1' : 'Stage 2');
26
+ const metadata = {
27
+ contractVersion: accepted.contractVersion,
28
+ languageVersion: accepted.languageVersion,
29
+ platform: accepted.platform,
30
+ accepted: true,
31
+ resultSchema: PROJECT_COMPILER_RESULT_SCHEMA,
32
+ diagnosticSchema: BOOTSTRAP_STAGE_DIAGNOSTIC_SCHEMA,
33
+ };
34
+ const modules = accepted.emittedModules
35
+ .map(normalizeModule)
36
+ .sort((left, right) => compareText(left.outputPath, right.outputPath)
37
+ || compareText(left.sourcePath, right.sourcePath));
38
+ assertUnique(modules, module => module.outputPath, 'emitted module outputPath');
39
+ const dependencies = [...accepted.dependencies]
40
+ .sort((left, right) => compareText(dependencyKey(left), dependencyKey(right)));
41
+ assertUnique(dependencies, dependencyKey, 'dependency metadata');
42
+ const exportedSymbols = [...accepted.exportedSymbols]
43
+ .sort((left, right) => compareText(exportedSymbolKey(left), exportedSymbolKey(right)));
44
+ assertUnique(exportedSymbols, exportedSymbolKey, 'export metadata');
45
+ const payload = {
46
+ metadata,
47
+ entryPath: accepted.entryPath,
48
+ modules,
49
+ dependencies,
50
+ exportedSymbols,
51
+ };
52
+ const serializedPayload = JSON.stringify(payload);
53
+ return {
54
+ executorVersion: BOOTSTRAP_STAGE_EXECUTOR_VERSION,
55
+ stage,
56
+ metadata,
57
+ entryPath: accepted.entryPath,
58
+ modules,
59
+ dependencies,
60
+ exportedSymbols,
61
+ serializedPayload,
62
+ sha256: sha256(serializedPayload),
63
+ };
64
+ }
65
+ export function compareStageArtifacts(stage1, stage2) {
66
+ return [
67
+ ...compareSingleton('metadata', 'executorVersion', stage1.executorVersion, stage2.executorVersion),
68
+ ...compareStageMetadata(stage1.metadata, stage2.metadata),
69
+ ...compareSingleton('metadata', 'entryPath', stage1.entryPath, stage2.entryPath),
70
+ ...compareStageModules(stage1.modules, stage2.modules),
71
+ ...compareCollections('dependency', stage1.dependencies, stage2.dependencies, dependencyKey),
72
+ ...compareCollections('exported-symbol', stage1.exportedSymbols, stage2.exportedSymbols, exportedSymbolKey),
73
+ ].sort(compareDifference);
74
+ }
75
+ export function compareStageMetadata(stage1, stage2) {
76
+ return [
77
+ ...compareSingleton('metadata', 'accepted', stage1.accepted, stage2.accepted),
78
+ ...compareSingleton('metadata', 'contractVersion', stage1.contractVersion, stage2.contractVersion),
79
+ ...compareSingleton('metadata', 'diagnosticSchema', stage1.diagnosticSchema, stage2.diagnosticSchema),
80
+ ...compareSingleton('metadata', 'languageVersion', stage1.languageVersion, stage2.languageVersion),
81
+ ...compareSingleton('metadata', 'platform', stage1.platform, stage2.platform),
82
+ ...compareSingleton('metadata', 'resultSchema', stage1.resultSchema, stage2.resultSchema),
83
+ ];
84
+ }
85
+ export function compareStageModules(stage1, stage2) {
86
+ return compareCollections('module', stage1, stage2, module => module.outputPath);
87
+ }
88
+ function compareCollections(section, stage1, stage2, key) {
89
+ const left = new Map(stage1.map(value => [key(value), value]));
90
+ const right = new Map(stage2.map(value => [key(value), value]));
91
+ const paths = [...new Set([...left.keys(), ...right.keys()])].sort(compareText);
92
+ const differences = [];
93
+ for (const path of paths) {
94
+ const leftValue = left.get(path);
95
+ const rightValue = right.get(path);
96
+ const stage1Sha256 = leftValue === undefined ? null : sha256(JSON.stringify(leftValue));
97
+ const stage2Sha256 = rightValue === undefined ? null : sha256(JSON.stringify(rightValue));
98
+ if (stage1Sha256 !== stage2Sha256) {
99
+ differences.push({ section, path, stage1Sha256, stage2Sha256 });
100
+ }
101
+ }
102
+ return differences;
103
+ }
104
+ function compareSingleton(section, path, stage1, stage2) {
105
+ const stage1Sha256 = sha256(JSON.stringify(stage1));
106
+ const stage2Sha256 = sha256(JSON.stringify(stage2));
107
+ return stage1Sha256 === stage2Sha256
108
+ ? []
109
+ : [{ section, path, stage1Sha256, stage2Sha256 }];
110
+ }
111
+ function requireAccepted(result, label) {
112
+ if (!result.accepted) {
113
+ const codes = result.diagnostics.map(diagnostic => diagnostic.code).join(', ') || 'none';
114
+ throw new Error(`${label} project compilation was rejected (${codes})`);
115
+ }
116
+ if (result.emittedModules.length === 0) {
117
+ throw new Error(`${label} project compilation emitted no modules`);
118
+ }
119
+ return result;
120
+ }
121
+ function normalizeModule(module) {
122
+ return {
123
+ sourcePath: module.sourcePath,
124
+ outputPath: module.outputPath,
125
+ code: normalizeText(module.code),
126
+ sourceMap: normalizeText(module.sourceMap),
127
+ };
128
+ }
129
+ function dependencyKey(value) {
130
+ return [
131
+ value.modulePath,
132
+ value.sourceKind,
133
+ value.specifier,
134
+ value.resolvedPath ?? '',
135
+ value.typeOnly ? '1' : '0',
136
+ value.public ? '1' : '0',
137
+ ].join('\0');
138
+ }
139
+ function exportedSymbolKey(value) {
140
+ return [value.modulePath, value.name, value.declarationKind].join('\0');
141
+ }
142
+ function assertUnique(values, key, label) {
143
+ const keys = values.map(key);
144
+ if (new Set(keys).size !== keys.length)
145
+ throw new Error(`Bootstrap stage ${label} values must be unique`);
146
+ }
147
+ function compareDifference(left, right) {
148
+ return compareText(left.section, right.section) || compareText(left.path, right.path);
149
+ }
150
+ function normalizeText(value) {
151
+ return value.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
152
+ }
153
+ function compareText(left, right) {
154
+ return left < right ? -1 : left > right ? 1 : 0;
155
+ }
156
+ function sha256(value) {
157
+ return createHash('sha256').update(value).digest('hex');
158
+ }
159
+ //# sourceMappingURL=bootstrap-stage-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-stage-executor.js","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-stage-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type KernelInputV1 } from './contract.js';
2
+ import { type ProjectCompilerCapabilityV1 } from './project-compiler-adapter.js';
3
+ import { type BootstrapStageArtifact, type BootstrapStageCompiler, type BootstrapStageExecutionResult } from './bootstrap-stage-executor.js';
4
+ export interface MaterializedBootstrapStageCompiler {
5
+ readonly root: string;
6
+ readonly entryModulePath: string;
7
+ readonly capability: ProjectCompilerCapabilityV1;
8
+ readonly compiler: BootstrapStageCompiler;
9
+ readonly dispose: () => Promise<void>;
10
+ }
11
+ export declare function verifyBootstrapStageArtifact(artifact: BootstrapStageArtifact): void;
12
+ export declare function materializeBootstrapStageCompiler(artifact: BootstrapStageArtifact, temporaryRoot: string): Promise<MaterializedBootstrapStageCompiler>;
13
+ export declare function executeBootstrapStagesWithArtifactLoader(stage0: BootstrapStageCompiler, input: KernelInputV1, temporaryRoot: string): Promise<BootstrapStageExecutionResult>;
14
+ //# sourceMappingURL=bootstrap-stage-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-stage-loader.d.ts","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-stage-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAIN,KAAK,2BAA2B,EAChC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAEN,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,kCAAkC;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAenF;AAED,wBAAsB,iCAAiC,CACtD,QAAQ,EAAE,sBAAsB,EAChC,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,kCAAkC,CAAC,CAqE7C;AAED,wBAAsB,wCAAwC,CAC7D,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,6BAA6B,CAAC,CAkBxC"}
@@ -0,0 +1,112 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { mkdir, mkdtemp, readdir, rm, writeFile } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import { pathToFileURL } from 'node:url';
5
+ import { normalizeKernelPath } from './contract.js';
6
+ import { compileWithProjectCompilerBoundary, hasSelfhostProjectCompilerExports, readProjectCompilerCapability, } from './project-compiler-adapter.js';
7
+ import { executeBootstrapStages, } from './bootstrap-stage-executor.js';
8
+ export function verifyBootstrapStageArtifact(artifact) {
9
+ const serializedPayload = JSON.stringify({
10
+ metadata: artifact.metadata,
11
+ entryPath: artifact.entryPath,
12
+ modules: artifact.modules,
13
+ dependencies: artifact.dependencies,
14
+ exportedSymbols: artifact.exportedSymbols,
15
+ });
16
+ if (artifact.serializedPayload !== serializedPayload) {
17
+ throw new Error('Bootstrap stage artifact serialized payload does not match its fields');
18
+ }
19
+ const calculatedSha256 = createHash('sha256').update(serializedPayload, 'utf8').digest('hex');
20
+ if (artifact.sha256 !== calculatedSha256) {
21
+ throw new Error('Bootstrap stage artifact SHA-256 does not match its serialized payload');
22
+ }
23
+ }
24
+ export async function materializeBootstrapStageCompiler(artifact, temporaryRoot) {
25
+ verifyBootstrapStageArtifact(artifact);
26
+ await mkdir(temporaryRoot, { recursive: true });
27
+ const root = await mkdtemp(join(temporaryRoot, 'selfhost-stage-'));
28
+ try {
29
+ await writeFile(join(root, 'package.json'), '{"type":"module"}\n', 'utf8');
30
+ const outputPaths = new Set();
31
+ const entrySourcePath = normalizeKernelPath(artifact.entryPath, '$.entryPath');
32
+ const entryCandidates = [];
33
+ for (const [index, module] of artifact.modules.entries()) {
34
+ const sourcePath = normalizeKernelPath(module.sourcePath, `$.modules[${index}].sourcePath`);
35
+ const outputPath = normalizeKernelPath(module.outputPath, `$.modules[${index}].outputPath`);
36
+ if (!outputPath.endsWith('.js')) {
37
+ throw new Error(`Bootstrap stage module ${outputPath} must be JavaScript`);
38
+ }
39
+ if (outputPaths.has(outputPath)) {
40
+ throw new Error(`Bootstrap stage output path ${outputPath} must be unique`);
41
+ }
42
+ outputPaths.add(outputPath);
43
+ if (sourcePath === entrySourcePath)
44
+ entryCandidates.push(outputPath);
45
+ const destination = join(root, outputPath);
46
+ await mkdir(dirname(destination), { recursive: true });
47
+ await writeFile(destination, module.code, 'utf8');
48
+ }
49
+ if (entryCandidates.length !== 1) {
50
+ throw new Error(`Bootstrap stage entry ${entrySourcePath} must resolve to exactly one emitted module; found ${entryCandidates.length}`);
51
+ }
52
+ const entryModulePath = entryCandidates[0];
53
+ const moduleUrl = new URL(pathToFileURL(join(root, entryModulePath)).href);
54
+ moduleUrl.searchParams.set('stage', `${artifact.sha256}-${Date.now()}-${Math.random()}`);
55
+ const loaded = await import(moduleUrl.href);
56
+ if (loaded === null || typeof loaded !== 'object') {
57
+ throw new Error('Bootstrap stage compiler candidate must be an ES module object');
58
+ }
59
+ const candidate = loaded;
60
+ if (typeof candidate.compileMvp !== 'function' || !hasSelfhostProjectCompilerExports(candidate)) {
61
+ throw new Error('Bootstrap stage compiler candidate must export compileMvp, projectCompilerCapability, and compileProjectMvp');
62
+ }
63
+ const capability = readProjectCompilerCapability(candidate);
64
+ if (capability === null) {
65
+ throw new Error('Bootstrap stage compiler candidate must expose a project compiler capability');
66
+ }
67
+ if (!capability.ready) {
68
+ throw new Error(`Bootstrap stage compiler candidate is not ready: ${capability.blockers.join(', ')}`);
69
+ }
70
+ let disposed = false;
71
+ return {
72
+ root,
73
+ entryModulePath,
74
+ capability,
75
+ compiler: {
76
+ compile: input => compileWithProjectCompilerBoundary(candidate, input),
77
+ },
78
+ dispose: async () => {
79
+ if (disposed)
80
+ return;
81
+ disposed = true;
82
+ await rm(root, { recursive: true, force: true });
83
+ },
84
+ };
85
+ }
86
+ catch (error) {
87
+ await rm(root, { recursive: true, force: true });
88
+ throw error;
89
+ }
90
+ }
91
+ export async function executeBootstrapStagesWithArtifactLoader(stage0, input, temporaryRoot) {
92
+ const candidates = [];
93
+ try {
94
+ return await executeBootstrapStages(stage0, input, async (artifact) => {
95
+ if (candidates.length > 0) {
96
+ throw new Error('Bootstrap stage loader may materialize only one Stage 1 compiler');
97
+ }
98
+ const candidate = await materializeBootstrapStageCompiler(artifact, temporaryRoot);
99
+ candidates.push(candidate);
100
+ return candidate.compiler;
101
+ });
102
+ }
103
+ finally {
104
+ for (const candidate of candidates)
105
+ await candidate.dispose();
106
+ const remaining = await readdir(temporaryRoot).catch(() => []);
107
+ if (remaining.length === 0) {
108
+ await rm(temporaryRoot, { recursive: true, force: true });
109
+ }
110
+ }
111
+ }
112
+ //# sourceMappingURL=bootstrap-stage-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-stage-loader.js","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-stage-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type BootstrapStageExecutionResult } from './bootstrap-stage-executor.js';
2
+ import type { BootstrapStageReadinessResult } from './bootstrap-stage-runner.js';
3
+ export interface ReadyBootstrapStagePipelineOptions {
4
+ readonly temporaryRoot: string;
5
+ readonly stage0EntryModulePath?: string;
6
+ }
7
+ export declare function executeReadyBootstrapStages(readiness: BootstrapStageReadinessResult, inputValue: unknown, options: ReadyBootstrapStagePipelineOptions): Promise<BootstrapStageExecutionResult>;
8
+ //# sourceMappingURL=bootstrap-stage-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-stage-pipeline.d.ts","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-stage-pipeline.ts"],"names":[],"mappings":"AAWA,OAAO,EAEN,KAAK,6BAA6B,EAClC,MAAM,+BAA+B,CAAC;AAIvC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAGjF,MAAM,WAAW,kCAAkC;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,wBAAsB,2BAA2B,CAChD,SAAS,EAAE,6BAA6B,EACxC,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,kCAAkC,GACzC,OAAO,CAAC,6BAA6B,CAAC,CA4BxC"}
@@ -0,0 +1,85 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { mkdir, mkdtemp, rm } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { validateKernelInput, } from './contract.js';
5
+ import { loadBootstrapCompilerCandidate, materializeBootstrapCompilerCandidate, } from './bootstrap-execution-probe.js';
6
+ import { compilerFromSelfhostModule, } from './bootstrap-stage-executor.js';
7
+ import { executeBootstrapStagesWithArtifactLoader, } from './bootstrap-stage-loader.js';
8
+ import { createKernelSourceManifest } from './source-manifest.js';
9
+ export async function executeReadyBootstrapStages(readiness, inputValue, options) {
10
+ const input = validateKernelInput(inputValue);
11
+ assertReadyEvidence(readiness, input);
12
+ await mkdir(options.temporaryRoot, { recursive: true });
13
+ const pipelineRoot = await mkdtemp(join(options.temporaryRoot, 'selfhost-stage-pipeline-'));
14
+ try {
15
+ const stage0Root = join(pipelineRoot, 'stage0');
16
+ const stageRoot = join(pipelineRoot, 'stages');
17
+ const stage0CandidateRoot = await materializeBootstrapCompilerCandidate(readiness.stage0Compiler, stage0Root);
18
+ try {
19
+ const stage0Module = await loadBootstrapCompilerCandidate(stage0CandidateRoot, options.stage0EntryModulePath ?? 'dist/main.js');
20
+ return await executeBootstrapStagesWithArtifactLoader(compilerFromSelfhostModule(stage0Module), input, stageRoot);
21
+ }
22
+ finally {
23
+ await rm(stage0CandidateRoot, { recursive: true, force: true });
24
+ }
25
+ }
26
+ finally {
27
+ await rm(pipelineRoot, { recursive: true, force: true });
28
+ }
29
+ }
30
+ function assertReadyEvidence(readiness, input) {
31
+ const evidence = readiness.evidence;
32
+ const evidenceSerialized = JSON.stringify(evidence);
33
+ if (readiness.serialized !== evidenceSerialized || readiness.sha256 !== sha256(evidenceSerialized)) {
34
+ throw new Error('Bootstrap readiness evidence integrity check failed');
35
+ }
36
+ if (readiness.stage0Compiler.serialized !== JSON.stringify(readiness.stage0Compiler.artifact)
37
+ || readiness.stage0Compiler.sha256 !== sha256(readiness.stage0Compiler.serialized)) {
38
+ throw new Error('Bootstrap Stage 0 artifact integrity check failed');
39
+ }
40
+ if (readiness.sourceManifest.serialized !== JSON.stringify(readiness.sourceManifest.manifest)
41
+ || readiness.sourceManifest.sha256 !== sha256(readiness.sourceManifest.serialized)) {
42
+ throw new Error('Bootstrap source manifest integrity check failed');
43
+ }
44
+ if (!evidence.ready
45
+ || !evidence.capabilityReady
46
+ || evidence.blockers.length > 0
47
+ || evidence.capabilityBlockers.length > 0) {
48
+ const blockers = [...new Set([
49
+ ...evidence.blockers,
50
+ ...evidence.capabilityBlockers,
51
+ ])].sort();
52
+ throw new Error(`Stage 1/Stage 2 bootstrap is not ready (${blockers.join(', ') || 'unknown blocker'})`);
53
+ }
54
+ if (evidence.requiredExports.length !== 2
55
+ || evidence.requiredExports[0] !== 'projectCompilerCapability'
56
+ || evidence.requiredExports[1] !== 'compileProjectMvp') {
57
+ throw new Error('Bootstrap readiness required export witness is invalid');
58
+ }
59
+ if (evidence.capability === null || evidence.capabilitySha256 === null) {
60
+ throw new Error('Bootstrap readiness capability witness is missing');
61
+ }
62
+ if (evidence.capabilitySha256 !== sha256(JSON.stringify(evidence.capability))) {
63
+ throw new Error('Bootstrap readiness capability witness does not match the capability');
64
+ }
65
+ if (evidence.compilerArtifactSha256 !== readiness.stage0Compiler.sha256) {
66
+ throw new Error('Bootstrap readiness compiler artifact witness does not match Stage 0');
67
+ }
68
+ if (evidence.sourceManifestSha256 !== readiness.sourceManifest.sha256) {
69
+ throw new Error('Bootstrap readiness source manifest witness does not match the manifest');
70
+ }
71
+ const actualManifest = createKernelSourceManifest(input);
72
+ if (actualManifest.sha256 !== readiness.sourceManifest.sha256) {
73
+ throw new Error('Bootstrap readiness source manifest does not match the requested input');
74
+ }
75
+ if (evidence.sourceCount !== input.sources.length) {
76
+ throw new Error(`Bootstrap readiness source count mismatch: expected ${evidence.sourceCount}, received ${input.sources.length}`);
77
+ }
78
+ if (evidence.entryPath !== input.entryPath) {
79
+ throw new Error(`Bootstrap readiness entry path mismatch: expected ${evidence.entryPath}, received ${input.entryPath}`);
80
+ }
81
+ }
82
+ function sha256(value) {
83
+ return createHash('sha256').update(value).digest('hex');
84
+ }
85
+ //# sourceMappingURL=bootstrap-stage-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-stage-pipeline.js","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-stage-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { type ProjectBuildResult } from '../project/project.js';
2
+ import { type KernelInputV1 } from './contract.js';
3
+ import { type BootstrapArtifactSnapshotOptions } from './bootstrap-artifact-snapshot.js';
4
+ import type { NormalizedBootstrapArtifactResult } from './bootstrap-artifact-normalizer.js';
5
+ import type { SelfhostMvpModule } from './mvp-adapter.js';
6
+ import { type ProjectCompilerCapabilityV1 } from './project-compiler-adapter.js';
7
+ import { type KernelSourceManifestResultV1 } from './source-manifest.js';
8
+ export declare const BOOTSTRAP_STAGE_READINESS_POLICY_VERSION: 3;
9
+ export type BootstrapStageReadinessBlocker = 'multi-module-project-requires-project-compiler' | 'project-compiler-export-missing' | 'project-compiler-not-ready';
10
+ export interface BootstrapStageReadinessOptions extends Omit<BootstrapArtifactSnapshotOptions, 'stage'> {
11
+ readonly temporaryRoot: string;
12
+ readonly stage0EntryModulePath?: string;
13
+ }
14
+ export interface BootstrapStageReadinessEvidence {
15
+ readonly policyVersion: typeof BOOTSTRAP_STAGE_READINESS_POLICY_VERSION;
16
+ readonly claim: 'stage1-stage2-bootstrap-readiness';
17
+ readonly productionEligible: false;
18
+ readonly ready: boolean;
19
+ readonly compilerArtifactSha256: string;
20
+ readonly sourceManifestSha256: string;
21
+ readonly sourceCount: number;
22
+ readonly entryPath: string;
23
+ readonly requiredExports: readonly ['projectCompilerCapability', 'compileProjectMvp'];
24
+ readonly capability: ProjectCompilerCapabilityV1 | null;
25
+ readonly capabilitySha256: string | null;
26
+ readonly capabilityReady: boolean;
27
+ readonly capabilityBlockers: readonly string[];
28
+ readonly blockers: readonly BootstrapStageReadinessBlocker[];
29
+ }
30
+ export interface BootstrapStageReadinessResult {
31
+ readonly stage0Compiler: NormalizedBootstrapArtifactResult;
32
+ readonly sourceManifest: KernelSourceManifestResultV1;
33
+ readonly evidence: BootstrapStageReadinessEvidence;
34
+ readonly serialized: string;
35
+ readonly sha256: string;
36
+ }
37
+ /**
38
+ * Evaluate the last honest precondition before Stage 1/Stage 2 generation.
39
+ *
40
+ * Both project compiler exports and a versioned ready capability are required.
41
+ * A stub function export must never clear this gate.
42
+ */
43
+ export declare function evaluateSelfhostStageBootstrapReadiness(projectRoot: string, options: BootstrapStageReadinessOptions): Promise<BootstrapStageReadinessResult>;
44
+ export declare function readinessBlockers(module: SelfhostMvpModule, sourceCount: number): readonly BootstrapStageReadinessBlocker[];
45
+ export declare function readinessBlockersFromCapability(exportsAvailable: boolean, capability: ProjectCompilerCapabilityV1 | null, sourceCount: number): readonly BootstrapStageReadinessBlocker[];
46
+ export declare function kernelInputFromProjectBuild(build: ProjectBuildResult): KernelInputV1;
47
+ //# sourceMappingURL=bootstrap-stage-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-stage-runner.d.ts","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-stage-runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAMN,KAAK,aAAa,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEN,KAAK,gCAAgC,EACrC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,oCAAoC,CAAC;AAK5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAGN,KAAK,2BAA2B,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEN,KAAK,4BAA4B,EACjC,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,wCAAwC,EAAG,CAAU,CAAC;AAEnE,MAAM,MAAM,8BAA8B,GACvC,gDAAgD,GAChD,iCAAiC,GACjC,4BAA4B,CAAC;AAEhC,MAAM,WAAW,8BAChB,SAAQ,IAAI,CAAC,gCAAgC,EAAE,OAAO,CAAC;IACvD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,CAAC,aAAa,EAAE,OAAO,wCAAwC,CAAC;IACxE,QAAQ,CAAC,KAAK,EAAE,mCAAmC,CAAC;IACpD,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC,2BAA2B,EAAE,mBAAmB,CAAC,CAAC;IACtF,QAAQ,CAAC,UAAU,EAAE,2BAA2B,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,SAAS,8BAA8B,EAAE,CAAC;CAC7D;AAED,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,cAAc,EAAE,iCAAiC,CAAC;IAC3D,QAAQ,CAAC,cAAc,EAAE,4BAA4B,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,uCAAuC,CAC5D,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,8BAA8B,GACrC,OAAO,CAAC,6BAA6B,CAAC,CAmDxC;AAED,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,MAAM,GACjB,SAAS,8BAA8B,EAAE,CAM3C;AAED,wBAAgB,+BAA+B,CAC9C,gBAAgB,EAAE,OAAO,EACzB,UAAU,EAAE,2BAA2B,GAAG,IAAI,EAC9C,WAAW,EAAE,MAAM,GACjB,SAAS,8BAA8B,EAAE,CAa3C;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAmBpF"}
@@ -0,0 +1,106 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { rm } from 'node:fs/promises';
3
+ import { relative } from 'node:path';
4
+ import { buildProject } from '../project/project.js';
5
+ import { KERNEL_CONTRACT_VERSION, KERNEL_INTEROP_MANIFEST_VERSION, KERNEL_LANGUAGE_VERSION, normalizeKernelPath, validateKernelInput, } from './contract.js';
6
+ import { snapshotProjectBuild, } from './bootstrap-artifact-snapshot.js';
7
+ import { loadBootstrapCompilerCandidate, materializeBootstrapCompilerCandidate, } from './bootstrap-execution-probe.js';
8
+ import { hasSelfhostProjectCompilerExports, readProjectCompilerCapability, } from './project-compiler-adapter.js';
9
+ import { createKernelSourceManifest, } from './source-manifest.js';
10
+ export const BOOTSTRAP_STAGE_READINESS_POLICY_VERSION = 3;
11
+ /**
12
+ * Evaluate the last honest precondition before Stage 1/Stage 2 generation.
13
+ *
14
+ * Both project compiler exports and a versioned ready capability are required.
15
+ * A stub function export must never clear this gate.
16
+ */
17
+ export async function evaluateSelfhostStageBootstrapReadiness(projectRoot, options) {
18
+ const build = await buildProject(projectRoot, { write: false });
19
+ const input = kernelInputFromBuild(build);
20
+ const sourceManifest = createKernelSourceManifest(input);
21
+ const stage0Compiler = snapshotProjectBuild(build, {
22
+ ...options,
23
+ stage: 'stage0',
24
+ });
25
+ const temporaryDirectory = await materializeBootstrapCompilerCandidate(stage0Compiler, options.temporaryRoot);
26
+ try {
27
+ const module = await loadBootstrapCompilerCandidate(temporaryDirectory, options.stage0EntryModulePath ?? 'dist/main.js');
28
+ const capability = readProjectCompilerCapability(module);
29
+ const capabilitySerialized = capability === null ? null : JSON.stringify(capability);
30
+ const blockers = readinessBlockersFromCapability(hasSelfhostProjectCompilerExports(module), capability, input.sources.length);
31
+ const evidence = {
32
+ policyVersion: BOOTSTRAP_STAGE_READINESS_POLICY_VERSION,
33
+ claim: 'stage1-stage2-bootstrap-readiness',
34
+ productionEligible: false,
35
+ ready: blockers.length === 0,
36
+ compilerArtifactSha256: stage0Compiler.sha256,
37
+ sourceManifestSha256: sourceManifest.sha256,
38
+ sourceCount: input.sources.length,
39
+ entryPath: input.entryPath,
40
+ requiredExports: ['projectCompilerCapability', 'compileProjectMvp'],
41
+ capability,
42
+ capabilitySha256: capabilitySerialized === null ? null : sha256(capabilitySerialized),
43
+ capabilityReady: capability?.ready ?? false,
44
+ capabilityBlockers: capability?.blockers ?? [],
45
+ blockers,
46
+ };
47
+ const serialized = JSON.stringify(evidence);
48
+ return {
49
+ stage0Compiler,
50
+ sourceManifest,
51
+ evidence,
52
+ serialized,
53
+ sha256: sha256(serialized),
54
+ };
55
+ }
56
+ finally {
57
+ await rm(temporaryDirectory, { recursive: true, force: true });
58
+ }
59
+ }
60
+ export function readinessBlockers(module, sourceCount) {
61
+ return readinessBlockersFromCapability(hasSelfhostProjectCompilerExports(module), readProjectCompilerCapability(module), sourceCount);
62
+ }
63
+ export function readinessBlockersFromCapability(exportsAvailable, capability, sourceCount) {
64
+ if (!Number.isSafeInteger(sourceCount) || sourceCount <= 0) {
65
+ throw new Error('sourceCount must be a positive safe integer');
66
+ }
67
+ const ready = exportsAvailable && capability?.ready === true;
68
+ const blockers = new Set();
69
+ if (sourceCount > 1 && !ready)
70
+ blockers.add('multi-module-project-requires-project-compiler');
71
+ if (!exportsAvailable || capability === null) {
72
+ blockers.add('project-compiler-export-missing');
73
+ }
74
+ else if (!capability.ready) {
75
+ blockers.add('project-compiler-not-ready');
76
+ }
77
+ return [...blockers].sort();
78
+ }
79
+ export function kernelInputFromProjectBuild(build) {
80
+ if (build.config.platform !== 'node')
81
+ throw new Error('Self-host bootstrap requires the node platform');
82
+ const errors = build.diagnostics.filter(diagnostic => diagnostic.severity === 'error');
83
+ if (errors.length > 0) {
84
+ throw new Error(`Self-host project build failed with ${errors.length} error diagnostic(s)`);
85
+ }
86
+ const sources = build.modules.map(module => ({
87
+ path: normalizeKernelPath(relative(build.root, module.source.path).replaceAll('\\', '/')),
88
+ text: module.source.text,
89
+ }));
90
+ return validateKernelInput({
91
+ contractVersion: KERNEL_CONTRACT_VERSION,
92
+ languageVersion: KERNEL_LANGUAGE_VERSION,
93
+ platform: 'node',
94
+ entryPath: normalizeKernelPath(build.config.entry),
95
+ sources,
96
+ interopManifest: { version: KERNEL_INTEROP_MANIFEST_VERSION, modules: [] },
97
+ emit: { target: 'es2022', sourceMap: false, sourcesContent: true },
98
+ });
99
+ }
100
+ function kernelInputFromBuild(build) {
101
+ return kernelInputFromProjectBuild(build);
102
+ }
103
+ function sha256(value) {
104
+ return createHash('sha256').update(value).digest('hex');
105
+ }
106
+ //# sourceMappingURL=bootstrap-stage-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-stage-runner.js","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-stage-runner.ts"],"names":[],"mappings":"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"}