@dsai-io/tools 0.0.1
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.
- package/README.md +186 -0
- package/bin/dsai-tools.mjs +13 -0
- package/dist/cli/index.cjs +9052 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +432 -0
- package/dist/cli/index.d.ts +432 -0
- package/dist/cli/index.js +9018 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/index.cjs +1115 -0
- package/dist/config/index.cjs.map +1 -0
- package/dist/config/index.d.cts +2667 -0
- package/dist/config/index.d.ts +2667 -0
- package/dist/config/index.js +1039 -0
- package/dist/config/index.js.map +1 -0
- package/dist/icons/index.cjs +577 -0
- package/dist/icons/index.cjs.map +1 -0
- package/dist/icons/index.d.cts +473 -0
- package/dist/icons/index.d.ts +473 -0
- package/dist/icons/index.js +557 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.cjs +5584 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +99 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.js +5375 -0
- package/dist/index.js.map +1 -0
- package/dist/tokens/index.cjs +3787 -0
- package/dist/tokens/index.cjs.map +1 -0
- package/dist/tokens/index.d.cts +2070 -0
- package/dist/tokens/index.d.ts +2070 -0
- package/dist/tokens/index.js +3682 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/types-Idj08nad.d.cts +546 -0
- package/dist/types-Idj08nad.d.ts +546 -0
- package/package.json +97 -0
- package/templates/.dsairc.json +37 -0
- package/templates/dsai-config.schema.json +554 -0
- package/templates/dsai.config.mjs +221 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tokens/types.ts","../../src/tokens/validate.ts","../../src/tokens/validate-figma.ts","../../src/tokens/transform.ts","../../src/tokens/sync.ts","../../src/tokens/postprocess.ts","../../src/tokens/build.ts","../../src/tokens/clean.ts","../../src/tokens/merge.ts","../../src/tokens/merge/scanner.ts","../../src/tokens/merge/merger.ts","../../src/tokens/merge/bundler.ts","../../src/tokens/merge/index.ts","../../src/tokens/output/resolver.ts","../../src/tokens/output/index.ts","../../src/tokens/style-dictionary/types.ts","../../src/tokens/style-dictionary/formats/css-dark-mode.ts","../../src/tokens/style-dictionary/formats/css-variables.ts","../../src/tokens/style-dictionary/formats/typescript.ts","../../src/tokens/style-dictionary/formats/index.ts","../../src/tokens/style-dictionary/groups/css.ts","../../src/tokens/style-dictionary/groups/js.ts","../../src/tokens/style-dictionary/groups/scss.ts","../../src/tokens/style-dictionary/groups/index.ts","../../src/tokens/style-dictionary/preprocessors/fix-references.ts","../../src/tokens/style-dictionary/preprocessors/index.ts","../../src/tokens/style-dictionary/transforms/dimension.ts","../../src/tokens/style-dictionary/transforms/font-weight.ts","../../src/tokens/style-dictionary/transforms/line-height.ts","../../src/tokens/style-dictionary/transforms/name.ts","../../src/tokens/style-dictionary/transforms/index.ts","../../src/tokens/style-dictionary/config.ts","../../src/tokens/style-dictionary/index.ts","../../src/tokens/index.ts","../../src/icons/core/optimizer.ts","../../../../../node_modules/.pnpm/sisteransi@1.0.5/node_modules/sisteransi/src/index.js","../../src/config/schema.ts","../../src/config/defaults.ts","../../src/config/resolver.ts","../../src/config/loader.ts","../../src/cli/commands/tokens.ts","../../src/cli/types.ts","../../src/cli/ui/colors.ts","../../src/cli/ui/spinner.ts","../../src/cli/ui/logger.ts","../../src/icons/core/scanner.ts","../../src/icons/utils/naming.ts","../../src/icons/core/parser.ts","../../src/icons/core/index.ts","../../src/icons/generators/react.ts","../../src/icons/generators/svg-sprite.ts","../../src/icons/index.ts","../../src/cli/commands/icons.ts","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/@clack/core/src/utils/settings.ts","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/@clack/core/src/utils/string.ts","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/@clack/core/src/utils/index.ts","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/@clack/core/src/prompts/prompt.ts","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/@clack/core/src/prompts/confirm.ts","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/@clack/core/src/prompts/multi-select.ts","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/@clack/core/src/prompts/password.ts","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/@clack/core/src/prompts/select.ts","../../../../../node_modules/.pnpm/@clack+core@0.5.0/node_modules/@clack/core/src/prompts/text.ts","../../../../../node_modules/.pnpm/@clack+prompts@0.11.0/node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../../../../../node_modules/.pnpm/@clack+prompts@0.11.0/node_modules/@clack/prompts/src/index.ts","../../src/cli/init/detector.ts","../../src/cli/init/package-modifier.ts","../../src/cli/init/templates.ts","../../src/cli/commands/init-enhanced.ts","../../src/cli/commands/config.ts","../../src/version.ts","../../src/cli/create-program.ts","../../src/cli/index.ts"],"names":["path","readFileSync","existsSync","readdirSync","join","statSync","relative","basename","extname","countTokens","dirname","mkdirSync","detectModes","DEFAULT_COLLECTIONS","m","writeFileSync","e","execSync","resolve","rmSync","isToken","b","colors","path3","fs","fs2","path4","path5","fs3","init_merge","path6","fs4","init_types","DEFAULT_BASE_FONT_SIZE","p","r","exports","x","y","z","version","cosmiconfig","pc","ora","k","Command","transformTokens","logger","_","skipOptimization","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","eaw","module","character","codePoint","code","stringToArray","characters","len","i","text","start","end","result","eawLen","chars","char","charLen","emojiRegex","stringWidth","options","ambiguousCharacterWidth","width","eastAsianWidth","ANSI_BACKGROUND_OFFSET","wrapAnsi16","offset","wrapAnsi256","wrapAnsi16m","red","green","blue","styles","foregroundColorNames","backgroundColorNames","assembleStyles","codes","groupName","group","styleName","style","hex","matches","colorString","integer","remainder","value","ansiStyles","ESCAPES","END_CODE","ANSI_ESCAPE_BELL","ANSI_CSI","ANSI_OSC","ANSI_SGR_TERMINATOR","ANSI_ESCAPE_LINK","wrapAnsiCode","wrapAnsiHyperlink","uri","wordLengths","wrapWord","rows","word","columns","isInsideEscape","isInsideLinkEscape","visible","index","characterLength","stringVisibleTrimSpacesRight","words","last","exec","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","pre","groups","wrapAnsi","line","actions","settings","isActionKey","key","action","diffLines","a","aLines","bLines","diff","isWindows","CANCEL_SYMBOL","isCancel","setRawMode","input","block","stdin","output","stdout","overwrite","hideCursor","rl","g","readline","clear","data","name","sequence","str","cursor","dx","dy","v","t","s","Prompt","trackValue","__publicField","render","signal","opts","event","params","cb","cbs","cleanup","subscriber","reject","sink","Writable","chunk","encoding","done","problem","lines","wrap","frame","diffLine","erase","newLines","ConfirmPrompt","confirm","o","l","allSelected","selected","u","SelectPrompt","TextPrompt","s1","s2","s3","color","isUnicodeSupported","process","unicode","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","state","limitOptions","paramMaxItems","outputMaxItems","maxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","option","arr","isTopLimit","isBottomLimit","title","placeholder","active","inactive","select","opt","label","item","multiselect","MultiSelectPrompt","styleOption","footer","ln","note","message","titleLen","strip","sum","msg","cancel","intro","outro","log","parts","firstLine","spinner","indicator","frames","delay","isCI","unblock","loop","isSpinnerActive","_message","_prevMessage","_origin","handleExit","stop","errorEventHandler","signalEventHandler","registerHooks","clearHooks","clearPrevMessage","prevLines","parseMessage","formatTimer","origin","duration","min","secs","frameIndex","indicatorTimer","loadingDots","step","prompts","results","promptNames","prompt","copyFileSync","d","M","Y","program"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Token-specific type definitions\n *\n * Defines types for DTCG-compliant tokens, validation, transformation,\n * and build processes.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// DTCG Token Types\n// ============================================================================\n\n/**\n * DTCG-compliant token value\n * @see https://www.designtokens.org/\n */\nexport interface DTCGToken {\n /** The resolved value of the token */\n $value: unknown;\n\n /** Token type (color, dimension, etc.) */\n $type?: TokenType;\n\n /** Human-readable description */\n $description?: string;\n\n /** Extension data */\n $extensions?: Record<string, unknown>;\n}\n\n/**\n * Legacy Style Dictionary token format\n */\nexport interface LegacyToken {\n /** The resolved value of the token */\n value: unknown;\n\n /** Token type */\n type?: string;\n\n /** Human-readable description */\n description?: string;\n\n /** Comment (older format) */\n comment?: string;\n}\n\n/**\n * Combined token type supporting both DTCG and legacy formats\n */\nexport type Token = DTCGToken | LegacyToken;\n\n/**\n * Token collection (nested structure of tokens or groups)\n */\nexport interface TokenCollection {\n [key: string]: Token | TokenCollection | unknown;\n}\n\n/**\n * Figma export format (from Tokens Studio)\n */\nexport interface FigmaExport {\n [collectionName: string]: FigmaCollection;\n}\n\n/**\n * Single Figma collection with optional modes\n */\nexport interface FigmaCollection {\n /** Mode-specific token values */\n modes?: Record<string, TokenCollection>;\n\n /** Direct tokens if no modes */\n [key: string]: unknown;\n}\n\n// ============================================================================\n// Token Type Constants\n// ============================================================================\n\n/**\n * Valid token types per DTCG specification\n */\nexport const VALID_TOKEN_TYPES = [\n 'color',\n 'dimension',\n 'fontFamily',\n 'fontWeight',\n 'fontStyle',\n 'shadow',\n 'number',\n 'string',\n 'duration',\n 'cubicBezier',\n 'strokeStyle',\n 'border',\n 'transition',\n 'gradient',\n 'typography',\n 'letterSpacing',\n 'lineHeight',\n 'paragraphSpacing',\n 'textDecoration',\n 'textCase',\n] as const;\n\n/**\n * Token type (DTCG specification)\n */\nexport type TokenType = (typeof VALID_TOKEN_TYPES)[number];\n\n// ============================================================================\n// Validation Types\n// ============================================================================\n\n/**\n * Severity level for validation issues\n */\nexport type ValidationSeverity = 'error' | 'warning' | 'info';\n\n/**\n * A single validation issue\n */\nexport interface ValidationIssue {\n /** Token path (e.g., \"color.brand.primary\") */\n path: string;\n\n /** Human-readable message */\n message: string;\n\n /** Issue severity */\n severity: ValidationSeverity;\n\n /** The problematic value (if applicable) */\n value?: unknown;\n\n /** Suggested fix (if applicable) */\n suggestion?: string;\n}\n\n/**\n * Result of token validation\n */\nexport interface ValidationResult {\n /** Whether validation passed (no errors) */\n valid: boolean;\n\n /** Validation errors (blocking issues) */\n errors: ValidationIssue[];\n\n /** Validation warnings (non-blocking) */\n warnings: ValidationIssue[];\n\n /** Total number of tokens validated */\n tokenCount: number;\n\n /** Number of files validated */\n fileCount: number;\n\n /** Validation duration in milliseconds */\n duration?: number;\n}\n\n/**\n * Options for validation\n */\nexport interface ValidateOptions {\n /** Directory containing token files */\n collectionsDir?: string;\n\n /** File patterns to validate */\n patterns?: string[];\n\n /** Enable verbose output */\n verbose?: boolean;\n\n /** Suppress output */\n quiet?: boolean;\n\n /** Treat warnings as errors */\n strict?: boolean;\n}\n\n// ============================================================================\n// Transform Types\n// ============================================================================\n\n/**\n * Options for Figma token transformation\n */\nexport interface TransformOptions {\n /** Source directory with Figma exports */\n sourceDir: string;\n\n /** Output directory for collections */\n collectionsDir: string;\n\n /**\n * Glob patterns for finding source files\n * @example ['theme.json', '*.tokens.json', 'figma-variables-*.json']\n */\n sourcePatterns?: string[];\n\n /**\n * Map of collection names to specific file paths\n * @example { 'primitives': './colors.json', 'semantic': './semantic.json' }\n */\n collectionMapping?: Record<string, string>;\n\n /** Preserve $codeSyntax references from Figma */\n preserveCodeSyntax?: boolean;\n\n /** Modes to ignore during transformation */\n ignoreModes?: string[];\n\n /** Default mode name */\n defaultMode?: string;\n\n /** Dry run (don't write files) */\n dryRun?: boolean;\n\n /** Enable verbose output */\n verbose?: boolean;\n}\n\n/**\n * Result of token transformation\n */\nexport interface TransformResult {\n /** Whether transformation succeeded */\n success: boolean;\n\n /** Files written during transformation */\n filesWritten: string[];\n\n /** Number of tokens processed */\n tokensProcessed: number;\n\n /** Modes detected in Figma export */\n modesDetected: string[];\n\n /** Errors encountered */\n errors: string[];\n\n /** Warnings generated */\n warnings: string[];\n\n /** Duration in milliseconds */\n duration?: number;\n}\n\n// ============================================================================\n// Build Types\n// ============================================================================\n\n/**\n * A single build step\n */\nexport interface BuildStep {\n /** Step name for display */\n name: string;\n\n /** Shell command to run (if external) */\n command?: string;\n\n /** Function to execute (if internal). Returns boolean for success/failure, or undefined */\n fn?: () => boolean | undefined | Promise<boolean | undefined>;\n\n /** Whether to skip this step */\n skip?: boolean;\n\n /** Working directory for command */\n cwd?: string;\n}\n\n/**\n * Options for token build\n */\nexport interface BuildOptions {\n /** Skip validation step */\n skipValidate?: boolean;\n\n /** Skip transformation step */\n skipTransform?: boolean;\n\n /** Only build theme CSS */\n onlyTheme?: boolean;\n\n /** Enable watch mode */\n watch?: boolean;\n\n /** Dry run (don't write files) */\n dryRun?: boolean;\n\n /** Enable verbose output */\n verbose?: boolean;\n\n /** Suppress output */\n quiet?: boolean;\n\n /** Output directory for all formats */\n outputDir?: string;\n\n /** Per-format output directories */\n outputDirs?: Partial<Record<string, string>>;\n\n /** Per-format output file names */\n outputFileNames?: Partial<Record<string, string>>;\n\n /** Additional SCSS directories to merge */\n additionalScssDirectories?: string[];\n\n /** Additional CSS directories to merge */\n additionalCssDirectories?: string[];\n\n /** Merge order for additional styles */\n mergeOrder?: 'before' | 'after';\n\n /** Create combined bundle files */\n createBundle?: boolean;\n\n /** Custom SCSS import header */\n scssImportHeader?: string;\n\n /** Additional directories to watch */\n watchDirectories?: string[];\n\n /** Build pipeline configuration */\n pipeline?: {\n /** Steps to include in the build */\n steps?: Array<\n | 'validate'\n | 'transform'\n | 'style-dictionary'\n | 'sync'\n | 'sass-theme'\n | 'sass-theme-minified'\n | 'postprocess'\n | 'sass-utilities'\n | 'sass-utilities-minified'\n | 'bundle'\n >;\n /** Paths configuration for build steps */\n paths?: {\n syncSource?: string;\n syncTarget?: string;\n sassThemeInput?: string;\n sassThemeOutput?: string;\n sassThemeMinifiedOutput?: string;\n sassUtilitiesInput?: string;\n sassUtilitiesOutput?: string;\n sassUtilitiesMinifiedOutput?: string;\n };\n /** Style Dictionary config file name */\n styleDictionaryConfig?: string;\n };\n}\n\n/**\n * Result of token build\n */\nexport interface BuildResult {\n /** Whether build succeeded */\n success: boolean;\n\n /** Steps that completed successfully */\n stepsCompleted: string[];\n\n /** Steps that failed */\n stepsFailed: string[];\n\n /** Total duration in milliseconds */\n duration: number;\n\n /** Errors encountered */\n errors: string[];\n\n /** Warnings generated */\n warnings: string[];\n\n /** Generated output files */\n outputFiles?: string[];\n}\n\n// ============================================================================\n// Sync Types\n// ============================================================================\n\n/**\n * Options for token sync\n */\nexport interface SyncOptions {\n /** Source file (Style Dictionary output) */\n sourceFile: string;\n\n /** Target file (TypeScript source) */\n targetFile: string;\n\n /** Dry run (don't write files) */\n dryRun?: boolean;\n\n /** Enable verbose output */\n verbose?: boolean;\n}\n\n/**\n * Result of token sync\n */\nexport interface SyncResult {\n /** Whether sync succeeded */\n success: boolean;\n\n /** Number of tokens synced */\n tokensCount: number;\n\n /** Whether file was changed */\n changed: boolean;\n\n /** Errors encountered */\n errors?: string[];\n}\n\n// ============================================================================\n// Postprocess Types\n// ============================================================================\n\n/**\n * A text replacement rule\n */\nexport interface ReplacementRule {\n /** Pattern to search for (string or regex) */\n from: string | RegExp;\n\n /** Replacement string */\n to: string;\n\n /** Optional description */\n description?: string;\n}\n\n/**\n * Options for CSS post-processing\n */\nexport interface PostprocessOptions {\n /** Input CSS file */\n inputFile: string;\n\n /** Output CSS file (defaults to input) */\n outputFile?: string;\n\n /** Replacements to make */\n replacements?: ReplacementRule[];\n\n /** Dry run (don't write files) */\n dryRun?: boolean;\n\n /** Enable verbose output */\n verbose?: boolean;\n}\n\n/**\n * Result of post-processing\n */\nexport interface PostprocessResult {\n /** Whether post-processing succeeded */\n success: boolean;\n\n /** Number of replacements made */\n replacementsMade: number;\n\n /** Output file path */\n outputFile: string;\n\n /** Errors encountered */\n errors?: string[];\n}\n\n// ============================================================================\n// Merge Types\n// ============================================================================\n\n/**\n * Options for merging collections\n */\nexport interface MergeOptions {\n /** Source files to merge */\n sourceFiles: string[];\n\n /** Output file path */\n outputFile: string;\n\n /** Merge strategy for conflicts */\n strategy?: 'first' | 'last' | 'error';\n\n /** Dry run (don't write files) */\n dryRun?: boolean;\n\n /** Enable verbose output */\n verbose?: boolean;\n}\n\n/**\n * Result of collection merge\n */\nexport interface MergeResult {\n /** Whether merge succeeded */\n success: boolean;\n\n /** Number of collections merged */\n collectionsCount: number;\n\n /** Number of tokens in result */\n tokensCount: number;\n\n /** Output file path */\n outputFile: string;\n\n /** Conflicts detected */\n conflicts?: string[];\n\n /** Errors encountered */\n errors?: string[];\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Check if an object is a DTCG token\n */\nexport function isDTCGToken(obj: unknown): obj is DTCGToken {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n return '$value' in obj;\n}\n\n/**\n * Check if an object is a legacy token\n */\nexport function isLegacyToken(obj: unknown): obj is LegacyToken {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n return 'value' in obj && !('$value' in obj);\n}\n\n/**\n * Check if an object is any token type\n */\nexport function isToken(obj: unknown): obj is Token {\n return isDTCGToken(obj) || isLegacyToken(obj);\n}\n\n/**\n * Check if a string is a valid token type\n */\nexport function isValidTokenType(type: string): type is TokenType {\n return VALID_TOKEN_TYPES.includes(type as TokenType);\n}\n\n/**\n * Check if a value is a token reference\n */\nexport function isTokenReference(value: unknown): boolean {\n return typeof value === 'string' && value.startsWith('{') && value.endsWith('}');\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Get the value from a token regardless of format\n */\nexport function getTokenValue(token: Token): unknown {\n return isDTCGToken(token) ? token.$value : token.value;\n}\n\n/**\n * Get the type from a token regardless of format\n */\nexport function getTokenType(token: Token): string | undefined {\n if (isDTCGToken(token)) {\n return token.$type;\n }\n return (token as LegacyToken).type;\n}\n\n/**\n * Get the description from a token regardless of format\n */\nexport function getTokenDescription(token: Token): string | undefined {\n if (isDTCGToken(token)) {\n return token.$description;\n }\n const legacy = token as LegacyToken;\n return legacy.description ?? legacy.comment;\n}\n\n/**\n * Convert a legacy token to DTCG format\n */\nexport function toDTCGToken(token: LegacyToken): DTCGToken {\n const dtcg: DTCGToken = {\n $value: token.value,\n };\n\n if (token.type && isValidTokenType(token.type)) {\n dtcg.$type = token.type;\n }\n\n const desc = token.description ?? token.comment;\n if (desc) {\n dtcg.$description = desc;\n }\n\n return dtcg;\n}\n\n/**\n * Parse a token reference string\n * @param ref - Reference string like \"{color.brand.primary}\"\n * @returns Path segments like [\"color\", \"brand\", \"primary\"]\n */\nexport function parseTokenReference(ref: string): string[] | null {\n if (!isTokenReference(ref)) {\n return null;\n }\n const inner = ref.slice(1, -1);\n return inner.split('.');\n}\n","/**\n * Token validation module\n *\n * Validates design tokens for DTCG compliance and structural integrity.\n *\n * @packageDocumentation\n */\n\n/* eslint-disable no-console, security/detect-non-literal-fs-filename */\n\nimport { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport { join, relative } from 'node:path';\n\nimport {\n getTokenType,\n getTokenValue,\n isDTCGToken,\n isToken,\n isTokenReference,\n isValidTokenType,\n VALID_TOKEN_TYPES,\n} from './types.js';\n\nimport type {\n Token,\n TokenCollection,\n TokenType,\n ValidateOptions,\n ValidationIssue,\n ValidationResult,\n} from './types.js';\nimport type { ResolvedConfig } from '../config/types.js';\n\n// ============================================================================\n// Color Validation\n// ============================================================================\n\n/** Hex color pattern */\nconst HEX_COLOR_PATTERN = /^#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\n\n/** RGB/RGBA pattern */\nconst RGB_PATTERN = /^rgba?\\s*\\(/i;\n\n/** HSL/HSLA pattern */\nconst HSL_PATTERN = /^hsla?\\s*\\(/i;\n\n/** Named colors (common subset) */\nconst NAMED_COLORS = new Set([\n 'transparent',\n 'currentcolor',\n 'inherit',\n 'initial',\n 'unset',\n 'black',\n 'white',\n 'red',\n 'green',\n 'blue',\n 'yellow',\n 'orange',\n 'purple',\n 'pink',\n 'gray',\n 'grey',\n]);\n\n/**\n * Check if a value is a valid color\n */\nfunction isValidColor(value: string): boolean {\n // Hex colors\n if (HEX_COLOR_PATTERN.test(value)) {\n return true;\n }\n // RGB/RGBA\n if (RGB_PATTERN.test(value)) {\n return true;\n }\n // HSL/HSLA\n if (HSL_PATTERN.test(value)) {\n return true;\n }\n // Token references\n if (isTokenReference(value)) {\n return true;\n }\n // Named colors\n if (NAMED_COLORS.has(value.toLowerCase())) {\n return true;\n }\n return false;\n}\n\n// ============================================================================\n// Dimension Validation\n// ============================================================================\n\n/** Valid dimension units */\nconst VALID_UNITS = new Set([\n 'px',\n 'rem',\n 'em',\n '%',\n 'vh',\n 'vw',\n 'vmin',\n 'vmax',\n 'pt',\n 'cm',\n 'mm',\n 'in',\n 'ch',\n 'ex',\n]);\n\n/**\n * Check if a value is a valid dimension\n */\nfunction isValidDimension(value: string): boolean {\n // Zero without unit\n if (value === '0') {\n return true;\n }\n // Token reference\n if (isTokenReference(value)) {\n return true;\n }\n // Parse numeric value and unit manually (safer than regex)\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return false;\n }\n // Find where the numeric part ends\n let i = 0;\n const firstChar = trimmed.charAt(0);\n if (firstChar === '-' || firstChar === '+') {\n i = 1;\n }\n let hasDigits = false;\n let hasDot = false;\n while (i < trimmed.length) {\n const char = trimmed.charAt(i);\n if (char >= '0' && char <= '9') {\n hasDigits = true;\n i++;\n } else if (char === '.' && !hasDot) {\n hasDot = true;\n i++;\n } else {\n break;\n }\n }\n if (!hasDigits) {\n return false;\n }\n // Extract unit part\n const unit = trimmed.slice(i).toLowerCase();\n // Pure number (for unitless values like line-height)\n if (unit === '') {\n return true;\n }\n // Check valid units\n return VALID_UNITS.has(unit);\n}\n\n// ============================================================================\n// Token Validation\n// ============================================================================\n\n/**\n * Validate a single token\n */\nfunction validateSingleToken(\n path: string,\n token: Token,\n errors: ValidationIssue[],\n warnings: ValidationIssue[]\n): void {\n const value = getTokenValue(token);\n const type = getTokenType(token);\n const isDtcg = isDTCGToken(token);\n\n // Warn if not using DTCG format\n if (!isDtcg) {\n warnings.push({\n path,\n message: 'Token uses legacy format. Consider migrating to DTCG ($value, $type).',\n severity: 'warning',\n suggestion: 'Use $value instead of value, $type instead of type',\n });\n }\n\n // Check for missing value\n if (value === undefined || value === null) {\n errors.push({\n path,\n message: 'Token has no value',\n severity: 'error',\n });\n return;\n }\n\n // Check for empty string value\n if (value === '') {\n warnings.push({\n path,\n message: 'Token has empty string value',\n severity: 'warning',\n value,\n });\n }\n\n // Check for missing type\n if (!type) {\n warnings.push({\n path,\n message: 'Token has no type specified',\n severity: 'warning',\n suggestion: `Add $type property with one of: ${VALID_TOKEN_TYPES.slice(0, 5).join(', ')}...`,\n });\n } else if (!isValidTokenType(type)) {\n warnings.push({\n path,\n message: `Unknown token type: \"${type}\"`,\n severity: 'warning',\n value: type,\n suggestion: `Valid types: ${VALID_TOKEN_TYPES.join(', ')}`,\n });\n }\n\n // Type-specific validation\n if (type && typeof value === 'string') {\n validateTypedValue(path, value, type as TokenType, errors);\n }\n}\n\n/**\n * Validate a typed value\n */\nfunction validateTypedValue(\n path: string,\n value: string,\n type: TokenType,\n errors: ValidationIssue[]\n): void {\n switch (type) {\n case 'color':\n if (!isValidColor(value)) {\n errors.push({\n path,\n message: `Invalid color value: \"${value}\"`,\n severity: 'error',\n value,\n suggestion: 'Use hex (#fff), rgb(), hsl(), or token reference',\n });\n }\n break;\n\n case 'dimension':\n if (!isValidDimension(value)) {\n errors.push({\n path,\n message: `Invalid dimension value: \"${value}\"`,\n severity: 'error',\n value,\n suggestion: 'Use value with unit (16px, 1rem) or token reference',\n });\n }\n break;\n\n case 'fontWeight':\n if (!isValidFontWeight(value)) {\n errors.push({\n path,\n message: `Invalid fontWeight value: \"${value}\"`,\n severity: 'error',\n value,\n suggestion: 'Use numeric (100-900) or keyword (normal, bold)',\n });\n }\n break;\n\n // Add more type-specific validations as needed\n default:\n // Other types pass through\n break;\n }\n}\n\n/**\n * Check if a value is a valid font weight\n */\nfunction isValidFontWeight(value: string): boolean {\n // Numeric weights\n const numeric = parseInt(value, 10);\n if (!Number.isNaN(numeric) && numeric >= 1 && numeric <= 1000) {\n return true;\n }\n // Keywords\n const keywords = ['normal', 'bold', 'lighter', 'bolder'];\n if (keywords.includes(value.toLowerCase())) {\n return true;\n }\n // Token reference\n if (isTokenReference(value)) {\n return true;\n }\n return false;\n}\n\n// ============================================================================\n// Collection Validation\n// ============================================================================\n\n/**\n * Recursively validate a token collection\n */\nfunction validateCollection(\n collection: TokenCollection,\n basePath: string,\n errors: ValidationIssue[],\n warnings: ValidationIssue[],\n tokenCount: { count: number }\n): void {\n for (const [key, value] of Object.entries(collection)) {\n // Skip metadata keys\n if (key.startsWith('$')) {\n continue;\n }\n\n const path = basePath ? `${basePath}.${key}` : key;\n\n if (isToken(value)) {\n tokenCount.count += 1;\n validateSingleToken(path, value, errors, warnings);\n } else if (typeof value === 'object' && value !== null) {\n validateCollection(value as TokenCollection, path, errors, warnings, tokenCount);\n }\n }\n}\n\n/**\n * Validate a JSON token file\n */\nfunction validateFile(\n filePath: string,\n errors: ValidationIssue[],\n warnings: ValidationIssue[]\n): number {\n try {\n const content = readFileSync(filePath, 'utf-8');\n const data = JSON.parse(content) as TokenCollection;\n const tokenCount = { count: 0 };\n\n validateCollection(data, '', errors, warnings, tokenCount);\n\n return tokenCount.count;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n errors.push({\n path: filePath,\n message: `Failed to parse file: ${errorMessage}`,\n severity: 'error',\n });\n return 0;\n }\n}\n\n/**\n * Find all JSON files recursively in a directory\n */\nfunction findJsonFiles(dir: string, files: string[] = []): string[] {\n if (!existsSync(dir)) {\n return files;\n }\n\n const entries = readdirSync(dir);\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n\n if (stat.isDirectory()) {\n findJsonFiles(fullPath, files);\n } else if (entry.endsWith('.json')) {\n files.push(fullPath);\n }\n }\n\n return files;\n}\n\n// ============================================================================\n// Main Validation Function\n// ============================================================================\n\n/**\n * Validate all tokens in a directory\n *\n * @param config - Resolved configuration\n * @param options - Validation options\n * @returns Validation result\n *\n * @example\n * ```typescript\n * import { validateTokens, loadConfig } from '@dsai-io/tools';\n *\n * const { config } = await loadConfig();\n * const result = await validateTokens(config);\n *\n * if (!result.valid) {\n * console.error('Validation failed:', result.errors);\n * }\n * ```\n */\nexport async function validateTokens(\n config: ResolvedConfig,\n options: ValidateOptions = {}\n): Promise<ValidationResult> {\n const startTime = Date.now();\n const { verbose = false, quiet = false, strict = false } = options;\n\n const errors: ValidationIssue[] = [];\n const warnings: ValidationIssue[] = [];\n let totalTokens = 0;\n let fileCount = 0;\n\n // Use provided directory or config\n const collectionsDir = options.collectionsDir ?? config.tokens.collectionsDir;\n\n if (!existsSync(collectionsDir)) {\n return {\n valid: false,\n errors: [\n {\n path: collectionsDir,\n message: 'Collections directory does not exist',\n severity: 'error',\n },\n ],\n warnings: [],\n tokenCount: 0,\n fileCount: 0,\n duration: Date.now() - startTime,\n };\n }\n\n // Find all JSON files\n const jsonFiles = findJsonFiles(collectionsDir);\n\n if (!quiet) {\n logInfo(`Validating ${jsonFiles.length} token files...`);\n }\n\n // Validate each file\n for (const file of jsonFiles) {\n fileCount += 1;\n const relativePath = relative(collectionsDir, file);\n\n if (verbose) {\n logDebug(`Validating: ${relativePath}`);\n }\n\n const tokenCount = validateFile(file, errors, warnings);\n totalTokens += tokenCount;\n }\n\n // Determine validity\n const valid = strict ? errors.length === 0 && warnings.length === 0 : errors.length === 0;\n\n // Report results\n if (!quiet) {\n if (valid) {\n logSuccess(`Validated ${totalTokens} tokens in ${fileCount} files`);\n if (warnings.length > 0) {\n logWarn(`${warnings.length} warnings found`);\n }\n } else {\n logError(`Validation failed with ${errors.length} errors`);\n }\n }\n\n return {\n valid,\n errors,\n warnings,\n tokenCount: totalTokens,\n fileCount,\n duration: Date.now() - startTime,\n };\n}\n\n/**\n * Validate tokens and exit with code (for CLI usage)\n *\n * @param config - Resolved configuration\n * @param options - Validation options\n */\nexport async function validateTokensCLI(\n config: ResolvedConfig,\n options: ValidateOptions = {}\n): Promise<void> {\n const result = await validateTokens(config, { ...options, verbose: true });\n\n if (!result.valid) {\n for (const error of result.errors) {\n console.error(`ā ${error.path}: ${error.message}`);\n }\n process.exit(1);\n }\n\n for (const warning of result.warnings) {\n console.warn(`ā ļø ${warning.path}: ${warning.message}`);\n }\n}\n\n// ============================================================================\n// Simple Logging (will be replaced with proper logger in future)\n// ============================================================================\n\nfunction logInfo(message: string): void {\n console.info(`ā¹ļø ${message}`);\n}\n\nfunction logDebug(message: string): void {\n console.info(`š ${message}`);\n}\n\nfunction logSuccess(message: string): void {\n console.info(`ā
${message}`);\n}\n\nfunction logWarn(message: string): void {\n console.warn(`ā ļø ${message}`);\n}\n\nfunction logError(message: string): void {\n console.error(`ā ${message}`);\n}\n","/**\n * Figma Export Validation module\n *\n * Validates Figma token exports before transformation to ensure\n * they meet the expected structure and format requirements.\n *\n * @packageDocumentation\n */\n\n/* eslint-disable no-console, security/detect-non-literal-fs-filename */\n\nimport { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport { basename, extname, join } from 'node:path';\n\nimport { isDTCGToken, isLegacyToken, isToken, isValidTokenType } from './types.js';\n\nimport type { FigmaCollection, FigmaExport, ValidationIssue, ValidationResult } from './types.js';\nimport type { ResolvedConfig } from '../config/types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Expected structure for a Figma collection\n */\ninterface ExpectedCollection {\n /** File name for this collection */\n input: string;\n /** Whether the collection has mode variants (Light/Dark) */\n modeAware: boolean;\n /** Expected mode names */\n modes?: string[];\n}\n\n/**\n * Expected collections configuration\n */\ninterface ExpectedCollections {\n [key: string]: ExpectedCollection;\n}\n\n/**\n * Figma validation options\n */\nexport interface ValidateFigmaOptions {\n /** Path to the figma-exports directory */\n exportsDir?: string;\n /** Expected collection definitions */\n collections?: ExpectedCollections;\n /** Strict mode - treat warnings as errors */\n strict?: boolean;\n /** Skip missing files */\n skipMissing?: boolean;\n /** Configuration object */\n config?: ResolvedConfig;\n}\n\n/**\n * Figma validation result\n */\nexport interface ValidateFigmaResult extends ValidationResult {\n /** Per-file validation results */\n files: Map<string, ValidationResult>;\n /** Detected modes across all files */\n detectedModes: Set<string>;\n /** Missing expected files */\n missingFiles: string[];\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default expected collections configuration\n */\nconst DEFAULT_COLLECTIONS: ExpectedCollections = {\n foundation: {\n input: 'foundation.json',\n modeAware: true,\n modes: ['Light', 'Dark'],\n },\n typography: {\n input: 'typography.json',\n modeAware: false,\n modes: ['Base'],\n },\n spacing: {\n input: 'spacing.json',\n modeAware: false,\n modes: ['Base'],\n },\n radius: {\n input: 'radius.json',\n modeAware: false,\n modes: ['Base'],\n },\n layout: {\n input: 'layout.json',\n modeAware: false,\n modes: ['Base'],\n },\n shadows: {\n input: 'shadows.json',\n modeAware: false,\n modes: ['Base'],\n },\n};\n\n// ============================================================================\n// Validation Helpers\n// ============================================================================\n\n/**\n * Validate a single token from Figma export\n */\nfunction validateFigmaToken(\n path: string,\n token: unknown,\n errors: ValidationIssue[],\n warnings: ValidationIssue[]\n): void {\n if (!isToken(token)) {\n // Not a token object, might be a nested group\n return;\n }\n\n // Check for required $value\n if (isDTCGToken(token)) {\n if (token.$value === undefined || token.$value === null) {\n errors.push({\n path,\n message: 'Token has $value property but value is undefined or null',\n severity: 'error',\n });\n }\n\n // Validate token type if present\n if (token.$type !== undefined) {\n if (!isValidTokenType(token.$type)) {\n warnings.push({\n path,\n message: `Unknown token type: ${token.$type}`,\n severity: 'warning',\n });\n }\n }\n } else if (isLegacyToken(token)) {\n if (token.value === undefined || token.value === null) {\n errors.push({\n path,\n message: 'Token has value property but value is undefined or null',\n severity: 'error',\n });\n }\n\n // Suggest migrating to DTCG format\n warnings.push({\n path,\n message: 'Token uses legacy format (value instead of $value), consider migrating to DTCG',\n severity: 'warning',\n });\n }\n}\n\n/**\n * Recursively validate a token tree\n */\nfunction validateTokenTree(\n obj: unknown,\n basePath: string,\n errors: ValidationIssue[],\n warnings: ValidationIssue[]\n): void {\n if (obj === null || typeof obj !== 'object') {\n return;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const path = basePath ? `${basePath}.${key}` : key;\n\n // Check if this is a token\n if (isToken(value)) {\n validateFigmaToken(path, value, errors, warnings);\n } else if (typeof value === 'object' && value !== null) {\n // Recursively validate nested objects\n validateTokenTree(value, path, errors, warnings);\n }\n }\n}\n\n/**\n * Validate a Figma collection structure\n */\nfunction validateCollectionStructure(\n data: FigmaExport,\n collectionName: string,\n expectedCollection: ExpectedCollection,\n errors: ValidationIssue[],\n warnings: ValidationIssue[]\n): Set<string> {\n const detectedModes = new Set<string>();\n\n // Find the collection in the data\n const collection = Object.entries(data).find(\n ([key]) => key.toLowerCase() === collectionName.toLowerCase()\n )?.[1] as FigmaCollection | undefined;\n\n if (!collection) {\n errors.push({\n path: collectionName,\n message: `Expected collection \"${collectionName}\" not found in export`,\n severity: 'error',\n });\n return detectedModes;\n }\n\n // Validate modes structure\n if (collection.modes) {\n const modes = Object.keys(collection.modes);\n\n for (const mode of modes) {\n detectedModes.add(mode);\n }\n\n // Check if expected modes are present\n if (expectedCollection.modeAware && expectedCollection.modes) {\n for (const expectedMode of expectedCollection.modes) {\n if (!modes.includes(expectedMode)) {\n warnings.push({\n path: `${collectionName}.modes`,\n message: `Expected mode \"${expectedMode}\" not found, available modes: ${modes.join(', ')}`,\n severity: 'warning',\n });\n }\n }\n }\n\n // Validate tokens in each mode\n for (const [modeName, modeData] of Object.entries(collection.modes)) {\n if (modeData && typeof modeData === 'object') {\n validateTokenTree(modeData, `${collectionName}.modes.${modeName}`, errors, warnings);\n }\n }\n } else {\n // No modes structure, validate at collection level\n validateTokenTree(collection, collectionName, errors, warnings);\n }\n\n return detectedModes;\n}\n\n// ============================================================================\n// Main Validation Functions\n// ============================================================================\n\n/**\n * Validate a single Figma export file\n */\nexport function validateFigmaFile(\n filePath: string,\n expectedCollection?: ExpectedCollection\n): ValidationResult & { detectedModes: Set<string> } {\n const errors: ValidationIssue[] = [];\n const warnings: ValidationIssue[] = [];\n const detectedModes = new Set<string>();\n let tokenCount = 0;\n\n // Check file exists\n if (!existsSync(filePath)) {\n errors.push({\n path: filePath,\n message: 'File not found',\n severity: 'error',\n });\n return { valid: false, errors, warnings, detectedModes, tokenCount: 0, fileCount: 0 };\n }\n\n // Parse JSON\n let data: FigmaExport;\n try {\n const content = readFileSync(filePath, 'utf-8');\n data = JSON.parse(content) as FigmaExport;\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n errors.push({\n path: filePath,\n message: `Failed to parse JSON: ${message}`,\n severity: 'error',\n });\n return { valid: false, errors, warnings, detectedModes, tokenCount: 0, fileCount: 1 };\n }\n\n // Validate basic structure\n if (data === null || typeof data !== 'object' || Array.isArray(data)) {\n errors.push({\n path: filePath,\n message: 'Figma export must be a JSON object',\n severity: 'error',\n });\n return { valid: false, errors, warnings, detectedModes, tokenCount: 0, fileCount: 1 };\n }\n\n // Get collection name from filename\n const fileName = basename(filePath, extname(filePath));\n const collectionName = fileName.charAt(0).toUpperCase() + fileName.slice(1);\n\n // Count tokens helper\n const countTokens = (obj: unknown): number => {\n if (obj === null || typeof obj !== 'object') {\n return 0;\n }\n if (isToken(obj)) {\n return 1;\n }\n let count = 0;\n for (const value of Object.values(obj)) {\n count += countTokens(value);\n }\n return count;\n };\n\n // Validate collection structure if expected collection provided\n if (expectedCollection) {\n const modes = validateCollectionStructure(\n data,\n collectionName,\n expectedCollection,\n errors,\n warnings\n );\n for (const mode of modes) {\n detectedModes.add(mode);\n }\n } else {\n // General validation without expected structure\n for (const [key, value] of Object.entries(data)) {\n if (typeof value === 'object' && value !== null) {\n const collection = value as FigmaCollection;\n if (collection.modes) {\n for (const mode of Object.keys(collection.modes)) {\n detectedModes.add(mode);\n }\n }\n validateTokenTree(value, key, errors, warnings);\n }\n }\n }\n\n tokenCount = countTokens(data);\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n detectedModes,\n tokenCount,\n fileCount: 1,\n };\n}\n\n/**\n * Validate all Figma exports in a directory\n */\nexport function validateFigmaExports(options: ValidateFigmaOptions = {}): ValidateFigmaResult {\n const {\n exportsDir,\n collections = DEFAULT_COLLECTIONS,\n strict = false,\n skipMissing = false,\n } = options;\n\n const errors: ValidationIssue[] = [];\n const warnings: ValidationIssue[] = [];\n const files = new Map<string, ValidationResult>();\n const detectedModes = new Set<string>();\n const missingFiles: string[] = [];\n let totalTokenCount = 0;\n let totalFileCount = 0;\n\n // Resolve exports directory\n const targetDir = exportsDir ?? options.config?.tokens.sourceDir;\n\n if (!targetDir) {\n errors.push({\n path: 'config',\n message: 'Figma exports directory not specified',\n severity: 'error',\n });\n return {\n valid: false,\n errors,\n warnings,\n files,\n detectedModes,\n missingFiles,\n tokenCount: 0,\n fileCount: 0,\n };\n }\n\n // Check directory exists\n if (!existsSync(targetDir)) {\n errors.push({\n path: targetDir,\n message: 'Figma exports directory not found',\n severity: 'error',\n });\n return {\n valid: false,\n errors,\n warnings,\n files,\n detectedModes,\n missingFiles,\n tokenCount: 0,\n fileCount: 0,\n };\n }\n\n // Validate each expected collection\n for (const [_name, expectedCollection] of Object.entries(collections)) {\n const filePath = join(targetDir, expectedCollection.input);\n\n if (!existsSync(filePath)) {\n missingFiles.push(expectedCollection.input);\n if (!skipMissing) {\n errors.push({\n path: filePath,\n message: `Expected Figma export \"${expectedCollection.input}\" not found`,\n severity: 'error',\n });\n }\n continue;\n }\n\n const result = validateFigmaFile(filePath, expectedCollection);\n files.set(expectedCollection.input, {\n valid: result.valid,\n errors: result.errors,\n warnings: result.warnings,\n tokenCount: result.tokenCount,\n fileCount: result.fileCount,\n });\n\n // Aggregate results\n errors.push(...result.errors);\n warnings.push(...result.warnings);\n totalTokenCount += result.tokenCount;\n totalFileCount += result.fileCount;\n for (const mode of result.detectedModes) {\n detectedModes.add(mode);\n }\n }\n\n // Check for unexpected files in the exports directory\n try {\n const existingFiles = readdirSync(targetDir).filter(\n (f) => f.endsWith('.json') && statSync(join(targetDir, f)).isFile()\n );\n const expectedFiles = new Set(Object.values(collections).map((c) => c.input));\n\n for (const file of existingFiles) {\n if (!expectedFiles.has(file)) {\n warnings.push({\n path: join(targetDir, file),\n message: `Unexpected file in exports directory: ${file}`,\n severity: 'warning',\n });\n }\n }\n } catch {\n // Ignore read errors\n }\n\n // In strict mode, treat warnings as errors\n const effectiveErrors = strict ? [...errors, ...warnings] : errors;\n\n return {\n valid: effectiveErrors.length === 0,\n errors,\n warnings,\n files,\n detectedModes,\n missingFiles,\n tokenCount: totalTokenCount,\n fileCount: totalFileCount,\n };\n}\n\n/**\n * Detect modes from Figma export data\n */\nexport function detectModes(data: FigmaExport, collectionName?: string): string[] {\n if (!data || typeof data !== 'object') {\n return ['Base'];\n }\n\n // If collection name is specified, look for that collection\n if (collectionName) {\n const collection = Object.entries(data).find(\n ([key]) => key.toLowerCase() === collectionName.toLowerCase()\n )?.[1] as FigmaCollection | undefined;\n\n if (collection?.modes) {\n return Object.keys(collection.modes);\n }\n return ['Base'];\n }\n\n // Otherwise, look for modes in any collection\n for (const [, value] of Object.entries(data)) {\n if (typeof value === 'object' && value !== null) {\n const collection = value as FigmaCollection;\n if (collection.modes) {\n return Object.keys(collection.modes);\n }\n }\n }\n\n return ['Base'];\n}\n\n// ============================================================================\n// CLI Support\n// ============================================================================\n\n/**\n * CLI entry point for Figma validation\n */\nexport function validateFigmaCLI(\n exportsDir: string,\n options: Omit<ValidateFigmaOptions, 'exportsDir'> = {}\n): boolean {\n console.info(`\\nš Validating Figma exports in: ${exportsDir}\\n`);\n\n const result = validateFigmaExports({ ...options, exportsDir });\n\n // Report results per file\n for (const [file, fileResult] of result.files) {\n if (fileResult.errors.length === 0 && fileResult.warnings.length === 0) {\n console.info(`ā
${file}`);\n } else {\n console.info(`\\nš ${file}`);\n for (const error of fileResult.errors) {\n console.error(` ā ${error.path}: ${error.message}`);\n }\n for (const warning of fileResult.warnings) {\n console.warn(` ā ļø ${warning.path}: ${warning.message}`);\n }\n }\n }\n\n // Report missing files\n if (result.missingFiles.length > 0) {\n console.warn(`\\nā ļø Missing files: ${result.missingFiles.join(', ')}`);\n }\n\n // Report detected modes\n if (result.detectedModes.size > 0) {\n console.info(`\\nš Detected modes: ${[...result.detectedModes].join(', ')}`);\n }\n\n // Summary\n console.info(`\\n${'ā'.repeat(50)}`);\n if (result.valid) {\n console.info('ā
All Figma exports are valid');\n } else {\n console.error(\n `ā Validation failed: ${result.errors.length} error(s), ${result.warnings.length} warning(s)`\n );\n }\n\n return result.valid;\n}\n","/**\n * Token Transformation module\n *\n * Transforms Figma token exports to Style Dictionary format with DTCG compliance.\n *\n * @packageDocumentation\n */\n\n/* eslint-disable no-console, security/detect-non-literal-fs-filename */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { basename, dirname, extname, join } from 'node:path';\n\nimport type {\n DTCGToken,\n FigmaExport,\n TokenType,\n TransformOptions,\n TransformResult,\n} from './types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Extractor function type\n */\ntype ExtractorFn = (data: FigmaExport, mode?: string) => Record<string, unknown>;\n\n/**\n * Collection output configuration\n */\ninterface CollectionOutput {\n /** Output file path relative to output directory */\n file: string;\n /** Extractor function for this output */\n extractor: ExtractorFn;\n}\n\n/**\n * Collection configuration\n */\ninterface CollectionConfig {\n /** Input filename */\n input: string;\n /** Whether collection has mode variants (Light/Dark) */\n modeAware: boolean;\n /** Output configurations */\n outputs: CollectionOutput[];\n}\n\n/**\n * Collections configuration map\n */\ninterface CollectionsConfig {\n [key: string]: CollectionConfig;\n}\n\n/**\n * Transform options specific to token values\n */\ninterface TokenTransformOptions {\n /** Font stack to prepend font name to */\n fontStack?: string;\n /** Token path for context-aware transformations */\n tokenPath?: string;\n /** Token scopes from Figma */\n scopes?: string[];\n /** Whether value represents a circle (50%) */\n isCircle?: boolean;\n /** Whether value represents a pill (9999px) */\n isPill?: boolean;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** Keys that could cause prototype pollution */\nconst UNSAFE_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n/** Check if a key is safe from prototype pollution */\nfunction isSafeKey(key: string): boolean {\n return !UNSAFE_KEYS.has(key);\n}\n\n/**\n * Safe nested property access for objects with index signatures\n */\nfunction getNestedValue(obj: unknown, ...keys: string[]): unknown {\n let current: unknown = obj;\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n if (!isSafeKey(key)) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\n// ============================================================================\n// Value Transformation\n// ============================================================================\n\n/**\n * Check if a token should remain unitless\n */\nfunction shouldKeepUnitless(_type: string, scopes: string[] = [], tokenPath = ''): boolean {\n // Font weights must be unitless (300, 400, 700, etc.)\n if (scopes.includes('FONT_WEIGHT')) {\n return true;\n }\n\n // Line heights should be unitless for proper inheritance (1, 1.5, 2, etc.)\n if (scopes.includes('LINE_HEIGHT')) {\n return true;\n }\n\n // Grid configuration values should be unitless (12 columns, 6 row-columns, etc.)\n const pathLower = tokenPath.toLowerCase();\n if (pathLower.includes('columns') || pathLower.includes('row-columns')) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if px units should be added to a number value\n */\nfunction shouldAddUnit(type: string, scopes: string[] = [], tokenPath = ''): boolean {\n // Don't add units to font-weights, line-heights, or grid configuration\n if (shouldKeepUnitless(type, scopes, tokenPath)) {\n return false;\n }\n\n return type === 'number';\n}\n\n/**\n * Transform value based on type\n */\nexport function transformValue(\n value: unknown,\n type: string | undefined,\n options: TokenTransformOptions = {}\n): unknown {\n // Handle font family special case - prepend font name to font stack\n if (type === 'string' && options.fontStack && typeof value === 'string') {\n const fontName = value;\n const stack = options.fontStack;\n\n // Check if font name is already in the stack (avoid duplicates)\n if (stack.toLowerCase().includes(fontName.toLowerCase())) {\n return stack;\n }\n\n // Prepend font name to stack\n return `${fontName}, ${stack}`;\n }\n\n // Handle line-height: keep as unitless number (CSS best practice)\n if (\n typeof value === 'number' &&\n shouldKeepUnitless(type ?? '', options.scopes, options.tokenPath)\n ) {\n return value;\n }\n\n // Handle numbers that should be dimensions\n if (typeof value === 'number' && shouldAddUnit(type ?? '', options.scopes, options.tokenPath)) {\n // Special case for circle radius (percentage)\n if (options.isCircle) {\n return '50%';\n }\n // Special case for pill radius\n if (options.isPill) {\n return '9999px';\n }\n return `${value}px`;\n }\n\n // Return value as-is for colors, strings, etc.\n return value;\n}\n\n/**\n * Transform type from Figma to DTCG standard\n */\nexport function transformType(figmaType: string | undefined): TokenType | undefined {\n if (!figmaType) {\n return undefined;\n }\n\n const typeMap: Record<string, TokenType> = {\n number: 'dimension',\n string: 'fontFamily',\n color: 'color',\n };\n\n return typeMap[figmaType] ?? (figmaType as TokenType);\n}\n\n/**\n * Transform a single token from Figma format to DTCG-compliant format\n */\nexport function transformToken(\n figmaToken: unknown,\n options: TokenTransformOptions = {}\n): DTCGToken | null {\n if (!figmaToken || typeof figmaToken !== 'object') {\n return null;\n }\n\n const tokenObj = figmaToken as Record<string, unknown>;\n\n // Skip if this is not a leaf token (no $value property)\n if (!Object.hasOwn(tokenObj, '$value')) {\n return null;\n }\n\n // Pass scopes to transformValue for type-specific handling\n const transformOptions: TokenTransformOptions = {\n ...options,\n scopes: (tokenObj['$scopes'] as string[] | undefined) ?? [],\n };\n\n const rawType = tokenObj['$type'] as string | undefined;\n const transformedType = transformType(rawType);\n\n // DTCG Format: Keep $ prefix for all properties\n const token: DTCGToken = {\n $value: transformValue(tokenObj['$value'], rawType, transformOptions),\n $type: transformedType ?? 'string',\n };\n\n // Add description if present (DTCG property)\n if (tokenObj['$description'] && typeof tokenObj['$description'] === 'string') {\n token.$description = tokenObj['$description'];\n }\n\n // Preserve extensions (DTCG property) - keeps all metadata\n if (tokenObj['$extensions'] && typeof tokenObj['$extensions'] === 'object') {\n token.$extensions = tokenObj['$extensions'] as Record<string, unknown>;\n }\n\n return token;\n}\n\n/**\n * Recursively transform nested token objects\n */\nexport function transformTokenTree(\n obj: unknown,\n parentKey = '',\n options: Record<string, TokenTransformOptions> = {}\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {\n return result;\n }\n\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n // Build the full path for this token\n const currentPath = parentKey ? `${parentKey}.${key}` : key;\n\n // Try to transform as a token\n const tokenOptions: TokenTransformOptions = {\n ...(options[key] ?? {}),\n tokenPath: currentPath,\n };\n const transformed = transformToken(value, tokenOptions);\n\n if (transformed) {\n result[key] = transformed;\n } else if (typeof value === 'object' && value !== null) {\n // Recursively process nested objects\n const nested = transformTokenTree(\n value,\n currentPath,\n (options[key] as Record<string, TokenTransformOptions>) ?? {}\n );\n if (Object.keys(nested).length > 0) {\n result[key] = nested;\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Extractors\n// ============================================================================\n\n/**\n * Extract brand colors from foundation collection\n */\nfunction extractBrandColors(data: FigmaExport, mode = 'Light'): Record<string, unknown> {\n const brandData = getNestedValue(data, 'Foundation', 'modes', mode, 'colors', 'brand');\n\n if (!brandData) {\n console.warn(`No brand colors found in ${mode} mode`);\n return {};\n }\n\n return {\n color: transformTokenTree(brandData),\n };\n}\n\n/**\n * Extract theme colors from foundation collection\n */\nfunction extractThemeColors(data: FigmaExport, mode = 'Light'): Record<string, unknown> {\n const themeData = getNestedValue(data, 'Foundation', 'modes', mode, 'colors', 'theme');\n\n if (!themeData) {\n console.warn(`No theme colors found in ${mode} mode`);\n return {};\n }\n\n return {\n theme: transformTokenTree(themeData),\n };\n}\n\n/**\n * Extract semantic/component colors from foundation collection\n */\nfunction extractSemanticColors(data: FigmaExport, mode = 'Light'): Record<string, unknown> {\n const semantic = getNestedValue(data, 'Foundation', 'modes', mode, 'semantic');\n\n if (!semantic) {\n console.warn(`No semantic colors found in ${mode} mode`);\n return {};\n }\n\n return {\n semantic: transformTokenTree(semantic),\n };\n}\n\n/**\n * Extract neutral colors (black, white, grays)\n */\nfunction extractNeutralColors(data: FigmaExport, mode = 'Light'): Record<string, unknown> {\n const neutral = getNestedValue(data, 'Foundation', 'modes', mode, 'colors', 'neutral');\n\n if (!neutral) {\n console.warn(`No neutral colors found in ${mode} mode`);\n return {};\n }\n\n return {\n neutral: transformTokenTree(neutral),\n };\n}\n\n/**\n * Extract background colors\n */\nfunction extractBackgroundColors(data: FigmaExport, mode = 'Light'): Record<string, unknown> {\n const background = getNestedValue(data, 'Foundation', 'modes', mode, 'colors', 'background');\n\n if (!background) {\n console.warn(`No background colors found in ${mode} mode`);\n return {};\n }\n\n return {\n background: transformTokenTree(background),\n };\n}\n\n/**\n * Extract opacity scale\n */\nfunction extractOpacityColors(data: FigmaExport, mode = 'Light'): Record<string, unknown> {\n const opacity = getNestedValue(data, 'Foundation', 'modes', mode, 'colors', 'opacity');\n\n if (!opacity) {\n console.warn(`No opacity tokens found in ${mode} mode`);\n return {};\n }\n\n return {\n opacity: transformTokenTree(opacity),\n };\n}\n\n/**\n * Extract border colors\n */\nfunction extractBorderColors(data: FigmaExport, mode = 'Light'): Record<string, unknown> {\n const borderColor = getNestedValue(data, 'Foundation', 'modes', mode, 'borders', 'color');\n\n if (!borderColor) {\n console.warn(`No border color tokens found in ${mode} mode`);\n return {};\n }\n\n return {\n border: {\n color: transformTokenTree(borderColor),\n },\n };\n}\n\n/**\n * Extract border widths\n */\nfunction extractBorderWidths(data: FigmaExport, mode = 'Light'): Record<string, unknown> {\n const borderWidth = getNestedValue(data, 'Foundation', 'modes', mode, 'borders', 'width');\n\n if (!borderWidth) {\n console.warn(`No border width tokens found in ${mode} mode`);\n return {};\n }\n\n return {\n border: {\n width: transformTokenTree(borderWidth),\n },\n };\n}\n\n/**\n * Extract typography tokens\n */\nfunction extractTypography(data: FigmaExport): Record<string, unknown> {\n const base = getNestedValue(data, 'Typography', 'modes', 'Base') as\n | Record<string, unknown>\n | undefined;\n\n if (!base) {\n console.warn('No typography tokens found');\n return {};\n }\n\n // Special handling for font families - use font stacks from extensions\n const options: Record<string, TokenTransformOptions> = {};\n const fontFamily = base['fontFamily'] as Record<string, Record<string, unknown>> | undefined;\n if (fontFamily) {\n for (const key of Object.keys(fontFamily)) {\n const fontToken = fontFamily[key];\n const extensions = fontToken?.['$extensions'] as\n | Record<string, Record<string, string>>\n | undefined;\n const fontStack = extensions?.['platform']?.['fontStack'];\n if (fontStack) {\n options[key] = { fontStack };\n }\n }\n }\n\n return {\n typography: transformTokenTree(base, '', { fontFamily: options } as Record<\n string,\n TokenTransformOptions\n >),\n };\n}\n\n/**\n * Extract spacing tokens\n */\nfunction extractSpacing(data: FigmaExport): Record<string, unknown> {\n const base = getNestedValue(data, 'Spacing', 'modes', 'Base', 'spacing');\n\n if (!base) {\n console.warn('No spacing tokens found');\n return {};\n }\n\n return {\n spacing: transformTokenTree(base),\n };\n}\n\n/**\n * Extract border radius tokens\n */\nfunction extractRadius(data: FigmaExport): Record<string, unknown> {\n // Support both 'border-radius' (Bootstrap naming) and 'radius' (legacy Figma naming)\n const base =\n getNestedValue(data, 'Radius', 'modes', 'Base', 'border-radius') ||\n getNestedValue(data, 'Radius', 'modes', 'Base', 'radius');\n\n if (!base) {\n console.warn('No radius tokens found');\n return {};\n }\n\n // Special handling for circle and pill\n const options: Record<string, TokenTransformOptions> = {\n circle: { isCircle: true },\n pill: { isPill: true },\n };\n\n return {\n border: {\n radius: transformTokenTree(base, '', options),\n },\n };\n}\n\n/**\n * Extract breakpoint tokens\n */\nfunction extractBreakpoints(data: FigmaExport): Record<string, unknown> {\n const breakpoints = getNestedValue(data, 'Layout', 'modes', 'Base', 'breakpoints');\n\n if (!breakpoints) {\n console.warn('No breakpoint tokens found');\n return {};\n }\n\n return {\n layout: {\n breakpoints: transformTokenTree(breakpoints),\n },\n };\n}\n\n/**\n * Extract container tokens\n */\nfunction extractContainers(data: FigmaExport): Record<string, unknown> {\n const container = getNestedValue(data, 'Layout', 'modes', 'Base', 'container');\n\n if (!container) {\n console.warn('No container tokens found');\n return {};\n }\n\n return {\n layout: {\n container: transformTokenTree(container),\n },\n };\n}\n\n/**\n * Extract grid tokens\n */\nfunction extractGrid(data: FigmaExport): Record<string, unknown> {\n const base = getNestedValue(data, 'Layout', 'modes', 'Base') as\n | Record<string, unknown>\n | undefined;\n const grid = base?.['grid'];\n const gutters = base?.['gutters'];\n\n if (!grid) {\n console.warn('No grid tokens found');\n return {};\n }\n\n const result: { layout: { grid: Record<string, unknown>; gutters?: Record<string, unknown> } } = {\n layout: {\n grid: transformTokenTree(grid),\n },\n };\n\n if (gutters) {\n result.layout.gutters = transformTokenTree(gutters);\n }\n\n return result;\n}\n\n/**\n * Extract shadow tokens (use composite values)\n */\nfunction extractShadows(data: FigmaExport): Record<string, unknown> {\n const base = getNestedValue(data, 'Shadows', 'modes', 'Base', 'shadows') as\n | Record<string, Record<string, unknown>>\n | undefined;\n\n if (!base) {\n console.warn('No shadow tokens found');\n return {};\n }\n\n const result: { shadow: Record<string, DTCGToken> } = { shadow: {} };\n\n for (const [key, value] of Object.entries(base)) {\n const composite = value?.['composite'] as Record<string, unknown> | undefined;\n if (composite) {\n const token: DTCGToken = {\n $value: composite['$value'],\n $type: 'shadow',\n };\n\n if (composite['$description'] && typeof composite['$description'] === 'string') {\n token.$description = composite['$description'];\n }\n\n if (composite['$extensions'] && typeof composite['$extensions'] === 'object') {\n token.$extensions = composite['$extensions'] as Record<string, unknown>;\n }\n\n result.shadow[key] = token;\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Default Collections Configuration\n// ============================================================================\n\n/**\n * Default collections configuration matching the original script\n */\nconst DEFAULT_COLLECTIONS: CollectionsConfig = {\n foundation: {\n input: 'foundation.json',\n modeAware: true,\n outputs: [\n { file: 'collections/color/primitive.json', extractor: extractBrandColors },\n { file: 'collections/color/neutral.json', extractor: extractNeutralColors },\n { file: 'collections/color/background.json', extractor: extractBackgroundColors },\n { file: 'collections/color/opacity.json', extractor: extractOpacityColors },\n { file: 'collections/color/semantic.json', extractor: extractThemeColors },\n { file: 'collections/color/component.json', extractor: extractSemanticColors },\n { file: 'collections/border/color.json', extractor: extractBorderColors },\n { file: 'collections/border/width.json', extractor: extractBorderWidths },\n ],\n },\n typography: {\n input: 'typography.json',\n modeAware: false,\n outputs: [{ file: 'collections/typography/base.json', extractor: extractTypography }],\n },\n spacing: {\n input: 'spacing.json',\n modeAware: false,\n outputs: [{ file: 'collections/spacing/base.json', extractor: extractSpacing }],\n },\n radius: {\n input: 'radius.json',\n modeAware: false,\n outputs: [{ file: 'collections/border/radius.json', extractor: extractRadius }],\n },\n layout: {\n input: 'layout.json',\n modeAware: false,\n outputs: [\n { file: 'collections/layout/breakpoints.json', extractor: extractBreakpoints },\n { file: 'collections/layout/containers.json', extractor: extractContainers },\n { file: 'collections/layout/grid.json', extractor: extractGrid },\n ],\n },\n shadows: {\n input: 'shadows.json',\n modeAware: false,\n outputs: [{ file: 'collections/shadow/base.json', extractor: extractShadows }],\n },\n};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Ensure directory exists\n */\nfunction ensureDir(filePath: string): void {\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n}\n\n/**\n * Detect modes from Figma export data\n */\nexport function detectModes(data: FigmaExport, collectionPath?: string): string[] {\n if (!data || typeof data !== 'object') {\n return ['Base'];\n }\n\n // If collection path is specified, look for that collection\n if (collectionPath) {\n const collection = getNestedValue(data, collectionPath) as Record<string, unknown> | undefined;\n const modes = collection?.['modes'] as Record<string, unknown> | undefined;\n if (modes) {\n return Object.keys(modes);\n }\n return ['Base'];\n }\n\n // Otherwise, look for modes in any collection\n for (const value of Object.values(data)) {\n if (typeof value === 'object' && value !== null) {\n const collection = value as Record<string, unknown>;\n const modes = collection['modes'] as Record<string, unknown> | undefined;\n if (modes) {\n return Object.keys(modes);\n }\n }\n }\n\n return ['Base'];\n}\n\n/**\n * Get input source based on configuration with automatic fallback\n */\nfunction getInputSource(\n collectionConfig: CollectionConfig,\n exportsDir: string,\n buildSource: string\n): string {\n const themeFile = join(exportsDir, 'theme.json');\n const collectionFile = join(exportsDir, collectionConfig.input);\n\n if (buildSource === 'theme') {\n // Prefer theme.json, fallback to collection file\n if (existsSync(themeFile)) {\n return themeFile;\n }\n if (existsSync(collectionFile)) {\n console.warn(` ā ļø theme.json not found, using ${collectionConfig.input}`);\n return collectionFile;\n }\n return themeFile;\n }\n\n // Prefer collection file, fallback to theme.json\n if (existsSync(collectionFile)) {\n return collectionFile;\n }\n if (existsSync(themeFile)) {\n console.warn(` ā ļø ${collectionConfig.input} not found, using theme.json`);\n return themeFile;\n }\n return collectionFile;\n}\n\n// ============================================================================\n// Main Transformation\n// ============================================================================\n\n/**\n * Transform Figma tokens to Style Dictionary format\n */\nexport function transformTokens(options: TransformOptions): TransformResult {\n const {\n sourceDir,\n collectionsDir,\n ignoreModes = [],\n defaultMode = 'Light',\n dryRun = false,\n verbose = false,\n } = options;\n\n const startTime = Date.now();\n const errors: string[] = [];\n const warnings: string[] = [];\n const filesWritten: string[] = [];\n const allModesDetected: Set<string> = new Set();\n let tokensProcessed = 0;\n\n if (verbose) {\n console.info('šØ Transforming Figma tokens to Style Dictionary format...\\n');\n console.info('š Configuration:');\n console.info(` Source directory: ${sourceDir}`);\n console.info(` Output directory: ${collectionsDir}`);\n console.info(` Default mode: ${defaultMode}`);\n if (ignoreModes.length > 0) {\n console.info(` Ignored modes: ${ignoreModes.join(', ')}`);\n }\n if (dryRun) {\n console.info(' DRY RUN - no files will be written');\n }\n console.info('');\n }\n\n // Detect modes from theme.json\n const detectedModes: Record<string, string[]> = {};\n const themeFile = join(sourceDir, 'theme.json');\n if (existsSync(themeFile)) {\n try {\n const content = readFileSync(themeFile, 'utf-8');\n const themeData = JSON.parse(content) as FigmaExport;\n\n // Detect modes for each collection\n for (const [name, collectionConfig] of Object.entries(DEFAULT_COLLECTIONS)) {\n const typedConfig = collectionConfig as CollectionConfig;\n if (typedConfig.modeAware) {\n const collectionPath = name.charAt(0).toUpperCase() + name.slice(1);\n const modes = detectModes(themeData, collectionPath);\n if (modes.length > 0) {\n detectedModes[collectionPath] = modes;\n for (const mode of modes) {\n allModesDetected.add(mode);\n }\n }\n }\n }\n } catch (error) {\n warnings.push(\n `Failed to read theme.json for mode detection: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n // Process each collection\n for (const [collectionName, collectionConfig] of Object.entries(DEFAULT_COLLECTIONS)) {\n const typedConfig = collectionConfig as CollectionConfig;\n if (verbose) {\n console.info(`Processing ${collectionName} collection...`);\n }\n\n // Get input path based on configuration\n const inputPath = getInputSource(typedConfig, sourceDir, 'theme');\n\n // Check if input file exists\n if (!existsSync(inputPath)) {\n warnings.push(`Input file not found: ${inputPath}`);\n continue;\n }\n\n // Read input file\n let data: FigmaExport;\n try {\n const content = readFileSync(inputPath, 'utf-8');\n data = JSON.parse(content) as FigmaExport;\n } catch (error) {\n errors.push(\n `Failed to read ${inputPath}: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n continue;\n }\n\n // Determine which modes to process for this collection\n let modesToProcess = [defaultMode];\n if (typedConfig.modeAware) {\n const collectionPath = collectionName.charAt(0).toUpperCase() + collectionName.slice(1);\n if (detectedModes[collectionPath]) {\n modesToProcess = detectedModes[collectionPath].filter((m) => !ignoreModes.includes(m));\n } else {\n const modes = detectModes(data, collectionPath);\n if (modes.length > 1 || !modes.includes('Base')) {\n modesToProcess = modes.filter((m) => !ignoreModes.includes(m));\n }\n }\n }\n\n // Process each output\n for (const output of typedConfig.outputs) {\n for (const mode of modesToProcess) {\n // Generate the output file path\n let outputFile = output.file;\n if (typedConfig.modeAware && modesToProcess.length > 1) {\n const ext = extname(output.file);\n const base = basename(output.file, ext);\n const dir = dirname(output.file);\n\n if (mode !== defaultMode) {\n outputFile = join(dir, `${base}-${mode.toLowerCase()}${ext}`);\n }\n }\n\n const outputPath = join(collectionsDir, outputFile);\n\n try {\n // Extract and transform tokens\n const tokens = typedConfig.modeAware\n ? output.extractor(data, mode)\n : output.extractor(data);\n\n const tokenCount = Object.keys(tokens).length;\n if (tokenCount === 0) {\n warnings.push(`No tokens extracted for ${outputFile} (${mode} mode)`);\n continue;\n }\n\n tokensProcessed += tokenCount;\n\n if (!dryRun) {\n // Ensure output directory exists\n ensureDir(outputPath);\n\n // Write output file\n writeFileSync(outputPath, `${JSON.stringify(tokens, null, 2)}\\n`, 'utf-8');\n }\n\n filesWritten.push(outputFile);\n\n if (verbose) {\n const dryRunLabel = dryRun ? ' (dry run)' : '';\n console.info(\n ` ā
Created ${outputFile}${modesToProcess.length > 1 ? ` (${mode})` : ''}${dryRunLabel}`\n );\n }\n } catch (error) {\n errors.push(\n `Error processing ${outputFile}: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n }\n }\n\n const duration = Date.now() - startTime;\n\n if (verbose) {\n console.info('\\n⨠Transformation complete!');\n console.info(`\\nš Output directory: ${collectionsDir}`);\n console.info(`ā±ļø Duration: ${duration}ms`);\n }\n\n return {\n success: errors.length === 0,\n filesWritten,\n tokensProcessed,\n modesDetected: Array.from(allModesDetected),\n errors,\n warnings,\n duration,\n };\n}\n\n/**\n * CLI entry point for token transformation\n */\nexport function transformTokensCLI(\n sourceDir: string,\n collectionsDir: string,\n options: Partial<Omit<TransformOptions, 'sourceDir' | 'collectionsDir'>> = {}\n): boolean {\n const result = transformTokens({\n sourceDir,\n collectionsDir,\n verbose: true,\n ...options,\n });\n\n // Report errors\n for (const error of result.errors) {\n console.error(`ā ${error}`);\n }\n\n // Report warnings\n for (const warning of result.warnings) {\n console.warn(`ā ļø ${warning}`);\n }\n\n return result.success;\n}\n","/**\n * @file Token Sync Module\n * @description Synchronizes generated tokens from Style Dictionary output to TypeScript source\n *\n * This module handles syncing the generated tokens from dist/js/tokens.js\n * to src/tokens-flat.ts so that tsup can bundle them correctly.\n *\n * This ensures that when font families or other tokens change in Figma,\n * the changes automatically propagate to the TypeScript source.\n *\n * @module @dsai-io/tools/tokens/sync\n */\n\n/* eslint-disable no-console */\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\nimport type { SyncOptions, SyncResult } from './types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Default source file relative path from tokens package */\nconst DEFAULT_SOURCE_RELATIVE = 'dist/js/tokens.js';\n\n/** Default target file relative path from tokens package */\nconst DEFAULT_TARGET_RELATIVE = 'src/tokens-flat.ts';\n\n/** TypeScript header template for generated file */\nconst TS_HEADER = `/**\n * Do not edit directly, this file was auto-generated.\n * Generated from Style Dictionary output (dist/js/tokens.js)\n *\n * To update: run \\`pnpm tokens:build\\` which will:\n * 1. Transform Figma tokens\n * 2. Build with Style Dictionary\n * 3. Sync this file automatically\n */\n\n`;\n\n/** Font families to verify in output */\nconst EXPECTED_FONTS = ['Inter', 'Roboto Mono'] as const;\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Verify that expected font families are present in the content\n */\nfunction verifyFontFamilies(content: string): { found: string[]; missing: string[] } {\n const found: string[] = [];\n const missing: string[] = [];\n\n for (const font of EXPECTED_FONTS) {\n // Check for font in various formats: \"'Inter,\" or \"Inter,\"\n const pattern = `'${font},`;\n if (content.includes(pattern) || content.includes(`\"${font},`)) {\n found.push(font);\n } else {\n missing.push(font);\n }\n }\n\n return { found, missing };\n}\n\n/**\n * Count token exports in content\n */\nfunction countTokenExports(content: string): number {\n // Count export const declarations\n const exportPattern = /export\\s+const\\s+\\w+/g;\n const matches = content.match(exportPattern);\n return matches ? matches.length : 0;\n}\n\n/**\n * Compute default file paths from tokens directory\n */\nexport function getDefaultSyncPaths(tokensDir: string): { sourceFile: string; targetFile: string } {\n return {\n sourceFile: join(tokensDir, DEFAULT_SOURCE_RELATIVE),\n targetFile: join(tokensDir, DEFAULT_TARGET_RELATIVE),\n };\n}\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Sync tokens from Style Dictionary output to TypeScript source\n *\n * @example\n * ```typescript\n * // Sync with explicit paths\n * const result = syncTokens({\n * sourceFile: './packages/@dsai-io/tokens/dist/js/tokens.js',\n * targetFile: './packages/@dsai-io/tokens/src/tokens-flat.ts',\n * });\n *\n * // Sync with paths computed from tokens directory\n * const paths = getDefaultSyncPaths('./packages/@dsai-io/tokens');\n * const result = syncTokens(paths);\n * ```\n */\nexport function syncTokens(options: SyncOptions): SyncResult {\n const { sourceFile, targetFile, dryRun = false, verbose = false } = options;\n\n const errors: string[] = [];\n\n if (verbose) {\n console.info('š Syncing tokens from Style Dictionary output...');\n console.info(` Source: ${sourceFile}`);\n console.info(` Target: ${targetFile}`);\n if (dryRun) {\n console.info(' DRY RUN - no files will be written');\n }\n }\n\n // Check if source file exists\n if (!existsSync(sourceFile)) {\n const error = `Source file not found: ${sourceFile}`;\n if (verbose) {\n console.error(`ā ${error}`);\n }\n return {\n success: false,\n tokensCount: 0,\n changed: false,\n errors: [error],\n };\n }\n\n // Read source content\n let sourceContent: string;\n try {\n sourceContent = readFileSync(sourceFile, 'utf-8');\n } catch (err) {\n const error = `Failed to read source file: ${err instanceof Error ? err.message : 'Unknown error'}`;\n if (verbose) {\n console.error(`ā ${error}`);\n }\n return {\n success: false,\n tokensCount: 0,\n changed: false,\n errors: [error],\n };\n }\n\n // Generate TypeScript content\n const tsContent = `${TS_HEADER}${sourceContent}`;\n\n // Verify font families\n const fontFamilies = verifyFontFamilies(sourceContent);\n if (fontFamilies.missing.length > 0) {\n for (const font of fontFamilies.missing) {\n errors.push(`Font family may be missing: ${font}`);\n }\n }\n\n // Count tokens\n const tokensCount = countTokenExports(sourceContent);\n\n // Check if target already exists and has same content\n let changed = true;\n if (existsSync(targetFile)) {\n try {\n const existingContent = readFileSync(targetFile, 'utf-8');\n if (existingContent === tsContent) {\n changed = false;\n if (verbose) {\n console.info('ā
Target file is already up to date');\n }\n }\n } catch {\n // Ignore read errors, will overwrite\n }\n }\n\n // Write target file if changed\n if (changed && !dryRun) {\n try {\n // Ensure target directory exists\n const targetDir = dirname(targetFile);\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n\n writeFileSync(targetFile, tsContent, 'utf-8');\n } catch (err) {\n const error = `Failed to write target file: ${err instanceof Error ? err.message : 'Unknown error'}`;\n if (verbose) {\n console.error(`ā ${error}`);\n }\n return {\n success: false,\n tokensCount,\n changed: false,\n errors: [error],\n };\n }\n }\n\n if (verbose) {\n if (changed) {\n console.info('ā
Successfully synced tokens');\n }\n console.info(` Tokens exported: ${tokensCount}`);\n if (fontFamilies.found.length > 0) {\n console.info(` Font families found: ${fontFamilies.found.join(', ')}`);\n }\n if (fontFamilies.missing.length > 0) {\n console.warn(` ā ļø Missing fonts: ${fontFamilies.missing.join(', ')}`);\n }\n }\n\n return {\n success: errors.length === 0 || errors.every((e) => e.includes('Font family')),\n tokensCount,\n changed,\n errors: errors.length > 0 ? errors : undefined,\n };\n}\n\n/**\n * CLI entry point for token sync\n */\nexport function syncTokensCLI(tokensDir: string): boolean {\n const paths = getDefaultSyncPaths(tokensDir);\n const result = syncTokens({\n ...paths,\n verbose: true,\n });\n\n // Report errors (non-critical ones like missing fonts)\n if (result.errors) {\n for (const error of result.errors) {\n if (error.includes('Font family')) {\n console.warn(`ā ļø ${error}`);\n } else {\n console.error(`ā ${error}`);\n }\n }\n }\n\n return result.success;\n}\n","/**\n * @file CSS Post-processing Module\n * @description Post-processes CSS files after SASS compilation\n *\n * This module applies DSAi-specific transformations to compiled CSS:\n * - Replaces `data-bs-theme` with `data-dsai-theme` for custom theme attribute\n * - Applies configurable text replacements\n *\n * @module @dsai-io/tools/tokens/postprocess\n */\n\n/* eslint-disable no-console */\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport type { PostprocessOptions, PostprocessResult, ReplacementRule } from './types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Default CSS distribution directory relative to tokens package */\nconst DEFAULT_CSS_DIR = 'dist/css';\n\n/** Default files to process */\nconst DEFAULT_FILES = ['dsai-theme-bs.css', 'dsai-theme-bs.min.css'];\n\n/** Default transformations to apply */\nconst DEFAULT_TRANSFORMATIONS: ReplacementRule[] = [\n {\n description: 'Theme attribute',\n from: /data-bs-theme/g,\n to: 'data-dsai-theme',\n },\n];\n\n// ============================================================================\n// Core Functions\n// ============================================================================\n\n/**\n * Apply all replacements to content\n */\nfunction applyReplacements(\n content: string,\n replacements: ReplacementRule[],\n verbose: boolean\n): { result: string; count: number } {\n let result = content;\n let totalCount = 0;\n\n for (const rule of replacements) {\n // Count matches first\n let matchCount = 0;\n\n if (typeof rule.from === 'string') {\n // For string patterns, count occurrences manually\n let pos = 0;\n const searchStr = rule.from;\n while (pos < result.length) {\n const idx = result.indexOf(searchStr, pos);\n if (idx === -1) {\n break;\n }\n matchCount++;\n pos = idx + 1;\n }\n // Replace all occurrences using split/join (safe, no regex)\n if (matchCount > 0) {\n result = result.split(rule.from).join(rule.to);\n }\n } else {\n // For regex patterns, use as-is\n const matches = result.match(rule.from);\n matchCount = matches ? matches.length : 0;\n if (matchCount > 0) {\n result = result.replace(rule.from, rule.to);\n }\n }\n\n if (matchCount > 0) {\n totalCount += matchCount;\n if (verbose) {\n const desc =\n rule.description ?? (typeof rule.from === 'string' ? rule.from : String(rule.from));\n console.info(` ā ${desc}: ${matchCount} replacement(s)`);\n }\n }\n }\n\n return { result, count: totalCount };\n}\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Post-process a single CSS file\n *\n * @example\n * ```typescript\n * const result = postprocessCss({\n * inputFile: './dist/css/theme.css',\n * replacements: [\n * { from: /data-bs-theme/g, to: 'data-dsai-theme', description: 'Theme attribute' }\n * ],\n * });\n * ```\n */\nexport function postprocessCss(options: PostprocessOptions): PostprocessResult {\n const {\n inputFile,\n outputFile = inputFile,\n replacements = DEFAULT_TRANSFORMATIONS,\n dryRun = false,\n verbose = false,\n } = options;\n\n // Check if input file exists\n if (!existsSync(inputFile)) {\n return {\n success: false,\n replacementsMade: 0,\n outputFile,\n errors: [`File not found: ${inputFile}`],\n };\n }\n\n // Read input content\n let content: string;\n try {\n content = readFileSync(inputFile, 'utf-8');\n } catch (err) {\n return {\n success: false,\n replacementsMade: 0,\n outputFile,\n errors: [`Failed to read file: ${err instanceof Error ? err.message : 'Unknown error'}`],\n };\n }\n\n // Apply replacements\n const { result, count } = applyReplacements(content, replacements, verbose);\n\n // Write output if changed and not dry run\n if (count > 0 && !dryRun) {\n try {\n writeFileSync(outputFile, result, 'utf-8');\n } catch (err) {\n return {\n success: false,\n replacementsMade: count,\n outputFile,\n errors: [`Failed to write file: ${err instanceof Error ? err.message : 'Unknown error'}`],\n };\n }\n }\n\n return {\n success: true,\n replacementsMade: count,\n outputFile,\n };\n}\n\n/**\n * Post-process multiple CSS files in a directory\n *\n * @example\n * ```typescript\n * const results = postprocessCssFiles({\n * cssDir: './packages/@dsai-io/tokens/dist/css',\n * files: ['dsai-theme-bs.css', 'dsai-theme-bs.min.css'],\n * });\n * ```\n */\nexport function postprocessCssFiles(options: {\n cssDir: string;\n files?: string[];\n replacements?: ReplacementRule[];\n dryRun?: boolean;\n verbose?: boolean;\n}): { success: boolean; filesModified: number; totalReplacements: number; errors: string[] } {\n const {\n cssDir,\n files = DEFAULT_FILES,\n replacements = DEFAULT_TRANSFORMATIONS,\n dryRun = false,\n verbose = false,\n } = options;\n\n let filesModified = 0;\n let totalReplacements = 0;\n const errors: string[] = [];\n\n if (verbose) {\n console.info('š§ Post-processing CSS files...\\n');\n }\n\n for (const fileName of files) {\n const filePath = join(cssDir, fileName);\n\n if (verbose) {\n console.info(`š ${fileName}`);\n }\n\n const result = postprocessCss({\n inputFile: filePath,\n replacements,\n dryRun,\n verbose,\n });\n\n if (result.success) {\n if (result.replacementsMade > 0) {\n filesModified++;\n totalReplacements += result.replacementsMade;\n } else if (verbose) {\n console.info(' (no changes needed)');\n }\n } else if (result.errors) {\n errors.push(...result.errors);\n if (verbose) {\n for (const err of result.errors) {\n console.warn(` ā ļø ${err}`);\n }\n }\n }\n }\n\n if (verbose) {\n console.info(`\\nā
Post-processing complete. ${filesModified} file(s) modified.`);\n if (totalReplacements > 0) {\n console.info(` Total replacements: ${totalReplacements}`);\n }\n }\n\n return {\n success: errors.length === 0,\n filesModified,\n totalReplacements,\n errors,\n };\n}\n\n/**\n * CLI entry point for CSS post-processing\n */\nexport function postprocessCLI(tokensDir: string): boolean {\n const cssDir = join(tokensDir, DEFAULT_CSS_DIR);\n\n const result = postprocessCssFiles({\n cssDir,\n verbose: true,\n });\n\n return result.success;\n}\n\n/**\n * Get the default CSS distribution directory path\n */\nexport function getDefaultCssDir(tokensDir: string): string {\n return join(tokensDir, DEFAULT_CSS_DIR);\n}\n\n/**\n * Get the default files to process\n */\nexport function getDefaultFiles(): string[] {\n return [...DEFAULT_FILES];\n}\n\n/**\n * Get the default transformation rules\n */\nexport function getDefaultTransformations(): ReplacementRule[] {\n return [...DEFAULT_TRANSFORMATIONS];\n}\n","/**\n * @file Token Build Module\n * @description Orchestrates the complete token build pipeline\n *\n * Runs all token build steps in sequence with clear logging:\n * 1. Validate tokens\n * 2. Transform Figma tokens\n * 3. Build Style Dictionary outputs (CSS, JS, TS, SCSS, JSON)\n * 4. Sync tokens-flat.ts\n * 5. Compile Bootstrap theme SCSS ā CSS\n * 6. Post-process theme CSS (data-bs-theme ā data-dsai-theme)\n * 7. Compile DSAi utilities SCSS ā CSS\n * 8. Bundle with tsup (ESM + CJS)\n *\n * The pipeline is configurable via dsai.config.mjs tokens.pipeline section.\n * Packages can specify which steps to run and customize paths.\n *\n * @module @dsai-io/tools/tokens/build\n */\n\n/* eslint-disable no-console */\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { execSync } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { postprocessCLI } from './postprocess.js';\nimport { syncTokensCLI } from './sync.js';\nimport { transformTokens } from './transform.js';\n\nimport type { BuildOptions, BuildResult, BuildStep } from './types';\nimport type {\n BuildPipelinePaths,\n BuildPipelineStep,\n TokensBuildPipeline,\n} from '../config/types.js';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Default SASS deprecation silencing flags */\nconst SASS_FLAGS = [\n '--quiet-deps',\n '--silence-deprecation=import',\n '--silence-deprecation=global-builtin',\n '--silence-deprecation=color-functions',\n].join(' ');\n\n/** Minimal SASS flags (no color functions deprecation) */\nconst SASS_FLAGS_MINIMAL = ['--quiet-deps', '--silence-deprecation=import'].join(' ');\n\n/** Default build pipeline steps (full @dsai-io/tokens build) */\nconst DEFAULT_PIPELINE_STEPS: BuildPipelineStep[] = [\n 'validate',\n 'transform',\n 'style-dictionary',\n 'sync',\n 'sass-theme',\n 'sass-theme-minified',\n 'postprocess',\n 'sass-utilities',\n 'sass-utilities-minified',\n 'bundle',\n];\n\n/** Default pipeline paths */\nconst DEFAULT_PIPELINE_PATHS: Required<BuildPipelinePaths> = {\n syncSource: 'dist/js/tokens.js',\n syncTarget: 'src/tokens-flat.ts',\n sassThemeInput: 'src/scss/dsai-theme-bs.scss',\n sassThemeOutput: 'dist/css/dsai-theme-bs.css',\n sassThemeMinifiedOutput: 'dist/css/dsai-theme-bs.min.css',\n sassUtilitiesInput: 'src/scss/dsai-utilities.scss',\n sassUtilitiesOutput: 'dist/css/dsai.css',\n sassUtilitiesMinifiedOutput: 'dist/css/dsai.min.css',\n};\n\n// ============================================================================\n// Build Step Runner\n// ============================================================================\n\n/**\n * Run a single build step\n */\nfunction runStep(step: BuildStep, index: number, total: number, verbose: boolean): boolean {\n const stepNum = `[${index + 1}/${total}]`;\n\n if (step.skip) {\n if (verbose) {\n console.info(`${stepNum} āļø ${step.name} (skipped)`);\n }\n return true;\n }\n\n if (verbose) {\n console.info(`\\n${stepNum} š§ ${step.name}`);\n }\n\n // If step has a function, run it\n if (step.fn) {\n try {\n // Run function and check return value\n const result = step.fn();\n if (result instanceof Promise) {\n // We need to handle this synchronously in the build context\n console.warn(` ā ļø Async step ${step.name} - running synchronously`);\n }\n // Check if function returned false (failure)\n if (result === false) {\n console.error(` ā Failed: Step returned false`);\n return false;\n }\n if (verbose) {\n console.info(' ā
Done');\n }\n return true;\n } catch (error) {\n console.error(` ā Failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n return false;\n }\n }\n\n // Otherwise run command\n if (step.command) {\n if (verbose) {\n const shortCmd = step.command.split(' ').slice(0, 4).join(' ');\n console.info(` $ ${shortCmd}...`);\n }\n\n try {\n execSync(step.command, {\n cwd: step.cwd ?? process.cwd(),\n stdio: verbose ? 'inherit' : 'pipe',\n env: { ...process.env, FORCE_COLOR: '1' },\n });\n if (verbose) {\n console.info(' ā
Done');\n }\n return true;\n } catch (error) {\n console.error(` ā Failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n return false;\n }\n }\n\n console.warn(` ā ļø Step ${step.name} has no command or function`);\n return true;\n}\n\n// ============================================================================\n// Build Steps Configuration\n// ============================================================================\n\n/**\n * Get merged pipeline paths with defaults\n */\nfunction getPipelinePaths(customPaths?: BuildPipelinePaths): Required<BuildPipelinePaths> {\n return {\n ...DEFAULT_PIPELINE_PATHS,\n ...customPaths,\n };\n}\n\n/**\n * Map of step names to human-readable names\n */\nconst STEP_DISPLAY_NAMES: Record<BuildPipelineStep, string> = {\n validate: 'Validate Tokens',\n transform: 'Transform Figma Tokens',\n 'style-dictionary': 'Build Style Dictionary',\n sync: 'Sync tokens-flat.ts',\n 'sass-theme': 'Compile Bootstrap Theme (unminified)',\n 'sass-theme-minified': 'Compile Bootstrap Theme (minified)',\n postprocess: 'Post-process Theme CSS',\n 'sass-utilities': 'Compile DSAi Utilities (unminified)',\n 'sass-utilities-minified': 'Compile DSAi Utilities (minified)',\n bundle: 'Bundle with tsup',\n};\n\n/**\n * Create a single build step from step name\n */\nfunction createStepFromName(\n stepName: BuildPipelineStep,\n tokensPackageDir: string,\n figmaExportsDir: string,\n tokensDir: string,\n paths: Required<BuildPipelinePaths>,\n sdConfigFile: string\n): BuildStep {\n const displayName = STEP_DISPLAY_NAMES[stepName];\n\n switch (stepName) {\n case 'validate':\n // Use dsai CLI for validation - this uses the native TypeScript implementation\n return {\n name: displayName,\n command: 'dsai tokens validate',\n cwd: tokensPackageDir,\n };\n\n case 'transform':\n return {\n name: displayName,\n fn: () => {\n const result = transformTokens({\n sourceDir: figmaExportsDir,\n collectionsDir: tokensDir,\n verbose: true,\n });\n if (!result.success) {\n for (const error of result.errors) {\n console.error(`ā ${error}`);\n }\n }\n return result.success;\n },\n };\n\n case 'style-dictionary':\n return {\n name: displayName,\n command: `style-dictionary build --config ${sdConfigFile}`,\n cwd: tokensPackageDir,\n };\n\n case 'sync':\n return {\n name: displayName,\n fn: () => syncTokensCLI(tokensPackageDir),\n };\n\n case 'sass-theme':\n return {\n name: displayName,\n command: `sass ${SASS_FLAGS} ${paths.sassThemeInput} ${paths.sassThemeOutput}`,\n cwd: tokensPackageDir,\n };\n\n case 'sass-theme-minified':\n return {\n name: displayName,\n command: `sass ${SASS_FLAGS} ${paths.sassThemeInput} ${paths.sassThemeMinifiedOutput} --style=compressed`,\n cwd: tokensPackageDir,\n };\n\n case 'postprocess':\n return {\n name: displayName,\n fn: () => postprocessCLI(tokensPackageDir),\n };\n\n case 'sass-utilities':\n return {\n name: displayName,\n command: `sass ${SASS_FLAGS_MINIMAL} ${paths.sassUtilitiesInput} ${paths.sassUtilitiesOutput}`,\n cwd: tokensPackageDir,\n };\n\n case 'sass-utilities-minified':\n return {\n name: displayName,\n command: `sass ${SASS_FLAGS_MINIMAL} ${paths.sassUtilitiesInput} ${paths.sassUtilitiesMinifiedOutput} --style=compressed`,\n cwd: tokensPackageDir,\n };\n\n case 'bundle':\n return {\n name: displayName,\n command: 'tsup',\n cwd: tokensPackageDir,\n };\n\n default:\n return {\n name: `Unknown step: ${stepName}`,\n fn: () => {\n console.warn(`ā ļø Unknown pipeline step: ${stepName}`);\n return true;\n },\n };\n }\n}\n\n/**\n * Create build steps based on options and pipeline configuration\n */\nfunction createBuildSteps(\n tokensDir: string,\n _toolsDir: string,\n options: BuildOptions,\n pipeline?: TokensBuildPipeline\n): BuildStep[] {\n const { skipValidate, skipTransform, onlyTheme } = options;\n\n // Get the tokens package root directory\n // tokensDir is typically the collections dir (e.g., packages/@dsai-io/tokens/collections)\n // We need the package root for running commands\n const tokensPackageDir = tokensDir.endsWith('/collections')\n ? dirname(tokensDir)\n : dirname(tokensDir);\n\n // Path to figma-exports source directory (sibling to collections)\n const figmaExportsDir = `${tokensPackageDir}/figma-exports`;\n\n // Get pipeline configuration\n const pipelineSteps = pipeline?.steps ?? DEFAULT_PIPELINE_STEPS;\n const paths = getPipelinePaths(pipeline?.paths);\n const sdConfigFile = pipeline?.styleDictionaryConfig ?? 'sd.config.mjs';\n\n // Build steps based on pipeline configuration\n const steps: BuildStep[] = [];\n\n for (const stepName of pipelineSteps) {\n const step = createStepFromName(\n stepName,\n tokensPackageDir,\n figmaExportsDir,\n tokensDir,\n paths,\n sdConfigFile\n );\n\n // Apply skip flags based on legacy options\n if (stepName === 'validate' && skipValidate) {\n step.skip = true;\n }\n if (stepName === 'transform' && (skipTransform || onlyTheme)) {\n step.skip = true;\n }\n if (onlyTheme && !['sass-theme', 'sass-theme-minified', 'postprocess'].includes(stepName)) {\n // Only run theme-related steps when onlyTheme is true\n if (!['validate'].includes(stepName)) {\n step.skip = true;\n }\n }\n\n steps.push(step);\n }\n\n return steps;\n}\n\n// ============================================================================\n// Main Build Function\n// ============================================================================\n\n/**\n * Run the complete token build pipeline\n *\n * @example\n * ```typescript\n * // Full build\n * const result = buildTokens({\n * tokensDir: './packages/@dsai-io/tokens',\n * toolsDir: './tools/scripts/tokens',\n * });\n *\n * // Skip validation\n * const result = buildTokens({\n * tokensDir: './packages/@dsai-io/tokens',\n * toolsDir: './tools/scripts/tokens',\n * skipValidate: true,\n * });\n *\n * // Only build theme CSS\n * const result = buildTokens({\n * tokensDir: './packages/@dsai-io/tokens',\n * toolsDir: './tools/scripts/tokens',\n * onlyTheme: true,\n * });\n * ```\n */\nexport function buildTokens(\n tokensDir: string,\n toolsDir: string,\n options: BuildOptions = {}\n): BuildResult {\n const { skipValidate, onlyTheme, verbose = true, quiet = false } = options;\n\n const startTime = Date.now();\n const stepsCompleted: string[] = [];\n const stepsFailed: string[] = [];\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Verify directories exist\n try {\n if (!existsSync(tokensDir)) {\n return {\n success: false,\n stepsCompleted,\n stepsFailed: ['Directory Check'],\n duration: Date.now() - startTime,\n errors: [`Tokens directory not found: ${tokensDir}`],\n warnings,\n };\n }\n } catch {\n return {\n success: false,\n stepsCompleted,\n stepsFailed: ['Directory Check'],\n duration: Date.now() - startTime,\n errors: [`Failed to check tokens directory: ${tokensDir}`],\n warnings,\n };\n }\n\n try {\n if (!existsSync(toolsDir)) {\n return {\n success: false,\n stepsCompleted,\n stepsFailed: ['Directory Check'],\n duration: Date.now() - startTime,\n errors: [`Tools directory not found: ${toolsDir}`],\n warnings,\n };\n }\n } catch {\n return {\n success: false,\n stepsCompleted,\n stepsFailed: ['Directory Check'],\n duration: Date.now() - startTime,\n errors: [`Failed to check tools directory: ${toolsDir}`],\n warnings,\n };\n }\n\n // Print header\n if (verbose && !quiet) {\n console.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n console.info('ā DSAi Tokens - Complete Build ā');\n console.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n\n if (skipValidate) {\n console.info('ā ļø Skipping validation (--skip-validate)');\n }\n if (onlyTheme) {\n console.info('ā ļø Building only theme CSS (--only-theme)');\n }\n }\n\n // Create and run build steps\n const steps = createBuildSteps(tokensDir, toolsDir, options, options.pipeline);\n\n for (const step of steps) {\n const stepIndex = steps.indexOf(step);\n const success = runStep(step, stepIndex, steps.length, verbose && !quiet);\n\n if (success) {\n if (!step.skip) {\n stepsCompleted.push(step.name);\n }\n } else {\n stepsFailed.push(step.name);\n errors.push(`Build failed at step: ${step.name}`);\n\n // Stop on first failure\n const failDuration = Date.now() - startTime;\n\n if (verbose && !quiet) {\n console.error(`\\nš„ Build failed at step: ${step.name}`);\n }\n\n return {\n success: false,\n stepsCompleted,\n stepsFailed,\n duration: failDuration,\n errors,\n warnings,\n };\n }\n }\n\n const duration = Date.now() - startTime;\n const durationSec = (duration / 1000).toFixed(2);\n\n // Print footer\n if (verbose && !quiet) {\n console.info('\\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n console.info('ā ā
Build Complete ā');\n console.info(\n `ā š ${stepsCompleted.length} steps passed in ${durationSec}s ā`\n );\n console.info('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');\n }\n\n return {\n success: true,\n stepsCompleted,\n stepsFailed,\n duration,\n errors,\n warnings,\n };\n}\n\n/**\n * CLI entry point for token build\n */\nexport function buildTokensCLI(tokensDir: string, toolsDir: string, args: string[] = []): boolean {\n const skipValidate = args.includes('--skip-validate');\n const skipTransform = args.includes('--skip-transform');\n const onlyTheme = args.includes('--only-theme');\n const quiet = args.includes('--quiet') || args.includes('-q');\n\n const result = buildTokens(tokensDir, toolsDir, {\n skipValidate,\n skipTransform,\n onlyTheme,\n verbose: !quiet,\n quiet,\n });\n\n return result.success;\n}\n\n/**\n * Parse CLI arguments and run build\n * Used as the main entry point when called directly\n */\nexport function runBuildCLI(tokensDir: string, toolsDir: string): void {\n const args = process.argv.slice(2);\n const success = buildTokensCLI(tokensDir, toolsDir, args);\n process.exit(success ? 0 : 1);\n}\n","/**\n * @file Token Clean Module\n * @description Provides functionality to clean token output directories before builds.\n *\n * This module supports:\n * - Cleaning individual output directories (dist/css, dist/js, etc.)\n * - Cleaning all build outputs\n * - Dry-run mode to preview what would be deleted\n * - Safe deletion with directory validation\n *\n * @module @dsai-io/tools/tokens/clean\n */\n\n/* eslint-disable no-console */\n/* eslint-disable security/detect-non-literal-fs-filename */\n/* eslint-disable security/detect-non-literal-regexp */\n\nimport { existsSync, readdirSync, rmSync } from 'node:fs';\nimport { basename, join, resolve } from 'node:path';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Clean operation options\n */\nexport interface CleanOptions {\n /**\n * Base directory for cleaning (typically the package root)\n * @default process.cwd()\n */\n baseDir?: string;\n\n /**\n * Directories to clean relative to baseDir\n * @default ['dist']\n */\n directories?: string[];\n\n /**\n * Show what would be deleted without actually deleting\n * @default false\n */\n dryRun?: boolean;\n\n /**\n * Enable verbose logging\n * @default false\n */\n verbose?: boolean;\n\n /**\n * File patterns to preserve (glob patterns)\n * Files matching these patterns will not be deleted\n * @example ['.gitkeep', 'README.md']\n */\n preserve?: string[];\n}\n\n/**\n * Information about a cleaned directory\n */\nexport interface CleanedDirectory {\n /** Path to the cleaned directory */\n path: string;\n\n /** Number of files removed */\n filesRemoved: number;\n\n /** Number of directories removed */\n directoriesRemoved: number;\n\n /** Whether the directory existed before cleaning */\n existed: boolean;\n}\n\n/**\n * Result of a clean operation\n */\nexport interface CleanResult {\n /** Whether the clean operation completed successfully */\n success: boolean;\n\n /** List of cleaned directories with details */\n cleaned: CleanedDirectory[];\n\n /** Total number of files removed */\n totalFilesRemoved: number;\n\n /** Total number of directories removed */\n totalDirectoriesRemoved: number;\n\n /** Any errors encountered */\n errors: string[];\n\n /** Any warnings (non-blocking issues) */\n warnings: string[];\n\n /** Whether this was a dry run */\n dryRun: boolean;\n\n /** Duration of the operation in milliseconds */\n duration: number;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default directories to clean for token builds\n */\nexport const DEFAULT_CLEAN_DIRECTORIES = ['dist'] as const;\n\n/**\n * Files to always preserve\n */\nconst ALWAYS_PRESERVE = ['.gitkeep', '.gitignore'] as const;\n\n/**\n * Directories that should never be cleaned (safety check)\n */\nconst PROTECTED_DIRECTORIES = [\n 'src',\n 'node_modules',\n '.git',\n '.github',\n 'test',\n 'tests',\n '__tests__',\n 'docs',\n 'config',\n] as const;\n\n// ============================================================================\n// Validation\n// ============================================================================\n\n/**\n * Validate that a directory is safe to clean\n *\n * @param dirPath - Absolute path to the directory\n * @param baseDir - Base directory for relative validation\n * @returns Validation result with error message if invalid\n */\nfunction validateCleanTarget(dirPath: string, baseDir: string): { valid: boolean; error?: string } {\n // Ensure path is within baseDir (prevent directory traversal)\n const resolvedDir = resolve(dirPath);\n const resolvedBase = resolve(baseDir);\n\n if (!resolvedDir.startsWith(resolvedBase)) {\n return {\n valid: false,\n error: `Directory \"${dirPath}\" is outside base directory \"${baseDir}\"`,\n };\n }\n\n // Check for protected directories\n const dirName = basename(resolvedDir);\n if (PROTECTED_DIRECTORIES.includes(dirName as (typeof PROTECTED_DIRECTORIES)[number])) {\n return {\n valid: false,\n error: `Directory \"${dirName}\" is protected and cannot be cleaned`,\n };\n }\n\n // Don't allow cleaning the base directory itself\n if (resolvedDir === resolvedBase) {\n return {\n valid: false,\n error: 'Cannot clean the base directory itself',\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Escape special regex characters in a string\n * @param str - String to escape\n * @returns Escaped string safe for regex\n */\nfunction escapeRegexChars(str: string): string {\n // Escape all regex special chars except * and ? which we handle separately\n return str.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Convert a simple glob pattern to a safe regex pattern\n * Only supports * (any chars) and ? (single char) wildcards\n *\n * @param pattern - Glob pattern like \"*.json\" or \"file?.txt\"\n * @returns Safe regex pattern string\n */\nfunction globToSafePattern(pattern: string): string {\n // First escape any regex special characters (except our wildcards)\n const escaped = escapeRegexChars(pattern);\n // Then convert our wildcards to regex equivalents\n // Use non-greedy matching to prevent catastrophic backtracking\n return escaped.replace(/\\*/g, '.*?').replace(/\\?/g, '.');\n}\n\n/**\n * Match a filename against a glob pattern safely\n * Uses character-by-character matching for simple patterns to avoid ReDoS\n *\n * @param fileName - Name of the file to match\n * @param pattern - Glob pattern (supports * and ? wildcards)\n * @returns Whether the filename matches the pattern\n */\nfunction matchGlobPattern(fileName: string, pattern: string): boolean {\n // For patterns without wildcards, use exact match\n if (!pattern.includes('*') && !pattern.includes('?')) {\n return fileName === pattern;\n }\n\n // For simple extension patterns like \"*.json\", use endsWith for safety\n if (pattern.startsWith('*.') && !pattern.slice(2).includes('*') && !pattern.includes('?')) {\n const extension = pattern.slice(1); // \".json\"\n return fileName.endsWith(extension);\n }\n\n // For simple prefix patterns like \"file*\", use startsWith for safety\n if (pattern.endsWith('*') && !pattern.slice(0, -1).includes('*') && !pattern.includes('?')) {\n const prefix = pattern.slice(0, -1);\n return fileName.startsWith(prefix);\n }\n\n // For more complex patterns, use a safe regex with non-greedy matching\n // nosemgrep: javascript.lang.security.audit.detect-non-literal-regexp.detect-non-literal-regexp\n const safePattern = globToSafePattern(pattern);\n const regex = new RegExp(`^${safePattern}$`);\n return regex.test(fileName);\n}\n\n/**\n * Check if a file should be preserved\n *\n * @param fileName - Name of the file\n * @param preservePatterns - Additional patterns to preserve\n * @returns Whether the file should be preserved\n */\nfunction shouldPreserve(fileName: string, preservePatterns: string[]): boolean {\n const allPatterns = [...ALWAYS_PRESERVE, ...preservePatterns];\n return allPatterns.some((pattern) => matchGlobPattern(fileName, pattern));\n}\n\n// ============================================================================\n// Directory Cleaning\n// ============================================================================\n\n/**\n * Count files and directories in a path recursively\n *\n * @param dirPath - Path to count\n * @returns Object with file and directory counts\n */\nfunction countContents(dirPath: string): { files: number; dirs: number } {\n if (!existsSync(dirPath)) {\n return { files: 0, dirs: 0 };\n }\n\n let files = 0;\n let dirs = 0;\n\n const entries = readdirSync(dirPath, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n dirs++;\n const subCounts = countContents(join(dirPath, entry.name));\n files += subCounts.files;\n dirs += subCounts.dirs;\n } else {\n files++;\n }\n }\n\n return { files, dirs };\n}\n\n/**\n * Clean a single directory\n *\n * @param dirPath - Absolute path to the directory to clean\n * @param options - Clean options\n * @returns Cleaned directory info\n */\nfunction cleanDirectory(\n dirPath: string,\n options: Required<Pick<CleanOptions, 'dryRun' | 'verbose' | 'preserve'>>\n): CleanedDirectory {\n const existed = existsSync(dirPath);\n\n if (!existed) {\n if (options.verbose) {\n console.info(` ā¹ļø Directory does not exist: ${dirPath}`);\n }\n return {\n path: dirPath,\n filesRemoved: 0,\n directoriesRemoved: 0,\n existed: false,\n };\n }\n\n // Count contents before deletion\n const counts = countContents(dirPath);\n\n if (options.dryRun) {\n if (options.verbose) {\n console.info(\n ` š Would remove: ${dirPath} (${counts.files} files, ${counts.dirs} directories)`\n );\n }\n return {\n path: dirPath,\n filesRemoved: counts.files,\n directoriesRemoved: counts.dirs,\n existed: true,\n };\n }\n\n // Check for files to preserve\n const entries = readdirSync(dirPath, { withFileTypes: true });\n const toPreserve = entries.filter((e) => shouldPreserve(e.name, options.preserve));\n\n if (toPreserve.length > 0) {\n // Delete contents except preserved files\n for (const entry of entries) {\n if (shouldPreserve(entry.name, options.preserve)) {\n if (options.verbose) {\n console.info(` š Preserving: ${entry.name}`);\n }\n continue;\n }\n\n const entryPath = join(dirPath, entry.name);\n rmSync(entryPath, { recursive: true, force: true });\n }\n } else {\n // Delete entire directory\n rmSync(dirPath, { recursive: true, force: true });\n }\n\n if (options.verbose) {\n console.info(` ā
Cleaned: ${dirPath} (${counts.files} files, ${counts.dirs} directories)`);\n }\n\n return {\n path: dirPath,\n filesRemoved: counts.files,\n directoriesRemoved: counts.dirs,\n existed: true,\n };\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Clean token output directories\n *\n * Removes build artifacts from output directories to ensure a fresh build.\n * Supports dry-run mode, preserve patterns, and safety validation.\n *\n * @param options - Clean operation options\n * @returns Clean operation result\n *\n * @example\n * // Clean default dist directory\n * const result = cleanTokenOutputs();\n *\n * @example\n * // Clean specific directories with dry-run\n * const result = cleanTokenOutputs({\n * directories: ['dist/css', 'dist/js'],\n * dryRun: true,\n * verbose: true,\n * });\n *\n * @example\n * // Clean with preserved files\n * const result = cleanTokenOutputs({\n * preserve: ['README.md', '*.d.ts'],\n * });\n */\nexport function cleanTokenOutputs(options: CleanOptions = {}): CleanResult {\n const startTime = Date.now();\n\n // Normalize options with defaults\n const normalizedOptions = {\n baseDir: options.baseDir ?? process.cwd(),\n directories: options.directories ?? [...DEFAULT_CLEAN_DIRECTORIES],\n dryRun: options.dryRun ?? false,\n verbose: options.verbose ?? false,\n preserve: options.preserve ?? [],\n };\n\n const result: CleanResult = {\n success: true,\n cleaned: [],\n totalFilesRemoved: 0,\n totalDirectoriesRemoved: 0,\n errors: [],\n warnings: [],\n dryRun: normalizedOptions.dryRun,\n duration: 0,\n };\n\n if (normalizedOptions.verbose) {\n const modeStr = normalizedOptions.dryRun ? '(dry-run)' : '';\n console.info(`\\nš§¹ Cleaning token outputs ${modeStr}`);\n console.info(` Base: ${normalizedOptions.baseDir}`);\n }\n\n // Validate and clean each directory\n for (const dir of normalizedOptions.directories) {\n const absolutePath = resolve(normalizedOptions.baseDir, dir);\n\n // Validate target\n const validation = validateCleanTarget(absolutePath, normalizedOptions.baseDir);\n if (!validation.valid && validation.error) {\n result.errors.push(validation.error);\n result.success = false;\n continue;\n }\n\n // Clean directory\n try {\n const cleaned = cleanDirectory(absolutePath, {\n dryRun: normalizedOptions.dryRun,\n verbose: normalizedOptions.verbose,\n preserve: normalizedOptions.preserve,\n });\n\n result.cleaned.push(cleaned);\n result.totalFilesRemoved += cleaned.filesRemoved;\n result.totalDirectoriesRemoved += cleaned.directoriesRemoved;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n result.errors.push(`Failed to clean \"${dir}\": ${errorMessage}`);\n result.success = false;\n }\n }\n\n result.duration = Date.now() - startTime;\n\n if (normalizedOptions.verbose) {\n console.info('');\n if (result.success) {\n const actionStr = normalizedOptions.dryRun ? 'Would remove' : 'Removed';\n console.info(\n `ā
${actionStr} ${result.totalFilesRemoved} files, ` +\n `${result.totalDirectoriesRemoved} directories in ${result.duration}ms`\n );\n } else {\n console.error('ā Clean failed with errors:');\n for (const error of result.errors) {\n console.error(` - ${error}`);\n }\n }\n }\n\n return result;\n}\n\n/**\n * CLI wrapper for cleanTokenOutputs\n *\n * Provides formatted output suitable for CLI usage.\n *\n * @param baseDir - Base directory for the clean operation\n * @param options - Clean options\n * @returns Whether the clean was successful\n */\nexport function cleanTokensCLI(\n baseDir: string,\n options: Omit<CleanOptions, 'baseDir'> = {}\n): boolean {\n const result = cleanTokenOutputs({\n ...options,\n baseDir,\n verbose: options.verbose ?? true,\n });\n\n return result.success;\n}\n","/**\n * @file Token Collections Merge Module\n * @description Merge multiple Figma Tokens Studio collection files into one unified collection\n *\n * Features:\n * - Intelligently merges nested token structures\n * - Preserves all metadata ($codeSyntax, $scopes, $type, etc.)\n * - Maintains token references and aliases\n * - Handles mode-based tokens (Light Mode, Dark Mode)\n * - Deep merges sections without overwriting\n * - Normalizes reference format to lowercase {colors.path}\n * - Adds $libraryName and $collectionName to aliased tokens\n * - Sorts properties alphabetically for consistency\n * - Removes duplicate sections (like \"hue\" that duplicates \"brand\")\n *\n * @module @dsai-io/tools/tokens/merge\n */\n\n/* eslint-disable no-console */\n/* eslint-disable security/detect-non-literal-fs-filename */\n/* eslint-disable security/detect-object-injection */\n\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nimport type { MergeOptions, MergeResult } from './types';\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\ntype TokenValue = string | number | boolean | null | TokenObject | TokenValue[];\n\ninterface TokenObject {\n [key: string]: TokenValue;\n}\n\ntype CollectionData = TokenObject[];\n\n// ============================================================================\n// Token Detection\n// ============================================================================\n\n/**\n * Check if an object is a token (has $type or $value)\n */\nfunction isToken(obj: unknown): boolean {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n const record = obj as Record<string, unknown>;\n return '$type' in record || '$value' in record;\n}\n\n/**\n * Check if an object has child tokens\n */\nfunction hasChildTokens(obj: unknown): boolean {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n const record = obj as Record<string, unknown>;\n for (const key of Object.keys(record)) {\n if (!key.startsWith('$') && typeof record[key] === 'object') {\n return true;\n }\n }\n return false;\n}\n\n// ============================================================================\n// Deep Merge\n// ============================================================================\n\n/**\n * Deep merge two objects, preserving all properties\n * Special handling: If target has child tokens and source is a token,\n * or vice versa, prioritize the structure with children\n */\nfunction deepMerge(\n target: TokenObject | undefined,\n source: TokenObject,\n verbose = false\n): TokenObject {\n const result: TokenObject = target ? { ...target } : {};\n\n // Check for conflict: one is a token, the other has child tokens\n const targetIsToken = isToken(target);\n const sourceIsToken = isToken(source);\n const targetHasChildren = hasChildTokens(target);\n const sourceHasChildren = hasChildTokens(source);\n\n if (targetHasChildren && sourceIsToken) {\n if (verbose) {\n console.info(' ā ļø Skipping single token in favor of children structure');\n }\n return result;\n }\n\n if (sourceHasChildren && targetIsToken) {\n if (verbose) {\n console.info(' ā ļø Replacing single token with children structure');\n }\n return { ...source };\n }\n\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n if (sourceValue && typeof sourceValue === 'object' && !Array.isArray(sourceValue)) {\n // Recursively merge nested objects\n result[key] = deepMerge(\n targetValue as TokenObject | undefined,\n sourceValue as TokenObject,\n verbose\n );\n } else if (Array.isArray(sourceValue)) {\n // Concatenate arrays\n const existingArray = Array.isArray(targetValue) ? targetValue : [];\n result[key] = [...existingArray, ...sourceValue];\n } else if (sourceValue !== undefined) {\n // Overwrite primitive values (source takes precedence)\n result[key] = sourceValue;\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Token Counting\n// ============================================================================\n\n/**\n * Count tokens recursively in a nested structure\n */\nfunction countTokens(obj: unknown): number {\n if (!obj || typeof obj !== 'object') {\n return 0;\n }\n\n let count = 0;\n const record = obj as Record<string, unknown>;\n\n for (const key of Object.keys(record)) {\n const value = record[key];\n\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const valueRecord = value as Record<string, unknown>;\n // Check if this is a token\n if ('$type' in valueRecord || '$value' in valueRecord) {\n count++;\n } else {\n // Recursively count nested tokens\n count += countTokens(value);\n }\n }\n }\n\n return count;\n}\n\n// ============================================================================\n// Reference Normalization\n// ============================================================================\n\n/**\n * Update token references to match new collection name\n * Normalizes to lowercase format: {colors.path} instead of {Colors.path}\n */\nfunction updateReferences(\n obj: TokenObject,\n oldName: string,\n newName: string,\n collectionName: string\n): void {\n const normalizedOld = oldName.toLowerCase().replace(/\\s+/g, '');\n const normalizedNew = newName.toLowerCase().replace(/\\s+/g, '');\n\n // Build patterns to match (case-insensitive)\n const patternsLower = [`{${oldName.toLowerCase()}.`, `{${normalizedOld}.`];\n\n for (const key of Object.keys(obj)) {\n const value = obj[key];\n\n if (typeof value === 'string' && value.startsWith('{') && value.endsWith('}')) {\n // This is a token reference - normalize to lowercase\n let newValue = value;\n const valueLower = value.toLowerCase();\n\n for (const pattern of patternsLower) {\n if (valueLower.startsWith(pattern)) {\n // Replace the prefix with the normalized version\n const suffix = value.slice(pattern.length);\n newValue = `{${normalizedNew}.${suffix}`;\n break;\n }\n }\n obj[key] = newValue;\n\n // Add metadata for aliased tokens\n if ((obj[key] as string).startsWith('{')) {\n if (!('$libraryName' in obj)) {\n obj['$libraryName'] = '';\n }\n if (!('$collectionName' in obj)) {\n obj['$collectionName'] = collectionName;\n }\n }\n } else if (value && typeof value === 'object' && !Array.isArray(value)) {\n updateReferences(value as TokenObject, oldName, newName, collectionName);\n }\n }\n}\n\n// ============================================================================\n// Property Sorting\n// ============================================================================\n\n/**\n * Sort object properties alphabetically, with $ properties first\n */\nfunction sortProperties(obj: unknown): unknown {\n if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {\n return obj;\n }\n\n const record = obj as Record<string, unknown>;\n const sorted: Record<string, unknown> = {};\n const keys = Object.keys(record).sort((a, b) => {\n // $ properties first, then alphabetically\n const aIsMeta = a.startsWith('$');\n const bIsMeta = b.startsWith('$');\n if (aIsMeta && !bIsMeta) {\n return -1;\n }\n if (!aIsMeta && bIsMeta) {\n return 1;\n }\n return a.localeCompare(b);\n });\n\n for (const key of keys) {\n sorted[key] = sortProperties(record[key]);\n }\n\n return sorted;\n}\n\n// ============================================================================\n// Duplicate Detection\n// ============================================================================\n\n/**\n * Check if a section is a duplicate/alias section\n * (e.g., \"hue\" that just references \"brand\")\n */\nfunction isDuplicateSection(obj: unknown): boolean {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n let hasOnlyReferences = true;\n let referenceCount = 0;\n\n function checkReferences(item: Record<string, unknown>): void {\n for (const key of Object.keys(item)) {\n if (key.startsWith('$')) {\n continue;\n }\n\n const value = item[key];\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const valueRecord = value as Record<string, unknown>;\n if ('$value' in valueRecord) {\n referenceCount++;\n if (\n typeof valueRecord['$value'] === 'string' &&\n (valueRecord['$value'] as string).startsWith('{')\n ) {\n continue;\n } else {\n hasOnlyReferences = false;\n return;\n }\n }\n checkReferences(valueRecord);\n }\n }\n }\n\n checkReferences(obj as Record<string, unknown>);\n return hasOnlyReferences && referenceCount > 10;\n}\n\n/**\n * Get collection name from file structure\n */\nfunction getCollectionName(data: CollectionData): string | null {\n if (Array.isArray(data) && data[0]) {\n const keys = Object.keys(data[0]);\n return keys[0] ?? null;\n }\n return null;\n}\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Load and parse JSON file\n */\nfunction loadJSON(filePath: string, verbose: boolean): CollectionData | null {\n try {\n const fullPath = resolve(filePath);\n if (verbose) {\n console.info(`š Reading: ${fullPath}`);\n }\n const content = readFileSync(fullPath, 'utf-8');\n return JSON.parse(content) as CollectionData;\n } catch {\n return null;\n }\n}\n\n/**\n * Save JSON to file with pretty formatting\n */\nfunction saveJSON(filePath: string, data: unknown, verbose: boolean): boolean {\n try {\n const fullPath = resolve(filePath);\n const content = JSON.stringify(data, null, 2);\n writeFileSync(fullPath, content, 'utf-8');\n if (verbose) {\n console.info(`ā
Saved: ${fullPath}`);\n }\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Merge multiple collection files into one\n *\n * @example\n * ```typescript\n * const result = mergeCollections({\n * sourceFiles: ['colors-scales.json', 'colors.json'],\n * outputFile: 'merged-colors.json',\n * });\n * ```\n */\nexport function mergeCollections(options: MergeOptions): MergeResult {\n const { sourceFiles, outputFile, strategy = 'last', dryRun = false, verbose = false } = options;\n\n const errors: string[] = [];\n const conflicts: string[] = [];\n\n if (sourceFiles.length < 2) {\n return {\n success: false,\n collectionsCount: 0,\n tokensCount: 0,\n outputFile,\n errors: ['At least two source files are required'],\n };\n }\n\n // Validate files exist\n for (const file of sourceFiles) {\n if (!existsSync(file)) {\n errors.push(`Source file not found: ${file}`);\n }\n }\n\n if (errors.length > 0) {\n return {\n success: false,\n collectionsCount: 0,\n tokensCount: 0,\n outputFile,\n errors,\n };\n }\n\n if (verbose) {\n console.info('š Starting merge process...\\n');\n }\n\n // Load all source files\n const collections: { name: string | null; data: TokenObject; tokenCount: number }[] = [];\n\n for (const file of sourceFiles) {\n const data = loadJSON(file, verbose);\n if (!data || !Array.isArray(data) || !data[0]) {\n errors.push(`Invalid collection structure in: ${file}`);\n continue;\n }\n\n const name = getCollectionName(data);\n const collectionData = name\n ? (data[0][name] as TokenObject)\n : (data[0] as unknown as TokenObject);\n const tokenCount = countTokens(collectionData);\n\n if (verbose) {\n console.info(`š¦ Collection: \"${name ?? 'unknown'}\" (${tokenCount} tokens)`);\n }\n\n collections.push({ name, data: collectionData, tokenCount });\n }\n\n if (collections.length < 2) {\n return {\n success: false,\n collectionsCount: collections.length,\n tokensCount: 0,\n outputFile,\n errors: errors.length > 0 ? errors : ['Not enough valid collections to merge'],\n };\n }\n\n // Determine unified collection name\n const collectionNames = collections.map((c) => c.name).filter((n): n is string => n !== null);\n const defaultName = collectionNames[0] ?? 'Tokens';\n const unifiedName = collectionNames.includes('Colors')\n ? 'Colors'\n : collectionNames.reduce((a, b) => (a.length <= b.length ? a : b), defaultName);\n\n if (verbose) {\n console.info(`\\nšÆ Unified collection name: \"${unifiedName}\"`);\n console.info('\\nš Merging structures...');\n }\n\n // Merge collections based on strategy\n const firstCollection = collections[0];\n if (!firstCollection) {\n return {\n success: false,\n collectionsCount: 0,\n tokensCount: 0,\n outputFile,\n errors: ['No collections to merge'],\n };\n }\n\n let merged: TokenObject = firstCollection.data;\n for (let i = 1; i < collections.length; i++) {\n const source = collections[i];\n if (!source) {\n continue;\n }\n if (strategy === 'first') {\n // First wins - merge source into target but target takes precedence\n merged = deepMerge(source.data, merged, verbose);\n } else {\n // Last wins (default) - source overwrites target\n merged = deepMerge(merged, source.data, verbose);\n }\n }\n\n // Remove duplicate sections\n if (verbose) {\n console.info('šļø Checking for duplicate sections...');\n }\n const modes = merged['modes'] as TokenObject | undefined;\n if (modes) {\n for (const modeName of Object.keys(modes)) {\n const mode = modes[modeName] as TokenObject | undefined;\n const colors = mode?.['colors'] as TokenObject | undefined;\n\n if (colors) {\n for (const sectionName of Object.keys(colors)) {\n if (isDuplicateSection(colors[sectionName])) {\n if (verbose) {\n console.info(` ā ļø Removing duplicate section: ${sectionName}`);\n }\n delete colors[sectionName];\n }\n }\n }\n }\n }\n\n // Normalize references\n if (verbose) {\n const normalized = unifiedName.toLowerCase().replace(/\\s+/g, '');\n console.info(`š Normalizing references to lowercase \"{${normalized}.\" format...`);\n }\n for (const coll of collections) {\n if (coll.name) {\n updateReferences(merged, coll.name, unifiedName, unifiedName);\n }\n }\n\n // Sort properties\n if (verbose) {\n console.info('š Sorting properties alphabetically...');\n }\n const sorted = sortProperties(merged) as TokenObject;\n\n // Count final tokens\n const tokensCount = countTokens(sorted);\n\n if (verbose) {\n console.info(`⨠Merged collection: ${tokensCount} tokens\\n`);\n }\n\n // Create output structure\n const output = [{ [unifiedName]: sorted }];\n\n // Save if not dry run\n if (!dryRun) {\n if (!saveJSON(outputFile, output, verbose)) {\n errors.push(`Failed to write output file: ${outputFile}`);\n return {\n success: false,\n collectionsCount: collections.length,\n tokensCount,\n outputFile,\n errors,\n conflicts: conflicts.length > 0 ? conflicts : undefined,\n };\n }\n }\n\n if (verbose) {\n console.info('\\nā
Merge complete!');\n console.info('š Summary:');\n for (const coll of collections) {\n console.info(` Source: ${coll.tokenCount} tokens`);\n }\n console.info(` Merged: ${tokensCount} tokens`);\n }\n\n return {\n success: true,\n collectionsCount: collections.length,\n tokensCount,\n outputFile,\n conflicts: conflicts.length > 0 ? conflicts : undefined,\n errors: errors.length > 0 ? errors : undefined,\n };\n}\n\n/**\n * CLI entry point for merging collections\n */\nexport function mergeCollectionsCLI(source1: string, source2: string, output: string): boolean {\n const result = mergeCollections({\n sourceFiles: [source1, source2],\n outputFile: output,\n verbose: true,\n });\n\n if (result.errors) {\n for (const error of result.errors) {\n console.error(`ā ${error}`);\n }\n }\n\n return result.success;\n}\n","/**\n * Scanner for finding stylesheet files in directories\n *\n * @packageDocumentation\n */\n\n/* eslint-disable security/detect-non-literal-regexp */\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport type { StyleScannerOptions, StyleScannerResult, StyleScannedFile } from './types.js';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default ignore patterns\n */\nconst DEFAULT_IGNORE_PATTERNS = [\n '**/node_modules/**',\n '**/.git/**',\n '**/_index.scss',\n '**/*.test.scss',\n '**/*.spec.scss',\n '**/test/**',\n '**/tests/**',\n];\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Convert a glob pattern to a regular expression\n */\nfunction globToRegex(pattern: string): RegExp {\n const regex = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&') // Escape special regex chars (except * and ?)\n .replace(/\\*\\*/g, '<<<GLOBSTAR>>>') // Temporarily replace **\n .replace(/\\*/g, '[^/]*') // * matches anything except /\n .replace(/\\?/g, '.') // ? matches single char\n .replace(/<<<GLOBSTAR>>>/g, '.*'); // ** matches anything including /\n return new RegExp(`^${regex}$`);\n}\n\n/**\n * Check if a path matches any of the ignore patterns\n */\nfunction matchesIgnorePattern(relativePath: string, patterns: string[]): boolean {\n for (const pattern of patterns) {\n const regex = globToRegex(pattern);\n if (regex.test(relativePath)) {\n return true;\n }\n // Also check just the filename\n const fileName = path.basename(relativePath);\n if (regex.test(fileName)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Recursively scan a directory for files\n */\nasync function scanDirectory(\n dir: string,\n rootDir: string,\n extension: string,\n ignorePatterns: string[],\n maxDepth: number,\n currentDepth: number,\n followSymlinks: boolean\n): Promise<StyleScannedFile[]> {\n const files: StyleScannedFile[] = [];\n\n if (currentDepth > maxDepth) {\n return files;\n }\n\n try {\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(dir, entry.name);\n const relativePath = path.relative(rootDir, entryPath);\n\n // Check ignore patterns\n if (matchesIgnorePattern(relativePath, ignorePatterns)) {\n continue;\n }\n\n if (entry.isDirectory() || (followSymlinks && entry.isSymbolicLink())) {\n // Recurse into directory\n const subFiles = await scanDirectory(\n entryPath,\n rootDir,\n extension,\n ignorePatterns,\n maxDepth,\n currentDepth + 1,\n followSymlinks\n );\n files.push(...subFiles);\n } else if (entry.isFile() && entry.name.endsWith(`.${extension}`)) {\n // Add file\n const stat = await fs.promises.stat(entryPath);\n files.push({\n absolutePath: entryPath,\n relativePath,\n name: path.basename(entry.name, `.${extension}`),\n extension: extension as 'scss' | 'css',\n size: stat.size,\n mtime: stat.mtime,\n depth: currentDepth,\n });\n }\n }\n } catch (error) {\n // Directory read error - skip silently\n console.warn(`Warning: Could not read directory ${dir}: ${(error as Error).message}`);\n }\n\n return files;\n}\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Scan directories for stylesheet files\n *\n * @param options Scanner options\n * @returns Scanner result with found files\n *\n * @example\n * ```typescript\n * const result = await scanDirectories({\n * directories: ['src/styles/overrides', 'src/styles/custom'],\n * extension: 'scss',\n * });\n *\n * console.log(`Found ${result.totalFiles} files`);\n * ```\n */\nexport async function scanDirectories(options: StyleScannerOptions): Promise<StyleScannerResult> {\n const {\n directories,\n extension,\n ignorePatterns = DEFAULT_IGNORE_PATTERNS,\n followSymlinks = false,\n maxDepth = 10,\n } = options;\n\n const files: StyleScannedFile[] = [];\n const scannedDirs: string[] = [];\n const missingDirs: string[] = [];\n\n for (const dir of directories) {\n const absoluteDir = path.resolve(dir);\n\n // Check if directory exists\n try {\n const stat = await fs.promises.stat(absoluteDir);\n if (!stat.isDirectory()) {\n missingDirs.push(absoluteDir);\n continue;\n }\n } catch {\n missingDirs.push(absoluteDir);\n continue;\n }\n\n scannedDirs.push(absoluteDir);\n\n // Scan directory recursively\n const foundFiles = await scanDirectory(\n absoluteDir,\n absoluteDir,\n extension,\n ignorePatterns,\n maxDepth,\n 0,\n followSymlinks\n );\n\n files.push(...foundFiles);\n }\n\n // Calculate totals\n const totalSize = files.reduce((sum, file) => sum + file.size, 0);\n\n return {\n files,\n directories: scannedDirs,\n missingDirectories: missingDirs,\n totalFiles: files.length,\n totalSize,\n };\n}\n\n/**\n * Sort scanned files according to specified order\n *\n * @param files Files to sort\n * @param order Sort order\n * @returns Sorted files\n */\nexport function sortFiles(\n files: StyleScannedFile[],\n order: 'alphabetical' | 'directory-first' = 'alphabetical'\n): StyleScannedFile[] {\n const sorted = [...files];\n\n if (order === 'alphabetical') {\n sorted.sort((a, b) => a.name.localeCompare(b.name));\n } else if (order === 'directory-first') {\n sorted.sort((a, b) => {\n // First by directory\n const dirA = path.dirname(a.relativePath);\n const dirB = path.dirname(b.relativePath);\n if (dirA !== dirB) {\n return dirA.localeCompare(dirB);\n }\n // Then by name\n return a.name.localeCompare(b.name);\n });\n }\n\n return sorted;\n}\n\n/**\n * Filter files matching patterns\n *\n * @param files Files to filter\n * @param patterns Glob patterns to match\n * @param include If true, keep matching files; if false, exclude matching\n * @returns Filtered files\n */\nexport function filterFiles(\n files: StyleScannedFile[],\n patterns: string[],\n include = false\n): StyleScannedFile[] {\n return files.filter((file) => {\n const matches = matchesIgnorePattern(file.relativePath, patterns);\n return include ? matches : !matches;\n });\n}\n\n/**\n * Get default ignore patterns\n */\nexport function getDefaultIgnorePatterns(): string[] {\n return [...DEFAULT_IGNORE_PATTERNS];\n}\n","/**\n * Merge stylesheet content\n *\n * @packageDocumentation\n */\n\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport type { MergeConfig, MergeContent, StyleMergeResult } from './types.js';\n\n// ============================================================================\n// Content Generation\n// ============================================================================\n\n/**\n * Generate header comment for merged file\n */\nfunction generateHeaderComment(_format: 'scss' | 'css'): string {\n const timestamp = new Date().toISOString();\n const comment = `/**\n * DSAi Design Tokens - Merged Bundle\n * Generated: ${timestamp}\n *\n * This file was automatically generated and includes:\n * - Generated design tokens\n * - Merged additional stylesheets\n *\n * DO NOT EDIT DIRECTLY - changes will be overwritten on rebuild\n */`;\n\n return comment;\n}\n\n/**\n * Generate source comment for section\n */\nfunction generateSourceComment(source: string, _format: 'scss' | 'css'): string {\n return `/* ========== Source: ${source} ========== */`;\n}\n\n// ============================================================================\n// Issue Detection\n// ============================================================================\n\n/**\n * Detect potential issues in merged content\n */\nfunction detectMergeIssues(content: string, format: 'scss' | 'css'): string[] {\n const warnings: string[] = [];\n\n // Check for duplicate :root selectors\n const rootMatches = content.match(/:root\\s*\\{/g);\n const rootCount = rootMatches ? rootMatches.length : 0;\n if (rootCount > 1) {\n warnings.push(\n `Found ${rootCount} :root selectors. Consider consolidating for better performance.`\n );\n }\n\n // Check for duplicate CSS custom properties (simplified check)\n const customProps = content.match(/--[\\w-]+:/g) ?? [];\n const uniqueProps = new Set(customProps);\n if (customProps.length > uniqueProps.size) {\n warnings.push(\n `Found duplicate CSS custom properties. Later definitions will override earlier ones.`\n );\n }\n\n // SCSS-specific checks\n if (format === 'scss') {\n // Check for @import after content\n const importAfterContent = /@import\\s+['\"][^'\"]+['\"];?\\s*$/gm;\n if (importAfterContent.test(content)) {\n warnings.push(`Found @import statements that may not be at the top of the file.`);\n }\n }\n\n return warnings;\n}\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Merge stylesheet content in specified order\n *\n * @param tokenContent Generated token content\n * @param userContent User stylesheet content\n * @param config Merge configuration\n * @returns Merged result\n *\n * @example\n * ```typescript\n * const result = await mergeContent(\n * { content: ':root { --color-primary: blue; }', format: 'css' },\n * [{ source: 'overrides.css', content: ':root { --color-bg: white; }' }],\n * { mergeOrder: 'after' }\n * );\n * ```\n */\nexport async function mergeContent(\n tokenContent: { content: string; format: 'scss' | 'css' },\n userContent: MergeContent[],\n config: Partial<MergeConfig> = {}\n): Promise<StyleMergeResult> {\n const { mergeOrder = 'after' } = config;\n\n const parts: string[] = [];\n const sources: string[] = ['<generated-tokens>'];\n const warnings: string[] = [];\n\n // Add header comment\n parts.push(generateHeaderComment(tokenContent.format));\n\n // Build content based on merge order\n if (mergeOrder === 'before') {\n // User styles first\n for (const content of userContent) {\n parts.push(generateSourceComment(content.source, tokenContent.format));\n parts.push(content.content);\n sources.push(content.source);\n }\n // Then token styles\n parts.push(generateSourceComment('<generated-tokens>', tokenContent.format));\n parts.push(tokenContent.content);\n } else {\n // Token styles first\n parts.push(generateSourceComment('<generated-tokens>', tokenContent.format));\n parts.push(tokenContent.content);\n // Then user styles\n for (const content of userContent) {\n parts.push(generateSourceComment(content.source, tokenContent.format));\n parts.push(content.content);\n sources.push(content.source);\n }\n }\n\n // Check for potential issues\n const mergedContent = parts.join('\\n\\n');\n warnings.push(...detectMergeIssues(mergedContent, tokenContent.format));\n\n return {\n content: mergedContent,\n sources,\n warnings,\n };\n}\n\n/**\n * Load content from files\n *\n * @param files File paths to load\n * @param type Content type (token or user)\n * @param format File format\n * @returns Loaded content\n */\nexport async function loadContent(\n files: string[],\n type: 'token' | 'user',\n format: 'scss' | 'css'\n): Promise<MergeContent[]> {\n const content: MergeContent[] = [];\n\n for (const filePath of files) {\n try {\n const fileContent = await fs.promises.readFile(filePath, 'utf-8');\n content.push({\n source: filePath,\n content: fileContent,\n type,\n format,\n });\n } catch (error) {\n console.warn(`Failed to load file: ${filePath}`, error);\n }\n }\n\n return content;\n}\n\n/**\n * Process SCSS imports header\n *\n * @param importHeader Import header configuration\n * @param configDir Config directory for resolving relative paths\n * @returns Processed import statements\n */\nexport function processScssImportHeader(\n importHeader: string | string[] | undefined,\n configDir: string\n): string {\n if (!importHeader) {\n return '';\n }\n\n const imports = Array.isArray(importHeader) ? importHeader : [importHeader];\n const statements: string[] = [];\n\n for (const importPath of imports) {\n // Determine if it's a path or module import\n if (importPath.startsWith('.') || importPath.startsWith('/')) {\n // Relative or absolute path\n const resolvedPath = path.resolve(configDir, importPath);\n statements.push(`@import '${resolvedPath}';`);\n } else {\n // Module import (e.g., 'normalize.css')\n statements.push(`@import '${importPath}';`);\n }\n }\n\n return `${statements.join('\\n')}\\n\\n`;\n}\n\n/**\n * Add SCSS import header to content\n *\n * @param content SCSS content\n * @param importHeader Import header to add\n * @param configDir Config directory for resolving paths\n * @returns Content with import header\n */\nexport function addScssImportHeader(\n content: string,\n importHeader: string | string[] | undefined,\n configDir: string\n): string {\n const header = processScssImportHeader(importHeader, configDir);\n if (!header) {\n return content;\n }\n\n return header + content;\n}\n","/**\n * Bundle generator for combined stylesheets\n *\n * @packageDocumentation\n */\n\n/* eslint-disable security/detect-non-literal-fs-filename */\n/* eslint-disable security/detect-unsafe-regex */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { loadContent, mergeContent } from './merger.js';\nimport { sortFiles } from './scanner.js';\n\nimport type { BundleConfig, BundleResult, StyleScannedFile, StyleMergeResult } from './types.js';\n\n// ============================================================================\n// Content Processing\n// ============================================================================\n\n/**\n * Remove source comments from content\n */\nfunction removeSourceComments(content: string): string {\n return content.replace(/\\/\\* ========== Source: .+ ========== \\*\\/\\n?/g, '');\n}\n\n/**\n * Simple CSS minification\n * Note: For production, consider using a proper minifier like cssnano\n */\nfunction minifyContent(content: string): string {\n return (\n content\n // Remove comments (but keep /*! ... */ license comments)\n .replace(/\\/\\*(?!!)[^*]*\\*+([^/*][^*]*\\*+)*\\//g, '')\n // Remove whitespace\n .replace(/\\s+/g, ' ')\n // Remove space around special characters\n .replace(/\\s*([{}:;,>+~])\\s*/g, '$1')\n // Remove trailing semicolons before closing braces\n .replace(/;}/g, '}')\n // Remove empty rules\n .replace(/[^{}]+\\{\\s*\\}/g, '')\n .trim()\n );\n}\n\n/**\n * Detect output extension based on content\n */\nfunction detectExtension(mergeResult: StyleMergeResult): string {\n const hasScssFeatures = mergeResult.content.match(/@mixin|@include|\\$[a-zA-Z]/);\n return hasScssFeatures ? '.scss' : '.css';\n}\n\n/**\n * Generate a basic sourcemap\n */\nfunction generateSourcemap(sources: string[], name: string, extension: string): string {\n const sourceMapV3 = {\n version: 3,\n file: `${name}${extension}`,\n sources,\n names: [],\n mappings: '',\n };\n\n return JSON.stringify(sourceMapV3, null, 2);\n}\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Create a stylesheet bundle\n *\n * @param mergeResult Result from merge operation\n * @param config Bundle configuration\n * @returns Bundle result\n *\n * @example\n * ```typescript\n * const bundle = await createBundle(mergeResult, {\n * name: 'tokens-bundle',\n * outputDir: 'dist',\n * includeSourceComments: true,\n * sourcemaps: true,\n * minify: false,\n * });\n * ```\n */\nexport async function createBundle(\n mergeResult: StyleMergeResult,\n config: BundleConfig\n): Promise<BundleResult> {\n const { name, outputDir, includeSourceComments, sourcemaps, minify } = config;\n\n let content = mergeResult.content;\n\n // Optionally remove source comments\n if (!includeSourceComments) {\n content = removeSourceComments(content);\n }\n\n // Minify if requested\n let minifiedSize: number | undefined;\n if (minify) {\n const minified = minifyContent(content);\n minifiedSize = Buffer.byteLength(minified, 'utf-8');\n content = minified;\n }\n\n // Determine output path\n const extension = detectExtension(mergeResult);\n const outputPath = path.join(outputDir, `${name}${extension}`);\n\n // Ensure output directory exists\n await fs.promises.mkdir(outputDir, { recursive: true });\n\n // Write bundle\n await fs.promises.writeFile(outputPath, content, 'utf-8');\n\n // Write sourcemap if requested\n let sourcemap: string | undefined;\n if (sourcemaps) {\n sourcemap = generateSourcemap(mergeResult.sources, name, extension);\n const mapPath = `${outputPath}.map`;\n await fs.promises.writeFile(mapPath, sourcemap, 'utf-8');\n\n // Add sourcemap reference to content\n const mapRef = `\\n/*# sourceMappingURL=${name}${extension}.map */`;\n content += mapRef;\n await fs.promises.writeFile(outputPath, content, 'utf-8');\n }\n\n return {\n content,\n sourcemap,\n outputPath,\n files: mergeResult.sources,\n size: Buffer.byteLength(content, 'utf-8'),\n minifiedSize,\n };\n}\n\n/**\n * Create both CSS and SCSS bundles\n *\n * @param tokenCss Generated CSS tokens\n * @param tokenScss Generated SCSS tokens\n * @param cssFiles User CSS files (StyleScannedFile objects)\n * @param scssFiles User SCSS files (StyleScannedFile objects)\n * @param config Bundle configuration\n * @returns Map of bundle type to result\n */\nexport async function createBundles(\n tokenCss: string,\n tokenScss: string,\n cssFiles: StyleScannedFile[],\n scssFiles: StyleScannedFile[],\n config: Omit<BundleConfig, 'name'> & { baseName?: string }\n): Promise<{ css?: BundleResult; scss?: BundleResult }> {\n const { baseName = 'tokens-bundle', ...bundleConfig } = config;\n const results: { css?: BundleResult; scss?: BundleResult } = {};\n\n // Create CSS bundle if we have CSS content\n const sortedCss = sortFiles(cssFiles);\n if (tokenCss || sortedCss.length > 0) {\n const userContent = await loadContent(\n sortedCss.map((f) => f.absolutePath),\n 'user',\n 'css'\n );\n const mergeResult = await mergeContent({ content: tokenCss, format: 'css' }, userContent);\n\n results.css = await createBundle(mergeResult, {\n ...bundleConfig,\n name: baseName,\n });\n }\n\n // Create SCSS bundle if we have SCSS content\n const sortedScss = sortFiles(scssFiles);\n if (tokenScss || sortedScss.length > 0) {\n const userContent = await loadContent(\n sortedScss.map((f) => f.absolutePath),\n 'user',\n 'scss'\n );\n const mergeResult = await mergeContent({ content: tokenScss, format: 'scss' }, userContent);\n\n results.scss = await createBundle(mergeResult, {\n ...bundleConfig,\n name: `_${baseName}`,\n });\n }\n\n return results;\n}\n\n/**\n * Create a bundle from scanned files (no token content)\n *\n * @param files Scanned files to bundle\n * @param format Output format\n * @param config Bundle configuration\n * @returns Bundle result\n */\nexport async function createBundleFromFiles(\n files: StyleScannedFile[],\n format: 'css' | 'scss',\n config: BundleConfig\n): Promise<BundleResult> {\n const sorted = sortFiles(files);\n const userContent = await loadContent(\n sorted.map((f) => f.absolutePath),\n 'user',\n format\n );\n\n // Create merge result with empty token content\n const mergeResult = await mergeContent({ content: '', format }, userContent);\n\n return createBundle(mergeResult, config);\n}\n","/**\n * Style merge and bundle module\n *\n * @packageDocumentation\n */\n\n// Types\nexport type {\n BundleConfig,\n BundleResult,\n MergeConfig,\n MergeContent,\n OutputConfig,\n PlaceholderValues,\n StyleScannedFile,\n StyleScannerOptions,\n StyleScannerResult,\n StyleMergeResult,\n} from './types.js';\n\n// Scanner\nexport {\n filterFiles,\n getDefaultIgnorePatterns,\n scanDirectories,\n sortFiles,\n} from './scanner.js';\n\n// Merger\nexport {\n addScssImportHeader,\n loadContent,\n mergeContent,\n processScssImportHeader,\n} from './merger.js';\n\n// Bundler\nexport { createBundle, createBundleFromFiles, createBundles } from './bundler.js';\n","/**\n * Output path resolver with placeholder support\n *\n * @packageDocumentation\n */\n\n/* eslint-disable security/detect-non-literal-fs-filename */\n/* eslint-disable security/detect-object-injection */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport type { OutputFormat } from '../../config/types.js';\nimport type { OutputConfig, PlaceholderValues } from '../merge/types.js';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default file names per format\n */\nexport const DEFAULT_FILE_NAMES: Record<OutputFormat, string> = {\n css: 'tokens.css',\n scss: '_tokens.scss',\n js: 'tokens.js',\n ts: 'tokens.ts',\n json: 'tokens.json',\n android: 'tokens.xml',\n ios: 'Tokens.swift',\n};\n\n// ============================================================================\n// Placeholder Functions\n// ============================================================================\n\n/**\n * Replace placeholders in a string\n *\n * @param template Template string with placeholders\n * @param values Values to replace\n * @returns String with placeholders replaced\n */\nexport function replacePlaceholders(template: string, values: PlaceholderValues): string {\n const now = new Date();\n\n const allValues: Record<string, string> = {\n theme: values.theme ?? 'default',\n name: values.name ?? 'tokens',\n format: values.format ?? '',\n date: values.date ?? now.toISOString().split('T')[0] ?? '',\n timestamp: values.timestamp ?? now.toISOString(),\n };\n\n let result = template;\n for (const [key, value] of Object.entries(allValues)) {\n result = result.replaceAll(`{${key}}`, value);\n }\n\n return result;\n}\n\n// ============================================================================\n// Path Resolution\n// ============================================================================\n\n/**\n * Resolve output path for a specific format\n *\n * @param format Output format\n * @param config Output configuration\n * @param values Placeholder values\n * @returns Resolved output path\n *\n * @example\n * ```typescript\n * const outputPath = resolveOutputPath('css', {\n * baseDir: 'dist',\n * formatDirs: { css: 'dist/css' },\n * fileNames: { css: 'design-tokens-{theme}.css' },\n * }, { theme: 'light' });\n *\n * // Returns: 'dist/css/design-tokens-light.css'\n * ```\n */\nexport function resolveOutputPath(\n format: OutputFormat,\n config: OutputConfig,\n values: PlaceholderValues = {}\n): string {\n // Determine directory\n const dir = config.formatDirs[format] ?? config.baseDir;\n\n // Determine file name\n let fileName = config.fileNames[format] ?? DEFAULT_FILE_NAMES[format];\n\n // Replace placeholders\n fileName = replacePlaceholders(fileName, values);\n\n return path.join(dir, fileName);\n}\n\n/**\n * Resolve all output paths for all formats\n *\n * @param formats Formats to generate\n * @param config Output configuration\n * @param values Placeholder values\n * @returns Map of format to output path\n */\nexport function resolveAllOutputPaths(\n formats: OutputFormat[],\n config: OutputConfig,\n values: PlaceholderValues = {}\n): Record<OutputFormat, string> {\n const result: Partial<Record<OutputFormat, string>> = {};\n\n for (const format of formats) {\n result[format] = resolveOutputPath(format, config, values);\n }\n\n return result as Record<OutputFormat, string>;\n}\n\n// ============================================================================\n// Validation\n// ============================================================================\n\n/**\n * Validate output paths don't conflict\n *\n * @param paths Output paths to validate\n * @returns Validation result with any conflicts found\n */\nexport function validateOutputPaths(paths: Record<string, string>): {\n valid: boolean;\n conflicts: [string, string][];\n} {\n const conflicts: [string, string][] = [];\n const pathToFormat: Record<string, string> = {};\n\n for (const [format, outputPath] of Object.entries(paths)) {\n const normalized = path.normalize(outputPath);\n const existingFormat = pathToFormat[normalized];\n\n if (existingFormat !== undefined) {\n conflicts.push([existingFormat, format]);\n } else {\n pathToFormat[normalized] = format;\n }\n }\n\n return {\n valid: conflicts.length === 0,\n conflicts,\n };\n}\n\n// ============================================================================\n// Directory Management\n// ============================================================================\n\n/**\n * Ensure all output directories exist\n *\n * @param paths Output paths\n * @returns Created directories\n */\nexport async function ensureOutputDirs(paths: Record<string, string>): Promise<string[]> {\n const directories = new Set<string>();\n for (const outputPath of Object.values(paths)) {\n directories.add(path.dirname(outputPath));\n }\n\n const created: string[] = [];\n for (const dir of directories) {\n await fs.promises.mkdir(dir, { recursive: true });\n created.push(dir);\n }\n\n return created;\n}\n\n/**\n * Create output configuration from token config\n *\n * @param tokenConfig Token configuration\n * @returns Output configuration\n */\nexport function createOutputConfig(tokenConfig: {\n outputDir?: string;\n outputDirs?: Partial<Record<OutputFormat, string>>;\n outputFileNames?: Partial<Record<OutputFormat, string>>;\n}): OutputConfig {\n return {\n baseDir: tokenConfig.outputDir ?? 'dist',\n formatDirs: tokenConfig.outputDirs ?? {},\n fileNames: tokenConfig.outputFileNames ?? {},\n createDirs: true,\n };\n}\n","/**\n * Output path resolution module\n *\n * @packageDocumentation\n */\n\nexport {\n createOutputConfig,\n DEFAULT_FILE_NAMES,\n ensureOutputDirs,\n replacePlaceholders,\n resolveAllOutputPaths,\n resolveOutputPath,\n validateOutputPaths,\n} from './resolver.js';\n","/**\n * Style Dictionary Type Definitions\n *\n * Types for Style Dictionary integration including tokens, transforms,\n * formats, preprocessors, and configuration.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/types\n */\n\n// ============================================================================\n// Token Types\n// ============================================================================\n\n/**\n * Style Dictionary token (runtime representation)\n */\nexport interface SDToken {\n /** Token name (after name transforms) */\n name: string;\n\n /** Resolved value (after value transforms) */\n value: unknown;\n\n /** Original value (may contain references) */\n original: {\n value: unknown;\n $value?: unknown;\n };\n\n /** Token path segments */\n path: string[];\n\n /** DTCG $value property */\n $value?: unknown;\n\n /** Token type */\n type?: string;\n\n /** DTCG $type property */\n $type?: string;\n\n /** Token description */\n description?: string;\n\n /** DTCG $description property */\n $description?: string;\n\n /** Comment for documentation */\n comment?: string;\n\n /** DTCG $extensions */\n $extensions?: Record<string, unknown>;\n\n /** DTCG $scopes (from Figma Variables) */\n $scopes?: string[];\n\n /** CTI (Category/Type/Item) attributes */\n attributes?: {\n category?: string;\n type?: string;\n item?: string;\n subitem?: string;\n state?: string;\n };\n\n /** File path where token was defined */\n filePath?: string;\n\n /** Whether token is a reference to another token */\n isSource?: boolean;\n}\n\n/**\n * Style Dictionary dictionary containing all tokens\n */\nexport interface SDDictionary {\n /** Flat array of all tokens */\n allTokens: SDToken[];\n\n /** Nested token structure */\n tokens: Record<string, unknown>;\n\n /** Unfiltered tokens (before platform filtering) */\n unfilteredTokens: Record<string, unknown>;\n}\n\n// ============================================================================\n// Transform Types\n// ============================================================================\n\n/**\n * Transform type - what aspect of the token is being transformed\n */\nexport type TransformType = 'name' | 'value' | 'attribute';\n\n/**\n * Options passed to transform functions\n */\nexport interface SDTransformOptions {\n /** Base font size for rem conversion (default: 16) */\n basePxFontSize?: number;\n\n /** CSS variable prefix */\n prefix?: string;\n\n /** Additional options */\n [key: string]: unknown;\n}\n\n/**\n * Transform definition for Style Dictionary\n */\nexport interface TransformDefinition {\n /** Unique transform name (e.g., 'fontWeight/unitless') */\n name: string;\n\n /** Transform type */\n type: TransformType;\n\n /**\n * Filter function - return true to apply transform\n * If omitted, transform applies to all tokens\n */\n filter?: (token: SDToken) => boolean;\n\n /**\n * Transform function\n * @param token - The token being transformed\n * @param options - Transform options from platform config\n * @returns Transformed value\n */\n transform: (token: SDToken, options?: SDTransformOptions) => unknown;\n}\n\n/**\n * Transform group definition\n */\nexport interface TransformGroupDefinition {\n /** Unique group name (e.g., 'custom/css') */\n name: string;\n\n /** Ordered list of transform names to apply */\n transforms: string[];\n}\n\n// ============================================================================\n// Format Types\n// ============================================================================\n\n/**\n * Platform configuration passed to formats\n */\nexport interface SDPlatform {\n /** Transform group to use */\n transformGroup?: string;\n\n /** Individual transforms (alternative to transformGroup) */\n transforms?: string[];\n\n /** Output path prefix */\n buildPath?: string;\n\n /** Files to generate */\n files?: SDFile[];\n\n /** Platform-specific options */\n options?: Record<string, unknown>;\n}\n\n/**\n * File configuration for platform output\n */\nexport interface SDFile {\n /** Output file name */\n destination: string;\n\n /** Format to use for generating content */\n format: string;\n\n /**\n * Filter tokens to include in this file\n * Can be a string (filter name) or function\n */\n filter?: string | ((token: SDToken) => boolean);\n\n /** File-specific options passed to format */\n options?: Record<string, unknown>;\n}\n\n/**\n * Arguments passed to format functions\n */\nexport interface SDFormatArgs {\n /** Dictionary containing all tokens */\n dictionary: SDDictionary;\n\n /** Options from file config */\n options: Record<string, unknown>;\n\n /** Platform configuration */\n platform: SDPlatform;\n\n /** File configuration */\n file: SDFile;\n}\n\n/**\n * Format definition for Style Dictionary\n */\nexport interface FormatDefinition {\n /** Unique format name (e.g., 'css/variables-with-comments') */\n name: string;\n\n /**\n * Format function - generates file content\n * @param args - Format arguments\n * @returns File content as string\n */\n format: (args: SDFormatArgs) => string;\n}\n\n// ============================================================================\n// Preprocessor Types\n// ============================================================================\n\n/**\n * Preprocessor definition for Style Dictionary\n */\nexport interface PreprocessorDefinition {\n /** Unique preprocessor name */\n name: string;\n\n /**\n * Preprocessor function - modifies token dictionary before processing\n * @param dictionary - Raw token dictionary\n * @returns Modified dictionary\n */\n preprocessor: (dictionary: Record<string, unknown>) => Record<string, unknown>;\n}\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * Style Dictionary log configuration\n */\nexport interface SDLogConfig {\n /** Logging verbosity */\n verbosity?: 'default' | 'silent' | 'verbose';\n\n /** How to handle warnings */\n warnings?: 'warn' | 'error' | 'disabled';\n\n /** How to handle errors */\n errors?: 'error' | 'throw';\n}\n\n/**\n * Full Style Dictionary configuration\n */\nexport interface SDConfig {\n /** Logging configuration */\n log?: SDLogConfig;\n\n /** Preprocessors to run on source tokens */\n preprocessors?: string[];\n\n /** Source token file patterns */\n source?: string[];\n\n /** Additional files to include */\n include?: string[];\n\n /** Platform configurations */\n platforms?: Record<string, SDPlatform>;\n}\n\n/**\n * Options for creating Style Dictionary configuration\n */\nexport interface CreateSDConfigOptions {\n /** Token source files (glob patterns) */\n source?: string[];\n\n /** CSS variable prefix (default: '--dsai-') */\n prefix?: string;\n\n /** Output directory base path */\n buildPath?: string;\n\n /** Base font size for rem conversion (default: 16) */\n baseFontSize?: number;\n\n /** Whether to output references in generated files */\n outputReferences?: boolean;\n\n /** Additional transforms to register */\n customTransforms?: TransformDefinition[];\n\n /** Additional formats to register */\n customFormats?: FormatDefinition[];\n\n /** Additional preprocessors to register */\n customPreprocessors?: PreprocessorDefinition[];\n\n /** Platforms to include (default: all) */\n platforms?: SDPlatformType[];\n\n /** Enable verbose logging */\n verbose?: boolean;\n}\n\n/**\n * Available platform types\n */\nexport type SDPlatformType = 'css' | 'js' | 'ts' | 'scss' | 'scss-dist' | 'json';\n\n// ============================================================================\n// Registration Types\n// ============================================================================\n\n/**\n * Style Dictionary instance type (for registration functions)\n * This is a minimal interface - actual SD has more methods\n */\nexport interface StyleDictionaryInstance {\n registerTransform: (transform: {\n name: string;\n type: TransformType;\n filter?: (token: SDToken) => boolean;\n transform: (token: SDToken, options?: SDTransformOptions) => unknown;\n }) => void;\n\n registerTransformGroup: (group: { name: string; transforms: string[] }) => void;\n\n registerFormat: (format: { name: string; format: (args: SDFormatArgs) => string }) => void;\n\n registerPreprocessor: (preprocessor: {\n name: string;\n preprocessor: (dictionary: Record<string, unknown>) => Record<string, unknown>;\n }) => void;\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Check if a value is an SD token\n */\nexport function isSDToken(obj: unknown): obj is SDToken {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n\n const token = obj as Record<string, unknown>;\n\n // Must have name and path\n if (typeof token['name'] !== 'string') {\n return false;\n }\n\n if (!Array.isArray(token['path'])) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Check if token has a DTCG $value\n */\nexport function hasDTCGValue(token: SDToken): boolean {\n return token.$value !== undefined;\n}\n\n/**\n * Get token value (DTCG or legacy format)\n */\nexport function getSDTokenValue(token: SDToken): unknown {\n return token.$value ?? token.value;\n}\n\n/**\n * Get token type (DTCG or legacy format)\n */\nexport function getSDTokenType(token: SDToken): string | undefined {\n return token.$type ?? token.type;\n}\n","/**\n * CSS Dark Mode Variables Format\n *\n * Generates CSS custom properties scoped to [data-bs-theme=\"dark\"]\n * following Bootstrap 5.3+ color mode pattern.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/formats/css-dark-mode\n * @see https://getbootstrap.com/docs/5.3/customize/color-modes/\n */\n\nimport type { SDFormatArgs, FormatDefinition } from '../types.js';\n\n/**\n * css/variables-dark-mode format\n *\n * Generates CSS custom properties scoped to [data-bs-theme=\"dark\"]\n * for Bootstrap-compatible dark mode theming.\n *\n * @example\n * Output:\n * ```css\n * [data-bs-theme=\"dark\"] {\n * --dsai-body-bg: #212529;\n * --dsai-body-color: #dee2e6;\n * }\n * ```\n */\nexport const cssDarkModeVariables: FormatDefinition = {\n name: 'css/variables-dark-mode',\n format: ({ dictionary, options }: SDFormatArgs): string => {\n const prefix = (options['prefix'] as string) ?? '--';\n const selector = (options['selector'] as string) ?? '[data-bs-theme=\"dark\"]';\n\n const variables = dictionary.allTokens.map((token) => {\n const lines: string[] = [];\n\n // Add comment if present\n if (token.comment) {\n lines.push(` /* ${token.comment} */`);\n }\n\n // Add description if present (DTCG $description or legacy description)\n const description = token.$description ?? token.description;\n if (description && description !== token.comment) {\n lines.push(` /* ${description} */`);\n }\n\n // Get value (DTCG $value or legacy value)\n const tokenValue = token.$value !== undefined ? token.$value : token.value;\n const value = typeof tokenValue === 'string' ? tokenValue : JSON.stringify(tokenValue);\n\n // Add variable\n lines.push(` ${prefix}${token.name}: ${value};`);\n\n return lines.join('\\n');\n });\n\n return `${selector} {\\n${variables.join('\\n')}\\n}\\n`;\n },\n};\n","/**\n * CSS Variables Format\n *\n * Generates CSS custom properties with descriptive comments.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/formats/css-variables\n */\n\nimport type { SDFormatArgs, FormatDefinition } from '../types.js';\n\n/**\n * css/variables-with-comments format\n *\n * Generates CSS custom properties with descriptive comments.\n * Supports configurable prefix via options.\n *\n * @example\n * Output:\n * ```css\n * :root {\n * /* Primary brand color *\\/\n * --dsai-color-primary: #007bff;\n * --dsai-spacing-md: 1rem;\n * }\n * ```\n */\nexport const cssVariablesWithComments: FormatDefinition = {\n name: 'css/variables-with-comments',\n format: ({ dictionary, options }: SDFormatArgs): string => {\n const prefix = (options['prefix'] as string) ?? '--';\n\n const variables = dictionary.allTokens.map((token) => {\n const lines: string[] = [];\n\n // Add comment if present\n if (token.comment) {\n lines.push(` /* ${token.comment} */`);\n }\n\n // Add description if present (DTCG $description or legacy description)\n const description = token.$description ?? token.description;\n if (description && description !== token.comment) {\n lines.push(` /* ${description} */`);\n }\n\n // Get value (DTCG $value or legacy value)\n const tokenValue = token.$value !== undefined ? token.$value : token.value;\n const value = typeof tokenValue === 'string' ? tokenValue : JSON.stringify(tokenValue);\n\n // Add variable\n lines.push(` ${prefix}${token.name}: ${value};`);\n\n return lines.join('\\n');\n });\n\n return `:root {\\n${variables.join('\\n')}\\n}\\n`;\n },\n};\n","/**\n * TypeScript Declarations Format\n *\n * Generates TypeScript type declarations for design tokens.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/formats/typescript\n */\n\n/* eslint-disable security/detect-object-injection */\n\nimport type { SDFormatArgs, FormatDefinition, SDToken } from '../types.js';\n\n/**\n * Get TypeScript type from token value\n */\nfunction getTypeScriptType(token: SDToken): string {\n const value = token.value;\n if (typeof value === 'number') {\n return 'number';\n }\n if (typeof value === 'boolean') {\n return 'boolean';\n }\n return 'string';\n}\n\n/**\n * Token tree node for building interfaces\n */\ninterface TokenTreeNode {\n _isToken?: boolean;\n _type?: string;\n [key: string]: TokenTreeNode | boolean | string | undefined;\n}\n\n/**\n * Build nested interface structure\n */\nfunction buildTokenInterface(obj: TokenTreeNode, indent = 0): string {\n const spaces = ' '.repeat(indent);\n let output = '{\\n';\n\n for (const key of Object.keys(obj)) {\n // Skip internal markers\n if (key.startsWith('_')) {\n continue;\n }\n\n const value = obj[key];\n if (!value || typeof value !== 'object') {\n continue;\n }\n\n // Quote keys that need it (contain hyphens or start with numbers)\n const quotedKey = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) ? key : `\"${key}\"`;\n\n const typedValue = value as TokenTreeNode;\n\n // Check if this is a leaf token (has _isToken marker)\n if (typedValue._isToken) {\n output += `${spaces} ${quotedKey}: ${typedValue._type};\\n`;\n } else {\n // Nested object\n output += `${spaces} ${quotedKey}: ${buildTokenInterface(typedValue, indent + 1)}\\n`;\n }\n }\n\n output += `${spaces}}`;\n return output;\n}\n\n/**\n * Capitalize first letter\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * typescript/declarations format\n *\n * Generates TypeScript declarations with:\n * - DesignTokens interface with nested structure\n * - String literal types for each token category\n * - Flat token exports with proper types\n *\n * @example\n * Output:\n * ```typescript\n * export type ColorTokenName =\n * | 'color.primary'\n * | 'color.secondary';\n *\n * export interface DesignTokens {\n * color: {\n * primary: string;\n * secondary: string;\n * };\n * }\n *\n * export declare const colorPrimary: string;\n * export declare const tokens: DesignTokens;\n * ```\n */\nexport const typescriptDeclarations: FormatDefinition = {\n name: 'typescript/declarations',\n format: ({ dictionary }: SDFormatArgs): string => {\n // Build nested structure with type markers\n const tokenTree: TokenTreeNode = {};\n\n for (const token of dictionary.allTokens) {\n let current: TokenTreeNode = tokenTree;\n for (let i = 0; i < token.path.length - 1; i++) {\n const key = token.path[i] as string;\n // Guard against prototype pollution\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue;\n }\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key] as TokenTreeNode;\n }\n\n const lastKey = token.path[token.path.length - 1];\n if (lastKey) {\n current[lastKey] = {\n _isToken: true,\n _type: getTypeScriptType(token),\n };\n }\n }\n\n // Group tokens by category for string literal types\n const categories: Record<string, string[]> = {};\n for (const token of dictionary.allTokens) {\n const category = token.path[0];\n if (category) {\n if (!categories[category]) {\n categories[category] = [];\n }\n categories[category].push(token.path.join('.'));\n }\n }\n\n // Generate category types\n let literalTypes = '';\n for (const category of Object.keys(categories).sort()) {\n const categoryTokens = categories[category];\n if (!categoryTokens) {\n continue;\n }\n const typeName = `${capitalize(category)}TokenName`;\n literalTypes += `/**\\n * All ${category} token names as string literals\\n */\\n`;\n literalTypes += `export type ${typeName} =\\n`;\n literalTypes += categoryTokens.map((t) => ` | '${t}'`).join('\\n');\n literalTypes += ';\\n\\n';\n }\n\n // Generate all token names type\n const allTokenNames = dictionary.allTokens.map((t) => t.path.join('.'));\n literalTypes += `/**\\n * All token names as string literals\\n */\\n`;\n literalTypes += `export type TokenName =\\n`;\n literalTypes += allTokenNames.map((t) => ` | '${t}'`).join('\\n');\n literalTypes += ';\\n\\n';\n\n // Generate flat token exports\n let flatExports = '/**\\n * Flat token exports (camelCase names)\\n */\\n';\n for (const token of dictionary.allTokens) {\n const type = getTypeScriptType(token);\n flatExports += `export declare const ${token.name}: ${type};\\n`;\n }\n\n return `/**\n * Design Tokens - TypeScript Declarations\n * Auto-generated by @dsai-io/tools\n * DO NOT EDIT DIRECTLY\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// String Literal Types (for type-safe token access)\n// ============================================================================\n\n${literalTypes}\n// ============================================================================\n// Nested Token Interface\n// ============================================================================\n\n/**\n * Design tokens organized by category\n */\nexport interface DesignTokens ${buildTokenInterface(tokenTree)}\n\n// ============================================================================\n// Flat Token Exports\n// ============================================================================\n\n${flatExports}\n// ============================================================================\n// Default Export\n// ============================================================================\n\nexport declare const tokens: DesignTokens;\nexport default tokens;\n`;\n },\n};\n","/**\n * Style Dictionary Formats\n *\n * Exports all built-in formats and registration utilities.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/formats\n */\n\nimport { cssDarkModeVariables } from './css-dark-mode.js';\nimport { cssVariablesWithComments } from './css-variables.js';\nimport { typescriptDeclarations } from './typescript.js';\n\nimport type { FormatDefinition, StyleDictionaryInstance } from '../types.js';\n\n/**\n * All built-in formats\n */\nexport const builtInFormats: FormatDefinition[] = [\n cssDarkModeVariables,\n cssVariablesWithComments,\n typescriptDeclarations,\n];\n\n/**\n * Register all formats with Style Dictionary\n *\n * @param sd - Style Dictionary instance\n * @param customFormats - Additional custom formats to register\n *\n * @example\n * ```typescript\n * import StyleDictionary from 'style-dictionary';\n * import { registerFormats } from '@dsai-io/tools/tokens/style-dictionary';\n *\n * registerFormats(StyleDictionary);\n * ```\n */\nexport function registerFormats(\n sd: StyleDictionaryInstance,\n customFormats: FormatDefinition[] = []\n): void {\n const allFormats = [...builtInFormats, ...customFormats];\n\n for (const format of allFormats) {\n sd.registerFormat({\n name: format.name,\n format: format.format,\n });\n }\n}\n\n// Re-export individual formats\nexport { cssDarkModeVariables } from './css-dark-mode.js';\nexport { cssVariablesWithComments } from './css-variables.js';\nexport { typescriptDeclarations } from './typescript.js';\n","/**\n * CSS Transform Group\n *\n * Transform group for generating CSS output.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/groups/css\n */\n\nimport type { TransformGroupDefinition } from '../types.js';\n\n/**\n * custom/css transform group\n *\n * Transforms for generating CSS custom properties:\n * - attribute/cti: Add CTI attributes\n * - name/kebab: kebab-case names\n * - time/seconds: Convert time to seconds\n * - fontWeight/unitless: Keep font weights unitless\n * - lineHeight/unitless: Keep line heights unitless\n * - dimension/rem: Convert dimensions to rem\n * - color/css: Convert colors to CSS format\n */\nexport const cssTransformGroup: TransformGroupDefinition = {\n name: 'custom/css',\n transforms: [\n 'attribute/cti',\n 'name/kebab',\n 'time/seconds',\n 'fontWeight/unitless', // Must run before dimension/rem\n 'lineHeight/unitless', // Must run before dimension/rem\n 'dimension/rem',\n 'color/css',\n ],\n};\n","/**\n * JavaScript Transform Group\n *\n * Transform group for generating JavaScript output.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/groups/js\n */\n\nimport type { TransformGroupDefinition } from '../types.js';\n\n/**\n * custom/js transform group\n *\n * Transforms for generating JavaScript/TypeScript exports:\n * - attribute/cti: Add CTI attributes\n * - name/camel: camelCase names\n * - fontWeight/unitless: Keep font weights unitless\n * - lineHeight/unitless: Keep line heights unitless\n * - dimension/rem: Convert dimensions to rem\n * - color/css: Convert colors to CSS format\n */\nexport const jsTransformGroup: TransformGroupDefinition = {\n name: 'custom/js',\n transforms: [\n 'attribute/cti',\n 'name/camel',\n 'fontWeight/unitless', // Must run before dimension/rem\n 'lineHeight/unitless', // Must run before dimension/rem\n 'dimension/rem',\n 'color/css',\n ],\n};\n","/**\n * SCSS Transform Group\n *\n * Transform group for generating SCSS output.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/groups/scss\n */\n\nimport type { TransformGroupDefinition } from '../types.js';\n\n/**\n * custom/scss transform group\n *\n * Transforms for generating SCSS variables:\n * - attribute/cti: Add CTI attributes\n * - name/kebab: kebab-case names\n * - time/seconds: Convert time to seconds\n * - fontWeight/unitless: Keep font weights unitless\n * - lineHeight/unitless: Keep line heights unitless\n * - dimension/rem: Convert dimensions to rem\n * - color/css: Convert colors to CSS format\n *\n * This follows Style Dictionary v5 best practices:\n * - Source tokens are raw numbers\n * - Transforms add appropriate units (or keep unitless for font-weight/line-height)\n */\nexport const scssTransformGroup: TransformGroupDefinition = {\n name: 'custom/scss',\n transforms: [\n 'attribute/cti', // Add CTI attributes\n 'name/kebab', // kebab-case names\n 'time/seconds', // Convert time to seconds\n 'fontWeight/unitless', // Font weights stay unitless (MUST run before dimension/rem)\n 'lineHeight/unitless', // Line heights stay unitless (MUST run before dimension/rem)\n 'dimension/rem', // Convert dimensions to rem\n 'color/css', // Convert colors to CSS format\n ],\n};\n","/**\n * Style Dictionary Transform Groups\n *\n * Exports all built-in transform groups and registration utilities.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/groups\n */\n\nimport { cssTransformGroup } from './css.js';\nimport { jsTransformGroup } from './js.js';\nimport { scssTransformGroup } from './scss.js';\n\nimport type { StyleDictionaryInstance, TransformGroupDefinition } from '../types.js';\n\n/**\n * All built-in transform groups\n */\nexport const transformGroups: TransformGroupDefinition[] = [\n cssTransformGroup,\n jsTransformGroup,\n scssTransformGroup,\n];\n\n/**\n * Register all transform groups with Style Dictionary\n *\n * @param sd - Style Dictionary instance\n * @param customGroups - Additional custom transform groups to register\n *\n * @example\n * ```typescript\n * import StyleDictionary from 'style-dictionary';\n * import { registerTransformGroups } from '@dsai-io/tools/tokens/style-dictionary';\n *\n * registerTransformGroups(StyleDictionary);\n * ```\n */\nexport function registerTransformGroups(\n sd: StyleDictionaryInstance,\n customGroups: TransformGroupDefinition[] = []\n): void {\n const allGroups = [...transformGroups, ...customGroups];\n\n for (const group of allGroups) {\n sd.registerTransformGroup({\n name: group.name,\n transforms: group.transforms,\n });\n }\n}\n\n// Re-export individual transform groups\nexport { cssTransformGroup } from './css.js';\nexport { jsTransformGroup } from './js.js';\nexport { scssTransformGroup } from './scss.js';\n","/**\n * Fix References Preprocessor\n *\n * Fixes token reference paths that may be mismatched between\n * Figma exports and the actual token structure.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/preprocessors/fix-references\n */\n\nimport type { PreprocessorDefinition } from '../types.js';\n\n/**\n * Default reference path mappings\n * Maps incorrect reference paths to correct paths\n */\nconst DEFAULT_PATH_MAPPINGS: Array<[string, string]> = [\n ['{colors.brand.', '{color.'],\n ['{colors.neutral.', '{neutral.'],\n ['{borders.width.', '{border.width.'],\n];\n\n/**\n * Fix a single value's reference path\n */\nfunction fixValue(value: unknown, mappings: Array<[string, string]>): unknown {\n if (typeof value !== 'string' || !value.startsWith('{')) {\n return value;\n }\n\n let result = value;\n for (const mapping of mappings) {\n result = result.split(mapping[0]).join(mapping[1]);\n }\n return result;\n}\n\n/**\n * Process tokens recursively to fix reference paths\n */\nfunction processTokens(obj: Record<string, unknown>, mappings: Array<[string, string]>): void {\n for (const key of Object.keys(obj)) {\n // eslint-disable-next-line security/detect-object-injection\n const value = obj[key];\n\n if (value && typeof value === 'object') {\n const typedValue = value as Record<string, unknown>;\n\n // DTCG format - fix $value\n if ('$value' in typedValue) {\n typedValue['$value'] = fixValue(typedValue['$value'], mappings);\n }\n // Legacy format - fix value\n else if ('value' in typedValue) {\n typedValue['value'] = fixValue(typedValue['value'], mappings);\n }\n // Recurse into nested objects\n else {\n processTokens(typedValue, mappings);\n }\n }\n }\n}\n\n/**\n * fix-references preprocessor\n *\n * Fixes token reference paths that may be mismatched.\n * Our tokens use \"color.blue.500\" but Figma exports may reference\n * \"{colors.brand.blue.500}\" - this preprocessor fixes the mismatch.\n *\n * @example\n * Before: { $value: \"{colors.brand.primary}\" }\n * After: { $value: \"{color.primary}\" }\n */\nexport const fixReferences: PreprocessorDefinition = {\n name: 'fix-references',\n preprocessor: (dictionary) => {\n processTokens(dictionary, DEFAULT_PATH_MAPPINGS);\n return dictionary;\n },\n};\n\n/**\n * Create a custom fix-references preprocessor with custom mappings\n *\n * @param mappings - Array of [from, to] path mapping pairs\n * @returns Custom preprocessor definition\n *\n * @example\n * ```typescript\n * const customFixReferences = createFixReferencesPreprocessor([\n * ['{colors.brand.', '{color.'],\n * ['{acme.', '{brand.'],\n * ]);\n * ```\n */\nexport function createFixReferencesPreprocessor(\n mappings: Array<[string, string]>\n): PreprocessorDefinition {\n return {\n name: 'fix-references-custom',\n preprocessor: (dictionary) => {\n processTokens(dictionary, mappings);\n return dictionary;\n },\n };\n}\n","/**\n * Style Dictionary Preprocessors\n *\n * Exports all built-in preprocessors and registration utilities.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/preprocessors\n */\n\nimport { fixReferences } from './fix-references.js';\n\nimport type { PreprocessorDefinition, StyleDictionaryInstance } from '../types.js';\n\n/**\n * All built-in preprocessors\n */\nexport const builtInPreprocessors: PreprocessorDefinition[] = [fixReferences];\n\n/**\n * Register all preprocessors with Style Dictionary\n *\n * @param sd - Style Dictionary instance\n * @param customPreprocessors - Additional custom preprocessors to register\n *\n * @example\n * ```typescript\n * import StyleDictionary from 'style-dictionary';\n * import { registerPreprocessors } from '@dsai-io/tools/tokens/style-dictionary';\n *\n * registerPreprocessors(StyleDictionary);\n * ```\n */\nexport function registerPreprocessors(\n sd: StyleDictionaryInstance,\n customPreprocessors: PreprocessorDefinition[] = []\n): void {\n const allPreprocessors = [...builtInPreprocessors, ...customPreprocessors];\n\n for (const preprocessor of allPreprocessors) {\n sd.registerPreprocessor({\n name: preprocessor.name,\n preprocessor: preprocessor.preprocessor,\n });\n }\n}\n\n// Re-export individual preprocessors\nexport { fixReferences, createFixReferencesPreprocessor } from './fix-references.js';\n","/**\n * Dimension Transform\n *\n * Converts dimension values to rem units.\n * Handles raw numbers and pixel strings.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/transforms/dimension\n */\n\nimport type { SDToken, SDTransformOptions, TransformDefinition } from '../types.js';\n\n/** Default base font size for rem conversion */\nconst DEFAULT_BASE_FONT_SIZE = 16;\n\n/**\n * Check if token is a dimension (but not font-weight or line-height)\n */\nfunction isDimension(token: SDToken): boolean {\n const tokenType = token.$type ?? token.type;\n\n // Exclude font-weights\n if (tokenType === 'fontWeight') {\n return false;\n }\n const pathHasFontWeight = token.path?.some((part) => {\n const lower = String(part).toLowerCase();\n return lower.includes('fontweight') || lower.includes('font-weight');\n });\n if (pathHasFontWeight) {\n return false;\n }\n\n // Exclude line-heights\n if (tokenType === 'lineHeight') {\n return false;\n }\n const pathHasLineHeight = token.path?.some((part) => {\n const lower = String(part).toLowerCase();\n return lower.includes('lineheight') || lower.includes('line-height');\n });\n if (pathHasLineHeight) {\n return false;\n }\n const scopeHasLineHeight = token.$scopes?.includes('LINE_HEIGHT');\n if (scopeHasLineHeight) {\n return false;\n }\n\n // Exclude grid config (unitless counts)\n const pathHasGridConfig = token.path?.some((part) => {\n const lower = String(part).toLowerCase();\n return lower === 'columns' || lower === 'row-columns';\n });\n if (pathHasGridConfig) {\n return false;\n }\n\n // Include dimension, spacing, sizing types\n return tokenType === 'dimension' || tokenType === 'spacing' || tokenType === 'sizing';\n}\n\n/**\n * dimension/rem transform\n *\n * Converts dimension values to rem.\n * Uses basePxFontSize from options (default: 16).\n *\n * @example\n * // Numeric input\n * Input: { $value: 16, $type: \"dimension\" }\n * Output: \"1rem\"\n *\n * @example\n * // Pixel string\n * Input: { $value: \"24px\", $type: \"dimension\" }\n * Output: \"1.5rem\"\n *\n * @example\n * // Zero value\n * Input: { $value: 0, $type: \"dimension\" }\n * Output: \"0\"\n */\nexport const dimensionRem: TransformDefinition = {\n name: 'dimension/rem',\n type: 'value',\n filter: isDimension,\n transform: (token, options?: SDTransformOptions) => {\n const value = token.$value ?? token.value;\n const baseFontSize = options?.basePxFontSize ?? DEFAULT_BASE_FONT_SIZE;\n\n // Handle raw numbers\n if (typeof value === 'number') {\n if (value === 0) {\n return '0';\n }\n return `${value / baseFontSize}rem`;\n }\n\n // Handle px strings\n if (typeof value === 'string' && value.endsWith('px')) {\n const numValue = Number.parseFloat(value);\n if (numValue === 0) {\n return '0';\n }\n return `${numValue / baseFontSize}rem`;\n }\n\n // Return as-is if not convertible\n return value;\n },\n};\n","/**\n * Font Weight Transform\n *\n * Keeps font-weight values as unitless numbers (300, 400, 700, etc.)\n * CSS font-weight must be unitless for proper inheritance.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/transforms/font-weight\n */\n\nimport type { SDToken, TransformDefinition } from '../types.js';\n\n/**\n * Named font weight values mapped to numeric values\n */\nconst NAMED_WEIGHTS: Record<string, number> = {\n thin: 100,\n hairline: 100,\n extralight: 200,\n ultralight: 200,\n light: 300,\n normal: 400,\n regular: 400,\n medium: 500,\n semibold: 600,\n demibold: 600,\n bold: 700,\n extrabold: 800,\n ultrabold: 800,\n black: 900,\n heavy: 900,\n};\n\n/**\n * Check if token is a font weight\n */\nfunction isFontWeight(token: SDToken): boolean {\n const tokenType = token.$type ?? token.type;\n\n // Direct type match\n if (tokenType === 'fontWeight' || tokenType === 'number') {\n return true;\n }\n\n // Path-based detection\n const pathHasFontWeight = token.path?.some((part) => {\n const lower = String(part).toLowerCase();\n return lower === 'fontweight' || lower.includes('font-weight') || lower.includes('fontweight');\n });\n\n return pathHasFontWeight ?? false;\n}\n\n/**\n * fontWeight/unitless transform\n *\n * Ensures font-weight values are unitless numbers.\n * Handles numeric values, string values, and named weights.\n *\n * @example\n * // Numeric input\n * Input: { $value: 700, $type: \"fontWeight\" }\n * Output: 700\n *\n * @example\n * // String input\n * Input: { $value: \"700\", $type: \"fontWeight\" }\n * Output: 700\n *\n * @example\n * // Named weight\n * Input: { $value: \"bold\", $type: \"fontWeight\" }\n * Output: 700\n */\nexport const fontWeightUnitless: TransformDefinition = {\n name: 'fontWeight/unitless',\n type: 'value',\n filter: isFontWeight,\n transform: (token) => {\n const value = token.$value ?? token.value;\n\n // Already a number - return as-is\n if (typeof value === 'number') {\n return value;\n }\n\n // String value\n if (typeof value === 'string') {\n // Try to parse as number\n const parsed = Number.parseInt(value, 10);\n if (!Number.isNaN(parsed)) {\n return parsed;\n }\n\n // Handle named weights\n const normalized = value.toLowerCase().replace(/[^a-z]/g, '');\n if (Object.hasOwn(NAMED_WEIGHTS, normalized)) {\n // eslint-disable-next-line security/detect-object-injection\n const namedWeight = NAMED_WEIGHTS[normalized];\n if (namedWeight !== undefined) {\n return namedWeight;\n }\n }\n }\n\n // Fallback - return as-is\n return value;\n },\n};\n","/**\n * Line Height Transform\n *\n * Keeps line-height values as unitless ratios (1, 1.5, 2, etc.)\n * CSS line-height should be unitless for proper inheritance.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/transforms/line-height\n */\n\nimport type { SDToken, TransformDefinition } from '../types.js';\n\n/** Default base font size for conversion */\nconst DEFAULT_BASE_FONT_SIZE = 16;\n\n/**\n * Check if token is a line height\n */\nfunction isLineHeight(token: SDToken): boolean {\n const tokenType = token.$type ?? token.type;\n\n // Direct type match\n if (tokenType === 'lineHeight') {\n return true;\n }\n\n // Path-based detection\n const pathHasLineHeight = token.path?.some((part) => {\n const lower = String(part).toLowerCase();\n return lower === 'lineheight' || lower.includes('line-height') || lower.includes('lineheight');\n });\n\n // Scope-based detection (from Figma Variables)\n const scopeHasLineHeight = token.$scopes?.includes('LINE_HEIGHT');\n\n return (pathHasLineHeight ?? false) || (scopeHasLineHeight ?? false);\n}\n\n/**\n * lineHeight/unitless transform\n *\n * Converts line-height values to unitless ratios.\n * Handles numbers, percentages, and pixel values.\n *\n * @example\n * // Percentage input\n * Input: { $value: \"150%\", $type: \"lineHeight\" }\n * Output: 1.5\n *\n * @example\n * // Already unitless\n * Input: { $value: 1.5, $type: \"lineHeight\" }\n * Output: 1.5\n *\n * @example\n * // Pixel value from Figma\n * Input: { $value: 24, $type: \"lineHeight\" }\n * Output: 1.5 (assuming 16px base)\n */\nexport const lineHeightUnitless: TransformDefinition = {\n name: 'lineHeight/unitless',\n type: 'value',\n filter: isLineHeight,\n transform: (token) => {\n const value = token.$value ?? token.value;\n\n // Already a number\n if (typeof value === 'number') {\n // If <= 3, already a multiplier (1, 1.5, 2)\n if (value <= 3) {\n return value;\n }\n // If > 3, likely px from Figma - convert to unitless\n return value / DEFAULT_BASE_FONT_SIZE;\n }\n\n // Handle percentage strings (e.g., \"150%\" -> 1.5)\n if (typeof value === 'string' && value.endsWith('%')) {\n return Number.parseFloat(value) / 100;\n }\n\n // Handle strings with units\n if (typeof value === 'string') {\n const numValue = Number.parseFloat(value);\n if (!Number.isNaN(numValue)) {\n if (numValue <= 3) {\n return numValue;\n }\n return numValue / DEFAULT_BASE_FONT_SIZE;\n }\n }\n\n // Fallback - return as-is\n return value;\n },\n};\n","/**\n * Name Transform\n *\n * Converts token paths to kebab-case names.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/transforms/name\n */\n\nimport type { TransformDefinition } from '../types.js';\n\n/**\n * name/kebab transform\n *\n * Converts token path to kebab-case CSS variable name.\n * Replaces underscores with hyphens and lowercases.\n *\n * @example\n * Input: path = ['color', 'blue', '500']\n * Output: \"color-blue-500\"\n *\n * @example\n * Input: path = ['typography', 'fontWeight', 'bold']\n * Output: \"typography-fontweight-bold\"\n */\nexport const nameKebab: TransformDefinition = {\n name: 'name/kebab',\n type: 'name',\n transform: (token) => {\n return token.path.join('-').replace(/_/g, '-').toLowerCase();\n },\n};\n","/**\n * Style Dictionary Transforms\n *\n * Exports all built-in transforms and registration utilities.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/transforms\n */\n\nimport { dimensionRem } from './dimension.js';\nimport { fontWeightUnitless } from './font-weight.js';\nimport { lineHeightUnitless } from './line-height.js';\nimport { nameKebab } from './name.js';\n\nimport type { StyleDictionaryInstance, TransformDefinition } from '../types.js';\n\n/**\n * All built-in transforms\n */\nexport const builtInTransforms: TransformDefinition[] = [\n fontWeightUnitless,\n lineHeightUnitless,\n dimensionRem,\n nameKebab,\n];\n\n/**\n * Register all transforms with Style Dictionary\n *\n * @param sd - Style Dictionary instance\n * @param customTransforms - Additional custom transforms to register\n *\n * @example\n * ```typescript\n * import StyleDictionary from 'style-dictionary';\n * import { registerTransforms } from '@dsai-io/tools/tokens/style-dictionary';\n *\n * registerTransforms(StyleDictionary);\n * ```\n */\nexport function registerTransforms(\n sd: StyleDictionaryInstance,\n customTransforms: TransformDefinition[] = []\n): void {\n const allTransforms = [...builtInTransforms, ...customTransforms];\n\n for (const transform of allTransforms) {\n sd.registerTransform({\n name: transform.name,\n type: transform.type,\n filter: transform.filter,\n transform: transform.transform,\n });\n }\n}\n\n// Re-export individual transforms\nexport { fontWeightUnitless } from './font-weight.js';\nexport { lineHeightUnitless } from './line-height.js';\nexport { dimensionRem } from './dimension.js';\nexport { nameKebab } from './name.js';\n","/**\n * Style Dictionary Configuration Generator\n *\n * Creates Style Dictionary configuration from DSAi config.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary/config\n */\n\nimport { registerFormats } from './formats/index.js';\nimport { registerTransformGroups } from './groups/index.js';\nimport { registerPreprocessors } from './preprocessors/index.js';\nimport { registerTransforms } from './transforms/index.js';\n\nimport type {\n CreateSDConfigOptions,\n SDConfig,\n SDPlatformType,\n StyleDictionaryInstance,\n} from './types.js';\nimport type { ResolvedConfig } from '../../config/types.js';\n\n/**\n * Default source patterns for token files\n */\nconst DEFAULT_SOURCE_PATTERNS = [\n 'collections/color/*.json',\n 'collections/typography/*.json',\n 'collections/spacing/*.json',\n 'collections/border/*.json',\n 'collections/shadow/*.json',\n 'collections/layout/*.json',\n];\n\n/**\n * Default platforms to generate\n */\nconst DEFAULT_PLATFORMS: SDPlatformType[] = ['css', 'js', 'ts', 'scss', 'scss-dist', 'json'];\n\n/**\n * Create Style Dictionary configuration from DSAi config\n *\n * Generates a complete Style Dictionary configuration based on\n * the resolved DSAi configuration, with sensible defaults.\n *\n * @param dsaiConfig - Resolved DSAi configuration\n * @param options - Additional options to override defaults\n * @returns Style Dictionary configuration object\n *\n * @example\n * ```typescript\n * import StyleDictionary from 'style-dictionary';\n * import { loadConfig } from '@dsai-io/tools/config';\n * import { createStyleDictionaryConfig, registerAll } from '@dsai-io/tools/tokens/style-dictionary';\n *\n * const { config } = await loadConfig();\n * const sdConfig = createStyleDictionaryConfig(config);\n *\n * registerAll(StyleDictionary);\n *\n * const sd = new StyleDictionary(sdConfig);\n * await sd.buildAllPlatforms();\n * ```\n */\nexport function createStyleDictionaryConfig(\n dsaiConfig: ResolvedConfig,\n options: Partial<CreateSDConfigOptions> = {}\n): SDConfig {\n const {\n source = DEFAULT_SOURCE_PATTERNS,\n prefix = dsaiConfig.tokens.prefix,\n buildPath = dsaiConfig.tokens.outputDir,\n baseFontSize = dsaiConfig.tokens.baseFontSize ?? 16,\n outputReferences = dsaiConfig.tokens.outputReferences ?? true,\n platforms = DEFAULT_PLATFORMS,\n verbose = dsaiConfig.global.debug ?? false,\n } = options;\n\n const config: SDConfig = {\n log: {\n verbosity: verbose ? 'verbose' : 'default',\n warnings: 'warn',\n errors: 'error',\n },\n preprocessors: ['fix-references'],\n source,\n platforms: {},\n };\n\n // Ensure buildPath ends with /\n const normalizedBuildPath = buildPath.endsWith('/') ? buildPath : `${buildPath}/`;\n\n const platformConfigs = config.platforms ?? {};\n\n // CSS Platform\n if (platforms.includes('css')) {\n platformConfigs['css'] = {\n transformGroup: 'custom/css',\n buildPath: `${normalizedBuildPath}css/`,\n files: [\n {\n destination: 'variables.css',\n format: 'css/variables-with-comments',\n options: {\n prefix,\n outputReferences,\n },\n },\n ],\n };\n }\n\n // JavaScript Platform\n if (platforms.includes('js')) {\n platformConfigs['js'] = {\n transformGroup: 'custom/js',\n buildPath: `${normalizedBuildPath}js/`,\n files: [\n {\n destination: 'tokens.js',\n format: 'javascript/es6',\n options: { outputReferences },\n },\n {\n destination: 'tokens.cjs',\n format: 'javascript/module',\n options: { outputReferences },\n },\n ],\n };\n }\n\n // TypeScript Platform\n if (platforms.includes('ts')) {\n platformConfigs['ts'] = {\n transformGroup: 'custom/js',\n buildPath: `${normalizedBuildPath}ts/`,\n files: [\n {\n destination: 'tokens.ts',\n format: 'javascript/es6',\n options: { outputReferences },\n },\n {\n destination: 'tokens.d.ts',\n format: 'typescript/declarations',\n },\n ],\n };\n }\n\n // SCSS Platform (source - for Bootstrap & DSAi builds)\n if (platforms.includes('scss')) {\n platformConfigs['scss'] = {\n transformGroup: 'custom/scss',\n buildPath: 'src/scss/',\n files: [\n {\n destination: '_variables.scss',\n format: 'scss/variables',\n options: {\n outputReferences,\n basePxFontSize: baseFontSize,\n },\n },\n ],\n };\n }\n\n // SCSS Platform (dist - for npm package consumers)\n if (platforms.includes('scss-dist')) {\n platformConfigs['scss-dist'] = {\n transformGroup: 'custom/scss',\n buildPath: `${normalizedBuildPath}scss/`,\n files: [\n {\n destination: '_variables.scss',\n format: 'scss/variables',\n options: {\n outputReferences,\n basePxFontSize: baseFontSize,\n },\n },\n ],\n };\n }\n\n // JSON Platform (for documentation)\n if (platforms.includes('json')) {\n platformConfigs['json'] = {\n transformGroup: 'js',\n buildPath: `${normalizedBuildPath}json/`,\n files: [\n { destination: 'tokens.json', format: 'json/flat' },\n { destination: 'tokens-nested.json', format: 'json/nested' },\n ],\n };\n }\n\n config.platforms = platformConfigs;\n return config;\n}\n\n/**\n * Register all custom transforms, formats, preprocessors, and groups\n *\n * Must be called before creating a Style Dictionary instance with\n * a config generated by createStyleDictionaryConfig.\n *\n * @param sd - Style Dictionary instance (the imported module)\n * @param options - Custom extensions to register\n *\n * @example\n * ```typescript\n * import StyleDictionary from 'style-dictionary';\n * import { registerAll } from '@dsai-io/tools/tokens/style-dictionary';\n *\n * registerAll(StyleDictionary, {\n * customTransforms: [myCustomTransform],\n * customFormats: [myCustomFormat],\n * });\n * ```\n */\nexport function registerAll(\n sd: StyleDictionaryInstance,\n options: Partial<CreateSDConfigOptions> = {}\n): void {\n const { customTransforms = [], customFormats = [], customPreprocessors = [] } = options;\n\n // Order matters: transforms first, then groups (which reference transforms)\n registerTransforms(sd, customTransforms);\n registerTransformGroups(sd);\n registerFormats(sd, customFormats);\n registerPreprocessors(sd, customPreprocessors);\n}\n\n/**\n * Create and register a complete Style Dictionary setup\n *\n * Convenience function that combines registerAll and createStyleDictionaryConfig.\n *\n * @param sd - Style Dictionary instance\n * @param dsaiConfig - Resolved DSAi configuration\n * @param options - Additional options\n * @returns Style Dictionary configuration\n *\n * @example\n * ```typescript\n * import StyleDictionary from 'style-dictionary';\n * import { loadConfig } from '@dsai-io/tools/config';\n * import { setupStyleDictionary } from '@dsai-io/tools/tokens/style-dictionary';\n *\n * const { config } = await loadConfig();\n * const sdConfig = setupStyleDictionary(StyleDictionary, config);\n *\n * const sd = new StyleDictionary(sdConfig);\n * await sd.buildAllPlatforms();\n * ```\n */\nexport function setupStyleDictionary(\n sd: StyleDictionaryInstance,\n dsaiConfig: ResolvedConfig,\n options: Partial<CreateSDConfigOptions> = {}\n): SDConfig {\n registerAll(sd, options);\n return createStyleDictionaryConfig(dsaiConfig, options);\n}\n","/**\n * Style Dictionary Integration Module\n *\n * Provides reusable transforms, formats, preprocessors, and configuration\n * generation for Style Dictionary token builds.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/tokens/style-dictionary\n *\n * @example\n * ```typescript\n * import StyleDictionary from 'style-dictionary';\n * import { loadConfig } from '@dsai-io/tools/config';\n * import {\n * setupStyleDictionary,\n * registerAll,\n * createStyleDictionaryConfig,\n * } from '@dsai-io/tools/tokens/style-dictionary';\n *\n * // Option 1: All-in-one setup\n * const { config } = await loadConfig();\n * const sdConfig = setupStyleDictionary(StyleDictionary, config);\n * const sd = new StyleDictionary(sdConfig);\n * await sd.buildAllPlatforms();\n *\n * // Option 2: Manual registration\n * registerAll(StyleDictionary);\n * const sdConfig = createStyleDictionaryConfig(config);\n * const sd = new StyleDictionary(sdConfig);\n * await sd.buildAllPlatforms();\n * ```\n */\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type {\n // Token types\n SDToken,\n SDDictionary,\n // Transform types\n TransformType,\n SDTransformOptions,\n TransformDefinition,\n TransformGroupDefinition,\n // Format types\n SDPlatform,\n SDFile,\n SDFormatArgs,\n FormatDefinition,\n // Preprocessor types\n PreprocessorDefinition,\n // Config types\n SDLogConfig,\n SDConfig,\n CreateSDConfigOptions,\n SDPlatformType,\n // Registration types\n StyleDictionaryInstance,\n} from './types.js';\n\n// Type guards\nexport { isSDToken, hasDTCGValue, getSDTokenValue, getSDTokenType } from './types.js';\n\n// ============================================================================\n// Config Generation\n// ============================================================================\n\nexport { createStyleDictionaryConfig, registerAll, setupStyleDictionary } from './config.js';\n\n// ============================================================================\n// Transforms\n// ============================================================================\n\nexport {\n // Collections\n builtInTransforms,\n // Registration\n registerTransforms,\n // Individual transforms\n fontWeightUnitless,\n lineHeightUnitless,\n dimensionRem,\n nameKebab,\n} from './transforms/index.js';\n\n// ============================================================================\n// Formats\n// ============================================================================\n\nexport {\n // Collections\n builtInFormats,\n // Registration\n registerFormats,\n // Individual formats\n cssVariablesWithComments,\n typescriptDeclarations,\n} from './formats/index.js';\n\n// ============================================================================\n// Preprocessors\n// ============================================================================\n\nexport {\n // Collections\n builtInPreprocessors,\n // Registration\n registerPreprocessors,\n // Individual preprocessors\n fixReferences,\n createFixReferencesPreprocessor,\n} from './preprocessors/index.js';\n\n// ============================================================================\n// Transform Groups\n// ============================================================================\n\nexport {\n // Collections\n transformGroups,\n // Registration\n registerTransformGroups,\n // Individual groups\n cssTransformGroup,\n jsTransformGroup,\n scssTransformGroup,\n} from './groups/index.js';\n","/**\n * @file Token Tooling Module\n * @description Provides utilities for token validation, transformation,\n * and build orchestration using Style Dictionary.\n *\n * @module @dsai-io/tools/tokens\n */\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type {\n // Core token types\n DTCGToken,\n LegacyToken,\n Token,\n TokenType,\n TokenCollection,\n // Figma types\n FigmaCollection,\n FigmaExport,\n // Validation types\n ValidationSeverity,\n ValidationIssue,\n ValidateOptions,\n // Build types\n BuildOptions,\n BuildResult,\n BuildStep,\n // Sync types\n SyncOptions,\n SyncResult,\n // Postprocess types\n PostprocessOptions,\n PostprocessResult,\n ReplacementRule,\n // Merge types\n MergeOptions,\n MergeResult,\n} from './types.js';\n\n// Re-export with prefixed names to avoid conflicts with config module\nexport type {\n ValidationResult as TokenValidationResult,\n TransformOptions as TokenTransformOptions,\n TransformResult as TokenTransformResult,\n} from './types.js';\n\n// ============================================================================\n// Type Guards and Utility Functions\n// ============================================================================\n\nexport {\n // Type guards\n isDTCGToken,\n isLegacyToken,\n isToken,\n isValidTokenType,\n isTokenReference,\n // Token utilities\n getTokenValue,\n getTokenType,\n getTokenDescription,\n toDTCGToken,\n parseTokenReference,\n // Constants\n VALID_TOKEN_TYPES,\n} from './types.js';\n\n// ============================================================================\n// Validation Module\n// ============================================================================\n\nexport { validateTokens, validateTokensCLI } from './validate.js';\n\n// ============================================================================\n// Figma Validation Module\n// ============================================================================\n\nexport {\n validateFigmaExports,\n validateFigmaFile,\n validateFigmaCLI,\n detectModes as detectFigmaModes,\n} from './validate-figma.js';\n\n// ============================================================================\n// Transform Module\n// ============================================================================\n\nexport {\n transformTokens,\n transformTokensCLI,\n transformToken,\n transformTokenTree,\n transformType,\n transformValue,\n detectModes as detectTransformModes,\n} from './transform.js';\n\n// ============================================================================\n// Sync Module\n// ============================================================================\n\nexport { syncTokens, syncTokensCLI, getDefaultSyncPaths } from './sync.js';\n\n// ============================================================================\n// Build Module\n// ============================================================================\n\nexport { buildTokens, buildTokensCLI, runBuildCLI } from './build.js';\n\n// ============================================================================\n// Clean Module\n// ============================================================================\n\nexport {\n cleanTokenOutputs,\n cleanTokensCLI,\n DEFAULT_CLEAN_DIRECTORIES,\n} from './clean.js';\n\nexport type {\n CleanOptions,\n CleanResult,\n CleanedDirectory,\n} from './clean.js';\n\n// ============================================================================\n// Postprocess Module\n// ============================================================================\n\nexport {\n postprocessCss,\n postprocessCssFiles,\n postprocessCLI,\n getDefaultCssDir,\n getDefaultFiles,\n getDefaultTransformations,\n} from './postprocess.js';\n\n// ============================================================================\n// Merge Module (Token Collections)\n// ============================================================================\n\nexport { mergeCollections, mergeCollectionsCLI } from './merge.js';\n\n// ============================================================================\n// Style Merge Module (CSS/SCSS Bundling)\n// ============================================================================\n\nexport * from './merge/index.js';\n\n// ============================================================================\n// Output Path Resolution\n// ============================================================================\n\nexport * from './output/index.js';\n\n// ============================================================================\n// Style Dictionary Integration\n// ============================================================================\n\n// Re-export all Style Dictionary types and utilities\nexport * from './style-dictionary/index.js';\n","/**\n * SVG optimizer (SVGO integration)\n *\n * Optimizes SVG files using SVGO for smaller file sizes.\n *\n * @packageDocumentation\n */\n\nimport type { OptimizedSVG, ParsedSVG, RawSVGData, SVGOConfig } from '../types.js';\n\n/**\n * Default SVGO configuration\n *\n * Provides sensible defaults for icon optimization.\n */\nexport const defaultSVGOConfig: SVGOConfig = {\n multipass: true,\n plugins: [\n { name: 'preset-default' },\n { name: 'removeXMLNS' },\n { name: 'removeDimensions' },\n { name: 'removeStyleElement' },\n { name: 'removeScriptElement' },\n {\n name: 'removeAttrs',\n params: {\n attrs: ['class', 'style', 'data-name', 'xmlns:xlink'],\n },\n },\n {\n name: 'addAttributesToSVGElement',\n params: {\n attributes: [{ 'aria-hidden': 'true' }, { focusable: 'false' }],\n },\n },\n {\n name: 'sortAttrs',\n params: {\n xmlnsOrder: 'alphabetical',\n },\n },\n ],\n};\n\n/**\n * Optimize a single SVG\n *\n * @param parsed - Parsed SVG data\n * @param raw - Raw SVG data (for size comparison)\n * @param config - SVGO configuration\n * @returns Optimized SVG data\n */\nexport async function optimizeSVG(\n parsed: ParsedSVG,\n raw: RawSVGData,\n config: SVGOConfig = defaultSVGOConfig\n): Promise<OptimizedSVG> {\n // Dynamic import of SVGO\n const svgo = await import('svgo');\n\n // Merge plugins with defaults if provided\n const plugins = config.plugins ?? defaultSVGOConfig.plugins ?? [];\n\n // Convert our plugin format to SVGO's expected format\n const svgoPlugins = plugins.map((p) => ({\n name: p.name,\n ...(p.params ? { params: p.params } : {}),\n }));\n\n // Run SVGO optimization\n const result = svgo.optimize(raw.content, {\n multipass: config.multipass ?? true,\n plugins: svgoPlugins as NonNullable<Parameters<typeof svgo.optimize>[1]>['plugins'],\n });\n\n const optimizedContent = result.data;\n const optimizedSize = Buffer.byteLength(optimizedContent, 'utf-8');\n const sizeReduction =\n raw.originalSize > 0 ? ((raw.originalSize - optimizedSize) / raw.originalSize) * 100 : 0;\n\n // Re-parse optimized content to get updated inner content\n const innerContentMatch = optimizedContent.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/i);\n const innerContent = innerContentMatch?.[1]?.trim() ?? parsed.innerContent;\n\n // Extract updated viewBox\n const viewBoxMatch = optimizedContent.match(/viewBox=[\"']([^\"']*)[\"']/i);\n const viewBox = viewBoxMatch?.[1] ?? parsed.viewBox;\n\n return {\n ...parsed,\n innerContent,\n fullContent: optimizedContent,\n viewBox,\n optimizedSize,\n sizeReduction,\n };\n}\n\n/**\n * Optimize multiple SVGs\n *\n * @param parsedFiles - Array of parsed SVG data\n * @param rawFiles - Array of raw SVG data\n * @param config - SVGO configuration\n * @returns Array of optimized SVG data\n */\nexport async function optimizeSVGFiles(\n parsedFiles: ParsedSVG[],\n rawFiles: RawSVGData[],\n config: SVGOConfig = defaultSVGOConfig\n): Promise<OptimizedSVG[]> {\n const results: OptimizedSVG[] = [];\n\n for (const parsed of parsedFiles) {\n const raw = rawFiles.find((r) => r.fileName === parsed.fileName);\n if (!raw) {\n throw new Error(`Raw file not found for ${parsed.fileName}`);\n }\n const optimized = await optimizeSVG(parsed, raw, config);\n results.push(optimized);\n }\n\n return results;\n}\n\n/**\n * Skip optimization and just add size metadata\n *\n * Useful when SVGO is not needed but the type structure is required.\n *\n * @param parsed - Parsed SVG data\n * @param raw - Raw SVG data\n * @returns Optimized SVG data (without actual optimization)\n */\nexport function skipOptimization(parsed: ParsedSVG, raw: RawSVGData): OptimizedSVG {\n return {\n ...parsed,\n optimizedSize: raw.originalSize,\n sizeReduction: 0,\n };\n}\n","'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n to(x, y) {\n if (!y) return `${CSI}${x + 1}G`;\n return `${CSI}${y + 1};${x + 1}H`;\n },\n move(x, y) {\n let ret = '';\n\n if (x < 0) ret += `${CSI}${-x}D`;\n else if (x > 0) ret += `${CSI}${x}C`;\n\n if (y < 0) ret += `${CSI}${-y}A`;\n else if (y > 0) ret += `${CSI}${y}B`;\n\n return ret;\n },\n up: (count = 1) => `${CSI}${count}A`,\n down: (count = 1) => `${CSI}${count}B`,\n forward: (count = 1) => `${CSI}${count}C`,\n backward: (count = 1) => `${CSI}${count}D`,\n nextLine: (count = 1) => `${CSI}E`.repeat(count),\n prevLine: (count = 1) => `${CSI}F`.repeat(count),\n left: `${CSI}G`,\n hide: `${CSI}?25l`,\n show: `${CSI}?25h`,\n save: `${ESC}7`,\n restore: `${ESC}8`\n}\n\nconst scroll = {\n up: (count = 1) => `${CSI}S`.repeat(count),\n down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n screen: `${CSI}2J`,\n up: (count = 1) => `${CSI}1J`.repeat(count),\n down: (count = 1) => `${CSI}J`.repeat(count),\n line: `${CSI}2K`,\n lineEnd: `${CSI}K`,\n lineStart: `${CSI}1K`,\n lines(count) {\n let clear = '';\n for (let i = 0; i < count; i++)\n clear += this.line + (i < count - 1 ? cursor.up() : '');\n if (count)\n clear += cursor.left;\n return clear;\n }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n","/**\n * @fileoverview Zod schemas for DSAI Tools configuration validation\n *\n * Provides comprehensive runtime validation for all configuration options.\n * Schemas mirror the TypeScript types in types.ts for type safety.\n *\n * @module @dsai-io/tools/config/schema\n * @see {@link ./types.ts} for TypeScript type definitions\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Primitive Schemas\n// ============================================================================\n\n/**\n * Log level for CLI output verbosity\n */\nexport const logLevelSchema = z.enum(['silent', 'error', 'warn', 'info', 'debug', 'verbose']);\n\n/**\n * Output format for token/build outputs\n */\nexport const outputFormatSchema = z.enum(['css', 'scss', 'less', 'json', 'js', 'ts', 'esm', 'cjs']);\n\n/**\n * Supported frontend frameworks for generated code\n */\nexport const frameworkSchema = z.enum(['react', 'vue', 'angular', 'svelte', 'vanilla']);\n\n/**\n * File hash type for cache busting\n */\nexport const hashTypeSchema = z.enum(['content', 'timestamp', 'version', 'none']);\n\n// ============================================================================\n// Utility Schemas\n// ============================================================================\n\n/**\n * Glob pattern for file matching\n * Must be a non-empty string\n */\nexport const globPatternSchema = z.string().min(1, 'Glob pattern cannot be empty');\n\n/**\n * File path validation\n * Allows relative or absolute paths\n */\nexport const filePathSchema = z.string().min(1, 'File path cannot be empty');\n\n/**\n * Semantic version validation (loose)\n * Matches x.y.z format with optional pre-release\n */\nexport const versionSchema = z.string().refine(\n (val) => {\n const parts = val.split('-');\n const version = parts[0] ?? '';\n const preRelease = parts[1];\n const versionParts = version.split('.');\n if (versionParts.length !== 3) {\n return false;\n }\n for (const part of versionParts) {\n const num = Number(part);\n if (!Number.isInteger(num) || num < 0) {\n return false;\n }\n }\n if (preRelease !== undefined && preRelease.length === 0) {\n return false;\n }\n return true;\n },\n { message: 'Invalid semantic version format' }\n);\n\n// ============================================================================\n// Transform and Format Schemas\n// ============================================================================\n\n/**\n * Custom transform function schema\n * For token value transformations\n */\nexport const customTransformSchema = z.object({\n name: z.string().min(1, 'Transform name is required'),\n description: z.string().optional(),\n type: z.enum(['value', 'attribute', 'name']).optional().default('value'),\n transform: z.function().args(z.any(), z.any()).returns(z.any()).optional(),\n filter: z.function().args(z.any()).returns(z.boolean()).optional(),\n matcher: z.function().args(z.any()).returns(z.boolean()).optional(),\n});\n\n/**\n * Custom format schema for output generation\n */\nexport const customFormatSchema = z.object({\n name: z.string().min(1, 'Format name is required'),\n description: z.string().optional(),\n formatter: z.function().args(z.any()).returns(z.string()).optional(),\n extension: z.string().min(1).optional(),\n});\n\n// ============================================================================\n// Theme Configuration Schemas\n// ============================================================================\n\n/**\n * Theme mode configuration\n * Controls how themes are generated and applied\n */\nexport const themeModeSchema = z.object({\n selector: z.string().min(1, 'Theme selector is required'),\n mediaQuery: z.string().optional(),\n dataAttribute: z.string().optional(),\n cssVariables: z.boolean().optional().default(true),\n generateSeparateFiles: z.boolean().optional().default(false),\n prefix: z.string().optional(),\n});\n\n/**\n * Themes configuration section\n */\nexport const themesConfigSchema = z.object({\n enabled: z.boolean().optional().default(true),\n defaultMode: z.enum(['light', 'dark', 'system']).optional().default('light'),\n modes: z\n .record(z.string(), themeModeSchema)\n .optional()\n .default({\n light: { selector: ':root', cssVariables: true, generateSeparateFiles: false },\n dark: {\n selector: '[data-theme=\"dark\"]',\n mediaQuery: '(prefers-color-scheme: dark)',\n cssVariables: true,\n generateSeparateFiles: false,\n },\n }),\n outputFileName: z.string().optional().default('themes'),\n colorScheme: z\n .object({\n light: z.string().optional(),\n dark: z.string().optional(),\n })\n .optional(),\n});\n\n// ============================================================================\n// Icon Configuration Schemas\n// ============================================================================\n\n/**\n * Icon optimization settings\n */\nexport const iconOptimizationSchema = z.object({\n enabled: z.boolean().optional().default(true),\n removeComments: z.boolean().optional().default(true),\n removeDimensions: z.boolean().optional().default(false),\n removeViewBox: z.boolean().optional().default(false),\n removeXMLNS: z.boolean().optional().default(true),\n cleanupIds: z.boolean().optional().default(true),\n minify: z.boolean().optional().default(true),\n});\n\n/**\n * Icon sprite generation settings\n */\nexport const iconSpriteSchema = z.object({\n enabled: z.boolean().optional().default(true),\n fileName: z.string().optional().default('icons'),\n format: z.enum(['symbol', 'stack', 'css']).optional().default('symbol'),\n prefix: z.string().optional().default('icon-'),\n});\n\n/**\n * Icons configuration section\n */\nexport const iconsConfigSchema = z.object({\n enabled: z.boolean().optional().default(true),\n sourceDir: z.string().optional().default('assets/icons'),\n outputDir: z.string().optional().default('dist/icons'),\n formats: z\n .array(z.enum(['svg', 'react', 'vue', 'sprite', 'font']))\n .optional()\n .default(['svg']),\n optimization: iconOptimizationSchema.optional(),\n sprite: iconSpriteSchema.optional(),\n componentPrefix: z.string().optional().default('Icon'),\n componentSuffix: z.string().optional().default(''),\n generateIndex: z.boolean().optional().default(true),\n generateTypes: z.boolean().optional().default(true),\n});\n\n// ============================================================================\n// Token Configuration Schemas\n// ============================================================================\n\n/**\n * Token build configuration schema\n */\nexport const tokenBuildConfigSchema = z.object({\n format: outputFormatSchema,\n outputDir: z.string().optional(),\n outputFileName: z.string().optional(),\n fileExtension: z.string().optional(),\n prefix: z.string().optional(),\n useVariables: z.boolean().optional(),\n selector: z.string().optional(),\n transforms: z.array(z.string()).optional(),\n customTransforms: z.array(customTransformSchema).optional(),\n filter: z\n .function()\n .args(z.any())\n .returns(z.union([z.boolean(), z.promise(z.boolean())]))\n .optional(),\n header: z.string().optional(),\n footer: z.string().optional(),\n});\n\n/**\n * Token cache configuration\n */\nexport const tokenCacheConfigSchema = z.object({\n enabled: z.boolean().optional().default(true),\n directory: z.string().optional().default('.cache'),\n hashType: hashTypeSchema.optional().default('content'),\n maxAge: z.number().optional().default(86400000),\n});\n\n/**\n * Token watch mode configuration\n */\nexport const tokenWatchConfigSchema = z.object({\n enabled: z.boolean().optional().default(false),\n debounce: z.number().optional().default(300),\n clearScreen: z.boolean().optional().default(true),\n ignorePatterns: z.array(z.string()).optional().default([]),\n});\n\n/**\n * Token processing hooks\n */\nexport const tokensHooksSchema = z.object({\n onBuildStart: z\n .function()\n .args(z.any())\n .returns(z.union([z.void(), z.promise(z.void())]))\n .optional(),\n onFormatComplete: z\n .function()\n .args(z.any())\n .returns(z.union([z.void(), z.promise(z.void())]))\n .optional(),\n onAllFormatsComplete: z\n .function()\n .args(z.any())\n .returns(z.union([z.void(), z.promise(z.void())]))\n .optional(),\n onBuildComplete: z\n .function()\n .args(z.any())\n .returns(z.union([z.void(), z.promise(z.void())]))\n .optional(),\n onError: z\n .function()\n .args(z.any())\n .returns(z.union([z.void(), z.promise(z.void())]))\n .optional(),\n});\n\n/**\n * Build pipeline step names\n */\nexport const buildPipelineStepSchema = z.enum([\n 'validate',\n 'transform',\n 'style-dictionary',\n 'sync',\n 'sass-theme',\n 'sass-theme-minified',\n 'postprocess',\n 'sass-utilities',\n 'sass-utilities-minified',\n 'bundle',\n]);\n\n/**\n * Build pipeline configuration\n * Controls which steps run and their paths\n */\nexport const tokensBuildPipelineSchema = z.object({\n /**\n * Steps to include in the build.\n * Order matters - steps run in sequence.\n * Default includes all steps for full @dsai-io/tokens build.\n * Simpler packages can use subset like ['validate', 'transform', 'style-dictionary']\n */\n steps: z\n .array(buildPipelineStepSchema)\n .optional()\n .default([\n 'validate',\n 'transform',\n 'style-dictionary',\n 'sync',\n 'sass-theme',\n 'sass-theme-minified',\n 'postprocess',\n 'sass-utilities',\n 'sass-utilities-minified',\n 'bundle',\n ]),\n\n /**\n * Paths configuration for build steps\n */\n paths: z\n .object({\n /** Source file for sync step (Style Dictionary JS output) */\n syncSource: z.string().optional().default('dist/js/tokens.js'),\n /** Target file for sync step */\n syncTarget: z.string().optional().default('src/tokens-flat.ts'),\n /** SCSS theme input file */\n sassThemeInput: z.string().optional().default('src/scss/dsai-theme-bs.scss'),\n /** CSS theme output file */\n sassThemeOutput: z.string().optional().default('dist/css/dsai-theme-bs.css'),\n /** CSS theme minified output file */\n sassThemeMinifiedOutput: z.string().optional().default('dist/css/dsai-theme-bs.min.css'),\n /** SCSS utilities input file */\n sassUtilitiesInput: z.string().optional().default('src/scss/dsai-utilities.scss'),\n /** CSS utilities output file */\n sassUtilitiesOutput: z.string().optional().default('dist/css/dsai.css'),\n /** CSS utilities minified output file */\n sassUtilitiesMinifiedOutput: z.string().optional().default('dist/css/dsai.min.css'),\n })\n .optional(),\n\n /** Style Dictionary config file name */\n styleDictionaryConfig: z.string().optional().default('sd.config.mjs'),\n});\n\n/**\n * Tokens configuration section\n */\nexport const tokensConfigSchema = z.object({\n enabled: z.boolean().optional().default(true),\n sourcePatterns: z\n .array(z.string())\n .optional()\n .default(['src/tokens/**/*.json', 'src/tokens/**/*.yaml']),\n outputDirs: z\n .object({\n css: z.string().optional().default('dist/css'),\n scss: z.string().optional().default('dist/scss'),\n less: z.string().optional().default('dist/less'),\n js: z.string().optional().default('dist/js'),\n ts: z.string().optional().default('dist/ts'),\n json: z.string().optional().default('dist/json'),\n })\n .optional(),\n additionalScssDirectories: z.array(z.string()).optional().default([]),\n outputFileNames: z\n .object({\n variables: z.string().optional().default('variables'),\n utilities: z.string().optional().default('utilities'),\n mixins: z.string().optional().default('mixins'),\n tokens: z.string().optional().default('tokens'),\n })\n .optional(),\n prefix: z.string().optional().default('dsai'),\n mergeOrder: z.array(z.string()).optional().default(['base', 'semantic', 'component']),\n createBundle: z.boolean().optional().default(true),\n bundleFileName: z.string().optional().default('bundle'),\n formats: z.array(outputFormatSchema).optional().default(['css', 'scss', 'json']),\n platforms: z.record(z.string(), tokenBuildConfigSchema).optional(),\n transforms: z.array(z.string()).optional().default([]),\n customTransforms: z.array(customTransformSchema).optional().default([]),\n customFormats: z.array(customFormatSchema).optional().default([]),\n hooks: tokensHooksSchema.optional(),\n cache: tokenCacheConfigSchema.optional(),\n watch: tokenWatchConfigSchema.optional(),\n verbose: z.boolean().optional().default(false),\n /** Build pipeline configuration */\n pipeline: tokensBuildPipelineSchema.optional(),\n});\n\n// ============================================================================\n// Global Configuration Schemas\n// ============================================================================\n\n/**\n * Global build configuration\n */\nexport const buildConfigSchema = z.object({\n outDir: z.string().optional().default('dist'),\n clean: z.boolean().optional().default(true),\n sourcemap: z.boolean().optional().default(false),\n minify: z.boolean().optional().default(true),\n parallel: z.boolean().optional().default(true),\n maxConcurrency: z.number().optional().default(4),\n});\n\n/**\n * Global configuration section\n */\nexport const globalConfigSchema = z.object({\n logLevel: logLevelSchema.optional().default('info'),\n colors: z.boolean().optional().default(true),\n ci: z.boolean().optional().default(false),\n dryRun: z.boolean().optional().default(false),\n cwd: z.string().optional(),\n configPath: z.string().optional(),\n framework: frameworkSchema.optional(),\n build: buildConfigSchema.optional(),\n});\n\n// ============================================================================\n// Root Configuration Schema\n// ============================================================================\n\n/**\n * DSAI Tools configuration root schema\n *\n * This is the primary schema used for validating configuration files.\n * It combines all section schemas into a complete configuration object.\n */\nexport const dsaiConfigSchema = z.object({\n $schema: z.string().optional(),\n extends: z.union([z.string(), z.array(z.string())]).optional(),\n global: globalConfigSchema.optional(),\n tokens: tokensConfigSchema.optional(),\n themes: themesConfigSchema.optional(),\n icons: iconsConfigSchema.optional(),\n});\n\n// ============================================================================\n// Inferred Types from Schemas\n// ============================================================================\n\n/** Inferred LogLevel type from schema */\nexport type LogLevelFromSchema = z.infer<typeof logLevelSchema>;\n\n/** Inferred OutputFormat type from schema */\nexport type OutputFormatFromSchema = z.infer<typeof outputFormatSchema>;\n\n/** Inferred Framework type from schema */\nexport type FrameworkFromSchema = z.infer<typeof frameworkSchema>;\n\n/** Inferred DsaiConfig type from schema */\nexport type DsaiConfigFromSchema = z.infer<typeof dsaiConfigSchema>;\n\n/** Inferred TokensConfig type from schema */\nexport type TokensConfigFromSchema = z.infer<typeof tokensConfigSchema>;\n\n/** Inferred ThemesConfig type from schema */\nexport type ThemesConfigFromSchema = z.infer<typeof themesConfigSchema>;\n\n/** Inferred IconsConfig type from schema */\nexport type IconsConfigFromSchema = z.infer<typeof iconsConfigSchema>;\n\n/** Inferred GlobalConfig type from schema */\nexport type GlobalConfigFromSchema = z.infer<typeof globalConfigSchema>;\n\n// ============================================================================\n// Validation Functions\n// ============================================================================\n\n/**\n * Validation result with typed data\n */\nexport interface ValidationResult<T> {\n success: boolean;\n data?: T;\n errors?: ValidationError[];\n}\n\n/**\n * Structured validation error\n */\nexport interface ValidationError {\n path: string;\n message: string;\n code: string;\n expected?: string;\n received?: string;\n}\n\n/**\n * Format Zod errors into user-friendly validation errors\n *\n * @param zodError - Zod error object\n * @returns Array of formatted validation errors\n */\nexport function formatValidationErrors(zodError: z.ZodError): ValidationError[] {\n return zodError.errors.map((err) => ({\n path: err.path.join('.') || 'root',\n message: err.message,\n code: err.code,\n expected: 'expected' in err ? String(err.expected) : undefined,\n received: 'received' in err ? String(err.received) : undefined,\n }));\n}\n\n/**\n * Validate configuration object against schema\n *\n * @param config - Configuration object to validate\n * @returns Validation result with typed data or errors\n *\n * @example\n * ```typescript\n * const result = validateConfig({\n * tokens: { enabled: true },\n * themes: { defaultMode: 'dark' }\n * });\n *\n * if (result.success) {\n * console.log(result.data);\n * } else {\n * result.errors?.forEach(err => console.error(err.message));\n * }\n * ```\n */\nexport function validateConfig(config: unknown): ValidationResult<DsaiConfigFromSchema> {\n const result = dsaiConfigSchema.safeParse(config);\n\n if (result.success) {\n return {\n success: true,\n data: result.data,\n };\n }\n\n return {\n success: false,\n errors: formatValidationErrors(result.error),\n };\n}\n\n/**\n * Validate configuration and throw on errors\n *\n * @param config - Configuration object to validate\n * @returns Validated configuration\n * @throws {Error} If validation fails\n *\n * @example\n * ```typescript\n * try {\n * const validConfig = validateConfigOrThrow(rawConfig);\n * // Use validConfig safely\n * } catch (error) {\n * console.error('Invalid configuration:', error.message);\n * }\n * ```\n */\nexport function validateConfigOrThrow(config: unknown): DsaiConfigFromSchema {\n const result = validateConfig(config);\n\n if (!result.success) {\n const errorMessages = result.errors?.map((e) => ` - ${e.path}: ${e.message}`).join('\\n');\n throw new Error(`Configuration validation failed:\\n${errorMessages}`);\n }\n\n return result.data as DsaiConfigFromSchema;\n}\n\n/**\n * Validate a specific section of the configuration\n *\n * @param section - Section name to validate\n * @param config - Section configuration object\n * @returns Validation result for the section\n */\nexport function validateConfigSection<T extends keyof DsaiConfigFromSchema>(\n section: T,\n config: unknown\n): ValidationResult<NonNullable<DsaiConfigFromSchema[T]>> {\n const sectionSchemas = {\n global: globalConfigSchema,\n tokens: tokensConfigSchema,\n themes: themesConfigSchema,\n icons: iconsConfigSchema,\n } as const;\n\n const schema = sectionSchemas[section as keyof typeof sectionSchemas];\n\n if (!schema) {\n return {\n success: false,\n errors: [\n {\n path: section,\n message: `Unknown configuration section: ${section}`,\n code: 'unknown_section',\n },\n ],\n };\n }\n\n const result = schema.safeParse(config);\n\n if (result.success) {\n return {\n success: true,\n data: result.data as NonNullable<DsaiConfigFromSchema[T]>,\n };\n }\n\n return {\n success: false,\n errors: formatValidationErrors(result.error),\n };\n}\n\n/**\n * Create a pretty-printed error message from validation errors\n *\n * @param errors - Array of validation errors\n * @returns Formatted error message string\n */\nexport function formatErrorMessage(errors: ValidationError[]): string {\n const lines = ['Configuration validation failed:', ''];\n\n for (const error of errors) {\n lines.push(` ā ${error.path}`);\n lines.push(` ${error.message}`);\n\n if (error.expected && error.received) {\n lines.push(` Expected: ${error.expected}`);\n lines.push(` Received: ${error.received}`);\n }\n\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n","/**\n * @fileoverview Default configuration values for DSAI Tools\n *\n * Provides comprehensive default values for all configuration options.\n * These defaults are merged with user configuration during resolution.\n *\n * @module @dsai-io/tools/config/defaults\n */\n\nimport type {\n IconFramework,\n LogLevel,\n OutputFormat,\n ResolvedConfig,\n ResolvedGlobalConfig,\n ResolvedIconsConfig,\n ResolvedThemesConfig,\n ResolvedTokensConfig,\n ThemeSelectorPattern,\n} from './types.js';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Default prefix for CSS custom properties\n */\nexport const DEFAULT_PREFIX = '--dsai-';\n\n/**\n * Default log level for CLI output\n */\nexport const DEFAULT_LOG_LEVEL: LogLevel = 'info';\n\n/**\n * Default output directory\n */\nexport const DEFAULT_OUTPUT_DIR = 'dist';\n\n/**\n * Default source directory for tokens (Figma exports)\n */\nexport const DEFAULT_SOURCE_DIR = 'figma-exports';\n\n/**\n * Default collections directory\n */\nexport const DEFAULT_COLLECTIONS_DIR = 'collections';\n\n/**\n * Default icons source directory\n */\nexport const DEFAULT_ICONS_SOURCE_DIR = 'icons';\n\n/**\n * Default icons output directory\n */\nexport const DEFAULT_ICONS_OUTPUT_DIR = 'dist/icons';\n\n// ============================================================================\n// Default Output Configuration\n// ============================================================================\n\n/**\n * Default source patterns for finding Figma exports\n */\nexport const defaultSourcePatterns = ['theme.json', 'tokens.json', '*.tokens.json'];\n\n/**\n * Default output formats for tokens\n */\nexport const defaultFormats: OutputFormat[] = ['css', 'scss', 'js', 'ts', 'json'];\n\n/**\n * Default output file names for each format\n */\nexport const defaultOutputFileNames: Record<OutputFormat, string> = {\n css: 'tokens.css',\n scss: '_tokens.scss',\n js: 'tokens.js',\n ts: 'tokens.ts',\n json: 'tokens.json',\n android: 'tokens.xml',\n ios: 'tokens.h',\n};\n\n// ============================================================================\n// Theme Defaults\n// ============================================================================\n\n/**\n * Default theme selector pattern\n */\nexport const defaultSelectorPattern: Required<ThemeSelectorPattern> = {\n default: ':root',\n others: '[data-dsai-theme=\"{mode}\"]',\n};\n\n/**\n * Default resolved themes configuration\n */\nexport const defaultThemesConfig: ResolvedThemesConfig = {\n autoDetect: true,\n default: 'Light',\n ignoreModes: [],\n selectorPattern: defaultSelectorPattern,\n};\n\n// ============================================================================\n// Icon Defaults\n// ============================================================================\n\n/**\n * Default icon framework\n */\nexport const defaultIconFramework: IconFramework = 'react';\n\n/**\n * Default resolved icons configuration\n */\nexport const defaultIconsConfig: ResolvedIconsConfig = {\n sourceDir: DEFAULT_ICONS_SOURCE_DIR,\n outputDir: DEFAULT_ICONS_OUTPUT_DIR,\n framework: defaultIconFramework,\n typescript: true,\n optimize: true,\n prefix: 'Icon',\n};\n\n// ============================================================================\n// Token Defaults\n// ============================================================================\n\n/**\n * Default resolved tokens configuration\n */\nexport const defaultTokensConfig: ResolvedTokensConfig = {\n source: 'theme',\n sourceDir: DEFAULT_SOURCE_DIR,\n collectionsDir: DEFAULT_COLLECTIONS_DIR,\n sourcePatterns: defaultSourcePatterns,\n collectionMapping: {},\n outputDir: DEFAULT_OUTPUT_DIR,\n outputDirs: {},\n outputFileNames: defaultOutputFileNames,\n prefix: DEFAULT_PREFIX,\n formats: defaultFormats,\n additionalScssDirectories: [],\n additionalCssDirectories: [],\n mergeOrder: 'after',\n createBundle: false,\n themes: defaultThemesConfig,\n transforms: [],\n customFormats: [],\n preprocessors: [],\n filters: [],\n outputReferences: true,\n baseFontSize: 16,\n separateThemeFiles: false,\n watch: false,\n watchDirectories: [],\n};\n\n// ============================================================================\n// Global Defaults\n// ============================================================================\n\n/**\n * Default resolved global configuration\n */\nexport const defaultGlobalConfig: ResolvedGlobalConfig = {\n cwd: process.cwd(),\n debug: false,\n logLevel: DEFAULT_LOG_LEVEL,\n};\n\n// ============================================================================\n// Complete Default Configuration\n// ============================================================================\n\n/**\n * Complete default resolved configuration\n *\n * This is used as the base for merging user configurations.\n * All values have sensible defaults that work for most projects.\n */\nexport const defaultConfig: ResolvedConfig = {\n tokens: defaultTokensConfig,\n icons: defaultIconsConfig,\n global: defaultGlobalConfig,\n configDir: process.cwd(),\n};\n\n// ============================================================================\n// Environment Variable Mappings\n// ============================================================================\n\n/**\n * Mapping of environment variables to configuration paths\n *\n * Format: { ENV_VAR_NAME: 'config.path.to.value' }\n *\n * @example\n * DSAI_LOG_LEVEL=debug ā { global: { logLevel: 'debug' } }\n * DSAI_PREFIX=myapp ā { tokens: { prefix: 'myapp' } }\n */\nexport const envMappings: Record<string, string> = {\n // Global settings\n DSAI_LOG_LEVEL: 'global.logLevel',\n DSAI_DEBUG: 'global.debug',\n DSAI_CWD: 'global.cwd',\n\n // Token settings\n DSAI_PREFIX: 'tokens.prefix',\n DSAI_SOURCE_DIR: 'tokens.sourceDir',\n DSAI_OUTPUT_DIR: 'tokens.outputDir',\n DSAI_WATCH: 'tokens.watch',\n DSAI_CREATE_BUNDLE: 'tokens.createBundle',\n DSAI_BASE_FONT_SIZE: 'tokens.baseFontSize',\n\n // Theme settings\n DSAI_DEFAULT_THEME: 'tokens.themes.default',\n DSAI_AUTO_DETECT_THEMES: 'tokens.themes.autoDetect',\n\n // Icon settings\n DSAI_ICONS_SOURCE_DIR: 'icons.sourceDir',\n DSAI_ICONS_OUTPUT_DIR: 'icons.outputDir',\n DSAI_ICONS_FRAMEWORK: 'icons.framework',\n DSAI_ICONS_TYPESCRIPT: 'icons.typescript',\n DSAI_ICONS_OPTIMIZE: 'icons.optimize',\n DSAI_ICONS_PREFIX: 'icons.prefix',\n};\n\n/**\n * Environment variables that should be parsed as booleans\n */\nexport const envBooleanKeys: Set<string> = new Set([\n 'DSAI_DEBUG',\n 'DSAI_WATCH',\n 'DSAI_CREATE_BUNDLE',\n 'DSAI_AUTO_DETECT_THEMES',\n 'DSAI_ICONS_TYPESCRIPT',\n 'DSAI_ICONS_OPTIMIZE',\n]);\n\n/**\n * Environment variables that should be parsed as numbers\n */\nexport const envNumberKeys: Set<string> = new Set(['DSAI_BASE_FONT_SIZE']);\n\n/**\n * Environment variables that should be parsed as arrays (comma-separated)\n */\nexport const envArrayKeys: Set<string> = new Set(['DSAI_FORMATS', 'DSAI_IGNORE_MODES']);\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Get the output file name for a format with optional theme\n *\n * @param format - Output format\n * @param theme - Optional theme name\n * @returns Output file name\n */\nexport function getOutputFileName(format: OutputFormat, theme?: string): string {\n let baseName: string;\n\n switch (format) {\n case 'css':\n baseName = 'tokens.css';\n break;\n case 'scss':\n baseName = '_tokens.scss';\n break;\n case 'js':\n baseName = 'tokens.js';\n break;\n case 'ts':\n baseName = 'tokens.ts';\n break;\n case 'json':\n baseName = 'tokens.json';\n break;\n case 'android':\n baseName = 'tokens.xml';\n break;\n case 'ios':\n baseName = 'tokens.h';\n break;\n default:\n baseName = 'tokens.txt';\n }\n\n if (!theme) {\n return baseName;\n }\n\n // Insert theme before extension\n const dotIndex = baseName.lastIndexOf('.');\n if (dotIndex === -1) {\n return `${baseName}-${theme}`;\n }\n\n const name = baseName.slice(0, dotIndex);\n const ext = baseName.slice(dotIndex);\n return `${name}-${theme}${ext}`;\n}\n\n/**\n * Get the default output directory for a format\n *\n * @param format - Output format\n * @returns Output directory path\n */\nexport function getDefaultOutputDir(format: OutputFormat): string {\n switch (format) {\n case 'css':\n return `${DEFAULT_OUTPUT_DIR}/css`;\n case 'scss':\n return `${DEFAULT_OUTPUT_DIR}/scss`;\n case 'js':\n case 'ts':\n return `${DEFAULT_OUTPUT_DIR}/js`;\n case 'json':\n return `${DEFAULT_OUTPUT_DIR}/json`;\n case 'android':\n return `${DEFAULT_OUTPUT_DIR}/android`;\n case 'ios':\n return `${DEFAULT_OUTPUT_DIR}/ios`;\n default:\n return DEFAULT_OUTPUT_DIR;\n }\n}\n\n/**\n * Get default extension for a format\n *\n * @param format - Output format\n * @returns File extension including the dot\n */\nexport function getDefaultExtension(format: OutputFormat): string {\n switch (format) {\n case 'css':\n return '.css';\n case 'scss':\n return '.scss';\n case 'js':\n return '.js';\n case 'ts':\n return '.ts';\n case 'json':\n return '.json';\n case 'android':\n return '.xml';\n case 'ios':\n return '.h';\n default:\n return '.txt';\n }\n}\n","/**\n * @fileoverview Configuration resolver for DSAI Tools\n *\n * Merges user configuration with defaults and resolves relative paths.\n * Handles configuration inheritance and validation.\n *\n * @module @dsai-io/tools/config/resolver\n */\n\nimport path from 'node:path';\n\nimport {\n defaultConfig,\n defaultGlobalConfig,\n defaultIconsConfig,\n defaultThemesConfig,\n defaultTokensConfig,\n} from './defaults.js';\n\nimport type {\n DsaiConfig,\n GlobalConfig,\n IconsConfig,\n ResolvedConfig,\n ResolvedGlobalConfig,\n ResolvedIconsConfig,\n ResolvedThemesConfig,\n ResolvedTokensConfig,\n ThemesConfig,\n TokensConfig,\n} from './types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Options for resolving configuration\n */\nexport interface ResolveOptions {\n /** Working directory */\n cwd?: string;\n\n /** Directory containing config file (for relative path resolution) */\n configDir?: string;\n\n /** Override values (highest priority) */\n overrides?: Partial<DsaiConfig>;\n}\n\n// ============================================================================\n// Section Resolvers\n// ============================================================================\n\n/**\n * Resolve global configuration section\n */\nfunction resolveGlobalConfig(\n config: GlobalConfig | undefined,\n options: ResolveOptions\n): ResolvedGlobalConfig {\n const base = defaultGlobalConfig;\n const cwd = options.cwd ?? process.cwd();\n\n return {\n cwd: config?.cwd ? path.resolve(cwd, config.cwd) : cwd,\n debug: config?.debug ?? base.debug,\n logLevel: config?.logLevel ?? base.logLevel,\n };\n}\n\n/**\n * Resolve themes configuration section\n */\nfunction resolveThemesConfig(config: ThemesConfig | undefined): ResolvedThemesConfig {\n const base = defaultThemesConfig;\n\n return {\n autoDetect: config?.autoDetect ?? base.autoDetect,\n default: config?.default ?? base.default,\n ignoreModes: config?.ignoreModes ?? [...base.ignoreModes],\n selectorPattern: {\n default: config?.selectorPattern?.default ?? base.selectorPattern.default,\n others: config?.selectorPattern?.others ?? base.selectorPattern.others,\n },\n };\n}\n\n/**\n * Resolve icons configuration section\n */\nfunction resolveIconsConfig(\n config: IconsConfig | undefined,\n options: ResolveOptions\n): ResolvedIconsConfig {\n const base = defaultIconsConfig;\n const configDir = options.configDir ?? options.cwd ?? process.cwd();\n\n return {\n sourceDir: config?.sourceDir ? path.resolve(configDir, config.sourceDir) : base.sourceDir,\n outputDir: config?.outputDir ? path.resolve(configDir, config.outputDir) : base.outputDir,\n framework: config?.framework ?? base.framework,\n typescript: config?.typescript ?? base.typescript,\n optimize: config?.optimize ?? base.optimize,\n prefix: config?.prefix ?? base.prefix,\n };\n}\n\n/**\n * Resolve tokens configuration section\n */\nfunction resolveTokensConfig(\n config: TokensConfig | undefined,\n options: ResolveOptions\n): ResolvedTokensConfig {\n const base = defaultTokensConfig;\n const configDir = options.configDir ?? options.cwd ?? process.cwd();\n\n // Resolve paths relative to config directory\n const resolveDir = (dir: string): string => path.resolve(configDir, dir);\n\n // Resolve output directories using Map to avoid object injection\n const outputDirsMap = new Map(Object.entries(base.outputDirs));\n if (config?.outputDirs) {\n for (const [format, dir] of Object.entries(config.outputDirs)) {\n if (dir !== undefined) {\n outputDirsMap.set(format, resolveDir(dir));\n }\n }\n }\n const outputDirs = Object.fromEntries(outputDirsMap) as ResolvedTokensConfig['outputDirs'];\n\n // Merge collection mapping with resolved paths using Map\n const collectionMappingMap = new Map<string, string>();\n if (config?.collectionMapping) {\n for (const [name, filePath] of Object.entries(config.collectionMapping)) {\n collectionMappingMap.set(name, resolveDir(filePath));\n }\n }\n const collectionMapping = Object.fromEntries(collectionMappingMap);\n\n // Resolve additional directories\n const additionalScssDirectories = (config?.additionalScssDirectories ?? []).map(resolveDir);\n const additionalCssDirectories = (config?.additionalCssDirectories ?? []).map(resolveDir);\n const watchDirectories = (config?.watchDirectories ?? []).map(resolveDir);\n\n return {\n source: config?.source ?? base.source,\n sourceDir: config?.sourceDir ? resolveDir(config.sourceDir) : base.sourceDir,\n collectionsDir: config?.collectionsDir\n ? resolveDir(config.collectionsDir)\n : base.collectionsDir,\n sourcePatterns: config?.sourcePatterns ?? [...base.sourcePatterns],\n collectionMapping,\n outputDir: config?.outputDir ? resolveDir(config.outputDir) : base.outputDir,\n outputDirs,\n outputFileNames: { ...base.outputFileNames, ...config?.outputFileNames },\n prefix: config?.prefix ?? base.prefix,\n formats: config?.formats ?? [...base.formats],\n additionalScssDirectories,\n additionalCssDirectories,\n mergeOrder: config?.mergeOrder ?? base.mergeOrder,\n createBundle: config?.createBundle ?? base.createBundle,\n scssImportHeader: config?.scssImportHeader,\n themes: resolveThemesConfig(config?.themes),\n transforms: config?.transforms ?? [],\n customFormats: config?.customFormats ?? [],\n preprocessors: config?.preprocessors ?? [],\n filters: config?.filters ?? [],\n onBuildStart: config?.onBuildStart,\n onFormatComplete: config?.onFormatComplete,\n onAllFormatsComplete: config?.onAllFormatsComplete,\n onBuildComplete: config?.onBuildComplete,\n outputReferences: config?.outputReferences ?? base.outputReferences,\n baseFontSize: config?.baseFontSize ?? base.baseFontSize,\n separateThemeFiles: config?.separateThemeFiles ?? base.separateThemeFiles,\n watch: config?.watch ?? base.watch,\n watchDirectories,\n pipeline: config?.pipeline,\n };\n}\n\n// ============================================================================\n// Main Resolver\n// ============================================================================\n\n/**\n * Merge config with overrides (simple shallow merge for top-level)\n */\nfunction applyOverrides(config: DsaiConfig, overrides: Partial<DsaiConfig>): DsaiConfig {\n return {\n tokens: overrides.tokens ? { ...config.tokens, ...overrides.tokens } : config.tokens,\n icons: overrides.icons ? { ...config.icons, ...overrides.icons } : config.icons,\n global: overrides.global ? { ...config.global, ...overrides.global } : config.global,\n };\n}\n\n/**\n * Resolve user configuration with defaults\n *\n * Merges user configuration with defaults, resolves relative paths,\n * and applies overrides.\n *\n * Resolution order (later overrides earlier):\n * 1. Default configuration\n * 2. User configuration (from file)\n * 3. Override configuration (from CLI or programmatic)\n *\n * @param config - User configuration object\n * @param options - Resolution options\n * @returns Fully resolved configuration\n *\n * @example\n * ```typescript\n * const resolved = resolveConfig(\n * { tokens: { prefix: '--custom-' } },\n * { cwd: '/path/to/project' }\n * );\n * ```\n */\nexport function resolveConfig(\n config: DsaiConfig = {},\n options: ResolveOptions = {}\n): ResolvedConfig {\n // Merge overrides into config\n const mergedConfig = options.overrides ? applyOverrides(config, options.overrides) : config;\n\n const configDir = options.configDir ?? options.cwd ?? process.cwd();\n\n return {\n global: resolveGlobalConfig(mergedConfig.global, options),\n tokens: resolveTokensConfig(mergedConfig.tokens, options),\n icons: resolveIconsConfig(mergedConfig.icons, options),\n configDir,\n };\n}\n\n/**\n * Merge multiple configurations\n *\n * Useful for extending base configurations.\n *\n * @param configs - Array of configurations to merge (later overrides earlier)\n * @returns Merged configuration\n *\n * @example\n * ```typescript\n * const merged = mergeConfigs(\n * baseConfig,\n * teamConfig,\n * projectConfig\n * );\n * ```\n */\nexport function mergeConfigs(...configs: DsaiConfig[]): DsaiConfig {\n let result: DsaiConfig = {};\n\n for (const config of configs) {\n result = applyOverrides(result, config);\n }\n\n return result;\n}\n\n/**\n * Create a partial resolved config for testing\n *\n * @param partial - Partial configuration to fill\n * @returns Full resolved configuration with defaults\n */\nexport function createResolvedConfig(partial: Partial<ResolvedConfig> = {}): ResolvedConfig {\n return {\n global: partial.global ?? defaultConfig.global,\n tokens: partial.tokens ?? defaultConfig.tokens,\n icons: partial.icons ?? defaultConfig.icons,\n configDir: partial.configDir ?? process.cwd(),\n configPath: partial.configPath,\n };\n}\n","/**\n * @fileoverview Configuration file loader for DSAI Tools\n *\n * Uses cosmiconfig to load configuration from multiple file formats\n * and locations following standard conventions.\n *\n * @module @dsai-io/tools/config/loader\n */\n\nimport path from 'node:path';\n\nimport { cosmiconfig, cosmiconfigSync } from 'cosmiconfig';\n\nimport { resolveConfig } from './resolver.js';\n\nimport type { DsaiConfig, LoadConfigOptions, LoadConfigResult } from './types.js';\nimport type { CosmiconfigResult, PublicExplorer, PublicExplorerSync } from 'cosmiconfig';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Module name for cosmiconfig search\n * This determines the config file naming conventions:\n * - dsai.config.{js,mjs,cjs,ts}\n * - .dsairc\n * - .dsairc.{json,yaml,yml,js,mjs,cjs}\n * - package.json \"dsai\" key\n */\nconst MODULE_NAME = 'dsai';\n\n/**\n * Supported configuration file names (in search order)\n */\nexport const CONFIG_FILE_NAMES = [\n 'dsai.config.ts',\n 'dsai.config.mjs',\n 'dsai.config.js',\n 'dsai.config.cjs',\n '.dsairc.ts',\n '.dsairc.mjs',\n '.dsairc.js',\n '.dsairc.cjs',\n '.dsairc.json',\n '.dsairc.yaml',\n '.dsairc.yml',\n '.dsairc',\n 'package.json',\n];\n\n// ============================================================================\n// Loader Instance\n// ============================================================================\n\n/**\n * Create a cosmiconfig explorer instance\n *\n * @param options - Optional loader options\n * @returns Cosmiconfig explorer\n */\nfunction createExplorer(options?: { stopDir?: string }): PublicExplorer {\n return cosmiconfig(MODULE_NAME, {\n searchPlaces: CONFIG_FILE_NAMES,\n stopDir: options?.stopDir,\n packageProp: MODULE_NAME,\n });\n}\n\n/**\n * Create a synchronous cosmiconfig explorer instance\n *\n * @param options - Optional loader options\n * @returns Cosmiconfig sync explorer\n */\nfunction createExplorerSync(options?: { stopDir?: string }): PublicExplorerSync {\n return cosmiconfigSync(MODULE_NAME, {\n searchPlaces: CONFIG_FILE_NAMES,\n stopDir: options?.stopDir,\n packageProp: MODULE_NAME,\n });\n}\n\n// ============================================================================\n// Loading Functions\n// ============================================================================\n\n/**\n * Load configuration from file and merge with defaults\n *\n * This is the main entry point for loading configuration.\n * It searches for config files, loads them, validates,\n * and resolves with defaults.\n *\n * @param options - Load options\n * @returns Resolved configuration with metadata\n *\n * @example\n * ```typescript\n * // Load from current directory\n * const result = await loadConfig();\n *\n * // Load from specific path\n * const result = await loadConfig({\n * configPath: './my-config.js'\n * });\n *\n * // Load with overrides\n * const result = await loadConfig({\n * overrides: { global: { debug: true } }\n * });\n * ```\n */\nexport async function loadConfig(options: LoadConfigOptions = {}): Promise<LoadConfigResult> {\n const { cwd = process.cwd(), configPath, overrides, skipFile = false } = options;\n const warnings: string[] = [];\n\n let fileConfig: DsaiConfig = {};\n let resolvedConfigPath: string | undefined;\n\n // Load configuration from file unless skipped\n if (!skipFile) {\n const explorer = createExplorer({ stopDir: path.dirname(cwd) });\n let cosmicResult: CosmiconfigResult;\n\n try {\n if (configPath) {\n // Load from explicit path\n const absolutePath = path.isAbsolute(configPath)\n ? configPath\n : path.resolve(cwd, configPath);\n cosmicResult = await explorer.load(absolutePath);\n } else {\n // Search for config file\n cosmicResult = await explorer.search(cwd);\n }\n\n if (cosmicResult && !cosmicResult.isEmpty) {\n fileConfig = cosmicResult.config as DsaiConfig;\n resolvedConfigPath = cosmicResult.filepath;\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n warnings.push(`Failed to load configuration: ${message}`);\n }\n }\n\n // Resolve configuration with defaults\n const configDir = resolvedConfigPath ? path.dirname(resolvedConfigPath) : cwd;\n\n const resolvedConfig = resolveConfig(fileConfig, {\n cwd,\n configDir,\n overrides,\n });\n\n return {\n config: resolvedConfig,\n configPath: resolvedConfigPath,\n warnings,\n };\n}\n\n/**\n * Search for configuration file without loading\n *\n * Useful for checking if a config file exists before operations.\n *\n * @param cwd - Directory to search from\n * @returns Path to config file if found, undefined otherwise\n */\nexport async function searchConfigFile(cwd: string = process.cwd()): Promise<string | undefined> {\n const explorer = createExplorer();\n\n try {\n const result = await explorer.search(cwd);\n return result?.filepath;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Clear the configuration cache\n *\n * Useful when files have changed and need to be reloaded.\n */\nexport function clearConfigCache(): void {\n const explorer = createExplorer();\n explorer.clearCaches();\n}\n\n/**\n * Load configuration synchronously (limited format support)\n *\n * Note: This only works with JSON and synchronous JS/CJS configs.\n * For full format support including ESM and TypeScript, use loadConfig().\n *\n * @param options - Load options\n * @returns Resolved configuration with metadata\n */\nexport function loadConfigSync(options: LoadConfigOptions = {}): LoadConfigResult {\n const { cwd = process.cwd(), configPath, overrides, skipFile = false } = options;\n const warnings: string[] = [];\n\n let fileConfig: DsaiConfig = {};\n let resolvedConfigPath: string | undefined;\n\n // Load configuration from file unless skipped\n if (!skipFile) {\n const explorer = createExplorerSync({ stopDir: path.dirname(cwd) });\n\n try {\n if (configPath) {\n // Load from explicit path\n const absolutePath = path.isAbsolute(configPath)\n ? configPath\n : path.resolve(cwd, configPath);\n const result = explorer.load(absolutePath);\n\n if (result && !result.isEmpty) {\n fileConfig = result.config as DsaiConfig;\n resolvedConfigPath = result.filepath;\n }\n } else {\n // Search for config file\n const result = explorer.search(cwd);\n\n if (result && !result.isEmpty) {\n fileConfig = result.config as DsaiConfig;\n resolvedConfigPath = result.filepath;\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n warnings.push(`Failed to load configuration: ${message}`);\n }\n }\n\n // Resolve configuration with defaults\n const configDir = resolvedConfigPath ? path.dirname(resolvedConfigPath) : cwd;\n\n const resolvedConfig = resolveConfig(fileConfig, {\n cwd,\n configDir,\n overrides,\n });\n\n return {\n config: resolvedConfig,\n configPath: resolvedConfigPath,\n warnings,\n };\n}\n\n// ============================================================================\n// Config Helper\n// ============================================================================\n\n/**\n * Define configuration with type checking\n *\n * A helper function that provides TypeScript type checking for config files.\n * Use this in your dsai.config.ts or dsai.config.mjs files.\n *\n * @param config - Configuration object\n * @returns The same configuration object with type checking applied\n *\n * @example\n * ```typescript\n * // dsai.config.ts\n * import { defineConfig } from '@dsai-io/tools';\n *\n * export default defineConfig({\n * tokens: {\n * prefix: '--myapp-',\n * formats: ['css', 'scss', 'ts'],\n * },\n * icons: {\n * framework: 'react',\n * },\n * });\n * ```\n */\nexport function defineConfig(config: DsaiConfig): DsaiConfig {\n return config;\n}\n\n/**\n * Define configuration with async function\n *\n * Allows async operations during configuration creation.\n *\n * @param configFn - Async function returning configuration\n * @returns Promise resolving to the configuration\n *\n * @example\n * ```typescript\n * // dsai.config.ts\n * import { defineConfigAsync } from '@dsai-io/tools';\n *\n * export default defineConfigAsync(async () => {\n * const baseConfig = await loadExternalConfig();\n * return {\n * ...baseConfig,\n * tokens: {\n * prefix: '--custom-',\n * },\n * };\n * });\n * ```\n */\nexport function defineConfigAsync(configFn: () => Promise<DsaiConfig>): Promise<DsaiConfig> {\n return configFn();\n}\n","/**\n * Token commands\n *\n * Build, validate, and sync design tokens.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/commands/tokens\n */\n\nimport { dirname } from 'node:path';\n\nimport { Command } from 'commander';\n\nimport { loadConfig } from '../../config/index.js';\nimport {\n buildTokens,\n cleanTokenOutputs,\n postprocessCLI,\n syncTokens,\n validateTokens,\n} from '../../tokens/index.js';\nimport { ExitCode } from '../types.js';\nimport { colors, createLogger, createSpinner, formatDuration } from '../ui/index.js';\n\nimport type { BuildResult, SyncResult, ValidationResult } from '../../tokens/types.js';\nimport type {\n TokensBuildOptions,\n TokensSyncOptions,\n TokensTransformOptions,\n TokensValidateOptions,\n} from '../types.js';\n\n/**\n * Create tokens command group\n *\n * @returns Commander command for tokens operations\n */\nexport function createTokensCommand(): Command {\n const tokens = new Command('tokens')\n .description('Design token operations')\n .helpCommand('help [command]', 'Show help for a command');\n\n // Build command\n tokens\n .command('build')\n .description('Build design tokens')\n .option('-p, --platforms <platforms>', 'Platforms to build (comma-separated)', 'all')\n .option('-w, --watch', 'Watch mode', false)\n .option('--clean', 'Clean output before build', false)\n .action(async (options: TokensBuildOptions, command: Command) => {\n const globalOpts = command.parent?.parent?.opts() ?? {};\n const mergedOpts = { ...globalOpts, ...options } as TokensBuildOptions;\n\n await runTokensBuild(mergedOpts);\n });\n\n // Validate command\n tokens\n .command('validate')\n .description('Validate design tokens')\n .option('--fix', 'Attempt to fix issues', false)\n .option('--strict', 'Strict validation mode', false)\n .action(async (options: TokensValidateOptions, command: Command) => {\n const globalOpts = command.parent?.parent?.opts() ?? {};\n const mergedOpts = { ...globalOpts, ...options } as TokensValidateOptions;\n\n await runTokensValidate(mergedOpts);\n });\n\n // Transform command\n tokens\n .command('transform')\n .description('Transform Figma token exports to Style Dictionary format')\n .option('--dry-run', 'Show what would be transformed without writing files', false)\n .option('--default-mode <mode>', 'Default mode for mode-aware collections', 'Light')\n .option('--ignore-modes <modes>', 'Comma-separated list of modes to ignore', '')\n .action(async (options: TokensTransformOptions, command: Command) => {\n const globalOpts = command.parent?.parent?.opts() ?? {};\n const mergedOpts = { ...globalOpts, ...options } as TokensTransformOptions;\n\n await runTokensTransform(mergedOpts);\n });\n\n // Sync command\n tokens\n .command('sync')\n .description('Sync tokens flat file')\n .option('-f, --format <format>', 'Output format', 'flat')\n .action(async (options: TokensSyncOptions, command: Command) => {\n const globalOpts = command.parent?.parent?.opts() ?? {};\n const mergedOpts = { ...globalOpts, ...options } as TokensSyncOptions;\n\n await runTokensSync(mergedOpts);\n });\n\n // Postprocess command\n tokens\n .command('postprocess')\n .description('Post-process CSS theme files (e.g., replace data-bs-theme with data-dsai-theme)')\n .action(async (_options: Record<string, unknown>, command: Command) => {\n const globalOpts = command.parent?.parent?.opts() ?? {};\n\n await runTokensPostprocess(globalOpts);\n });\n\n return tokens;\n}\n\n/**\n * Run tokens transform\n */\nasync function runTokensTransform(options: TokensTransformOptions): Promise<void> {\n const startTime = Date.now();\n const logger = createLogger({\n quiet: options.quiet,\n debug: options.debug,\n });\n const spinner = createSpinner(options.quiet);\n\n try {\n // Load configuration\n spinner.start('Loading configuration...');\n const { config, configPath } = await loadConfig({\n cwd: options.cwd,\n configPath: options.config,\n });\n spinner.succeed(`Loaded config from ${colors.path(configPath ?? 'defaults')}`);\n\n logger.debug(`Config: ${JSON.stringify(config, null, 2)}`);\n\n // Get directories from config\n const sourceDir = config.tokens.sourceDir;\n const collectionsDir = config.tokens.collectionsDir;\n\n // Run transform\n spinner.start('Transforming Figma tokens...');\n const { transformTokens } = await import('../../tokens/index.js');\n\n const ignoreModes = options.ignoreModes\n ? options.ignoreModes.split(',').map((m: string) => m.trim())\n : [];\n\n const result = transformTokens({\n sourceDir,\n collectionsDir,\n defaultMode: options.defaultMode ?? 'Light',\n ignoreModes,\n dryRun: options.dryRun ?? false,\n verbose: !options.quiet,\n });\n\n if (result.success) {\n const duration = formatDuration(Date.now() - startTime);\n spinner.succeed(\n `Transformed ${colors.bold(result.filesWritten.length.toString())} files in ${colors.bold(duration)}`\n );\n\n // Show output files\n if (!options.quiet && result.filesWritten.length > 0) {\n logger.log('');\n for (const file of result.filesWritten) {\n logger.log(` ${colors.success('ā')} ${colors.path(file)}`);\n }\n logger.log('');\n }\n\n // Show warnings\n if (result.warnings.length > 0) {\n logger.log('');\n for (const warning of result.warnings) {\n logger.warn(warning);\n }\n }\n\n process.exit(ExitCode.Success);\n } else {\n spinner.fail('Transform failed');\n\n for (const error of result.errors) {\n logger.error(error);\n }\n\n process.exit(ExitCode.BuildError);\n }\n } catch (error) {\n spinner.fail('Transform failed');\n const logger = createLogger({ quiet: options.quiet, debug: options.debug });\n logger.error(error instanceof Error ? error.message : 'Unknown error');\n process.exit(ExitCode.BuildError);\n }\n}\n\n/**\n * Run tokens build\n */\nasync function runTokensBuild(options: TokensBuildOptions): Promise<void> {\n const startTime = Date.now();\n const logger = createLogger({\n quiet: options.quiet,\n debug: options.debug,\n });\n const spinner = createSpinner(options.quiet);\n\n try {\n // Load configuration\n spinner.start('Loading configuration...');\n const { config, configPath } = await loadConfig({\n cwd: options.cwd,\n configPath: options.config,\n });\n spinner.succeed(`Loaded config from ${colors.path(configPath ?? 'defaults')}`);\n\n logger.debug(`Config: ${JSON.stringify(config, null, 2)}`);\n\n // Get directories from config\n const tokensDir = config.tokens.collectionsDir;\n const toolsDir = config.tokens.sourceDir;\n\n // Clean if requested\n if (options.clean) {\n spinner.start('Cleaning output directory...');\n\n const cleanResult = cleanTokenOutputs({\n baseDir: dirname(configPath ?? process.cwd()),\n directories: config.tokens.outputDir ? [config.tokens.outputDir] : ['dist'],\n verbose: !options.quiet,\n dryRun: false,\n });\n\n if (cleanResult.success) {\n spinner.succeed(\n `Cleaned ${cleanResult.totalFilesRemoved} files from ${cleanResult.cleaned.length} directories`\n );\n } else {\n spinner.warn('Clean completed with warnings');\n for (const error of cleanResult.errors) {\n logger.warn(error);\n }\n }\n }\n\n // Run build\n spinner.start('Building tokens...');\n const result: BuildResult = buildTokens(tokensDir, toolsDir, {\n verbose: !options.quiet,\n quiet: options.quiet,\n pipeline: config.tokens.pipeline,\n });\n\n if (result.success) {\n const duration = formatDuration(Date.now() - startTime);\n spinner.succeed(\n `Built ${colors.bold(result.stepsCompleted.length.toString())} steps in ${colors.bold(duration)}`\n );\n\n // Show output files\n if (!options.quiet && result.outputFiles && result.outputFiles.length > 0) {\n logger.log('');\n for (const file of result.outputFiles) {\n logger.log(` ${colors.success('ā')} ${colors.path(file)}`);\n }\n logger.log('');\n }\n\n process.exit(ExitCode.Success);\n } else {\n spinner.fail('Build failed');\n\n for (const error of result.errors) {\n logger.error(error);\n }\n\n process.exit(ExitCode.BuildError);\n }\n } catch (error) {\n spinner.fail('Build failed');\n\n if (error instanceof Error) {\n logger.error(error.message);\n if (options.debug) {\n console.error(error.stack);\n }\n }\n\n process.exit(ExitCode.GeneralError);\n }\n}\n\n/**\n * Run tokens validation\n */\nasync function runTokensValidate(options: TokensValidateOptions): Promise<void> {\n const logger = createLogger({\n quiet: options.quiet,\n debug: options.debug,\n });\n const spinner = createSpinner(options.quiet);\n\n try {\n // Load configuration\n spinner.start('Loading configuration...');\n const { config } = await loadConfig({\n cwd: options.cwd,\n configPath: options.config,\n });\n spinner.stop();\n\n // Run validation\n spinner.start('Validating tokens...');\n const result: ValidationResult = await validateTokens(config, {\n strict: options.strict,\n verbose: !options.quiet,\n quiet: options.quiet,\n });\n\n if (result.valid) {\n spinner.succeed(`All ${colors.bold(result.tokenCount.toString())} tokens are valid`);\n if (result.warnings.length > 0) {\n logger.warn(`${result.warnings.length} warnings found`);\n }\n process.exit(ExitCode.Success);\n }\n\n spinner.fail(`Found ${colors.bold(result.errors.length.toString())} errors`);\n\n for (const error of result.errors) {\n logger.error(`${error.path}: ${error.message}`);\n }\n\n for (const warning of result.warnings) {\n logger.warn(`${warning.path}: ${warning.message}`);\n }\n\n process.exit(ExitCode.ValidationError);\n } catch (error) {\n spinner.fail('Validation failed');\n\n if (error instanceof Error) {\n logger.error(error.message);\n }\n\n process.exit(ExitCode.GeneralError);\n }\n}\n\n/**\n * Run tokens sync\n */\nasync function runTokensSync(options: TokensSyncOptions): Promise<void> {\n const logger = createLogger({\n quiet: options.quiet,\n debug: options.debug,\n });\n const spinner = createSpinner(options.quiet);\n\n try {\n // Load configuration\n spinner.start('Loading configuration...');\n const { config } = await loadConfig({\n cwd: options.cwd,\n configPath: options.config,\n });\n spinner.stop();\n\n // Get default paths from config\n const sourceFile = `${config.tokens.outputDir}/js/tokens.js`;\n const targetFile = `${config.tokens.collectionsDir}/../src/tokens-flat.ts`;\n\n // Run sync\n spinner.start('Syncing tokens...');\n const result: SyncResult = syncTokens({\n sourceFile,\n targetFile,\n verbose: !options.quiet,\n });\n\n if (result.success) {\n spinner.succeed(\n `Synced ${colors.bold(result.tokensCount.toString())} tokens${result.changed ? ' (file updated)' : ' (no changes)'}`\n );\n process.exit(ExitCode.Success);\n } else {\n spinner.fail('Sync failed');\n if (result.errors) {\n for (const error of result.errors) {\n logger.error(error);\n }\n }\n process.exit(ExitCode.BuildError);\n }\n } catch (error) {\n spinner.fail('Sync failed');\n\n if (error instanceof Error) {\n logger.error(error.message);\n }\n\n process.exit(ExitCode.GeneralError);\n }\n}\n\n/**\n * Run tokens postprocess\n */\nasync function runTokensPostprocess(options: { quiet?: boolean; debug?: boolean }): Promise<void> {\n const logger = createLogger({\n quiet: options.quiet,\n debug: options.debug,\n });\n const spinner = createSpinner(options.quiet);\n\n try {\n // Load configuration\n spinner.start('Loading configuration...');\n const { config } = await loadConfig({\n cwd: process.cwd(),\n });\n spinner.stop();\n\n // The postprocessCLI expects a base directory and appends 'dist/css' to it\n // config.tokens.outputDir is resolved to full path like .../tokens/dist\n // We need the parent directory (the package root)\n const tokensPackageDir = dirname(config.tokens.outputDir);\n\n // Run postprocess\n spinner.start('Post-processing CSS files...');\n const success = postprocessCLI(tokensPackageDir);\n\n if (success) {\n spinner.succeed('Post-processed CSS theme files');\n process.exit(ExitCode.Success);\n } else {\n spinner.fail('Post-processing failed');\n process.exit(ExitCode.BuildError);\n }\n } catch (error) {\n spinner.fail('Post-processing failed');\n\n if (error instanceof Error) {\n logger.error(error.message);\n }\n\n process.exit(ExitCode.GeneralError);\n }\n}\n","/**\n * CLI type definitions\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/types\n */\n\n// ============================================================================\n// Exit Codes\n// ============================================================================\n\n/**\n * Exit codes for CLI commands\n *\n * Follows common conventions:\n * - 0: Success\n * - 1: General error\n * - 2+: Specific error types\n */\nexport const ExitCode = {\n /** Successful execution */\n Success: 0,\n /** General/unknown error */\n GeneralError: 1,\n /** Configuration loading or validation error */\n ConfigError: 2,\n /** Token or schema validation error */\n ValidationError: 3,\n /** Build process error */\n BuildError: 4,\n /** File system I/O error */\n IOError: 5,\n} as const;\n\nexport type ExitCodeType = (typeof ExitCode)[keyof typeof ExitCode];\n\n// ============================================================================\n// Global Options\n// ============================================================================\n\n/**\n * Global CLI options available to all commands\n */\nexport interface GlobalOptions {\n /** Custom config file path */\n config?: string;\n\n /** Working directory */\n cwd?: string;\n\n /** Enable debug mode - verbose output and stack traces */\n debug?: boolean;\n\n /** Quiet mode - no spinners or colors */\n quiet?: boolean;\n\n /** Dry run - preview changes without writing files */\n dryRun?: boolean;\n}\n\n// ============================================================================\n// Command-Specific Options\n// ============================================================================\n\n/**\n * Token build command options\n */\nexport interface TokensBuildOptions extends GlobalOptions {\n /** Platforms to build (comma-separated or 'all') */\n platforms?: string;\n\n /** Watch mode - rebuild on file changes */\n watch?: boolean;\n\n /** Clean output directory before build */\n clean?: boolean;\n}\n\n/**\n * Token validate command options\n */\nexport interface TokensValidateOptions extends GlobalOptions {\n /** Attempt to fix issues automatically */\n fix?: boolean;\n\n /** Strict validation mode */\n strict?: boolean;\n}\n\n/**\n * Token sync command options\n */\nexport interface TokensSyncOptions extends GlobalOptions {\n /** Output format for sync */\n format?: 'flat' | 'nested';\n}\n\n/**\n * Token transform command options\n */\nexport interface TokensTransformOptions extends GlobalOptions {\n /** Dry run - show what would be transformed without writing files */\n dryRun?: boolean;\n\n /** Default mode for mode-aware collections */\n defaultMode?: string;\n\n /** Comma-separated list of modes to ignore */\n ignoreModes?: string;\n}\n\n/**\n * Icons build command options\n */\nexport interface IconsBuildOptions extends GlobalOptions {\n /** Output format for icons */\n format?: 'svg' | 'react' | 'vue';\n\n /** Optimize SVGs */\n optimize?: boolean;\n}\n\n/**\n * Init command options\n */\nexport interface InitOptions extends GlobalOptions {\n /** Skip prompts, use defaults */\n yes?: boolean;\n\n /** Template to use */\n template?: 'minimal' | 'full' | 'enterprise';\n}\n\n/**\n * Config display command options\n */\nexport interface ConfigOptions extends GlobalOptions {\n /** Output as JSON */\n json?: boolean;\n}\n\n// ============================================================================\n// Logger and Spinner Interfaces\n// ============================================================================\n\n/**\n * Logger interface for CLI output\n */\nexport interface Logger {\n /** Log a general message */\n log(message: string): void;\n\n /** Log an info message with icon */\n info(message: string): void;\n\n /** Log a success message with icon */\n success(message: string): void;\n\n /** Log a warning message with icon */\n warn(message: string): void;\n\n /** Log an error message with icon */\n error(message: string): void;\n\n /** Log a debug message (only in debug mode) */\n debug(message: string): void;\n}\n\n/**\n * Spinner interface for progress indication\n */\nexport interface Spinner {\n /** Start spinner with text */\n start(text: string): void;\n\n /** Stop spinner (optionally update text) */\n stop(text?: string): void;\n\n /** Stop with success state */\n succeed(text?: string): void;\n\n /** Stop with failure state */\n fail(text?: string): void;\n\n /** Stop with warning state */\n warn(text?: string): void;\n\n /** Stop with info state */\n info(text?: string): void;\n}\n\n// ============================================================================\n// CLI Context\n// ============================================================================\n\n/**\n * CLI context passed to commands\n *\n * Contains resolved values and utility instances\n */\nexport interface CLIContext {\n /** Resolved working directory (absolute path) */\n cwd: string;\n\n /** Package version */\n version: string;\n\n /** Debug mode enabled */\n debug: boolean;\n\n /** Quiet mode enabled */\n quiet: boolean;\n\n /** Logger instance */\n logger: Logger;\n\n /** Spinner instance */\n spinner: Spinner;\n}\n\n// ============================================================================\n// Command Handler Types\n// ============================================================================\n\n/**\n * Generic command handler function\n */\nexport type CommandHandler<T extends GlobalOptions = GlobalOptions> = (\n options: T,\n context: CLIContext\n) => Promise<void>;\n\n/**\n * Build result from token operations\n */\nexport interface BuildResult {\n /** Whether build succeeded */\n success: boolean;\n\n /** Number of files written */\n filesWritten: number;\n\n /** List of output files */\n files?: Array<{\n path: string;\n size?: number;\n }>;\n\n /** Any errors encountered */\n errors?: Array<{\n message: string;\n file?: string;\n }>;\n}\n\n/**\n * Validation result from token validation\n */\nexport interface ValidationResult {\n /** Total number of tokens validated */\n totalTokens: number;\n\n /** Validation errors */\n errors: Array<{\n path: string;\n message: string;\n }>;\n\n /** Validation warnings */\n warnings: Array<{\n path: string;\n message: string;\n }>;\n\n /** Issues that were automatically fixed */\n fixed: Array<{\n path: string;\n message: string;\n }>;\n}\n\n/**\n * Sync result from token sync\n */\nexport interface SyncResult {\n /** Whether sync succeeded */\n success: boolean;\n\n /** Number of tokens synced */\n tokenCount: number;\n\n /** Output file path */\n outputPath: string;\n\n /** Error message if failed */\n error?: string;\n}\n","/**\n * Color utilities for CLI output\n *\n * Wraps picocolors with NO_COLOR environment variable support.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/ui/colors\n */\n\nimport pc from 'picocolors';\n\n/**\n * Check if colors should be disabled\n *\n * Respects:\n * - NO_COLOR environment variable (https://no-color.org/)\n * - FORCE_COLOR=0\n * - Non-TTY output\n */\nfunction colorsDisabled(): boolean {\n return (\n process.env['NO_COLOR'] !== undefined ||\n process.env['FORCE_COLOR'] === '0' ||\n !process.stdout.isTTY\n );\n}\n\n/**\n * Conditionally apply color function\n */\nfunction maybeColor(fn: (s: string) => string, text: string): string {\n return colorsDisabled() ? text : fn(text);\n}\n\n/**\n * Color utilities with NO_COLOR support\n *\n * @example\n * ```typescript\n * import { colors } from './colors.js';\n *\n * console.log(colors.success('Build complete!'));\n * console.log(colors.error('Something went wrong'));\n * console.log(colors.path('./dist/tokens.css'));\n * ```\n */\nexport const colors = {\n // =========================================================================\n // Text Colors\n // =========================================================================\n\n /** Red text */\n red: (text: string): string => maybeColor(pc.red, text),\n\n /** Green text */\n green: (text: string): string => maybeColor(pc.green, text),\n\n /** Yellow text */\n yellow: (text: string): string => maybeColor(pc.yellow, text),\n\n /** Blue text */\n blue: (text: string): string => maybeColor(pc.blue, text),\n\n /** Magenta text */\n magenta: (text: string): string => maybeColor(pc.magenta, text),\n\n /** Cyan text */\n cyan: (text: string): string => maybeColor(pc.cyan, text),\n\n /** Gray/dim text */\n gray: (text: string): string => maybeColor(pc.gray, text),\n\n /** White text */\n white: (text: string): string => maybeColor(pc.white, text),\n\n // =========================================================================\n // Text Modifiers\n // =========================================================================\n\n /** Bold text */\n bold: (text: string): string => maybeColor(pc.bold, text),\n\n /** Dim text */\n dim: (text: string): string => maybeColor(pc.dim, text),\n\n /** Italic text */\n italic: (text: string): string => maybeColor(pc.italic, text),\n\n /** Underlined text */\n underline: (text: string): string => maybeColor(pc.underline, text),\n\n // =========================================================================\n // Background Colors\n // =========================================================================\n\n /** Red background */\n bgRed: (text: string): string => maybeColor(pc.bgRed, text),\n\n /** Green background */\n bgGreen: (text: string): string => maybeColor(pc.bgGreen, text),\n\n /** Yellow background */\n bgYellow: (text: string): string => maybeColor(pc.bgYellow, text),\n\n /** Blue background */\n bgBlue: (text: string): string => maybeColor(pc.bgBlue, text),\n\n // =========================================================================\n // Semantic Colors\n // =========================================================================\n\n /** Error messages - red */\n error: (text: string): string => maybeColor(pc.red, text),\n\n /** Success messages - green */\n success: (text: string): string => maybeColor(pc.green, text),\n\n /** Warning messages - yellow */\n warning: (text: string): string => maybeColor(pc.yellow, text),\n\n /** Info messages - blue */\n info: (text: string): string => maybeColor(pc.blue, text),\n\n /** Muted/secondary text - gray */\n muted: (text: string): string => maybeColor(pc.gray, text),\n\n // =========================================================================\n // Combined Styles\n // =========================================================================\n\n /** Labels - bold cyan */\n label: (text: string): string => maybeColor(pc.bold, maybeColor(pc.cyan, text)),\n\n /** Values - yellow */\n value: (text: string): string => maybeColor(pc.yellow, text),\n\n /** File paths - underlined cyan */\n path: (text: string): string => maybeColor(pc.underline, maybeColor(pc.cyan, text)),\n\n /** Commands - bold green */\n command: (text: string): string => maybeColor(pc.bold, maybeColor(pc.green, text)),\n\n /** Code snippets - dim */\n code: (text: string): string => maybeColor(pc.dim, text),\n\n /** Highlight - bold yellow */\n highlight: (text: string): string => maybeColor(pc.bold, maybeColor(pc.yellow, text)),\n};\n\nexport default colors;\n","/**\n * Spinner utilities for CLI progress indication\n *\n * Wraps ora for consistent spinner behavior with quiet mode support.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/ui/spinner\n */\n\nimport ora from 'ora';\n\nimport type { Spinner } from '../types.js';\nimport type { Ora } from 'ora';\n\n/**\n * Create a spinner instance\n *\n * In quiet mode, returns a no-op spinner that does nothing.\n *\n * @param quiet - If true, spinner is disabled (no-op)\n * @returns Spinner instance\n *\n * @example\n * ```typescript\n * const spinner = createSpinner(false);\n * spinner.start('Loading configuration...');\n * // ... do work\n * spinner.succeed('Configuration loaded!');\n * ```\n */\nexport function createSpinner(quiet = false): Spinner {\n // In quiet mode, return a no-op spinner\n if (quiet) {\n return {\n start: (): void => {},\n stop: (): void => {},\n succeed: (): void => {},\n fail: (): void => {},\n warn: (): void => {},\n info: (): void => {},\n };\n }\n\n let instance: Ora | null = null;\n\n return {\n /**\n * Start spinner with text\n */\n start(text: string): void {\n instance = ora(text).start();\n },\n\n /**\n * Stop spinner (optionally update text)\n */\n stop(text?: string): void {\n if (instance) {\n if (text) {\n instance.text = text;\n }\n instance.stop();\n instance = null;\n }\n },\n\n /**\n * Stop with success state (green checkmark)\n */\n succeed(text?: string): void {\n if (instance) {\n instance.succeed(text);\n instance = null;\n }\n },\n\n /**\n * Stop with failure state (red X)\n */\n fail(text?: string): void {\n if (instance) {\n instance.fail(text);\n instance = null;\n }\n },\n\n /**\n * Stop with warning state (yellow triangle)\n */\n warn(text?: string): void {\n if (instance) {\n instance.warn(text);\n instance = null;\n }\n },\n\n /**\n * Stop with info state (blue i)\n */\n info(text?: string): void {\n if (instance) {\n instance.info(text);\n instance = null;\n }\n },\n };\n}\n","/**\n * Logger utilities for CLI output\n *\n * Provides consistent logging with icons, colors, and quiet/debug mode support.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/ui/logger\n */\n\n/* eslint-disable no-console */\n\nimport colors from './colors.js';\n\nimport type { Logger } from '../types.js';\n\n/**\n * Logger creation options\n */\nexport interface LoggerOptions {\n /** Quiet mode - minimal output */\n quiet?: boolean;\n\n /** Debug mode - verbose output */\n debug?: boolean;\n\n /** Custom prefix for messages */\n prefix?: string;\n}\n\n/**\n * Create a logger instance\n *\n * @param options - Logger options\n * @returns Logger instance\n *\n * @example\n * ```typescript\n * const logger = createLogger({ debug: true });\n * logger.info('Starting build...');\n * logger.success('Build complete!');\n * logger.debug('Token count: 123'); // Only shown in debug mode\n * ```\n */\nexport function createLogger(options: LoggerOptions = {}): Logger {\n const { quiet = false, debug = false, prefix = '' } = options;\n\n const prefixStr = prefix ? `${colors.muted(`[${prefix}]`)} ` : '';\n\n return {\n /**\n * Log a general message\n */\n log(message: string): void {\n if (!quiet) {\n console.log(`${prefixStr}${message}`);\n }\n },\n\n /**\n * Log an info message with icon\n */\n info(message: string): void {\n if (!quiet) {\n console.log(`${prefixStr}${colors.info('ā¹')} ${message}`);\n }\n },\n\n /**\n * Log a success message with icon\n */\n success(message: string): void {\n // Success always shows, even in quiet mode\n console.log(`${prefixStr}${colors.success('ā')} ${message}`);\n },\n\n /**\n * Log a warning message with icon\n */\n warn(message: string): void {\n console.warn(`${prefixStr}${colors.warning('ā ')} ${message}`);\n },\n\n /**\n * Log an error message with icon\n */\n error(message: string): void {\n console.error(`${prefixStr}${colors.error('ā')} ${message}`);\n },\n\n /**\n * Log a debug message (only in debug mode)\n */\n debug(message: string): void {\n if (debug) {\n console.log(`${prefixStr}${colors.muted('DEBUG')} ${colors.dim(message)}`);\n }\n },\n };\n}\n\n// ============================================================================\n// Formatting Utilities\n// ============================================================================\n\n/**\n * Format a duration in milliseconds to human-readable string\n *\n * @param ms - Duration in milliseconds\n * @returns Formatted duration string\n *\n * @example\n * ```typescript\n * formatDuration(500); // '500ms'\n * formatDuration(2500); // '2.50s'\n * formatDuration(65000); // '1m 5s'\n * ```\n */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n }\n if (ms < 60000) {\n return `${(ms / 1000).toFixed(2)}s`;\n }\n const minutes = Math.floor(ms / 60000);\n const seconds = ((ms % 60000) / 1000).toFixed(0);\n return `${minutes}m ${seconds}s`;\n}\n\n/**\n * Format bytes to human-readable string\n *\n * @param bytes - Number of bytes\n * @returns Formatted size string\n *\n * @example\n * ```typescript\n * formatBytes(0); // '0 B'\n * formatBytes(1024); // '1 KB'\n * formatBytes(1536000); // '1.46 MB'\n * ```\n */\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) {\n return '0 B';\n }\n const k = 1024;\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const sizeIndex = Math.min(i, 3); // Clamp to valid index (0-3)\n\n let sizeLabel: string;\n switch (sizeIndex) {\n case 0:\n sizeLabel = 'B';\n break;\n case 1:\n sizeLabel = 'KB';\n break;\n case 2:\n sizeLabel = 'MB';\n break;\n default:\n sizeLabel = 'GB';\n }\n\n return `${Number.parseFloat((bytes / k ** sizeIndex).toFixed(2))} ${sizeLabel}`;\n}\n\n/**\n * Format a count with singular/plural label\n *\n * @param count - The count\n * @param singular - Singular form\n * @param plural - Plural form (defaults to singular + 's')\n * @returns Formatted string\n *\n * @example\n * ```typescript\n * formatCount(1, 'file'); // '1 file'\n * formatCount(5, 'file'); // '5 files'\n * formatCount(1, 'entry', 'entries'); // '1 entry'\n * ```\n */\nexport function formatCount(count: number, singular: string, plural?: string): string {\n const label = count === 1 ? singular : (plural ?? `${singular}s`);\n return `${count} ${label}`;\n}\n","/* eslint-disable security/detect-non-literal-fs-filename */\n/**\n * SVG file scanner\n *\n * Scans directories for SVG files and reads their contents.\n *\n * @packageDocumentation\n */\n\nimport { readFileSync, statSync } from 'node:fs';\nimport { basename } from 'node:path';\n\nimport type { RawSVGData, ScannerOptions } from '../types.js';\n\n/**\n * Scan directory for SVG files\n *\n * Uses fast-glob to find SVG files matching the specified patterns.\n *\n * @param options - Scanner options\n * @returns Array of raw SVG data\n *\n * @example\n * ```typescript\n * const files = await scanSVGFiles({\n * sourceDir: './icons',\n * include: ['**\\/*.svg'],\n * exclude: ['**\\/node_modules\\/**'],\n * });\n * ```\n */\nexport async function scanSVGFiles(options: ScannerOptions): Promise<RawSVGData[]> {\n const {\n sourceDir,\n include = ['**/*.svg'],\n exclude = ['**/node_modules/**', '**/dist/**'],\n } = options;\n\n // Dynamic import of fast-glob (ESM module)\n const { default: fg } = await import('fast-glob');\n\n // Find all SVG files\n const files = await fg(include, {\n cwd: sourceDir,\n ignore: exclude,\n absolute: true,\n onlyFiles: true,\n });\n\n // Read each file\n const svgFiles: RawSVGData[] = [];\n\n for (const filePath of files) {\n try {\n const content = readFileSync(filePath, 'utf-8');\n const stats = statSync(filePath);\n\n // Extract file name without extension\n const fileName = basename(filePath).replace(/\\.svg$/i, '');\n\n svgFiles.push({\n filePath,\n fileName,\n content,\n originalSize: stats.size,\n });\n } catch {\n console.warn(`Warning: Failed to read ${filePath}`);\n }\n }\n\n // Sort by name for consistent output\n svgFiles.sort((a, b) => a.fileName.localeCompare(b.fileName));\n\n return svgFiles;\n}\n\n/**\n * Read a single SVG file\n *\n * @param filePath - Path to SVG file\n * @returns Raw SVG data or null if failed\n */\nexport function readSVGFile(filePath: string): RawSVGData | null {\n try {\n const content = readFileSync(filePath, 'utf-8');\n const stats = statSync(filePath);\n const fileName = basename(filePath).replace(/\\.svg$/i, '');\n\n return {\n filePath,\n fileName,\n content,\n originalSize: stats.size,\n };\n } catch {\n return null;\n }\n}\n","/**\n * Icon naming utilities\n *\n * @packageDocumentation\n */\n\n/**\n * Convert string to PascalCase component name\n *\n * @param input - Input string (e.g., file name)\n * @returns PascalCase component name\n *\n * @example\n * ```typescript\n * toComponentName('arrow-left') // 'ArrowLeft'\n * toComponentName('24px-icon') // 'Icon24px'\n * toComponentName('my_icon') // 'MyIcon'\n * toComponentName('chevron-down-small') // 'ChevronDownSmall'\n * ```\n */\nexport function toComponentName(input: string): string {\n // Handle numbers at start by prefixing with 'Icon'\n let processed = input;\n if (/^\\d/.test(processed)) {\n processed = `icon-${processed}`;\n }\n\n return (\n processed\n // Split on non-alphanumeric characters\n .split(/[^a-zA-Z0-9]+/)\n // Filter empty strings\n .filter((word) => word.length > 0)\n // Capitalize each word\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n // Join into single string\n .join('')\n );\n}\n\n/**\n * Convert string to kebab-case icon name\n *\n * @param input - Input string (e.g., component name)\n * @returns kebab-case icon name\n *\n * @example\n * ```typescript\n * toIconName('ArrowLeft') // 'arrow-left'\n * toIconName('ChevronDownSmall') // 'chevron-down-small'\n * toIconName('Icon24px') // 'icon-24px'\n * ```\n */\nexport function toIconName(input: string): string {\n return (\n input\n // Insert hyphen before uppercase letters\n .replace(/([A-Z])/g, '-$1')\n // Insert hyphen before number sequences\n .replace(/(\\d+)/g, '-$1')\n // Clean up multiple hyphens\n .replace(/-+/g, '-')\n // Remove leading hyphen\n .replace(/^-/, '')\n // Lowercase\n .toLowerCase()\n );\n}\n\n/**\n * Validate icon name\n *\n * @param name - Icon name to validate\n * @returns True if valid, false otherwise\n */\nexport function isValidIconName(name: string): boolean {\n // Must be non-empty\n if (!name || name.length === 0) {\n return false;\n }\n\n // Must be valid identifier-like (alphanumeric, hyphens, underscores)\n if (!/^[a-zA-Z0-9_-]+$/.test(name)) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Normalize icon name from file name\n *\n * @param fileName - File name (without extension)\n * @returns Normalized icon name\n */\nexport function normalizeIconName(fileName: string): string {\n return fileName\n .replace(/[^a-zA-Z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n}\n","/**\n * SVG parser\n *\n * Parses SVG content into structured data.\n *\n * @packageDocumentation\n */\n\nimport { normalizeIconName, toComponentName } from '../utils/naming.js';\n\nimport type { ParsedSVG, RawSVGData } from '../types.js';\n\n/**\n * Parse raw SVG data into structured format\n *\n * Extracts viewBox, attributes, inner content, and accessibility info.\n *\n * @param raw - Raw SVG data\n * @returns Parsed SVG data\n */\nexport function parseSVG(raw: RawSVGData): ParsedSVG {\n const { content, fileName } = raw;\n\n // Extract SVG opening tag attributes\n const svgMatch = content.match(/<svg([^>]*)>/i);\n const svgAttributes = svgMatch?.[1] ?? '';\n\n // Parse attributes into object\n const attributes: Record<string, string> = {};\n const attrRegex = /([a-zA-Z][a-zA-Z0-9-]*)=[\"']([^\"']*)[\"']/g;\n\n for (const attrMatch of svgAttributes.matchAll(attrRegex)) {\n const key = attrMatch[1];\n const value = attrMatch[2];\n if (key && value !== undefined) {\n Object.assign(attributes, { [key]: value });\n }\n }\n\n // Extract viewBox (or construct from width/height)\n let viewBox = attributes['viewBox'] ?? '';\n if (!viewBox) {\n const width = attributes['width']?.replace(/[^\\d.]/g, '') ?? '24';\n const height = attributes['height']?.replace(/[^\\d.]/g, '') ?? '24';\n viewBox = `0 0 ${width} ${height}`;\n }\n\n // Extract inner content (everything between <svg> and </svg>)\n const innerContentMatch = content.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/i);\n const innerContent = innerContentMatch?.[1]?.trim() ?? '';\n\n // Extract title for accessibility\n const titleMatch = content.match(/<title>([^<]*)<\\/title>/i);\n const title = titleMatch?.[1];\n\n // Extract description for accessibility\n const descMatch = content.match(/<desc>([^<]*)<\\/desc>/i);\n const description = descMatch?.[1];\n\n // Generate normalized name and component name\n const name = normalizeIconName(fileName);\n const componentName = toComponentName(fileName);\n\n return {\n name,\n componentName,\n fileName,\n viewBox,\n width: attributes['width'],\n height: attributes['height'],\n innerContent,\n fullContent: content,\n attributes,\n title,\n description,\n };\n}\n\n/**\n * Parse multiple SVG files\n *\n * @param rawFiles - Array of raw SVG data\n * @returns Array of parsed SVG data\n */\nexport function parseSVGFiles(rawFiles: RawSVGData[]): ParsedSVG[] {\n return rawFiles.map(parseSVG);\n}\n\n/**\n * Clean SVG content for React compatibility\n *\n * Converts kebab-case attributes to camelCase for JSX.\n *\n * @param svg - SVG content string\n * @returns Cleaned SVG content\n */\nexport function cleanSVGForReact(svg: string): string {\n return (\n svg\n // Convert kebab-case attributes to camelCase for React\n .replace(\n /(stroke|fill|line|clip|stop|color|font|text|letter|word|alignment|dominant|glyph|horiz|overline|paint|pointer|shape|strikethrough|underline|unicode|units|vert|writing)-([a-z])/g,\n (_, p1, p2) => p1 + p2.toUpperCase()\n )\n // Convert specific attributes\n .replace(/class=\"/g, 'className=\"')\n .replace(/xlink:href/g, 'xlinkHref')\n .replace(/xmlns:xlink/g, 'xmlnsXlink')\n // Use currentColor for strokes and fills (inherits from CSS)\n .replace(/stroke=\"#[^\"]+\"/g, 'stroke=\"currentColor\"')\n .replace(/fill=\"#[^\"]+\"/g, 'fill=\"currentColor\"')\n // Handle fill=\"none\" (keep as-is, common for stroke-only icons)\n .replace(/fill=\"currentColor\"([^>]*stroke)/g, 'fill=\"none\"$1')\n );\n}\n\n/**\n * Extract viewBox from SVG string\n *\n * @param svg - SVG content string\n * @returns ViewBox string or default\n */\nexport function extractViewBox(svg: string): string {\n const match = svg.match(/viewBox=\"([^\"]+)\"/);\n return match?.[1] ?? '0 0 24 24';\n}\n","/**\n * Core icon processing exports\n *\n * @packageDocumentation\n */\n\nexport { readSVGFile, scanSVGFiles } from './scanner.js';\nexport { cleanSVGForReact, extractViewBox, parseSVG, parseSVGFiles } from './parser.js';\nexport {\n defaultSVGOConfig,\n optimizeSVG,\n optimizeSVGFiles,\n skipOptimization,\n} from './optimizer.js';\n","/* eslint-disable security/detect-non-literal-fs-filename */\n/**\n * React component generator\n *\n * Generates React icon components from optimized SVG data.\n *\n * @packageDocumentation\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { cleanSVGForReact } from '../core/parser.js';\n\nimport type {\n GeneratedIcon,\n GeneratorOptions,\n IconTemplate,\n IndexTemplate,\n OptimizedSVG,\n TypesTemplate,\n} from '../types.js';\n\n/**\n * Default React icon template\n *\n * Generates a forwardRef component with size, title, and aria support.\n */\nexport const defaultReactTemplate: IconTemplate = (icon) => {\n const cleanedContent = cleanSVGForReact(icon.innerContent);\n\n return `/**\n * ${icon.componentName} icon\n *\n * @generated by @dsai-io/tools\n */\n\nimport * as React from 'react';\n\nimport type { SVGProps } from 'react';\n\nexport interface ${icon.componentName}Props extends SVGProps<SVGSVGElement> {\n /** Icon size */\n size?: number | string;\n /** Icon title for accessibility */\n title?: string;\n}\n\nexport const ${icon.componentName} = React.forwardRef<SVGSVGElement, ${icon.componentName}Props>(\n ({ size = 24, title${icon.title ? ` = \"${icon.title}\"` : ''}, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"${icon.viewBox}\"\n width={size}\n height={size}\n fill=\"currentColor\"\n role={title ? 'img' : 'presentation'}\n aria-label={title}\n {...props}\n >\n {title && <title>{title}</title>}\n ${cleanedContent}\n </svg>\n )\n);\n\n${icon.componentName}.displayName = '${icon.componentName}';\n\nexport default ${icon.componentName};\n`;\n};\n\n/**\n * Default React index template\n *\n * Exports all icon components from a single entry point.\n */\nexport const defaultReactIndexTemplate: IndexTemplate = (icons) => `/**\n * Icon exports\n *\n * @generated by @dsai-io/tools\n */\n\n${icons.map((icon) => `export { ${icon.componentName} } from './${icon.componentName}.js';`).join('\\n')}\n\n// Re-export types\nexport type { SVGProps } from 'react';\n`;\n\n/**\n * Default React types template\n *\n * Generates TypeScript types for all icons.\n */\nexport const defaultReactTypesTemplate: TypesTemplate = (icons) => `/**\n * Icon types\n *\n * @generated by @dsai-io/tools\n */\n\nimport type { ForwardRefExoticComponent, RefAttributes, SVGProps } from 'react';\n\nexport interface IconProps extends SVGProps<SVGSVGElement> {\n size?: number | string;\n title?: string;\n}\n\nexport type IconComponent = ForwardRefExoticComponent<\n IconProps & RefAttributes<SVGSVGElement>\n>;\n\n/**\n * Available icon names\n */\nexport type IconName =\n${icons.map((icon) => ` | '${icon.name}'`).join('\\n')};\n\n/**\n * Icon component map\n */\nexport interface IconMap {\n${icons.map((icon) => ` '${icon.name}': IconComponent;`).join('\\n')}\n}\n\n/**\n * Icon metadata\n */\nexport interface IconMeta {\n name: IconName;\n componentName: string;\n viewBox: string;\n}\n\nexport const iconMeta: IconMeta[] = [\n${icons.map((icon) => ` { name: '${icon.name}', componentName: '${icon.componentName}', viewBox: '${icon.viewBox}' },`).join('\\n')}\n];\n`;\n\n/**\n * Generate React icon components\n *\n * @param icons - Optimized SVG data\n * @param outputDir - Output directory\n * @param options - Generator options\n * @returns Generated icons\n *\n * @example\n * ```typescript\n * const generated = await generateReactIcons(optimizedIcons, './dist/icons/react', {\n * dryRun: false,\n * });\n * console.log(\\`Generated \\${generated.length} files\\`);\n * ```\n */\nexport async function generateReactIcons(\n icons: OptimizedSVG[],\n outputDir: string,\n options: GeneratorOptions = {}\n): Promise<GeneratedIcon[]> {\n const {\n template = defaultReactTemplate,\n indexTemplate = defaultReactIndexTemplate,\n typesTemplate = defaultReactTypesTemplate,\n dryRun = false,\n } = options;\n\n const generated: GeneratedIcon[] = [];\n\n // Ensure output directory exists\n if (!dryRun && !existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n // Generate individual icon components\n for (const icon of icons) {\n const code = template(icon);\n const outputPath = join(outputDir, `${icon.componentName}.tsx`);\n\n if (!dryRun) {\n writeFileSync(outputPath, code, 'utf-8');\n }\n\n generated.push({\n name: icon.name,\n componentName: icon.componentName,\n code,\n outputPath,\n format: 'react',\n });\n }\n\n // Generate index file\n const indexCode = indexTemplate(icons);\n const indexPath = join(outputDir, 'index.ts');\n\n if (!dryRun) {\n writeFileSync(indexPath, indexCode, 'utf-8');\n }\n\n generated.push({\n name: 'index',\n componentName: 'index',\n code: indexCode,\n outputPath: indexPath,\n format: 'react',\n });\n\n // Generate types file\n const typesCode = typesTemplate(icons);\n const typesPath = join(outputDir, 'types.ts');\n\n if (!dryRun) {\n writeFileSync(typesPath, typesCode, 'utf-8');\n }\n\n generated.push({\n name: 'types',\n componentName: 'types',\n code: typesCode,\n outputPath: typesPath,\n format: 'react',\n });\n\n return generated;\n}\n","/* eslint-disable security/detect-non-literal-fs-filename */\n/**\n * SVG sprite generator\n *\n * Generates SVG sprite files with symbol definitions.\n *\n * @packageDocumentation\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport type { GeneratedIcon, OptimizedSVG } from '../types.js';\n\n/**\n * SVG sprite generator options\n */\nexport interface SpriteOptions {\n /** Sprite file name */\n fileName?: string;\n\n /** Generate preview HTML file */\n generatePreview?: boolean;\n\n /** Dry run - don't write files */\n dryRun?: boolean;\n}\n\n/**\n * Generate SVG sprite\n *\n * Creates an SVG sprite with symbol definitions for all icons.\n *\n * @param icons - Optimized SVG data\n * @param outputDir - Output directory\n * @param options - Generator options\n * @returns Generated files\n *\n * @example\n * ```typescript\n * const generated = await generateSVGSprite(optimizedIcons, './dist/icons/sprite', {\n * fileName: 'icons.svg',\n * generatePreview: true,\n * });\n * ```\n */\nexport async function generateSVGSprite(\n icons: OptimizedSVG[],\n outputDir: string,\n options: SpriteOptions = {}\n): Promise<GeneratedIcon[]> {\n const { fileName = 'sprite.svg', generatePreview = true, dryRun = false } = options;\n\n const generated: GeneratedIcon[] = [];\n\n // Ensure output directory exists\n if (!dryRun && !existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n // Generate sprite symbols\n const symbols = icons\n .map(\n (icon) => ` <symbol id=\"${icon.name}\" viewBox=\"${icon.viewBox}\">\n ${icon.innerContent}\n </symbol>`\n )\n .join('\\n');\n\n // Create sprite SVG\n const spriteCode = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n SVG Sprite\n @generated by @dsai-io/tools\n Contains ${icons.length} icons\n-->\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n${symbols}\n </defs>\n</svg>\n`;\n\n const outputPath = join(outputDir, fileName);\n\n if (!dryRun) {\n writeFileSync(outputPath, spriteCode, 'utf-8');\n }\n\n generated.push({\n name: 'sprite',\n componentName: 'sprite',\n code: spriteCode,\n outputPath,\n format: 'svg-sprite',\n });\n\n // Generate usage helper HTML\n if (generatePreview) {\n const usageCode = generatePreviewHTML(icons, fileName);\n const usagePath = join(outputDir, 'sprite-preview.html');\n\n if (!dryRun) {\n writeFileSync(usagePath, usageCode, 'utf-8');\n }\n\n generated.push({\n name: 'preview',\n componentName: 'preview',\n code: usageCode,\n outputPath: usagePath,\n format: 'svg-sprite',\n });\n }\n\n return generated;\n}\n\n/**\n * Generate preview HTML for sprite\n */\nfunction generatePreviewHTML(icons: OptimizedSVG[], spriteFileName: string): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Icon Sprite Preview</title>\n <style>\n * { box-sizing: border-box; }\n body { font-family: system-ui, sans-serif; padding: 2rem; max-width: 1200px; margin: 0 auto; }\n h1 { margin-bottom: 0.5rem; }\n .meta { color: #666; margin-bottom: 2rem; }\n .icon { width: 24px; height: 24px; fill: currentColor; }\n .icon-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); gap: 1rem; }\n .icon-item { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; padding: 1rem; border: 1px solid #eee; border-radius: 8px; transition: background 0.2s; }\n .icon-item:hover { background: #f5f5f5; }\n .icon-name { font-size: 11px; color: #666; text-align: center; word-break: break-all; }\n pre { background: #f5f5f5; padding: 1rem; border-radius: 8px; overflow-x: auto; }\n code { font-family: ui-monospace, monospace; font-size: 13px; }\n </style>\n</head>\n<body>\n <h1>Icon Sprite Preview</h1>\n <p class=\"meta\">${icons.length} icons ⢠Generated by @dsai-io/tools</p>\n\n <h2>Usage</h2>\n <pre><code><svg class=\"icon\">\n <use href=\"${spriteFileName}#icon-name\"></use>\n</svg></code></pre>\n\n <h2>All Icons</h2>\n <div class=\"icon-grid\">\n${icons\n .map(\n (icon) => ` <div class=\"icon-item\">\n <svg class=\"icon\"><use href=\"${spriteFileName}#${icon.name}\"></use></svg>\n <span class=\"icon-name\">${icon.name}</span>\n </div>`\n )\n .join('\\n')}\n </div>\n</body>\n</html>\n`;\n}\n","/**\n * Icon tooling module for @dsai-io/tools\n *\n * Provides utilities for generating icon components from SVG source files.\n * Supports React components, SVG sprites, with SVGO optimization.\n *\n * @packageDocumentation\n */\n\nimport { join } from 'node:path';\n\nimport { optimizeSVGFiles, parseSVGFiles, scanSVGFiles } from './core/index.js';\nimport { generateReactIcons } from './generators/react.js';\nimport { generateSVGSprite } from './generators/svg-sprite.js';\n\nimport type {\n GeneratedIcon,\n IconBuildOptions,\n IconBuildResult,\n IconFormat,\n OptimizedSVG,\n SVGOConfig,\n} from './types.js';\nimport type { ResolvedConfig } from '../config/types.js';\n\n/**\n * Build icons from SVG source files\n *\n * Scans the source directory, parses and optimizes SVGs, then generates\n * output in the specified formats (React, SVG sprite).\n *\n * @param config - Resolved DSAi configuration\n * @param options - Build options\n * @returns Build result with generated files\n *\n * @example\n * ```typescript\n * import { loadConfig } from '@dsai-io/tools/config';\n * import { buildIcons } from '@dsai-io/tools/icons';\n *\n * const { config } = await loadConfig();\n * const result = await buildIcons(config, {\n * formats: ['react', 'svg-sprite'],\n * });\n *\n * console.log(\\`Generated \\${result.totalIcons} icons\\`);\n * ```\n */\nexport async function buildIcons(\n config: ResolvedConfig,\n options: IconBuildOptions = {}\n): Promise<IconBuildResult> {\n const startTime = Date.now();\n const defaultFormat = config.icons.framework === 'react' ? 'react' : 'svg-sprite';\n const { formats = [defaultFormat as IconFormat], icons: iconFilter, dryRun = false } = options;\n\n const result: IconBuildResult = {\n success: false,\n icons: [],\n totalIcons: 0,\n filesWritten: 0,\n totalSizeReduction: 0,\n errors: [],\n warnings: [],\n duration: 0,\n };\n\n try {\n // Step 1: Scan for SVG files\n const rawFiles = await scanSVGFiles({\n sourceDir: config.icons.sourceDir,\n });\n\n if (rawFiles.length === 0) {\n result.warnings.push({\n icon: '*',\n message: `No SVG files found in ${config.icons.sourceDir}`,\n });\n result.success = true;\n result.duration = Date.now() - startTime;\n return result;\n }\n\n // Filter by specific icons if provided\n const filteredFiles = iconFilter\n ? rawFiles.filter((f) => iconFilter.includes(f.fileName))\n : rawFiles;\n\n // Step 2: Parse SVG content\n const parsedFiles = parseSVGFiles(filteredFiles);\n\n // Step 3: Optimize SVGs (if enabled)\n let optimizedFiles: OptimizedSVG[];\n if (config.icons.optimize) {\n const svgoConfig: SVGOConfig = {\n multipass: true,\n };\n optimizedFiles = await optimizeSVGFiles(parsedFiles, filteredFiles, svgoConfig);\n\n // Calculate total size reduction\n const totalReduction = optimizedFiles.reduce((sum, f) => sum + f.sizeReduction, 0);\n result.totalSizeReduction =\n optimizedFiles.length > 0 ? totalReduction / optimizedFiles.length : 0;\n } else {\n // Skip optimization - just add size metadata\n const { skipOptimization } = await import('./core/optimizer.js');\n optimizedFiles = parsedFiles.map((parsed, index) => {\n const rawFile = filteredFiles[index];\n if (!rawFile) {\n throw new Error(`Missing raw file for ${parsed.fileName}`);\n }\n return skipOptimization(parsed, rawFile);\n });\n }\n\n result.totalIcons = optimizedFiles.length;\n\n // Step 4: Generate output for each format\n const generated: GeneratedIcon[] = [];\n\n for (const format of formats) {\n const outputDir = join(config.icons.outputDir, format);\n\n switch (format) {\n case 'react':\n generated.push(...(await generateReactIcons(optimizedFiles, outputDir, { dryRun })));\n break;\n\n case 'svg':\n case 'svg-sprite':\n generated.push(...(await generateSVGSprite(optimizedFiles, outputDir, { dryRun })));\n break;\n\n default:\n result.warnings.push({\n icon: '*',\n message: `Unknown format: ${format}`,\n });\n }\n }\n\n result.icons = generated;\n result.filesWritten = dryRun ? 0 : generated.length;\n result.success = true;\n } catch (error) {\n result.errors.push({\n icon: '*',\n message: error instanceof Error ? error.message : 'Unknown error',\n code: 'BUILD_ERROR',\n });\n }\n\n result.duration = Date.now() - startTime;\n return result;\n}\n\n// Re-export types\nexport type {\n GeneratedIcon,\n GeneratorOptions,\n IconBuildOptions,\n IconBuildResult,\n IconError,\n IconErrorCode,\n IconFormat,\n IconTemplate,\n IconWarning,\n IndexTemplate,\n OptimizedSVG,\n ParsedSVG,\n RawSVGData,\n ScannerOptions,\n SVGOConfig,\n SVGOPlugin,\n TypesTemplate,\n} from './types.js';\n\n// Re-export core utilities\nexport {\n cleanSVGForReact,\n defaultSVGOConfig,\n extractViewBox,\n optimizeSVG,\n optimizeSVGFiles,\n parseSVG,\n parseSVGFiles,\n readSVGFile,\n scanSVGFiles,\n skipOptimization,\n} from './core/index.js';\n\n// Re-export generators\nexport {\n defaultReactIndexTemplate,\n defaultReactTemplate,\n defaultReactTypesTemplate,\n generateReactIcons,\n generateSVGSprite,\n} from './generators/index.js';\n\n// Re-export naming utilities\nexport {\n isValidIconName,\n normalizeIconName,\n toComponentName,\n toIconName,\n} from './utils/index.js';\n","/**\n * Icon commands\n *\n * Build and manage icon components.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/commands/icons\n */\n\nimport { Command } from 'commander';\n\nimport { loadConfig } from '../../config/index.js';\nimport { buildIcons } from '../../icons/index.js';\nimport { ExitCode } from '../types.js';\nimport { colors, createLogger, createSpinner, formatDuration } from '../ui/index.js';\n\nimport type { IconFormat } from '../../icons/types.js';\nimport type { IconsBuildOptions } from '../types.js';\n\n/**\n * Create icons command group\n *\n * @returns Commander command for icon operations\n */\nexport function createIconsCommand(): Command {\n const icons = new Command('icons')\n .description('Icon generation operations')\n .addHelpCommand('help [command]', 'Show help for a command');\n\n // Build command\n icons\n .command('build')\n .description('Generate icon components')\n .option('-f, --format <format>', 'Output format (react|svg|svg-sprite)', 'react')\n .option('--no-optimize', 'Skip SVG optimization')\n .option('-n, --dry-run', 'Preview changes without writing files')\n .action(async (options: IconsBuildOptions & { optimize?: boolean }, command: Command) => {\n const globalOpts = command.parent?.parent?.opts() ?? {};\n const mergedOpts = { ...globalOpts, ...options } as IconsBuildOptions & {\n optimize?: boolean;\n };\n\n await runIconsBuild(mergedOpts);\n });\n\n return icons;\n}\n\n/**\n * Run icons build\n */\nasync function runIconsBuild(options: IconsBuildOptions & { optimize?: boolean }): Promise<void> {\n const logger = createLogger({\n quiet: options.quiet,\n debug: options.debug,\n });\n const spinner = createSpinner(options.quiet);\n\n try {\n // Load configuration\n spinner.start('Loading configuration...');\n const { config, configPath } = await loadConfig({\n cwd: options.cwd,\n configPath: options.config,\n });\n spinner.succeed(`Loaded config from ${colors.path(configPath ?? 'defaults')}`);\n\n logger.debug(`Icons config: ${JSON.stringify(config.icons, null, 2)}`);\n\n // Build icons\n const format = (options.format ?? 'react') as IconFormat;\n spinner.start(`Generating ${format} icons...`);\n\n const result = await buildIcons(config, {\n formats: [format],\n dryRun: options.dryRun,\n });\n\n if (!result.success) {\n spinner.fail('Icon generation failed');\n for (const error of result.errors) {\n logger.error(`${error.icon}: ${error.message}`);\n }\n process.exit(ExitCode.BuildError);\n }\n\n // Report warnings\n for (const warning of result.warnings) {\n logger.warn(`${warning.icon}: ${warning.message}`);\n }\n\n if (result.totalIcons === 0) {\n spinner.warn('No icons found to generate');\n logger.info(`Source: ${colors.path(config.icons.sourceDir)}`);\n process.exit(ExitCode.Success);\n }\n\n const prefix = options.dryRun ? '[DRY RUN] ' : '';\n spinner.succeed(\n `${prefix}Generated ${colors.value(String(result.totalIcons))} icons in ${colors.value(formatDuration(result.duration))}`\n );\n\n logger.info(` Source: ${colors.path(config.icons.sourceDir)}`);\n logger.info(` Output: ${colors.path(config.icons.outputDir)}`);\n logger.info(` Format: ${colors.value(format)}`);\n logger.info(` Files: ${colors.value(String(result.filesWritten))}`);\n\n if (result.totalSizeReduction > 0) {\n logger.info(` Size reduction: ${colors.value(`${result.totalSizeReduction.toFixed(1)}%`)}`);\n }\n\n process.exit(ExitCode.Success);\n } catch (error) {\n spinner.fail('Icon generation failed');\n\n if (error instanceof Error) {\n logger.error(error.message);\n if (options.debug) {\n \n console.error(error.stack);\n }\n }\n\n process.exit(ExitCode.GeneralError);\n }\n}\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record<string, Action>;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions<Prompt>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents>(event: T, ...data: Parameters<ClackEvents[T]>) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = 'ā¢';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? 'ā¢';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}ā`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('ā', '*');\nconst S_STEP_CANCEL = s('ā ', 'x');\nconst S_STEP_ERROR = s('ā²', 'x');\nconst S_STEP_SUBMIT = s('ā', 'o');\n\nconst S_BAR_START = s('ā', 'T');\nconst S_BAR = s('ā', '|');\nconst S_BAR_END = s('ā', 'ā');\n\nconst S_RADIO_ACTIVE = s('ā', '>');\nconst S_RADIO_INACTIVE = s('ā', ' ');\nconst S_CHECKBOX_ACTIVE = s('ā»', '[ā¢]');\nconst S_CHECKBOX_SELECTED = s('ā¼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('ā»', '[ ]');\nconst S_PASSWORD_MASK = s('āŖ', 'ā¢');\n\nconst S_BAR_H = s('ā', '-');\nconst S_CORNER_TOP_RIGHT = s('ā®', '+');\nconst S_CONNECT_LEFT = s('ā', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('āÆ', '+');\n\nconst S_INFO = s('ā', 'ā¢');\nconst S_SUCCESS = s('ā', '*');\nconst S_WARN = s('ā²', '!');\nconst S_ERROR = s('ā ', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable<string> | AsyncIterable<string>,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['ā', 'ā', 'ā', 'ā'] : ['ā¢', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n","/**\n * Project Detector Module\n *\n * Detects the project type, framework, package manager, and configuration\n * from the filesystem to provide intelligent setup recommendations.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/init/detector\n *\n * @remarks\n * Currently supports React framework integration.\n * TODO: Add support for Vue, Angular, Svelte, Solid, and other frameworks (coming soon)\n */\n\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Supported frontend frameworks\n *\n * @remarks\n * Currently React is fully supported.\n * TODO: Vue, Angular, Svelte, Solid, Preact, Lit support coming soon\n */\nexport type Framework =\n | 'react'\n | 'vue'\n | 'angular'\n | 'svelte'\n | 'solid'\n | 'preact'\n | 'lit'\n | 'vanilla'\n | 'unknown';\n\n/**\n * Frameworks with full integration support\n */\nexport const SUPPORTED_FRAMEWORKS: Framework[] = ['react', 'vanilla'];\n\n/**\n * Frameworks coming soon\n * TODO: Implement full support for these frameworks\n */\nexport const COMING_SOON_FRAMEWORKS: Framework[] = [\n 'vue',\n 'angular',\n 'svelte',\n 'solid',\n 'preact',\n 'lit',\n];\n\n/**\n * Supported meta-frameworks and build tools\n */\nexport type MetaFramework =\n | 'next'\n | 'nuxt'\n | 'remix'\n | 'astro'\n | 'gatsby'\n | 'vite'\n | 'webpack'\n | 'parcel'\n | 'rollup'\n | 'esbuild'\n | 'turbopack'\n | 'none';\n\n/**\n * Supported package managers\n */\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';\n\n/**\n * Supported styling solutions\n */\nexport type StylingApproach =\n | 'css'\n | 'scss'\n | 'less'\n | 'styled-components'\n | 'emotion'\n | 'tailwind'\n | 'css-modules'\n | 'vanilla-extract'\n | 'multiple'\n | 'unknown';\n\n/**\n * Project detection result\n */\nexport interface ProjectInfo {\n /** Whether a valid project was detected */\n isProject: boolean;\n\n /** Whether this is a monorepo */\n isMonorepo: boolean;\n\n /** Monorepo tool if detected */\n monorepoTool?: 'nx' | 'turborepo' | 'lerna' | 'pnpm-workspaces' | 'yarn-workspaces';\n\n /** Main framework used */\n framework: Framework;\n\n /** Meta-framework or build tool */\n metaFramework: MetaFramework;\n\n /** Detected package manager */\n packageManager: PackageManager;\n\n /** Whether TypeScript is used */\n typescript: boolean;\n\n /** Whether ESM modules are used */\n esm: boolean;\n\n /** Styling approach detected */\n styling: StylingApproach;\n\n /** Whether design tokens already exist */\n hasExistingTokens: boolean;\n\n /** Existing DSAI configuration file if present */\n existingConfigFile?: string;\n\n /** Project name from package.json */\n projectName?: string;\n\n /** Source directory */\n sourceDir?: string;\n\n /** Detected style directories */\n styleDirectories: string[];\n\n /** Package.json path */\n packageJsonPath?: string;\n\n /** Raw package.json data */\n packageJson?: PackageJsonData;\n}\n\n/**\n * Minimal package.json structure for detection\n */\nexport interface PackageJsonData {\n name?: string;\n type?: 'module' | 'commonjs';\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n workspaces?: string[] | { packages: string[] };\n packageManager?: string;\n}\n\n// ============================================================================\n// Safe File System Helpers\n// ============================================================================\n\n/**\n * Safely check if a path exists\n * @param basePath - Base directory path (must be validated)\n * @param relativePath - Relative path within the base directory\n */\nfunction safeExists(basePath: string, ...relativePath: string[]): boolean {\n const fullPath = resolve(basePath, ...relativePath);\n\n // Ensure the resolved path is within the base path (prevent path traversal)\n if (!fullPath.startsWith(resolve(basePath))) {\n return false;\n }\n\n return existsSync(fullPath);\n}\n\n/**\n * Safely read a file\n * @param basePath - Base directory path (must be validated)\n * @param relativePath - Relative path within the base directory\n */\nfunction safeReadFile(basePath: string, ...relativePath: string[]): string | undefined {\n const fullPath = resolve(basePath, ...relativePath);\n\n // Ensure the resolved path is within the base path (prevent path traversal)\n if (!fullPath.startsWith(resolve(basePath))) {\n return undefined;\n }\n\n if (!existsSync(fullPath)) {\n return undefined;\n }\n\n try {\n return readFileSync(fullPath, 'utf-8');\n } catch {\n return undefined;\n }\n}\n\n// ============================================================================\n// Detection Functions\n// ============================================================================\n\n/**\n * Detect package manager from lock files\n */\nexport function detectPackageManager(cwd: string): PackageManager {\n const basePath = resolve(cwd);\n\n if (safeExists(basePath, 'bun.lockb') || safeExists(basePath, 'bun.lock')) {\n return 'bun';\n }\n if (safeExists(basePath, 'pnpm-lock.yaml')) {\n return 'pnpm';\n }\n if (safeExists(basePath, 'yarn.lock')) {\n return 'yarn';\n }\n if (safeExists(basePath, 'package-lock.json')) {\n return 'npm';\n }\n\n // Check for specific package manager fields in package.json\n const content = safeReadFile(basePath, 'package.json');\n if (content) {\n try {\n const pkg = JSON.parse(content) as PackageJsonData;\n\n // Check packageManager field (corepack)\n if (typeof pkg.packageManager === 'string') {\n const pm = pkg.packageManager;\n if (pm.startsWith('pnpm')) {\n return 'pnpm';\n }\n if (pm.startsWith('yarn')) {\n return 'yarn';\n }\n if (pm.startsWith('bun')) {\n return 'bun';\n }\n if (pm.startsWith('npm')) {\n return 'npm';\n }\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n return 'npm'; // Default fallback\n}\n\n/**\n * Detect framework from dependencies\n */\nexport function detectFramework(pkg: PackageJsonData): Framework {\n const allDeps: Record<string, string> = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n ...pkg.peerDependencies,\n };\n\n // Check for frameworks in order of specificity\n if (allDeps['react'] || allDeps['react-dom']) {\n return 'react';\n }\n if (allDeps['vue']) {\n return 'vue';\n }\n if (allDeps['@angular/core']) {\n return 'angular';\n }\n if (allDeps['svelte']) {\n return 'svelte';\n }\n if (allDeps['solid-js']) {\n return 'solid';\n }\n if (allDeps['preact']) {\n return 'preact';\n }\n if (allDeps['lit'] || allDeps['lit-element']) {\n return 'lit';\n }\n\n return 'vanilla';\n}\n\n/**\n * Detect meta-framework or build tool\n */\nexport function detectMetaFramework(pkg: PackageJsonData, cwd: string): MetaFramework {\n const basePath = resolve(cwd);\n const allDeps: Record<string, string> = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n // Check for meta-frameworks first (more specific)\n if (allDeps['next']) {\n return 'next';\n }\n if (allDeps['nuxt']) {\n return 'nuxt';\n }\n if (allDeps['@remix-run/react'] || allDeps['remix']) {\n return 'remix';\n }\n if (allDeps['astro']) {\n return 'astro';\n }\n if (allDeps['gatsby']) {\n return 'gatsby';\n }\n\n // Check for build tools\n if (allDeps['vite']) {\n return 'vite';\n }\n if (allDeps['turbo']) {\n return 'turbopack';\n }\n if (allDeps['webpack'] || allDeps['webpack-cli']) {\n return 'webpack';\n }\n if (allDeps['parcel']) {\n return 'parcel';\n }\n if (allDeps['rollup']) {\n return 'rollup';\n }\n if (allDeps['esbuild']) {\n return 'esbuild';\n }\n\n // Check for config files\n if (safeExists(basePath, 'vite.config.ts') || safeExists(basePath, 'vite.config.js')) {\n return 'vite';\n }\n if (safeExists(basePath, 'next.config.js') || safeExists(basePath, 'next.config.mjs')) {\n return 'next';\n }\n if (safeExists(basePath, 'webpack.config.js')) {\n return 'webpack';\n }\n if (safeExists(basePath, 'rollup.config.js') || safeExists(basePath, 'rollup.config.mjs')) {\n return 'rollup';\n }\n\n return 'none';\n}\n\n/**\n * Detect styling approach\n */\nexport function detectStyling(pkg: PackageJsonData, cwd: string): StylingApproach {\n const basePath = resolve(cwd);\n const allDeps: Record<string, string> = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n const approaches: StylingApproach[] = [];\n\n // Check dependencies\n if (allDeps['tailwindcss']) {\n approaches.push('tailwind');\n }\n if (allDeps['styled-components']) {\n approaches.push('styled-components');\n }\n if (allDeps['@emotion/react'] || allDeps['@emotion/styled']) {\n approaches.push('emotion');\n }\n if (allDeps['@vanilla-extract/css']) {\n approaches.push('vanilla-extract');\n }\n if (allDeps['sass'] || allDeps['node-sass']) {\n approaches.push('scss');\n }\n if (allDeps['less']) {\n approaches.push('less');\n }\n\n // Check for config files\n if (safeExists(basePath, 'tailwind.config.js') || safeExists(basePath, 'tailwind.config.ts')) {\n if (!approaches.includes('tailwind')) {\n approaches.push('tailwind');\n }\n }\n\n if (approaches.length > 1) {\n return 'multiple';\n }\n\n if (approaches.length === 1) {\n const first = approaches[0];\n if (first !== undefined) {\n return first;\n }\n }\n\n // Check for CSS/SCSS files in common locations\n const styleLocations = [\n 'src/styles',\n 'src/css',\n 'styles',\n 'css',\n 'src/assets/styles',\n 'assets/styles',\n ];\n\n for (const loc of styleLocations) {\n if (safeExists(basePath, loc)) {\n // Check if scss files exist\n if (\n safeExists(basePath, loc, 'main.scss') ||\n safeExists(basePath, loc, 'index.scss') ||\n safeExists(basePath, loc, 'global.scss')\n ) {\n return 'scss';\n }\n return 'css';\n }\n }\n\n return 'unknown';\n}\n\n/**\n * Detect monorepo configuration\n */\nexport function detectMonorepo(\n pkg: PackageJsonData,\n cwd: string\n): { isMonorepo: boolean; tool?: ProjectInfo['monorepoTool'] } {\n const basePath = resolve(cwd);\n\n // Check for monorepo tools\n if (safeExists(basePath, 'nx.json')) {\n return { isMonorepo: true, tool: 'nx' };\n }\n if (safeExists(basePath, 'turbo.json')) {\n return { isMonorepo: true, tool: 'turborepo' };\n }\n if (safeExists(basePath, 'lerna.json')) {\n return { isMonorepo: true, tool: 'lerna' };\n }\n\n // Check for workspace configuration\n if (pkg.workspaces) {\n if (safeExists(basePath, 'pnpm-workspace.yaml')) {\n return { isMonorepo: true, tool: 'pnpm-workspaces' };\n }\n return { isMonorepo: true, tool: 'yarn-workspaces' };\n }\n\n if (safeExists(basePath, 'pnpm-workspace.yaml')) {\n return { isMonorepo: true, tool: 'pnpm-workspaces' };\n }\n\n return { isMonorepo: false };\n}\n\n/**\n * Detect TypeScript usage\n */\nexport function detectTypeScript(pkg: PackageJsonData, cwd: string): boolean {\n const basePath = resolve(cwd);\n const allDeps: Record<string, string> = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n if (allDeps['typescript']) {\n return true;\n }\n\n // Check for tsconfig\n if (\n safeExists(basePath, 'tsconfig.json') ||\n safeExists(basePath, 'tsconfig.base.json') ||\n safeExists(basePath, 'tsconfig.build.json')\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Detect ESM module usage\n */\nexport function detectESM(pkg: PackageJsonData, cwd: string): boolean {\n const basePath = resolve(cwd);\n\n if (pkg.type === 'module') {\n return true;\n }\n\n // Check for .mjs config files\n const mjsConfigs = [\n 'vite.config.mjs',\n 'next.config.mjs',\n 'rollup.config.mjs',\n 'eslint.config.mjs',\n ];\n\n for (const config of mjsConfigs) {\n if (safeExists(basePath, config)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Detect existing design token files\n */\nexport function detectExistingTokens(cwd: string): boolean {\n const basePath = resolve(cwd);\n const tokenLocations = [\n 'tokens',\n 'design-tokens',\n 'src/tokens',\n 'src/design-tokens',\n 'figma-exports',\n 'collections',\n 'theme.json',\n 'tokens.json',\n ];\n\n for (const loc of tokenLocations) {\n if (safeExists(basePath, loc)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Detect existing DSAI configuration\n */\nexport function detectExistingConfig(cwd: string): string | undefined {\n const basePath = resolve(cwd);\n const configFiles = [\n 'dsai.config.mjs',\n 'dsai.config.js',\n 'dsai.config.ts',\n 'dsai.config.json',\n '.dsairc',\n '.dsairc.json',\n '.dsairc.yaml',\n ];\n\n for (const config of configFiles) {\n if (safeExists(basePath, config)) {\n return config;\n }\n }\n\n return undefined;\n}\n\n/**\n * Detect source directory\n */\nexport function detectSourceDir(cwd: string): string | undefined {\n const basePath = resolve(cwd);\n const sourceDirs = ['src', 'app', 'lib', 'source', 'client'];\n\n for (const dir of sourceDirs) {\n if (safeExists(basePath, dir)) {\n return dir;\n }\n }\n\n return undefined;\n}\n\n/**\n * Detect style directories\n */\nexport function detectStyleDirectories(cwd: string): string[] {\n const basePath = resolve(cwd);\n const styleLocations = [\n 'src/styles',\n 'src/css',\n 'src/scss',\n 'styles',\n 'css',\n 'scss',\n 'src/assets/styles',\n 'src/assets/css',\n 'assets/styles',\n 'public/styles',\n ];\n\n return styleLocations.filter((loc) => safeExists(basePath, loc));\n}\n\n/**\n * Load and parse package.json\n */\nexport function loadPackageJson(cwd: string): PackageJsonData | undefined {\n const basePath = resolve(cwd);\n const content = safeReadFile(basePath, 'package.json');\n\n if (!content) {\n return undefined;\n }\n\n try {\n return JSON.parse(content) as PackageJsonData;\n } catch {\n return undefined;\n }\n}\n\n// ============================================================================\n// Main Detection Function\n// ============================================================================\n\n/**\n * Detect all project information\n *\n * Performs comprehensive project detection including framework, build tool,\n * package manager, TypeScript usage, styling approach, and more.\n *\n * @param cwd - The directory to analyze (defaults to process.cwd())\n * @returns Complete project information\n *\n * @example\n * ```typescript\n * const info = detectProject('/path/to/my-app');\n * console.log(info.framework); // 'react'\n * console.log(info.metaFramework); // 'next'\n * console.log(info.packageManager); // 'pnpm'\n * ```\n */\nexport function detectProject(cwd: string = process.cwd()): ProjectInfo {\n const basePath = resolve(cwd);\n const packageJson = loadPackageJson(basePath);\n\n // No package.json - not a valid project\n if (!packageJson) {\n return {\n isProject: false,\n isMonorepo: false,\n framework: 'unknown',\n metaFramework: 'none',\n packageManager: detectPackageManager(basePath),\n typescript: false,\n esm: false,\n styling: 'unknown',\n hasExistingTokens: detectExistingTokens(basePath),\n styleDirectories: [],\n };\n }\n\n const monorepoInfo = detectMonorepo(packageJson, basePath);\n\n return {\n isProject: true,\n isMonorepo: monorepoInfo.isMonorepo,\n monorepoTool: monorepoInfo.tool,\n framework: detectFramework(packageJson),\n metaFramework: detectMetaFramework(packageJson, basePath),\n packageManager: detectPackageManager(basePath),\n typescript: detectTypeScript(packageJson, basePath),\n esm: detectESM(packageJson, basePath),\n styling: detectStyling(packageJson, basePath),\n hasExistingTokens: detectExistingTokens(basePath),\n existingConfigFile: detectExistingConfig(basePath),\n projectName: packageJson.name,\n sourceDir: detectSourceDir(basePath),\n styleDirectories: detectStyleDirectories(basePath),\n packageJsonPath: join(basePath, 'package.json'),\n packageJson,\n };\n}\n\n/**\n * Get a human-readable summary of the project\n */\nexport function getProjectSummary(info: ProjectInfo): string[] {\n const summary: string[] = [];\n\n if (!info.isProject) {\n summary.push('No package.json found - this may not be a Node.js project');\n return summary;\n }\n\n if (info.projectName) {\n summary.push(`Project: ${info.projectName}`);\n }\n\n if (info.isMonorepo && info.monorepoTool) {\n summary.push(`Monorepo: ${info.monorepoTool}`);\n }\n\n summary.push(`Framework: ${info.framework}`);\n\n if (info.metaFramework !== 'none') {\n summary.push(`Build Tool: ${info.metaFramework}`);\n }\n\n summary.push(`Package Manager: ${info.packageManager}`);\n summary.push(`TypeScript: ${info.typescript ? 'Yes' : 'No'}`);\n summary.push(`Module System: ${info.esm ? 'ESM' : 'CommonJS'}`);\n\n if (info.styling !== 'unknown') {\n summary.push(`Styling: ${info.styling}`);\n }\n\n if (info.existingConfigFile) {\n summary.push(`Existing Config: ${info.existingConfigFile}`);\n }\n\n if (info.hasExistingTokens) {\n summary.push('Existing Tokens: Detected');\n }\n\n return summary;\n}\n\n/**\n * Get recommended configuration based on project info\n */\nexport function getRecommendedConfig(info: ProjectInfo): {\n configFormat: 'mjs' | 'js' | 'ts';\n outputFormats: string[];\n prefix: string;\n outputDir: string;\n sourceDir: string;\n} {\n // Determine config format\n let configFormat: 'mjs' | 'js' | 'ts' = 'mjs';\n if (info.typescript) {\n configFormat = 'ts';\n } else if (!info.esm) {\n configFormat = 'js';\n }\n\n // Determine output formats based on project\n const outputFormats = ['css'];\n\n if (info.styling === 'scss' || info.styling === 'multiple') {\n outputFormats.push('scss');\n }\n\n if (info.typescript) {\n outputFormats.push('ts');\n } else {\n outputFormats.push('js');\n }\n\n outputFormats.push('json');\n\n // Determine prefix based on project name\n const prefix = info.projectName\n ? `--${info.projectName.replace(/[@/]/g, '').replace(/[^a-z0-9-]/gi, '-')}-`\n : '--dsai-';\n\n // Determine output directory\n let outputDir = 'dist/tokens';\n if (info.metaFramework === 'next') {\n outputDir = 'src/styles/tokens';\n } else if (info.metaFramework === 'vite') {\n outputDir = 'src/tokens';\n } else if (info.sourceDir) {\n outputDir = `${info.sourceDir}/tokens`;\n }\n\n // Determine source directory for Figma exports\n const sourceDir = 'figma-exports';\n\n return {\n configFormat,\n outputFormats,\n prefix,\n outputDir,\n sourceDir,\n };\n}\n","/**\n * Package.json Modifier Utilities\n *\n * Safe utilities for reading and modifying package.json files\n * with proper backup and validation.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/init/package-modifier\n */\n\n/* eslint-disable security/detect-non-literal-fs-filename */\n/* eslint-disable security/detect-object-injection */\n\nimport { existsSync, readFileSync, writeFileSync, copyFileSync, mkdirSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nimport type { PackageManager } from './detector.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Script entry to add to package.json\n */\nexport interface ScriptEntry {\n /** Script name */\n name: string;\n /** Script command */\n command: string;\n /** Whether to overwrite existing script */\n overwrite?: boolean;\n}\n\n/**\n * Dependency to add to package.json\n */\nexport interface DependencyEntry {\n /** Package name */\n name: string;\n /** Package version (with semver prefix) */\n version: string;\n /** Dependency type */\n type: 'dependencies' | 'devDependencies' | 'peerDependencies';\n}\n\n/**\n * Result of a package.json modification\n */\nexport interface ModificationResult {\n /** Whether the modification was successful */\n success: boolean;\n /** Path to the backup file if created */\n backupPath?: string;\n /** Error message if failed */\n error?: string;\n /** Changes made */\n changes: {\n scriptsAdded: string[];\n scriptsUpdated: string[];\n dependenciesAdded: string[];\n dependenciesUpdated: string[];\n };\n}\n\n/**\n * Options for modifying package.json\n */\nexport interface ModifyOptions {\n /** Create a backup before modifying */\n createBackup?: boolean;\n /** Dry run - don't actually modify */\n dryRun?: boolean;\n /** Scripts to add/modify */\n scripts?: ScriptEntry[];\n /** Dependencies to add/modify */\n dependencies?: DependencyEntry[];\n /** Custom fields to add/modify */\n customFields?: Record<string, unknown>;\n /** Upgrade existing dependencies to new versions */\n upgradeDependencies?: boolean;\n}\n\n// ============================================================================\n// Package.json Structure\n// ============================================================================\n\n/**\n * Minimal package.json structure for modification\n */\ninterface PackageJson {\n name?: string;\n version?: string;\n type?: 'module' | 'commonjs';\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n [key: string]: unknown;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Read and parse package.json from a directory\n */\nexport function readPackageJson(cwd: string): PackageJson | undefined {\n const packageJsonPath = resolve(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return undefined;\n }\n\n try {\n const content = readFileSync(packageJsonPath, 'utf-8');\n return JSON.parse(content) as PackageJson;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Write package.json to a directory\n */\nexport function writePackageJson(cwd: string, pkg: PackageJson): void {\n const packageJsonPath = resolve(cwd, 'package.json');\n const content = JSON.stringify(pkg, null, 2) + '\\n';\n writeFileSync(packageJsonPath, content, 'utf-8');\n}\n\n/**\n * Create a backup of package.json\n */\nexport function backupPackageJson(cwd: string): string | undefined {\n const packageJsonPath = resolve(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return undefined;\n }\n\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const backupDir = resolve(cwd, '.dsai-backups');\n const backupPath = resolve(backupDir, `package.json.${timestamp}.backup`);\n\n // Ensure backup directory exists\n if (!existsSync(backupDir)) {\n mkdirSync(backupDir, { recursive: true });\n }\n\n copyFileSync(packageJsonPath, backupPath);\n return backupPath;\n}\n\n/**\n * Get the install command for a package manager\n */\nexport function getInstallCommand(packageManager: PackageManager, deps: DependencyEntry[]): string {\n const devDeps = deps.filter((d) => d.type === 'devDependencies');\n const regularDeps = deps.filter((d) => d.type === 'dependencies');\n\n const commands: string[] = [];\n\n if (regularDeps.length > 0) {\n const pkgs = regularDeps.map((d) => `${d.name}@${d.version}`).join(' ');\n switch (packageManager) {\n case 'pnpm':\n commands.push(`pnpm add ${pkgs}`);\n break;\n case 'yarn':\n commands.push(`yarn add ${pkgs}`);\n break;\n case 'bun':\n commands.push(`bun add ${pkgs}`);\n break;\n default:\n commands.push(`npm install ${pkgs}`);\n }\n }\n\n if (devDeps.length > 0) {\n const pkgs = devDeps.map((d) => `${d.name}@${d.version}`).join(' ');\n switch (packageManager) {\n case 'pnpm':\n commands.push(`pnpm add -D ${pkgs}`);\n break;\n case 'yarn':\n commands.push(`yarn add -D ${pkgs}`);\n break;\n case 'bun':\n commands.push(`bun add -d ${pkgs}`);\n break;\n default:\n commands.push(`npm install -D ${pkgs}`);\n }\n }\n\n return commands.join(' && ');\n}\n\n/**\n * Get the run command for a package manager\n */\nexport function getRunCommand(packageManager: PackageManager, script: string): string {\n switch (packageManager) {\n case 'pnpm':\n return `pnpm ${script}`;\n case 'yarn':\n return `yarn ${script}`;\n case 'bun':\n return `bun run ${script}`;\n default:\n return `npm run ${script}`;\n }\n}\n\n// ============================================================================\n// Main Modification Function\n// ============================================================================\n\n/**\n * Modify package.json with the given options\n *\n * @param cwd - Working directory containing package.json\n * @param options - Modification options\n * @returns Result of the modification\n */\nexport function modifyPackageJson(cwd: string, options: ModifyOptions): ModificationResult {\n const result: ModificationResult = {\n success: false,\n changes: {\n scriptsAdded: [],\n scriptsUpdated: [],\n dependenciesAdded: [],\n dependenciesUpdated: [],\n },\n };\n\n // Read current package.json\n const pkg = readPackageJson(cwd);\n if (!pkg) {\n result.error = 'package.json not found';\n return result;\n }\n\n // Create backup if requested\n if (options.createBackup && !options.dryRun) {\n const backupPath = backupPackageJson(cwd);\n if (backupPath) {\n result.backupPath = backupPath;\n }\n }\n\n // Process scripts\n if (options.scripts && options.scripts.length > 0) {\n if (!pkg.scripts) {\n pkg.scripts = {};\n }\n\n for (const script of options.scripts) {\n const exists = pkg.scripts[script.name] !== undefined;\n\n if (!exists) {\n pkg.scripts[script.name] = script.command;\n result.changes.scriptsAdded.push(script.name);\n } else if (script.overwrite) {\n pkg.scripts[script.name] = script.command;\n result.changes.scriptsUpdated.push(script.name);\n }\n }\n }\n\n // Process dependencies\n if (options.dependencies && options.dependencies.length > 0) {\n for (const dep of options.dependencies) {\n // Guard against prototype pollution\n if (dep.name === '__proto__' || dep.name === 'constructor' || dep.name === 'prototype') {\n continue;\n }\n\n const section = dep.type;\n\n if (!pkg[section]) {\n (pkg as Record<string, Record<string, string>>)[section] = {};\n }\n\n const depsSection = pkg[section] as Record<string, string>;\n const exists = dep.name in depsSection;\n\n if (!exists) {\n Object.defineProperty(depsSection, dep.name, {\n value: dep.version,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n result.changes.dependenciesAdded.push(dep.name);\n } else if (options.upgradeDependencies) {\n // Only update if upgradeDependencies is true and version is different\n if (depsSection[dep.name] !== dep.version) {\n Object.defineProperty(depsSection, dep.name, {\n value: dep.version,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n result.changes.dependenciesUpdated.push(dep.name);\n }\n }\n // If exists and upgradeDependencies is false, skip (preserve existing version)\n }\n }\n\n // Process custom fields\n if (options.customFields) {\n for (const [key, value] of Object.entries(options.customFields)) {\n pkg[key] = value;\n }\n }\n\n // Write changes\n if (!options.dryRun) {\n try {\n writePackageJson(cwd, pkg);\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : 'Failed to write package.json';\n return result;\n }\n } else {\n result.success = true;\n }\n\n return result;\n}\n\n// ============================================================================\n// DSAI-Specific Functions\n// ============================================================================\n\n/**\n * Default DSAI dependencies to add\n */\nexport const DSAI_DEPENDENCIES: DependencyEntry[] = [\n {\n name: '@dsai-io/tools',\n version: '^0.0.1',\n type: 'devDependencies',\n },\n];\n\n/**\n * Optional DSAI dependencies\n */\nexport const DSAI_OPTIONAL_DEPENDENCIES: Record<string, DependencyEntry> = {\n 'figma-tokens': {\n name: '@dsai-io/figma-tokens',\n version: '^1.0.0',\n type: 'devDependencies',\n },\n 'style-dictionary': {\n name: 'style-dictionary',\n version: '^5.1.1',\n type: 'devDependencies',\n },\n bootstrap: {\n name: 'bootstrap',\n version: '^5.3.8',\n type: 'devDependencies',\n },\n sass: {\n name: 'sass',\n version: '^1.97.2',\n type: 'devDependencies',\n },\n};\n\n/**\n * Default DSAI scripts to add\n */\nexport const DSAI_SCRIPTS: ScriptEntry[] = [\n {\n name: 'tokens:build',\n command: 'dsai tokens build',\n },\n {\n name: 'tokens:validate',\n command: 'dsai tokens validate',\n },\n {\n name: 'tokens:watch',\n command: 'dsai tokens build --watch',\n },\n];\n\n/**\n * Optional DSAI scripts\n */\nexport const DSAI_OPTIONAL_SCRIPTS: Record<string, ScriptEntry> = {\n // Figma integration scripts\n 'figma-fetch': {\n name: 'figma:fetch',\n command: 'node --env-file=.env figma.config.mjs export',\n },\n 'figma-sync': {\n name: 'figma:sync',\n command: 'node --env-file=.env figma.config.mjs sync',\n },\n 'figma-info': {\n name: 'figma:info',\n command: 'node --env-file=.env figma.config.mjs info',\n },\n // Token processing scripts\n 'tokens-transform': {\n name: 'tokens:transform',\n command: 'dsai tokens transform',\n },\n 'tokens-full': {\n name: 'tokens:full',\n command: 'npm run figma:fetch && npm run tokens:transform && npm run tokens:build',\n },\n // Icon scripts\n 'icons-build': {\n name: 'icons:build',\n command: 'dsai icons build',\n },\n // SCSS/Bootstrap integration scripts\n 'scss-build': {\n name: 'scss:build',\n command: 'sass src/scss/theme.scss:dist/theme.css --style=compressed --load-path=node_modules',\n },\n 'scss-watch': {\n name: 'scss:watch',\n command:\n 'sass src/scss/theme.scss:dist/theme.css --watch --style=compressed --load-path=node_modules',\n },\n 'styles-all': {\n name: 'styles:all',\n command: 'npm run tokens:build && npm run scss:build',\n },\n};\n\n/**\n * Add DSAI configuration to package.json\n *\n * @param cwd - Working directory\n * @param options - Configuration options\n */\nexport function addDsaiToPackageJson(\n cwd: string,\n options: {\n includeFigmaTokens?: boolean;\n includeStyleDictionary?: boolean;\n includeIconsBuild?: boolean;\n includeScssIntegration?: boolean;\n includeBootstrap?: boolean;\n upgradeDependencies?: boolean;\n dryRun?: boolean;\n createBackup?: boolean;\n } = {}\n): ModificationResult {\n const dependencies = [...DSAI_DEPENDENCIES];\n const scripts = [...DSAI_SCRIPTS];\n\n // Add optional dependencies\n if (options.includeFigmaTokens) {\n const figmaTokensDep = DSAI_OPTIONAL_DEPENDENCIES['figma-tokens'];\n if (figmaTokensDep) {\n dependencies.push(figmaTokensDep);\n }\n // Add all Figma-related scripts\n const figmaScripts = [\n 'figma-fetch',\n 'figma-sync',\n 'figma-info',\n 'tokens-transform',\n 'tokens-full',\n ];\n for (const scriptKey of figmaScripts) {\n const script = DSAI_OPTIONAL_SCRIPTS[scriptKey];\n if (script) {\n scripts.push(script);\n }\n }\n }\n\n if (options.includeStyleDictionary) {\n const styleDictDep = DSAI_OPTIONAL_DEPENDENCIES['style-dictionary'];\n if (styleDictDep) {\n dependencies.push(styleDictDep);\n }\n }\n\n // Add optional scripts\n if (options.includeIconsBuild) {\n const iconsBuildScript = DSAI_OPTIONAL_SCRIPTS['icons-build'];\n if (iconsBuildScript) {\n scripts.push(iconsBuildScript);\n }\n }\n\n // Add SCSS/Bootstrap integration scripts\n if (options.includeScssIntegration) {\n const scssScripts = ['scss-build', 'scss-watch', 'styles-all'];\n for (const scriptKey of scssScripts) {\n const script = DSAI_OPTIONAL_SCRIPTS[scriptKey];\n if (script) {\n scripts.push(script);\n }\n }\n\n // Add sass dependency for SCSS compilation\n const sassDep = DSAI_OPTIONAL_DEPENDENCIES['sass'];\n if (sassDep) {\n dependencies.push(sassDep);\n }\n }\n\n // Add Bootstrap dependency if requested\n if (options.includeBootstrap) {\n const bootstrapDep = DSAI_OPTIONAL_DEPENDENCIES['bootstrap'];\n if (bootstrapDep) {\n dependencies.push(bootstrapDep);\n }\n }\n\n return modifyPackageJson(cwd, {\n dependencies,\n scripts,\n upgradeDependencies: options.upgradeDependencies,\n dryRun: options.dryRun,\n createBackup: options.createBackup ?? true,\n });\n}\n\n/**\n * Check if DSAI is already installed in package.json\n */\nexport function isDsaiInstalled(cwd: string): boolean {\n const pkg = readPackageJson(cwd);\n if (!pkg) {\n return false;\n }\n\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n ...pkg.peerDependencies,\n };\n\n return Boolean(allDeps['@dsai-io/tools']);\n}\n\n/**\n * Get summary of changes that would be made\n */\nexport function getChangesSummary(result: ModificationResult): string[] {\n const summary: string[] = [];\n\n if (result.changes.scriptsAdded.length > 0) {\n summary.push(`Scripts added: ${result.changes.scriptsAdded.join(', ')}`);\n }\n\n if (result.changes.scriptsUpdated.length > 0) {\n summary.push(`Scripts updated: ${result.changes.scriptsUpdated.join(', ')}`);\n }\n\n if (result.changes.dependenciesAdded.length > 0) {\n summary.push(`Dependencies added: ${result.changes.dependenciesAdded.join(', ')}`);\n }\n\n if (result.changes.dependenciesUpdated.length > 0) {\n summary.push(`Dependencies updated: ${result.changes.dependenciesUpdated.join(', ')}`);\n }\n\n if (result.backupPath) {\n summary.push(`Backup created: ${result.backupPath}`);\n }\n\n return summary;\n}\n\n// ============================================================================\n// Dependency Version Detection\n// ============================================================================\n\n/**\n * Information about an outdated dependency\n */\nexport interface OutdatedDependency {\n /** Package name */\n name: string;\n /** Currently installed version */\n currentVersion: string;\n /** Latest recommended version */\n latestVersion: string;\n /** Dependency type (devDependencies, dependencies, etc.) */\n type: 'dependencies' | 'devDependencies' | 'peerDependencies';\n /** Whether this is a major version change */\n isMajorChange: boolean;\n /** Warning message about potential breaking changes */\n warning?: string;\n}\n\n/**\n * Parse semver version to extract major version number\n */\nfunction getMajorVersion(version: string): number | null {\n // Remove ^ or ~ prefix and extract major version\n const cleanVersion = version.replace(/^[\\^~]/, '');\n const match = cleanVersion.match(/^(\\d+)/);\n if (!match || !match[1]) {\n return null;\n }\n return parseInt(match[1], 10);\n}\n\n/**\n * Check if upgrading from one version to another is a major change\n */\nfunction isMajorVersionChange(currentVersion: string, newVersion: string): boolean {\n const currentMajor = getMajorVersion(currentVersion);\n const newMajor = getMajorVersion(newVersion);\n\n if (currentMajor === null || newMajor === null) {\n return false;\n }\n\n return newMajor > currentMajor;\n}\n\n/**\n * Get warning message for specific package upgrades\n */\nfunction getUpgradeWarning(\n packageName: string,\n currentVersion: string,\n newVersion: string\n): string | undefined {\n const isMajor = isMajorVersionChange(currentVersion, newVersion);\n\n // Package-specific warnings\n const warnings: Record<string, string> = {\n bootstrap: isMajor\n ? 'Major Bootstrap upgrade may include breaking CSS/JS API changes. Review the Bootstrap migration guide.'\n : 'Minor Bootstrap update. Check changelog for any CSS class changes.',\n sass: isMajor\n ? 'Major Sass upgrade may include breaking changes to @use/@import syntax.'\n : (undefined as unknown as string),\n 'style-dictionary': isMajor\n ? 'Major Style Dictionary upgrade may require config file updates. Review migration guide.'\n : (undefined as unknown as string),\n '@dsai-io/tools': 'DSAI tools upgrade. Review changelog for any config schema changes.',\n '@dsai-io/figma-tokens': 'Figma tokens upgrade. Check for any API changes.',\n };\n\n return warnings[packageName];\n}\n\n/**\n * Detect outdated DSAI-related dependencies in package.json\n *\n * @param cwd - Working directory containing package.json\n * @param targetDependencies - Dependencies to check against\n * @returns List of outdated dependencies with upgrade information\n */\nexport function detectOutdatedDependencies(\n cwd: string,\n targetDependencies: DependencyEntry[]\n): OutdatedDependency[] {\n const pkg = readPackageJson(cwd);\n if (!pkg) {\n return [];\n }\n\n const outdated: OutdatedDependency[] = [];\n\n for (const targetDep of targetDependencies) {\n const section = targetDep.type;\n const depsSection = pkg[section] as Record<string, string> | undefined;\n\n if (!depsSection) {\n continue;\n }\n\n const currentVersion = depsSection[targetDep.name];\n if (!currentVersion) {\n continue;\n }\n\n // Compare versions (simple string comparison, not full semver)\n if (currentVersion !== targetDep.version) {\n const isMajor = isMajorVersionChange(currentVersion, targetDep.version);\n const warning = getUpgradeWarning(targetDep.name, currentVersion, targetDep.version);\n\n outdated.push({\n name: targetDep.name,\n currentVersion,\n latestVersion: targetDep.version,\n type: section,\n isMajorChange: isMajor,\n warning,\n });\n }\n }\n\n return outdated;\n}\n\n/**\n * Get all DSAI dependencies (required + optional based on options)\n */\nexport function getAllDsaiDependencies(\n options: {\n includeFigmaTokens?: boolean;\n includeStyleDictionary?: boolean;\n includeScssIntegration?: boolean;\n includeBootstrap?: boolean;\n } = {}\n): DependencyEntry[] {\n const deps = [...DSAI_DEPENDENCIES];\n\n if (options.includeFigmaTokens) {\n const figmaTokensDep = DSAI_OPTIONAL_DEPENDENCIES['figma-tokens'];\n if (figmaTokensDep) {\n deps.push(figmaTokensDep);\n }\n }\n\n if (options.includeStyleDictionary) {\n const styleDictDep = DSAI_OPTIONAL_DEPENDENCIES['style-dictionary'];\n if (styleDictDep) {\n deps.push(styleDictDep);\n }\n }\n\n if (options.includeScssIntegration) {\n const sassDep = DSAI_OPTIONAL_DEPENDENCIES['sass'];\n if (sassDep) {\n deps.push(sassDep);\n }\n }\n\n if (options.includeBootstrap) {\n const bootstrapDep = DSAI_OPTIONAL_DEPENDENCIES['bootstrap'];\n if (bootstrapDep) {\n deps.push(bootstrapDep);\n }\n }\n\n return deps;\n}\n","/**\n * Init Templates Module\n *\n * Provides template content for different project configurations.\n * Templates are generated dynamically based on project detection and user choices.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/init/templates\n *\n * @remarks\n * Currently supports React framework templates.\n * TODO: Add Vue, Angular, Svelte, Solid templates (coming soon)\n */\n\nimport type { Framework, MetaFramework, ProjectInfo } from './detector.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Template generation options\n */\nexport interface TemplateOptions {\n /** Project info from detection */\n projectInfo: ProjectInfo;\n /** CSS custom property prefix */\n prefix: string;\n /** Output directory for tokens */\n outputDir: string;\n /** Source directory for Figma exports */\n sourceDir: string;\n /** Output formats to generate */\n formats: string[];\n /** Template complexity level */\n template: 'minimal' | 'full' | 'enterprise';\n /** Config file format */\n configFormat: 'mjs' | 'js' | 'ts';\n}\n\n/**\n * Generated template result\n */\nexport interface GeneratedTemplate {\n /** Config file name */\n configFileName: string;\n /** Config file content */\n configContent: string;\n /** Additional files to create */\n additionalFiles: Array<{\n path: string;\n content: string;\n }>;\n /** Directories to create */\n directories: string[];\n}\n\n// ============================================================================\n// Template Helpers\n// ============================================================================\n\n/**\n * Format array for config output\n */\nfunction formatArray(items: string[]): string {\n return items.map((item) => `'${item}'`).join(', ');\n}\n\n/**\n * Get framework-specific theme selector pattern\n */\nfunction getThemeSelectorPattern(\n framework: Framework,\n metaFramework: MetaFramework\n): { default: string; others: string } {\n // React/Next.js typically use data attributes\n if (framework === 'react' || metaFramework === 'next') {\n return {\n default: ':root',\n others: '[data-theme=\"{mode}\"]',\n };\n }\n\n // TODO: Add Vue/Nuxt patterns (coming soon)\n // TODO: Add Angular patterns (coming soon)\n // TODO: Add Svelte/SvelteKit patterns (coming soon)\n\n // Default pattern\n return {\n default: ':root',\n others: '[data-dsai-theme=\"{mode}\"]',\n };\n}\n\n/**\n * Get framework-specific output directory suggestion\n */\nexport function getFrameworkOutputDir(\n framework: Framework,\n metaFramework: MetaFramework,\n sourceDir?: string\n): string {\n // Next.js App Router\n if (metaFramework === 'next') {\n return 'src/styles/tokens';\n }\n\n // Vite + React\n if (metaFramework === 'vite' && framework === 'react') {\n return 'src/tokens';\n }\n\n // TODO: Add Vue/Nuxt output directories (coming soon)\n // TODO: Add Angular output directories (coming soon)\n // TODO: Add Svelte/SvelteKit output directories (coming soon)\n\n // Default based on source directory\n if (sourceDir) {\n return `${sourceDir}/tokens`;\n }\n\n return 'dist/tokens';\n}\n\n// ============================================================================\n// React Templates\n// ============================================================================\n\n/**\n * Generate minimal React configuration\n */\nfunction generateReactMinimalConfig(opts: TemplateOptions): string {\n const { prefix, outputDir, sourceDir, formats } = opts;\n\n return `/**\n * DSAI Tools Configuration\n * React Project - Minimal Setup\n * @see https://github.com/michelve/dsai\n */\nimport { defineConfig } from '@dsai-io/tools';\n\nexport default defineConfig({\n tokens: {\n sourceDir: '${sourceDir}',\n outputDir: '${outputDir}',\n prefix: '${prefix}',\n formats: [${formatArray(formats)}],\n },\n});\n`;\n}\n\n/**\n * Generate full React configuration\n */\nfunction generateReactFullConfig(opts: TemplateOptions): string {\n const { prefix, outputDir, sourceDir, formats, projectInfo } = opts;\n const selectorPattern = getThemeSelectorPattern(projectInfo.framework, projectInfo.metaFramework);\n\n return `/**\n * DSAI Tools Configuration\n * React Project - Full Setup\n *\n * This configuration includes commonly used options.\n * For all available options, use the 'enterprise' template.\n *\n * @see https://github.com/michelve/dsai\n */\nimport { defineConfig } from '@dsai-io/tools';\n\nexport default defineConfig({\n // Global settings\n global: {\n logLevel: 'info',\n framework: 'react',\n },\n\n // Token configuration\n tokens: {\n // Enable token processing\n enabled: true,\n\n // Source type - 'theme' uses theme.json, 'collections' uses individual files\n source: 'theme',\n\n // Directory for raw Figma exports\n sourceDir: '${sourceDir}',\n\n // Output directory for generated files\n outputDir: '${outputDir}',\n\n // CSS variable prefix\n prefix: '${prefix}',\n\n // Output formats: 'css' | 'scss' | 'less' | 'json' | 'js' | 'ts'\n formats: [${formatArray(formats)}],\n\n // Base font size for rem calculations\n baseFontSize: 16,\n\n // Output references in generated files (uses CSS var() functions)\n outputReferences: true,\n\n // Generate separate files per theme\n separateThemeFiles: false,\n\n // Create bundled output file\n createBundle: true,\n bundleFileName: 'tokens',\n\n // Cache configuration\n cache: {\n enabled: true,\n directory: '.cache',\n },\n },\n\n // Theme configuration\n themes: {\n enabled: true,\n defaultMode: 'light',\n modes: {\n light: {\n selector: '${selectorPattern.default}',\n cssVariables: true,\n },\n dark: {\n selector: '${selectorPattern.others.replace('{mode}', 'dark')}',\n cssVariables: true,\n },\n },\n },\n\n // Icon configuration (optional - uncomment to enable)\n // icons: {\n // enabled: true,\n // sourceDir: 'assets/icons',\n // outputDir: 'src/components/icons',\n // formats: ['react', 'svg'],\n // generateIndex: true,\n // generateTypes: ${opts.projectInfo.typescript},\n // },\n});\n`;\n}\n\n/**\n * Generate enterprise React configuration\n */\nfunction generateReactEnterpriseConfig(opts: TemplateOptions): string {\n const { prefix, outputDir, sourceDir, formats, projectInfo } = opts;\n const selectorPattern = getThemeSelectorPattern(projectInfo.framework, projectInfo.metaFramework);\n\n return `/**\n * DSAI Tools Configuration\n * React Project - Enterprise Setup\n *\n * This configuration includes ALL available options for reference.\n * Uncomment and modify options as needed for your project.\n *\n * @see https://github.com/michelve/dsai\n */\nimport { defineConfig } from '@dsai-io/tools';\n\nexport default defineConfig({\n // =========================================================================\n // Global Configuration\n // =========================================================================\n global: {\n // Logging level: 'silent' | 'error' | 'warn' | 'info' | 'debug' | 'verbose'\n logLevel: 'info',\n\n // Enable colored output\n colors: true,\n\n // CI mode (disables interactive features)\n ci: false,\n\n // Dry run mode (no file writes)\n dryRun: false,\n\n // Framework: 'react' | 'vue' | 'angular' | 'svelte' | 'vanilla'\n framework: 'react',\n\n // Build configuration\n build: {\n outDir: 'dist',\n clean: true,\n sourcemap: false,\n minify: true,\n parallel: true,\n maxConcurrency: 4,\n },\n },\n\n // =========================================================================\n // Token Configuration\n // =========================================================================\n tokens: {\n // Enable token processing\n enabled: true,\n\n // Source type - 'theme' uses theme.json, 'collections' uses individual files\n source: 'theme',\n\n // Directory for raw Figma exports (theme.json or foundation.json, etc.)\n sourceDir: '${sourceDir}',\n\n // Base directory for processed collections\n collectionsDir: 'collections',\n\n // Output directory for generated files\n outputDir: '${outputDir}',\n\n // CSS variable prefix (e.g., ${prefix}color-blue-500)\n prefix: '${prefix}',\n\n // Output formats to generate: 'css' | 'scss' | 'less' | 'json' | 'js' | 'ts' | 'esm' | 'cjs'\n formats: [${formatArray(formats)}],\n\n // Base font size for rem calculations\n baseFontSize: 16,\n\n // Output references in generated files (uses CSS var() functions)\n outputReferences: true,\n\n // Generate separate files per theme\n separateThemeFiles: true,\n\n // Create bundled output file\n createBundle: true,\n bundleFileName: 'bundle',\n\n // Merge order for token layers\n mergeOrder: ['base', 'semantic', 'component'],\n\n // Additional SCSS directories to process\n additionalScssDirectories: [],\n\n // Output directory structure per format\n // outputDirsByFormat: {\n // css: 'dist/css',\n // scss: 'dist/scss',\n // less: 'dist/less',\n // js: 'dist/js',\n // ts: 'dist/ts',\n // json: 'dist/json',\n // },\n\n // SCSS file names\n // scssFileNames: {\n // variables: 'variables',\n // utilities: 'utilities',\n // mixins: 'mixins',\n // tokens: 'tokens',\n // },\n\n // Custom transforms\n // transforms: [],\n // customTransforms: [\n // {\n // name: 'custom-transform',\n // type: 'value',\n // transformer: (token) => token.value,\n // },\n // ],\n\n // Custom formats\n // customFormats: [\n // {\n // name: 'custom-format',\n // extension: '.custom',\n // formatter: (dictionary) => '/* custom output */',\n // },\n // ],\n\n // Cache configuration\n cache: {\n enabled: true,\n directory: '.cache',\n maxAge: 86400000, // 24 hours\n },\n\n // Watch mode configuration\n watch: {\n enabled: false,\n debounce: 300,\n clearScreen: true,\n ignorePatterns: ['node_modules/**', 'dist/**'],\n },\n\n // Verbose output\n verbose: false,\n },\n\n // =========================================================================\n // Theme Configuration\n // =========================================================================\n themes: {\n enabled: true,\n defaultMode: 'light',\n outputFileName: 'themes',\n\n // Theme mode definitions\n modes: {\n light: {\n selector: '${selectorPattern.default}',\n cssVariables: true,\n generateSeparateFiles: false,\n },\n dark: {\n selector: '${selectorPattern.others.replace('{mode}', 'dark')}',\n // Optional: use media query instead of/in addition to selector\n // mediaQuery: '(prefers-color-scheme: dark)',\n cssVariables: true,\n generateSeparateFiles: false,\n },\n },\n\n // Default fallback colors (optional)\n // defaultColors: {\n // light: '#ffffff',\n // dark: '#1a1a1a',\n // },\n },\n\n // =========================================================================\n // Icon Configuration\n // =========================================================================\n icons: {\n enabled: true,\n\n // Source directory for SVG icons\n sourceDir: 'assets/icons',\n\n // Output directory for generated icons\n outputDir: 'src/components/icons',\n\n // Output formats: 'svg' | 'react' | 'vue' | 'sprite' | 'font'\n formats: ['react', 'svg'],\n\n // React component naming\n componentPrefix: 'Icon',\n componentSuffix: '',\n\n // Generate index file for imports\n generateIndex: true,\n\n // Generate TypeScript types\n generateTypes: ${opts.projectInfo.typescript},\n\n // SVG optimization\n optimization: {\n enabled: true,\n removeComments: true,\n removeDimensions: false,\n removeViewBox: false,\n removeXMLNS: true,\n cleanupIds: true,\n minify: true,\n },\n\n // Sprite generation\n sprite: {\n enabled: true,\n fileName: 'icons',\n format: 'symbol',\n prefix: 'icon-',\n },\n },\n});\n`;\n}\n\n// ============================================================================\n// Next.js Templates\n// ============================================================================\n\n/**\n * Generate Next.js specific configuration\n */\nfunction generateNextJsConfig(opts: TemplateOptions): string {\n const { prefix, outputDir, sourceDir, formats, template } = opts;\n\n if (template === 'minimal') {\n return `/**\n * DSAI Tools Configuration\n * Next.js Project - Minimal Setup\n * @see https://github.com/michelve/dsai\n */\nimport { defineConfig } from '@dsai-io/tools';\n\nexport default defineConfig({\n tokens: {\n sourceDir: '${sourceDir}',\n outputDir: '${outputDir}',\n prefix: '${prefix}',\n formats: [${formatArray(formats)}],\n },\n});\n`;\n }\n\n return `/**\n * DSAI Tools Configuration\n * Next.js Project\n * @see https://github.com/michelve/dsai\n */\nimport { defineConfig } from '@dsai-io/tools';\n\nexport default defineConfig({\n tokens: {\n // Source configuration\n source: 'theme',\n sourceDir: '${sourceDir}',\n\n // Output configuration - Next.js App Router structure\n outputDir: '${outputDir}',\n prefix: '${prefix}',\n formats: [${formatArray(formats)}],\n\n // Build options\n baseFontSize: 16,\n outputReferences: true,\n separateThemeFiles: false,\n\n // Theme configuration for Next.js\n themes: {\n autoDetect: true,\n default: 'Light',\n selectorPattern: {\n // Works with next-themes or custom theme providers\n default: ':root',\n others: '[data-theme=\"{mode}\"]',\n },\n },\n },\n\n icons: {\n sourceDir: 'icons',\n outputDir: 'src/components/icons',\n framework: 'react',\n typescript: true,\n optimize: true,\n prefix: 'Icon',\n exportIndex: true,\n },\n});\n`;\n}\n\n// ============================================================================\n// Vanilla/Generic Templates\n// ============================================================================\n\n/**\n * Generate vanilla/generic configuration\n */\nfunction generateVanillaConfig(opts: TemplateOptions): string {\n const { prefix, outputDir, sourceDir, formats, template } = opts;\n\n if (template === 'minimal') {\n return `/**\n * DSAI Tools Configuration\n * @see https://github.com/michelve/dsai\n */\nimport { defineConfig } from '@dsai-io/tools';\n\nexport default defineConfig({\n tokens: {\n sourceDir: '${sourceDir}',\n outputDir: '${outputDir}',\n prefix: '${prefix}',\n formats: [${formatArray(formats)}],\n },\n});\n`;\n }\n\n return `/**\n * DSAI Tools Configuration\n * @see https://github.com/michelve/dsai\n */\nimport { defineConfig } from '@dsai-io/tools';\n\nexport default defineConfig({\n tokens: {\n // Source configuration\n source: 'theme',\n sourceDir: '${sourceDir}',\n\n // Output configuration\n outputDir: '${outputDir}',\n prefix: '${prefix}',\n formats: [${formatArray(formats)}],\n\n // Build options\n baseFontSize: 16,\n outputReferences: true,\n separateThemeFiles: false,\n\n // Theme configuration\n themes: {\n autoDetect: true,\n default: 'Light',\n selectorPattern: {\n default: ':root',\n others: '[data-dsai-theme=\"{mode}\"]',\n },\n },\n },\n});\n`;\n}\n\n// ============================================================================\n// Additional Files\n// ============================================================================\n\n// ============================================================================\n// Figma Configuration Templates\n// ============================================================================\n\n/**\n * Generate Figma configuration file content\n *\n * This creates a figma.config.mjs file for users who want Figma API integration.\n * Requires @dsai-io/figma-tokens package.\n */\nexport function generateFigmaConfig(options: {\n outputDir: string;\n tokensDir: string;\n format: 'dtcg' | 'tokens-studio' | 'style-dictionary';\n}): string {\n const { outputDir, tokensDir, format } = options;\n\n return `/**\n * Figma Integration Configuration\n *\n * This configuration enables direct token export from Figma API.\n *\n * PREREQUISITES:\n * 1. Create a Figma Personal Access Token at:\n * https://www.figma.com/developers/api#access-tokens\n * 2. Set your token as an environment variable:\n * export FIGMA_TOKEN=\"your-figma-token-here\"\n *\n * USAGE:\n * node figma.config.mjs export # Export tokens from Figma\n * node figma.config.mjs sync # Sync tokens with Figma\n * node figma.config.mjs info # Show Figma file info\n *\n * @see https://github.com/michelve/dsai/tree/main/packages/@dsai-io/figma-tokens\n */\n\nimport {\n createFigmaClientFromEnv,\n transformTokens,\n validateFigmaExports,\n buildTokens,\n} from '@dsai-io/figma-tokens';\n\n// =============================================================================\n// Configuration\n// =============================================================================\n\n/**\n * Figma file configuration\n *\n * To find your file key, open your Figma file and look at the URL:\n * https://www.figma.com/file/ABC123xyz/My-Design-System\n * ^^^^^^^^^^^\n * This is your file key\n */\nconst FIGMA_CONFIG = {\n // Your Figma file key (from the URL)\n fileKey: process.env['FIGMA_FILE_KEY'] ?? 'YOUR_FIGMA_FILE_KEY_HERE',\n\n // Output directory for exported tokens\n outputDir: '${outputDir}',\n\n // Tokens package directory (for sync operations)\n tokensDir: '${tokensDir}',\n\n // Export options\n exportOptions: {\n // Output format: 'dtcg' (W3C standard), 'tokens-studio', or 'style-dictionary'\n format: '${format}',\n\n // Include token descriptions from Figma\n includeDescriptions: true,\n\n // Resolve aliases to actual values (false keeps references like {colors.primary})\n resolveAliases: false,\n\n // Group output files by collection\n groupByCollection: true,\n\n // Output structure:\n // - 'separate': One file per mode\n // - 'combined': Single file with all modes\n outputStructure: 'combined',\n\n // Filter specific collections (empty = all)\n collections: [],\n\n // Filter specific modes (empty = all)\n modes: [],\n },\n};\n\n// =============================================================================\n// Logger Utility\n// =============================================================================\n\n/**\n * Log levels for CLI output\n */\nconst LOG_LEVELS = Object.freeze({\n info: '[INFO]',\n warn: '[WARN]',\n error: '[ERROR]',\n success: '[SUCCESS]',\n});\n\n/**\n * Format elapsed time for display\n */\nfunction formatElapsed(startTime) {\n const elapsed = Date.now() - startTime;\n if (elapsed < 1000) {\n return \\`\\${elapsed}ms\\`;\n }\n return \\`\\${(elapsed / 1000).toFixed(2)}s\\`;\n}\n\n/**\n * Get the log prefix for a given level\n */\nfunction getLogPrefix(level) {\n switch (level) {\n case 'warn':\n return LOG_LEVELS.warn;\n case 'error':\n return LOG_LEVELS.error;\n case 'success':\n return LOG_LEVELS.success;\n default:\n return LOG_LEVELS.info;\n }\n}\n\n/**\n * Logger for CLI output\n */\nfunction log(message, level = 'info') {\n const timestamp = new Date().toISOString();\n const prefix = getLogPrefix(level);\n console.log(\\`\\${timestamp} \\${prefix} \\${message}\\`);\n}\n\n/**\n * Print plain text output\n */\nfunction print(text) {\n console.log(text);\n}\n\n// =============================================================================\n// Commands\n// =============================================================================\n\nconst command = process.argv[2];\n\n/**\n * Validate environment configuration\n */\nfunction validateEnvironment() {\n const errors = [];\n\n if (!process.env['FIGMA_TOKEN']) {\n errors.push('FIGMA_TOKEN environment variable is required');\n }\n\n if (FIGMA_CONFIG.fileKey === 'YOUR_FIGMA_FILE_KEY_HERE' || !FIGMA_CONFIG.fileKey) {\n errors.push('FIGMA_FILE_KEY environment variable or config fileKey must be set');\n }\n\n if (errors.length > 0) {\n log('Configuration validation failed:', 'error');\n for (const error of errors) {\n print(\\` - \\${error}\\`);\n }\n print('\\\\nTo configure Figma integration:');\n print(' 1. Create a Figma Personal Access Token at:');\n print(' https://www.figma.com/developers/api#access-tokens');\n print(' 2. Set environment variables in .env:');\n print(' FIGMA_TOKEN=your-token-here');\n print(' FIGMA_FILE_KEY=your-file-key-here');\n process.exit(1);\n }\n}\n\n/**\n * Display usage information\n */\nfunction showUsage() {\n print('Usage: node figma.config.mjs <command>');\n print('');\n print('Commands:');\n print(' export Export design tokens from Figma');\n print(' sync Sync tokens between Figma and local files');\n print(' info Display Figma file information');\n print('');\n print('Environment Variables:');\n print(' FIGMA_TOKEN Your Figma Personal Access Token');\n print(' FIGMA_FILE_KEY The Figma file key (from URL)');\n}\n\n/**\n * Main entry point\n */\nasync function main() {\n print('\\\\nDSAI Figma Integration\\\\n');\n\n switch (command) {\n case 'export':\n await exportTokens();\n break;\n case 'sync':\n await syncTokens();\n break;\n case 'info':\n await showInfo();\n break;\n default:\n showUsage();\n process.exit(0);\n }\n}\n\n/**\n * Export design tokens from Figma\n */\nasync function exportTokens() {\n validateEnvironment();\n\n const startTime = Date.now();\n log('Starting token export from Figma');\n log(\\`File Key: \\${FIGMA_CONFIG.fileKey}\\`);\n log(\\`Output Directory: \\${FIGMA_CONFIG.outputDir}\\`);\n log(\\`Format: \\${FIGMA_CONFIG.exportOptions.format}\\`);\n\n try {\n const client = createFigmaClientFromEnv();\n\n log('Fetching variables from Figma API...');\n const variables = await client.getLocalVariables(FIGMA_CONFIG.fileKey);\n\n log(\\`Retrieved \\${Object.keys(variables.meta.variables).length} variables\\`);\n log(\\`Collections: \\${Object.keys(variables.meta.variableCollections).length}\\`);\n\n log('Transforming tokens...');\n const tokens = await transformTokens(variables, {\n format: FIGMA_CONFIG.exportOptions.format,\n includeDescriptions: FIGMA_CONFIG.exportOptions.includeDescriptions,\n resolveAliases: FIGMA_CONFIG.exportOptions.resolveAliases,\n groupByCollection: FIGMA_CONFIG.exportOptions.groupByCollection,\n collections: FIGMA_CONFIG.exportOptions.collections,\n modes: FIGMA_CONFIG.exportOptions.modes,\n });\n\n log('Validating token structure...');\n const validationResult = validateFigmaExports(tokens);\n\n if (!validationResult.valid) {\n log('Validation warnings found:', 'warn');\n for (const error of validationResult.errors) {\n print(\\` - \\${error}\\`);\n }\n }\n\n log('Building output files...');\n await buildTokens({\n tokens,\n outputDir: FIGMA_CONFIG.outputDir,\n outputStructure: FIGMA_CONFIG.exportOptions.outputStructure,\n groupByCollection: FIGMA_CONFIG.exportOptions.groupByCollection,\n });\n\n log(\\`Export completed in \\${formatElapsed(startTime)}\\`, 'success');\n log(\\`Output written to: \\${FIGMA_CONFIG.outputDir}\\`);\n } catch (error) {\n log(\\`Export failed: \\${error.message}\\`, 'error');\n if (error.response?.status === 403) {\n log('Access denied. Check your FIGMA_TOKEN has the required permissions.', 'error');\n } else if (error.response?.status === 404) {\n log('File not found. Check your FIGMA_FILE_KEY is correct.', 'error');\n }\n process.exit(1);\n }\n}\n\n/**\n * Sync tokens between Figma and local files\n */\nasync function syncTokens() {\n validateEnvironment();\n\n const startTime = Date.now();\n log('Starting token sync');\n log(\\`Tokens Directory: \\${FIGMA_CONFIG.tokensDir}\\`);\n\n try {\n const client = createFigmaClientFromEnv();\n\n log('Fetching current Figma variables...');\n const remoteVariables = await client.getLocalVariables(FIGMA_CONFIG.fileKey);\n\n log('Comparing with local tokens...');\n const localTokens = await transformTokens(remoteVariables, {\n format: FIGMA_CONFIG.exportOptions.format,\n });\n\n await buildTokens({\n tokens: localTokens,\n outputDir: FIGMA_CONFIG.tokensDir,\n outputStructure: 'combined',\n });\n\n log(\\`Sync completed in \\${formatElapsed(startTime)}\\`, 'success');\n } catch (error) {\n log(\\`Sync failed: \\${error.message}\\`, 'error');\n process.exit(1);\n }\n}\n\n/**\n * Display Figma file information\n */\nasync function showInfo() {\n validateEnvironment();\n\n log('Fetching Figma file information...');\n\n try {\n const client = createFigmaClientFromEnv();\n\n const file = await client.getFile(FIGMA_CONFIG.fileKey);\n const variables = await client.getLocalVariables(FIGMA_CONFIG.fileKey);\n\n print('\\\\nFigma File Information');\n print('='.repeat(50));\n print(\\`Name: \\${file.name}\\`);\n print(\\`Last Modified: \\${file.lastModified}\\`);\n print(\\`Version: \\${file.version}\\`);\n\n print('\\\\nVariable Collections');\n print('-'.repeat(50));\n\n const collections = Object.values(variables.meta.variableCollections);\n for (const collection of collections) {\n const variableCount = collection.variableIds.length;\n const modeCount = collection.modes.length;\n print(\\`\\${collection.name}: \\${variableCount} variables, \\${modeCount} modes\\`);\n for (const mode of collection.modes) {\n print(\\` - \\${mode.name}\\`);\n }\n }\n\n print('\\\\nSummary');\n print('-'.repeat(50));\n print(\\`Total Collections: \\${collections.length}\\`);\n print(\\`Total Variables: \\${Object.keys(variables.meta.variables).length}\\`);\n\n let totalModes = 0;\n for (const c of collections) {\n totalModes += c.modes.length;\n }\n print(\\`Total Modes: \\${totalModes}\\`);\n\n } catch (error) {\n log(\\`Failed to fetch file info: \\${error.message}\\`, 'error');\n process.exit(1);\n }\n}\n\nmain().catch((error) => {\n log(\\`Unexpected error: \\${error.message}\\`, 'error');\n process.exit(1);\n});\n`;\n}\n\n// ============================================================================\n// Style Dictionary Config Template\n// ============================================================================\n\n/**\n * Generate Style Dictionary configuration file\n *\n * For projects that want to use Style Dictionary directly for advanced builds.\n */\nexport function generateStyleDictionaryConfig(options: {\n sourceDir: string;\n outputDir: string;\n prefix: string;\n outputReferences: boolean;\n}): string {\n const { sourceDir, outputDir, prefix, outputReferences } = options;\n\n return `/**\n * Style Dictionary Configuration\n *\n * Advanced token build configuration using Style Dictionary.\n *\n * WORKFLOW:\n * 1. Export tokens from Figma to: ${sourceDir}/\n * 2. Run: pnpm tokens:transform (converts to DTCG format)\n * 3. Run: pnpm tokens:build (this config)\n * 4. Generated files appear in: ${outputDir}/\n *\n * @see https://styledictionary.com/\n */\n\nimport { registerAll } from '@dsai-io/tools/tokens';\nimport { globSync } from 'glob';\nimport StyleDictionary from 'style-dictionary';\n\n// Register DSAi custom transforms, formats, and preprocessors\nregisterAll(StyleDictionary);\n\n// Find all token files\nconst sourceFiles = globSync('${sourceDir}/**/*.json');\n\nexport default {\n log: {\n verbosity: 'default',\n warnings: 'warn',\n errors: 'error',\n },\n\n // Preprocessing to fix reference paths\n preprocessors: ['fix-references'],\n\n // Source token files\n source: sourceFiles.length > 0 ? sourceFiles : ['${sourceDir}/**/*.json'],\n\n // Output platforms\n platforms: {\n // CSS Custom Properties\n css: {\n transformGroup: 'custom/css',\n buildPath: '${outputDir}/',\n files: [\n {\n destination: 'tokens.css',\n format: 'css/variables-with-comments',\n options: {\n prefix: '${prefix}',\n outputReferences: ${outputReferences},\n },\n },\n ],\n },\n\n // SCSS Variables\n scss: {\n transformGroup: 'custom/scss',\n buildPath: '${outputDir}/',\n files: [\n {\n destination: '_variables.scss',\n format: 'scss/variables',\n options: {\n outputReferences: ${outputReferences},\n basePxFontSize: 16,\n },\n },\n ],\n },\n\n // JavaScript/ES6\n js: {\n transformGroup: 'custom/js',\n buildPath: '${outputDir}/',\n files: [\n {\n destination: 'tokens.js',\n format: 'javascript/es6',\n },\n ],\n },\n\n // TypeScript\n ts: {\n transformGroup: 'custom/js',\n buildPath: '${outputDir}/',\n files: [\n {\n destination: 'tokens.d.ts',\n format: 'typescript/es6-declarations',\n },\n ],\n },\n\n // JSON (for design tool integration)\n json: {\n transformGroup: 'custom/css',\n buildPath: '${outputDir}/',\n files: [\n {\n destination: 'tokens.json',\n format: 'json/nested',\n },\n ],\n },\n },\n};\n`;\n}\n\n// ============================================================================\n// Build Script Template\n// ============================================================================\n\n/**\n * Generate build-tokens.mjs script for multi-theme support\n */\nexport function generateBuildTokensScript(options: {\n sourceDir: string;\n outputDir: string;\n prefix: string;\n themes: string[];\n}): string {\n const { sourceDir, outputDir, prefix, themes } = options;\n const themeList = themes.length > 0 ? themes : ['light', 'dark'];\n\n return `/**\n * Style Dictionary Build Script\n *\n * Builds design tokens with multi-theme support.\n *\n * SUPPORTED THEMES:\n${themeList.map((t) => ` * - ${t}${t === 'light' ? ' (default, applied to :root)' : ''}`).join('\\n')}\n *\n * @see https://styledictionary.com/\n */\n\nimport { registerAll } from '@dsai-io/tools/tokens';\nimport { globSync } from 'glob';\nimport StyleDictionary from 'style-dictionary';\n\n// Register DSAi custom transforms\nregisterAll(StyleDictionary);\n\n/**\n * Theme configuration\n */\nconst THEMES = {\n light: {\n suffix: null,\n selector: ':root',\n cssFile: 'tokens.css',\n scssFile: '_variables.scss',\n isDefault: true,\n },\n dark: {\n suffix: '-dark',\n selector: '[data-dsai-theme=\"dark\"]',\n cssFile: 'tokens-dark.css',\n scssFile: '_variables-dark.scss',\n isDefault: false,\n },\n};\n\n/**\n * Get token files for a theme\n */\nfunction getThemeFiles(theme) {\n const config = THEMES[theme];\n if (!config) throw new Error(\\`Unknown theme: \\${theme}\\`);\n\n if (config.isDefault) {\n const themeSuffixes = Object.values(THEMES)\n .filter((t) => t.suffix)\n .map((t) => \\`**/*\\${t.suffix}.json\\`);\n return globSync('${sourceDir}/**/*.json', {\n ignore: themeSuffixes.map((s) => \\`${sourceDir}/\\${s}\\`),\n });\n }\n\n return globSync(\\`${sourceDir}/**/*\\${config.suffix}.json\\`);\n}\n\n/**\n * Build theme\n */\nasync function buildTheme(theme) {\n const config = THEMES[theme];\n const files = getThemeFiles(theme);\n\n if (files.length === 0) {\n console.log(\\`\\\\nāļø No \\${theme} theme tokens found\\`);\n return;\n }\n\n console.log(\\`\\\\nšØ Building \\${theme} theme (\\${files.length} files)...\\`);\n\n const sd = new StyleDictionary({\n preprocessors: ['fix-references'],\n source: files,\n platforms: {\n css: {\n transformGroup: 'custom/css',\n buildPath: '${outputDir}/',\n files: [\n {\n destination: config.cssFile,\n format: 'css/variables-with-comments',\n options: {\n prefix: '${prefix}',\n outputReferences: true,\n selector: config.selector,\n },\n },\n ],\n },\n scss: {\n transformGroup: 'custom/scss',\n buildPath: '${outputDir}/',\n files: [\n {\n destination: config.scssFile,\n format: 'scss/variables',\n options: { outputReferences: true },\n },\n ],\n },\n },\n });\n\n await sd.buildAllPlatforms();\n console.log(\\`ā
\\${theme} theme complete\\`);\n}\n\n/**\n * Main build\n */\nasync function build() {\n console.log('\\\\nšØ Building design tokens...\\\\n');\n\n for (const theme of Object.keys(THEMES)) {\n await buildTheme(theme);\n }\n\n console.log('\\\\n⨠All themes built successfully!\\\\n');\n}\n\nbuild().catch(console.error);\n`;\n}\n\n// ============================================================================\n// Additional Files\n// ============================================================================\n\n/**\n * Generate README for the tokens source directory\n */\nexport function generateSourceReadme(packageManager: string, framework: Framework): string {\n const runCmd = packageManager === 'npm' ? 'npm run' : packageManager;\n\n return `# Design Tokens\n\nPlace your Figma export files here.\n\n## Expected Structure\n\nAfter exporting from Figma, you should have a \\`theme.json\\` file with your design tokens.\n\n\\`\\`\\`\n${framework === 'react' ? 'figma-exports' : 'tokens'}/\nāāā theme.json # Main token file from Figma\nāāā collections/ # Optional: Individual collection files\nā āāā colors.json\nā āāā typography.json\nā āāā spacing.json\nāāā README.md # This file\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`bash\n# Build tokens\n${runCmd} tokens:build\n\n# Validate tokens\n${runCmd} tokens:validate\n\n# Watch for changes\n${runCmd} tokens:watch\n\\`\\`\\`\n\n## Integration with React\n\nImport the generated tokens in your app:\n\n\\`\\`\\`tsx\n// In your main App.tsx or layout file\nimport './tokens/tokens.css';\n\n// Or use TypeScript tokens for type-safe access\nimport { tokens } from './tokens/tokens';\n\\`\\`\\`\n\n## Theme Switching\n\nUse data attributes to switch themes:\n\n\\`\\`\\`tsx\n// Set theme on document root\ndocument.documentElement.dataset.theme = 'dark';\n\n// Or use a React context/provider\n<ThemeProvider theme=\"dark\">\n <App />\n</ThemeProvider>\n\\`\\`\\`\n\n## Documentation\n\nFor more information, visit https://github.com/michelve/dsai\n`;\n}\n\n/**\n * Generate TypeScript declaration file for tokens\n */\nexport function generateTokenTypesStub(): string {\n return `/**\n * Design Token Types\n *\n * This file will be auto-generated when you run \\`dsai tokens build\\`.\n * It provides TypeScript types for your design tokens.\n *\n * @packageDocumentation\n */\n\n// This is a placeholder - actual types will be generated from your tokens\nexport interface DesignTokens {\n // Your token structure will appear here after build\n}\n\nexport declare const tokens: DesignTokens;\n`;\n}\n\n// ============================================================================\n// Main Template Generator\n// ============================================================================\n\n/**\n * Generate complete template for a project\n *\n * @param options - Template generation options\n * @returns Generated template with config and additional files\n */\nexport function generateTemplate(options: TemplateOptions): GeneratedTemplate {\n const { projectInfo, template, configFormat, sourceDir, outputDir } = options;\n const { framework, metaFramework, packageManager } = projectInfo;\n\n // Determine config file name\n const configFileName = `dsai.config.${configFormat}`;\n\n // Generate config content based on framework\n let configContent: string;\n\n // Next.js gets special handling\n if (metaFramework === 'next') {\n configContent = generateNextJsConfig(options);\n }\n // React framework\n else if (framework === 'react') {\n switch (template) {\n case 'minimal':\n configContent = generateReactMinimalConfig(options);\n break;\n case 'enterprise':\n configContent = generateReactEnterpriseConfig(options);\n break;\n default:\n configContent = generateReactFullConfig(options);\n }\n }\n // TODO: Add Vue templates (coming soon)\n // TODO: Add Angular templates (coming soon)\n // TODO: Add Svelte templates (coming soon)\n // TODO: Add Solid templates (coming soon)\n else {\n // Vanilla/unknown frameworks\n configContent = generateVanillaConfig(options);\n }\n\n // Prepare additional files\n const additionalFiles: GeneratedTemplate['additionalFiles'] = [\n {\n path: `${sourceDir}/README.md`,\n content: generateSourceReadme(packageManager, framework),\n },\n ];\n\n // Add TypeScript types stub for TS projects\n if (projectInfo.typescript) {\n additionalFiles.push({\n path: `${outputDir}/tokens.d.ts`,\n content: generateTokenTypesStub(),\n });\n }\n\n // Prepare directories to create\n const directories = [sourceDir, outputDir];\n\n // Enterprise template gets additional directories\n if (template === 'enterprise') {\n directories.push('collections');\n directories.push('assets/icons');\n }\n\n return {\n configFileName,\n configContent,\n additionalFiles,\n directories,\n };\n}\n\n/**\n * Check if a framework is fully supported\n */\nexport function isFrameworkSupported(framework: Framework): boolean {\n // Currently only React and vanilla are fully supported\n // TODO: Add support for Vue, Angular, Svelte, Solid (coming soon)\n return framework === 'react' || framework === 'vanilla' || framework === 'unknown';\n}\n\n/**\n * Get framework support message\n */\nexport function getFrameworkSupportMessage(framework: Framework): string | undefined {\n const comingSoon: Framework[] = ['vue', 'angular', 'svelte', 'solid', 'preact', 'lit'];\n\n if (comingSoon.includes(framework)) {\n return `Note: ${framework} support is coming soon. Using generic configuration for now.`;\n }\n\n return undefined;\n}\n","/**\n * Enhanced Init Command with Interactive Prompts\n *\n * Provides a comprehensive project initialization experience with\n * automatic project detection, interactive configuration, and\n * safe integration with existing projects.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/commands/init\n *\n * @remarks\n * Currently supports React framework integration.\n * TODO: Add support for Vue, Angular, Svelte, Solid, and other frameworks (coming soon)\n */\n\n/* eslint-disable no-console */\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\nimport * as p from '@clack/prompts';\nimport { Command } from 'commander';\nimport pc from 'picocolors';\n\nimport { detectProject, getProjectSummary, getRecommendedConfig } from '../init/detector.js';\nimport {\n addDsaiToPackageJson,\n getChangesSummary,\n getInstallCommand,\n isDsaiInstalled,\n detectOutdatedDependencies,\n getAllDsaiDependencies,\n DSAI_DEPENDENCIES,\n DSAI_OPTIONAL_DEPENDENCIES,\n} from '../init/package-modifier.js';\nimport {\n generateTemplate,\n getFrameworkSupportMessage,\n isFrameworkSupported,\n generateFigmaConfig,\n generateStyleDictionaryConfig,\n generateBuildTokensScript,\n} from '../init/templates.js';\nimport { ExitCode } from '../types.js';\n\nimport type { ProjectInfo } from '../init/detector.js';\nimport type { InitOptions } from '../types.js';\n\n// ============================================================================\n// Framework Support Check\n// ============================================================================\n\n/**\n * Check if the detected framework is supported.\n * If not, display a message and return false.\n *\n * @param projectInfo - Detected project information\n * @returns true if framework is supported, false otherwise\n */\nfunction checkFrameworkSupport(projectInfo: ProjectInfo): boolean {\n if (isFrameworkSupported(projectInfo.framework)) {\n return true;\n }\n\n const message = getFrameworkSupportMessage(projectInfo.framework);\n console.log();\n console.log(pc.yellow('ā Framework Support Notice'));\n console.log(pc.gray('ā'.repeat(40)));\n console.log();\n console.log(` Detected framework: ${pc.cyan(projectInfo.framework)}`);\n console.log(` ${message}`);\n console.log();\n console.log(' Currently supported frameworks:');\n console.log(` ${pc.green('ā¢')} React (including Next.js, Remix, Gatsby)`);\n console.log(` ${pc.green('ā¢')} Vanilla JavaScript/TypeScript`);\n console.log();\n console.log(' Coming soon:');\n console.log(` ${pc.gray('ā¢')} Vue (Nuxt, Vite)`);\n console.log(` ${pc.gray('ā¢')} Angular`);\n console.log(` ${pc.gray('ā¢')} Svelte (SvelteKit)`);\n console.log(` ${pc.gray('ā¢')} Solid`);\n console.log();\n console.log(' You can still use the vanilla configuration with any framework.');\n console.log(` Run ${pc.cyan('dsai init --template vanilla')} to proceed.`);\n console.log();\n\n return false;\n}\n\n// ============================================================================\n// Config Generation (Using templates module)\n// ============================================================================\n\n/**\n * Generate configuration content based on project info and user choices.\n * Delegates to the templates module for actual content generation.\n */\nfunction generateConfigContent(options: {\n projectInfo: ProjectInfo;\n prefix: string;\n outputDir: string;\n sourceDir: string;\n formats: string[];\n template: 'minimal' | 'full' | 'enterprise';\n configFormat: 'mjs' | 'js' | 'ts';\n}): string {\n const { projectInfo, prefix, outputDir, sourceDir, formats, template, configFormat } = options;\n\n // Use the templates module for generation\n const result = generateTemplate({\n projectInfo,\n prefix,\n outputDir,\n sourceDir,\n formats,\n template,\n configFormat,\n });\n\n return result.configContent;\n}\n\n// ============================================================================\n// Interactive Init\n// ============================================================================\n\n/**\n * Run interactive initialization\n */\nasync function runInteractiveInit(cwd: string, projectInfo: ProjectInfo): Promise<void> {\n const recommendations = getRecommendedConfig(projectInfo);\n\n // Show project detection results\n p.note(\n getProjectSummary(projectInfo)\n .map((line) => ` ${line}`)\n .join('\\n'),\n 'Detected Project'\n );\n\n // Check for existing configuration\n if (projectInfo.existingConfigFile) {\n const overwrite = await p.confirm({\n message: `Found existing ${projectInfo.existingConfigFile}. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(overwrite)) {\n p.cancel('Setup cancelled.');\n process.exit(0);\n }\n\n if (!overwrite) {\n p.log.info('Keeping existing configuration.');\n return;\n }\n }\n\n // Gather configuration through prompts\n const config = await p.group(\n {\n template: () =>\n p.select({\n message: 'Configuration template',\n initialValue: 'full',\n options: [\n { value: 'minimal', label: 'Minimal', hint: 'Basic setup with essential options' },\n { value: 'full', label: 'Full', hint: 'Recommended for most projects' },\n {\n value: 'enterprise',\n label: 'Enterprise',\n hint: 'Advanced options for large teams',\n },\n ],\n }),\n\n prefix: () =>\n p.text({\n message: 'CSS custom property prefix',\n placeholder: recommendations.prefix,\n initialValue: recommendations.prefix,\n validate: (value: string) => {\n if (!value.startsWith('--')) {\n return 'Prefix should start with --';\n }\n if (!value.endsWith('-')) {\n return 'Prefix should end with -';\n }\n return undefined;\n },\n }),\n\n outputDir: () =>\n p.text({\n message: 'Output directory for generated tokens',\n placeholder: recommendations.outputDir,\n initialValue: recommendations.outputDir,\n }),\n\n sourceDir: () =>\n p.text({\n message: 'Source directory for Figma exports',\n placeholder: recommendations.sourceDir,\n initialValue: recommendations.sourceDir,\n }),\n\n formats: () =>\n p.multiselect({\n message: 'Output formats to generate',\n initialValues: recommendations.outputFormats,\n options: [\n { value: 'css', label: 'CSS', hint: 'CSS custom properties' },\n { value: 'scss', label: 'SCSS', hint: 'SCSS variables' },\n { value: 'js', label: 'JavaScript', hint: 'JS module' },\n { value: 'ts', label: 'TypeScript', hint: 'TS module with types' },\n { value: 'json', label: 'JSON', hint: 'JSON tokens file' },\n ],\n required: true,\n }),\n\n includeFigmaSync: () =>\n p.confirm({\n message: 'Include Figma sync integration?',\n initialValue: false,\n }),\n\n includeIcons: () =>\n p.confirm({\n message: 'Include icon generation support?',\n initialValue: false,\n }),\n\n includeScssIntegration: () =>\n p.confirm({\n message: 'Include SCSS integration?',\n initialValue: false,\n }),\n\n includeBootstrap: ({ results }) =>\n results.includeScssIntegration\n ? p.confirm({\n message: 'Include Bootstrap framework?',\n initialValue: true,\n })\n : Promise.resolve(false),\n\n modifyPackageJson: () =>\n p.confirm({\n message: 'Add build scripts to package.json?',\n initialValue: true,\n }),\n\n installDeps: () =>\n p.confirm({\n message: 'Install dependencies now?',\n initialValue: true,\n }),\n },\n {\n onCancel: () => {\n p.cancel('Setup cancelled.');\n process.exit(0);\n },\n }\n );\n\n // Execute setup tasks\n const s = p.spinner();\n\n // 1. Create directories\n s.start('Creating directories');\n const dirsToCreate = [config.sourceDir, config.outputDir];\n\n for (const dir of dirsToCreate) {\n const fullPath = join(cwd, dir as string);\n if (!existsSync(fullPath)) {\n mkdirSync(fullPath, { recursive: true });\n }\n }\n s.stop('Directories created');\n\n // 2. Generate configuration file\n s.start('Generating configuration');\n const configFileName = `dsai.config.${recommendations.configFormat}`;\n const configContent = generateConfigContent({\n projectInfo,\n prefix: config.prefix as string,\n outputDir: config.outputDir as string,\n sourceDir: config.sourceDir as string,\n formats: config.formats as string[],\n template: config.template as 'minimal' | 'full' | 'enterprise',\n configFormat: recommendations.configFormat,\n });\n\n writeFileSync(join(cwd, configFileName), configContent, 'utf-8');\n s.stop(`Created ${configFileName}`);\n\n // 2b. Generate Figma config if requested\n if (config.includeFigmaSync) {\n s.start('Generating Figma configuration');\n const figmaConfigContent = generateFigmaConfig({\n outputDir: config.sourceDir as string,\n tokensDir: 'collections',\n format: 'dtcg',\n });\n writeFileSync(join(cwd, 'figma.config.mjs'), figmaConfigContent, 'utf-8');\n s.stop('Created figma.config.mjs');\n }\n\n // 2c. Generate Style Dictionary config for enterprise template\n if (config.template === 'enterprise') {\n s.start('Generating Style Dictionary configuration');\n const sdConfigContent = generateStyleDictionaryConfig({\n sourceDir: 'collections',\n outputDir: config.outputDir as string,\n prefix: config.prefix as string,\n outputReferences: true,\n });\n writeFileSync(join(cwd, 'sd.config.mjs'), sdConfigContent, 'utf-8');\n\n const buildScriptContent = generateBuildTokensScript({\n sourceDir: 'collections',\n outputDir: config.outputDir as string,\n prefix: config.prefix as string,\n themes: ['light', 'dark'],\n });\n writeFileSync(join(cwd, 'build-tokens.mjs'), buildScriptContent, 'utf-8');\n s.stop('Created sd.config.mjs and build-tokens.mjs');\n }\n\n // 3. Check for outdated dependencies and prompt for upgrade\n const targetDeps = getAllDsaiDependencies({\n includeFigmaTokens: config.includeFigmaSync as boolean,\n includeStyleDictionary: true,\n includeScssIntegration: config.includeScssIntegration as boolean,\n includeBootstrap: config.includeBootstrap as boolean,\n });\n\n const outdatedDeps = detectOutdatedDependencies(cwd, targetDeps);\n let upgradeDependencies = false;\n\n if (outdatedDeps.length > 0) {\n // Display outdated dependencies with warnings\n console.log();\n console.log(pc.yellow('Outdated dependencies detected:'));\n console.log();\n\n for (const dep of outdatedDeps) {\n const majorBadge = dep.isMajorChange ? pc.red(' [MAJOR]') : '';\n console.log(\n ` ${pc.cyan(dep.name)}: ${pc.gray(dep.currentVersion)} ā ${pc.green(dep.latestVersion)}${majorBadge}`\n );\n if (dep.warning) {\n console.log(` ${pc.yellow('ā ')} ${dep.warning}`);\n }\n }\n\n console.log();\n\n // Check if any are major changes\n const hasMajorChanges = outdatedDeps.some((d) => d.isMajorChange);\n\n if (hasMajorChanges) {\n console.log(pc.yellow('ā Warning: Some upgrades include major version changes.'));\n console.log(pc.gray(' Major version changes may include breaking changes that require'));\n console.log(pc.gray(' code updates. Review changelogs before upgrading.'));\n console.log();\n }\n\n const upgradeChoice = await p.confirm({\n message: 'Would you like to upgrade these dependencies?',\n initialValue: !hasMajorChanges, // Default to yes unless there are major changes\n });\n\n if (p.isCancel(upgradeChoice)) {\n p.cancel('Setup cancelled.');\n process.exit(0);\n }\n\n upgradeDependencies = upgradeChoice;\n }\n\n // 4. Modify package.json\n if (config.modifyPackageJson) {\n s.start('Updating package.json');\n const result = addDsaiToPackageJson(cwd, {\n includeFigmaTokens: config.includeFigmaSync as boolean,\n includeIconsBuild: config.includeIcons as boolean,\n includeStyleDictionary: true,\n includeScssIntegration: config.includeScssIntegration as boolean,\n includeBootstrap: config.includeBootstrap as boolean,\n upgradeDependencies,\n createBackup: true,\n });\n\n if (result.success) {\n const changes = getChangesSummary(result);\n s.stop('Updated package.json');\n if (changes.length > 0) {\n p.log.info(changes.join('\\n'));\n }\n } else {\n s.stop('Failed to update package.json');\n p.log.warn(result.error ?? 'Unknown error');\n }\n }\n\n // 4. Install dependencies\n if (config.installDeps) {\n const deps = [...DSAI_DEPENDENCIES];\n if (config.includeFigmaSync) {\n const figmaDep = DSAI_OPTIONAL_DEPENDENCIES['figma-tokens'];\n if (figmaDep) {\n deps.push(figmaDep);\n }\n }\n if (config.includeScssIntegration) {\n const sassDep = DSAI_OPTIONAL_DEPENDENCIES['sass'];\n if (sassDep) {\n deps.push(sassDep);\n }\n }\n if (config.includeBootstrap) {\n const bootstrapDep = DSAI_OPTIONAL_DEPENDENCIES['bootstrap'];\n if (bootstrapDep) {\n deps.push(bootstrapDep);\n }\n }\n\n const installCmd = getInstallCommand(projectInfo.packageManager, deps);\n p.log.step(`Run: ${pc.cyan(installCmd)}`);\n }\n\n // 5. Create sample files\n s.start('Creating sample files');\n const sampleTokensPath = join(cwd, config.sourceDir as string, 'README.md');\n if (!existsSync(sampleTokensPath)) {\n const sampleContent = `# Design Tokens\n\nPlace your Figma export files here.\n\n## Expected Structure\n\nAfter exporting from Figma, you should have a \\`theme.json\\` file with your design tokens.\n\n## Usage\n\n\\`\\`\\`bash\n# Build tokens\n${projectInfo.packageManager === 'npm' ? 'npm run' : projectInfo.packageManager} tokens:build\n\n# Validate tokens\n${projectInfo.packageManager === 'npm' ? 'npm run' : projectInfo.packageManager} tokens:validate\n\n# Watch for changes\n${projectInfo.packageManager === 'npm' ? 'npm run' : projectInfo.packageManager} tokens:watch\n\\`\\`\\`\n\n## Documentation\n\nFor more information, visit https://github.com/michelve/dsai\n`;\n writeFileSync(sampleTokensPath, sampleContent, 'utf-8');\n }\n s.stop('Sample files created');\n\n // Show next steps\n const nextSteps = [\n `Edit ${pc.cyan(configFileName)} to customize settings`,\n `Add your Figma export to ${pc.cyan(config.sourceDir as string)}`,\n `Run ${pc.cyan(`${projectInfo.packageManager === 'npm' ? 'npm run' : projectInfo.packageManager} tokens:build`)} to generate tokens`,\n ];\n\n if (!config.installDeps) {\n const installCmd = getInstallCommand(projectInfo.packageManager, DSAI_DEPENDENCIES);\n nextSteps.unshift(`Run ${pc.cyan(installCmd)} to install dependencies`);\n }\n\n p.note(nextSteps.map((step, i) => `${i + 1}. ${step}`).join('\\n'), 'Next Steps');\n\n p.outro(pc.green('Setup complete! š'));\n}\n\n// ============================================================================\n// Quick Init (Non-interactive)\n// ============================================================================\n\n/**\n * Run quick initialization with defaults\n */\nasync function runQuickInit(\n cwd: string,\n projectInfo: ProjectInfo,\n template: 'minimal' | 'full' | 'enterprise'\n): Promise<void> {\n const recommendations = getRecommendedConfig(projectInfo);\n\n console.log();\n console.log(pc.bold('DSAI Tools Quick Setup'));\n console.log(pc.gray('ā'.repeat(30)));\n console.log();\n\n // Show detected project\n for (const line of getProjectSummary(projectInfo)) {\n console.log(` ${pc.gray('ā¢')} ${line}`);\n }\n console.log();\n\n // Check for existing config\n if (projectInfo.existingConfigFile) {\n console.log(\n `${pc.yellow('ā ')} Config file ${pc.cyan(projectInfo.existingConfigFile)} already exists.`\n );\n console.log(` Use ${pc.cyan('dsai init')} (without --yes) to overwrite.`);\n console.log();\n process.exit(ExitCode.Success);\n }\n\n // Generate template with all required directories and files\n const templateResult = generateTemplate({\n projectInfo,\n prefix: recommendations.prefix,\n outputDir: recommendations.outputDir,\n sourceDir: recommendations.sourceDir,\n formats: recommendations.outputFormats,\n template,\n configFormat: recommendations.configFormat,\n });\n\n // Create directories (from template result)\n for (const dir of templateResult.directories) {\n const fullPath = join(cwd, dir);\n if (!existsSync(fullPath)) {\n mkdirSync(fullPath, { recursive: true });\n console.log(`${pc.green('ā')} Created ${pc.cyan(dir)}/`);\n }\n }\n\n // Write configuration file\n writeFileSync(join(cwd, templateResult.configFileName), templateResult.configContent, 'utf-8');\n console.log(`${pc.green('ā')} Created ${pc.cyan(templateResult.configFileName)}`);\n\n // Create additional files (README, type stubs, etc.)\n for (const file of templateResult.additionalFiles) {\n const fullPath = join(cwd, file.path);\n const dirPath = join(cwd, file.path.split('/').slice(0, -1).join('/'));\n if (!existsSync(dirPath)) {\n mkdirSync(dirPath, { recursive: true });\n }\n if (!existsSync(fullPath)) {\n writeFileSync(fullPath, file.content, 'utf-8');\n console.log(`${pc.green('ā')} Created ${pc.cyan(file.path)}`);\n }\n }\n\n // Enterprise template: generate Figma config and build scripts\n if (template === 'enterprise') {\n // Generate figma.config.mjs\n const figmaConfigContent = generateFigmaConfig({\n outputDir: recommendations.sourceDir,\n tokensDir: 'collections',\n format: 'dtcg',\n });\n writeFileSync(join(cwd, 'figma.config.mjs'), figmaConfigContent, 'utf-8');\n console.log(`${pc.green('ā')} Created ${pc.cyan('figma.config.mjs')}`);\n\n // Generate .env.example for Figma token\n const envExampleContent = `# Figma API Configuration\n# Get your token from: https://www.figma.com/developers/api#access-tokens\n\nFIGMA_TOKEN=your-figma-personal-access-token\nFIGMA_FILE_KEY=your-figma-file-key\n`;\n writeFileSync(join(cwd, '.env.example'), envExampleContent, 'utf-8');\n console.log(`${pc.green('ā')} Created ${pc.cyan('.env.example')}`);\n }\n\n // Modify package.json\n // Enterprise template includes all features (including Bootstrap by default)\n const isEnterprise = template === 'enterprise';\n const result = addDsaiToPackageJson(cwd, {\n includeFigmaTokens: isEnterprise,\n includeStyleDictionary: true,\n includeIconsBuild: isEnterprise,\n includeScssIntegration: isEnterprise,\n includeBootstrap: isEnterprise,\n createBackup: true,\n });\n\n if (result.success) {\n console.log(`${pc.green('ā')} Updated ${pc.cyan('package.json')}`);\n if (result.backupPath) {\n console.log(` ${pc.gray(`Backup: ${result.backupPath}`)}`);\n }\n }\n\n // Show next steps\n console.log();\n console.log(pc.bold('Next steps:'));\n console.log();\n console.log(\n ` ${pc.gray('1.')} Edit ${pc.cyan(templateResult.configFileName)} to customize settings`\n );\n console.log(` ${pc.gray('2.')} Add your Figma export to ${pc.cyan(recommendations.sourceDir)}/`);\n console.log(\n ` ${pc.gray('3.')} Run ${pc.cyan(`${projectInfo.packageManager === 'npm' ? 'npm run' : projectInfo.packageManager} tokens:build`)} to generate tokens`\n );\n console.log();\n\n const installCmd = getInstallCommand(projectInfo.packageManager, DSAI_DEPENDENCIES);\n console.log(`${pc.yellow('!')} Don't forget to install dependencies:`);\n console.log(` ${pc.cyan(installCmd)}`);\n console.log();\n\n console.log(`${pc.green('ā')} Setup complete!`);\n console.log();\n}\n\n// ============================================================================\n// Command Export\n// ============================================================================\n\n/**\n * Create init command\n *\n * @returns Commander command for initialization\n */\nexport function createInitCommand(): Command {\n return new Command('init')\n .description('Initialize DSAI configuration in your project')\n .option('-y, --yes', 'Skip prompts, use defaults', false)\n .option('-t, --template <template>', 'Config template (minimal|full|enterprise)', 'full')\n .option('--force', 'Overwrite existing configuration', false)\n .action(async (options: InitOptions & { force?: boolean }, command: Command) => {\n const globalOpts = command.parent?.opts() ?? {};\n const mergedOpts = { ...globalOpts, ...options };\n\n const cwd = resolve(mergedOpts.cwd ?? process.cwd());\n const projectInfo = detectProject(cwd);\n\n // Handle force flag for existing config\n if (projectInfo.existingConfigFile && mergedOpts.force) {\n projectInfo.existingConfigFile = undefined;\n }\n\n // Check if this is a valid project\n if (!projectInfo.isProject) {\n console.log();\n console.log(pc.yellow('ā No package.json found in this directory.'));\n console.log();\n console.log('To initialize DSAI in a new project, first run:');\n console.log(` ${pc.cyan('npm init')} (or pnpm init, yarn init, bun init)`);\n console.log();\n console.log('Then run:');\n console.log(` ${pc.cyan('dsai init')}`);\n console.log();\n process.exit(ExitCode.ConfigError);\n }\n\n // Check if the detected framework is supported\n // Currently only React and vanilla are supported\n // TODO: Add Vue, Angular, Svelte, Solid support (coming soon)\n if (!checkFrameworkSupport(projectInfo) && !mergedOpts.force) {\n process.exit(ExitCode.Success);\n }\n\n // Check if DSAI is already installed\n if (isDsaiInstalled(cwd) && !mergedOpts.force && !mergedOpts.yes) {\n console.log();\n console.log(pc.yellow('ā @dsai-io/tools is already installed in this project.'));\n console.log();\n console.log('To reconfigure, run:');\n console.log(` ${pc.cyan('dsai init --force')}`);\n console.log();\n process.exit(ExitCode.Success);\n }\n\n // Run appropriate init mode\n if (mergedOpts.yes) {\n await runQuickInit(\n cwd,\n projectInfo,\n (mergedOpts.template as 'minimal' | 'full' | 'enterprise') ?? 'full'\n );\n } else {\n // Interactive mode with clack prompts\n console.clear();\n p.intro(pc.bgCyan(pc.black(' DSAI Tools Setup ')));\n await runInteractiveInit(cwd, projectInfo);\n }\n\n process.exit(ExitCode.Success);\n });\n}\n","/**\n * Config command\n *\n * Display resolved configuration.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/commands/config\n */\n\nimport { Command } from 'commander';\n\nimport { loadConfig } from '../../config/index.js';\nimport { ExitCode } from '../types.js';\nimport { colors, createLogger, createSpinner } from '../ui/index.js';\n\nimport type { ConfigOptions } from '../types.js';\n\n/**\n * Create config command\n *\n * @returns Commander command for config display\n */\nexport function createConfigCommand(): Command {\n return new Command('config')\n .description('Display resolved configuration')\n .option('--json', 'Output as JSON', false)\n .action(async (options: ConfigOptions, command: Command) => {\n const globalOpts = command.parent?.opts() ?? {};\n const mergedOpts = { ...globalOpts, ...options } as ConfigOptions;\n\n await runConfig(mergedOpts);\n });\n}\n\n/**\n * Run config display\n */\nasync function runConfig(options: ConfigOptions): Promise<void> {\n const logger = createLogger({\n quiet: options.quiet,\n debug: options.debug,\n });\n const spinner = createSpinner(options.quiet);\n\n try {\n spinner.start('Loading configuration...');\n const { config, configPath } = await loadConfig({\n cwd: options.cwd,\n configPath: options.config,\n });\n spinner.stop();\n\n if (options.json) {\n // Output as JSON for machine consumption\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(config, null, 2));\n } else {\n // Human-readable output\n // eslint-disable-next-line no-console\n console.log();\n // eslint-disable-next-line no-console\n console.log(colors.bold('DSAI Configuration'));\n // eslint-disable-next-line no-console\n console.log(colors.muted('ā'.repeat(50)));\n // eslint-disable-next-line no-console\n console.log();\n\n // Config file location\n // eslint-disable-next-line no-console\n console.log(`${colors.label('Config file:')} ${colors.path(configPath ?? 'defaults')}`);\n // eslint-disable-next-line no-console\n console.log();\n\n // Global settings\n // eslint-disable-next-line no-console\n console.log(colors.bold('Global'));\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Debug:')} ${config.global.debug}`);\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Log level:')} ${config.global.logLevel}`);\n // eslint-disable-next-line no-console\n console.log();\n\n // Token settings\n // eslint-disable-next-line no-console\n console.log(colors.bold('Tokens'));\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Source:')} ${colors.path(config.tokens.sourceDir)}`);\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Output:')} ${colors.path(config.tokens.outputDir)}`);\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Prefix:')} ${config.tokens.prefix}`);\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Base font size:')} ${config.tokens.baseFontSize}px`);\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Output references:')} ${config.tokens.outputReferences}`);\n // eslint-disable-next-line no-console\n console.log();\n\n // Icons settings\n // eslint-disable-next-line no-console\n console.log(colors.bold('Icons'));\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Source:')} ${colors.path(config.icons.sourceDir)}`);\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Output:')} ${colors.path(config.icons.outputDir)}`);\n // eslint-disable-next-line no-console\n console.log(` ${colors.muted('Optimize:')} ${config.icons.optimize}`);\n // eslint-disable-next-line no-console\n console.log();\n }\n\n process.exit(ExitCode.Success);\n } catch (error) {\n spinner.fail('Failed to load configuration');\n\n if (error instanceof Error) {\n logger.error(error.message);\n }\n\n process.exit(ExitCode.ConfigError);\n }\n}\n","/**\n * Package version\n */\nexport const version = '0.0.1';\n","/**\n * CLI program creation\n *\n * Sets up the main Commander program with global options and help formatting.\n *\n * @packageDocumentation\n * @module @dsai-io/tools/cli/create-program\n */\n\nimport { Command } from 'commander';\n\nimport { version } from '../version.js';\n\nimport { colors } from './ui/index.js';\n\n/**\n * Create the main CLI program\n *\n * @returns Configured Commander program\n */\nexport function createProgram(): Command {\n const program = new Command()\n .name('dsai')\n .description(\n `${colors.bold('DSAI Tools')} - Design System AI Toolkit\\n\\n` +\n 'Build, validate, and manage design tokens and icons.'\n )\n .version(version, '-v, --version', 'Show version number')\n .helpOption('-h, --help', 'Show help')\n .configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n });\n\n // Global options available to all commands\n program\n .option('-c, --config <path>', 'Path to config file')\n .option('--cwd <dir>', 'Working directory', process.cwd())\n .option('--debug', 'Enable debug mode', false)\n .option('-q, --quiet', 'Quiet mode - minimal output', false)\n .option('--dry-run', \"Dry run - don't write files\", false);\n\n // Custom help formatting with examples\n program.addHelpText(\n 'after',\n `\n${colors.bold('Examples:')}\n ${colors.muted('# Initialize configuration')}\n $ dsai init\n\n ${colors.muted('# Build all tokens')}\n $ dsai tokens build\n\n ${colors.muted('# Validate tokens with fixes')}\n $ dsai tokens validate --fix\n\n ${colors.muted('# Build icons as React components')}\n $ dsai icons build --format react\n\n ${colors.muted('# Show resolved configuration')}\n $ dsai config\n\n${colors.bold('Documentation:')}\n ${colors.cyan('https://github.com/michelve/dsai')}\n`\n );\n\n return program;\n}\n\n/**\n * Setup error handling for the program\n *\n * @param program - Commander program instance\n */\nexport function setupErrorHandling(program: Command): void {\n // Handle unknown commands\n program.on('command:*', ([cmd]) => {\n console.error(`${colors.error('Error:')} Unknown command '${cmd}'.\\n`);\n console.error(`Run ${colors.command('dsai --help')} for available commands.\\n`);\n process.exit(1);\n });\n\n // Show suggestions for misspelled commands\n program.showSuggestionAfterError(true);\n\n // Show help after errors\n program.showHelpAfterError(true);\n}\n","/**\n * CLI module for @dsai-io/tools\n *\n * Provides the command-line interface for the dsai-tools package.\n * Uses Commander.js for command parsing, with spinners and colored output.\n *\n * Commands:\n * - tokens: Build, validate, and sync design tokens\n * - icons: Generate icon components from SVG files\n * - init: Initialize configuration in a project\n * - config: Display resolved configuration\n *\n * @example\n * ```bash\n * # Build tokens\n * dsai tokens build\n *\n * # Validate tokens\n * dsai tokens validate\n *\n * # Initialize a new project\n * dsai init --template full\n *\n * # Show configuration\n * dsai config --json\n * ```\n */\n\nimport {\n createConfigCommand,\n createIconsCommand,\n createInitCommand,\n createTokensCommand,\n} from './commands/index.js';\nimport { createProgram, setupErrorHandling } from './create-program.js';\n\nimport type { Command } from 'commander';\n\n/**\n * CLI program instance - exposed for testing\n */\nlet program: Command;\n\n/**\n * Configure and run the CLI\n *\n * Sets up the Commander program with all commands and parses arguments.\n *\n * @param args - Command line arguments (defaults to process.argv)\n */\nexport async function run(args: string[] = process.argv): Promise<void> {\n program = createProgram();\n\n // Add commands\n program.addCommand(createTokensCommand());\n program.addCommand(createIconsCommand());\n program.addCommand(createInitCommand());\n program.addCommand(createConfigCommand());\n\n // Set up error handling for unknown commands\n setupErrorHandling(program);\n\n // Parse and execute\n await program.parseAsync(args);\n}\n\n/**\n * Get the CLI program instance\n *\n * Used for testing to access the configured Commander program.\n *\n * @returns The Commander program instance\n */\nexport function getProgram(): Command {\n return program;\n}\n\n/**\n * Re-export types for consumers\n */\nexport type {\n BuildResult,\n CLIContext,\n CommandHandler,\n GlobalOptions,\n IconsBuildOptions,\n InitOptions,\n Logger,\n Spinner,\n SyncResult,\n TokensBuildOptions,\n TokensSyncOptions,\n TokensValidateOptions,\n ValidationResult,\n} from './types.js';\n\nexport { ExitCode } from './types.js';\n\n/**\n * Re-export UI utilities\n */\nexport {\n colors,\n createLogger,\n createSpinner,\n formatBytes,\n formatCount,\n formatDuration,\n} from './ui/index.js';\n"]}
|