@usefragments/core 1.0.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-R3X7UBHU.js → chunk-57QDBEHQ.js} +101 -6
- package/dist/chunk-57QDBEHQ.js.map +1 -0
- package/dist/{chunk-243QYRUF.js → chunk-MLRDNSSA.js} +88 -47
- package/dist/chunk-MLRDNSSA.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-BOa3KyiJ.d.ts → governance-DYSirwJu.d.ts} +22 -1
- package/dist/index-h_yWj15D.d.ts +6981 -0
- package/dist/index.d.ts +113 -97
- package/dist/index.js +387 -113
- package/dist/index.js.map +1 -1
- package/dist/react-types.d.ts +1 -1
- package/dist/registry.d.ts +36 -36
- package/dist/schemas/index.d.ts +3 -2584
- package/dist/schemas/index.js +9 -1
- package/dist/test-utils.d.ts +1 -1
- package/package.json +1 -1
- package/src/agent-format.test.ts +144 -2
- package/src/agent-format.ts +34 -7
- package/src/codes/__tests__/codes.test.ts +57 -7
- package/src/codes/codes.ts +44 -42
- package/src/conform-prove.ts +4 -8
- package/src/contract/index.ts +3 -0
- package/src/contract/preimage.test.ts +50 -0
- package/src/contract/preimage.ts +56 -0
- package/src/evidence.ts +27 -0
- package/src/facts/builders.ts +4 -0
- package/src/facts/fact-index.ts +25 -1
- package/src/facts/facts.test.ts +49 -0
- package/src/facts/types.ts +3 -0
- package/src/governance-integrity.test.ts +2 -0
- package/src/governance-integrity.ts +7 -1
- package/src/index.ts +13 -0
- package/src/rules/__tests__/fix-emission-invariant.test.ts +174 -0
- package/src/rules/__tests__/tokens-require-dual-fallback.test.ts +90 -0
- package/src/rules/components-prefer-library.ts +165 -7
- package/src/rules/emit-gate.test.ts +40 -2
- package/src/rules/emit-gate.ts +21 -10
- package/src/rules/finding.ts +3 -0
- package/src/rules/fix-availability.ts +33 -0
- package/src/rules/rules.test.ts +180 -24
- package/src/rules/spacing-resolution.ts +5 -8
- package/src/rules/styles-no-raw-color.ts +32 -23
- package/src/rules/styles-no-raw-dimensions.ts +31 -12
- package/src/rules/styles-no-raw-spacing.ts +33 -11
- package/src/rules/styles-no-raw-typography.ts +37 -15
- package/src/rules/taxonomy.test.ts +19 -3
- package/src/rules/tiers.ts +1 -1
- package/src/rules/tokens-require-dual-fallback.ts +54 -17
- package/src/rules/utils.ts +51 -0
- package/src/schemas/index.ts +106 -4
- package/src/token-types.ts +6 -0
- package/src/tokens/__tests__/source-names.test.ts +42 -0
- package/src/tokens/design-token-parser.test.ts +24 -5
- package/src/tokens/design-token-parser.ts +40 -8
- package/dist/chunk-243QYRUF.js.map +0 -1
- package/dist/chunk-R3X7UBHU.js.map +0 -1
|
@@ -8,6 +8,13 @@ import {
|
|
|
8
8
|
|
|
9
9
|
// src/schemas/index.ts
|
|
10
10
|
import { z } from "zod";
|
|
11
|
+
var evidenceGradeSchema = z.enum([
|
|
12
|
+
"none",
|
|
13
|
+
"runtime_advisory",
|
|
14
|
+
"provenance_bound",
|
|
15
|
+
"source_backed",
|
|
16
|
+
"receipt_backed"
|
|
17
|
+
]);
|
|
11
18
|
var factLocationSchema = z.object({
|
|
12
19
|
file: z.string(),
|
|
13
20
|
line: z.number().int().nonnegative(),
|
|
@@ -76,6 +83,7 @@ var findingSchema = z.object({
|
|
|
76
83
|
fingerprint: z.string(),
|
|
77
84
|
location: factLocationSchema,
|
|
78
85
|
evidence: z.array(factEvidenceSchema).min(1),
|
|
86
|
+
evidenceGrade: evidenceGradeSchema.optional(),
|
|
79
87
|
fix: findingFixSchema.optional(),
|
|
80
88
|
attributes: z.record(z.unknown()).optional(),
|
|
81
89
|
/**
|
|
@@ -163,14 +171,46 @@ var agentFindingSchema = z.object({
|
|
|
163
171
|
severity: severitySchema,
|
|
164
172
|
level: severityLevelSchema,
|
|
165
173
|
message: z.string(),
|
|
174
|
+
evidenceGrade: evidenceGradeSchema.optional(),
|
|
166
175
|
evidence: z.array(factEvidenceSchema),
|
|
167
176
|
plan: agentPlanSchema
|
|
168
177
|
});
|
|
169
|
-
var
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
178
|
+
var AGENT_FORMAT_SCHEMA_VERSION = "typestyle.agent.v2";
|
|
179
|
+
var agentIntegritySchema = z.object({
|
|
180
|
+
rulesLoaded: z.number().int().nonnegative(),
|
|
181
|
+
status: z.enum(["healthy", "degraded", "inert"]),
|
|
182
|
+
healthy: z.boolean(),
|
|
183
|
+
inert: z.boolean(),
|
|
184
|
+
reasons: z.array(z.string())
|
|
185
|
+
});
|
|
186
|
+
var agentRunProvenanceSchema = z.object({
|
|
187
|
+
runId: z.string().regex(/^run_[a-f0-9]{12}$/),
|
|
188
|
+
fcid: z.string().min(1),
|
|
189
|
+
baselineId: z.string().min(1).optional(),
|
|
190
|
+
scope: z.object({
|
|
191
|
+
method: z.enum([
|
|
192
|
+
"three-dot",
|
|
193
|
+
"tree-diff",
|
|
194
|
+
"status",
|
|
195
|
+
"fallback-full",
|
|
196
|
+
"explicit",
|
|
197
|
+
"full"
|
|
198
|
+
]),
|
|
199
|
+
gitOk: z.boolean()
|
|
200
|
+
}),
|
|
201
|
+
engineVersion: z.string().min(1),
|
|
202
|
+
scopeHash: z.string().regex(/^[a-f0-9]{64}$/),
|
|
203
|
+
inputFilesHash: z.string().regex(/^[a-f0-9]{64}$/)
|
|
204
|
+
});
|
|
205
|
+
var agentRunVerdictSchema = z.object({
|
|
206
|
+
exitCode: z.union([z.literal(0), z.literal(1)]),
|
|
207
|
+
reasons: z.array(z.string()),
|
|
208
|
+
gatingFindingCount: z.number().int().nonnegative()
|
|
209
|
+
});
|
|
210
|
+
var agentFormatBaseSchema = z.object({
|
|
211
|
+
schemaVersion: z.literal(AGENT_FORMAT_SCHEMA_VERSION),
|
|
173
212
|
summary: z.string(),
|
|
213
|
+
integrity: agentIntegritySchema,
|
|
174
214
|
fix_first: z.array(agentFindingSchema),
|
|
175
215
|
remaining: z.array(agentFindingSchema),
|
|
176
216
|
suppression_template: z.object({
|
|
@@ -184,14 +224,65 @@ var agentFormatSchema = z.object({
|
|
|
184
224
|
scoreDelta: z.number()
|
|
185
225
|
}),
|
|
186
226
|
findings: z.array(findingSchema).optional(),
|
|
187
|
-
suppressions: z.array(suppressionDirectiveSchema).optional()
|
|
227
|
+
suppressions: z.array(suppressionDirectiveSchema).optional(),
|
|
228
|
+
provenance: agentRunProvenanceSchema.optional(),
|
|
229
|
+
verdict: agentRunVerdictSchema.optional()
|
|
230
|
+
});
|
|
231
|
+
var agentFormatSchema = z.union([
|
|
232
|
+
agentFormatBaseSchema.extend({
|
|
233
|
+
passed: z.boolean(),
|
|
234
|
+
score: z.number(),
|
|
235
|
+
status: z.never().optional(),
|
|
236
|
+
reasons: z.never().optional(),
|
|
237
|
+
integrity: agentIntegritySchema.extend({
|
|
238
|
+
rulesLoaded: z.number().int().positive()
|
|
239
|
+
})
|
|
240
|
+
}),
|
|
241
|
+
agentFormatBaseSchema.extend({
|
|
242
|
+
passed: z.literal(false),
|
|
243
|
+
score: z.never().optional(),
|
|
244
|
+
status: z.literal("indeterminate"),
|
|
245
|
+
reasons: z.tuple([z.literal("zero_rules_loaded")]),
|
|
246
|
+
integrity: agentIntegritySchema.extend({
|
|
247
|
+
rulesLoaded: z.literal(0)
|
|
248
|
+
})
|
|
249
|
+
}),
|
|
250
|
+
// A finalized Run can explicitly allow inert governance. Preserve the
|
|
251
|
+
// indeterminate integrity truth while making `passed` match that Run's sole
|
|
252
|
+
// verdict; requiring Run pins prevents generic zero-rule envelopes from
|
|
253
|
+
// accidentally becoming green.
|
|
254
|
+
agentFormatBaseSchema.extend({
|
|
255
|
+
passed: z.literal(true),
|
|
256
|
+
score: z.never().optional(),
|
|
257
|
+
status: z.literal("indeterminate"),
|
|
258
|
+
reasons: z.tuple([z.literal("zero_rules_loaded")]),
|
|
259
|
+
integrity: agentIntegritySchema.extend({
|
|
260
|
+
rulesLoaded: z.literal(0)
|
|
261
|
+
}),
|
|
262
|
+
provenance: agentRunProvenanceSchema,
|
|
263
|
+
verdict: agentRunVerdictSchema.extend({ exitCode: z.literal(0) })
|
|
264
|
+
})
|
|
265
|
+
]);
|
|
266
|
+
var agentErrorEnvelopeSchema = z.object({
|
|
267
|
+
schemaVersion: z.literal(AGENT_FORMAT_SCHEMA_VERSION),
|
|
268
|
+
passed: z.literal(false),
|
|
269
|
+
error: z.object({
|
|
270
|
+
code: z.string().min(1),
|
|
271
|
+
message: z.string().min(1)
|
|
272
|
+
}),
|
|
273
|
+
provenance: agentRunProvenanceSchema.optional(),
|
|
274
|
+
verdict: agentRunVerdictSchema.optional(),
|
|
275
|
+
cloudReport: z.enum(["reported", "failed", "skipped"]).optional(),
|
|
276
|
+
notices: z.array(z.string()).optional()
|
|
188
277
|
});
|
|
278
|
+
var agentOutputSchema = z.union([agentFormatSchema, agentErrorEnvelopeSchema]);
|
|
189
279
|
function normalizeSeverity(severity) {
|
|
190
280
|
return severitySchema.safeParse(severity).success ? severity : severityFromLevel(legacySeverityLevelSchema.parse(severity));
|
|
191
281
|
}
|
|
192
282
|
function normalizeFinding(input) {
|
|
193
283
|
return {
|
|
194
284
|
...input,
|
|
285
|
+
evidenceGrade: input.evidenceGrade ?? "source_backed",
|
|
195
286
|
level: input.level ?? severityLevel(input.severity)
|
|
196
287
|
};
|
|
197
288
|
}
|
|
@@ -220,9 +311,13 @@ export {
|
|
|
220
311
|
suppressionDirectiveSchema,
|
|
221
312
|
agentPlanSchema,
|
|
222
313
|
agentFindingSchema,
|
|
314
|
+
AGENT_FORMAT_SCHEMA_VERSION,
|
|
315
|
+
agentIntegritySchema,
|
|
223
316
|
agentFormatSchema,
|
|
317
|
+
agentErrorEnvelopeSchema,
|
|
318
|
+
agentOutputSchema,
|
|
224
319
|
normalizeSeverity,
|
|
225
320
|
normalizeFinding,
|
|
226
321
|
normalizeViolation
|
|
227
322
|
};
|
|
228
|
-
//# sourceMappingURL=chunk-
|
|
323
|
+
//# sourceMappingURL=chunk-57QDBEHQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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":";;;;;;;;;AAAA,SAAS,SAAS;AAYlB,IAAM,sBAAgD,EAAE,KAAK;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,MAAM,EAAE,OAAO;AAAA,EACf,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACnC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACrC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACjD,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AACrD,CAAC;AAGM,IAAM,mCAAmC,EAAE,OAAO;AAAA,EACvD,MAAM,EAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,QAAQ;AAAA,EACjB,eAAe,EAAE,QAAQ,EAAE,SAAS;AACtC,CAAC;AAEM,IAAM,oCAAoC,EAAE,OAAO;AAAA,EACxD,MAAM,EAAE,QAAQ,mBAAmB;AAAA,EACnC,OAAO,EAAE,OAAO;AAAA,EAChB,UAAU,EAAE,OAAO;AAAA,EACnB,OAAO,EAAE,OAAO;AAAA,EAChB,eAAe,EAAE,QAAQ,EAAE,SAAS;AACtC,CAAC;AAEM,IAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,MAAM,EAAE,QAAQ,eAAe;AAAA,EAC/B,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO;AAAA,EACf,IAAI,EAAE,OAAO;AAAA,EACb,eAAe,EAAE,QAAQ,EAAE,SAAS;AACtC,CAAC;AAEM,IAAM,mCAAmC,EAAE,OAAO;AAAA,EACvD,MAAM,EAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO;AAAA,EACf,IAAI,EAAE,OAAO;AAAA,EACb,eAAe,EAAE,QAAQ,EAAE,SAAS;AACtC,CAAC;AAEM,IAAM,oCAAoC,EAAE,OAAO;AAAA,EACxD,MAAM,EAAE,QAAQ,mBAAmB;AAAA,EACnC,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO;AAAA,EACf,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,EACxB,SAAS,EAAE,OAAO;AAAA,EAClB,eAAe,EAAE,QAAQ,EAAE,SAAS;AACtC,CAAC;AAEM,IAAM,mBAAmB,EAAE,mBAAmB,QAAQ;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAgBM,IAAM,qBAA8C,EAAE,OAAO;AAAA,EAClE,QAAQ,EAAE,OAAO;AAAA,EACjB,MAAM,EACH,OAAO;AAAA,IACN,MAAM,EAAE,OAAO;AAAA,IACf,UAAU,mBAAmB,SAAS;AAAA,EACxC,CAAC,EACA,YAAY;AACjB,CAAC;AAEM,IAAM,gBAAgB,EAAE,OAAO;AAAA,EACpC,QAAQ,EAAE,OAAO;AAAA,EACjB,aAAa,EAAE,OAAO;AAAA,EACtB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM,EACH,OAAO,EACP,MAAM,YAAY,EAClB,SAAS;AAAA,EACZ,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACnC,SAAS,EAAE,OAAO;AAAA,EAClB,aAAa,EAAE,OAAO;AAAA,EACtB,UAAU;AAAA,EACV,UAAU,EAAE,MAAM,kBAAkB,EAAE,IAAI,CAAC;AAAA,EAC3C,eAAe,oBAAoB,SAAS;AAAA,EAC5C,KAAK,iBAAiB,SAAS;AAAA,EAC/B,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3C,MAAM,EACH,OAAO;AAAA,IACN,QAAQ,EAAE,OAAO;AAAA,IACjB,UAAU,EAAE,OAAO;AAAA,IACnB,aAAa,EAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,WAAW,WAAW,CAAC;AAAA,IACrE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAC1B,aAAa,EAAE,OAAO;AAAA,EACxB,CAAC,EACA,SAAS;AACd,CAAC;AAGM,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO;AAAA,EACnB,MAAM,EAAE,OAAO;AAAA,EACf,UAAU;AAAA,EACV,OAAO,oBAAoB,SAAS;AAAA,EACpC,MAAM,EACH,OAAO,EACP,MAAM,YAAY,EAClB,SAAS;AAAA,EACZ,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACnC,SAAS,EAAE,OAAO;AAAA,EAClB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAC9C,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EAChD,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS;AACxC,CAAC;AAGM,IAAM,YAAY,EAAE,OAAO;AAAA,EAChC,QAAQ,EAAE,OAAO;AAAA,EACjB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ,EAAE,KAAK,CAAC,UAAU,WAAW,KAAK,CAAC;AAAA,EAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,aAAa,EAAE,OAAO;AACxB,CAAC;AAGM,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,WAAW,EAAE,OAAO;AAAA,EACpB,UAAU;AAAA,EACV,QAAQ,EAAE,QAAQ;AAAA,EAClB,YAAY,EAAE,MAAM,eAAe;AAAA,EACnC,UAAU,EAAE,MAAM,aAAa,EAAE,SAAS;AAAA,EAC1C,aAAa,EAAE,MAAM,SAAS,EAAE,SAAS;AAC3C,CAAC;AAGM,IAAM,kCAAkC,EAAE,OAAO;AAAA,EACtD,QAAQ,EAAE,OAAO;AAAA,EACjB,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,UAAU,EAAE,OAAO,EAAE,YAAY;AAAA,EACjC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC;AACpC,CAAC;AAGM,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,SAAS,EAAE,KAAK,CAAC,QAAQ,QAAQ,MAAM,CAAC,EAAE,SAAS;AAAA,EACnD,QAAQ,EAAE,QAAQ;AAAA,EAClB,OAAO,EAAE,OAAO;AAAA,EAChB,SAAS,EAAE,MAAM,qBAAqB;AAAA,EACtC,UAAU;AACZ,CAAC;AAGM,IAAM,6BAA6B,EAAE,OAAO;AAAA,EACjD,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,WAAW,EACR,OAAO,EACP,MAAM,qBAAqB,EAC3B,SAAS;AAAA,EACZ,OAAO,EAAE,KAAK,CAAC,QAAQ,SAAS,MAAM,CAAC,EAAE,QAAQ,MAAM;AAAA,EACvD,MAAM,EACH,OAAO,EACP,MAAM,YAAY,EAClB,SAAS;AACd,CAAC;AAGM,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,MAAM,EAAE,KAAK;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,EAC1B,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AACrC,CAAC;AAEM,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,MAAM,EACH,OAAO,EACP,MAAM,YAAY,EAClB,SAAS;AAAA,EACZ,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO;AAAA,EACnB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACnC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAClC,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS,EAAE,OAAO;AAAA,EAClB,eAAe,oBAAoB,SAAS;AAAA,EAC5C,UAAU,EAAE,MAAM,kBAAkB;AAAA,EACpC,MAAM;AACR,CAAC;AAEM,IAAM,8BAA8B;AAEpC,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC1C,QAAQ,EAAE,KAAK,CAAC,WAAW,YAAY,OAAO,CAAC;AAAA,EAC/C,SAAS,EAAE,QAAQ;AAAA,EACnB,OAAO,EAAE,QAAQ;AAAA,EACjB,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;AAC7B,CAAC;AAED,IAAM,2BAA2B,EAAE,OAAO;AAAA,EACxC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB;AAAA,EAC5C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACvC,OAAO,EAAE,OAAO;AAAA,IACd,QAAQ,EAAE,KAAK;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,OAAO,EAAE,QAAQ;AAAA,EACnB,CAAC;AAAA,EACD,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,EAC5C,gBAAgB,EAAE,OAAO,EAAE,MAAM,gBAAgB;AACnD,CAAC;AAED,IAAM,wBAAwB,EAAE,OAAO;AAAA,EACrC,UAAU,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AAAA,EAC9C,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC3B,oBAAoB,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AACnD,CAAC;AAED,IAAM,wBAAwB,EAAE,OAAO;AAAA,EACrC,eAAe,EAAE,QAAQ,2BAA2B;AAAA,EACpD,SAAS,EAAE,OAAO;AAAA,EAClB,WAAW;AAAA,EACX,WAAW,EAAE,MAAM,kBAAkB;AAAA,EACrC,WAAW,EAAE,MAAM,kBAAkB;AAAA,EACrC,sBAAsB,EAAE,OAAO;AAAA,IAC7B,WAAW,EAAE,OAAO;AAAA,IACpB,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAClC,SAAS,EAAE,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,QAAQ,EAAE,OAAO;AAAA,IACf,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACxC,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IACzC,YAAY,EAAE,OAAO;AAAA,EACvB,CAAC;AAAA,EACD,UAAU,EAAE,MAAM,aAAa,EAAE,SAAS;AAAA,EAC1C,cAAc,EAAE,MAAM,0BAA0B,EAAE,SAAS;AAAA,EAC3D,YAAY,yBAAyB,SAAS;AAAA,EAC9C,SAAS,sBAAsB,SAAS;AAC1C,CAAC;AAEM,IAAM,oBAAoB,EAAE,MAAM;AAAA,EACvC,sBAAsB,OAAO;AAAA,IAC3B,QAAQ,EAAE,QAAQ;AAAA,IAClB,OAAO,EAAE,OAAO;AAAA,IAChB,QAAQ,EAAE,MAAM,EAAE,SAAS;AAAA,IAC3B,SAAS,EAAE,MAAM,EAAE,SAAS;AAAA,IAC5B,WAAW,qBAAqB,OAAO;AAAA,MACrC,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IACzC,CAAC;AAAA,EACH,CAAC;AAAA,EACD,sBAAsB,OAAO;AAAA,IAC3B,QAAQ,EAAE,QAAQ,KAAK;AAAA,IACvB,OAAO,EAAE,MAAM,EAAE,SAAS;AAAA,IAC1B,QAAQ,EAAE,QAAQ,eAAe;AAAA,IACjC,SAAS,EAAE,MAAM,CAAC,EAAE,QAAQ,mBAAmB,CAAC,CAAC;AAAA,IACjD,WAAW,qBAAqB,OAAO;AAAA,MACrC,aAAa,EAAE,QAAQ,CAAC;AAAA,IAC1B,CAAC;AAAA,EACH,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,sBAAsB,OAAO;AAAA,IAC3B,QAAQ,EAAE,QAAQ,IAAI;AAAA,IACtB,OAAO,EAAE,MAAM,EAAE,SAAS;AAAA,IAC1B,QAAQ,EAAE,QAAQ,eAAe;AAAA,IACjC,SAAS,EAAE,MAAM,CAAC,EAAE,QAAQ,mBAAmB,CAAC,CAAC;AAAA,IACjD,WAAW,qBAAqB,OAAO;AAAA,MACrC,aAAa,EAAE,QAAQ,CAAC;AAAA,IAC1B,CAAC;AAAA,IACD,YAAY;AAAA,IACZ,SAAS,sBAAsB,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;AAAA,EAClE,CAAC;AACH,CAAC;AAGM,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,eAAe,EAAE,QAAQ,2BAA2B;AAAA,EACpD,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvB,OAAO,EAAE,OAAO;AAAA,IACd,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,CAAC;AAAA,EACD,YAAY,yBAAyB,SAAS;AAAA,EAC9C,SAAS,sBAAsB,SAAS;AAAA,EACxC,aAAa,EAAE,KAAK,CAAC,YAAY,UAAU,SAAS,CAAC,EAAE,SAAS;AAAA,EAChE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AACxC,CAAC;AAGM,IAAM,oBAAoB,EAAE,MAAM,CAAC,mBAAmB,wBAAwB,CAAC;AAG/E,SAAS,kBAAkB,UAAoD;AACpF,SAAO,eAAe,UAAU,QAAQ,EAAE,UACrC,WACD,kBAAkB,0BAA0B,MAAM,QAAQ,CAAC;AACjE;AAEO,SAAS,iBACd,OACS;AACT,SAAO;AAAA,IACL,GAAG;AAAA,IACH,eAAe,MAAM,iBAAiB;AAAA,IACtC,OAAO,MAAM,SAAS,cAAc,MAAM,QAAQ;AAAA,EACpD;AACF;AAEO,SAAS,mBACd,OACW;AACX,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,MAAM,SAAS,cAAc,MAAM,QAAQ;AAAA,EACpD;AACF;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeFinding,
|
|
3
3
|
normalizeViolation
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-57QDBEHQ.js";
|
|
5
5
|
import {
|
|
6
6
|
authorOwnedImport,
|
|
7
7
|
canonicalizeOwnedComponentId,
|
|
@@ -14,6 +14,32 @@ import {
|
|
|
14
14
|
portableRepoPathError
|
|
15
15
|
} from "./chunk-EIYNNS77.js";
|
|
16
16
|
|
|
17
|
+
// src/rules/fix-availability.ts
|
|
18
|
+
var RULE_FIX_AVAILABLE = {
|
|
19
|
+
"components/unknown-prop": false,
|
|
20
|
+
"components/forbidden-prop-value": true,
|
|
21
|
+
"props/invalid-value": true,
|
|
22
|
+
"imports/preferred-path": true,
|
|
23
|
+
"components/preferred-component": true,
|
|
24
|
+
"components/prefer-library": true,
|
|
25
|
+
"styles/no-raw-color": true,
|
|
26
|
+
"styles/no-raw-dimensions": true,
|
|
27
|
+
"styles/no-raw-spacing": true,
|
|
28
|
+
"styles/no-raw-typography": true,
|
|
29
|
+
"tailwind/arbitrary-color": false,
|
|
30
|
+
"tailwind/arbitrary-spacing": true,
|
|
31
|
+
"tailwind/forbidden-palette": true,
|
|
32
|
+
"tailwind/off-scale-spacing-token": true,
|
|
33
|
+
"tailwind/raw-color-via-token": false,
|
|
34
|
+
"tailwind/unknown-class": false,
|
|
35
|
+
"tokens/require-dual-fallback": true,
|
|
36
|
+
"tokens/css-vars-must-be-defined": false,
|
|
37
|
+
"theme/no-theme-coupled-literal": false,
|
|
38
|
+
"a11y/required-accessible-name": false,
|
|
39
|
+
"composition/cardinality": false,
|
|
40
|
+
"composition/co-occurrence": false
|
|
41
|
+
};
|
|
42
|
+
|
|
17
43
|
// src/codes/codes.ts
|
|
18
44
|
var EXPLAIN_URL_BASE = "https://usefragments.com/errors/";
|
|
19
45
|
function code(entry) {
|
|
@@ -22,6 +48,14 @@ function code(entry) {
|
|
|
22
48
|
explainUrl: `${EXPLAIN_URL_BASE}${entry.code}`
|
|
23
49
|
};
|
|
24
50
|
}
|
|
51
|
+
function ruleCode(entry) {
|
|
52
|
+
const { evidenceRequired, ...metadata } = entry;
|
|
53
|
+
return code({
|
|
54
|
+
...metadata,
|
|
55
|
+
fixAvailable: RULE_FIX_AVAILABLE[entry.ruleId],
|
|
56
|
+
evidenceRequired
|
|
57
|
+
});
|
|
58
|
+
}
|
|
25
59
|
var CODES = [
|
|
26
60
|
code({
|
|
27
61
|
code: "FUI1001",
|
|
@@ -33,34 +67,31 @@ var CODES = [
|
|
|
33
67
|
fixAvailable: true,
|
|
34
68
|
evidenceRequired: true
|
|
35
69
|
}),
|
|
36
|
-
|
|
70
|
+
ruleCode({
|
|
37
71
|
code: "FUI1002",
|
|
38
72
|
ruleId: "components/preferred-component",
|
|
39
73
|
category: "canonical-usage",
|
|
40
74
|
defaultSeverity: "serious",
|
|
41
75
|
title: "Preferred component should be used",
|
|
42
76
|
lifecycle: "experimental",
|
|
43
|
-
fixAvailable: true,
|
|
44
77
|
evidenceRequired: true
|
|
45
78
|
}),
|
|
46
|
-
|
|
79
|
+
ruleCode({
|
|
47
80
|
code: "FUI1003",
|
|
48
81
|
ruleId: "imports/preferred-path",
|
|
49
82
|
category: "canonical-usage",
|
|
50
83
|
defaultSeverity: "moderate",
|
|
51
84
|
title: "Import should use the preferred path",
|
|
52
85
|
lifecycle: "experimental",
|
|
53
|
-
fixAvailable: true,
|
|
54
86
|
evidenceRequired: true
|
|
55
87
|
}),
|
|
56
|
-
|
|
88
|
+
ruleCode({
|
|
57
89
|
code: "FUI1004",
|
|
58
90
|
ruleId: "components/prefer-library",
|
|
59
91
|
category: "canonical-usage",
|
|
60
92
|
defaultSeverity: "moderate",
|
|
61
93
|
title: "Library component should be preferred",
|
|
62
94
|
lifecycle: "experimental",
|
|
63
|
-
fixAvailable: true,
|
|
64
95
|
evidenceRequired: true
|
|
65
96
|
}),
|
|
66
97
|
code({
|
|
@@ -103,104 +134,94 @@ var CODES = [
|
|
|
103
134
|
fixAvailable: true,
|
|
104
135
|
evidenceRequired: true
|
|
105
136
|
}),
|
|
106
|
-
|
|
137
|
+
ruleCode({
|
|
107
138
|
code: "FUI2003",
|
|
108
139
|
ruleId: "tokens/require-dual-fallback",
|
|
109
140
|
category: "tokens",
|
|
110
141
|
defaultSeverity: "serious",
|
|
111
142
|
title: "Token fallback is required",
|
|
112
143
|
lifecycle: "experimental",
|
|
113
|
-
fixAvailable: true,
|
|
114
144
|
evidenceRequired: true
|
|
115
145
|
}),
|
|
116
|
-
|
|
146
|
+
ruleCode({
|
|
117
147
|
code: "FUI2004",
|
|
118
148
|
ruleId: "styles/no-raw-dimensions",
|
|
119
149
|
category: "tokens",
|
|
120
150
|
defaultSeverity: "serious",
|
|
121
151
|
title: "Raw dimension should use a token",
|
|
122
152
|
lifecycle: "experimental",
|
|
123
|
-
fixAvailable: true,
|
|
124
153
|
evidenceRequired: true
|
|
125
154
|
}),
|
|
126
|
-
|
|
155
|
+
ruleCode({
|
|
127
156
|
code: "FUI2005",
|
|
128
157
|
ruleId: "styles/no-raw-color",
|
|
129
158
|
category: "tokens",
|
|
130
159
|
defaultSeverity: "serious",
|
|
131
160
|
title: "Raw color should use a token",
|
|
132
161
|
lifecycle: "experimental",
|
|
133
|
-
fixAvailable: true,
|
|
134
162
|
evidenceRequired: true
|
|
135
163
|
}),
|
|
136
|
-
|
|
164
|
+
ruleCode({
|
|
137
165
|
code: "FUI2006",
|
|
138
166
|
ruleId: "styles/no-raw-spacing",
|
|
139
167
|
category: "tokens",
|
|
140
168
|
defaultSeverity: "serious",
|
|
141
169
|
title: "Raw spacing should use the scale",
|
|
142
170
|
lifecycle: "experimental",
|
|
143
|
-
fixAvailable: true,
|
|
144
171
|
evidenceRequired: true
|
|
145
172
|
}),
|
|
146
|
-
|
|
173
|
+
ruleCode({
|
|
147
174
|
code: "FUI2007",
|
|
148
175
|
ruleId: "tailwind/arbitrary-color",
|
|
149
176
|
category: "tokens",
|
|
150
177
|
defaultSeverity: "moderate",
|
|
151
178
|
title: "Tailwind arbitrary color should use a token",
|
|
152
179
|
lifecycle: "experimental",
|
|
153
|
-
fixAvailable: true,
|
|
154
180
|
evidenceRequired: true
|
|
155
181
|
}),
|
|
156
|
-
|
|
182
|
+
ruleCode({
|
|
157
183
|
code: "FUI2008",
|
|
158
184
|
ruleId: "tailwind/arbitrary-spacing",
|
|
159
185
|
category: "tokens",
|
|
160
186
|
defaultSeverity: "moderate",
|
|
161
187
|
title: "Tailwind arbitrary spacing should use the scale",
|
|
162
188
|
lifecycle: "experimental",
|
|
163
|
-
fixAvailable: true,
|
|
164
189
|
evidenceRequired: true
|
|
165
190
|
}),
|
|
166
|
-
|
|
191
|
+
ruleCode({
|
|
167
192
|
code: "FUI2009",
|
|
168
193
|
ruleId: "tailwind/forbidden-palette",
|
|
169
194
|
category: "tokens",
|
|
170
195
|
defaultSeverity: "moderate",
|
|
171
196
|
title: "Tailwind palette is forbidden",
|
|
172
197
|
lifecycle: "experimental",
|
|
173
|
-
fixAvailable: false,
|
|
174
198
|
evidenceRequired: true
|
|
175
199
|
}),
|
|
176
|
-
|
|
200
|
+
ruleCode({
|
|
177
201
|
code: "FUI2010",
|
|
178
202
|
ruleId: "tailwind/raw-color-via-token",
|
|
179
203
|
category: "tokens",
|
|
180
204
|
defaultSeverity: "moderate",
|
|
181
205
|
title: "Tailwind color should use a resolved token",
|
|
182
206
|
lifecycle: "experimental",
|
|
183
|
-
fixAvailable: true,
|
|
184
207
|
evidenceRequired: true
|
|
185
208
|
}),
|
|
186
|
-
|
|
209
|
+
ruleCode({
|
|
187
210
|
code: "FUI2011",
|
|
188
211
|
ruleId: "tailwind/off-scale-spacing-token",
|
|
189
212
|
category: "tokens",
|
|
190
213
|
defaultSeverity: "moderate",
|
|
191
214
|
title: "Tailwind spacing token is off scale",
|
|
192
215
|
lifecycle: "experimental",
|
|
193
|
-
fixAvailable: true,
|
|
194
216
|
evidenceRequired: true
|
|
195
217
|
}),
|
|
196
|
-
|
|
218
|
+
ruleCode({
|
|
197
219
|
code: "FUI2012",
|
|
198
220
|
ruleId: "tailwind/unknown-class",
|
|
199
221
|
category: "tokens",
|
|
200
222
|
defaultSeverity: "moderate",
|
|
201
223
|
title: "Tailwind class is unknown",
|
|
202
224
|
lifecycle: "experimental",
|
|
203
|
-
fixAvailable: false,
|
|
204
225
|
evidenceRequired: true
|
|
205
226
|
}),
|
|
206
227
|
code({
|
|
@@ -213,34 +234,40 @@ var CODES = [
|
|
|
213
234
|
fixAvailable: true,
|
|
214
235
|
evidenceRequired: true
|
|
215
236
|
}),
|
|
216
|
-
|
|
237
|
+
ruleCode({
|
|
217
238
|
code: "FUI2014",
|
|
218
239
|
ruleId: "theme/no-theme-coupled-literal",
|
|
219
240
|
category: "tokens",
|
|
220
241
|
defaultSeverity: "moderate",
|
|
221
242
|
title: "Theme-coupled literal should use a semantic token",
|
|
222
243
|
lifecycle: "experimental",
|
|
223
|
-
fixAvailable: false,
|
|
224
244
|
evidenceRequired: true
|
|
225
245
|
}),
|
|
226
|
-
|
|
246
|
+
ruleCode({
|
|
227
247
|
code: "FUI2015",
|
|
228
248
|
ruleId: "tokens/css-vars-must-be-defined",
|
|
229
249
|
category: "tokens",
|
|
230
250
|
defaultSeverity: "moderate",
|
|
231
251
|
title: "CSS variable is not in the contract vocabulary",
|
|
232
252
|
lifecycle: "experimental",
|
|
233
|
-
fixAvailable: false,
|
|
234
253
|
evidenceRequired: true
|
|
235
254
|
}),
|
|
236
|
-
|
|
255
|
+
ruleCode({
|
|
256
|
+
code: "FUI2016",
|
|
257
|
+
ruleId: "styles/no-raw-typography",
|
|
258
|
+
category: "tokens",
|
|
259
|
+
defaultSeverity: "serious",
|
|
260
|
+
title: "Raw typography should use a token",
|
|
261
|
+
lifecycle: "experimental",
|
|
262
|
+
evidenceRequired: true
|
|
263
|
+
}),
|
|
264
|
+
ruleCode({
|
|
237
265
|
code: "FUI3001",
|
|
238
266
|
ruleId: "a11y/required-accessible-name",
|
|
239
267
|
category: "a11y",
|
|
240
268
|
defaultSeverity: "serious",
|
|
241
269
|
title: "Accessible name is required",
|
|
242
270
|
lifecycle: "experimental",
|
|
243
|
-
fixAvailable: false,
|
|
244
271
|
evidenceRequired: true
|
|
245
272
|
}),
|
|
246
273
|
code({
|
|
@@ -274,24 +301,22 @@ var CODES = [
|
|
|
274
301
|
fixAvailable: true,
|
|
275
302
|
evidenceRequired: true
|
|
276
303
|
}),
|
|
277
|
-
|
|
304
|
+
ruleCode({
|
|
278
305
|
code: "FUI5003",
|
|
279
306
|
ruleId: "composition/cardinality",
|
|
280
307
|
category: "composition",
|
|
281
308
|
defaultSeverity: "moderate",
|
|
282
309
|
title: "Too many of a component in one region",
|
|
283
310
|
lifecycle: "experimental",
|
|
284
|
-
fixAvailable: false,
|
|
285
311
|
evidenceRequired: true
|
|
286
312
|
}),
|
|
287
|
-
|
|
313
|
+
ruleCode({
|
|
288
314
|
code: "FUI5004",
|
|
289
315
|
ruleId: "composition/co-occurrence",
|
|
290
316
|
category: "composition",
|
|
291
317
|
defaultSeverity: "moderate",
|
|
292
318
|
title: "Required companion component is missing from the region",
|
|
293
319
|
lifecycle: "experimental",
|
|
294
|
-
fixAvailable: false,
|
|
295
320
|
evidenceRequired: true
|
|
296
321
|
}),
|
|
297
322
|
code({
|
|
@@ -304,14 +329,13 @@ var CODES = [
|
|
|
304
329
|
fixAvailable: false,
|
|
305
330
|
evidenceRequired: true
|
|
306
331
|
}),
|
|
307
|
-
|
|
332
|
+
ruleCode({
|
|
308
333
|
code: "FUI6002",
|
|
309
334
|
ruleId: "props/invalid-value",
|
|
310
335
|
category: "props",
|
|
311
336
|
defaultSeverity: "serious",
|
|
312
337
|
title: "Prop value is invalid",
|
|
313
338
|
lifecycle: "experimental",
|
|
314
|
-
fixAvailable: true,
|
|
315
339
|
evidenceRequired: true
|
|
316
340
|
}),
|
|
317
341
|
code({
|
|
@@ -324,24 +348,22 @@ var CODES = [
|
|
|
324
348
|
fixAvailable: false,
|
|
325
349
|
evidenceRequired: true
|
|
326
350
|
}),
|
|
327
|
-
|
|
351
|
+
ruleCode({
|
|
328
352
|
code: "FUI6004",
|
|
329
353
|
ruleId: "components/forbidden-prop-value",
|
|
330
354
|
category: "props",
|
|
331
355
|
defaultSeverity: "serious",
|
|
332
356
|
title: "Prop value is forbidden",
|
|
333
357
|
lifecycle: "experimental",
|
|
334
|
-
fixAvailable: true,
|
|
335
358
|
evidenceRequired: true
|
|
336
359
|
}),
|
|
337
|
-
|
|
360
|
+
ruleCode({
|
|
338
361
|
code: "FUI6005",
|
|
339
362
|
ruleId: "components/unknown-prop",
|
|
340
363
|
category: "props",
|
|
341
364
|
defaultSeverity: "moderate",
|
|
342
365
|
title: "Component prop is unknown",
|
|
343
366
|
lifecycle: "experimental",
|
|
344
|
-
fixAvailable: false,
|
|
345
367
|
evidenceRequired: true
|
|
346
368
|
}),
|
|
347
369
|
code({
|
|
@@ -774,8 +796,10 @@ function makeTokenDefinitionFact(input) {
|
|
|
774
796
|
kind: "token_definition",
|
|
775
797
|
name: input.name,
|
|
776
798
|
value: input.value,
|
|
799
|
+
...input.location ? { location: input.location } : {},
|
|
777
800
|
category: input.category,
|
|
778
|
-
referenceFormat: input.referenceFormat
|
|
801
|
+
referenceFormat: input.referenceFormat,
|
|
802
|
+
...input.sourceNames?.length ? { sourceNames: [...input.sourceNames] } : {}
|
|
779
803
|
};
|
|
780
804
|
}
|
|
781
805
|
function makeTailwindPaletteAllowFact(input) {
|
|
@@ -1044,6 +1068,10 @@ function logicalComponentId(componentId2) {
|
|
|
1044
1068
|
return canonicalizeOwnedComponentId(componentId2);
|
|
1045
1069
|
}
|
|
1046
1070
|
function logicalFactForComparison(fact) {
|
|
1071
|
+
if (fact.kind === "token_definition") {
|
|
1072
|
+
const { location: _location, sourceNames: _sourceNames, ...logicalFact } = fact;
|
|
1073
|
+
return logicalFact;
|
|
1074
|
+
}
|
|
1047
1075
|
if (fact.kind === "jsx_import_path_preferred") {
|
|
1048
1076
|
return {
|
|
1049
1077
|
...fact,
|
|
@@ -1084,12 +1112,16 @@ var FactIndex = class {
|
|
|
1084
1112
|
facts = /* @__PURE__ */ new Map();
|
|
1085
1113
|
idsByKind = /* @__PURE__ */ new Map();
|
|
1086
1114
|
idsByComponent = /* @__PURE__ */ new Map();
|
|
1115
|
+
tokenBySymbol = /* @__PURE__ */ new Map();
|
|
1087
1116
|
add(fact) {
|
|
1117
|
+
if (fact.kind === "token_definition") {
|
|
1118
|
+
this.indexTokenSymbols(fact);
|
|
1119
|
+
}
|
|
1088
1120
|
const existing = this.facts.get(fact.id);
|
|
1089
1121
|
if (existing) {
|
|
1090
1122
|
if (canonicalJson(logicalFactForComparison(existing)) !== canonicalJson(logicalFactForComparison(fact))) {
|
|
1091
1123
|
console.warn(
|
|
1092
|
-
`FactIndex: conflicting facts for id ${fact.id} \u2014 keeping
|
|
1124
|
+
`FactIndex: conflicting facts for id ${fact.id} \u2014 keeping ${describeFactForConflict(existing)}, skipping ${describeFactForConflict(fact)}`
|
|
1093
1125
|
);
|
|
1094
1126
|
}
|
|
1095
1127
|
return;
|
|
@@ -1251,11 +1283,20 @@ var FactIndex = class {
|
|
|
1251
1283
|
// ---------------------------------------------------------------------
|
|
1252
1284
|
tokens = {
|
|
1253
1285
|
list: () => this.byKind("token_definition"),
|
|
1254
|
-
byCategory: (category) => this.byKind("token_definition").filter((t) => t.category === category)
|
|
1286
|
+
byCategory: (category) => this.byKind("token_definition").filter((t) => t.category === category),
|
|
1287
|
+
symbolExists: (name) => this.tokenBySymbol.has(name),
|
|
1288
|
+
definitionForSymbol: (name) => this.tokenBySymbol.get(name)
|
|
1255
1289
|
};
|
|
1256
1290
|
// ---------------------------------------------------------------------
|
|
1257
1291
|
// Internals
|
|
1258
1292
|
// ---------------------------------------------------------------------
|
|
1293
|
+
indexTokenSymbols(fact) {
|
|
1294
|
+
const legacyScssAlias = fact.referenceFormat === "scss-var" && fact.name.startsWith("--") ? `$${fact.name.slice(2)}` : fact.referenceFormat === "scss-var" && fact.name.startsWith("$") ? `--${fact.name.slice(1)}` : void 0;
|
|
1295
|
+
for (const symbol of [fact.name, ...fact.sourceNames ?? [], legacyScssAlias]) {
|
|
1296
|
+
if (!symbol) continue;
|
|
1297
|
+
if (!this.tokenBySymbol.has(symbol)) this.tokenBySymbol.set(symbol, fact);
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1259
1300
|
byComponentOfKind(componentId2, kind) {
|
|
1260
1301
|
const ids = this.idsByComponent.get(logicalComponentId(componentId2));
|
|
1261
1302
|
if (!ids) return [];
|
|
@@ -2142,4 +2183,4 @@ export {
|
|
|
2142
2183
|
bridgeSourceViolation,
|
|
2143
2184
|
bridgeSourceViolations
|
|
2144
2185
|
};
|
|
2145
|
-
//# sourceMappingURL=chunk-
|
|
2186
|
+
//# sourceMappingURL=chunk-MLRDNSSA.js.map
|