import { z } from 'zod'; import { SpecifyError, specifyErrors } from '../errors/index.js'; import { generateBarrelFileParserDefinition } from './parsers-generation/generate-barrel-file/definition.js'; import { postReplaceStringParserDefinition } from './parsers-generation/post-replace-string/definition.js'; import { prettierParserDefinition } from './parsers-generation/prettier/definition.js'; import { svgToJsxParserDefinition } from './parsers-generation/svg-to-jsx/definition.js'; import { svgToTsxParserDefinition } from './parsers-generation/svg-to-tsx/definition.js'; import { svgoParserDefinition } from './parsers-generation/svgo/definition.js'; import { toBitmapFileParserDefinition } from './parsers-generation/to-bitmap-file/definition.js'; import { toCssCustomPropertiesParserDefinition } from './parsers-generation/to-css-custom-properties/definition.js'; import { toCssFontImportParserDefinition } from './parsers-generation/to-css-font-import/definition.js'; import { toCssTextStyleParserDefinition } from './parsers-generation/to-css-text-style/definition.js'; import { toFileParserDefinition } from './parsers-generation/to-file/definition.js'; import { toFlutterParserDefinition } from './parsers-generation/to-flutter/definition.js'; import { toJavascriptParserDefinition } from './parsers-generation/to-javascript/definition.js'; import { toJsonListParserDefinition } from './parsers-generation/to-json-list/definition.js'; import { toJsonParserDefinition } from './parsers-generation/to-json/definition.js'; import { toKotlinParserDefinition } from './parsers-generation/to-kotlin/definition.js'; import { toReactNativeParserDefinition } from './parsers-generation/to-react-native/definition.js'; import { toScssMapParserDefinition } from './parsers-generation/to-scss-map/definition.js'; import { toScssMixinTextStyleParserDefinition } from './parsers-generation/to-scss-mixin-text-style/definition.js'; import { toScssVariablesParserDefinition } from './parsers-generation/to-scss-variables/definition.js'; import { toSdtfParserDefinition } from './parsers-generation/to-sdtf/definition.js'; import { toStyleDictionaryParserDefinition } from './parsers-generation/to-style-dictionnary/definition.js'; import { toSvgFileParserDefinition } from './parsers-generation/to-svg-file/definition.js'; import { toSwiftParserDefinition } from './parsers-generation/to-swift/definition.js'; import { toTailwindParserDefinition } from './parsers-generation/to-tailwind/definition.js'; import { toTypescriptParserDefinition } from './parsers-generation/to-typescript/definition.js'; import { changeCaseParserDefinition } from './parsers-utility/change-case/definition.js'; import { convertColorParserDefinition } from './parsers-utility/convert-color/definition.js'; import { convertDimensionParserDefinition } from './parsers-utility/convert-dimension/definition.js'; import { filterParserDefinition } from './parsers-utility/filter/definition.js'; import { makeLineHeightRelativeParserDefinition } from './parsers-utility/make-line-height-relative/definition.js'; import { prefixByParserDefinition } from './parsers-utility/prefix-by/definition.js'; import { registerViewParserDefinition } from './parsers-utility/register-view/definition.js'; import { replaceStringParserDefinition } from './parsers-utility/replace-string/definition.js'; import { selectModesParserDefinition } from './parsers-utility/select-modes/definition.js'; import { suffixByParserDefinition } from './parsers-utility/suffix-by/definition.js'; import { roundNumberParserDefinition } from './parsers-utility/round-number/definition.js'; /* ------------------------------------------ Registration --------------------------------------------- */ export const builtInParsersDefinitions = [ // generation generateBarrelFileParserDefinition, postReplaceStringParserDefinition, prettierParserDefinition, svgToJsxParserDefinition, svgToTsxParserDefinition, svgoParserDefinition, toBitmapFileParserDefinition, toCssCustomPropertiesParserDefinition, toCssFontImportParserDefinition, toCssTextStyleParserDefinition, toFileParserDefinition, toFlutterParserDefinition, toJavascriptParserDefinition, toJsonParserDefinition, toJsonListParserDefinition, toKotlinParserDefinition, toReactNativeParserDefinition, toScssMapParserDefinition, toScssMixinTextStyleParserDefinition, toScssVariablesParserDefinition, toSdtfParserDefinition, toStyleDictionaryParserDefinition, toSvgFileParserDefinition, toSwiftParserDefinition, toTailwindParserDefinition, toTypescriptParserDefinition, // utility changeCaseParserDefinition, convertColorParserDefinition, convertDimensionParserDefinition, filterParserDefinition, makeLineHeightRelativeParserDefinition, prefixByParserDefinition, registerViewParserDefinition, replaceStringParserDefinition, selectModesParserDefinition, suffixByParserDefinition, roundNumberParserDefinition, ] as const; /* ------------------------------------------ All built-in parsers --------------------------------------------- */ export type BuiltInParsersDefinition = (typeof builtInParsersDefinitions)[number]; export type BuiltInParserName = BuiltInParsersDefinition['name']; export type BuiltInParserNameUnionSchema = z.ZodUnion< Readonly< [ BuiltInParsersDefinition['name'] extends string ? z.ZodLiteral : never, ] > >; export const builtInParserNameUnionSchema = z.union( builtInParsersDefinitions.map(def => z.literal(def.name)) as any, ) as BuiltInParserNameUnionSchema; export type BuiltInParserRuleConfiguration = z.infer< BuiltInParsersDefinition['parserConfigurationSchema'] >; export type BuiltInParserRuleConfigurationsUnionSchema = z.ZodDiscriminatedUnion< 'name', Array >; export const builtInParserRuleConfigurationsUnionSchema = z.discriminatedUnion( 'name', builtInParsersDefinitions.map(def => def.parserConfigurationSchema) as any, ) as BuiltInParserRuleConfigurationsUnionSchema; const builtInParsersMapping = builtInParsersDefinitions.reduce((acc, def) => { acc[def.name] = def; return acc; }, {} as any); export function getBuiltInParserDefinition( parserName: N, ): Extract { const maybeDef = builtInParsersMapping[parserName]; if (!maybeDef) { throw new SpecifyError({ errorKey: specifyErrors.PARSERS_ENGINE_INVALID_PARSER_INPUT.errorKey, publicMessage: `Unknown built-in parser: "${parserName}".`, }); } return maybeDef; } /* ------------------------------------------ Generation parsers --------------------------------------------- */ export type BuiltInGenerationParsersDefinition = Extract< BuiltInParsersDefinition, { kind: 'generation' } >; export type BuiltInGenerationParserName = BuiltInGenerationParsersDefinition['name']; export type BuiltInGenerationParserNameUnionSchema = z.ZodUnion< Readonly< [ BuiltInGenerationParsersDefinition['name'] extends string ? z.ZodLiteral : never, ] > >; export const builtInGenerationParserNameUnionSchema = z.union( builtInParsersDefinitions .filter(def => def.kind === 'generation') .map(def => z.literal(def.name)) as any, ) as BuiltInGenerationParserNameUnionSchema; export type BuiltInGenerationParserRuleConfiguration = z.infer< BuiltInGenerationParsersDefinition['parserConfigurationSchema'] >; export type BuiltInGenerationParserRuleConfigurationsUnionSchema = z.ZodDiscriminatedUnion< 'name', Array >; export const builtInGenerationRuleParserConfigurationsUnionSchema = z.discriminatedUnion( 'name', builtInParsersDefinitions .filter(def => def.kind === 'generation') .map(def => def.parserConfigurationSchema) as any, ) as BuiltInGenerationParserRuleConfigurationsUnionSchema; /* ------------------------------------------ Utility parsers --------------------------------------------- */ export type BuiltInUtilityParsersDefinition = Extract< BuiltInParsersDefinition, { kind: 'utility' } >; export type BuiltInUtilityParserName = BuiltInUtilityParsersDefinition['name']; export type BuiltInUtilityParserNameUnionSchema = z.ZodUnion< Readonly< [ BuiltInUtilityParsersDefinition['name'] extends string ? z.ZodLiteral : never, ] > >; export const builtInUtilityParserNameUnionSchema = z.union( builtInParsersDefinitions .filter(def => def.kind === 'utility') .map(def => z.literal(def.name)) as any, ) as BuiltInUtilityParserNameUnionSchema; export type BuiltInUtilityParserRuleConfiguration = z.infer< BuiltInUtilityParsersDefinition['parserConfigurationSchema'] >; export type BuiltInUtilityParserRuleConfigurationsUnionSchema = z.ZodDiscriminatedUnion< 'name', Array >; export const builtInUtilityParserRuleConfigurationsUnionSchema = z.discriminatedUnion( 'name', builtInParsersDefinitions .filter(def => def.kind === 'utility') .map(def => def.parserConfigurationSchema) as any, ) as BuiltInUtilityParserRuleConfigurationsUnionSchema;