@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.
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/dist/src/analysis/control-flow.d.ts +9 -0
- package/dist/src/analysis/control-flow.d.ts.map +1 -0
- package/dist/src/analysis/control-flow.js +47 -0
- package/dist/src/analysis/control-flow.js.map +1 -0
- package/dist/src/ast/nodes.d.ts +495 -0
- package/dist/src/ast/nodes.d.ts.map +1 -0
- package/dist/src/ast/nodes.js +2 -0
- package/dist/src/ast/nodes.js.map +1 -0
- package/dist/src/binder/symbols.d.ts +36 -0
- package/dist/src/binder/symbols.d.ts.map +1 -0
- package/dist/src/binder/symbols.js +30 -0
- package/dist/src/binder/symbols.js.map +1 -0
- package/dist/src/checker/builtin-members.d.ts +4 -0
- package/dist/src/checker/builtin-members.d.ts.map +1 -0
- package/dist/src/checker/builtin-members.js +175 -0
- package/dist/src/checker/builtin-members.js.map +1 -0
- package/dist/src/checker/checker.d.ts +148 -0
- package/dist/src/checker/checker.d.ts.map +1 -0
- package/dist/src/checker/checker.js +2985 -0
- package/dist/src/checker/checker.js.map +1 -0
- package/dist/src/checker/effect-registry.d.ts +14 -0
- package/dist/src/checker/effect-registry.d.ts.map +1 -0
- package/dist/src/checker/effect-registry.js +11 -0
- package/dist/src/checker/effect-registry.js.map +1 -0
- package/dist/src/checker/type-operations.d.ts +27 -0
- package/dist/src/checker/type-operations.d.ts.map +1 -0
- package/dist/src/checker/type-operations.js +268 -0
- package/dist/src/checker/type-operations.js.map +1 -0
- package/dist/src/codegen/emitter.d.ts +83 -0
- package/dist/src/codegen/emitter.d.ts.map +1 -0
- package/dist/src/codegen/emitter.js +1029 -0
- package/dist/src/codegen/emitter.js.map +1 -0
- package/dist/src/codegen/helpers.d.ts +7 -0
- package/dist/src/codegen/helpers.d.ts.map +1 -0
- package/dist/src/codegen/helpers.js +48 -0
- package/dist/src/codegen/helpers.js.map +1 -0
- package/dist/src/codegen/runtime-imports.d.ts +6 -0
- package/dist/src/codegen/runtime-imports.d.ts.map +1 -0
- package/dist/src/codegen/runtime-imports.js +45 -0
- package/dist/src/codegen/runtime-imports.js.map +1 -0
- package/dist/src/codegen/writer.d.ts +14 -0
- package/dist/src/codegen/writer.d.ts.map +1 -0
- package/dist/src/codegen/writer.js +56 -0
- package/dist/src/codegen/writer.js.map +1 -0
- package/dist/src/compiler.d.ts +24 -0
- package/dist/src/compiler.d.ts.map +1 -0
- package/dist/src/compiler.js +97 -0
- package/dist/src/compiler.js.map +1 -0
- package/dist/src/diagnostics/codes.d.ts +18 -0
- package/dist/src/diagnostics/codes.d.ts.map +1 -0
- package/dist/src/diagnostics/codes.js +43 -0
- package/dist/src/diagnostics/codes.js.map +1 -0
- package/dist/src/diagnostics/diagnostic.d.ts +41 -0
- package/dist/src/diagnostics/diagnostic.d.ts.map +1 -0
- package/dist/src/diagnostics/diagnostic.js +50 -0
- package/dist/src/diagnostics/diagnostic.js.map +1 -0
- package/dist/src/diagnostics/render.d.ts +44 -0
- package/dist/src/diagnostics/render.d.ts.map +1 -0
- package/dist/src/diagnostics/render.js +44 -0
- package/dist/src/diagnostics/render.js.map +1 -0
- package/dist/src/experimental-api.d.ts +19 -0
- package/dist/src/experimental-api.d.ts.map +1 -0
- package/dist/src/experimental-api.js +17 -0
- package/dist/src/experimental-api.js.map +1 -0
- package/dist/src/hir/lower.d.ts +6 -0
- package/dist/src/hir/lower.d.ts.map +1 -0
- package/dist/src/hir/lower.js +124 -0
- package/dist/src/hir/lower.js.map +1 -0
- package/dist/src/hir/nodes.d.ts +12 -0
- package/dist/src/hir/nodes.d.ts.map +1 -0
- package/dist/src/hir/nodes.js +2 -0
- package/dist/src/hir/nodes.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interop/checked-api.d.ts +21 -0
- package/dist/src/interop/checked-api.d.ts.map +1 -0
- package/dist/src/interop/checked-api.js +46 -0
- package/dist/src/interop/checked-api.js.map +1 -0
- package/dist/src/interop/decision.d.ts +24 -0
- package/dist/src/interop/decision.d.ts.map +1 -0
- package/dist/src/interop/decision.js +96 -0
- package/dist/src/interop/decision.js.map +1 -0
- package/dist/src/interop/frontend-component-emission.d.ts +17 -0
- package/dist/src/interop/frontend-component-emission.d.ts.map +1 -0
- package/dist/src/interop/frontend-component-emission.js +271 -0
- package/dist/src/interop/frontend-component-emission.js.map +1 -0
- package/dist/src/interop/jsx-view-validation.d.ts +20 -0
- package/dist/src/interop/jsx-view-validation.d.ts.map +1 -0
- package/dist/src/interop/jsx-view-validation.js +847 -0
- package/dist/src/interop/jsx-view-validation.js.map +1 -0
- package/dist/src/interop/operation-api.d.ts +32 -0
- package/dist/src/interop/operation-api.d.ts.map +1 -0
- package/dist/src/interop/operation-api.js +61 -0
- package/dist/src/interop/operation-api.js.map +1 -0
- package/dist/src/interop/operation.d.ts +136 -0
- package/dist/src/interop/operation.d.ts.map +1 -0
- package/dist/src/interop/operation.js +575 -0
- package/dist/src/interop/operation.js.map +1 -0
- package/dist/src/interop/repetition-host-locator.d.ts +25 -0
- package/dist/src/interop/repetition-host-locator.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-locator.js +61 -0
- package/dist/src/interop/repetition-host-locator.js.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts +11 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.js +89 -0
- package/dist/src/interop/repetition-host-usage-validation.js.map +1 -0
- package/dist/src/interop/types.d.ts +365 -0
- package/dist/src/interop/types.d.ts.map +1 -0
- package/dist/src/interop/types.js +2 -0
- package/dist/src/interop/types.js.map +1 -0
- package/dist/src/mir/lower.d.ts +4 -0
- package/dist/src/mir/lower.d.ts.map +1 -0
- package/dist/src/mir/lower.js +131 -0
- package/dist/src/mir/lower.js.map +1 -0
- package/dist/src/mir/nodes.d.ts +36 -0
- package/dist/src/mir/nodes.d.ts.map +1 -0
- package/dist/src/mir/nodes.js +2 -0
- package/dist/src/mir/nodes.js.map +1 -0
- package/dist/src/project/incremental.d.ts +9 -0
- package/dist/src/project/incremental.d.ts.map +1 -0
- package/dist/src/project/incremental.js +15 -0
- package/dist/src/project/incremental.js.map +1 -0
- package/dist/src/project/project.d.ts +98 -0
- package/dist/src/project/project.d.ts.map +1 -0
- package/dist/src/project/project.js +884 -0
- package/dist/src/project/project.js.map +1 -0
- package/dist/src/public-api.d.ts +45 -0
- package/dist/src/public-api.d.ts.map +1 -0
- package/dist/src/public-api.js +37 -0
- package/dist/src/public-api.js.map +1 -0
- package/dist/src/reference/evaluator.d.ts +13 -0
- package/dist/src/reference/evaluator.d.ts.map +1 -0
- package/dist/src/reference/evaluator.js +304 -0
- package/dist/src/reference/evaluator.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts +65 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js +226 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts +23 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js +122 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts +36 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js +52 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts +42 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js +115 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts +40 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js +144 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts +49 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js +348 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts +43 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js +94 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts +53 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js +159 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts +14 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js +112 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts +8 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js +85 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts +47 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js +106 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts +83 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js +233 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js.map +1 -0
- package/dist/src/selfhost/compiler-facade.d.ts +33 -0
- package/dist/src/selfhost/compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/compiler-facade.js +65 -0
- package/dist/src/selfhost/compiler-facade.js.map +1 -0
- package/dist/src/selfhost/contract.d.ts +151 -0
- package/dist/src/selfhost/contract.d.ts.map +1 -0
- package/dist/src/selfhost/contract.js +335 -0
- package/dist/src/selfhost/contract.js.map +1 -0
- package/dist/src/selfhost/differential-artifacts.d.ts +8 -0
- package/dist/src/selfhost/differential-artifacts.d.ts.map +1 -0
- package/dist/src/selfhost/differential-artifacts.js +50 -0
- package/dist/src/selfhost/differential-artifacts.js.map +1 -0
- package/dist/src/selfhost/differential-harness.d.ts +91 -0
- package/dist/src/selfhost/differential-harness.d.ts.map +1 -0
- package/dist/src/selfhost/differential-harness.js +246 -0
- package/dist/src/selfhost/differential-harness.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts +49 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.js +225 -0
- package/dist/src/selfhost/full-language-inventory-runner.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory.d.ts +42 -0
- package/dist/src/selfhost/full-language-inventory.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory.js +163 -0
- package/dist/src/selfhost/full-language-inventory.js.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts +35 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.js +186 -0
- package/dist/src/selfhost/interop-resolution-witness.js.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts +28 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js +36 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js.map +1 -0
- package/dist/src/selfhost/legacy-adapter.d.ts +8 -0
- package/dist/src/selfhost/legacy-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/legacy-adapter.js +186 -0
- package/dist/src/selfhost/legacy-adapter.js.map +1 -0
- package/dist/src/selfhost/module-graph.d.ts +57 -0
- package/dist/src/selfhost/module-graph.d.ts.map +1 -0
- package/dist/src/selfhost/module-graph.js +267 -0
- package/dist/src/selfhost/module-graph.js.map +1 -0
- package/dist/src/selfhost/mvp-adapter.d.ts +19 -0
- package/dist/src/selfhost/mvp-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/mvp-adapter.js +186 -0
- package/dist/src/selfhost/mvp-adapter.js.map +1 -0
- package/dist/src/selfhost/node-executor.d.ts +6 -0
- package/dist/src/selfhost/node-executor.d.ts.map +1 -0
- package/dist/src/selfhost/node-executor.js +138 -0
- package/dist/src/selfhost/node-executor.js.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts +77 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.js +358 -0
- package/dist/src/selfhost/project-compiler-adapter.js.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts +15 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.js +65 -0
- package/dist/src/selfhost/project-differential-adapter.js.map +1 -0
- package/dist/src/selfhost/promotion-evidence.d.ts +62 -0
- package/dist/src/selfhost/promotion-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-evidence.js +332 -0
- package/dist/src/selfhost/promotion-evidence.js.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts +54 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js +343 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts +55 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js +227 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-subject.d.ts +34 -0
- package/dist/src/selfhost/promotion-subject.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-subject.js +141 -0
- package/dist/src/selfhost/promotion-subject.js.map +1 -0
- package/dist/src/selfhost/source-manifest.d.ts +31 -0
- package/dist/src/selfhost/source-manifest.d.ts.map +1 -0
- package/dist/src/selfhost/source-manifest.js +194 -0
- package/dist/src/selfhost/source-manifest.js.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts +25 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.js +100 -0
- package/dist/src/selfhost/stage-compiler-facade.js.map +1 -0
- package/dist/src/semantic-evidence/snapshot.d.ts +114 -0
- package/dist/src/semantic-evidence/snapshot.d.ts.map +1 -0
- package/dist/src/semantic-evidence/snapshot.js +336 -0
- package/dist/src/semantic-evidence/snapshot.js.map +1 -0
- package/dist/src/source.d.ts +25 -0
- package/dist/src/source.d.ts.map +1 -0
- package/dist/src/source.js +10 -0
- package/dist/src/source.js.map +1 -0
- package/dist/src/syntax/cst-to-ast.d.ts +108 -0
- package/dist/src/syntax/cst-to-ast.d.ts.map +1 -0
- package/dist/src/syntax/cst-to-ast.js +383 -0
- package/dist/src/syntax/cst-to-ast.js.map +1 -0
- package/dist/src/syntax/documentation.d.ts +11 -0
- package/dist/src/syntax/documentation.d.ts.map +1 -0
- package/dist/src/syntax/documentation.js +261 -0
- package/dist/src/syntax/documentation.js.map +1 -0
- package/dist/src/syntax/parser.d.ts +114 -0
- package/dist/src/syntax/parser.d.ts.map +1 -0
- package/dist/src/syntax/parser.js +970 -0
- package/dist/src/syntax/parser.js.map +1 -0
- package/dist/src/syntax/syntax-metadata.d.ts +8 -0
- package/dist/src/syntax/syntax-metadata.d.ts.map +1 -0
- package/dist/src/syntax/syntax-metadata.js +14 -0
- package/dist/src/syntax/syntax-metadata.js.map +1 -0
- package/dist/src/syntax/tokens.d.ts +96 -0
- package/dist/src/syntax/tokens.d.ts.map +1 -0
- package/dist/src/syntax/tokens.js +260 -0
- package/dist/src/syntax/tokens.js.map +1 -0
- package/dist/src/types/types.d.ts +97 -0
- package/dist/src/types/types.d.ts.map +1 -0
- package/dist/src/types/types.js +105 -0
- package/dist/src/types/types.js.map +1 -0
- package/package.json +47 -0
- package/schema/diagnostics-v1.schema.json +75 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
function compareText(left, right) {
|
|
2
|
+
if (left < right)
|
|
3
|
+
return -1;
|
|
4
|
+
if (left > right)
|
|
5
|
+
return 1;
|
|
6
|
+
return 0;
|
|
7
|
+
}
|
|
8
|
+
function isCanonical(values, key) {
|
|
9
|
+
let previous = null;
|
|
10
|
+
for (const value of values) {
|
|
11
|
+
const current = key(value);
|
|
12
|
+
if (previous !== null && current < previous)
|
|
13
|
+
return false;
|
|
14
|
+
previous = current;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
function diagnosticPositionKey(diagnostic) {
|
|
19
|
+
return [
|
|
20
|
+
diagnostic.span.start.offset.toString().padStart(12, '0'),
|
|
21
|
+
diagnostic.span.end.offset.toString().padStart(12, '0'),
|
|
22
|
+
diagnostic.code,
|
|
23
|
+
diagnostic.message,
|
|
24
|
+
].join('\0');
|
|
25
|
+
}
|
|
26
|
+
function inventoryStatus(result) {
|
|
27
|
+
return result.accepted && result.diagnostics.length === 0 ? 'ready' : 'incomplete';
|
|
28
|
+
}
|
|
29
|
+
function boundaryBlockers(sourcePaths, result, capability, status) {
|
|
30
|
+
const blockers = [];
|
|
31
|
+
const sourcePathSet = new Set(sourcePaths);
|
|
32
|
+
const parsedModules = result.stats.parsedModules + result.stats.reusedParsedModules;
|
|
33
|
+
const checkedModules = result.stats.checkedModules + result.stats.reusedCheckedModules;
|
|
34
|
+
if (sourcePathSet.size !== sourcePaths.length)
|
|
35
|
+
blockers.push('duplicate-source-path');
|
|
36
|
+
if (parsedModules !== sourcePaths.length)
|
|
37
|
+
blockers.push('parsed-module-coverage-mismatch');
|
|
38
|
+
if (checkedModules !== sourcePaths.length)
|
|
39
|
+
blockers.push('checked-module-coverage-mismatch');
|
|
40
|
+
if (result.stats.emittedModules !== result.emittedModules.length) {
|
|
41
|
+
blockers.push('emitted-module-count-mismatch');
|
|
42
|
+
}
|
|
43
|
+
if (result.diagnostics.some(item => item.sourcePath !== null && !sourcePathSet.has(item.sourcePath))) {
|
|
44
|
+
blockers.push('diagnostic-references-unknown-source');
|
|
45
|
+
}
|
|
46
|
+
if (!isCanonical(result.dependencies, item => `${item.modulePath}\0${item.sourceKind}\0${item.specifier}`)) {
|
|
47
|
+
blockers.push('non-canonical-dependency-metadata');
|
|
48
|
+
}
|
|
49
|
+
if (!isCanonical(result.exportedSymbols, item => `${item.modulePath}\0${item.name}\0${item.declarationKind}`)) {
|
|
50
|
+
blockers.push('non-canonical-export-metadata');
|
|
51
|
+
}
|
|
52
|
+
if (!isCanonical(capability.blockers, value => value)) {
|
|
53
|
+
blockers.push('non-canonical-capability-blockers');
|
|
54
|
+
}
|
|
55
|
+
if (new Set(capability.blockers).size !== capability.blockers.length) {
|
|
56
|
+
blockers.push('duplicate-capability-blocker');
|
|
57
|
+
}
|
|
58
|
+
if (result.accepted && result.diagnostics.length > 0)
|
|
59
|
+
blockers.push('accepted-with-diagnostics');
|
|
60
|
+
if (!result.accepted && result.diagnostics.length === 0)
|
|
61
|
+
blockers.push('rejected-without-diagnostics');
|
|
62
|
+
if (result.diagnostics.some(item => item.code === 'SHP2001')) {
|
|
63
|
+
blockers.push('obsolete-project-linking-placeholder');
|
|
64
|
+
}
|
|
65
|
+
if (status === 'ready') {
|
|
66
|
+
if (!capability.ready)
|
|
67
|
+
blockers.push('capability-not-ready-for-ready-inventory');
|
|
68
|
+
if (capability.blockers.length > 0)
|
|
69
|
+
blockers.push('ready-capability-has-blockers');
|
|
70
|
+
if (result.emittedModules.length === 0)
|
|
71
|
+
blockers.push('ready-without-emitted-modules');
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
if (capability.ready)
|
|
75
|
+
blockers.push('capability-ready-for-incomplete-inventory');
|
|
76
|
+
}
|
|
77
|
+
return blockers.sort(compareText);
|
|
78
|
+
}
|
|
79
|
+
export function inventoryFromFullLanguageResult(sourcePaths, result, capability) {
|
|
80
|
+
const groups = new Map();
|
|
81
|
+
const codeCounts = new Map();
|
|
82
|
+
const sourcesWithDiagnostics = new Set();
|
|
83
|
+
const firstDiagnosticBySource = new Map();
|
|
84
|
+
for (const diagnostic of result.diagnostics) {
|
|
85
|
+
const key = `${diagnostic.code}\u0000${diagnostic.message}`;
|
|
86
|
+
const current = groups.get(key) ?? {
|
|
87
|
+
message: diagnostic.message,
|
|
88
|
+
count: 0,
|
|
89
|
+
sourcePaths: new Set(),
|
|
90
|
+
};
|
|
91
|
+
current.count += 1;
|
|
92
|
+
codeCounts.set(diagnostic.code, (codeCounts.get(diagnostic.code) ?? 0) + 1);
|
|
93
|
+
if (diagnostic.sourcePath !== null) {
|
|
94
|
+
current.sourcePaths.add(diagnostic.sourcePath);
|
|
95
|
+
sourcesWithDiagnostics.add(diagnostic.sourcePath);
|
|
96
|
+
const previous = firstDiagnosticBySource.get(diagnostic.sourcePath);
|
|
97
|
+
if (previous === undefined || diagnosticPositionKey(diagnostic) < diagnosticPositionKey(previous)) {
|
|
98
|
+
firstDiagnosticBySource.set(diagnostic.sourcePath, diagnostic);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
groups.set(key, current);
|
|
102
|
+
}
|
|
103
|
+
const entries = [...groups.entries()]
|
|
104
|
+
.map(([key, value]) => ({
|
|
105
|
+
code: key.slice(0, key.indexOf('\u0000')),
|
|
106
|
+
message: value.message,
|
|
107
|
+
count: value.count,
|
|
108
|
+
sourcePaths: [...value.sourcePaths].sort(compareText),
|
|
109
|
+
}))
|
|
110
|
+
.sort((left, right) => compareText(left.code, right.code) || compareText(left.message, right.message));
|
|
111
|
+
const sortedSourcesWithDiagnostics = [...sourcesWithDiagnostics].sort(compareText);
|
|
112
|
+
const sourcesWithoutDiagnostics = sourcePaths
|
|
113
|
+
.filter(sourcePath => !sourcesWithDiagnostics.has(sourcePath))
|
|
114
|
+
.sort(compareText);
|
|
115
|
+
const firstDiagnostics = [...firstDiagnosticBySource.entries()]
|
|
116
|
+
.sort(([left], [right]) => compareText(left, right))
|
|
117
|
+
.map(([sourcePath, diagnostic]) => ({
|
|
118
|
+
sourcePath,
|
|
119
|
+
code: diagnostic.code,
|
|
120
|
+
message: diagnostic.message,
|
|
121
|
+
span: diagnostic.span,
|
|
122
|
+
}));
|
|
123
|
+
const status = inventoryStatus(result);
|
|
124
|
+
const parsedModules = result.stats.parsedModules + result.stats.reusedParsedModules;
|
|
125
|
+
const checkedModules = result.stats.checkedModules + result.stats.reusedCheckedModules;
|
|
126
|
+
return {
|
|
127
|
+
schemaVersion: 1,
|
|
128
|
+
status,
|
|
129
|
+
capability: {
|
|
130
|
+
ready: capability.ready,
|
|
131
|
+
blockers: [...capability.blockers],
|
|
132
|
+
},
|
|
133
|
+
sourceCount: sourcePaths.length,
|
|
134
|
+
parsedModules,
|
|
135
|
+
checkedModules,
|
|
136
|
+
emittedModules: result.stats.emittedModules,
|
|
137
|
+
diagnosticCount: result.diagnostics.length,
|
|
138
|
+
diagnosticSourceCount: sortedSourcesWithDiagnostics.length,
|
|
139
|
+
sourcesWithDiagnostics: sortedSourcesWithDiagnostics,
|
|
140
|
+
sourcesWithoutDiagnostics,
|
|
141
|
+
boundaryBlockers: boundaryBlockers(sourcePaths, result, capability, status),
|
|
142
|
+
codeCounts: [...codeCounts.entries()]
|
|
143
|
+
.sort(([left], [right]) => compareText(left, right))
|
|
144
|
+
.map(([code, count]) => ({ code, count })),
|
|
145
|
+
entries,
|
|
146
|
+
firstDiagnostics,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export function serializeFullLanguageInventory(inventory) {
|
|
150
|
+
return `${JSON.stringify(inventory)}\n`;
|
|
151
|
+
}
|
|
152
|
+
export function formatFullLanguageInventorySummary(inventory) {
|
|
153
|
+
const codeSummary = inventory.codeCounts.length === 0
|
|
154
|
+
? 'none'
|
|
155
|
+
: inventory.codeCounts.map(entry => `${entry.code}=${entry.count}`).join(', ');
|
|
156
|
+
return [
|
|
157
|
+
`Self-host full-language inventory: ${inventory.status.toUpperCase()}`,
|
|
158
|
+
`Sources: ${inventory.sourceCount}; parsed: ${inventory.parsedModules}; checked: ${inventory.checkedModules}; emitted: ${inventory.emittedModules}`,
|
|
159
|
+
`Diagnostics: ${inventory.diagnosticCount} across ${inventory.diagnosticSourceCount} source(s); codes: ${codeSummary}`,
|
|
160
|
+
`Boundary blockers: ${inventory.boundaryBlockers.length === 0 ? 'none' : inventory.boundaryBlockers.join(', ')}`,
|
|
161
|
+
];
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=full-language-inventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-language-inventory.js","sourceRoot":"","sources":["../../../src/selfhost/full-language-inventory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { KERNEL_CONTRACT_VERSION, type KernelPlatform } from './contract.js';
|
|
2
|
+
export declare const INTEROP_RESOLUTION_WITNESS_VERSION: 1;
|
|
3
|
+
export type InteropResolutionKind = 'builtin' | 'package' | 'relative' | 'url';
|
|
4
|
+
export type InteropRuntimeFormat = 'commonjs' | 'esm' | 'global' | 'side-effect';
|
|
5
|
+
export interface InteropResolutionWitnessModuleV1 {
|
|
6
|
+
readonly specifier: string;
|
|
7
|
+
readonly resolutionKind: InteropResolutionKind;
|
|
8
|
+
readonly resolvedId: string;
|
|
9
|
+
readonly runtimeFormat: InteropRuntimeFormat;
|
|
10
|
+
readonly artifactSha256: string | null;
|
|
11
|
+
readonly typeSnapshotSha256: string;
|
|
12
|
+
}
|
|
13
|
+
export interface InteropResolutionWitnessV1 {
|
|
14
|
+
readonly version: typeof INTEROP_RESOLUTION_WITNESS_VERSION;
|
|
15
|
+
readonly contractVersion: typeof KERNEL_CONTRACT_VERSION;
|
|
16
|
+
readonly platform: KernelPlatform;
|
|
17
|
+
readonly candidateSha: string;
|
|
18
|
+
readonly sourceManifestSha256: string;
|
|
19
|
+
readonly modules: readonly InteropResolutionWitnessModuleV1[];
|
|
20
|
+
}
|
|
21
|
+
export interface InteropResolutionExpectation {
|
|
22
|
+
readonly contractVersion: typeof KERNEL_CONTRACT_VERSION;
|
|
23
|
+
readonly platform: KernelPlatform;
|
|
24
|
+
readonly candidateSha: string;
|
|
25
|
+
readonly sourceManifestSha256: string;
|
|
26
|
+
readonly specifiers: readonly string[];
|
|
27
|
+
}
|
|
28
|
+
export declare class InteropResolutionWitnessError extends Error {
|
|
29
|
+
readonly path: string;
|
|
30
|
+
readonly name = "InteropResolutionWitnessError";
|
|
31
|
+
constructor(path: string, message: string);
|
|
32
|
+
}
|
|
33
|
+
export declare function validateInteropResolutionWitness(value: unknown, expectation: InteropResolutionExpectation): InteropResolutionWitnessV1;
|
|
34
|
+
export declare function serializeInteropResolutionWitness(witness: InteropResolutionWitnessV1): string;
|
|
35
|
+
//# sourceMappingURL=interop-resolution-witness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interop-resolution-witness.d.ts","sourceRoot":"","sources":["../../../src/selfhost/interop-resolution-witness.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,uBAAuB,EAEvB,KAAK,cAAc,EACnB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,kCAAkC,EAAG,CAAU,CAAC;AAE7D,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;AAC/E,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEjF,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,kCAAkC,CAAC;IAC5D,QAAQ,CAAC,eAAe,EAAE,OAAO,uBAAuB,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,gCAAgC,EAAE,CAAC;CAC9D;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,eAAe,EAAE,OAAO,uBAAuB,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,qBAAa,6BAA8B,SAAQ,KAAK;aAEpB,IAAI,EAAE,MAAM;IAD/C,SAAyB,IAAI,mCAAmC;gBAC7B,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGhE;AAKD,wBAAgB,gCAAgC,CAC/C,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,4BAA4B,GACvC,0BAA0B,CAmC5B;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CAE7F"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { KERNEL_CONTRACT_VERSION, normalizeKernelPath, } from './contract.js';
|
|
2
|
+
export const INTEROP_RESOLUTION_WITNESS_VERSION = 1;
|
|
3
|
+
export class InteropResolutionWitnessError extends Error {
|
|
4
|
+
path;
|
|
5
|
+
name = 'InteropResolutionWitnessError';
|
|
6
|
+
constructor(path, message) {
|
|
7
|
+
super(`${path}: ${message}`);
|
|
8
|
+
this.path = path;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const sha256Pattern = /^[0-9a-f]{64}$/u;
|
|
12
|
+
const commitShaPattern = /^[0-9a-f]{40}$/u;
|
|
13
|
+
export function validateInteropResolutionWitness(value, expectation) {
|
|
14
|
+
validateExpectation(expectation);
|
|
15
|
+
const witness = record(value, '$');
|
|
16
|
+
exactKeys(witness, ['version', 'contractVersion', 'platform', 'candidateSha', 'sourceManifestSha256', 'modules'], '$');
|
|
17
|
+
if (witness.version !== INTEROP_RESOLUTION_WITNESS_VERSION) {
|
|
18
|
+
throw new InteropResolutionWitnessError('$.version', `expected ${INTEROP_RESOLUTION_WITNESS_VERSION}`);
|
|
19
|
+
}
|
|
20
|
+
const contractVersion = literal(witness.contractVersion, KERNEL_CONTRACT_VERSION, '$.contractVersion');
|
|
21
|
+
const platform = oneOf(witness.platform, ['node', 'browser', 'neutral'], '$.platform');
|
|
22
|
+
const candidateSha = commitSha(witness.candidateSha, '$.candidateSha');
|
|
23
|
+
const sourceManifestSha256 = sha256(witness.sourceManifestSha256, '$.sourceManifestSha256');
|
|
24
|
+
assertEqual(contractVersion, expectation.contractVersion, '$.contractVersion', 'stale contract version');
|
|
25
|
+
assertEqual(platform, expectation.platform, '$.platform', 'stale platform');
|
|
26
|
+
assertEqual(candidateSha, expectation.candidateSha.toLowerCase(), '$.candidateSha', 'stale candidate SHA');
|
|
27
|
+
assertEqual(sourceManifestSha256, expectation.sourceManifestSha256.toLowerCase(), '$.sourceManifestSha256', 'stale source manifest');
|
|
28
|
+
const modules = array(witness.modules, '$.modules')
|
|
29
|
+
.map((module, index) => validateModule(module, `$.modules[${index}]`))
|
|
30
|
+
.sort((left, right) => compareText(left.specifier, right.specifier));
|
|
31
|
+
assertUnique(modules.map(module => module.specifier), '$.modules', 'specifier');
|
|
32
|
+
const actualSpecifiers = modules.map(module => module.specifier);
|
|
33
|
+
const expectedSpecifiers = canonicalSpecifiers(expectation.specifiers, '$expectation.specifiers');
|
|
34
|
+
const missing = expectedSpecifiers.filter(specifier => !actualSpecifiers.includes(specifier));
|
|
35
|
+
const unexpected = actualSpecifiers.filter(specifier => !expectedSpecifiers.includes(specifier));
|
|
36
|
+
if (missing.length > 0)
|
|
37
|
+
throw new InteropResolutionWitnessError('$.modules', `missing specifiers: ${missing.join(', ')}`);
|
|
38
|
+
if (unexpected.length > 0)
|
|
39
|
+
throw new InteropResolutionWitnessError('$.modules', `unexpected specifiers: ${unexpected.join(', ')}`);
|
|
40
|
+
return {
|
|
41
|
+
version: INTEROP_RESOLUTION_WITNESS_VERSION,
|
|
42
|
+
contractVersion,
|
|
43
|
+
platform,
|
|
44
|
+
candidateSha,
|
|
45
|
+
sourceManifestSha256,
|
|
46
|
+
modules,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export function serializeInteropResolutionWitness(witness) {
|
|
50
|
+
return JSON.stringify(witness);
|
|
51
|
+
}
|
|
52
|
+
function validateExpectation(expectation) {
|
|
53
|
+
if (expectation.contractVersion !== KERNEL_CONTRACT_VERSION) {
|
|
54
|
+
throw new InteropResolutionWitnessError('$expectation.contractVersion', `expected ${KERNEL_CONTRACT_VERSION}`);
|
|
55
|
+
}
|
|
56
|
+
oneOf(expectation.platform, ['node', 'browser', 'neutral'], '$expectation.platform');
|
|
57
|
+
commitSha(expectation.candidateSha, '$expectation.candidateSha');
|
|
58
|
+
sha256(expectation.sourceManifestSha256, '$expectation.sourceManifestSha256');
|
|
59
|
+
canonicalSpecifiers(expectation.specifiers, '$expectation.specifiers');
|
|
60
|
+
}
|
|
61
|
+
function validateModule(value, path) {
|
|
62
|
+
const module = record(value, path);
|
|
63
|
+
exactKeys(module, ['specifier', 'resolutionKind', 'resolvedId', 'runtimeFormat', 'artifactSha256', 'typeSnapshotSha256'], path);
|
|
64
|
+
const specifier = nonEmptyString(module.specifier, `${path}.specifier`);
|
|
65
|
+
const resolutionKind = oneOf(module.resolutionKind, ['builtin', 'package', 'relative', 'url'], `${path}.resolutionKind`);
|
|
66
|
+
const runtimeFormat = oneOf(module.runtimeFormat, ['commonjs', 'esm', 'global', 'side-effect'], `${path}.runtimeFormat`);
|
|
67
|
+
const resolvedId = normalizeResolvedId(module.resolvedId, resolutionKind, `${path}.resolvedId`);
|
|
68
|
+
const artifactSha256 = module.artifactSha256 === null
|
|
69
|
+
? null
|
|
70
|
+
: sha256(module.artifactSha256, `${path}.artifactSha256`);
|
|
71
|
+
if (resolutionKind === 'builtin' && artifactSha256 !== null) {
|
|
72
|
+
throw new InteropResolutionWitnessError(`${path}.artifactSha256`, 'builtin modules must use null artifactSha256');
|
|
73
|
+
}
|
|
74
|
+
if (resolutionKind !== 'builtin' && artifactSha256 === null) {
|
|
75
|
+
throw new InteropResolutionWitnessError(`${path}.artifactSha256`, 'non-builtin modules require an artifactSha256');
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
specifier,
|
|
79
|
+
resolutionKind,
|
|
80
|
+
resolvedId,
|
|
81
|
+
runtimeFormat,
|
|
82
|
+
artifactSha256,
|
|
83
|
+
typeSnapshotSha256: sha256(module.typeSnapshotSha256, `${path}.typeSnapshotSha256`),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function normalizeResolvedId(value, kind, path) {
|
|
87
|
+
const resolvedId = nonEmptyString(value, path);
|
|
88
|
+
if (kind === 'builtin') {
|
|
89
|
+
if (!resolvedId.startsWith('node:') || resolvedId.length === 'node:'.length) {
|
|
90
|
+
throw new InteropResolutionWitnessError(path, 'builtin resolvedId must use a non-empty node: specifier');
|
|
91
|
+
}
|
|
92
|
+
return resolvedId;
|
|
93
|
+
}
|
|
94
|
+
if (kind === 'relative') {
|
|
95
|
+
try {
|
|
96
|
+
return normalizeKernelPath(resolvedId, path);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
throw new InteropResolutionWitnessError(path, error instanceof Error ? error.message.replace(/^.*?: /u, '') : 'invalid path');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (kind === 'url') {
|
|
103
|
+
let url;
|
|
104
|
+
try {
|
|
105
|
+
url = new URL(resolvedId);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
throw new InteropResolutionWitnessError(path, 'expected an absolute HTTPS URL');
|
|
109
|
+
}
|
|
110
|
+
if (url.protocol !== 'https:' || url.username.length > 0 || url.password.length > 0 || url.hash.length > 0) {
|
|
111
|
+
throw new InteropResolutionWitnessError(path, 'URL resolutions must be credential-free HTTPS URLs without fragments');
|
|
112
|
+
}
|
|
113
|
+
return url.toString();
|
|
114
|
+
}
|
|
115
|
+
return resolvedId;
|
|
116
|
+
}
|
|
117
|
+
function canonicalSpecifiers(value, path) {
|
|
118
|
+
if (!Array.isArray(value))
|
|
119
|
+
throw new InteropResolutionWitnessError(path, 'expected an array');
|
|
120
|
+
const specifiers = value.map((specifier, index) => nonEmptyString(specifier, `${path}[${index}]`)).sort(compareText);
|
|
121
|
+
assertUnique(specifiers, path, 'specifier');
|
|
122
|
+
return specifiers;
|
|
123
|
+
}
|
|
124
|
+
function record(value, path) {
|
|
125
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
126
|
+
throw new InteropResolutionWitnessError(path, 'expected an object');
|
|
127
|
+
return value;
|
|
128
|
+
}
|
|
129
|
+
function array(value, path) {
|
|
130
|
+
if (!Array.isArray(value))
|
|
131
|
+
throw new InteropResolutionWitnessError(path, 'expected an array');
|
|
132
|
+
return value;
|
|
133
|
+
}
|
|
134
|
+
function nonEmptyString(value, path) {
|
|
135
|
+
if (typeof value !== 'string')
|
|
136
|
+
throw new InteropResolutionWitnessError(path, 'expected a string');
|
|
137
|
+
if (value.length === 0)
|
|
138
|
+
throw new InteropResolutionWitnessError(path, 'string must not be empty');
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
function literal(value, expected, path) {
|
|
142
|
+
if (value !== expected)
|
|
143
|
+
throw new InteropResolutionWitnessError(path, `expected ${JSON.stringify(expected)}`);
|
|
144
|
+
return expected;
|
|
145
|
+
}
|
|
146
|
+
function oneOf(value, allowed, path) {
|
|
147
|
+
if (typeof value !== 'string' || !allowed.includes(value)) {
|
|
148
|
+
throw new InteropResolutionWitnessError(path, `expected one of ${allowed.join(', ')}`);
|
|
149
|
+
}
|
|
150
|
+
return value;
|
|
151
|
+
}
|
|
152
|
+
function sha256(value, path) {
|
|
153
|
+
const hash = nonEmptyString(value, path).toLowerCase();
|
|
154
|
+
if (!sha256Pattern.test(hash))
|
|
155
|
+
throw new InteropResolutionWitnessError(path, 'expected a SHA-256 hex digest');
|
|
156
|
+
return hash;
|
|
157
|
+
}
|
|
158
|
+
function commitSha(value, path) {
|
|
159
|
+
const hash = nonEmptyString(value, path).toLowerCase();
|
|
160
|
+
if (!commitShaPattern.test(hash))
|
|
161
|
+
throw new InteropResolutionWitnessError(path, 'expected a full 40-character commit SHA');
|
|
162
|
+
return hash;
|
|
163
|
+
}
|
|
164
|
+
function assertEqual(actual, expected, path, message) {
|
|
165
|
+
if (actual !== expected)
|
|
166
|
+
throw new InteropResolutionWitnessError(path, message);
|
|
167
|
+
}
|
|
168
|
+
function assertUnique(values, path, name) {
|
|
169
|
+
for (let index = 1; index < values.length; index += 1) {
|
|
170
|
+
if (values[index] === values[index - 1])
|
|
171
|
+
throw new InteropResolutionWitnessError(path, `duplicate ${name} ${values[index]}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function exactKeys(value, allowed, path) {
|
|
175
|
+
const allowedSet = new Set(allowed);
|
|
176
|
+
for (const key of Object.keys(value))
|
|
177
|
+
if (!allowedSet.has(key))
|
|
178
|
+
throw new InteropResolutionWitnessError(`${path}.${key}`, 'unknown property');
|
|
179
|
+
for (const key of allowed)
|
|
180
|
+
if (!Object.hasOwn(value, key))
|
|
181
|
+
throw new InteropResolutionWitnessError(`${path}.${key}`, 'missing property');
|
|
182
|
+
}
|
|
183
|
+
function compareText(left, right) {
|
|
184
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=interop-resolution-witness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interop-resolution-witness.js","sourceRoot":"","sources":["../../../src/selfhost/interop-resolution-witness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface ViruneResultValue<T, E = unknown> {
|
|
2
|
+
readonly $tag: 'Ok' | 'Err';
|
|
3
|
+
readonly $values: readonly [T] | readonly [E];
|
|
4
|
+
}
|
|
5
|
+
export interface SelfhostKernelModelModule {
|
|
6
|
+
readonly encodeCanonicalKernelModel: (raw: unknown) => ViruneResultValue<string>;
|
|
7
|
+
readonly decodeKernelModel: (raw: unknown) => ViruneResultValue<unknown>;
|
|
8
|
+
readonly encodeCanonicalTables: (strings: readonly string[], numbers: readonly number[]) => ViruneResultValue<string>;
|
|
9
|
+
readonly runArenaProbe: () => ViruneResultValue<unknown>;
|
|
10
|
+
}
|
|
11
|
+
export declare class KernelModelHostError extends Error {
|
|
12
|
+
readonly details: unknown;
|
|
13
|
+
readonly name = "KernelModelHostError";
|
|
14
|
+
constructor(message: string, details: unknown);
|
|
15
|
+
}
|
|
16
|
+
export interface KernelModelHostAdapter {
|
|
17
|
+
readonly encodeCanonicalModel: (raw: unknown) => string;
|
|
18
|
+
readonly decodeModel: (raw: unknown) => unknown;
|
|
19
|
+
readonly encodeCanonicalTables: (strings: readonly string[], numbers: readonly number[]) => string;
|
|
20
|
+
readonly runArenaProbe: () => unknown;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Adapt the generated Virune kernel-model module to a host-facing exception
|
|
24
|
+
* boundary. The generated module itself remains Result-based; only this host
|
|
25
|
+
* adapter converts an explicit Err value into a JavaScript error for callers.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createKernelModelHostAdapter(module: SelfhostKernelModelModule): KernelModelHostAdapter;
|
|
28
|
+
//# sourceMappingURL=kernel-model-host-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel-model-host-adapter.d.ts","sourceRoot":"","sources":["../../../src/selfhost/kernel-model-host-adapter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO;IAChD,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,0BAA0B,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjF,QAAQ,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzE,QAAQ,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACtH,QAAQ,CAAC,aAAa,EAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;CACzD;AAED,qBAAa,oBAAqB,SAAQ,KAAK;aAK7B,OAAO,EAAE,OAAO;IAJjC,SAAyB,IAAI,0BAA0B;gBAGtD,OAAO,EAAE,MAAM,EACC,OAAO,EAAE,OAAO;CAIjC;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;IAChD,QAAQ,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC;IACnG,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,yBAAyB,GAAG,sBAAsB,CAetG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export class KernelModelHostError extends Error {
|
|
2
|
+
details;
|
|
3
|
+
name = 'KernelModelHostError';
|
|
4
|
+
constructor(message, details) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.details = details;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Adapt the generated Virune kernel-model module to a host-facing exception
|
|
11
|
+
* boundary. The generated module itself remains Result-based; only this host
|
|
12
|
+
* adapter converts an explicit Err value into a JavaScript error for callers.
|
|
13
|
+
*/
|
|
14
|
+
export function createKernelModelHostAdapter(module) {
|
|
15
|
+
return {
|
|
16
|
+
encodeCanonicalModel(raw) {
|
|
17
|
+
return unwrapResult(module.encodeCanonicalKernelModel(raw), 'Kernel model encoding failed');
|
|
18
|
+
},
|
|
19
|
+
decodeModel(raw) {
|
|
20
|
+
return unwrapResult(module.decodeKernelModel(raw), 'Kernel model decoding failed');
|
|
21
|
+
},
|
|
22
|
+
encodeCanonicalTables(strings, numbers) {
|
|
23
|
+
return unwrapResult(module.encodeCanonicalTables(strings, numbers), 'Canonical table encoding failed');
|
|
24
|
+
},
|
|
25
|
+
runArenaProbe() {
|
|
26
|
+
return unwrapResult(module.runArenaProbe(), 'Kernel arena probe failed');
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function unwrapResult(result, message) {
|
|
31
|
+
const value = result.$values[0];
|
|
32
|
+
if (result.$tag === 'Ok')
|
|
33
|
+
return value;
|
|
34
|
+
throw new KernelModelHostError(message, value);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=kernel-model-host-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel-model-host-adapter.js","sourceRoot":"","sources":["../../../src/selfhost/kernel-model-host-adapter.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAK7B;IAJQ,IAAI,GAAG,sBAAsB,CAAC;IAEvD,YACC,OAAe,EACC,OAAgB;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,YAAO,GAAP,OAAO,CAAS;IAGjC,CAAC;CACD;AASD;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAiC;IAC7E,OAAO;QACN,oBAAoB,CAAC,GAAY;YAChC,OAAO,YAAY,CAAC,MAAM,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAC;QAC7F,CAAC;QACD,WAAW,CAAC,GAAY;YACvB,OAAO,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAC;QACpF,CAAC;QACD,qBAAqB,CAAC,OAA0B,EAAE,OAA0B;YAC3E,OAAO,YAAY,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,iCAAiC,CAAC,CAAC;QACxG,CAAC;QACD,aAAa;YACZ,OAAO,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,2BAA2B,CAAC,CAAC;QAC1E,CAAC;KACD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAI,MAA4B,EAAE,OAAe;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,KAAU,CAAC;IAC5C,MAAM,IAAI,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type KernelOutputV1 } from './contract.js';
|
|
2
|
+
/**
|
|
3
|
+
* Execute the current TypeScript compiler behind the versioned, data-only
|
|
4
|
+
* self-hosting contract. This is an internal comparison path and does not
|
|
5
|
+
* change the production compiler facade or stable public API.
|
|
6
|
+
*/
|
|
7
|
+
export declare function compileWithLegacyKernel(value: unknown): Promise<KernelOutputV1>;
|
|
8
|
+
//# sourceMappingURL=legacy-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-adapter.d.ts","sourceRoot":"","sources":["../../../src/selfhost/legacy-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAYN,KAAK,cAAc,EAGnB,MAAM,eAAe,CAAC;AAKvB;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAqCrF"}
|