@shapeshift-labs/frontier-lang-compiler 0.2.185 → 0.2.186

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/README.md CHANGED
@@ -554,7 +554,8 @@ Current JS/TS semantic-merge status matrix:
554
554
  | CSS selector target evidence | bounded-evidence | CSS selector target proof uses `cssSelectorTargetEvidenceFiles`, selector target graph/specificity/move counters, selector conflict/rebase counters, and the `css-selector-target-evidence` proof status. Target evidence remains bounded to parser-backed selector/target/rebase facts and does not claim cascade or browser runtime equivalence. |
555
555
  | HTML structural merge admission | partial | HTML structural admission uses `html-structural-merge` proof statuses plus parser and identity evidence. It can admit bounded structural source merges when files merge cleanly and required identity/parser evidence is present; blocked files route to `admit-html-structural-merge` and browser/runtime proof remains a separate row. |
556
556
  | CSS cascade merge admission | partial | CSS cascade admission uses `css-cascade-merge` proof statuses plus parser, selector, shape-keyed scoped cascade, dependency, and CSS Module use-site evidence. It remains partial: generated class maps, bundler transform identity, source-map proof, source-bound scoped cascade proof with scope shape keys, dependency proof, and dynamic use sites stay fail-closed when absent. |
557
- | CSS dependency graph evidence | bounded-evidence | CSS dependency graph proof uses `cssDependencySurfaceFiles`, `cssDependencyGraphEvidenceFiles`, missing-proof/blocker counters, and the `css-dependency-graph` proof status for custom property, `var()` fallback, animation, font, and asset dependency surfaces. It is absent when no dependency surface is present and does not claim cascade/browser equivalence. |
557
+ | CSS dependency graph evidence | bounded-evidence | CSS dependency graph proof uses `cssDependencySurfaceFiles`, `cssDependencyGraphEvidenceFiles`, missing-proof/blocker counters, and the `css-dependency-graph` proof status for custom property, `var()` fallback, animation, font, asset, `@property`, and `@page` dependency surfaces. It is absent when no dependency surface is present and does not claim cascade/browser equivalence. |
558
+ | CSS runtime descriptor evidence | bounded-evidence | CSS runtime descriptor proof uses `cssRuntimeDescriptorFiles`, `cssRuntimeDescriptorEvidenceFiles`, property/page descriptor counters, and the `css-runtime-descriptor-evidence` proof status for parser-backed `@property` syntax/inherits/initial-value evidence plus `@page` descriptor and margin-box records. It is source/shape-key evidence only; browser cascade, render, and runtime equivalence remain in the separate browser proof row. |
558
559
  | HTML/CSS browser runtime proof | bounded-evidence | HTML/CSS browser proof is an explicit separate row tracked by `htmlCssBrowserRuntimeProofs`, the `html-css-browser-runtime-proof` surface, and the `browser-runtime-proof` proof status. Structural source merges keep browser/render/cascade equivalence claims false unless a bounded browser proof bundle is attached; missing proof routes to `prove-html-css-browser-runtime`. |
559
560
  | Parser/source-span/trivia evidence | Partial | Source preservation, source hashes, runtime directive-prologue entries, directives, comments/trivia summaries, project `sourceFileRecords` / `sourceSpanRecords`, protected-span hashes, shebang file-entrypoint directive ownership anchors, `sourceMappingURL` and `sourceURL` generated-boundary source-map spans, deterministic source-map generated-boundary ownership keys from supplied exact source/generated spans and hashes, generated-boundary position conflict evidence, deterministic ownership anchors, source-span/trivia ownership blockers, exact parser-trivia ownership records for directive prologues plus leading/trailing comments and JSDoc/block-comment spans when parser evidence matches the source hash, TypeScript `SourceFile` compiler-scanner exact token/trivia source-preservation evidence for JS/TS/JSX/TSX imports, ESTree/Babel parser token/comment range evidence when the supplied AST covers every non-whitespace byte of the current source, fail-closed scanner/ledger spoof blockers, source-span delta conflicts, parser roundtrip proof records, failed source-span roundtrip proof admission blockers, project-merge stage parser-trivia evidence from supplied parser-backed imports for base/worker/head/output, metadata-only exactness blockers for scanner fallbacks, and fixture corpus checks. Parser-backed exactness also requires contiguous current-source token/comment/trivia coverage with no gaps, overlaps, truncation, or text mismatches; truncated coverage blocks exact token/comment ownership. Adapters without token/comment ranges remain approximate/caller evidence, not exact parser trivia. |
