@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,226 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { posix } from 'node:path';
3
+ export const BOOTSTRAP_ARTIFACT_POLICY_VERSION = 1;
4
+ const IGNORED_METADATA_FIELDS = ['generatedAt', 'runId'];
5
+ const ignoredMetadataFieldSet = new Set(IGNORED_METADATA_FIELDS);
6
+ const sha256Pattern = /^[0-9a-f]{64}$/u;
7
+ export function normalizeBootstrapArtifact(input) {
8
+ if (input.policyVersion !== BOOTSTRAP_ARTIFACT_POLICY_VERSION) {
9
+ throw new Error(`Unsupported bootstrap artifact policy version: ${input.policyVersion}`);
10
+ }
11
+ const root = normalizeRoot(input.root);
12
+ const modules = input.modules.map(module => normalizeModule(module, root)).sort(comparePath);
13
+ assertUniquePaths(modules.map(module => module.path), 'module');
14
+ const checksumManifest = input.checksumManifest
15
+ .map(entry => normalizeChecksum(entry, root))
16
+ .sort(comparePath);
17
+ assertUniquePaths(checksumManifest.map(entry => entry.path), 'checksum');
18
+ const artifact = {
19
+ policy: {
20
+ version: BOOTSTRAP_ARTIFACT_POLICY_VERSION,
21
+ ignoredMetadataFields: [...IGNORED_METADATA_FIELDS],
22
+ },
23
+ moduleOrder: modules.map(module => module.path),
24
+ modules,
25
+ diagnosticsSchema: canonicalizeJson(input.diagnosticsSchema),
26
+ metadata: normalizeMetadata(input.metadata),
27
+ checksumManifest,
28
+ };
29
+ const serialized = JSON.stringify(artifact);
30
+ return {
31
+ artifact,
32
+ serialized,
33
+ sha256: createHash('sha256').update(serialized).digest('hex'),
34
+ };
35
+ }
36
+ export function diffBootstrapArtifacts(before, after) {
37
+ const changes = [];
38
+ const beforeValue = JSON.parse(before.serialized);
39
+ const afterValue = JSON.parse(after.serialized);
40
+ collectDiff(beforeValue, afterValue, '', changes);
41
+ return {
42
+ equal: changes.length === 0,
43
+ beforeSha256: before.sha256,
44
+ afterSha256: after.sha256,
45
+ changes,
46
+ };
47
+ }
48
+ function normalizeModule(module, root) {
49
+ const path = canonicalizeArtifactPath(module.path, root);
50
+ const exports = [...module.exports].sort(compareText);
51
+ assertUniqueValues(exports, `exports for ${path}`);
52
+ return {
53
+ path,
54
+ code: normalizeLineEndings(module.code),
55
+ sourceMap: canonicalizeSourceMap(module.sourceMap, root),
56
+ exports,
57
+ };
58
+ }
59
+ function normalizeChecksum(entry, root) {
60
+ const sha256 = entry.sha256.toLowerCase();
61
+ if (!sha256Pattern.test(sha256)) {
62
+ throw new Error(`Invalid SHA-256 for ${entry.path}`);
63
+ }
64
+ return {
65
+ path: canonicalizeArtifactPath(entry.path, root),
66
+ sha256,
67
+ };
68
+ }
69
+ function normalizeMetadata(metadata) {
70
+ const normalized = {};
71
+ for (const key of Object.keys(metadata).sort(compareText)) {
72
+ if (ignoredMetadataFieldSet.has(key))
73
+ continue;
74
+ const value = metadata[key];
75
+ if (value === undefined)
76
+ throw new Error(`Metadata field ${key} is undefined`);
77
+ normalized[key] = canonicalizeJson(value);
78
+ }
79
+ return normalized;
80
+ }
81
+ function canonicalizeSourceMap(value, root, path = []) {
82
+ if (value === null || typeof value === 'boolean' || typeof value === 'number') {
83
+ return canonicalizeJson(value);
84
+ }
85
+ if (typeof value === 'string') {
86
+ const key = path.at(-1);
87
+ const parent = path.at(-2);
88
+ if (key === 'file' || parent === 'sources')
89
+ return canonicalizeArtifactPath(value, root);
90
+ if (key === 'sourceRoot')
91
+ return value.length === 0 ? '' : canonicalizeArtifactPath(value, root);
92
+ return value;
93
+ }
94
+ if (Array.isArray(value)) {
95
+ return value.map((entry, index) => canonicalizeSourceMap(entry, root, [...path, String(index)]));
96
+ }
97
+ const objectValue = value;
98
+ const normalized = {};
99
+ for (const key of Object.keys(objectValue).sort(compareText)) {
100
+ const entry = objectValue[key];
101
+ if (entry === undefined)
102
+ throw new Error(`Source map field ${[...path, key].join('.')} is undefined`);
103
+ normalized[key] = canonicalizeSourceMap(entry, root, [...path, key]);
104
+ }
105
+ return normalized;
106
+ }
107
+ function canonicalizeJson(value, path = []) {
108
+ if (value === null || typeof value === 'boolean' || typeof value === 'string')
109
+ return value;
110
+ if (typeof value === 'number') {
111
+ if (!Number.isFinite(value))
112
+ throw new Error(`Non-finite JSON number at ${path.join('.') || '<root>'}`);
113
+ return value;
114
+ }
115
+ if (Array.isArray(value)) {
116
+ return value.map((entry, index) => canonicalizeJson(entry, [...path, String(index)]));
117
+ }
118
+ const objectValue = value;
119
+ const normalized = {};
120
+ for (const key of Object.keys(objectValue).sort(compareText)) {
121
+ const entry = objectValue[key];
122
+ if (entry === undefined)
123
+ throw new Error(`JSON field ${[...path, key].join('.')} is undefined`);
124
+ normalized[key] = canonicalizeJson(entry, [...path, key]);
125
+ }
126
+ return normalized;
127
+ }
128
+ function canonicalizeArtifactPath(value, root) {
129
+ let candidate = normalizeSlashes(value);
130
+ if (candidate.startsWith('file://'))
131
+ candidate = candidate.slice('file://'.length);
132
+ if (root.length > 0) {
133
+ if (candidate === root)
134
+ candidate = '.';
135
+ else if (candidate.startsWith(`${root}/`))
136
+ candidate = candidate.slice(root.length + 1);
137
+ }
138
+ while (candidate.startsWith('./'))
139
+ candidate = candidate.slice(2);
140
+ candidate = posix.normalize(candidate);
141
+ if (candidate.length === 0 || candidate === '.')
142
+ throw new Error(`Artifact path must reference a file: ${value}`);
143
+ if (candidate === '..' || candidate.startsWith('../') || candidate.startsWith('/') || /^[A-Za-z]:\//u.test(candidate)) {
144
+ throw new Error(`Artifact path escapes the configured root: ${value}`);
145
+ }
146
+ return candidate;
147
+ }
148
+ function normalizeRoot(value) {
149
+ let root = normalizeSlashes(value);
150
+ if (root.startsWith('file://'))
151
+ root = root.slice('file://'.length);
152
+ while (root.length > 1 && root.endsWith('/'))
153
+ root = root.slice(0, -1);
154
+ return root;
155
+ }
156
+ function normalizeSlashes(value) {
157
+ return value.replaceAll('\\', '/');
158
+ }
159
+ function normalizeLineEndings(value) {
160
+ return value.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
161
+ }
162
+ function assertUniquePaths(paths, kind) {
163
+ assertUniqueValues(paths, `${kind} paths`);
164
+ }
165
+ function assertUniqueValues(values, kind) {
166
+ for (let index = 1; index < values.length; index += 1) {
167
+ if (values[index] === values[index - 1])
168
+ throw new Error(`Duplicate ${kind}: ${values[index]}`);
169
+ }
170
+ }
171
+ function comparePath(left, right) {
172
+ return compareText(left.path, right.path);
173
+ }
174
+ function compareText(left, right) {
175
+ return left < right ? -1 : left > right ? 1 : 0;
176
+ }
177
+ function collectDiff(before, after, path, changes) {
178
+ if (before === undefined || after === undefined) {
179
+ pushDiff(path, before, after, changes);
180
+ return;
181
+ }
182
+ if (isPrimitive(before) || isPrimitive(after)) {
183
+ if (!Object.is(before, after))
184
+ pushDiff(path, before, after, changes);
185
+ return;
186
+ }
187
+ if (Array.isArray(before) || Array.isArray(after)) {
188
+ if (!Array.isArray(before) || !Array.isArray(after)) {
189
+ pushDiff(path, before, after, changes);
190
+ return;
191
+ }
192
+ const length = Math.max(before.length, after.length);
193
+ for (let index = 0; index < length; index += 1) {
194
+ collectDiff(before[index], after[index], `${path}[${index}]`, changes);
195
+ }
196
+ return;
197
+ }
198
+ const beforeObject = before;
199
+ const afterObject = after;
200
+ const keys = [...new Set([...Object.keys(beforeObject), ...Object.keys(afterObject)])].sort(compareText);
201
+ for (const key of keys) {
202
+ const childPath = path.length === 0 ? key : `${path}.${key}`;
203
+ collectDiff(beforeObject[key], afterObject[key], childPath, changes);
204
+ }
205
+ }
206
+ function isPrimitive(value) {
207
+ return value === null || typeof value !== 'object';
208
+ }
209
+ function pushDiff(path, before, after, changes) {
210
+ changes.push({
211
+ section: sectionOf(path),
212
+ path: path.length === 0 ? '<root>' : path,
213
+ before: before === undefined ? '<missing>' : JSON.stringify(before),
214
+ after: after === undefined ? '<missing>' : JSON.stringify(after),
215
+ });
216
+ }
217
+ function sectionOf(path) {
218
+ if (path.length === 0)
219
+ return '<root>';
220
+ const dot = path.indexOf('.');
221
+ const bracket = path.indexOf('[');
222
+ const boundaryCandidates = [dot, bracket].filter(value => value >= 0);
223
+ const boundary = boundaryCandidates.length === 0 ? path.length : Math.min(...boundaryCandidates);
224
+ return path.slice(0, boundary);
225
+ }
226
+ //# sourceMappingURL=bootstrap-artifact-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-artifact-normalizer.js","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-artifact-normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ProjectBuildResult } from '../project/project.js';
2
+ import { type JsonValue, type NormalizedBootstrapArtifactResult } from './bootstrap-artifact-normalizer.js';
3
+ export type BootstrapStage = 'stage0' | 'stage1' | 'stage2';
4
+ export interface BootstrapArtifactSnapshotOptions {
5
+ readonly stage: BootstrapStage;
6
+ readonly compilerVersion: string;
7
+ readonly runtimeAbi: string;
8
+ readonly interopAbi: string;
9
+ readonly seedSha256?: string;
10
+ readonly generatedAt?: string;
11
+ readonly runId?: string;
12
+ readonly metadata?: Readonly<Record<string, JsonValue>>;
13
+ readonly diagnosticsSchema?: JsonValue;
14
+ }
15
+ /**
16
+ * Convert an actual project build into the versioned bootstrap artifact model.
17
+ * The snapshot is data-only and is suitable for Stage 1/Stage 2 comparison,
18
+ * but it does not perform either stage or select a production compiler.
19
+ */
20
+ export declare function snapshotProjectBuild(result: ProjectBuildResult, options: BootstrapArtifactSnapshotOptions): NormalizedBootstrapArtifactResult;
21
+ /** Extract the finite ES module export forms emitted by Virune's emitter. */
22
+ export declare function extractGeneratedModuleExports(code: string): readonly string[];
23
+ //# sourceMappingURL=bootstrap-artifact-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-artifact-snapshot.d.ts","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-artifact-snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAGN,KAAK,SAAS,EACd,KAAK,iCAAiC,EACtC,MAAM,oCAAoC,CAAC;AAE5C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC;CACvC;AAgBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,gCAAgC,GACvC,iCAAiC,CAsDnC;AAED,6EAA6E;AAC7E,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAqB7E"}
@@ -0,0 +1,122 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { BOOTSTRAP_ARTIFACT_POLICY_VERSION, normalizeBootstrapArtifact, } from './bootstrap-artifact-normalizer.js';
3
+ const defaultDiagnosticsSchema = {
4
+ type: 'object',
5
+ required: ['code', 'severity', 'message', 'span'],
6
+ properties: {
7
+ code: { type: 'string' },
8
+ severity: { enum: ['error', 'warning'] },
9
+ message: { type: 'string' },
10
+ span: {
11
+ type: 'object',
12
+ required: ['file', 'start', 'end'],
13
+ },
14
+ },
15
+ };
16
+ /**
17
+ * Convert an actual project build into the versioned bootstrap artifact model.
18
+ * The snapshot is data-only and is suitable for Stage 1/Stage 2 comparison,
19
+ * but it does not perform either stage or select a production compiler.
20
+ */
21
+ export function snapshotProjectBuild(result, options) {
22
+ const errors = result.diagnostics.filter(diagnostic => diagnostic.severity === 'error');
23
+ if (errors.length > 0) {
24
+ throw new Error(`Cannot snapshot a failed project build: ${errors.length} error diagnostic(s)`);
25
+ }
26
+ assertNonEmpty(options.compilerVersion, 'compilerVersion');
27
+ assertNonEmpty(options.runtimeAbi, 'runtimeAbi');
28
+ assertNonEmpty(options.interopAbi, 'interopAbi');
29
+ if (options.seedSha256 !== undefined)
30
+ assertSha256(options.seedSha256, 'seedSha256');
31
+ const modules = result.modules.flatMap(module => {
32
+ if (module.output === undefined && module.outputPath === undefined)
33
+ return [];
34
+ if (module.output === undefined || module.outputPath === undefined) {
35
+ throw new Error(`Incomplete emitted module snapshot for ${module.source.path}`);
36
+ }
37
+ return [{
38
+ path: module.outputPath,
39
+ code: module.output.code,
40
+ sourceMap: parseSourceMap(module.output.map, module.outputPath),
41
+ exports: extractGeneratedModuleExports(module.output.code),
42
+ }];
43
+ });
44
+ if (modules.length === 0)
45
+ throw new Error('Cannot snapshot a project build with no emitted modules');
46
+ const checksumManifest = modules.flatMap(module => {
47
+ const codeEntry = { path: module.path, sha256: sha256(module.code) };
48
+ if (!result.config.sourceMap)
49
+ return [codeEntry];
50
+ const sourceModule = result.modules.find(item => item.outputPath === module.path);
51
+ if (sourceModule?.output === undefined)
52
+ throw new Error(`Missing source map for ${module.path}`);
53
+ return [codeEntry, { path: `${module.path}.map`, sha256: sha256(sourceModule.output.map) }];
54
+ });
55
+ return normalizeBootstrapArtifact({
56
+ policyVersion: BOOTSTRAP_ARTIFACT_POLICY_VERSION,
57
+ root: result.root,
58
+ modules,
59
+ diagnosticsSchema: options.diagnosticsSchema ?? defaultDiagnosticsSchema,
60
+ metadata: {
61
+ ...options.metadata,
62
+ stage: options.stage,
63
+ compilerVersion: options.compilerVersion,
64
+ languageVersion: result.config.languageVersion,
65
+ platform: result.config.platform,
66
+ target: result.config.target,
67
+ runtimeAbi: options.runtimeAbi,
68
+ interopAbi: options.interopAbi,
69
+ sourceMap: result.config.sourceMap,
70
+ sourcesContent: result.config.sourcesContent,
71
+ ...(options.seedSha256 === undefined ? {} : { seedSha256: options.seedSha256.toLowerCase() }),
72
+ ...(options.generatedAt === undefined ? {} : { generatedAt: options.generatedAt }),
73
+ ...(options.runId === undefined ? {} : { runId: options.runId }),
74
+ },
75
+ checksumManifest,
76
+ });
77
+ }
78
+ /** Extract the finite ES module export forms emitted by Virune's emitter. */
79
+ export function extractGeneratedModuleExports(code) {
80
+ const exports = [];
81
+ const declarationPattern = /(?:^|\n)export\s+(?:async\s+)?(?:function|const)\s+([A-Za-z_$][A-Za-z0-9_$]*)/gu;
82
+ for (const match of code.matchAll(declarationPattern)) {
83
+ const name = match[1];
84
+ if (name !== undefined)
85
+ exports.push(name);
86
+ }
87
+ const listPattern = /(?:^|\n)export\s*\{([^}]*)\};/gu;
88
+ for (const match of code.matchAll(listPattern)) {
89
+ for (const entry of (match[1] ?? '').split(',')) {
90
+ const value = entry.trim();
91
+ if (value.length === 0)
92
+ continue;
93
+ const parts = value.split(/\s+as\s+/u);
94
+ const name = parts.at(-1);
95
+ if (name === undefined || !/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(name)) {
96
+ throw new Error(`Unsupported generated export entry: ${value}`);
97
+ }
98
+ exports.push(name);
99
+ }
100
+ }
101
+ return exports;
102
+ }
103
+ function parseSourceMap(value, outputPath) {
104
+ try {
105
+ return JSON.parse(value);
106
+ }
107
+ catch (error) {
108
+ throw new Error(`Invalid source map for ${outputPath}: ${error instanceof Error ? error.message : String(error)}`);
109
+ }
110
+ }
111
+ function sha256(value) {
112
+ return createHash('sha256').update(value).digest('hex');
113
+ }
114
+ function assertNonEmpty(value, name) {
115
+ if (value.length === 0)
116
+ throw new Error(`${name} must not be empty`);
117
+ }
118
+ function assertSha256(value, name) {
119
+ if (!/^[0-9a-f]{64}$/iu.test(value))
120
+ throw new Error(`${name} must be a SHA-256 value`);
121
+ }
122
+ //# sourceMappingURL=bootstrap-artifact-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-artifact-snapshot.js","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-artifact-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { BootstrapStageArtifact } from './bootstrap-stage-executor.js';
2
+ import { type BootstrapRollbackDecisionResult } from './bootstrap-rollback-decision.js';
3
+ import { type InternalKernelCompiler } from './compiler-facade.js';
4
+ import type { KernelOutputV1 } from './contract.js';
5
+ export interface BootstrapSelfHostCandidate {
6
+ readonly artifact: BootstrapStageArtifact;
7
+ readonly temporaryRoot: string;
8
+ }
9
+ export interface BootstrapCompilerSelectionRequest {
10
+ readonly rollbackDecision: unknown;
11
+ readonly input: unknown;
12
+ readonly selfHostCandidate?: BootstrapSelfHostCandidate;
13
+ }
14
+ export interface BootstrapCompilerSelectionDependencies {
15
+ readonly legacyCompiler?: InternalKernelCompiler;
16
+ }
17
+ export interface BootstrapCompilerSelectionResult {
18
+ readonly rollback: BootstrapRollbackDecisionResult;
19
+ readonly selection: 'legacy' | 'self-host';
20
+ readonly output: KernelOutputV1;
21
+ readonly materializedStageArtifactSha256: string | null;
22
+ }
23
+ export declare class BootstrapCompilerSelectionError extends Error {
24
+ readonly path: string;
25
+ readonly name = "BootstrapCompilerSelectionError";
26
+ constructor(path: string, message: string);
27
+ }
28
+ /**
29
+ * Evaluate rollback evidence before touching a Self-host compiler candidate.
30
+ *
31
+ * A Legacy rollback must remain usable when the candidate artifact is missing,
32
+ * corrupt, or otherwise impossible to materialize. The Stage artifact is read
33
+ * only after the rollback decision explicitly selects Self-host execution.
34
+ */
35
+ export declare function executeBootstrapCompilerSelection(request: BootstrapCompilerSelectionRequest, dependencies?: BootstrapCompilerSelectionDependencies): Promise<BootstrapCompilerSelectionResult>;
36
+ //# sourceMappingURL=bootstrap-compiler-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-compiler-selection.d.ts","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-compiler-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAEN,KAAK,+BAA+B,EACpC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAGN,KAAK,sBAAsB,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iCAAiC;IACjD,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;CACxD;AAED,MAAM,WAAW,sCAAsC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACjD;AAED,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,+BAA+B,EAAE,MAAM,GAAG,IAAI,CAAC;CACxD;AAED,qBAAa,+BAAgC,SAAQ,KAAK;aAEtB,IAAI,EAAE,MAAM;IAD/C,SAAyB,IAAI,qCAAqC;gBAC/B,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGhE;AAED;;;;;;GAMG;AACH,wBAAsB,iCAAiC,CACtD,OAAO,EAAE,iCAAiC,EAC1C,YAAY,GAAE,sCAA2C,GACvD,OAAO,CAAC,gCAAgC,CAAC,CAsC3C"}
@@ -0,0 +1,52 @@
1
+ import { evaluateBootstrapRollbackDecision, } from './bootstrap-rollback-decision.js';
2
+ import { createInternalCompilerFacade, } from './compiler-facade.js';
3
+ import { materializeStageCompilerFacade } from './stage-compiler-facade.js';
4
+ export class BootstrapCompilerSelectionError extends Error {
5
+ path;
6
+ name = 'BootstrapCompilerSelectionError';
7
+ constructor(path, message) {
8
+ super(`${path}: ${message}`);
9
+ this.path = path;
10
+ }
11
+ }
12
+ /**
13
+ * Evaluate rollback evidence before touching a Self-host compiler candidate.
14
+ *
15
+ * A Legacy rollback must remain usable when the candidate artifact is missing,
16
+ * corrupt, or otherwise impossible to materialize. The Stage artifact is read
17
+ * only after the rollback decision explicitly selects Self-host execution.
18
+ */
19
+ export async function executeBootstrapCompilerSelection(request, dependencies = {}) {
20
+ const rollback = evaluateBootstrapRollbackDecision(request.rollbackDecision);
21
+ if (rollback.decision.selection === 'legacy') {
22
+ const facadeDependencies = {
23
+ ...(dependencies.legacyCompiler === undefined
24
+ ? {}
25
+ : { legacyCompiler: dependencies.legacyCompiler }),
26
+ };
27
+ const facade = createInternalCompilerFacade(facadeDependencies);
28
+ return {
29
+ rollback,
30
+ selection: 'legacy',
31
+ output: await facade.compile(request.input, { selection: 'legacy' }),
32
+ materializedStageArtifactSha256: null,
33
+ };
34
+ }
35
+ const candidate = request.selfHostCandidate;
36
+ if (candidate === undefined) {
37
+ throw new BootstrapCompilerSelectionError('request.selfHostCandidate', 'Self-host selection requires a Stage compiler candidate');
38
+ }
39
+ const facade = await materializeStageCompilerFacade(candidate.artifact, candidate.temporaryRoot);
40
+ try {
41
+ return {
42
+ rollback,
43
+ selection: 'self-host',
44
+ output: await facade.compile(request.input, { selection: 'self-host' }),
45
+ materializedStageArtifactSha256: facade.artifactSha256,
46
+ };
47
+ }
48
+ finally {
49
+ await facade.dispose();
50
+ }
51
+ }
52
+ //# sourceMappingURL=bootstrap-compiler-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-compiler-selection.js","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-compiler-selection.ts"],"names":[],"mappings":"AACA,OAAO,EACN,iCAAiC,GAEjC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACN,4BAA4B,GAG5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAwB5E,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAEtB;IADV,IAAI,GAAG,iCAAiC,CAAC;IAClE,YAAmC,IAAY,EAAE,OAAe;QAC/D,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QADK,SAAI,GAAJ,IAAI,CAAQ;IAE/C,CAAC;CACD;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACtD,OAA0C,EAC1C,eAAuD,EAAE;IAEzD,MAAM,QAAQ,GAAG,iCAAiC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,kBAAkB,GAAuC;YAC9D,GAAG,CAAC,YAAY,CAAC,cAAc,KAAK,SAAS;gBAC5C,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,cAAc,EAAE,YAAY,CAAC,cAAc,EAAE,CAAC;SACnD,CAAC;QACF,MAAM,MAAM,GAAG,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;QAChE,OAAO;YACN,QAAQ;YACR,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YACpE,+BAA+B,EAAE,IAAI;SACrC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAC5C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,+BAA+B,CACxC,2BAA2B,EAC3B,yDAAyD,CACzD,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAClD,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,aAAa,CACvB,CAAC;IACF,IAAI,CAAC;QACJ,OAAO;YACN,QAAQ;YACR,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;YACvE,+BAA+B,EAAE,MAAM,CAAC,cAAc;SACtD,CAAC;IACH,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;AACF,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { type KernelOutputV1 } from './contract.js';
2
+ import { type BootstrapArtifactSnapshotOptions } from './bootstrap-artifact-snapshot.js';
3
+ import type { NormalizedBootstrapArtifactResult } from './bootstrap-artifact-normalizer.js';
4
+ import { type SelfhostMvpModule } from './mvp-adapter.js';
5
+ export declare const BOOTSTRAP_EXECUTION_PROBE_VERSION: 1;
6
+ export interface BootstrapExecutionProbeOptions extends Omit<BootstrapArtifactSnapshotOptions, 'stage'> {
7
+ readonly temporaryRoot: string;
8
+ readonly entryModulePath?: string;
9
+ }
10
+ export interface BootstrapExecutionProbeArtifact {
11
+ readonly policyVersion: typeof BOOTSTRAP_EXECUTION_PROBE_VERSION;
12
+ readonly claim: 'stage0-compiler-execution-probe';
13
+ readonly productionEligible: false;
14
+ readonly compilerArtifactSha256: string;
15
+ readonly inputSha256: string;
16
+ readonly outputSha256: string;
17
+ readonly accepted: boolean;
18
+ readonly diagnosticCodes: readonly string[];
19
+ readonly emittedModulePaths: readonly string[];
20
+ }
21
+ export interface BootstrapExecutionProbeResult {
22
+ readonly compilerArtifact: NormalizedBootstrapArtifactResult;
23
+ readonly output: KernelOutputV1;
24
+ readonly artifact: BootstrapExecutionProbeArtifact;
25
+ readonly serialized: string;
26
+ readonly sha256: string;
27
+ }
28
+ /**
29
+ * Build the current Self-host MVP with Stage 0, load the emitted compiler as an
30
+ * executable candidate, and compile one canonical Kernel Contract input.
31
+ *
32
+ * This is deliberately an execution probe. It does not claim that the emitted
33
+ * compiler rebuilt its own multi-module source tree, produced Stage 1/2, or is
34
+ * eligible for production promotion.
35
+ */
36
+ export declare function runBootstrapExecutionProbe(projectRoot: string, value: unknown, options: BootstrapExecutionProbeOptions): Promise<BootstrapExecutionProbeResult>;
37
+ export declare function validateSelfhostMvpModule(value: unknown): SelfhostMvpModule;
38
+ /** Materialize a normalized compiler artifact without changing repository outputs. */
39
+ export declare function materializeBootstrapCompilerCandidate(compilerArtifact: NormalizedBootstrapArtifactResult, temporaryRoot: string): Promise<string>;
40
+ /** Load the declared compiler entry from an isolated materialized artifact. */
41
+ export declare function loadBootstrapCompilerCandidate(root: string, entryModulePath: string): Promise<SelfhostMvpModule>;
42
+ //# sourceMappingURL=bootstrap-execution-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-execution-probe.d.ts","sourceRoot":"","sources":["../../../src/selfhost/bootstrap-execution-probe.ts"],"names":[],"mappings":"AAKA,OAAO,EAKN,KAAK,cAAc,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEN,KAAK,gCAAgC,EACrC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,oCAAoC,CAAC;AAC5F,OAAO,EAEN,KAAK,iBAAiB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,iCAAiC,EAAG,CAAU,CAAC;AAE5D,MAAM,WAAW,8BAChB,SAAQ,IAAI,CAAC,gCAAgC,EAAE,OAAO,CAAC;IACvD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,CAAC,aAAa,EAAE,OAAO,iCAAiC,CAAC;IACjE,QAAQ,CAAC,KAAK,EAAE,iCAAiC,CAAC;IAClD,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC;IACnC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC/C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,8BAA8B,GACrC,OAAO,CAAC,6BAA6B,CAAC,CA6BxC;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAS3E;AAED,sFAAsF;AACtF,wBAAsB,qCAAqC,CAC1D,gBAAgB,EAAE,iCAAiC,EACnD,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,+EAA+E;AAC/E,wBAAsB,8BAA8B,CACnD,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAM5B"}