From 82ab3adf31c0045749a5f31ba6e8852f0e803fda Mon Sep 17 00:00:00 2001 From: Lukas Oppermann Date: Mon, 1 Jul 2024 11:54:55 +0200 Subject: [PATCH] prototype to show how we can validate token names --- src/schemas/tokenName.ts | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/schemas/tokenName.ts b/src/schemas/tokenName.ts index 5a3368a7b..7bdd6b896 100644 --- a/src/schemas/tokenName.ts +++ b/src/schemas/tokenName.ts @@ -1,12 +1,28 @@ import {z} from 'zod' import {schemaErrorMessage} from '../utilities/schemaErrorMessage' -export const tokenName = z.string().refine( - name => /(^[a-z0-9][A-Za-z0-9-]*$|^@$)/.test(name), - name => ({ - message: schemaErrorMessage( - `Invalid token name: "${name}"`, - 'Token name must be kebab-case or camelCase, and start with a lowercase letter or number and consist only of letters, numbers, and hyphens.', - ), - }), -) +export const tokenName = z + .string() + .refine( + name => /(^[a-z0-9][A-Za-z0-9-]*$|^@$)/.test(name), + name => ({ + message: schemaErrorMessage( + `Invalid token name: "${name}"`, + 'Token name must be kebab-case or camelCase, and start with a lowercase letter or number and consist only of letters, numbers, and hyphens.', + ), + }), + ) + .superRefine((val, ctx) => { + // validate base tokens + const name = ctx.path.join('-') + if (ctx.path[0] === 'base' && /(^base-[text|color|size]-[A-Za-z0-9-]*$)/.test(name)) { + ctx.addIssue({ + code: z.ZodIssueCode.invalid_string, + validation: 'regex', + message: schemaErrorMessage( + `Invalid base token name: "${name}"`, + 'Base token names must be kebab-case or camelCase, and start with a lowercase letter or number and consist only of letters, numbers, and hyphens.', + ), + }) + } + })