560
561
  | Scope/use-def graph | Partial | Lightweight lexical scope/use-def scans, destructuring alias binding records, object/array/nested/rest/default-initializer parameter binding evidence for function and arrow parameters, default import alias reads through re-export chains when a stable default-export local binding is observed, fail-closed `lexical-scope-import-alias-target-unresolved` records when an alias target cannot be tied to a lexical binding, namespace import dot and literal/static-template computed member-read evidence, blocked evidence for ambiguous computed namespace reads and namespace member writes, `this`/`super` receiver member read/write evidence including computed string and static-template members, optional chaining markers, and TypeScript checker-backed receiver-member reference proof for full `this`/`super` access spans including private identifiers, template-literal interpolation live-reference records with expression hashes plus tagged-template site/tag root/member metadata, caller-supplied ESTree/scope-manager structural evidence normalization, closure-capture depth/owner/reference hashes, binding-level closure capture hashes, project `scopeBindingRecords` / `scopeReferenceRecords`, public owner use hashes, public scope-use and reference-site delta conflicts with alias target route/use-hash evidence, TypeScript compiler reference relations when a checker is supplied, exact compiler reference-site proof hashes on scope reference records, fail-closed `typescript-compiler-reference-site-ambiguous`, `typescript-compiler-reference-lexical-binding-mismatch`, and `typescript-compiler-reference-import-alias-target-mismatch` records when compiler alias evidence cannot be reconciled with the lexical route or re-export/import target, and dependency-sensitive fixture coverage. Full whole-program binding/control-flow resolution is still caller/compiler-evidence bounded. |
