@usefragments/core 1.5.0 → 1.5.2
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/{chunk-HXGE3O2F.js → chunk-BAHCOAVG.js} +133 -7
- package/dist/chunk-BAHCOAVG.js.map +1 -0
- package/dist/{chunk-57QDBEHQ.js → chunk-ZHS52OT4.js} +3 -9
- package/dist/chunk-ZHS52OT4.js.map +1 -0
- package/dist/codes/index.d.ts +2 -2
- package/dist/codes/index.js +2 -2
- package/dist/compiled-types/index.d.ts +1 -1
- package/dist/generate/index.d.ts +1 -1
- package/dist/{governance-BLsyk56o.d.ts → governance-pKrfh517.d.ts} +264 -4
- package/dist/{index-h_yWj15D.d.ts → index-DbkPE46t.d.ts} +40 -0
- package/dist/index.d.ts +472 -28
- package/dist/index.js +561 -39
- package/dist/index.js.map +1 -1
- package/dist/react-types.d.ts +1 -1
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/index.js +1 -1
- package/dist/test-utils.d.ts +1 -1
- package/package.json +1 -1
- package/src/agent-format.test.ts +1 -0
- package/src/canonical-bridge.ts +46 -0
- package/src/canonical-direction.ts +118 -0
- package/src/codes/__tests__/codes.test.ts +1 -1
- package/src/codes/codes.ts +29 -0
- package/src/config.ts +20 -0
- package/src/contract/preimage.test.ts +40 -0
- package/src/contract/preimage.ts +20 -0
- package/src/effective-governance-inputs.test.ts +52 -0
- package/src/effective-governance-inputs.ts +106 -0
- package/src/facts/builders.ts +25 -1
- package/src/facts/compile.ts +20 -2
- package/src/facts/fact-index.ts +12 -1
- package/src/facts/facts.test.ts +14 -18
- package/src/facts/types.ts +25 -6
- package/src/governance-integrity.test.ts +127 -0
- package/src/governance-integrity.ts +326 -4
- package/src/governance.test.ts +87 -1
- package/src/governance.ts +121 -0
- package/src/index.ts +34 -5
- package/src/rules/__tests__/fix-emission-invariant.test.ts +35 -4
- package/src/rules/components-prefer-library.test.ts +103 -0
- package/src/rules/components-prefer-library.ts +30 -4
- package/src/rules/fix-availability.ts +1 -0
- package/src/rules/index.ts +7 -0
- package/src/rules/jsx-preferred-import-path.ts +45 -9
- package/src/rules/rules.test.ts +202 -6
- package/src/rules/spacing-resolution.ts +2 -2
- package/src/rules/styles-no-raw-color.test.ts +6 -1
- package/src/rules/styles-no-raw-color.ts +3 -2
- package/src/rules/styles-no-raw-dimensions.ts +5 -7
- package/src/rules/styles-no-raw-spacing.test.ts +48 -0
- package/src/rules/styles-no-raw-spacing.ts +10 -7
- package/src/rules/styles-no-raw-typography.ts +7 -4
- package/src/rules/taxonomy.test.ts +3 -0
- package/src/rules/tiers.ts +2 -0
- package/src/rules/token-candidates.ts +36 -0
- package/src/rules/tokens-require-dual-fallback.ts +2 -1
- package/src/rules/tokens-upstream-drift.test.ts +111 -0
- package/src/rules/tokens-upstream-drift.ts +57 -0
- package/src/rules/utils.ts +22 -14
- package/src/schema.ts +13 -0
- package/src/schemas/index.ts +5 -8
- package/src/token-types.ts +71 -1
- package/src/types.ts +27 -3
- package/dist/chunk-57QDBEHQ.js.map +0 -1
- package/dist/chunk-HXGE3O2F.js.map +0 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
FactIndex,
|
|
4
|
+
makeStyleDeclarationFact,
|
|
5
|
+
makeStyleRawColorForbiddenFact,
|
|
6
|
+
makeTokenDefinitionFact,
|
|
7
|
+
} from "../facts/index.js";
|
|
8
|
+
import { ruleStylesNoRawColor } from "./styles-no-raw-color.js";
|
|
9
|
+
import { ruleTokensUpstreamDrift } from "./tokens-upstream-drift.js";
|
|
10
|
+
|
|
11
|
+
function token(input: {
|
|
12
|
+
name: string;
|
|
13
|
+
value: string;
|
|
14
|
+
role: "local" | "upstream";
|
|
15
|
+
file: string;
|
|
16
|
+
upstreamName?: string;
|
|
17
|
+
}) {
|
|
18
|
+
return makeTokenDefinitionFact({
|
|
19
|
+
name: input.name,
|
|
20
|
+
value: input.value,
|
|
21
|
+
category: "color",
|
|
22
|
+
role: input.role,
|
|
23
|
+
authority: input.role === "local" ? "authored" : "declared-package",
|
|
24
|
+
sourceIdentity: input.file,
|
|
25
|
+
upstreamName: input.upstreamName,
|
|
26
|
+
location: { file: input.file, line: 1, column: 1 },
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe("tokens/upstream-drift", () => {
|
|
31
|
+
it("retains same-name authorities and emits one stable mismatch", () => {
|
|
32
|
+
const ix = new FactIndex();
|
|
33
|
+
const local = token({ name: "--brand", value: "#111111", role: "local", file: "tokens.css" });
|
|
34
|
+
const upstream = token({
|
|
35
|
+
name: "--brand",
|
|
36
|
+
value: "#222222",
|
|
37
|
+
role: "upstream",
|
|
38
|
+
file: "@fixture/ui/fragments.json",
|
|
39
|
+
});
|
|
40
|
+
ix.addMany([local, upstream]);
|
|
41
|
+
|
|
42
|
+
expect(ix.tokens.list()).toHaveLength(2);
|
|
43
|
+
expect(ruleTokensUpstreamDrift(ix)).toEqual([
|
|
44
|
+
expect.objectContaining({
|
|
45
|
+
code: "FUI2017",
|
|
46
|
+
ruleId: "tokens/upstream-drift",
|
|
47
|
+
location: expect.objectContaining({ file: "tokens.css" }),
|
|
48
|
+
}),
|
|
49
|
+
]);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("accepts matching values and compares differing names only through an authored alias", () => {
|
|
53
|
+
const ix = new FactIndex();
|
|
54
|
+
ix.addMany([
|
|
55
|
+
token({
|
|
56
|
+
name: "--local-brand",
|
|
57
|
+
value: "#222222",
|
|
58
|
+
role: "local",
|
|
59
|
+
file: "tokens.css",
|
|
60
|
+
upstreamName: "--upstream-brand",
|
|
61
|
+
}),
|
|
62
|
+
token({
|
|
63
|
+
name: "--upstream-brand",
|
|
64
|
+
value: "#222222",
|
|
65
|
+
role: "upstream",
|
|
66
|
+
file: "@fixture/ui/fragments.json",
|
|
67
|
+
}),
|
|
68
|
+
]);
|
|
69
|
+
|
|
70
|
+
expect(ruleTokensUpstreamDrift(ix)).toEqual([]);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("does not index upstream tokens as local raw-value replacement candidates", () => {
|
|
74
|
+
const ix = new FactIndex();
|
|
75
|
+
ix.add(
|
|
76
|
+
token({
|
|
77
|
+
name: "--upstream-brand",
|
|
78
|
+
value: "#222222",
|
|
79
|
+
role: "upstream",
|
|
80
|
+
file: "@fixture/ui/fragments.json",
|
|
81
|
+
})
|
|
82
|
+
);
|
|
83
|
+
expect(ix.tokens.definitionForSymbol("--upstream-brand")).toBeUndefined();
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("does not recommend a known-drift local token for an upstream-correct raw value", () => {
|
|
87
|
+
const ix = new FactIndex();
|
|
88
|
+
ix.addMany([
|
|
89
|
+
makeStyleRawColorForbiddenFact({ except: [], prefer: "token", severity: "error" }),
|
|
90
|
+
makeStyleDeclarationFact({
|
|
91
|
+
file: "Card.css",
|
|
92
|
+
selector: ".card",
|
|
93
|
+
declarationPath: "0",
|
|
94
|
+
property: "color",
|
|
95
|
+
value: "#222222",
|
|
96
|
+
location: { file: "Card.css", line: 1, column: 1 },
|
|
97
|
+
}),
|
|
98
|
+
token({ name: "--brand", value: "#111111", role: "local", file: "tokens.css" }),
|
|
99
|
+
token({
|
|
100
|
+
name: "--brand",
|
|
101
|
+
value: "#222222",
|
|
102
|
+
role: "upstream",
|
|
103
|
+
file: "@fixture/ui/fragments.json",
|
|
104
|
+
}),
|
|
105
|
+
]);
|
|
106
|
+
|
|
107
|
+
const [finding] = ruleStylesNoRawColor(ix);
|
|
108
|
+
expect(finding.attributes?.suggestedToken).toBeUndefined();
|
|
109
|
+
expect(finding.fix).toBeUndefined();
|
|
110
|
+
});
|
|
111
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { FactIndex, TokenDefinitionFact } from "../facts/index.js";
|
|
2
|
+
import { makeFinding } from "./finding.js";
|
|
3
|
+
import { normalizedTokenValue } from "./token-candidates.js";
|
|
4
|
+
import type { Finding } from "./types.js";
|
|
5
|
+
|
|
6
|
+
export const RULE_ID = "tokens/upstream-drift";
|
|
7
|
+
export const RULE_VERSION = "1";
|
|
8
|
+
|
|
9
|
+
/** Compare only authored same-name or explicit-alias local/upstream pairs. */
|
|
10
|
+
export function ruleTokensUpstreamDrift(ix: FactIndex): Finding[] {
|
|
11
|
+
const local = ix.tokens.list().filter((token) => token.role !== "upstream");
|
|
12
|
+
const upstream = ix.tokens.list().filter((token) => token.role === "upstream");
|
|
13
|
+
const upstreamByName = new Map<string, TokenDefinitionFact[]>();
|
|
14
|
+
for (const token of upstream) {
|
|
15
|
+
const matches = upstreamByName.get(token.name) ?? [];
|
|
16
|
+
matches.push(token);
|
|
17
|
+
upstreamByName.set(token.name, matches);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const findings: Finding[] = [];
|
|
21
|
+
for (const token of local) {
|
|
22
|
+
const upstreamName = token.upstreamName ?? token.name;
|
|
23
|
+
const matches = (upstreamByName.get(upstreamName) ?? []).sort((a, b) =>
|
|
24
|
+
(a.sourceIdentity ?? "").localeCompare(b.sourceIdentity ?? "")
|
|
25
|
+
);
|
|
26
|
+
if (matches.length !== 1) continue;
|
|
27
|
+
const expected = matches[0];
|
|
28
|
+
if (normalizedTokenValue(token) === normalizedTokenValue(expected)) continue;
|
|
29
|
+
const location = token.location ?? {
|
|
30
|
+
file: token.sourceIdentity ?? "tokens",
|
|
31
|
+
line: 1,
|
|
32
|
+
column: 1,
|
|
33
|
+
};
|
|
34
|
+
findings.push(
|
|
35
|
+
makeFinding({
|
|
36
|
+
ruleId: RULE_ID,
|
|
37
|
+
ruleVersion: RULE_VERSION,
|
|
38
|
+
severity: "warn",
|
|
39
|
+
message: `Local token ${token.name} is ${token.value}, but upstream ${upstreamName} is ${expected.value}.`,
|
|
40
|
+
location,
|
|
41
|
+
evidence: ix.evidence([token.id, expected.id]),
|
|
42
|
+
fingerprintIdentity: {
|
|
43
|
+
local: token.name,
|
|
44
|
+
upstream: upstreamName,
|
|
45
|
+
localSource: token.sourceIdentity,
|
|
46
|
+
upstreamSource: expected.sourceIdentity,
|
|
47
|
+
},
|
|
48
|
+
attributes: {
|
|
49
|
+
local: { name: token.name, value: token.value, location: token.location },
|
|
50
|
+
upstream: { name: expected.name, value: expected.value, location: expected.location },
|
|
51
|
+
autoFix: false,
|
|
52
|
+
},
|
|
53
|
+
})
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
return findings;
|
|
57
|
+
}
|
package/src/rules/utils.ts
CHANGED
|
@@ -622,29 +622,37 @@ export function isExemptColor(value: string, except: readonly string[]): boolean
|
|
|
622
622
|
}
|
|
623
623
|
|
|
624
624
|
/**
|
|
625
|
-
* Render a token
|
|
626
|
-
*
|
|
627
|
-
*
|
|
628
|
-
* everywhere.
|
|
625
|
+
* Render a token using only its proven authored reference form. Non-applicable
|
|
626
|
+
* formats retain their source spelling for an advisory suggestion; they never
|
|
627
|
+
* get rewritten into an invented CSS custom property.
|
|
629
628
|
*/
|
|
630
|
-
export function tokenReference(
|
|
631
|
-
if (
|
|
632
|
-
|
|
633
|
-
|
|
629
|
+
export function tokenReference(token: TokenDefinitionFact): string {
|
|
630
|
+
if (token.referenceFormat === "css-var") {
|
|
631
|
+
const cssVarName = [token.name, ...(token.sourceNames ?? [])].find((name) =>
|
|
632
|
+
name.startsWith("--")
|
|
633
|
+
);
|
|
634
|
+
return cssVarName ? `var(${cssVarName})` : token.name;
|
|
635
|
+
}
|
|
636
|
+
if (token.referenceFormat === "scss-var") {
|
|
637
|
+
return (
|
|
638
|
+
[token.name, ...(token.sourceNames ?? [])].find((name) => name.startsWith("$")) ??
|
|
639
|
+
(token.name.startsWith("--") ? `$${token.name.slice(2)}` : token.name)
|
|
640
|
+
);
|
|
641
|
+
}
|
|
642
|
+
return token.sourceNames?.[0] ?? token.name;
|
|
634
643
|
}
|
|
635
644
|
|
|
636
645
|
/**
|
|
637
646
|
* Whether a token reference can be *applied* automatically (written verbatim
|
|
638
647
|
* and still compile). A `css-var` / `scss-var` token resolves on its own; a
|
|
639
648
|
* `scss-map` member (synthetic `$colors-primary` minted from a Sass map) or a
|
|
640
|
-
* `dtcg` JSON token (no CSS custom property emitted by default)
|
|
641
|
-
* those fixes are surfaced as suggestions rather than
|
|
642
|
-
* Tokens without a known format
|
|
649
|
+
* `dtcg` JSON token (no CSS custom property emitted by default), or a JS member
|
|
650
|
+
* path does not, so those fixes are surfaced as suggestions rather than
|
|
651
|
+
* deterministic rewrites. Tokens without a known format fail closed: unknown
|
|
652
|
+
* provenance is not proof that a replacement compiles.
|
|
643
653
|
*/
|
|
644
654
|
export function isApplicableTokenReference(
|
|
645
655
|
referenceFormat: TokenDefinitionFact["referenceFormat"]
|
|
646
656
|
): boolean {
|
|
647
|
-
return
|
|
648
|
-
referenceFormat === undefined || referenceFormat === "css-var" || referenceFormat === "scss-var"
|
|
649
|
-
);
|
|
657
|
+
return referenceFormat === "css-var" || referenceFormat === "scss-var";
|
|
650
658
|
}
|
package/src/schema.ts
CHANGED
|
@@ -248,6 +248,19 @@ const tokenConfigSchema = z
|
|
|
248
248
|
// vocabulary seeds the known-token set (#7c). A packages-only tokens block
|
|
249
249
|
// is valid — see the superRefine below.
|
|
250
250
|
packages: z.array(z.string().min(1)).optional(),
|
|
251
|
+
aliases: z.record(z.string().min(1)).optional(),
|
|
252
|
+
upstream: z
|
|
253
|
+
.array(
|
|
254
|
+
z.object({
|
|
255
|
+
packageName: z.string().min(1),
|
|
256
|
+
version: z.string().min(1).optional(),
|
|
257
|
+
digest: z
|
|
258
|
+
.string()
|
|
259
|
+
.regex(/^[a-f0-9]{64}$/u)
|
|
260
|
+
.optional(),
|
|
261
|
+
})
|
|
262
|
+
)
|
|
263
|
+
.optional(),
|
|
251
264
|
exclude: z.array(repoRelativePathSchema).optional(),
|
|
252
265
|
themeSelectors: z.record(z.string()).optional(),
|
|
253
266
|
enabled: z.boolean().optional(),
|
package/src/schemas/index.ts
CHANGED
|
@@ -254,18 +254,15 @@ const agentRunProvenanceSchema = z.object({
|
|
|
254
254
|
fcid: z.string().min(1),
|
|
255
255
|
baselineId: z.string().min(1).optional(),
|
|
256
256
|
scope: z.object({
|
|
257
|
-
method: z.enum([
|
|
258
|
-
"three-dot",
|
|
259
|
-
"tree-diff",
|
|
260
|
-
"status",
|
|
261
|
-
"fallback-full",
|
|
262
|
-
"explicit",
|
|
263
|
-
"full",
|
|
264
|
-
]),
|
|
257
|
+
method: z.enum(["three-dot", "tree-diff", "status", "fallback-full", "explicit", "full"]),
|
|
265
258
|
gitOk: z.boolean(),
|
|
266
259
|
}),
|
|
267
260
|
engineVersion: z.string().min(1),
|
|
268
261
|
scopeHash: z.string().regex(/^[a-f0-9]{64}$/),
|
|
262
|
+
inputsHash: z
|
|
263
|
+
.string()
|
|
264
|
+
.regex(/^[a-f0-9]{64}$/)
|
|
265
|
+
.optional(),
|
|
269
266
|
inputFilesHash: z.string().regex(/^[a-f0-9]{64}$/),
|
|
270
267
|
});
|
|
271
268
|
|
package/src/token-types.ts
CHANGED
|
@@ -25,6 +25,63 @@ export type TokenCategory =
|
|
|
25
25
|
| "z-index"
|
|
26
26
|
| "other";
|
|
27
27
|
|
|
28
|
+
/** Stable, renderer-independent token catalog contract. */
|
|
29
|
+
export interface TokenCatalog {
|
|
30
|
+
schemaVersion: "token-catalog:v1";
|
|
31
|
+
configuredSources: string[];
|
|
32
|
+
parsedSources: string[];
|
|
33
|
+
definitions: TokenCatalogDefinition[];
|
|
34
|
+
diagnostics: TokenCatalogDiagnostic[];
|
|
35
|
+
references: TokenCatalogReference[];
|
|
36
|
+
sourceStates?: TokenCatalogSourceState[];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface TokenCatalogSourceState {
|
|
40
|
+
source: string;
|
|
41
|
+
role: "local" | "upstream";
|
|
42
|
+
state:
|
|
43
|
+
| "verified"
|
|
44
|
+
| "version_mismatch"
|
|
45
|
+
| "digest_mismatch"
|
|
46
|
+
| "source_unavailable"
|
|
47
|
+
| "cache_unverified";
|
|
48
|
+
installedVersion?: string;
|
|
49
|
+
contentDigest?: string;
|
|
50
|
+
expectedVersion?: string;
|
|
51
|
+
expectedDigest?: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface TokenCatalogLocation {
|
|
55
|
+
file: string;
|
|
56
|
+
line: number;
|
|
57
|
+
column: number;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface TokenCatalogDefinition {
|
|
61
|
+
/** Authored member path, for example `spacing.smaller` or `theme.palette.primary.main`. */
|
|
62
|
+
name: string;
|
|
63
|
+
value: string;
|
|
64
|
+
category: TokenCategory;
|
|
65
|
+
location: TokenCatalogLocation;
|
|
66
|
+
exportName?: string;
|
|
67
|
+
referenceSyntax: "css-var" | "scss-var" | "scss-map" | "dtcg" | "js-member";
|
|
68
|
+
authority: "authored" | "declared-package";
|
|
69
|
+
role: "local" | "upstream";
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface TokenCatalogDiagnostic {
|
|
73
|
+
code: "tokens/unsupported-static-value" | "tokens/source-unavailable";
|
|
74
|
+
severity: "warning";
|
|
75
|
+
message: string;
|
|
76
|
+
location: TokenCatalogLocation;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface TokenCatalogReference {
|
|
80
|
+
name: string;
|
|
81
|
+
location: TokenCatalogLocation;
|
|
82
|
+
syntax: "css-var" | "scss-var" | "scss-map" | "dtcg" | "js-member";
|
|
83
|
+
}
|
|
84
|
+
|
|
28
85
|
/**
|
|
29
86
|
* A single design token (CSS custom property)
|
|
30
87
|
*/
|
|
@@ -60,7 +117,7 @@ export interface DesignToken {
|
|
|
60
117
|
sourceFile: string;
|
|
61
118
|
|
|
62
119
|
/** Authored reference form, when the parser can prove it from the source. */
|
|
63
|
-
referenceFormat?: "css-var" | "scss-var" | "scss-map" | "dtcg";
|
|
120
|
+
referenceFormat?: "css-var" | "scss-var" | "scss-map" | "dtcg" | "js-member";
|
|
64
121
|
|
|
65
122
|
/** Authored spellings preserved before normalization (for example `$x` and `--x`). */
|
|
66
123
|
sourceNames?: string[];
|
|
@@ -205,6 +262,16 @@ export interface TokenConfig {
|
|
|
205
262
|
*/
|
|
206
263
|
packages?: string[];
|
|
207
264
|
|
|
265
|
+
/** Explicit local-name -> upstream-name mappings for cross-authority drift checks. */
|
|
266
|
+
aliases?: Record<string, string>;
|
|
267
|
+
|
|
268
|
+
/** Deterministic pins for upstream token manifests; local scans never fetch them. */
|
|
269
|
+
upstream?: Array<{
|
|
270
|
+
packageName: string;
|
|
271
|
+
version?: string;
|
|
272
|
+
digest?: string;
|
|
273
|
+
}>;
|
|
274
|
+
|
|
208
275
|
/**
|
|
209
276
|
* Map CSS selectors to theme names
|
|
210
277
|
* @example { ":root": "default", "[data-theme='dark']": "dark" }
|
|
@@ -230,6 +297,9 @@ export interface TokenParseResult {
|
|
|
230
297
|
|
|
231
298
|
/** Parse time in ms */
|
|
232
299
|
parseTimeMs: number;
|
|
300
|
+
|
|
301
|
+
/** The shared catalog used to produce `tokens`. Additive for compatibility. */
|
|
302
|
+
catalog?: TokenCatalog;
|
|
233
303
|
}
|
|
234
304
|
|
|
235
305
|
/**
|
package/src/types.ts
CHANGED
|
@@ -567,7 +567,10 @@ export interface TokenSourceConfig {
|
|
|
567
567
|
/** Repo-root-relative token file or glob. */
|
|
568
568
|
path: RepoRelativePath;
|
|
569
569
|
|
|
570
|
-
/**
|
|
570
|
+
/**
|
|
571
|
+
* Explicit token format, or "auto" to infer from extension/content. Use
|
|
572
|
+
* "auto" for statically analyzable TypeScript and JavaScript token modules.
|
|
573
|
+
*/
|
|
571
574
|
format?: TokenSourceFormat;
|
|
572
575
|
}
|
|
573
576
|
|
|
@@ -578,7 +581,10 @@ export interface TokenConfig {
|
|
|
578
581
|
*/
|
|
579
582
|
include?: string[];
|
|
580
583
|
|
|
581
|
-
/**
|
|
584
|
+
/**
|
|
585
|
+
* Repo-root-relative token source files/globs for monorepos and Cloud setup.
|
|
586
|
+
* Set each source to format "auto" for TypeScript or JavaScript token modules.
|
|
587
|
+
*/
|
|
582
588
|
sources?: TokenSourceConfig[];
|
|
583
589
|
|
|
584
590
|
/**
|
|
@@ -592,6 +598,12 @@ export interface TokenConfig {
|
|
|
592
598
|
*/
|
|
593
599
|
packages?: string[];
|
|
594
600
|
|
|
601
|
+
/** Explicit local-name -> upstream-name mappings for cross-authority drift checks. */
|
|
602
|
+
aliases?: Record<string, string>;
|
|
603
|
+
|
|
604
|
+
/** Deterministic pins for upstream token manifests; local scans never fetch them. */
|
|
605
|
+
upstream?: Array<{ packageName: string; version?: string; digest?: string }>;
|
|
606
|
+
|
|
595
607
|
/**
|
|
596
608
|
* Glob patterns to exclude
|
|
597
609
|
* @example ["node_modules"]
|
|
@@ -607,7 +619,10 @@ export interface TokenConfig {
|
|
|
607
619
|
/** Enable token comparison in style diffs (default: true) */
|
|
608
620
|
enabled?: boolean;
|
|
609
621
|
|
|
610
|
-
/**
|
|
622
|
+
/**
|
|
623
|
+
* Token source format detection. "auto" infers supported formats from the
|
|
624
|
+
* file extension, including statically analyzable TypeScript/JavaScript modules.
|
|
625
|
+
*/
|
|
611
626
|
format?: TokenSourceFormat;
|
|
612
627
|
|
|
613
628
|
/** Vendor namespace for Fragments extensions in DTCG files (default: 'com.usefragments') */
|
|
@@ -807,12 +822,21 @@ export interface FragmentsConfig {
|
|
|
807
822
|
|
|
808
823
|
/** Local component-identity decisions used when Cloud does not own the key. */
|
|
809
824
|
identity?: {
|
|
825
|
+
/** Authored sanctions, rejections, and dismissals keyed by portable component identity. */
|
|
810
826
|
decisions?: Array<{
|
|
811
827
|
/** Portable component key (`file#exportName`). */
|
|
812
828
|
component: string;
|
|
829
|
+
|
|
830
|
+
/** The identity disposition recorded for this component. */
|
|
813
831
|
kind: "sanction" | "reject" | "dismiss";
|
|
832
|
+
|
|
833
|
+
/** Optional canonical target (`moduleSpecifier#exportName`) for sanctions. */
|
|
814
834
|
canonicalTarget?: string;
|
|
835
|
+
|
|
836
|
+
/** Human-readable rationale stored with the decision. */
|
|
815
837
|
reason?: string;
|
|
838
|
+
|
|
839
|
+
/** Stable external identifier used to reconcile an existing decision. */
|
|
816
840
|
decisionId?: string;
|
|
817
841
|
}>;
|
|
818
842
|
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schemas/index.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n legacySeverityLevelSchema,\n severityFromLevel,\n severityLevel,\n severityLevelSchema,\n severitySchema,\n} from \"../severity.js\";\nimport type { LegacySeverityLevel, Severity } from \"../severity.js\";\nimport type { EvidenceGrade } from \"../evidence.js\";\n\nconst evidenceGradeSchema: z.ZodType<EvidenceGrade> = z.enum([\n \"none\",\n \"runtime_advisory\",\n \"provenance_bound\",\n \"source_backed\",\n \"receipt_backed\",\n]);\n\nexport { legacySeverityLevelSchema, severityLevelSchema, severitySchema };\nexport type { LegacySeverityLevel, Severity, SeverityLevel } from \"../severity.js\";\n\nexport const factLocationSchema = z.object({\n file: z.string(),\n line: z.number().int().nonnegative(),\n column: z.number().int().nonnegative(),\n endLine: z.number().int().nonnegative().optional(),\n endColumn: z.number().int().nonnegative().optional(),\n});\nexport type FactLocation = z.infer<typeof factLocationSchema>;\n\nexport const findingReplacePropValueFixSchema = z.object({\n kind: z.literal(\"replacePropValue\"),\n title: z.string(),\n prop: z.string(),\n value: z.unknown(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingReplaceStyleValueFixSchema = z.object({\n kind: z.literal(\"replaceStyleValue\"),\n title: z.string(),\n property: z.string(),\n value: z.string(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingReplaceImportFixSchema = z.object({\n kind: z.literal(\"replaceImport\"),\n title: z.string(),\n from: z.string(),\n to: z.string(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingReplaceComponentFixSchema = z.object({\n kind: z.literal(\"replaceComponent\"),\n title: z.string(),\n from: z.string(),\n to: z.string(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingReplaceClassTokenFixSchema = z.object({\n kind: z.literal(\"replaceClassToken\"),\n title: z.string(),\n from: z.string(),\n to: z.string().nullable(),\n utility: z.string(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingFixSchema = z.discriminatedUnion(\"kind\", [\n findingReplacePropValueFixSchema,\n findingReplaceStyleValueFixSchema,\n findingReplaceImportFixSchema,\n findingReplaceComponentFixSchema,\n findingReplaceClassTokenFixSchema,\n]);\nexport type FindingFix = z.infer<typeof findingFixSchema>;\nexport type FindingReplacePropValueFix = z.infer<typeof findingReplacePropValueFixSchema>;\nexport type FindingReplaceStyleValueFix = z.infer<typeof findingReplaceStyleValueFixSchema>;\nexport type FindingReplaceImportFix = z.infer<typeof findingReplaceImportFixSchema>;\nexport type FindingReplaceComponentFix = z.infer<typeof findingReplaceComponentFixSchema>;\nexport type FindingReplaceClassTokenFix = z.infer<typeof findingReplaceClassTokenFixSchema>;\n\nexport interface FactEvidence {\n factId: string;\n fact: {\n kind: string;\n location?: FactLocation;\n };\n}\n\nexport const factEvidenceSchema: z.ZodType<FactEvidence> = z.object({\n factId: z.string(),\n fact: z\n .object({\n kind: z.string(),\n location: factLocationSchema.optional(),\n })\n .passthrough(),\n});\n\nexport const findingSchema = z.object({\n ruleId: z.string(),\n ruleVersion: z.string(),\n severity: severitySchema,\n level: severityLevelSchema,\n code: z\n .string()\n .regex(/^FUI\\d{4}$/)\n .optional(),\n helpUrl: z.string().url().optional(),\n message: z.string(),\n fingerprint: z.string(),\n location: factLocationSchema,\n evidence: z.array(factEvidenceSchema).min(1),\n evidenceGrade: evidenceGradeSchema.optional(),\n fix: findingFixSchema.optional(),\n attributes: z.record(z.unknown()).optional(),\n /**\n * Product area this finding's file resolved to (topology layer). Optional —\n * absent when the repo has no `topology` config. See `topology/resolve-area`.\n */\n area: z\n .object({\n areaId: z.string(),\n areaName: z.string(),\n criticality: z.enum([\"low\", \"medium\", \"high\", \"revenue\", \"regulated\"]),\n owners: z.array(z.string()),\n matchedGlob: z.string(),\n })\n .optional(),\n});\nexport type Finding = z.infer<typeof findingSchema>;\n\nexport const violationSchema = z.object({\n nodeId: z.string(),\n nodeType: z.string(),\n rule: z.string(),\n severity: severitySchema,\n level: severityLevelSchema.optional(),\n code: z\n .string()\n .regex(/^FUI\\d{4}$/)\n .optional(),\n helpUrl: z.string().url().optional(),\n message: z.string(),\n path: z.string().optional(),\n suggestion: z.string().optional(),\n prop: z.string().optional(),\n filePath: z.string().optional(),\n line: z.number().int().nonnegative().optional(),\n column: z.number().int().nonnegative().optional(),\n rawValue: z.string().optional(),\n extra: z.record(z.unknown()).optional(),\n});\nexport type Violation = z.infer<typeof violationSchema>;\n\nexport const fixSchema = z.object({\n nodeId: z.string(),\n prop: z.string().optional(),\n action: z.enum([\"remove\", \"replace\", \"add\"]),\n value: z.unknown().optional(),\n description: z.string(),\n});\nexport type Fix = z.infer<typeof fixSchema>;\n\nexport const validatorResultSchema = z.object({\n validator: z.string(),\n severity: severitySchema,\n passed: z.boolean(),\n violations: z.array(violationSchema),\n findings: z.array(findingSchema).optional(),\n suggestions: z.array(fixSchema).optional(),\n});\nexport type ValidatorResult = z.infer<typeof validatorResultSchema>;\n\nexport const governanceVerdictMetadataSchema = z.object({\n runner: z.string(),\n policyVersion: z.string().optional(),\n duration: z.number().nonnegative(),\n nodeCount: z.number().int().nonnegative(),\n componentTypes: z.array(z.string()),\n});\nexport type GovernanceVerdictMetadata = z.infer<typeof governanceVerdictMetadataSchema>;\n\nexport const governanceVerdictSchema = z.object({\n verdict: z.enum([\"pass\", \"warn\", \"fail\"]).optional(),\n passed: z.boolean(),\n score: z.number(),\n results: z.array(validatorResultSchema),\n metadata: governanceVerdictMetadataSchema,\n});\nexport type GovernanceVerdict = z.infer<typeof governanceVerdictSchema>;\n\nexport const suppressionDirectiveSchema = z.object({\n ruleId: z.string().optional(),\n reason: z.string().min(1),\n expiresAt: z.string().datetime().optional(),\n expiresOn: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .optional(),\n scope: z.enum([\"line\", \"block\", \"file\"]).default(\"line\"),\n code: z\n .string()\n .regex(/^FUI\\d{4}$/)\n .optional(),\n});\nexport type SuppressionDirective = z.infer<typeof suppressionDirectiveSchema>;\n\nexport const agentPlanSchema = z.object({\n tool: z.enum([\n \"design_system/list_primitives\",\n \"design_system/conform\",\n \"design_system/prove_compliant\",\n ]),\n args: z.record(z.unknown()),\n confidence: z.number().min(0).max(1),\n});\n\nexport const agentFindingSchema = z.object({\n code: z\n .string()\n .regex(/^FUI\\d{4}$/)\n .optional(),\n ruleId: z.string(),\n filePath: z.string(),\n line: z.number().int().nonnegative(),\n col: z.number().int().nonnegative(),\n severity: severitySchema,\n level: severityLevelSchema,\n message: z.string(),\n evidenceGrade: evidenceGradeSchema.optional(),\n evidence: z.array(factEvidenceSchema),\n plan: agentPlanSchema,\n});\n\nexport const AGENT_FORMAT_SCHEMA_VERSION = \"typestyle.agent.v2\" as const;\n\nexport const agentIntegritySchema = z.object({\n rulesLoaded: z.number().int().nonnegative(),\n status: z.enum([\"healthy\", \"degraded\", \"inert\"]),\n healthy: z.boolean(),\n inert: z.boolean(),\n reasons: z.array(z.string()),\n});\n\nconst agentRunProvenanceSchema = z.object({\n runId: z.string().regex(/^run_[a-f0-9]{12}$/),\n fcid: z.string().min(1),\n baselineId: z.string().min(1).optional(),\n scope: z.object({\n method: z.enum([\n \"three-dot\",\n \"tree-diff\",\n \"status\",\n \"fallback-full\",\n \"explicit\",\n \"full\",\n ]),\n gitOk: z.boolean(),\n }),\n engineVersion: z.string().min(1),\n scopeHash: z.string().regex(/^[a-f0-9]{64}$/),\n inputFilesHash: z.string().regex(/^[a-f0-9]{64}$/),\n});\n\nconst agentRunVerdictSchema = z.object({\n exitCode: z.union([z.literal(0), z.literal(1)]),\n reasons: z.array(z.string()),\n gatingFindingCount: z.number().int().nonnegative(),\n});\n\nconst agentFormatBaseSchema = z.object({\n schemaVersion: z.literal(AGENT_FORMAT_SCHEMA_VERSION),\n summary: z.string(),\n integrity: agentIntegritySchema,\n fix_first: z.array(agentFindingSchema),\n remaining: z.array(agentFindingSchema),\n suppression_template: z.object({\n directive: z.string(),\n requiredFields: z.array(z.string()),\n example: z.string(),\n }),\n budget: z.object({\n iteration: z.number().int().nonnegative(),\n maxIterations: z.number().int().positive(),\n scoreDelta: z.number(),\n }),\n findings: z.array(findingSchema).optional(),\n suppressions: z.array(suppressionDirectiveSchema).optional(),\n provenance: agentRunProvenanceSchema.optional(),\n verdict: agentRunVerdictSchema.optional(),\n});\n\nexport const agentFormatSchema = z.union([\n agentFormatBaseSchema.extend({\n passed: z.boolean(),\n score: z.number(),\n status: z.never().optional(),\n reasons: z.never().optional(),\n integrity: agentIntegritySchema.extend({\n rulesLoaded: z.number().int().positive(),\n }),\n }),\n agentFormatBaseSchema.extend({\n passed: z.literal(false),\n score: z.never().optional(),\n status: z.literal(\"indeterminate\"),\n reasons: z.tuple([z.literal(\"zero_rules_loaded\")]),\n integrity: agentIntegritySchema.extend({\n rulesLoaded: z.literal(0),\n }),\n }),\n // A finalized Run can explicitly allow inert governance. Preserve the\n // indeterminate integrity truth while making `passed` match that Run's sole\n // verdict; requiring Run pins prevents generic zero-rule envelopes from\n // accidentally becoming green.\n agentFormatBaseSchema.extend({\n passed: z.literal(true),\n score: z.never().optional(),\n status: z.literal(\"indeterminate\"),\n reasons: z.tuple([z.literal(\"zero_rules_loaded\")]),\n integrity: agentIntegritySchema.extend({\n rulesLoaded: z.literal(0),\n }),\n provenance: agentRunProvenanceSchema,\n verdict: agentRunVerdictSchema.extend({ exitCode: z.literal(0) }),\n }),\n]);\nexport type AgentFormat = z.infer<typeof agentFormatSchema>;\n\nexport const agentErrorEnvelopeSchema = z.object({\n schemaVersion: z.literal(AGENT_FORMAT_SCHEMA_VERSION),\n passed: z.literal(false),\n error: z.object({\n code: z.string().min(1),\n message: z.string().min(1),\n }),\n provenance: agentRunProvenanceSchema.optional(),\n verdict: agentRunVerdictSchema.optional(),\n cloudReport: z.enum([\"reported\", \"failed\", \"skipped\"]).optional(),\n notices: z.array(z.string()).optional(),\n});\nexport type AgentErrorEnvelope = z.infer<typeof agentErrorEnvelopeSchema>;\n\nexport const agentOutputSchema = z.union([agentFormatSchema, agentErrorEnvelopeSchema]);\nexport type AgentOutput = z.infer<typeof agentOutputSchema>;\n\nexport function normalizeSeverity(severity: Severity | LegacySeverityLevel): Severity {\n return severitySchema.safeParse(severity).success\n ? (severity as Severity)\n : severityFromLevel(legacySeverityLevelSchema.parse(severity));\n}\n\nexport function normalizeFinding(\n input: Omit<Finding, \"level\"> & { level?: Finding[\"level\"] }\n): Finding {\n return {\n ...input,\n evidenceGrade: input.evidenceGrade ?? \"source_backed\",\n level: input.level ?? severityLevel(input.severity),\n };\n}\n\nexport function normalizeViolation(\n input: Omit<Violation, \"level\"> & { level?: Violation[\"level\"] }\n): Violation {\n return {\n ...input,\n level: input.level ?? severityLevel(input.severity),\n };\n}\n"],"mappings":"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","names":[]}
|