@usefragments/core 1.4.0 → 1.5.1
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-CBSNXFOD.js → chunk-AOG4FTV6.js} +146 -6
- package/dist/chunk-AOG4FTV6.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-DxdJV6lx.d.ts → governance-B88uR3Zq.d.ts} +229 -1
- package/dist/{index-0lmh0Lbo.d.ts → index-DbkPE46t.d.ts} +48 -8
- package/dist/index.d.ts +779 -158
- package/dist/index.js +674 -127
- package/dist/index.js.map +1 -1
- package/dist/react-types.d.ts +1 -1
- package/dist/registry.d.ts +18 -18
- 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/codes.ts +18 -0
- package/src/conform.ts +5 -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 +70 -2
- package/src/facts/compile.ts +20 -2
- package/src/facts/fact-index.ts +4 -0
- package/src/facts/facts.test.ts +30 -0
- package/src/facts/index.ts +6 -0
- package/src/facts/types.ts +86 -7
- package/src/governance-integrity.test.ts +22 -0
- package/src/governance-integrity.ts +10 -4
- package/src/governance.test.ts +93 -0
- package/src/governance.ts +76 -0
- package/src/identity/classify.test.ts +185 -0
- package/src/identity/classify.ts +257 -0
- package/src/identity/component-key.test.ts +32 -0
- package/src/identity/component-key.ts +35 -0
- package/src/identity/usage.ts +39 -0
- package/src/index.ts +48 -0
- package/src/rules/__tests__/fix-emission-invariant.test.ts +35 -4
- package/src/rules/components-prefer-library.test.ts +151 -0
- package/src/rules/components-prefer-library.ts +46 -4
- package/src/rules/components-shadow-component.test.ts +145 -0
- package/src/rules/components-shadow-component.ts +81 -0
- package/src/rules/fix-availability.ts +2 -0
- package/src/rules/index.ts +14 -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.ts +5 -2
- package/src/rules/styles-no-raw-typography.ts +7 -4
- package/src/rules/taxonomy.test.ts +19 -1
- package/src/rules/tiers.ts +9 -5
- 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 +28 -0
- package/src/schemas/index.ts +5 -8
- package/src/token-types.ts +71 -1
- package/src/types.ts +18 -0
- package/dist/chunk-57QDBEHQ.js.map +0 -1
- package/dist/chunk-CBSNXFOD.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(),
|
|
@@ -366,6 +379,21 @@ export const fragmentsConfigSchema = z.object({
|
|
|
366
379
|
})
|
|
367
380
|
.optional(),
|
|
368
381
|
recognizedClassHelpers: z.array(z.string().min(1)).optional(),
|
|
382
|
+
identity: z
|
|
383
|
+
.object({
|
|
384
|
+
decisions: z
|
|
385
|
+
.array(
|
|
386
|
+
z.object({
|
|
387
|
+
component: z.string().min(1),
|
|
388
|
+
kind: z.enum(["sanction", "reject", "dismiss"]),
|
|
389
|
+
canonicalTarget: z.string().min(1).optional(),
|
|
390
|
+
reason: z.string().optional(),
|
|
391
|
+
decisionId: z.string().min(1).optional(),
|
|
392
|
+
})
|
|
393
|
+
)
|
|
394
|
+
.optional(),
|
|
395
|
+
})
|
|
396
|
+
.optional(),
|
|
369
397
|
});
|
|
370
398
|
|
|
371
399
|
// ---------------------------------------------------------------------------
|
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
|
@@ -592,6 +592,12 @@ export interface TokenConfig {
|
|
|
592
592
|
*/
|
|
593
593
|
packages?: string[];
|
|
594
594
|
|
|
595
|
+
/** Explicit local-name -> upstream-name mappings for cross-authority drift checks. */
|
|
596
|
+
aliases?: Record<string, string>;
|
|
597
|
+
|
|
598
|
+
/** Deterministic pins for upstream token manifests; local scans never fetch them. */
|
|
599
|
+
upstream?: Array<{ packageName: string; version?: string; digest?: string }>;
|
|
600
|
+
|
|
595
601
|
/**
|
|
596
602
|
* Glob patterns to exclude
|
|
597
603
|
* @example ["node_modules"]
|
|
@@ -804,6 +810,18 @@ export interface FragmentsConfig {
|
|
|
804
810
|
* not merge.
|
|
805
811
|
*/
|
|
806
812
|
recognizedClassHelpers?: string[];
|
|
813
|
+
|
|
814
|
+
/** Local component-identity decisions used when Cloud does not own the key. */
|
|
815
|
+
identity?: {
|
|
816
|
+
decisions?: Array<{
|
|
817
|
+
/** Portable component key (`file#exportName`). */
|
|
818
|
+
component: string;
|
|
819
|
+
kind: "sanction" | "reject" | "dismiss";
|
|
820
|
+
canonicalTarget?: string;
|
|
821
|
+
reason?: string;
|
|
822
|
+
decisionId?: string;
|
|
823
|
+
}>;
|
|
824
|
+
};
|
|
807
825
|
}
|
|
808
826
|
|
|
809
827
|
/**
|
|
@@ -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":[]}
|