import { SDTFQuery, parseQuery } from '@specifyapp/specify-design-token-format'; import { z } from 'zod'; /* ------------------------------------------ applyTo --------------------------------------------- */ export const queryParserSchema = z .custom(value => value) .superRefine((value, ctx) => { try { return parseQuery(value); } catch (error) { if (error instanceof z.ZodError) { error.issues.forEach(issue => { ctx.addIssue(issue); }); } } }); const applyToInner = z.union([ z.object({ collection: z.union([z.string(), z.literal(true)]), }), z.object({ group: z.union([z.string(), z.literal(true)]), }), z.object({ token: z.union([z.string(), z.literal(true)]), }), queryParserSchema, ]); export const applyTo = z.union([applyToInner, z.array(applyToInner)]).optional(); /* ------------------------------------------ With SDTF view option --------------------------------------------- */ export const withSDTFViewSchema = z.string().optional(); /* ------------------------------------------ To Javascript --------------------------------------------- */ export const toJavascriptOptionsSchema = z .object({ typescript: z.boolean().optional(), moduleExport: z.enum(['es6', 'commonjs']).optional(), }) .strict(); /* ------------------------------------------ Replace with regex --------------------------------------------- */ export const replaceSchema = z.object({ regex: z.union([z.string(), z.object({ pattern: z.string(), flags: z.string().optional() })]), replaceBy: z.string(), trim: z.boolean().optional(), }); /* ------------------------------------------ Convert dimension --------------------------------------------- */ export const possibleTextStylesKeysSchema = z.array( z.union([ z.literal('fontFamily'), z.literal('fontWeight'), z.literal('fontSize'), z.literal('color'), z.literal('fontFeatures'), z.literal('lineHeight'), z.literal('letterSpacing'), z.literal('paragraphSpacing'), z.literal('textAlignHorizontal'), z.literal('textAlignVertical'), z.literal('textDecoration'), z.literal('textIndent'), z.literal('textTransform'), ]), ); export type PossibleTextStylesKeysSchemaType = z.infer; const possibleShadowKeysSchema = z.array( z.union([ z.literal('color'), z.literal('offsetX'), z.literal('offsetY'), z.literal('blurRadius'), z.literal('spreadRadius'), z.literal('type'), ]), ); const possibleBorderKeysSchema = z.array( z.union([ z.literal('color'), z.literal('style'), z.literal('width'), z.literal('rectangleCornerRadii'), ]), ); export const keysPerTokenTypeSelectorSchema = z.object({ textStyle: possibleTextStylesKeysSchema.optional(), shadow: possibleShadowKeysSchema.optional(), border: possibleBorderKeysSchema.optional(), });