@dsai-io/tools 0.0.1 → 1.0.7

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.
Files changed (40) hide show
  1. package/README.md +282 -30
  2. package/dist/cli/index.cjs +6271 -2233
  3. package/dist/cli/index.cjs.map +1 -1
  4. package/dist/cli/index.d.cts +4 -0
  5. package/dist/cli/index.d.ts +4 -0
  6. package/dist/cli/index.js +6232 -2195
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/config/index.cjs +198 -61
  9. package/dist/config/index.cjs.map +1 -1
  10. package/dist/config/index.d.cts +490 -1759
  11. package/dist/config/index.d.ts +490 -1759
  12. package/dist/config/index.js +197 -61
  13. package/dist/config/index.js.map +1 -1
  14. package/dist/icons/index.cjs +1 -1
  15. package/dist/icons/index.cjs.map +1 -1
  16. package/dist/icons/index.d.cts +1 -1
  17. package/dist/icons/index.d.ts +1 -1
  18. package/dist/icons/index.js +1 -1
  19. package/dist/icons/index.js.map +1 -1
  20. package/dist/index.cjs +6733 -2888
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +3 -3
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.js +6774 -2963
  25. package/dist/index.js.map +1 -1
  26. package/dist/tokens/index.cjs +4457 -737
  27. package/dist/tokens/index.cjs.map +1 -1
  28. package/dist/tokens/index.d.cts +1258 -17
  29. package/dist/tokens/index.d.ts +1258 -17
  30. package/dist/tokens/index.js +4368 -683
  31. package/dist/tokens/index.js.map +1 -1
  32. package/dist/{types-Idj08nad.d.cts → types-DabOzcsj.d.cts} +236 -3
  33. package/dist/{types-Idj08nad.d.ts → types-DabOzcsj.d.ts} +236 -3
  34. package/dist/utils/circuit-breaker.cjs +173 -0
  35. package/dist/utils/circuit-breaker.cjs.map +1 -0
  36. package/dist/utils/circuit-breaker.d.cts +123 -0
  37. package/dist/utils/circuit-breaker.d.ts +123 -0
  38. package/dist/utils/circuit-breaker.js +169 -0
  39. package/dist/utils/circuit-breaker.js.map +1 -0
  40. package/package.json +10 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/schema.ts","../../src/config/defaults.ts","../../src/config/resolver.ts","../../src/config/loader.ts","../../src/config/env.ts","../../src/config/migrate.ts"],"names":["z","path","cosmiconfig","cosmiconfigSync"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\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 * @fileoverview Environment variable parsing for DSAI Tools configuration\n *\n * Reads configuration values from environment variables and converts\n * them to the appropriate types.\n *\n * @module @dsai-io/tools/config/env\n */\n\nimport { envArrayKeys, envBooleanKeys, envMappings, envNumberKeys } from './defaults.js';\n\nimport type { DsaiConfig } from './types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Options for parsing environment variables\n */\nexport interface EnvParseOptions {\n /** Environment object to read from (default: process.env) */\n env?: NodeJS.ProcessEnv;\n\n /** Prefix filter for environment variables */\n prefix?: string;\n}\n\n// ============================================================================\n// Parsing Functions\n// ============================================================================\n\n/**\n * Parse a boolean from environment variable value\n *\n * @param value - Environment variable value\n * @returns Parsed boolean or undefined\n */\nfunction parseBoolean(value: string | undefined): boolean | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const normalized = value.toLowerCase().trim();\n\n if (normalized === 'true' || normalized === '1' || normalized === 'yes') {\n return true;\n }\n\n if (normalized === 'false' || normalized === '0' || normalized === 'no') {\n return false;\n }\n\n return undefined;\n}\n\n/**\n * Parse a number from environment variable value\n *\n * @param value - Environment variable value\n * @returns Parsed number or undefined\n */\nfunction parseNumber(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const num = Number(value);\n return Number.isNaN(num) ? undefined : num;\n}\n\n/**\n * Parse an array from environment variable value (comma-separated)\n *\n * @param value - Environment variable value\n * @returns Parsed array or undefined\n */\nfunction parseArray(value: string | undefined): string[] | undefined {\n if (value === undefined || value.trim() === '') {\n return undefined;\n }\n\n return value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n}\n\n/**\n * Set a nested value in an object using dot notation path\n *\n * @param obj - Object to modify\n * @param path - Dot notation path (e.g., 'global.logLevel')\n * @param value - Value to set\n */\nfunction setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {\n const parts = path.split('.');\n\n if (parts.length === 1) {\n const key = parts[0];\n if (key !== undefined) {\n Object.defineProperty(obj, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n return;\n }\n\n if (parts.length === 2) {\n const [first, second] = parts;\n if (first !== undefined && second !== undefined) {\n if (!(first in obj)) {\n Object.defineProperty(obj, first, {\n value: {},\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n const nested = obj[first] as Record<string, unknown>;\n Object.defineProperty(nested, second, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n return;\n }\n\n if (parts.length === 3) {\n const [first, second, third] = parts;\n if (first !== undefined && second !== undefined && third !== undefined) {\n if (!(first in obj)) {\n Object.defineProperty(obj, first, {\n value: {},\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n const nested1 = obj[first] as Record<string, unknown>;\n if (!(second in nested1)) {\n Object.defineProperty(nested1, second, {\n value: {},\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n const nested2 = nested1[second] as Record<string, unknown>;\n Object.defineProperty(nested2, third, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n // For paths deeper than 3 levels, we don't support them in config\n}\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Read configuration values from environment variables\n *\n * Parses environment variables according to the mappings defined in defaults.ts.\n * Supports string, boolean, number, and array types.\n *\n * @param options - Parse options\n * @returns Partial configuration object from environment\n *\n * @example\n * ```typescript\n * // Read from process.env\n * const envConfig = getConfigFromEnv();\n *\n * // Read from custom env object\n * const envConfig = getConfigFromEnv({\n * env: { DSAI_LOG_LEVEL: 'debug' }\n * });\n * ```\n */\nexport function getConfigFromEnv(options: EnvParseOptions = {}): Partial<DsaiConfig> {\n const env = options.env ?? process.env;\n const prefix = options.prefix ?? 'DSAI_';\n\n const config: Record<string, unknown> = {};\n\n for (const [envKey, configPath] of Object.entries(envMappings)) {\n // Check prefix filter\n if (!envKey.startsWith(prefix)) {\n continue;\n }\n\n const envValue = env[envKey];\n if (envValue === undefined) {\n continue;\n }\n\n let parsedValue: unknown;\n\n // Parse based on expected type\n if (envBooleanKeys.has(envKey)) {\n parsedValue = parseBoolean(envValue);\n } else if (envNumberKeys.has(envKey)) {\n parsedValue = parseNumber(envValue);\n } else if (envArrayKeys.has(envKey)) {\n parsedValue = parseArray(envValue);\n } else {\n // Default to string\n parsedValue = envValue;\n }\n\n // Only set if we got a valid value\n if (parsedValue !== undefined) {\n setNestedValue(config, configPath, parsedValue);\n }\n }\n\n return config as Partial<DsaiConfig>;\n}\n\n/**\n * Check if running in CI environment\n *\n * Checks common CI environment variables.\n *\n * @param env - Environment object to check\n * @returns True if CI environment detected\n */\nexport function isCI(env: NodeJS.ProcessEnv = process.env): boolean {\n return (\n env['CI'] === 'true' ||\n env['CONTINUOUS_INTEGRATION'] === 'true' ||\n env['GITHUB_ACTIONS'] === 'true' ||\n env['GITLAB_CI'] === 'true' ||\n env['CIRCLECI'] === 'true' ||\n env['TRAVIS'] === 'true' ||\n env['BUILDKITE'] === 'true' ||\n env['JENKINS_URL'] !== undefined ||\n env['TF_BUILD'] === 'True'\n );\n}\n\n/**\n * Check if colors should be disabled based on environment\n *\n * @param env - Environment object to check\n * @returns True if colors should be disabled\n */\nexport function shouldDisableColors(env: NodeJS.ProcessEnv = process.env): boolean {\n return env['NO_COLOR'] !== undefined || env['FORCE_COLOR'] === '0' || env['TERM'] === 'dumb';\n}\n\n/**\n * Get the effective log level from environment\n *\n * Checks DSAI_LOG_LEVEL, DEBUG, and VERBOSE env vars.\n *\n * @param env - Environment object to check\n * @returns Log level string or undefined\n */\nexport function getLogLevelFromEnv(env: NodeJS.ProcessEnv = process.env): string | undefined {\n const dsaiLogLevel = env['DSAI_LOG_LEVEL'];\n const dsaiDebug = env['DSAI_DEBUG'];\n const debug = env['DEBUG'];\n const verbose = env['VERBOSE'];\n\n // Explicit DSAI log level takes precedence\n if (dsaiLogLevel) {\n return dsaiLogLevel;\n }\n\n // Check for debug mode\n if (dsaiDebug === 'true' || debug?.includes('dsai')) {\n return 'debug';\n }\n\n // Check for verbose mode\n if (verbose === 'true') {\n return 'verbose';\n }\n\n return undefined;\n}\n\n/**\n * Get environment-based overrides for configuration\n *\n * This combines all environment-based settings into a single override object.\n *\n * @param env - Environment object to check\n * @returns Configuration overrides from environment\n */\nexport function getEnvOverrides(env: NodeJS.ProcessEnv = process.env): Partial<DsaiConfig> {\n const config = getConfigFromEnv({ env });\n\n // Apply CI detection\n if (isCI(env) && !config.global) {\n config.global = { debug: false };\n }\n\n // Apply log level from various sources\n const logLevel = getLogLevelFromEnv(env);\n if (logLevel) {\n config.global = {\n ...config.global,\n logLevel: logLevel as 'silent' | 'error' | 'warn' | 'info' | 'debug',\n };\n }\n\n return config;\n}\n","/**\n * Legacy configuration migration utilities\n *\n * Provides migration support for older config formats and helps users\n * upgrade to the latest configuration schema.\n *\n * @packageDocumentation\n */\n\nimport type { DsaiConfig, TokensConfig } from './types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Legacy tokens.config.json format (v0.x)\n */\ninterface LegacyTokensConfig {\n /** Source directory for tokens */\n source?: string;\n /** Output directory */\n output?: string;\n /** CSS prefix */\n prefix?: string;\n /** Output formats */\n formats?: string[];\n /** Theme configuration */\n themes?: {\n default?: string;\n modes?: string[];\n };\n}\n\n/**\n * Result of migration check\n */\nexport interface MigrationCheck {\n /** Whether migration is needed */\n needsMigration: boolean;\n /** Detected config version or format */\n detectedFormat: ConfigFormat;\n /** Warnings about deprecated options */\n warnings: string[];\n /** Suggested migration steps */\n suggestions: string[];\n}\n\n/**\n * Supported configuration formats\n */\nexport type ConfigFormat =\n | 'current' // dsai.config.mjs/js/ts\n | 'legacy-tokens' // tokens.config.json (v0.x)\n | 'unknown';\n\n// ============================================================================\n// Migration Detection\n// ============================================================================\n\n/**\n * Check if a configuration needs migration\n *\n * @param config - Raw configuration object\n * @param filename - Optional filename for format detection\n * @returns Migration check result\n *\n * @example\n * ```typescript\n * const check = checkMigrationNeeded(oldConfig, 'tokens.config.json');\n * if (check.needsMigration) {\n * console.log('Migration needed:', check.suggestions);\n * }\n * ```\n */\nexport function checkMigrationNeeded(config: unknown, filename?: string): MigrationCheck {\n const warnings: string[] = [];\n const suggestions: string[] = [];\n\n // Check filename for legacy format\n if (filename?.includes('tokens.config.json')) {\n warnings.push('tokens.config.json is deprecated. Please migrate to dsai.config.mjs.');\n suggestions.push('Run: npx @dsai-io/tools migrate to automatically migrate your config.');\n\n return {\n needsMigration: true,\n detectedFormat: 'legacy-tokens',\n warnings,\n suggestions,\n };\n }\n\n // Check for legacy structure\n if (isLegacyTokensConfig(config)) {\n warnings.push('Legacy configuration format detected. Some options may be deprecated.');\n suggestions.push('Consider updating to the new configuration format.');\n\n return {\n needsMigration: true,\n detectedFormat: 'legacy-tokens',\n warnings,\n suggestions,\n };\n }\n\n return {\n needsMigration: false,\n detectedFormat: 'current',\n warnings,\n suggestions,\n };\n}\n\n/**\n * Type guard for legacy tokens config\n */\nfunction isLegacyTokensConfig(config: unknown): config is LegacyTokensConfig {\n if (typeof config !== 'object' || config === null) {\n return false;\n }\n\n const obj = config as Record<string, unknown>;\n\n // Legacy format has 'output' instead of 'outputDir'\n // and 'source' as a string path instead of structured source config\n return (\n typeof obj['output'] === 'string' ||\n (typeof obj['source'] === 'string' && !('sourceDir' in obj))\n );\n}\n\n// ============================================================================\n// Migration Functions\n// ============================================================================\n\n/**\n * Migrate legacy tokens.config.json to new format\n *\n * @param legacy - Legacy configuration object\n * @returns Migrated configuration\n *\n * @example\n * ```typescript\n * const oldConfig = require('./tokens.config.json');\n * const newConfig = migrateLegacyTokensConfig(oldConfig);\n * ```\n */\nexport function migrateLegacyTokensConfig(legacy: LegacyTokensConfig): DsaiConfig {\n const tokens: TokensConfig = {};\n\n // Migrate source → sourceDir\n if (legacy.source !== undefined && legacy.source !== null) {\n tokens.sourceDir = legacy.source;\n }\n\n // Migrate output → outputDir\n if (legacy.output !== undefined && legacy.output !== null) {\n tokens.outputDir = legacy.output;\n }\n\n // Direct migrations\n if (legacy.prefix !== undefined && legacy.prefix !== null) {\n tokens.prefix = legacy.prefix;\n }\n\n if (Array.isArray(legacy.formats)) {\n // Filter to only valid formats\n const validFormats = ['css', 'scss', 'js', 'ts', 'json', 'android', 'ios'] as const;\n tokens.formats = legacy.formats.filter((f): f is (typeof validFormats)[number] =>\n validFormats.includes(f as (typeof validFormats)[number])\n );\n }\n\n // Migrate themes\n if (legacy.themes !== undefined && legacy.themes !== null) {\n tokens.themes = {\n default: legacy.themes.default ?? 'Light',\n // ignoreModes can be derived from modes if needed\n };\n }\n\n return { tokens };\n}\n\n/**\n * Migrate any legacy configuration to current format\n *\n * @param config - Raw configuration (any format)\n * @param filename - Optional filename for format detection\n * @returns Migrated configuration and warnings\n *\n * @example\n * ```typescript\n * const { config, warnings } = migrateConfig(rawConfig, 'tokens.config.json');\n * if (warnings.length > 0) {\n * warnings.forEach(w => console.warn(w));\n * }\n * ```\n */\nexport function migrateConfig(\n config: unknown,\n filename?: string\n): { config: DsaiConfig; warnings: string[] } {\n const check = checkMigrationNeeded(config, filename);\n\n if (!check.needsMigration) {\n return {\n config: config as DsaiConfig,\n warnings: check.warnings,\n };\n }\n\n switch (check.detectedFormat) {\n case 'legacy-tokens':\n return {\n config: migrateLegacyTokensConfig(config as LegacyTokensConfig),\n warnings: check.warnings,\n };\n\n default:\n return {\n config: config as DsaiConfig,\n warnings: [...check.warnings, 'Unknown config format - using as-is.'],\n };\n }\n}\n\n// ============================================================================\n// Deprecation Warnings\n// ============================================================================\n\n/**\n * Check for deprecated options in a configuration\n *\n * @param config - Configuration to check\n * @returns Array of deprecation warnings\n */\nexport function checkDeprecatedOptions(config: DsaiConfig): string[] {\n const warnings: string[] = [];\n\n // Check tokens.output (legacy)\n const configAny = config as Record<string, unknown>;\n const tokens = configAny['tokens'] as Record<string, unknown> | undefined;\n\n if (tokens !== undefined) {\n if ('output' in tokens) {\n warnings.push(\n `Deprecated: Use 'tokens.outputDir' instead of 'tokens.output' (tokens.outputDir)`\n );\n }\n if ('source' in tokens && typeof tokens['source'] === 'string') {\n warnings.push(\n `Deprecated: Use 'tokens.sourceDir' instead of 'tokens.source' for directory paths (tokens.sourceDir)`\n );\n }\n }\n\n return warnings;\n}\n\n/**\n * Generate migration script content\n *\n * @param _oldConfig - Old configuration (unused, reserved for future use)\n * @param newConfig - Migrated configuration\n * @returns String content for new config file\n */\nexport function generateMigrationScript(_oldConfig: unknown, newConfig: DsaiConfig): string {\n const configJson = JSON.stringify(newConfig, null, '\\t');\n\n return `// @ts-check\n/**\n * DSAI Configuration\n *\n * Migrated from legacy format.\n * Please review and adjust as needed.\n *\n * @type {import('@dsai-io/tools').DsaiConfig}\n */\nimport { defineConfig } from '@dsai-io/tools';\n\nexport default defineConfig(${configJson.replace(/\"([^\"]+)\":/g, '$1:')});\n`;\n}\n"]}
