@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.
Files changed (59) hide show
  1. package/dist/{chunk-R3X7UBHU.js → chunk-57QDBEHQ.js} +101 -6
  2. package/dist/chunk-57QDBEHQ.js.map +1 -0
  3. package/dist/{chunk-243QYRUF.js → chunk-MLRDNSSA.js} +88 -47
  4. package/dist/chunk-MLRDNSSA.js.map +1 -0
  5. package/dist/codes/index.d.ts +2 -2
  6. package/dist/codes/index.js +2 -2
  7. package/dist/compiled-types/index.d.ts +1 -1
  8. package/dist/generate/index.d.ts +1 -1
  9. package/dist/{governance-BOa3KyiJ.d.ts → governance-DYSirwJu.d.ts} +22 -1
  10. package/dist/index-h_yWj15D.d.ts +6981 -0
  11. package/dist/index.d.ts +113 -97
  12. package/dist/index.js +387 -113
  13. package/dist/index.js.map +1 -1
  14. package/dist/react-types.d.ts +1 -1
  15. package/dist/registry.d.ts +36 -36
  16. package/dist/schemas/index.d.ts +3 -2584
  17. package/dist/schemas/index.js +9 -1
  18. package/dist/test-utils.d.ts +1 -1
  19. package/package.json +1 -1
  20. package/src/agent-format.test.ts +144 -2
  21. package/src/agent-format.ts +34 -7
  22. package/src/codes/__tests__/codes.test.ts +57 -7
  23. package/src/codes/codes.ts +44 -42
  24. package/src/conform-prove.ts +4 -8
  25. package/src/contract/index.ts +3 -0
  26. package/src/contract/preimage.test.ts +50 -0
  27. package/src/contract/preimage.ts +56 -0
  28. package/src/evidence.ts +27 -0
  29. package/src/facts/builders.ts +4 -0
  30. package/src/facts/fact-index.ts +25 -1
  31. package/src/facts/facts.test.ts +49 -0
  32. package/src/facts/types.ts +3 -0
  33. package/src/governance-integrity.test.ts +2 -0
  34. package/src/governance-integrity.ts +7 -1
  35. package/src/index.ts +13 -0
  36. package/src/rules/__tests__/fix-emission-invariant.test.ts +174 -0
  37. package/src/rules/__tests__/tokens-require-dual-fallback.test.ts +90 -0
  38. package/src/rules/components-prefer-library.ts +165 -7
  39. package/src/rules/emit-gate.test.ts +40 -2
  40. package/src/rules/emit-gate.ts +21 -10
  41. package/src/rules/finding.ts +3 -0
  42. package/src/rules/fix-availability.ts +33 -0
  43. package/src/rules/rules.test.ts +180 -24
  44. package/src/rules/spacing-resolution.ts +5 -8
  45. package/src/rules/styles-no-raw-color.ts +32 -23
  46. package/src/rules/styles-no-raw-dimensions.ts +31 -12
  47. package/src/rules/styles-no-raw-spacing.ts +33 -11
  48. package/src/rules/styles-no-raw-typography.ts +37 -15
  49. package/src/rules/taxonomy.test.ts +19 -3
  50. package/src/rules/tiers.ts +1 -1
  51. package/src/rules/tokens-require-dual-fallback.ts +54 -17
  52. package/src/rules/utils.ts +51 -0
  53. package/src/schemas/index.ts +106 -4
  54. package/src/token-types.ts +6 -0
  55. package/src/tokens/__tests__/source-names.test.ts +42 -0
  56. package/src/tokens/design-token-parser.test.ts +24 -5
  57. package/src/tokens/design-token-parser.ts +40 -8
  58. package/dist/chunk-243QYRUF.js.map +0 -1
  59. 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 agentFormatSchema = z.object({
170
- schemaVersion: z.literal("typestyle.agent.v1"),
171
- passed: z.boolean(),
172
- score: z.number(),
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-R3X7UBHU.js.map
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":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  normalizeFinding,
3
3
  normalizeViolation
4
- } from "./chunk-R3X7UBHU.js";
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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
- code({
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 first fact, skipping ${describeFactForConflict(fact)}`
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-243QYRUF.js.map
2186
+ //# sourceMappingURL=chunk-MLRDNSSA.js.map