@@ -10,7 +10,7 @@ export interface JsTsProjectSafeMergeSummary {
10
10
  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;
11
11
  readonly htmlParserEvidenceFiles:number; readonly cssParserEvidenceFiles:number; readonly htmlCssParserEvidenceFiles:number; readonly htmlParserEvidenceFailedFiles:number; readonly cssParserEvidenceFailedFiles:number; readonly htmlCssParserEvidenceFailedFiles:number;
12
12
  readonly htmlIdentityEvidenceFiles:number; readonly cssSelectorTargetEvidenceFiles:number; readonly htmlCssStructuralTargetEvidenceFiles:number; readonly cssSelectorTargetGraphEvidenceFiles:number; readonly cssSelectorSpecificityEvidenceFiles:number; readonly cssSelectorTargetMoveFiles:number; readonly htmlExplicitIdentityEvidenceFiles:number; readonly htmlPathOnlyIdentityResidualFiles:number; readonly htmlDuplicateIdentityEvidenceFiles:number; readonly htmlDuplicateIdentityKeys:number; readonly htmlRuntimeBoundaryEvidenceFiles:number; readonly htmlFrameworkBoundaryEvidenceFiles:number; readonly htmlProofGapBlockedFiles:number; readonly htmlIdentityEvidenceFailedFiles:number; readonly cssSelectorTargetConflictFiles:number; readonly htmlCssStructuralTargetEvidenceFailedFiles:number; readonly cssSelectorTargetRebasedFiles:number;
13
- readonly cssScopedCascadeFiles:number; readonly cssScopedCascadeEvidenceFiles:number; readonly cssScopedCascadeShapeEvidenceFiles:number; readonly cssScopedCascadeBlockedFiles:number; readonly cssDuplicateCascadeKeyBlockedFiles:number; readonly cssShorthandExpansionEvidenceFiles:number; readonly cssDeterministicShorthandExpansionFiles:number; readonly cssShorthandExpansionBlockedFiles:number; readonly cssDependencySurfaceFiles:number; readonly cssDependencyGraphEvidenceFiles:number; readonly cssDependencyGraphMissingProofFiles:number; readonly cssDependencyGraphBlockedFiles:number;
13
+ readonly cssScopedCascadeFiles:number; readonly cssScopedCascadeEvidenceFiles:number; readonly cssScopedCascadeShapeEvidenceFiles:number; readonly cssScopedCascadeBlockedFiles:number; readonly cssDuplicateCascadeKeyBlockedFiles:number; readonly cssShorthandExpansionEvidenceFiles:number; readonly cssDeterministicShorthandExpansionFiles:number; readonly cssShorthandExpansionBlockedFiles:number; readonly cssDependencySurfaceFiles:number; readonly cssDependencyGraphEvidenceFiles:number; readonly cssDependencyGraphMissingProofFiles:number; readonly cssDependencyGraphBlockedFiles:number; readonly cssRuntimeDescriptorFiles:number; readonly cssRuntimeDescriptorEvidenceFiles:number; readonly cssRuntimeDescriptorBlockedFiles:number; readonly cssPropertyDescriptorFiles:number; readonly cssPropertyDescriptorEvidenceFiles:number; readonly cssPageDescriptorFiles:number; readonly cssPageDescriptorEvidenceFiles:number;
14
14
  readonly projectGraphConflicts: number; readonly projectGraphDeltaEvidenceIncluded: number; readonly projectGraphEvidenceIncluded: number; readonly outputProjectGraphConflicts:number; readonly projectGraphCssModuleUseSiteConflicts:number; readonly projectGraphDeltaConflicts: number; readonly projectGraphCssModuleUseSiteBlockers:number; readonly projectGraphLimitConflicts: number; readonly projectGraphCssModuleUseSiteGraphs:number; readonly projectGraphCssModuleUseSites:number; readonly projectGraphCssModuleImportBindings:number; readonly projectGraphPublicContractConflicts: number; readonly projectGraphSourceSpanConflicts: number;
15
15
  readonly projectGraphCompilerTypeConflicts: number; readonly projectGraphRuntimeRegionConflicts: number; readonly projectGraphScopeUseDefConflicts: number; readonly projectGraphJsxPropConflicts: number; readonly projectGraphJsxRenderRiskConflicts: number; readonly projectGraphReExportIdentityConflicts: number; readonly projectGraphModuleDeclarationShapeConflicts: number; readonly projectGraphExportAssignmentShapeConflicts: number;
16
16
  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;
@@ -6,6 +6,7 @@ const HtmlCssProjectMergeMissingSignals = Object.freeze({
6
6
  htmlStructuralMerge: 'html-structural-merge-proof-blocked',
7
7
  cssCascadeMerge: 'css-cascade-merge-proof-blocked',
8
8
  cssDependencyGraphEvidence: 'css-dependency-graph-evidence-missing',
9
+ cssRuntimeDescriptorEvidence: 'css-runtime-descriptor-evidence-missing',
9
10
  htmlCssBrowserRuntimeProof: 'html-css-browser-runtime-proof-not-available'
10
11
  });
11
12
 
@@ -18,6 +19,7 @@ function htmlCssProjectMergeMissingEvidenceRoutes(route, signals) {
18
19
  [signals.htmlStructuralMerge]: route('admit-html-structural-merge', 'layout-markup-graph', 'attach-source-bound-html-runtime-proof-or-fix-duplicate-identity'),
19
20
  [signals.cssCascadeMerge]: route('admit-css-cascade-merge', 'layout-style-graph', 'supply-source-bound-css-shape-scoped-cascade-proof'),
20
21
  [signals.cssDependencyGraphEvidence]: route('prove-css-dependency-graph', 'layout-style-graph', 'supply-css-custom-property-animation-font-and-asset-dependency-graph'),
22
+ [signals.cssRuntimeDescriptorEvidence]: route('prove-css-runtime-descriptor-evidence', 'layout-style-descriptors', 'supply-property-page-typed-descriptor-source-evidence'),
21
23
  [signals.htmlCssBrowserRuntimeProof]: route('prove-html-css-browser-runtime', 'browser-proof', 'attach-source-bound-html-css-browser-runtime-proof-bundle')
22
24
  };
23
25
  }