1
+ {"version":3,"sources":["../../src/config/schema.ts","../../src/config/defaults.ts","../../src/config/resolver.ts","../../src/config/loader.ts","../../src/config/env.ts","../../src/config/migrate.ts"],"names":["z","path","cosmiconfig","cosmiconfigSync"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\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().optional(),\n filter: z.function().optional(),\n matcher: z.function().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().optional(),\n extension: z.string().min(1).optional(),\n});\n\n// ============================================================================\n// Theme Configuration Schemas\n// ============================================================================\n\n/**\n * Output format enum for validation\n */\nconst outputFormatEnum = z.enum(['css', 'scss', 'js', 'ts', 'json', 'android', 'ios']);\n\n/**\n * Theme definition schema\n * Defines how a single theme is discovered and built\n */\nexport const themeDefinitionSchema = z.object({\n isDefault: z.boolean().optional().default(false),\n suffix: z.string().nullable().optional(),\n selector: z.string().min(1, 'Theme selector is required'),\n mediaQuery: z.string().optional(),\n dataAttribute: z.string().optional(),\n outputFiles: z.record(outputFormatEnum, z.string()).optional(),\n});\n\n/**\n * Theme selector pattern schema\n */\nexport const themeSelectorPatternSchema = z.object({\n default: z.string().optional().default(':root'),\n others: z.string().optional().default('[data-dsai-theme=\"{mode}\"]'),\n});\n\n/**\n * Themes configuration section\n * Supports both legacy mode-based config and new definitions-based config\n */\nexport const themesConfigSchema = z.object({\n enabled: z.boolean().optional().default(true),\n autoDetect: z.boolean().optional().default(true),\n default: z.string().optional().default('light'),\n ignoreModes: z.array(z.string()).optional().default([]),\n selectorPattern: themeSelectorPatternSchema.optional(),\n definitions: z.record(z.string(), themeDefinitionSchema).optional(),\n\n // Legacy fields (for backward compatibility)\n defaultMode: z.enum(['light', 'dark', 'system']).optional(),\n modes: z\n .record(\n z.string(),\n z.object({\n selector: z.string().min(1),\n mediaQuery: z.string().optional(),\n dataAttribute: z.string().optional(),\n cssVariables: z.boolean().optional(),\n generateSeparateFiles: z.boolean().optional(),\n prefix: z.string().optional(),\n })\n )\n .optional(),\n outputFileName: z.string().optional(),\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.function().optional(),\n header: z.string().optional(),\n footer: z.string().optional(),\n});\n\n/**\n * Postprocess configuration for CSS files\n */\nexport const postprocessConfigSchema = z.object({\n enabled: z.boolean().optional(),\n cssDir: z.string().optional(),\n files: z.array(z.string()).optional(),\n replacements: z\n .array(\n z.object({\n description: z.string().optional(),\n from: z.union([z.string(), z.instanceof(RegExp)]),\n to: z.string(),\n })\n )\n .optional(),\n});\n\n/**\n * SCSS/CSS output configuration for token builds\n */\nexport const scssConfigSchema = z.object({\n /** Output styles to generate: 'expanded' (readable) or 'compressed' (minified) */\n outputStyles: z.array(z.enum(['expanded', 'compressed'])).optional(),\n /** Generate source maps for SCSS compilation */\n generateSourceMaps: z.boolean().optional(),\n /** Suffix for minified files (e.g., '.min') */\n minifiedSuffix: z.string().optional(),\n /** Theme entry point SCSS file */\n themeEntry: z.string().optional(),\n /** Utilities entry point SCSS file */\n utilitiesEntry: z.string().optional(),\n /** Output directory for compiled CSS files */\n cssOutputDir: z.string().optional(),\n /** Additional Sass load paths */\n loadPaths: z.array(z.string()).optional(),\n /** Target CSS framework for variable name mapping */\n framework: z.enum(['bootstrap', 'tailwind', 'material', 'custom']).optional(),\n /** Custom token to variable name mappings */\n nameMapping: z.record(z.string(), z.string()).optional(),\n /** Output path for Bootstrap-compatible SCSS variables */\n variablesOutput: 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.function().optional(),\n onFormatComplete: z.function().optional(),\n onAllFormatsComplete: z.function().optional(),\n onBuildComplete: z.function().optional(),\n onError: z.function().optional(),\n});\n\n/**\n * Build pipeline step names\n */\nexport const buildPipelineStepSchema = z.enum([\n 'validate',\n 'snapshot',\n 'preprocess',\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.array(buildPipelineStepSchema).optional(),\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(),\n /** Target file for sync step */\n syncTarget: z.string().optional(),\n /** SCSS theme input file */\n sassThemeInput: z.string().optional(),\n /** CSS theme output file */\n sassThemeOutput: z.string().optional(),\n /** CSS theme minified output file */\n sassThemeMinifiedOutput: z.string().optional(),\n /** SCSS utilities input file */\n sassUtilitiesInput: z.string().optional(),\n /** CSS utilities output file */\n sassUtilitiesOutput: z.string().optional(),\n /** CSS utilities minified output file */\n sassUtilitiesMinifiedOutput: z.string().optional(),\n })\n .optional(),\n\n /** Style Dictionary config file name */\n styleDictionaryConfig: z.string().optional(),\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 /** SCSS/CSS output configuration */\n scss: scssConfigSchema.optional(),\n /** Build pipeline configuration */\n pipeline: tokensBuildPipelineSchema.optional(),\n /** Postprocess configuration */\n postprocess: postprocessConfigSchema.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.issues.map((err: z.ZodIssue) => ({\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 ResolvedThemeDefinition,\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 theme definitions\n * Provides light and dark themes out of the box\n */\nexport const defaultThemeDefinitions: Record<string, ResolvedThemeDefinition> = {\n light: {\n isDefault: true,\n suffix: null,\n selector: ':root',\n outputFiles: {\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 dark: {\n isDefault: false,\n suffix: '-dark',\n selector: '[data-dsai-theme=\"dark\"]',\n mediaQuery: '(prefers-color-scheme: dark)',\n outputFiles: {\n css: 'tokens-dark.css',\n scss: '_tokens-dark.scss',\n js: 'tokens-dark.js',\n ts: 'tokens-dark.ts',\n json: 'tokens-dark.json',\n android: 'tokens-dark.xml',\n ios: 'tokens-dark.h',\n },\n },\n};\n\n/**\n * Default resolved themes configuration\n */\nexport const defaultThemesConfig: ResolvedThemesConfig = {\n enabled: true,\n autoDetect: true,\n default: 'light',\n ignoreModes: [],\n selectorPattern: defaultSelectorPattern,\n definitions: defaultThemeDefinitions,\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 defaultOutputFileNames,\n defaultThemeDefinitions,\n defaultThemesConfig,\n defaultTokensConfig,\n} from './defaults.js';\n\nimport type {\n DsaiConfig,\n GlobalConfig,\n IconsConfig,\n OutputFormat,\n ResolvedConfig,\n ResolvedGlobalConfig,\n ResolvedIconsConfig,\n ResolvedThemeDefinition,\n ResolvedThemesConfig,\n ResolvedTokensConfig,\n ThemeDefinition,\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 a single theme definition\n */\nfunction resolveThemeDefinition(\n themeName: string,\n definition: ThemeDefinition | undefined,\n selectorPattern: { default: string; others: string },\n _outputFileNames: Record<OutputFormat, string>,\n isDefaultTheme: boolean\n): ResolvedThemeDefinition {\n // Generate default output files based on theme name\n const generateOutputFiles = (): Record<OutputFormat, string> => {\n const suffix = isDefaultTheme ? '' : `-${themeName}`;\n return {\n css: `tokens${suffix}.css`,\n scss: `_tokens${suffix}.scss`,\n js: `tokens${suffix}.js`,\n ts: `tokens${suffix}.ts`,\n json: `tokens${suffix}.json`,\n android: `tokens${suffix}.xml`,\n ios: `tokens${suffix}.h`,\n };\n };\n\n // Generate default selector based on pattern\n const generateSelector = (): string => {\n if (isDefaultTheme) {\n return selectorPattern.default;\n }\n return selectorPattern.others.replace('{mode}', themeName);\n };\n\n const defaultOutputFiles = generateOutputFiles();\n\n return {\n isDefault: definition?.isDefault ?? isDefaultTheme,\n suffix: definition?.suffix ?? (isDefaultTheme ? null : `-${themeName}`),\n selector: definition?.selector ?? generateSelector(),\n mediaQuery: definition?.mediaQuery,\n dataAttribute: definition?.dataAttribute,\n outputFiles: {\n ...defaultOutputFiles,\n ...definition?.outputFiles,\n },\n };\n}\n\n/**\n * Resolve themes configuration section\n */\nfunction resolveThemesConfig(config: ThemesConfig | undefined): ResolvedThemesConfig {\n const base = defaultThemesConfig;\n\n const selectorPattern = {\n default: config?.selectorPattern?.default ?? base.selectorPattern.default,\n others: config?.selectorPattern?.others ?? base.selectorPattern.others,\n };\n\n // Determine the default theme name\n const defaultThemeName = config?.default?.toLowerCase() ?? base.default;\n\n // Resolve definitions\n let definitions: Record<string, ResolvedThemeDefinition>;\n\n if (config?.definitions && Object.keys(config.definitions).length > 0) {\n // User provided explicit definitions\n definitions = {};\n for (const [themeName, definition] of Object.entries(config.definitions)) {\n const normalizedName = themeName.toLowerCase();\n const isDefaultTheme = definition.isDefault ?? normalizedName === defaultThemeName;\n const resolvedDef = resolveThemeDefinition(\n normalizedName,\n definition,\n selectorPattern,\n defaultOutputFileNames,\n isDefaultTheme\n );\n Object.defineProperty(definitions, normalizedName, {\n value: resolvedDef,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n } else {\n // Use default definitions (light & dark)\n definitions = { ...defaultThemeDefinitions };\n }\n\n return {\n enabled: config?.enabled ?? base.enabled,\n autoDetect: config?.autoDetect ?? base.autoDetect,\n default: defaultThemeName,\n ignoreModes: config?.ignoreModes ?? [...base.ignoreModes],\n selectorPattern,\n definitions,\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 scss: config?.scss,\n postprocess: config?.postprocess,\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 * @fileoverview Environment variable parsing for DSAI Tools configuration\n *\n * Reads configuration values from environment variables and converts\n * them to the appropriate types.\n *\n * @module @dsai-io/tools/config/env\n */\n\nimport { envArrayKeys, envBooleanKeys, envMappings, envNumberKeys } from './defaults.js';\n\nimport type { DsaiConfig } from './types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Options for parsing environment variables\n */\nexport interface EnvParseOptions {\n /** Environment object to read from (default: process.env) */\n env?: NodeJS.ProcessEnv;\n\n /** Prefix filter for environment variables */\n prefix?: string;\n}\n\n// ============================================================================\n// Parsing Functions\n// ============================================================================\n\n/**\n * Parse a boolean from environment variable value\n *\n * @param value - Environment variable value\n * @returns Parsed boolean or undefined\n */\nfunction parseBoolean(value: string | undefined): boolean | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const normalized = value.toLowerCase().trim();\n\n if (normalized === 'true' || normalized === '1' || normalized === 'yes') {\n return true;\n }\n\n if (normalized === 'false' || normalized === '0' || normalized === 'no') {\n return false;\n }\n\n return undefined;\n}\n\n/**\n * Parse a number from environment variable value\n *\n * @param value - Environment variable value\n * @returns Parsed number or undefined\n */\nfunction parseNumber(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const num = Number(value);\n return Number.isNaN(num) ? undefined : num;\n}\n\n/**\n * Parse an array from environment variable value (comma-separated)\n *\n * @param value - Environment variable value\n * @returns Parsed array or undefined\n */\nfunction parseArray(value: string | undefined): string[] | undefined {\n if (value === undefined || value.trim() === '') {\n return undefined;\n }\n\n return value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n}\n\n/**\n * Set a nested value in an object using dot notation path\n *\n * @param obj - Object to modify\n * @param path - Dot notation path (e.g., 'global.logLevel')\n * @param value - Value to set\n */\nfunction setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {\n const parts = path.split('.');\n\n if (parts.length === 1) {\n const key = parts[0];\n if (key !== undefined) {\n Object.defineProperty(obj, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n return;\n }\n\n if (parts.length === 2) {\n const [first, second] = parts;\n if (first !== undefined && second !== undefined) {\n if (!(first in obj)) {\n Object.defineProperty(obj, first, {\n value: {},\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n const nested = Reflect.get(obj, first) as Record<string, unknown>;\n Object.defineProperty(nested, second, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n return;\n }\n\n if (parts.length === 3) {\n const [first, second, third] = parts;\n if (first !== undefined && second !== undefined && third !== undefined) {\n if (!(first in obj)) {\n Object.defineProperty(obj, first, {\n value: {},\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n const nested1 = Reflect.get(obj, first) as Record<string, unknown>;\n if (!(second in nested1)) {\n Object.defineProperty(nested1, second, {\n value: {},\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n const nested2 = Reflect.get(nested1, second) as Record<string, unknown>;\n Object.defineProperty(nested2, third, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n // For paths deeper than 3 levels, we don't support them in config\n}\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Read configuration values from environment variables\n *\n * Parses environment variables according to the mappings defined in defaults.ts.\n * Supports string, boolean, number, and array types.\n *\n * @param options - Parse options\n * @returns Partial configuration object from environment\n *\n * @example\n * ```typescript\n * // Read from process.env\n * const envConfig = getConfigFromEnv();\n *\n * // Read from custom env object\n * const envConfig = getConfigFromEnv({\n * env: { DSAI_LOG_LEVEL: 'debug' }\n * });\n * ```\n */\nexport function getConfigFromEnv(options: EnvParseOptions = {}): Partial<DsaiConfig> {\n const env = options.env ?? process.env;\n const prefix = options.prefix ?? 'DSAI_';\n\n const config: Record<string, unknown> = {};\n\n for (const [envKey, configPath] of Object.entries(envMappings)) {\n // Check prefix filter\n if (!envKey.startsWith(prefix)) {\n continue;\n }\n\n const envValue = Reflect.get(env, envKey) as string | undefined;\n if (envValue === undefined) {\n continue;\n }\n\n let parsedValue: unknown;\n\n // Parse based on expected type\n if (envBooleanKeys.has(envKey)) {\n parsedValue = parseBoolean(envValue);\n } else if (envNumberKeys.has(envKey)) {\n parsedValue = parseNumber(envValue);\n } else if (envArrayKeys.has(envKey)) {\n parsedValue = parseArray(envValue);\n } else {\n // Default to string\n parsedValue = envValue;\n }\n\n // Only set if we got a valid value\n if (parsedValue !== undefined) {\n setNestedValue(config, configPath, parsedValue);\n }\n }\n\n return config as Partial<DsaiConfig>;\n}\n\n/**\n * Check if running in CI environment\n *\n * Checks common CI environment variables.\n *\n * @param env - Environment object to check\n * @returns True if CI environment detected\n */\nexport function isCI(env: NodeJS.ProcessEnv = process.env): boolean {\n return (\n env['CI'] === 'true' ||\n env['CONTINUOUS_INTEGRATION'] === 'true' ||\n env['GITHUB_ACTIONS'] === 'true' ||\n env['GITLAB_CI'] === 'true' ||\n env['CIRCLECI'] === 'true' ||\n env['TRAVIS'] === 'true' ||\n env['BUILDKITE'] === 'true' ||\n env['JENKINS_URL'] !== undefined ||\n env['TF_BUILD'] === 'True'\n );\n}\n\n/**\n * Check if colors should be disabled based on environment\n *\n * @param env - Environment object to check\n * @returns True if colors should be disabled\n */\nexport function shouldDisableColors(env: NodeJS.ProcessEnv = process.env): boolean {\n return env['NO_COLOR'] !== undefined || env['FORCE_COLOR'] === '0' || env['TERM'] === 'dumb';\n}\n\n/**\n * Get the effective log level from environment\n *\n * Checks DSAI_LOG_LEVEL, DEBUG, and VERBOSE env vars.\n *\n * @param env - Environment object to check\n * @returns Log level string or undefined\n */\nexport function getLogLevelFromEnv(env: NodeJS.ProcessEnv = process.env): string | undefined {\n const dsaiLogLevel = env['DSAI_LOG_LEVEL'];\n const dsaiDebug = env['DSAI_DEBUG'];\n const debug = env['DEBUG'];\n const verbose = env['VERBOSE'];\n\n // Explicit DSAI log level takes precedence\n if (dsaiLogLevel) {\n return dsaiLogLevel;\n }\n\n // Check for debug mode\n if (dsaiDebug === 'true' || debug?.includes('dsai')) {\n return 'debug';\n }\n\n // Check for verbose mode\n if (verbose === 'true') {\n return 'verbose';\n }\n\n return undefined;\n}\n\n/**\n * Get environment-based overrides for configuration\n *\n * This combines all environment-based settings into a single override object.\n *\n * @param env - Environment object to check\n * @returns Configuration overrides from environment\n */\nexport function getEnvOverrides(env: NodeJS.ProcessEnv = process.env): Partial<DsaiConfig> {\n const config = getConfigFromEnv({ env });\n\n // Apply CI detection\n if (isCI(env) && !config.global) {\n config.global = { debug: false };\n }\n\n // Apply log level from various sources\n const logLevel = getLogLevelFromEnv(env);\n if (logLevel) {\n config.global = {\n ...config.global,\n logLevel: logLevel as 'silent' | 'error' | 'warn' | 'info' | 'debug',\n };\n }\n\n return config;\n}\n","/**\n * Legacy configuration migration utilities\n *\n * Provides migration support for older config formats and helps users\n * upgrade to the latest configuration schema.\n *\n * @packageDocumentation\n */\n\nimport type { DsaiConfig, TokensConfig } from './types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Legacy tokens.config.json format (v0.x)\n */\ninterface LegacyTokensConfig {\n /** Source directory for tokens */\n source?: string;\n /** Output directory */\n output?: string;\n /** CSS prefix */\n prefix?: string;\n /** Output formats */\n formats?: string[];\n /** Theme configuration */\n themes?: {\n default?: string;\n modes?: string[];\n };\n}\n\n/**\n * Result of migration check\n */\nexport interface MigrationCheck {\n /** Whether migration is needed */\n needsMigration: boolean;\n /** Detected config version or format */\n detectedFormat: ConfigFormat;\n /** Warnings about deprecated options */\n warnings: string[];\n /** Suggested migration steps */\n suggestions: string[];\n}\n\n/**\n * Supported configuration formats\n */\nexport type ConfigFormat =\n | 'current' // dsai.config.mjs/js/ts\n | 'legacy-tokens' // tokens.config.json (v0.x)\n | 'unknown';\n\n// ============================================================================\n// Migration Detection\n// ============================================================================\n\n/**\n * Check if a configuration needs migration\n *\n * @param config - Raw configuration object\n * @param filename - Optional filename for format detection\n * @returns Migration check result\n *\n * @example\n * ```typescript\n * const check = checkMigrationNeeded(oldConfig, 'tokens.config.json');\n * if (check.needsMigration) {\n * console.log('Migration needed:', check.suggestions);\n * }\n * ```\n */\nexport function checkMigrationNeeded(config: unknown, filename?: string): MigrationCheck {\n const warnings: string[] = [];\n const suggestions: string[] = [];\n\n // Check filename for legacy format\n if (filename?.includes('tokens.config.json')) {\n warnings.push('tokens.config.json is deprecated. Please migrate to dsai.config.mjs.');\n suggestions.push('Run: npx @dsai-io/tools migrate to automatically migrate your config.');\n\n return {\n needsMigration: true,\n detectedFormat: 'legacy-tokens',\n warnings,\n suggestions,\n };\n }\n\n // Check for legacy structure\n if (isLegacyTokensConfig(config)) {\n warnings.push('Legacy configuration format detected. Some options may be deprecated.');\n suggestions.push('Consider updating to the new configuration format.');\n\n return {\n needsMigration: true,\n detectedFormat: 'legacy-tokens',\n warnings,\n suggestions,\n };\n }\n\n return {\n needsMigration: false,\n detectedFormat: 'current',\n warnings,\n suggestions,\n };\n}\n\n/**\n * Type guard for legacy tokens config\n */\nfunction isLegacyTokensConfig(config: unknown): config is LegacyTokensConfig {\n if (typeof config !== 'object' || config === null) {\n return false;\n }\n\n const obj = config as Record<string, unknown>;\n\n // Legacy format has 'output' instead of 'outputDir'\n // and 'source' as a string path instead of structured source config\n return (\n typeof obj['output'] === 'string' ||\n (typeof obj['source'] === 'string' && !('sourceDir' in obj))\n );\n}\n\n// ============================================================================\n// Migration Functions\n// ============================================================================\n\n/**\n * Migrate legacy tokens.config.json to new format\n *\n * @param legacy - Legacy configuration object\n * @returns Migrated configuration\n *\n * @example\n * ```typescript\n * const oldConfig = require('./tokens.config.json');\n * const newConfig = migrateLegacyTokensConfig(oldConfig);\n * ```\n */\nexport function migrateLegacyTokensConfig(legacy: LegacyTokensConfig): DsaiConfig {\n const tokens: TokensConfig = {};\n\n // Migrate source → sourceDir\n if (legacy.source !== undefined && legacy.source !== null) {\n tokens.sourceDir = legacy.source;\n }\n\n // Migrate output → outputDir\n if (legacy.output !== undefined && legacy.output !== null) {\n tokens.outputDir = legacy.output;\n }\n\n // Direct migrations\n if (legacy.prefix !== undefined && legacy.prefix !== null) {\n tokens.prefix = legacy.prefix;\n }\n\n if (Array.isArray(legacy.formats)) {\n // Filter to only valid formats\n const validFormats = ['css', 'scss', 'js', 'ts', 'json', 'android', 'ios'] as const;\n tokens.formats = legacy.formats.filter((f): f is (typeof validFormats)[number] =>\n validFormats.includes(f as (typeof validFormats)[number])\n );\n }\n\n // Migrate themes\n if (legacy.themes !== undefined && legacy.themes !== null) {\n tokens.themes = {\n default: legacy.themes.default ?? 'Light',\n // ignoreModes can be derived from modes if needed\n };\n }\n\n return { tokens };\n}\n\n/**\n * Migrate any legacy configuration to current format\n *\n * @param config - Raw configuration (any format)\n * @param filename - Optional filename for format detection\n * @returns Migrated configuration and warnings\n *\n * @example\n * ```typescript\n * const { config, warnings } = migrateConfig(rawConfig, 'tokens.config.json');\n * if (warnings.length > 0) {\n * warnings.forEach(w => console.warn(w));\n * }\n * ```\n */\nexport function migrateConfig(\n config: unknown,\n filename?: string\n): { config: DsaiConfig; warnings: string[] } {\n const check = checkMigrationNeeded(config, filename);\n\n if (!check.needsMigration) {\n return {\n config: config as DsaiConfig,\n warnings: check.warnings,\n };\n }\n\n switch (check.detectedFormat) {\n case 'legacy-tokens':\n return {\n config: migrateLegacyTokensConfig(config as LegacyTokensConfig),\n warnings: check.warnings,\n };\n\n default:\n return {\n config: config as DsaiConfig,\n warnings: [...check.warnings, 'Unknown config format - using as-is.'],\n };\n }\n}\n\n// ============================================================================\n// Deprecation Warnings\n// ============================================================================\n\n/**\n * Check for deprecated options in a configuration\n *\n * @param config - Configuration to check\n * @returns Array of deprecation warnings\n */\nexport function checkDeprecatedOptions(config: DsaiConfig): string[] {\n const warnings: string[] = [];\n\n // Check tokens.output (legacy)\n const configAny = config as Record<string, unknown>;\n const tokens = configAny['tokens'] as Record<string, unknown> | undefined;\n\n if (tokens !== undefined) {\n if ('output' in tokens) {\n warnings.push(\n `Deprecated: Use 'tokens.outputDir' instead of 'tokens.output' (tokens.outputDir)`\n );\n }\n if ('source' in tokens && typeof tokens['source'] === 'string') {\n warnings.push(\n `Deprecated: Use 'tokens.sourceDir' instead of 'tokens.source' for directory paths (tokens.sourceDir)`\n );\n }\n }\n\n return warnings;\n}\n\n/**\n * Generate migration script content\n *\n * @param _oldConfig - Old configuration (unused, reserved for future use)\n * @param newConfig - Migrated configuration\n * @returns String content for new config file\n */\nexport function generateMigrationScript(_oldConfig: unknown, newConfig: DsaiConfig): string {\n const configJson = JSON.stringify(newConfig, null, '\\t');\n\n return `// @ts-check\n/**\n * DSAI Configuration\n *\n * Migrated from legacy format.\n * Please review and adjust as needed.\n *\n * @type {import('@dsai-io/tools').DsaiConfig}\n */\nimport { defineConfig } from '@dsai-io/tools';\n\nexport default defineConfig(${configJson.replace(/\"([^\"]+)\":/g, '$1:')});\n`;\n}\n"]}