@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,358 @@
|
|
|
1
|
+
import { KERNEL_LANGUAGE_VERSION, normalizeKernelPath, validateKernelInput, } from './contract.js';
|
|
2
|
+
import { SelfhostMvpError, } from './mvp-adapter.js';
|
|
3
|
+
export const PROJECT_COMPILER_CONTRACT_VERSION = '1';
|
|
4
|
+
export const PROJECT_COMPILER_REQUEST_SCHEMA = 'virune.selfhost.project-compiler.request.v1';
|
|
5
|
+
export const PROJECT_COMPILER_RESULT_SCHEMA = 'virune.selfhost.project-compiler.result.v2';
|
|
6
|
+
export function hasSelfhostProjectCompilerExports(module) {
|
|
7
|
+
const candidate = module;
|
|
8
|
+
return typeof candidate.projectCompilerCapability === 'function'
|
|
9
|
+
&& typeof candidate.compileProjectMvp === 'function';
|
|
10
|
+
}
|
|
11
|
+
export function readProjectCompilerCapability(module) {
|
|
12
|
+
if (!hasSelfhostProjectCompilerExports(module))
|
|
13
|
+
return null;
|
|
14
|
+
const encoded = unwrapResult(module.projectCompilerCapability(), 'Virune project compiler capability failed');
|
|
15
|
+
return validateCapability(JSON.parse(encoded));
|
|
16
|
+
}
|
|
17
|
+
export function compileWithProjectCompilerBoundary(module, value) {
|
|
18
|
+
if (!hasSelfhostProjectCompilerExports(module)) {
|
|
19
|
+
throw new SelfhostMvpError('Self-host compiler does not export the project compiler boundary');
|
|
20
|
+
}
|
|
21
|
+
const input = validateProjectCompilerInput(value);
|
|
22
|
+
const encoded = unwrapResult(module.compileProjectMvp(JSON.stringify({
|
|
23
|
+
contractVersion: input.contractVersion,
|
|
24
|
+
languageVersion: input.languageVersion,
|
|
25
|
+
platform: input.platform,
|
|
26
|
+
entryPath: input.entryPath,
|
|
27
|
+
sources: input.sources.map(source => ({ path: source.path, text: source.text })),
|
|
28
|
+
emit: input.emit,
|
|
29
|
+
})), 'Virune project compiler request failed');
|
|
30
|
+
return validateProjectCompilerResult(JSON.parse(encoded), input);
|
|
31
|
+
}
|
|
32
|
+
function validateProjectCompilerInput(value) {
|
|
33
|
+
const input = validateKernelInput(value);
|
|
34
|
+
if (input.platform !== 'node') {
|
|
35
|
+
throw new SelfhostMvpError('Project compiler capability v1 requires the node platform');
|
|
36
|
+
}
|
|
37
|
+
if (input.interopManifest.modules.length !== 0) {
|
|
38
|
+
throw new SelfhostMvpError('Project compiler capability v1 does not accept JavaScript interop yet');
|
|
39
|
+
}
|
|
40
|
+
return input;
|
|
41
|
+
}
|
|
42
|
+
function validateCapability(value) {
|
|
43
|
+
const record = object(value, '$');
|
|
44
|
+
exactKeys(record, ['contractVersion', 'ready', 'requestSchema', 'resultSchema', 'blockers'], '$');
|
|
45
|
+
if (record.contractVersion !== PROJECT_COMPILER_CONTRACT_VERSION) {
|
|
46
|
+
throw new SelfhostMvpError('$.contractVersion must be project compiler contract version 1');
|
|
47
|
+
}
|
|
48
|
+
if (record.requestSchema !== PROJECT_COMPILER_REQUEST_SCHEMA) {
|
|
49
|
+
throw new SelfhostMvpError(`$.requestSchema must be ${PROJECT_COMPILER_REQUEST_SCHEMA}`);
|
|
50
|
+
}
|
|
51
|
+
if (record.resultSchema !== PROJECT_COMPILER_RESULT_SCHEMA) {
|
|
52
|
+
throw new SelfhostMvpError(`$.resultSchema must be ${PROJECT_COMPILER_RESULT_SCHEMA}`);
|
|
53
|
+
}
|
|
54
|
+
if (typeof record.ready !== 'boolean')
|
|
55
|
+
throw new SelfhostMvpError('$.ready must be boolean');
|
|
56
|
+
if (!Array.isArray(record.blockers))
|
|
57
|
+
throw new SelfhostMvpError('$.blockers must be an array');
|
|
58
|
+
const blockers = record.blockers.map((item, index) => text(item, `$.blockers[${index}]`));
|
|
59
|
+
assertCanonical(blockers, item => item, '$.blockers');
|
|
60
|
+
if (record.ready && blockers.length > 0)
|
|
61
|
+
throw new SelfhostMvpError('ready capability cannot contain blockers');
|
|
62
|
+
if (!record.ready && blockers.length === 0)
|
|
63
|
+
throw new SelfhostMvpError('non-ready capability must contain a blocker');
|
|
64
|
+
return {
|
|
65
|
+
contractVersion: PROJECT_COMPILER_CONTRACT_VERSION,
|
|
66
|
+
ready: record.ready,
|
|
67
|
+
requestSchema: PROJECT_COMPILER_REQUEST_SCHEMA,
|
|
68
|
+
resultSchema: PROJECT_COMPILER_RESULT_SCHEMA,
|
|
69
|
+
blockers,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function validateProjectCompilerResult(value, input) {
|
|
73
|
+
const record = object(value, '$');
|
|
74
|
+
exactKeys(record, [
|
|
75
|
+
'contractVersion',
|
|
76
|
+
'languageVersion',
|
|
77
|
+
'platform',
|
|
78
|
+
'entryPath',
|
|
79
|
+
'accepted',
|
|
80
|
+
'diagnostics',
|
|
81
|
+
'emittedModules',
|
|
82
|
+
'dependencies',
|
|
83
|
+
'exportedSymbols',
|
|
84
|
+
'stats',
|
|
85
|
+
], '$');
|
|
86
|
+
if (record.contractVersion !== PROJECT_COMPILER_CONTRACT_VERSION) {
|
|
87
|
+
throw new SelfhostMvpError('$.contractVersion must be project compiler contract version 1');
|
|
88
|
+
}
|
|
89
|
+
if (record.languageVersion !== KERNEL_LANGUAGE_VERSION) {
|
|
90
|
+
throw new SelfhostMvpError(`$.languageVersion must be ${KERNEL_LANGUAGE_VERSION}`);
|
|
91
|
+
}
|
|
92
|
+
if (record.platform !== 'node')
|
|
93
|
+
throw new SelfhostMvpError('$.platform must be node');
|
|
94
|
+
const entryPath = canonicalPath(record.entryPath, '$.entryPath');
|
|
95
|
+
if (entryPath !== input.entryPath)
|
|
96
|
+
throw new SelfhostMvpError('$.entryPath must match the request entryPath');
|
|
97
|
+
if (typeof record.accepted !== 'boolean')
|
|
98
|
+
throw new SelfhostMvpError('$.accepted must be boolean');
|
|
99
|
+
const diagnostics = array(record.diagnostics, '$.diagnostics')
|
|
100
|
+
.map((item, index) => validateDiagnostic(item, `$.diagnostics[${index}]`));
|
|
101
|
+
const emittedModules = array(record.emittedModules, '$.emittedModules')
|
|
102
|
+
.map((item, index) => validateEmittedModule(item, `$.emittedModules[${index}]`));
|
|
103
|
+
const dependencies = array(record.dependencies, '$.dependencies')
|
|
104
|
+
.map((item, index) => validateDependency(item, `$.dependencies[${index}]`));
|
|
105
|
+
const exportedSymbols = array(record.exportedSymbols, '$.exportedSymbols')
|
|
106
|
+
.map((item, index) => validateExportedSymbol(item, `$.exportedSymbols[${index}]`));
|
|
107
|
+
const stats = validateStats(record.stats, '$.stats');
|
|
108
|
+
const inputPaths = new Set(input.sources.map(source => source.path));
|
|
109
|
+
for (const diagnostic of diagnostics) {
|
|
110
|
+
assertRequestSource(diagnostic.sourcePath, inputPaths, '$.diagnostics sourcePath', true);
|
|
111
|
+
}
|
|
112
|
+
for (const module of emittedModules) {
|
|
113
|
+
assertRequestSource(module.sourcePath, inputPaths, '$.emittedModules sourcePath');
|
|
114
|
+
}
|
|
115
|
+
for (const dependency of dependencies) {
|
|
116
|
+
assertRequestSource(dependency.modulePath, inputPaths, '$.dependencies modulePath');
|
|
117
|
+
if (dependency.sourceKind === 'virune' && dependency.resolvedPath !== null) {
|
|
118
|
+
assertRequestSource(dependency.resolvedPath, inputPaths, '$.dependencies resolvedPath');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const symbol of exportedSymbols) {
|
|
122
|
+
assertRequestSource(symbol.modulePath, inputPaths, '$.exportedSymbols modulePath');
|
|
123
|
+
}
|
|
124
|
+
assertCanonical(diagnostics, diagnosticKey, '$.diagnostics');
|
|
125
|
+
assertCanonical(emittedModules, item => item.outputPath, '$.emittedModules');
|
|
126
|
+
assertCanonical(dependencies, item => `${item.modulePath}\0${item.sourceKind}\0${item.specifier}`, '$.dependencies');
|
|
127
|
+
assertCanonical(exportedSymbols, item => `${item.modulePath}\0${item.name}\0${item.declarationKind}`, '$.exportedSymbols');
|
|
128
|
+
const parsedModuleCount = stats.parsedModules + stats.reusedParsedModules;
|
|
129
|
+
if (parsedModuleCount !== input.sources.length) {
|
|
130
|
+
throw new SelfhostMvpError('parsed and reused parsed module counts must cover every request source');
|
|
131
|
+
}
|
|
132
|
+
const checkedModuleCount = stats.checkedModules + stats.reusedCheckedModules;
|
|
133
|
+
if (checkedModuleCount > parsedModuleCount) {
|
|
134
|
+
throw new SelfhostMvpError('checked and reused checked module counts cannot exceed parsed module counts');
|
|
135
|
+
}
|
|
136
|
+
if (record.accepted && checkedModuleCount !== input.sources.length) {
|
|
137
|
+
throw new SelfhostMvpError('accepted result must check every request source');
|
|
138
|
+
}
|
|
139
|
+
if (stats.emittedModules !== emittedModules.length) {
|
|
140
|
+
throw new SelfhostMvpError('$.stats.emittedModules must match $.emittedModules length');
|
|
141
|
+
}
|
|
142
|
+
if (stats.invalidatedModules > input.sources.length) {
|
|
143
|
+
throw new SelfhostMvpError('$.stats.invalidatedModules cannot exceed request source count');
|
|
144
|
+
}
|
|
145
|
+
if (record.accepted && diagnostics.some(item => item.severity === 'error')) {
|
|
146
|
+
throw new SelfhostMvpError('accepted project compiler result cannot contain errors');
|
|
147
|
+
}
|
|
148
|
+
if (!record.accepted && diagnostics.length === 0) {
|
|
149
|
+
throw new SelfhostMvpError('rejected project compiler result must contain a diagnostic');
|
|
150
|
+
}
|
|
151
|
+
if (!record.accepted && emittedModules.length !== 0) {
|
|
152
|
+
throw new SelfhostMvpError('rejected project compiler result cannot emit modules');
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
contractVersion: PROJECT_COMPILER_CONTRACT_VERSION,
|
|
156
|
+
languageVersion: KERNEL_LANGUAGE_VERSION,
|
|
157
|
+
platform: 'node',
|
|
158
|
+
entryPath,
|
|
159
|
+
accepted: record.accepted,
|
|
160
|
+
diagnostics,
|
|
161
|
+
emittedModules,
|
|
162
|
+
dependencies,
|
|
163
|
+
exportedSymbols,
|
|
164
|
+
stats,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function assertRequestSource(value, inputPaths, path, nullable = false) {
|
|
168
|
+
if (value === null) {
|
|
169
|
+
if (nullable)
|
|
170
|
+
return;
|
|
171
|
+
throw new SelfhostMvpError(`${path} must identify a request source`);
|
|
172
|
+
}
|
|
173
|
+
if (!inputPaths.has(value))
|
|
174
|
+
throw new SelfhostMvpError(`${path} must identify a request source`);
|
|
175
|
+
}
|
|
176
|
+
function validateDiagnostic(value, path) {
|
|
177
|
+
const record = object(value, path);
|
|
178
|
+
exactKeys(record, ['code', 'severity', 'message', 'sourcePath', 'span', 'notes'], path);
|
|
179
|
+
if (record.severity !== 'error')
|
|
180
|
+
throw new SelfhostMvpError(`${path}.severity must be error`);
|
|
181
|
+
const sourcePath = record.sourcePath === null
|
|
182
|
+
? null
|
|
183
|
+
: canonicalPath(record.sourcePath, `${path}.sourcePath`);
|
|
184
|
+
return {
|
|
185
|
+
code: text(record.code, `${path}.code`),
|
|
186
|
+
severity: 'error',
|
|
187
|
+
message: text(record.message, `${path}.message`),
|
|
188
|
+
sourcePath,
|
|
189
|
+
span: validateSpan(record.span, `${path}.span`),
|
|
190
|
+
notes: array(record.notes, `${path}.notes`).map((item, index) => text(item, `${path}.notes[${index}]`)),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function validateSpan(value, path) {
|
|
194
|
+
const record = object(value, path);
|
|
195
|
+
exactKeys(record, ['start', 'end'], path);
|
|
196
|
+
const start = validatePosition(record.start, `${path}.start`);
|
|
197
|
+
const end = validatePosition(record.end, `${path}.end`);
|
|
198
|
+
if (end.offset < start.offset)
|
|
199
|
+
throw new SelfhostMvpError(`${path}.end must not precede start`);
|
|
200
|
+
return { start, end };
|
|
201
|
+
}
|
|
202
|
+
function validatePosition(value, path) {
|
|
203
|
+
const record = object(value, path);
|
|
204
|
+
exactKeys(record, ['offset', 'line', 'column'], path);
|
|
205
|
+
return {
|
|
206
|
+
offset: integer(record.offset, `${path}.offset`, 0),
|
|
207
|
+
line: integer(record.line, `${path}.line`, 1),
|
|
208
|
+
column: integer(record.column, `${path}.column`, 1),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function validateEmittedModule(value, path) {
|
|
212
|
+
const record = object(value, path);
|
|
213
|
+
exactKeys(record, ['sourcePath', 'outputPath', 'code', 'sourceMap'], path);
|
|
214
|
+
return {
|
|
215
|
+
sourcePath: canonicalPath(record.sourcePath, `${path}.sourcePath`),
|
|
216
|
+
outputPath: canonicalPath(record.outputPath, `${path}.outputPath`),
|
|
217
|
+
code: string(record.code, `${path}.code`),
|
|
218
|
+
sourceMap: string(record.sourceMap, `${path}.sourceMap`),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function validateDependency(value, path) {
|
|
222
|
+
const record = object(value, path);
|
|
223
|
+
exactKeys(record, ['modulePath', 'sourceKind', 'specifier', 'resolvedPath', 'typeOnly', 'public'], path);
|
|
224
|
+
if (record.sourceKind !== 'virune' && record.sourceKind !== 'javascript') {
|
|
225
|
+
throw new SelfhostMvpError(`${path}.sourceKind must be virune or javascript`);
|
|
226
|
+
}
|
|
227
|
+
const resolvedPath = record.resolvedPath === null
|
|
228
|
+
? null
|
|
229
|
+
: canonicalPath(record.resolvedPath, `${path}.resolvedPath`);
|
|
230
|
+
return {
|
|
231
|
+
modulePath: canonicalPath(record.modulePath, `${path}.modulePath`),
|
|
232
|
+
sourceKind: record.sourceKind,
|
|
233
|
+
specifier: text(record.specifier, `${path}.specifier`),
|
|
234
|
+
resolvedPath,
|
|
235
|
+
typeOnly: boolean(record.typeOnly, `${path}.typeOnly`),
|
|
236
|
+
public: boolean(record.public, `${path}.public`),
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function validateExportedSymbol(value, path) {
|
|
240
|
+
const record = object(value, path);
|
|
241
|
+
exactKeys(record, ['modulePath', 'name', 'declarationKind'], path);
|
|
242
|
+
return {
|
|
243
|
+
modulePath: canonicalPath(record.modulePath, `${path}.modulePath`),
|
|
244
|
+
name: text(record.name, `${path}.name`),
|
|
245
|
+
declarationKind: text(record.declarationKind, `${path}.declarationKind`),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
function validateStats(value, path) {
|
|
249
|
+
const record = object(value, path);
|
|
250
|
+
exactKeys(record, [
|
|
251
|
+
'parsedModules',
|
|
252
|
+
'reusedParsedModules',
|
|
253
|
+
'checkedModules',
|
|
254
|
+
'reusedCheckedModules',
|
|
255
|
+
'emittedModules',
|
|
256
|
+
'reusedEmittedModules',
|
|
257
|
+
'invalidatedModules',
|
|
258
|
+
], path);
|
|
259
|
+
return {
|
|
260
|
+
parsedModules: integer(record.parsedModules, `${path}.parsedModules`, 0),
|
|
261
|
+
reusedParsedModules: integer(record.reusedParsedModules, `${path}.reusedParsedModules`, 0),
|
|
262
|
+
checkedModules: integer(record.checkedModules, `${path}.checkedModules`, 0),
|
|
263
|
+
reusedCheckedModules: integer(record.reusedCheckedModules, `${path}.reusedCheckedModules`, 0),
|
|
264
|
+
emittedModules: integer(record.emittedModules, `${path}.emittedModules`, 0),
|
|
265
|
+
reusedEmittedModules: integer(record.reusedEmittedModules, `${path}.reusedEmittedModules`, 0),
|
|
266
|
+
invalidatedModules: integer(record.invalidatedModules, `${path}.invalidatedModules`, 0),
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function unwrapResult(result, message) {
|
|
270
|
+
if (result === null || typeof result !== 'object')
|
|
271
|
+
throw new SelfhostMvpError(`${message}: invalid Result object`);
|
|
272
|
+
if (result.$tag !== 'Ok' && result.$tag !== 'Err')
|
|
273
|
+
throw new SelfhostMvpError(`${message}: invalid Result tag`);
|
|
274
|
+
if (!Array.isArray(result.$values) || result.$values.length !== 1) {
|
|
275
|
+
throw new SelfhostMvpError(`${message}: invalid Result values`);
|
|
276
|
+
}
|
|
277
|
+
const value = result.$values[0];
|
|
278
|
+
if (result.$tag === 'Ok')
|
|
279
|
+
return value;
|
|
280
|
+
throw new SelfhostMvpError(message, value);
|
|
281
|
+
}
|
|
282
|
+
function object(value, path) {
|
|
283
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
284
|
+
throw new SelfhostMvpError(`${path} must be an object`);
|
|
285
|
+
}
|
|
286
|
+
return value;
|
|
287
|
+
}
|
|
288
|
+
function array(value, path) {
|
|
289
|
+
if (!Array.isArray(value))
|
|
290
|
+
throw new SelfhostMvpError(`${path} must be an array`);
|
|
291
|
+
return value;
|
|
292
|
+
}
|
|
293
|
+
function string(value, path) {
|
|
294
|
+
if (typeof value !== 'string')
|
|
295
|
+
throw new SelfhostMvpError(`${path} must be a string`);
|
|
296
|
+
return value;
|
|
297
|
+
}
|
|
298
|
+
function text(value, path) {
|
|
299
|
+
const result = string(value, path);
|
|
300
|
+
if (result.length === 0)
|
|
301
|
+
throw new SelfhostMvpError(`${path} must be non-empty string`);
|
|
302
|
+
return result;
|
|
303
|
+
}
|
|
304
|
+
function boolean(value, path) {
|
|
305
|
+
if (typeof value !== 'boolean')
|
|
306
|
+
throw new SelfhostMvpError(`${path} must be boolean`);
|
|
307
|
+
return value;
|
|
308
|
+
}
|
|
309
|
+
function integer(value, path, minimum) {
|
|
310
|
+
if (!Number.isInteger(value) || value < minimum) {
|
|
311
|
+
throw new SelfhostMvpError(`${path} must be an integer >= ${minimum}`);
|
|
312
|
+
}
|
|
313
|
+
return value;
|
|
314
|
+
}
|
|
315
|
+
function canonicalPath(value, path) {
|
|
316
|
+
try {
|
|
317
|
+
return normalizeKernelPath(string(value, path), path);
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
throw new SelfhostMvpError(error instanceof Error ? error.message : `${path} must be a canonical path`);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
function diagnosticKey(value) {
|
|
324
|
+
return [
|
|
325
|
+
value.sourcePath ?? '',
|
|
326
|
+
sortableInteger(value.span.start.offset),
|
|
327
|
+
sortableInteger(value.span.end.offset),
|
|
328
|
+
sortableInteger(value.span.start.line),
|
|
329
|
+
sortableInteger(value.span.start.column),
|
|
330
|
+
sortableInteger(value.span.end.line),
|
|
331
|
+
sortableInteger(value.span.end.column),
|
|
332
|
+
value.code,
|
|
333
|
+
value.message,
|
|
334
|
+
value.notes.join('\0'),
|
|
335
|
+
].join('\0');
|
|
336
|
+
}
|
|
337
|
+
function sortableInteger(value) {
|
|
338
|
+
return value.toString().padStart(16, '0');
|
|
339
|
+
}
|
|
340
|
+
function assertCanonical(values, key, path) {
|
|
341
|
+
const keys = values.map(key);
|
|
342
|
+
if (new Set(keys).size !== keys.length)
|
|
343
|
+
throw new SelfhostMvpError(`${path} must be unique`);
|
|
344
|
+
const sorted = [...keys].sort(compareText);
|
|
345
|
+
if (JSON.stringify(keys) !== JSON.stringify(sorted))
|
|
346
|
+
throw new SelfhostMvpError(`${path} must be sorted`);
|
|
347
|
+
}
|
|
348
|
+
function compareText(left, right) {
|
|
349
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
350
|
+
}
|
|
351
|
+
function exactKeys(value, keys, path) {
|
|
352
|
+
const expected = [...keys].sort(compareText);
|
|
353
|
+
const actual = Object.keys(value).sort(compareText);
|
|
354
|
+
if (JSON.stringify(actual) !== JSON.stringify(expected)) {
|
|
355
|
+
throw new SelfhostMvpError(`${path} keys must be exactly ${expected.join(', ')}`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=project-compiler-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-compiler-adapter.js","sourceRoot":"","sources":["../../../src/selfhost/project-compiler-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type KernelOutputV1 } from './contract.js';
|
|
2
|
+
import type { DifferentialKernelV1 } from './differential-harness.js';
|
|
3
|
+
import type { SelfhostMvpModule } from './mvp-adapter.js';
|
|
4
|
+
import { type ProjectCompilerResultV1 } from './project-compiler-adapter.js';
|
|
5
|
+
/**
|
|
6
|
+
* Adapt the integrated Self-host Project Compiler boundary to the existing
|
|
7
|
+
* versioned differential harness. The project boundary currently carries one
|
|
8
|
+
* project-only diagnostic field (`notes`) that has no Kernel v1 equivalent;
|
|
9
|
+
* this adapter deliberately compares the shared compiler/runtime contract and
|
|
10
|
+
* leaves project-only metadata to its dedicated contract tests.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createSelfhostProjectKernel(module: SelfhostMvpModule): DifferentialKernelV1;
|
|
13
|
+
export declare function compileWithSelfhostProject(module: SelfhostMvpModule, value: unknown): Promise<KernelOutputV1>;
|
|
14
|
+
export declare function projectCompilerResultToKernelOutput(result: ProjectCompilerResultV1): KernelOutputV1;
|
|
15
|
+
//# sourceMappingURL=project-differential-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-differential-adapter.d.ts","sourceRoot":"","sources":["../../../src/selfhost/project-differential-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAON,KAAK,cAAc,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAEN,KAAK,uBAAuB,EAC5B,MAAM,+BAA+B,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,GAAG,oBAAoB,CAK3F;AAED,wBAAsB,0BAA0B,CAC/C,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC,CAGzB;AAED,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,uBAAuB,GAAG,cAAc,CAoBnG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { KERNEL_CONTRACT_VERSION, KERNEL_LANGUAGE_VERSION, validateKernelInput, validateKernelOutput, } from './contract.js';
|
|
2
|
+
import { compileWithProjectCompilerBoundary, } from './project-compiler-adapter.js';
|
|
3
|
+
/**
|
|
4
|
+
* Adapt the integrated Self-host Project Compiler boundary to the existing
|
|
5
|
+
* versioned differential harness. The project boundary currently carries one
|
|
6
|
+
* project-only diagnostic field (`notes`) that has no Kernel v1 equivalent;
|
|
7
|
+
* this adapter deliberately compares the shared compiler/runtime contract and
|
|
8
|
+
* leaves project-only metadata to its dedicated contract tests.
|
|
9
|
+
*/
|
|
10
|
+
export function createSelfhostProjectKernel(module) {
|
|
11
|
+
return {
|
|
12
|
+
name: 'selfhost-project',
|
|
13
|
+
compile: input => compileWithSelfhostProject(module, input),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export async function compileWithSelfhostProject(module, value) {
|
|
17
|
+
const input = validateProjectDifferentialInput(value);
|
|
18
|
+
return projectCompilerResultToKernelOutput(compileWithProjectCompilerBoundary(module, input));
|
|
19
|
+
}
|
|
20
|
+
export function projectCompilerResultToKernelOutput(result) {
|
|
21
|
+
return validateKernelOutput({
|
|
22
|
+
contractVersion: KERNEL_CONTRACT_VERSION,
|
|
23
|
+
languageVersion: KERNEL_LANGUAGE_VERSION,
|
|
24
|
+
platform: result.platform,
|
|
25
|
+
entryPath: result.entryPath,
|
|
26
|
+
accepted: result.accepted,
|
|
27
|
+
diagnostics: result.diagnostics.map(toKernelDiagnostic),
|
|
28
|
+
emittedModules: result.emittedModules.map(module => ({ ...module })),
|
|
29
|
+
dependencies: result.dependencies.map(dependency => ({
|
|
30
|
+
modulePath: dependency.modulePath,
|
|
31
|
+
sourceKind: dependency.sourceKind,
|
|
32
|
+
specifier: dependency.specifier,
|
|
33
|
+
...(dependency.resolvedPath === null ? {} : { resolvedPath: dependency.resolvedPath }),
|
|
34
|
+
typeOnly: dependency.typeOnly,
|
|
35
|
+
public: dependency.public,
|
|
36
|
+
})),
|
|
37
|
+
exportedSymbols: result.exportedSymbols.map(symbol => ({ ...symbol })),
|
|
38
|
+
stats: { ...result.stats },
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function validateProjectDifferentialInput(value) {
|
|
42
|
+
const input = validateKernelInput(value);
|
|
43
|
+
if (input.platform !== 'node')
|
|
44
|
+
throw new Error('Project differential currently requires the node platform');
|
|
45
|
+
if (input.interopManifest.modules.length !== 0) {
|
|
46
|
+
throw new Error('Project differential v1 does not compare JavaScript interop yet');
|
|
47
|
+
}
|
|
48
|
+
if (input.emit.sourceMap) {
|
|
49
|
+
throw new Error('Project differential v1 requires source maps to be disabled');
|
|
50
|
+
}
|
|
51
|
+
if (!input.emit.sourcesContent) {
|
|
52
|
+
throw new Error('Project differential v1 requires sourcesContent');
|
|
53
|
+
}
|
|
54
|
+
return input;
|
|
55
|
+
}
|
|
56
|
+
function toKernelDiagnostic(diagnostic) {
|
|
57
|
+
return {
|
|
58
|
+
code: diagnostic.code,
|
|
59
|
+
severity: diagnostic.severity,
|
|
60
|
+
message: diagnostic.message,
|
|
61
|
+
...(diagnostic.sourcePath === null ? {} : { sourcePath: diagnostic.sourcePath }),
|
|
62
|
+
span: diagnostic.span,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=project-differential-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-differential-adapter.js","sourceRoot":"","sources":["../../../src/selfhost/project-differential-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export type PromotionDecision = 'blocked' | 'manual' | 'automatic';
|
|
2
|
+
export type PromotionEvidenceStatus = 'passed' | 'failed';
|
|
3
|
+
export interface PromotionEvidenceItem {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly status: PromotionEvidenceStatus;
|
|
6
|
+
readonly candidateSha: string;
|
|
7
|
+
readonly source: string;
|
|
8
|
+
readonly completedAt: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PromotionEvidenceObservation {
|
|
11
|
+
readonly schemaVersion: 1;
|
|
12
|
+
readonly candidateSha: string;
|
|
13
|
+
readonly successfulRuns: number;
|
|
14
|
+
readonly observationDays: number;
|
|
15
|
+
readonly unexplainedDifferentials: number;
|
|
16
|
+
readonly manualApproval: boolean;
|
|
17
|
+
readonly rollbackEvidence: boolean;
|
|
18
|
+
readonly stableReleaseCycles: number;
|
|
19
|
+
readonly evidence: readonly PromotionEvidenceItem[];
|
|
20
|
+
}
|
|
21
|
+
export interface PromotionEvaluationReason {
|
|
22
|
+
readonly code: string;
|
|
23
|
+
readonly path: string;
|
|
24
|
+
readonly message: string;
|
|
25
|
+
}
|
|
26
|
+
export interface PromotionThresholdEvaluation {
|
|
27
|
+
readonly successfulRuns: {
|
|
28
|
+
readonly actual: number | null;
|
|
29
|
+
readonly required: number | null;
|
|
30
|
+
};
|
|
31
|
+
readonly observationDays: {
|
|
32
|
+
readonly actual: number | null;
|
|
33
|
+
readonly required: number | null;
|
|
34
|
+
};
|
|
35
|
+
readonly unexplainedDifferentials: {
|
|
36
|
+
readonly actual: number | null;
|
|
37
|
+
readonly maximum: number | null;
|
|
38
|
+
};
|
|
39
|
+
readonly stableReleaseCycles: {
|
|
40
|
+
readonly actual: number | null;
|
|
41
|
+
readonly required: number | null;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface PromotionEvaluation {
|
|
45
|
+
readonly schemaVersion: 1;
|
|
46
|
+
readonly stageId: string;
|
|
47
|
+
readonly candidateSha: string | null;
|
|
48
|
+
readonly eligible: boolean;
|
|
49
|
+
readonly decision: PromotionDecision;
|
|
50
|
+
readonly automaticPromotionAllowed: boolean | null;
|
|
51
|
+
readonly missingEvidence: readonly string[];
|
|
52
|
+
readonly failedEvidence: readonly string[];
|
|
53
|
+
readonly staleEvidence: readonly string[];
|
|
54
|
+
readonly thresholds: PromotionThresholdEvaluation;
|
|
55
|
+
readonly reasons: readonly PromotionEvaluationReason[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Apply a checked-in promotion policy to one candidate-bound evidence report.
|
|
59
|
+
* This function is pure and fail closed: it never promotes or mutates state.
|
|
60
|
+
*/
|
|
61
|
+
export declare function evaluatePromotionEvidence(policyValue: unknown, stageId: string, observationValue: unknown): PromotionEvaluation;
|
|
62
|
+
//# sourceMappingURL=promotion-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promotion-evidence.d.ts","sourceRoot":"","sources":["../../../src/selfhost/promotion-evidence.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AACnE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,cAAc,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9F,QAAQ,CAAC,eAAe,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC/F,QAAQ,CAAC,wBAAwB,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvG,QAAQ,CAAC,mBAAmB,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACnG;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,4BAA4B,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,yBAAyB,EAAE,CAAC;CACvD;AAkCD;;;GAGG;AACH,wBAAgB,yBAAyB,CACxC,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,OAAO,GACvB,mBAAmB,CAoErB"}
|