@@ -31,6 +33,7 @@ function htmlCssProjectMergeAdmissionMatrixRows(matrixRow, signals) {
31
33
  matrixRow('html-structural-merge-admission', 'partial', ['html-structural-merge'], [signals.htmlStructuralMerge]),
32
34
  matrixRow('css-cascade-merge-admission', 'partial', ['css-cascade-merge'], [signals.cssCascadeMerge]),
33
35
  matrixRow('css-dependency-graph-evidence', 'bounded-evidence', ['css-dependency-graph'], [signals.cssDependencyGraphEvidence]),
36
+ matrixRow('css-runtime-descriptor-evidence', 'bounded-evidence', ['css-runtime-descriptor-evidence'], [signals.cssRuntimeDescriptorEvidence]),
34
37
  matrixRow('html-css-browser-runtime-proof', 'bounded-evidence', ['browser-runtime-proof'], [signals.htmlCssBrowserRuntimeProof])
35
38
  ];
36
39
  }
@@ -43,7 +46,8 @@ function htmlCssProjectMergeMissingEvidenceItems(summary, signals, missingEviden
43
46
  if (summary.cssFiles && (summary.cssSelectorTargetEvidenceFiles !== summary.cssFiles || summary.cssSelectorTargetConflictFiles)) items.push(missingEvidenceItem({ code: signals.cssSelectorTargetEvidence, scope: 'layout-style-targets', kind: 'css-selector-target-evidence', proofLevel: 'css-selector-target-evidence', action: 'review', summary: `CSS project merge has selector-target evidence for ${summary.cssSelectorTargetEvidenceFiles}/${summary.cssFiles} file(s) with ${summary.cssSelectorTargetConflictFiles} selector target conflict(s); require selector target graph and proven rebase before target-moving merges.` }));
44
47
  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); for runtime-boundary changes attach htmlRuntimeBoundaryProofsByPath[sourcePath] with exact base/worker/head/output binding, and for duplicate identity keys make explicit HTML identities unique before admission.`, suggestedInput: { htmlRuntimeBoundaryProofsByPath: true, htmlUniqueExplicitIdentityKeys: true } }));
45
48
  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), including ${summary.cssDuplicateCascadeKeyBlockedFiles ?? 0} duplicate cascade-key blocker(s), ${summary.cssShorthandExpansionBlockedFiles ?? 0} shorthand expansion blocker(s), ${summary.cssScopedCascadeBlockedFiles} scoped cascade proof block(s), and ${summary.cssScopedCascadeShapeEvidenceFiles ?? 0} shape-keyed scoped proof file(s); supply parser/cascade/scope evidence, require deterministic shorthand expansion evidence for changed box shorthands, require ordered cascade occurrence evidence for duplicate same-property declarations, require source-bound scoped cascade proofs with exact scope shape keys and base/worker/head/output hashes for changed declarations under @media/@supports/@container/@layer/@scope or nested scopes, and keep browser claims false until runtime proof passes.` }));
