feat(web): enforce font-size tokens in token gate
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
// inside `@font-face`. Relative colour derived from a token —
|
||||
// `oklch(from var(--x) …)` — counts as consuming the token and is allowed
|
||||
// anywhere. Spacing properties (margin/padding/gap/inset) may only use
|
||||
// var(), 0, auto and percentages.
|
||||
// var(), 0, auto and percentages; font-size only a --text-* token.
|
||||
|
||||
import { readdirSync, readFileSync, statSync } from "node:fs";
|
||||
import { join, relative } from "node:path";
|
||||
@@ -33,6 +33,7 @@ const COLOR_LITERAL = /#[0-9a-fA-F]{3,8}\b|\b(?:oklch|oklab|lab|lch|rgba?|hsla?|
|
||||
const RELATIVE_FROM_TOKEN = /\b(?:oklch|oklab|lab|lch|rgb|hsl|hwb|color)\(\s*from\s+var\(--/g;
|
||||
const SPACING_PROP = /^(?:margin|padding|gap|row-gap|column-gap|inset)(?:-[a-z-]+)?$/;
|
||||
const SPACING_VALUE = /^(?:var\(--[\w-]+\)|0|auto|-?[\d.]+%)$/;
|
||||
const FONT_SIZE_VALUE = /^var\(--text-[\w-]+\)$/;
|
||||
|
||||
const errors = [];
|
||||
|
||||
@@ -47,10 +48,16 @@ function checkDeclaration(declaration, rel, line) {
|
||||
return;
|
||||
}
|
||||
const property = declaration.slice(0, colon).trim();
|
||||
const value = declaration.slice(colon + 1).trim();
|
||||
if (property === "font-size") {
|
||||
if (!FONT_SIZE_VALUE.test(value)) {
|
||||
errors.push(`${rel}:${line}: literal font-size "${value}" — use a --text-* token`);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!SPACING_PROP.test(property)) {
|
||||
return;
|
||||
}
|
||||
const value = declaration.slice(colon + 1).trim();
|
||||
const bad = value.split(/\s+/).filter((part) => part && !SPACING_VALUE.test(part));
|
||||
if (bad.length > 0) {
|
||||
errors.push(`${rel}:${line}: literal spacing "${bad.join(" ")}" — use a --space-* token`);
|
||||
|
||||
Reference in New Issue
Block a user