@shapeshift-labs/frontier-lang-compiler 0.2.156 → 0.2.158
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/dist/declarations/js-ts-project-merge-summary.d.ts +16 -0
- package/dist/declarations/js-ts-safe-project-merge.d.ts +7 -32
- package/dist/js-ts-safe-project-merge-html-css-matrix.js +38 -0
- package/dist/js-ts-safe-project-merge-html-css-summary.js +21 -0
- package/dist/js-ts-safe-project-merge-html-css.js +50 -0
- package/dist/js-ts-safe-project-merge-missing-evidence.js +8 -9
- package/dist/js-ts-safe-project-merge-summary.js +3 -3
- package/dist/js-ts-safe-project-merge.js +5 -12
- package/package.json +3 -2
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { JsTsProjectMergeProofLevel } from './js-ts-project-merge-proof-levels.js';
|
|
2
|
+
import type { JsTsProjectSafeMergeMissingEvidenceTelemetry } from './js-ts-project-merge-confidence.js';
|
|
3
|
+
|
|
4
|
+
export interface JsTsProjectSafeMergeSummary {
|
|
5
|
+
readonly files: number; readonly mergedFiles: number; readonly blockedFiles: number; readonly outputFiles: number;
|
|
6
|
+
readonly htmlFiles:number; readonly cssFiles:number; readonly htmlCssFiles:number; readonly htmlMergedFiles:number; readonly cssMergedFiles:number; readonly htmlCssMergedFiles:number; readonly htmlBlockedFiles:number; readonly cssBlockedFiles:number; readonly htmlCssBlockedFiles:number; readonly htmlCssBrowserRuntimeProofs:number;
|
|
7
|
+
readonly projectGraphConflicts: number; readonly projectGraphDeltaEvidenceIncluded: number; readonly outputProjectGraphConflicts:number; readonly projectGraphCssModuleUseSiteConflicts:number; readonly projectGraphDeltaConflicts: number; readonly projectGraphLimitConflicts: number; readonly projectGraphPublicContractConflicts: number; readonly projectGraphSourceSpanConflicts: number;
|
|
8
|
+
readonly projectGraphCompilerTypeConflicts: number; readonly projectGraphRuntimeRegionConflicts: number; readonly projectGraphScopeUseDefConflicts: number; readonly projectGraphJsxPropConflicts: number; readonly projectGraphJsxRenderRiskConflicts: number; readonly projectGraphReExportIdentityConflicts: number; readonly projectGraphModuleDeclarationShapeConflicts: number; readonly projectGraphExportAssignmentShapeConflicts: number;
|
|
9
|
+
readonly projectGraphImportAttributeConflicts: number; readonly projectGraphImportTargetConflicts: number; readonly outputDiagnostics: number; readonly outputDiagnosticConflicts: number; readonly outputDiagnosticErrors: number; readonly outputDiagnosticWarnings: number; readonly outputDeclarations: number; readonly outputDeclarationBytes: number; readonly outputDeclarationConflicts: number; readonly outputDeclarationDiagnosticErrors: number; readonly outputQualityGates: number; readonly outputQualityGateConflicts: number;
|
|
10
|
+
readonly proofEvidenceRecords: number; readonly proofEvidencePassed: number; readonly proofEvidenceFailed: number; readonly proofEvidenceSkipped: number; readonly proofEvidenceUnknown: number; readonly proofEvidenceMissing: number; readonly proofEvidenceMissingLevels: readonly JsTsProjectMergeProofLevel[]; readonly semanticEquivalenceLevel: 'semantic-equivalence-unknown' | string;
|
|
11
|
+
readonly evidenceRecords: number; readonly passedEvidenceRecords: number; readonly failedEvidenceRecords: number; readonly unknownEvidenceRecords: number; readonly confidenceScore: number; readonly confidenceLevel: string; readonly confidenceDimensions: Readonly<Record<string,string>>; readonly missingEvidenceMatrix: JsTsProjectSafeMergeMissingEvidenceTelemetry; readonly missingSignals: number;
|
|
12
|
+
readonly nextMissingEvidenceCode?: string; readonly nextMissingEvidenceKind?: string; readonly nextMissingEvidenceScope?: string; readonly nextMissingProofLevel?: string; readonly nextMissingEvidenceAction?: string; readonly nextMissingEvidenceRouteId?: string; readonly nextMissingEvidenceRouteLane?: string; readonly nextMissingEvidenceRouteNext?: string;
|
|
13
|
+
readonly projectMoveRenameClassifications: number; readonly projectFileMoveRenameClassifications: number; readonly projectSymbolMoveClassifications: number; readonly projectExportedSymbolMoveClassifications: number; readonly projectImportedSymbolMoveClassifications: number; readonly projectSymbolMoveAdmissions: number; readonly projectExportedSymbolMoveAdmissions: number; readonly projectImportedSymbolMoveAdmissions: number; readonly projectCrossFileSymbolRenameClassifications: number; readonly projectCrossFileSymbolRenameAdmissions: number;
|
|
14
|
+
readonly projectSplitMergeClassifications: number; readonly projectModuleSplitClassifications: number; readonly projectModuleMergeClassifications: number; readonly projectClassSplitClassifications: number; readonly projectClassMergeClassifications: number; readonly projectSplitMergeAdmissions: number; readonly projectModuleSplitAdmissions: number; readonly projectModuleMergeAdmissions: number; readonly projectClassSplitAdmissions: number; readonly projectClassMergeAdmissions: number;
|
|
15
|
+
readonly semanticArtifactFiles: number; readonly operations: Readonly<Record<string,number>>;
|
|
16
|
+
}
|
|
@@ -12,6 +12,7 @@ import type { JsTsProjectMergeQualityGate as QualityGate, JsTsProjectMergeQualit
|
|
|
12
12
|
import type { JsTsProjectMergeProofEvidence, JsTsProjectMergeProofEvidenceStatus, JsTsProjectMergeProofLevel } from './js-ts-project-merge-proof-levels.js';
|
|
13
13
|
import type { JsTsProjectSafeMergeAdmissionRoute, JsTsProjectSafeMergeAdmissionRouteSummary } from './js-ts-project-merge-admission-routes.js';
|
|
14
14
|
import type { JsTsProjectSafeMergeConfidenceSummary, JsTsProjectSafeMergeMissingEvidenceTelemetry } from './js-ts-project-merge-confidence.js';
|
|
15
|
+
import type { JsTsProjectSafeMergeSummary } from './js-ts-project-merge-summary.js';
|
|
15
16
|
import type { JsTsProjectCommonJsRuntimeInteropProof } from './js-ts-project-merge-commonjs-interop.js';
|
|
16
17
|
import type { JsTsProjectGlobalAugmentationCompatibilityProof } from './js-ts-project-merge-global-augmentation.js'; import type { JsTsProjectJsxRenderReturnBranchProof } from './js-ts-project-merge-jsx-render-branch.js'; import type { JsTsProjectSemanticEquivalenceProof } from './js-ts-project-merge-semantic-equivalence-proof.js';
|
|
17
18
|
import type { ParserTriviaEvidenceInput } from './source-preservation.js';
|
|
@@ -20,12 +21,14 @@ export type { JsTsProjectMergeQualityGate, JsTsProjectMergeQualityGateDecision,
|
|
|
20
21
|
export type { JsTsProjectMergeProofEvidence, JsTsProjectMergeProofEvidenceRecord, JsTsProjectMergeProofEvidenceRecordStatus, JsTsProjectMergeProofEvidenceStatus, JsTsProjectMergeProofEvidenceSummary, JsTsProjectMergeProofLevel, JsTsProjectMergeProofMissingEvidence } from './js-ts-project-merge-proof-levels.js';
|
|
21
22
|
export type { JsTsProjectSafeMergeAdmissionRoute, JsTsProjectSafeMergeAdmissionRouteSummary } from './js-ts-project-merge-admission-routes.js';
|
|
22
23
|
export type { JsTsProjectSafeMergeConfidenceSummary, JsTsProjectSafeMergeMissingEvidence, JsTsProjectSafeMergeMissingEvidenceRoute, JsTsProjectSafeMergeMissingEvidenceTelemetry, JsTsProjectSafeMergeRecommendedAction } from './js-ts-project-merge-confidence.js';
|
|
24
|
+
export type { JsTsProjectSafeMergeSummary } from './js-ts-project-merge-summary.js';
|
|
23
25
|
export type { JsTsProjectCommonJsRuntimeInteropProof } from './js-ts-project-merge-commonjs-interop.js';
|
|
24
26
|
export type { JsTsProjectGlobalAugmentationCompatibilityProof } from './js-ts-project-merge-global-augmentation.js'; export type { JsTsProjectJsxRenderReturnBranchArmOrigin, JsTsProjectJsxRenderReturnBranchControlKind, JsTsProjectJsxRenderReturnBranchProof } from './js-ts-project-merge-jsx-render-branch.js';
|
|
25
27
|
|
|
26
28
|
export type JsTsProjectSafeMergeStatus = 'merged' | 'blocked';
|
|
27
29
|
export type JsTsProjectSafeMergeFileStatus = 'merged' | 'blocked';
|
|
28
30
|
export type JsTsProjectSafeMergeFileOperation = 'merged-source' | 'merged-source-and-members' | 'worker-added' | 'head-only' | 'both-added-identical' | 'worker-deleted' | 'head-deleted-worker-unchanged' | 'blocked-merge' | 'blocked-file-presence' | string;
|
|
31
|
+
export type JsTsProjectHtmlCssMergeOptions = Readonly<Record<string, unknown>>;
|
|
29
32
|
|
|
30
33
|
export interface JsTsProjectSafeMergeEvidenceRecord { readonly id: string; readonly kind: string; readonly status: 'passed' | 'failed' | 'skipped' | 'unknown' | string; readonly level?: string; readonly scope?: string; readonly summary?: string; readonly metadata?: Record<string, unknown>; }
|
|
31
34
|
|
|
@@ -105,6 +108,8 @@ export interface JsTsProjectSafeMergeInput {
|
|
|
105
108
|
readonly commonJsRuntimeInteropProofs?: readonly JsTsProjectCommonJsRuntimeInteropProof[];
|
|
106
109
|
readonly globalAugmentationCompatibilityProof?: JsTsProjectGlobalAugmentationCompatibilityProof;
|
|
107
110
|
readonly globalAugmentationCompatibilityProofs?: readonly JsTsProjectGlobalAugmentationCompatibilityProof[]; readonly jsxRenderReturnBranchProof?: JsTsProjectJsxRenderReturnBranchProof; readonly jsxRenderReturnBranchProofs?: readonly JsTsProjectJsxRenderReturnBranchProof[]; readonly externalSemanticEquivalenceProof?: JsTsProjectSemanticEquivalenceProof; readonly semanticEquivalenceProof?: JsTsProjectSemanticEquivalenceProof;
|
|
111
|
+
readonly htmlMergeOptions?: JsTsProjectHtmlCssMergeOptions; readonly markupMergeOptions?: JsTsProjectHtmlCssMergeOptions; readonly htmlMergeOptionsByPath?: Readonly<Record<string,JsTsProjectHtmlCssMergeOptions>>; readonly markupMergeOptionsByPath?: Readonly<Record<string,JsTsProjectHtmlCssMergeOptions>>;
|
|
112
|
+
readonly cssMergeOptions?: JsTsProjectHtmlCssMergeOptions; readonly styleMergeOptions?: JsTsProjectHtmlCssMergeOptions; readonly cssMergeOptionsByPath?: Readonly<Record<string,JsTsProjectHtmlCssMergeOptions>>; readonly styleMergeOptionsByPath?: Readonly<Record<string,JsTsProjectHtmlCssMergeOptions>>;
|
|
108
113
|
readonly moduleResolution?: NativeProjectModuleResolutionOptions;
|
|
109
114
|
readonly tsconfig?: JsTsProjectTsconfigInput | NativeProjectModuleResolutionOptions;
|
|
110
115
|
readonly projectReferences?: JsTsProjectReferencesInput;
|
|
@@ -169,7 +174,7 @@ export interface JsTsProjectSafeMergeFileResult {
|
|
|
169
174
|
readonly baseHash?: string;
|
|
170
175
|
readonly workerHash?: string;
|
|
171
176
|
readonly headHash?: string;
|
|
172
|
-
readonly result?: JsTsSafeMergeResult
|
|
177
|
+
readonly result?: JsTsSafeMergeResult | Record<string, unknown>;
|
|
173
178
|
readonly semanticArtifacts?: JsTsSafeMergeSemanticArtifacts;
|
|
174
179
|
readonly conflicts: readonly JsTsSafeMergeConflict[];
|
|
175
180
|
readonly admission: JsTsSafeMergeAdmission;
|
|
@@ -272,37 +277,7 @@ export interface JsTsProjectSafeMergeResult {
|
|
|
272
277
|
readonly outputQualityGate?: QualityGate;
|
|
273
278
|
readonly conflicts: readonly JsTsSafeMergeConflict[];
|
|
274
279
|
readonly admission: JsTsProjectSafeMergeAdmission; readonly proofEvidence: JsTsProjectMergeProofEvidence; readonly confidence: JsTsProjectSafeMergeConfidenceSummary; readonly evidence: readonly JsTsProjectSafeMergeEvidenceRecord[];
|
|
275
|
-
readonly summary:
|
|
276
|
-
readonly files: number;
|
|
277
|
-
readonly mergedFiles: number;
|
|
278
|
-
readonly blockedFiles: number;
|
|
279
|
-
readonly outputFiles: number;
|
|
280
|
-
readonly projectGraphConflicts: number;
|
|
281
|
-
readonly projectGraphDeltaEvidenceIncluded: number;
|
|
282
|
-
outputProjectGraphConflicts:number; projectGraphCssModuleUseSiteConflicts:number;
|
|
283
|
-
readonly projectGraphDeltaConflicts: number;
|
|
284
|
-
readonly projectGraphLimitConflicts: number;
|
|
285
|
-
readonly projectGraphPublicContractConflicts: number;
|
|
286
|
-
readonly projectGraphSourceSpanConflicts: number;
|
|
287
|
-
readonly projectGraphCompilerTypeConflicts: number; readonly projectGraphRuntimeRegionConflicts: number; readonly projectGraphScopeUseDefConflicts: number; readonly projectGraphJsxPropConflicts: number; readonly projectGraphJsxRenderRiskConflicts: number;
|
|
288
|
-
readonly projectGraphReExportIdentityConflicts: number; readonly projectGraphModuleDeclarationShapeConflicts: number; readonly projectGraphExportAssignmentShapeConflicts: number;
|
|
289
|
-
readonly projectGraphImportAttributeConflicts: number;
|
|
290
|
-
readonly projectGraphImportTargetConflicts: number;
|
|
291
|
-
readonly outputDiagnostics: number;
|
|
292
|
-
readonly outputDiagnosticConflicts: number;
|
|
293
|
-
readonly outputDiagnosticErrors: number;
|
|
294
|
-
readonly outputDiagnosticWarnings: number;
|
|
295
|
-
readonly outputDeclarations: number;
|
|
296
|
-
readonly outputDeclarationBytes: number;
|
|
297
|
-
readonly outputDeclarationConflicts: number;
|
|
298
|
-
readonly outputDeclarationDiagnosticErrors: number;
|
|
299
|
-
readonly outputQualityGates: number; readonly outputQualityGateConflicts: number;
|
|
300
|
-
readonly proofEvidenceRecords: number; readonly proofEvidencePassed: number; readonly proofEvidenceFailed: number; readonly proofEvidenceSkipped: number; readonly proofEvidenceUnknown: number; readonly proofEvidenceMissing: number; readonly proofEvidenceMissingLevels: readonly JsTsProjectMergeProofLevel[]; readonly semanticEquivalenceLevel: 'semantic-equivalence-unknown' | string; readonly evidenceRecords: number; readonly passedEvidenceRecords: number; readonly failedEvidenceRecords: number; readonly unknownEvidenceRecords: number; readonly confidenceScore: number; readonly confidenceLevel: string; readonly confidenceDimensions: Readonly<Record<string,string>>; readonly missingEvidenceMatrix: JsTsProjectSafeMergeMissingEvidenceTelemetry; readonly missingSignals: number; readonly nextMissingEvidenceCode?: string; readonly nextMissingEvidenceKind?: string; readonly nextMissingEvidenceScope?: string; readonly nextMissingProofLevel?: string; readonly nextMissingEvidenceAction?: string; readonly nextMissingEvidenceRouteId?: string; readonly nextMissingEvidenceRouteLane?: string; readonly nextMissingEvidenceRouteNext?: string;
|
|
301
|
-
readonly projectMoveRenameClassifications: number; readonly projectFileMoveRenameClassifications: number; readonly projectSymbolMoveClassifications: number; readonly projectExportedSymbolMoveClassifications: number; readonly projectImportedSymbolMoveClassifications: number; readonly projectSymbolMoveAdmissions: number; readonly projectExportedSymbolMoveAdmissions: number; readonly projectImportedSymbolMoveAdmissions: number; readonly projectCrossFileSymbolRenameClassifications: number; readonly projectCrossFileSymbolRenameAdmissions: number;
|
|
302
|
-
readonly projectSplitMergeClassifications: number; readonly projectModuleSplitClassifications: number; readonly projectModuleMergeClassifications: number; readonly projectClassSplitClassifications: number; readonly projectClassMergeClassifications: number; readonly projectSplitMergeAdmissions: number; readonly projectModuleSplitAdmissions: number; readonly projectModuleMergeAdmissions: number; readonly projectClassSplitAdmissions: number; readonly projectClassMergeAdmissions: number;
|
|
303
|
-
readonly semanticArtifactFiles: number;
|
|
304
|
-
readonly operations: Readonly<Record<string,number>>;
|
|
305
|
-
};
|
|
280
|
+
readonly summary: JsTsProjectSafeMergeSummary;
|
|
306
281
|
readonly metadata?: Record<string, unknown> & {
|
|
307
282
|
readonly projectMoveRenameClassifications?: {
|
|
308
283
|
readonly classifications: number;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const HtmlCssProjectMergeMissingSignals = Object.freeze({
|
|
2
|
+
htmlStructuralMerge: 'html-structural-merge-proof-blocked',
|
|
3
|
+
cssCascadeMerge: 'css-cascade-merge-proof-blocked',
|
|
4
|
+
htmlCssBrowserRuntimeProof: 'html-css-browser-runtime-proof-not-available'
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
function htmlCssProjectMergeMissingEvidenceRoutes(route, signals) {
|
|
8
|
+
return {
|
|
9
|
+
[signals.htmlStructuralMerge]: route('admit-html-structural-merge', 'layout-markup-graph', 'supply-html-parser-reference-and-boundary-evidence'),
|
|
10
|
+
[signals.cssCascadeMerge]: route('admit-css-cascade-merge', 'layout-style-graph', 'supply-css-parser-cascade-and-scope-evidence'),
|
|
11
|
+
[signals.htmlCssBrowserRuntimeProof]: route('prove-html-css-browser-runtime', 'browser-proof', 'attach-browser-runtime-proof-bundle')
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function htmlCssProjectMergeAdmissionMatrixRows(matrixRow, signals) {
|
|
16
|
+
return [
|
|
17
|
+
matrixRow('html-structural-merge-admission', 'partial', ['html-structural-merge'], [signals.htmlStructuralMerge]),
|
|
18
|
+
matrixRow('css-cascade-merge-admission', 'partial', ['css-cascade-merge'], [signals.cssCascadeMerge]),
|
|
19
|
+
matrixRow('html-css-browser-runtime-proof', 'bounded-evidence', ['browser-runtime-proof'], [signals.htmlCssBrowserRuntimeProof])
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function htmlCssProjectMergeMissingEvidenceItems(summary, signals, missingEvidenceItem) {
|
|
24
|
+
const items = [];
|
|
25
|
+
if (summary.htmlBlockedFiles) items.push(missingEvidenceItem({ code: signals.htmlStructuralMerge, scope: 'layout-markup-graph', kind: 'html-structural-merge-proof', proofLevel: 'html-structural-merge', action: 'review', summary: `HTML project merge has ${summary.htmlBlockedFiles} blocked file(s); supply parser/source-span evidence, stable element identity, and runtime-boundary proof before admission.` }));
|
|
26
|
+
if (summary.cssBlockedFiles) items.push(missingEvidenceItem({ code: signals.cssCascadeMerge, scope: 'layout-style-graph', kind: 'css-cascade-merge-proof', proofLevel: 'css-cascade-merge', action: 'review', summary: `CSS project merge has ${summary.cssBlockedFiles} blocked file(s); supply parser/cascade/scope evidence and keep browser claims false until runtime proof passes.` }));
|
|
27
|
+
if (summary.htmlCssMergedFiles && !summary.htmlCssBrowserRuntimeProofs) items.push(missingEvidenceItem({ code: signals.htmlCssBrowserRuntimeProof, scope: 'browser-proof', kind: 'browser-runtime-proof', proofLevel: 'browser-runtime-proof', action: 'review', summary: 'HTML/CSS structural source merge was available, but browser DOM/cascade/layout/runtime proof was not attached; keep browser equivalence claims false.', suggestedInput: { browserRuntimeProof: true } }));
|
|
28
|
+
return items;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function htmlCssProjectMergeMatrixProofStatus(level, summary) {
|
|
32
|
+
if (level === 'html-structural-merge') return summary.htmlFiles ? (summary.htmlBlockedFiles ? 'failed' : summary.htmlMergedFiles ? 'passed' : 'missing') : 'absent';
|
|
33
|
+
if (level === 'css-cascade-merge') return summary.cssFiles ? (summary.cssBlockedFiles ? 'failed' : summary.cssMergedFiles ? 'passed' : 'missing') : 'absent';
|
|
34
|
+
if (level === 'browser-runtime-proof') return summary.htmlCssFiles ? (summary.htmlCssBrowserRuntimeProofs ? 'passed' : 'missing') : 'absent';
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { HtmlCssProjectMergeMissingSignals, htmlCssProjectMergeAdmissionMatrixRows, htmlCssProjectMergeMatrixProofStatus, htmlCssProjectMergeMissingEvidenceItems, htmlCssProjectMergeMissingEvidenceRoutes };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
function htmlCssProjectSummary(files) {
|
|
2
|
+
const htmlFiles = files.filter(isHtmlProjectFile), cssFiles = files.filter(isCssProjectFile), htmlCssFiles = [...htmlFiles, ...cssFiles];
|
|
3
|
+
return {
|
|
4
|
+
htmlFiles: htmlFiles.length, cssFiles: cssFiles.length, htmlCssFiles: htmlCssFiles.length,
|
|
5
|
+
htmlMergedFiles: htmlFiles.filter(isMerged).length, cssMergedFiles: cssFiles.filter(isMerged).length, htmlCssMergedFiles: htmlCssFiles.filter(isMerged).length,
|
|
6
|
+
htmlBlockedFiles: htmlFiles.filter(isBlocked).length, cssBlockedFiles: cssFiles.filter(isBlocked).length, htmlCssBlockedFiles: htmlCssFiles.filter(isBlocked).length,
|
|
7
|
+
htmlCssBrowserRuntimeProofs: htmlCssFiles.filter(hasBrowserRuntimeProof).length
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function isHtmlProjectFile(file) { return String(file?.language ?? '').toLowerCase() === 'html' || /\.html?$/i.test(stripQuery(file?.sourcePath)); }
|
|
12
|
+
function isCssProjectFile(file) { return String(file?.language ?? '').toLowerCase() === 'css' || stripQuery(file?.sourcePath).toLowerCase().endsWith('.css'); }
|
|
13
|
+
function isMerged(file) { return file.status === 'merged'; }
|
|
14
|
+
function isBlocked(file) { return file.status === 'blocked'; }
|
|
15
|
+
function stripQuery(sourcePath) { return String(sourcePath ?? '').replace(/[?#].*$/, ''); }
|
|
16
|
+
function hasBrowserRuntimeProof(file) {
|
|
17
|
+
const admission = file?.result?.admission ?? file?.admission ?? {};
|
|
18
|
+
return admission.browserRuntimeEquivalenceClaim === true || admission.browserCascadeEquivalenceClaim === true || admission.browserRenderEquivalenceClaim === true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { htmlCssProjectSummary };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { safeMergeCssSource } from '@shapeshift-labs/frontier-lang-css';
|
|
2
|
+
import { safeMergeHtmlSource } from '@shapeshift-labs/frontier-lang-html';
|
|
3
|
+
import { compactRecord } from './js-ts-safe-merge-context.js';
|
|
4
|
+
import { hashText, safeId } from './js-ts-safe-project-merge-core.js';
|
|
5
|
+
|
|
6
|
+
function projectFileLanguage(file, input) {
|
|
7
|
+
return file.language ?? inferLanguageFromPath(file.sourcePath) ?? input.language ?? 'typescript';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function maybeMergeHtmlCssProjectFile(options) {
|
|
11
|
+
const { file, input, projectId, context, base, worker, head, sourceInput } = options;
|
|
12
|
+
const language = String(context.language ?? '').toLowerCase();
|
|
13
|
+
const merge = language === 'html' ? safeMergeHtmlSource : language === 'css' ? safeMergeCssSource : undefined;
|
|
14
|
+
if (!merge) return undefined;
|
|
15
|
+
const result = merge({ ...sourceInput, ...htmlCssMergeOptionsForProjectFile(input, file.sourcePath, language), ...context, id: `${projectId}_${safeId(file.sourcePath)}`, baseSourceText: base, workerSourceText: worker, headSourceText: head });
|
|
16
|
+
return result.status === 'merged' ? mergedHtmlCssFile(file, context, result, language) : blockedHtmlCssFile(file, context, result);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function inferLanguageFromPath(sourcePath) {
|
|
20
|
+
const path = String(sourcePath ?? '').toLowerCase().replace(/[?#].*$/, '');
|
|
21
|
+
if (path.endsWith('.html') || path.endsWith('.htm')) return 'html';
|
|
22
|
+
if (path.endsWith('.css')) return 'css';
|
|
23
|
+
if (path.endsWith('.tsx')) return 'tsx';
|
|
24
|
+
if (path.endsWith('.jsx')) return 'jsx';
|
|
25
|
+
if (path.endsWith('.ts') || path.endsWith('.mts') || path.endsWith('.cts')) return 'typescript';
|
|
26
|
+
if (path.endsWith('.js') || path.endsWith('.mjs') || path.endsWith('.cjs')) return 'javascript';
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function htmlCssMergeOptionsForProjectFile(input, sourcePath, language) {
|
|
31
|
+
const byPath = language === 'html' ? input.htmlMergeOptionsByPath ?? input.markupMergeOptionsByPath : input.cssMergeOptionsByPath ?? input.styleMergeOptionsByPath;
|
|
32
|
+
return compactRecord({ ...(language === 'css' ? input.cssMergeOptions ?? input.styleMergeOptions : input.htmlMergeOptions ?? input.markupMergeOptions), ...(byPath?.[sourcePath] ?? {}) });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function mergedHtmlCssFile(file, context, result, language) {
|
|
36
|
+
return compactRecord({
|
|
37
|
+
kind: 'frontier.lang.jsTsProjectSafeMergeFile', version: 1, sourcePath: file.sourcePath, language: context.language, status: 'merged', operation: `merged-${language}-source`,
|
|
38
|
+
outputSourceText: result.mergedSourceText, outputHash: hashText(result.mergedSourceText), baseHash: hashText(file.baseSourceText), workerHash: hashText(file.workerSourceText), headHash: hashText(file.headSourceText),
|
|
39
|
+
result, semanticArtifacts: result.semanticArtifacts, conflicts: [], admission: result.admission, summary: result.summary, conflictKeys: [`source#${file.sourcePath}`]
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function blockedHtmlCssFile(file, context, result) {
|
|
44
|
+
return compactRecord({
|
|
45
|
+
kind: 'frontier.lang.jsTsProjectSafeMergeFile', version: 1, sourcePath: file.sourcePath, language: context.language, status: 'blocked', operation: 'blocked-merge',
|
|
46
|
+
result, conflicts: result.conflicts ?? [], admission: result.admission, summary: result.summary, conflictKeys: [`source#${file.sourcePath}`]
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { maybeMergeHtmlCssProjectFile, projectFileLanguage };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { HtmlCssProjectMergeMissingSignals, htmlCssProjectMergeAdmissionMatrixRows, htmlCssProjectMergeMatrixProofStatus, htmlCssProjectMergeMissingEvidenceItems, htmlCssProjectMergeMissingEvidenceRoutes } from './js-ts-safe-project-merge-html-css-matrix.js';
|
|
1
2
|
const ProjectMergeMissingSignals = Object.freeze({
|
|
2
3
|
outputDiagnosticsGate: 'output-diagnostics-gate-not-run',
|
|
3
4
|
declarationGate: 'declaration-gate-not-run',
|
|
@@ -10,6 +11,7 @@ const ProjectMergeMissingSignals = Object.freeze({
|
|
|
10
11
|
semanticEditReplayProof: 'semantic-edit-replay-proof-not-produced',
|
|
11
12
|
semanticEditReplayOutputMismatch: 'semantic-edit-replay-proof-output-mismatch',
|
|
12
13
|
unsupportedJsTsSurface: 'unsupported-js-ts-surface-proof-not-available',
|
|
14
|
+
...HtmlCssProjectMergeMissingSignals,
|
|
13
15
|
cssModuleUseSiteGraph: 'css-module-use-site-graph-proof-blocked',
|
|
14
16
|
semanticEquivalenceProof: 'semantic-equivalence-proof-not-available'
|
|
15
17
|
});
|
|
@@ -26,6 +28,7 @@ const ProjectMergeMissingEvidenceRoutes = Object.freeze({
|
|
|
26
28
|
[ProjectMergeMissingSignals.semanticEditReplayProof]: route('produce-semantic-edit-replay-proof', 'source-files', 'run-semantic-edit-replay-diagnostics'),
|
|
27
29
|
[ProjectMergeMissingSignals.semanticEditReplayOutputMismatch]: route('reject-semantic-edit-replay-output-mismatch', 'source-files', 'inspect-semantic-edit-replay-output-binding'),
|
|
28
30
|
[ProjectMergeMissingSignals.unsupportedJsTsSurface]: route('prove-unsupported-js-ts-surface', 'semantic-proof', 'supply-unsupported-surface-evidence'),
|
|
31
|
+
...htmlCssProjectMergeMissingEvidenceRoutes(route, ProjectMergeMissingSignals),
|
|
29
32
|
[ProjectMergeMissingSignals.cssModuleUseSiteGraph]: route('prove-css-module-use-site-graph', 'layout-style-graph', 'supply-css-module-transform-and-use-site-proof'),
|
|
30
33
|
[ProjectMergeMissingSignals.semanticEquivalenceProof]: route('external-semantic-equivalence-proof', 'semantic-proof', 'attach-external-equivalence-proof')
|
|
31
34
|
});
|
|
@@ -39,6 +42,7 @@ const ProjectMergeAdmissionMatrixRows = Object.freeze([
|
|
|
39
42
|
matrixRow('control-flow-effect-graph', 'partial', ['source-span-roundtrip', 'focused-test-passed'], [ProjectMergeMissingSignals.sourceSpanRoundtrip, ProjectMergeMissingSignals.semanticArtifacts, ProjectMergeMissingSignals.qualityGates, ProjectMergeMissingSignals.focusedTestGate]),
|
|
40
43
|
matrixRow('generic-semantic-edit-admission', 'partial', ['source-span-roundtrip', 'semantic-edit-replay-clean'], [ProjectMergeMissingSignals.sourceSpanRoundtrip, ProjectMergeMissingSignals.semanticArtifacts, ProjectMergeMissingSignals.semanticEditReplayProof, ProjectMergeMissingSignals.semanticEditReplayOutputMismatch]),
|
|
41
44
|
matrixRow('unsupported-js-ts-surface-coverage', 'partial', ['unsupported-js-ts-surface-review'], [ProjectMergeMissingSignals.unsupportedJsTsSurface]),
|
|
45
|
+
...htmlCssProjectMergeAdmissionMatrixRows(matrixRow, ProjectMergeMissingSignals),
|
|
42
46
|
matrixRow('css-modules-use-site-graph', 'partial', ['css-module-use-site-graph', 'css-module-transform-proof', 'project-graph-evidence'], [ProjectMergeMissingSignals.cssModuleUseSiteGraph]),
|
|
43
47
|
matrixRow('semantic-equivalence-proof', 'bounded-evidence', ['semantic-equivalence-external', 'semantic-equivalence-unknown'], [ProjectMergeMissingSignals.semanticEquivalenceProof]),
|
|
44
48
|
matrixRow('cross-file-symbol-rename', 'partial', ['diagnostics-clean', 'declaration-output-stable', 'project-graph-delta'], [ProjectMergeMissingSignals.outputDiagnosticsGate, ProjectMergeMissingSignals.declarationGate, ProjectMergeMissingSignals.projectGraphEvidence, ProjectMergeMissingSignals.projectGraphDeltaEvidence]),
|
|
@@ -135,6 +139,7 @@ function missingEvidenceItems(summary, context = {}) {
|
|
|
135
139
|
summary: `CSS Module use-site graph has ${summary.projectGraphCssModuleUseSiteConflicts} blocker(s); supply generated class maps, bundler transform identity, source-map proof, and narrow use-site evidence before admission.`,
|
|
136
140
|
suggestedInput: { includeOutputProjectSymbolGraph: true, cssModuleEvidence: true }
|
|
137
141
|
}));
|
|
142
|
+
items.push(...htmlCssProjectMergeMissingEvidenceItems(summary, ProjectMergeMissingSignals, missingEvidenceItem));
|
|
138
143
|
return items;
|
|
139
144
|
}
|
|
140
145
|
|
|
@@ -247,6 +252,8 @@ function matrixProofStatuses(proofLevels, summary, proofEvidence) {
|
|
|
247
252
|
function matrixProofStatus(level, summary, proofEvidence) {
|
|
248
253
|
const levelStatuses = proofEvidence?.summary?.levelStatuses ?? summary.proofEvidenceLevelStatuses ?? {};
|
|
249
254
|
if (levelStatuses[level]) return levelStatuses[level];
|
|
255
|
+
const htmlCssStatus = htmlCssProjectMergeMatrixProofStatus(level, summary);
|
|
256
|
+
if (htmlCssStatus) return htmlCssStatus;
|
|
250
257
|
if (level === 'project-graph-delta') return summary.projectGraphDeltaEvidenceIncluded ? (summary.projectGraphDeltaConflicts ? 'failed' : 'passed') : 'missing';
|
|
251
258
|
if (level === 'project-graph-evidence') return summary.projectGraphConflicts ? 'failed' : summary.projectGraphEvidenceIncluded || summary.projectGraphDeltaEvidenceIncluded ? 'passed' : 'missing';
|
|
252
259
|
if (level === 'css-module-use-site-graph') return summary.projectGraphCssModuleUseSiteConflicts ? 'failed' : summary.projectGraphCssModuleUseSiteGraphs ? 'passed' : summary.projectGraphEvidenceIncluded ? 'absent' : 'missing';
|
|
@@ -309,12 +316,4 @@ function compactRecord(record) {
|
|
|
309
316
|
return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
|
|
310
317
|
}
|
|
311
318
|
|
|
312
|
-
export {
|
|
313
|
-
compactMissingEvidenceTelemetry,
|
|
314
|
-
confidenceRecommendedAction,
|
|
315
|
-
createProjectMergeAdmissionMatrixAudit,
|
|
316
|
-
missingEvidenceItems,
|
|
317
|
-
missingEvidenceRouteForSignal,
|
|
318
|
-
missingEvidenceSignals,
|
|
319
|
-
prioritizedMissingEvidence
|
|
320
|
-
};
|
|
319
|
+
export { compactMissingEvidenceTelemetry, confidenceRecommendedAction, createProjectMergeAdmissionMatrixAudit, missingEvidenceItems, missingEvidenceRouteForSignal, missingEvidenceSignals, prioritizedMissingEvidence };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { compactMissingEvidenceTelemetry, confidenceRecommendedAction, createProjectMergeAdmissionMatrixAudit, missingEvidenceItems, missingEvidenceSignals, prioritizedMissingEvidence } from './js-ts-safe-project-merge-missing-evidence.js';
|
|
2
2
|
import { failedEvidenceMissingItems, fileAdmissionEvidenceRecords } from './js-ts-safe-project-merge-evidence-routing.js'; import { compactProjectMergeRoutingCalibration } from './js-ts-safe-project-merge-routing-calibration.js';
|
|
3
|
+
import { htmlCssProjectSummary } from './js-ts-safe-project-merge-html-css-summary.js';
|
|
3
4
|
|
|
4
5
|
function projectSummary(files, graphConflicts = [], hasProjectGraphDelta = false, outputDiagnosticsGate = undefined, outputDeclarationGate = undefined, outputQualityGate = undefined, moveRenameSummary = undefined, proofEvidence = undefined, symbolRenameSummary = undefined, splitMergeSummary = undefined, projectSymbolGraph = undefined) {
|
|
5
6
|
const byOperation = {};
|
|
@@ -13,6 +14,7 @@ function projectSummary(files, graphConflicts = [], hasProjectGraphDelta = false
|
|
|
13
14
|
mergedFiles: files.filter((file) => file.status === 'merged').length,
|
|
14
15
|
blockedFiles: files.filter((file) => file.status === 'blocked').length,
|
|
15
16
|
outputFiles: files.filter((file) => typeof file.outputSourceText === 'string').length,
|
|
17
|
+
...htmlCssProjectSummary(files),
|
|
16
18
|
projectGraphConflicts: graphConflicts.length,
|
|
17
19
|
projectGraphDeltaEvidenceIncluded: hasProjectGraphDelta ? 1 : 0, projectGraphEvidenceIncluded: projectSymbolGraph || hasProjectGraphDelta ? 1 : 0,
|
|
18
20
|
outputProjectGraphConflicts: outputConflicts.length, projectGraphCssModuleUseSiteConflicts: cssModuleConflicts.length,
|
|
@@ -285,9 +287,7 @@ function confidenceScore(status, summary, evidence, context) {
|
|
|
285
287
|
|
|
286
288
|
function confidenceLevel(score, status) {
|
|
287
289
|
if (status !== 'merged' || score < 35) return 'blocked';
|
|
288
|
-
|
|
289
|
-
if (score >= 70) return 'medium';
|
|
290
|
-
return 'low';
|
|
290
|
+
return score >= 90 ? 'high' : score >= 70 ? 'medium' : 'low';
|
|
291
291
|
}
|
|
292
292
|
|
|
293
293
|
function compactConfidenceDimensions(status, summary, context, routingCalibration = {}) {
|
|
@@ -19,6 +19,7 @@ import { applyProjectMoveRenameClassifications, classifyProjectMoveRenames } fro
|
|
|
19
19
|
import { applyProjectSymbolRenameClassifications, classifyProjectSymbolRenames } from './js-ts-safe-project-merge-symbol-rename.js';
|
|
20
20
|
import { applyProjectSplitMergeClassifications, classifyProjectSplitMerges } from './js-ts-safe-project-merge-split-merge.js';
|
|
21
21
|
import { projectConfidence, projectEvidence, projectSummary, projectSummaryWithConfidenceEvidence } from './js-ts-safe-project-merge-summary.js';
|
|
22
|
+
import { maybeMergeHtmlCssProjectFile, projectFileLanguage } from './js-ts-safe-project-merge-html-css.js';
|
|
22
23
|
|
|
23
24
|
function safeMergeJsTsProject(input = {}) {
|
|
24
25
|
const id = String(input.id ?? 'js_ts_project_safe_merge');
|
|
@@ -215,7 +216,7 @@ function mergeProjectFile(file, input, projectId, projectSymbolRenames) {
|
|
|
215
216
|
const base = file.baseSourceText;
|
|
216
217
|
const worker = file.workerDeleted ? undefined : file.workerSourceText ?? base;
|
|
217
218
|
const head = file.headDeleted ? undefined : file.headSourceText ?? base;
|
|
218
|
-
const context = { sourcePath: file.sourcePath, language: file
|
|
219
|
+
const context = { sourcePath: file.sourcePath, language: projectFileLanguage(file, input) };
|
|
219
220
|
if (!file.sourcePath) return blockedFile(file, context, 'missing-source-path');
|
|
220
221
|
const ambientBlock = maybeBlockAmbientProjectFile(file, context, input);
|
|
221
222
|
if (ambientBlock) return ambientBlock;
|
|
@@ -242,6 +243,8 @@ function mergeProjectFile(file, input, projectId, projectSymbolRenames) {
|
|
|
242
243
|
? syntheticFile(file, context, undefined, 'head-deleted-worker-unchanged')
|
|
243
244
|
: blockedFile(file, context, 'head-file-delete-conflict');
|
|
244
245
|
}
|
|
246
|
+
const nonJsTsMerge = maybeMergeHtmlCssProjectFile({ file, input, projectId, context, base, worker, head, sourceInput: sourceMergeInputForProjectFile(input) });
|
|
247
|
+
if (nonJsTsMerge) return nonJsTsMerge;
|
|
245
248
|
const result = safeMergeJsTsSource({
|
|
246
249
|
...sourceMergeInputForProjectFile(input),
|
|
247
250
|
...context,
|
|
@@ -286,17 +289,7 @@ function allowsProjectSymbolRenameForFile(input, projectSymbolRenames, sourcePat
|
|
|
286
289
|
}
|
|
287
290
|
|
|
288
291
|
function sourceMergeInputForProjectFile(input) {
|
|
289
|
-
const {
|
|
290
|
-
outputDiagnostics,
|
|
291
|
-
outputSyntaxDiagnostics,
|
|
292
|
-
mergedOutputSyntaxDiagnostics,
|
|
293
|
-
syntaxDiagnostics,
|
|
294
|
-
requireOutputSyntaxDiagnostics,
|
|
295
|
-
requireOutputSyntaxGate,
|
|
296
|
-
requireMergedOutputSyntaxDiagnostics,
|
|
297
|
-
requireSyntaxGate,
|
|
298
|
-
...sourceInput
|
|
299
|
-
} = input;
|
|
292
|
+
const { outputDiagnostics, outputSyntaxDiagnostics, mergedOutputSyntaxDiagnostics, syntaxDiagnostics, requireOutputSyntaxDiagnostics, requireOutputSyntaxGate, requireMergedOutputSyntaxDiagnostics, requireSyntaxGate, ...sourceInput } = input;
|
|
300
293
|
return sourceInput;
|
|
301
294
|
}
|
|
302
295
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shapeshift-labs/frontier-lang-compiler",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.158",
|
|
4
4
|
"description": "Compiler facade for Frontier Lang source documents and language projection adapters.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -63,7 +63,8 @@
|
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"@shapeshift-labs/frontier-lang-c": "0.2.9",
|
|
65
65
|
"@shapeshift-labs/frontier-lang-checker": "0.3.8",
|
|
66
|
-
"@shapeshift-labs/frontier-lang-css": "^0.1.
|
|
66
|
+
"@shapeshift-labs/frontier-lang-css": "^0.1.6",
|
|
67
|
+
"@shapeshift-labs/frontier-lang-html": "^0.1.4",
|
|
67
68
|
"@shapeshift-labs/frontier-lang-javascript": "0.2.9",
|
|
68
69
|
"@shapeshift-labs/frontier-lang-kernel": "0.3.12",
|
|
69
70
|
"@shapeshift-labs/frontier-lang-parser": "0.3.8",
|