46
- if (summary.cssDependencySurfaceFiles && (summary.cssDependencyGraphEvidenceFiles !== summary.cssDependencySurfaceFiles || summary.cssDependencyGraphMissingProofFiles || summary.cssDependencyGraphBlockedFiles)) items.push(missingEvidenceItem({ code: signals.cssDependencyGraphEvidence, scope: 'layout-style-graph', kind: 'css-dependency-graph-evidence', proofLevel: 'css-dependency-graph', action: 'review', summary: `CSS project merge has dependency graph evidence for ${summary.cssDependencyGraphEvidenceFiles}/${summary.cssDependencySurfaceFiles} dependency-surface file(s), ${summary.cssDependencyGraphMissingProofFiles} missing dependency graph proof(s), and ${summary.cssDependencyGraphBlockedFiles} dependency blocker(s); require custom property, var() fallback, @keyframes/animation-name, @font-face, and url() asset graph evidence before cascade/browser equivalence claims.`, suggestedInput: { cssDependencyGraphEvidence: true } }));
49
+ if (summary.cssDependencySurfaceFiles && (summary.cssDependencyGraphEvidenceFiles !== summary.cssDependencySurfaceFiles || summary.cssDependencyGraphMissingProofFiles || summary.cssDependencyGraphBlockedFiles)) items.push(missingEvidenceItem({ code: signals.cssDependencyGraphEvidence, scope: 'layout-style-graph', kind: 'css-dependency-graph-evidence', proofLevel: 'css-dependency-graph', action: 'review', summary: `CSS project merge has dependency graph evidence for ${summary.cssDependencyGraphEvidenceFiles}/${summary.cssDependencySurfaceFiles} dependency-surface file(s), ${summary.cssDependencyGraphMissingProofFiles} missing dependency graph proof(s), and ${summary.cssDependencyGraphBlockedFiles} dependency blocker(s); require custom property, var() fallback, @keyframes/animation-name, @font-face, @property, @page, and url() asset graph evidence before cascade/browser equivalence claims.`, suggestedInput: { cssDependencyGraphEvidence: true } }));
50
+ if (summary.cssRuntimeDescriptorFiles && (summary.cssRuntimeDescriptorEvidenceFiles !== summary.cssRuntimeDescriptorFiles || summary.cssRuntimeDescriptorBlockedFiles)) items.push(missingEvidenceItem({ code: signals.cssRuntimeDescriptorEvidence, scope: 'layout-style-descriptors', kind: 'css-runtime-descriptor-evidence', proofLevel: 'css-runtime-descriptor-evidence', action: 'review', summary: `CSS project merge has typed descriptor evidence for ${summary.cssRuntimeDescriptorEvidenceFiles}/${summary.cssRuntimeDescriptorFiles} runtime descriptor file(s), including ${summary.cssPropertyDescriptorEvidenceFiles}/${summary.cssPropertyDescriptorFiles} @property file(s) and ${summary.cssPageDescriptorEvidenceFiles}/${summary.cssPageDescriptorFiles} @page file(s); require parser-backed descriptor records, descriptor source spans, typed @property syntax/inherits/initial-value evidence, @page descriptor records, and stable at-rule shape keys before descriptor admission. Browser equivalence still requires separate cssCascadeRuntimeProofs.`, suggestedInput: { cssRuntimeDescriptorEvidence: true } }));
47
51
  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; attach htmlRuntimeBoundaryProofsByPath for HTML runtime boundaries or cssCascadeRuntimeProofs for CSS runtime at-rules such as @keyframes, @property, and @page, and keep browser equivalence claims false until proof passes.', suggestedInput: { browserRuntimeProof: true } }));
48
52
  return items;
49
53
  }
