@usefragments/core 1.0.0 → 1.2.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 (42) hide show
  1. package/dist/{chunk-R3X7UBHU.js → chunk-BQQTMGLA.js} +24 -2
  2. package/dist/chunk-BQQTMGLA.js.map +1 -0
  3. package/dist/{chunk-243QYRUF.js → chunk-DBVTSUMT.js} +71 -44
  4. package/dist/chunk-DBVTSUMT.js.map +1 -0
  5. package/dist/codes/index.d.ts +1 -1
  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.d.ts +8 -6
  11. package/dist/index.js +156 -19
  12. package/dist/index.js.map +1 -1
  13. package/dist/react-types.d.ts +1 -1
  14. package/dist/schemas/index.d.ts +797 -4
  15. package/dist/schemas/index.js +9 -1
  16. package/dist/test-utils.d.ts +1 -1
  17. package/package.json +1 -1
  18. package/src/agent-format.test.ts +72 -2
  19. package/src/agent-format.ts +10 -5
  20. package/src/codes/__tests__/codes.test.ts +57 -7
  21. package/src/codes/codes.ts +44 -42
  22. package/src/conform-prove.ts +4 -8
  23. package/src/contract/index.ts +3 -0
  24. package/src/contract/preimage.test.ts +50 -0
  25. package/src/contract/preimage.ts +56 -0
  26. package/src/facts/builders.ts +2 -0
  27. package/src/facts/fact-index.ts +4 -0
  28. package/src/facts/facts.test.ts +49 -0
  29. package/src/facts/types.ts +1 -0
  30. package/src/governance-integrity.test.ts +2 -0
  31. package/src/governance-integrity.ts +7 -1
  32. package/src/index.ts +9 -0
  33. package/src/rules/components-prefer-library.ts +165 -7
  34. package/src/rules/emit-gate.test.ts +24 -2
  35. package/src/rules/emit-gate.ts +15 -7
  36. package/src/rules/fix-availability.ts +33 -0
  37. package/src/rules/rules.test.ts +178 -23
  38. package/src/rules/taxonomy.test.ts +6 -3
  39. package/src/rules/tiers.ts +1 -1
  40. package/src/schemas/index.ts +25 -1
  41. package/dist/chunk-243QYRUF.js.map +0 -1
  42. package/dist/chunk-R3X7UBHU.js.map +0 -1
@@ -166,11 +166,20 @@ var agentFindingSchema = z.object({
166
166
  evidence: z.array(factEvidenceSchema),
167
167
  plan: agentPlanSchema
168
168
  });
169
+ var AGENT_FORMAT_SCHEMA_VERSION = "typestyle.agent.v2";
170
+ var agentIntegritySchema = z.object({
171
+ rulesLoaded: z.number().int().nonnegative(),
172
+ status: z.enum(["healthy", "degraded", "inert"]),
173
+ healthy: z.boolean(),
174
+ inert: z.boolean(),
175
+ reasons: z.array(z.string())
176
+ });
169
177
  var agentFormatSchema = z.object({
170
- schemaVersion: z.literal("typestyle.agent.v1"),
178
+ schemaVersion: z.literal(AGENT_FORMAT_SCHEMA_VERSION),
171
179
  passed: z.boolean(),
172
180
  score: z.number(),
173
181
  summary: z.string(),
182
+ integrity: agentIntegritySchema,
174
183
  fix_first: z.array(agentFindingSchema),
175
184
  remaining: z.array(agentFindingSchema),
176
185
  suppression_template: z.object({
@@ -186,6 +195,15 @@ var agentFormatSchema = z.object({
186
195
  findings: z.array(findingSchema).optional(),
187
196
  suppressions: z.array(suppressionDirectiveSchema).optional()
188
197
  });
198
+ var agentErrorEnvelopeSchema = z.object({
199
+ schemaVersion: z.literal(AGENT_FORMAT_SCHEMA_VERSION),
200
+ passed: z.literal(false),
201
+ error: z.object({
202
+ code: z.string().min(1),
203
+ message: z.string().min(1)
204
+ })
205
+ });
206
+ var agentOutputSchema = z.union([agentFormatSchema, agentErrorEnvelopeSchema]);
189
207
  function normalizeSeverity(severity) {
190
208
  return severitySchema.safeParse(severity).success ? severity : severityFromLevel(legacySeverityLevelSchema.parse(severity));
191
209
  }
@@ -220,9 +238,13 @@ export {
220
238
  suppressionDirectiveSchema,
221
239
  agentPlanSchema,
222
240
  agentFindingSchema,
241
+ AGENT_FORMAT_SCHEMA_VERSION,
242
+ agentIntegritySchema,
223
243
  agentFormatSchema,
244
+ agentErrorEnvelopeSchema,
245
+ agentOutputSchema,
224
246
  normalizeSeverity,
225
247
  normalizeFinding,
226
248
  normalizeViolation
227
249
  };
228
- //# sourceMappingURL=chunk-R3X7UBHU.js.map
250
+ //# sourceMappingURL=chunk-BQQTMGLA.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\";\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 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 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\nexport const agentFormatSchema = z.object({\n schemaVersion: z.literal(AGENT_FORMAT_SCHEMA_VERSION),\n passed: z.boolean(),\n score: z.number(),\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});\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});\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 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-BQQTMGLA.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,6 +796,7 @@ 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
801
  referenceFormat: input.referenceFormat
779
802
  };
@@ -1044,6 +1067,10 @@ function logicalComponentId(componentId2) {
1044
1067
  return canonicalizeOwnedComponentId(componentId2);
1045
1068
  }
1046
1069
  function logicalFactForComparison(fact) {
1070
+ if (fact.kind === "token_definition") {
1071
+ const { location: _location, ...logicalFact } = fact;
1072
+ return logicalFact;
1073
+ }
1047
1074
  if (fact.kind === "jsx_import_path_preferred") {
1048
1075
  return {
1049
1076
  ...fact,
@@ -2142,4 +2169,4 @@ export {
2142
2169
  bridgeSourceViolation,
2143
2170
  bridgeSourceViolations
2144
2171
  };
2145
- //# sourceMappingURL=chunk-243QYRUF.js.map
2172
+ //# sourceMappingURL=chunk-DBVTSUMT.js.map