@@ -56,6 +60,7 @@ function htmlCssProjectMergeMatrixProofStatus(level, summary) {
56
60
  if (level === 'html-structural-merge') return summary.htmlFiles ? (summary.htmlBlockedFiles ? 'failed' : summary.htmlMergedFiles ? 'passed' : 'missing') : 'absent';
57
61
  if (level === 'css-cascade-merge') return summary.cssFiles ? (summary.cssBlockedFiles ? 'failed' : summary.cssMergedFiles ? 'passed' : 'missing') : 'absent';
58
62
  if (level === 'css-dependency-graph') return summary.cssDependencySurfaceFiles ? (summary.cssDependencyGraphBlockedFiles ? 'failed' : summary.cssDependencyGraphEvidenceFiles === summary.cssDependencySurfaceFiles ? 'passed' : 'missing') : 'absent';
63
+ if (level === 'css-runtime-descriptor-evidence') return summary.cssRuntimeDescriptorFiles ? (summary.cssRuntimeDescriptorBlockedFiles ? 'failed' : summary.cssRuntimeDescriptorEvidenceFiles === summary.cssRuntimeDescriptorFiles ? 'passed' : 'missing') : 'absent';
59
64
  if (level === 'browser-runtime-proof') return summary.htmlCssFiles ? (summary.htmlCssBrowserRuntimeProofs ? 'passed' : 'missing') : 'absent';
60
65
  return undefined;
61
66
  }
@@ -16,6 +16,9 @@ function htmlCssProjectSummary(files) {
16
16
  cssDuplicateCascadeKeyBlockedFiles: cssFiles.filter(hasCssDuplicateCascadeKeyConflict).length,
17
17
  cssShorthandExpansionEvidenceFiles: cssFiles.filter(hasCssShorthandExpansionEvidence).length, cssDeterministicShorthandExpansionFiles: cssFiles.filter(hasCssDeterministicShorthandExpansionEvidence).length, cssShorthandExpansionBlockedFiles: cssFiles.filter(hasCssShorthandExpansionBlockedConflict).length,
18
18
  cssDependencySurfaceFiles: cssFiles.filter(hasCssDependencySurface).length, cssDependencyGraphEvidenceFiles: cssFiles.filter((file) => hasCssDependencySurface(file) && hasCssDependencyGraphEvidence(file)).length, cssDependencyGraphMissingProofFiles: cssFiles.filter(hasCssDependencyGraphMissingProof).length, cssDependencyGraphBlockedFiles: cssFiles.filter(hasCssDependencyGraphBlockedConflict).length,
19
+ cssRuntimeDescriptorFiles: cssFiles.filter(hasCssRuntimeDescriptorSurface).length, cssRuntimeDescriptorEvidenceFiles: cssFiles.filter((file) => hasCssRuntimeDescriptorSurface(file) && hasCssRuntimeDescriptorEvidence(file)).length, cssRuntimeDescriptorBlockedFiles: cssFiles.filter(hasCssRuntimeDescriptorBlockedConflict).length,
20
+ cssPropertyDescriptorFiles: cssFiles.filter(hasCssPropertyDescriptorSurface).length, cssPropertyDescriptorEvidenceFiles: cssFiles.filter((file) => hasCssPropertyDescriptorSurface(file) && hasCssPropertyDescriptorEvidence(file)).length,
21
+ cssPageDescriptorFiles: cssFiles.filter(hasCssPageDescriptorSurface).length, cssPageDescriptorEvidenceFiles: cssFiles.filter((file) => hasCssPageDescriptorSurface(file) && hasCssPageDescriptorEvidence(file)).length,
19
22
  htmlCssBrowserRuntimeProofs: htmlCssFiles.filter(hasBrowserRuntimeProof).length
20
23
  };
21
24
  }
@@ -128,7 +131,7 @@ function hasCssDependencyGraphEvidence(file) {
128
131
  }
129
132
  function hasCssDependencyGraphMissingProof(file) { return hasCssDependencySurface(file) && !hasCssDependencyGraphEvidence(file); }
130
133
  function hasCssDependencyEvidenceSurface(file) {
131
- return cssDependencyEvidenceRecords(file).some((evidence) => evidence.hasDependencySurface === true || (evidence.dependencySurfaceCount ?? 0) > 0 || (evidence.customPropertyDefinitions ?? 0) > 0 || (evidence.customPropertyReferences ?? 0) > 0 || (evidence.varReferences ?? 0) > 0 || (evidence.varFallbackReferences ?? 0) > 0 || (evidence.animationNameLinks ?? 0) > 0 || (evidence.keyframeLinks ?? 0) > 0 || (evidence.fontFaceLinks ?? 0) > 0 || (evidence.urlAssetReferences ?? 0) > 0);
134
+ return cssDependencyEvidenceRecords(file).some((evidence) => evidence.hasDependencySurface === true || (evidence.dependencySurfaceCount ?? 0) > 0 || (evidence.customPropertyDefinitions ?? 0) > 0 || (evidence.customPropertyReferences ?? 0) > 0 || (evidence.varReferences ?? 0) > 0 || (evidence.varFallbackReferences ?? 0) > 0 || (evidence.animationNameLinks ?? 0) > 0 || (evidence.keyframeLinks ?? 0) > 0 || (evidence.fontFaceLinks ?? 0) > 0 || (evidence.urlAssetReferences ?? 0) > 0 || cssDescriptorEvidenceCount(evidence) > 0);
132
135
  }
133
136
  function hasCssDependencyTextSurface(file) {
134
137
  const sourceText = cssDependencySourceText(file);
@@ -140,6 +143,26 @@ function hasCssDependencyConflictSurface(file) {
140
143
  function hasCssDependencyGraphBlockedConflict(file) {
141
144
  return cssFileConflicts(file).some((conflict) => isCssDependencyConflict(conflict) || CssDependencyMissingProofReasonCodes.has(conflict?.details?.reasonCode));
142
145
  }
146
+ function hasCssRuntimeDescriptorSurface(file) { return hasCssPropertyDescriptorSurface(file) || hasCssPageDescriptorSurface(file); }
147
+ function hasCssRuntimeDescriptorEvidence(file) { return hasCssPropertyDescriptorEvidence(file) || hasCssPageDescriptorEvidence(file); }
148
+ function hasCssPropertyDescriptorSurface(file) {
149
+ return cssDependencyEvidenceRecords(file).some((evidence) => cssPropertyDescriptorEvidenceCount(evidence) > 0) || /@property\b/i.test(cssDependencySourceText(file));
150
+ }
151
+ function hasCssPageDescriptorSurface(file) {
152
+ return cssDependencyEvidenceRecords(file).some((evidence) => cssPageDescriptorEvidenceCount(evidence) > 0) || /@page\b/i.test(cssDependencySourceText(file));
153
+ }
154
+ function hasCssPropertyDescriptorEvidence(file) {
155
+ return cssDependencyEvidenceRecords(file).some((evidence) => (evidence.propertyRegistrations ?? 0) > 0 && (evidence.propertyRegistrationDescriptors ?? 0) > 0);
156
+ }
157
+ function hasCssPageDescriptorEvidence(file) {
158
+ return cssDependencyEvidenceRecords(file).some((evidence) => cssPageDescriptorEvidenceCount(evidence) > 0);
159
+ }
160
+ function hasCssRuntimeDescriptorBlockedConflict(file) {
161
+ return cssFileConflicts(file).some((conflict) => CssRuntimeDescriptorReasonCodes.has(conflict?.details?.reasonCode) || CssRuntimeDescriptorReasonCodes.has(conflict?.details?.proofGap?.code));
162
+ }
163
+ function cssDescriptorEvidenceCount(evidence) { return cssPropertyDescriptorEvidenceCount(evidence) + cssPageDescriptorEvidenceCount(evidence); }
164
+ function cssPropertyDescriptorEvidenceCount(evidence) { return (evidence.propertyRegistrations ?? 0) + (evidence.propertyRegistrationDescriptors ?? 0); }
165
+ function cssPageDescriptorEvidenceCount(evidence) { return (evidence.pageDescriptors ?? 0) + (evidence.pageMarginDescriptors ?? 0); }
143
166
  function cssDependencyEvidenceRecords(file) {
144
167
  const result = file?.result ?? {};
145
168
  return [result.dependencyEvidence, result.cssDependencyEvidence, result.dependencyGraphEvidence, result.cssDependencyGraphEvidence, result.parserEvidence?.dependencyEvidence, result.parserEvidence?.cssDependencyEvidence, result.parserEvidence?.dependencyGraphEvidence, result.parserEvidence?.cssDependencyGraphEvidence].filter(isPlainObject);
@@ -177,9 +200,10 @@ const ScopedCascadeMissingProofReasonCodes = new Set(['css-scoped-cascade-equiva
177
200
  const HtmlRuntimeBoundaryReasonCodes = new Set(['script-runtime-boundary', 'style-runtime-boundary', 'template-runtime-boundary', 'slot-runtime-boundary', 'custom-element-runtime-boundary', 'event-handler-runtime-boundary', 'inline-style-runtime-boundary', 'iframe-runtime-boundary', 'iframe-srcdoc-runtime-boundary', 'form-runtime-boundary', 'form-submitter-runtime-boundary', 'form-control-runtime-boundary', 'document-base-runtime-boundary', 'document-metadata-runtime-boundary', 'resource-loading-runtime-boundary']);
178
201
  const HtmlFrameworkBoundaryReasonCodes = new Set(['framework-directive-boundary', 'custom-element-runtime-boundary']);
179
202
  const CssDependencyMissingProofReasonCodes = new Set(['css-dependency-graph-evidence-missing', 'css-custom-property-dependency-graph-unproved', 'css-var-fallback-dependency-graph-unproved', 'css-animation-name-keyframes-graph-unproved', 'css-font-face-dependency-graph-unproved', 'css-url-asset-dependency-graph-unproved']);
180
- const CssDependencyAtRuleNames = new Set(['keyframes', 'font-face']);
181
- const CssDependencyCodeFragments = ['custom-property', 'var-fallback', 'variable-dependency', 'dependency-graph', 'keyframes', 'animation-name', 'font-face', 'url-asset', 'asset-dependency'];
182
- const CssDependencySurfacePatterns = [/(^|[;{\s])--[-_A-Za-z][\w-]*\s*:/, /\bvar\s*\(/i, /@(?:-[\w]+-)?keyframes\b/i, /(^|[;{\s])animation(?:-name)?\s*:/i, /@font-face\b/i, /\burl\s*\(/i];
203
+ const CssDependencyAtRuleNames = new Set(['keyframes', 'font-face', 'property', 'page']);
204
+ const CssDependencyCodeFragments = ['custom-property', 'var-fallback', 'variable-dependency', 'dependency-graph', 'keyframes', 'animation-name', 'font-face', 'url-asset', 'asset-dependency', 'property', 'page'];
205
+ const CssRuntimeDescriptorReasonCodes = new Set(['css-runtime-descriptor-evidence-missing']);
206
+ const CssDependencySurfacePatterns = [/(^|[;{\s])--[-_A-Za-z][\w-]*\s*:/, /\bvar\s*\(/i, /@(?:-[\w]+-)?keyframes\b/i, /(^|[;{\s])animation(?:-name)?\s*:/i, /@font-face\b/i, /@property\b/i, /@page\b/i, /\burl\s*\(/i];
183
207
  function isPlainObject(value) { return Boolean(value && typeof value === 'object' && !Array.isArray(value)); }
184
208
 
185
209
  export { htmlCssProjectSummary };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshift-labs/frontier-lang-compiler",
3
- "version": "0.2.185",
3
+ "version": "0.2.186",
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,7 @@
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.23",
66
+ "@shapeshift-labs/frontier-lang-css": "^0.1.24",
67
67
  "@shapeshift-labs/frontier-lang-html": "^0.1.14",
68
68
  "@shapeshift-labs/frontier-lang-javascript": "0.2.9",
69
69
  "@shapeshift-labs/frontier-lang-kernel": "0.3.12",