dispersa 1.2.0 → 1.3.0

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 (90) hide show
  1. package/README.md +1 -2
  2. package/dist/{builders.d.cts → builders-B7_pBy58.d.cts} +180 -6
  3. package/dist/{builders.d.ts → builders-BEoMaLal.d.ts} +180 -6
  4. package/dist/{types-8MLtztK3.d.ts → config-schemas-DnEBhIg0.d.cts} +1 -158
  5. package/dist/{types-BHBHRm0a.d.cts → config-schemas-DnEBhIg0.d.ts} +1 -158
  6. package/dist/dispersa-DF2ZkG2O.d.ts +567 -0
  7. package/dist/dispersa-DJeCN0cP.d.cts +567 -0
  8. package/dist/index.cjs +2117 -2098
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +7 -7
  11. package/dist/index.d.ts +7 -7
  12. package/dist/index.js +2117 -2098
  13. package/dist/index.js.map +1 -1
  14. package/dist/{lint.cjs → lint/index.cjs} +2 -2
  15. package/dist/lint/index.cjs.map +1 -0
  16. package/dist/{lint.d.ts → lint/index.d.cts} +8 -7
  17. package/dist/{lint.d.cts → lint/index.d.ts} +8 -7
  18. package/dist/{lint.js → lint/index.js} +2 -2
  19. package/dist/lint/index.js.map +1 -0
  20. package/dist/{renderers.d.ts → output-tree-BRbfWSmG.d.ts} +3 -10
  21. package/dist/{renderers.d.cts → output-tree-Hmi77EMv.d.cts} +3 -10
  22. package/dist/{builders.cjs → outputs/builders.cjs} +30 -30
  23. package/dist/outputs/builders.cjs.map +1 -0
  24. package/dist/outputs/builders.d.cts +7 -0
  25. package/dist/outputs/builders.d.ts +7 -0
  26. package/dist/{builders.js → outputs/builders.js} +30 -30
  27. package/dist/outputs/builders.js.map +1 -0
  28. package/dist/outputs/index.cjs +3750 -0
  29. package/dist/outputs/index.cjs.map +1 -0
  30. package/dist/outputs/index.d.cts +73 -0
  31. package/dist/outputs/index.d.ts +73 -0
  32. package/dist/outputs/index.js +3730 -0
  33. package/dist/outputs/index.js.map +1 -0
  34. package/dist/{filters.cjs → processing/filters/index.cjs} +24 -18
  35. package/dist/processing/filters/index.cjs.map +1 -0
  36. package/dist/processing/filters/index.d.cts +36 -0
  37. package/dist/processing/filters/index.d.ts +36 -0
  38. package/dist/{filters.js → processing/filters/index.js} +24 -18
  39. package/dist/processing/filters/index.js.map +1 -0
  40. package/dist/{preprocessors.cjs → processing/preprocessors/index.cjs} +3 -3
  41. package/dist/processing/preprocessors/index.cjs.map +1 -0
  42. package/dist/processing/preprocessors/index.d.cts +29 -0
  43. package/dist/processing/preprocessors/index.d.ts +29 -0
  44. package/dist/{preprocessors.js → processing/preprocessors/index.js} +3 -3
  45. package/dist/processing/preprocessors/index.js.map +1 -0
  46. package/dist/{transforms.cjs → processing/transforms/index.cjs} +2 -7
  47. package/dist/processing/transforms/index.cjs.map +1 -0
  48. package/dist/{transforms.d.ts → processing/transforms/index.d.cts} +2 -2
  49. package/dist/{transforms.d.cts → processing/transforms/index.d.ts} +2 -2
  50. package/dist/{transforms.js → processing/transforms/index.js} +2 -7
  51. package/dist/processing/transforms/index.js.map +1 -0
  52. package/dist/{errors.cjs → shared/errors/index.cjs} +12 -2
  53. package/dist/shared/errors/index.cjs.map +1 -0
  54. package/dist/{errors-qT4sJgSA.d.ts → shared/errors/index.d.cts} +11 -2
  55. package/dist/{errors-qT4sJgSA.d.cts → shared/errors/index.d.ts} +11 -2
  56. package/dist/{errors.js → shared/errors/index.js} +12 -3
  57. package/dist/shared/errors/index.js.map +1 -0
  58. package/dist/types-B0cI70Bt.d.cts +453 -0
  59. package/dist/types-BxDEUCos.d.ts +453 -0
  60. package/dist/types-DUc4vLZH.d.cts +36 -0
  61. package/dist/types-s3UoDRKl.d.ts +36 -0
  62. package/package.json +26 -36
  63. package/dist/android-CRDfSB3_.d.cts +0 -126
  64. package/dist/android-DANJjjPO.d.ts +0 -126
  65. package/dist/builders.cjs.map +0 -1
  66. package/dist/builders.js.map +0 -1
  67. package/dist/dispersa-BC1kDF5u.d.ts +0 -118
  68. package/dist/dispersa-DL3J_Pmz.d.cts +0 -118
  69. package/dist/errors.cjs.map +0 -1
  70. package/dist/errors.d.cts +0 -1
  71. package/dist/errors.d.ts +0 -1
  72. package/dist/errors.js.map +0 -1
  73. package/dist/filters.cjs.map +0 -1
  74. package/dist/filters.d.cts +0 -83
  75. package/dist/filters.d.ts +0 -83
  76. package/dist/filters.js.map +0 -1
  77. package/dist/index-Dajm5rvM.d.ts +0 -895
  78. package/dist/index-De6SjZYH.d.cts +0 -895
  79. package/dist/lint.cjs.map +0 -1
  80. package/dist/lint.js.map +0 -1
  81. package/dist/preprocessors.cjs.map +0 -1
  82. package/dist/preprocessors.d.cts +0 -17
  83. package/dist/preprocessors.d.ts +0 -17
  84. package/dist/preprocessors.js.map +0 -1
  85. package/dist/renderers.cjs +0 -28
  86. package/dist/renderers.cjs.map +0 -1
  87. package/dist/renderers.js +0 -24
  88. package/dist/renderers.js.map +0 -1
  89. package/dist/transforms.cjs.map +0 -1
  90. package/dist/transforms.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shared/errors/index.ts","../src/shared/utils/token-utils.ts","../src/shared/utils/validation-handler.ts","../src/validation/dtcg-schemas/2025.10/format/group.json","../src/validation/dtcg-schemas/2025.10/format/groupOrToken.json","../src/validation/dtcg-schemas/2025.10/format/token.json","../src/validation/dtcg-schemas/2025.10/format/tokenType.json","../src/validation/dtcg-schemas/2025.10/format/values/border.json","../src/validation/dtcg-schemas/2025.10/format/values/color.json","../src/validation/dtcg-schemas/2025.10/format/values/cubicBezier.json","../src/validation/dtcg-schemas/2025.10/format/values/dimension.json","../src/validation/dtcg-schemas/2025.10/format/values/duration.json","../src/validation/dtcg-schemas/2025.10/format/values/fontFamily.json","../src/validation/dtcg-schemas/2025.10/format/values/fontWeight.json","../src/validation/dtcg-schemas/2025.10/format/values/gradient.json","../src/validation/dtcg-schemas/2025.10/format/values/number.json","../src/validation/dtcg-schemas/2025.10/format/values/shadow.json","../src/validation/dtcg-schemas/2025.10/format/values/strokeStyle.json","../src/validation/dtcg-schemas/2025.10/format/values/transition.json","../src/validation/dtcg-schemas/2025.10/format/values/typography.json","../src/validation/dtcg-schemas/2025.10/format.json","../src/validation/dtcg-schemas/2025.10/resolver/modifier.json","../src/validation/dtcg-schemas/2025.10/resolver/resolutionOrder.json","../src/validation/dtcg-schemas/2025.10/resolver/set.json","../src/validation/dtcg-schemas/2025.10/resolver.json","../src/validation/schemas.ts","../src/validation/config-schemas.ts","../src/validation/validator.ts","../src/validation/index.ts","../src/adapters/filesystem/resolver-parser.ts","../src/adapters/filesystem/resolver-loader.ts","../src/renderers/bundlers/utils.ts","../src/renderers/metadata.ts","../src/renderers/bundlers/js.ts","../src/renderers/bundlers/json.ts","../src/codegen/type-generator.ts","../src/adapters/filesystem/type-writer.ts","../src/build/build-orchestrator.ts","../src/shared/utils/error-utils.ts","../src/adapters/filesystem/file-utils.ts","../src/processing/apply.ts","../src/build/output-processor.ts","../src/renderers/output-tree.ts","../src/build/pipeline/token-pipeline.ts","../src/lint/plugin-loader.ts","../src/lint/lint-runner.ts","../src/shared/constants.ts","../src/resolution/alias-resolver.ts","../src/shared/utils/string-similarity.ts","../src/resolution/reference-resolver.ts","../src/resolution/resolution-engine.ts","../src/shared/utils/case-insensitive-map.ts","../src/resolution/modifier-input-processor.ts","../src/tokens/token-parser.ts","../src/shared/utils/path-utils.ts","../src/tokens/group-extension-resolver.ts","../src/dispersa.ts","../src/tokens/types.ts","../src/processing/transforms/built-in/name-transforms.ts","../src/processing/transforms/built-in/color-converter.ts","../src/processing/transforms/built-in/dimension-converter.ts","../src/processing/transforms/built-in/duration-converter.ts","../src/renderers/android.ts","../src/renderers/css.ts","../src/renderers/bundlers/css.ts","../src/renderers/ios.ts","../src/renderers/js-module.ts","../src/renderers/json.ts","../src/renderers/tailwind.ts","../src/renderers/bundlers/tailwind.ts","../src/builders.ts","../src/renderers/types.ts","../src/index.ts"],"names":["DispersaError","TokenReferenceError","CircularReferenceError","ValidationError","FileOperationError","ConfigurationError","BasePermutationError","ModifierError","LintError","path","Ajv","addFormats","tokenErrors","path2","access","fsConstants","readFile","resolverDoc","path3","ResolverLoader","indentStr","mkdir","writeFile","permutations","path4","path5","process","isAbsolute","resolve","createJiti","require","createRequire","JsonPointer","resolved","path6","kebabCase","formatHex8","formatHex","converter","r","g","b","css","prettier","toSRGB","toP3","bundleAsJsModule","bundleAsJson"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @fileoverview Custom error classes for Dispersa\n *\n * Error classes are intentionally kept as simple value objects with no\n * imports from utility modules. Suggestion formatting is done at call\n * sites to keep the error hierarchy dependency-free.\n */\n\n/**\n * Base error class for all Dispersa errors\n */\nexport class DispersaError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'DispersaError'\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n}\n\n/**\n * Thrown when a token reference cannot be resolved\n *\n * @param referenceName - The token name that could not be found\n * @param suggestions - Similar token names for \"did you mean?\" hints\n * @param message - Optional custom message (overrides auto-generated message)\n */\nexport class TokenReferenceError extends DispersaError {\n constructor(\n public referenceName: string,\n public suggestions: string[] = [],\n message?: string,\n ) {\n const hint = TokenReferenceError.formatHint(suggestions)\n super(\n message ??\n `Token reference resolution failed: '${referenceName}'. Token does not exist.${hint}`,\n )\n this.name = 'TokenReferenceError'\n }\n\n private static formatHint(suggestions: string[]): string {\n if (suggestions.length === 0) {\n return ''\n }\n if (suggestions.length === 1) {\n return ` Did you mean \"${suggestions[0]}\"?`\n }\n const quoted = suggestions.map((s) => `\"${s}\"`)\n const last = quoted.pop()!\n return ` Did you mean ${quoted.join(', ')} or ${last}?`\n }\n}\n\n/**\n * Thrown when a circular reference is detected\n */\nexport class CircularReferenceError extends DispersaError {\n constructor(\n public tokenName: string,\n public referencePath: string[],\n ) {\n super(\n `Token resolution failed: '${tokenName}'. Circular reference detected in path: ${referencePath.join(' -> ')}`,\n )\n this.name = 'CircularReferenceError'\n }\n}\n\n/**\n * Thrown when validation fails\n */\nexport class ValidationError extends DispersaError {\n constructor(\n message: string,\n public errors: { message: string; path?: string }[],\n ) {\n super(message)\n this.name = 'ValidationError'\n }\n}\n\n/**\n * Thrown when file operations fail\n */\nexport class FileOperationError extends DispersaError {\n constructor(\n public operation: 'read' | 'write',\n public filePath: string,\n public originalError: Error,\n ) {\n super(`Failed to ${operation} file: ${filePath}. ${originalError.message}`)\n this.name = 'FileOperationError'\n }\n}\n\n/**\n * Thrown when a build configuration is invalid\n */\nexport class ConfigurationError extends DispersaError {\n constructor(message: string) {\n super(message)\n this.name = 'ConfigurationError'\n }\n}\n\n/**\n * Thrown when base permutation cannot be determined\n */\nexport class BasePermutationError extends DispersaError {\n constructor(\n message = 'Base permutation determination failed. Define a default modifier in resolver.',\n ) {\n super(message)\n this.name = 'BasePermutationError'\n }\n}\n\n/**\n * Thrown when an unknown modifier or context is used\n *\n * @param modifierName - Name of the modifier that failed validation\n * @param contextValue - The invalid context value (if applicable)\n * @param availableValues - Valid options (context names or modifier names) for the error message\n */\nexport class ModifierError extends DispersaError {\n constructor(\n public modifierName: string,\n public contextValue?: string,\n public availableValues: string[] = [],\n ) {\n const available = availableValues.length > 0 ? ` Available: ${availableValues.join(', ')}.` : ''\n\n const message =\n contextValue != null && contextValue !== ''\n ? `Modifier validation failed: '${modifierName}'. Invalid context '${contextValue}'.${available}`\n : `Modifier validation failed: '${modifierName}'. Modifier not defined in resolver.${available}`\n super(message)\n this.name = 'ModifierError'\n }\n}\n\n/**\n * Thrown when lint errors are found and failOnError is true\n *\n * @param issues - Array of lint issues that caused the error\n */\nexport class LintError extends DispersaError {\n constructor(\n public issues: Array<{\n ruleId: string\n severity: 'error' | 'warn'\n message: string\n tokenName: string\n tokenPath: string[]\n }>,\n ) {\n const errorCount = issues.filter((i) => i.severity === 'error').length\n const warningCount = issues.filter((i) => i.severity === 'warn').length\n super(`Lint failed with ${errorCount} error(s) and ${warningCount} warning(s).`)\n this.name = 'LintError'\n }\n}\n","/**\n * @fileoverview Token utility functions\n */\n\nimport type {\n InternalResolvedTokens,\n ResolvedToken,\n ResolvedTokens,\n TokenValue,\n} from '@tokens/types'\n\n/**\n * Format deprecation message for a token\n *\n * Generates a standardized deprecation message that can be used in comments,\n * descriptions, or warnings. Handles both boolean and string deprecation values.\n *\n * @param token - Token with optional deprecation information\n * @param description - Optional existing description to prepend deprecation info to\n * @param format - Output format: 'comment' for CSS comments, 'bracket' for [DEPRECATED] prefix\n * @returns Formatted deprecation message or description with deprecation prefix\n *\n * @example\n * ```typescript\n * // CSS comment format\n * formatDeprecationMessage(token, '', 'comment')\n * // Returns: \"DEPRECATED: Use new-token instead\"\n *\n * // Bracket format\n * formatDeprecationMessage(token, 'Primary color', 'bracket')\n * // Returns: \"[DEPRECATED: Use new-token instead] Primary color\"\n * ```\n */\nexport function formatDeprecationMessage(\n token: ResolvedToken,\n description: string = '',\n format: 'comment' | 'bracket' = 'bracket',\n): string {\n if (token.$deprecated == null || token.$deprecated === false) {\n return description\n }\n\n const deprecationMsg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n\n if (format === 'comment') {\n const msg = deprecationMsg ? ` ${deprecationMsg}` : ''\n return `DEPRECATED${msg}`\n }\n\n const msg = deprecationMsg ? `: ${deprecationMsg}` : ''\n const prefix = `[DEPRECATED${msg}]`\n return description ? `${prefix} ${description}` : prefix\n}\n\n/**\n * Strip internal metadata from tokens before public output\n */\nexport function stripInternalTokenMetadata(tokens: InternalResolvedTokens): ResolvedTokens {\n const cleaned: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n const { _isAlias: _alias, _sourceModifier: _source, _sourceSet: _sourceSet, ...rest } = token\n cleaned[name] = rest\n }\n\n return cleaned\n}\n\n/**\n * Get sorted token entries for deterministic output ordering\n */\nexport function getSortedTokenEntries(\n tokens: ResolvedTokens,\n): Array<[name: string, token: ResolvedToken]> {\n return Object.entries(tokens).sort(([nameA], [nameB]) => nameA.localeCompare(nameB))\n}\n\n/**\n * Build a nested object from resolved tokens using their path hierarchy.\n *\n * Shared between JSON and JS renderers that need to convert flat tokens\n * into nested structures matching the original token group hierarchy.\n *\n * @param tokens - Flat resolved tokens map\n * @param extractValue - Callback to extract the leaf value from each token\n * @returns Nested object mirroring the token path structure\n */\nexport function buildNestedTokenObject(\n tokens: ResolvedTokens,\n extractValue: (token: ResolvedToken) => unknown,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [, token] of getSortedTokenEntries(tokens)) {\n setNestedValue(result, token.path, extractValue(token))\n }\n return result\n}\n\nfunction setNestedValue(root: Record<string, unknown>, path: string[], value: unknown): void {\n let current = root\n\n for (let i = 0; i < path.length - 1; i++) {\n const part = path[i]\n if (part == null) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = path[path.length - 1]\n if (lastPart != null) {\n current[lastPart] = value\n }\n}\n\n/**\n * Check if a value looks like a DTCG token (has `$value` or `$ref` property).\n *\n * This is the base structural check shared by parsers, validators, and resolvers.\n * Individual modules may wrap this in a type-guard to narrow to their own token types.\n */\nexport function isTokenLike(value: unknown): boolean {\n return typeof value === 'object' && value !== null && ('$value' in value || '$ref' in value)\n}\n\n/**\n * Extract a pure alias reference name from a string value.\n *\n * Returns the inner token name for \"{token.name}\" inputs and undefined otherwise.\n */\nexport function getPureAliasReferenceName(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined\n }\n const match = /^\\{([^}]+)\\}$/.exec(value)\n return match?.[1]?.trim()\n}\n\nconst ROOT_REF_PATTERN = /\\.\\$root\\}/g\n\n/**\n * Rewrite `{foo.$root}` → `{foo}` inside alias reference strings.\n * Handles plain string values and composite objects with nested references.\n */\nexport function rewriteRootReferences(value: TokenValue): TokenValue {\n if (typeof value === 'string') {\n return ROOT_REF_PATTERN.test(value)\n ? (value.replace(ROOT_REF_PATTERN, '}') as TokenValue)\n : value\n }\n\n if (Array.isArray(value)) {\n let changed = false\n const mapped = value.map((item) => {\n const rewritten = rewriteRootReferences(item as TokenValue)\n if (rewritten !== item) {\n changed = true\n }\n return rewritten\n })\n return changed ? (mapped as TokenValue) : value\n }\n\n if (typeof value === 'object' && value !== null) {\n let changed = false\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value)) {\n const rewritten = rewriteRootReferences(v as TokenValue)\n if (rewritten !== v) {\n changed = true\n }\n result[k] = rewritten\n }\n return changed ? (result as TokenValue) : value\n }\n\n return value\n}\n","/**\n * @fileoverview Shared validation handler for consistent validation mode behavior\n *\n * Provides a single source of truth for validation mode checking, error handling,\n * and warning dispatch across all Dispersa components.\n */\n\nimport type { ValidationMode, ValidationOptions } from '@shared/types/validation'\n\n/**\n * Centralized validation handler that all components share.\n *\n * Caches the warning handler and mode at construction time so that\n * repeated calls avoid re-reading options on every invocation.\n */\nexport class ValidationHandler {\n private mode: ValidationMode\n\n constructor(options?: ValidationOptions) {\n this.mode = options?.mode ?? 'error'\n }\n\n /**\n * Whether validation checks should run (mode is not 'off')\n */\n shouldValidate(): boolean {\n return this.mode !== 'off'\n }\n\n /**\n * Whether the current mode is 'error' (strictest)\n */\n isStrict(): boolean {\n return this.mode === 'error'\n }\n\n /**\n * Handle a validation issue: throw in 'error' mode, warn in 'warn' mode, ignore in 'off' mode\n */\n handleIssue(error: Error): void {\n if (this.mode === 'error') {\n throw error\n }\n if (this.mode === 'warn') {\n // eslint-disable-next-line no-console\n console.warn(error.message)\n }\n }\n\n /**\n * Emit a warning (in 'error' and 'warn' modes, skip in 'off')\n */\n warn(message: string): void {\n if (this.mode === 'off') {\n return\n }\n // eslint-disable-next-line no-console\n console.warn(message)\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/group.json\",\n \"title\": \"Group\",\n \"description\": \"A group in the DTCG specification\",\n \"type\": \"object\",\n \"properties\": {\n \"$type\": {\n \"$ref\": \"tokenType.json\",\n \"description\": \"The type for tokens in this group (inherited by nested tokens unless overridden)\"\n },\n \"$description\": {\n \"type\": \"string\",\n \"description\": \"A plain text description of the group\"\n },\n \"$extensions\": {\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions\"\n },\n \"$extends\": {\n \"oneOf\": [\n {\n \"$ref\": \"../format.json#/definitions/curlyBraceReference\"\n },\n {\n \"$ref\": \"../format.json#/definitions/jsonPointerReference\"\n }\n ],\n \"description\": \"Reference to another group to inherit tokens and properties from\"\n },\n \"$deprecated\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Whether this group is deprecated\"\n },\n \"$root\": {\n \"description\": \"Root token for this group. The $root token provides a base value for the group while allowing for variants or extensions.\",\n \"$ref\": \"token.json\"\n }\n },\n \"patternProperties\": {\n \"^[^${}.][^{}.]*$\": {\n \"description\": \"Nested groups and tokens (see ../format.json#/definitions/tokenOrGroupName for pattern definition)\",\n \"$ref\": \"groupOrToken.json\"\n }\n },\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/groupOrToken.json\",\n \"title\": \"Group or Token\",\n \"description\": \"A group or a token in the DTCG specification. A token is identified by the presence of a $value property, while a group is any object without a $value property.\",\n \"oneOf\": [\n {\n \"$ref\": \"group.json\"\n },\n {\n \"$ref\": \"token.json\"\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/token.json\",\n \"title\": \"Token\",\n \"description\": \"A token in the DTCG specification\",\n \"type\": \"object\",\n \"properties\": {\n \"$value\": {\n \"description\": \"The token's value - can be a direct value or a reference to another token using curly brace syntax (e.g., '{token.name}'). Mutually exclusive with $ref.\"\n },\n \"$type\": {\n \"$ref\": \"tokenType.json\"\n },\n \"$ref\": {\n \"$ref\": \"../format.json#/definitions/jsonPointerReference\",\n \"description\": \"JSON Pointer reference (RFC 6901) for advanced referencing. Use this instead of $value for property-level references. Examples: '#/colors/blue/$value' or '#/colors/blue/$value/components/0'. Mutually exclusive with $value.\"\n },\n \"$description\": {\n \"type\": \"string\",\n \"description\": \"A plain text description of the token\"\n },\n \"$extensions\": {\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions\"\n },\n \"$deprecated\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Whether this token is deprecated\"\n }\n },\n \"additionalProperties\": false,\n \"allOf\": [\n {\n \"description\": \"Tokens cannot define both $value and $ref; they must choose exactly one form of reference or direct value.\",\n \"if\": {\n \"required\": [\"$value\"],\n \"properties\": {\n \"$value\": true\n }\n },\n \"then\": {\n \"not\": {\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": true\n }\n }\n },\n \"else\": {\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": true\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"color\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/color.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"dimension\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/dimension.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"fontFamily\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/fontFamily.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"fontWeight\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/fontWeight.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"duration\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/duration.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"cubicBezier\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/cubicBezier.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"number\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/number.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"strokeStyle\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/strokeStyle.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"border\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/border.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"transition\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/transition.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"shadow\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/shadow.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"gradient\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/gradient.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"typography\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/typography.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"allOf\": [\n {\n \"not\": {\n \"required\": [\"$type\"]\n }\n },\n {\n \"required\": [\"$value\"]\n },\n {\n \"properties\": {\n \"$value\": {\n \"not\": {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n }\n }\n }\n ]\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/color.json\"\n },\n {\n \"$ref\": \"values/dimension.json\"\n },\n {\n \"$ref\": \"values/fontFamily.json\"\n },\n {\n \"$ref\": \"values/duration.json\"\n },\n {\n \"$ref\": \"values/cubicBezier.json\"\n },\n {\n \"$ref\": \"values/strokeStyle.json\"\n },\n {\n \"$ref\": \"values/border.json\"\n },\n {\n \"$ref\": \"values/transition.json\"\n },\n {\n \"$ref\": \"values/shadow.json\"\n },\n {\n \"$ref\": \"values/gradient.json\"\n },\n {\n \"$ref\": \"values/typography.json\"\n },\n {\n \"anyOf\": [\n {\n \"$ref\": \"values/number.json\"\n },\n {\n \"$ref\": \"values/fontWeight.json\"\n }\n ]\n }\n ]\n }\n }\n }\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/tokenType.json\",\n \"title\": \"TokenType\",\n \"description\": \"A token type in the DTCG specification\",\n \"type\": \"string\",\n \"enum\": [\n \"color\",\n \"dimension\",\n \"fontFamily\",\n \"fontWeight\",\n \"duration\",\n \"cubicBezier\",\n \"number\",\n \"strokeStyle\",\n \"border\",\n \"transition\",\n \"shadow\",\n \"gradient\",\n \"typography\"\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/border.json\",\n \"title\": \"Border Value\",\n \"description\": \"Value schema for border type tokens. Represents a border style.\",\n \"type\": \"object\",\n \"properties\": {\n \"color\": {\n \"description\": \"The color of the border\",\n \"oneOf\": [\n {\n \"$ref\": \"color.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"width\": {\n \"description\": \"The width or thickness of the border\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"style\": {\n \"description\": \"The border's style\",\n \"oneOf\": [\n {\n \"$ref\": \"strokeStyle.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n },\n \"required\": [\"color\", \"width\", \"style\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/color.json\",\n \"title\": \"Color Value\",\n \"description\": \"Value schema for color type tokens. Represents a color in a specific color space.\",\n \"type\": \"object\",\n \"properties\": {\n \"colorSpace\": {\n \"description\": \"The color space or color model used to represent the color\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\n \"srgb\",\n \"srgb-linear\",\n \"hsl\",\n \"hwb\",\n \"lab\",\n \"lch\",\n \"oklab\",\n \"oklch\",\n \"display-p3\",\n \"a98-rgb\",\n \"prophoto-rgb\",\n \"rec2020\",\n \"xyz-d65\",\n \"xyz-d50\"\n ]\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"components\": {\n \"description\": \"Array of color components. The number and meaning of components depend on the color space. Each component can be a number or the 'none' keyword.\",\n \"oneOf\": [\n {\n \"type\": \"array\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"alpha\": {\n \"description\": \"The alpha (transparency) value of the color. 0 is fully transparent, 1 is fully opaque. If omitted, defaults to 1.\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"hex\": {\n \"description\": \"Optional fallback value in 6-digit CSS hex color notation (e.g., '#ff00ff'). Must be 6 digits to avoid conflicts with the alpha value.\",\n \"$comment\": \"Only JSON Pointer references (not curly brace references) are allowed for hex because no string token type exists in the specification that could be referenced with curly braces.\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"pattern\": \"^#[0-9a-fA-F]{6}$\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"colorSpace\", \"components\"],\n \"additionalProperties\": false,\n \"definitions\": {\n \"zeroToOneComponent\": {\n \"title\": \"Zero to One Component\",\n \"description\": \"A color component normalized to the range [0-1] (e.g., RGB values, XYZ values)\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"hueComponent\": {\n \"title\": \"Hue Component\",\n \"description\": \"Hue angle from 0 up to (but not including) 360 degrees\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"exclusiveMaximum\": 360\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"percentageComponent\": {\n \"title\": \"Percentage Component\",\n \"description\": \"Percentage value from 0 to 100\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 100\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"chromaComponent\": {\n \"title\": \"Chroma Component\",\n \"description\": \"Chroma value from 0 to infinity\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"unboundedComponent\": {\n \"title\": \"Unbounded Component\",\n \"description\": \"A color component with no numeric bounds (e.g., A and B in LAB/OKLAB color spaces)\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"rgbComponents\": {\n \"title\": \"RGB Components\",\n \"description\": \"Array of RGB color components [Red, Green, Blue], each normalized to the range [0-1]\",\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Red: A number between 0 and 1 representing the red component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Green: A number between 0 and 1 representing the green component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Blue: A number between 0 and 1 representing the blue component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n }\n ]\n },\n \"xyzComponents\": {\n \"title\": \"XYZ Components\",\n \"description\": \"Array of XYZ color components [X, Y, Z], each normalized to the range [0-1]\",\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"X: A number between 0 and 1 representing the X component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Y: A number between 0 and 1 representing the Y component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Z: A number between 0 and 1 representing the Z component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n }\n ]\n }\n },\n \"allOf\": [\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"srgb\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"srgb-linear\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"display-p3\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"a98-rgb\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"prophoto-rgb\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"rec2020\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"xyz-d65\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/xyzComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"xyz-d50\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/xyzComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"hsl\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Hue: A number from 0 up to (but not including) 360 representing the hue angle of the color on the color wheel\",\n \"$ref\": \"#/definitions/hueComponent\"\n },\n {\n \"description\": \"Saturation: A number between 0 and 100 representing the percentage of color saturation\",\n \"$ref\": \"#/definitions/percentageComponent\"\n },\n {\n \"description\": \"Lightness: A number between 0 and 100 representing the percentage of lightness\",\n \"$ref\": \"#/definitions/percentageComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"hwb\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Hue: A number from 0 up to (but not including) 360 representing the angle of the color on the color wheel\",\n \"$ref\": \"#/definitions/hueComponent\"\n },\n {\n \"description\": \"Whiteness: A number between 0 and 100 representing the percentage of white in the color\",\n \"$ref\": \"#/definitions/percentageComponent\"\n },\n {\n \"description\": \"Blackness: A number between 0 and 100 representing the percentage of black in the color\",\n \"$ref\": \"#/definitions/percentageComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"lab\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Lightness: A number between 0 and 100 representing the percentage of lightness of the color\",\n \"$ref\": \"#/definitions/percentageComponent\"\n },\n {\n \"description\": \"A: A signed number representing the green-red axis of the color. Unbounded but in practice doesn't exceed -160 to 160\",\n \"$ref\": \"#/definitions/unboundedComponent\"\n },\n {\n \"description\": \"B: A signed number representing the blue-yellow axis of the color. Unbounded but in practice doesn't exceed -160 to 160\",\n \"$ref\": \"#/definitions/unboundedComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"lch\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Lightness: A number between 0 and 100 representing the percentage of lightness of the color\",\n \"$ref\": \"#/definitions/percentageComponent\"\n },\n {\n \"description\": \"Chroma: A number representing the chroma of the color. Unbounded but in practice doesn't exceed 230\",\n \"$ref\": \"#/definitions/chromaComponent\"\n },\n {\n \"description\": \"Hue: A number from 0 up to (but not including) 360 representing the angle of the color on the color wheel\",\n \"$ref\": \"#/definitions/hueComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"oklab\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Lightness: A number between 0 and 1 representing the lightness of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"A: A signed number representing the green-red axis of the color. Unbounded but in practice doesn't exceed -0.5 to 0.5\",\n \"$ref\": \"#/definitions/unboundedComponent\"\n },\n {\n \"description\": \"B: A signed number representing the blue-yellow axis of the color. Unbounded but in practice doesn't exceed -0.5 to 0.5\",\n \"$ref\": \"#/definitions/unboundedComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"oklch\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Lightness: A number between 0 and 1 representing the lightness of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Chroma: A number representing the chroma of the color. Unbounded but in practice doesn't exceed 0.5\",\n \"$ref\": \"#/definitions/chromaComponent\"\n },\n {\n \"description\": \"Hue: A number from 0 up to (but not including) 360 representing the angle of the color on the color wheel\",\n \"$ref\": \"#/definitions/hueComponent\"\n }\n ]\n }\n }\n }\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/cubicBezier.json\",\n \"title\": \"Cubic Bezier Value\",\n \"description\": \"Value schema for cubicBezier type tokens. Represents how the value of an animated property progresses towards completion over the duration of an animation, effectively creating visual effects such as acceleration, deceleration, and bounce.\",\n \"type\": \"array\",\n \"items\": [\n {\n \"$ref\": \"#/definitions/xCoordinate\",\n \"description\": \"P1x - X coordinate of first control point\"\n },\n {\n \"$ref\": \"#/definitions/yCoordinate\",\n \"description\": \"P1y - Y coordinate of first control point\"\n },\n {\n \"$ref\": \"#/definitions/xCoordinate\",\n \"description\": \"P2x - X coordinate of second control point\"\n },\n {\n \"$ref\": \"#/definitions/yCoordinate\",\n \"description\": \"P2y - Y coordinate of second control point\"\n }\n ],\n \"additionalItems\": false,\n \"minItems\": 4,\n \"maxItems\": 4,\n \"definitions\": {\n \"xCoordinate\": {\n \"title\": \"X Coordinate\",\n \"description\": \"X coordinate of control point (must be between 0 and 1)\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"yCoordinate\": {\n \"title\": \"Y Coordinate\",\n \"description\": \"Y coordinate of control point (can be any real number)\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/dimension.json\",\n \"title\": \"Dimension Value\",\n \"description\": \"Value schema for dimension type tokens. Represents an amount of distance in a single dimension in the UI, such as a position, width, height, radius, or thickness.\",\n \"type\": \"object\",\n \"properties\": {\n \"value\": {\n \"description\": \"An integer or floating-point value representing the numeric value.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"unit\": {\n \"description\": \"Unit of distance. Supported values: 'px' (idealized pixel, equivalent to dp on Android and pt on iOS), 'rem' (multiple of system's default font size).\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"px\", \"rem\"]\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"value\", \"unit\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/duration.json\",\n \"title\": \"Duration Value\",\n \"description\": \"Value schema for duration type tokens. Represents the length of time in milliseconds an animation or animation cycle takes to complete.\",\n \"type\": \"object\",\n \"properties\": {\n \"value\": {\n \"description\": \"An integer or floating-point value representing the numeric value.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"unit\": {\n \"description\": \"Unit of time. Supported values: 'ms' (millisecond), 's' (second).\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"ms\", \"s\"]\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"value\", \"unit\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/fontFamily.json\",\n \"title\": \"Font Family Value\",\n \"description\": \"Value schema for fontFamily type tokens. Represents a font name or an array of font names (ordered from most to least preferred).\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"description\": \"A single font name\",\n \"not\": {\n \"$ref\": \"../../format.json#/definitions/curlyBraceReference\"\n }\n },\n {\n \"type\": \"array\",\n \"description\": \"An array of font names, ordered from most to least preferred\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"not\": {\n \"$ref\": \"../../format.json#/definitions/curlyBraceReference\"\n }\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"minItems\": 1\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/fontWeight.json\",\n \"title\": \"Font Weight Value\",\n \"description\": \"Value schema for fontWeight type tokens. Represents a font weight as per the OpenType wght tag specification. Lower numbers represent lighter weights, higher numbers represent thicker weights.\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"description\": \"Numeric font weight value\",\n \"minimum\": 1,\n \"maximum\": 1000\n },\n {\n \"type\": \"string\",\n \"description\": \"Pre-defined font weight string value\",\n \"enum\": [\n \"thin\",\n \"hairline\",\n \"extra-light\",\n \"ultra-light\",\n \"light\",\n \"normal\",\n \"regular\",\n \"book\",\n \"medium\",\n \"semi-bold\",\n \"demi-bold\",\n \"bold\",\n \"extra-bold\",\n \"ultra-bold\",\n \"black\",\n \"heavy\",\n \"extra-black\",\n \"ultra-black\"\n ]\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/gradient.json\",\n \"title\": \"Gradient Value\",\n \"description\": \"Value schema for gradient type tokens. Represents a color gradient.\",\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/gradientStop\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"minItems\": 1,\n \"definitions\": {\n \"gradientStop\": {\n \"title\": \"Gradient Stop\",\n \"type\": \"object\",\n \"properties\": {\n \"color\": {\n \"description\": \"The color value at the stop's position on the gradient\",\n \"oneOf\": [\n {\n \"$ref\": \"color.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"position\": {\n \"description\": \"The position of the stop along the gradient's axis (range [0, 1]). Values outside this range are clamped.\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n },\n \"required\": [\"color\", \"position\"],\n \"additionalProperties\": false\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/number.json\",\n \"title\": \"Number Value\",\n \"description\": \"Value schema for number type tokens. Numbers can be positive, negative and have fractions. Example uses are gradient stop positions or unitless line heights.\",\n \"type\": \"number\"\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/shadow.json\",\n \"title\": \"Shadow Value\",\n \"description\": \"Value schema for shadow type tokens. Represents a shadow style.\",\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/shadowObject\"\n },\n {\n \"type\": \"array\",\n \"description\": \"Array of shadow objects and/or references to shadow tokens\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/shadowObject\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"minItems\": 1\n }\n ],\n \"definitions\": {\n \"shadowObject\": {\n \"title\": \"Shadow Object\",\n \"type\": \"object\",\n \"properties\": {\n \"color\": {\n \"description\": \"The color of the shadow\",\n \"oneOf\": [\n {\n \"$ref\": \"color.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"offsetX\": {\n \"description\": \"The horizontal offset that shadow has from the element it is applied to\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"offsetY\": {\n \"description\": \"The vertical offset that shadow has from the element it is applied to\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"blur\": {\n \"description\": \"The blur radius that is applied to the shadow\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"spread\": {\n \"description\": \"The amount by which to expand or contract the shadow\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"inset\": {\n \"description\": \"Whether this shadow is inside the containing shape (inner shadow) rather than a drop shadow (default: false)\",\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"color\", \"offsetX\", \"offsetY\", \"blur\", \"spread\"],\n \"additionalProperties\": false\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/strokeStyle.json\",\n \"title\": \"Stroke Style Value\",\n \"description\": \"Value schema for strokeStyle type tokens. Represents the style applied to lines or borders.\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"solid\", \"dashed\", \"dotted\", \"double\", \"groove\", \"ridge\", \"outset\", \"inset\"],\n \"description\": \"Pre-defined stroke style values with the same meaning as CSS line style values\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"dashArray\": {\n \"description\": \"Array of dimension values specifying lengths of alternating dashes and gaps\",\n \"oneOf\": [\n {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"minItems\": 1\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"lineCap\": {\n \"description\": \"Line cap style, same meaning as SVG stroke-linecap attribute\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"round\", \"butt\", \"square\"]\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"dashArray\", \"lineCap\"],\n \"additionalProperties\": false\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/transition.json\",\n \"title\": \"Transition Value\",\n \"description\": \"Value schema for transition type tokens. Represents an animated transition between two states.\",\n \"type\": \"object\",\n \"properties\": {\n \"duration\": {\n \"description\": \"The duration of the transition\",\n \"oneOf\": [\n {\n \"$ref\": \"duration.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"delay\": {\n \"description\": \"The time to wait before the transition begins\",\n \"oneOf\": [\n {\n \"$ref\": \"duration.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"timingFunction\": {\n \"description\": \"The timing function of the transition\",\n \"oneOf\": [\n {\n \"$ref\": \"cubicBezier.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n },\n \"required\": [\"duration\", \"delay\", \"timingFunction\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/typography.json\",\n \"title\": \"Typography Value\",\n \"description\": \"Value schema for typography type tokens. Represents a typographic style.\",\n \"type\": \"object\",\n \"properties\": {\n \"fontFamily\": {\n \"description\": \"The typography's font\",\n \"oneOf\": [\n {\n \"$ref\": \"fontFamily.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"fontSize\": {\n \"description\": \"The size of the typography\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"fontWeight\": {\n \"description\": \"The weight of the typography\",\n \"oneOf\": [\n {\n \"$ref\": \"fontWeight.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"letterSpacing\": {\n \"description\": \"The horizontal spacing between characters\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"lineHeight\": {\n \"description\": \"The vertical spacing between lines of typography (interpreted as a multiplier of fontSize)\",\n \"oneOf\": [\n {\n \"$ref\": \"number.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n },\n \"required\": [\"fontFamily\", \"fontSize\", \"fontWeight\", \"letterSpacing\", \"lineHeight\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format.json\",\n \"title\": \"DTCG Format Schema\",\n \"description\": \"JSON Schema for the Design Tokens Community Group (DTCG) Format specification.\",\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"URI reference to this JSON schema.\",\n \"$comment\": \"$schema is not part of the official DTCG specification.\"\n },\n \"$type\": {\n \"$ref\": \"format/tokenType.json\",\n \"description\": \"The type for tokens in this group (inherited by nested tokens unless overridden)\"\n },\n \"$description\": {\n \"type\": \"string\",\n \"description\": \"A plain text description of the group\"\n },\n \"$extensions\": {\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions\"\n },\n \"$extends\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/curlyBraceReference\"\n },\n {\n \"$ref\": \"#/definitions/jsonPointerReference\"\n }\n ],\n \"description\": \"Reference to another group to inherit tokens and properties from\"\n },\n \"$deprecated\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Whether this group is deprecated\"\n },\n \"$root\": {\n \"description\": \"Root token for this group. The $root token provides a base value for the group while allowing for variants or extensions.\",\n \"$ref\": \"format/token.json\"\n }\n },\n \"patternProperties\": {\n \"^[^${}.][^{}.]*$\": {\n \"description\": \"Nested groups and tokens (see #/definitions/tokenOrGroupName for pattern definition)\",\n \"$ref\": \"format/groupOrToken.json\"\n }\n },\n \"additionalProperties\": false,\n \"definitions\": {\n \"tokenOrGroupName\": {\n \"title\": \"Token or Group Name\",\n \"type\": \"string\",\n \"pattern\": \"^[^${}.][^{}.]*$\",\n \"description\": \"Valid token/group names: must not start with $ and must not contain {, }, or .\"\n },\n \"curlyBraceReference\": {\n \"title\": \"Curly Brace Reference\",\n \"type\": \"string\",\n \"pattern\": \"^\\\\{[^${}.][^{}.]*(\\\\.[^${}.][^{}.]*)*\\\\}$\",\n \"description\": \"Curly brace reference (e.g., '{tokenName}' or '{group.nested.token}')\"\n },\n \"jsonPointerReference\": {\n \"title\": \"JSON Pointer Reference\",\n \"type\": \"string\",\n \"pattern\": \"^#/\",\n \"format\": \"json-pointer-uri-fragment\",\n \"description\": \"JSON Pointer reference (RFC 6901) to a location in the document (e.g., '#/path/to/target')\"\n },\n \"jsonPointerReferenceObject\": {\n \"title\": \"JSON Pointer Reference Object\",\n \"type\": \"object\",\n \"properties\": {\n \"$ref\": {\n \"$ref\": \"#/definitions/jsonPointerReference\"\n }\n },\n \"required\": [\"$ref\"],\n \"additionalProperties\": false,\n \"description\": \"Object containing a JSON Pointer reference for property-level references\"\n },\n \"tokenValueReference\": {\n \"title\": \"Token Value Reference\",\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/curlyBraceReference\"\n },\n {\n \"$ref\": \"#/definitions/jsonPointerReferenceObject\"\n }\n ],\n \"description\": \"A reference to a token value using either curly brace syntax or JSON Pointer syntax\"\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/resolver/modifier.json\",\n \"title\": \"Modifier\",\n \"description\": \"A modifier is similar to a set, but allows for conditional inclusion via the contexts map. A modifier MUST declare a contexts map of string values to arrays of token sources.\",\n \"type\": \"object\",\n \"required\": [\"contexts\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description of the purpose of the modifier.\"\n },\n \"contexts\": {\n \"title\": \"Contexts\",\n \"type\": \"object\",\n \"description\": \"A map of context names to arrays of token sources. Each context represents a possible variant (e.g., 'light' vs 'dark' for theme, 'small' vs 'large' for size).\",\n \"minProperties\": 2,\n \"patternProperties\": {\n \"^.+$\": {\n \"$ref\": \"#/definitions/tokenSourcesForModifiers\",\n \"description\": \"An array of token sources for this context. Can contain reference objects pointing to JSON files, inline token definitions, or any combination. If the array declares multiple sources, they will be merged in array order, meaning if a token is declared multiple times, the last occurrence in the array will be the final value.\"\n }\n },\n \"additionalProperties\": false\n },\n \"default\": {\n \"title\": \"Default Context\",\n \"type\": \"string\",\n \"description\": \"An optional default value that MUST match one of the keys in contexts. If provided, tools will use this context when no input is provided for this modifier.\",\n \"$comment\": \"JSON Schema cannot validate that this value matches a key in 'contexts'. This validation must be performed at runtime by the implementation.\"\n },\n \"$extensions\": {\n \"title\": \"Extensions\",\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions. Keys are vendor-specific namespaces.\"\n }\n },\n \"definitions\": {\n \"referenceObjectForModifiers\": {\n \"title\": \"Reference Object (For Modifiers)\",\n \"type\": \"object\",\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": {\n \"title\": \"JSON Reference\",\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"A JSON Pointer (RFC 6901) or URI reference. Modifiers MUST NOT reference other modifiers (#/modifiers/...) or resolutionOrder items (#/resolutionOrder/...).\",\n \"not\": {\n \"anyOf\": [\n {\n \"pattern\": \"^#/modifiers/\",\n \"$comment\": \"Modifiers cannot reference other modifiers\"\n },\n {\n \"pattern\": \"^#/resolutionOrder/\",\n \"$comment\": \"Nothing can reference resolutionOrder items\"\n }\n ]\n }\n }\n },\n \"description\": \"A reference object for use within modifier contexts. Cannot point to other modifiers or resolutionOrder items.\"\n },\n \"tokenSourcesForModifiers\": {\n \"title\": \"Token Sources (For Modifiers)\",\n \"type\": \"array\",\n \"description\": \"An array of token sources for modifier contexts - can reference sets but not other modifiers or resolutionOrder items.\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/referenceObjectForModifiers\"\n },\n {\n \"$ref\": \"../format.json\",\n \"description\": \"Inline design tokens in DTCG format\"\n }\n ]\n }\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/resolver/resolutionOrder.json\",\n \"title\": \"Resolution Order\",\n \"description\": \"An ordered array of sets and modifiers that determines the final resolution of tokens. Order is significant - tokens later in the array override earlier ones in case of conflict.\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"oneOf\": [\n {\n \"title\": \"Reference Object (For Resolution Order)\",\n \"type\": \"object\",\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": {\n \"title\": \"JSON Reference\",\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"A JSON Pointer (RFC 6901) or URI reference. Must point to a set (#/sets/...) or modifier (#/modifiers/...), never to resolutionOrder items (#/resolutionOrder/...).\",\n \"not\": {\n \"pattern\": \"^#/resolutionOrder/\",\n \"$comment\": \"ResolutionOrder cannot reference items within itself\"\n }\n }\n },\n \"description\": \"A reference object for use within resolutionOrder. Can point to sets or modifiers but not other resolutionOrder items.\"\n },\n {\n \"title\": \"Inline Set\",\n \"description\": \"A set defined inline in the resolutionOrder array. Must include 'name' and 'type' properties.\",\n \"type\": \"object\",\n \"required\": [\"sources\", \"name\", \"type\"],\n \"properties\": {\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description of the purpose of the set.\"\n },\n \"sources\": {\n \"title\": \"Sources\",\n \"$ref\": \"set.json#/definitions/tokenSourcesForSets\",\n \"description\": \"An array of token sources. Can contain reference objects pointing to JSON files, inline token definitions, or any combination. If the array declares multiple sources, they will be merged in array order, meaning if a token is declared multiple times, the last occurrence in the array will be the final value.\"\n },\n \"$extensions\": {\n \"title\": \"Extensions\",\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions. Keys are vendor-specific namespaces.\"\n },\n \"name\": {\n \"title\": \"Name\",\n \"type\": \"string\",\n \"description\": \"A unique name that MUST NOT conflict with any other name in resolutionOrder.\",\n \"$comment\": \"Uniqueness must be validated at runtime as JSON Schema cannot validate uniqueness across array items.\"\n },\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"const\": \"set\",\n \"description\": \"MUST be 'set' for inline set definitions.\"\n }\n },\n \"additionalProperties\": false\n },\n {\n \"title\": \"Inline Modifier\",\n \"description\": \"A modifier defined inline in the resolutionOrder array. Must include 'name' and 'type' properties.\",\n \"type\": \"object\",\n \"required\": [\"contexts\", \"name\", \"type\"],\n \"properties\": {\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description of the purpose of the modifier.\"\n },\n \"contexts\": {\n \"title\": \"Contexts\",\n \"type\": \"object\",\n \"description\": \"A map of context names to arrays of token sources. Each context represents a possible variant (e.g., 'light' vs 'dark' for theme, 'small' vs 'large' for size).\",\n \"minProperties\": 2,\n \"patternProperties\": {\n \"^.+$\": {\n \"$ref\": \"modifier.json#/definitions/tokenSourcesForModifiers\",\n \"description\": \"An array of token sources for this context. Can contain reference objects pointing to JSON files, inline token definitions, or any combination. If the array declares multiple sources, they will be merged in array order, meaning if a token is declared multiple times, the last occurrence in the array will be the final value.\"\n }\n },\n \"additionalProperties\": false\n },\n \"default\": {\n \"title\": \"Default Context\",\n \"type\": \"string\",\n \"description\": \"An optional default value that MUST match one of the keys in contexts. If provided, tools will use this context when no input is provided for this modifier.\",\n \"$comment\": \"JSON Schema cannot validate that this value matches a key in 'contexts'. This validation must be performed at runtime by the implementation.\"\n },\n \"$extensions\": {\n \"title\": \"Extensions\",\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions. Keys are vendor-specific namespaces.\"\n },\n \"name\": {\n \"title\": \"Name\",\n \"type\": \"string\",\n \"description\": \"A unique name that MUST NOT conflict with any other name in resolutionOrder.\",\n \"$comment\": \"Uniqueness must be validated at runtime as JSON Schema cannot validate uniqueness across array items.\"\n },\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"const\": \"modifier\",\n \"description\": \"MUST be 'modifier' for inline modifier definitions.\"\n }\n },\n \"additionalProperties\": false\n }\n ]\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/resolver/set.json\",\n \"title\": \"Set\",\n \"description\": \"A set is a collection of design tokens in DTCG format. A set MUST contain a sources array with tokens declared directly, or a reference object pointing to a JSON file containing design tokens, or any combination of the two.\",\n \"type\": \"object\",\n \"required\": [\"sources\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description of the purpose of the set.\"\n },\n \"sources\": {\n \"title\": \"Sources\",\n \"$ref\": \"#/definitions/tokenSourcesForSets\",\n \"description\": \"An array of token sources. Can contain reference objects pointing to JSON files, inline token definitions, or any combination. If the array declares multiple sources, they will be merged in array order, meaning if a token is declared multiple times, the last occurrence in the array will be the final value.\"\n },\n \"$extensions\": {\n \"title\": \"Extensions\",\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions. Keys are vendor-specific namespaces.\"\n }\n },\n \"definitions\": {\n \"referenceObjectForSets\": {\n \"title\": \"Reference Object (For Sets)\",\n \"type\": \"object\",\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": {\n \"title\": \"JSON Reference\",\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"A JSON Pointer (RFC 6901) or URI reference. Sets MUST NOT reference modifiers (#/modifiers/...) or resolutionOrder items (#/resolutionOrder/...).\",\n \"not\": {\n \"anyOf\": [\n {\n \"pattern\": \"^#/modifiers/\",\n \"$comment\": \"Sets cannot reference modifiers\"\n },\n {\n \"pattern\": \"^#/resolutionOrder/\",\n \"$comment\": \"Nothing can reference resolutionOrder items\"\n }\n ]\n }\n }\n },\n \"description\": \"A reference object for use within sets. Cannot point to modifiers or resolutionOrder items.\"\n },\n \"tokenSourcesForSets\": {\n \"title\": \"Token Sources (For Sets)\",\n \"type\": \"array\",\n \"description\": \"An array of token sources for sets - cannot reference modifiers or resolutionOrder items.\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/referenceObjectForSets\"\n },\n {\n \"$ref\": \"../format.json\",\n \"description\": \"Inline design tokens in DTCG format\"\n }\n ]\n }\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/resolver.json\",\n \"title\": \"DTCG Resolver Schema\",\n \"description\": \"JSON Schema for the Design Tokens Community Group (DTCG) Resolver specification\",\n \"type\": \"object\",\n \"required\": [\"version\", \"resolutionOrder\"],\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"URI reference to this JSON schema.\"\n },\n \"name\": {\n \"title\": \"Name\",\n \"type\": \"string\",\n \"description\": \"A short, human-readable name for the document.\"\n },\n \"version\": {\n \"title\": \"Version\",\n \"type\": \"string\",\n \"const\": \"2025.10\",\n \"description\": \"Version of the resolver specification. Must be '2025.10'.\"\n },\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description for this document.\"\n },\n \"sets\": {\n \"title\": \"Token Sets\",\n \"type\": \"object\",\n \"description\": \"Definition of sets. A set is a collection of design tokens in DTCG format.\",\n \"patternProperties\": {\n \"^.+$\": {\n \"$ref\": \"resolver/set.json\"\n }\n }\n },\n \"modifiers\": {\n \"title\": \"Modifiers\",\n \"type\": \"object\",\n \"description\": \"Definition of modifiers. A modifier allows for conditional inclusion of token values via contexts.\",\n \"patternProperties\": {\n \"^.+$\": {\n \"$ref\": \"resolver/modifier.json\"\n }\n }\n },\n \"resolutionOrder\": {\n \"title\": \"Resolution Order\",\n \"$ref\": \"resolver/resolutionOrder.json\"\n },\n \"$defs\": {\n \"title\": \"Definitions\",\n \"type\": \"object\",\n \"description\": \"Optional definitions that tools MAY support but MUST NOT throw an error when encountered.\"\n }\n },\n \"additionalProperties\": false\n}\n","/**\n * @fileoverview DTCG 2025.10 JSON Schemas (vendored, verbatim)\n */\n\nimport dtcgGroupSchema from './dtcg-schemas/2025.10/format/group.json' assert { type: 'json' }\nimport dtcgGroupOrTokenSchema from './dtcg-schemas/2025.10/format/groupOrToken.json' assert { type: 'json' }\nimport dtcgTokenSchema from './dtcg-schemas/2025.10/format/token.json' assert { type: 'json' }\nimport dtcgTokenTypeSchema from './dtcg-schemas/2025.10/format/tokenType.json' assert { type: 'json' }\nimport dtcgBorderValueSchema from './dtcg-schemas/2025.10/format/values/border.json' assert { type: 'json' }\nimport dtcgColorValueSchema from './dtcg-schemas/2025.10/format/values/color.json' assert { type: 'json' }\nimport dtcgCubicBezierValueSchema from './dtcg-schemas/2025.10/format/values/cubicBezier.json' assert { type: 'json' }\nimport dtcgDimensionValueSchema from './dtcg-schemas/2025.10/format/values/dimension.json' assert { type: 'json' }\nimport dtcgDurationValueSchema from './dtcg-schemas/2025.10/format/values/duration.json' assert { type: 'json' }\nimport dtcgFontFamilyValueSchema from './dtcg-schemas/2025.10/format/values/fontFamily.json' assert { type: 'json' }\nimport dtcgFontWeightValueSchema from './dtcg-schemas/2025.10/format/values/fontWeight.json' assert { type: 'json' }\nimport dtcgGradientValueSchema from './dtcg-schemas/2025.10/format/values/gradient.json' assert { type: 'json' }\nimport dtcgNumberValueSchema from './dtcg-schemas/2025.10/format/values/number.json' assert { type: 'json' }\nimport dtcgShadowValueSchema from './dtcg-schemas/2025.10/format/values/shadow.json' assert { type: 'json' }\nimport dtcgStrokeStyleValueSchema from './dtcg-schemas/2025.10/format/values/strokeStyle.json' assert { type: 'json' }\nimport dtcgTransitionValueSchema from './dtcg-schemas/2025.10/format/values/transition.json' assert { type: 'json' }\nimport dtcgTypographyValueSchema from './dtcg-schemas/2025.10/format/values/typography.json' assert { type: 'json' }\nimport dtcgFormatSchema from './dtcg-schemas/2025.10/format.json' assert { type: 'json' }\nimport dtcgResolverModifierSchema from './dtcg-schemas/2025.10/resolver/modifier.json' assert { type: 'json' }\nimport dtcgResolverResolutionOrderSchema from './dtcg-schemas/2025.10/resolver/resolutionOrder.json' assert { type: 'json' }\nimport dtcgResolverSetSchema from './dtcg-schemas/2025.10/resolver/set.json' assert { type: 'json' }\nimport dtcgResolverSchema from './dtcg-schemas/2025.10/resolver.json' assert { type: 'json' }\n\nexport const formatSchema = dtcgFormatSchema\nexport const tokenSchema = dtcgTokenSchema\nexport const tokenTypeSchema = dtcgTokenTypeSchema\nexport const groupSchema = dtcgGroupSchema\nexport const groupOrTokenSchema = dtcgGroupOrTokenSchema\n\nexport const colorValueSchema = dtcgColorValueSchema\nexport const dimensionValueSchema = dtcgDimensionValueSchema\nexport const fontFamilyValueSchema = dtcgFontFamilyValueSchema\nexport const fontWeightValueSchema = dtcgFontWeightValueSchema\nexport const durationValueSchema = dtcgDurationValueSchema\nexport const cubicBezierValueSchema = dtcgCubicBezierValueSchema\nexport const numberValueSchema = dtcgNumberValueSchema\nexport const strokeStyleValueSchema = dtcgStrokeStyleValueSchema\nexport const borderValueSchema = dtcgBorderValueSchema\nexport const transitionValueSchema = dtcgTransitionValueSchema\nexport const shadowValueSchema = dtcgShadowValueSchema\nexport const gradientValueSchema = dtcgGradientValueSchema\nexport const typographyValueSchema = dtcgTypographyValueSchema\n\nexport const resolverSchema = dtcgResolverSchema\nexport const resolverSetSchema = dtcgResolverSetSchema\nexport const resolverModifierSchema = dtcgResolverModifierSchema\nexport const resolverResolutionOrderSchema = dtcgResolverResolutionOrderSchema\n\nexport const dtcgSchemaRegistry = [\n formatSchema,\n tokenSchema,\n tokenTypeSchema,\n groupSchema,\n groupOrTokenSchema,\n colorValueSchema,\n dimensionValueSchema,\n fontFamilyValueSchema,\n fontWeightValueSchema,\n durationValueSchema,\n cubicBezierValueSchema,\n numberValueSchema,\n strokeStyleValueSchema,\n borderValueSchema,\n transitionValueSchema,\n shadowValueSchema,\n gradientValueSchema,\n typographyValueSchema,\n resolverSchema,\n resolverSetSchema,\n resolverModifierSchema,\n resolverResolutionOrderSchema,\n]\n","/**\n * @fileoverview JSON Schemas for configuration validation\n *\n * Defines JSON schemas for validating user-provided configurations including\n * BuildConfig, OutputConfig, DispersaOptions, and custom plugin registrations.\n * Types are automatically generated from these schemas using json-schema-to-ts.\n */\n\nimport type { FromSchema, JSONSchema } from 'json-schema-to-ts'\n\nimport { resolverSchema } from './schemas'\n\nconst resolverSchemaRef = resolverSchema as unknown as JSONSchema\n\n/**\n * Base plugin properties shared across all plugin types\n */\nconst basePluginProperties = {\n name: {\n type: 'string',\n minLength: 1,\n description: 'Unique identifier for the plugin',\n },\n} as const\n\n/**\n * Common renderer options shared across multiple renderers\n */\nconst commonRendererOptionsProperties = {\n minify: { type: 'boolean' },\n} as const\n\n/**\n * CSS Renderer Options Schema\n */\nexport const cssRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['bundle', 'standalone', 'modifier'] },\n selector: { type: 'string' },\n mediaQuery: { type: 'string' },\n preserveReferences: { type: 'boolean' },\n ...commonRendererOptionsProperties,\n },\n additionalProperties: true, // Allow custom properties for extended renderers\n} as const\n\n/**\n * JSON Renderer Options Schema\n */\nexport const jsonRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['bundle', 'standalone'] },\n structure: { type: 'string', enum: ['flat', 'nested'] },\n includeMetadata: { type: 'boolean' },\n ...commonRendererOptionsProperties,\n },\n additionalProperties: true, // Allow custom properties for extended renderers\n} as const\n\n/**\n * JS Module Renderer Options Schema\n */\nexport const jsModuleRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['bundle', 'standalone'] },\n structure: { type: 'string', enum: ['flat', 'nested'] },\n moduleName: { type: 'string' },\n generateHelper: {\n type: 'boolean',\n description: 'Generate helper function for token lookup (bundle mode only)',\n },\n ...commonRendererOptionsProperties,\n },\n additionalProperties: true, // Allow custom properties for extended renderers\n} as const\n\n/**\n * Tailwind CSS v4 Renderer Options Schema\n */\nexport const tailwindRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['bundle', 'standalone'] },\n includeImport: {\n type: 'boolean',\n description: 'Prepend @import \"tailwindcss\" to the output',\n },\n namespace: {\n type: 'string',\n description: 'Optional Tailwind namespace prefix for @theme',\n },\n selector: { type: 'string' },\n mediaQuery: { type: 'string' },\n ...commonRendererOptionsProperties,\n },\n additionalProperties: true,\n} as const\n\n/**\n * iOS/SwiftUI Renderer Options Schema\n */\nexport const iosRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['standalone'] },\n accessLevel: { type: 'string', enum: ['public', 'internal'] },\n structure: { type: 'string', enum: ['enum', 'grouped'] },\n enumName: {\n type: 'string',\n description: 'Root enum name for enum structure (default: DesignTokens)',\n },\n extensionNamespace: {\n type: 'string',\n description: 'Namespace enum name used in grouped mode (default: DesignTokens)',\n },\n colorSpace: {\n type: 'string',\n enum: ['sRGB', 'displayP3'],\n description: 'Color space for SwiftUI Color initializer',\n },\n swiftVersion: {\n type: 'string',\n enum: ['5.9', '6.0'],\n description: 'Target Swift language version (default: 5.9)',\n },\n indent: {\n type: 'number',\n minimum: 1,\n description: 'Number of spaces per indentation level (default: 4)',\n },\n frozen: {\n type: 'boolean',\n description: 'Add @frozen annotation to enums and structs for ABI stability (default: false)',\n },\n },\n additionalProperties: true,\n} as const\n\n/**\n * Android/Jetpack Compose Renderer Options Schema\n */\nexport const androidRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['packageName'],\n properties: {\n preset: { type: 'string', enum: ['standalone', 'bundle'] },\n packageName: {\n type: 'string',\n minLength: 1,\n description: 'Kotlin package name (required, e.g., com.example.tokens)',\n },\n objectName: {\n type: 'string',\n description: 'Root object name (default: DesignTokens)',\n },\n colorFormat: {\n type: 'string',\n enum: ['argb_hex', 'argb_float', 'argb8', 'argb_floats'],\n description:\n 'Color output format: argb_hex for Color(0xAARRGGBB), argb_float for Color(r, g, b, a). Legacy aliases: argb8 → argb_hex, argb_floats → argb_float',\n },\n colorSpace: {\n type: 'string',\n enum: ['sRGB', 'displayP3'],\n description: 'Color space for Color initializers (default: sRGB)',\n },\n structure: {\n type: 'string',\n enum: ['nested', 'flat'],\n description:\n 'Token organization: nested mirrors path hierarchy, flat groups by $type (default: nested)',\n },\n visibility: {\n type: 'string',\n enum: ['public', 'internal'],\n description: 'Kotlin visibility modifier for generated declarations',\n },\n indent: {\n type: 'number',\n minimum: 1,\n description: 'Number of spaces per indentation level (default: 4)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n packageName: 'Android renderer requires a \"packageName\" property',\n },\n },\n} as const\n\n/**\n * Transform Plugin Schema\n *\n * Validates structure of Transform objects at registration time.\n * Note: Function properties cannot be fully validated via JSON schema,\n * but we can ensure the object has the required structure.\n *\n * Additional properties are allowed to support class instances and custom metadata.\n */\nexport const transformPluginSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['transform'],\n properties: {\n ...basePluginProperties,\n matcher: {\n description: 'Optional filter function (validated at runtime)',\n },\n transform: {\n description: 'Transform function (validated at runtime)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n name: 'Transform must have a \"name\" property',\n transform: 'Transform must have a \"transform\" function property',\n },\n },\n} as const\n\n/**\n * Renderer Plugin Schema\n *\n * Validates structure of Renderer objects at registration time.\n * Renderers can implement either format() for simple formatting or build() for advanced build logic.\n * Additional properties are allowed to support class instances and custom metadata.\n */\nexport const rendererPluginSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['format'],\n properties: {\n ...basePluginProperties,\n preset: {\n type: 'string',\n description: 'Preset identifier (e.g., \"bundle\", \"standalone\", \"modifier\")',\n },\n format: {\n description: 'Format function for token-to-output conversion (validated at runtime)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n format: 'Renderer must have a \"format\" function property',\n },\n },\n} as const\n\n/**\n * Filter Plugin Schema\n *\n * Validates structure of Filter objects at registration time.\n * Additional properties are allowed to support class instances and custom metadata.\n */\nexport const filterPluginSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['filter'],\n properties: {\n ...basePluginProperties,\n filter: {\n description: 'Filter function (validated at runtime)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n filter: 'Filter must have a \"filter\" function property',\n },\n },\n} as const\n\n/**\n * Preprocessor Plugin Schema\n *\n * Validates structure of Preprocessor objects at registration time.\n * Additional properties are allowed to support class instances and custom metadata.\n */\nexport const preprocessorPluginSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['preprocess'],\n properties: {\n ...basePluginProperties,\n preprocess: {\n description: 'Preprocess function (validated at runtime)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n preprocess: 'Preprocessor must have a \"preprocess\" function property',\n },\n },\n} as const\n\n/**\n * Lint Configuration Schema\n *\n * Validates lint configuration including plugins, rules, and settings.\n * Plugins can be objects (validated at runtime) or strings (module paths).\n */\nexport const lintConfigSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n enabled: {\n type: 'boolean',\n description: 'Enable linting (default: false, opt-in)',\n },\n failOnError: {\n type: 'boolean',\n description: 'Fail build on lint errors (default: true)',\n },\n plugins: {\n type: 'object',\n description: 'Plugins to load (by object or module path string)',\n additionalProperties: {\n oneOf: [{ type: 'string' }, { type: 'object' }],\n },\n },\n rules: {\n type: 'object',\n description: 'Rule configurations',\n additionalProperties: {\n oneOf: [\n { type: 'string', enum: ['off', 'warn', 'error'] },\n {\n type: 'array',\n minItems: 2,\n items: [{ type: 'string', enum: ['off', 'warn', 'error'] }, { type: 'object' }],\n },\n ],\n },\n },\n },\n additionalProperties: false,\n} as const\n\n/**\n * Output Configuration Schema\n *\n * Validates output-specific configuration including renderer,\n * output file path, transforms, and filters.\n */\nexport const outputConfigSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['name', 'renderer'],\n properties: {\n name: {\n type: 'string',\n minLength: 1,\n description: 'Unique identifier for this output',\n },\n renderer: rendererPluginSchema,\n filters: {\n type: 'array',\n items: filterPluginSchema,\n description: 'Array of filter objects to apply',\n },\n transforms: {\n type: 'array',\n items: transformPluginSchema,\n description: 'Array of transform objects to apply',\n },\n file: {\n // No type constraint - allows string or function\n // Functions cannot be validated by JSON Schema (not JSON-serializable)\n // TypeScript type provides compile-time validation for function signatures\n description:\n 'Output file path relative to buildPath. Supports subdirectories (e.g., \"css/tokens.css\"), pattern strings (e.g., \"tokens-{theme}.css\"), or function for dynamic naming',\n },\n options: {\n type: 'object',\n description: 'Renderer-specific options passed to the formatter',\n additionalProperties: true,\n },\n hooks: {\n type: 'object',\n description: 'Per-output lifecycle hooks (functions, validated at runtime)',\n additionalProperties: true,\n },\n },\n errorMessage: {\n required: {\n name: 'Output must have a \"name\" property',\n renderer: 'Output must have a \"renderer\" property',\n },\n },\n additionalProperties: false,\n} as const\n\n/**\n * Dispersa Options Schema\n *\n * Validates constructor options for Dispersa instance.\n * When resolver is an object, it's validated against the resolver schema via $ref.\n */\nexport const dispersaOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n resolver: {\n oneOf: [\n { type: 'string', minLength: 1 },\n resolverSchemaRef, // Reference to resolver schema for inline ResolverDocument objects\n ],\n description:\n 'Default resolver configuration - file path or ResolverDocument object (optional if provided at build time)',\n },\n buildPath: {\n type: 'string',\n description: 'Default output directory for generated files',\n },\n validation: {\n type: 'object',\n properties: {\n mode: { type: 'string', enum: ['error', 'warn', 'off'] },\n },\n additionalProperties: true,\n },\n },\n additionalProperties: false,\n} as const\n\n/**\n * Build Configuration Schema\n *\n * Validates complete build configuration including outputs array,\n * global transforms, preprocessors, and permutations.\n * When resolver is an object, it's validated against the resolver schema via $ref.\n */\nexport const buildConfigSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['outputs'],\n properties: {\n outputs: {\n type: 'array',\n minItems: 1,\n items: { type: 'object' }, // Each output validated separately with outputConfigSchema\n description: 'Array of output configurations defining target formats',\n },\n filters: {\n type: 'array',\n items: filterPluginSchema,\n description: 'Global filters to apply to all outputs',\n },\n transforms: {\n type: 'array',\n items: transformPluginSchema,\n description: 'Global transforms to apply to all tokens',\n },\n preprocessors: {\n type: 'array',\n items: preprocessorPluginSchema,\n description: 'Global preprocessors to apply before parsing',\n },\n permutations: {\n type: 'array',\n items: {\n type: 'object',\n description: 'Modifier inputs object (e.g., { theme: \"dark\" })',\n },\n description: 'Explicit permutations to build',\n },\n // Can also include DispersaOptions fields\n resolver: {\n oneOf: [\n { type: 'string', minLength: 1 },\n resolverSchemaRef, // Reference to resolver schema for inline ResolverDocument objects\n ],\n description: 'Resolver configuration - file path or ResolverDocument object',\n },\n buildPath: { type: 'string' },\n validation: {\n type: 'object',\n properties: {\n mode: { type: 'string', enum: ['error', 'warn', 'off'] },\n },\n },\n hooks: {\n type: 'object',\n description: 'Global build lifecycle hooks (functions, validated at runtime)',\n additionalProperties: true,\n },\n lint: {\n ...lintConfigSchema,\n description: 'Linting configuration',\n },\n },\n additionalProperties: false,\n} as const\n\n// ============================================================================\n// GENERATED TYPES FROM SCHEMAS\n// ============================================================================\n\n/**\n * CSS Renderer Options type generated from cssRendererOptionsSchema\n *\n * Note: This type is overridden in @renderers/types to support function-based\n * selector and mediaQuery options, which cannot be represented in JSON Schema.\n * This schema-based type is used for JSON validation only.\n */\nexport type CssRendererOptions = FromSchema<typeof cssRendererOptionsSchema>\n\n/**\n * JSON Renderer Options type generated from jsonRendererOptionsSchema\n */\nexport type JsonRendererOptions = FromSchema<typeof jsonRendererOptionsSchema>\n\n/**\n * JS Module Renderer Options type generated from jsModuleRendererOptionsSchema\n */\nexport type JsModuleRendererOptions = FromSchema<typeof jsModuleRendererOptionsSchema>\n\n/**\n * Output Config type generated from outputConfigSchema\n *\n * Note: This is a base type. The actual OutputConfig type in config/index.ts\n * extends this with additional TypeScript features like conditional types for options.\n */\nexport type OutputConfigBase = FromSchema<typeof outputConfigSchema>\n\n/**\n * Dispersa Options type generated from dispersaOptionsSchema\n */\nexport type DispersaOptionsBase = FromSchema<typeof dispersaOptionsSchema>\n\n/**\n * Build Config type generated from buildConfigSchema\n *\n * Note: This is a base type. The actual BuildConfig type in config/index.ts\n * may extend this with additional features.\n */\nexport type BuildConfigBase = FromSchema<typeof buildConfigSchema>\n\n/**\n * Preprocessor Plugin type generated from preprocessorPluginSchema\n */\nexport type PreprocessorPluginBase = FromSchema<typeof preprocessorPluginSchema>\n\n/**\n * Tailwind CSS v4 Renderer Options type generated from tailwindRendererOptionsSchema\n */\nexport type TailwindRendererOptionsBase = FromSchema<typeof tailwindRendererOptionsSchema>\n\n/**\n * iOS/SwiftUI Renderer Options type generated from iosRendererOptionsSchema\n */\nexport type IosRendererOptionsBase = FromSchema<typeof iosRendererOptionsSchema>\n\n/**\n * Android/Jetpack Compose Renderer Options type generated from androidRendererOptionsSchema\n */\nexport type AndroidRendererOptionsBase = FromSchema<typeof androidRendererOptionsSchema>\n\n/**\n * Lint Config type generated from lintConfigSchema\n *\n * Note: This is a base type. The actual LintBuildConfig type in lint/types.ts\n * extends this with proper LintPlugin typing.\n */\nexport type LintConfigBase = FromSchema<typeof lintConfigSchema>\n","/**\n * @fileoverview JSON Schema validator for design tokens and resolver documents\n *\n * Validates token data and resolver configurations against JSON schemas\n * to ensure DTCG compliance and catch errors early in the build process.\n */\n\nimport { ConfigurationError } from '@shared/errors/index'\nimport { isTokenLike } from '@shared/utils/token-utils'\nimport Ajv, { type ErrorObject, type ValidateFunction } from 'ajv'\nimport addFormats from 'ajv-formats'\n\nimport { buildConfigSchema, outputConfigSchema, dispersaOptionsSchema } from './config-schemas'\nimport {\n dtcgSchemaRegistry,\n formatSchema,\n groupSchema,\n resolverSchema,\n tokenSchema,\n} from './schemas'\n\n/**\n * Validation error with message and optional context\n */\nexport type ValidationError = {\n /** Human-readable error message */\n message: string\n\n /** JSON path to the error location (e.g., '/tokens/color/primary') */\n path?: string\n\n /** Additional error parameters from JSON Schema validation */\n params?: Record<string, unknown>\n}\n\n/**\n * Validates design tokens and resolver documents against JSON schemas\n *\n * Uses AJV (Another JSON Validator) to validate data structures and ensure\n * compliance with DTCG specification and Dispersa extensions.\n *\n * @example\n * ```typescript\n * const validator = new SchemaValidator()\n *\n * // Validate resolver document\n * const resolverErrors = validator.validateResolver(resolverData)\n * if (resolverErrors.length > 0) {\n * console.error('Resolver validation failed:', resolverErrors)\n * }\n *\n * // Validate token\n * const tokenErrors = validator.validateToken(tokenData)\n * ```\n */\nexport class SchemaValidator {\n private ajv: Ajv\n private validators: Map<string, ValidateFunction>\n\n constructor() {\n this.ajv = new Ajv({\n allErrors: true,\n strict: false,\n validateFormats: true,\n })\n addFormats(this.ajv)\n this.validators = new Map()\n this.registerDefaultSchemas()\n }\n\n private registerDefaultSchemas(): void {\n for (const schema of dtcgSchemaRegistry) {\n this.ajv.addSchema(schema as Record<string, unknown>, (schema as { $id?: string }).$id)\n }\n\n // Register DTCG schemas\n this.registerSchema('format', formatSchema)\n this.registerSchema('resolver', resolverSchema)\n this.registerSchema('token', tokenSchema)\n this.registerSchema('group', groupSchema)\n\n // Register config schemas\n this.registerSchema('outputConfig', outputConfigSchema)\n this.registerSchema('dispersaOptions', dispersaOptionsSchema)\n this.registerSchema('buildConfig', buildConfigSchema)\n }\n\n /**\n * Registers a custom JSON schema for validation\n *\n * Compiles and registers a JSON schema that can be used with `validate()`.\n *\n * @param name - Unique identifier for the schema\n * @param schema - JSON Schema object (draft-07 compatible)\n *\n * @example\n * ```typescript\n * validator.registerSchema('customToken', {\n * type: 'object',\n * required: ['$value', '$type'],\n * properties: {\n * $value: { type: 'string' },\n * $type: { const: 'custom' }\n * }\n * })\n * ```\n */\n registerSchema(name: string, schema: Record<PropertyKey, unknown>): void {\n const validate = this.ajv.compile(schema)\n this.validators.set(name, validate)\n }\n\n /**\n * Validates data against a registered schema\n *\n * @param schemaName - Name of the registered schema to validate against\n * @param data - Data to validate\n * @returns Array of validation errors (empty if valid)\n * @throws {Error} If schema name is not registered\n *\n * @example\n * ```typescript\n * const errors = validator.validate('color', colorTokenData)\n * if (errors.length > 0) {\n * console.error('Validation failed:', errors)\n * }\n * ```\n */\n validate(schemaName: string, data: unknown): ValidationError[] {\n const validator = this.validators.get(schemaName)\n if (validator == null) {\n throw new ConfigurationError(`Schema not found: ${schemaName}`)\n }\n\n const valid = validator(data)\n return valid ? [] : this.formatErrors(validator.errors ?? [])\n }\n\n /**\n * Validates a resolver document structure\n *\n * Checks that the resolver document conforms to the expected schema with\n * valid references, sets, and modifier definitions.\n *\n * @param data - Resolver document data\n * @returns Array of validation errors (empty if valid)\n *\n * @example\n * ```typescript\n * const resolverErrors = validator.validateResolver(resolverData)\n * ```\n */\n validateResolver(data: unknown): ValidationError[] {\n return this.validate('resolver', data)\n }\n\n /**\n * Validates a design token structure\n *\n * Validates a token against the DTCG token schema. The schema itself\n * enforces type-specific constraints based on the token's `$type` field.\n *\n * @param data - Token data to validate\n * @returns Array of validation errors (empty if valid)\n *\n * @example\n * ```typescript\n * const errors = validator.validateToken(tokenData)\n * ```\n */\n validateToken(data: unknown): ValidationError[] {\n return this.validate('token', data)\n }\n\n /**\n * Validates a group structure (DTCG Section 6)\n *\n * Groups organize tokens hierarchically and can have properties like\n * $type, $description, $deprecated, $extensions, and $extends.\n * Groups MUST NOT have $value or $ref properties.\n *\n * @param data - Group data to validate\n * @returns Array of validation errors (empty if valid)\n *\n * @example\n * ```typescript\n * const groupErrors = validator.validateGroup(groupData)\n * ```\n */\n validateGroup(data: unknown): ValidationError[] {\n return this.validate('group', data)\n }\n\n /**\n * Smart validation: Try both token and group schemas\n *\n * Per DTCG spec, an object is either a token (has $value/$ref) or a group (no $value/$ref).\n * This method tries to validate as both and returns the appropriate result.\n *\n * Strategy:\n * 1. Check for structural hints ($value/$ref present)\n * 2. Try validating as the likely type first\n * 3. If that fails, try the other type\n * 4. Only error if both fail\n *\n * @param obj - Object to validate (token or group)\n * @returns Validation result with type and errors\n *\n * @example\n * ```typescript\n * const result = validator.validateTokenOrGroup(obj)\n * if (result.type === 'invalid') {\n * console.error(result.message, result.errors)\n * }\n * ```\n */\n validateTokenOrGroup(obj: unknown): {\n type: 'token' | 'group' | 'invalid'\n errors: ValidationError[]\n message?: string\n } {\n // First, check structural hints\n const hasValue = isTokenLike(obj)\n\n if (hasValue) {\n const tokenErrors = this.validateToken(obj)\n if (tokenErrors.length === 0) {\n return { type: 'token', errors: [] }\n }\n return {\n type: 'invalid',\n errors: tokenErrors,\n message: 'Object has $value/$ref but failed token validation',\n }\n }\n\n const groupErrors = this.validateGroup(obj)\n if (groupErrors.length === 0) {\n return { type: 'group', errors: [] }\n }\n\n const tokenErrors = this.validateToken(obj)\n if (tokenErrors.length === 0) {\n return { type: 'token', errors: [] }\n }\n\n return {\n type: 'invalid',\n errors: groupErrors.length < tokenErrors.length ? groupErrors : tokenErrors,\n message:\n groupErrors.length < tokenErrors.length\n ? 'Object appears to be a group but failed validation'\n : 'Object appears to be a token but failed validation',\n }\n }\n\n /**\n * Format AJV errors into readable ValidationError objects\n */\n private formatErrors(errors: ErrorObject[]): ValidationError[] {\n return errors.map((error) => ({\n message: error.message ?? 'Validation error',\n path: error.instancePath,\n params: error.params,\n }))\n }\n\n /**\n * Formats validation errors into a human-readable message\n *\n * Combines multiple validation errors into a single string suitable\n * for logging or error displays.\n *\n * @param errors - Array of validation errors\n * @returns Formatted error message string\n *\n * @example\n * ```typescript\n * const errors = validator.validateToken(tokenData)\n * if (errors.length > 0) {\n * const message = validator.getErrorMessage(errors)\n * console.error(message)\n * }\n * ```\n */\n getErrorMessage(errors: ValidationError[]): string {\n if (errors.length === 0) {\n return 'No errors'\n }\n\n return errors\n .map((error) => {\n const path = error.path != null && error.path !== '' ? `at ${error.path}` : ''\n return `${error.message} ${path}`.trim()\n })\n .join('; ')\n }\n\n // ============================================================================\n // CONFIGURATION VALIDATION METHODS\n // ============================================================================\n\n /**\n * Validates an OutputConfig structure\n *\n * @param data - Output configuration data\n * @returns Array of validation errors (empty if valid)\n */\n validateOutputConfig(data: unknown): ValidationError[] {\n return this.validate('outputConfig', data)\n }\n\n /**\n * Validates DispersaOptions structure\n *\n * @param data - Dispersa options data\n * @returns Array of validation errors (empty if valid)\n */\n validateDispersaOptions(data: unknown): ValidationError[] {\n return this.validate('dispersaOptions', data)\n }\n\n /**\n * Validates BuildConfig structure\n *\n * @param data - Build configuration data\n * @returns Array of validation errors (empty if valid)\n */\n validateBuildConfig(data: unknown): ValidationError[] {\n return this.validate('buildConfig', data)\n }\n}\n","/**\n * @fileoverview Validation module exports\n */\n\nexport { SchemaValidator } from './validator'\nexport type { ValidationError } from './validator'\n","/**\n * @fileoverview Resolver document parser with validation\n */\n\nimport { constants as fsConstants } from 'node:fs'\nimport { readFile, access } from 'node:fs/promises'\nimport * as path from 'node:path'\n\nimport type { ResolverDocument } from '@resolution/types'\nimport { FileOperationError, ValidationError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport { SchemaValidator } from '@validation/index'\n\nexport type ParserOptions = {\n allowUnknownVersion?: boolean\n validation?: ValidationOptions\n}\n\nexport class ResolverParser {\n private validator: SchemaValidator\n private options: ParserOptions\n private validationHandler: ValidationHandler\n\n constructor(options: ParserOptions = {}) {\n this.validator = new SchemaValidator()\n this.options = {\n allowUnknownVersion: false,\n ...options,\n }\n this.validationHandler = new ValidationHandler(options.validation)\n }\n\n /**\n * Parse resolver document from file\n */\n async parseFile(filePath: string): Promise<ResolverDocument> {\n const absolutePath = path.isAbsolute(filePath)\n ? filePath\n : path.resolve(process.cwd(), filePath)\n\n try {\n await access(absolutePath, fsConstants.R_OK)\n } catch (error) {\n throw new FileOperationError('read', absolutePath, error as Error)\n }\n\n let content: string\n try {\n content = await readFile(absolutePath, 'utf-8')\n } catch (error) {\n throw new FileOperationError('read', absolutePath, error as Error)\n }\n return this.parse(content, absolutePath)\n }\n\n /**\n * Parse resolver document from string\n */\n parse(content: string, sourcePath?: string): ResolverDocument {\n let data: unknown\n\n try {\n data = JSON.parse(content) as unknown\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error)\n throw new ValidationError(`Failed to parse resolver JSON: ${errorMsg}`, [\n { message: errorMsg },\n ])\n }\n\n return this.parseObject(data, sourcePath)\n }\n\n /**\n * Parse and validate an inline resolver document object\n * Use this when you have a ResolverDocument object in memory\n * rather than loading from a file\n *\n * @param resolver - ResolverDocument object to validate\n * @returns Validated ResolverDocument\n * @throws {Error} If validation fails\n *\n * @example\n * ```typescript\n * const parser = new ResolverParser()\n * const resolver = parser.parseInline({\n * version: '2025.10',\n * sets: {\n * base: { sources: [{ ... }] }\n * },\n * resolutionOrder: [{ $ref: '#/sets/base' }]\n * })\n * ```\n */\n parseInline(resolver: ResolverDocument): ResolverDocument {\n return this.parseObject(resolver, '<inline>')\n }\n\n /**\n * Parse and validate resolver document object\n */\n parseObject(data: unknown, sourcePath?: string): ResolverDocument {\n const contextMsg = sourcePath != null && sourcePath !== '' ? ` in ${sourcePath}` : ''\n\n // Type guard\n if (typeof data !== 'object' || data == null) {\n throw new ValidationError(`Resolver document must be an object${contextMsg}`, [\n { message: `Resolver document must be an object${contextMsg}` },\n ])\n }\n\n // Validate if enabled\n const resolverErrors = this.validator.validateResolver(data)\n if (resolverErrors.length > 0) {\n const errorMessage = this.validator.getErrorMessage(resolverErrors)\n this.handleValidationIssue(`Invalid resolver document${contextMsg}: ${errorMessage}`)\n }\n\n const resolver = data as ResolverDocument\n\n // Check version\n if (resolver.version !== '2025.10' && this.options.allowUnknownVersion !== true) {\n this.handleValidationIssue(\n `Unsupported resolver version: ${String(resolver.version)}. Expected 2025.10${contextMsg}`,\n )\n }\n\n // Validate resolution order\n if (resolver.resolutionOrder == null || resolver.resolutionOrder.length === 0) {\n this.handleValidationIssue(\n `Resolver document must have a non-empty resolutionOrder${contextMsg}`,\n )\n }\n\n // Validate reference pointers (DTCG spec section 4.2.1)\n this.validateReferencePointers(resolver, contextMsg)\n\n // Validate modifier constraints\n this.validateModifiers(resolver, contextMsg)\n\n return resolver\n }\n\n /**\n * Validate reference pointers according to DTCG spec section 4.2.1\n * - Sets/modifiers MUST NOT reference other modifiers\n * - References MUST NOT point to resolutionOrder array items\n */\n private validateReferencePointers(resolver: ResolverDocument, contextMsg: string): void {\n if (resolver.sets) {\n for (const [setName, set] of Object.entries(resolver.sets)) {\n this.validateSourceReferences(set.sources, `set \"${setName}\"`, contextMsg)\n }\n }\n\n if (!resolver.modifiers) {\n return\n }\n\n for (const [modifierName, modifier] of Object.entries(resolver.modifiers)) {\n for (const [contextName, sources] of Object.entries(modifier.contexts)) {\n this.validateSourceReferences(\n sources,\n `modifier \"${modifierName}\" context \"${contextName}\"`,\n contextMsg,\n )\n }\n }\n }\n\n private validateSourceReferences(sources: unknown[], location: string, contextMsg: string): void {\n for (const source of sources) {\n if (typeof source !== 'object' || source === null || !('$ref' in source)) {\n continue\n }\n\n const ref = (source as { $ref: string }).$ref\n\n if (ref.startsWith('#/modifiers/')) {\n this.handleValidationIssue(\n `Invalid reference in ${location}: \"${ref}\". Sets and modifier contexts MUST NOT reference modifiers${contextMsg}`,\n )\n }\n\n if (ref.startsWith('#/resolutionOrder/')) {\n this.handleValidationIssue(\n `Invalid reference in ${location}: \"${ref}\". References MUST NOT point to resolutionOrder array items${contextMsg}`,\n )\n }\n }\n }\n\n /**\n * Validate modifiers according to DTCG spec\n */\n private validateModifiers(resolver: ResolverDocument, contextMsg: string): void {\n if (!resolver.modifiers) {\n return\n }\n\n for (const [modifierName, modifier] of Object.entries(resolver.modifiers)) {\n const contextCount = Object.keys(modifier.contexts).length\n\n // MUST throw error for 0 contexts\n if (contextCount === 0) {\n this.handleValidationIssue(\n `Modifier \"${modifierName}\" has 0 contexts. Modifiers MUST have at least 1 context${contextMsg}`,\n )\n }\n\n // SHOULD throw error for 1 context (use a set instead)\n if (contextCount === 1) {\n this.handleValidationIssue(\n `Modifier \"${modifierName}\" has only 1 context. A modifier with 1 context should be a set instead${contextMsg}`,\n )\n }\n\n // Validate default value if provided\n if (modifier.default && !(modifier.default in modifier.contexts)) {\n const validContexts = Object.keys(modifier.contexts).join(', ')\n this.handleValidationIssue(\n `Modifier \"${modifierName}\" has invalid default value \"${modifier.default}\". Must be one of: ${validContexts}${contextMsg}`,\n )\n }\n }\n }\n\n private handleValidationIssue(message: string): void {\n this.validationHandler.handleIssue(new ValidationError(message, [{ message }]))\n }\n\n /**\n * Validate resolver document without parsing\n */\n validate(data: unknown): { valid: boolean; errors: string[] } {\n const errors = this.validator.validateResolver(data)\n return {\n valid: errors.length === 0,\n errors: errors.map((e) => e.message),\n }\n }\n}\n","/**\n * @fileoverview Utility for loading and parsing resolver documents\n * Eliminates duplication of resolver parsing logic across the codebase\n */\n\nimport * as path from 'node:path'\n\nimport type { ResolverDocument } from '@resolution/types'\nimport type { ValidationOptions } from '@shared/types/validation'\n\nimport { ResolverParser } from './resolver-parser'\n\nexport type ResolverLoaderOptions = {\n /**\n * Enable validation of the resolver document\n * @default true\n */\n /**\n * Base directory for resolving relative paths\n * @default process.cwd()\n */\n baseDir?: string\n validation?: ValidationOptions\n}\n\n/**\n * Loads and parses resolver documents from file paths or inline objects\n *\n * Centralizes the logic for handling resolver inputs that can be either:\n * - A file path string (resolved relative to baseDir)\n * - An inline ResolverDocument object (validated if enabled)\n *\n * @example\n * ```typescript\n * const loader = new ResolverLoader({ })\n *\n * // Load from file\n * const resolver1 = await loader.load('./tokens.resolver.json')\n *\n * // Load from inline object\n * const resolver2 = await loader.load({\n * resolutionOrder: ['tokens.json']\n * })\n * ```\n */\nexport class ResolverLoader {\n private options: { baseDir: string; validation?: ValidationOptions }\n private parser: ResolverParser\n\n constructor(options: ResolverLoaderOptions = {}) {\n this.options = {\n baseDir: options.baseDir ?? process.cwd(),\n validation: options.validation,\n }\n this.parser = new ResolverParser({ validation: options.validation })\n }\n\n /**\n * Load and parse a resolver document\n *\n * @param resolver - Either a file path (string) or an inline ResolverDocument object\n * @returns Tuple of [parsed resolver document, base directory for file resolution]\n *\n * @example\n * ```typescript\n * const loader = new ResolverLoader()\n * const [resolverDoc, baseDir] = await loader.load('./tokens.resolver.json')\n * ```\n */\n async load(resolver: string | ResolverDocument): Promise<{\n resolverDoc: ResolverDocument\n baseDir: string\n }> {\n if (typeof resolver !== 'string') {\n const resolverDoc = this.parser.parseInline(resolver)\n return { resolverDoc, baseDir: this.options.baseDir }\n }\n\n const absolutePath = path.resolve(this.options.baseDir, resolver)\n const resolverDoc = await this.parser.parseFile(absolutePath)\n const baseDir = path.dirname(absolutePath)\n return { resolverDoc, baseDir }\n }\n\n /**\n * Load only the resolver document (without base directory)\n *\n * Convenience method for cases where only the parsed document is needed.\n *\n * @param resolver - Either a file path or an inline ResolverDocument object\n * @returns Parsed resolver document\n */\n async loadDocument(resolver: string | ResolverDocument): Promise<ResolverDocument> {\n const { resolverDoc } = await this.load(resolver)\n return resolverDoc\n }\n\n /**\n * Update the base directory for path resolution\n *\n * @param baseDir - New base directory\n */\n setBaseDir(baseDir: string): void {\n this.options.baseDir = baseDir\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Shared utilities for bundlers\n */\n\nimport type { MediaQueryFunction, SelectorFunction } from '@renderers/types'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries, stripInternalTokenMetadata } from '@shared/utils/token-utils'\nimport type { ResolvedTokens, InternalResolvedTokens, ResolvedToken } from '@tokens/types'\n\nfunction sanitizeDataAttributeName(value: string): string {\n // Attribute names are more constrained than token/modifier names.\n // Use a conservative whitelist to avoid generating invalid selectors.\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\nfunction escapeCssString(value: string): string {\n // Minimal escaping for use inside double-quoted CSS strings.\n // Prevents breaking out of the attribute selector value.\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\r?\\n/g, ' ')\n}\n\nexport type TokenGroup = {\n name: string\n tokens: ResolvedToken[]\n}\n\nexport function groupTokensByType(\n tokens: ResolvedTokens,\n typeGroupMap: Record<string, string>,\n): TokenGroup[] {\n const groupMap = new Map<string, ResolvedToken[]>()\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const groupName = typeGroupMap[token.$type ?? ''] ?? 'Other'\n const existing = groupMap.get(groupName) ?? []\n existing.push(token)\n groupMap.set(groupName, existing)\n }\n\n return Array.from(groupMap.entries()).map(([name, groupTokens]) => ({\n name,\n tokens: groupTokens,\n }))\n}\n\nexport function indentStr(width: number, level: number): string {\n return ' '.repeat(width * level)\n}\n\nexport function buildGeneratedFileHeader(): string {\n return [\n '// Generated by Dispersa - do not edit manually',\n '// https://github.com/dispersa-core/dispersa',\n ].join('\\n')\n}\n\nexport function toSafeIdentifier(name: string, keywords: Set<string>, capitalize: boolean): string {\n const camel = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n const cased = capitalize\n ? camel.charAt(0).toUpperCase() + camel.slice(1)\n : camel.charAt(0).toLowerCase() + camel.slice(1)\n\n const safe = /^\\d/.test(cased) ? `_${cased}` : cased\n\n const keyCheck = capitalize ? safe.charAt(0).toLowerCase() + safe.slice(1) : safe\n return keywords.has(keyCheck) ? `\\`${safe}\\`` : safe\n}\n\nexport function normalizeModifierInputs(inputs: Record<string, string>): Record<string, string> {\n const normalized: Record<string, string> = {}\n for (const [key, value] of Object.entries(inputs)) {\n normalized[key.toLowerCase()] = value.toLowerCase()\n }\n return normalized\n}\n\nexport function assertFileRequired(\n buildPath: string | undefined,\n outputFile: string | ((inputs: ModifierInputs) => string) | undefined,\n outputName: string,\n presetLabel: string,\n): void {\n const requiresFile = buildPath !== undefined && buildPath !== ''\n if (!outputFile && requiresFile) {\n throw new ConfigurationError(\n `Output \"${outputName}\": file is required for ${presetLabel} output`,\n )\n }\n}\n\nexport function buildStablePermutationKey(\n modifierInputs: Record<string, string>,\n dimensions: string[],\n): string {\n return dimensions.map((dimension) => `${dimension}=${modifierInputs[dimension] ?? ''}`).join('|')\n}\n\n/**\n * Resolve a CSS selector (either string or function) to a string\n *\n * Handles both static string selectors and dynamic function-based selectors.\n * Falls back to default behavior if no selector is provided:\n * - Base permutation: ':root'\n * - Modifier permutation: '[data-{modifierName}=\"{context}\"]'\n *\n * @param selector - Selector as string or function\n * @param modifierName - Name of the modifier (e.g., 'theme')\n * @param context - Context value of the modifier (e.g., 'dark')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns Resolved CSS selector string\n */\nexport function resolveSelector(\n selector: string | SelectorFunction | undefined,\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n): string {\n if (typeof selector === 'function') {\n return selector(modifierName, context, isBase, allModifierInputs)\n }\n if (typeof selector === 'string') {\n return selector\n }\n // Default behavior\n if (isBase) {\n return ':root'\n }\n\n const attrName = sanitizeDataAttributeName(modifierName)\n const attrValue = escapeCssString(context)\n return `[data-${attrName}=\"${attrValue}\"]`\n}\n\n/**\n * Resolve a media query (either string or function) to a string\n *\n * Handles both static string media queries and dynamic function-based media queries.\n * Returns empty string if no media query is provided.\n *\n * @param mediaQuery - Media query as string or function\n * @param modifierName - Name of the modifier (e.g., 'breakpoint')\n * @param context - Context value of the modifier (e.g., 'mobile')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns Resolved media query string or empty string\n */\nexport function resolveMediaQuery(\n mediaQuery: string | MediaQueryFunction | undefined,\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n): string {\n if (typeof mediaQuery === 'function') {\n return mediaQuery(modifierName, context, isBase, allModifierInputs)\n }\n if (typeof mediaQuery === 'string') {\n return mediaQuery\n }\n // No default for media queries\n return ''\n}\n\n/**\n * Strip internal metadata from tokens before formatting\n * Removes all properties starting with underscore (_)\n */\nexport function stripInternalMetadata(tokens: InternalResolvedTokens): ResolvedTokens {\n return stripInternalTokenMetadata(tokens)\n}\n\n/**\n * Generate a clean key/label for a permutation\n *\n * For base permutation: returns \"base\"\n * For single-dimension diff: returns \"modifier-value\" (e.g., \"theme-dark\", \"brand-partner-a\")\n * For multi-dimension diff (fallback): returns full key (e.g., \"primary-web-comfortable-dark-standard\")\n */\nexport function generatePermutationKey(\n modifierInputs: Record<string, string>,\n resolver: ResolverDocument,\n isBase: boolean,\n): string {\n if (isBase) {\n return 'base'\n }\n\n const metadata = buildMetadata(resolver)\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const defaults = metadata.defaults\n\n // Find which modifier differs\n const differences: Array<{ name: string; value: string }> = []\n for (const dimension of metadata.dimensions) {\n const value = normalizedInputs[dimension]\n if (value !== undefined && value !== defaults[dimension]) {\n differences.push({ name: dimension, value })\n }\n }\n\n // If exactly one modifier differs, use clean format\n if (differences.length === 1 && differences[0]) {\n const diff = differences[0]\n return `${diff.name}-${diff.value}`\n }\n\n // Fallback: use full key (shouldn't happen with single-dimension permutations)\n return buildStablePermutationKey(normalizedInputs, metadata.dimensions)\n}\n\nexport function isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n): boolean {\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(defaults)\n return Object.entries(normalizedDefaults).every(([key, value]) => normalizedInputs[key] === value)\n}\n\nexport function buildInMemoryOutputKey(params: {\n outputName: string\n extension: string\n modifierInputs: Record<string, string>\n resolver: ResolverDocument\n defaults: Record<string, string>\n}): string {\n const { outputName, extension, modifierInputs, resolver, defaults } = params\n const permutationKey = generatePermutationKey(\n modifierInputs,\n resolver,\n isBasePermutation(modifierInputs, defaults),\n )\n return `${outputName}-${permutationKey}.${extension}`\n}\n\nexport type BundleMetadata = {\n dimensions: string[]\n defaults: Record<string, string>\n}\n\n/**\n * Build metadata for bundle formats\n */\nexport function buildMetadata(resolver: ResolverDocument): BundleMetadata {\n const metadata: BundleMetadata = {\n dimensions: [],\n defaults: {},\n }\n\n if (resolver.modifiers) {\n for (const [name, modifier] of Object.entries(resolver.modifiers)) {\n const normalizedName = name.toLowerCase()\n const defaultContext = modifier.default ?? Object.keys(modifier.contexts)[0] ?? ''\n metadata.dimensions.push(normalizedName)\n metadata.defaults[normalizedName] = defaultContext.toLowerCase()\n }\n }\n\n return metadata\n}\n\n/**\n * Resolve a resolver input to a ResolverDocument\n *\n * Handles both string paths (loaded from filesystem) and inline ResolverDocument objects.\n * This eliminates duplicate resolver loading logic across renderers.\n *\n * @param input - Either a file path string or an inline ResolverDocument object\n * @returns Resolved ResolverDocument ready for use\n */\nexport async function resolveResolverDocument(\n input: string | ResolverDocument,\n): Promise<ResolverDocument> {\n if (typeof input === 'string') {\n const { ResolverLoader } = await import('@adapters/filesystem/resolver-loader')\n const loader = new ResolverLoader({})\n return await loader.loadDocument(input)\n }\n return input\n}\n\n/**\n * Count how many modifiers differ between two inputs\n */\nexport function countModifierDifferences(\n currentInputs: Record<string, string>,\n baseInputs: Record<string, string>,\n): number {\n const normalizedCurrent = normalizeModifierInputs(currentInputs)\n const normalizedBase = normalizeModifierInputs(baseInputs)\n let count = 0\n for (const [key, value] of Object.entries(normalizedCurrent)) {\n if (value !== normalizedBase[key]) {\n count++\n }\n }\n return count\n}\n\n/**\n * Determine which modifier source this permutation represents\n * Returns source tag like \"theme-dark\" or \"platform-mobile\"\n */\nexport function getExpectedSource(\n currentInputs: Record<string, string>,\n baseInputs: Record<string, string>,\n): string {\n const normalizedCurrent = normalizeModifierInputs(currentInputs)\n const normalizedBase = normalizeModifierInputs(baseInputs)\n // Find which modifier differs\n for (const [key, value] of Object.entries(normalizedCurrent)) {\n if (value !== normalizedBase[key]) {\n return `${key}-${value}`\n }\n }\n return 'base'\n}\n\n/**\n * Extract modifier name and context from an expected source string\n * For example: \"theme-dark\" returns [\"theme\", \"dark\"]\n */\nexport function parseModifierSource(source: string): [modifierName: string, context: string] {\n const dashIndex = source.indexOf('-')\n if (dashIndex === -1) {\n return [source, '']\n }\n return [source.slice(0, dashIndex), source.slice(dashIndex + 1)]\n}\n\n/**\n * Filter tokens to only include those from a specific source\n */\nexport function filterTokensBySource(\n tokens: InternalResolvedTokens,\n expectedSource: string,\n): InternalResolvedTokens {\n const filtered: InternalResolvedTokens = {}\n const expected = expectedSource.toLowerCase()\n\n for (const [name, token] of Object.entries(tokens)) {\n const source =\n typeof token._sourceModifier === 'string' ? token._sourceModifier.toLowerCase() : ''\n\n // Check if token has the expected source (case-insensitive)\n if (source !== '' && source === expected) {\n filtered[name] = token\n }\n }\n\n return filtered\n}\n\n/**\n * Filter tokens to only include those originating from sets (not modifiers)\n *\n * Returns tokens that have no `_sourceModifier` tag, meaning they were defined\n * in the resolver's sets section and not overridden by any modifier context.\n */\nexport function filterTokensFromSets(tokens: InternalResolvedTokens): InternalResolvedTokens {\n const filtered: InternalResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n const hasModifierSource =\n typeof token._sourceModifier === 'string' && token._sourceModifier !== ''\n if (!hasModifierSource) {\n filtered[name] = token\n }\n }\n\n return filtered\n}\n\n/**\n * Resolve a filename for the modifier preset's base file.\n *\n * Unlike `resolveFileName`, this does not inject synthetic modifier values.\n * Instead it handles each filename mode with base-specific logic:\n *\n * - **Pattern string**: replaces all `{key}` placeholders with `\"base\"`, then\n * collapses consecutive `base` segments (e.g. `base-base` or `base/base`).\n * - **Plain string**: appends `-base` before the file extension.\n * - **Function**: calls with the actual default modifier inputs.\n *\n * @param fileName - Filename configuration (string, pattern, or function)\n * @param defaults - Default modifier inputs for the base permutation\n * @returns Resolved base filename\n */\nexport function resolveBaseFileName(\n fileName: string | ((modifierInputs: ModifierInputs) => string),\n defaults: ModifierInputs,\n): string {\n if (typeof fileName === 'function') {\n return fileName({ ...defaults, _base: 'true' })\n }\n\n if (/\\{.+?\\}/.test(fileName)) {\n const baseInputs = Object.fromEntries(Object.keys(defaults).map((k) => [k, 'base']))\n return collapseBaseSegments(interpolatePattern(fileName, baseInputs))\n }\n\n const extMatch = fileName.match(/(\\.[^.]+)$/)\n const extension = extMatch ? extMatch[1] : ''\n const baseName = extension ? fileName.slice(0, -extension.length) : fileName\n return `${baseName}-base${extension}`\n}\n\n/**\n * Collapse consecutive \"base\" segments separated by `-` or `/`.\n * For example `base-base/tokens.css` becomes `base/tokens.css`.\n */\nfunction collapseBaseSegments(value: string): string {\n let result = value\n let previous = ''\n while (result !== previous) {\n previous = result\n result = result.replace(/\\bbase([/-])base\\b/, 'base')\n }\n return result\n}\n\n/**\n * Interpolate pattern placeholders in a filename string\n *\n * Replaces {key} placeholders with values from modifierInputs.\n * For example, \"tokens-{theme}-{platform}.css\" with {theme: 'dark', platform: 'mobile'}\n * becomes \"tokens-dark-mobile.css\".\n *\n * @param pattern - Filename pattern with {key} placeholders\n * @param modifierInputs - Modifier values to interpolate\n * @returns Interpolated filename\n */\nexport function interpolatePattern(pattern: string, modifierInputs: ModifierInputs): string {\n let result = pattern\n\n for (const [key, value] of Object.entries(modifierInputs)) {\n result = result.replaceAll(`{${key}}`, value)\n }\n return result\n}\n\n/**\n * Generate filename for standalone renderer\n *\n * Supports three modes:\n * 1. Pattern string with {key} placeholders: \"tokens-{theme}-{platform}.css\"\n * 2. Function that receives modifierInputs: (inputs) => `tokens-${inputs.theme}.css`\n * 3. Plain string: applies default pattern with all modifiers\n *\n * @param fileName - Filename configuration (string or function)\n * @param modifierInputs - Modifier values for this permutation\n * @returns Resolved filename\n */\nexport function resolveFileName(\n fileName: string | ((modifierInputs: ModifierInputs) => string),\n modifierInputs: ModifierInputs,\n): string {\n // Function-based filename\n if (typeof fileName === 'function') {\n return fileName(modifierInputs)\n }\n\n // Pattern-based filename: check if it contains {key} placeholders\n if (/\\{.+?\\}/.test(fileName)) {\n return interpolatePattern(fileName, modifierInputs)\n }\n\n // Plain string: apply default pattern (backward compatible)\n // Extract file extension and base name\n const extMatch = fileName.match(/(\\.[^.]+)$/)\n const extension = extMatch ? extMatch[1] : ''\n const baseName = extension ? fileName.slice(0, -extension.length) : fileName\n\n // Build modifier suffix from all modifiers\n const modifierSuffix = Object.entries(modifierInputs)\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .map(([key, value]) => `${key}-${value}`)\n .join('-')\n\n // Construct filename with suffix before extension\n if (modifierSuffix) {\n return `${baseName}-${modifierSuffix}${extension}`\n }\n\n return fileName\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Shared utilities for consistent metadata formatting across renderers\n */\n\nimport type { ResolvedToken } from '@tokens/types'\n\nexport type CommentFormat = 'css' | 'js' | 'swift' | 'kotlin' | 'tailwind'\n\nfunction sanitizeText(text: string, format: CommentFormat): string {\n switch (format) {\n case 'css':\n case 'tailwind':\n return text.replace(/\\*\\//g, '*\\\\/').replace(/\\r?\\n/g, ' ').trim()\n case 'kotlin':\n return text.replace(/\\*\\//g, '* /').replace(/\\r?\\n/g, ' ').trim()\n case 'js':\n case 'swift':\n return text.replace(/\\r?\\n/g, ' ').trim()\n default:\n return text.trim()\n }\n}\n\nfunction buildDeprecationText(token: ResolvedToken): string {\n if (token.$deprecated == null || token.$deprecated === false) {\n return ''\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n return msg ? `DEPRECATED: ${msg}` : 'DEPRECATED'\n}\n\nexport function buildTokenDescriptionComment(\n token: ResolvedToken,\n format: CommentFormat,\n): string | undefined {\n if (!token.$description || token.$description === '') {\n return undefined\n }\n\n const text = sanitizeText(token.$description, format)\n\n switch (format) {\n case 'css':\n case 'tailwind':\n return `/* ${text} */`\n case 'js':\n return `// ${text}`\n case 'swift':\n return `/// ${text}`\n case 'kotlin':\n return `/** ${text} */`\n default:\n return undefined\n }\n}\n\nexport function buildTokenDeprecationComment(\n token: ResolvedToken,\n format: CommentFormat,\n): string | undefined {\n const text = buildDeprecationText(token)\n if (!text) {\n return undefined\n }\n\n switch (format) {\n case 'css':\n case 'tailwind':\n return `/* ${text} */`\n case 'js':\n return `// ${text}`\n case 'swift':\n return `/// ${text}`\n case 'kotlin':\n return `/** ${text} */`\n default:\n return undefined\n }\n}\n\nexport function buildSetComment(setName: string, description?: string): string {\n if (description) {\n return `/* Set: ${setName} */\\n/* ${sanitizeText(description, 'css')} */`\n }\n return `/* Set: ${setName} */`\n}\n\nexport function buildModifierComment(modifier: string, context: string): string {\n return `/* Modifier: ${modifier}=${context} */`\n}\n\nexport function buildSwiftDeprecationAttribute(token: ResolvedToken): string | undefined {\n if (token.$deprecated == null || token.$deprecated === false) {\n return undefined\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n if (msg) {\n return `@available(*, deprecated, message: \"${sanitizeText(msg, 'swift')}\")`\n }\n return '@available(*, deprecated)'\n}\n\nexport function buildKotlinDeprecationAnnotation(token: ResolvedToken): string | undefined {\n if (token.$deprecated == null || token.$deprecated === false) {\n return undefined\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n if (msg) {\n return `@Deprecated(message = \"${sanitizeText(msg, 'kotlin')}\")`\n }\n return '@Deprecated'\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview JavaScript module bundler for multi-theme output\n */\n\nimport type { JsModuleRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport { buildModifierComment } from '../metadata'\n\nimport type { BundleDataItem } from './types'\nimport type { BundleMetadata } from './utils'\nimport { buildMetadata, normalizeModifierInputs, stripInternalMetadata } from './utils'\n\ntype StringTrackingState = {\n inString: boolean\n stringChar: string\n escaped: boolean\n}\n\nfunction updateStringTracking(state: StringTrackingState, char: string): void {\n if (!state.escaped && (char === '\"' || char === \"'\" || char === '`')) {\n if (!state.inString) {\n state.inString = true\n state.stringChar = char\n } else if (char === state.stringChar) {\n state.inString = false\n state.stringChar = ''\n }\n }\n state.escaped = !state.escaped && char === '\\\\'\n}\n\n/**\n * Extract object literal from formatted JS module using balanced brace matching\n * More robust than regex for handling nested objects/arrays\n */\nfunction extractObjectFromJsModule(formattedJs: string): string {\n const assignmentMatch = /const\\s+\\w+\\s*=\\s*\\{/.exec(formattedJs)\n if (!assignmentMatch) {\n return '{}'\n }\n\n const startIndex = assignmentMatch.index + assignmentMatch[0].length - 1\n const state: StringTrackingState = { inString: false, stringChar: '', escaped: false }\n let braceCount = 0\n\n for (let i = startIndex; i < formattedJs.length; i++) {\n const char = formattedJs[i]!\n updateStringTracking(state, char)\n\n if (state.inString) {\n continue\n }\n\n if (char === '{') {\n braceCount++\n } else if (char === '}') {\n braceCount--\n if (braceCount === 0) {\n return formattedJs.substring(startIndex, i + 1)\n }\n }\n }\n\n return '{}'\n}\n\nfunction toCamelKey(key: string): string {\n if (key === '') {\n return ''\n }\n return key\n .split('-')\n .filter((part) => part !== '')\n .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1)))\n .join('')\n}\n\nfunction buildStableDashKey(params: {\n modifierInputs: Record<string, string>\n dimensions: string[]\n defaults: Record<string, string>\n}): string {\n const { modifierInputs, dimensions, defaults } = params\n const inputs = normalizeModifierInputs(modifierInputs)\n\n return dimensions\n .map((dimension) => {\n const value = inputs[dimension] ?? defaults[dimension] ?? ''\n return String(value)\n })\n .join('-')\n}\n\n/** Generate the optional getTokens helper function source */\nfunction buildHelperFunction(dimensions: string[]): string {\n const dimensionOrder = dimensions.map((d) => JSON.stringify(d)).join(', ')\n return [\n `/**`,\n ` * Get tokens for a specific modifier combination`,\n ` * @param {Object} modifiers - Modifier values (e.g., { theme: 'dark', brand: 'partner-a' })`,\n ` * @returns {Object} Resolved tokens for the combination`,\n ` */`,\n `export function getTokens(modifiers = {}) {`,\n ` const key = [${dimensionOrder}]`,\n ` .map(dim => modifiers[dim] ?? tokenBundle._meta.defaults[dim])`,\n ` .join('-')`,\n ` const camelKey = key`,\n ` .split('-')`,\n ` .filter(Boolean)`,\n ` .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1)))`,\n ` .join('')`,\n ` return tokenBundle.tokens[camelKey]`,\n `}`,\n ``,\n ``,\n ].join('\\n')\n}\n\n/** Assemble the final JS bundle output string */\nfunction assembleJsBundle(\n metadata: BundleMetadata,\n jsBlocks: string[],\n generateHelper: boolean,\n): string {\n let output = `const tokenBundle = {\\n`\n output += ` _meta: ${JSON.stringify(metadata, null, 2).replace(/\\n/g, '\\n ')},\\n`\n output += ` tokens: {\\n${jsBlocks.join(',\\n')}\\n }\\n`\n output += `}\\n\\n`\n\n if (generateHelper) {\n output += buildHelperFunction(metadata.dimensions)\n }\n\n output += `export default tokenBundle\\n`\n return output\n}\n\n/**\n * Bundle tokens as JS module with metadata and optional helper\n *\n * JS-specific strategy: All combinations for dynamic theming\n * - Includes metadata with dimensions and defaults\n * - All permutations included (no filtering)\n * - Optional helper function for key generation\n */\nexport async function bundleAsJsModule(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n options: JsModuleRendererOptions | undefined,\n formatTokens?: (tokens: ResolvedTokens) => Promise<string>,\n): Promise<string> {\n if (!formatTokens) {\n throw new ConfigurationError('JS formatter was not provided')\n }\n\n const metadata = buildMetadata(resolver)\n const jsBlocks: string[] = []\n\n for (const { tokens, modifierInputs, isBase } of bundleData) {\n const cleanTokens = stripInternalMetadata(tokens)\n const key = buildStableDashKey({\n modifierInputs,\n dimensions: metadata.dimensions,\n defaults: metadata.defaults,\n })\n const camelKey = toCamelKey(key)\n\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const modifierParts: string[] = []\n for (const dim of metadata.dimensions) {\n const value = normalizedInputs[dim.toLowerCase()]\n if (value) {\n modifierParts.push(`${dim}=${value}`)\n }\n }\n\n const formattedJs = await formatTokens(cleanTokens)\n const tokenObject = extractObjectFromJsModule(formattedJs)\n const indentedObject = tokenObject.replace(/\\n/g, '\\n ')\n\n let comment: string\n if (modifierParts.length > 0) {\n const modifierPart = modifierParts[0]!\n const eqIndex = modifierPart.indexOf('=')\n const modifier = modifierPart.slice(0, eqIndex)\n const context = modifierPart.slice(eqIndex + 1)\n comment = buildModifierComment(modifier, context)\n } else if (isBase) {\n comment = '// Base permutation'\n } else {\n comment = `// ${key}`\n }\n\n jsBlocks.push(` ${comment}\\n ${JSON.stringify(camelKey)}: ${indentedObject}`)\n }\n\n return assembleJsBundle(metadata, jsBlocks, options?.generateHelper ?? false)\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview JSON bundler for multi-theme output\n */\n\nimport type { ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport {\n buildMetadata,\n buildStablePermutationKey,\n normalizeModifierInputs,\n stripInternalMetadata,\n} from './utils'\n\n/**\n * Bundle tokens as JSON object with metadata for runtime lookup\n *\n * JSON-specific strategy: All combinations for dynamic theming\n * - Includes metadata with dimensions and defaults\n * - All permutations included (no filtering)\n * - Predictable keys for O(1) lookup\n */\nexport async function bundleAsJson(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n formatTokens?: (tokens: ResolvedTokens) => Promise<string>,\n): Promise<string> {\n if (!formatTokens) {\n throw new ConfigurationError('JSON formatter was not provided')\n }\n\n const metadata = buildMetadata(resolver)\n const tokens: Record<string, unknown> = {}\n\n for (const { tokens: tokenSet, modifierInputs } of bundleData) {\n const cleanTokens = stripInternalMetadata(tokenSet)\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const key = buildStablePermutationKey(normalizedInputs, metadata.dimensions)\n const themeJson = await formatTokens(cleanTokens)\n tokens[key] = JSON.parse(themeJson) as unknown\n }\n\n const bundle = { _meta: metadata, tokens }\n return JSON.stringify(bundle, null, 2)\n}\n","/**\n * @fileoverview TypeScript type definition generator for design tokens\n *\n * Generates comprehensive TypeScript type definitions from resolved tokens\n * including token name unions, value types, and nested structure types.\n */\n\nimport type { ResolvedTokens, ResolvedToken, TokenType } from '@tokens/types'\n\n/**\n * Options for TypeScript type generation\n */\nexport type TypeGeneratorOptions = {\n /** Export style: 'type' alias or 'interface' (default: 'type') */\n exportType?: 'type' | 'interface'\n\n /** Include token value types (default: false) */\n includeValues?: boolean\n\n /** Name for the main module type (default: 'Tokens') */\n moduleName?: string\n}\n\n/**\n * Generates TypeScript type definitions from design tokens\n *\n * Creates type-safe TypeScript definitions including:\n * - Token name string literal unions for autocomplete\n * - Value types mapped to token values\n * - Nested structure types matching token hierarchy\n *\n * @example\n * ```typescript\n * const generator = new TypeGenerator()\n * const types = generator.generate(tokens, {\n * exportType: 'type',\n * includeValues: true,\n * moduleName: 'DesignTokens'\n * })\n *\n * // Output:\n * // export type TokenName = 'color.primary' | 'color.secondary' | ...\n * // export type DesignTokens = { color: { primary: string, ... } }\n * ```\n */\nexport class TypeGenerator {\n /**\n * Generates complete TypeScript type definitions from resolved tokens\n *\n * @param tokens - Resolved tokens to generate types from\n * @param options - Generation options\n * @returns TypeScript type definition string\n *\n * @example\n * ```typescript\n * const types = generator.generate(tokens, {\n * moduleName: 'Tokens',\n * includeValues: true\n * })\n * ```\n */\n generate(tokens: ResolvedTokens, options?: TypeGeneratorOptions): string {\n const opts = {\n exportType: 'type',\n includeValues: false,\n moduleName: 'Tokens',\n ...options,\n } as const\n\n const lines: string[] = []\n\n // Generate token names type\n lines.push(...this.generateTokenNamesType(tokens, 'TokenName'))\n lines.push('')\n\n // Generate token values type\n if (opts.includeValues) {\n lines.push(...this.generateTokenValuesType(tokens, `${opts.moduleName}Values`))\n lines.push('')\n }\n\n // Generate nested structure type\n lines.push(...this.generateStructureType(tokens, opts))\n\n return lines.join('\\n')\n }\n\n /**\n * Generates a string literal union type of all token names\n *\n * Useful for creating type-safe token name variables.\n *\n * @param tokens - Resolved tokens\n * @param typeName - Name for the exported type (default: 'TokenName')\n * @returns Array of type definition lines\n *\n * @example\n * ```typescript\n * // Output:\n * // export type TokenName =\n * // | \"color.primary\"\n * // | \"color.secondary\"\n * ```\n */\n generateTokenNamesType(tokens: ResolvedTokens, typeName = 'TokenName'): string[] {\n const names = Object.keys(tokens)\n const lines: string[] = []\n\n if (names.length === 0) {\n lines.push(`export type ${typeName} = never`)\n return lines\n }\n\n lines.push(`export type ${typeName} =`)\n for (let i = 0; i < names.length; i++) {\n const name = names[i]\n if (name == null) {\n continue\n }\n lines.push(` | \"${name}\"`)\n }\n\n return lines\n }\n\n /**\n * Generate token values type\n */\n generateTokenValuesType(tokens: ResolvedTokens, typeName = 'TokenValues'): string[] {\n const lines: string[] = []\n\n lines.push(`export type ${typeName} = {`)\n\n for (const [name, token] of Object.entries(tokens)) {\n if (token.$description) {\n lines.push(` /** ${token.$description} */`)\n }\n\n const valueType = this.inferValueType(token)\n lines.push(` \"${name}\": ${valueType}`)\n }\n\n lines.push('}')\n\n return lines\n }\n\n /**\n * Generate nested structure type\n */\n private generateStructureType(\n tokens: ResolvedTokens,\n options: Required<TypeGeneratorOptions>,\n ): string[] {\n const lines: string[] = []\n const structure = this.buildNestedStructure(tokens)\n\n const opener =\n options.exportType === 'type'\n ? `export type ${options.moduleName} = {`\n : `export interface ${options.moduleName} {`\n\n lines.push(opener)\n this.addStructureProperties(lines, structure, 1)\n lines.push('}')\n\n return lines\n }\n\n /**\n * Build nested structure from flat tokens\n */\n private buildNestedStructure(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const token of Object.values(tokens)) {\n const parts = token.path\n if (!parts || parts.length === 0) {\n continue\n }\n\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part == null) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = parts[parts.length - 1]\n if (lastPart != null) {\n current[lastPart] = token\n }\n }\n\n return result\n }\n\n /**\n * Add structure properties to lines\n */\n private addStructureProperties(\n lines: string[],\n structure: Record<string, unknown>,\n indent: number,\n ): void {\n const indentStr = ' '.repeat(indent)\n\n for (const [key, value] of Object.entries(structure)) {\n if (this.isToken(value)) {\n const token = value\n if (token.$description) {\n lines.push(`${indentStr}/** ${token.$description} */`)\n }\n\n const valueType = this.inferValueType(token)\n lines.push(`${indentStr}${this.quoteKey(key)}: ${valueType}`)\n } else {\n lines.push(`${indentStr}${this.quoteKey(key)}: {`)\n this.addStructureProperties(lines, value as Record<string, unknown>, indent + 1)\n lines.push(`${indentStr}}`)\n }\n }\n }\n\n /**\n * Infer TypeScript type from token\n */\n private inferValueType(token: ResolvedToken): string {\n const value = token.$value\n\n // Use token type if available\n if (token.$type) {\n return this.tokenTypeToTsType(token.$type)\n }\n\n // Infer from value\n if (typeof value === 'string') {\n return 'string'\n }\n if (typeof value === 'number') {\n return 'number'\n }\n if (typeof value === 'boolean') {\n return 'boolean'\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'unknown[]'\n }\n const itemType = typeof value[0]\n return `${itemType}[]`\n }\n\n if (typeof value === 'object' && value !== null) {\n return 'Record<string, unknown>'\n }\n\n return 'unknown'\n }\n\n /**\n * Map a DTCG token type to its TypeScript type representation.\n *\n * Covers the standard DTCG types (color, dimension, shadow, etc.).\n * Falls back to `string` for unrecognised types.\n */\n private tokenTypeToTsType(tokenType: TokenType): string {\n switch (tokenType) {\n case 'color':\n case 'dimension':\n case 'fontFamily':\n case 'duration':\n return 'string'\n case 'fontWeight':\n return 'string | number'\n case 'number':\n return 'number'\n case 'cubicBezier':\n return '[number, number, number, number]'\n case 'shadow':\n return '{ color: string; offsetX: string; offsetY: string; blur: string; spread: string; inset?: boolean } | Array<{ color: string; offsetX: string; offsetY: string; blur: string; spread: string; inset?: boolean }>'\n default:\n return 'string'\n }\n }\n\n /**\n * Quote key if necessary\n */\n private quoteKey(key: string): string {\n if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n return key\n }\n return `\"${key}\"`\n }\n\n /**\n * Check if value is a token\n */\n private isToken(value: unknown): value is ResolvedToken {\n return (\n typeof value === 'object' &&\n value !== null &&\n '$value' in value &&\n 'path' in value &&\n 'name' in value\n )\n }\n}\n","/**\n * @fileoverview TypeScript type file writer\n */\n\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport * as path from 'node:path'\n\nimport { TypeGenerator, type TypeGeneratorOptions } from '@codegen/type-generator'\nimport type { ResolvedTokens } from '@tokens/types'\n\nexport type TypeWriterOptions = TypeGeneratorOptions & {\n fileName: string\n}\n\nexport class TypeWriter {\n private generator: TypeGenerator\n\n constructor() {\n this.generator = new TypeGenerator()\n }\n\n /**\n * Write type definitions to file\n */\n async write(tokens: ResolvedTokens, options: TypeWriterOptions): Promise<void> {\n const content = this.generator.generate(tokens, options)\n const fileName = path.isAbsolute(options.fileName)\n ? options.fileName\n : path.resolve(process.cwd(), options.fileName)\n\n // Ensure directory exists\n await mkdir(path.dirname(fileName), { recursive: true })\n\n // Write file\n await writeFile(fileName, content, 'utf-8')\n }\n\n /**\n * Generate type definitions without writing to file\n */\n generate(tokens: ResolvedTokens, options?: TypeGeneratorOptions): string {\n return this.generator.generate(tokens, options)\n }\n}\n","/**\n * @fileoverview Build orchestration and coordination\n * Handles build execution and error collection\n */\n\nimport type { OutputProcessor } from '@build/output-processor'\nimport type { BuildConfig } from '@config/index'\nimport { buildMetadata, resolveResolverDocument } from '@renderers/bundlers/utils'\nimport type { BuildResult, PermutationData, RenderContext } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { toBuildError } from '@shared/utils/error-utils'\nimport type { TokenPipeline } from './pipeline/token-pipeline'\n\n/**\n * Orchestrates the build process for design tokens\n *\n * Coordinates between the token pipeline, output processor, and renderers\n * to generate output files. Handles error collection and provides consistent\n * error handling across different outputs.\n *\n * @example\n * ```typescript\n * const orchestrator = new BuildOrchestrator(pipeline, outputProcessor)\n * const result = await orchestrator.build(resolver, buildPath, config)\n * ```\n */\nexport class BuildOrchestrator {\n constructor(\n private pipeline: TokenPipeline,\n private outputProcessor: OutputProcessor,\n ) {}\n\n /**\n * Build tokens with explicit or auto-discovered permutations\n *\n * Unified build method that handles both explicit and auto-discovered permutations:\n * - If `config.permutations` is provided and non-empty, builds those specific permutations\n * - If `config.permutations` is empty/undefined, auto-discovers all permutations from resolver\n * - If `config.permutations` is `[{}]`, builds single default permutation\n *\n * This consolidates the previous `build()` and `build()` methods into one unified API.\n *\n * @param resolver - Resolver configuration (file path or inline object)\n * @param buildPath - Output directory for generated files\n * @param config - Build configuration with outputs and transforms\n * @returns Build result with success status and generated files\n *\n * @example Build all permutations (auto-discover)\n * ```typescript\n * await orchestrator.build(resolver, buildPath, {\n * outputs: [{ name: 'css', renderer: cssRenderer(), file: 'tokens.css', options: { preset: 'bundle' } }]\n * })\n * ```\n *\n * @example Build specific permutations\n * ```typescript\n * await orchestrator.build(resolver, buildPath, {\n * outputs: [\n * { name: 'css', renderer: cssRenderer(), file: 'tokens.css', options: { preset: 'standalone' } }\n * ],\n * permutations: [{ theme: 'light' }, { theme: 'dark' }]\n * })\n * ```\n *\n * @example Build with default permutation (no modifiers)\n * ```typescript\n * await orchestrator.build(resolver, buildPath, {\n * outputs: [\n * { name: 'css', renderer: cssRenderer(), file: 'tokens.css', options: { preset: 'standalone' } }\n * ],\n * permutations: [{}]\n * })\n * ```\n */\n async build(\n resolver: string | ResolverDocument,\n buildPath: string,\n config: BuildConfig,\n ): Promise<BuildResult> {\n // Fire onBuildStart hook before any work begins\n if (config.hooks?.onBuildStart) {\n await config.hooks.onBuildStart({ config, resolver })\n }\n\n if (!config.permutations || config.permutations.length === 0) {\n // Resolve all permutations without lint\n const permutations = await this.pipeline.resolveAllPermutations(\n resolver,\n config.transforms,\n config.preprocessors,\n config.filters,\n )\n\n // Run lint on all permutations with deduplication\n if (config.lint?.enabled) {\n const tokenSets = permutations.map((p) => p.tokens)\n await this.pipeline.runLintOnPermutations(tokenSets, config.lint)\n }\n\n return this.executeBuild(buildPath, config, permutations, resolver)\n }\n\n const permutations = await Promise.all(\n config.permutations.map(async (modifierInputs) => {\n const { tokens, modifierInputs: resolvedInputs } = await this.pipeline.resolve(\n resolver,\n modifierInputs,\n config.transforms,\n config.preprocessors,\n config.filters,\n )\n return { tokens, modifierInputs: resolvedInputs }\n }),\n )\n\n if (config.lint?.enabled) {\n const tokenSets = permutations.map((p) => p.tokens)\n await this.pipeline.runLintOnPermutations(tokenSets, config.lint)\n }\n\n return this.executeBuild(buildPath, config, permutations, resolver)\n }\n\n /**\n * Execute the build process for resolved permutations\n *\n * This is the main build execution logic that processes all permutations through\n * each output's renderer, collecting errors but continuing execution to maximize\n * successful outputs even when some outputs fail.\n *\n * This method replaces the previous `buildWithResolver()` method and handles:\n * - Applying transforms and filters from the build configuration\n * - Processing permutations through each output's renderer\n * - Collecting errors but continuing with other outputs\n * - Returning a unified build result with outputs and errors\n *\n * @param buildPath - Output directory for generated files\n * @param config - Build configuration with outputs and transforms\n * @param permutations - Array of resolved permutation data\n * @returns Build result with success status, outputs, and any errors\n */\n private async executeBuild(\n buildPath: string,\n config: BuildConfig,\n permutations: PermutationData[],\n resolver: string | ResolverDocument,\n ): Promise<BuildResult> {\n try {\n const resolverDoc = await resolveResolverDocument(resolver)\n const metadata = buildMetadata(resolverDoc)\n\n const settled = await Promise.allSettled(\n config.outputs.map((output) =>\n this.buildSingleOutput(output, permutations, resolverDoc, metadata, buildPath, config, resolver),\n ),\n )\n\n const result = this.collectSettledResults(settled, config)\n\n if (config.hooks?.onBuildEnd) {\n await config.hooks.onBuildEnd(result)\n }\n\n return result\n } catch (error) {\n const result: BuildResult = {\n success: false,\n outputs: [],\n errors: [toBuildError(error)],\n }\n\n if (config.hooks?.onBuildEnd) {\n await config.hooks.onBuildEnd(result)\n }\n\n return result\n }\n }\n\n private async buildSingleOutput(\n output: BuildConfig['outputs'][number],\n permutations: PermutationData[],\n resolverDoc: ResolverDocument,\n metadata: ReturnType<typeof buildMetadata>,\n buildPath: string,\n config: BuildConfig,\n resolver: string | ResolverDocument,\n ): Promise<BuildResult['outputs']> {\n if (output.hooks?.onBuildStart) {\n await output.hooks.onBuildStart({ config, resolver })\n }\n\n try {\n const results = await this.processOutput(output, permutations, resolverDoc, metadata, metadata.defaults, buildPath)\n\n if (output.hooks?.onBuildEnd) {\n await output.hooks.onBuildEnd({ success: true, outputs: results })\n }\n\n return results\n } catch (error) {\n if (output.hooks?.onBuildEnd) {\n await output.hooks.onBuildEnd({ success: false, outputs: [], errors: [toBuildError(error, output.name)] })\n }\n\n throw error\n }\n }\n\n private collectSettledResults(\n settled: PromiseSettledResult<BuildResult['outputs']>[],\n config: BuildConfig,\n ): BuildResult {\n const outputs: BuildResult['outputs'] = []\n const errors: BuildResult['errors'] = []\n\n for (let i = 0; i < settled.length; i++) {\n const outcome = settled[i]!\n if (outcome.status === 'fulfilled') {\n outputs.push(...outcome.value)\n } else {\n errors.push(toBuildError(outcome.reason, config.outputs[i]!.name))\n }\n }\n\n return {\n success: errors.length === 0,\n outputs,\n errors: errors.length > 0 ? errors : undefined,\n }\n }\n\n private async processOutput(\n output: BuildConfig['outputs'][number],\n permutations: PermutationData[],\n resolverDoc: ResolverDocument,\n metadata: ReturnType<typeof buildMetadata>,\n basePermutation: Record<string, string>,\n buildPath: string,\n ) {\n if (!output.renderer.format) {\n throw new ConfigurationError('Renderer does not implement format()')\n }\n\n const processedPermutations = this.outputProcessor.processPermutations(permutations, output)\n\n const context: RenderContext = {\n permutations: processedPermutations,\n output,\n resolver: resolverDoc,\n meta: { ...metadata, basePermutation },\n buildPath,\n }\n\n const renderOutput = await output.renderer.format(context, output.options)\n return this.outputProcessor.writeRenderOutput(renderOutput, context)\n }\n\n /**\n * Note: intentionally no version/introspection API here.\n * Keep public surface minimal; use package versioning instead.\n */\n}\n","/**\n * @fileoverview Error handling utilities\n */\n\nimport type { BuildError } from '@renderers/types'\nimport {\n BasePermutationError,\n CircularReferenceError,\n ConfigurationError,\n FileOperationError,\n ModifierError,\n TokenReferenceError,\n ValidationError,\n} from '@shared/errors/index'\n\n/**\n * Extract error message from unknown error value\n * Standardizes error message extraction across the codebase\n *\n * @param error - Unknown error value\n * @returns Error message string\n */\nexport function getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\n/**\n * Convert an unknown error into a structured BuildError.\n *\n * Extracts typed context (error code, token path, file path) from\n * the dispersa error hierarchy so that BuildResult consumers can\n * programmatically react to specific failure modes.\n *\n * @param error - The caught error value\n * @param outputName - Optional output name to prefix the message\n * @returns A structured BuildError with code, paths, and severity\n */\nexport function toBuildError(error: unknown, outputName?: string): BuildError {\n const rawMessage = getErrorMessage(error)\n const message = outputName ? `Failed to build output '${outputName}': ${rawMessage}` : rawMessage\n\n if (error instanceof TokenReferenceError) {\n return {\n message,\n code: 'TOKEN_REFERENCE',\n tokenPath: error.referenceName,\n severity: 'error',\n suggestions: error.suggestions.length > 0 ? error.suggestions : undefined,\n }\n }\n if (error instanceof CircularReferenceError) {\n return { message, code: 'CIRCULAR_REFERENCE', tokenPath: error.tokenName, severity: 'error' }\n }\n if (error instanceof ValidationError) {\n return { message, code: 'VALIDATION', severity: 'error' }\n }\n if (error instanceof FileOperationError) {\n return { message, code: 'FILE_OPERATION', path: error.filePath, severity: 'error' }\n }\n if (error instanceof ConfigurationError) {\n return { message, code: 'CONFIGURATION', severity: 'error' }\n }\n if (error instanceof BasePermutationError) {\n return { message, code: 'BASE_PERMUTATION', severity: 'error' }\n }\n if (error instanceof ModifierError) {\n return { message, code: 'MODIFIER', severity: 'error' }\n }\n\n return { message, code: 'UNKNOWN', severity: 'error' }\n}\n","/**\n * @fileoverview File I/O utilities for consistent file operations\n */\n\nimport { constants as fsConstants } from 'node:fs'\nimport { access, mkdir, readFile, writeFile } from 'node:fs/promises'\nimport * as path from 'node:path'\n\nimport { FileOperationError, ValidationError } from '@shared/errors/index'\n/**\n * Read and parse a JSON file\n * Provides consistent error handling and path resolution\n *\n * @param filePath - Path to JSON file (absolute or relative)\n * @param baseDir - Base directory for resolving relative paths (defaults to cwd)\n * @returns Parsed JSON content\n * @throws Error if file not found or invalid JSON\n */\nexport async function readJSONFile(filePath: string, baseDir?: string): Promise<unknown> {\n const absolutePath = path.isAbsolute(filePath)\n ? filePath\n : path.resolve(baseDir ?? process.cwd(), filePath)\n\n try {\n await access(absolutePath, fsConstants.R_OK)\n } catch (error) {\n throw new FileOperationError('read', absolutePath, error as Error)\n }\n\n try {\n const content = await readFile(absolutePath, 'utf-8')\n return JSON.parse(content)\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error)\n throw new ValidationError(`Failed to read or parse file ${absolutePath}: ${errorMsg}`, [\n { message: errorMsg },\n ])\n }\n}\n\n/**\n * Write content to a file, creating parent directories as needed\n *\n * Provides consistent file writing with automatic directory creation.\n * This consolidates the common pattern of mkdir + writeFile.\n *\n * @param fileName - Path where file should be written (absolute or relative)\n * @param content - Content to write to the file\n * @param encoding - File encoding (default: 'utf-8')\n * @throws Error if file cannot be written\n *\n * @example\n * ```typescript\n * await writeOutputFile('./dist/tokens.css', cssContent)\n * ```\n */\nexport async function writeOutputFile(\n fileName: string,\n content: string,\n encoding: BufferEncoding = 'utf-8',\n): Promise<void> {\n try {\n // Create parent directories if they don't exist\n await mkdir(path.dirname(fileName), { recursive: true })\n // Write the file\n await writeFile(fileName, content, encoding)\n } catch (error) {\n throw new FileOperationError('write', fileName, error as Error)\n }\n}\n","/**\n * @fileoverview Utilities for applying transforms and filters to tokens\n */\n\nimport type { Filter } from '@processing/filters/types'\nimport type { Transform } from '@processing/transforms/types'\nimport type { ResolvedTokens } from '@tokens/types'\n\n/**\n * Apply a list of transforms to tokens\n *\n * @param tokens - Tokens to transform\n * @param transformList - List of transform objects to apply\n * @returns Transformed tokens\n */\nexport function applyTransforms(\n tokens: ResolvedTokens,\n transformList: Transform[],\n): ResolvedTokens {\n const result: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n let transformed = token\n\n for (const transform of transformList) {\n // Apply transform if matcher passes (or no matcher)\n if (transform.matcher == null || transform.matcher(transformed)) {\n transformed = transform.transform(transformed)\n }\n }\n\n result[name] = transformed\n }\n\n return result\n}\n\n/**\n * Apply a list of filters to tokens\n *\n * @param tokens - Tokens to filter\n * @param filterList - List of filter objects to apply\n * @returns Filtered tokens (only tokens that pass all filters)\n */\nexport function applyFilters(tokens: ResolvedTokens, filterList: Filter[]): ResolvedTokens {\n const result: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n let shouldInclude = true\n\n for (const filter of filterList) {\n // If any filter excludes the token, skip it\n if (!filter.filter(token)) {\n shouldInclude = false\n break\n }\n }\n\n if (shouldInclude) {\n result[name] = token\n }\n }\n\n return result\n}\n","/**\n * @fileoverview Output processor for handling output-specific token rendering\n */\n\nimport * as path from 'node:path'\n\nimport { writeOutputFile } from '@adapters/filesystem/file-utils'\nimport type { OutputConfig } from '@config/index'\nimport type { ModifierInputs } from '@resolution/types'\nimport type { ResolvedTokens } from '@tokens/types'\nimport { applyFilters, applyTransforms } from '@processing/apply'\nimport { resolveFileName } from '@renderers/bundlers/utils'\nimport { isOutputTree } from '@renderers/output-tree'\nimport type {\n PermutationData,\n RenderContext,\n RenderOutput,\n} from '@renderers/types'\nimport { ConfigurationError } from '@shared/errors/index'\n\nexport type OutputResult = {\n name: string\n /** File path or in-memory output key */\n path?: string\n content: string\n}\n\nexport class OutputProcessor {\n /**\n * Apply output-specific filters and transforms to a permutation set.\n */\n processPermutations(\n permutations: PermutationData[],\n output: OutputConfig,\n ): PermutationData[] {\n return permutations.map(({ tokens, modifierInputs }) => ({\n tokens: this.applyFiltersAndTransforms(tokens, output),\n modifierInputs,\n }))\n }\n\n /**\n * Apply filters and transforms to tokens without formatting.\n */\n applyFiltersAndTransforms(tokens: ResolvedTokens, output: OutputConfig): ResolvedTokens {\n let outputTokens = tokens\n\n // Apply output-specific filters first (select which tokens to include)\n if (output.filters !== undefined && output.filters.length > 0) {\n outputTokens = applyFilters(outputTokens, output.filters)\n }\n\n // Apply output-specific transforms (only to filtered tokens)\n if (output.transforms !== undefined && output.transforms.length > 0) {\n outputTokens = applyTransforms(outputTokens, output.transforms)\n }\n\n return outputTokens\n }\n\n /**\n * Write rendered output (string or output tree) to the filesystem.\n */\n async writeRenderOutput(\n renderOutput: RenderOutput,\n context: RenderContext,\n ): Promise<OutputResult[]> {\n if (typeof renderOutput === 'string') {\n return [await this.writeSingleOutput(renderOutput, context)]\n }\n\n if (!isOutputTree(renderOutput)) {\n throw new ConfigurationError('Renderer returned an unsupported output shape')\n }\n\n return await this.writeOutputTree(renderOutput.files, context)\n }\n\n private async writeSingleOutput(\n content: string,\n context: RenderContext,\n ): Promise<OutputResult> {\n const { output, buildPath, meta } = context\n\n if (buildPath !== undefined && buildPath !== '') {\n if (!output.file) {\n throw new ConfigurationError(\n `Output \"${output.name}\": file is required when buildPath is provided`,\n )\n }\n\n const fileName = this.resolveSingleOutputFileName(output.file, meta.basePermutation)\n const fullPath = path.resolve(buildPath, fileName)\n await writeOutputFile(fullPath, content)\n return { name: output.name, path: fullPath, content }\n }\n\n return { name: output.name, path: undefined, content }\n }\n\n private async writeOutputTree(\n files: Record<string, string>,\n context: RenderContext,\n ): Promise<OutputResult[]> {\n const { output, buildPath } = context\n const entries = Object.entries(files).sort(([pathA], [pathB]) => pathA.localeCompare(pathB))\n\n if (entries.length === 0) {\n return []\n }\n\n // Write all files in parallel -- each entry targets a unique path\n const results = await Promise.all(\n entries.map(async ([relativePath, content]) => {\n const outputPath =\n buildPath !== undefined && buildPath !== ''\n ? path.resolve(buildPath, relativePath)\n : relativePath\n\n if (buildPath !== undefined && buildPath !== '') {\n await writeOutputFile(outputPath, content)\n }\n\n return { name: output.name, path: outputPath, content } satisfies OutputResult\n }),\n )\n\n return results\n }\n\n private resolveSingleOutputFileName(\n outputFile: string | ((modifierInputs: ModifierInputs) => string),\n modifierInputs: ModifierInputs,\n ): string {\n if (typeof outputFile === 'function') {\n return outputFile(modifierInputs)\n }\n\n if (/\\{.+?\\}/.test(outputFile)) {\n return resolveFileName(outputFile, modifierInputs)\n }\n\n return outputFile\n }\n}\n","/**\n * @fileoverview Output tree helpers for custom renderers\n */\n\nimport type { OutputTree } from './types'\n\n/**\n * Create an {@link OutputTree} from a map of file paths to content strings.\n *\n * Use this when building a custom renderer that produces multiple output files\n * (e.g. one file per theme or permutation).\n *\n * @param files - Record mapping relative file paths to their string content\n * @returns An `OutputTree` that the build orchestrator can write to disk or return in-memory\n *\n * @example\n * ```typescript\n * import { defineRenderer, outputTree } from 'dispersa/renderers'\n *\n * const myRenderer = defineRenderer((context) => {\n * return outputTree({\n * 'light.css': '/* light tokens *\\/',\n * 'dark.css': '/* dark tokens *\\/',\n * })\n * })\n * ```\n */\nexport const outputTree = (files: Record<string, string>): OutputTree => {\n return {\n kind: 'outputTree',\n files,\n }\n}\n\n/**\n * Type guard that checks whether a value is an {@link OutputTree}.\n *\n * @param value - The value to check\n * @returns `true` if the value is an `OutputTree`\n */\nexport const isOutputTree = (value: unknown): value is OutputTree => {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { kind?: unknown }).kind === 'outputTree'\n )\n}\n","/**\n * @fileoverview Token resolution pipeline\n * Handles the flow: parse resolver → resolve tokens → preprocess → resolve $ref → flatten → resolve aliases → strip $root → apply filters → apply transforms\n *\n * Pipeline stages are explicitly typed to prevent temporal coupling and ensure\n * operations happen in the correct order.\n */\n\nimport { ResolverLoader } from '@adapters/filesystem/resolver-loader'\nimport { LintRunner } from '@lint/lint-runner'\nimport type { LintBuildConfig, LintResult } from '@lint/types'\nimport { applyFilters, applyTransforms } from '@processing/apply'\nimport type { Filter } from '@processing/filters/types'\nimport type { Preprocessor } from '@processing/preprocessors/types'\nimport type { Transform } from '@processing/transforms/types'\nimport { AliasResolver } from '@resolution/alias-resolver'\nimport { ReferenceResolver } from '@resolution/reference-resolver'\nimport { ResolutionEngine } from '@resolution/resolution-engine'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport { LintError } from '@shared/errors'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { rewriteRootReferences } from '@shared/utils/token-utils'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport { TokenParser } from '@tokens/token-parser'\nimport type { InternalResolvedTokens, InternalTokenDocument } from '@tokens/types'\nimport type {\n AliasResolvedStage,\n EngineReadyStage,\n FinalStage,\n FlattenedStage,\n LoadedResolverStage,\n PreprocessedStage,\n RawTokensStage,\n ReferenceResolvedStage,\n} from './pipeline-stages'\n\nexport type TokenPipelineOptions = {\n validation?: ValidationOptions\n}\n\nexport type TokenPipelineResult = {\n tokens: InternalResolvedTokens\n resolutionEngine: ResolutionEngine\n modifierInputs: ModifierInputs\n}\n\nexport class TokenPipeline {\n private options: TokenPipelineOptions\n private validationHandler: ValidationHandler\n private resolverLoader: ResolverLoader\n private tokenParser: TokenParser\n private aliasResolver: AliasResolver\n\n constructor(options: TokenPipelineOptions = {}) {\n this.options = options\n this.validationHandler = new ValidationHandler(options.validation)\n this.resolverLoader = new ResolverLoader({ validation: options.validation })\n this.tokenParser = new TokenParser({ validation: options.validation })\n this.aliasResolver = new AliasResolver({ validation: options.validation })\n }\n /**\n * Execute the complete token resolution pipeline\n *\n * The pipeline executes in the following explicit stages:\n * 1. Load resolver document\n * 2. Create resolution engine\n * 3. Resolve tokens using modifier inputs\n * 4. Apply preprocessors (if provided)\n * 5. Resolve JSON Pointer references\n * 6. Parse and flatten token structure\n * 7. Resolve alias references\n * 8. Strip $root from token names/paths (DTCG structural mechanism, transparent in output)\n * 9. Apply filters (if provided) — runs first to remove tokens before transforms\n * 10. Apply transforms (if provided) — runs on the already-filtered token set\n *\n * Each stage is explicitly typed to ensure correct order and prevent temporal coupling.\n *\n * Note: Linting is handled separately via runLintOnPermutations() to enable\n * deduplication across multiple permutations.\n *\n * @param resolver - Either a file path (string) or an inline ResolverDocument object\n * @param modifierInputs - Modifier values for this permutation\n * @param transformList - Optional transforms to apply\n * @param preprocessorList - Optional preprocessors to apply\n * @param filterList - Optional filters to apply before transforms\n * @returns Final tokens and resolution engine\n */\n async resolve(\n resolver: string | ResolverDocument,\n modifierInputs: ModifierInputs,\n transformList?: Transform[],\n preprocessorList?: Preprocessor[],\n filterList?: Filter[],\n ): Promise<TokenPipelineResult> {\n const stage1 = await this.loadResolver(resolver)\n const engine = this.createEngine(stage1)\n const result = await this.runPipelineStages(\n engine,\n modifierInputs,\n preprocessorList,\n filterList,\n transformList,\n )\n\n return {\n tokens: result.tokens,\n resolutionEngine: result.resolutionEngine,\n modifierInputs: result.modifierInputs,\n }\n }\n\n /**\n * Run pipeline stages 3-11 on a pre-created engine\n *\n * Shared by both `resolve()` (single permutation) and\n * `resolveAllPermutations()` (parallel permutations) to keep the\n * stage sequence defined in exactly one place.\n */\n private async runPipelineStages(\n engine: EngineReadyStage,\n modifierInputs: ModifierInputs,\n preprocessorList?: Preprocessor[],\n filterList?: Filter[],\n transformList?: Transform[],\n ): Promise<FinalStage> {\n const rawTokens = await this.resolveTokens(engine, modifierInputs)\n const preprocessed = await this.preprocessTokens(rawTokens, preprocessorList)\n const refResolved = await this.resolveReferences(preprocessed)\n const flattened = this.flattenTokens(refResolved)\n const aliasResolved = this.resolveAliases(flattened)\n const rootStripped = this.stripRootTokenNames(aliasResolved)\n const filtered = this.applyFilterStage(rootStripped, filterList)\n return this.applyTransformStage(filtered, transformList)\n }\n\n /**\n * Stage 1: Load and parse resolver document\n */\n private async loadResolver(\n resolver: string | ResolverDocument,\n ): Promise<LoadedResolverStage> {\n return await this.resolverLoader.load(resolver)\n }\n\n /**\n * Stage 2: Create resolution engine\n *\n * @param stage - Loaded resolver stage\n * @param sharedCache - Optional shared file cache for parallel-safe instantiation.\n * When provided, the ReferenceResolver shares this cache with other instances\n * while keeping an independent `visited` set for circular-reference detection.\n */\n private createEngine(\n stage: LoadedResolverStage,\n sharedCache?: Map<string, unknown>,\n ): EngineReadyStage {\n const refResolver = new ReferenceResolver(stage.baseDir, {\n validation: this.options.validation,\n cache: sharedCache,\n })\n const resolutionEngine = new ResolutionEngine(stage.resolverDoc, refResolver, {\n validation: this.options.validation,\n })\n return { ...stage, resolutionEngine, refResolver }\n }\n\n /**\n * Stage 3: Resolve tokens using modifier inputs\n */\n private async resolveTokens(\n stage: EngineReadyStage,\n modifierInputs: ModifierInputs,\n ): Promise<RawTokensStage> {\n const result = await stage.resolutionEngine.resolveWithInputs(modifierInputs)\n return {\n ...stage,\n rawTokens: result.tokens,\n modifierInputs: result.modifierInputs,\n }\n }\n\n /**\n * Stage 4: Apply preprocessors to raw tokens\n */\n private async preprocessTokens(\n stage: RawTokensStage,\n preprocessorList?: Preprocessor[],\n ): Promise<PreprocessedStage> {\n let preprocessedTokens = stage.rawTokens\n\n if (preprocessorList !== undefined && preprocessorList.length > 0) {\n preprocessedTokens = await this.applyPreprocessors(stage.rawTokens, preprocessorList)\n }\n\n const { rawTokens: _rawTokens, ...rest } = stage\n return { ...rest, preprocessedTokens }\n }\n\n /**\n * Stage 5: Resolve JSON Pointer references\n */\n private async resolveReferences(stage: PreprocessedStage): Promise<ReferenceResolvedStage> {\n try {\n const resolved = await stage.refResolver.resolveDeepTokenDocument(\n stage.preprocessedTokens,\n stage.preprocessedTokens,\n )\n const { preprocessedTokens: _preprocessedTokens, ...rest } = stage\n return {\n ...rest,\n referenceResolvedTokens: resolved as InternalTokenDocument,\n referenceResolution: 'resolved',\n }\n } catch (error) {\n return this.handleReferenceResolutionError(stage, error)\n }\n }\n\n /**\n * Stage 6: Parse and flatten token structure\n */\n private flattenTokens(stage: ReferenceResolvedStage): FlattenedStage {\n const flatTokens = this.tokenParser.flatten(stage.referenceResolvedTokens)\n\n const { referenceResolvedTokens: _referenceResolvedTokens, ...rest } = stage\n return { ...rest, flatTokens }\n }\n\n /**\n * Stage 7: Resolve alias references\n */\n private resolveAliases(stage: FlattenedStage): AliasResolvedStage {\n const aliasResolvedTokens = this.aliasResolver.resolve(stage.flatTokens)\n\n const { flatTokens: _flatTokens, ...rest } = stage\n return { ...rest, aliasResolvedTokens }\n }\n\n /**\n * Stage 8: Strip `$root` from token names and paths.\n *\n * `$root` is a DTCG structural mechanism that allows a group to carry a\n * default value alongside child tokens. References must use the full path\n * (`{color.action.brand.$root}`) for alias resolution, but `$root` should\n * be transparent in output. This stage re-keys tokens so downstream\n * consumers (filters, transforms, renderers) see clean names.\n */\n private stripRootTokenNames(stage: AliasResolvedStage): AliasResolvedStage {\n const tokens = stage.aliasResolvedTokens\n const result: InternalResolvedTokens = {}\n\n for (const [key, token] of Object.entries(tokens)) {\n const rewrittenOriginal = rewriteRootReferences(token.originalValue)\n\n if (!key.endsWith('.$root')) {\n result[key] =\n rewrittenOriginal !== token.originalValue\n ? { ...token, originalValue: rewrittenOriginal }\n : token\n continue\n }\n\n const strippedPath = token.path.filter((segment) => segment !== '$root')\n const strippedName = strippedPath.join('.')\n\n result[strippedName] = {\n ...token,\n path: strippedPath,\n name: strippedName,\n originalValue: rewrittenOriginal,\n }\n }\n\n return { ...stage, aliasResolvedTokens: result }\n }\n\n /**\n /**\n * Stage 9: Apply filters to tokens after alias resolution and $root stripping\n */\n private applyFilterStage(stage: AliasResolvedStage, filterList?: Filter[]): AliasResolvedStage {\n let tokens = stage.aliasResolvedTokens\n\n if (filterList !== undefined && filterList.length > 0) {\n tokens = applyFilters(tokens, filterList)\n }\n\n return { ...stage, aliasResolvedTokens: tokens }\n }\n\n /**\n * Stage 10: Apply transforms to the filtered token set\n */\n private applyTransformStage(stage: AliasResolvedStage, transformList?: Transform[]): FinalStage {\n let tokens = stage.aliasResolvedTokens\n\n if (transformList !== undefined && transformList.length > 0) {\n tokens = applyTransforms(tokens, transformList)\n }\n\n const { aliasResolvedTokens: _aliasResolvedTokens, ...rest } = stage\n return { ...rest, tokens }\n }\n\n private handleReferenceResolutionError(\n stage: PreprocessedStage,\n error: unknown,\n ): ReferenceResolvedStage {\n const wrappedError = error instanceof Error ? error : new Error(String(error))\n this.validationHandler.handleIssue(wrappedError)\n\n const message = wrappedError.message\n this.validationHandler.warn(`Reference resolution skipped: ${message}`)\n\n const { preprocessedTokens: _preprocessedTokens, ...rest } = stage\n return {\n ...rest,\n referenceResolvedTokens: stage.preprocessedTokens,\n referenceResolution: 'skipped',\n referenceResolutionMessage: message,\n }\n }\n\n /**\n * Resolve tokens for all permutations (parallelized)\n *\n * Creates independent resolution engines per permutation that share a\n * common file cache. Each engine has its own `visited` set so concurrent\n * resolution cannot trigger false circular-reference errors.\n *\n * @param resolver - Either a file path (string) or an inline ResolverDocument object\n * @param transformList - Optional transforms to apply\n * @param preprocessorList - Optional preprocessors to apply\n * @param filterList - Optional filters to apply before transforms\n */\n async resolveAllPermutations(\n resolver: string | ResolverDocument,\n transformList?: Transform[],\n preprocessorList?: Preprocessor[],\n filterList?: Filter[],\n ): Promise<\n {\n tokens: InternalResolvedTokens\n modifierInputs: ModifierInputs\n }[]\n > {\n // Stage 1: Load resolver once\n const stage1 = await this.loadResolver(resolver)\n\n // Create an initial engine just to discover permutations\n const discoveryEngine = this.createEngine(stage1)\n const permutationInputs = discoveryEngine.resolutionEngine.generatePermutations()\n\n // Shared file cache: all per-permutation engines read/cache the same\n // parsed files, avoiding redundant I/O without sharing mutable `visited` state.\n const sharedCache: Map<string, unknown> = new Map()\n\n // Resolve every permutation in parallel, each with its own engine\n return await Promise.all(\n permutationInputs.map(async (modifierInputs) => {\n const engine = this.createEngine(stage1, sharedCache)\n const result = await this.runPipelineStages(\n engine,\n modifierInputs,\n preprocessorList,\n filterList,\n transformList,\n )\n\n return {\n tokens: result.tokens,\n modifierInputs: result.modifierInputs,\n }\n }),\n )\n }\n\n /**\n * Run lint on tokens from multiple permutations with deduplication\n *\n * This runs lint once on all permutation token sets combined and deduplicates\n * issues. Use this after resolveAllPermutations() for consistent lint behavior.\n */\n async runLintOnPermutations(\n permutationTokens: InternalResolvedTokens[],\n lintConfig: LintBuildConfig,\n ): Promise<LintResult> {\n if (!lintConfig.enabled) {\n return { issues: [], errorCount: 0, warningCount: 0 }\n }\n\n const runner = new LintRunner({\n plugins: lintConfig.plugins,\n rules: lintConfig.rules,\n onWarn: (msg) => this.validationHandler.warn(msg),\n })\n\n const result = await runner.runMultiple(permutationTokens)\n\n // Log warnings\n for (const issue of result.issues.filter((i) => i.severity === 'warn')) {\n this.validationHandler.warn(`[${issue.ruleId}] ${issue.message} (token: ${issue.tokenName})`)\n }\n\n // Handle errors\n if (result.errorCount > 0 && lintConfig.failOnError !== false) {\n throw new LintError(result.issues)\n }\n\n return result\n }\n\n /**\n * Apply preprocessors to raw tokens\n */\n private async applyPreprocessors(\n rawTokens: InternalTokenDocument,\n preprocessorList: Preprocessor[],\n ): Promise<InternalTokenDocument> {\n let result = rawTokens\n\n for (const preprocessor of preprocessorList) {\n result = await preprocessor.preprocess(result)\n }\n\n return result\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Plugin loader for lint plugins\n *\n * Supports loading plugins from:\n * - Inline plugin objects\n * - String module paths (package names or file paths)\n */\n\nimport { createRequire } from 'node:module'\nimport { isAbsolute, resolve } from 'node:path'\nimport process from 'node:process'\n\nimport { ConfigurationError } from '@shared/errors'\nimport { createJiti } from 'jiti'\n\nimport type { LintPlugin } from './types'\n\nexport type PluginLoaderOptions = {\n /**\n * Base directory for resolving relative plugin paths\n * @default process.cwd()\n */\n cwd?: string\n}\n\n/**\n * Loads lint plugins from various sources\n *\n * Handles:\n * - Inline `LintPlugin` objects (returned as-is)\n * - Package names (e.g., '@dispersa/lint-plugin-a11y')\n * - Relative file paths (e.g., './plugins/my-plugin.ts')\n * - Absolute file paths\n *\n * @security **Warning**: Loading plugins from external packages or file paths\n * executes arbitrary code. Only load plugins from trusted sources.\n * For programmatic usage, prefer passing plugin objects directly rather than\n * strings that trigger dynamic imports.\n *\n * @example\n * ```typescript\n * const loader = new PluginLoader({ cwd: process.cwd() })\n *\n * // Load from inline object\n * const plugin1 = await loader.load(myPlugin)\n *\n * // Load from package\n * const plugin2 = await loader.load('@dispersa/lint-plugin-a11y')\n *\n * // Load from file\n * const plugin3 = await loader.load('./plugins/custom.ts')\n * ```\n */\nexport class PluginLoader {\n private cwd: string\n private jiti: ReturnType<typeof createJiti> | null = null\n private cache: Map<string, LintPlugin> = new Map()\n\n constructor(options: PluginLoaderOptions = {}) {\n this.cwd = options.cwd ?? process.cwd()\n }\n\n /**\n * Load a plugin from an inline object or module path\n *\n * @param source - Plugin object or module path string\n * @returns Loaded plugin\n * @throws {ConfigurationError} If plugin cannot be loaded or is invalid\n */\n async load(source: LintPlugin | string): Promise<LintPlugin> {\n // Inline plugin object - return as-is\n if (this.isPluginObject(source)) {\n this.validatePlugin(source)\n return source\n }\n\n // String path - load module\n const modulePath = source as string\n const cached = this.cache.get(modulePath)\n if (cached) {\n return cached\n }\n\n const plugin = await this.loadFromModule(modulePath)\n this.validatePlugin(plugin)\n this.cache.set(modulePath, plugin)\n return plugin\n }\n\n /**\n * Load multiple plugins\n *\n * @param plugins - Record of namespace to plugin source\n * @returns Record of namespace to loaded plugin\n */\n async loadAll(plugins: Record<string, LintPlugin | string>): Promise<Record<string, LintPlugin>> {\n const entries = Object.entries(plugins)\n const loaded = await Promise.all(\n entries.map(async ([namespace, source]) => [namespace, await this.load(source)] as const),\n )\n return Object.fromEntries(loaded)\n }\n\n /**\n * Check if source is an inline plugin object\n */\n private isPluginObject(source: LintPlugin | string): source is LintPlugin {\n return typeof source !== 'string'\n }\n\n /**\n * Load a plugin from a module path\n */\n private async loadFromModule(modulePath: string): Promise<LintPlugin> {\n // Resolve relative paths from cwd\n const resolvedPath = isAbsolute(modulePath) ? modulePath : resolve(this.cwd, modulePath)\n\n // Check if it's a file path or package name\n const isFilePath =\n modulePath.startsWith('./') || modulePath.startsWith('../') || isAbsolute(modulePath)\n\n try {\n if (isFilePath) {\n return await this.loadFromFile(resolvedPath)\n }\n return await this.loadFromPackage(modulePath)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new ConfigurationError(`Failed to load lint plugin '${modulePath}': ${message}`)\n }\n }\n\n /**\n * Load a plugin from a file path using jiti (supports TypeScript)\n */\n private async loadFromFile(filePath: string): Promise<LintPlugin> {\n this.jiti ??= createJiti(this.cwd, {\n interopDefault: true,\n })\n\n const loaded = await this.jiti(filePath)\n const plugin = this.extractPlugin(loaded)\n\n if (!plugin) {\n throw new ConfigurationError(`Plugin file '${filePath}' does not export a valid LintPlugin`)\n }\n\n return plugin\n }\n\n /**\n * Load a plugin from a package name\n */\n private async loadFromPackage(packageName: string): Promise<LintPlugin> {\n // Try to require the package\n const require = createRequire(this.cwd)\n\n let resolvedPath: string\n try {\n resolvedPath = require.resolve(packageName, { paths: [this.cwd] })\n } catch {\n // Fallback: try from this module's location\n try {\n resolvedPath = require.resolve(packageName)\n } catch {\n throw new ConfigurationError(\n `Cannot find package '${packageName}'. Make sure it is installed.`,\n )\n }\n }\n\n // Use jiti to support ESM/CJS interoperability\n this.jiti ??= createJiti(this.cwd, {\n interopDefault: true,\n })\n\n const loaded = await this.jiti(resolvedPath)\n const plugin = this.extractPlugin(loaded)\n\n if (!plugin) {\n throw new ConfigurationError(`Package '${packageName}' does not export a valid LintPlugin`)\n }\n\n return plugin\n }\n\n /**\n * Extract plugin from loaded module\n *\n * Supports multiple export patterns:\n * - export default plugin\n * - export const plugin = {...}\n * - module.exports = plugin (CJS)\n */\n private extractPlugin(loaded: unknown): LintPlugin | null {\n if (!loaded || typeof loaded !== 'object') {\n return null\n }\n\n const module = loaded as Record<string, unknown>\n\n // Priority 1: default export\n if (module.default && this.isValidPluginStructure(module.default)) {\n return module.default as LintPlugin\n }\n\n // Priority 2: named export 'plugin'\n if (module.plugin && this.isValidPluginStructure(module.plugin)) {\n return module.plugin as LintPlugin\n }\n\n // Priority 3: module is the plugin itself (CJS module.exports = plugin)\n if (this.isValidPluginStructure(loaded)) {\n return loaded as LintPlugin\n }\n\n return null\n }\n\n /**\n * Check if object has required plugin structure\n */\n private isValidPluginStructure(obj: unknown): boolean {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n const plugin = obj as Record<string, unknown>\n const rules = plugin.rules as Record<string, unknown> | undefined\n\n if (\n plugin.meta === undefined ||\n typeof plugin.meta !== 'object' ||\n !(plugin.meta as Record<string, unknown>).name ||\n rules === undefined ||\n Object.keys(rules).length === 0\n ) {\n return false\n }\n\n return true\n }\n\n /**\n * Validate a loaded plugin\n */\n private validatePlugin(plugin: LintPlugin): void {\n if (!plugin.meta) {\n throw new ConfigurationError('Lint plugin must have a meta property with name')\n }\n\n if (!plugin.meta.name) {\n throw new ConfigurationError('Lint plugin meta.name is required')\n }\n\n if (\n !plugin.rules ||\n typeof plugin.rules !== 'object' ||\n Object.keys(plugin.rules).length === 0\n ) {\n throw new ConfigurationError(\n `Lint plugin '${plugin.meta.name}' must have a non-empty rules object`,\n )\n }\n\n // Validate each rule\n for (const [ruleName, rule] of Object.entries(plugin.rules)) {\n if (!rule.meta) {\n throw new ConfigurationError(\n `Rule '${ruleName}' in plugin '${plugin.meta.name}' is missing meta property`,\n )\n }\n if (!rule.meta.messages || typeof rule.meta.messages !== 'object') {\n throw new ConfigurationError(\n `Rule '${ruleName}' in plugin '${plugin.meta.name}' is missing meta.messages`,\n )\n }\n if (typeof rule.create !== 'function') {\n throw new ConfigurationError(\n `Rule '${ruleName}' in plugin '${plugin.meta.name}' is missing create function`,\n )\n }\n }\n }\n\n /**\n * Clear the plugin cache\n */\n clearCache(): void {\n this.cache.clear()\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Lint runner that executes rules in parallel against tokens\n *\n * The lint runner is responsible for:\n * - Loading plugins and resolving rule configurations\n * - Executing rules in parallel for performance\n * - Collecting and aggregating lint issues\n * - Interpolating message templates with data\n */\n\nimport type { InternalResolvedTokens, TokenType } from '@tokens/types'\n\nimport { PluginLoader } from './plugin-loader'\nimport type {\n AnyLintRule,\n LintConfig,\n LintIssue,\n LintPlugin,\n LintReportDescriptor,\n LintResult,\n LintRuleContext,\n ResolvedLintConfig,\n ResolvedRuleConfig,\n RuleConfig,\n} from './types'\n\nexport type LintRunnerOptions = LintConfig & {\n /** Callback for runner warnings (e.g. unknown rule). Defaults to console.warn. */\n onWarn?: (message: string) => void\n}\n\n/**\n * Executes lint rules against a set of tokens\n *\n * @example\n * ```typescript\n * const config: LintConfig = {\n * plugins: {\n * dispersa: dispersaPlugin,\n * },\n * rules: {\n * 'dispersa/require-description': 'warn',\n * 'dispersa/naming-convention': ['error', { format: 'kebab-case' }],\n * },\n * }\n *\n * const runner = new LintRunner(config)\n * const result = await runner.run(tokens)\n *\n * console.log(`Found ${result.errorCount} errors, ${result.warningCount} warnings`)\n * ```\n */\nexport class LintRunner {\n private config: LintRunnerOptions\n private pluginLoader: PluginLoader\n private resolvedConfig: ResolvedLintConfig | null = null\n private warn: (message: string) => void\n\n constructor(config: LintRunnerOptions) {\n this.config = config\n this.pluginLoader = new PluginLoader()\n this.warn = config.onWarn ?? console.warn\n }\n\n /**\n * Run all configured rules against the provided tokens\n *\n * Rules are executed in parallel for performance. Issues are collected\n * and returned with counts by severity.\n *\n * @param tokens - Resolved tokens to lint\n * @returns Lint result with issues and counts\n */\n async run(tokens: InternalResolvedTokens): Promise<LintResult> {\n this.resolvedConfig ??= await this.resolveConfig()\n\n const { rules, plugins } = this.resolvedConfig\n const issues: LintIssue[] = []\n\n if (Object.keys(rules).length === 0) {\n return { issues: [], errorCount: 0, warningCount: 0 }\n }\n\n const rulePromises = Object.entries(rules).map(async ([ruleId, ruleConfig]) => {\n const { severity, options } = ruleConfig\n\n const rule = this.resolveRule(ruleId, plugins)\n if (!rule) {\n this.warn(`[lint] Unknown rule '${ruleId}' - no plugin provides this rule`)\n return []\n }\n\n const reports: LintReportDescriptor<string>[] = []\n const applicableTokens = this.filterTokensByAppliesTo(tokens, rule.meta.appliesTo)\n const mergedOptions = rule.defaultOptions ? { ...rule.defaultOptions, ...options } : options\n\n const context: LintRuleContext<string, Record<string, unknown>> = {\n id: ruleId,\n options: mergedOptions,\n tokens: applicableTokens,\n report: (descriptor) => {\n reports.push(descriptor)\n },\n }\n\n try {\n await rule.create(context)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return [\n {\n ruleId: 'lint/rule-error',\n severity: 'error' as const,\n message: `Rule '${ruleId}' failed: ${message}`,\n tokenName: '(rule execution)',\n tokenPath: [],\n },\n ]\n }\n\n return reports.map((report) => {\n const messageTemplate = rule.meta.messages[report.messageId]\n const message = messageTemplate\n ? this.interpolateMessage(messageTemplate, report.data)\n : report.messageId\n\n return {\n ruleId,\n severity,\n message,\n tokenName: report.token.name,\n tokenPath: report.token.path,\n }\n })\n })\n\n const allIssues = await Promise.all(rulePromises)\n issues.push(...allIssues.flat())\n\n const errorCount = issues.filter((i) => i.severity === 'error').length\n const warningCount = issues.filter((i) => i.severity === 'warn').length\n\n return { issues, errorCount, warningCount }\n }\n\n /**\n * Resolve configuration: load plugins, parse rule configs\n */\n private async resolveConfig(): Promise<ResolvedLintConfig> {\n const { plugins: pluginSources = {}, rules: ruleConfigs = {} } = this.config\n\n const plugins = await this.pluginLoader.loadAll(pluginSources)\n\n const rules: Record<string, ResolvedRuleConfig> = {}\n\n for (const [ruleId, config] of Object.entries(ruleConfigs)) {\n const resolved = this.resolveRuleConfig(config)\n if (resolved) {\n rules[ruleId] = resolved\n }\n }\n\n return {\n enabled: true,\n failOnError: this.config.failOnError ?? true,\n plugins,\n rules,\n }\n }\n\n private filterTokensByAppliesTo(\n tokens: InternalResolvedTokens,\n appliesTo: TokenType[] | 'all' | undefined,\n ): InternalResolvedTokens {\n if (!appliesTo || appliesTo === 'all') {\n return tokens\n }\n\n const filtered: InternalResolvedTokens = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (token.$type && appliesTo.includes(token.$type)) {\n filtered[name] = token\n }\n }\n return filtered\n }\n\n /**\n * Parse rule configuration into resolved format\n */\n private resolveRuleConfig(config: RuleConfig): ResolvedRuleConfig | null {\n // Shorthand: severity only\n if (typeof config === 'string') {\n if (config === 'off') {\n return null\n }\n return { severity: config, options: {} }\n }\n\n // Longhand: [severity, options]\n const [severity, options = {}] = config\n if (severity === 'off') {\n return null\n }\n\n return { severity, options }\n }\n\n /**\n * Resolve a rule from plugins by rule ID\n *\n * Rule IDs are formatted as 'namespace/rule-name'\n */\n private resolveRule(ruleId: string, plugins: Record<string, LintPlugin>): AnyLintRule | null {\n const separatorIndex = ruleId.indexOf('/')\n if (separatorIndex === -1) {\n return null\n }\n\n const namespace = ruleId.slice(0, separatorIndex)\n const ruleName = ruleId.slice(separatorIndex + 1)\n\n const plugin = plugins[namespace]\n if (!plugin) {\n return null\n }\n\n return plugin.rules[ruleName] ?? null\n }\n\n /**\n * Interpolate message template with data\n *\n * Replaces {{key}} placeholders with values from data\n */\n private interpolateMessage(template: string, data?: Record<string, string | number>): string {\n if (!data) {\n return template\n }\n\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => {\n const value = data[key]\n return value !== undefined ? String(value) : `{{${key}}}`\n })\n }\n\n /**\n * Clear the plugin cache\n */\n clearCache(): void {\n this.pluginLoader.clearCache()\n this.resolvedConfig = null\n }\n\n /**\n * Run lint on multiple token sets with deduplication\n *\n * When running lint across multiple permutations (e.g., light/dark themes),\n * the same issue may appear multiple times. This method deduplicates issues\n * by ruleId, tokenName, and message.\n *\n * Use this for both standalone lint and build lint to ensure identical output.\n *\n * @param tokenSets - Array of resolved token sets to lint\n * @returns Combined lint result with deduplicated issues\n */\n async runMultiple(tokenSets: InternalResolvedTokens[]): Promise<LintResult> {\n const results = await Promise.all(tokenSets.map((tokens) => this.run(tokens)))\n\n const allIssues = results.flatMap((result) => result.issues)\n\n const seen = new Set<string>()\n const deduplicated: LintIssue[] = []\n\n for (const issue of allIssues) {\n const key = `${issue.ruleId}:${issue.tokenName}:${issue.message}`\n if (!seen.has(key)) {\n seen.add(key)\n deduplicated.push(issue)\n }\n }\n\n const errorCount = deduplicated.filter((i) => i.severity === 'error').length\n const warningCount = deduplicated.filter((i) => i.severity === 'warn').length\n\n return { issues: deduplicated, errorCount, warningCount }\n }\n}\n","/**\n * @fileoverview Global constants\n */\n\n/**\n * Default maximum depth for alias resolution\n * Prevents infinite recursion in circular references\n */\nexport const DEFAULT_MAX_ALIAS_DEPTH = 10\n\n/**\n * Default base font size in pixels for rem/em conversions\n */\nexport const DEFAULT_BASE_FONT_SIZE_PX = 16\n","/**\n * @fileoverview Token alias resolver with circular reference detection\n * Resolves {tokenName} references in token values\n */\n\nimport { DEFAULT_MAX_ALIAS_DEPTH } from '@shared/constants'\nimport { CircularReferenceError, TokenReferenceError, ValidationError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { findSimilar } from '@shared/utils/string-similarity'\nimport { getPureAliasReferenceName } from '@shared/utils/token-utils'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport type { InternalResolvedToken, InternalResolvedTokens, TokenValue } from '@tokens/types'\n\nexport type AliasResolutionOptions = {\n maxDepth?: number\n /**\n * Enable validation mode (throws errors on missing references)\n * When false, unresolved references are left as-is\n * Default: true\n */\n validation?: ValidationOptions\n}\n\nexport class AliasResolver {\n private options: AliasResolutionOptions\n private resolving: Set<string>\n private validationHandler: ValidationHandler\n\n constructor(options: AliasResolutionOptions = {}) {\n this.options = {\n maxDepth: DEFAULT_MAX_ALIAS_DEPTH,\n ...options,\n }\n this.resolving = new Set()\n this.validationHandler = new ValidationHandler(options.validation)\n }\n\n /**\n * Resolve all aliases in a token collection\n *\n * Processes each token and resolves any alias references (e.g., `{token.name}`)\n * to their actual values. Detects circular references and enforces maximum depth.\n *\n * @param tokens - Collection of tokens to resolve aliases in\n * @returns New collection with all aliases resolved to their values\n * @throws {CircularReferenceError} If circular reference detected\n * @throws {TokenReferenceError} If referenced token not found (when validate enabled)\n */\n resolve(tokens: InternalResolvedTokens): InternalResolvedTokens {\n const result: InternalResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n this.resolving.clear() // Clear for each top-level token\n result[name] = this.resolveToken(name, token, tokens, 0)\n }\n\n return result\n }\n\n /**\n * Resolve aliases in a single token\n */\n private resolveToken(\n name: string,\n token: InternalResolvedToken,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): InternalResolvedToken {\n this.assertMaxDepth(name, depth)\n this.assertNotCircular(name)\n\n this.resolving.add(name)\n try {\n const hadAlias = AliasResolver.hasAliases((token.$value ?? '') as TokenValue)\n const pureAliasReferenceName = getPureAliasReferenceName((token.$value ?? '') as TokenValue)\n\n if (pureAliasReferenceName !== undefined) {\n return this.resolvePureAliasToken(\n name,\n token,\n allTokens,\n depth,\n hadAlias,\n pureAliasReferenceName,\n )\n }\n\n return this.resolveInlineAliasToken(name, token, allTokens, depth, hadAlias)\n } finally {\n this.resolving.delete(name)\n }\n }\n\n private assertMaxDepth(name: string, depth: number): void {\n const maxDepth = this.options.maxDepth ?? DEFAULT_MAX_ALIAS_DEPTH\n if (depth <= maxDepth) {\n return\n }\n\n throw new ValidationError(`Maximum alias resolution depth exceeded for token: ${name}`, [\n { message: `Maximum alias resolution depth exceeded for token: ${name}` },\n ])\n }\n\n private assertNotCircular(name: string): void {\n if (!this.resolving.has(name)) {\n return\n }\n throw new CircularReferenceError(name, Array.from(this.resolving))\n }\n\n private resolvePureAliasToken(\n name: string,\n token: InternalResolvedToken,\n allTokens: InternalResolvedTokens,\n depth: number,\n hadAlias: boolean,\n referenceName: string,\n ): InternalResolvedToken {\n try {\n const referencedToken = this.resolveReferenceToken(referenceName, allTokens, depth)\n if (referencedToken === undefined) {\n return this.withAliasMarker(token, token.$value, hadAlias)\n }\n\n const updatedType = this.getTypeAfterCompatibilityCheck(\n token.$type,\n referencedToken.$type,\n name,\n referenceName,\n )\n\n return this.withAliasMarker(\n {\n ...token,\n $type: updatedType,\n },\n (referencedToken.$value ?? '') as TokenValue,\n hadAlias,\n )\n } catch (error) {\n return this.handleAliasError(error, name, token, hadAlias)\n }\n }\n\n private resolveInlineAliasToken(\n name: string,\n token: InternalResolvedToken,\n allTokens: InternalResolvedTokens,\n depth: number,\n hadAlias: boolean,\n ): InternalResolvedToken {\n try {\n const resolvedValue = this.resolveValue((token.$value ?? '') as TokenValue, allTokens, depth)\n return this.withAliasMarker(token, resolvedValue, hadAlias)\n } catch (error) {\n return this.handleAliasError(error, name, token, hadAlias)\n }\n }\n\n private withAliasMarker(\n token: InternalResolvedToken,\n value: TokenValue | undefined,\n hadAlias: boolean,\n ): InternalResolvedToken {\n return {\n ...token,\n $value: value,\n _isAlias: hadAlias,\n }\n }\n\n /**\n * Resolve aliases in a value\n */\n private resolveValue(\n value: TokenValue,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): TokenValue {\n if (typeof value === 'string') {\n return this.resolveStringValue(value, allTokens, depth)\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.resolveValue(item as TokenValue, allTokens, depth))\n }\n\n if (typeof value === 'object' && value != null) {\n const result: Record<string, unknown> = {}\n for (const [key, val] of Object.entries(value)) {\n result[key] = this.resolveValue(val as TokenValue, allTokens, depth)\n }\n return result\n }\n\n return value\n }\n\n /**\n * Resolve aliases in a string value\n */\n private resolveStringValue(\n value: string,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): TokenValue {\n // Check if the entire value is an alias reference\n const fullReferenceMatch = /^\\{([^}]+)\\}$/.exec(value)\n if (fullReferenceMatch != null) {\n const referenceName = fullReferenceMatch[1]\n if (referenceName != null) {\n return this.resolveReference(referenceName, allTokens, depth)\n }\n }\n\n // Check for inline aliases (e.g., \"2px solid {color.primary}\")\n if (value.includes('{')) {\n return value.replace(/\\{([^}]+)\\}/g, (_match, referenceName: string) => {\n const resolved = this.resolveReference(referenceName, allTokens, depth)\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return String(resolved)\n }\n return JSON.stringify(resolved)\n })\n }\n\n return value\n }\n\n /**\n * Resolve a single reference (whole token only)\n *\n * Per DTCG spec, curly brace syntax only supports whole token references.\n * Property-level references must use JSON Pointer syntax ($ref).\n *\n * Examples:\n * - `{color.primary}` - whole token reference ✅\n * - `{color.primary.components.0}` - NOT supported (use $ref with JSON Pointer) ❌\n */\n private resolveReference(\n referenceName: string,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): TokenValue {\n const cleanName = referenceName.trim()\n\n // Look up the token by its full name (no property-level access)\n const referencedToken = allTokens[cleanName]\n\n if (referencedToken == null) {\n const suggestions = findSimilar(cleanName, Object.keys(allTokens))\n this.validationHandler.handleIssue(new TokenReferenceError(cleanName, suggestions))\n this.validationHandler.warn(`Unresolved token reference: \"${cleanName}\"`)\n return `{${cleanName}}`\n }\n\n // Recursively resolve the referenced token\n const resolved = this.resolveToken(cleanName, referencedToken, allTokens, depth + 1)\n\n return (resolved.$value ?? '') as TokenValue\n }\n\n private resolveReferenceToken(\n referenceName: string,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): InternalResolvedToken | undefined {\n const cleanName = referenceName.trim()\n const referencedToken = allTokens[cleanName]\n\n if (referencedToken == null) {\n const suggestions = findSimilar(cleanName, Object.keys(allTokens))\n this.validationHandler.handleIssue(new TokenReferenceError(cleanName, suggestions))\n this.validationHandler.warn(`Unresolved token reference: \"${cleanName}\"`)\n return undefined\n }\n\n return this.resolveToken(cleanName, referencedToken, allTokens, depth + 1)\n }\n\n private getTypeAfterCompatibilityCheck(\n declaredType: unknown,\n referencedType: unknown,\n tokenName: string,\n referenceName: string,\n ): InternalResolvedToken['$type'] {\n const declared = typeof declaredType === 'string' ? declaredType : undefined\n const referenced = typeof referencedType === 'string' ? referencedType : undefined\n\n if (declared !== undefined && referenced !== undefined && declared !== referenced) {\n this.handleTypeMismatch(tokenName, referenceName, declared, referenced)\n return declaredType as InternalResolvedToken['$type']\n }\n\n if (declared === undefined && referenced !== undefined) {\n return referenced as InternalResolvedToken['$type']\n }\n\n return declaredType as InternalResolvedToken['$type']\n }\n\n private handleTypeMismatch(\n tokenName: string,\n referenceName: string,\n declaredType: string,\n referencedType: string,\n ): void {\n const message =\n `Alias type mismatch for \"${tokenName}\": declared \"$type\" is \"${declaredType}\" ` +\n `but referenced token \"${referenceName}\" has \"$type\" \"${referencedType}\".`\n\n this.validationHandler.handleIssue(new ValidationError(message, [{ message }]))\n }\n\n /**\n * Check if a value contains aliases\n */\n static hasAliases(value: TokenValue): boolean {\n if (typeof value === 'string') {\n return value.includes('{') && value.includes('}')\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => AliasResolver.hasAliases(item as TokenValue))\n }\n\n if (typeof value === 'object' && value != null) {\n return Object.values(value).some((val) => AliasResolver.hasAliases(val as TokenValue))\n }\n\n return false\n }\n\n /**\n * Extract all alias references from a value\n */\n static extractReferences(value: TokenValue): string[] {\n const references: string[] = []\n\n if (typeof value === 'string') {\n const matches = value.matchAll(/\\{([^}]+)\\}/g)\n for (const match of matches) {\n const ref = match[1]\n if (ref != null) {\n references.push(ref.trim())\n }\n }\n } else if (Array.isArray(value)) {\n for (const item of value) {\n references.push(...AliasResolver.extractReferences(item as TokenValue))\n }\n } else if (typeof value === 'object' && value != null) {\n for (const val of Object.values(value)) {\n references.push(...AliasResolver.extractReferences(val as TokenValue))\n }\n }\n\n return references\n }\n\n private handleAliasError(\n error: unknown,\n name: string,\n token: InternalResolvedToken,\n hadAlias: boolean,\n ): InternalResolvedToken {\n if (error instanceof Error) {\n this.validationHandler.handleIssue(error)\n } else {\n this.validationHandler.handleIssue(new Error(String(error)))\n }\n\n const message = error instanceof Error ? error.message : String(error)\n this.validationHandler.warn(`Alias resolution skipped for \"${name}\": ${message}`)\n\n return {\n ...token,\n $value: token.$value,\n _isAlias: hadAlias,\n }\n }\n}\n","/**\n * @fileoverview String similarity utilities for \"did you mean?\" suggestions\n *\n * Uses Levenshtein distance to find close matches when users reference\n * nonexistent tokens, modifiers, or contexts.\n */\n\n/**\n * Compute the Levenshtein edit distance between two strings.\n *\n * Uses the classic dynamic-programming algorithm with O(min(a,b)) space.\n *\n * @param a - First string\n * @param b - Second string\n * @returns Number of single-character edits (insert, delete, replace)\n */\nexport function levenshteinDistance(a: string, b: string): number {\n if (a === b) {\n return 0\n }\n if (a.length === 0) {\n return b.length\n }\n if (b.length === 0) {\n return a.length\n }\n\n // Ensure `a` is the shorter string for O(min(a,b)) space\n if (a.length > b.length) {\n ;[a, b] = [b, a]\n }\n\n const aLen = a.length\n const bLen = b.length\n\n // Single row of the DP matrix\n let prev = Array.from({ length: aLen + 1 }, (_, i) => i)\n\n for (let j = 1; j <= bLen; j++) {\n const curr = [j] as number[]\n for (let i = 1; i <= aLen; i++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1\n curr[i] = Math.min(\n curr[i - 1]! + 1, // insertion\n prev[i]! + 1, // deletion\n prev[i - 1]! + cost, // substitution\n )\n }\n prev = curr\n }\n\n return prev[aLen]!\n}\n\n/** Minimum edit distance threshold for \"did you mean?\" suggestions */\nconst MIN_EDIT_DISTANCE = 2\n\n/** Fraction of target string length used to auto-scale the max distance */\nconst SIMILARITY_THRESHOLD_FACTOR = 0.4\n\n/**\n * Find strings from `candidates` that are similar to `target`.\n *\n * Returns candidates sorted by distance (closest first), filtered to\n * those within `maxDistance`. A good default for maxDistance is roughly\n * 40% of the target length (minimum 2).\n *\n * @param target - The string the user typed\n * @param candidates - Available valid strings to match against\n * @param maxDistance - Maximum edit distance to consider (default: auto-scaled)\n * @returns Array of similar strings, closest first (at most `maxResults`)\n */\nexport function findSimilar(\n target: string,\n candidates: string[],\n maxDistance?: number,\n maxResults = 3,\n): string[] {\n if (candidates.length === 0) {\n return []\n }\n\n const threshold =\n maxDistance ??\n Math.max(MIN_EDIT_DISTANCE, Math.ceil(target.length * SIMILARITY_THRESHOLD_FACTOR))\n\n const scored = candidates\n .map((candidate) => ({\n value: candidate,\n distance: levenshteinDistance(target.toLowerCase(), candidate.toLowerCase()),\n }))\n .filter((entry) => entry.distance <= threshold && entry.distance > 0)\n .sort((a, b) => a.distance - b.distance)\n\n return scored.slice(0, maxResults).map((entry) => entry.value)\n}\n","/**\n * @fileoverview Reference resolver for $ref pointers\n * Supports JSON Pointer (RFC6901) and external file references\n */\n\nimport { readJSONFile } from '@adapters/filesystem/file-utils'\nimport { ValidationError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport { JsonPointer } from 'json-ptr'\n\nimport type { ReferenceObject } from './types'\n\ntype ResolverContext = {\n baseDir: string\n cache: Map<string, unknown>\n visited: Set<string>\n}\n\ntype ReferenceResolverOptions = {\n validation?: ValidationOptions\n /**\n * External file cache shared across resolver instances.\n *\n * When provided, the resolver uses this cache instead of creating its own.\n * This enables safe parallel permutation resolution: each instance keeps\n * an independent `visited` set (for circular-reference detection) while\n * sharing the expensive parsed-file cache.\n */\n cache?: Map<string, unknown>\n}\n\ntype DeepResolutionContext = {\n inTokenValue: boolean\n}\n\nexport class ReferenceResolver {\n private context: ResolverContext\n private validationHandler: ValidationHandler\n\n constructor(baseDir: string, options: ReferenceResolverOptions = {}) {\n this.context = {\n baseDir,\n cache: options.cache ?? new Map(),\n visited: new Set(),\n }\n this.validationHandler = new ValidationHandler(options.validation)\n }\n\n /**\n * Set the base directory for resolving relative file paths\n */\n setBaseDir(baseDir: string): void {\n this.context.baseDir = baseDir\n }\n\n /**\n * Resolve a $ref reference\n * Accepts either a string reference or a DTCG ReferenceObject\n *\n * Per DTCG spec section 4.2.2, if additional keys exist alongside $ref,\n * they will be treated as overrides and merged with the resolved value.\n */\n async resolve(\n ref: string | ReferenceObject | Record<string, unknown>,\n currentDocument?: unknown,\n ): Promise<unknown> {\n // Extract string ref from object if needed\n const refString = typeof ref === 'string' ? ref : (ref as ReferenceObject).$ref\n\n if (!refString) {\n throw new ValidationError('Invalid reference: missing $ref property', [\n { message: 'Invalid reference: missing $ref property' },\n ])\n }\n\n // Extract local properties for extending (DTCG spec section 4.2.2)\n const localProperties = this.extractLocalProperties(ref)\n\n // Check for circular references\n if (this.context.visited.has(refString)) {\n throw new ValidationError(`Circular reference detected: ${refString}`, [\n { message: `Circular reference detected: ${refString}` },\n ])\n }\n\n this.context.visited.add(refString)\n\n try {\n let resolved = await this.resolveRefTarget(refString, currentDocument)\n\n // Apply local property overrides if any (DTCG spec section 4.2.2)\n if (localProperties && Object.keys(localProperties).length > 0) {\n resolved = this.applyExtensions(resolved, localProperties)\n }\n\n return resolved\n } finally {\n this.context.visited.delete(refString)\n }\n }\n\n /**\n * Resolve the target of a $ref string to its raw value\n *\n * Handles fragment-only references (JSON Pointer within current document)\n * and file references with optional fragment suffixes.\n */\n private async resolveRefTarget(refString: string, currentDocument?: unknown): Promise<unknown> {\n // Fragment-only references (JSON Pointer within current document)\n if (refString.startsWith('#/')) {\n if (!currentDocument) {\n throw new ValidationError(\n `Cannot resolve fragment reference ${refString} without current document`,\n [\n {\n message: `Cannot resolve fragment reference ${refString} without current document`,\n },\n ],\n )\n }\n return this.resolveFragment(refString, currentDocument)\n }\n\n // File references with optional fragments\n const [filePath, fragment] = refString.split('#')\n\n if (!filePath) {\n throw new ValidationError(`Invalid reference: ${refString}`, [\n { message: `Invalid reference: ${refString}` },\n ])\n }\n\n const resolved = await this.resolveFile(filePath)\n return fragment ? this.resolveFragment(`#${fragment}`, resolved) : resolved\n }\n\n /**\n * Resolve a JSON Pointer fragment\n */\n private resolveFragment(ref: string, document: unknown): unknown {\n try {\n // Remove leading # and decode the pointer\n const pointerPath = ref.substring(1)\n\n if (!pointerPath) {\n return document\n }\n\n if (!JsonPointer.has(document, pointerPath)) {\n throw new ValidationError(`Invalid reference: ${ref}`, [\n { message: `Invalid reference: ${ref}` },\n ])\n }\n\n return JsonPointer.get(document, pointerPath)\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error)\n throw new ValidationError(`Failed to resolve fragment ${ref}: ${errorMsg}`, [\n { message: errorMsg },\n ])\n }\n }\n\n /**\n * Resolve a file reference\n */\n private async resolveFile(filePath: string): Promise<unknown> {\n // Check cache first\n if (this.context.cache.has(filePath)) {\n return this.context.cache.get(filePath)\n }\n\n // Read and parse file using shared utility\n const parsed = await readJSONFile(filePath, this.context.baseDir)\n\n // Cache the result\n this.context.cache.set(filePath, parsed)\n\n return parsed\n }\n\n /**\n * Extract local properties from a reference object (excluding $ref)\n * These will be used to override the resolved value per DTCG spec section 4.2.2\n */\n private extractLocalProperties(\n ref: string | ReferenceObject | Record<string, unknown>,\n ): Record<string, unknown> | null {\n if (typeof ref === 'string') {\n return null\n }\n\n const { $ref: _$ref, ...localProps } = ref as Record<string, unknown>\n return Object.keys(localProps).length > 0 ? localProps : null\n }\n\n /**\n * Apply local property extensions to resolved value (DTCG spec section 4.2.2)\n *\n * Per spec: \"If a key alongside $ref declares an object or array,\n * tools MUST flatten these shallowly, meaning objects and arrays are not merged.\"\n *\n * This means local properties replace resolved properties (shallow merge only).\n */\n private applyExtensions(resolved: unknown, localProperties: Record<string, unknown>): unknown {\n // Only merge if resolved is an object\n if (typeof resolved !== 'object' || resolved === null) {\n return resolved\n }\n\n // Shallow merge: local properties override resolved properties\n return {\n ...resolved,\n ...localProperties,\n }\n }\n\n /**\n * Check if an object is a reference object\n */\n static isReference(obj: unknown): obj is { $ref: string } {\n return typeof obj === 'object' && obj !== null && '$ref' in obj && typeof obj.$ref === 'string'\n }\n\n /**\n * Resolve all references in an object recursively\n */\n async resolveDeep(obj: unknown, currentDocument?: unknown): Promise<unknown> {\n if (ReferenceResolver.isReference(obj)) {\n return this.resolve(obj, currentDocument)\n }\n\n if (Array.isArray(obj)) {\n return Promise.all(obj.map((item) => this.resolveDeep(item, currentDocument)))\n }\n\n if (typeof obj === 'object' && obj !== null) {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n result[key] = await this.resolveDeep(value, currentDocument)\n }\n return result\n }\n\n return obj\n }\n\n /**\n * Resolve all references in a token document, preserving token-level `$ref` shape.\n *\n * - **Property-level** `$ref` objects (inside `$value`) resolve to the referenced content.\n * - **Token-level** `$ref` objects (the token itself) become a token with `$value` set to the resolved value.\n */\n async resolveDeepTokenDocument(obj: unknown, currentDocument?: unknown): Promise<unknown> {\n return this.resolveDeepTokenInternal(obj, currentDocument, { inTokenValue: false })\n }\n\n private async resolveDeepTokenInternal(\n obj: unknown,\n currentDocument: unknown,\n ctx: DeepResolutionContext,\n ): Promise<unknown> {\n if (ReferenceResolver.isReference(obj)) {\n if (ctx.inTokenValue) {\n const resolved = await this.resolve(obj, currentDocument)\n return this.resolveDeepTokenInternal(resolved, currentDocument, ctx)\n }\n\n if (this.isTokenLevelRefObject(obj, ctx)) {\n return this.resolveTokenLevelRef(obj as Record<string, unknown>, currentDocument)\n }\n\n const resolved = await this.resolve(obj, currentDocument)\n return this.resolveDeepTokenInternal(resolved, currentDocument, ctx)\n }\n\n if (Array.isArray(obj)) {\n return Promise.all(\n obj.map((item) => this.resolveDeepTokenInternal(item, currentDocument, ctx)),\n )\n }\n\n if (typeof obj === 'object' && obj !== null) {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n const nextCtx = key === '$value' ? { inTokenValue: true } : ctx\n result[key] = await this.resolveDeepTokenInternal(value, currentDocument, nextCtx)\n }\n return result\n }\n\n return obj\n }\n\n private isTokenLevelRefObject(obj: unknown, ctx: DeepResolutionContext): boolean {\n if (ctx.inTokenValue) {\n return false\n }\n if (!ReferenceResolver.isReference(obj)) {\n return false\n }\n return !('$value' in (obj as Record<string, unknown>))\n }\n\n private async resolveTokenLevelRef(\n tokenLikeRef: Record<string, unknown>,\n currentDocument: unknown,\n ): Promise<Record<string, unknown>> {\n const refString = typeof tokenLikeRef.$ref === 'string' ? tokenLikeRef.$ref : ''\n\n const declaredType = typeof tokenLikeRef.$type === 'string' ? tokenLikeRef.$type : undefined\n\n const resolvedRaw = await this.resolve(refString, currentDocument)\n\n const referencedType = this.getReferencedTokenType(refString, resolvedRaw, currentDocument)\n\n const resolvedValue = this.extractTokenValue(resolvedRaw)\n const deepResolvedValue = await this.resolveDeepTokenInternal(resolvedValue, currentDocument, {\n inTokenValue: true,\n })\n\n const resolvedIsToken =\n typeof resolvedRaw === 'object' &&\n resolvedRaw !== null &&\n '$value' in (resolvedRaw as Record<string, unknown>)\n\n const baseToken = resolvedIsToken\n ? this.buildTokenFromResolvedToken(resolvedRaw as Record<string, unknown>, deepResolvedValue)\n : {}\n\n const { $ref: _ref, ...localMeta } = tokenLikeRef\n const outToken = { ...baseToken, ...localMeta, $value: deepResolvedValue }\n\n return this.applyTypeInferenceAndChecks(outToken, declaredType, referencedType, refString)\n }\n\n private extractTokenValue(resolved: unknown): unknown {\n if (\n typeof resolved === 'object' &&\n resolved !== null &&\n '$value' in (resolved as Record<string, unknown>)\n ) {\n return (resolved as Record<string, unknown>).$value\n }\n return resolved\n }\n\n private buildTokenFromResolvedToken(\n resolvedToken: Record<string, unknown>,\n value: unknown,\n ): Record<string, unknown> {\n const { $ref: _ref, ...rest } = resolvedToken\n return { ...rest, $value: value }\n }\n\n private getReferencedTokenType(\n refString: string,\n resolvedRaw: unknown,\n currentDocument: unknown,\n ): string | undefined {\n const direct = this.extractTypeFromTokenObject(resolvedRaw)\n if (direct !== undefined) {\n return direct\n }\n\n const inferredPointer = this.getTokenPointerFromValuePointer(refString)\n if (inferredPointer === undefined) {\n return undefined\n }\n\n const referencedToken = this.resolveFragmentSafely(inferredPointer, currentDocument)\n return this.extractTypeFromTokenObject(referencedToken)\n }\n\n private getTokenPointerFromValuePointer(refString: string): string | undefined {\n const suffix = '/$value'\n if (!refString.includes(suffix)) {\n return undefined\n }\n if (!refString.startsWith('#/')) {\n return undefined\n }\n if (!refString.endsWith(suffix)) {\n return undefined\n }\n return refString.slice(0, -suffix.length)\n }\n\n private resolveFragmentSafely(ref: string, document: unknown): unknown {\n try {\n return this.resolveFragment(ref, document)\n } catch {\n // Fragment may not exist; return undefined so callers can skip type inference\n return undefined\n }\n }\n\n private extractTypeFromTokenObject(value: unknown): string | undefined {\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n const maybe = value as Record<string, unknown>\n return typeof maybe.$type === 'string' ? maybe.$type : undefined\n }\n\n private applyTypeInferenceAndChecks(\n token: Record<string, unknown>,\n declaredType: string | undefined,\n referencedType: string | undefined,\n refString: string,\n ): Record<string, unknown> {\n if (referencedType === undefined) {\n return token\n }\n\n if (declaredType !== undefined && declaredType !== referencedType) {\n this.handleValidationIssue(\n `Token-level $ref type mismatch: declared \"$type\" is \"${declaredType}\" but referenced token type is \"${referencedType}\" (${refString})`,\n )\n return token\n }\n\n const currentType = typeof token.$type === 'string' ? token.$type : undefined\n if (currentType === undefined) {\n return { ...token, $type: referencedType }\n }\n\n if (currentType !== referencedType) {\n this.handleValidationIssue(\n `Token-level $ref type mismatch: token \"$type\" is \"${currentType}\" but referenced token type is \"${referencedType}\" (${refString})`,\n )\n }\n\n return token\n }\n\n private handleValidationIssue(message: string): void {\n this.validationHandler.handleIssue(new ValidationError(message, [{ message }]))\n }\n\n /**\n * Clear the cache\n */\n clearCache(): void {\n this.context.cache.clear()\n }\n}\n","/**\n * @fileoverview Resolution engine for applying sets and modifiers\n */\n\nimport { ConfigurationError, ModifierError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { CaseInsensitiveMap } from '@shared/utils/case-insensitive-map'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport type { InternalTokenDocument } from '@tokens/types'\n\nimport { ModifierInputProcessor } from './modifier-input-processor'\nimport { ReferenceResolver } from './reference-resolver'\nimport type { Modifier, ModifierInputs, ReferenceObject, ResolverDocument, Set } from './types'\n\nconst JSON_POINTER_SETS_PREFIX = '#/sets/'\nconst JSON_POINTER_MODIFIERS_PREFIX = '#/modifiers/'\n\nexport type ResolutionOptions = {\n errorOnMissingDefault?: boolean\n validation?: ValidationOptions\n}\n\nexport class ResolutionEngine {\n private resolver: ResolverDocument\n private refResolver: ReferenceResolver\n private validationHandler: ValidationHandler\n private inputProcessor: ModifierInputProcessor\n\n /** Pre-built reverse lookup from Modifier reference → modifier name */\n private modifierNameCache: Map<Modifier, string>\n\n constructor(\n resolver: ResolverDocument,\n refResolver: ReferenceResolver,\n options: ResolutionOptions = {},\n ) {\n this.resolver = resolver\n this.refResolver = refResolver\n this.validationHandler = new ValidationHandler(options.validation)\n this.inputProcessor = new ModifierInputProcessor({\n modifiers: resolver.modifiers,\n validationHandler: this.validationHandler,\n errorOnMissingDefault: options.errorOnMissingDefault,\n })\n this.modifierNameCache = this.buildModifierNameCache()\n }\n\n private buildModifierNameCache(): Map<Modifier, string> {\n const cache = new Map<Modifier, string>()\n if (!this.resolver.modifiers) {\n return cache\n }\n for (const [name, mod] of Object.entries(this.resolver.modifiers)) {\n cache.set(mod as Modifier, name)\n }\n return cache\n }\n\n /**\n * Get the resolver document\n */\n getResolver(): ResolverDocument {\n return this.resolver\n }\n\n /**\n * Resolve tokens for given modifier inputs\n */\n async resolve(modifierInputs: ModifierInputs = {}): Promise<InternalTokenDocument> {\n const { normalizedInputs } = this.prepareInputs(modifierInputs)\n return this.resolveWithPreparedInputs(normalizedInputs)\n }\n\n async resolveWithInputs(modifierInputs: ModifierInputs = {}): Promise<{\n tokens: InternalTokenDocument\n modifierInputs: ModifierInputs\n }> {\n const { normalizedInputs, resolvedInputs } = this.prepareInputs(modifierInputs)\n const tokens = await this.resolveWithPreparedInputs(normalizedInputs)\n return { tokens, modifierInputs: resolvedInputs }\n }\n\n prepareInputs(modifierInputs: ModifierInputs): {\n normalizedInputs: ModifierInputs\n resolvedInputs: ModifierInputs\n } {\n return this.inputProcessor.prepare(modifierInputs)\n }\n\n private async resolveWithPreparedInputs(inputs: ModifierInputs): Promise<InternalTokenDocument> {\n // Process resolution order\n let tokens: InternalTokenDocument = {}\n\n for (const item of this.resolver.resolutionOrder) {\n if (ReferenceResolver.isReference(item)) {\n const ref = item.$ref\n\n if (ref.startsWith(JSON_POINTER_SETS_PREFIX)) {\n const setName = ref.slice(JSON_POINTER_SETS_PREFIX.length)\n const resolved = await this.refResolver.resolve(item, this.resolver)\n if (this.isSet(resolved)) {\n const setTokens = await this.resolveSet(resolved, inputs, setName)\n tokens = this.mergeTokens(tokens, setTokens)\n continue\n }\n }\n\n const resolved = await this.resolveReference(item, inputs)\n tokens = this.mergeTokens(tokens, resolved)\n } else if (this.isSet(item)) {\n const resolved = await this.resolveSet(item, inputs, this.getInlineName(item, 'set'))\n tokens = this.mergeTokens(tokens, resolved)\n } else if (this.isModifier(item)) {\n const resolved = await this.resolveModifier(item, inputs)\n tokens = this.mergeTokens(tokens, resolved)\n }\n }\n\n return tokens\n }\n\n /**\n * Generate all possible permutations based on modifiers\n */\n generatePermutations(): ModifierInputs[] {\n if (!this.resolver.modifiers) {\n return [{}]\n }\n\n const modifierEntries = this.getOrderedModifierEntries()\n if (modifierEntries.length === 0) {\n return [{}]\n }\n\n // Generate all combinations\n const combinations: ModifierInputs[] = [{}]\n\n for (const [modifierName, modifier] of modifierEntries) {\n const contexts = Object.keys(modifier.contexts)\n const newCombinations: ModifierInputs[] = []\n\n for (const combination of combinations) {\n for (const context of contexts) {\n newCombinations.push({\n ...combination,\n [modifierName]: context,\n })\n }\n }\n\n combinations.length = 0\n combinations.push(...newCombinations)\n }\n\n return combinations\n }\n\n private getOrderedModifierEntries(): [string, Modifier][] {\n const modifiers = this.resolver.modifiers\n if (!modifiers) {\n return []\n }\n\n const seen = new Set<string>()\n const ordered: [string, Modifier][] = []\n\n for (const item of this.resolver.resolutionOrder) {\n if (!ReferenceResolver.isReference(item)) {\n continue\n }\n\n // resolutionOrder references are JSON Pointers; we care about \"#/modifiers/<name>\"\n if (!item.$ref.startsWith(JSON_POINTER_MODIFIERS_PREFIX)) {\n continue\n }\n\n const name = item.$ref.slice(JSON_POINTER_MODIFIERS_PREFIX.length)\n const modifier = modifiers[name]\n if (!modifier || seen.has(name)) {\n continue\n }\n\n ordered.push([name, modifier as Modifier])\n seen.add(name)\n }\n\n // Append any modifiers not listed in resolutionOrder to preserve behavior\n for (const [name, modifier] of Object.entries(modifiers)) {\n if (seen.has(name)) {\n continue\n }\n ordered.push([name, modifier as Modifier])\n seen.add(name)\n }\n\n return ordered\n }\n\n /**\n * Resolve a reference object\n */\n private async resolveReference(\n ref: ReferenceObject,\n inputs: ModifierInputs,\n ): Promise<InternalTokenDocument> {\n const resolved = await this.refResolver.resolve(ref, this.resolver)\n\n if (this.isSet(resolved)) {\n return this.resolveSet(resolved, inputs)\n }\n\n if (this.isModifier(resolved)) {\n return this.resolveModifier(resolved, inputs)\n }\n\n // Assume it's a token collection\n return resolved as InternalTokenDocument\n }\n\n /**\n * Resolve a set\n */\n private async resolveSet(\n set: Set,\n _modifierInputs: ModifierInputs,\n setName?: string,\n ): Promise<InternalTokenDocument> {\n let tokens: InternalTokenDocument = {}\n\n for (const source of set.sources) {\n let sourceTokens: InternalTokenDocument\n if (ReferenceResolver.isReference(source)) {\n const resolved = await this.refResolver.resolve(source, this.resolver)\n sourceTokens = resolved as InternalTokenDocument\n } else {\n sourceTokens = source as InternalTokenDocument\n }\n\n // Tag tokens with their source set name (for bundle grouping)\n const taggedTokens = this.tagTokens(sourceTokens, '_sourceSet', setName ?? 'set')\n tokens = this.mergeTokens(tokens, taggedTokens)\n }\n\n return tokens\n }\n\n private getInlineName(node: unknown, fallback: string): string {\n if (typeof node !== 'object' || node === null) {\n return fallback\n }\n const name = (node as { name?: unknown }).name\n return typeof name === 'string' && name !== '' ? name : fallback\n }\n\n /**\n * Resolve a modifier based on inputs\n * Note: inputs are normalized to lowercase for case-insensitive matching\n */\n private async resolveModifier(\n modifier: Modifier,\n inputs: ModifierInputs,\n ): Promise<InternalTokenDocument> {\n const modifierName = this.findModifierName(modifier)\n const contextValue = this.resolveContextValue(modifier, inputs, modifierName)\n const { actualContextKey, context } = this.resolveContext(modifier, modifierName, contextValue)\n const sourceTag = this.buildSourceTag(modifierName, actualContextKey)\n\n return await this.resolveContextSources(context, sourceTag)\n }\n\n private findModifierName(modifier: Modifier): string | undefined {\n return this.modifierNameCache.get(modifier)\n }\n\n private resolveContextValue(\n modifier: Modifier,\n inputs: ModifierInputs,\n modifierName?: string,\n ): string {\n const inputValue = modifierName ? inputs[modifierName.toLowerCase()] : undefined\n const fallback =\n modifier.default?.toLowerCase() ?? Object.keys(modifier.contexts)[0]?.toLowerCase()\n const contextValue = inputValue ?? fallback\n\n if (!contextValue) {\n throw new ConfigurationError('Cannot determine context for modifier')\n }\n\n return contextValue\n }\n\n private resolveContext(\n modifier: Modifier,\n modifierName: string | undefined,\n contextValue: string,\n ): { actualContextKey: string; context: unknown[] } {\n const contextMap = new CaseInsensitiveMap<unknown>()\n for (const [key, value] of Object.entries(modifier.contexts)) {\n contextMap.set(key, value)\n }\n\n const availableContexts = Object.keys(modifier.contexts)\n\n const actualContextKey = contextMap.getOriginalKey(contextValue)\n if (actualContextKey === undefined) {\n throw new ModifierError(modifierName ?? 'unknown', contextValue, availableContexts)\n }\n\n const context = modifier.contexts[actualContextKey]\n if (context === undefined) {\n throw new ModifierError(modifierName ?? 'unknown', contextValue, availableContexts)\n }\n\n return { actualContextKey, context }\n }\n\n private buildSourceTag(modifierName: string | undefined, actualContextKey: string): string {\n if (modifierName && actualContextKey) {\n return `${modifierName}-${actualContextKey}`\n }\n return 'modifier'\n }\n\n private async resolveContextSources(\n context: unknown[],\n sourceTag: string,\n ): Promise<InternalTokenDocument> {\n let tokens: InternalTokenDocument = {}\n\n for (const source of context) {\n const sourceTokens = await this.resolveSourceTokens(source)\n const taggedTokens = this.tagTokens(sourceTokens, '_sourceModifier', sourceTag)\n tokens = this.mergeTokens(tokens, taggedTokens)\n }\n\n return tokens\n }\n\n private async resolveSourceTokens(source: unknown): Promise<InternalTokenDocument> {\n if (ReferenceResolver.isReference(source)) {\n const resolved = await this.refResolver.resolve(source, this.resolver)\n return resolved as InternalTokenDocument\n }\n\n return source as InternalTokenDocument\n }\n\n /**\n * Merge two token objects (later values override earlier ones)\n */\n private mergeTokens(\n target: InternalTokenDocument,\n source: InternalTokenDocument,\n path: string[] = [],\n ): InternalTokenDocument {\n const result = { ...target }\n\n for (const [key, value] of Object.entries(source)) {\n const currentPath = [...path, key]\n const isSourceGroup =\n typeof value === 'object' && value !== null && !Array.isArray(value) && !('$value' in value)\n const targetValue = target[key]\n const isTargetGroup =\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue) &&\n !('$value' in targetValue)\n\n // Warn when group/token type changes during merge\n // Skip $-prefixed keys (like $root, $description, etc.) - these are DTCG metadata\n if (targetValue !== undefined && !key.startsWith('$')) {\n if (isSourceGroup && !isTargetGroup) {\n this.validationHandler.warn(\n `Token '${currentPath.join('.')}' is being replaced by a group. ` +\n 'This may cause loss of existing children.',\n )\n } else if (!isSourceGroup && isTargetGroup) {\n const targetHasChildren = Object.keys(targetValue).some((k) => !k.startsWith('$'))\n if (targetHasChildren) {\n this.validationHandler.warn(\n `Group '${currentPath.join('.')}' is being replaced by a token. ` +\n 'Existing children will be lost.',\n )\n }\n }\n }\n\n if (!isSourceGroup) {\n result[key] = value\n continue\n }\n\n result[key] = this.mergeTokens(\n ((result[key] as InternalTokenDocument | undefined) ?? {}) as InternalTokenDocument,\n value as InternalTokenDocument,\n currentPath,\n )\n }\n\n return result\n }\n\n /**\n * Tag all tokens in a collection with a metadata property.\n * Used for bundle mode to track which set or modifier defined each token.\n */\n private tagTokens(\n tokens: InternalTokenDocument,\n property: '_sourceModifier' | '_sourceSet',\n value: string,\n ): InternalTokenDocument {\n const result: InternalTokenDocument = {}\n\n for (const [key, entry] of Object.entries(tokens)) {\n if (typeof entry === 'object' && entry !== null && !Array.isArray(entry)) {\n if ('$value' in entry) {\n result[key] = { ...entry, [property]: value }\n } else {\n result[key] = this.tagTokens(entry as InternalTokenDocument, property, value)\n }\n } else {\n result[key] = entry\n }\n }\n\n return result\n }\n\n /**\n * Type guard for Set\n */\n private isSet(obj: unknown): obj is Set {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'sources' in obj &&\n Array.isArray((obj as { sources: unknown }).sources)\n )\n }\n\n /**\n * Type guard for Modifier\n */\n private isModifier(obj: unknown): obj is Modifier {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'contexts' in obj &&\n typeof (obj as { contexts: unknown }).contexts === 'object'\n )\n }\n}\n","/**\n * @fileoverview Case-insensitive map implementation\n */\n\n/**\n * Map that treats keys as case-insensitive\n * Internally stores keys in lowercase but preserves original casing\n *\n * @template T Value type\n */\nexport class CaseInsensitiveMap<T> {\n private map: Map<string, { originalKey: string; value: T }>\n\n constructor(entries?: Iterable<readonly [string, T]>) {\n this.map = new Map()\n if (entries !== undefined) {\n for (const [key, value] of entries) {\n this.set(key, value)\n }\n }\n }\n\n /**\n * Set a value with case-insensitive key\n *\n * @param key - Key (case-insensitive)\n * @param value - Value to store\n */\n set(key: string, value: T): void {\n const lowerKey = key.toLowerCase()\n this.map.set(lowerKey, { originalKey: key, value })\n }\n\n /**\n * Get a value by case-insensitive key\n *\n * @param key - Key (case-insensitive)\n * @returns Value if found, undefined otherwise\n */\n get(key: string): T | undefined {\n const entry = this.map.get(key.toLowerCase())\n return entry?.value\n }\n\n /**\n * Check if key exists (case-insensitive)\n *\n * @param key - Key (case-insensitive)\n * @returns True if key exists\n */\n has(key: string): boolean {\n return this.map.has(key.toLowerCase())\n }\n\n /**\n * Get the original key casing for a key\n *\n * @param key - Key (case-insensitive)\n * @returns Original key casing, or undefined if not found\n */\n getOriginalKey(key: string): string | undefined {\n const entry = this.map.get(key.toLowerCase())\n return entry?.originalKey\n }\n\n /**\n * Delete a value by case-insensitive key\n *\n * @param key - Key (case-insensitive)\n * @returns True if item was deleted\n */\n delete(key: string): boolean {\n return this.map.delete(key.toLowerCase())\n }\n\n /**\n * Get all values\n *\n * @returns Array of all values\n */\n values(): T[] {\n return Array.from(this.map.values()).map((entry) => entry.value)\n }\n\n /**\n * Get all original keys\n *\n * @returns Array of all keys in their original casing\n */\n keys(): string[] {\n return Array.from(this.map.values()).map((entry) => entry.originalKey)\n }\n\n /**\n * Get all entries with original key casing\n *\n * @returns Array of [key, value] tuples\n */\n entries(): Array<[string, T]> {\n return Array.from(this.map.values()).map((entry) => [entry.originalKey, entry.value])\n }\n\n /**\n * Clear all entries\n */\n clear(): void {\n this.map.clear()\n }\n\n /**\n * Get number of entries\n *\n * @returns Number of entries\n */\n get size(): number {\n return this.map.size\n }\n}\n","/**\n * @fileoverview Modifier input validation, normalization, and default filling\n *\n * Extracts the input processing concern from ResolutionEngine into a focused module.\n * Handles: type validation, case-insensitive normalization, input validation against\n * defined modifiers/contexts, and filling defaults for unspecified modifiers.\n */\n\nimport { ConfigurationError, ModifierError } from '@shared/errors/index'\nimport { CaseInsensitiveMap } from '@shared/utils/case-insensitive-map'\nimport { findSimilar } from '@shared/utils/string-similarity'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\n\nimport type { Modifier, ModifierInputs, ResolverDocument } from './types'\n\nexport type PreparedInputs = {\n normalizedInputs: ModifierInputs\n resolvedInputs: ModifierInputs\n}\n\ntype InputProcessorConfig = {\n modifiers: ResolverDocument['modifiers']\n validationHandler: ValidationHandler\n errorOnMissingDefault?: boolean\n}\n\nexport class ModifierInputProcessor {\n private modifiers: ResolverDocument['modifiers']\n private validationHandler: ValidationHandler\n private errorOnMissingDefault: boolean | undefined\n\n constructor(config: InputProcessorConfig) {\n this.modifiers = config.modifiers\n this.validationHandler = config.validationHandler\n this.errorOnMissingDefault = config.errorOnMissingDefault\n }\n\n /**\n * Validate, normalize, and fill defaults for modifier inputs\n *\n * Processing order:\n * 1. Type-check values (must be strings)\n * 2. Normalize keys/values to lowercase (DTCG case-insensitive requirement)\n * 3. Validate against defined modifiers/contexts\n * 4. Fill defaults for unspecified modifiers\n *\n * @param modifierInputs - Raw user-supplied modifier inputs (e.g. `{ theme: 'dark' }`)\n * @returns Normalized inputs (lowercased) and resolved inputs (preserving original casing from resolver)\n */\n prepare(modifierInputs: ModifierInputs): PreparedInputs {\n if (this.validationHandler.shouldValidate()) {\n this.validateInputTypes(modifierInputs)\n }\n\n const originalInputMap = this.buildOriginalInputMap(modifierInputs)\n const normalizedInputs = this.normalizeInputs(modifierInputs)\n\n if (this.validationHandler.shouldValidate()) {\n this.validateInputs(normalizedInputs)\n }\n\n const normalizedWithDefaults = this.fillDefaults(normalizedInputs)\n const resolvedInputs = this.buildResolvedInputs(normalizedWithDefaults, originalInputMap)\n\n return { normalizedInputs: normalizedWithDefaults, resolvedInputs }\n }\n\n /**\n * Validate that all input values are strings (DTCG spec section 5.2)\n */\n private validateInputTypes(inputs: ModifierInputs): void {\n for (const [key, value] of Object.entries(inputs)) {\n if (typeof value !== 'string') {\n this.validationHandler.handleIssue(\n new ConfigurationError(\n `Invalid input type for modifier \"${key}\". Expected string but got ${typeof value}. ` +\n `All modifier inputs must be strings (e.g., { \"beta\": \"true\" } not { \"beta\": true }).`,\n ),\n )\n }\n }\n }\n\n /**\n * Normalize modifier inputs to be case-insensitive\n *\n * Per DTCG spec SHOULD requirement: inputs should be case-insensitive.\n * For example, { \"theme\": \"dark\" }, { \"Theme\": \"Dark\" }, and { \"THEME\": \"DARK\" }\n * should be treated as equivalent.\n */\n private normalizeInputs(inputs: ModifierInputs): ModifierInputs {\n const normalized: ModifierInputs = {}\n\n for (const [key, value] of Object.entries(inputs)) {\n if (typeof value !== 'string') {\n continue\n }\n normalized[key.toLowerCase()] = value.toLowerCase()\n }\n\n return normalized\n }\n\n private buildOriginalInputMap(\n inputs: ModifierInputs,\n ): Map<string, { key: string; value: string }> {\n const original = new Map<string, { key: string; value: string }>()\n for (const [key, value] of Object.entries(inputs)) {\n if (typeof value !== 'string') {\n continue\n }\n const lowerKey = key.toLowerCase()\n if (!original.has(lowerKey)) {\n original.set(lowerKey, { key, value })\n }\n }\n return original\n }\n\n private buildResolvedInputs(\n normalizedInputs: ModifierInputs,\n originalInputMap: Map<string, { key: string; value: string }>,\n ): ModifierInputs {\n const resolved: ModifierInputs = {}\n const seenNormalized = new Set<string>()\n\n if (this.modifiers) {\n for (const [modifierName, modifier] of Object.entries(this.modifiers)) {\n const normalizedName = modifierName.toLowerCase()\n const normalizedValue = normalizedInputs[normalizedName]\n if (normalizedValue == null) {\n continue\n }\n seenNormalized.add(normalizedName)\n const contextMap = new CaseInsensitiveMap<string>()\n for (const contextName of Object.keys(modifier.contexts)) {\n contextMap.set(contextName, contextName)\n }\n const originalContext = contextMap.getOriginalKey(normalizedValue)\n const fallbackValue = originalInputMap.get(normalizedName)?.value ?? normalizedValue\n resolved[modifierName] = originalContext ?? fallbackValue\n }\n }\n\n for (const [normalizedName, normalizedValue] of Object.entries(normalizedInputs)) {\n if (seenNormalized.has(normalizedName)) {\n continue\n }\n const originalEntry = originalInputMap.get(normalizedName)\n resolved[originalEntry?.key ?? normalizedName] = originalEntry?.value ?? normalizedValue\n }\n\n return resolved\n }\n\n /**\n * Validate modifier inputs against defined modifiers and contexts\n * Note: inputs should already be normalized to lowercase before calling\n */\n private validateInputs(inputs: ModifierInputs): void {\n if (!this.modifiers) {\n if (Object.keys(inputs).length > 0) {\n throw new ConfigurationError('No modifiers defined in resolver document')\n }\n return\n }\n\n const modifierMap = new CaseInsensitiveMap<{ name: string; modifier: Modifier }>()\n for (const [name, modifier] of Object.entries(this.modifiers)) {\n modifierMap.set(name, { name, modifier: modifier as Modifier })\n }\n\n const allModifierNames = Object.keys(this.modifiers)\n\n for (const [modifierName, contextValue] of Object.entries(inputs)) {\n const modifierEntry = modifierMap.get(modifierName)\n\n if (modifierEntry === undefined) {\n const suggestions = findSimilar(modifierName, allModifierNames)\n this.validationHandler.handleIssue(new ModifierError(modifierName, undefined, suggestions))\n continue\n }\n\n const contextMap = new CaseInsensitiveMap<string>()\n for (const contextName of Object.keys(modifierEntry.modifier.contexts)) {\n contextMap.set(contextName, contextName)\n }\n\n if (!contextMap.has(contextValue)) {\n const validContexts = Object.keys(modifierEntry.modifier.contexts)\n this.validationHandler.handleIssue(\n new ModifierError(modifierName, contextValue, validContexts),\n )\n }\n }\n }\n\n /**\n * Fill in default values for missing modifiers\n * Note: inputs should already be normalized to lowercase before calling\n */\n private fillDefaults(inputs: ModifierInputs): ModifierInputs {\n if (!this.modifiers) {\n return { ...inputs }\n }\n\n const result = { ...inputs }\n\n for (const [modifierName, modifier] of Object.entries(this.modifiers)) {\n const normalizedModifierName = modifierName.toLowerCase()\n\n if (normalizedModifierName in result) {\n continue\n }\n\n if (modifier.default) {\n result[normalizedModifierName] = modifier.default.toLowerCase()\n continue\n }\n\n if (this.shouldErrorOnMissingDefault()) {\n throw new ConfigurationError(`No default value for modifier: ${modifierName}`)\n }\n\n this.validationHandler.warn(\n `Missing modifier input for \"${modifierName}\". Using first context.`,\n )\n const firstContext = Object.keys(modifier.contexts)[0]\n if (firstContext) {\n result[normalizedModifierName] = firstContext.toLowerCase()\n }\n }\n\n return result\n }\n\n private shouldErrorOnMissingDefault(): boolean {\n if (this.errorOnMissingDefault !== undefined) {\n return this.errorOnMissingDefault\n }\n return this.validationHandler.isStrict()\n }\n}\n","/**\n * @fileoverview DTCG token parser with validation\n */\n\nimport * as path from 'node:path'\n\nimport { readJSONFile } from '@adapters/filesystem/file-utils'\nimport { ValidationError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { getErrorMessage } from '@shared/utils/error-utils'\nimport { formatTokenPath } from '@shared/utils/path-utils'\nimport { isTokenLike } from '@shared/utils/token-utils'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport { SchemaValidator } from '@validation/validator'\n\nimport { GroupExtensionResolver } from './group-extension-resolver'\nimport type {\n InternalResolvedToken,\n InternalResolvedTokens,\n InternalTokenDocument,\n InternalToken,\n Token,\n TokenCollection,\n TokenGroup,\n TokenType,\n TokenValue,\n} from './types'\n\n/** Characters forbidden in DTCG token/group names: `{`, `}`, and `.` */\nconst INVALID_NAME_CHARS_REGEX = /[{}.]/\n\nexport type TokenParserOptions = {\n preserveExtensions?: boolean\n warnOnCaseSensitiveNames?: boolean\n validation?: ValidationOptions\n}\n\nexport class TokenParser {\n private validator: SchemaValidator\n private options: TokenParserOptions\n private validationHandler: ValidationHandler\n\n constructor(options: TokenParserOptions = {}) {\n this.validator = new SchemaValidator()\n this.options = {\n preserveExtensions: true,\n warnOnCaseSensitiveNames: true,\n ...options,\n }\n this.validationHandler = new ValidationHandler(options.validation)\n }\n\n /**\n * Parse tokens from file\n */\n async parseFile(filePath: string): Promise<TokenCollection> {\n const absolutePath = path.isAbsolute(filePath)\n ? filePath\n : path.resolve(process.cwd(), filePath)\n\n const data = await readJSONFile(absolutePath)\n return this.parseObject(data)\n }\n\n /**\n * Parse tokens from string\n */\n parse(content: string, sourcePath?: string): TokenCollection {\n const contextMsg = sourcePath !== undefined && sourcePath !== '' ? ` in ${sourcePath}` : ''\n try {\n const data = JSON.parse(content) as unknown\n return this.parseObject(data)\n } catch (error) {\n const errorMsg = getErrorMessage(error)\n throw new ValidationError(`Failed to parse token JSON${contextMsg}: ${errorMsg}`, [\n { message: errorMsg },\n ])\n }\n }\n\n /**\n * Parse tokens from object\n * Resolves $extends group inheritance before returning\n */\n parseObject(data: unknown): TokenCollection {\n if (typeof data !== 'object' || data === null) {\n throw new ValidationError('Token data must be an object', [\n { message: 'Token data must be an object' },\n ])\n }\n\n const formatErrors = this.validator.validate('format', data)\n if (formatErrors.length > 0) {\n const errorMsg = this.validator.getErrorMessage(formatErrors)\n this.handleValidationIssue(`Invalid token document: ${errorMsg}`)\n }\n\n // Resolve group extensions ($extends) per DTCG spec Section 6.4\n const extensionResolver = new GroupExtensionResolver()\n const resolved = extensionResolver.resolveExtensions(data as TokenCollection)\n\n return resolved\n }\n\n /**\n * Flatten token collection into resolved tokens with paths\n *\n * Recursively processes a nested token structure and converts it into a flat\n * collection of resolved tokens with fully qualified paths and names.\n *\n * @param tokens - Token collection or record to flatten\n * @param parentPath - Parent path segments for nested tokens (default: [])\n * @param inheritedType - Type inherited from parent group (optional)\n * @returns Flat collection of resolved tokens indexed by dotted path\n */\n flatten(\n tokens: TokenCollection | InternalTokenDocument | TokenGroup,\n parentPath: string[] = [],\n inheritedType?: TokenType,\n ): InternalResolvedTokens {\n const result: InternalResolvedTokens = {}\n\n for (const [key, value] of Object.entries(tokens)) {\n this.processEntry({\n key,\n value,\n parentPath,\n inheritedType,\n result,\n })\n }\n\n // Check for case-sensitive name conflicts (DTCG SHOULD requirement)\n // Only check at the root level to avoid checking on every recursive call\n if (this.options.warnOnCaseSensitiveNames === true && parentPath.length === 0) {\n this.checkCaseSensitiveNames(result)\n }\n\n return result\n }\n\n private processEntry(params: {\n key: string\n value: unknown\n parentPath: string[]\n inheritedType?: TokenType\n result: InternalResolvedTokens\n }): void {\n const { key, value, parentPath, inheritedType, result } = params\n\n if (this.looksLikeToken(value) && key.startsWith('$')) {\n // Only $root is allowed as a $ prefixed token name\n this.validateTokenName(key, parentPath)\n }\n\n if (this.shouldSkipKey(key)) {\n return\n }\n\n this.validateTokenName(key, parentPath)\n const currentPath = [...parentPath, key]\n\n if (this.isObject(value)) {\n this.validateGroupStructure(value as Record<string, unknown>, currentPath)\n }\n\n if (this.isToken(value)) {\n const resolvedToken = this.buildResolvedToken(value, currentPath, inheritedType)\n this.ensureTokenType(resolvedToken, currentPath)\n result[resolvedToken.name] = resolvedToken\n return\n }\n\n if (this.isTokenGroup(value)) {\n this.flattenGroup(value, currentPath, inheritedType, result)\n }\n }\n\n private looksLikeToken(value: unknown): boolean {\n return isTokenLike(value)\n }\n\n private shouldSkipKey(key: string): boolean {\n return key.startsWith('$') && key !== '$root'\n }\n\n private isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n }\n\n private buildResolvedToken(\n token: InternalToken,\n currentPath: string[],\n inheritedType?: TokenType,\n ): InternalResolvedToken {\n this.validateResolvedToken(token, currentPath)\n\n const tokenName = currentPath.join('.')\n const resolvedToken: InternalResolvedToken = {\n ...token,\n path: currentPath,\n name: tokenName,\n originalValue: (token.$value ?? token.$ref ?? '') as TokenValue,\n }\n\n if (resolvedToken.$type == null && inheritedType != null) {\n resolvedToken.$type = inheritedType\n }\n\n return resolvedToken\n }\n\n private validateResolvedToken(token: InternalToken, currentPath: string[]): void {\n const tokenType = token.$type\n if (typeof tokenType !== 'string') {\n return\n }\n\n const tokenForValidation = this.stripInternalMetadata(token)\n const errors = this.validator.validateToken(tokenForValidation)\n if (errors.length === 0) {\n return\n }\n\n const errorMsg = this.validator.getErrorMessage(errors)\n this.handleValidationIssue(`Invalid token at ${currentPath.join('.')}: ${errorMsg}`)\n }\n\n private ensureTokenType(token: InternalResolvedToken, currentPath: string[]): void {\n if (token.$type != null) {\n return\n }\n\n const isAliasReference = this.isReference(token.$value)\n const hasTokenLevelRef = typeof (token as Record<string, unknown>).$ref === 'string'\n if (isAliasReference || hasTokenLevelRef) {\n return\n }\n\n this.handleValidationIssue(\n `Token at ${currentPath.join('.')} has no $type property. ` +\n `Tokens must have an explicit $type, inherit it from a parent group, or be a reference to another token.`,\n )\n }\n\n private flattenGroup(\n value: TokenGroup,\n currentPath: string[],\n inheritedType: TokenType | undefined,\n result: InternalResolvedTokens,\n ): void {\n const groupType = (value as Record<string, unknown>).$type as TokenType | undefined\n const typeToInherit = groupType ?? inheritedType\n const flattened = this.flatten(value, currentPath, typeToInherit)\n Object.assign(result, flattened)\n }\n\n /**\n * Type guard: check if value is a token\n */\n private isToken(value: unknown): value is InternalToken {\n return isTokenLike(value)\n }\n\n /**\n * Type guard: check if value is a token group\n */\n private isTokenGroup(value: unknown): value is TokenGroup {\n return typeof value === 'object' && value != null && !('$value' in value)\n }\n\n /**\n * Check if a value is a reference (alias reference)\n * References will have their type determined during alias resolution\n */\n private isReference(value: unknown): boolean {\n if (typeof value !== 'string') {\n return false\n }\n // Alias reference (e.g., \"{token.name}\")\n if (value.startsWith('{') && value.endsWith('}')) {\n return true\n }\n return false\n }\n\n /**\n * Validate token/group name according to DTCG specification\n *\n * Names MUST NOT:\n * - Begin with '$' (reserved for specification properties), except for '$root'\n * - Contain '{', '}', or '.' characters (special syntax roles)\n *\n * Exception: '$root' is allowed as a reserved token name (DTCG Section 6.2)\n */\n private validateTokenName(name: string, parentPath: string[]): void {\n if (name.startsWith('$') && name !== '$root') {\n const path = formatTokenPath(parentPath, name)\n this.handleValidationIssue(\n `Invalid token/group name at \"${path}\": Names cannot start with '$' as this prefix is reserved for DTCG properties. ` +\n `Only '$root' is allowed as a special token name.`,\n )\n }\n\n if (INVALID_NAME_CHARS_REGEX.test(name)) {\n const path = formatTokenPath(parentPath, name)\n const invalidChars = name.match(/[{}.]/g)?.join(', ') ?? ''\n this.handleValidationIssue(\n `Invalid token/group name at \"${path}\": Names cannot contain '{', '}', or '.' characters. Found: ${invalidChars}`,\n )\n }\n }\n\n /**\n * Validate group structure according to DTCG specification\n *\n * Groups MUST NOT contain both a $value property and child tokens/groups simultaneously.\n * This ensures clear distinction between tokens (leaf nodes) and groups (containers).\n *\n * Note: $root is treated as a child token, not a property (DTCG Section 6.2).\n */\n private validateGroupStructure(value: Record<string, unknown>, path: string[]): void {\n const hasValue = '$value' in value || '$ref' in value\n const hasChildren = Object.keys(value).some(\n (key) =>\n (!key.startsWith('$') || key === '$root') &&\n typeof value[key] === 'object' &&\n value[key] !== null,\n )\n\n if (hasValue && hasChildren) {\n this.handleValidationIssue(\n `Invalid structure at \"${formatTokenPath(path)}\": Object contains both $value/$ref and child tokens/groups. ` +\n `Per DTCG specification, groups cannot have both a value and children.`,\n )\n }\n }\n\n private stripInternalMetadata(token: Record<string, unknown>): Record<string, unknown> {\n const { path: _path, name: _name, originalValue: _originalValue, ...rest } = token\n const cleaned: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(rest)) {\n if (key.startsWith('_')) {\n continue\n }\n cleaned[key] = value\n }\n\n return cleaned\n }\n\n /**\n * Check for token names that differ only by case\n *\n * Per DTCG spec: \"Tools MAY display a warning when token names differ only by case.\"\n * This helps prevent issues in case-insensitive environments.\n *\n * Emits warnings via the configured validation handler when conflicts are found.\n */\n private checkCaseSensitiveNames(tokens: InternalResolvedTokens): void {\n const lowercaseMap = new Map<string, string>()\n\n for (const tokenName of Object.keys(tokens)) {\n const lower = tokenName.toLowerCase()\n const existing = lowercaseMap.get(lower)\n\n if (existing && existing !== tokenName) {\n // Case-sensitive name conflict detected (DTCG spec allows but tools MAY warn)\n this.reportWarning(\n `Token names differ only by case: \"${existing}\" and \"${tokenName}\". This may break in case-insensitive environments.`,\n )\n } else {\n lowercaseMap.set(lower, tokenName)\n }\n }\n }\n\n private handleValidationIssue(message: string): void {\n this.validationHandler.handleIssue(new ValidationError(message, [{ message }]))\n }\n\n private reportWarning(message: string): void {\n this.validationHandler.warn(message)\n }\n\n /**\n * Validate a single token\n */\n validateToken(token: Token): { valid: boolean; errors: string[] } {\n const tokenForValidation = this.stripInternalMetadata(token as Record<string, unknown>)\n const errors = this.validator.validateToken(tokenForValidation)\n\n return {\n valid: errors.length === 0,\n errors: errors.map((e) => e.message),\n }\n }\n}\n","/**\n * @fileoverview Path utilities for token path formatting\n */\n\n/**\n * Format a token path for error messages\n * Provides consistent path formatting across the codebase\n *\n * @param parentPath - Parent path segments\n * @param name - Current segment name\n * @returns Formatted path string (e.g., \"color.brand.primary\")\n */\nexport function formatTokenPath(parentPath: string[], name?: string): string {\n if (name === undefined || name === '') {\n return parentPath.join('.')\n }\n return parentPath.length > 0 ? `${parentPath.join('.')}.${name}` : name\n}\n","/**\n * @fileoverview Group extension resolver for DTCG $extends support\n *\n * Implements group inheritance per DTCG specification (Section 6.4).\n * Follows JSON Schema $ref semantics for deep merging and extension resolution.\n */\n\nimport { ValidationError } from '@shared/errors/index'\nimport { isTokenLike } from '@shared/utils/token-utils'\n\nimport type { Token, TokenCollection, TokenGroup } from './types'\n\nexport class GroupExtensionResolver {\n /**\n * Resolve all $extends references in a token collection\n * Returns a new collection with all group extensions resolved\n */\n resolveExtensions(collection: TokenCollection): TokenCollection {\n const result: TokenCollection = {}\n\n // Process each top-level group/token\n for (const [key, value] of Object.entries(collection)) {\n if (this.isToken(value)) {\n // Tokens at root level don't have extensions\n result[key] = value\n } else if (this.isGroup(value)) {\n // Resolve group extensions recursively\n result[key] = this.resolveGroup(value, [key], collection, new Set())\n }\n }\n\n return result\n }\n\n /**\n * Resolve extensions for a single group\n * @param group The group to resolve\n * @param path Current path in the hierarchy (for error messages)\n * @param collection The full token collection (for resolving references)\n * @param visited Set of visited paths (for circular reference detection)\n */\n private resolveGroup(\n group: TokenGroup,\n path: string[],\n collection: TokenCollection,\n visited: Set<string>,\n ): TokenGroup {\n const groupPath = path.join('.')\n\n // Check for circular references\n if (visited.has(groupPath)) {\n const cycle = Array.from(visited).join(' → ') + ' → ' + groupPath\n throw new ValidationError(\n `Circular group extension detected: ${cycle}. ` +\n `Groups must not create circular inheritance chains (DTCG Section 6.4.4).`,\n [{ message: `Circular group extension detected: ${cycle}` }],\n )\n }\n\n // If no $extends, process children recursively\n if (group.$extends == null) {\n return this.processGroupChildren(group, path, collection, visited)\n }\n\n // Parse the $extends reference\n const targetPath = this.parseGroupReference(group.$extends)\n\n // Find the target group\n const targetGroup = this.findGroup(targetPath, collection)\n if (targetGroup == null) {\n throw new ValidationError(\n `Group extension failed at \"${groupPath}\": Cannot find target group \"${targetPath}\". ` +\n `Ensure the referenced group exists.`,\n [\n {\n message: `Group extension failed at \"${groupPath}\": Cannot find target group \"${targetPath}\".`,\n },\n ],\n )\n }\n\n // Check that target is actually a group, not a token\n if (this.isToken(targetGroup)) {\n throw new ValidationError(\n `Group extension failed at \"${groupPath}\": Target \"${targetPath}\" is a token, not a group. ` +\n `$extends can only reference groups (DTCG Section 6.4).`,\n [\n {\n message: `Group extension failed at \"${groupPath}\": Target \"${targetPath}\" is a token.`,\n },\n ],\n )\n }\n\n // Add current group to visited set for circular detection\n const newVisited = new Set(visited)\n newVisited.add(groupPath)\n\n // Recursively resolve the target group first\n const resolvedTarget = this.resolveGroup(\n targetGroup,\n targetPath.split('.'),\n collection,\n newVisited,\n )\n\n // Merge local group with resolved target\n const merged = this.mergeGroups(resolvedTarget, group)\n\n // Process children of merged group recursively\n return this.processGroupChildren(merged, path, collection, visited)\n }\n\n /**\n * Process children of a group recursively\n */\n private processGroupChildren(\n group: TokenGroup,\n path: string[],\n collection: TokenCollection,\n visited: Set<string>,\n ): TokenGroup {\n const result: TokenGroup = { ...group }\n\n // Process each child\n for (const [key, value] of Object.entries(group)) {\n // Skip group properties\n if (key.startsWith('$')) {\n continue\n }\n\n if (this.isGroup(value)) {\n // Recursively resolve child group\n result[key] = this.resolveGroup(value, [...path, key], collection, visited)\n }\n // Tokens are left as-is\n }\n\n return result\n }\n\n /**\n * Merge two groups using deep merge semantics\n * Per DTCG spec Section 6.4.3:\n * - Same path = local overrides inherited\n * - Different paths = merge (both exist)\n * - Complete token replacement (not property-by-property merge)\n */\n private mergeGroups(inherited: TokenGroup, local: TokenGroup): TokenGroup {\n // Start with a copy of inherited group\n const result: TokenGroup = { ...inherited }\n\n // Apply local properties and tokens\n for (const [key, value] of Object.entries(local)) {\n // $extends is processed, don't copy it to result\n if (key === '$extends') {\n continue\n }\n\n // Group properties: local overrides inherited\n if (key.startsWith('$')) {\n result[key] = value\n continue\n }\n\n // Check if this key exists in inherited\n const inheritedValue = inherited[key]\n\n if (inheritedValue == null) {\n // New token/group: add it\n result[key] = value\n continue\n }\n\n // Both tokens or type mismatch (token vs group): local overrides\n const isInheritedToken = this.isToken(inheritedValue)\n const isLocalToken = this.isToken(value)\n\n if (isInheritedToken || isLocalToken) {\n result[key] = value\n continue\n }\n\n // Both groups: deep merge recursively\n result[key] = this.mergeGroups(inheritedValue as TokenGroup, value as TokenGroup)\n }\n\n return result\n }\n\n /**\n * Parse a group reference (alias or JSON Pointer format)\n * Supports: \"{group.name}\" or \"#/group/name\"\n */\n private parseGroupReference(ref: string): string {\n // Alias format: {group.name}\n if (ref.startsWith('{') && ref.endsWith('}')) {\n return ref.slice(1, -1)\n }\n\n // JSON Pointer format: #/group/name\n if (ref.startsWith('#/')) {\n return ref.slice(2).replace(/\\//g, '.')\n }\n\n // Invalid format\n throw new ValidationError(\n `Invalid group reference format: \"${ref}\". ` +\n `Use alias syntax \"{group.name}\" or JSON Pointer \"#/group/name\".`,\n [{ message: `Invalid group reference format: \"${ref}\".` }],\n )\n }\n\n /**\n * Find a group in the token collection by path\n */\n private findGroup(path: string, collection: TokenCollection): TokenGroup | Token | null {\n const parts = path.split('.')\n let current: unknown = collection\n for (const part of parts) {\n if (current == null || typeof current !== 'object') {\n return null as TokenGroup | Token | null\n }\n current = (current as Record<string, unknown>)[part]\n }\n\n return current as TokenGroup | Token | null\n }\n\n /**\n * Type guard: check if value is a token\n */\n private isToken(value: unknown): value is Token {\n return isTokenLike(value)\n }\n\n /**\n * Type guard: check if value is a group\n */\n private isGroup(value: unknown): value is TokenGroup {\n return typeof value === 'object' && value !== null && !('$value' in value) && !('$ref' in value)\n }\n}\n","/**\n * @license\n * Copyright (c) 2025 Dispersa Contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @fileoverview Main Dispersa API - Functional exports\n */\n\nimport { TypeWriter } from '@adapters/filesystem/type-writer'\nimport { BuildOrchestrator } from '@build/build-orchestrator'\nimport { OutputProcessor } from '@build/output-processor'\nimport { TokenPipeline } from '@build/pipeline/token-pipeline'\nimport type { BuildConfig, DispersaOptions } from '@config/index'\nimport { LintRunner } from '@lint/lint-runner'\nimport type { LintConfig, LintResult } from '@lint/types'\nimport type { BuildResult } from '@renderers/types'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport { ConfigurationError, LintError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { toBuildError } from '@shared/utils/error-utils'\nimport { stripInternalTokenMetadata } from '@shared/utils/token-utils'\nimport type { ResolvedTokens, InternalResolvedTokens } from '@tokens/types'\nimport { SchemaValidator } from '@validation/validator'\n\nfunction createValidator(): SchemaValidator {\n return new SchemaValidator()\n}\n\nfunction createPipeline(options?: DispersaOptions): TokenPipeline {\n return new TokenPipeline({ validation: options?.validation })\n}\n\nfunction createOutputProcessor(): OutputProcessor {\n return new OutputProcessor()\n}\n\nfunction createOrchestrator(\n pipeline: TokenPipeline,\n outputProcessor: OutputProcessor,\n): BuildOrchestrator {\n return new BuildOrchestrator(pipeline, outputProcessor)\n}\n\nfunction resolveConfig(\n config: Partial<BuildConfig>,\n options?: DispersaOptions,\n): { resolver: string | ResolverDocument; buildPath: string } {\n const resolver = config.resolver ?? options?.resolver\n const buildPath = config.buildPath ?? options?.buildPath ?? ''\n\n if (!resolver) {\n throw new ConfigurationError('resolver is required in build config')\n }\n\n return { resolver, buildPath }\n}\n\nfunction validateBuildConfig(validator: SchemaValidator, config: BuildConfig): void {\n const configErrors = validator.validateBuildConfig(config)\n if (configErrors.length > 0) {\n throw new ConfigurationError(\n `Invalid build configuration: ${validator.getErrorMessage(configErrors)}`,\n )\n }\n\n for (const output of config.outputs) {\n const outputErrors = validator.validateOutputConfig(output)\n if (outputErrors.length > 0) {\n throw new ConfigurationError(\n `Invalid output '${output.name}': ${validator.getErrorMessage(outputErrors)}`,\n )\n }\n }\n}\n\nasync function resolvePipeline(\n pipeline: TokenPipeline,\n resolver: string | ResolverDocument,\n modifierInputs: ModifierInputs,\n): Promise<ResolvedTokens> {\n const { tokens } = await pipeline.resolve(resolver, modifierInputs)\n return stripInternalTokenMetadata(tokens)\n}\n\n/**\n * DTCG design token processor with multi-format output support\n *\n * Dispersa processes DTCG-compliant design tokens through a configurable pipeline,\n * resolves references and aliases, applies transforms and filters, and generates output\n * in multiple formats (CSS, JSON, JavaScript).\n *\n * **Runtime Validation:**\n * All functions validate their configuration inputs at runtime, including build configs,\n * output configs, and custom component registrations. This catches configuration errors\n * early with helpful error messages.\n *\n * Features:\n * - **Transforms**: Modify token values and names (e.g., convert colors, change case)\n * - **Filters**: Select which tokens to include in output\n * - **Preprocessors**: Transform raw token data before parsing\n * - **Renderers**: Generate output in various formats\n * - **Runtime validation**: JSON schema validation for all user inputs\n *\n * @example Basic build usage\n * ```typescript\n * import { build, css } from 'dispersa'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const result = await build({\n * resolver: './tokens.resolver.json',\n * buildPath: './output',\n * outputs: [\n * css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [nameKebabCase()]\n * })\n * ]\n * })\n * ```\n *\n * @example Mixed presets per output\n * ```typescript\n * import { build, css, json } from 'dispersa'\n *\n * const result = await build({\n * resolver: './tokens.resolver.json',\n * buildPath: './output',\n * outputs: [\n * css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root', // All themes in one CSS file\n * transforms: [nameKebabCase()]\n * }),\n * json({\n * name: 'json',\n * file: 'tokens-{theme}.json', // Separate file per theme\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ]\n * })\n * ```\n *\n * @example Using filters and preprocessors\n * ```typescript\n * import { build, css } from 'dispersa'\n * import { byType } from 'dispersa/filters'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const result = await build({\n * resolver: './tokens.resolver.json',\n * buildPath: './output',\n * outputs: [\n * css({\n * name: 'colors-only',\n * file: 'colors.css',\n * preset: 'standalone',\n * selector: ':root',\n * filters: [byType('color')],\n * transforms: [nameKebabCase()]\n * })\n * ],\n * permutations: [\n * { theme: 'light' },\n * { theme: 'dark' }\n * ]\n * })\n * ```\n */\nexport async function build(config: BuildConfig): Promise<BuildResult> {\n try {\n return await buildOrThrow(config)\n } catch (error) {\n return {\n success: false,\n outputs: [],\n errors: [toBuildError(error)],\n }\n }\n}\n\nexport async function buildOrThrow(config: BuildConfig): Promise<BuildResult> {\n const validator = createValidator()\n\n validateBuildConfig(validator, config)\n\n const { resolver, buildPath } = resolveConfig(config)\n\n const pipeline = createPipeline({ validation: config.validation })\n const outputProcessor = createOutputProcessor()\n const orchestrator = createOrchestrator(pipeline, outputProcessor)\n\n return orchestrator.build(resolver, buildPath, config)\n}\n\nexport async function buildPermutation(\n config: BuildConfig,\n modifierInputs: ModifierInputs = {},\n): Promise<BuildResult> {\n return build({\n ...config,\n permutations: [modifierInputs],\n })\n}\n\nexport async function resolveTokens(\n resolver: string | ResolverDocument,\n modifierInputs: ModifierInputs = {},\n validation?: ValidationOptions,\n): Promise<ResolvedTokens> {\n const pipeline = createPipeline({ validation })\n return resolvePipeline(pipeline, resolver, modifierInputs)\n}\n\nexport type LintOptions = {\n resolver: string | ResolverDocument\n modifierInputs?: ModifierInputs\n validation?: ValidationOptions\n} & LintConfig\n\nexport async function lint(options: LintOptions): Promise<LintResult> {\n const { resolver, modifierInputs = {}, validation, ...lintConfig } = options\n\n const pipeline = createPipeline({ validation })\n\n const runner = new LintRunner({\n ...lintConfig,\n failOnError: lintConfig.failOnError ?? true,\n })\n\n let tokenSets: InternalResolvedTokens[]\n\n if (Object.keys(modifierInputs).length > 0) {\n // Specific modifier inputs provided - resolve only that permutation\n const { tokens } = await pipeline.resolve(resolver, modifierInputs)\n tokenSets = [tokens]\n } else {\n // No specific modifier inputs - resolve all permutations\n const permutations = await pipeline.resolveAllPermutations(resolver)\n tokenSets = permutations.map((p) => p.tokens)\n }\n\n // Use runMultiple for deduplication across permutations\n const result = await runner.runMultiple(tokenSets)\n\n if (result.errorCount > 0 && lintConfig.failOnError !== false) {\n throw new LintError(result.issues)\n }\n\n return result\n}\n\nexport async function resolveAllPermutations(resolver: string | ResolverDocument): Promise<\n {\n tokens: ResolvedTokens\n modifierInputs: ModifierInputs\n }[]\n> {\n const pipeline = createPipeline()\n const permutations = await pipeline.resolveAllPermutations(resolver)\n return permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalTokenMetadata(tokens),\n modifierInputs,\n }))\n}\n\nexport async function generateTypes(\n tokens: ResolvedTokens,\n fileName: string,\n options?: { moduleName?: string },\n): Promise<void> {\n const typeWriter = new TypeWriter()\n await typeWriter.write(tokens, {\n fileName,\n moduleName: options?.moduleName ?? 'Tokens',\n includeValues: true,\n })\n}\n","/**\n * @fileoverview Token types - extended from schema-generated types\n *\n * Base token types are defined manually to match DTCG 2025.10.\n * This keeps TypeScript types stable while runtime validation relies on\n * the vendored DTCG JSON Schemas.\n */\n\n// ============================================================================\n// DTCG TOKEN TYPES (MANUAL)\n// ============================================================================\n\nexport type JsonPointerReferenceObject = {\n $ref: string\n}\n\nexport type TokenValueReference = string | JsonPointerReferenceObject\n\nexport type Token = {\n $value?: TokenValue | TokenValueReference\n $ref?: string\n $type?: TokenType\n $description?: string\n $deprecated?: boolean | string\n $extensions?: Record<string, unknown>\n}\n\n/**\n * Internal token shape used by the resolver pipeline\n */\nexport type InternalToken = Token & {\n /** Internal: Source modifier tag for bundle outputs (not part of DTCG spec) */\n _sourceModifier?: string\n}\n\ntype TokenGroupMetadataValue = string | boolean | Record<string, unknown> | undefined\n\ntype TokenGroupBase = {\n $type?: TokenType\n $description?: string\n $deprecated?: boolean | string\n $extensions?: Record<string, unknown>\n $extends?: string\n $root?: Token\n}\n\n// Note: interface used to allow recursive index signature (TS2456 with type alias).\nexport interface TokenGroup extends TokenGroupBase {\n [key: string]: Token | InternalToken | TokenGroup | TokenGroupMetadataValue\n}\n\n// ============================================================================\n// HELPER TYPES (NOT SCHEMA-GENERATED)\n// ============================================================================\n\n/**\n * Token type discriminator - union of all valid token type strings\n *\n * Represents the possible values for the $type property in DTCG tokens.\n */\nexport type TokenType =\n | 'color'\n | 'dimension'\n | 'fontFamily'\n | 'fontWeight'\n | 'duration'\n | 'cubicBezier'\n | 'number'\n | 'shadow'\n | 'typography'\n | 'border'\n | 'strokeStyle'\n | 'transition'\n | 'gradient'\n\n/**\n * Token value types - any valid value that can appear in a token\n *\n * Represents the possible types for the $value property in tokens.\n * Can be primitives, objects, or arrays depending on the token type.\n */\nexport type TokenValue = string | number | boolean | Record<string, unknown> | unknown[]\n\n// ============================================================================\n// VALUE TYPES FOR DEVELOPER CONVENIENCE\n// ============================================================================\n\n/**\n * Valid DTCG color space identifiers\n * All 14 color spaces from DTCG Color Module 2025-10\n */\nexport type ColorSpace =\n | 'srgb' // sRGB (IEC 61966-2-1:1999)\n | 'srgb-linear' // Linear sRGB\n | 'hsl' // Hue, Saturation, Lightness\n | 'hwb' // Hue, Whiteness, Blackness\n | 'lab' // CIELAB (CIE L*a*b*)\n | 'lch' // CIE LCH (Lightness, Chroma, Hue)\n | 'oklab' // Oklab perceptual color space\n | 'oklch' // Oklch (Lightness, Chroma, Hue)\n | 'display-p3' // Display P3 (DCI-P3 D65 whitepoint)\n | 'a98-rgb' // Adobe RGB (1998)\n | 'prophoto-rgb' // ProPhoto RGB (ROMM RGB)\n | 'rec2020' // Rec. 2020 (ITU-R BT.2020-2)\n | 'xyz-d65' // CIE XYZ with D65 whitepoint\n | 'xyz-d50' // CIE XYZ with D50 whitepoint\n\n/**\n * Color component value: number or the \"none\" keyword for missing channels\n * Token references are handled separately via alias resolution\n */\nexport type ColorComponent = number | 'none'\n\n/**\n * DTCG color object format with colorSpace and components\n * Each color space has different component meanings and ranges:\n * - RGB-based (srgb, srgb-linear, display-p3, a98-rgb, prophoto-rgb, rec2020): [R: 0-1, G: 0-1, B: 0-1]\n * - HSL: [H: angle, S: 0-100, L: 0-100]\n * - HWB: [H: angle, W: 0-100, B: 0-100]\n * - Lab/CIELab: [L: 0-100, a: -125 to 125, b: -125 to 125]\n * - LCH: [L: 0-100, C: 0-150, H: angle]\n * - OKLab: [L: 0-1, a: -0.4 to 0.4, b: -0.4 to 0.4]\n * - OKLCH: [L: 0-1, C: 0-0.4, H: angle]\n * - XYZ: [X: unbounded, Y: unbounded, Z: unbounded]\n */\nexport type ColorValueObject = {\n colorSpace: ColorSpace\n components: [ColorComponent, ColorComponent, ColorComponent]\n alpha?: number\n hex?: string\n}\n\n/**\n * DTCG 2025-10 compliant color value\n *\n * Per DTCG spec, color values must be one of:\n * 1. **Color object** with colorSpace and components (e.g., `{ colorSpace: 'srgb', components: [1, 0, 0] }`)\n * 2. **Token reference** using `{token.path}` or JSON Pointer object (e.g., `\"{color.brand.primary}\"`)\n *\n * ⚠️ **Important**: Arbitrary CSS color strings like `\"#ff0000\"`, `\"rgb(255, 0, 0)\"`, or `\"red\"`\n * are NOT valid per DTCG spec. String values MUST be alias references.\n *\n * @see {@link https://www.designtokens.org/tr/2025.10/color/ | DTCG Color Module}\n * @see {@link https://www.designtokens.org/tr/2025.10/format/#color-0 | DTCG Format: Color Type}\n *\n * @example Valid color values\n * ```typescript\n * // Object format (preferred)\n * const color1: ColorValue = {\n * colorSpace: 'srgb',\n * components: [1, 0, 0],\n * alpha: 1\n * }\n *\n * // Alias reference (resolves to another token)\n * const color2: ColorValue = \"{color.brand.primary}\"\n * ```\n */\nexport type ColorValue = ColorValueObject | TokenValueReference\n\n/**\n * DTCG 2025-10 compliant dimension value\n *\n * Per DTCG spec, dimension values MUST use object format with\n * numeric value and string unit properties.\n *\n * ⚠️ **Important**: String values like `\"16px\"` are NOT valid per DTCG spec.\n * Dimensions MUST be objects with separate value and unit properties.\n *\n * @see {@link https://www.designtokens.org/tr/2025.10/format/#dimension-0 | DTCG Format: Dimension Type}\n *\n * @example Valid dimension values\n * ```typescript\n * const spacing: DimensionValue = { value: 16, unit: 'px' }\n * const fontSize: DimensionValue = { value: 1.5, unit: 'rem' }\n * const borderWidth: DimensionValue = { value: 2, unit: 'px' }\n * ```\n */\nexport type DimensionValue = {\n value: number\n unit: 'px' | 'rem'\n}\n\n/**\n * Font family value - single string or array of fallback fonts\n */\nexport type FontFamilyValue = string | string[]\n\n/**\n * Font weight value - numeric (1-1000) or named value\n */\nexport type FontWeightValue = number | string\n\n/**\n * Duration value - DTCG duration object\n */\nexport type DurationValue = { value: number; unit: 'ms' | 's' }\n\n/**\n * Cubic bezier value - 4-number array for animation easing\n */\nexport type CubicBezierValue = [number, number, number, number]\n\n/**\n * Shadow value object (DTCG 2025.10 composite type - Section 9.6)\n *\n * Represents a shadow effect with color, offset, blur, and optional spread.\n * Uses proper ColorValue and DimensionValue types per DTCG spec.\n *\n * @example\n * ```json\n * {\n * \"$type\": \"shadow\",\n * \"$value\": {\n * \"color\": { \"colorSpace\": \"srgb\", \"components\": [0, 0, 0], \"alpha\": 0.5 },\n * \"offsetX\": { \"value\": 0, \"unit\": \"px\" },\n * \"offsetY\": { \"value\": 4, \"unit\": \"px\" },\n * \"blur\": { \"value\": 8, \"unit\": \"px\" },\n * \"spread\": { \"value\": 0, \"unit\": \"px\" }\n * }\n * }\n * ```\n */\nexport type ShadowValueObject = {\n /** Shadow color (color object or alias reference) */\n color: ColorValue\n /** Horizontal offset */\n offsetX: DimensionValue\n /** Vertical offset */\n offsetY: DimensionValue\n /** Blur radius */\n blur: DimensionValue\n /** Spread radius */\n spread: DimensionValue\n /** Whether shadow is inset */\n inset?: boolean\n}\n\n/**\n * Shadow value - single shadow or array of shadows\n */\nexport type ShadowValue = ShadowValueObject | ShadowValueObject[]\n\n/**\n * Unresolved typography token type (pre-resolution)\n */\nexport type UnresolvedTypographyToken = Token & {\n $type: 'typography'\n $value: TypographyValue | TokenValueReference\n}\n\n/**\n * Unresolved border token type (pre-resolution)\n */\nexport type UnresolvedBorderToken = Token & {\n $type: 'border'\n $value: BorderValue | TokenValueReference\n}\n\n/**\n * Unresolved stroke style token type (pre-resolution)\n */\nexport type UnresolvedStrokeStyleToken = Token & {\n $type: 'strokeStyle'\n $value: StrokeStyleValue | TokenValueReference\n}\n\n/**\n * Unresolved transition token type (pre-resolution)\n */\nexport type UnresolvedTransitionToken = Token & {\n $type: 'transition'\n $value: TransitionValue | TokenValueReference\n}\n\n/**\n * Unresolved gradient token type (pre-resolution)\n */\nexport type UnresolvedGradientToken = Token & {\n $type: 'gradient'\n $value: GradientValue | TokenValueReference\n}\n\n/**\n * Stroke style value object\n */\nexport type StrokeStyleValueObject = {\n dashArray: DimensionValue[]\n lineCap: 'round' | 'butt' | 'square'\n}\n\n/**\n * Stroke style value\n */\nexport type StrokeStyleValue = string | StrokeStyleValueObject\n\n/**\n * Border value object\n */\nexport type BorderValue = {\n color: ColorValue\n width: DimensionValue\n style: StrokeStyleValue\n}\n\n/**\n * Typography value object\n */\nexport type TypographyValue = {\n fontFamily: FontFamilyValue\n fontSize: DimensionValue\n fontWeight: FontWeightValue\n letterSpacing: DimensionValue\n lineHeight: number\n}\n\n/**\n * Transition value object\n */\nexport type TransitionValue = {\n duration: DurationValue\n delay: DurationValue\n timingFunction: CubicBezierValue\n}\n\n/**\n * Gradient stop value object\n */\nexport type GradientStop = {\n color: ColorValue\n position: number\n}\n\n/**\n * Gradient value\n */\nexport type GradientValue = GradientStop[]\n\n// ============================================================================\n// NARROWED VALUE TYPE (FOR CONSUMER USE)\n// ============================================================================\n\n/**\n * Union of all known DTCG token value types.\n *\n * Provides narrower typing than `TokenValue` for consumers who want\n * better autocomplete and type checking when working with resolved tokens.\n *\n * Use the type guard helpers (`isColorToken`, `isDimensionToken`, etc.)\n * to narrow a `ResolvedToken` to a specific value type.\n *\n * @example\n * ```typescript\n * import type { ResolvedToken } from 'dispersa'\n * import { isColorToken, isDimensionToken } from 'dispersa'\n *\n * function process(token: ResolvedToken) {\n * if (isColorToken(token)) {\n * // token.$value is narrowed to ColorValue\n * }\n * if (isDimensionToken(token)) {\n * // token.$value is narrowed to DimensionValue\n * }\n * }\n * ```\n */\nexport type DesignTokenValue =\n | ColorValueObject\n | DimensionValue\n | DurationValue\n | CubicBezierValue\n | ShadowValueObject\n | ShadowValueObject[]\n | TypographyValue\n | BorderValue\n | StrokeStyleValueObject\n | StrokeStyleValue\n | TransitionValue\n | GradientValue\n | FontFamilyValue\n | FontWeightValue\n | number\n\n// ============================================================================\n// TOKEN TYPE GUARDS\n// ============================================================================\n\n/** Type-narrowed token whose `$value` is a `ColorValueObject` or color string */\nexport type ColorToken = ResolvedToken & { $type: 'color' }\n\n/** Type-narrowed token whose `$value` is a `DimensionValue` */\nexport type DimensionToken = ResolvedToken & { $type: 'dimension' }\n\n/** Type-narrowed token whose `$value` is a `ShadowValue` */\nexport type ShadowToken = ResolvedToken & { $type: 'shadow' }\n\n/** Type-narrowed token whose `$value` is a `TypographyValue` */\nexport type TypographyToken = ResolvedToken & { $type: 'typography' }\n\n/** Type-narrowed token whose `$value` is a `BorderValue` */\nexport type BorderToken = ResolvedToken & { $type: 'border' }\n\n/** Type-narrowed token whose `$value` is a `DurationValue` */\nexport type DurationToken = ResolvedToken & { $type: 'duration' }\n\n/** Type-narrowed token whose `$value` is a `TransitionValue` */\nexport type TransitionToken = ResolvedToken & { $type: 'transition' }\n\n/** Type-narrowed token whose `$value` is a `GradientValue` */\nexport type GradientToken = ResolvedToken & { $type: 'gradient' }\n\n/** Check if a resolved token is a color token */\nexport function isColorToken(token: ResolvedToken): token is ColorToken {\n return token.$type === 'color'\n}\n\n/** Check if a resolved token is a dimension token */\nexport function isDimensionToken(token: ResolvedToken): token is DimensionToken {\n return token.$type === 'dimension'\n}\n\n/** Check if a resolved token is a shadow token */\nexport function isShadowToken(token: ResolvedToken): token is ShadowToken {\n return token.$type === 'shadow'\n}\n\n/** Check if a resolved token is a typography token */\nexport function isTypographyToken(token: ResolvedToken): token is TypographyToken {\n return token.$type === 'typography'\n}\n\n/** Check if a resolved token is a border token */\nexport function isBorderToken(token: ResolvedToken): token is BorderToken {\n return token.$type === 'border'\n}\n\n/** Check if a resolved token is a duration token */\nexport function isDurationToken(token: ResolvedToken): token is DurationToken {\n return token.$type === 'duration'\n}\n\n/** Check if a resolved token is a transition token */\nexport function isTransitionToken(token: ResolvedToken): token is TransitionToken {\n return token.$type === 'transition'\n}\n\n/** Check if a resolved token is a gradient token */\nexport function isGradientToken(token: ResolvedToken): token is GradientToken {\n return token.$type === 'gradient'\n}\n\n// ============================================================================\n// COMPOSED TYPES (NOT SCHEMA-GENERATED)\n// ============================================================================\n\n/**\n * Top-level collection of tokens and groups\n *\n * Maps token/group names to their definitions. This is the structure\n * of a raw token file before resolution.\n */\nexport type TokenCollection = Record<string, Token | TokenGroup>\n\n/**\n * Token document nodes used during resolution\n */\nexport type TokenNode = Token | TokenGroup\n\n/**\n * Internal token document nodes used during resolution\n */\nexport type InternalTokenNode = InternalToken | TokenGroup\n\n/**\n * Token document structure (pre-resolution)\n */\nexport type TokenDocument = Record<string, TokenNode>\n\n/**\n * Internal token document structure (pre-resolution, with internal metadata)\n */\nexport type InternalTokenDocument = Record<string, InternalTokenNode>\n\n/**\n * Fully resolved token with computed metadata\n *\n * After resolution, tokens include additional metadata like their\n * full path in the token hierarchy and the original value before\n * any alias or reference resolution.\n *\n * @example\n * ```typescript\n * {\n * $value: \"#ff0000\",\n * $type: \"color\",\n * path: [\"color\", \"brand\", \"primary\"],\n * name: \"color.brand.primary\",\n * originalValue: \"{color.red.500}\" // Before alias resolution\n * }\n * ```\n */\nexport type ResolvedToken = Token & {\n /** Hierarchical path segments (e.g., ['color', 'brand', 'primary']) */\n path: string[]\n\n /** Fully qualified token name (e.g., 'color.brand.primary') */\n name: string\n\n /**\n * The raw value before any alias or reference resolution.\n *\n * For alias tokens this contains the alias reference string\n * (e.g., `\"{color.primary}\"`) or a composite value with embedded\n * alias references. For non-alias tokens this equals `$value`.\n *\n * Use the built-in `isAlias()` / `isBase()` filters or inspect\n * this value with `getPureAliasReferenceName()` to determine\n * whether the token was originally an alias.\n */\n originalValue: TokenValue\n}\n\n/**\n * Collection of resolved tokens indexed by name\n *\n * Maps token names to their resolved definitions. This is the primary\n * format used throughout Dispersa after token resolution.\n *\n * @example\n * ```typescript\n * {\n * \"color.brand.primary\": {\n * $value: \"#ff0000\",\n * $type: \"color\",\n * path: [\"color\", \"brand\", \"primary\"],\n * name: \"color.brand.primary\",\n * originalValue: \"#ff0000\"\n * }\n * }\n * ```\n */\nexport type ResolvedTokens = Record<string, ResolvedToken>\n\n/**\n * Internal resolved token with metadata used by the pipeline and bundlers\n *\n * These fields are not part of the DTCG spec and should be stripped before\n * returning tokens to public callers or rendering output.\n */\nexport type InternalResolvedToken = ResolvedToken & {\n /** Internal: Whether this token was originally an alias (not part of DTCG spec) */\n _isAlias?: boolean\n /** Internal: Source modifier tag for bundle outputs (not part of DTCG spec) */\n _sourceModifier?: string\n /** Internal: Source set name for bundle outputs (not part of DTCG spec) */\n _sourceSet?: string\n}\n\n/**\n * Internal collection of resolved tokens (with internal metadata)\n */\nexport type InternalResolvedTokens = Record<string, InternalResolvedToken>\n","/**\n * @fileoverview Built-in name transforms using change-case library for robust case conversion\n */\n\nimport { ResolvedToken } from '@tokens/types'\nimport { camelCase, kebabCase, snakeCase, pascalCase, constantCase } from 'change-case'\n\nimport type { Transform } from '../types'\n\n/**\n * Convert token name to camelCase\n */\nexport function nameCamelCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = camelCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to kebab-case\n */\nexport function nameKebabCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = kebabCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to snake_case\n */\nexport function nameSnakeCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = snakeCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to PascalCase\n */\nexport function namePascalCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = pascalCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to CONSTANT_CASE\n */\nexport function nameConstantCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = constantCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Add prefix to token name\n *\n * @example\n * ```typescript\n * // Add 'ds-' prefix to all token names\n * transforms: [namePrefix('ds-')]\n * // 'color.primary' becomes 'ds-color.primary'\n * ```\n */\nexport function namePrefix(prefix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${prefix}${token.name}`,\n }\n },\n }\n}\n\n/**\n * Add suffix to token name\n *\n * @example\n * ```typescript\n * // Add '-token' suffix to all token names\n * transforms: [nameSuffix('-token')]\n * // 'color.primary' becomes 'color.primary-token'\n * ```\n */\nexport function nameSuffix(suffix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${token.name}${suffix}`,\n }\n },\n }\n}\n","/**\n * @fileoverview Color format conversion utilities for DTCG 2025.10\n * Uses culori for accurate color science and conversions\n */\n\nimport type { ColorComponent, ColorSpace, ColorValueObject } from '@tokens/types'\nimport {\n formatHex,\n formatHex8,\n type Color as CuloriColor,\n type Rgb,\n type Lrgb,\n type Hsl,\n type Hwb,\n type Lab,\n type Lch,\n type Oklab,\n type Oklch,\n type P3,\n type A98,\n type Prophoto,\n type Rec2020,\n type Xyz65,\n type Xyz50,\n} from 'culori'\n\n/**\n * Check if a color value is in DTCG object format\n */\nexport function isColorObject(value: unknown): value is ColorValueObject {\n return (\n typeof value === 'object' && value !== null && 'colorSpace' in value && 'components' in value\n )\n}\n\n/**\n * Convert a color component value to culori format\n * The \"none\" keyword becomes undefined (culori's representation of missing channels)\n */\nfunction componentToCulori(component: ColorComponent): number | undefined {\n return component === 'none' ? undefined : component\n}\n\n/**\n * Convert DTCG color object to culori color object\n * Handles all 14 DTCG color spaces and the \"none\" keyword\n */\nexport function dtcgObjectToCulori(color: ColorValueObject): CuloriColor {\n const [c1, c2, c3] = color.components.map(componentToCulori)\n const alpha = color.alpha !== undefined ? componentToCulori(color.alpha) : undefined\n\n // Normalize color space (case-insensitive, handle aliases)\n const colorSpace = color.colorSpace.toLowerCase() as Lowercase<ColorSpace>\n\n // Map DTCG color spaces to culori color objects with proper property names\n switch (colorSpace) {\n // RGB-based color spaces (components are R, G, B in 0-1 range)\n case 'srgb':\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n\n case 'srgb-linear':\n return { mode: 'lrgb', r: c1, g: c2, b: c3, alpha } as Lrgb\n\n case 'display-p3':\n return { mode: 'p3', r: c1, g: c2, b: c3, alpha } as P3\n\n case 'a98-rgb':\n return { mode: 'a98', r: c1, g: c2, b: c3, alpha } as A98\n\n case 'prophoto-rgb':\n return { mode: 'prophoto', r: c1, g: c2, b: c3, alpha } as Prophoto\n\n case 'rec2020':\n return { mode: 'rec2020', r: c1, g: c2, b: c3, alpha } as Rec2020\n\n // Cylindrical color spaces (Hue, Saturation/Whiteness, Lightness/Blackness)\n case 'hsl':\n return { mode: 'hsl', h: c1, s: c2, l: c3, alpha } as Hsl\n\n case 'hwb':\n return { mode: 'hwb', h: c1, w: c2, b: c3, alpha } as Hwb\n\n // Lab color spaces (Lightness, a/b or Chroma/Hue)\n case 'lab':\n return { mode: 'lab', l: c1, a: c2, b: c3, alpha } as Lab\n\n case 'lch':\n return { mode: 'lch', l: c1, c: c2, h: c3, alpha } as Lch\n\n case 'oklab':\n return { mode: 'oklab', l: c1, a: c2, b: c3, alpha } as Oklab\n\n case 'oklch':\n return { mode: 'oklch', l: c1, c: c2, h: c3, alpha } as Oklch\n\n // XYZ color spaces\n case 'xyz-d65':\n return { mode: 'xyz65', x: c1, y: c2, z: c3, alpha } as Xyz65\n\n case 'xyz-d50':\n return { mode: 'xyz50', x: c1, y: c2, z: c3, alpha } as Xyz50\n\n // Fallback to sRGB if color space is not recognized\n default:\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n }\n}\n\n/**\n * Convert DTCG color object to hex string\n */\nexport function colorObjectToHex(color: ColorValueObject): string {\n const culoriColor = dtcgObjectToCulori(color)\n const alpha = color.alpha ?? 1\n\n if (alpha < 1) {\n return formatHex8(culoriColor)\n }\n\n return formatHex(culoriColor)\n}\n","/**\n * @fileoverview Dimension format conversion utilities for DTCG 2025.10\n * Handles dimension object format { value: number, unit: string }\n */\n\nimport { DEFAULT_BASE_FONT_SIZE_PX } from '@shared/constants'\nimport type { DimensionValue } from '@tokens/types'\n/**\n * Check if a value is in dimension object format\n */\nexport function isDimensionObject(value: unknown): value is DimensionValue {\n return typeof value === 'object' && value !== null && 'value' in value && 'unit' in value\n}\n\n/**\n * Convert DTCG dimension object to CSS string\n */\nexport function dimensionObjectToString(dimension: DimensionValue): string {\n return `${dimension.value}${dimension.unit}`\n}\n\n/**\n * Convert a DTCG dimension object between units (px, rem).\n *\n * Converts via px as an intermediate: rem -> px -> target.\n * Returns the original value unchanged for unsupported unit combinations.\n *\n * @param value - Source dimension object\n * @param toUnit - Target CSS unit\n * @param baseFontSize - Base font size in px used for rem conversions\n */\nexport function convertDimension(\n value: DimensionValue,\n toUnit: DimensionValue['unit'],\n baseFontSize = DEFAULT_BASE_FONT_SIZE_PX,\n): DimensionValue {\n const fromUnit = value.unit\n let numValue = value.value\n\n // Convert to px first (as intermediate)\n if (fromUnit === 'rem') {\n numValue = numValue * baseFontSize\n } else if (fromUnit !== 'px' && fromUnit !== toUnit) {\n // If not px, rem, or em, and not already target unit, return as-is\n return value\n }\n\n // Convert from px to target unit\n if (toUnit === 'rem') {\n numValue = numValue / baseFontSize\n } else if (toUnit !== 'px') {\n // Can't convert to other units, return original\n return value\n }\n\n return {\n value: numValue,\n unit: toUnit,\n }\n}\n","/**\n * @fileoverview Duration format conversion utilities for DTCG 2025.10\n * Handles duration object format { value: number, unit: 'ms' | 's' }\n */\n\nimport type { DurationValue } from '@tokens/types'\n\n/**\n * Check if a value is in duration object format\n */\nexport function isDurationObject(value: unknown): value is DurationValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'value' in value &&\n 'unit' in value &&\n (value as { unit?: unknown }).unit !== undefined\n )\n}\n\n/**\n * Convert DTCG duration object to CSS string\n */\nexport function durationObjectToString(duration: DurationValue): string {\n return `${duration.value}${duration.unit}`\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Android/Jetpack Compose renderer for design tokens\n * Generates Kotlin code targeting Jetpack Compose with Material 3.\n *\n * @experimental This renderer is experimental. Its API, generated code structure,\n * and options may change in future releases.\n *\n * Supports two structure modes:\n * - `'nested'` — token path hierarchy as nested `object` declarations\n * - `'flat'` — tokens grouped by type into semantic sub-objects (Colors, Spacing, etc.)\n */\n\nimport {\n colorObjectToHex,\n isColorObject,\n dtcgObjectToCulori,\n} from '@processing/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/transforms/built-in/dimension-converter'\nimport { isDurationObject } from '@processing/transforms/built-in/duration-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ColorValueObject, DimensionValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport { converter } from 'culori'\n\nimport {\n assertFileRequired,\n buildGeneratedFileHeader,\n buildInMemoryOutputKey,\n groupTokensByType,\n indentStr,\n resolveFileName,\n stripInternalMetadata,\n toSafeIdentifier,\n} from './bundlers/utils'\nimport type { TokenGroup } from './bundlers/utils'\nimport { buildKotlinDeprecationAnnotation, buildTokenDescriptionComment } from './metadata'\nimport { outputTree } from './output-tree'\nimport type { RenderContext, RenderOutput, Renderer } from './types'\n\n/**\n * Options for Android/Jetpack Compose renderer\n *\n * Note: `packageName` is marked optional for type compatibility with the Renderer\n * generic, but is validated as required at runtime in the renderer's format() method.\n *\n * @experimental This type is experimental. Properties and behavior may change.\n */\nexport type AndroidRendererOptions = {\n preset?: 'standalone' | 'bundle'\n packageName?: string\n objectName?: string\n /**\n * Color output format for Kotlin Color initializers.\n * - `'argb_hex'` (default) — `Color(0xAARRGGBB)` hex literal\n * - `'argb_float'` — `Color(r, g, b, a)` float components\n *\n * Legacy aliases: `'argb8'` maps to `'argb_hex'`, `'argb_floats'` maps to `'argb_float'`.\n */\n colorFormat?: 'argb_hex' | 'argb_float' | 'argb8' | 'argb_floats'\n /**\n * Color space for generated Color values.\n * - `'sRGB'` (default) — standard sRGB color space\n * - `'displayP3'` — Display P3 wide gamut via `ColorSpaces.DisplayP3`\n */\n colorSpace?: 'sRGB' | 'displayP3'\n /**\n * Structure mode for token organization.\n * - `'nested'` (default) — mirror token path hierarchy as nested objects\n * - `'flat'` — group tokens by $type into semantic sub-objects (Colors, Spacing, etc.)\n */\n structure?: 'nested' | 'flat'\n /**\n * Kotlin visibility modifier for the generated object and its members.\n * - `undefined` (default) — no explicit modifier, which means `public` in Kotlin\n * - `'public'` — explicit `public object` / `public val`\n * - `'internal'` — `internal object` / `internal val` (useful for KMP / multi-module)\n */\n visibility?: 'public' | 'internal'\n /** Number of spaces per indentation level (default 4) */\n indent?: number\n}\n\n/**\n * Internal resolved options with all defaults applied.\n */\ntype ResolvedOptions = {\n preset: 'standalone' | 'bundle'\n packageName: string\n objectName: string\n colorFormat: 'argb_hex' | 'argb_float'\n colorSpace: 'sRGB' | 'displayP3'\n structure: 'nested' | 'flat'\n visibility: 'public' | 'internal' | undefined\n visPrefix: string\n indent: number\n}\n\ntype TokenTreeNode = {\n children: Map<string, TokenTreeNode>\n token?: ResolvedToken\n}\n\nconst toSRGB = converter('rgb')\nconst toP3 = converter('p3')\n\nconst KOTLIN_KEYWORDS = new Set([\n 'val',\n 'var',\n 'fun',\n 'class',\n 'object',\n 'when',\n 'is',\n 'in',\n 'return',\n 'break',\n 'continue',\n 'do',\n 'while',\n 'for',\n 'if',\n 'else',\n 'try',\n 'catch',\n 'throw',\n 'as',\n 'this',\n 'super',\n 'null',\n 'true',\n 'false',\n])\n\nconst KOTLIN_TYPE_GROUP_MAP: Record<string, string> = {\n color: 'Colors',\n dimension: 'Spacing',\n fontFamily: 'Fonts',\n fontWeight: 'FontWeights',\n duration: 'Durations',\n shadow: 'Shadows',\n typography: 'Typography',\n number: 'Numbers',\n cubicBezier: 'Animations',\n border: 'Borders',\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction resolveColorFormat(format?: string): 'argb_hex' | 'argb_float' {\n if (format === 'argb_floats' || format === 'argb_float') {\n return 'argb_float'\n }\n return 'argb_hex'\n}\n\nfunction escapeKotlinString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\$/g, '\\\\$')\n}\n\nfunction formatKotlinNumber(value: number): string {\n return Number.isInteger(value) ? `${value}.0` : String(value)\n}\n\nfunction roundComponent(value: number): number {\n return Math.round(value * 1000) / 1000\n}\n\nfunction toResourceName(family: string): string {\n return family\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '')\n}\n\n// ---------------------------------------------------------------------------\n// Renderer\n// ---------------------------------------------------------------------------\n\nexport class AndroidRenderer implements Renderer<AndroidRendererOptions> {\n async format(context: RenderContext, options?: AndroidRendererOptions): Promise<RenderOutput> {\n if (!options?.packageName) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": packageName is required for Android output`,\n )\n }\n\n const visibility = options?.visibility\n const opts: ResolvedOptions = {\n preset: options?.preset ?? 'standalone',\n packageName: options.packageName,\n objectName: options?.objectName ?? 'DesignTokens',\n colorFormat: resolveColorFormat(options?.colorFormat),\n colorSpace: options?.colorSpace ?? 'sRGB',\n structure: options?.structure ?? 'nested',\n visibility,\n visPrefix: visibility ? `${visibility} ` : '',\n indent: options?.indent ?? 4,\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n // -----------------------------------------------------------------------\n // Token tree (nested mode)\n // -----------------------------------------------------------------------\n\n private buildTokenTree(tokens: ResolvedTokens): TokenTreeNode {\n const root: TokenTreeNode = { children: new Map() }\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n let current = root\n const segments = token.path\n\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i]!\n if (!current.children.has(seg)) {\n current.children.set(seg, { children: new Map() })\n }\n current = current.children.get(seg)!\n }\n\n const leafName = segments[segments.length - 1] ?? token.name\n const leaf: TokenTreeNode = current.children.get(leafName) ?? { children: new Map() }\n leaf.token = token\n current.children.set(leafName, leaf)\n }\n\n return root\n }\n\n // -----------------------------------------------------------------------\n // Flat structure grouping\n // -----------------------------------------------------------------------\n\n /**\n * Builds a flattened camelCase name from a token's path, stripping the\n * type prefix segment (which is already represented by the group object).\n */\n private buildFlatKotlinName(token: ResolvedToken): string {\n const path = token.path\n const withoutTypePrefix = path.length > 1 ? path.slice(1) : path\n const joined = withoutTypePrefix.join('_')\n return toSafeIdentifier(joined, KOTLIN_KEYWORDS, false)\n }\n\n // -----------------------------------------------------------------------\n // Rendering\n // -----------------------------------------------------------------------\n\n private formatTokens(tokens: ResolvedTokens, options: ResolvedOptions): string {\n if (options.structure === 'flat') {\n return this.formatAsFlat(tokens, options)\n }\n return this.formatAsNested(tokens, options)\n }\n\n private formatAsNested(tokens: ResolvedTokens, options: ResolvedOptions): string {\n const tokenTypes = this.collectTokenTypesFromEntries(tokens)\n const tree = this.buildTokenTree(tokens)\n\n return this.buildFile(tokenTypes, options, (lines) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}object ${options.objectName} {`)\n this.renderTreeChildren(lines, tree, 1, options)\n lines.push('}')\n })\n }\n\n private formatAsFlat(tokens: ResolvedTokens, options: ResolvedOptions): string {\n const groups = groupTokensByType(tokens, KOTLIN_TYPE_GROUP_MAP)\n const tokenTypes = this.collectTokenTypesFromEntries(tokens)\n\n return this.buildFile(tokenTypes, options, (lines) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}object ${options.objectName} {`)\n this.renderFlatGroups(lines, groups, 1, options)\n lines.push('}')\n })\n }\n\n /**\n * Shared file preamble: header, package, imports, optional ShadowToken class.\n * The `renderBody` callback appends the main object(s) to `lines`.\n */\n private buildFile(\n tokenTypes: Set<string>,\n options: ResolvedOptions,\n renderBody: (lines: string[]) => void,\n ): string {\n const imports = this.collectImports(tokenTypes, options)\n const lines: string[] = []\n\n lines.push(buildGeneratedFileHeader())\n lines.push('')\n lines.push(`package ${options.packageName}`)\n lines.push('')\n\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n if (imports.length > 0) {\n lines.push('')\n }\n\n if (tokenTypes.has('shadow')) {\n lines.push(...this.buildShadowTokenClass(options))\n lines.push('')\n }\n\n renderBody(lines)\n lines.push('')\n\n return lines.join('\\n')\n }\n\n private renderFlatGroups(\n lines: string[],\n groups: TokenGroup[],\n baseDepth: number,\n options: ResolvedOptions,\n ): void {\n const groupIndent = indentStr(options.indent, baseDepth)\n const valIndent = indentStr(options.indent, baseDepth + 1)\n\n for (const group of groups) {\n lines.push(`${groupIndent}${options.visPrefix}object ${group.name} {`)\n for (const token of group.tokens) {\n const kotlinName = this.buildFlatKotlinName(token)\n const kotlinValue = this.formatKotlinValue(token, options, baseDepth + 1)\n const annotation = this.typeAnnotationSuffix(token)\n\n const descriptionComment = buildTokenDescriptionComment(token, 'kotlin')\n if (descriptionComment) {\n lines.push(`${valIndent}${descriptionComment}`)\n }\n\n const deprecation = buildKotlinDeprecationAnnotation(token)\n if (deprecation) {\n lines.push(`${valIndent}${deprecation}`)\n }\n\n lines.push(\n `${valIndent}${options.visPrefix}val ${kotlinName}${annotation} = ${kotlinValue}`,\n )\n }\n lines.push(`${groupIndent}}`)\n lines.push('')\n }\n }\n\n private renderTreeChildren(\n lines: string[],\n node: TokenTreeNode,\n depth: number,\n options: ResolvedOptions,\n ): void {\n const pad = indentStr(options.indent, depth)\n const entries = Array.from(node.children.entries())\n\n for (let idx = 0; idx < entries.length; idx++) {\n const [key, child] = entries[idx]!\n\n if (child.token && child.children.size === 0) {\n this.renderLeaf(lines, key, child.token, depth, options)\n } else if (child.children.size > 0 && !child.token) {\n const objectName = toSafeIdentifier(key, KOTLIN_KEYWORDS, true)\n lines.push(`${pad}${options.visPrefix}object ${objectName} {`)\n this.renderTreeChildren(lines, child, depth + 1, options)\n lines.push(`${pad}}`)\n if (idx < entries.length - 1) {\n lines.push('')\n }\n } else {\n this.renderLeaf(lines, key, child.token!, depth, options)\n this.renderTreeChildren(lines, child, depth, options)\n }\n }\n }\n\n private renderLeaf(\n lines: string[],\n key: string,\n token: ResolvedToken,\n depth: number,\n options: ResolvedOptions,\n ): void {\n const pad = indentStr(options.indent, depth)\n const kotlinName = toSafeIdentifier(key, KOTLIN_KEYWORDS, false)\n const kotlinValue = this.formatKotlinValue(token, options, depth)\n const annotation = this.typeAnnotationSuffix(token)\n\n const descriptionComment = buildTokenDescriptionComment(token, 'kotlin')\n if (descriptionComment) {\n lines.push(`${pad}${descriptionComment}`)\n }\n\n const deprecation = buildKotlinDeprecationAnnotation(token)\n if (deprecation) {\n lines.push(`${pad}${deprecation}`)\n }\n\n lines.push(`${pad}${options.visPrefix}val ${kotlinName}${annotation} = ${kotlinValue}`)\n }\n\n // -----------------------------------------------------------------------\n // Shadow data class\n // -----------------------------------------------------------------------\n\n private buildShadowTokenClass(options: ResolvedOptions): string[] {\n const i1 = indentStr(options.indent, 1)\n return [\n '@Immutable',\n `${options.visPrefix}data class ShadowToken(`,\n `${i1}val color: Color,`,\n `${i1}val elevation: Dp,`,\n `${i1}val offsetX: Dp,`,\n `${i1}val offsetY: Dp,`,\n ')',\n ]\n }\n\n // -----------------------------------------------------------------------\n // Imports (tree-shaken)\n // -----------------------------------------------------------------------\n\n private collectImports(tokenTypes: Set<string>, options: ResolvedOptions): string[] {\n const imports = new Set<string>()\n const ns = 'androidx.compose'\n const hasColors =\n tokenTypes.has('color') || tokenTypes.has('shadow') || tokenTypes.has('border')\n\n if (hasColors) {\n imports.add(`${ns}.ui.graphics.Color`)\n }\n if (tokenTypes.has('dimension') || tokenTypes.has('shadow') || tokenTypes.has('border')) {\n imports.add(`${ns}.ui.unit.Dp`)\n imports.add(`${ns}.ui.unit.dp`)\n }\n if (tokenTypes.has('typography') || tokenTypes.has('fontFamily')) {\n imports.add(`${ns}.ui.text.TextStyle`)\n imports.add(`${ns}.ui.unit.sp`)\n }\n if (tokenTypes.has('typography') || tokenTypes.has('fontWeight')) {\n imports.add(`${ns}.ui.text.font.FontWeight`)\n }\n if (tokenTypes.has('fontFamily')) {\n imports.add(`${ns}.ui.text.font.FontFamily`)\n }\n if (tokenTypes.has('duration')) {\n imports.add('kotlin.time.Duration')\n imports.add('kotlin.time.Duration.Companion.milliseconds')\n imports.add('kotlin.time.Duration.Companion.seconds')\n }\n if (tokenTypes.has('cubicBezier')) {\n imports.add(`${ns}.animation.core.CubicBezierEasing`)\n }\n if (tokenTypes.has('shadow')) {\n imports.add(`${ns}.runtime.Immutable`)\n }\n if (tokenTypes.has('border')) {\n imports.add(`${ns}.foundation.BorderStroke`)\n }\n if (options.colorSpace === 'displayP3' && hasColors) {\n imports.add(`${ns}.ui.graphics.colorspace.ColorSpaces`)\n }\n\n return Array.from(imports).sort()\n }\n\n private collectTokenTypesFromEntries(tokens: ResolvedTokens): Set<string> {\n const types = new Set<string>()\n for (const [, token] of Object.entries(tokens)) {\n if (token.$type) {\n types.add(token.$type)\n }\n }\n return types\n }\n\n // -----------------------------------------------------------------------\n // Type annotations\n // -----------------------------------------------------------------------\n\n private getTypeAnnotation(token: ResolvedToken): string | undefined {\n switch (token.$type) {\n case 'color':\n return 'Color'\n case 'dimension':\n return 'Dp'\n case 'fontFamily':\n return 'FontFamily'\n case 'fontWeight':\n return 'FontWeight'\n case 'duration':\n return 'Duration'\n case 'shadow':\n return 'ShadowToken'\n case 'cubicBezier':\n return 'CubicBezierEasing'\n case 'number':\n return 'Double'\n case 'typography':\n return 'TextStyle'\n case 'border':\n return 'BorderStroke'\n default: {\n const value = token.$value\n if (typeof value === 'string') {\n return 'String'\n }\n if (typeof value === 'boolean') {\n return 'Boolean'\n }\n if (typeof value === 'number') {\n return 'Double'\n }\n return undefined\n }\n }\n }\n\n private typeAnnotationSuffix(token: ResolvedToken): string {\n const type = this.getTypeAnnotation(token)\n return type ? `: ${type}` : ''\n }\n\n // -----------------------------------------------------------------------\n // Value formatting\n // -----------------------------------------------------------------------\n\n private formatKotlinValue(token: ResolvedToken, options: ResolvedOptions, depth: number): string {\n const value = token.$value\n\n if (token.$type === 'color') {\n return this.formatColorValue(value, options)\n }\n if (token.$type === 'dimension') {\n return this.formatDimensionValue(value)\n }\n if (token.$type === 'fontFamily') {\n return this.formatFontFamilyValue(value)\n }\n if (token.$type === 'fontWeight') {\n return this.formatFontWeightValue(value)\n }\n if (token.$type === 'duration') {\n return this.formatDurationValue(value)\n }\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value, options, depth)\n }\n if (token.$type === 'typography') {\n return this.formatTypographyValue(value, options, depth)\n }\n if (token.$type === 'border') {\n return this.formatBorderValue(value, options)\n }\n\n if (token.$type === 'number') {\n return typeof value === 'number' ? formatKotlinNumber(value) : String(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `CubicBezierEasing(${value[0]}f, ${value[1]}f, ${value[2]}f, ${value[3]}f)`\n }\n\n if (typeof value === 'string') {\n return `\"${escapeKotlinString(value)}\"`\n }\n if (typeof value === 'number') {\n return formatKotlinNumber(value)\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n\n return `\"${escapeKotlinString(String(value))}\"`\n }\n\n private formatColorValue(value: unknown, options: ResolvedOptions): string {\n if (!isColorObject(value)) {\n if (typeof value === 'string') {\n const hex = value.replace('#', '')\n if (/^[0-9a-fA-F]{6,8}$/.test(hex)) {\n const argb = hex.length === 8 ? hex : `FF${hex}`\n return `Color(0x${argb.toUpperCase()})`\n }\n }\n return 'Color.Unspecified'\n }\n\n const colorObj = value as ColorValueObject\n const alpha = colorObj.alpha ?? 1\n\n if (options.colorFormat === 'argb_float' || options.colorSpace === 'displayP3') {\n return this.formatFloatColor(colorObj, alpha, options)\n }\n\n return this.formatHexColor(colorObj, alpha)\n }\n\n private formatFloatColor(\n colorObj: ColorValueObject,\n alpha: number,\n options: ResolvedOptions,\n ): string {\n if (options.colorSpace === 'displayP3') {\n const p3 = toP3(dtcgObjectToCulori(colorObj))\n const r = roundComponent(p3?.r ?? 0)\n const g = roundComponent(p3?.g ?? 0)\n const b = roundComponent(p3?.b ?? 0)\n return `Color(${r}f, ${g}f, ${b}f, ${roundComponent(alpha)}f, ColorSpaces.DisplayP3)`\n }\n\n const rgb = toSRGB(dtcgObjectToCulori(colorObj))\n const r = roundComponent(rgb?.r ?? 0)\n const g = roundComponent(rgb?.g ?? 0)\n const b = roundComponent(rgb?.b ?? 0)\n return `Color(${r}f, ${g}f, ${b}f, ${roundComponent(alpha)}f)`\n }\n\n private formatHexColor(colorObj: ColorValueObject, alpha: number): string {\n const hex = colorObjectToHex(colorObj)\n const hexClean = hex.replace('#', '')\n\n if (hexClean.length === 8) {\n const rrggbb = hexClean.slice(0, 6)\n const aa = hexClean.slice(6, 8)\n return `Color(0x${aa.toUpperCase()}${rrggbb.toUpperCase()})`\n }\n\n const alphaHex =\n alpha < 1\n ? Math.round(alpha * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase()\n : 'FF'\n return `Color(0x${alphaHex}${hexClean.toUpperCase()})`\n }\n\n private formatDimensionValue(value: unknown): string {\n if (isDimensionObject(value)) {\n const dim = value as DimensionValue\n const dpValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return `${dpValue}.dp`\n }\n\n return typeof value === 'number' ? `${value}.dp` : `0.dp`\n }\n\n private formatFontFamilyValue(value: unknown): string {\n if (Array.isArray(value)) {\n const primary = value[0]\n if (typeof primary === 'string') {\n return this.mapKotlinFontFamily(primary)\n }\n return 'FontFamily.Default'\n }\n\n return typeof value === 'string' ? this.mapKotlinFontFamily(value) : 'FontFamily.Default'\n }\n\n private mapKotlinFontFamily(family: string): string {\n const normalized = family.toLowerCase().replace(/['\"]/g, '').trim()\n const builtIn: Record<string, string> = {\n 'sans-serif': 'FontFamily.SansSerif',\n serif: 'FontFamily.Serif',\n monospace: 'FontFamily.Monospace',\n cursive: 'FontFamily.Cursive',\n }\n\n return (\n builtIn[normalized] ??\n `FontFamily.Default // TODO: load \"${family}\" via Font(R.font.${toResourceName(family)})`\n )\n }\n\n private formatFontWeightValue(value: unknown): string {\n if (typeof value === 'number') {\n return this.numericFontWeight(value)\n }\n if (typeof value === 'string') {\n return this.namedFontWeight(value) ?? 'FontWeight.Normal'\n }\n return 'FontWeight.Normal'\n }\n\n private numericFontWeight(weight: number): string {\n if (weight <= 100) {\n return 'FontWeight.Thin'\n }\n if (weight <= 200) {\n return 'FontWeight.ExtraLight'\n }\n if (weight <= 300) {\n return 'FontWeight.Light'\n }\n if (weight <= 400) {\n return 'FontWeight.Normal'\n }\n if (weight <= 500) {\n return 'FontWeight.Medium'\n }\n if (weight <= 600) {\n return 'FontWeight.SemiBold'\n }\n if (weight <= 700) {\n return 'FontWeight.Bold'\n }\n if (weight <= 800) {\n return 'FontWeight.ExtraBold'\n }\n return 'FontWeight.Black'\n }\n\n private namedFontWeight(name: string): string | undefined {\n const map: Record<string, string> = {\n thin: 'FontWeight.Thin',\n extralight: 'FontWeight.ExtraLight',\n ultralight: 'FontWeight.ExtraLight',\n light: 'FontWeight.Light',\n regular: 'FontWeight.Normal',\n normal: 'FontWeight.Normal',\n medium: 'FontWeight.Medium',\n semibold: 'FontWeight.SemiBold',\n demibold: 'FontWeight.SemiBold',\n bold: 'FontWeight.Bold',\n extrabold: 'FontWeight.ExtraBold',\n heavy: 'FontWeight.ExtraBold',\n black: 'FontWeight.Black',\n ultrabold: 'FontWeight.Black',\n }\n\n return map[name.toLowerCase()]\n }\n\n private formatDurationValue(value: unknown): string {\n if (isDurationObject(value)) {\n return value.unit === 'ms' ? `${value.value}.milliseconds` : `${value.value}.seconds`\n }\n\n return typeof value === 'number' ? `${value}.milliseconds` : '0.milliseconds'\n }\n\n private formatShadowValue(value: unknown, options: ResolvedOptions, depth: number): string {\n if (Array.isArray(value) && value.length > 0) {\n return this.formatSingleShadow(value[0] as Record<string, unknown>, options, depth)\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>, options, depth)\n }\n\n return 'ShadowToken(color = Color.Unspecified, elevation = 0.dp, offsetX = 0.dp, offsetY = 0.dp)'\n }\n\n private formatSingleShadow(\n shadow: Record<string, unknown>,\n options: ResolvedOptions,\n depth: number,\n ): string {\n const color = isColorObject(shadow.color)\n ? this.formatColorValue(shadow.color, options)\n : 'Color.Black'\n\n const elevation = isDimensionObject(shadow.blur)\n ? this.formatDimensionValue(shadow.blur)\n : '0.dp'\n\n const offsetX = isDimensionObject(shadow.offsetX)\n ? this.formatDimensionValue(shadow.offsetX)\n : '0.dp'\n\n const offsetY = isDimensionObject(shadow.offsetY)\n ? this.formatDimensionValue(shadow.offsetY)\n : '0.dp'\n\n const propIndent = indentStr(options.indent, depth + 1)\n const closeIndent = indentStr(options.indent, depth)\n return [\n 'ShadowToken(',\n `${propIndent}color = ${color},`,\n `${propIndent}elevation = ${elevation},`,\n `${propIndent}offsetX = ${offsetX},`,\n `${propIndent}offsetY = ${offsetY},`,\n `${closeIndent})`,\n ].join('\\n')\n }\n\n private formatBorderValue(value: unknown, options: ResolvedOptions): string {\n if (typeof value !== 'object' || value === null) {\n return 'BorderStroke(0.dp, Color.Unspecified)'\n }\n\n const border = value as Record<string, unknown>\n const width = isDimensionObject(border.width) ? this.formatDimensionValue(border.width) : '0.dp'\n\n const color = isColorObject(border.color)\n ? this.formatColorValue(border.color, options)\n : 'Color.Unspecified'\n\n return `BorderStroke(${width}, ${color})`\n }\n\n private formatTypographyValue(value: unknown, options: ResolvedOptions, depth: number): string {\n if (typeof value !== 'object' || value === null) {\n return 'TextStyle()'\n }\n\n const typo = value as Record<string, unknown>\n const parts: string[] = []\n\n if (isDimensionObject(typo.fontSize)) {\n const dim = typo.fontSize as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n parts.push(`fontSize = ${spValue}.sp`)\n }\n\n if (typo.fontWeight != null) {\n parts.push(`fontWeight = ${this.formatFontWeightValue(typo.fontWeight)}`)\n }\n\n if (typo.lineHeight != null && typeof typo.lineHeight === 'number') {\n if (isDimensionObject(typo.fontSize)) {\n const dim = typo.fontSize as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n const lineHeightSp = Math.round(spValue * typo.lineHeight * 100) / 100\n parts.push(`lineHeight = ${lineHeightSp}.sp`)\n }\n }\n\n if (isDimensionObject(typo.letterSpacing)) {\n const dim = typo.letterSpacing as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n parts.push(`letterSpacing = ${spValue}.sp`)\n }\n\n if (parts.length === 0) {\n return 'TextStyle()'\n }\n\n const propIndent = indentStr(options.indent, depth + 1)\n const closeIndent = indentStr(options.indent, depth)\n return `TextStyle(\\n${parts.map((p) => `${propIndent}${p}`).join(',\\n')},\\n${closeIndent})`\n }\n\n // -----------------------------------------------------------------------\n // Output: standalone\n // -----------------------------------------------------------------------\n\n private async formatStandalone(\n context: RenderContext,\n options: ResolvedOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone Android',\n )\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'kt',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n // -----------------------------------------------------------------------\n // Output: bundle\n // -----------------------------------------------------------------------\n\n private async formatBundle(\n context: RenderContext,\n options: ResolvedOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'bundle Android',\n )\n\n const content = this.formatBundleContent(context, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, context.meta.basePermutation)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'kt',\n modifierInputs: context.meta.basePermutation,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return outputTree({ [fileName]: content })\n }\n\n private formatBundleContent(context: RenderContext, options: ResolvedOptions): string {\n const allTokenTypes = this.collectAllPermutationTypes(context)\n\n return this.buildFile(allTokenTypes, options, (lines) => {\n const i1 = indentStr(options.indent, 1)\n\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}object ${options.objectName} {`)\n\n for (let idx = 0; idx < context.permutations.length; idx++) {\n const { tokens, modifierInputs } = context.permutations[idx]!\n const processedTokens = stripInternalMetadata(tokens)\n const permName = this.buildPermutationName(modifierInputs)\n lines.push(`${i1}${options.visPrefix}object ${permName} {`)\n this.renderBundleTokens(lines, processedTokens, options, 2)\n lines.push(`${i1}}`)\n if (idx < context.permutations.length - 1) {\n lines.push('')\n }\n }\n\n lines.push('}')\n })\n }\n\n private collectAllPermutationTypes(context: RenderContext): Set<string> {\n const types = new Set<string>()\n for (const { tokens } of context.permutations) {\n for (const t of this.collectTokenTypesFromEntries(stripInternalMetadata(tokens))) {\n types.add(t)\n }\n }\n return types\n }\n\n private renderBundleTokens(\n lines: string[],\n tokens: ResolvedTokens,\n options: ResolvedOptions,\n baseDepth: number,\n ): void {\n if (options.structure === 'flat') {\n const groups = groupTokensByType(tokens, KOTLIN_TYPE_GROUP_MAP)\n this.renderFlatGroups(lines, groups, baseDepth, options)\n return\n }\n\n const tree = this.buildTokenTree(tokens)\n this.renderTreeChildren(lines, tree, baseDepth, options)\n }\n\n private buildPermutationName(modifierInputs: Record<string, string>): string {\n const values = Object.values(modifierInputs)\n if (values.length === 0) {\n return 'Default'\n }\n return values.map((v) => toSafeIdentifier(v, KOTLIN_KEYWORDS, true)).join('')\n }\n}\n\n/**\n * Android/Jetpack Compose renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'android',\n * renderer: androidRenderer(),\n * options: {\n * packageName: 'com.example.tokens',\n * objectName: 'DesignTokens',\n * colorFormat: 'argb_hex',\n * },\n * file: 'DesignTokens-{theme}.kt'\n * }]\n * ```\n */\nexport function androidRenderer(): Renderer<AndroidRendererOptions> {\n const rendererInstance = new AndroidRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as AndroidRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview CSS renderer with theme selector support\n * Supports DTCG 2025.10 color and dimension object formats\n */\n\nimport { colorObjectToHex, isColorObject } from '@processing/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/transforms/built-in/dimension-converter'\nimport {\n durationObjectToString,\n isDurationObject,\n} from '@processing/transforms/built-in/duration-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getPureAliasReferenceName, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type {\n DimensionValue,\n DurationValue,\n ResolvedToken,\n ResolvedTokens,\n ShadowValueObject,\n} from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { buildSetLayerBlocks, bundleAsCss } from './bundlers/css'\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n filterTokensBySource,\n filterTokensFromSets,\n isBasePermutation,\n normalizeModifierInputs,\n resolveBaseFileName,\n resolveMediaQuery,\n resolveFileName,\n resolveSelector,\n stripInternalMetadata,\n} from './bundlers/utils'\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from './metadata'\nimport type { CssRendererOptions, RenderContext, RenderOutput, Renderer } from './types'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\ntype CssEntry = {\n name: string\n value: string\n}\n\ntype CompositeLeaf = {\n path: string[]\n value: unknown\n}\n\nexport class CssRenderer implements Renderer<CssRendererOptions> {\n async format(context: RenderContext, options?: CssRendererOptions): Promise<RenderOutput> {\n const opts: CssRendererOptions = {\n preset: options?.preset ?? 'bundle',\n selector: options?.selector,\n mediaQuery: options?.mediaQuery,\n minify: options?.minify ?? false,\n preserveReferences: options?.preserveReferences ?? false,\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n if (opts.preset === 'modifier') {\n return await this.formatModifier(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n private static readonly PRETTIER_PRINT_WIDTH = 80\n private static readonly PRETTIER_TAB_WIDTH = 2\n\n /**\n * Format tokens as CSS custom properties\n *\n * Converts resolved design tokens into CSS format with configurable selector,\n * media queries, and formatting options. Supports DTCG color and dimension objects.\n *\n * Note: This method expects selector and mediaQuery to be resolved strings.\n * Function-based selectors should be resolved before calling format().\n *\n * @param tokens - Resolved tokens to format\n * @param options - CSS formatting options (selector, media query, minify, etc.)\n * @returns Formatted CSS string with custom properties\n */\n private async formatTokens(\n tokens: ResolvedTokens,\n options?: ResolvedCssOptions,\n ): Promise<string> {\n const opts = {\n preset: 'bundle' as const,\n selector: ':root',\n mediaQuery: '',\n minify: false,\n preserveReferences: false,\n ...options,\n referenceTokens: options?.referenceTokens ?? tokens,\n }\n\n const sortedTokens = getSortedTokenEntries(tokens).map(([, token]) => token)\n const referenceTokens = opts.referenceTokens\n const lines: string[] = []\n\n this.buildCssBlock(lines, sortedTokens, opts.selector, tokens, referenceTokens, opts)\n\n const cssString = lines.join('')\n return opts.minify ? cssString : await this.formatWithPrettier(cssString)\n }\n\n private buildCssBlock(\n lines: string[],\n groupTokens: ResolvedToken[],\n selector: string,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n opts: Required<ResolvedCssOptions>,\n ): void {\n const indent = opts.minify ? '' : ' '\n const newline = opts.minify ? '' : '\\n'\n const space = opts.minify ? '' : ' '\n const hasMediaQuery = opts.mediaQuery != null && opts.mediaQuery !== ''\n const tokenIndent = hasMediaQuery ? indent + indent : indent\n\n if (hasMediaQuery) {\n lines.push(`@media ${opts.mediaQuery}${space}{${newline}`)\n lines.push(`${indent}${selector}${space}{${newline}`)\n } else {\n lines.push(`${selector}${space}{${newline}`)\n }\n\n for (const token of groupTokens) {\n this.pushTokenLines(\n lines,\n token,\n tokens,\n referenceTokens,\n opts.preserveReferences ?? false,\n tokenIndent,\n newline,\n space,\n )\n }\n\n if (hasMediaQuery) {\n lines.push(`${indent}}${newline}`)\n }\n lines.push(`}${newline}${newline}`)\n }\n\n private pushTokenLines(\n lines: string[],\n token: ResolvedToken,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n indent: string,\n newline: string,\n space: string,\n ): void {\n const entries = this.buildCssEntries(token, tokens, referenceTokens, preserveReferences)\n\n const deprecationComment = buildTokenDeprecationComment(token, 'css')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'css')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}${newline}`)\n }\n\n for (const entry of entries) {\n lines.push(`${indent}--${entry.name}:${space}${entry.value};${newline}`)\n }\n }\n\n private async formatWithPrettier(css: string): Promise<string> {\n try {\n return await prettier.format(css, {\n parser: 'css',\n printWidth: CssRenderer.PRETTIER_PRINT_WIDTH,\n tabWidth: CssRenderer.PRETTIER_TAB_WIDTH,\n useTabs: false,\n })\n } catch {\n // Prettier may fail on edge-case CSS; fall back to raw string\n return css\n }\n }\n\n private buildCssEntries(\n token: ResolvedToken,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n ): CssEntry[] {\n if (preserveReferences) {\n const refName = getPureAliasReferenceName(token.originalValue)\n if (refName !== undefined) {\n return [\n {\n name: token.name,\n value: this.buildCssVarReference(refName, referenceTokens, tokens),\n },\n ]\n }\n }\n\n if (!this.isCompositeToken(token)) {\n return [{ name: token.name, value: this.formatValue(token) }]\n }\n\n const leaves = this.collectCompositeLeaves(token.$value)\n if (leaves.length === 0) {\n return [{ name: token.name, value: this.formatLeafValue(token.$value) }]\n }\n\n const leafEntries = leaves.map((leaf) => ({\n name: this.buildCompositeName(token.name, leaf.path),\n value: this.formatLeafValue(\n this.resolveCompositeLeafValue(\n leaf,\n token.originalValue,\n tokens,\n referenceTokens,\n preserveReferences,\n ),\n ),\n }))\n\n const wholeValue = this.buildCompositeWholeValue(token, preserveReferences)\n if (!wholeValue) {\n return leafEntries\n }\n\n return [{ name: token.name, value: wholeValue }, ...leafEntries]\n }\n\n private isCompositeToken(token: ResolvedToken): boolean {\n const isCompositeType = [\n 'shadow',\n 'typography',\n 'border',\n 'strokeStyle',\n 'transition',\n 'gradient',\n ].includes(token.$type ?? '')\n if (!isCompositeType) {\n return false\n }\n\n const value = token.$value\n return (typeof value === 'object' && value !== null) || Array.isArray(value)\n }\n\n private buildCompositeWholeValue(\n token: ResolvedToken,\n preserveReferences: boolean,\n ): string | undefined {\n if (token.$type === 'shadow') {\n // Shadow always supports a whole-value (single or multi-layer)\n return preserveReferences ? this.buildShadowWholeValue(token) : this.formatValue(token)\n }\n if (token.$type === 'border') {\n // Border shorthand only works when style is a simple string (e.g. \"solid\").\n // Complex strokeStyle objects can't be represented as a CSS shorthand.\n if (!this.hasBorderShorthandStyle(token)) {\n return undefined\n }\n return preserveReferences ? this.buildBorderWholeValue(token) : this.formatValue(token)\n }\n if (token.$type === 'transition') {\n return preserveReferences ? this.buildTransitionWholeValue(token) : this.formatValue(token)\n }\n return undefined\n }\n\n private hasBorderShorthandStyle(token: ResolvedToken): boolean {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return false\n }\n return typeof (value as { style?: unknown }).style === 'string'\n }\n\n private buildShadowWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (Array.isArray(value)) {\n return value\n .map((shadow, index) => this.buildShadowLayerValue(token.name, shadow, [String(index)]))\n .join(', ')\n }\n if (typeof value === 'object' && value !== null) {\n return this.buildShadowLayerValue(token.name, value, [])\n }\n return undefined\n }\n\n private buildShadowLayerValue(baseName: string, shadow: unknown, prefix: string[]): string {\n if (typeof shadow !== 'object' || shadow === null) {\n return String(shadow)\n }\n const shadowObj = shadow as ShadowValueObject\n const parts: string[] = []\n\n if (shadowObj.inset === true) {\n parts.push('inset')\n }\n\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'offsetX']))\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'offsetY']))\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'blur']))\n\n if (shadowObj.spread != null) {\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'spread']))\n }\n\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'color']))\n return parts.join(' ')\n }\n\n private buildBorderWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n const border = value as { style?: unknown }\n if (typeof border.style !== 'string') {\n return undefined\n }\n return [\n this.buildCompositeVar(token.name, ['width']),\n this.buildCompositeVar(token.name, ['style']),\n this.buildCompositeVar(token.name, ['color']),\n ].join(' ')\n }\n\n private buildTransitionWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n return [\n this.buildCompositeVar(token.name, ['duration']),\n `cubic-bezier(${this.buildCompositeVar(token.name, ['timingFunction', '0'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '1'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '2'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '3'])})`,\n this.buildCompositeVar(token.name, ['delay']),\n ].join(' ')\n }\n\n private buildCompositeVar(baseName: string, path: string[]): string {\n return `var(--${this.buildCompositeName(baseName, path)})`\n }\n\n private collectCompositeLeaves(value: unknown): CompositeLeaf[] {\n const leaves: CompositeLeaf[] = []\n this.collectLeafEntries(value, [], leaves)\n return leaves\n }\n\n private collectLeafEntries(value: unknown, path: string[], leaves: CompositeLeaf[]): void {\n if (this.isPrimitiveValue(value)) {\n leaves.push({ path, value })\n return\n }\n\n if (isColorObject(value) || isDimensionObject(value) || isDurationObject(value)) {\n leaves.push({ path, value })\n return\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n leaves.push({ path, value })\n return\n }\n value.forEach((item, index) => {\n this.collectLeafEntries(item, [...path, String(index)], leaves)\n })\n return\n }\n\n if (typeof value === 'object' && value !== null) {\n const entries = Object.entries(value)\n if (entries.length === 0) {\n leaves.push({ path, value })\n return\n }\n for (const [key, child] of entries) {\n this.collectLeafEntries(child, [...path, this.normalizePathSegment(key)], leaves)\n }\n return\n }\n\n leaves.push({ path, value })\n }\n\n private normalizePathSegment(segment: string): string {\n return segment.trim().replace(/\\s+/g, '-')\n }\n\n private buildCompositeName(base: string, path: string[]): string {\n if (path.length === 0) {\n return base\n }\n return `${base}-${path.join('-')}`\n }\n\n private formatLeafValue(value: unknown): string {\n if (isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (isDimensionObject(value)) {\n return dimensionObjectToString(value)\n }\n\n if (isDurationObject(value)) {\n return durationObjectToString(value)\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value)\n }\n\n if (Array.isArray(value)) {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'object' && value != null) {\n return JSON.stringify(value)\n }\n\n return String(value)\n }\n\n private resolveCompositeLeafValue(\n leaf: CompositeLeaf,\n originalValue: unknown,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n ): unknown {\n if (!preserveReferences) {\n return leaf.value\n }\n\n const originalLeafValue = this.getOriginalLeafValue(originalValue, leaf.path)\n const refName = getPureAliasReferenceName(originalLeafValue)\n if (refName === undefined) {\n return leaf.value\n }\n\n return this.buildCssVarReference(refName, referenceTokens, tokens)\n }\n\n private buildCssVarReference(\n refName: string,\n referenceTokens: ResolvedTokens,\n tokens: ResolvedTokens,\n ): string {\n const referencedToken = referenceTokens[refName] ?? tokens[refName]\n if (!referencedToken) {\n throw new ConfigurationError(\n `CSS reference \"{${refName}}\" could not be resolved. The referenced token is not present in the current output's token set. ` +\n `This usually means a filter (e.g. isAlias()) excluded the referenced token while preserveReferences is true. ` +\n `Either remove the filter, include the referenced token, or set preserveReferences to false.`,\n )\n }\n return `var(--${referencedToken.name})`\n }\n\n private getOriginalLeafValue(value: unknown, path: string[]): unknown {\n let current: unknown = value\n\n for (const segment of path) {\n if (Array.isArray(current)) {\n const index = Number(segment)\n if (!Number.isInteger(index)) {\n return undefined\n }\n current = current[index]\n continue\n }\n\n if (typeof current === 'object' && current !== null) {\n const entries = Object.entries(current)\n const matched = entries.find(([key]) => this.normalizePathSegment(key) === segment)\n if (!matched) {\n return undefined\n }\n current = matched[1]\n continue\n }\n\n return undefined\n }\n\n return current\n }\n\n private isPrimitiveValue(value: unknown): boolean {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n }\n\n /**\n * Format token value for CSS\n * Handles DTCG 2025.10 object formats for colors and dimensions\n */\n private formatValue(token: ResolvedToken): string {\n const value = token.$value\n\n const typed = this.formatTypedValue(token.$type, value)\n if (typed !== undefined) {\n return typed\n }\n\n return this.formatPrimitiveOrStructured(value, token.$type)\n }\n\n private formatTypedValue(type: string | undefined, value: unknown): string | undefined {\n if (type === 'color' && isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (type === 'dimension') {\n // Legacy fallback: string values from incomplete alias resolution\n return typeof value === 'string' ? value : dimensionObjectToString(value as DimensionValue)\n }\n\n if (type === 'duration') {\n if (isDurationObject(value)) {\n return durationObjectToString(value)\n }\n if (typeof value === 'string') {\n return value\n }\n }\n\n return undefined\n }\n\n private formatPrimitiveOrStructured(value: unknown, tokenType?: string): string {\n if (typeof value === 'string') {\n return value\n }\n if (typeof value === 'number') {\n return String(value)\n }\n if (Array.isArray(value)) {\n return this.formatArrayValue(value, tokenType)\n }\n if (typeof value === 'object' && value != null) {\n return this.formatCompositeValue(value as Record<string, unknown>, tokenType)\n }\n return String(value)\n }\n\n private formatArrayValue(value: unknown[], tokenType?: string): string {\n if (tokenType === 'shadow' && value.length > 0 && typeof value[0] === 'object') {\n return value\n .map((shadowObj) => this.formatShadow(shadowObj as unknown as ShadowValueObject))\n .join(', ')\n }\n // For arrays like font families\n return value.map((v) => (typeof v === 'string' && v.includes(' ') ? `\"${v}\"` : v)).join(', ')\n }\n\n /**\n * Format composite token values\n */\n private formatCompositeValue(value: Record<string, unknown>, tokenType?: string): string {\n if (tokenType === 'shadow') {\n return this.formatShadow(value as unknown as ShadowValueObject)\n }\n\n if (tokenType === 'border') {\n return this.formatBorder(value)\n }\n\n if (tokenType === 'transition') {\n return this.formatTransition(value)\n }\n\n // Default: JSON stringify (for debugging or unsupported types)\n return JSON.stringify(value)\n }\n\n /**\n * Format a single shadow object to CSS box-shadow syntax\n */\n private formatShadow(shadow: ShadowValueObject): string {\n const parts: string[] = []\n if (shadow.inset === true) {\n parts.push('inset')\n }\n\n // Enforce DTCG 2025.10 compliance: all dimension values must be objects\n\n parts.push(dimensionObjectToString(shadow.offsetX))\n parts.push(dimensionObjectToString(shadow.offsetY))\n parts.push(dimensionObjectToString(shadow.blur))\n\n if (shadow.spread != null) {\n parts.push(dimensionObjectToString(shadow.spread))\n }\n\n // Handle color objects (DTCG format)\n if (isColorObject(shadow.color)) {\n parts.push(colorObjectToHex(shadow.color))\n } else {\n parts.push(String(shadow.color))\n }\n\n return parts.join(' ')\n }\n\n /**\n * Format a border object to CSS border shorthand syntax\n */\n private formatBorder(value: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (isDimensionObject(value.width)) {\n parts.push(dimensionObjectToString(value.width as DimensionValue))\n } else if (value.width != null) {\n parts.push(String(value.width))\n }\n\n if (typeof value.style === 'string') {\n parts.push(value.style)\n }\n\n if (isColorObject(value.color)) {\n parts.push(colorObjectToHex(value.color))\n } else if (value.color != null) {\n parts.push(String(value.color))\n }\n\n return parts.join(' ')\n }\n\n /**\n * Format a transition object to CSS transition shorthand syntax\n */\n private formatTransition(value: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (isDurationObject(value.duration)) {\n parts.push(durationObjectToString(value.duration as DurationValue))\n } else if (value.duration != null) {\n parts.push(String(value.duration))\n }\n\n if (Array.isArray(value.timingFunction) && value.timingFunction.length === 4) {\n parts.push(`cubic-bezier(${value.timingFunction.join(', ')})`)\n }\n\n if (isDurationObject(value.delay)) {\n parts.push(durationObjectToString(value.delay as DurationValue))\n } else if (value.delay != null) {\n parts.push(String(value.delay))\n }\n\n return parts.join(' ')\n }\n\n private async formatBundle(context: RenderContext, options: CssRendererOptions): Promise<string> {\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens,\n modifierInputs,\n isBase: isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsCss(bundleData, context.resolver, options, async (tokens, resolved) => {\n return await this.formatTokens(tokens, {\n ...resolved,\n preserveReferences: options.preserveReferences ?? false,\n })\n })\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone CSS',\n )\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const { fileName, content } = await this.buildStandaloneFile(\n tokens,\n modifierInputs,\n context,\n options,\n )\n files[fileName] = content\n }\n\n return { kind: 'outputTree', files }\n }\n\n private async buildStandaloneFile(\n tokens: ResolvedTokens,\n modifierInputs: Record<string, string>,\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string }> {\n const isBase = isBasePermutation(modifierInputs, context.meta.defaults)\n const { modifierName, modifierContext } = this.resolveModifierContext(\n modifierInputs,\n context,\n isBase,\n )\n\n const selector = resolveSelector(\n options.selector,\n modifierName,\n modifierContext,\n isBase,\n modifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifierName,\n modifierContext,\n isBase,\n modifierInputs,\n )\n\n const content = await this.formatTokens(tokens, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens: tokens,\n })\n\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return { fileName, content }\n }\n\n private async formatModifier(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(context.buildPath, context.output.file, context.output.name, 'modifier CSS')\n if (!context.resolver.modifiers) {\n throw new ConfigurationError('Modifier preset requires modifiers to be defined in resolver')\n }\n\n const files: Record<string, string> = {}\n\n const baseResult = await this.buildModifierBaseFile(context, options)\n if (baseResult) {\n files[baseResult.fileName] = baseResult.content\n }\n\n for (const [modifierName, modifierDef] of Object.entries(context.resolver.modifiers)) {\n for (const contextValue of Object.keys(modifierDef.contexts)) {\n const result = await this.buildModifierContextFile(\n modifierName,\n contextValue,\n context,\n options,\n )\n if (result) {\n files[result.fileName] = result.content\n }\n }\n }\n\n return { kind: 'outputTree', files }\n }\n\n private async buildModifierBaseFile(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string } | undefined> {\n const basePermutation = context.permutations.find(({ modifierInputs }) =>\n isBasePermutation(modifierInputs, context.meta.defaults),\n )\n if (!basePermutation) {\n return undefined\n }\n\n const setTokens = filterTokensFromSets(basePermutation.tokens)\n if (Object.keys(setTokens).length === 0) {\n return undefined\n }\n\n const setBlocks = buildSetLayerBlocks(setTokens, context.resolver)\n if (setBlocks.length === 0) {\n return undefined\n }\n\n const { selector, mediaQuery } = this.resolveBaseModifierContext(context, options)\n const content = await this.formatSetBlocksCss(\n setBlocks,\n basePermutation.tokens,\n selector,\n mediaQuery,\n options,\n )\n\n const fileName = context.output.file\n ? resolveBaseFileName(context.output.file, context.meta.defaults)\n : `${context.output.name}-base.css`\n\n return { fileName, content }\n }\n\n private resolveBaseModifierContext(\n context: RenderContext,\n options: CssRendererOptions,\n ): { selector: string; mediaQuery: string } {\n const modifiers = context.resolver.modifiers!\n const firstModifierName = Object.keys(modifiers)[0] ?? ''\n const firstModifierContext = context.meta.defaults[firstModifierName] ?? ''\n const baseModifierInputs = { ...context.meta.defaults }\n\n return {\n selector: resolveSelector(\n options.selector,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n ),\n mediaQuery: resolveMediaQuery(\n options.mediaQuery,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n ),\n }\n }\n\n private async formatSetBlocksCss(\n setBlocks: ReturnType<typeof buildSetLayerBlocks>,\n referenceTokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n options: CssRendererOptions,\n ): Promise<string> {\n const cssBlocks: string[] = []\n for (const block of setBlocks) {\n const cleanTokens = stripInternalMetadata(block.tokens)\n const css = await this.formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens,\n })\n const header = block.description\n ? `/* ${block.key} */\\n/* ${block.description} */`\n : `/* ${block.key} */`\n cssBlocks.push(`${header}\\n${css}`)\n }\n return cssBlocks.join('\\n')\n }\n\n private collectTokensForModifierContext(\n modifierName: string,\n contextValue: string,\n permutations: RenderContext['permutations'],\n ): { tokensFromSource: ResolvedTokens; referenceTokens: ResolvedTokens } {\n const expectedSource = `${modifierName}-${contextValue}`\n let tokensFromSource: ResolvedTokens = {}\n let referenceTokens: ResolvedTokens = {}\n\n for (const { tokens, modifierInputs } of permutations) {\n if (modifierInputs[modifierName] !== contextValue) {\n continue\n }\n tokensFromSource = { ...tokensFromSource, ...filterTokensBySource(tokens, expectedSource) }\n referenceTokens = { ...referenceTokens, ...tokens }\n }\n\n return { tokensFromSource, referenceTokens }\n }\n\n private async buildModifierContextFile(\n modifierName: string,\n contextValue: string,\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string } | undefined> {\n const { tokensFromSource, referenceTokens } = this.collectTokensForModifierContext(\n modifierName,\n contextValue,\n context.permutations,\n )\n\n if (Object.keys(tokensFromSource).length === 0) {\n return undefined\n }\n\n const defaults = context.meta.defaults\n const isBase = contextValue === defaults[modifierName]\n const modifierInputs = { ...defaults, [modifierName]: contextValue }\n\n const selector = resolveSelector(\n options.selector,\n modifierName,\n contextValue,\n isBase,\n modifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifierName,\n contextValue,\n isBase,\n modifierInputs,\n )\n\n const content = await this.formatTokens(tokensFromSource, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens,\n })\n\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return { fileName, content }\n }\n\n private resolveModifierContext(\n modifierInputs: Record<string, string>,\n context: RenderContext,\n isBase: boolean,\n ): { modifierName: string; modifierContext: string } {\n if (!context.resolver.modifiers) {\n return { modifierName: '', modifierContext: '' }\n }\n\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(context.meta.defaults)\n\n if (isBase) {\n const firstModifier = Object.keys(context.resolver.modifiers)[0] ?? ''\n return {\n modifierName: firstModifier,\n modifierContext: normalizedInputs[firstModifier] ?? '',\n }\n }\n\n for (const [name, value] of Object.entries(normalizedInputs)) {\n if (value !== normalizedDefaults[name]) {\n return { modifierName: name, modifierContext: value }\n }\n }\n\n return { modifierName: '', modifierContext: '' }\n }\n}\n\n/**\n * CSS renderer factory function.\n *\n * Options are provided via OutputConfig.options.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'css',\n * renderer: cssRenderer(),\n * options: {\n * preset: 'bundle',\n * selector: ':root',\n * mediaQuery: (modifierName, context) => {\n * if (modifierName === 'breakpoint' && context === 'mobile') {\n * return '(max-width: 768px)'\n * }\n * return ''\n * }\n * },\n * file: 'tokens.css'\n * }]\n * ```\n */\nexport function cssRenderer(): Renderer<CssRendererOptions> {\n const rendererInstance = new CssRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as CssRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview CSS bundler for multi-theme output\n */\n\nimport type { CssRendererOptions } from '@renderers/types'\nimport type { ResolverDocument } from '@resolution/types'\nimport { BasePermutationError, ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedToken, ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport {\n stripInternalMetadata,\n resolveSelector,\n resolveMediaQuery,\n countModifierDifferences,\n getExpectedSource,\n filterTokensBySource,\n parseModifierSource,\n normalizeModifierInputs,\n} from './utils'\n\nconst REF_PREFIX_SETS = '#/sets/'\nconst REF_PREFIX_MODIFIERS = '#/modifiers/'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\nconst getSourceSet = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n return '_sourceSet' in token && typeof token._sourceSet === 'string'\n ? token._sourceSet\n : undefined\n}\n\nconst getSourceModifier = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n return '_sourceModifier' in token && typeof token._sourceModifier === 'string'\n ? token._sourceModifier\n : undefined\n}\n\n/**\n * Bundle tokens as CSS with descriptive comments\n *\n * CSS-specific strategy: Uses cascade model with minimal overrides\n * - Base permutation gets all tokens in :root\n * - Single-dimension modifiers get only their overrides in [data-*] selectors\n * - Multi-dimension permutations are skipped (would create duplicate selectors)\n */\nexport async function bundleAsCss(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n options?: CssRendererOptions,\n formatTokens?: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string> {\n const baseItem = bundleData.find((item) => item.isBase)\n if (!baseItem) {\n throw new BasePermutationError('Base permutation not found in bundle data')\n }\n if (!formatTokens) {\n throw new ConfigurationError('CSS formatter was not provided')\n }\n\n const orderedBundleData = orderBundleData(bundleData, resolver, baseItem)\n const cssBlocks: string[] = []\n\n for (const item of orderedBundleData) {\n if (item.isBase) {\n const blocks = await formatBasePermutation(item, resolver, options, formatTokens)\n cssBlocks.push(...blocks)\n continue\n }\n\n const block = await formatModifierPermutation(item, baseItem, options, formatTokens)\n if (block) {\n cssBlocks.push(block)\n }\n }\n\n return cssBlocks.join('\\n\\n')\n}\n\nasync function formatBasePermutation(\n { tokens, modifierInputs }: BundleDataItem,\n resolver: ResolverDocument,\n options: CssRendererOptions | undefined,\n formatTokens: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string[]> {\n const firstModifierName = resolver.modifiers ? Object.keys(resolver.modifiers)[0] : ''\n const modifier = firstModifierName ?? ''\n const context = modifierInputs[modifier] ?? ''\n\n const selector = resolveSelector(options?.selector, modifier, context, true, modifierInputs)\n const mediaQuery = resolveMediaQuery(options?.mediaQuery, modifier, context, true, modifierInputs)\n const referenceTokens = stripInternalMetadata(tokens)\n const defaultBlocks = buildDefaultLayerBlocks(tokens, modifierInputs, resolver)\n\n const cssBlocks: string[] = []\n for (const block of defaultBlocks) {\n const cleanTokens = stripInternalMetadata(block.tokens)\n const css = await formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options?.minify,\n referenceTokens,\n })\n const header = block.description\n ? `/* ${block.key} */\\n/* ${block.description} */`\n : `/* ${block.key} */`\n cssBlocks.push(`${header}\\n${css}`)\n }\n\n return cssBlocks\n}\n\nasync function formatModifierPermutation(\n { tokens, modifierInputs }: BundleDataItem,\n baseItem: BundleDataItem,\n options: CssRendererOptions | undefined,\n formatTokens: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string | undefined> {\n // Skip permutations where multiple modifiers differ from base\n const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Non-base: filter to only tokens from this modifier's source\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n let tokensToInclude = filterTokensBySource(tokens, expectedSource)\n const hasSourceMetadata = Object.values(tokens).some(\n (token) => token != null && getSourceModifier(token) !== undefined,\n )\n\n // If tokens have no source metadata, fall back to full token set\n if (Object.keys(tokensToInclude).length === 0 && !hasSourceMetadata) {\n tokensToInclude = tokens\n }\n\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n const referenceTokens = stripInternalMetadata(tokens)\n const selector = resolveSelector(options?.selector, modifier, context, false, modifierInputs)\n const mediaQuery = resolveMediaQuery(\n options?.mediaQuery,\n modifier,\n context,\n false,\n modifierInputs,\n )\n\n const css = await formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options?.minify,\n referenceTokens,\n })\n return `/* Modifier: ${modifier}=${context} */\\n${css}`\n}\n\nexport type SetLayerBlock = {\n key: string\n description?: string\n tokens: BundleDataItem['tokens']\n}\n\nfunction addLayerBlock(\n blocks: SetLayerBlock[],\n included: Set<string>,\n key: string,\n blockTokens: BundleDataItem['tokens'],\n description?: string,\n): void {\n if (Object.keys(blockTokens).length === 0) {\n return\n }\n for (const k of Object.keys(blockTokens)) {\n included.add(k)\n }\n blocks.push({ key, description, tokens: blockTokens })\n}\n\n/** Collect tokens belonging to a specific set, excluding already-included tokens */\nfunction collectSetTokens(\n tokens: BundleDataItem['tokens'],\n setName: string,\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name) && getSourceSet(token) === setName) {\n result[name] = token\n }\n }\n return result\n}\n\n/** Collect tokens belonging to a specific modifier source, excluding already-included tokens */\nfunction collectModifierTokens(\n tokens: BundleDataItem['tokens'],\n expectedSource: string,\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name) && (getSourceModifier(token) ?? '').toLowerCase() === expectedSource) {\n result[name] = token\n }\n }\n return result\n}\n\n/** Collect all tokens not yet included in any block */\nfunction collectRemainder(\n tokens: BundleDataItem['tokens'],\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name)) {\n result[name] = token\n }\n }\n return result\n}\n\n/**\n * Group tokens by their originating set, following the resolver's resolution order.\n *\n * Produces one block per set (e.g. \"Set: colors\", \"Set: typography\") plus\n * an \"Unattributed\" block for any tokens that don't belong to a known set.\n * This is used by both the bundle preset (base permutation) and the modifier\n * preset (base file) to produce structured CSS output with set comments.\n */\nexport function buildSetLayerBlocks(\n tokens: BundleDataItem['tokens'],\n resolver: ResolverDocument,\n): SetLayerBlock[] {\n const blocks: SetLayerBlock[] = []\n const included = new Set<string>()\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string' || !ref.startsWith(REF_PREFIX_SETS)) {\n continue\n }\n\n const setName = ref.slice(REF_PREFIX_SETS.length)\n addLayerBlock(\n blocks,\n included,\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n }\n\n addLayerBlock(blocks, included, 'Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\nfunction buildDefaultLayerBlocks(\n tokens: BundleDataItem['tokens'],\n baseModifierInputs: Record<string, string>,\n resolver: ResolverDocument,\n): SetLayerBlock[] {\n const blocks: SetLayerBlock[] = []\n const included = new Set<string>()\n const baseInputs = normalizeModifierInputs(baseModifierInputs)\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n processResolutionOrderRef(ref, tokens, blocks, included, baseInputs, resolver)\n }\n\n addLayerBlock(blocks, included, 'Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\nfunction processResolutionOrderRef(\n ref: string,\n tokens: BundleDataItem['tokens'],\n blocks: SetLayerBlock[],\n included: Set<string>,\n baseInputs: Record<string, string>,\n resolver: ResolverDocument,\n): void {\n if (ref.startsWith(REF_PREFIX_SETS)) {\n const setName = ref.slice(REF_PREFIX_SETS.length)\n addLayerBlock(\n blocks,\n included,\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n return\n }\n\n if (!ref.startsWith(REF_PREFIX_MODIFIERS)) {\n return\n }\n\n const modifierName = ref.slice(REF_PREFIX_MODIFIERS.length)\n const modifier = resolver.modifiers?.[modifierName]\n const selectedContext = baseInputs[modifierName.toLowerCase()]\n if (!modifier || !selectedContext) {\n return\n }\n\n const expectedSource = `${modifierName}-${selectedContext}`.toLowerCase()\n addLayerBlock(\n blocks,\n included,\n `Modifier: ${modifierName}=${selectedContext} (default)`,\n collectModifierTokens(tokens, expectedSource, included),\n modifier.description,\n )\n}\n\n/** Find a permutation that differs from the base in exactly one modifier dimension */\nfunction findSingleDiffPermutation(\n bundleData: BundleDataItem[],\n modifierName: string,\n context: string,\n baseInputs: Record<string, string>,\n): BundleDataItem | undefined {\n const normalizedModifier = modifierName.toLowerCase()\n const normalizedContext = context.toLowerCase()\n\n return bundleData.find((item) => {\n if (item.isBase) {\n return false\n }\n const inputs = normalizeModifierInputs(item.modifierInputs)\n if (inputs[normalizedModifier] !== normalizedContext) {\n return false\n }\n return Object.entries(baseInputs).every(([k, v]) => k === normalizedModifier || inputs[k] === v)\n })\n}\n\nfunction pushUniqueBundleItem(\n ordered: BundleDataItem[],\n includedKeys: Set<string>,\n item: BundleDataItem | undefined,\n): void {\n if (!item) {\n return\n }\n const key = stableInputsKey(item.modifierInputs)\n if (includedKeys.has(key)) {\n return\n }\n includedKeys.add(key)\n ordered.push(item)\n}\n\nfunction appendModifierPermutations(\n bundleData: BundleDataItem[],\n modifiers: NonNullable<ResolverDocument['modifiers']>,\n orderedNames: string[],\n baseInputs: Record<string, string>,\n ordered: BundleDataItem[],\n includedKeys: Set<string>,\n): void {\n for (const modifierName of orderedNames) {\n const modifierDef = modifiers[modifierName]\n if (!modifierDef) {\n continue\n }\n\n const defaultValue = baseInputs[modifierName.toLowerCase()] ?? ''\n for (const ctx of Object.keys(modifierDef.contexts)) {\n if (defaultValue === ctx.toLowerCase()) {\n continue\n }\n pushUniqueBundleItem(\n ordered,\n includedKeys,\n findSingleDiffPermutation(bundleData, modifierName, ctx, baseInputs),\n )\n }\n }\n}\n\nfunction orderBundleData(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n baseItem: BundleDataItem,\n): BundleDataItem[] {\n const modifiers = resolver.modifiers\n if (!modifiers) {\n return bundleData\n }\n\n const baseInputs = normalizeModifierInputs(baseItem.modifierInputs)\n const orderedModifierNames = getOrderedModifierNames(resolver)\n if (orderedModifierNames.length === 0) {\n return bundleData\n }\n\n const firstModifierDef = modifiers[orderedModifierNames[0] ?? '']\n if (!firstModifierDef) {\n return bundleData\n }\n\n const includedKeys = new Set<string>()\n const ordered: BundleDataItem[] = []\n\n pushUniqueBundleItem(ordered, includedKeys, baseItem)\n appendModifierPermutations(\n bundleData,\n modifiers,\n orderedModifierNames,\n baseInputs,\n ordered,\n includedKeys,\n )\n\n return ordered.length > 0 ? ordered : bundleData\n}\n\nfunction getOrderedModifierNames(resolver: ResolverDocument): string[] {\n const modifiers = resolver.modifiers ?? {}\n const seen = new Set<string>()\n const ordered: string[] = []\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n if (!ref.startsWith(REF_PREFIX_MODIFIERS)) {\n continue\n }\n const name = ref.slice(REF_PREFIX_MODIFIERS.length)\n if (seen.has(name)) {\n continue\n }\n if (!(name in modifiers)) {\n continue\n }\n ordered.push(name)\n seen.add(name)\n }\n\n for (const name of Object.keys(modifiers)) {\n if (seen.has(name)) {\n continue\n }\n ordered.push(name)\n seen.add(name)\n }\n\n return ordered\n}\n\nfunction stableInputsKey(modifierInputs: Record<string, string>): string {\n const normalized = normalizeModifierInputs(modifierInputs)\n return Object.keys(normalized)\n .sort()\n .map((k) => `${k}=${normalized[k]}`)\n .join('|')\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview iOS/SwiftUI renderer for design tokens\n * Generates Swift code targeting SwiftUI (iOS 17+)\n */\n\nimport { isColorObject, dtcgObjectToCulori } from '@processing/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/transforms/built-in/dimension-converter'\nimport { isDurationObject } from '@processing/transforms/built-in/duration-converter'\nimport type {\n ColorValueObject,\n DimensionValue,\n DurationValue,\n GradientStop,\n ResolvedToken,\n ResolvedTokens,\n} from '@tokens/types'\nimport { isBorderToken, isShadowToken, isTypographyToken } from '@tokens/types'\nimport { converter } from 'culori'\n\nimport {\n assertFileRequired,\n buildGeneratedFileHeader,\n buildInMemoryOutputKey,\n groupTokensByType,\n indentStr,\n resolveFileName,\n stripInternalMetadata,\n toSafeIdentifier,\n} from './bundlers/utils'\nimport { buildSwiftDeprecationAttribute, buildTokenDescriptionComment } from './metadata'\nimport { outputTree } from './output-tree'\nimport type { RenderContext, RenderOutput, Renderer } from './types'\n\n/**\n * Options for iOS/SwiftUI renderer\n */\nexport type IosRendererOptions = {\n preset?: 'standalone'\n accessLevel?: 'public' | 'internal'\n /**\n * Output structure:\n * - `'enum'` — nested enums inside a single root enum\n * - `'grouped'` — namespace enum with separate extensions per token group\n */\n structure?: 'enum' | 'grouped'\n enumName?: string\n /** Namespace enum name used in grouped mode (default: 'DesignTokens') */\n extensionNamespace?: string\n colorSpace?: 'sRGB' | 'displayP3'\n /**\n * Target Swift language version.\n * - `'5.9'` (default) — standard static let declarations\n * - `'6.0'` — adds `nonisolated(unsafe)` to static properties for\n * Swift 6 strict concurrency compliance\n */\n swiftVersion?: '5.9' | '6.0'\n /** Number of spaces per indentation level (default 4) */\n indent?: number\n /** Add @frozen annotation to enums and structs for ABI stability (default false) */\n frozen?: boolean\n}\n\nconst toSRGB = converter('rgb')\nconst toP3 = converter('p3')\n\nconst SWIFT_TYPE_GROUP_MAP: Record<string, string> = {\n color: 'Colors',\n dimension: 'Spacing',\n fontFamily: 'Fonts',\n fontWeight: 'FontWeights',\n duration: 'Durations',\n shadow: 'Shadows',\n typography: 'Typography',\n number: 'Numbers',\n cubicBezier: 'Animations',\n border: 'Borders',\n gradient: 'Gradients',\n}\n\n/**\n * Swift reserved keywords that require backtick-escaping when used as identifiers.\n */\nconst SWIFT_KEYWORDS = new Set([\n 'associatedtype',\n 'class',\n 'deinit',\n 'enum',\n 'extension',\n 'fileprivate',\n 'func',\n 'import',\n 'init',\n 'inout',\n 'internal',\n 'let',\n 'open',\n 'operator',\n 'private',\n 'protocol',\n 'public',\n 'rethrows',\n 'static',\n 'struct',\n 'subscript',\n 'typealias',\n 'var',\n 'break',\n 'case',\n 'continue',\n 'default',\n 'defer',\n 'do',\n 'else',\n 'fallthrough',\n 'for',\n 'guard',\n 'if',\n 'in',\n 'repeat',\n 'return',\n 'switch',\n 'where',\n 'while',\n 'as',\n 'catch',\n 'false',\n 'is',\n 'nil',\n 'super',\n 'self',\n 'Self',\n 'throw',\n 'throws',\n 'true',\n 'try',\n 'Type',\n 'Protocol',\n])\n\nexport class IosRenderer implements Renderer<IosRendererOptions> {\n async format(context: RenderContext, options?: IosRendererOptions): Promise<RenderOutput> {\n const opts: Required<IosRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n accessLevel: options?.accessLevel ?? 'public',\n structure: options?.structure ?? 'enum',\n enumName: options?.enumName ?? 'DesignTokens',\n extensionNamespace: options?.extensionNamespace ?? 'DesignTokens',\n colorSpace: options?.colorSpace ?? 'sRGB',\n swiftVersion: options?.swiftVersion ?? '5.9',\n indent: options?.indent ?? 4,\n frozen: options?.frozen ?? false,\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n private formatTokens(tokens: ResolvedTokens, options: Required<IosRendererOptions>): string {\n const access = options.accessLevel\n const groups = groupTokensByType(tokens, SWIFT_TYPE_GROUP_MAP)\n const imports = this.collectImports(tokens)\n const staticPrefix = this.staticLetPrefix(options)\n const frozen = this.frozenPrefix(options)\n const lines: string[] = []\n\n lines.push(buildGeneratedFileHeader())\n lines.push('')\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n\n lines.push(...this.buildStructDefinitions(tokens, access, options))\n this.pushTokenLayout(lines, groups, options, access, staticPrefix, frozen)\n lines.push(...this.buildViewExtensions(tokens, access, options))\n if (options.structure !== 'grouped') {\n lines.push('')\n }\n\n return lines.join('\\n')\n }\n\n private pushTokenLayout(\n lines: string[],\n groups: Array<{ name: string; tokens: ResolvedToken[] }>,\n options: Required<IosRendererOptions>,\n access: string,\n staticPrefix: string,\n frozen: string,\n ): void {\n const i1 = indentStr(options.indent, 1)\n const i2 = indentStr(options.indent, 2)\n\n if (options.structure === 'grouped') {\n this.pushGroupedLayout(lines, groups, options, access, i1, i2, staticPrefix, frozen)\n return\n }\n\n lines.push('')\n lines.push(`${frozen}${access} enum ${options.enumName} {`)\n\n for (const group of groups) {\n lines.push(`${i1}${frozen}${access} enum ${group.name} {`)\n this.pushTokenDeclarations(lines, group.tokens, options, access, i2, staticPrefix)\n lines.push(`${i1}}`)\n lines.push('')\n }\n\n lines.push('}')\n }\n\n private pushGroupedLayout(\n lines: string[],\n groups: Array<{ name: string; tokens: ResolvedToken[] }>,\n options: Required<IosRendererOptions>,\n access: string,\n i1: string,\n i2: string,\n staticPrefix: string,\n frozen: string,\n ): void {\n const namespace = options.extensionNamespace\n lines.push('')\n lines.push(`${frozen}${access} enum ${namespace} {}`)\n lines.push('')\n\n for (const group of groups) {\n lines.push(`${access} extension ${namespace} {`)\n lines.push(`${i1}${frozen}enum ${group.name} {`)\n this.pushTokenDeclarations(lines, group.tokens, options, access, i2, staticPrefix)\n lines.push(`${i1}}`)\n lines.push('}')\n lines.push('')\n }\n }\n\n private pushTokenDeclarations(\n lines: string[],\n tokens: ResolvedToken[],\n options: Required<IosRendererOptions>,\n access: string,\n indent: string,\n staticPrefix: string,\n ): void {\n for (const token of tokens) {\n const swiftName = this.buildQualifiedSwiftName(token)\n const swiftValue = this.formatSwiftValue(token, options)\n const typeAnnotation = this.getTypeAnnotation(token)\n const annotation = typeAnnotation ? `: ${typeAnnotation}` : ''\n const docComment = buildTokenDescriptionComment(token, 'swift')\n if (docComment) {\n lines.push(`${indent}${docComment}`)\n }\n\n const deprecationAttr = buildSwiftDeprecationAttribute(token)\n if (deprecationAttr) {\n lines.push(`${indent}${deprecationAttr}`)\n }\n\n lines.push(`${indent}${access} ${staticPrefix}${swiftName}${annotation} = ${swiftValue}`)\n }\n }\n\n private collectImports(tokens: ResolvedTokens): string[] {\n const imports = new Set<string>()\n imports.add('SwiftUI')\n\n for (const [, token] of Object.entries(tokens)) {\n if (token.$type === 'duration') {\n imports.add('Foundation')\n }\n }\n\n return Array.from(imports).sort()\n }\n\n /**\n * Builds a qualified Swift name from a token's path, preserving parent\n * hierarchy segments to avoid duplicate identifiers.\n *\n * For example, `color.blue.400` in the `Colors` group becomes `blue400`\n * instead of just `_400`.\n */\n private buildQualifiedSwiftName(token: ResolvedToken): string {\n const path = token.path\n\n // The first segment is typically the token type (color, spacing, etc.)\n // which is already represented by the group enum. Strip it.\n const withoutTypePrefix = path.length > 1 ? path.slice(1) : path\n\n const joined = withoutTypePrefix.join('_')\n return toSafeIdentifier(joined, SWIFT_KEYWORDS, false)\n }\n\n private formatSwiftValue(token: ResolvedToken, options: Required<IosRendererOptions>): string {\n const { $type, $value: value } = token\n\n switch ($type) {\n case 'color':\n return this.formatColorValue(value, options)\n case 'dimension':\n return this.formatDimensionValue(value)\n case 'fontFamily':\n return this.formatFontFamilyValue(value)\n case 'fontWeight':\n return this.formatFontWeightValue(value)\n case 'duration':\n return this.formatDurationValue(value)\n case 'shadow':\n return this.formatShadowValue(value, options)\n case 'typography':\n return this.formatTypographyValue(value)\n case 'border':\n return this.formatBorderValue(value, options)\n case 'gradient':\n return this.formatGradientValue(value, options)\n case 'number':\n return String(value)\n case 'cubicBezier':\n if (Array.isArray(value) && value.length === 4) {\n return `UnitCurve.bezier(startControlPoint: UnitPoint(x: ${value[0]}, y: ${value[1]}), endControlPoint: UnitPoint(x: ${value[2]}, y: ${value[3]}))`\n }\n break\n }\n\n return this.formatSwiftPrimitive(value)\n }\n\n private formatSwiftPrimitive(value: unknown): string {\n if (typeof value === 'string') {\n return `\"${this.escapeSwiftString(value)}\"`\n }\n if (typeof value === 'number') {\n return String(value)\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n return `\"${this.escapeSwiftString(String(value))}\"`\n }\n\n private formatColorValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (!isColorObject(value)) {\n return typeof value === 'string' ? `Color(\"${this.escapeSwiftString(value)}\")` : 'Color.clear'\n }\n\n const colorObj = value as ColorValueObject\n const alpha = colorObj.alpha ?? 1\n\n if (options.colorSpace === 'displayP3') {\n const p3 = toP3(dtcgObjectToCulori(colorObj))\n const r = this.roundComponent(p3?.r ?? 0)\n const g = this.roundComponent(p3?.g ?? 0)\n const b = this.roundComponent(p3?.b ?? 0)\n return alpha < 1\n ? `Color(.displayP3, red: ${r}, green: ${g}, blue: ${b}, opacity: ${this.roundComponent(alpha)})`\n : `Color(.displayP3, red: ${r}, green: ${g}, blue: ${b})`\n }\n\n const rgb = toSRGB(dtcgObjectToCulori(colorObj))\n const r = this.roundComponent(rgb?.r ?? 0)\n const g = this.roundComponent(rgb?.g ?? 0)\n const b = this.roundComponent(rgb?.b ?? 0)\n\n return alpha < 1\n ? `Color(red: ${r}, green: ${g}, blue: ${b}, opacity: ${this.roundComponent(alpha)})`\n : `Color(red: ${r}, green: ${g}, blue: ${b})`\n }\n\n private formatDimensionValue(value: unknown): string {\n if (isDimensionObject(value)) {\n return this.dimensionToPoints(value as DimensionValue)\n }\n\n return String(value)\n }\n\n private formatFontFamilyValue(value: unknown): string {\n if (Array.isArray(value)) {\n const primary = value[0]\n return typeof primary === 'string' ? `\"${this.escapeSwiftString(primary)}\"` : '\"system\"'\n }\n\n return typeof value === 'string' ? `\"${this.escapeSwiftString(value)}\"` : '\"system\"'\n }\n\n private formatFontWeightValue(value: unknown): string {\n if (typeof value === 'number') {\n return this.numericFontWeight(value)\n }\n\n if (typeof value === 'string') {\n return this.namedFontWeight(value) ?? 'Font.Weight.regular'\n }\n\n return 'Font.Weight.regular'\n }\n\n private numericFontWeight(weight: number): string {\n if (weight <= 100) {\n return 'Font.Weight.ultraLight'\n }\n if (weight <= 200) {\n return 'Font.Weight.thin'\n }\n if (weight <= 300) {\n return 'Font.Weight.light'\n }\n if (weight <= 400) {\n return 'Font.Weight.regular'\n }\n if (weight <= 500) {\n return 'Font.Weight.medium'\n }\n if (weight <= 600) {\n return 'Font.Weight.semibold'\n }\n if (weight <= 700) {\n return 'Font.Weight.bold'\n }\n if (weight <= 800) {\n return 'Font.Weight.heavy'\n }\n return 'Font.Weight.black'\n }\n\n private namedFontWeight(name: string): string | undefined {\n const map: Record<string, string> = {\n thin: 'Font.Weight.thin',\n ultralight: 'Font.Weight.ultraLight',\n extralight: 'Font.Weight.ultraLight',\n light: 'Font.Weight.light',\n regular: 'Font.Weight.regular',\n normal: 'Font.Weight.regular',\n medium: 'Font.Weight.medium',\n semibold: 'Font.Weight.semibold',\n demibold: 'Font.Weight.semibold',\n bold: 'Font.Weight.bold',\n heavy: 'Font.Weight.heavy',\n extrabold: 'Font.Weight.heavy',\n black: 'Font.Weight.black',\n ultrabold: 'Font.Weight.black',\n }\n\n return map[name.toLowerCase()]\n }\n\n private formatDurationValue(value: unknown): string {\n if (isDurationObject(value)) {\n const dur = value as DurationValue\n const seconds = dur.unit === 'ms' ? dur.value / 1000 : dur.value\n return String(seconds)\n }\n\n return typeof value === 'number' ? String(value) : '0'\n }\n\n private formatShadowValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (Array.isArray(value) && value.length > 0) {\n // Use the first shadow layer for SwiftUI\n return this.formatSingleShadow(value[0] as Record<string, unknown>, options)\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>, options)\n }\n\n return 'ShadowStyle(color: .clear, radius: 0, x: 0, y: 0, spread: 0)'\n }\n\n private formatSingleShadow(\n shadow: Record<string, unknown>,\n options: Required<IosRendererOptions>,\n ): string {\n const color = isColorObject(shadow.color)\n ? this.formatColorValue(shadow.color, options)\n : 'Color.black.opacity(0.25)'\n\n const radius = isDimensionObject(shadow.blur)\n ? this.dimensionToCGFloat(shadow.blur as DimensionValue)\n : '8'\n\n const x = isDimensionObject(shadow.offsetX)\n ? this.dimensionToCGFloat(shadow.offsetX as DimensionValue)\n : '0'\n\n const y = isDimensionObject(shadow.offsetY)\n ? this.dimensionToCGFloat(shadow.offsetY as DimensionValue)\n : '0'\n\n const spread = isDimensionObject(shadow.spread)\n ? this.dimensionToCGFloat(shadow.spread as DimensionValue)\n : '0'\n\n return `ShadowStyle(color: ${color}, radius: ${radius}, x: ${x}, y: ${y}, spread: ${spread})`\n }\n\n private formatTypographyValue(value: unknown): string {\n if (typeof value !== 'object' || value === null) {\n return 'TypographyStyle(font: Font.body, tracking: 0, lineSpacing: 0)'\n }\n\n const typo = value as Record<string, unknown>\n\n const size = isDimensionObject(typo.fontSize)\n ? this.dimensionToPoints(typo.fontSize as DimensionValue)\n : '16'\n\n const weight =\n typo.fontWeight != null ? this.formatFontWeightValue(typo.fontWeight) : 'Font.Weight.regular'\n\n const fontExpr = this.buildFontExpression(typo, size, weight)\n const tracking = this.extractTracking(typo)\n const lineSpacing = this.extractLineSpacing(typo)\n\n return `TypographyStyle(font: ${fontExpr}, tracking: ${tracking}, lineSpacing: ${lineSpacing})`\n }\n\n private buildFontExpression(typo: Record<string, unknown>, size: string, weight: string): string {\n if (typo.fontFamily != null) {\n const family = Array.isArray(typo.fontFamily) ? typo.fontFamily[0] : typo.fontFamily\n if (typeof family === 'string') {\n return `Font.custom(\"${this.escapeSwiftString(family)}\", size: ${size}).weight(${weight})`\n }\n }\n\n return `Font.system(size: ${size}, weight: ${weight})`\n }\n\n private extractTracking(typo: Record<string, unknown>): string {\n if (!isDimensionObject(typo.letterSpacing)) {\n return '0'\n }\n return this.dimensionToPoints(typo.letterSpacing as DimensionValue)\n }\n\n private extractLineSpacing(typo: Record<string, unknown>): string {\n if (typo.lineHeight == null || typeof typo.lineHeight !== 'number') {\n return '0'\n }\n if (!isDimensionObject(typo.fontSize)) {\n return '0'\n }\n const basePt = this.dimensionToNumericPoints(typo.fontSize as DimensionValue)\n const lineHeightPt = Math.round(basePt * typo.lineHeight * 100) / 100\n return String(lineHeightPt - basePt)\n }\n\n private dimensionToNumericPoints(dim: DimensionValue): number {\n return dim.unit === 'rem' ? dim.value * 16 : dim.value\n }\n\n private dimensionToPoints(dim: DimensionValue): string {\n return String(this.dimensionToNumericPoints(dim))\n }\n\n /** Formats a dimension as a CGFloat literal (appends `.0` for integers). */\n private dimensionToCGFloat(dim: DimensionValue): string {\n const ptValue = this.dimensionToNumericPoints(dim)\n return Number.isInteger(ptValue) ? `${ptValue}.0` : String(ptValue)\n }\n\n private getTypeAnnotation(token: ResolvedToken): string | undefined {\n switch (token.$type) {\n case 'dimension':\n return 'CGFloat'\n case 'duration':\n return 'TimeInterval'\n case 'number':\n return 'Double'\n case 'fontWeight':\n return 'Font.Weight'\n case 'fontFamily':\n return 'String'\n default:\n return undefined\n }\n }\n\n private escapeSwiftString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n')\n }\n\n private roundComponent(value: number): number {\n return Math.round(value * 10000) / 10000\n }\n\n /**\n * Returns the prefix for `static let` declarations.\n * Swift 6 requires `nonisolated(unsafe)` on global stored properties.\n */\n private staticLetPrefix(options: Required<IosRendererOptions>): string {\n return options.swiftVersion === '6.0' ? 'nonisolated(unsafe) static let ' : 'static let '\n }\n\n /** Returns `@frozen ` when the frozen option is enabled, empty string otherwise. */\n private frozenPrefix(options: Required<IosRendererOptions>): string {\n return options.frozen ? '@frozen ' : ''\n }\n\n /** Returns `: Sendable` when targeting Swift 6, empty string otherwise. */\n private structConformances(options: Required<IosRendererOptions>): string {\n return options.swiftVersion === '6.0' ? ': Sendable' : ''\n }\n\n /** Emits all struct definitions needed by the token set. */\n private buildStructDefinitions(\n tokens: ResolvedTokens,\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const lines: string[] = []\n\n if (Object.values(tokens).some(isShadowToken)) {\n lines.push('')\n lines.push(...this.buildShadowStyleStruct(access, options))\n }\n\n if (Object.values(tokens).some(isTypographyToken)) {\n lines.push('')\n lines.push(...this.buildTypographyStyleStruct(access, options))\n }\n\n if (Object.values(tokens).some(isBorderToken)) {\n lines.push('')\n lines.push(...this.buildBorderStyleStruct(access, options))\n }\n\n return lines\n }\n\n private buildShadowStyleStruct(access: string, options: Required<IosRendererOptions>): string[] {\n const i1 = indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct ShadowStyle${conformances} {`,\n `${i1}${access} let color: Color`,\n `${i1}${access} let radius: CGFloat`,\n `${i1}${access} let x: CGFloat`,\n `${i1}${access} let y: CGFloat`,\n `${i1}${access} let spread: CGFloat`,\n '}',\n ]\n }\n\n private buildTypographyStyleStruct(\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const i1 = indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct TypographyStyle${conformances} {`,\n `${i1}${access} let font: Font`,\n `${i1}${access} let tracking: CGFloat`,\n `${i1}${access} let lineSpacing: CGFloat`,\n '}',\n ]\n }\n\n private buildBorderStyleStruct(access: string, options: Required<IosRendererOptions>): string[] {\n const i1 = indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct BorderStyle${conformances} {`,\n `${i1}${access} let color: Color`,\n `${i1}${access} let width: CGFloat`,\n '}',\n ]\n }\n\n /** Emits convenience View extensions for shadow and typography application. */\n private buildViewExtensions(\n tokens: ResolvedTokens,\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const i1 = indentStr(options.indent, 1)\n const i2 = indentStr(options.indent, 2)\n\n if (Object.values(tokens).some(isShadowToken)) {\n lines.push('')\n lines.push(`${access} extension View {`)\n lines.push(`${i1}func shadowStyle(_ style: ShadowStyle) -> some View {`)\n lines.push(\n `${i2}self.shadow(color: style.color, radius: style.radius, x: style.x, y: style.y)`,\n )\n lines.push(`${i1}}`)\n lines.push('}')\n }\n\n if (Object.values(tokens).some(isTypographyToken)) {\n lines.push('')\n lines.push(`${access} extension View {`)\n lines.push(`${i1}func typographyStyle(_ style: TypographyStyle) -> some View {`)\n lines.push(\n `${i2}self.font(style.font).tracking(style.tracking).lineSpacing(style.lineSpacing)`,\n )\n lines.push(`${i1}}`)\n lines.push('}')\n }\n\n return lines\n }\n\n private formatBorderValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (typeof value !== 'object' || value === null) {\n return 'BorderStyle(color: .clear, width: 0)'\n }\n\n const border = value as Record<string, unknown>\n\n const color = isColorObject(border.color)\n ? this.formatColorValue(border.color, options)\n : 'Color.clear'\n\n const width = isDimensionObject(border.width)\n ? this.dimensionToCGFloat(border.width as DimensionValue)\n : '1.0'\n\n return `BorderStyle(color: ${color}, width: ${width})`\n }\n\n private formatGradientValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (!Array.isArray(value) || value.length === 0) {\n return 'Gradient(stops: [])'\n }\n\n const stops = (value as GradientStop[]).map((stop) => {\n const color = isColorObject(stop.color)\n ? this.formatColorValue(stop.color, options)\n : 'Color.clear'\n return `.init(color: ${color}, location: ${stop.position})`\n })\n\n return `Gradient(stops: [${stops.join(', ')}])`\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: Required<IosRendererOptions>,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone iOS',\n )\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'swift',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n}\n\n/**\n * iOS/SwiftUI renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'ios',\n * renderer: iosRenderer(),\n * options: {\n * accessLevel: 'public',\n * structure: 'enum', // or 'grouped' for extension-based layout\n * enumName: 'DesignTokens',\n * colorSpace: 'sRGB',\n * },\n * file: 'DesignTokens-{theme}.swift'\n * }]\n * ```\n */\nexport function iosRenderer(): Renderer<IosRendererOptions> {\n const rendererInstance = new IosRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as IosRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview JavaScript module renderer using Prettier for formatting\n */\n\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { buildNestedTokenObject, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from './metadata'\nimport { outputTree } from './output-tree'\nimport type { JsModuleRendererOptions, RenderContext, RenderOutput, Renderer } from './types'\n\nexport class JsModuleRenderer implements Renderer<JsModuleRendererOptions> {\n async format(context: RenderContext, options?: JsModuleRendererOptions): Promise<RenderOutput> {\n const opts: Required<JsModuleRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n structure: options?.structure ?? 'nested',\n minify: options?.minify ?? false,\n moduleName: options?.moduleName ?? 'tokens',\n generateHelper: options?.generateHelper ?? false,\n }\n\n if (opts.preset === 'bundle') {\n const { bundleAsJsModule } = await import('@renderers/bundlers/js')\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalMetadata(tokens),\n modifierInputs,\n isBase: isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsJsModule(bundleData, context.resolver, opts, async (tokens) => {\n return await this.formatTokens(tokens, opts)\n })\n }\n\n assertFileRequired(context.buildPath, context.output.file, context.output.name, 'JS module')\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const cleanTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(cleanTokens, opts)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'js',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private async formatTokens(\n tokens: ResolvedTokens,\n options: Required<JsModuleRendererOptions>,\n ): Promise<string> {\n const lines: string[] = []\n lines.push(...this.formatAsObject(tokens, options))\n\n const code = lines.join('\\n')\n\n if (options.minify) {\n return code\n }\n\n return await prettier.format(code, {\n parser: 'babel',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n semi: false,\n singleQuote: true,\n trailingComma: 'es5',\n })\n }\n\n private formatAsObject(\n tokens: ResolvedTokens,\n options: Required<JsModuleRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const tokenMap = this.buildTokenMap(tokens)\n const varName = options.moduleName !== '' ? options.moduleName : 'tokens'\n\n if (options.structure === 'flat') {\n lines.push(`const ${varName} = {`)\n this.addFlatProperties(lines, tokens, 1)\n lines.push('}')\n } else {\n lines.push(`const ${varName} = {`)\n const tokenObj = this.tokensToPlainObject(tokens, 'nested')\n this.addNestedProperties(lines, tokenObj, tokenMap, 1)\n lines.push('}')\n }\n\n lines.push('')\n lines.push(`export default ${varName}`)\n\n return lines\n }\n\n private buildTokenMap(tokens: ResolvedTokens): Map<string, ResolvedToken> {\n const map = new Map<string, ResolvedToken>()\n for (const [name, token] of Object.entries(tokens)) {\n map.set(name, token)\n }\n return map\n }\n\n private addFlatProperties(lines: string[], tokens: ResolvedTokens, indent: number): void {\n const indentStr = ' '.repeat(indent)\n const sortedEntries = getSortedTokenEntries(tokens)\n\n for (let i = 0; i < sortedEntries.length; i++) {\n const [name, token] = sortedEntries[i]!\n const isLast = i === sortedEntries.length - 1\n\n this.pushTokenComments(lines, token, indentStr)\n\n lines.push(\n `${indentStr}${this.quoteKey(name)}: ${JSON.stringify(token.$value)}${isLast ? '' : ','}`,\n )\n }\n }\n\n private pushTokenComments(lines: string[], token: ResolvedToken, indent: string): void {\n const deprecationComment = buildTokenDeprecationComment(token, 'js')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'js')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}`)\n }\n }\n\n private tokensToPlainObject(\n tokens: ResolvedTokens,\n structure: 'flat' | 'nested',\n ): Record<string, unknown> {\n if (structure === 'nested') {\n return buildNestedTokenObject(tokens, (token) => token.$value)\n }\n\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = token.$value\n }\n return result\n }\n\n private addNestedProperties(\n lines: string[],\n obj: Record<string, unknown>,\n tokenMap: Map<string, ResolvedToken>,\n indent: number,\n ): void {\n const indentStr = ' '.repeat(indent)\n const entries = Object.entries(obj).sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n if (entry == null) {\n continue\n }\n const [key, value] = entry\n const isLast = i === entries.length - 1\n const isNestedObject = typeof value === 'object' && value !== null && !Array.isArray(value)\n\n if (!isNestedObject) {\n const token = tokenMap.get(key)\n if (token) {\n this.pushTokenComments(lines, token, indentStr)\n }\n\n lines.push(\n `${indentStr}${this.quoteKey(key)}: ${JSON.stringify(value)}${isLast ? '' : ','}`,\n )\n continue\n }\n\n lines.push(`${indentStr}${this.quoteKey(key)}: {`)\n this.addNestedProperties(lines, value as Record<string, unknown>, tokenMap, indent + 1)\n lines.push(`${indentStr}}${isLast ? '' : ','}`)\n }\n }\n\n private quoteKey(key: string): string {\n if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n return key\n }\n return `\"${key}\"`\n }\n}\n\nexport function jsRenderer(): Renderer<JsModuleRendererOptions> {\n const rendererInstance = new JsModuleRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as JsModuleRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview JSON renderer using Prettier for consistent formatting\n */\n\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { buildNestedTokenObject, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { outputTree } from './output-tree'\nimport type { JsonRendererOptions, RenderContext, RenderOutput, Renderer } from './types'\n\nexport class JsonRenderer implements Renderer<JsonRendererOptions> {\n async format(context: RenderContext, options?: JsonRendererOptions): Promise<RenderOutput> {\n const opts: Required<JsonRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n structure: options?.structure ?? 'nested',\n minify: options?.minify ?? false,\n includeMetadata: options?.includeMetadata ?? false,\n }\n\n if (opts.preset === 'bundle') {\n const { bundleAsJson } = await import('@renderers/bundlers/json')\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalMetadata(tokens),\n modifierInputs,\n isBase: isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsJson(bundleData, context.resolver, async (tokens) => {\n return await this.formatTokens(tokens, opts)\n })\n }\n\n assertFileRequired(context.buildPath, context.output.file, context.output.name, 'JSON')\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(processedTokens, opts)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'json',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private async formatTokens(\n tokens: ResolvedTokens,\n options: JsonRendererOptions,\n ): Promise<string> {\n const opts: Required<JsonRendererOptions> = {\n preset: options.preset ?? 'standalone',\n structure: options.structure ?? 'nested',\n minify: options.minify ?? false,\n includeMetadata: options.includeMetadata ?? false,\n }\n\n let output: unknown\n\n if (opts.structure === 'flat') {\n // Flat format: { \"token.name\": \"value\" } or { \"token.name\": { $value, $type, ... } }\n output = opts.includeMetadata ? this.flattenTokens(tokens) : this.flattenValues(tokens)\n } else {\n // Nested format: { \"token\": { \"name\": \"value\" } }\n output = opts.includeMetadata ? this.nestTokens(tokens) : this.nestValues(tokens)\n }\n\n const jsonString = JSON.stringify(output)\n\n // Use Prettier for consistent, high-quality formatting\n if (!opts.minify) {\n return await prettier.format(jsonString, {\n parser: 'json',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n })\n }\n\n return jsonString\n }\n\n /**\n * Flatten tokens to simple key-value pairs\n */\n private flattenValues(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = token.$value\n }\n return result\n }\n\n /**\n * Flatten tokens to metadata objects\n */\n private flattenTokens(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = this.serializeToken(token)\n }\n return result\n }\n\n private nestValues(tokens: ResolvedTokens): Record<string, unknown> {\n return buildNestedTokenObject(tokens, (token) => token.$value)\n }\n\n private nestTokens(tokens: ResolvedTokens): Record<string, unknown> {\n return buildNestedTokenObject(tokens, (token) => this.serializeToken(token))\n }\n\n private serializeToken(token: ResolvedToken): Record<string, unknown> {\n return {\n $value: token.$value,\n ...(typeof token.$type === 'string' && { $type: token.$type }),\n ...(token.$description != null &&\n token.$description !== '' && { $description: token.$description }),\n ...(token.$deprecated != null &&\n token.$deprecated !== false && { $deprecated: token.$deprecated }),\n ...(token.$extensions != null && { $extensions: token.$extensions }),\n }\n }\n}\n\n/**\n * JSON renderer factory function\n *\n * Creates a JSON renderer with the specified preset and options.\n *\n * @param preset - Output preset: 'bundle' or 'standalone'\n * @param options - JSON formatting options (structure, minify, includeMetadata)\n * @returns Renderer instance\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'json',\n * renderer: jsonRenderer(),\n * options: { preset: 'bundle', structure: 'nested', includeMetadata: true },\n * file: 'tokens.json'\n * }]\n * ```\n */\nexport function jsonRenderer(): Renderer<JsonRendererOptions> {\n const rendererInstance = new JsonRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as JsonRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Tailwind CSS v4 renderer using @theme directive\n * Generates CSS with @theme blocks for Tailwind v4+ design token integration\n */\n\nimport { colorObjectToHex, isColorObject } from '@processing/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/transforms/built-in/dimension-converter'\nimport {\n durationObjectToString,\n isDurationObject,\n} from '@processing/transforms/built-in/duration-converter'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { DimensionValue, ResolvedToken, ResolvedTokens } from '@tokens/types'\nimport prettier from 'prettier'\n\nimport { bundleAsTailwind } from './bundlers/tailwind'\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from './bundlers/utils'\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from './metadata'\nimport { outputTree } from './output-tree'\nimport type {\n MediaQueryFunction,\n RenderContext,\n RenderOutput,\n Renderer,\n SelectorFunction,\n} from './types'\n\n/**\n * Options for Tailwind CSS v4 renderer\n *\n * Controls how tokens are converted to Tailwind v4 @theme CSS variables.\n *\n * @example Bundle with dark mode overrides\n * ```typescript\n * tailwind({\n * name: 'tailwind',\n * file: 'theme.css',\n * preset: 'bundle',\n * selector: (modifier, context, isBase) => {\n * if (isBase) return ':root'\n * return `[data-${modifier}=\"${context}\"]`\n * },\n * })\n * ```\n */\nexport type TailwindRendererOptions = {\n preset?: 'bundle' | 'standalone'\n includeImport?: boolean\n namespace?: string\n minify?: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n}\n\n/**\n * Mapping from DTCG token types to Tailwind v4 CSS variable namespace prefixes\n */\nconst TAILWIND_NAMESPACE_MAP: Record<string, string> = {\n color: 'color',\n dimension: 'spacing',\n fontFamily: 'font',\n fontWeight: 'font-weight',\n duration: 'duration',\n shadow: 'shadow',\n number: 'number',\n cubicBezier: 'ease',\n}\n\n/**\n * Resolved Tailwind options with required base fields.\n * selector and mediaQuery remain optional (only used in bundle mode).\n * variantDeclarations is populated by the bundler from non-base permutations.\n */\ntype ResolvedTailwindOptions = {\n preset: 'bundle' | 'standalone'\n includeImport: boolean\n namespace: string\n minify: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n variantDeclarations: string[]\n}\n\nexport class TailwindRenderer implements Renderer<TailwindRendererOptions> {\n async format(context: RenderContext, options?: TailwindRendererOptions): Promise<RenderOutput> {\n const opts: ResolvedTailwindOptions = {\n preset: options?.preset ?? 'bundle',\n includeImport: options?.includeImport ?? true,\n namespace: options?.namespace ?? '',\n minify: options?.minify ?? false,\n selector: options?.selector,\n mediaQuery: options?.mediaQuery,\n variantDeclarations: [],\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n /**\n * Format tokens as Tailwind v4 @theme CSS variables\n */\n async formatTokens(tokens: ResolvedTokens, options: ResolvedTailwindOptions): Promise<string> {\n const lines: string[] = []\n const indent = options.minify ? '' : ' '\n const newline = options.minify ? '' : '\\n'\n const space = options.minify ? '' : ' '\n\n if (options.includeImport) {\n lines.push(`@import \"tailwindcss\";${newline}`)\n }\n\n // Emit @custom-variant declarations (auto-derived from non-base modifiers)\n if (options.variantDeclarations.length > 0) {\n if (options.includeImport) {\n lines.push(newline)\n }\n for (const declaration of options.variantDeclarations) {\n lines.push(`${declaration}${newline}`)\n }\n }\n\n if (options.includeImport || options.variantDeclarations.length > 0) {\n lines.push(newline)\n }\n\n const themeDirective = options.namespace ? `@theme namespace(${options.namespace})` : '@theme'\n\n lines.push(`${themeDirective}${space}{${newline}`)\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const varName = this.buildVariableName(token)\n const varValue = this.formatValue(token)\n\n const deprecationComment = buildTokenDeprecationComment(token, 'tailwind')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'tailwind')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}${newline}`)\n }\n\n lines.push(`${indent}--${varName}:${space}${varValue};${newline}`)\n }\n\n lines.push(`}${newline}`)\n\n const cssString = lines.join('')\n return options.minify ? cssString : await this.formatWithPrettier(cssString)\n }\n\n /**\n * Format tokens as plain CSS custom property overrides inside a selector block.\n * Used for modifier overrides (e.g., dark mode) appended after the @theme block.\n */\n async formatOverrideBlock(\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ): Promise<string> {\n const indent = minify ? '' : ' '\n const newline = minify ? '' : '\\n'\n const space = minify ? '' : ' '\n const hasMediaQuery = mediaQuery !== ''\n const tokenIndent = hasMediaQuery ? indent + indent : indent\n\n const lines: string[] = []\n\n if (hasMediaQuery) {\n lines.push(`@media ${mediaQuery}${space}{${newline}`)\n lines.push(`${indent}${selector}${space}{${newline}`)\n } else {\n lines.push(`${selector}${space}{${newline}`)\n }\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const varName = this.buildVariableName(token)\n const varValue = this.formatValue(token)\n\n const deprecationComment = buildTokenDeprecationComment(token, 'tailwind')\n if (deprecationComment) {\n lines.push(`${tokenIndent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'tailwind')\n if (descriptionComment) {\n lines.push(`${tokenIndent}${descriptionComment}${newline}`)\n }\n\n lines.push(`${tokenIndent}--${varName}:${space}${varValue};${newline}`)\n }\n\n if (hasMediaQuery) {\n lines.push(`${indent}}${newline}`)\n lines.push(`}${newline}`)\n } else {\n lines.push(`}${newline}`)\n }\n\n return lines.join('')\n }\n\n private buildVariableName(token: ResolvedToken): string {\n const prefix = TAILWIND_NAMESPACE_MAP[token.$type ?? '']\n if (!prefix) {\n return token.name\n }\n\n // If token name already starts with the prefix, don't double-prefix\n const nameLower = token.name.toLowerCase()\n const prefixLower = prefix.toLowerCase()\n if (nameLower.startsWith(`${prefixLower}-`) || nameLower.startsWith(`${prefixLower}.`)) {\n return token.name\n }\n\n return `${prefix}-${token.name}`\n }\n\n private formatValue(token: ResolvedToken): string {\n const value = token.$value\n\n if (token.$type === 'color' && isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (token.$type === 'dimension' && isDimensionObject(value)) {\n return dimensionObjectToString(value as DimensionValue)\n }\n\n if (token.$type === 'duration' && isDurationObject(value)) {\n return durationObjectToString(value)\n }\n\n if (token.$type === 'fontFamily') {\n if (Array.isArray(value)) {\n return value\n .map((v) => (typeof v === 'string' && v.includes(' ') ? `\"${v}\"` : v))\n .join(', ')\n }\n return typeof value === 'string' ? value : String(value)\n }\n\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `cubic-bezier(${value.join(', ')})`\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n return String(value)\n }\n\n private formatShadowValue(value: unknown): string {\n if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') {\n return value.map((s) => this.formatSingleShadow(s as Record<string, unknown>)).join(', ')\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>)\n }\n\n return String(value)\n }\n\n private formatSingleShadow(shadow: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (shadow.inset === true) {\n parts.push('inset')\n }\n\n if (isDimensionObject(shadow.offsetX)) {\n parts.push(dimensionObjectToString(shadow.offsetX as DimensionValue))\n }\n if (isDimensionObject(shadow.offsetY)) {\n parts.push(dimensionObjectToString(shadow.offsetY as DimensionValue))\n }\n if (isDimensionObject(shadow.blur)) {\n parts.push(dimensionObjectToString(shadow.blur as DimensionValue))\n }\n if (shadow.spread != null && isDimensionObject(shadow.spread)) {\n parts.push(dimensionObjectToString(shadow.spread as DimensionValue))\n }\n if (isColorObject(shadow.color)) {\n parts.push(colorObjectToHex(shadow.color))\n } else if (shadow.color != null) {\n parts.push(String(shadow.color))\n }\n\n return parts.join(' ')\n }\n\n private async formatWithPrettier(css: string): Promise<string> {\n try {\n return await prettier.format(css, {\n parser: 'css',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n })\n } catch {\n return css\n }\n }\n\n private async formatBundle(\n context: RenderContext,\n options: ResolvedTailwindOptions,\n ): Promise<string> {\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens,\n modifierInputs,\n isBase: isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsTailwind(\n bundleData,\n options,\n async (tokens, opts) => await this.formatTokens(tokens, opts),\n async (tokens, selector, mediaQuery, minify) =>\n await this.formatOverrideBlock(tokens, selector, mediaQuery, minify),\n )\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: ResolvedTailwindOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone Tailwind',\n )\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n}\n\n/**\n * Tailwind CSS v4 renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'tailwind',\n * renderer: tailwindRenderer(),\n * options: {\n * preset: 'bundle',\n * includeImport: true,\n * },\n * file: 'theme.css'\n * }]\n * ```\n */\nexport function tailwindRenderer(): Renderer<TailwindRendererOptions> {\n const rendererInstance = new TailwindRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as TailwindRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Tailwind CSS v4 bundler for multi-theme output\n *\n * Bundles multiple permutations into a single Tailwind @theme file.\n * The base permutation tokens are included in @theme to define the utility\n * vocabulary. Non-base permutations (e.g., dark mode) are appended as plain\n * CSS custom property overrides with configurable selectors/media queries.\n */\n\nimport type { TailwindRendererOptions } from '@renderers/tailwind'\nimport type { MediaQueryFunction, SelectorFunction } from '@renderers/types'\nimport { BasePermutationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@tokens/types'\n\nimport type { BundleDataItem } from './types'\nimport {\n countModifierDifferences,\n getExpectedSource,\n normalizeModifierInputs,\n parseModifierSource,\n resolveMediaQuery,\n resolveSelector,\n stripInternalMetadata,\n} from './utils'\n\ntype ResolvedTailwindOptions = {\n preset: 'bundle' | 'standalone'\n includeImport: boolean\n namespace: string\n minify: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n variantDeclarations: string[]\n}\n\n/**\n * Bundle tokens as a Tailwind v4 @theme CSS file with modifier overrides\n *\n * Strategy:\n * - Base permutation tokens go into @theme (defines the Tailwind utility vocabulary)\n * - Non-base permutations are appended as plain CSS custom property overrides\n * using configurable selectors/media queries, consistent with the CSS renderer\n */\nexport async function bundleAsTailwind(\n bundleData: BundleDataItem[],\n options: ResolvedTailwindOptions | TailwindRendererOptions,\n formatThemeTokens: (tokens: ResolvedTokens, options: ResolvedTailwindOptions) => Promise<string>,\n formatOverrideBlock: (\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ) => Promise<string>,\n): Promise<string> {\n const baseItem = bundleData.find((item) => item.isBase)\n if (!baseItem) {\n throw new BasePermutationError('Base permutation not found in bundle data')\n }\n\n const resolvedOpts = resolveOptions(options)\n const cssBlocks: string[] = []\n\n // Collect @custom-variant declarations from non-base permutations\n const variantDeclarations = collectVariantDeclarations(bundleData, baseItem, resolvedOpts)\n const themeOpts: ResolvedTailwindOptions = { ...resolvedOpts, variantDeclarations }\n\n // Base permutation: format as @theme block\n const baseTokens = stripInternalMetadata(baseItem.tokens)\n const themeBlock = await formatThemeTokens(baseTokens, themeOpts)\n cssBlocks.push(themeBlock)\n\n // Non-base permutations: format as plain CSS override blocks\n for (const item of bundleData) {\n if (item.isBase) {\n continue\n }\n\n const block = await formatModifierOverride(item, baseItem, resolvedOpts, formatOverrideBlock)\n if (block) {\n cssBlocks.push(block)\n }\n }\n\n return cssBlocks.join('\\n')\n}\n\nfunction resolveModifierSelectorAndMedia(\n options: ResolvedTailwindOptions,\n modifier: string,\n context: string,\n modifierInputs: Record<string, string>,\n): { selector: string; mediaQuery: string } {\n const normalized = normalizeModifierInputs(modifierInputs)\n return {\n selector: resolveSelector(options.selector, modifier, context, false, normalized),\n mediaQuery: resolveMediaQuery(options.mediaQuery, modifier, context, false, normalized),\n }\n}\n\nasync function formatModifierOverride(\n { tokens, modifierInputs }: BundleDataItem,\n baseItem: BundleDataItem,\n options: ResolvedTailwindOptions,\n formatOverrideBlock: (\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ) => Promise<string>,\n): Promise<string | undefined> {\n const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Value-based filtering catches alias tokens that change indirectly\n // (e.g., background-base references gray.25 which differs in dark mode).\n const tokensToInclude = filterTokensByValueChange(tokens, baseItem.tokens)\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n const { selector, mediaQuery } = resolveModifierSelectorAndMedia(\n options,\n modifier,\n context,\n modifierInputs,\n )\n\n const css = await formatOverrideBlock(cleanTokens, selector, mediaQuery, options.minify)\n return `/* Modifier: ${modifier}=${context} */\\n${css}`\n}\n\n/**\n * Filter tokens to those whose resolved value differs from the base permutation.\n *\n * Unlike source-based filtering, this catches alias tokens that change\n * indirectly through reference resolution (e.g., background-base references\n * gray.25 which has a different value in dark mode).\n */\nfunction filterTokensByValueChange(\n currentTokens: ResolvedTokens,\n baseTokens: ResolvedTokens,\n): ResolvedTokens {\n const changed: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(currentTokens)) {\n const baseToken = baseTokens[name]\n if (!baseToken) {\n changed[name] = token\n continue\n }\n if (JSON.stringify(token.$value) !== JSON.stringify(baseToken.$value)) {\n changed[name] = token\n }\n }\n\n return changed\n}\n\n/**\n * Derive @custom-variant declarations from non-base permutations.\n *\n * For each non-base permutation that differs by a single modifier,\n * builds a Tailwind v4 @custom-variant line using the resolved selector\n * or media query. Variant names follow the {modifier}-{context} format\n * (e.g. \"theme-dark\") to avoid collisions across modifier dimensions.\n */\nfunction collectVariantDeclarations(\n bundleData: BundleDataItem[],\n baseItem: BundleDataItem,\n options: ResolvedTailwindOptions,\n): string[] {\n const declarations: string[] = []\n\n for (const item of bundleData) {\n if (item.isBase) {\n continue\n }\n\n const differenceCount = countModifierDifferences(item.modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n continue\n }\n\n const expectedSource = getExpectedSource(item.modifierInputs, baseItem.modifierInputs)\n const [modifier, context] = parseModifierSource(expectedSource)\n const variantName = `${modifier}-${context}`\n const normalized = normalizeModifierInputs(item.modifierInputs)\n\n const mediaQuery = resolveMediaQuery(options.mediaQuery, modifier, context, false, normalized)\n if (mediaQuery !== '') {\n declarations.push(`@custom-variant ${variantName} (@media ${mediaQuery});`)\n continue\n }\n\n const selector = resolveSelector(options.selector, modifier, context, false, normalized)\n declarations.push(`@custom-variant ${variantName} (&:where(${selector}, ${selector} *));`)\n }\n\n return declarations\n}\n\nfunction resolveOptions(\n options: ResolvedTailwindOptions | TailwindRendererOptions,\n): ResolvedTailwindOptions {\n return {\n preset: options.preset ?? 'bundle',\n includeImport: options.includeImport ?? true,\n namespace: options.namespace ?? '',\n minify: options.minify ?? false,\n selector: options.selector,\n mediaQuery: options.mediaQuery,\n variantDeclarations: [],\n }\n}\n","/**\n * @license\n * Copyright (c) 2025 Dispersa Contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @fileoverview Builder functions for creating output configurations\n *\n * These builder functions provide a convenient way to create OutputConfig objects\n * with flattened options for better DX and discoverability.\n */\n\nimport type { FileFunction, LifecycleHooks, OutputConfig } from '@config/index'\nimport type { Filter } from '@processing/filters/types'\nimport { nameKebabCase } from '@processing/transforms/built-in/name-transforms'\nimport type { Transform } from '@processing/transforms/types'\nimport { androidRenderer } from '@renderers/android'\nimport { cssRenderer } from '@renderers/css'\nimport { iosRenderer } from '@renderers/ios'\nimport { jsRenderer } from '@renderers/js-module'\nimport { jsonRenderer } from '@renderers/json'\nimport { tailwindRenderer } from '@renderers/tailwind'\nimport type {\n AndroidRendererOptions,\n CssRendererOptions,\n IosRendererOptions,\n JsModuleRendererOptions,\n JsonRendererOptions,\n TailwindRendererOptions,\n} from '@renderers/types'\n\n// ============================================================================\n// BASE BUILDER CONFIGURATION\n// ============================================================================\n\n/**\n * Base configuration shared across all builders\n */\ntype BuilderConfigBase = {\n /** Unique identifier for this output */\n name: string\n\n /** Output file path (string, pattern with {placeholders}, or function) - optional for in-memory mode */\n file?: string | FileFunction\n\n /** Array of transform functions to apply */\n transforms?: Transform[]\n\n /** Array of filter functions to apply */\n filters?: Filter[]\n\n /** Per-output lifecycle hooks */\n hooks?: LifecycleHooks\n}\n\n// ============================================================================\n// CSS BUILDER\n// ============================================================================\n\n/**\n * CSS builder configuration with flattened options\n */\nexport type CssBuilderConfig = BuilderConfigBase & CssRendererOptions\n\n/**\n * Create CSS output configuration with flattened options\n *\n * Creates an OutputConfig for CSS custom properties output. All CSS-specific options\n * (selector, mediaQuery, etc.) are provided at the top level alongside common options\n * like name and file for improved discoverability.\n *\n * @param config - CSS builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'bundle' for CSS, meaning all themes are combined into\n * one file with appropriate selectors. Use preset: 'standalone' for separate files.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `build()`.\n *\n * @example Basic CSS bundle with transforms\n * ```typescript\n * import { css } from 'dispersa'\n * import { colorToHex } from 'dispersa/transforms'\n *\n * // nameKebabCase() is applied automatically before your transforms\n * const config = css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [colorToHex()]\n * })\n * ```\n *\n * @example Standalone CSS with filters\n * ```typescript\n * import { css } from 'dispersa'\n * import { byType } from 'dispersa/filters'\n *\n * const config = css({\n * name: 'css-colors',\n * file: 'colors-{theme}.css',\n * preset: 'standalone',\n * selector: ':root',\n * filters: [byType('color')]\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { css } from 'dispersa'\n *\n * const config = css({\n * name: 'css',\n * preset: 'bundle',\n * selector: ':root'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function css(config: CssBuilderConfig): OutputConfig<CssRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'bundle',\n ...rendererOptions\n }: CssBuilderConfig = config\n\n return {\n name,\n file,\n renderer: cssRenderer(),\n options: { preset, ...rendererOptions },\n transforms: [nameKebabCase(), ...(transforms ?? [])],\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// JSON BUILDER\n// ============================================================================\n\n/**\n * JSON builder configuration with flattened options\n */\nexport type JsonBuilderConfig = BuilderConfigBase & JsonRendererOptions\n\n/**\n * Create JSON output configuration with flattened options\n *\n * Creates an OutputConfig for JSON token output. All JSON-specific options\n * (structure, includeMetadata, etc.) are provided at the top level for improved\n * discoverability and cleaner configuration.\n *\n * @param config - JSON builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'standalone' for JSON, meaning separate files per theme.\n * Use preset: 'bundle' to combine all themes into one file with metadata.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `build()`.\n *\n * @example Standalone JSON with flat structure\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json',\n * file: 'tokens-{theme}.json',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ```\n *\n * @example Bundle JSON with metadata\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json-bundle',\n * file: 'tokens.json',\n * preset: 'bundle',\n * structure: 'nested',\n * includeMetadata: true\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function json(config: JsonBuilderConfig): OutputConfig<JsonRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: jsonRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// JS MODULE BUILDER\n// ============================================================================\n\n/**\n * JS module builder configuration with flattened options\n */\nexport type JsBuilderConfig = BuilderConfigBase & JsModuleRendererOptions\n\n/**\n * Create JavaScript module output configuration with flattened options\n *\n * Creates an OutputConfig for JavaScript/TypeScript module output. All JS-specific\n * options (moduleName, generateHelper, etc.) are provided at the top level for\n * improved discoverability and cleaner configuration.\n *\n * @param config - JS module builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'standalone' for JS, meaning separate files per theme.\n * Use preset: 'bundle' with generateHelper: true to create a single file with\n * a helper function for dynamic theme switching.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `build()`.\n *\n * @example Bundle JS with helper function\n * ```typescript\n * import { js } from 'dispersa'\n * import { nameCamelCase } from 'dispersa/transforms'\n *\n * const config = js({\n * name: 'js',\n * file: 'tokens.js',\n * preset: 'bundle',\n * moduleName: 'tokens',\n * generateHelper: true,\n * transforms: [nameCamelCase()]\n * })\n * ```\n *\n * @example Standalone JS modules\n * ```typescript\n * import { js } from 'dispersa'\n *\n * const config = js({\n * name: 'js-tokens',\n * file: 'tokens-{theme}.js',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { js } from 'dispersa'\n *\n * const config = js({\n * name: 'js',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function js(config: JsBuilderConfig): OutputConfig<JsModuleRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: jsRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// TAILWIND CSS v4 BUILDER\n// ============================================================================\n\n/**\n * Tailwind CSS v4 builder configuration with flattened options\n */\nexport type TailwindBuilderConfig = BuilderConfigBase & TailwindRendererOptions\n\n/**\n * Create Tailwind CSS v4 output configuration with flattened options\n *\n * Creates an OutputConfig for Tailwind v4 @theme CSS output. All Tailwind-specific\n * options (includeImport, namespace, etc.) are provided at the top level for\n * improved discoverability.\n *\n * @param config - Tailwind builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'bundle' for Tailwind, meaning the base permutation tokens\n * are used to define the @theme vocabulary. Use preset: 'standalone' for separate files.\n *\n * @example Bundle Tailwind theme with transforms\n * ```typescript\n * import { tailwind } from 'dispersa'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const config = tailwind({\n * name: 'tailwind',\n * file: 'theme.css',\n * preset: 'bundle',\n * includeImport: true,\n * transforms: [nameKebabCase()]\n * })\n * ```\n *\n * @example Standalone files per theme\n * ```typescript\n * import { tailwind } from 'dispersa'\n *\n * const config = tailwind({\n * name: 'tailwind',\n * file: 'theme-{theme}.css',\n * preset: 'standalone',\n * includeImport: false,\n * })\n * ```\n */\nexport function tailwind(config: TailwindBuilderConfig): OutputConfig<TailwindRendererOptions> {\n const { name, file, transforms, filters, hooks, preset = 'bundle', ...rendererOptions } = config\n\n return {\n name,\n file,\n renderer: tailwindRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// iOS / SWIFTUI BUILDER\n// ============================================================================\n\n/**\n * iOS/SwiftUI builder configuration with flattened options\n */\nexport type IosBuilderConfig = BuilderConfigBase & IosRendererOptions\n\n/**\n * Create iOS/SwiftUI output configuration with flattened options\n *\n * Creates an OutputConfig for Swift code generation targeting SwiftUI (iOS 17+, Swift 6).\n * All iOS-specific options (accessLevel, structure, etc.) are provided at the top level.\n *\n * @param config - iOS builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * Only standalone preset is supported. Each permutation generates a separate Swift file.\n *\n * @example Enum-based SwiftUI tokens\n * ```typescript\n * import { ios } from 'dispersa'\n *\n * const config = ios({\n * name: 'ios',\n * file: 'DesignTokens-{theme}.swift',\n * accessLevel: 'public',\n * structure: 'enum',\n * enumName: 'DesignTokens',\n * colorSpace: 'sRGB',\n * })\n * ```\n *\n * @example Grouped SwiftUI tokens (namespace enum + extensions per group)\n * ```typescript\n * import { ios } from 'dispersa'\n *\n * const config = ios({\n * name: 'ios-tokens',\n * file: 'Tokens-{theme}.swift',\n * structure: 'grouped',\n * colorSpace: 'displayP3',\n * })\n * ```\n */\nexport function ios(config: IosBuilderConfig): OutputConfig<IosRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: iosRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// ANDROID / JETPACK COMPOSE BUILDER\n// ============================================================================\n\n/**\n * Android/Jetpack Compose builder configuration with flattened options\n */\nexport type AndroidBuilderConfig = BuilderConfigBase & AndroidRendererOptions\n\n/**\n * Create Android/Jetpack Compose output configuration with flattened options\n *\n * Creates an OutputConfig for Kotlin code generation targeting Jetpack Compose\n * with Material 3. All Android-specific options (packageName, objectName, etc.)\n * are provided at the top level.\n *\n * @experimental This builder is experimental. Options and generated output may change.\n * @param config - Android builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The `packageName` option is required (Kotlin convention). Supports both\n * `'standalone'` (default, one file per permutation) and `'bundle'` (all\n * permutations in a single file) presets.\n *\n * @example Standalone Compose tokens with hex colors\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android',\n * file: 'DesignTokens-{theme}.kt',\n * packageName: 'com.example.tokens',\n * objectName: 'DesignTokens',\n * colorFormat: 'argb_hex',\n * })\n * ```\n *\n * @example Flat structure with Display P3 colors\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android-tokens',\n * file: 'Tokens-{theme}.kt',\n * packageName: 'com.example.design',\n * structure: 'flat',\n * colorSpace: 'displayP3',\n * colorFormat: 'argb_float',\n * })\n * ```\n *\n * @example Bundle mode — all themes in one file\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android-bundle',\n * file: 'DesignTokens.kt',\n * packageName: 'com.example.tokens',\n * preset: 'bundle',\n * structure: 'flat',\n * })\n * ```\n */\nexport function android(config: AndroidBuilderConfig): OutputConfig<AndroidRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: androidRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n","/**\n * @fileoverview Renderer system types for token output generation\n *\n * Note: renderers/types and config have a mutual type-only dependency.\n * RenderContext references OutputConfig, while OutputConfig references\n * Renderer/FormatOptions. This is acceptable because type imports are\n * erased at runtime and the coupling is genuine.\n */\n\nimport type { OutputConfig } from '@config/index'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport type { ResolvedTokens } from '@tokens/types'\n\n/**\n * Generic options object for renderers\n *\n * Each renderer can define its own specific options that extend this base type.\n */\nexport type FormatOptions = Record<string, unknown>\n\n/**\n * Data for a single permutation (combination of modifier values)\n */\nexport type PermutationData = {\n tokens: ResolvedTokens\n modifierInputs: ModifierInputs\n}\n\n/**\n * Metadata for renderers to reason about modifier dimensions.\n */\nexport type RenderMeta = {\n dimensions: string[]\n defaults: Record<string, string>\n basePermutation: ModifierInputs\n}\n\n/**\n * Context provided to renderer formatters.\n */\nexport type RenderContext<TOptions extends FormatOptions = FormatOptions> = {\n permutations: PermutationData[]\n output: OutputConfig<TOptions>\n resolver: ResolverDocument\n meta: RenderMeta\n buildPath?: string\n}\n\n/**\n * Multi-file output representation for renderers.\n */\nexport type OutputTree = {\n kind: 'outputTree'\n files: Record<string, string>\n}\n\nexport type RenderOutput = string | OutputTree\n\n/**\n * Output from a build operation\n */\nexport type BuildOutput = {\n name: string\n /** File path where output was written (undefined for in-memory mode) */\n path?: string\n content: string\n}\n\n/**\n * Renderer definition for converting tokens to output format\n *\n * Renderers implement a single `format()` method that can return either\n * a single string or an OutputTree for multi-file outputs.\n *\n * @example Simple renderer with format()\n * ```typescript\n * const scssRenderer: Renderer = {\n * format: (context) => {\n * const tokens = context.permutations[0]?.tokens ?? {}\n * return Object.entries(tokens)\n * .map(([name, token]) => `$${name}: ${token.$value};`)\n * .join('\\n')\n * },\n * }\n * ```\n */\nexport type Renderer<TOptions extends FormatOptions = FormatOptions> = {\n /**\n * Preset identifier (e.g., 'bundle', 'standalone', 'modifier')\n * Indicates which variant of the renderer this is\n */\n preset?: string\n\n /**\n * Convert tokens to output content.\n *\n * Renderers receive all resolved permutations and modifier metadata via context.\n * They can return either a single string (single output file) or an OutputTree\n * for multi-file outputs.\n */\n format: (\n context: RenderContext<TOptions>,\n options?: TOptions,\n ) => RenderOutput | Promise<RenderOutput>\n}\n\n/**\n * Helper for defining custom renderers with full type inference.\n *\n * Works like Vue's `defineComponent()` or Vite's `defineConfig()` --\n * an identity function that enables TypeScript to infer the options type\n * from the generic parameter, giving you autocomplete and type-checking\n * on both `context` and `options` inside `format()`.\n *\n * @example\n * ```typescript\n * import { defineRenderer } from 'dispersa/renderers'\n *\n * type MyOptions = { prefix: string; minify?: boolean }\n *\n * const myRenderer = defineRenderer<MyOptions>({\n * format(context, options) {\n * // options is typed as MyOptions | undefined\n * // context.output.options is typed as MyOptions | undefined\n * const prefix = options?.prefix ?? 'token'\n * return Object.entries(context.permutations[0]?.tokens ?? {})\n * .map(([name, token]) => `${prefix}-${name}: ${token.$value}`)\n * .join('\\n')\n * },\n * })\n * ```\n */\nexport function defineRenderer<T extends FormatOptions>(renderer: Renderer<T>): Renderer<T> {\n return renderer\n}\n\n/**\n * Function type for dynamically generating CSS selectors based on modifier context\n *\n * @param modifierName - Name of the modifier (e.g., 'theme', 'breakpoint')\n * @param context - Context value of the modifier (e.g., 'dark', 'mobile')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns CSS selector string (e.g., '[data-theme=\"dark\"]')\n */\nexport type SelectorFunction = (\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n) => string\n\n/**\n * Function type for dynamically generating media queries based on modifier context\n *\n * @param modifierName - Name of the modifier (e.g., 'theme', 'breakpoint')\n * @param context - Context value of the modifier (e.g., 'dark', 'mobile')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns Media query string (e.g., '(max-width: 768px)') or empty string for no media query\n */\nexport type MediaQueryFunction = (\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n) => string\n\n/**\n * Options for CSS custom properties renderer\n *\n * Controls how tokens are converted to CSS custom properties (CSS variables).\n *\n * **Note:** Token naming is controlled through transforms, not renderer options.\n * Use `nameKebabCase()` and `namePrefix()` for naming control.\n *\n * @example String-based selectors\n * ```typescript\n * css({\n * name: 'tokens',\n * file: 'tokens.css',\n * transforms: [nameKebabCase(), namePrefix('ds-')],\n * preset: 'bundle',\n * selector: ':root',\n * })\n * ```\n *\n * @example Function-based selectors\n * ```typescript\n * outputs: [{\n * renderer: cssRenderer(),\n * options: {\n * preset: 'bundle',\n * selector: (modifier, context, isBase, allInputs) => {\n * if (isBase) return ':root'\n * return `[data-${modifier}=\"${context}\"]`\n * },\n * mediaQuery: (modifier, context) => {\n * if (modifier === 'breakpoint' && context === 'mobile') {\n * return '(max-width: 768px)'\n * }\n * return ''\n * }\n * }\n * }]\n * ```\n */\nexport type CssRendererOptions = {\n preset?: 'bundle' | 'standalone' | 'modifier'\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n minify?: boolean\n preserveReferences?: boolean\n}\n\n/**\n * Options for JSON renderer\n *\n * Controls the structure and formatting of JSON token output.\n *\n * @example\n * ```typescript\n * {\n * structure: 'flat',\n * minify: true,\n * includeMetadata: true\n * }\n * ```\n */\nexport type { JsonRendererOptions } from '@validation/config-schemas'\n\n/**\n * Options for JavaScript module renderer\n *\n * Generates JavaScript modules for direct import in applications.\n * Aligned with JSON renderer options for consistency.\n *\n * @example\n * ```typescript\n * {\n * structure: 'nested',\n * minify: false,\n * moduleName: 'designTokens'\n * }\n * ```\n */\nexport type { JsModuleRendererOptions } from '@validation/config-schemas'\n\n/**\n * Options for Tailwind CSS v4 renderer\n *\n * Generates CSS with @theme blocks for Tailwind v4+ design token integration.\n */\nexport type { TailwindRendererOptions } from './tailwind'\n\n/**\n * Options for iOS/SwiftUI renderer\n *\n * Generates Swift code targeting SwiftUI (iOS 17+, Swift 6).\n */\nexport type { IosRendererOptions } from './ios'\n\n/**\n * Options for Android/Jetpack Compose renderer\n *\n * Generates Kotlin code targeting Jetpack Compose with Material 3.\n *\n * @experimental This type is experimental. Properties and behavior may change.\n */\nexport type { AndroidRendererOptions } from './android'\n\n/**\n * Result of a token build operation\n *\n * Contains success status, generated output files, and any errors encountered.\n *\n * @example\n * ```typescript\n * const result = await build(config)\n * if (result.success) {\n * result.outputs.forEach(output => {\n * console.log(`Generated ${output.name}: ${output.path}`)\n * })\n * } else {\n * console.error('Build errors:', result.errors)\n * }\n * ```\n */\n/**\n * Error code identifying the type of build error\n */\nexport type ErrorCode =\n | 'TOKEN_REFERENCE'\n | 'CIRCULAR_REFERENCE'\n | 'VALIDATION'\n | 'FILE_OPERATION'\n | 'CONFIGURATION'\n | 'BASE_PERMUTATION'\n | 'MODIFIER'\n | 'UNKNOWN'\n\n/**\n * Structured error from a build operation\n *\n * Preserves typed context from the error hierarchy so consumers\n * can programmatically react to specific failure modes.\n */\nexport type BuildError = {\n /** Human-readable error message */\n message: string\n\n /** Machine-readable error code identifying the failure type */\n code: ErrorCode\n\n /** File path where the error occurred (for file operation errors) */\n path?: string\n\n /** Token path where the error occurred (e.g. 'color.primary') */\n tokenPath?: string\n\n /** Error severity */\n severity: 'error' | 'warning'\n\n /** Suggested alternatives (e.g. similar token names for TOKEN_REFERENCE errors) */\n suggestions?: string[]\n}\n\nexport type BuildResult = {\n /** Whether the build completed successfully */\n success: boolean\n\n /** Array of generated output files */\n outputs: BuildOutput[]\n\n /** Array of errors encountered during build (only present if success is false) */\n errors?: BuildError[]\n}\n","/**\n * @license\n * Copyright (c) 2025 Dispersa Contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @fileoverview Dispersa - DTCG Design Token Processor\n * Main public API exports\n */\n\n// ============================================================================\n// PRIMARY API\n// ============================================================================\n\nexport {\n build,\n buildOrThrow,\n buildPermutation,\n resolveTokens,\n lint,\n resolveAllPermutations,\n generateTypes,\n} from './dispersa'\n\nexport type { LintOptions } from './dispersa'\n\n// ============================================================================\n// PUBLIC TYPES\n// ============================================================================\n\n// Config types\nexport type {\n OutputConfig,\n BuildConfig,\n FileFunction,\n LifecycleHooks,\n DispersaOptions,\n} from '@config/index'\n\n// Validation types\nexport type { ValidationMode, ValidationOptions } from '@shared/types/validation'\n\n// Token types\nexport type {\n ResolvedToken,\n ResolvedTokens,\n DesignTokenValue,\n TokenValue,\n TokenValueReference,\n TokenType,\n ColorToken,\n DimensionToken,\n ShadowToken,\n DurationToken,\n TypographyToken,\n BorderToken,\n TransitionToken,\n GradientToken,\n ColorValueObject,\n ColorValue,\n ColorSpace,\n ColorComponent,\n DimensionValue,\n DurationValue,\n FontFamilyValue,\n FontWeightValue,\n CubicBezierValue,\n ShadowValueObject,\n TypographyValue,\n BorderValue,\n StrokeStyleValue,\n StrokeStyleValueObject,\n TransitionValue,\n GradientValue,\n GradientStop,\n} from '@tokens/types'\n\n// Token type guards\nexport {\n isColorToken,\n isDimensionToken,\n isShadowToken,\n isTypographyToken,\n isBorderToken,\n isDurationToken,\n isTransitionToken,\n isGradientToken,\n} from '@tokens/types'\n\n// Transform types\nexport type { Transform } from '@processing/transforms/types'\n\n// Filter types\nexport type { Filter } from '@processing/filters/types'\n\n// Preprocessor types\nexport type { Preprocessor } from '@processing/preprocessors/types'\n\n// Renderer types\nexport type {\n AndroidRendererOptions,\n BuildError,\n BuildOutput,\n BuildResult,\n CssRendererOptions,\n ErrorCode,\n FormatOptions,\n IosRendererOptions,\n JsModuleRendererOptions,\n JsonRendererOptions,\n MediaQueryFunction,\n OutputTree,\n PermutationData,\n Renderer,\n RenderContext,\n RenderMeta,\n RenderOutput,\n SelectorFunction,\n TailwindRendererOptions,\n} from '@renderers/types'\n\n// Resolver types\nexport type { ModifierInputs, ResolverDocument } from '@resolution/types'\n\n// ============================================================================\n// OUTPUT BUILDERS\n// ============================================================================\n\nexport { css, json, js, tailwind, ios, android } from './builders'\nexport type {\n AndroidBuilderConfig,\n CssBuilderConfig,\n IosBuilderConfig,\n JsBuilderConfig,\n JsonBuilderConfig,\n TailwindBuilderConfig,\n} from './builders'\n\n// ============================================================================\n// CUSTOM RENDERER HELPERS\n// ============================================================================\n\nexport { defineRenderer } from '@renderers/types'\nexport { outputTree, isOutputTree } from '@renderers/output-tree'\n\n// ============================================================================\n// ERROR CLASSES\n// ============================================================================\n\nexport {\n DispersaError,\n TokenReferenceError,\n CircularReferenceError,\n ValidationError,\n FileOperationError,\n ConfigurationError,\n BasePermutationError,\n ModifierError,\n LintError,\n} from '@shared/errors/index'\n"]}
1
+ {"version":3,"sources":["../src/shared/errors/index.ts","../src/shared/utils/token-utils.ts","../src/shared/utils/validation-handler.ts","../src/validation/dtcg-schemas/2025.10/format/group.json","../src/validation/dtcg-schemas/2025.10/format/groupOrToken.json","../src/validation/dtcg-schemas/2025.10/format/token.json","../src/validation/dtcg-schemas/2025.10/format/tokenType.json","../src/validation/dtcg-schemas/2025.10/format/values/border.json","../src/validation/dtcg-schemas/2025.10/format/values/color.json","../src/validation/dtcg-schemas/2025.10/format/values/cubicBezier.json","../src/validation/dtcg-schemas/2025.10/format/values/dimension.json","../src/validation/dtcg-schemas/2025.10/format/values/duration.json","../src/validation/dtcg-schemas/2025.10/format/values/fontFamily.json","../src/validation/dtcg-schemas/2025.10/format/values/fontWeight.json","../src/validation/dtcg-schemas/2025.10/format/values/gradient.json","../src/validation/dtcg-schemas/2025.10/format/values/number.json","../src/validation/dtcg-schemas/2025.10/format/values/shadow.json","../src/validation/dtcg-schemas/2025.10/format/values/strokeStyle.json","../src/validation/dtcg-schemas/2025.10/format/values/transition.json","../src/validation/dtcg-schemas/2025.10/format/values/typography.json","../src/validation/dtcg-schemas/2025.10/format.json","../src/validation/dtcg-schemas/2025.10/resolver/modifier.json","../src/validation/dtcg-schemas/2025.10/resolver/resolutionOrder.json","../src/validation/dtcg-schemas/2025.10/resolver/set.json","../src/validation/dtcg-schemas/2025.10/resolver.json","../src/validation/schemas.ts","../src/validation/config-schemas.ts","../src/validation/validator.ts","../src/validation/index.ts","../src/adapters/filesystem/resolver-parser.ts","../src/adapters/filesystem/resolver-loader.ts","../src/outputs/utils.ts","../src/outputs/metadata.ts","../src/outputs/js/presets/bundle.ts","../src/outputs/json/presets/bundle.ts","../src/codegen/type-generator.ts","../src/adapters/filesystem/type-writer.ts","../src/engine/build-orchestrator.ts","../src/shared/utils/error-utils.ts","../src/adapters/filesystem/file-utils.ts","../src/processing/apply.ts","../src/engine/output-processor.ts","../src/outputs/output-tree.ts","../src/engine/pipeline/token-pipeline.ts","../src/lint/plugin-loader.ts","../src/lint/lint-runner.ts","../src/shared/constants.ts","../src/resolution/alias-resolver.ts","../src/shared/utils/string-similarity.ts","../src/resolution/reference-resolver.ts","../src/resolution/resolution-engine.ts","../src/shared/utils/case-insensitive-map.ts","../src/resolution/modifier-input-processor.ts","../src/engine/token-parser.ts","../src/shared/utils/path-utils.ts","../src/engine/group-extension-resolver.ts","../src/dispersa.ts","../src/shared/token-types/types.ts","../src/processing/transforms/built-in/color-converter.ts","../src/processing/transforms/built-in/dimension-converter.ts","../src/processing/transforms/built-in/duration-converter.ts","../src/outputs/css/renderer.ts","../src/outputs/css/presets/bundle.ts","../src/outputs/js/renderer.ts","../src/outputs/json/renderer.ts","../src/outputs/tailwind/renderer.ts","../src/outputs/tailwind/presets/bundle.ts","../src/outputs/ios/renderer.ts","../src/outputs/android/renderer.ts","../src/outputs/types.ts","../src/processing/transforms/built-in/name-transforms.ts","../src/outputs/builders.ts","../src/index.ts"],"names":["DispersaError","TokenReferenceError","CircularReferenceError","ValidationError","FileOperationError","ConfigurationError","BasePermutationError","ModifierError","LintError","path","Ajv","addFormats","tokenErrors","path2","access","fsConstants","readFile","resolverDoc","path3","ResolverLoader","bundle_exports","init_bundle","indentStr","mkdir","writeFile","permutations","path4","path5","process","isAbsolute","resolve","createJiti","require","createRequire","JsonPointer","resolved","path6","formatHex8","formatHex","css","prettier","bundleAsJsModule","bundleAsJson","converter","r","g","b","toSRGB","toP3","kebabCase"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @fileoverview Error classes - Subpath export for dispersa/errors\n *\n * This is the public entry point when importing from 'dispersa/errors'.\n *\n * Error classes are intentionally kept as simple value objects with no\n * imports from utility modules. Suggestion formatting is done at call\n * sites to keep the error hierarchy dependency-free.\n *\n * @example\n * ```typescript\n * import { ValidationError, ConfigurationError } from 'dispersa/errors'\n *\n * throw new ValidationError('Invalid token', { message: 'Token missing $value' })\n * ```\n */\n\n/**\n * Base error class for all Dispersa errors\n */\nexport class DispersaError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'DispersaError'\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n}\n\n/**\n * Thrown when a token reference cannot be resolved\n *\n * @param referenceName - The token name that could not be found\n * @param suggestions - Similar token names for \"did you mean?\" hints\n * @param message - Optional custom message (overrides auto-generated message)\n */\nexport class TokenReferenceError extends DispersaError {\n constructor(\n public referenceName: string,\n public suggestions: string[] = [],\n message?: string,\n ) {\n const hint = TokenReferenceError.formatHint(suggestions)\n super(\n message ??\n `Token reference resolution failed: '${referenceName}'. Token does not exist.${hint}`,\n )\n this.name = 'TokenReferenceError'\n }\n\n private static formatHint(suggestions: string[]): string {\n if (suggestions.length === 0) {\n return ''\n }\n if (suggestions.length === 1) {\n return ` Did you mean \"${suggestions[0]}\"?`\n }\n const quoted = suggestions.map((s) => `\"${s}\"`)\n const last = quoted.pop()!\n return ` Did you mean ${quoted.join(', ')} or ${last}?`\n }\n}\n\n/**\n * Thrown when a circular reference is detected\n */\nexport class CircularReferenceError extends DispersaError {\n constructor(\n public tokenName: string,\n public referencePath: string[],\n ) {\n super(\n `Token resolution failed: '${tokenName}'. Circular reference detected in path: ${referencePath.join(' -> ')}`,\n )\n this.name = 'CircularReferenceError'\n }\n}\n\n/**\n * Thrown when validation fails\n */\nexport class ValidationError extends DispersaError {\n constructor(\n message: string,\n public errors: { message: string; path?: string }[],\n ) {\n super(message)\n this.name = 'ValidationError'\n }\n}\n\n/**\n * Thrown when file operations fail\n */\nexport class FileOperationError extends DispersaError {\n constructor(\n public operation: 'read' | 'write',\n public filePath: string,\n public originalError: Error,\n ) {\n super(`Failed to ${operation} file: ${filePath}. ${originalError.message}`)\n this.name = 'FileOperationError'\n }\n}\n\n/**\n * Thrown when a build configuration is invalid\n */\nexport class ConfigurationError extends DispersaError {\n constructor(message: string) {\n super(message)\n this.name = 'ConfigurationError'\n }\n}\n\n/**\n * Thrown when base permutation cannot be determined\n */\nexport class BasePermutationError extends DispersaError {\n constructor(\n message = 'Base permutation determination failed. Define a default modifier in resolver.',\n ) {\n super(message)\n this.name = 'BasePermutationError'\n }\n}\n\n/**\n * Thrown when an unknown modifier or context is used\n *\n * @param modifierName - Name of the modifier that failed validation\n * @param contextValue - The invalid context value (if applicable)\n * @param availableValues - Valid options (context names or modifier names) for the error message\n */\nexport class ModifierError extends DispersaError {\n constructor(\n public modifierName: string,\n public contextValue?: string,\n public availableValues: string[] = [],\n ) {\n const available = availableValues.length > 0 ? ` Available: ${availableValues.join(', ')}.` : ''\n\n const message =\n contextValue != null && contextValue !== ''\n ? `Modifier validation failed: '${modifierName}'. Invalid context '${contextValue}'.${available}`\n : `Modifier validation failed: '${modifierName}'. Modifier not defined in resolver.${available}`\n super(message)\n this.name = 'ModifierError'\n }\n}\n\n/**\n * Thrown when lint errors are found and failOnError is true\n *\n * @param issues - Array of lint issues that caused the error\n */\nexport class LintError extends DispersaError {\n constructor(\n public issues: Array<{\n ruleId: string\n severity: 'error' | 'warn'\n message: string\n tokenName: string\n tokenPath: string[]\n }>,\n ) {\n const errorCount = issues.filter((i) => i.severity === 'error').length\n const warningCount = issues.filter((i) => i.severity === 'warn').length\n super(`Lint failed with ${errorCount} error(s) and ${warningCount} warning(s).`)\n this.name = 'LintError'\n }\n}\n","/**\n * @fileoverview Token utility functions\n */\n\nimport type {\n InternalResolvedTokens,\n ResolvedToken,\n ResolvedTokens,\n TokenValue,\n} from '@shared/token-types'\n\n/**\n * Format deprecation message for a token\n *\n * Generates a standardized deprecation message that can be used in comments,\n * descriptions, or warnings. Handles both boolean and string deprecation values.\n *\n * @param token - Token with optional deprecation information\n * @param description - Optional existing description to prepend deprecation info to\n * @param format - Output format: 'comment' for CSS comments, 'bracket' for [DEPRECATED] prefix\n * @returns Formatted deprecation message or description with deprecation prefix\n *\n * @example\n * ```typescript\n * // CSS comment format\n * formatDeprecationMessage(token, '', 'comment')\n * // Returns: \"DEPRECATED: Use new-token instead\"\n *\n * // Bracket format\n * formatDeprecationMessage(token, 'Primary color', 'bracket')\n * // Returns: \"[DEPRECATED: Use new-token instead] Primary color\"\n * ```\n */\nexport function formatDeprecationMessage(\n token: ResolvedToken,\n description: string = '',\n format: 'comment' | 'bracket' = 'bracket',\n): string {\n if (token.$deprecated == null || token.$deprecated === false) {\n return description\n }\n\n const deprecationMsg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n\n if (format === 'comment') {\n const msg = deprecationMsg ? ` ${deprecationMsg}` : ''\n return `DEPRECATED${msg}`\n }\n\n const msg = deprecationMsg ? `: ${deprecationMsg}` : ''\n const prefix = `[DEPRECATED${msg}]`\n return description ? `${prefix} ${description}` : prefix\n}\n\n/**\n * Strip internal metadata from tokens before public output\n */\nexport function stripInternalTokenMetadata(tokens: InternalResolvedTokens): ResolvedTokens {\n const cleaned: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n const { _isAlias: _alias, _sourceModifier: _source, _sourceSet: _sourceSet, ...rest } = token\n cleaned[name] = rest\n }\n\n return cleaned\n}\n\n/**\n * Get sorted token entries for deterministic output ordering\n */\nexport function getSortedTokenEntries(\n tokens: ResolvedTokens,\n): Array<[name: string, token: ResolvedToken]> {\n return Object.entries(tokens).sort(([nameA], [nameB]) => nameA.localeCompare(nameB))\n}\n\n/**\n * Build a nested object from resolved tokens using their path hierarchy.\n *\n * Shared between JSON and JS renderers that need to convert flat tokens\n * into nested structures matching the original token group hierarchy.\n *\n * @param tokens - Flat resolved tokens map\n * @param extractValue - Callback to extract the leaf value from each token\n * @returns Nested object mirroring the token path structure\n */\nexport function buildNestedTokenObject(\n tokens: ResolvedTokens,\n extractValue: (token: ResolvedToken) => unknown,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [, token] of getSortedTokenEntries(tokens)) {\n setNestedValue(result, token.path, extractValue(token))\n }\n return result\n}\n\nfunction setNestedValue(root: Record<string, unknown>, path: string[], value: unknown): void {\n let current = root\n\n for (let i = 0; i < path.length - 1; i++) {\n const part = path[i]\n if (part == null) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = path[path.length - 1]\n if (lastPart != null) {\n current[lastPart] = value\n }\n}\n\n/**\n * Check if a value looks like a DTCG token (has `$value` or `$ref` property).\n *\n * This is the base structural check shared by parsers, validators, and resolvers.\n * Individual modules may wrap this in a type-guard to narrow to their own token types.\n */\nexport function isTokenLike(value: unknown): boolean {\n return typeof value === 'object' && value !== null && ('$value' in value || '$ref' in value)\n}\n\n/**\n * Extract a pure alias reference name from a string value.\n *\n * Returns the inner token name for \"{token.name}\" inputs and undefined otherwise.\n */\nexport function getPureAliasReferenceName(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined\n }\n const match = /^\\{([^}]+)\\}$/.exec(value)\n return match?.[1]?.trim()\n}\n\nconst ROOT_REF_PATTERN = /\\.\\$root\\}/g\n\n/**\n * Rewrite `{foo.$root}` → `{foo}` inside alias reference strings.\n * Handles plain string values and composite objects with nested references.\n */\nexport function rewriteRootReferences(value: TokenValue): TokenValue {\n if (typeof value === 'string') {\n return ROOT_REF_PATTERN.test(value)\n ? (value.replace(ROOT_REF_PATTERN, '}') as TokenValue)\n : value\n }\n\n if (Array.isArray(value)) {\n let changed = false\n const mapped = value.map((item) => {\n const rewritten = rewriteRootReferences(item as TokenValue)\n if (rewritten !== item) {\n changed = true\n }\n return rewritten\n })\n return changed ? (mapped as TokenValue) : value\n }\n\n if (typeof value === 'object' && value !== null) {\n let changed = false\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value)) {\n const rewritten = rewriteRootReferences(v as TokenValue)\n if (rewritten !== v) {\n changed = true\n }\n result[k] = rewritten\n }\n return changed ? (result as TokenValue) : value\n }\n\n return value\n}\n","/**\n * @fileoverview Shared validation handler for consistent validation mode behavior\n *\n * Provides a single source of truth for validation mode checking, error handling,\n * and warning dispatch across all Dispersa components.\n */\n\nimport type { ValidationMode, ValidationOptions } from '@shared/types/validation'\n\n/**\n * Centralized validation handler that all components share.\n *\n * Caches the warning handler and mode at construction time so that\n * repeated calls avoid re-reading options on every invocation.\n */\nexport class ValidationHandler {\n private mode: ValidationMode\n\n constructor(options?: ValidationOptions) {\n this.mode = options?.mode ?? 'error'\n }\n\n /**\n * Whether validation checks should run (mode is not 'off')\n */\n shouldValidate(): boolean {\n return this.mode !== 'off'\n }\n\n /**\n * Whether the current mode is 'error' (strictest)\n */\n isStrict(): boolean {\n return this.mode === 'error'\n }\n\n /**\n * Handle a validation issue: throw in 'error' mode, warn in 'warn' mode, ignore in 'off' mode\n */\n handleIssue(error: Error): void {\n if (this.mode === 'error') {\n throw error\n }\n if (this.mode === 'warn') {\n // eslint-disable-next-line no-console\n console.warn(error.message)\n }\n }\n\n /**\n * Emit a warning (in 'error' and 'warn' modes, skip in 'off')\n */\n warn(message: string): void {\n if (this.mode === 'off') {\n return\n }\n // eslint-disable-next-line no-console\n console.warn(message)\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/group.json\",\n \"title\": \"Group\",\n \"description\": \"A group in the DTCG specification\",\n \"type\": \"object\",\n \"properties\": {\n \"$type\": {\n \"$ref\": \"tokenType.json\",\n \"description\": \"The type for tokens in this group (inherited by nested tokens unless overridden)\"\n },\n \"$description\": {\n \"type\": \"string\",\n \"description\": \"A plain text description of the group\"\n },\n \"$extensions\": {\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions\"\n },\n \"$extends\": {\n \"oneOf\": [\n {\n \"$ref\": \"../format.json#/definitions/curlyBraceReference\"\n },\n {\n \"$ref\": \"../format.json#/definitions/jsonPointerReference\"\n }\n ],\n \"description\": \"Reference to another group to inherit tokens and properties from\"\n },\n \"$deprecated\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Whether this group is deprecated\"\n },\n \"$root\": {\n \"description\": \"Root token for this group. The $root token provides a base value for the group while allowing for variants or extensions.\",\n \"$ref\": \"token.json\"\n }\n },\n \"patternProperties\": {\n \"^[^${}.][^{}.]*$\": {\n \"description\": \"Nested groups and tokens (see ../format.json#/definitions/tokenOrGroupName for pattern definition)\",\n \"$ref\": \"groupOrToken.json\"\n }\n },\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/groupOrToken.json\",\n \"title\": \"Group or Token\",\n \"description\": \"A group or a token in the DTCG specification. A token is identified by the presence of a $value property, while a group is any object without a $value property.\",\n \"oneOf\": [\n {\n \"$ref\": \"group.json\"\n },\n {\n \"$ref\": \"token.json\"\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/token.json\",\n \"title\": \"Token\",\n \"description\": \"A token in the DTCG specification\",\n \"type\": \"object\",\n \"properties\": {\n \"$value\": {\n \"description\": \"The token's value - can be a direct value or a reference to another token using curly brace syntax (e.g., '{token.name}'). Mutually exclusive with $ref.\"\n },\n \"$type\": {\n \"$ref\": \"tokenType.json\"\n },\n \"$ref\": {\n \"$ref\": \"../format.json#/definitions/jsonPointerReference\",\n \"description\": \"JSON Pointer reference (RFC 6901) for advanced referencing. Use this instead of $value for property-level references. Examples: '#/colors/blue/$value' or '#/colors/blue/$value/components/0'. Mutually exclusive with $value.\"\n },\n \"$description\": {\n \"type\": \"string\",\n \"description\": \"A plain text description of the token\"\n },\n \"$extensions\": {\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions\"\n },\n \"$deprecated\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Whether this token is deprecated\"\n }\n },\n \"additionalProperties\": false,\n \"allOf\": [\n {\n \"description\": \"Tokens cannot define both $value and $ref; they must choose exactly one form of reference or direct value.\",\n \"if\": {\n \"required\": [\"$value\"],\n \"properties\": {\n \"$value\": true\n }\n },\n \"then\": {\n \"not\": {\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": true\n }\n }\n },\n \"else\": {\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": true\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"color\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/color.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"dimension\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/dimension.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"fontFamily\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/fontFamily.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"fontWeight\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/fontWeight.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"duration\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/duration.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"cubicBezier\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/cubicBezier.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"number\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/number.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"strokeStyle\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/strokeStyle.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"border\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/border.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"transition\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/transition.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"shadow\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/shadow.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"gradient\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/gradient.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"required\": [\"$type\"],\n \"properties\": {\n \"$type\": { \"const\": \"typography\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/typography.json\"\n },\n {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"allOf\": [\n {\n \"not\": {\n \"required\": [\"$type\"]\n }\n },\n {\n \"required\": [\"$value\"]\n },\n {\n \"properties\": {\n \"$value\": {\n \"not\": {\n \"$ref\": \"../format.json#/definitions/tokenValueReference\"\n }\n }\n }\n }\n ]\n },\n \"then\": {\n \"properties\": {\n \"$value\": {\n \"oneOf\": [\n {\n \"$ref\": \"values/color.json\"\n },\n {\n \"$ref\": \"values/dimension.json\"\n },\n {\n \"$ref\": \"values/fontFamily.json\"\n },\n {\n \"$ref\": \"values/duration.json\"\n },\n {\n \"$ref\": \"values/cubicBezier.json\"\n },\n {\n \"$ref\": \"values/strokeStyle.json\"\n },\n {\n \"$ref\": \"values/border.json\"\n },\n {\n \"$ref\": \"values/transition.json\"\n },\n {\n \"$ref\": \"values/shadow.json\"\n },\n {\n \"$ref\": \"values/gradient.json\"\n },\n {\n \"$ref\": \"values/typography.json\"\n },\n {\n \"anyOf\": [\n {\n \"$ref\": \"values/number.json\"\n },\n {\n \"$ref\": \"values/fontWeight.json\"\n }\n ]\n }\n ]\n }\n }\n }\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/tokenType.json\",\n \"title\": \"TokenType\",\n \"description\": \"A token type in the DTCG specification\",\n \"type\": \"string\",\n \"enum\": [\n \"color\",\n \"dimension\",\n \"fontFamily\",\n \"fontWeight\",\n \"duration\",\n \"cubicBezier\",\n \"number\",\n \"strokeStyle\",\n \"border\",\n \"transition\",\n \"shadow\",\n \"gradient\",\n \"typography\"\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/border.json\",\n \"title\": \"Border Value\",\n \"description\": \"Value schema for border type tokens. Represents a border style.\",\n \"type\": \"object\",\n \"properties\": {\n \"color\": {\n \"description\": \"The color of the border\",\n \"oneOf\": [\n {\n \"$ref\": \"color.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"width\": {\n \"description\": \"The width or thickness of the border\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"style\": {\n \"description\": \"The border's style\",\n \"oneOf\": [\n {\n \"$ref\": \"strokeStyle.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n },\n \"required\": [\"color\", \"width\", \"style\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/color.json\",\n \"title\": \"Color Value\",\n \"description\": \"Value schema for color type tokens. Represents a color in a specific color space.\",\n \"type\": \"object\",\n \"properties\": {\n \"colorSpace\": {\n \"description\": \"The color space or color model used to represent the color\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\n \"srgb\",\n \"srgb-linear\",\n \"hsl\",\n \"hwb\",\n \"lab\",\n \"lch\",\n \"oklab\",\n \"oklch\",\n \"display-p3\",\n \"a98-rgb\",\n \"prophoto-rgb\",\n \"rec2020\",\n \"xyz-d65\",\n \"xyz-d50\"\n ]\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"components\": {\n \"description\": \"Array of color components. The number and meaning of components depend on the color space. Each component can be a number or the 'none' keyword.\",\n \"oneOf\": [\n {\n \"type\": \"array\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"alpha\": {\n \"description\": \"The alpha (transparency) value of the color. 0 is fully transparent, 1 is fully opaque. If omitted, defaults to 1.\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"hex\": {\n \"description\": \"Optional fallback value in 6-digit CSS hex color notation (e.g., '#ff00ff'). Must be 6 digits to avoid conflicts with the alpha value.\",\n \"$comment\": \"Only JSON Pointer references (not curly brace references) are allowed for hex because no string token type exists in the specification that could be referenced with curly braces.\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"pattern\": \"^#[0-9a-fA-F]{6}$\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"colorSpace\", \"components\"],\n \"additionalProperties\": false,\n \"definitions\": {\n \"zeroToOneComponent\": {\n \"title\": \"Zero to One Component\",\n \"description\": \"A color component normalized to the range [0-1] (e.g., RGB values, XYZ values)\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"hueComponent\": {\n \"title\": \"Hue Component\",\n \"description\": \"Hue angle from 0 up to (but not including) 360 degrees\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"exclusiveMaximum\": 360\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"percentageComponent\": {\n \"title\": \"Percentage Component\",\n \"description\": \"Percentage value from 0 to 100\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 100\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"chromaComponent\": {\n \"title\": \"Chroma Component\",\n \"description\": \"Chroma value from 0 to infinity\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"unboundedComponent\": {\n \"title\": \"Unbounded Component\",\n \"description\": \"A color component with no numeric bounds (e.g., A and B in LAB/OKLAB color spaces)\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\",\n \"const\": \"none\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"rgbComponents\": {\n \"title\": \"RGB Components\",\n \"description\": \"Array of RGB color components [Red, Green, Blue], each normalized to the range [0-1]\",\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Red: A number between 0 and 1 representing the red component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Green: A number between 0 and 1 representing the green component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Blue: A number between 0 and 1 representing the blue component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n }\n ]\n },\n \"xyzComponents\": {\n \"title\": \"XYZ Components\",\n \"description\": \"Array of XYZ color components [X, Y, Z], each normalized to the range [0-1]\",\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"X: A number between 0 and 1 representing the X component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Y: A number between 0 and 1 representing the Y component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Z: A number between 0 and 1 representing the Z component of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n }\n ]\n }\n },\n \"allOf\": [\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"srgb\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"srgb-linear\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"display-p3\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"a98-rgb\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"prophoto-rgb\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"rec2020\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/rgbComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"xyz-d65\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/xyzComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"xyz-d50\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"$ref\": \"#/definitions/xyzComponents\"\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"hsl\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Hue: A number from 0 up to (but not including) 360 representing the hue angle of the color on the color wheel\",\n \"$ref\": \"#/definitions/hueComponent\"\n },\n {\n \"description\": \"Saturation: A number between 0 and 100 representing the percentage of color saturation\",\n \"$ref\": \"#/definitions/percentageComponent\"\n },\n {\n \"description\": \"Lightness: A number between 0 and 100 representing the percentage of lightness\",\n \"$ref\": \"#/definitions/percentageComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"hwb\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Hue: A number from 0 up to (but not including) 360 representing the angle of the color on the color wheel\",\n \"$ref\": \"#/definitions/hueComponent\"\n },\n {\n \"description\": \"Whiteness: A number between 0 and 100 representing the percentage of white in the color\",\n \"$ref\": \"#/definitions/percentageComponent\"\n },\n {\n \"description\": \"Blackness: A number between 0 and 100 representing the percentage of black in the color\",\n \"$ref\": \"#/definitions/percentageComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"lab\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Lightness: A number between 0 and 100 representing the percentage of lightness of the color\",\n \"$ref\": \"#/definitions/percentageComponent\"\n },\n {\n \"description\": \"A: A signed number representing the green-red axis of the color. Unbounded but in practice doesn't exceed -160 to 160\",\n \"$ref\": \"#/definitions/unboundedComponent\"\n },\n {\n \"description\": \"B: A signed number representing the blue-yellow axis of the color. Unbounded but in practice doesn't exceed -160 to 160\",\n \"$ref\": \"#/definitions/unboundedComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"lch\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Lightness: A number between 0 and 100 representing the percentage of lightness of the color\",\n \"$ref\": \"#/definitions/percentageComponent\"\n },\n {\n \"description\": \"Chroma: A number representing the chroma of the color. Unbounded but in practice doesn't exceed 230\",\n \"$ref\": \"#/definitions/chromaComponent\"\n },\n {\n \"description\": \"Hue: A number from 0 up to (but not including) 360 representing the angle of the color on the color wheel\",\n \"$ref\": \"#/definitions/hueComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"oklab\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Lightness: A number between 0 and 1 representing the lightness of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"A: A signed number representing the green-red axis of the color. Unbounded but in practice doesn't exceed -0.5 to 0.5\",\n \"$ref\": \"#/definitions/unboundedComponent\"\n },\n {\n \"description\": \"B: A signed number representing the blue-yellow axis of the color. Unbounded but in practice doesn't exceed -0.5 to 0.5\",\n \"$ref\": \"#/definitions/unboundedComponent\"\n }\n ]\n }\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"colorSpace\": { \"const\": \"oklch\" },\n \"components\": { \"type\": \"array\" }\n }\n },\n \"then\": {\n \"properties\": {\n \"components\": {\n \"type\": \"array\",\n \"minItems\": 3,\n \"maxItems\": 3,\n \"items\": [\n {\n \"description\": \"Lightness: A number between 0 and 1 representing the lightness of the color\",\n \"$ref\": \"#/definitions/zeroToOneComponent\"\n },\n {\n \"description\": \"Chroma: A number representing the chroma of the color. Unbounded but in practice doesn't exceed 0.5\",\n \"$ref\": \"#/definitions/chromaComponent\"\n },\n {\n \"description\": \"Hue: A number from 0 up to (but not including) 360 representing the angle of the color on the color wheel\",\n \"$ref\": \"#/definitions/hueComponent\"\n }\n ]\n }\n }\n }\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/cubicBezier.json\",\n \"title\": \"Cubic Bezier Value\",\n \"description\": \"Value schema for cubicBezier type tokens. Represents how the value of an animated property progresses towards completion over the duration of an animation, effectively creating visual effects such as acceleration, deceleration, and bounce.\",\n \"type\": \"array\",\n \"items\": [\n {\n \"$ref\": \"#/definitions/xCoordinate\",\n \"description\": \"P1x - X coordinate of first control point\"\n },\n {\n \"$ref\": \"#/definitions/yCoordinate\",\n \"description\": \"P1y - Y coordinate of first control point\"\n },\n {\n \"$ref\": \"#/definitions/xCoordinate\",\n \"description\": \"P2x - X coordinate of second control point\"\n },\n {\n \"$ref\": \"#/definitions/yCoordinate\",\n \"description\": \"P2y - Y coordinate of second control point\"\n }\n ],\n \"additionalItems\": false,\n \"minItems\": 4,\n \"maxItems\": 4,\n \"definitions\": {\n \"xCoordinate\": {\n \"title\": \"X Coordinate\",\n \"description\": \"X coordinate of control point (must be between 0 and 1)\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"yCoordinate\": {\n \"title\": \"Y Coordinate\",\n \"description\": \"Y coordinate of control point (can be any real number)\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/dimension.json\",\n \"title\": \"Dimension Value\",\n \"description\": \"Value schema for dimension type tokens. Represents an amount of distance in a single dimension in the UI, such as a position, width, height, radius, or thickness.\",\n \"type\": \"object\",\n \"properties\": {\n \"value\": {\n \"description\": \"An integer or floating-point value representing the numeric value.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"unit\": {\n \"description\": \"Unit of distance. Supported values: 'px' (idealized pixel, equivalent to dp on Android and pt on iOS), 'rem' (multiple of system's default font size).\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"px\", \"rem\"]\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"value\", \"unit\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/duration.json\",\n \"title\": \"Duration Value\",\n \"description\": \"Value schema for duration type tokens. Represents the length of time in milliseconds an animation or animation cycle takes to complete.\",\n \"type\": \"object\",\n \"properties\": {\n \"value\": {\n \"description\": \"An integer or floating-point value representing the numeric value.\",\n \"oneOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"unit\": {\n \"description\": \"Unit of time. Supported values: 'ms' (millisecond), 's' (second).\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"ms\", \"s\"]\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"value\", \"unit\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/fontFamily.json\",\n \"title\": \"Font Family Value\",\n \"description\": \"Value schema for fontFamily type tokens. Represents a font name or an array of font names (ordered from most to least preferred).\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"description\": \"A single font name\",\n \"not\": {\n \"$ref\": \"../../format.json#/definitions/curlyBraceReference\"\n }\n },\n {\n \"type\": \"array\",\n \"description\": \"An array of font names, ordered from most to least preferred\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"not\": {\n \"$ref\": \"../../format.json#/definitions/curlyBraceReference\"\n }\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"minItems\": 1\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/fontWeight.json\",\n \"title\": \"Font Weight Value\",\n \"description\": \"Value schema for fontWeight type tokens. Represents a font weight as per the OpenType wght tag specification. Lower numbers represent lighter weights, higher numbers represent thicker weights.\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"description\": \"Numeric font weight value\",\n \"minimum\": 1,\n \"maximum\": 1000\n },\n {\n \"type\": \"string\",\n \"description\": \"Pre-defined font weight string value\",\n \"enum\": [\n \"thin\",\n \"hairline\",\n \"extra-light\",\n \"ultra-light\",\n \"light\",\n \"normal\",\n \"regular\",\n \"book\",\n \"medium\",\n \"semi-bold\",\n \"demi-bold\",\n \"bold\",\n \"extra-bold\",\n \"ultra-bold\",\n \"black\",\n \"heavy\",\n \"extra-black\",\n \"ultra-black\"\n ]\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/gradient.json\",\n \"title\": \"Gradient Value\",\n \"description\": \"Value schema for gradient type tokens. Represents a color gradient.\",\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/gradientStop\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"minItems\": 1,\n \"definitions\": {\n \"gradientStop\": {\n \"title\": \"Gradient Stop\",\n \"type\": \"object\",\n \"properties\": {\n \"color\": {\n \"description\": \"The color value at the stop's position on the gradient\",\n \"oneOf\": [\n {\n \"$ref\": \"color.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"position\": {\n \"description\": \"The position of the stop along the gradient's axis (range [0, 1]). Values outside this range are clamped.\",\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n },\n \"required\": [\"color\", \"position\"],\n \"additionalProperties\": false\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/number.json\",\n \"title\": \"Number Value\",\n \"description\": \"Value schema for number type tokens. Numbers can be positive, negative and have fractions. Example uses are gradient stop positions or unitless line heights.\",\n \"type\": \"number\"\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/shadow.json\",\n \"title\": \"Shadow Value\",\n \"description\": \"Value schema for shadow type tokens. Represents a shadow style.\",\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/shadowObject\"\n },\n {\n \"type\": \"array\",\n \"description\": \"Array of shadow objects and/or references to shadow tokens\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/shadowObject\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"minItems\": 1\n }\n ],\n \"definitions\": {\n \"shadowObject\": {\n \"title\": \"Shadow Object\",\n \"type\": \"object\",\n \"properties\": {\n \"color\": {\n \"description\": \"The color of the shadow\",\n \"oneOf\": [\n {\n \"$ref\": \"color.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"offsetX\": {\n \"description\": \"The horizontal offset that shadow has from the element it is applied to\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"offsetY\": {\n \"description\": \"The vertical offset that shadow has from the element it is applied to\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"blur\": {\n \"description\": \"The blur radius that is applied to the shadow\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"spread\": {\n \"description\": \"The amount by which to expand or contract the shadow\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"inset\": {\n \"description\": \"Whether this shadow is inside the containing shape (inner shadow) rather than a drop shadow (default: false)\",\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"color\", \"offsetX\", \"offsetY\", \"blur\", \"spread\"],\n \"additionalProperties\": false\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/strokeStyle.json\",\n \"title\": \"Stroke Style Value\",\n \"description\": \"Value schema for strokeStyle type tokens. Represents the style applied to lines or borders.\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"solid\", \"dashed\", \"dotted\", \"double\", \"groove\", \"ridge\", \"outset\", \"inset\"],\n \"description\": \"Pre-defined stroke style values with the same meaning as CSS line style values\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"dashArray\": {\n \"description\": \"Array of dimension values specifying lengths of alternating dashes and gaps\",\n \"oneOf\": [\n {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"minItems\": 1\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n },\n \"lineCap\": {\n \"description\": \"Line cap style, same meaning as SVG stroke-linecap attribute\",\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"round\", \"butt\", \"square\"]\n },\n {\n \"$ref\": \"../../format.json#/definitions/jsonPointerReferenceObject\"\n }\n ]\n }\n },\n \"required\": [\"dashArray\", \"lineCap\"],\n \"additionalProperties\": false\n }\n ]\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/transition.json\",\n \"title\": \"Transition Value\",\n \"description\": \"Value schema for transition type tokens. Represents an animated transition between two states.\",\n \"type\": \"object\",\n \"properties\": {\n \"duration\": {\n \"description\": \"The duration of the transition\",\n \"oneOf\": [\n {\n \"$ref\": \"duration.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"delay\": {\n \"description\": \"The time to wait before the transition begins\",\n \"oneOf\": [\n {\n \"$ref\": \"duration.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"timingFunction\": {\n \"description\": \"The timing function of the transition\",\n \"oneOf\": [\n {\n \"$ref\": \"cubicBezier.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n },\n \"required\": [\"duration\", \"delay\", \"timingFunction\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format/values/typography.json\",\n \"title\": \"Typography Value\",\n \"description\": \"Value schema for typography type tokens. Represents a typographic style.\",\n \"type\": \"object\",\n \"properties\": {\n \"fontFamily\": {\n \"description\": \"The typography's font\",\n \"oneOf\": [\n {\n \"$ref\": \"fontFamily.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"fontSize\": {\n \"description\": \"The size of the typography\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"fontWeight\": {\n \"description\": \"The weight of the typography\",\n \"oneOf\": [\n {\n \"$ref\": \"fontWeight.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"letterSpacing\": {\n \"description\": \"The horizontal spacing between characters\",\n \"oneOf\": [\n {\n \"$ref\": \"dimension.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n },\n \"lineHeight\": {\n \"description\": \"The vertical spacing between lines of typography (interpreted as a multiplier of fontSize)\",\n \"oneOf\": [\n {\n \"$ref\": \"number.json\"\n },\n {\n \"$ref\": \"../../format.json#/definitions/tokenValueReference\"\n }\n ]\n }\n },\n \"required\": [\"fontFamily\", \"fontSize\", \"fontWeight\", \"letterSpacing\", \"lineHeight\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/format.json\",\n \"title\": \"DTCG Format Schema\",\n \"description\": \"JSON Schema for the Design Tokens Community Group (DTCG) Format specification.\",\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"URI reference to this JSON schema.\",\n \"$comment\": \"$schema is not part of the official DTCG specification.\"\n },\n \"$type\": {\n \"$ref\": \"format/tokenType.json\",\n \"description\": \"The type for tokens in this group (inherited by nested tokens unless overridden)\"\n },\n \"$description\": {\n \"type\": \"string\",\n \"description\": \"A plain text description of the group\"\n },\n \"$extensions\": {\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions\"\n },\n \"$extends\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/curlyBraceReference\"\n },\n {\n \"$ref\": \"#/definitions/jsonPointerReference\"\n }\n ],\n \"description\": \"Reference to another group to inherit tokens and properties from\"\n },\n \"$deprecated\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Whether this group is deprecated\"\n },\n \"$root\": {\n \"description\": \"Root token for this group. The $root token provides a base value for the group while allowing for variants or extensions.\",\n \"$ref\": \"format/token.json\"\n }\n },\n \"patternProperties\": {\n \"^[^${}.][^{}.]*$\": {\n \"description\": \"Nested groups and tokens (see #/definitions/tokenOrGroupName for pattern definition)\",\n \"$ref\": \"format/groupOrToken.json\"\n }\n },\n \"additionalProperties\": false,\n \"definitions\": {\n \"tokenOrGroupName\": {\n \"title\": \"Token or Group Name\",\n \"type\": \"string\",\n \"pattern\": \"^[^${}.][^{}.]*$\",\n \"description\": \"Valid token/group names: must not start with $ and must not contain {, }, or .\"\n },\n \"curlyBraceReference\": {\n \"title\": \"Curly Brace Reference\",\n \"type\": \"string\",\n \"pattern\": \"^\\\\{[^${}.][^{}.]*(\\\\.[^${}.][^{}.]*)*\\\\}$\",\n \"description\": \"Curly brace reference (e.g., '{tokenName}' or '{group.nested.token}')\"\n },\n \"jsonPointerReference\": {\n \"title\": \"JSON Pointer Reference\",\n \"type\": \"string\",\n \"pattern\": \"^#/\",\n \"format\": \"json-pointer-uri-fragment\",\n \"description\": \"JSON Pointer reference (RFC 6901) to a location in the document (e.g., '#/path/to/target')\"\n },\n \"jsonPointerReferenceObject\": {\n \"title\": \"JSON Pointer Reference Object\",\n \"type\": \"object\",\n \"properties\": {\n \"$ref\": {\n \"$ref\": \"#/definitions/jsonPointerReference\"\n }\n },\n \"required\": [\"$ref\"],\n \"additionalProperties\": false,\n \"description\": \"Object containing a JSON Pointer reference for property-level references\"\n },\n \"tokenValueReference\": {\n \"title\": \"Token Value Reference\",\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/curlyBraceReference\"\n },\n {\n \"$ref\": \"#/definitions/jsonPointerReferenceObject\"\n }\n ],\n \"description\": \"A reference to a token value using either curly brace syntax or JSON Pointer syntax\"\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/resolver/modifier.json\",\n \"title\": \"Modifier\",\n \"description\": \"A modifier is similar to a set, but allows for conditional inclusion via the contexts map. A modifier MUST declare a contexts map of string values to arrays of token sources.\",\n \"type\": \"object\",\n \"required\": [\"contexts\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description of the purpose of the modifier.\"\n },\n \"contexts\": {\n \"title\": \"Contexts\",\n \"type\": \"object\",\n \"description\": \"A map of context names to arrays of token sources. Each context represents a possible variant (e.g., 'light' vs 'dark' for theme, 'small' vs 'large' for size).\",\n \"minProperties\": 2,\n \"patternProperties\": {\n \"^.+$\": {\n \"$ref\": \"#/definitions/tokenSourcesForModifiers\",\n \"description\": \"An array of token sources for this context. Can contain reference objects pointing to JSON files, inline token definitions, or any combination. If the array declares multiple sources, they will be merged in array order, meaning if a token is declared multiple times, the last occurrence in the array will be the final value.\"\n }\n },\n \"additionalProperties\": false\n },\n \"default\": {\n \"title\": \"Default Context\",\n \"type\": \"string\",\n \"description\": \"An optional default value that MUST match one of the keys in contexts. If provided, tools will use this context when no input is provided for this modifier.\",\n \"$comment\": \"JSON Schema cannot validate that this value matches a key in 'contexts'. This validation must be performed at runtime by the implementation.\"\n },\n \"$extensions\": {\n \"title\": \"Extensions\",\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions. Keys are vendor-specific namespaces.\"\n }\n },\n \"definitions\": {\n \"referenceObjectForModifiers\": {\n \"title\": \"Reference Object (For Modifiers)\",\n \"type\": \"object\",\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": {\n \"title\": \"JSON Reference\",\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"A JSON Pointer (RFC 6901) or URI reference. Modifiers MUST NOT reference other modifiers (#/modifiers/...) or resolutionOrder items (#/resolutionOrder/...).\",\n \"not\": {\n \"anyOf\": [\n {\n \"pattern\": \"^#/modifiers/\",\n \"$comment\": \"Modifiers cannot reference other modifiers\"\n },\n {\n \"pattern\": \"^#/resolutionOrder/\",\n \"$comment\": \"Nothing can reference resolutionOrder items\"\n }\n ]\n }\n }\n },\n \"description\": \"A reference object for use within modifier contexts. Cannot point to other modifiers or resolutionOrder items.\"\n },\n \"tokenSourcesForModifiers\": {\n \"title\": \"Token Sources (For Modifiers)\",\n \"type\": \"array\",\n \"description\": \"An array of token sources for modifier contexts - can reference sets but not other modifiers or resolutionOrder items.\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/referenceObjectForModifiers\"\n },\n {\n \"$ref\": \"../format.json\",\n \"description\": \"Inline design tokens in DTCG format\"\n }\n ]\n }\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/resolver/resolutionOrder.json\",\n \"title\": \"Resolution Order\",\n \"description\": \"An ordered array of sets and modifiers that determines the final resolution of tokens. Order is significant - tokens later in the array override earlier ones in case of conflict.\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"oneOf\": [\n {\n \"title\": \"Reference Object (For Resolution Order)\",\n \"type\": \"object\",\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": {\n \"title\": \"JSON Reference\",\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"A JSON Pointer (RFC 6901) or URI reference. Must point to a set (#/sets/...) or modifier (#/modifiers/...), never to resolutionOrder items (#/resolutionOrder/...).\",\n \"not\": {\n \"pattern\": \"^#/resolutionOrder/\",\n \"$comment\": \"ResolutionOrder cannot reference items within itself\"\n }\n }\n },\n \"description\": \"A reference object for use within resolutionOrder. Can point to sets or modifiers but not other resolutionOrder items.\"\n },\n {\n \"title\": \"Inline Set\",\n \"description\": \"A set defined inline in the resolutionOrder array. Must include 'name' and 'type' properties.\",\n \"type\": \"object\",\n \"required\": [\"sources\", \"name\", \"type\"],\n \"properties\": {\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description of the purpose of the set.\"\n },\n \"sources\": {\n \"title\": \"Sources\",\n \"$ref\": \"set.json#/definitions/tokenSourcesForSets\",\n \"description\": \"An array of token sources. Can contain reference objects pointing to JSON files, inline token definitions, or any combination. If the array declares multiple sources, they will be merged in array order, meaning if a token is declared multiple times, the last occurrence in the array will be the final value.\"\n },\n \"$extensions\": {\n \"title\": \"Extensions\",\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions. Keys are vendor-specific namespaces.\"\n },\n \"name\": {\n \"title\": \"Name\",\n \"type\": \"string\",\n \"description\": \"A unique name that MUST NOT conflict with any other name in resolutionOrder.\",\n \"$comment\": \"Uniqueness must be validated at runtime as JSON Schema cannot validate uniqueness across array items.\"\n },\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"const\": \"set\",\n \"description\": \"MUST be 'set' for inline set definitions.\"\n }\n },\n \"additionalProperties\": false\n },\n {\n \"title\": \"Inline Modifier\",\n \"description\": \"A modifier defined inline in the resolutionOrder array. Must include 'name' and 'type' properties.\",\n \"type\": \"object\",\n \"required\": [\"contexts\", \"name\", \"type\"],\n \"properties\": {\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description of the purpose of the modifier.\"\n },\n \"contexts\": {\n \"title\": \"Contexts\",\n \"type\": \"object\",\n \"description\": \"A map of context names to arrays of token sources. Each context represents a possible variant (e.g., 'light' vs 'dark' for theme, 'small' vs 'large' for size).\",\n \"minProperties\": 2,\n \"patternProperties\": {\n \"^.+$\": {\n \"$ref\": \"modifier.json#/definitions/tokenSourcesForModifiers\",\n \"description\": \"An array of token sources for this context. Can contain reference objects pointing to JSON files, inline token definitions, or any combination. If the array declares multiple sources, they will be merged in array order, meaning if a token is declared multiple times, the last occurrence in the array will be the final value.\"\n }\n },\n \"additionalProperties\": false\n },\n \"default\": {\n \"title\": \"Default Context\",\n \"type\": \"string\",\n \"description\": \"An optional default value that MUST match one of the keys in contexts. If provided, tools will use this context when no input is provided for this modifier.\",\n \"$comment\": \"JSON Schema cannot validate that this value matches a key in 'contexts'. This validation must be performed at runtime by the implementation.\"\n },\n \"$extensions\": {\n \"title\": \"Extensions\",\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions. Keys are vendor-specific namespaces.\"\n },\n \"name\": {\n \"title\": \"Name\",\n \"type\": \"string\",\n \"description\": \"A unique name that MUST NOT conflict with any other name in resolutionOrder.\",\n \"$comment\": \"Uniqueness must be validated at runtime as JSON Schema cannot validate uniqueness across array items.\"\n },\n \"type\": {\n \"title\": \"Type\",\n \"type\": \"string\",\n \"const\": \"modifier\",\n \"description\": \"MUST be 'modifier' for inline modifier definitions.\"\n }\n },\n \"additionalProperties\": false\n }\n ]\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/resolver/set.json\",\n \"title\": \"Set\",\n \"description\": \"A set is a collection of design tokens in DTCG format. A set MUST contain a sources array with tokens declared directly, or a reference object pointing to a JSON file containing design tokens, or any combination of the two.\",\n \"type\": \"object\",\n \"required\": [\"sources\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description of the purpose of the set.\"\n },\n \"sources\": {\n \"title\": \"Sources\",\n \"$ref\": \"#/definitions/tokenSourcesForSets\",\n \"description\": \"An array of token sources. Can contain reference objects pointing to JSON files, inline token definitions, or any combination. If the array declares multiple sources, they will be merged in array order, meaning if a token is declared multiple times, the last occurrence in the array will be the final value.\"\n },\n \"$extensions\": {\n \"title\": \"Extensions\",\n \"type\": \"object\",\n \"description\": \"Vendor-specific extensions. Keys are vendor-specific namespaces.\"\n }\n },\n \"definitions\": {\n \"referenceObjectForSets\": {\n \"title\": \"Reference Object (For Sets)\",\n \"type\": \"object\",\n \"required\": [\"$ref\"],\n \"properties\": {\n \"$ref\": {\n \"title\": \"JSON Reference\",\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"A JSON Pointer (RFC 6901) or URI reference. Sets MUST NOT reference modifiers (#/modifiers/...) or resolutionOrder items (#/resolutionOrder/...).\",\n \"not\": {\n \"anyOf\": [\n {\n \"pattern\": \"^#/modifiers/\",\n \"$comment\": \"Sets cannot reference modifiers\"\n },\n {\n \"pattern\": \"^#/resolutionOrder/\",\n \"$comment\": \"Nothing can reference resolutionOrder items\"\n }\n ]\n }\n }\n },\n \"description\": \"A reference object for use within sets. Cannot point to modifiers or resolutionOrder items.\"\n },\n \"tokenSourcesForSets\": {\n \"title\": \"Token Sources (For Sets)\",\n \"type\": \"array\",\n \"description\": \"An array of token sources for sets - cannot reference modifiers or resolutionOrder items.\",\n \"items\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/definitions/referenceObjectForSets\"\n },\n {\n \"$ref\": \"../format.json\",\n \"description\": \"Inline design tokens in DTCG format\"\n }\n ]\n }\n }\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://www.designtokens.org/schemas/2025.10/resolver.json\",\n \"title\": \"DTCG Resolver Schema\",\n \"description\": \"JSON Schema for the Design Tokens Community Group (DTCG) Resolver specification\",\n \"type\": \"object\",\n \"required\": [\"version\", \"resolutionOrder\"],\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\",\n \"description\": \"URI reference to this JSON schema.\"\n },\n \"name\": {\n \"title\": \"Name\",\n \"type\": \"string\",\n \"description\": \"A short, human-readable name for the document.\"\n },\n \"version\": {\n \"title\": \"Version\",\n \"type\": \"string\",\n \"const\": \"2025.10\",\n \"description\": \"Version of the resolver specification. Must be '2025.10'.\"\n },\n \"description\": {\n \"title\": \"Description\",\n \"type\": \"string\",\n \"description\": \"A human-readable description for this document.\"\n },\n \"sets\": {\n \"title\": \"Token Sets\",\n \"type\": \"object\",\n \"description\": \"Definition of sets. A set is a collection of design tokens in DTCG format.\",\n \"patternProperties\": {\n \"^.+$\": {\n \"$ref\": \"resolver/set.json\"\n }\n }\n },\n \"modifiers\": {\n \"title\": \"Modifiers\",\n \"type\": \"object\",\n \"description\": \"Definition of modifiers. A modifier allows for conditional inclusion of token values via contexts.\",\n \"patternProperties\": {\n \"^.+$\": {\n \"$ref\": \"resolver/modifier.json\"\n }\n }\n },\n \"resolutionOrder\": {\n \"title\": \"Resolution Order\",\n \"$ref\": \"resolver/resolutionOrder.json\"\n },\n \"$defs\": {\n \"title\": \"Definitions\",\n \"type\": \"object\",\n \"description\": \"Optional definitions that tools MAY support but MUST NOT throw an error when encountered.\"\n }\n },\n \"additionalProperties\": false\n}\n","/**\n * @fileoverview DTCG 2025.10 JSON Schemas (vendored, verbatim)\n */\n\nimport dtcgGroupSchema from './dtcg-schemas/2025.10/format/group.json' assert { type: 'json' }\nimport dtcgGroupOrTokenSchema from './dtcg-schemas/2025.10/format/groupOrToken.json' assert { type: 'json' }\nimport dtcgTokenSchema from './dtcg-schemas/2025.10/format/token.json' assert { type: 'json' }\nimport dtcgTokenTypeSchema from './dtcg-schemas/2025.10/format/tokenType.json' assert { type: 'json' }\nimport dtcgBorderValueSchema from './dtcg-schemas/2025.10/format/values/border.json' assert { type: 'json' }\nimport dtcgColorValueSchema from './dtcg-schemas/2025.10/format/values/color.json' assert { type: 'json' }\nimport dtcgCubicBezierValueSchema from './dtcg-schemas/2025.10/format/values/cubicBezier.json' assert { type: 'json' }\nimport dtcgDimensionValueSchema from './dtcg-schemas/2025.10/format/values/dimension.json' assert { type: 'json' }\nimport dtcgDurationValueSchema from './dtcg-schemas/2025.10/format/values/duration.json' assert { type: 'json' }\nimport dtcgFontFamilyValueSchema from './dtcg-schemas/2025.10/format/values/fontFamily.json' assert { type: 'json' }\nimport dtcgFontWeightValueSchema from './dtcg-schemas/2025.10/format/values/fontWeight.json' assert { type: 'json' }\nimport dtcgGradientValueSchema from './dtcg-schemas/2025.10/format/values/gradient.json' assert { type: 'json' }\nimport dtcgNumberValueSchema from './dtcg-schemas/2025.10/format/values/number.json' assert { type: 'json' }\nimport dtcgShadowValueSchema from './dtcg-schemas/2025.10/format/values/shadow.json' assert { type: 'json' }\nimport dtcgStrokeStyleValueSchema from './dtcg-schemas/2025.10/format/values/strokeStyle.json' assert { type: 'json' }\nimport dtcgTransitionValueSchema from './dtcg-schemas/2025.10/format/values/transition.json' assert { type: 'json' }\nimport dtcgTypographyValueSchema from './dtcg-schemas/2025.10/format/values/typography.json' assert { type: 'json' }\nimport dtcgFormatSchema from './dtcg-schemas/2025.10/format.json' assert { type: 'json' }\nimport dtcgResolverModifierSchema from './dtcg-schemas/2025.10/resolver/modifier.json' assert { type: 'json' }\nimport dtcgResolverResolutionOrderSchema from './dtcg-schemas/2025.10/resolver/resolutionOrder.json' assert { type: 'json' }\nimport dtcgResolverSetSchema from './dtcg-schemas/2025.10/resolver/set.json' assert { type: 'json' }\nimport dtcgResolverSchema from './dtcg-schemas/2025.10/resolver.json' assert { type: 'json' }\n\nexport const formatSchema = dtcgFormatSchema\nexport const tokenSchema = dtcgTokenSchema\nexport const tokenTypeSchema = dtcgTokenTypeSchema\nexport const groupSchema = dtcgGroupSchema\nexport const groupOrTokenSchema = dtcgGroupOrTokenSchema\n\nexport const colorValueSchema = dtcgColorValueSchema\nexport const dimensionValueSchema = dtcgDimensionValueSchema\nexport const fontFamilyValueSchema = dtcgFontFamilyValueSchema\nexport const fontWeightValueSchema = dtcgFontWeightValueSchema\nexport const durationValueSchema = dtcgDurationValueSchema\nexport const cubicBezierValueSchema = dtcgCubicBezierValueSchema\nexport const numberValueSchema = dtcgNumberValueSchema\nexport const strokeStyleValueSchema = dtcgStrokeStyleValueSchema\nexport const borderValueSchema = dtcgBorderValueSchema\nexport const transitionValueSchema = dtcgTransitionValueSchema\nexport const shadowValueSchema = dtcgShadowValueSchema\nexport const gradientValueSchema = dtcgGradientValueSchema\nexport const typographyValueSchema = dtcgTypographyValueSchema\n\nexport const resolverSchema = dtcgResolverSchema\nexport const resolverSetSchema = dtcgResolverSetSchema\nexport const resolverModifierSchema = dtcgResolverModifierSchema\nexport const resolverResolutionOrderSchema = dtcgResolverResolutionOrderSchema\n\nexport const dtcgSchemaRegistry = [\n formatSchema,\n tokenSchema,\n tokenTypeSchema,\n groupSchema,\n groupOrTokenSchema,\n colorValueSchema,\n dimensionValueSchema,\n fontFamilyValueSchema,\n fontWeightValueSchema,\n durationValueSchema,\n cubicBezierValueSchema,\n numberValueSchema,\n strokeStyleValueSchema,\n borderValueSchema,\n transitionValueSchema,\n shadowValueSchema,\n gradientValueSchema,\n typographyValueSchema,\n resolverSchema,\n resolverSetSchema,\n resolverModifierSchema,\n resolverResolutionOrderSchema,\n]\n","/**\n * @fileoverview JSON Schemas for configuration validation\n *\n * Defines JSON schemas for validating user-provided configurations including\n * BuildConfig, OutputConfig, DispersaOptions, and custom plugin registrations.\n * Types are automatically generated from these schemas using json-schema-to-ts.\n */\n\nimport type { FromSchema, JSONSchema } from 'json-schema-to-ts'\n\nimport { resolverSchema } from './schemas'\n\nconst resolverSchemaRef = resolverSchema as unknown as JSONSchema\n\n/**\n * Base plugin properties shared across all plugin types\n */\nconst basePluginProperties = {\n name: {\n type: 'string',\n minLength: 1,\n description: 'Unique identifier for the plugin',\n },\n} as const\n\n/**\n * Common renderer options shared across multiple renderers\n */\nconst commonRendererOptionsProperties = {\n minify: { type: 'boolean' },\n} as const\n\n/**\n * CSS Renderer Options Schema\n */\nexport const cssRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['bundle', 'standalone', 'modifier'] },\n selector: { type: 'string' },\n mediaQuery: { type: 'string' },\n preserveReferences: { type: 'boolean' },\n ...commonRendererOptionsProperties,\n },\n additionalProperties: true, // Allow custom properties for extended renderers\n} as const\n\n/**\n * JSON Renderer Options Schema\n */\nexport const jsonRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['bundle', 'standalone'] },\n structure: { type: 'string', enum: ['flat', 'nested'] },\n includeMetadata: { type: 'boolean' },\n ...commonRendererOptionsProperties,\n },\n additionalProperties: true, // Allow custom properties for extended renderers\n} as const\n\n/**\n * JS Module Renderer Options Schema\n */\nexport const jsModuleRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['bundle', 'standalone'] },\n structure: { type: 'string', enum: ['flat', 'nested'] },\n moduleName: { type: 'string' },\n generateHelper: {\n type: 'boolean',\n description: 'Generate helper function for token lookup (bundle mode only)',\n },\n ...commonRendererOptionsProperties,\n },\n additionalProperties: true, // Allow custom properties for extended renderers\n} as const\n\n/**\n * Tailwind CSS v4 Renderer Options Schema\n */\nexport const tailwindRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['bundle', 'standalone'] },\n includeImport: {\n type: 'boolean',\n description: 'Prepend @import \"tailwindcss\" to the output',\n },\n namespace: {\n type: 'string',\n description: 'Optional Tailwind namespace prefix for @theme',\n },\n selector: { type: 'string' },\n mediaQuery: { type: 'string' },\n ...commonRendererOptionsProperties,\n },\n additionalProperties: true,\n} as const\n\n/**\n * iOS/SwiftUI Renderer Options Schema\n */\nexport const iosRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n preset: { type: 'string', enum: ['standalone'] },\n accessLevel: { type: 'string', enum: ['public', 'internal'] },\n structure: { type: 'string', enum: ['enum', 'grouped'] },\n enumName: {\n type: 'string',\n description: 'Root enum name for enum structure (default: DesignTokens)',\n },\n extensionNamespace: {\n type: 'string',\n description: 'Namespace enum name used in grouped mode (default: DesignTokens)',\n },\n colorSpace: {\n type: 'string',\n enum: ['sRGB', 'displayP3'],\n description: 'Color space for SwiftUI Color initializer',\n },\n swiftVersion: {\n type: 'string',\n enum: ['5.9', '6.0'],\n description: 'Target Swift language version (default: 5.9)',\n },\n indent: {\n type: 'number',\n minimum: 1,\n description: 'Number of spaces per indentation level (default: 4)',\n },\n frozen: {\n type: 'boolean',\n description: 'Add @frozen annotation to enums and structs for ABI stability (default: false)',\n },\n },\n additionalProperties: true,\n} as const\n\n/**\n * Android/Jetpack Compose Renderer Options Schema\n */\nexport const androidRendererOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['packageName'],\n properties: {\n preset: { type: 'string', enum: ['standalone', 'bundle'] },\n packageName: {\n type: 'string',\n minLength: 1,\n description: 'Kotlin package name (required, e.g., com.example.tokens)',\n },\n objectName: {\n type: 'string',\n description: 'Root object name (default: DesignTokens)',\n },\n colorFormat: {\n type: 'string',\n enum: ['argb_hex', 'argb_float', 'argb8', 'argb_floats'],\n description:\n 'Color output format: argb_hex for Color(0xAARRGGBB), argb_float for Color(r, g, b, a). Legacy aliases: argb8 → argb_hex, argb_floats → argb_float',\n },\n colorSpace: {\n type: 'string',\n enum: ['sRGB', 'displayP3'],\n description: 'Color space for Color initializers (default: sRGB)',\n },\n structure: {\n type: 'string',\n enum: ['nested', 'flat'],\n description:\n 'Token organization: nested mirrors path hierarchy, flat groups by $type (default: nested)',\n },\n visibility: {\n type: 'string',\n enum: ['public', 'internal'],\n description: 'Kotlin visibility modifier for generated declarations',\n },\n indent: {\n type: 'number',\n minimum: 1,\n description: 'Number of spaces per indentation level (default: 4)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n packageName: 'Android renderer requires a \"packageName\" property',\n },\n },\n} as const\n\n/**\n * Transform Plugin Schema\n *\n * Validates structure of Transform objects at registration time.\n * Note: Function properties cannot be fully validated via JSON schema,\n * but we can ensure the object has the required structure.\n *\n * Additional properties are allowed to support class instances and custom metadata.\n */\nexport const transformPluginSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['transform'],\n properties: {\n ...basePluginProperties,\n matcher: {\n description: 'Optional filter function (validated at runtime)',\n },\n transform: {\n description: 'Transform function (validated at runtime)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n name: 'Transform must have a \"name\" property',\n transform: 'Transform must have a \"transform\" function property',\n },\n },\n} as const\n\n/**\n * Renderer Plugin Schema\n *\n * Validates structure of Renderer objects at registration time.\n * Renderers can implement either format() for simple formatting or build() for advanced build logic.\n * Additional properties are allowed to support class instances and custom metadata.\n */\nexport const rendererPluginSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['format'],\n properties: {\n ...basePluginProperties,\n preset: {\n type: 'string',\n description: 'Preset identifier (e.g., \"bundle\", \"standalone\", \"modifier\")',\n },\n format: {\n description: 'Format function for token-to-output conversion (validated at runtime)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n format: 'Renderer must have a \"format\" function property',\n },\n },\n} as const\n\n/**\n * Filter Plugin Schema\n *\n * Validates structure of Filter objects at registration time.\n * Additional properties are allowed to support class instances and custom metadata.\n */\nexport const filterPluginSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['filter'],\n properties: {\n ...basePluginProperties,\n filter: {\n description: 'Filter function (validated at runtime)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n filter: 'Filter must have a \"filter\" function property',\n },\n },\n} as const\n\n/**\n * Preprocessor Plugin Schema\n *\n * Validates structure of Preprocessor objects at registration time.\n * Additional properties are allowed to support class instances and custom metadata.\n */\nexport const preprocessorPluginSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['preprocess'],\n properties: {\n ...basePluginProperties,\n preprocess: {\n description: 'Preprocess function (validated at runtime)',\n },\n },\n additionalProperties: true,\n errorMessage: {\n required: {\n preprocess: 'Preprocessor must have a \"preprocess\" function property',\n },\n },\n} as const\n\n/**\n * Lint Configuration Schema\n *\n * Validates lint configuration including plugins, rules, and settings.\n * Plugins can be objects (validated at runtime) or strings (module paths).\n */\nexport const lintConfigSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n enabled: {\n type: 'boolean',\n description: 'Enable linting (default: false, opt-in)',\n },\n failOnError: {\n type: 'boolean',\n description: 'Fail build on lint errors (default: true)',\n },\n plugins: {\n type: 'object',\n description: 'Plugins to load (by object or module path string)',\n additionalProperties: {\n oneOf: [{ type: 'string' }, { type: 'object' }],\n },\n },\n rules: {\n type: 'object',\n description: 'Rule configurations',\n additionalProperties: {\n oneOf: [\n { type: 'string', enum: ['off', 'warn', 'error'] },\n {\n type: 'array',\n minItems: 2,\n items: [{ type: 'string', enum: ['off', 'warn', 'error'] }, { type: 'object' }],\n },\n ],\n },\n },\n },\n additionalProperties: false,\n} as const\n\n/**\n * Output Configuration Schema\n *\n * Validates output-specific configuration including renderer,\n * output file path, transforms, and filters.\n */\nexport const outputConfigSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['name', 'renderer'],\n properties: {\n name: {\n type: 'string',\n minLength: 1,\n description: 'Unique identifier for this output',\n },\n renderer: rendererPluginSchema,\n filters: {\n type: 'array',\n items: filterPluginSchema,\n description: 'Array of filter objects to apply',\n },\n transforms: {\n type: 'array',\n items: transformPluginSchema,\n description: 'Array of transform objects to apply',\n },\n file: {\n // No type constraint - allows string or function\n // Functions cannot be validated by JSON Schema (not JSON-serializable)\n // TypeScript type provides compile-time validation for function signatures\n description:\n 'Output file path relative to buildPath. Supports subdirectories (e.g., \"css/tokens.css\"), pattern strings (e.g., \"tokens-{theme}.css\"), or function for dynamic naming',\n },\n options: {\n type: 'object',\n description: 'Renderer-specific options passed to the formatter',\n additionalProperties: true,\n },\n hooks: {\n type: 'object',\n description: 'Per-output lifecycle hooks (functions, validated at runtime)',\n additionalProperties: true,\n },\n },\n errorMessage: {\n required: {\n name: 'Output must have a \"name\" property',\n renderer: 'Output must have a \"renderer\" property',\n },\n },\n additionalProperties: false,\n} as const\n\n/**\n * Dispersa Options Schema\n *\n * Validates constructor options for Dispersa instance.\n * When resolver is an object, it's validated against the resolver schema via $ref.\n */\nexport const dispersaOptionsSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n resolver: {\n oneOf: [\n { type: 'string', minLength: 1 },\n resolverSchemaRef, // Reference to resolver schema for inline ResolverDocument objects\n ],\n description:\n 'Default resolver configuration - file path or ResolverDocument object (optional if provided at build time)',\n },\n buildPath: {\n type: 'string',\n description: 'Default output directory for generated files',\n },\n validation: {\n type: 'object',\n properties: {\n mode: { type: 'string', enum: ['error', 'warn', 'off'] },\n },\n additionalProperties: true,\n },\n },\n additionalProperties: false,\n} as const\n\n/**\n * Build Configuration Schema\n *\n * Validates complete build configuration including outputs array,\n * global transforms, preprocessors, and permutations.\n * When resolver is an object, it's validated against the resolver schema via $ref.\n */\nexport const buildConfigSchema = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n required: ['outputs'],\n properties: {\n outputs: {\n type: 'array',\n minItems: 1,\n items: { type: 'object' }, // Each output validated separately with outputConfigSchema\n description: 'Array of output configurations defining target formats',\n },\n filters: {\n type: 'array',\n items: filterPluginSchema,\n description: 'Global filters to apply to all outputs',\n },\n transforms: {\n type: 'array',\n items: transformPluginSchema,\n description: 'Global transforms to apply to all tokens',\n },\n preprocessors: {\n type: 'array',\n items: preprocessorPluginSchema,\n description: 'Global preprocessors to apply before parsing',\n },\n permutations: {\n type: 'array',\n items: {\n type: 'object',\n description: 'Modifier inputs object (e.g., { theme: \"dark\" })',\n },\n description: 'Explicit permutations to build',\n },\n // Can also include DispersaOptions fields\n resolver: {\n oneOf: [\n { type: 'string', minLength: 1 },\n resolverSchemaRef, // Reference to resolver schema for inline ResolverDocument objects\n ],\n description: 'Resolver configuration - file path or ResolverDocument object',\n },\n buildPath: { type: 'string' },\n validation: {\n type: 'object',\n properties: {\n mode: { type: 'string', enum: ['error', 'warn', 'off'] },\n },\n },\n hooks: {\n type: 'object',\n description: 'Global build lifecycle hooks (functions, validated at runtime)',\n additionalProperties: true,\n },\n lint: {\n ...lintConfigSchema,\n description: 'Linting configuration',\n },\n },\n additionalProperties: false,\n} as const\n\n// ============================================================================\n// GENERATED TYPES FROM SCHEMAS\n// ============================================================================\n\n/**\n * CSS Renderer Options type generated from cssRendererOptionsSchema\n *\n * Note: This type is overridden in @renderers/types to support function-based\n * selector and mediaQuery options, which cannot be represented in JSON Schema.\n * This schema-based type is used for JSON validation only.\n */\nexport type CssRendererOptions = FromSchema<typeof cssRendererOptionsSchema>\n\n/**\n * JSON Renderer Options type generated from jsonRendererOptionsSchema\n */\nexport type JsonRendererOptions = FromSchema<typeof jsonRendererOptionsSchema>\n\n/**\n * JS Module Renderer Options type generated from jsModuleRendererOptionsSchema\n */\nexport type JsModuleRendererOptions = FromSchema<typeof jsModuleRendererOptionsSchema>\n\n/**\n * Output Config type generated from outputConfigSchema\n *\n * Note: This is a base type. The actual OutputConfig type in config/index.ts\n * extends this with additional TypeScript features like conditional types for options.\n */\nexport type OutputConfigBase = FromSchema<typeof outputConfigSchema>\n\n/**\n * Dispersa Options type generated from dispersaOptionsSchema\n */\nexport type DispersaOptionsBase = FromSchema<typeof dispersaOptionsSchema>\n\n/**\n * Build Config type generated from buildConfigSchema\n *\n * Note: This is a base type. The actual BuildConfig type in config/index.ts\n * may extend this with additional features.\n */\nexport type BuildConfigBase = FromSchema<typeof buildConfigSchema>\n\n/**\n * Preprocessor Plugin type generated from preprocessorPluginSchema\n */\nexport type PreprocessorPluginBase = FromSchema<typeof preprocessorPluginSchema>\n\n/**\n * Tailwind CSS v4 Renderer Options type generated from tailwindRendererOptionsSchema\n */\nexport type TailwindRendererOptionsBase = FromSchema<typeof tailwindRendererOptionsSchema>\n\n/**\n * iOS/SwiftUI Renderer Options type generated from iosRendererOptionsSchema\n */\nexport type IosRendererOptionsBase = FromSchema<typeof iosRendererOptionsSchema>\n\n/**\n * Android/Jetpack Compose Renderer Options type generated from androidRendererOptionsSchema\n */\nexport type AndroidRendererOptionsBase = FromSchema<typeof androidRendererOptionsSchema>\n\n/**\n * Lint Config type generated from lintConfigSchema\n *\n * Note: This is a base type. The actual LintBuildConfig type in lint/types.ts\n * extends this with proper LintPlugin typing.\n */\nexport type LintConfigBase = FromSchema<typeof lintConfigSchema>\n","/**\n * @fileoverview JSON Schema validator for design tokens and resolver documents\n *\n * Validates token data and resolver configurations against JSON schemas\n * to ensure DTCG compliance and catch errors early in the build process.\n */\n\nimport { ConfigurationError } from '@shared/errors/index'\nimport { isTokenLike } from '@shared/utils/token-utils'\nimport Ajv, { type ErrorObject, type ValidateFunction } from 'ajv'\nimport addFormats from 'ajv-formats'\n\nimport { buildConfigSchema, outputConfigSchema, dispersaOptionsSchema } from './config-schemas'\nimport {\n dtcgSchemaRegistry,\n formatSchema,\n groupSchema,\n resolverSchema,\n tokenSchema,\n} from './schemas'\n\n/**\n * Validation error with message and optional context\n */\nexport type ValidationError = {\n /** Human-readable error message */\n message: string\n\n /** JSON path to the error location (e.g., '/tokens/color/primary') */\n path?: string\n\n /** Additional error parameters from JSON Schema validation */\n params?: Record<string, unknown>\n}\n\n/**\n * Validates design tokens and resolver documents against JSON schemas\n *\n * Uses AJV (Another JSON Validator) to validate data structures and ensure\n * compliance with DTCG specification and Dispersa extensions.\n *\n * @example\n * ```typescript\n * const validator = new SchemaValidator()\n *\n * // Validate resolver document\n * const resolverErrors = validator.validateResolver(resolverData)\n * if (resolverErrors.length > 0) {\n * console.error('Resolver validation failed:', resolverErrors)\n * }\n *\n * // Validate token\n * const tokenErrors = validator.validateToken(tokenData)\n * ```\n */\nexport class SchemaValidator {\n private ajv: Ajv\n private validators: Map<string, ValidateFunction>\n\n constructor() {\n this.ajv = new Ajv({\n allErrors: true,\n strict: false,\n validateFormats: true,\n })\n addFormats(this.ajv)\n this.validators = new Map()\n this.registerDefaultSchemas()\n }\n\n private registerDefaultSchemas(): void {\n for (const schema of dtcgSchemaRegistry) {\n this.ajv.addSchema(schema as Record<string, unknown>, (schema as { $id?: string }).$id)\n }\n\n // Register DTCG schemas\n this.registerSchema('format', formatSchema)\n this.registerSchema('resolver', resolverSchema)\n this.registerSchema('token', tokenSchema)\n this.registerSchema('group', groupSchema)\n\n // Register config schemas\n this.registerSchema('outputConfig', outputConfigSchema)\n this.registerSchema('dispersaOptions', dispersaOptionsSchema)\n this.registerSchema('buildConfig', buildConfigSchema)\n }\n\n /**\n * Registers a custom JSON schema for validation\n *\n * Compiles and registers a JSON schema that can be used with `validate()`.\n *\n * @param name - Unique identifier for the schema\n * @param schema - JSON Schema object (draft-07 compatible)\n *\n * @example\n * ```typescript\n * validator.registerSchema('customToken', {\n * type: 'object',\n * required: ['$value', '$type'],\n * properties: {\n * $value: { type: 'string' },\n * $type: { const: 'custom' }\n * }\n * })\n * ```\n */\n registerSchema(name: string, schema: Record<PropertyKey, unknown>): void {\n const validate = this.ajv.compile(schema)\n this.validators.set(name, validate)\n }\n\n /**\n * Validates data against a registered schema\n *\n * @param schemaName - Name of the registered schema to validate against\n * @param data - Data to validate\n * @returns Array of validation errors (empty if valid)\n * @throws {Error} If schema name is not registered\n *\n * @example\n * ```typescript\n * const errors = validator.validate('color', colorTokenData)\n * if (errors.length > 0) {\n * console.error('Validation failed:', errors)\n * }\n * ```\n */\n validate(schemaName: string, data: unknown): ValidationError[] {\n const validator = this.validators.get(schemaName)\n if (validator == null) {\n throw new ConfigurationError(`Schema not found: ${schemaName}`)\n }\n\n const valid = validator(data)\n return valid ? [] : this.formatErrors(validator.errors ?? [])\n }\n\n /**\n * Validates a resolver document structure\n *\n * Checks that the resolver document conforms to the expected schema with\n * valid references, sets, and modifier definitions.\n *\n * @param data - Resolver document data\n * @returns Array of validation errors (empty if valid)\n *\n * @example\n * ```typescript\n * const resolverErrors = validator.validateResolver(resolverData)\n * ```\n */\n validateResolver(data: unknown): ValidationError[] {\n return this.validate('resolver', data)\n }\n\n /**\n * Validates a design token structure\n *\n * Validates a token against the DTCG token schema. The schema itself\n * enforces type-specific constraints based on the token's `$type` field.\n *\n * @param data - Token data to validate\n * @returns Array of validation errors (empty if valid)\n *\n * @example\n * ```typescript\n * const errors = validator.validateToken(tokenData)\n * ```\n */\n validateToken(data: unknown): ValidationError[] {\n return this.validate('token', data)\n }\n\n /**\n * Validates a group structure (DTCG Section 6)\n *\n * Groups organize tokens hierarchically and can have properties like\n * $type, $description, $deprecated, $extensions, and $extends.\n * Groups MUST NOT have $value or $ref properties.\n *\n * @param data - Group data to validate\n * @returns Array of validation errors (empty if valid)\n *\n * @example\n * ```typescript\n * const groupErrors = validator.validateGroup(groupData)\n * ```\n */\n validateGroup(data: unknown): ValidationError[] {\n return this.validate('group', data)\n }\n\n /**\n * Smart validation: Try both token and group schemas\n *\n * Per DTCG spec, an object is either a token (has $value/$ref) or a group (no $value/$ref).\n * This method tries to validate as both and returns the appropriate result.\n *\n * Strategy:\n * 1. Check for structural hints ($value/$ref present)\n * 2. Try validating as the likely type first\n * 3. If that fails, try the other type\n * 4. Only error if both fail\n *\n * @param obj - Object to validate (token or group)\n * @returns Validation result with type and errors\n *\n * @example\n * ```typescript\n * const result = validator.validateTokenOrGroup(obj)\n * if (result.type === 'invalid') {\n * console.error(result.message, result.errors)\n * }\n * ```\n */\n validateTokenOrGroup(obj: unknown): {\n type: 'token' | 'group' | 'invalid'\n errors: ValidationError[]\n message?: string\n } {\n // First, check structural hints\n const hasValue = isTokenLike(obj)\n\n if (hasValue) {\n const tokenErrors = this.validateToken(obj)\n if (tokenErrors.length === 0) {\n return { type: 'token', errors: [] }\n }\n return {\n type: 'invalid',\n errors: tokenErrors,\n message: 'Object has $value/$ref but failed token validation',\n }\n }\n\n const groupErrors = this.validateGroup(obj)\n if (groupErrors.length === 0) {\n return { type: 'group', errors: [] }\n }\n\n const tokenErrors = this.validateToken(obj)\n if (tokenErrors.length === 0) {\n return { type: 'token', errors: [] }\n }\n\n return {\n type: 'invalid',\n errors: groupErrors.length < tokenErrors.length ? groupErrors : tokenErrors,\n message:\n groupErrors.length < tokenErrors.length\n ? 'Object appears to be a group but failed validation'\n : 'Object appears to be a token but failed validation',\n }\n }\n\n /**\n * Format AJV errors into readable ValidationError objects\n */\n private formatErrors(errors: ErrorObject[]): ValidationError[] {\n return errors.map((error) => ({\n message: error.message ?? 'Validation error',\n path: error.instancePath,\n params: error.params,\n }))\n }\n\n /**\n * Formats validation errors into a human-readable message\n *\n * Combines multiple validation errors into a single string suitable\n * for logging or error displays.\n *\n * @param errors - Array of validation errors\n * @returns Formatted error message string\n *\n * @example\n * ```typescript\n * const errors = validator.validateToken(tokenData)\n * if (errors.length > 0) {\n * const message = validator.getErrorMessage(errors)\n * console.error(message)\n * }\n * ```\n */\n getErrorMessage(errors: ValidationError[]): string {\n if (errors.length === 0) {\n return 'No errors'\n }\n\n return errors\n .map((error) => {\n const path = error.path != null && error.path !== '' ? `at ${error.path}` : ''\n return `${error.message} ${path}`.trim()\n })\n .join('; ')\n }\n\n // ============================================================================\n // CONFIGURATION VALIDATION METHODS\n // ============================================================================\n\n /**\n * Validates an OutputConfig structure\n *\n * @param data - Output configuration data\n * @returns Array of validation errors (empty if valid)\n */\n validateOutputConfig(data: unknown): ValidationError[] {\n return this.validate('outputConfig', data)\n }\n\n /**\n * Validates DispersaOptions structure\n *\n * @param data - Dispersa options data\n * @returns Array of validation errors (empty if valid)\n */\n validateDispersaOptions(data: unknown): ValidationError[] {\n return this.validate('dispersaOptions', data)\n }\n\n /**\n * Validates BuildConfig structure\n *\n * @param data - Build configuration data\n * @returns Array of validation errors (empty if valid)\n */\n validateBuildConfig(data: unknown): ValidationError[] {\n return this.validate('buildConfig', data)\n }\n}\n","/**\n * @fileoverview Validation module exports\n */\n\nexport { SchemaValidator } from './validator'\nexport type { ValidationError } from './validator'\n","/**\n * @fileoverview Resolver document parser with validation\n */\n\nimport { constants as fsConstants } from 'node:fs'\nimport { readFile, access } from 'node:fs/promises'\nimport * as path from 'node:path'\n\nimport type { ResolverDocument } from '@resolution/types'\nimport { FileOperationError, ValidationError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport { SchemaValidator } from '@validation/index'\n\nexport type ParserOptions = {\n allowUnknownVersion?: boolean\n validation?: ValidationOptions\n}\n\nexport class ResolverParser {\n private validator: SchemaValidator\n private options: ParserOptions\n private validationHandler: ValidationHandler\n\n constructor(options: ParserOptions = {}) {\n this.validator = new SchemaValidator()\n this.options = {\n allowUnknownVersion: false,\n ...options,\n }\n this.validationHandler = new ValidationHandler(options.validation)\n }\n\n /**\n * Parse resolver document from file\n */\n async parseFile(filePath: string): Promise<ResolverDocument> {\n const absolutePath = path.isAbsolute(filePath)\n ? filePath\n : path.resolve(process.cwd(), filePath)\n\n try {\n await access(absolutePath, fsConstants.R_OK)\n } catch (error) {\n throw new FileOperationError('read', absolutePath, error as Error)\n }\n\n let content: string\n try {\n content = await readFile(absolutePath, 'utf-8')\n } catch (error) {\n throw new FileOperationError('read', absolutePath, error as Error)\n }\n return this.parse(content, absolutePath)\n }\n\n /**\n * Parse resolver document from string\n */\n parse(content: string, sourcePath?: string): ResolverDocument {\n let data: unknown\n\n try {\n data = JSON.parse(content) as unknown\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error)\n throw new ValidationError(`Failed to parse resolver JSON: ${errorMsg}`, [\n { message: errorMsg },\n ])\n }\n\n return this.parseObject(data, sourcePath)\n }\n\n /**\n * Parse and validate an inline resolver document object\n * Use this when you have a ResolverDocument object in memory\n * rather than loading from a file\n *\n * @param resolver - ResolverDocument object to validate\n * @returns Validated ResolverDocument\n * @throws {Error} If validation fails\n *\n * @example\n * ```typescript\n * const parser = new ResolverParser()\n * const resolver = parser.parseInline({\n * version: '2025.10',\n * sets: {\n * base: { sources: [{ ... }] }\n * },\n * resolutionOrder: [{ $ref: '#/sets/base' }]\n * })\n * ```\n */\n parseInline(resolver: ResolverDocument): ResolverDocument {\n return this.parseObject(resolver, '<inline>')\n }\n\n /**\n * Parse and validate resolver document object\n */\n parseObject(data: unknown, sourcePath?: string): ResolverDocument {\n const contextMsg = sourcePath != null && sourcePath !== '' ? ` in ${sourcePath}` : ''\n\n // Type guard\n if (typeof data !== 'object' || data == null) {\n throw new ValidationError(`Resolver document must be an object${contextMsg}`, [\n { message: `Resolver document must be an object${contextMsg}` },\n ])\n }\n\n // Validate if enabled\n const resolverErrors = this.validator.validateResolver(data)\n if (resolverErrors.length > 0) {\n const errorMessage = this.validator.getErrorMessage(resolverErrors)\n this.handleValidationIssue(`Invalid resolver document${contextMsg}: ${errorMessage}`)\n }\n\n const resolver = data as ResolverDocument\n\n // Check version\n if (resolver.version !== '2025.10' && this.options.allowUnknownVersion !== true) {\n this.handleValidationIssue(\n `Unsupported resolver version: ${String(resolver.version)}. Expected 2025.10${contextMsg}`,\n )\n }\n\n // Validate resolution order\n if (resolver.resolutionOrder == null || resolver.resolutionOrder.length === 0) {\n this.handleValidationIssue(\n `Resolver document must have a non-empty resolutionOrder${contextMsg}`,\n )\n }\n\n // Validate reference pointers (DTCG spec section 4.2.1)\n this.validateReferencePointers(resolver, contextMsg)\n\n // Validate modifier constraints\n this.validateModifiers(resolver, contextMsg)\n\n return resolver\n }\n\n /**\n * Validate reference pointers according to DTCG spec section 4.2.1\n * - Sets/modifiers MUST NOT reference other modifiers\n * - References MUST NOT point to resolutionOrder array items\n */\n private validateReferencePointers(resolver: ResolverDocument, contextMsg: string): void {\n if (resolver.sets) {\n for (const [setName, set] of Object.entries(resolver.sets)) {\n this.validateSourceReferences(set.sources, `set \"${setName}\"`, contextMsg)\n }\n }\n\n if (!resolver.modifiers) {\n return\n }\n\n for (const [modifierName, modifier] of Object.entries(resolver.modifiers)) {\n for (const [contextName, sources] of Object.entries(modifier.contexts)) {\n this.validateSourceReferences(\n sources,\n `modifier \"${modifierName}\" context \"${contextName}\"`,\n contextMsg,\n )\n }\n }\n }\n\n private validateSourceReferences(sources: unknown[], location: string, contextMsg: string): void {\n for (const source of sources) {\n if (typeof source !== 'object' || source === null || !('$ref' in source)) {\n continue\n }\n\n const ref = (source as { $ref: string }).$ref\n\n if (ref.startsWith('#/modifiers/')) {\n this.handleValidationIssue(\n `Invalid reference in ${location}: \"${ref}\". Sets and modifier contexts MUST NOT reference modifiers${contextMsg}`,\n )\n }\n\n if (ref.startsWith('#/resolutionOrder/')) {\n this.handleValidationIssue(\n `Invalid reference in ${location}: \"${ref}\". References MUST NOT point to resolutionOrder array items${contextMsg}`,\n )\n }\n }\n }\n\n /**\n * Validate modifiers according to DTCG spec\n */\n private validateModifiers(resolver: ResolverDocument, contextMsg: string): void {\n if (!resolver.modifiers) {\n return\n }\n\n for (const [modifierName, modifier] of Object.entries(resolver.modifiers)) {\n const contextCount = Object.keys(modifier.contexts).length\n\n // MUST throw error for 0 contexts\n if (contextCount === 0) {\n this.handleValidationIssue(\n `Modifier \"${modifierName}\" has 0 contexts. Modifiers MUST have at least 1 context${contextMsg}`,\n )\n }\n\n // SHOULD throw error for 1 context (use a set instead)\n if (contextCount === 1) {\n this.handleValidationIssue(\n `Modifier \"${modifierName}\" has only 1 context. A modifier with 1 context should be a set instead${contextMsg}`,\n )\n }\n\n // Validate default value if provided\n if (modifier.default && !(modifier.default in modifier.contexts)) {\n const validContexts = Object.keys(modifier.contexts).join(', ')\n this.handleValidationIssue(\n `Modifier \"${modifierName}\" has invalid default value \"${modifier.default}\". Must be one of: ${validContexts}${contextMsg}`,\n )\n }\n }\n }\n\n private handleValidationIssue(message: string): void {\n this.validationHandler.handleIssue(new ValidationError(message, [{ message }]))\n }\n\n /**\n * Validate resolver document without parsing\n */\n validate(data: unknown): { valid: boolean; errors: string[] } {\n const errors = this.validator.validateResolver(data)\n return {\n valid: errors.length === 0,\n errors: errors.map((e) => e.message),\n }\n }\n}\n","/**\n * @fileoverview Utility for loading and parsing resolver documents\n * Eliminates duplication of resolver parsing logic across the codebase\n */\n\nimport * as path from 'node:path'\n\nimport type { ResolverDocument } from '@resolution/types'\nimport type { ValidationOptions } from '@shared/types/validation'\n\nimport { ResolverParser } from './resolver-parser'\n\nexport type ResolverLoaderOptions = {\n /**\n * Enable validation of the resolver document\n * @default true\n */\n /**\n * Base directory for resolving relative paths\n * @default process.cwd()\n */\n baseDir?: string\n validation?: ValidationOptions\n}\n\n/**\n * Loads and parses resolver documents from file paths or inline objects\n *\n * Centralizes the logic for handling resolver inputs that can be either:\n * - A file path string (resolved relative to baseDir)\n * - An inline ResolverDocument object (validated if enabled)\n *\n * @example\n * ```typescript\n * const loader = new ResolverLoader({ })\n *\n * // Load from file\n * const resolver1 = await loader.load('./tokens.resolver.json')\n *\n * // Load from inline object\n * const resolver2 = await loader.load({\n * resolutionOrder: ['tokens.json']\n * })\n * ```\n */\nexport class ResolverLoader {\n private options: { baseDir: string; validation?: ValidationOptions }\n private parser: ResolverParser\n\n constructor(options: ResolverLoaderOptions = {}) {\n this.options = {\n baseDir: options.baseDir ?? process.cwd(),\n validation: options.validation,\n }\n this.parser = new ResolverParser({ validation: options.validation })\n }\n\n /**\n * Load and parse a resolver document\n *\n * @param resolver - Either a file path (string) or an inline ResolverDocument object\n * @returns Tuple of [parsed resolver document, base directory for file resolution]\n *\n * @example\n * ```typescript\n * const loader = new ResolverLoader()\n * const [resolverDoc, baseDir] = await loader.load('./tokens.resolver.json')\n * ```\n */\n async load(resolver: string | ResolverDocument): Promise<{\n resolverDoc: ResolverDocument\n baseDir: string\n }> {\n if (typeof resolver !== 'string') {\n const resolverDoc = this.parser.parseInline(resolver)\n return { resolverDoc, baseDir: this.options.baseDir }\n }\n\n const absolutePath = path.resolve(this.options.baseDir, resolver)\n const resolverDoc = await this.parser.parseFile(absolutePath)\n const baseDir = path.dirname(absolutePath)\n return { resolverDoc, baseDir }\n }\n\n /**\n * Load only the resolver document (without base directory)\n *\n * Convenience method for cases where only the parsed document is needed.\n *\n * @param resolver - Either a file path or an inline ResolverDocument object\n * @returns Parsed resolver document\n */\n async loadDocument(resolver: string | ResolverDocument): Promise<ResolverDocument> {\n const { resolverDoc } = await this.load(resolver)\n return resolverDoc\n }\n\n /**\n * Update the base directory for path resolution\n *\n * @param baseDir - New base directory\n */\n setBaseDir(baseDir: string): void {\n this.options.baseDir = baseDir\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Shared utilities for bundlers\n */\n\nimport type { MediaQueryFunction, SelectorFunction } from '@outputs/types'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries, stripInternalTokenMetadata } from '@shared/utils/token-utils'\nimport type { ResolvedTokens, InternalResolvedTokens, ResolvedToken } from '@shared/token-types'\n\nfunction sanitizeDataAttributeName(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\nfunction escapeCssString(value: string): string {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\r?\\n/g, ' ')\n}\n\nexport type TokenGroup = {\n name: string\n tokens: ResolvedToken[]\n}\n\nexport function groupTokensByType(\n tokens: ResolvedTokens,\n typeGroupMap: Record<string, string>,\n): TokenGroup[] {\n const groupMap = new Map<string, ResolvedToken[]>()\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const groupName = typeGroupMap[token.$type ?? ''] ?? 'Other'\n const existing = groupMap.get(groupName) ?? []\n existing.push(token)\n groupMap.set(groupName, existing)\n }\n\n return Array.from(groupMap.entries()).map(([name, groupTokens]) => ({\n name,\n tokens: groupTokens,\n }))\n}\n\nexport function indentStr(width: number, level: number): string {\n return ' '.repeat(width * level)\n}\n\nexport function buildGeneratedFileHeader(): string {\n return [\n '// Generated by Dispersa - do not edit manually',\n '// https://github.com/dispersa-core/dispersa',\n ].join('\\n')\n}\n\nexport function toSafeIdentifier(name: string, keywords: Set<string>, capitalize: boolean): string {\n const camel = name\n .replace(/[-._]+(.)/g, (_, c: string) => c.toUpperCase())\n .replace(/[-._]+$/g, '')\n .replace(/^[-._]+/g, '')\n\n const cased = capitalize\n ? camel.charAt(0).toUpperCase() + camel.slice(1)\n : camel.charAt(0).toLowerCase() + camel.slice(1)\n\n const safe = /^\\d/.test(cased) ? `_${cased}` : cased\n\n const keyCheck = capitalize ? safe.charAt(0).toLowerCase() + safe.slice(1) : safe\n return keywords.has(keyCheck) ? `\\`${safe}\\`` : safe\n}\n\nexport function normalizeModifierInputs(inputs: Record<string, string>): Record<string, string> {\n const normalized: Record<string, string> = {}\n for (const [key, value] of Object.entries(inputs)) {\n normalized[key.toLowerCase()] = value.toLowerCase()\n }\n return normalized\n}\n\nexport function assertFileRequired(\n buildPath: string | undefined,\n outputFile: string | ((inputs: ModifierInputs) => string) | undefined,\n outputName: string,\n presetLabel: string,\n): void {\n const requiresFile = buildPath !== undefined && buildPath !== ''\n if (!outputFile && requiresFile) {\n throw new ConfigurationError(\n `Output \"${outputName}\": file is required for ${presetLabel} output`,\n )\n }\n}\n\nexport function buildStablePermutationKey(\n modifierInputs: Record<string, string>,\n dimensions: string[],\n): string {\n return dimensions.map((dimension) => `${dimension}=${modifierInputs[dimension] ?? ''}`).join('|')\n}\n\nexport function resolveSelector(\n selector: string | SelectorFunction | undefined,\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n): string {\n if (typeof selector === 'function') {\n return selector(modifierName, context, isBase, allModifierInputs)\n }\n if (typeof selector === 'string') {\n return selector\n }\n if (isBase) {\n return ':root'\n }\n\n const attrName = sanitizeDataAttributeName(modifierName)\n const attrValue = escapeCssString(context)\n return `[data-${attrName}=\"${attrValue}\"]`\n}\n\nexport function resolveMediaQuery(\n mediaQuery: string | MediaQueryFunction | undefined,\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n): string {\n if (typeof mediaQuery === 'function') {\n return mediaQuery(modifierName, context, isBase, allModifierInputs)\n }\n if (typeof mediaQuery === 'string') {\n return mediaQuery\n }\n return ''\n}\n\nexport function stripInternalMetadata(tokens: InternalResolvedTokens): ResolvedTokens {\n return stripInternalTokenMetadata(tokens)\n}\n\nexport function generatePermutationKey(\n modifierInputs: Record<string, string>,\n resolver: ResolverDocument,\n isBase: boolean,\n): string {\n if (isBase) {\n return 'base'\n }\n\n const metadata = buildMetadata(resolver)\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const defaults = metadata.defaults\n\n const differences: Array<{ name: string; value: string }> = []\n for (const dimension of metadata.dimensions) {\n const value = normalizedInputs[dimension]\n if (value !== undefined && value !== defaults[dimension]) {\n differences.push({ name: dimension, value })\n }\n }\n\n if (differences.length === 1 && differences[0]) {\n const diff = differences[0]\n return `${diff.name}-${diff.value}`\n }\n\n return buildStablePermutationKey(normalizedInputs, metadata.dimensions)\n}\n\nexport function isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n): boolean {\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(defaults)\n return Object.entries(normalizedDefaults).every(([key, value]) => normalizedInputs[key] === value)\n}\n\nexport function buildInMemoryOutputKey(params: {\n outputName: string\n extension: string\n modifierInputs: Record<string, string>\n resolver: ResolverDocument\n defaults: Record<string, string>\n}): string {\n const { outputName, extension, modifierInputs, resolver, defaults } = params\n const permutationKey = generatePermutationKey(\n modifierInputs,\n resolver,\n isBasePermutation(modifierInputs, defaults),\n )\n return `${outputName}-${permutationKey}.${extension}`\n}\n\nexport type BundleMetadata = {\n dimensions: string[]\n defaults: Record<string, string>\n}\n\nexport function buildMetadata(resolver: ResolverDocument): BundleMetadata {\n const metadata: BundleMetadata = {\n dimensions: [],\n defaults: {},\n }\n\n if (resolver.modifiers) {\n for (const [name, modifier] of Object.entries(resolver.modifiers)) {\n const normalizedName = name.toLowerCase()\n const defaultContext = modifier.default ?? Object.keys(modifier.contexts)[0] ?? ''\n metadata.dimensions.push(normalizedName)\n metadata.defaults[normalizedName] = defaultContext.toLowerCase()\n }\n }\n\n return metadata\n}\n\nexport async function resolveResolverDocument(\n input: string | ResolverDocument,\n): Promise<ResolverDocument> {\n if (typeof input === 'string') {\n const { ResolverLoader } = await import('@adapters/filesystem/resolver-loader')\n const loader = new ResolverLoader({})\n return await loader.loadDocument(input)\n }\n return input\n}\n\nexport function countModifierDifferences(\n currentInputs: Record<string, string>,\n baseInputs: Record<string, string>,\n): number {\n const normalizedCurrent = normalizeModifierInputs(currentInputs)\n const normalizedBase = normalizeModifierInputs(baseInputs)\n let count = 0\n for (const [key, value] of Object.entries(normalizedCurrent)) {\n if (value !== normalizedBase[key]) {\n count++\n }\n }\n return count\n}\n\nexport function getExpectedSource(\n currentInputs: Record<string, string>,\n baseInputs: Record<string, string>,\n): string {\n const normalizedCurrent = normalizeModifierInputs(currentInputs)\n const normalizedBase = normalizeModifierInputs(baseInputs)\n for (const [key, value] of Object.entries(normalizedCurrent)) {\n if (value !== normalizedBase[key]) {\n return `${key}-${value}`\n }\n }\n return 'base'\n}\n\nexport function parseModifierSource(source: string): [modifierName: string, context: string] {\n const dashIndex = source.indexOf('-')\n if (dashIndex === -1) {\n return [source, '']\n }\n return [source.slice(0, dashIndex), source.slice(dashIndex + 1)]\n}\n\nexport function filterTokensBySource(\n tokens: InternalResolvedTokens,\n expectedSource: string,\n): InternalResolvedTokens {\n const filtered: InternalResolvedTokens = {}\n const expected = expectedSource.toLowerCase()\n\n for (const [name, token] of Object.entries(tokens)) {\n const source =\n typeof token._sourceModifier === 'string' ? token._sourceModifier.toLowerCase() : ''\n\n if (source !== '' && source === expected) {\n filtered[name] = token\n }\n }\n\n return filtered\n}\n\nexport function filterTokensFromSets(tokens: InternalResolvedTokens): InternalResolvedTokens {\n const filtered: InternalResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n const hasModifierSource =\n typeof token._sourceModifier === 'string' && token._sourceModifier !== ''\n if (!hasModifierSource) {\n filtered[name] = token\n }\n }\n\n return filtered\n}\n\nexport function resolveBaseFileName(\n fileName: string | ((modifierInputs: ModifierInputs) => string),\n defaults: ModifierInputs,\n): string {\n if (typeof fileName === 'function') {\n return fileName({ ...defaults, _base: 'true' })\n }\n\n if (/\\{.+?\\}/.test(fileName)) {\n const baseInputs = Object.fromEntries(Object.keys(defaults).map((k) => [k, 'base']))\n return collapseBaseSegments(interpolatePattern(fileName, baseInputs))\n }\n\n const extMatch = fileName.match(/(\\.[^.]+)$/)\n const extension = extMatch ? extMatch[1] : ''\n const baseName = extension ? fileName.slice(0, -extension.length) : fileName\n return `${baseName}-base${extension}`\n}\n\nfunction collapseBaseSegments(value: string): string {\n let result = value\n let previous = ''\n while (result !== previous) {\n previous = result\n result = result.replace(/\\bbase([/-])base\\b/, 'base')\n }\n return result\n}\n\nexport function interpolatePattern(pattern: string, modifierInputs: ModifierInputs): string {\n let result = pattern\n\n for (const [key, value] of Object.entries(modifierInputs)) {\n result = result.replaceAll(`{${key}}`, value)\n }\n return result\n}\n\nexport function resolveFileName(\n fileName: string | ((modifierInputs: ModifierInputs) => string),\n modifierInputs: ModifierInputs,\n): string {\n if (typeof fileName === 'function') {\n return fileName(modifierInputs)\n }\n\n if (/\\{.+?\\}/.test(fileName)) {\n return interpolatePattern(fileName, modifierInputs)\n }\n\n const extMatch = fileName.match(/(\\.[^.]+)$/)\n const extension = extMatch ? extMatch[1] : ''\n const baseName = extension ? fileName.slice(0, -extension.length) : fileName\n\n const modifierSuffix = Object.entries(modifierInputs)\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .map(([key, value]) => `${key}-${value}`)\n .join('-')\n\n if (modifierSuffix) {\n return `${baseName}-${modifierSuffix}${extension}`\n }\n\n return fileName\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Shared utilities for consistent metadata formatting across renderers\n */\n\nimport type { ResolvedToken } from '@shared/token-types'\n\nexport type CommentFormat = 'css' | 'js' | 'swift' | 'kotlin' | 'tailwind'\n\nfunction sanitizeText(text: string, format: CommentFormat): string {\n switch (format) {\n case 'css':\n case 'tailwind':\n return text.replace(/\\*\\//g, '*\\\\/').replace(/\\r?\\n/g, ' ').trim()\n case 'kotlin':\n return text.replace(/\\*\\//g, '* /').replace(/\\r?\\n/g, ' ').trim()\n case 'js':\n case 'swift':\n return text.replace(/\\r?\\n/g, ' ').trim()\n default:\n return text.trim()\n }\n}\n\nfunction buildDeprecationText(token: ResolvedToken): string {\n if (token.$deprecated == null || token.$deprecated === false) {\n return ''\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n return msg ? `DEPRECATED: ${msg}` : 'DEPRECATED'\n}\n\nexport function buildTokenDescriptionComment(\n token: ResolvedToken,\n format: CommentFormat,\n): string | undefined {\n if (!token.$description || token.$description === '') {\n return undefined\n }\n\n const text = sanitizeText(token.$description, format)\n\n switch (format) {\n case 'css':\n case 'tailwind':\n return `/* ${text} */`\n case 'js':\n return `// ${text}`\n case 'swift':\n return `/// ${text}`\n case 'kotlin':\n return `/** ${text} */`\n default:\n return undefined\n }\n}\n\nexport function buildTokenDeprecationComment(\n token: ResolvedToken,\n format: CommentFormat,\n): string | undefined {\n const text = buildDeprecationText(token)\n if (!text) {\n return undefined\n }\n\n switch (format) {\n case 'css':\n case 'tailwind':\n return `/* ${text} */`\n case 'js':\n return `// ${text}`\n case 'swift':\n return `/// ${text}`\n case 'kotlin':\n return `/** ${text} */`\n default:\n return undefined\n }\n}\n\nexport function buildSetComment(setName: string, description?: string): string {\n if (description) {\n return `/* Set: ${setName} */\\n/* ${sanitizeText(description, 'css')} */`\n }\n return `/* Set: ${setName} */`\n}\n\nexport function buildModifierComment(modifier: string, context: string): string {\n return `/* Modifier: ${modifier}=${context} */`\n}\n\nexport function buildSwiftDeprecationAttribute(token: ResolvedToken): string | undefined {\n if (token.$deprecated == null || token.$deprecated === false) {\n return undefined\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n if (msg) {\n return `@available(*, deprecated, message: \"${sanitizeText(msg, 'swift')}\")`\n }\n return '@available(*, deprecated)'\n}\n\nexport function buildKotlinDeprecationAnnotation(token: ResolvedToken): string | undefined {\n if (token.$deprecated == null || token.$deprecated === false) {\n return undefined\n }\n\n const msg = typeof token.$deprecated === 'string' ? token.$deprecated : ''\n if (msg) {\n return `@Deprecated(message = \"${sanitizeText(msg, 'kotlin')}\")`\n }\n return '@Deprecated'\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview JavaScript module bundler for multi-theme output\n */\n\nimport type { JsModuleRendererOptions } from '../../types'\nimport type { ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@shared/token-types'\n\nimport { buildModifierComment } from '../../metadata'\n\nimport type { BundleDataItem } from './types'\nimport type { BundleMetadata } from '../../utils'\nimport { buildMetadata, normalizeModifierInputs, stripInternalMetadata } from '../../utils'\n\ntype StringTrackingState = {\n inString: boolean\n stringChar: string\n escaped: boolean\n}\n\nfunction updateStringTracking(state: StringTrackingState, char: string): void {\n if (!state.escaped && (char === '\"' || char === \"'\" || char === '`')) {\n if (!state.inString) {\n state.inString = true\n state.stringChar = char\n } else if (char === state.stringChar) {\n state.inString = false\n state.stringChar = ''\n }\n }\n state.escaped = !state.escaped && char === '\\\\'\n}\n\n/**\n * Extract object literal from formatted JS module using balanced brace matching\n * More robust than regex for handling nested objects/arrays\n */\nfunction extractObjectFromJsModule(formattedJs: string): string {\n const assignmentMatch = /const\\s+\\w+\\s*=\\s*\\{/.exec(formattedJs)\n if (!assignmentMatch) {\n return '{}'\n }\n\n const startIndex = assignmentMatch.index + assignmentMatch[0].length - 1\n const state: StringTrackingState = { inString: false, stringChar: '', escaped: false }\n let braceCount = 0\n\n for (let i = startIndex; i < formattedJs.length; i++) {\n const char = formattedJs[i]!\n updateStringTracking(state, char)\n\n if (state.inString) {\n continue\n }\n\n if (char === '{') {\n braceCount++\n } else if (char === '}') {\n braceCount--\n if (braceCount === 0) {\n return formattedJs.substring(startIndex, i + 1)\n }\n }\n }\n\n return '{}'\n}\n\nfunction toCamelKey(key: string): string {\n if (key === '') {\n return ''\n }\n return key\n .split('-')\n .filter((part) => part !== '')\n .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1)))\n .join('')\n}\n\nfunction buildStableDashKey(params: {\n modifierInputs: Record<string, string>\n dimensions: string[]\n defaults: Record<string, string>\n}): string {\n const { modifierInputs, dimensions, defaults } = params\n const inputs = normalizeModifierInputs(modifierInputs)\n\n return dimensions\n .map((dimension) => {\n const value = inputs[dimension] ?? defaults[dimension] ?? ''\n return String(value)\n })\n .join('-')\n}\n\n/** Generate the optional getTokens helper function source */\nfunction buildHelperFunction(dimensions: string[]): string {\n const dimensionOrder = dimensions.map((d) => JSON.stringify(d)).join(', ')\n return [\n `/**`,\n ` * Get tokens for a specific modifier combination`,\n ` * @param {Object} modifiers - Modifier values (e.g., { theme: 'dark', brand: 'partner-a' })`,\n ` * @returns {Object} Resolved tokens for the combination`,\n ` */`,\n `export function getTokens(modifiers = {}) {`,\n ` const key = [${dimensionOrder}]`,\n ` .map(dim => modifiers[dim] ?? tokenBundle._meta.defaults[dim])`,\n ` .join('-')`,\n ` const camelKey = key`,\n ` .split('-')`,\n ` .filter(Boolean)`,\n ` .map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1)))`,\n ` .join('')`,\n ` return tokenBundle.tokens[camelKey]`,\n `}`,\n ``,\n ``,\n ].join('\\n')\n}\n\n/** Assemble the final JS bundle output string */\nfunction assembleJsBundle(\n metadata: BundleMetadata,\n jsBlocks: string[],\n generateHelper: boolean,\n): string {\n let output = `const tokenBundle = {\\n`\n output += ` _meta: ${JSON.stringify(metadata, null, 2).replace(/\\n/g, '\\n ')},\\n`\n output += ` tokens: {\\n${jsBlocks.join(',\\n')}\\n }\\n`\n output += `}\\n\\n`\n\n if (generateHelper) {\n output += buildHelperFunction(metadata.dimensions)\n }\n\n output += `export default tokenBundle\\n`\n return output\n}\n\n/**\n * Bundle tokens as JS module with metadata and optional helper\n *\n * JS-specific strategy: All combinations for dynamic theming\n * - Includes metadata with dimensions and defaults\n * - All permutations included (no filtering)\n * - Optional helper function for key generation\n */\nexport async function bundleAsJsModule(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n options: JsModuleRendererOptions | undefined,\n formatTokens?: (tokens: ResolvedTokens) => Promise<string>,\n): Promise<string> {\n if (!formatTokens) {\n throw new ConfigurationError('JS formatter was not provided')\n }\n\n const metadata = buildMetadata(resolver)\n const jsBlocks: string[] = []\n\n for (const { tokens, modifierInputs, isBase } of bundleData) {\n const cleanTokens = stripInternalMetadata(tokens)\n const key = buildStableDashKey({\n modifierInputs,\n dimensions: metadata.dimensions,\n defaults: metadata.defaults,\n })\n const camelKey = toCamelKey(key)\n\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const modifierParts: string[] = []\n for (const dim of metadata.dimensions) {\n const value = normalizedInputs[dim.toLowerCase()]\n if (value) {\n modifierParts.push(`${dim}=${value}`)\n }\n }\n\n const formattedJs = await formatTokens(cleanTokens)\n const tokenObject = extractObjectFromJsModule(formattedJs)\n const indentedObject = tokenObject.replace(/\\n/g, '\\n ')\n\n let comment: string\n if (modifierParts.length > 0) {\n const modifierPart = modifierParts[0]!\n const eqIndex = modifierPart.indexOf('=')\n const modifier = modifierPart.slice(0, eqIndex)\n const context = modifierPart.slice(eqIndex + 1)\n comment = buildModifierComment(modifier, context)\n } else if (isBase) {\n comment = '// Base permutation'\n } else {\n comment = `// ${key}`\n }\n\n jsBlocks.push(` ${comment}\\n ${JSON.stringify(camelKey)}: ${indentedObject}`)\n }\n\n return assembleJsBundle(metadata, jsBlocks, options?.generateHelper ?? false)\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview JSON bundler for multi-theme output\n */\n\nimport type { ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@shared/token-types'\n\nimport type { BundleDataItem } from './types'\nimport {\n buildMetadata,\n buildStablePermutationKey,\n normalizeModifierInputs,\n stripInternalMetadata,\n} from '../../utils'\n\n/**\n * Bundle tokens as JSON object with metadata for runtime lookup\n *\n * JSON-specific strategy: All combinations for dynamic theming\n * - Includes metadata with dimensions and defaults\n * - All permutations included (no filtering)\n * - Predictable keys for O(1) lookup\n */\nexport async function bundleAsJson(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n formatTokens?: (tokens: ResolvedTokens) => Promise<string>,\n): Promise<string> {\n if (!formatTokens) {\n throw new ConfigurationError('JSON formatter was not provided')\n }\n\n const metadata = buildMetadata(resolver)\n const tokens: Record<string, unknown> = {}\n\n for (const { tokens: tokenSet, modifierInputs } of bundleData) {\n const cleanTokens = stripInternalMetadata(tokenSet)\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const key = buildStablePermutationKey(normalizedInputs, metadata.dimensions)\n const themeJson = await formatTokens(cleanTokens)\n tokens[key] = JSON.parse(themeJson) as unknown\n }\n\n const bundle = { _meta: metadata, tokens }\n return JSON.stringify(bundle, null, 2)\n}\n","/**\n * @fileoverview TypeScript type definition generator for design tokens\n *\n * Generates comprehensive TypeScript type definitions from resolved tokens\n * including token name unions, value types, and nested structure types.\n */\n\nimport type { ResolvedTokens, ResolvedToken, TokenType } from '@shared/token-types'\n\n/**\n * Options for TypeScript type generation\n */\nexport type TypeGeneratorOptions = {\n /** Export style: 'type' alias or 'interface' (default: 'type') */\n exportType?: 'type' | 'interface'\n\n /** Include token value types (default: false) */\n includeValues?: boolean\n\n /** Name for the main module type (default: 'Tokens') */\n moduleName?: string\n}\n\n/**\n * Generates TypeScript type definitions from design tokens\n *\n * Creates type-safe TypeScript definitions including:\n * - Token name string literal unions for autocomplete\n * - Value types mapped to token values\n * - Nested structure types matching token hierarchy\n *\n * @example\n * ```typescript\n * const generator = new TypeGenerator()\n * const types = generator.generate(tokens, {\n * exportType: 'type',\n * includeValues: true,\n * moduleName: 'DesignTokens'\n * })\n *\n * // Output:\n * // export type TokenName = 'color.primary' | 'color.secondary' | ...\n * // export type DesignTokens = { color: { primary: string, ... } }\n * ```\n */\nexport class TypeGenerator {\n /**\n * Generates complete TypeScript type definitions from resolved tokens\n *\n * @param tokens - Resolved tokens to generate types from\n * @param options - Generation options\n * @returns TypeScript type definition string\n *\n * @example\n * ```typescript\n * const types = generator.generate(tokens, {\n * moduleName: 'Tokens',\n * includeValues: true\n * })\n * ```\n */\n generate(tokens: ResolvedTokens, options?: TypeGeneratorOptions): string {\n const opts = {\n exportType: 'type',\n includeValues: false,\n moduleName: 'Tokens',\n ...options,\n } as const\n\n const lines: string[] = []\n\n // Generate token names type\n lines.push(...this.generateTokenNamesType(tokens, 'TokenName'))\n lines.push('')\n\n // Generate token values type\n if (opts.includeValues) {\n lines.push(...this.generateTokenValuesType(tokens, `${opts.moduleName}Values`))\n lines.push('')\n }\n\n // Generate nested structure type\n lines.push(...this.generateStructureType(tokens, opts))\n\n return lines.join('\\n')\n }\n\n /**\n * Generates a string literal union type of all token names\n *\n * Useful for creating type-safe token name variables.\n *\n * @param tokens - Resolved tokens\n * @param typeName - Name for the exported type (default: 'TokenName')\n * @returns Array of type definition lines\n *\n * @example\n * ```typescript\n * // Output:\n * // export type TokenName =\n * // | \"color.primary\"\n * // | \"color.secondary\"\n * ```\n */\n generateTokenNamesType(tokens: ResolvedTokens, typeName = 'TokenName'): string[] {\n const names = Object.keys(tokens)\n const lines: string[] = []\n\n if (names.length === 0) {\n lines.push(`export type ${typeName} = never`)\n return lines\n }\n\n lines.push(`export type ${typeName} =`)\n for (let i = 0; i < names.length; i++) {\n const name = names[i]\n if (name == null) {\n continue\n }\n lines.push(` | \"${name}\"`)\n }\n\n return lines\n }\n\n /**\n * Generate token values type\n */\n generateTokenValuesType(tokens: ResolvedTokens, typeName = 'TokenValues'): string[] {\n const lines: string[] = []\n\n lines.push(`export type ${typeName} = {`)\n\n for (const [name, token] of Object.entries(tokens)) {\n if (token.$description) {\n lines.push(` /** ${token.$description} */`)\n }\n\n const valueType = this.inferValueType(token)\n lines.push(` \"${name}\": ${valueType}`)\n }\n\n lines.push('}')\n\n return lines\n }\n\n /**\n * Generate nested structure type\n */\n private generateStructureType(\n tokens: ResolvedTokens,\n options: Required<TypeGeneratorOptions>,\n ): string[] {\n const lines: string[] = []\n const structure = this.buildNestedStructure(tokens)\n\n const opener =\n options.exportType === 'type'\n ? `export type ${options.moduleName} = {`\n : `export interface ${options.moduleName} {`\n\n lines.push(opener)\n this.addStructureProperties(lines, structure, 1)\n lines.push('}')\n\n return lines\n }\n\n /**\n * Build nested structure from flat tokens\n */\n private buildNestedStructure(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const token of Object.values(tokens)) {\n const parts = token.path\n if (!parts || parts.length === 0) {\n continue\n }\n\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part == null) {\n continue\n }\n if (!(part in current)) {\n current[part] = {}\n }\n current = current[part] as Record<string, unknown>\n }\n\n const lastPart = parts[parts.length - 1]\n if (lastPart != null) {\n current[lastPart] = token\n }\n }\n\n return result\n }\n\n /**\n * Add structure properties to lines\n */\n private addStructureProperties(\n lines: string[],\n structure: Record<string, unknown>,\n indent: number,\n ): void {\n const indentStr = ' '.repeat(indent)\n\n for (const [key, value] of Object.entries(structure)) {\n if (this.isToken(value)) {\n const token = value\n if (token.$description) {\n lines.push(`${indentStr}/** ${token.$description} */`)\n }\n\n const valueType = this.inferValueType(token)\n lines.push(`${indentStr}${this.quoteKey(key)}: ${valueType}`)\n } else {\n lines.push(`${indentStr}${this.quoteKey(key)}: {`)\n this.addStructureProperties(lines, value as Record<string, unknown>, indent + 1)\n lines.push(`${indentStr}}`)\n }\n }\n }\n\n /**\n * Infer TypeScript type from token\n */\n private inferValueType(token: ResolvedToken): string {\n const value = token.$value\n\n // Use token type if available\n if (token.$type) {\n return this.tokenTypeToTsType(token.$type)\n }\n\n // Infer from value\n if (typeof value === 'string') {\n return 'string'\n }\n if (typeof value === 'number') {\n return 'number'\n }\n if (typeof value === 'boolean') {\n return 'boolean'\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'unknown[]'\n }\n const itemType = typeof value[0]\n return `${itemType}[]`\n }\n\n if (typeof value === 'object' && value !== null) {\n return 'Record<string, unknown>'\n }\n\n return 'unknown'\n }\n\n /**\n * Map a DTCG token type to its TypeScript type representation.\n *\n * Covers the standard DTCG types (color, dimension, shadow, etc.).\n * Falls back to `string` for unrecognised types.\n */\n private tokenTypeToTsType(tokenType: TokenType): string {\n switch (tokenType) {\n case 'color':\n case 'dimension':\n case 'fontFamily':\n case 'duration':\n return 'string'\n case 'fontWeight':\n return 'string | number'\n case 'number':\n return 'number'\n case 'cubicBezier':\n return '[number, number, number, number]'\n case 'shadow':\n return '{ color: string; offsetX: string; offsetY: string; blur: string; spread: string; inset?: boolean } | Array<{ color: string; offsetX: string; offsetY: string; blur: string; spread: string; inset?: boolean }>'\n default:\n return 'string'\n }\n }\n\n /**\n * Quote key if necessary\n */\n private quoteKey(key: string): string {\n if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n return key\n }\n return `\"${key}\"`\n }\n\n /**\n * Check if value is a token\n */\n private isToken(value: unknown): value is ResolvedToken {\n return (\n typeof value === 'object' &&\n value !== null &&\n '$value' in value &&\n 'path' in value &&\n 'name' in value\n )\n }\n}\n","/**\n * @fileoverview TypeScript type file writer\n */\n\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport * as path from 'node:path'\n\nimport { TypeGenerator, type TypeGeneratorOptions } from '@codegen/type-generator'\nimport type { ResolvedTokens } from '@shared/token-types'\n\nexport type TypeWriterOptions = TypeGeneratorOptions & {\n fileName: string\n}\n\nexport class TypeWriter {\n private generator: TypeGenerator\n\n constructor() {\n this.generator = new TypeGenerator()\n }\n\n /**\n * Write type definitions to file\n */\n async write(tokens: ResolvedTokens, options: TypeWriterOptions): Promise<void> {\n const content = this.generator.generate(tokens, options)\n const fileName = path.isAbsolute(options.fileName)\n ? options.fileName\n : path.resolve(process.cwd(), options.fileName)\n\n // Ensure directory exists\n await mkdir(path.dirname(fileName), { recursive: true })\n\n // Write file\n await writeFile(fileName, content, 'utf-8')\n }\n\n /**\n * Generate type definitions without writing to file\n */\n generate(tokens: ResolvedTokens, options?: TypeGeneratorOptions): string {\n return this.generator.generate(tokens, options)\n }\n}\n","/**\n * @fileoverview Build orchestration and coordination\n * Handles build execution and error collection\n */\n\nimport type { OutputProcessor } from '@engine/output-processor'\nimport type { BuildConfig } from '@engine/types'\nimport { buildMetadata, resolveResolverDocument } from '@outputs/utils'\nimport type { BuildResult, PermutationData, RenderContext } from '@outputs/types'\nimport type { ResolverDocument } from '@resolution/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { toBuildError } from '@shared/utils/error-utils'\nimport type { TokenPipeline } from './pipeline/token-pipeline'\n\n/**\n * Orchestrates the build process for design tokens\n *\n * Coordinates between the token pipeline, output processor, and renderers\n * to generate output files. Handles error collection and provides consistent\n * error handling across different outputs.\n *\n * @example\n * ```typescript\n * const orchestrator = new BuildOrchestrator(pipeline, outputProcessor)\n * const result = await orchestrator.build(resolver, buildPath, config)\n * ```\n */\nexport class BuildOrchestrator {\n constructor(\n private pipeline: TokenPipeline,\n private outputProcessor: OutputProcessor,\n ) {}\n\n /**\n * Build tokens with explicit or auto-discovered permutations\n *\n * Unified build method that handles both explicit and auto-discovered permutations:\n * - If `config.permutations` is provided and non-empty, builds those specific permutations\n * - If `config.permutations` is empty/undefined, auto-discovers all permutations from resolver\n * - If `config.permutations` is `[{}]`, builds single default permutation\n *\n * This consolidates the previous `build()` and `build()` methods into one unified API.\n *\n * @param resolver - Resolver configuration (file path or inline object)\n * @param buildPath - Output directory for generated files\n * @param config - Build configuration with outputs and transforms\n * @returns Build result with success status and generated files\n *\n * @example Build all permutations (auto-discover)\n * ```typescript\n * await orchestrator.build(resolver, buildPath, {\n * outputs: [{ name: 'css', renderer: cssRenderer(), file: 'tokens.css', options: { preset: 'bundle' } }]\n * })\n * ```\n *\n * @example Build specific permutations\n * ```typescript\n * await orchestrator.build(resolver, buildPath, {\n * outputs: [\n * { name: 'css', renderer: cssRenderer(), file: 'tokens.css', options: { preset: 'standalone' } }\n * ],\n * permutations: [{ theme: 'light' }, { theme: 'dark' }]\n * })\n * ```\n *\n * @example Build with default permutation (no modifiers)\n * ```typescript\n * await orchestrator.build(resolver, buildPath, {\n * outputs: [\n * { name: 'css', renderer: cssRenderer(), file: 'tokens.css', options: { preset: 'standalone' } }\n * ],\n * permutations: [{}]\n * })\n * ```\n */\n async build(\n resolver: string | ResolverDocument,\n buildPath: string,\n config: BuildConfig,\n ): Promise<BuildResult> {\n // Fire onBuildStart hook before any work begins\n if (config.hooks?.onBuildStart) {\n await config.hooks.onBuildStart({ config, resolver })\n }\n\n if (!config.permutations || config.permutations.length === 0) {\n // Resolve all permutations without lint\n const permutations = await this.pipeline.resolveAllPermutations(\n resolver,\n config.transforms,\n config.preprocessors,\n config.filters,\n )\n\n // Run lint on all permutations with deduplication\n if (config.lint?.enabled) {\n const tokenSets = permutations.map((p) => p.tokens)\n await this.pipeline.runLintOnPermutations(tokenSets, config.lint)\n }\n\n return this.executeBuild(buildPath, config, permutations, resolver)\n }\n\n const permutations = await Promise.all(\n config.permutations.map(async (modifierInputs) => {\n const { tokens, modifierInputs: resolvedInputs } = await this.pipeline.resolve(\n resolver,\n modifierInputs,\n config.transforms,\n config.preprocessors,\n config.filters,\n )\n return { tokens, modifierInputs: resolvedInputs }\n }),\n )\n\n if (config.lint?.enabled) {\n const tokenSets = permutations.map((p) => p.tokens)\n await this.pipeline.runLintOnPermutations(tokenSets, config.lint)\n }\n\n return this.executeBuild(buildPath, config, permutations, resolver)\n }\n\n /**\n * Execute the build process for resolved permutations\n *\n * This is the main build execution logic that processes all permutations through\n * each output's renderer, collecting errors but continuing execution to maximize\n * successful outputs even when some outputs fail.\n *\n * This method replaces the previous `buildWithResolver()` method and handles:\n * - Applying transforms and filters from the build configuration\n * - Processing permutations through each output's renderer\n * - Collecting errors but continuing with other outputs\n * - Returning a unified build result with outputs and errors\n *\n * @param buildPath - Output directory for generated files\n * @param config - Build configuration with outputs and transforms\n * @param permutations - Array of resolved permutation data\n * @returns Build result with success status, outputs, and any errors\n */\n private async executeBuild(\n buildPath: string,\n config: BuildConfig,\n permutations: PermutationData[],\n resolver: string | ResolverDocument,\n ): Promise<BuildResult> {\n try {\n const resolverDoc = await resolveResolverDocument(resolver)\n const metadata = buildMetadata(resolverDoc)\n\n const settled = await Promise.allSettled(\n config.outputs.map((output) =>\n this.buildSingleOutput(\n output,\n permutations,\n resolverDoc,\n metadata,\n buildPath,\n config,\n resolver,\n ),\n ),\n )\n\n const result = this.collectSettledResults(settled, config)\n\n if (config.hooks?.onBuildEnd) {\n await config.hooks.onBuildEnd(result)\n }\n\n return result\n } catch (error) {\n const result: BuildResult = {\n success: false,\n outputs: [],\n errors: [toBuildError(error)],\n }\n\n if (config.hooks?.onBuildEnd) {\n await config.hooks.onBuildEnd(result)\n }\n\n return result\n }\n }\n\n private async buildSingleOutput(\n output: BuildConfig['outputs'][number],\n permutations: PermutationData[],\n resolverDoc: ResolverDocument,\n metadata: ReturnType<typeof buildMetadata>,\n buildPath: string,\n config: BuildConfig,\n resolver: string | ResolverDocument,\n ): Promise<BuildResult['outputs']> {\n if (output.hooks?.onBuildStart) {\n await output.hooks.onBuildStart({ config, resolver })\n }\n\n try {\n const results = await this.processOutput(\n output,\n permutations,\n resolverDoc,\n metadata,\n metadata.defaults,\n buildPath,\n )\n\n if (output.hooks?.onBuildEnd) {\n await output.hooks.onBuildEnd({ success: true, outputs: results })\n }\n\n return results\n } catch (error) {\n if (output.hooks?.onBuildEnd) {\n await output.hooks.onBuildEnd({\n success: false,\n outputs: [],\n errors: [toBuildError(error, output.name)],\n })\n }\n\n throw error\n }\n }\n\n private collectSettledResults(\n settled: PromiseSettledResult<BuildResult['outputs']>[],\n config: BuildConfig,\n ): BuildResult {\n const outputs: BuildResult['outputs'] = []\n const errors: BuildResult['errors'] = []\n\n for (let i = 0; i < settled.length; i++) {\n const outcome = settled[i]!\n if (outcome.status === 'fulfilled') {\n outputs.push(...outcome.value)\n } else {\n errors.push(toBuildError(outcome.reason, config.outputs[i]!.name))\n }\n }\n\n return {\n success: errors.length === 0,\n outputs,\n errors: errors.length > 0 ? errors : undefined,\n }\n }\n\n private async processOutput(\n output: BuildConfig['outputs'][number],\n permutations: PermutationData[],\n resolverDoc: ResolverDocument,\n metadata: ReturnType<typeof buildMetadata>,\n basePermutation: Record<string, string>,\n buildPath: string,\n ) {\n if (!output.renderer.format) {\n throw new ConfigurationError('Renderer does not implement format()')\n }\n\n const processedPermutations = this.outputProcessor.processPermutations(permutations, output)\n\n const context: RenderContext = {\n permutations: processedPermutations,\n output,\n resolver: resolverDoc,\n meta: { ...metadata, basePermutation },\n buildPath,\n }\n\n const renderOutput = await output.renderer.format(context, output.options)\n return this.outputProcessor.writeRenderOutput(renderOutput, context)\n }\n\n /**\n * Note: intentionally no version/introspection API here.\n * Keep public surface minimal; use package versioning instead.\n */\n}\n","/**\n * @fileoverview Error handling utilities\n */\n\nimport type { BuildError } from '@outputs/types'\nimport {\n BasePermutationError,\n CircularReferenceError,\n ConfigurationError,\n FileOperationError,\n ModifierError,\n TokenReferenceError,\n ValidationError,\n} from '@shared/errors/index'\n\n/**\n * Extract error message from unknown error value\n * Standardizes error message extraction across the codebase\n *\n * @param error - Unknown error value\n * @returns Error message string\n */\nexport function getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\n/**\n * Convert an unknown error into a structured BuildError.\n *\n * Extracts typed context (error code, token path, file path) from\n * the dispersa error hierarchy so that BuildResult consumers can\n * programmatically react to specific failure modes.\n *\n * @param error - The caught error value\n * @param outputName - Optional output name to prefix the message\n * @returns A structured BuildError with code, paths, and severity\n */\nexport function toBuildError(error: unknown, outputName?: string): BuildError {\n const rawMessage = getErrorMessage(error)\n const message = outputName ? `Failed to build output '${outputName}': ${rawMessage}` : rawMessage\n\n if (error instanceof TokenReferenceError) {\n return {\n message,\n code: 'TOKEN_REFERENCE',\n tokenPath: error.referenceName,\n severity: 'error',\n suggestions: error.suggestions.length > 0 ? error.suggestions : undefined,\n }\n }\n if (error instanceof CircularReferenceError) {\n return { message, code: 'CIRCULAR_REFERENCE', tokenPath: error.tokenName, severity: 'error' }\n }\n if (error instanceof ValidationError) {\n return { message, code: 'VALIDATION', severity: 'error' }\n }\n if (error instanceof FileOperationError) {\n return { message, code: 'FILE_OPERATION', path: error.filePath, severity: 'error' }\n }\n if (error instanceof ConfigurationError) {\n return { message, code: 'CONFIGURATION', severity: 'error' }\n }\n if (error instanceof BasePermutationError) {\n return { message, code: 'BASE_PERMUTATION', severity: 'error' }\n }\n if (error instanceof ModifierError) {\n return { message, code: 'MODIFIER', severity: 'error' }\n }\n\n return { message, code: 'UNKNOWN', severity: 'error' }\n}\n","/**\n * @fileoverview File I/O utilities for consistent file operations\n */\n\nimport { constants as fsConstants } from 'node:fs'\nimport { access, mkdir, readFile, writeFile } from 'node:fs/promises'\nimport * as path from 'node:path'\n\nimport { FileOperationError, ValidationError } from '@shared/errors/index'\n/**\n * Read and parse a JSON file\n * Provides consistent error handling and path resolution\n *\n * @param filePath - Path to JSON file (absolute or relative)\n * @param baseDir - Base directory for resolving relative paths (defaults to cwd)\n * @returns Parsed JSON content\n * @throws Error if file not found or invalid JSON\n */\nexport async function readJSONFile(filePath: string, baseDir?: string): Promise<unknown> {\n const absolutePath = path.isAbsolute(filePath)\n ? filePath\n : path.resolve(baseDir ?? process.cwd(), filePath)\n\n try {\n await access(absolutePath, fsConstants.R_OK)\n } catch (error) {\n throw new FileOperationError('read', absolutePath, error as Error)\n }\n\n try {\n const content = await readFile(absolutePath, 'utf-8')\n return JSON.parse(content)\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error)\n throw new ValidationError(`Failed to read or parse file ${absolutePath}: ${errorMsg}`, [\n { message: errorMsg },\n ])\n }\n}\n\n/**\n * Write content to a file, creating parent directories as needed\n *\n * Provides consistent file writing with automatic directory creation.\n * This consolidates the common pattern of mkdir + writeFile.\n *\n * @param fileName - Path where file should be written (absolute or relative)\n * @param content - Content to write to the file\n * @param encoding - File encoding (default: 'utf-8')\n * @throws Error if file cannot be written\n *\n * @example\n * ```typescript\n * await writeOutputFile('./dist/tokens.css', cssContent)\n * ```\n */\nexport async function writeOutputFile(\n fileName: string,\n content: string,\n encoding: BufferEncoding = 'utf-8',\n): Promise<void> {\n try {\n // Create parent directories if they don't exist\n await mkdir(path.dirname(fileName), { recursive: true })\n // Write the file\n await writeFile(fileName, content, encoding)\n } catch (error) {\n throw new FileOperationError('write', fileName, error as Error)\n }\n}\n","/**\n * @fileoverview Utilities for applying transforms and filters to tokens\n */\n\nimport type { Filter } from '@processing/filters/types'\nimport type { Transform } from '@processing/transforms/types'\nimport type { ResolvedTokens } from '@shared/token-types'\n\n/**\n * Apply a list of transforms to tokens\n *\n * @param tokens - Tokens to transform\n * @param transformList - List of transform objects to apply\n * @returns Transformed tokens\n */\nexport function applyTransforms(\n tokens: ResolvedTokens,\n transformList: Transform[],\n): ResolvedTokens {\n const result: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n let transformed = token\n\n for (const transform of transformList) {\n // Apply transform if matcher passes (or no matcher)\n if (transform.matcher == null || transform.matcher(transformed)) {\n transformed = transform.transform(transformed)\n }\n }\n\n result[name] = transformed\n }\n\n return result\n}\n\n/**\n * Apply a list of filters to tokens\n *\n * @param tokens - Tokens to filter\n * @param filterList - List of filter objects to apply\n * @returns Filtered tokens (only tokens that pass all filters)\n */\nexport function applyFilters(tokens: ResolvedTokens, filterList: Filter[]): ResolvedTokens {\n const result: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n let shouldInclude = true\n\n for (const filter of filterList) {\n // If any filter excludes the token, skip it\n if (!filter.filter(token)) {\n shouldInclude = false\n break\n }\n }\n\n if (shouldInclude) {\n result[name] = token\n }\n }\n\n return result\n}\n","/**\n * @fileoverview Output processor for handling output-specific token rendering\n */\n\nimport * as path from 'node:path'\n\nimport { writeOutputFile } from '@adapters/filesystem/file-utils'\nimport type { OutputConfig } from '@outputs/types'\nimport type { ModifierInputs } from '@resolution/types'\nimport type { ResolvedTokens } from '@shared/token-types'\nimport { applyFilters, applyTransforms } from '@processing/apply'\nimport { resolveFileName } from '@outputs/utils'\nimport { isOutputTree } from '@outputs/output-tree'\nimport type { PermutationData, RenderContext, RenderOutput } from '@outputs/types'\nimport { ConfigurationError } from '@shared/errors/index'\n\nexport type OutputResult = {\n name: string\n /** File path or in-memory output key */\n path?: string\n content: string\n}\n\nexport class OutputProcessor {\n /**\n * Apply output-specific filters and transforms to a permutation set.\n */\n processPermutations(permutations: PermutationData[], output: OutputConfig): PermutationData[] {\n return permutations.map(({ tokens, modifierInputs }) => ({\n tokens: this.applyFiltersAndTransforms(tokens, output),\n modifierInputs,\n }))\n }\n\n /**\n * Apply filters and transforms to tokens without formatting.\n */\n applyFiltersAndTransforms(tokens: ResolvedTokens, output: OutputConfig): ResolvedTokens {\n let outputTokens = tokens\n\n // Apply output-specific filters first (select which tokens to include)\n if (output.filters !== undefined && output.filters.length > 0) {\n outputTokens = applyFilters(outputTokens, output.filters)\n }\n\n // Apply output-specific transforms (only to filtered tokens)\n if (output.transforms !== undefined && output.transforms.length > 0) {\n outputTokens = applyTransforms(outputTokens, output.transforms)\n }\n\n return outputTokens\n }\n\n /**\n * Write rendered output (string or output tree) to the filesystem.\n */\n async writeRenderOutput(\n renderOutput: RenderOutput,\n context: RenderContext,\n ): Promise<OutputResult[]> {\n if (typeof renderOutput === 'string') {\n return [await this.writeSingleOutput(renderOutput, context)]\n }\n\n if (!isOutputTree(renderOutput)) {\n throw new ConfigurationError('Renderer returned an unsupported output shape')\n }\n\n return await this.writeOutputTree(renderOutput.files, context)\n }\n\n private async writeSingleOutput(content: string, context: RenderContext): Promise<OutputResult> {\n const { output, buildPath, meta } = context\n\n if (buildPath !== undefined && buildPath !== '') {\n if (!output.file) {\n throw new ConfigurationError(\n `Output \"${output.name}\": file is required when buildPath is provided`,\n )\n }\n\n const fileName = this.resolveSingleOutputFileName(output.file, meta.basePermutation)\n const fullPath = path.resolve(buildPath, fileName)\n await writeOutputFile(fullPath, content)\n return { name: output.name, path: fullPath, content }\n }\n\n return { name: output.name, path: undefined, content }\n }\n\n private async writeOutputTree(\n files: Record<string, string>,\n context: RenderContext,\n ): Promise<OutputResult[]> {\n const { output, buildPath } = context\n const entries = Object.entries(files).sort(([pathA], [pathB]) => pathA.localeCompare(pathB))\n\n if (entries.length === 0) {\n return []\n }\n\n // Write all files in parallel -- each entry targets a unique path\n const results = await Promise.all(\n entries.map(async ([relativePath, content]) => {\n const outputPath =\n buildPath !== undefined && buildPath !== ''\n ? path.resolve(buildPath, relativePath)\n : relativePath\n\n if (buildPath !== undefined && buildPath !== '') {\n await writeOutputFile(outputPath, content)\n }\n\n return { name: output.name, path: outputPath, content } satisfies OutputResult\n }),\n )\n\n return results\n }\n\n private resolveSingleOutputFileName(\n outputFile: string | ((modifierInputs: ModifierInputs) => string),\n modifierInputs: ModifierInputs,\n ): string {\n if (typeof outputFile === 'function') {\n return outputFile(modifierInputs)\n }\n\n if (/\\{.+?\\}/.test(outputFile)) {\n return resolveFileName(outputFile, modifierInputs)\n }\n\n return outputFile\n }\n}\n","/**\n * @fileoverview Output tree helpers for custom renderers\n */\n\nimport type { OutputTree } from './types'\n\n/**\n * Create an {@link OutputTree} from a map of file paths to content strings.\n *\n * Use this when building a custom renderer that produces multiple output files\n * (e.g. one file per theme or permutation).\n *\n * @param files - Record mapping relative file paths to their string content\n * @returns An `OutputTree` that the build orchestrator can write to disk or return in-memory\n *\n * @example\n * ```typescript\n * import { defineRenderer, outputTree } from 'dispersa/outputs'\n *\n * const myRenderer = defineRenderer((context) => {\n * return outputTree({\n * 'light.css': '/* light tokens *\\/',\n * 'dark.css': '/* dark tokens *\\/',\n * })\n * })\n * ```\n */\nexport const outputTree = (files: Record<string, string>): OutputTree => {\n return {\n kind: 'outputTree',\n files,\n }\n}\n\n/**\n * Type guard that checks whether a value is an {@link OutputTree}.\n *\n * @param value - The value to check\n * @returns `true` if the value is an `OutputTree`\n */\nexport const isOutputTree = (value: unknown): value is OutputTree => {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { kind?: unknown }).kind === 'outputTree'\n )\n}\n","/**\n * @fileoverview Token resolution pipeline\n * Handles the flow: parse resolver → resolve tokens → preprocess → resolve $ref → flatten → resolve aliases → strip $root → apply filters → apply transforms\n *\n * Pipeline stages are explicitly typed to prevent temporal coupling and ensure\n * operations happen in the correct order.\n */\n\nimport { ResolverLoader } from '@adapters/filesystem/resolver-loader'\nimport { LintRunner } from '@lint/lint-runner'\nimport type { LintBuildConfig, LintResult } from '@lint/types'\nimport { applyFilters, applyTransforms } from '@processing/apply'\nimport type { Filter } from '@processing/filters/types'\nimport type { Preprocessor } from '@processing/preprocessors/types'\nimport type { Transform } from '@processing/transforms/types'\nimport { AliasResolver } from '@resolution/alias-resolver'\nimport { ReferenceResolver } from '@resolution/reference-resolver'\nimport { ResolutionEngine } from '@resolution/resolution-engine'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport { LintError } from '@shared/errors'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { rewriteRootReferences } from '@shared/utils/token-utils'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport { TokenParser } from '@engine/token-parser'\nimport type { InternalResolvedTokens, InternalTokenDocument } from '@shared/token-types'\nimport type {\n AliasResolvedStage,\n EngineReadyStage,\n FinalStage,\n FlattenedStage,\n LoadedResolverStage,\n PreprocessedStage,\n RawTokensStage,\n ReferenceResolvedStage,\n} from './pipeline-stages'\n\nexport type TokenPipelineOptions = {\n validation?: ValidationOptions\n}\n\nexport type TokenPipelineResult = {\n tokens: InternalResolvedTokens\n resolutionEngine: ResolutionEngine\n modifierInputs: ModifierInputs\n}\n\nexport class TokenPipeline {\n private options: TokenPipelineOptions\n private validationHandler: ValidationHandler\n private resolverLoader: ResolverLoader\n private tokenParser: TokenParser\n private aliasResolver: AliasResolver\n\n constructor(options: TokenPipelineOptions = {}) {\n this.options = options\n this.validationHandler = new ValidationHandler(options.validation)\n this.resolverLoader = new ResolverLoader({ validation: options.validation })\n this.tokenParser = new TokenParser({ validation: options.validation })\n this.aliasResolver = new AliasResolver({ validation: options.validation })\n }\n /**\n * Execute the complete token resolution pipeline\n *\n * The pipeline executes in the following explicit stages:\n * 1. Load resolver document\n * 2. Create resolution engine\n * 3. Resolve tokens using modifier inputs\n * 4. Apply preprocessors (if provided)\n * 5. Resolve JSON Pointer references\n * 6. Parse and flatten token structure\n * 7. Resolve alias references\n * 8. Strip $root from token names/paths (DTCG structural mechanism, transparent in output)\n * 9. Apply filters (if provided) — runs first to remove tokens before transforms\n * 10. Apply transforms (if provided) — runs on the already-filtered token set\n *\n * Each stage is explicitly typed to ensure correct order and prevent temporal coupling.\n *\n * Note: Linting is handled separately via runLintOnPermutations() to enable\n * deduplication across multiple permutations.\n *\n * @param resolver - Either a file path (string) or an inline ResolverDocument object\n * @param modifierInputs - Modifier values for this permutation\n * @param transformList - Optional transforms to apply\n * @param preprocessorList - Optional preprocessors to apply\n * @param filterList - Optional filters to apply before transforms\n * @returns Final tokens and resolution engine\n */\n async resolve(\n resolver: string | ResolverDocument,\n modifierInputs: ModifierInputs,\n transformList?: Transform[],\n preprocessorList?: Preprocessor[],\n filterList?: Filter[],\n ): Promise<TokenPipelineResult> {\n const stage1 = await this.loadResolver(resolver)\n const engine = this.createEngine(stage1)\n const result = await this.runPipelineStages(\n engine,\n modifierInputs,\n preprocessorList,\n filterList,\n transformList,\n )\n\n return {\n tokens: result.tokens,\n resolutionEngine: result.resolutionEngine,\n modifierInputs: result.modifierInputs,\n }\n }\n\n /**\n * Run pipeline stages 3-11 on a pre-created engine\n *\n * Shared by both `resolve()` (single permutation) and\n * `resolveAllPermutations()` (parallel permutations) to keep the\n * stage sequence defined in exactly one place.\n */\n private async runPipelineStages(\n engine: EngineReadyStage,\n modifierInputs: ModifierInputs,\n preprocessorList?: Preprocessor[],\n filterList?: Filter[],\n transformList?: Transform[],\n ): Promise<FinalStage> {\n const rawTokens = await this.resolveTokens(engine, modifierInputs)\n const preprocessed = await this.preprocessTokens(rawTokens, preprocessorList)\n const refResolved = await this.resolveReferences(preprocessed)\n const flattened = this.flattenTokens(refResolved)\n const aliasResolved = this.resolveAliases(flattened)\n const rootStripped = this.stripRootTokenNames(aliasResolved)\n const filtered = this.applyFilterStage(rootStripped, filterList)\n return this.applyTransformStage(filtered, transformList)\n }\n\n /**\n * Stage 1: Load and parse resolver document\n */\n private async loadResolver(resolver: string | ResolverDocument): Promise<LoadedResolverStage> {\n return await this.resolverLoader.load(resolver)\n }\n\n /**\n * Stage 2: Create resolution engine\n *\n * @param stage - Loaded resolver stage\n * @param sharedCache - Optional shared file cache for parallel-safe instantiation.\n * When provided, the ReferenceResolver shares this cache with other instances\n * while keeping an independent `visited` set for circular-reference detection.\n */\n private createEngine(\n stage: LoadedResolverStage,\n sharedCache?: Map<string, unknown>,\n ): EngineReadyStage {\n const refResolver = new ReferenceResolver(stage.baseDir, {\n validation: this.options.validation,\n cache: sharedCache,\n })\n const resolutionEngine = new ResolutionEngine(stage.resolverDoc, refResolver, {\n validation: this.options.validation,\n })\n return { ...stage, resolutionEngine, refResolver }\n }\n\n /**\n * Stage 3: Resolve tokens using modifier inputs\n */\n private async resolveTokens(\n stage: EngineReadyStage,\n modifierInputs: ModifierInputs,\n ): Promise<RawTokensStage> {\n const result = await stage.resolutionEngine.resolveWithInputs(modifierInputs)\n return {\n ...stage,\n rawTokens: result.tokens,\n modifierInputs: result.modifierInputs,\n }\n }\n\n /**\n * Stage 4: Apply preprocessors to raw tokens\n */\n private async preprocessTokens(\n stage: RawTokensStage,\n preprocessorList?: Preprocessor[],\n ): Promise<PreprocessedStage> {\n let preprocessedTokens = stage.rawTokens\n\n if (preprocessorList !== undefined && preprocessorList.length > 0) {\n preprocessedTokens = await this.applyPreprocessors(stage.rawTokens, preprocessorList)\n }\n\n const { rawTokens: _rawTokens, ...rest } = stage\n return { ...rest, preprocessedTokens }\n }\n\n /**\n * Stage 5: Resolve JSON Pointer references\n */\n private async resolveReferences(stage: PreprocessedStage): Promise<ReferenceResolvedStage> {\n try {\n const resolved = await stage.refResolver.resolveDeepTokenDocument(\n stage.preprocessedTokens,\n stage.preprocessedTokens,\n )\n const { preprocessedTokens: _preprocessedTokens, ...rest } = stage\n return {\n ...rest,\n referenceResolvedTokens: resolved as InternalTokenDocument,\n referenceResolution: 'resolved',\n }\n } catch (error) {\n return this.handleReferenceResolutionError(stage, error)\n }\n }\n\n /**\n * Stage 6: Parse and flatten token structure\n */\n private flattenTokens(stage: ReferenceResolvedStage): FlattenedStage {\n const flatTokens = this.tokenParser.flatten(stage.referenceResolvedTokens)\n\n const { referenceResolvedTokens: _referenceResolvedTokens, ...rest } = stage\n return { ...rest, flatTokens }\n }\n\n /**\n * Stage 7: Resolve alias references\n */\n private resolveAliases(stage: FlattenedStage): AliasResolvedStage {\n const aliasResolvedTokens = this.aliasResolver.resolve(stage.flatTokens)\n\n const { flatTokens: _flatTokens, ...rest } = stage\n return { ...rest, aliasResolvedTokens }\n }\n\n /**\n * Stage 8: Strip `$root` from token names and paths.\n *\n * `$root` is a DTCG structural mechanism that allows a group to carry a\n * default value alongside child tokens. References must use the full path\n * (`{color.action.brand.$root}`) for alias resolution, but `$root` should\n * be transparent in output. This stage re-keys tokens so downstream\n * consumers (filters, transforms, renderers) see clean names.\n */\n private stripRootTokenNames(stage: AliasResolvedStage): AliasResolvedStage {\n const tokens = stage.aliasResolvedTokens\n const result: InternalResolvedTokens = {}\n\n for (const [key, token] of Object.entries(tokens)) {\n const rewrittenOriginal = rewriteRootReferences(token.originalValue)\n\n if (!key.endsWith('.$root')) {\n result[key] =\n rewrittenOriginal !== token.originalValue\n ? { ...token, originalValue: rewrittenOriginal }\n : token\n continue\n }\n\n const strippedPath = token.path.filter((segment) => segment !== '$root')\n const strippedName = strippedPath.join('.')\n\n result[strippedName] = {\n ...token,\n path: strippedPath,\n name: strippedName,\n originalValue: rewrittenOriginal,\n }\n }\n\n return { ...stage, aliasResolvedTokens: result }\n }\n\n /**\n /**\n * Stage 9: Apply filters to tokens after alias resolution and $root stripping\n */\n private applyFilterStage(stage: AliasResolvedStage, filterList?: Filter[]): AliasResolvedStage {\n let tokens = stage.aliasResolvedTokens\n\n if (filterList !== undefined && filterList.length > 0) {\n tokens = applyFilters(tokens, filterList)\n }\n\n return { ...stage, aliasResolvedTokens: tokens }\n }\n\n /**\n * Stage 10: Apply transforms to the filtered token set\n */\n private applyTransformStage(stage: AliasResolvedStage, transformList?: Transform[]): FinalStage {\n let tokens = stage.aliasResolvedTokens\n\n if (transformList !== undefined && transformList.length > 0) {\n tokens = applyTransforms(tokens, transformList)\n }\n\n const { aliasResolvedTokens: _aliasResolvedTokens, ...rest } = stage\n return { ...rest, tokens }\n }\n\n private handleReferenceResolutionError(\n stage: PreprocessedStage,\n error: unknown,\n ): ReferenceResolvedStage {\n const wrappedError = error instanceof Error ? error : new Error(String(error))\n this.validationHandler.handleIssue(wrappedError)\n\n const message = wrappedError.message\n this.validationHandler.warn(`Reference resolution skipped: ${message}`)\n\n const { preprocessedTokens: _preprocessedTokens, ...rest } = stage\n return {\n ...rest,\n referenceResolvedTokens: stage.preprocessedTokens,\n referenceResolution: 'skipped',\n referenceResolutionMessage: message,\n }\n }\n\n /**\n * Resolve tokens for all permutations (parallelized)\n *\n * Creates independent resolution engines per permutation that share a\n * common file cache. Each engine has its own `visited` set so concurrent\n * resolution cannot trigger false circular-reference errors.\n *\n * @param resolver - Either a file path (string) or an inline ResolverDocument object\n * @param transformList - Optional transforms to apply\n * @param preprocessorList - Optional preprocessors to apply\n * @param filterList - Optional filters to apply before transforms\n */\n async resolveAllPermutations(\n resolver: string | ResolverDocument,\n transformList?: Transform[],\n preprocessorList?: Preprocessor[],\n filterList?: Filter[],\n ): Promise<\n {\n tokens: InternalResolvedTokens\n modifierInputs: ModifierInputs\n }[]\n > {\n // Stage 1: Load resolver once\n const stage1 = await this.loadResolver(resolver)\n\n // Create an initial engine just to discover permutations\n const discoveryEngine = this.createEngine(stage1)\n const permutationInputs = discoveryEngine.resolutionEngine.generatePermutations()\n\n // Shared file cache: all per-permutation engines read/cache the same\n // parsed files, avoiding redundant I/O without sharing mutable `visited` state.\n const sharedCache: Map<string, unknown> = new Map()\n\n // Resolve every permutation in parallel, each with its own engine\n return await Promise.all(\n permutationInputs.map(async (modifierInputs) => {\n const engine = this.createEngine(stage1, sharedCache)\n const result = await this.runPipelineStages(\n engine,\n modifierInputs,\n preprocessorList,\n filterList,\n transformList,\n )\n\n return {\n tokens: result.tokens,\n modifierInputs: result.modifierInputs,\n }\n }),\n )\n }\n\n /**\n * Run lint on tokens from multiple permutations with deduplication\n *\n * This runs lint once on all permutation token sets combined and deduplicates\n * issues. Use this after resolveAllPermutations() for consistent lint behavior.\n */\n async runLintOnPermutations(\n permutationTokens: InternalResolvedTokens[],\n lintConfig: LintBuildConfig,\n ): Promise<LintResult> {\n if (!lintConfig.enabled) {\n return { issues: [], errorCount: 0, warningCount: 0 }\n }\n\n const runner = new LintRunner({\n plugins: lintConfig.plugins,\n rules: lintConfig.rules,\n onWarn: (msg) => this.validationHandler.warn(msg),\n })\n\n const result = await runner.runMultiple(permutationTokens)\n\n // Log warnings\n for (const issue of result.issues.filter((i) => i.severity === 'warn')) {\n this.validationHandler.warn(`[${issue.ruleId}] ${issue.message} (token: ${issue.tokenName})`)\n }\n\n // Handle errors\n if (result.errorCount > 0 && lintConfig.failOnError !== false) {\n throw new LintError(result.issues)\n }\n\n return result\n }\n\n /**\n * Apply preprocessors to raw tokens\n */\n private async applyPreprocessors(\n rawTokens: InternalTokenDocument,\n preprocessorList: Preprocessor[],\n ): Promise<InternalTokenDocument> {\n let result = rawTokens\n\n for (const preprocessor of preprocessorList) {\n result = await preprocessor.preprocess(result)\n }\n\n return result\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Plugin loader for lint plugins\n *\n * Supports loading plugins from:\n * - Inline plugin objects\n * - String module paths (package names or file paths)\n */\n\nimport { createRequire } from 'node:module'\nimport { isAbsolute, resolve } from 'node:path'\nimport process from 'node:process'\n\nimport { ConfigurationError } from '@shared/errors'\nimport { createJiti } from 'jiti'\n\nimport type { LintPlugin } from './types'\n\nexport type PluginLoaderOptions = {\n /**\n * Base directory for resolving relative plugin paths\n * @default process.cwd()\n */\n cwd?: string\n}\n\n/**\n * Loads lint plugins from various sources\n *\n * Handles:\n * - Inline `LintPlugin` objects (returned as-is)\n * - Package names (e.g., '@dispersa/lint-plugin-a11y')\n * - Relative file paths (e.g., './plugins/my-plugin.ts')\n * - Absolute file paths\n *\n * @security **Warning**: Loading plugins from external packages or file paths\n * executes arbitrary code. Only load plugins from trusted sources.\n * For programmatic usage, prefer passing plugin objects directly rather than\n * strings that trigger dynamic imports.\n *\n * @example\n * ```typescript\n * const loader = new PluginLoader({ cwd: process.cwd() })\n *\n * // Load from inline object\n * const plugin1 = await loader.load(myPlugin)\n *\n * // Load from package\n * const plugin2 = await loader.load('@dispersa/lint-plugin-a11y')\n *\n * // Load from file\n * const plugin3 = await loader.load('./plugins/custom.ts')\n * ```\n */\nexport class PluginLoader {\n private cwd: string\n private jiti: ReturnType<typeof createJiti> | null = null\n private cache: Map<string, LintPlugin> = new Map()\n\n constructor(options: PluginLoaderOptions = {}) {\n this.cwd = options.cwd ?? process.cwd()\n }\n\n /**\n * Load a plugin from an inline object or module path\n *\n * @param source - Plugin object or module path string\n * @returns Loaded plugin\n * @throws {ConfigurationError} If plugin cannot be loaded or is invalid\n */\n async load(source: LintPlugin | string): Promise<LintPlugin> {\n // Inline plugin object - return as-is\n if (this.isPluginObject(source)) {\n this.validatePlugin(source)\n return source\n }\n\n // String path - load module\n const modulePath = source as string\n const cached = this.cache.get(modulePath)\n if (cached) {\n return cached\n }\n\n const plugin = await this.loadFromModule(modulePath)\n this.validatePlugin(plugin)\n this.cache.set(modulePath, plugin)\n return plugin\n }\n\n /**\n * Load multiple plugins\n *\n * @param plugins - Record of namespace to plugin source\n * @returns Record of namespace to loaded plugin\n */\n async loadAll(plugins: Record<string, LintPlugin | string>): Promise<Record<string, LintPlugin>> {\n const entries = Object.entries(plugins)\n const loaded = await Promise.all(\n entries.map(async ([namespace, source]) => [namespace, await this.load(source)] as const),\n )\n return Object.fromEntries(loaded)\n }\n\n /**\n * Check if source is an inline plugin object\n */\n private isPluginObject(source: LintPlugin | string): source is LintPlugin {\n return typeof source !== 'string'\n }\n\n /**\n * Load a plugin from a module path\n */\n private async loadFromModule(modulePath: string): Promise<LintPlugin> {\n // Resolve relative paths from cwd\n const resolvedPath = isAbsolute(modulePath) ? modulePath : resolve(this.cwd, modulePath)\n\n // Check if it's a file path or package name\n const isFilePath =\n modulePath.startsWith('./') || modulePath.startsWith('../') || isAbsolute(modulePath)\n\n try {\n if (isFilePath) {\n return await this.loadFromFile(resolvedPath)\n }\n return await this.loadFromPackage(modulePath)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new ConfigurationError(`Failed to load lint plugin '${modulePath}': ${message}`)\n }\n }\n\n /**\n * Load a plugin from a file path using jiti (supports TypeScript)\n */\n private async loadFromFile(filePath: string): Promise<LintPlugin> {\n this.jiti ??= createJiti(this.cwd, {\n interopDefault: true,\n })\n\n const loaded = await this.jiti(filePath)\n const plugin = this.extractPlugin(loaded)\n\n if (!plugin) {\n throw new ConfigurationError(`Plugin file '${filePath}' does not export a valid LintPlugin`)\n }\n\n return plugin\n }\n\n /**\n * Load a plugin from a package name\n */\n private async loadFromPackage(packageName: string): Promise<LintPlugin> {\n // Try to require the package\n const require = createRequire(this.cwd)\n\n let resolvedPath: string\n try {\n resolvedPath = require.resolve(packageName, { paths: [this.cwd] })\n } catch {\n // Fallback: try from this module's location\n try {\n resolvedPath = require.resolve(packageName)\n } catch {\n throw new ConfigurationError(\n `Cannot find package '${packageName}'. Make sure it is installed.`,\n )\n }\n }\n\n // Use jiti to support ESM/CJS interoperability\n this.jiti ??= createJiti(this.cwd, {\n interopDefault: true,\n })\n\n const loaded = await this.jiti(resolvedPath)\n const plugin = this.extractPlugin(loaded)\n\n if (!plugin) {\n throw new ConfigurationError(`Package '${packageName}' does not export a valid LintPlugin`)\n }\n\n return plugin\n }\n\n /**\n * Extract plugin from loaded module\n *\n * Supports multiple export patterns:\n * - export default plugin\n * - export const plugin = {...}\n * - module.exports = plugin (CJS)\n */\n private extractPlugin(loaded: unknown): LintPlugin | null {\n if (!loaded || typeof loaded !== 'object') {\n return null\n }\n\n const module = loaded as Record<string, unknown>\n\n // Priority 1: default export\n if (module.default && this.isValidPluginStructure(module.default)) {\n return module.default as LintPlugin\n }\n\n // Priority 2: named export 'plugin'\n if (module.plugin && this.isValidPluginStructure(module.plugin)) {\n return module.plugin as LintPlugin\n }\n\n // Priority 3: module is the plugin itself (CJS module.exports = plugin)\n if (this.isValidPluginStructure(loaded)) {\n return loaded as LintPlugin\n }\n\n return null\n }\n\n /**\n * Check if object has required plugin structure\n */\n private isValidPluginStructure(obj: unknown): boolean {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n const plugin = obj as Record<string, unknown>\n const rules = plugin.rules as Record<string, unknown> | undefined\n\n if (\n plugin.meta === undefined ||\n typeof plugin.meta !== 'object' ||\n !(plugin.meta as Record<string, unknown>).name ||\n rules === undefined ||\n Object.keys(rules).length === 0\n ) {\n return false\n }\n\n return true\n }\n\n /**\n * Validate a loaded plugin\n */\n private validatePlugin(plugin: LintPlugin): void {\n if (!plugin.meta) {\n throw new ConfigurationError('Lint plugin must have a meta property with name')\n }\n\n if (!plugin.meta.name) {\n throw new ConfigurationError('Lint plugin meta.name is required')\n }\n\n if (\n !plugin.rules ||\n typeof plugin.rules !== 'object' ||\n Object.keys(plugin.rules).length === 0\n ) {\n throw new ConfigurationError(\n `Lint plugin '${plugin.meta.name}' must have a non-empty rules object`,\n )\n }\n\n // Validate each rule\n for (const [ruleName, rule] of Object.entries(plugin.rules)) {\n if (!rule.meta) {\n throw new ConfigurationError(\n `Rule '${ruleName}' in plugin '${plugin.meta.name}' is missing meta property`,\n )\n }\n if (!rule.meta.messages || typeof rule.meta.messages !== 'object') {\n throw new ConfigurationError(\n `Rule '${ruleName}' in plugin '${plugin.meta.name}' is missing meta.messages`,\n )\n }\n if (typeof rule.create !== 'function') {\n throw new ConfigurationError(\n `Rule '${ruleName}' in plugin '${plugin.meta.name}' is missing create function`,\n )\n }\n }\n }\n\n /**\n * Clear the plugin cache\n */\n clearCache(): void {\n this.cache.clear()\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Lint runner that executes rules in parallel against tokens\n *\n * The lint runner is responsible for:\n * - Loading plugins and resolving rule configurations\n * - Executing rules in parallel for performance\n * - Collecting and aggregating lint issues\n * - Interpolating message templates with data\n */\n\nimport type { InternalResolvedTokens, TokenType } from '@shared/token-types'\n\nimport { PluginLoader } from './plugin-loader'\nimport type {\n AnyLintRule,\n LintConfig,\n LintIssue,\n LintPlugin,\n LintReportDescriptor,\n LintResult,\n LintRuleContext,\n ResolvedLintConfig,\n ResolvedRuleConfig,\n RuleConfig,\n} from './types'\n\nexport type LintRunnerOptions = LintConfig & {\n /** Callback for runner warnings (e.g. unknown rule). Defaults to console.warn. */\n onWarn?: (message: string) => void\n}\n\n/**\n * Executes lint rules against a set of tokens\n *\n * @example\n * ```typescript\n * const config: LintConfig = {\n * plugins: {\n * dispersa: dispersaPlugin,\n * },\n * rules: {\n * 'dispersa/require-description': 'warn',\n * 'dispersa/naming-convention': ['error', { format: 'kebab-case' }],\n * },\n * }\n *\n * const runner = new LintRunner(config)\n * const result = await runner.run(tokens)\n *\n * console.log(`Found ${result.errorCount} errors, ${result.warningCount} warnings`)\n * ```\n */\nexport class LintRunner {\n private config: LintRunnerOptions\n private pluginLoader: PluginLoader\n private resolvedConfig: ResolvedLintConfig | null = null\n private warn: (message: string) => void\n\n constructor(config: LintRunnerOptions) {\n this.config = config\n this.pluginLoader = new PluginLoader()\n this.warn = config.onWarn ?? console.warn\n }\n\n /**\n * Run all configured rules against the provided tokens\n *\n * Rules are executed in parallel for performance. Issues are collected\n * and returned with counts by severity.\n *\n * @param tokens - Resolved tokens to lint\n * @returns Lint result with issues and counts\n */\n async run(tokens: InternalResolvedTokens): Promise<LintResult> {\n this.resolvedConfig ??= await this.resolveConfig()\n\n const { rules, plugins } = this.resolvedConfig\n const issues: LintIssue[] = []\n\n if (Object.keys(rules).length === 0) {\n return { issues: [], errorCount: 0, warningCount: 0 }\n }\n\n const rulePromises = Object.entries(rules).map(async ([ruleId, ruleConfig]) => {\n const { severity, options } = ruleConfig\n\n const rule = this.resolveRule(ruleId, plugins)\n if (!rule) {\n this.warn(`[lint] Unknown rule '${ruleId}' - no plugin provides this rule`)\n return []\n }\n\n const reports: LintReportDescriptor<string>[] = []\n const applicableTokens = this.filterTokensByAppliesTo(tokens, rule.meta.appliesTo)\n const mergedOptions = rule.defaultOptions ? { ...rule.defaultOptions, ...options } : options\n\n const context: LintRuleContext<string, Record<string, unknown>> = {\n id: ruleId,\n options: mergedOptions,\n tokens: applicableTokens,\n report: (descriptor) => {\n reports.push(descriptor)\n },\n }\n\n try {\n await rule.create(context)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return [\n {\n ruleId: 'lint/rule-error',\n severity: 'error' as const,\n message: `Rule '${ruleId}' failed: ${message}`,\n tokenName: '(rule execution)',\n tokenPath: [],\n },\n ]\n }\n\n return reports.map((report) => {\n const messageTemplate = rule.meta.messages[report.messageId]\n const message = messageTemplate\n ? this.interpolateMessage(messageTemplate, report.data)\n : report.messageId\n\n return {\n ruleId,\n severity,\n message,\n tokenName: report.token.name,\n tokenPath: report.token.path,\n }\n })\n })\n\n const allIssues = await Promise.all(rulePromises)\n issues.push(...allIssues.flat())\n\n const errorCount = issues.filter((i) => i.severity === 'error').length\n const warningCount = issues.filter((i) => i.severity === 'warn').length\n\n return { issues, errorCount, warningCount }\n }\n\n /**\n * Resolve configuration: load plugins, parse rule configs\n */\n private async resolveConfig(): Promise<ResolvedLintConfig> {\n const { plugins: pluginSources = {}, rules: ruleConfigs = {} } = this.config\n\n const plugins = await this.pluginLoader.loadAll(pluginSources)\n\n const rules: Record<string, ResolvedRuleConfig> = {}\n\n for (const [ruleId, config] of Object.entries(ruleConfigs)) {\n const resolved = this.resolveRuleConfig(config)\n if (resolved) {\n rules[ruleId] = resolved\n }\n }\n\n return {\n enabled: true,\n failOnError: this.config.failOnError ?? true,\n plugins,\n rules,\n }\n }\n\n private filterTokensByAppliesTo(\n tokens: InternalResolvedTokens,\n appliesTo: TokenType[] | 'all' | undefined,\n ): InternalResolvedTokens {\n if (!appliesTo || appliesTo === 'all') {\n return tokens\n }\n\n const filtered: InternalResolvedTokens = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (token.$type && appliesTo.includes(token.$type)) {\n filtered[name] = token\n }\n }\n return filtered\n }\n\n /**\n * Parse rule configuration into resolved format\n */\n private resolveRuleConfig(config: RuleConfig): ResolvedRuleConfig | null {\n // Shorthand: severity only\n if (typeof config === 'string') {\n if (config === 'off') {\n return null\n }\n return { severity: config, options: {} }\n }\n\n // Longhand: [severity, options]\n const [severity, options = {}] = config\n if (severity === 'off') {\n return null\n }\n\n return { severity, options }\n }\n\n /**\n * Resolve a rule from plugins by rule ID\n *\n * Rule IDs are formatted as 'namespace/rule-name'\n */\n private resolveRule(ruleId: string, plugins: Record<string, LintPlugin>): AnyLintRule | null {\n const separatorIndex = ruleId.indexOf('/')\n if (separatorIndex === -1) {\n return null\n }\n\n const namespace = ruleId.slice(0, separatorIndex)\n const ruleName = ruleId.slice(separatorIndex + 1)\n\n const plugin = plugins[namespace]\n if (!plugin) {\n return null\n }\n\n return plugin.rules[ruleName] ?? null\n }\n\n /**\n * Interpolate message template with data\n *\n * Replaces {{key}} placeholders with values from data\n */\n private interpolateMessage(template: string, data?: Record<string, string | number>): string {\n if (!data) {\n return template\n }\n\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => {\n const value = data[key]\n return value !== undefined ? String(value) : `{{${key}}}`\n })\n }\n\n /**\n * Clear the plugin cache\n */\n clearCache(): void {\n this.pluginLoader.clearCache()\n this.resolvedConfig = null\n }\n\n /**\n * Run lint on multiple token sets with deduplication\n *\n * When running lint across multiple permutations (e.g., light/dark themes),\n * the same issue may appear multiple times. This method deduplicates issues\n * by ruleId, tokenName, and message.\n *\n * Use this for both standalone lint and build lint to ensure identical output.\n *\n * @param tokenSets - Array of resolved token sets to lint\n * @returns Combined lint result with deduplicated issues\n */\n async runMultiple(tokenSets: InternalResolvedTokens[]): Promise<LintResult> {\n const results = await Promise.all(tokenSets.map((tokens) => this.run(tokens)))\n\n const allIssues = results.flatMap((result) => result.issues)\n\n const seen = new Set<string>()\n const deduplicated: LintIssue[] = []\n\n for (const issue of allIssues) {\n const key = `${issue.ruleId}:${issue.tokenName}:${issue.message}`\n if (!seen.has(key)) {\n seen.add(key)\n deduplicated.push(issue)\n }\n }\n\n const errorCount = deduplicated.filter((i) => i.severity === 'error').length\n const warningCount = deduplicated.filter((i) => i.severity === 'warn').length\n\n return { issues: deduplicated, errorCount, warningCount }\n }\n}\n","/**\n * @fileoverview Global constants\n */\n\n/**\n * Default maximum depth for alias resolution\n * Prevents infinite recursion in circular references\n */\nexport const DEFAULT_MAX_ALIAS_DEPTH = 10\n\n/**\n * Default base font size in pixels for rem/em conversions\n */\nexport const DEFAULT_BASE_FONT_SIZE_PX = 16\n","/**\n * @fileoverview Token alias resolver with circular reference detection\n * Resolves {tokenName} references in token values\n */\n\nimport { DEFAULT_MAX_ALIAS_DEPTH } from '@shared/constants'\nimport { CircularReferenceError, TokenReferenceError, ValidationError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { findSimilar } from '@shared/utils/string-similarity'\nimport { getPureAliasReferenceName } from '@shared/utils/token-utils'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport type { InternalResolvedToken, InternalResolvedTokens, TokenValue } from '@shared/token-types'\n\nexport type AliasResolutionOptions = {\n maxDepth?: number\n /**\n * Enable validation mode (throws errors on missing references)\n * When false, unresolved references are left as-is\n * Default: true\n */\n validation?: ValidationOptions\n}\n\nexport class AliasResolver {\n private options: AliasResolutionOptions\n private resolving: Set<string>\n private validationHandler: ValidationHandler\n\n constructor(options: AliasResolutionOptions = {}) {\n this.options = {\n maxDepth: DEFAULT_MAX_ALIAS_DEPTH,\n ...options,\n }\n this.resolving = new Set()\n this.validationHandler = new ValidationHandler(options.validation)\n }\n\n /**\n * Resolve all aliases in a token collection\n *\n * Processes each token and resolves any alias references (e.g., `{token.name}`)\n * to their actual values. Detects circular references and enforces maximum depth.\n *\n * @param tokens - Collection of tokens to resolve aliases in\n * @returns New collection with all aliases resolved to their values\n * @throws {CircularReferenceError} If circular reference detected\n * @throws {TokenReferenceError} If referenced token not found (when validate enabled)\n */\n resolve(tokens: InternalResolvedTokens): InternalResolvedTokens {\n const result: InternalResolvedTokens = {}\n\n for (const [name, token] of Object.entries(tokens)) {\n this.resolving.clear() // Clear for each top-level token\n result[name] = this.resolveToken(name, token, tokens, 0)\n }\n\n return result\n }\n\n /**\n * Resolve aliases in a single token\n */\n private resolveToken(\n name: string,\n token: InternalResolvedToken,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): InternalResolvedToken {\n this.assertMaxDepth(name, depth)\n this.assertNotCircular(name)\n\n this.resolving.add(name)\n try {\n const hadAlias = AliasResolver.hasAliases((token.$value ?? '') as TokenValue)\n const pureAliasReferenceName = getPureAliasReferenceName((token.$value ?? '') as TokenValue)\n\n if (pureAliasReferenceName !== undefined) {\n return this.resolvePureAliasToken(\n name,\n token,\n allTokens,\n depth,\n hadAlias,\n pureAliasReferenceName,\n )\n }\n\n return this.resolveInlineAliasToken(name, token, allTokens, depth, hadAlias)\n } finally {\n this.resolving.delete(name)\n }\n }\n\n private assertMaxDepth(name: string, depth: number): void {\n const maxDepth = this.options.maxDepth ?? DEFAULT_MAX_ALIAS_DEPTH\n if (depth <= maxDepth) {\n return\n }\n\n throw new ValidationError(`Maximum alias resolution depth exceeded for token: ${name}`, [\n { message: `Maximum alias resolution depth exceeded for token: ${name}` },\n ])\n }\n\n private assertNotCircular(name: string): void {\n if (!this.resolving.has(name)) {\n return\n }\n throw new CircularReferenceError(name, Array.from(this.resolving))\n }\n\n private resolvePureAliasToken(\n name: string,\n token: InternalResolvedToken,\n allTokens: InternalResolvedTokens,\n depth: number,\n hadAlias: boolean,\n referenceName: string,\n ): InternalResolvedToken {\n try {\n const referencedToken = this.resolveReferenceToken(referenceName, allTokens, depth)\n if (referencedToken === undefined) {\n return this.withAliasMarker(token, token.$value, hadAlias)\n }\n\n const updatedType = this.getTypeAfterCompatibilityCheck(\n token.$type,\n referencedToken.$type,\n name,\n referenceName,\n )\n\n return this.withAliasMarker(\n {\n ...token,\n $type: updatedType,\n },\n (referencedToken.$value ?? '') as TokenValue,\n hadAlias,\n )\n } catch (error) {\n return this.handleAliasError(error, name, token, hadAlias)\n }\n }\n\n private resolveInlineAliasToken(\n name: string,\n token: InternalResolvedToken,\n allTokens: InternalResolvedTokens,\n depth: number,\n hadAlias: boolean,\n ): InternalResolvedToken {\n try {\n const resolvedValue = this.resolveValue((token.$value ?? '') as TokenValue, allTokens, depth)\n return this.withAliasMarker(token, resolvedValue, hadAlias)\n } catch (error) {\n return this.handleAliasError(error, name, token, hadAlias)\n }\n }\n\n private withAliasMarker(\n token: InternalResolvedToken,\n value: TokenValue | undefined,\n hadAlias: boolean,\n ): InternalResolvedToken {\n return {\n ...token,\n $value: value,\n _isAlias: hadAlias,\n }\n }\n\n /**\n * Resolve aliases in a value\n */\n private resolveValue(\n value: TokenValue,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): TokenValue {\n if (typeof value === 'string') {\n return this.resolveStringValue(value, allTokens, depth)\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.resolveValue(item as TokenValue, allTokens, depth))\n }\n\n if (typeof value === 'object' && value != null) {\n const result: Record<string, unknown> = {}\n for (const [key, val] of Object.entries(value)) {\n result[key] = this.resolveValue(val as TokenValue, allTokens, depth)\n }\n return result\n }\n\n return value\n }\n\n /**\n * Resolve aliases in a string value\n */\n private resolveStringValue(\n value: string,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): TokenValue {\n // Check if the entire value is an alias reference\n const fullReferenceMatch = /^\\{([^}]+)\\}$/.exec(value)\n if (fullReferenceMatch != null) {\n const referenceName = fullReferenceMatch[1]\n if (referenceName != null) {\n return this.resolveReference(referenceName, allTokens, depth)\n }\n }\n\n // Check for inline aliases (e.g., \"2px solid {color.primary}\")\n if (value.includes('{')) {\n return value.replace(/\\{([^}]+)\\}/g, (_match, referenceName: string) => {\n const resolved = this.resolveReference(referenceName, allTokens, depth)\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return String(resolved)\n }\n return JSON.stringify(resolved)\n })\n }\n\n return value\n }\n\n /**\n * Resolve a single reference (whole token only)\n *\n * Per DTCG spec, curly brace syntax only supports whole token references.\n * Property-level references must use JSON Pointer syntax ($ref).\n *\n * Examples:\n * - `{color.primary}` - whole token reference ✅\n * - `{color.primary.components.0}` - NOT supported (use $ref with JSON Pointer) ❌\n */\n private resolveReference(\n referenceName: string,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): TokenValue {\n const cleanName = referenceName.trim()\n\n // Look up the token by its full name (no property-level access)\n const referencedToken = allTokens[cleanName]\n\n if (referencedToken == null) {\n const suggestions = findSimilar(cleanName, Object.keys(allTokens))\n this.validationHandler.handleIssue(new TokenReferenceError(cleanName, suggestions))\n this.validationHandler.warn(`Unresolved token reference: \"${cleanName}\"`)\n return `{${cleanName}}`\n }\n\n // Recursively resolve the referenced token\n const resolved = this.resolveToken(cleanName, referencedToken, allTokens, depth + 1)\n\n return (resolved.$value ?? '') as TokenValue\n }\n\n private resolveReferenceToken(\n referenceName: string,\n allTokens: InternalResolvedTokens,\n depth: number,\n ): InternalResolvedToken | undefined {\n const cleanName = referenceName.trim()\n const referencedToken = allTokens[cleanName]\n\n if (referencedToken == null) {\n const suggestions = findSimilar(cleanName, Object.keys(allTokens))\n this.validationHandler.handleIssue(new TokenReferenceError(cleanName, suggestions))\n this.validationHandler.warn(`Unresolved token reference: \"${cleanName}\"`)\n return undefined\n }\n\n return this.resolveToken(cleanName, referencedToken, allTokens, depth + 1)\n }\n\n private getTypeAfterCompatibilityCheck(\n declaredType: unknown,\n referencedType: unknown,\n tokenName: string,\n referenceName: string,\n ): InternalResolvedToken['$type'] {\n const declared = typeof declaredType === 'string' ? declaredType : undefined\n const referenced = typeof referencedType === 'string' ? referencedType : undefined\n\n if (declared !== undefined && referenced !== undefined && declared !== referenced) {\n this.handleTypeMismatch(tokenName, referenceName, declared, referenced)\n return declaredType as InternalResolvedToken['$type']\n }\n\n if (declared === undefined && referenced !== undefined) {\n return referenced as InternalResolvedToken['$type']\n }\n\n return declaredType as InternalResolvedToken['$type']\n }\n\n private handleTypeMismatch(\n tokenName: string,\n referenceName: string,\n declaredType: string,\n referencedType: string,\n ): void {\n const message =\n `Alias type mismatch for \"${tokenName}\": declared \"$type\" is \"${declaredType}\" ` +\n `but referenced token \"${referenceName}\" has \"$type\" \"${referencedType}\".`\n\n this.validationHandler.handleIssue(new ValidationError(message, [{ message }]))\n }\n\n /**\n * Check if a value contains aliases\n */\n static hasAliases(value: TokenValue): boolean {\n if (typeof value === 'string') {\n return value.includes('{') && value.includes('}')\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => AliasResolver.hasAliases(item as TokenValue))\n }\n\n if (typeof value === 'object' && value != null) {\n return Object.values(value).some((val) => AliasResolver.hasAliases(val as TokenValue))\n }\n\n return false\n }\n\n /**\n * Extract all alias references from a value\n */\n static extractReferences(value: TokenValue): string[] {\n const references: string[] = []\n\n if (typeof value === 'string') {\n const matches = value.matchAll(/\\{([^}]+)\\}/g)\n for (const match of matches) {\n const ref = match[1]\n if (ref != null) {\n references.push(ref.trim())\n }\n }\n } else if (Array.isArray(value)) {\n for (const item of value) {\n references.push(...AliasResolver.extractReferences(item as TokenValue))\n }\n } else if (typeof value === 'object' && value != null) {\n for (const val of Object.values(value)) {\n references.push(...AliasResolver.extractReferences(val as TokenValue))\n }\n }\n\n return references\n }\n\n private handleAliasError(\n error: unknown,\n name: string,\n token: InternalResolvedToken,\n hadAlias: boolean,\n ): InternalResolvedToken {\n if (error instanceof Error) {\n this.validationHandler.handleIssue(error)\n } else {\n this.validationHandler.handleIssue(new Error(String(error)))\n }\n\n const message = error instanceof Error ? error.message : String(error)\n this.validationHandler.warn(`Alias resolution skipped for \"${name}\": ${message}`)\n\n return {\n ...token,\n $value: token.$value,\n _isAlias: hadAlias,\n }\n }\n}\n","/**\n * @fileoverview String similarity utilities for \"did you mean?\" suggestions\n *\n * Uses Levenshtein distance to find close matches when users reference\n * nonexistent tokens, modifiers, or contexts.\n */\n\n/**\n * Compute the Levenshtein edit distance between two strings.\n *\n * Uses the classic dynamic-programming algorithm with O(min(a,b)) space.\n *\n * @param a - First string\n * @param b - Second string\n * @returns Number of single-character edits (insert, delete, replace)\n */\nexport function levenshteinDistance(a: string, b: string): number {\n if (a === b) {\n return 0\n }\n if (a.length === 0) {\n return b.length\n }\n if (b.length === 0) {\n return a.length\n }\n\n // Ensure `a` is the shorter string for O(min(a,b)) space\n if (a.length > b.length) {\n ;[a, b] = [b, a]\n }\n\n const aLen = a.length\n const bLen = b.length\n\n // Single row of the DP matrix\n let prev = Array.from({ length: aLen + 1 }, (_, i) => i)\n\n for (let j = 1; j <= bLen; j++) {\n const curr = [j] as number[]\n for (let i = 1; i <= aLen; i++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1\n curr[i] = Math.min(\n curr[i - 1]! + 1, // insertion\n prev[i]! + 1, // deletion\n prev[i - 1]! + cost, // substitution\n )\n }\n prev = curr\n }\n\n return prev[aLen]!\n}\n\n/** Minimum edit distance threshold for \"did you mean?\" suggestions */\nconst MIN_EDIT_DISTANCE = 2\n\n/** Fraction of target string length used to auto-scale the max distance */\nconst SIMILARITY_THRESHOLD_FACTOR = 0.4\n\n/**\n * Find strings from `candidates` that are similar to `target`.\n *\n * Returns candidates sorted by distance (closest first), filtered to\n * those within `maxDistance`. A good default for maxDistance is roughly\n * 40% of the target length (minimum 2).\n *\n * @param target - The string the user typed\n * @param candidates - Available valid strings to match against\n * @param maxDistance - Maximum edit distance to consider (default: auto-scaled)\n * @returns Array of similar strings, closest first (at most `maxResults`)\n */\nexport function findSimilar(\n target: string,\n candidates: string[],\n maxDistance?: number,\n maxResults = 3,\n): string[] {\n if (candidates.length === 0) {\n return []\n }\n\n const threshold =\n maxDistance ??\n Math.max(MIN_EDIT_DISTANCE, Math.ceil(target.length * SIMILARITY_THRESHOLD_FACTOR))\n\n const scored = candidates\n .map((candidate) => ({\n value: candidate,\n distance: levenshteinDistance(target.toLowerCase(), candidate.toLowerCase()),\n }))\n .filter((entry) => entry.distance <= threshold && entry.distance > 0)\n .sort((a, b) => a.distance - b.distance)\n\n return scored.slice(0, maxResults).map((entry) => entry.value)\n}\n","/**\n * @fileoverview Reference resolver for $ref pointers\n * Supports JSON Pointer (RFC6901) and external file references\n */\n\nimport { readJSONFile } from '@adapters/filesystem/file-utils'\nimport { ValidationError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport { JsonPointer } from 'json-ptr'\n\nimport type { ReferenceObject } from './types'\n\ntype ResolverContext = {\n baseDir: string\n cache: Map<string, unknown>\n visited: Set<string>\n}\n\ntype ReferenceResolverOptions = {\n validation?: ValidationOptions\n /**\n * External file cache shared across resolver instances.\n *\n * When provided, the resolver uses this cache instead of creating its own.\n * This enables safe parallel permutation resolution: each instance keeps\n * an independent `visited` set (for circular-reference detection) while\n * sharing the expensive parsed-file cache.\n */\n cache?: Map<string, unknown>\n}\n\ntype DeepResolutionContext = {\n inTokenValue: boolean\n}\n\nexport class ReferenceResolver {\n private context: ResolverContext\n private validationHandler: ValidationHandler\n\n constructor(baseDir: string, options: ReferenceResolverOptions = {}) {\n this.context = {\n baseDir,\n cache: options.cache ?? new Map(),\n visited: new Set(),\n }\n this.validationHandler = new ValidationHandler(options.validation)\n }\n\n /**\n * Set the base directory for resolving relative file paths\n */\n setBaseDir(baseDir: string): void {\n this.context.baseDir = baseDir\n }\n\n /**\n * Resolve a $ref reference\n * Accepts either a string reference or a DTCG ReferenceObject\n *\n * Per DTCG spec section 4.2.2, if additional keys exist alongside $ref,\n * they will be treated as overrides and merged with the resolved value.\n */\n async resolve(\n ref: string | ReferenceObject | Record<string, unknown>,\n currentDocument?: unknown,\n ): Promise<unknown> {\n // Extract string ref from object if needed\n const refString = typeof ref === 'string' ? ref : (ref as ReferenceObject).$ref\n\n if (!refString) {\n throw new ValidationError('Invalid reference: missing $ref property', [\n { message: 'Invalid reference: missing $ref property' },\n ])\n }\n\n // Extract local properties for extending (DTCG spec section 4.2.2)\n const localProperties = this.extractLocalProperties(ref)\n\n // Check for circular references\n if (this.context.visited.has(refString)) {\n throw new ValidationError(`Circular reference detected: ${refString}`, [\n { message: `Circular reference detected: ${refString}` },\n ])\n }\n\n this.context.visited.add(refString)\n\n try {\n let resolved = await this.resolveRefTarget(refString, currentDocument)\n\n // Apply local property overrides if any (DTCG spec section 4.2.2)\n if (localProperties && Object.keys(localProperties).length > 0) {\n resolved = this.applyExtensions(resolved, localProperties)\n }\n\n return resolved\n } finally {\n this.context.visited.delete(refString)\n }\n }\n\n /**\n * Resolve the target of a $ref string to its raw value\n *\n * Handles fragment-only references (JSON Pointer within current document)\n * and file references with optional fragment suffixes.\n */\n private async resolveRefTarget(refString: string, currentDocument?: unknown): Promise<unknown> {\n // Fragment-only references (JSON Pointer within current document)\n if (refString.startsWith('#/')) {\n if (!currentDocument) {\n throw new ValidationError(\n `Cannot resolve fragment reference ${refString} without current document`,\n [\n {\n message: `Cannot resolve fragment reference ${refString} without current document`,\n },\n ],\n )\n }\n return this.resolveFragment(refString, currentDocument)\n }\n\n // File references with optional fragments\n const [filePath, fragment] = refString.split('#')\n\n if (!filePath) {\n throw new ValidationError(`Invalid reference: ${refString}`, [\n { message: `Invalid reference: ${refString}` },\n ])\n }\n\n const resolved = await this.resolveFile(filePath)\n return fragment ? this.resolveFragment(`#${fragment}`, resolved) : resolved\n }\n\n /**\n * Resolve a JSON Pointer fragment\n */\n private resolveFragment(ref: string, document: unknown): unknown {\n try {\n // Remove leading # and decode the pointer\n const pointerPath = ref.substring(1)\n\n if (!pointerPath) {\n return document\n }\n\n if (!JsonPointer.has(document, pointerPath)) {\n throw new ValidationError(`Invalid reference: ${ref}`, [\n { message: `Invalid reference: ${ref}` },\n ])\n }\n\n return JsonPointer.get(document, pointerPath)\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error)\n throw new ValidationError(`Failed to resolve fragment ${ref}: ${errorMsg}`, [\n { message: errorMsg },\n ])\n }\n }\n\n /**\n * Resolve a file reference\n */\n private async resolveFile(filePath: string): Promise<unknown> {\n // Check cache first\n if (this.context.cache.has(filePath)) {\n return this.context.cache.get(filePath)\n }\n\n // Read and parse file using shared utility\n const parsed = await readJSONFile(filePath, this.context.baseDir)\n\n // Cache the result\n this.context.cache.set(filePath, parsed)\n\n return parsed\n }\n\n /**\n * Extract local properties from a reference object (excluding $ref)\n * These will be used to override the resolved value per DTCG spec section 4.2.2\n */\n private extractLocalProperties(\n ref: string | ReferenceObject | Record<string, unknown>,\n ): Record<string, unknown> | null {\n if (typeof ref === 'string') {\n return null\n }\n\n const { $ref: _$ref, ...localProps } = ref as Record<string, unknown>\n return Object.keys(localProps).length > 0 ? localProps : null\n }\n\n /**\n * Apply local property extensions to resolved value (DTCG spec section 4.2.2)\n *\n * Per spec: \"If a key alongside $ref declares an object or array,\n * tools MUST flatten these shallowly, meaning objects and arrays are not merged.\"\n *\n * This means local properties replace resolved properties (shallow merge only).\n */\n private applyExtensions(resolved: unknown, localProperties: Record<string, unknown>): unknown {\n // Only merge if resolved is an object\n if (typeof resolved !== 'object' || resolved === null) {\n return resolved\n }\n\n // Shallow merge: local properties override resolved properties\n return {\n ...resolved,\n ...localProperties,\n }\n }\n\n /**\n * Check if an object is a reference object\n */\n static isReference(obj: unknown): obj is { $ref: string } {\n return typeof obj === 'object' && obj !== null && '$ref' in obj && typeof obj.$ref === 'string'\n }\n\n /**\n * Resolve all references in an object recursively\n */\n async resolveDeep(obj: unknown, currentDocument?: unknown): Promise<unknown> {\n if (ReferenceResolver.isReference(obj)) {\n return this.resolve(obj, currentDocument)\n }\n\n if (Array.isArray(obj)) {\n return Promise.all(obj.map((item) => this.resolveDeep(item, currentDocument)))\n }\n\n if (typeof obj === 'object' && obj !== null) {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n result[key] = await this.resolveDeep(value, currentDocument)\n }\n return result\n }\n\n return obj\n }\n\n /**\n * Resolve all references in a token document, preserving token-level `$ref` shape.\n *\n * - **Property-level** `$ref` objects (inside `$value`) resolve to the referenced content.\n * - **Token-level** `$ref` objects (the token itself) become a token with `$value` set to the resolved value.\n */\n async resolveDeepTokenDocument(obj: unknown, currentDocument?: unknown): Promise<unknown> {\n return this.resolveDeepTokenInternal(obj, currentDocument, { inTokenValue: false })\n }\n\n private async resolveDeepTokenInternal(\n obj: unknown,\n currentDocument: unknown,\n ctx: DeepResolutionContext,\n ): Promise<unknown> {\n if (ReferenceResolver.isReference(obj)) {\n if (ctx.inTokenValue) {\n const resolved = await this.resolve(obj, currentDocument)\n return this.resolveDeepTokenInternal(resolved, currentDocument, ctx)\n }\n\n if (this.isTokenLevelRefObject(obj, ctx)) {\n return this.resolveTokenLevelRef(obj as Record<string, unknown>, currentDocument)\n }\n\n const resolved = await this.resolve(obj, currentDocument)\n return this.resolveDeepTokenInternal(resolved, currentDocument, ctx)\n }\n\n if (Array.isArray(obj)) {\n return Promise.all(\n obj.map((item) => this.resolveDeepTokenInternal(item, currentDocument, ctx)),\n )\n }\n\n if (typeof obj === 'object' && obj !== null) {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n const nextCtx = key === '$value' ? { inTokenValue: true } : ctx\n result[key] = await this.resolveDeepTokenInternal(value, currentDocument, nextCtx)\n }\n return result\n }\n\n return obj\n }\n\n private isTokenLevelRefObject(obj: unknown, ctx: DeepResolutionContext): boolean {\n if (ctx.inTokenValue) {\n return false\n }\n if (!ReferenceResolver.isReference(obj)) {\n return false\n }\n return !('$value' in (obj as Record<string, unknown>))\n }\n\n private async resolveTokenLevelRef(\n tokenLikeRef: Record<string, unknown>,\n currentDocument: unknown,\n ): Promise<Record<string, unknown>> {\n const refString = typeof tokenLikeRef.$ref === 'string' ? tokenLikeRef.$ref : ''\n\n const declaredType = typeof tokenLikeRef.$type === 'string' ? tokenLikeRef.$type : undefined\n\n const resolvedRaw = await this.resolve(refString, currentDocument)\n\n const referencedType = this.getReferencedTokenType(refString, resolvedRaw, currentDocument)\n\n const resolvedValue = this.extractTokenValue(resolvedRaw)\n const deepResolvedValue = await this.resolveDeepTokenInternal(resolvedValue, currentDocument, {\n inTokenValue: true,\n })\n\n const resolvedIsToken =\n typeof resolvedRaw === 'object' &&\n resolvedRaw !== null &&\n '$value' in (resolvedRaw as Record<string, unknown>)\n\n const baseToken = resolvedIsToken\n ? this.buildTokenFromResolvedToken(resolvedRaw as Record<string, unknown>, deepResolvedValue)\n : {}\n\n const { $ref: _ref, ...localMeta } = tokenLikeRef\n const outToken = { ...baseToken, ...localMeta, $value: deepResolvedValue }\n\n return this.applyTypeInferenceAndChecks(outToken, declaredType, referencedType, refString)\n }\n\n private extractTokenValue(resolved: unknown): unknown {\n if (\n typeof resolved === 'object' &&\n resolved !== null &&\n '$value' in (resolved as Record<string, unknown>)\n ) {\n return (resolved as Record<string, unknown>).$value\n }\n return resolved\n }\n\n private buildTokenFromResolvedToken(\n resolvedToken: Record<string, unknown>,\n value: unknown,\n ): Record<string, unknown> {\n const { $ref: _ref, ...rest } = resolvedToken\n return { ...rest, $value: value }\n }\n\n private getReferencedTokenType(\n refString: string,\n resolvedRaw: unknown,\n currentDocument: unknown,\n ): string | undefined {\n const direct = this.extractTypeFromTokenObject(resolvedRaw)\n if (direct !== undefined) {\n return direct\n }\n\n const inferredPointer = this.getTokenPointerFromValuePointer(refString)\n if (inferredPointer === undefined) {\n return undefined\n }\n\n const referencedToken = this.resolveFragmentSafely(inferredPointer, currentDocument)\n return this.extractTypeFromTokenObject(referencedToken)\n }\n\n private getTokenPointerFromValuePointer(refString: string): string | undefined {\n const suffix = '/$value'\n if (!refString.includes(suffix)) {\n return undefined\n }\n if (!refString.startsWith('#/')) {\n return undefined\n }\n if (!refString.endsWith(suffix)) {\n return undefined\n }\n return refString.slice(0, -suffix.length)\n }\n\n private resolveFragmentSafely(ref: string, document: unknown): unknown {\n try {\n return this.resolveFragment(ref, document)\n } catch {\n // Fragment may not exist; return undefined so callers can skip type inference\n return undefined\n }\n }\n\n private extractTypeFromTokenObject(value: unknown): string | undefined {\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n const maybe = value as Record<string, unknown>\n return typeof maybe.$type === 'string' ? maybe.$type : undefined\n }\n\n private applyTypeInferenceAndChecks(\n token: Record<string, unknown>,\n declaredType: string | undefined,\n referencedType: string | undefined,\n refString: string,\n ): Record<string, unknown> {\n if (referencedType === undefined) {\n return token\n }\n\n if (declaredType !== undefined && declaredType !== referencedType) {\n this.handleValidationIssue(\n `Token-level $ref type mismatch: declared \"$type\" is \"${declaredType}\" but referenced token type is \"${referencedType}\" (${refString})`,\n )\n return token\n }\n\n const currentType = typeof token.$type === 'string' ? token.$type : undefined\n if (currentType === undefined) {\n return { ...token, $type: referencedType }\n }\n\n if (currentType !== referencedType) {\n this.handleValidationIssue(\n `Token-level $ref type mismatch: token \"$type\" is \"${currentType}\" but referenced token type is \"${referencedType}\" (${refString})`,\n )\n }\n\n return token\n }\n\n private handleValidationIssue(message: string): void {\n this.validationHandler.handleIssue(new ValidationError(message, [{ message }]))\n }\n\n /**\n * Clear the cache\n */\n clearCache(): void {\n this.context.cache.clear()\n }\n}\n","/**\n * @fileoverview Resolution engine for applying sets and modifiers\n */\n\nimport { ConfigurationError, ModifierError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { CaseInsensitiveMap } from '@shared/utils/case-insensitive-map'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport type { InternalTokenDocument } from '@shared/token-types'\n\nimport { ModifierInputProcessor } from './modifier-input-processor'\nimport { ReferenceResolver } from './reference-resolver'\nimport type { Modifier, ModifierInputs, ReferenceObject, ResolverDocument, Set } from './types'\n\nconst JSON_POINTER_SETS_PREFIX = '#/sets/'\nconst JSON_POINTER_MODIFIERS_PREFIX = '#/modifiers/'\n\nexport type ResolutionOptions = {\n errorOnMissingDefault?: boolean\n validation?: ValidationOptions\n}\n\nexport class ResolutionEngine {\n private resolver: ResolverDocument\n private refResolver: ReferenceResolver\n private validationHandler: ValidationHandler\n private inputProcessor: ModifierInputProcessor\n\n /** Pre-built reverse lookup from Modifier reference → modifier name */\n private modifierNameCache: Map<Modifier, string>\n\n constructor(\n resolver: ResolverDocument,\n refResolver: ReferenceResolver,\n options: ResolutionOptions = {},\n ) {\n this.resolver = resolver\n this.refResolver = refResolver\n this.validationHandler = new ValidationHandler(options.validation)\n this.inputProcessor = new ModifierInputProcessor({\n modifiers: resolver.modifiers,\n validationHandler: this.validationHandler,\n errorOnMissingDefault: options.errorOnMissingDefault,\n })\n this.modifierNameCache = this.buildModifierNameCache()\n }\n\n private buildModifierNameCache(): Map<Modifier, string> {\n const cache = new Map<Modifier, string>()\n if (!this.resolver.modifiers) {\n return cache\n }\n for (const [name, mod] of Object.entries(this.resolver.modifiers)) {\n cache.set(mod as Modifier, name)\n }\n return cache\n }\n\n /**\n * Get the resolver document\n */\n getResolver(): ResolverDocument {\n return this.resolver\n }\n\n /**\n * Resolve tokens for given modifier inputs\n */\n async resolve(modifierInputs: ModifierInputs = {}): Promise<InternalTokenDocument> {\n const { normalizedInputs } = this.prepareInputs(modifierInputs)\n return this.resolveWithPreparedInputs(normalizedInputs)\n }\n\n async resolveWithInputs(modifierInputs: ModifierInputs = {}): Promise<{\n tokens: InternalTokenDocument\n modifierInputs: ModifierInputs\n }> {\n const { normalizedInputs, resolvedInputs } = this.prepareInputs(modifierInputs)\n const tokens = await this.resolveWithPreparedInputs(normalizedInputs)\n return { tokens, modifierInputs: resolvedInputs }\n }\n\n prepareInputs(modifierInputs: ModifierInputs): {\n normalizedInputs: ModifierInputs\n resolvedInputs: ModifierInputs\n } {\n return this.inputProcessor.prepare(modifierInputs)\n }\n\n private async resolveWithPreparedInputs(inputs: ModifierInputs): Promise<InternalTokenDocument> {\n // Process resolution order\n let tokens: InternalTokenDocument = {}\n\n for (const item of this.resolver.resolutionOrder) {\n if (ReferenceResolver.isReference(item)) {\n const ref = item.$ref\n\n if (ref.startsWith(JSON_POINTER_SETS_PREFIX)) {\n const setName = ref.slice(JSON_POINTER_SETS_PREFIX.length)\n const resolved = await this.refResolver.resolve(item, this.resolver)\n if (this.isSet(resolved)) {\n const setTokens = await this.resolveSet(resolved, inputs, setName)\n tokens = this.mergeTokens(tokens, setTokens)\n continue\n }\n }\n\n const resolved = await this.resolveReference(item, inputs)\n tokens = this.mergeTokens(tokens, resolved)\n } else if (this.isSet(item)) {\n const resolved = await this.resolveSet(item, inputs, this.getInlineName(item, 'set'))\n tokens = this.mergeTokens(tokens, resolved)\n } else if (this.isModifier(item)) {\n const resolved = await this.resolveModifier(item, inputs)\n tokens = this.mergeTokens(tokens, resolved)\n }\n }\n\n return tokens\n }\n\n /**\n * Generate all possible permutations based on modifiers\n */\n generatePermutations(): ModifierInputs[] {\n if (!this.resolver.modifiers) {\n return [{}]\n }\n\n const modifierEntries = this.getOrderedModifierEntries()\n if (modifierEntries.length === 0) {\n return [{}]\n }\n\n // Generate all combinations\n const combinations: ModifierInputs[] = [{}]\n\n for (const [modifierName, modifier] of modifierEntries) {\n const contexts = Object.keys(modifier.contexts)\n const newCombinations: ModifierInputs[] = []\n\n for (const combination of combinations) {\n for (const context of contexts) {\n newCombinations.push({\n ...combination,\n [modifierName]: context,\n })\n }\n }\n\n combinations.length = 0\n combinations.push(...newCombinations)\n }\n\n return combinations\n }\n\n private getOrderedModifierEntries(): [string, Modifier][] {\n const modifiers = this.resolver.modifiers\n if (!modifiers) {\n return []\n }\n\n const seen = new Set<string>()\n const ordered: [string, Modifier][] = []\n\n for (const item of this.resolver.resolutionOrder) {\n if (!ReferenceResolver.isReference(item)) {\n continue\n }\n\n // resolutionOrder references are JSON Pointers; we care about \"#/modifiers/<name>\"\n if (!item.$ref.startsWith(JSON_POINTER_MODIFIERS_PREFIX)) {\n continue\n }\n\n const name = item.$ref.slice(JSON_POINTER_MODIFIERS_PREFIX.length)\n const modifier = modifiers[name]\n if (!modifier || seen.has(name)) {\n continue\n }\n\n ordered.push([name, modifier as Modifier])\n seen.add(name)\n }\n\n // Append any modifiers not listed in resolutionOrder to preserve behavior\n for (const [name, modifier] of Object.entries(modifiers)) {\n if (seen.has(name)) {\n continue\n }\n ordered.push([name, modifier as Modifier])\n seen.add(name)\n }\n\n return ordered\n }\n\n /**\n * Resolve a reference object\n */\n private async resolveReference(\n ref: ReferenceObject,\n inputs: ModifierInputs,\n ): Promise<InternalTokenDocument> {\n const resolved = await this.refResolver.resolve(ref, this.resolver)\n\n if (this.isSet(resolved)) {\n return this.resolveSet(resolved, inputs)\n }\n\n if (this.isModifier(resolved)) {\n return this.resolveModifier(resolved, inputs)\n }\n\n // Assume it's a token collection\n return resolved as InternalTokenDocument\n }\n\n /**\n * Resolve a set\n */\n private async resolveSet(\n set: Set,\n _modifierInputs: ModifierInputs,\n setName?: string,\n ): Promise<InternalTokenDocument> {\n let tokens: InternalTokenDocument = {}\n\n for (const source of set.sources) {\n let sourceTokens: InternalTokenDocument\n if (ReferenceResolver.isReference(source)) {\n const resolved = await this.refResolver.resolve(source, this.resolver)\n sourceTokens = resolved as InternalTokenDocument\n } else {\n sourceTokens = source as InternalTokenDocument\n }\n\n // Tag tokens with their source set name (for bundle grouping)\n const taggedTokens = this.tagTokens(sourceTokens, '_sourceSet', setName ?? 'set')\n tokens = this.mergeTokens(tokens, taggedTokens)\n }\n\n return tokens\n }\n\n private getInlineName(node: unknown, fallback: string): string {\n if (typeof node !== 'object' || node === null) {\n return fallback\n }\n const name = (node as { name?: unknown }).name\n return typeof name === 'string' && name !== '' ? name : fallback\n }\n\n /**\n * Resolve a modifier based on inputs\n * Note: inputs are normalized to lowercase for case-insensitive matching\n */\n private async resolveModifier(\n modifier: Modifier,\n inputs: ModifierInputs,\n ): Promise<InternalTokenDocument> {\n const modifierName = this.findModifierName(modifier)\n const contextValue = this.resolveContextValue(modifier, inputs, modifierName)\n const { actualContextKey, context } = this.resolveContext(modifier, modifierName, contextValue)\n const sourceTag = this.buildSourceTag(modifierName, actualContextKey)\n\n return await this.resolveContextSources(context, sourceTag)\n }\n\n private findModifierName(modifier: Modifier): string | undefined {\n return this.modifierNameCache.get(modifier)\n }\n\n private resolveContextValue(\n modifier: Modifier,\n inputs: ModifierInputs,\n modifierName?: string,\n ): string {\n const inputValue = modifierName ? inputs[modifierName.toLowerCase()] : undefined\n const fallback =\n modifier.default?.toLowerCase() ?? Object.keys(modifier.contexts)[0]?.toLowerCase()\n const contextValue = inputValue ?? fallback\n\n if (!contextValue) {\n throw new ConfigurationError('Cannot determine context for modifier')\n }\n\n return contextValue\n }\n\n private resolveContext(\n modifier: Modifier,\n modifierName: string | undefined,\n contextValue: string,\n ): { actualContextKey: string; context: unknown[] } {\n const contextMap = new CaseInsensitiveMap<unknown>()\n for (const [key, value] of Object.entries(modifier.contexts)) {\n contextMap.set(key, value)\n }\n\n const availableContexts = Object.keys(modifier.contexts)\n\n const actualContextKey = contextMap.getOriginalKey(contextValue)\n if (actualContextKey === undefined) {\n throw new ModifierError(modifierName ?? 'unknown', contextValue, availableContexts)\n }\n\n const context = modifier.contexts[actualContextKey]\n if (context === undefined) {\n throw new ModifierError(modifierName ?? 'unknown', contextValue, availableContexts)\n }\n\n return { actualContextKey, context }\n }\n\n private buildSourceTag(modifierName: string | undefined, actualContextKey: string): string {\n if (modifierName && actualContextKey) {\n return `${modifierName}-${actualContextKey}`\n }\n return 'modifier'\n }\n\n private async resolveContextSources(\n context: unknown[],\n sourceTag: string,\n ): Promise<InternalTokenDocument> {\n let tokens: InternalTokenDocument = {}\n\n for (const source of context) {\n const sourceTokens = await this.resolveSourceTokens(source)\n const taggedTokens = this.tagTokens(sourceTokens, '_sourceModifier', sourceTag)\n tokens = this.mergeTokens(tokens, taggedTokens)\n }\n\n return tokens\n }\n\n private async resolveSourceTokens(source: unknown): Promise<InternalTokenDocument> {\n if (ReferenceResolver.isReference(source)) {\n const resolved = await this.refResolver.resolve(source, this.resolver)\n return resolved as InternalTokenDocument\n }\n\n return source as InternalTokenDocument\n }\n\n /**\n * Merge two token objects (later values override earlier ones)\n */\n private mergeTokens(\n target: InternalTokenDocument,\n source: InternalTokenDocument,\n path: string[] = [],\n ): InternalTokenDocument {\n const result = { ...target }\n\n for (const [key, value] of Object.entries(source)) {\n const currentPath = [...path, key]\n const isSourceGroup =\n typeof value === 'object' && value !== null && !Array.isArray(value) && !('$value' in value)\n const targetValue = target[key]\n const isTargetGroup =\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue) &&\n !('$value' in targetValue)\n\n // Warn when group/token type changes during merge\n // Skip $-prefixed keys (like $root, $description, etc.) - these are DTCG metadata\n if (targetValue !== undefined && !key.startsWith('$')) {\n if (isSourceGroup && !isTargetGroup) {\n this.validationHandler.warn(\n `Token '${currentPath.join('.')}' is being replaced by a group. ` +\n 'This may cause loss of existing children.',\n )\n } else if (!isSourceGroup && isTargetGroup) {\n const targetHasChildren = Object.keys(targetValue).some((k) => !k.startsWith('$'))\n if (targetHasChildren) {\n this.validationHandler.warn(\n `Group '${currentPath.join('.')}' is being replaced by a token. ` +\n 'Existing children will be lost.',\n )\n }\n }\n }\n\n if (!isSourceGroup) {\n result[key] = value\n continue\n }\n\n result[key] = this.mergeTokens(\n ((result[key] as InternalTokenDocument | undefined) ?? {}) as InternalTokenDocument,\n value as InternalTokenDocument,\n currentPath,\n )\n }\n\n return result\n }\n\n /**\n * Tag all tokens in a collection with a metadata property.\n * Used for bundle mode to track which set or modifier defined each token.\n */\n private tagTokens(\n tokens: InternalTokenDocument,\n property: '_sourceModifier' | '_sourceSet',\n value: string,\n ): InternalTokenDocument {\n const result: InternalTokenDocument = {}\n\n for (const [key, entry] of Object.entries(tokens)) {\n if (typeof entry === 'object' && entry !== null && !Array.isArray(entry)) {\n if ('$value' in entry) {\n result[key] = { ...entry, [property]: value }\n } else {\n result[key] = this.tagTokens(entry as InternalTokenDocument, property, value)\n }\n } else {\n result[key] = entry\n }\n }\n\n return result\n }\n\n /**\n * Type guard for Set\n */\n private isSet(obj: unknown): obj is Set {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'sources' in obj &&\n Array.isArray((obj as { sources: unknown }).sources)\n )\n }\n\n /**\n * Type guard for Modifier\n */\n private isModifier(obj: unknown): obj is Modifier {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'contexts' in obj &&\n typeof (obj as { contexts: unknown }).contexts === 'object'\n )\n }\n}\n","/**\n * @fileoverview Case-insensitive map implementation\n */\n\n/**\n * Map that treats keys as case-insensitive\n * Internally stores keys in lowercase but preserves original casing\n *\n * @template T Value type\n */\nexport class CaseInsensitiveMap<T> {\n private map: Map<string, { originalKey: string; value: T }>\n\n constructor(entries?: Iterable<readonly [string, T]>) {\n this.map = new Map()\n if (entries !== undefined) {\n for (const [key, value] of entries) {\n this.set(key, value)\n }\n }\n }\n\n /**\n * Set a value with case-insensitive key\n *\n * @param key - Key (case-insensitive)\n * @param value - Value to store\n */\n set(key: string, value: T): void {\n const lowerKey = key.toLowerCase()\n this.map.set(lowerKey, { originalKey: key, value })\n }\n\n /**\n * Get a value by case-insensitive key\n *\n * @param key - Key (case-insensitive)\n * @returns Value if found, undefined otherwise\n */\n get(key: string): T | undefined {\n const entry = this.map.get(key.toLowerCase())\n return entry?.value\n }\n\n /**\n * Check if key exists (case-insensitive)\n *\n * @param key - Key (case-insensitive)\n * @returns True if key exists\n */\n has(key: string): boolean {\n return this.map.has(key.toLowerCase())\n }\n\n /**\n * Get the original key casing for a key\n *\n * @param key - Key (case-insensitive)\n * @returns Original key casing, or undefined if not found\n */\n getOriginalKey(key: string): string | undefined {\n const entry = this.map.get(key.toLowerCase())\n return entry?.originalKey\n }\n\n /**\n * Delete a value by case-insensitive key\n *\n * @param key - Key (case-insensitive)\n * @returns True if item was deleted\n */\n delete(key: string): boolean {\n return this.map.delete(key.toLowerCase())\n }\n\n /**\n * Get all values\n *\n * @returns Array of all values\n */\n values(): T[] {\n return Array.from(this.map.values()).map((entry) => entry.value)\n }\n\n /**\n * Get all original keys\n *\n * @returns Array of all keys in their original casing\n */\n keys(): string[] {\n return Array.from(this.map.values()).map((entry) => entry.originalKey)\n }\n\n /**\n * Get all entries with original key casing\n *\n * @returns Array of [key, value] tuples\n */\n entries(): Array<[string, T]> {\n return Array.from(this.map.values()).map((entry) => [entry.originalKey, entry.value])\n }\n\n /**\n * Clear all entries\n */\n clear(): void {\n this.map.clear()\n }\n\n /**\n * Get number of entries\n *\n * @returns Number of entries\n */\n get size(): number {\n return this.map.size\n }\n}\n","/**\n * @fileoverview Modifier input validation, normalization, and default filling\n *\n * Extracts the input processing concern from ResolutionEngine into a focused module.\n * Handles: type validation, case-insensitive normalization, input validation against\n * defined modifiers/contexts, and filling defaults for unspecified modifiers.\n */\n\nimport { ConfigurationError, ModifierError } from '@shared/errors/index'\nimport { CaseInsensitiveMap } from '@shared/utils/case-insensitive-map'\nimport { findSimilar } from '@shared/utils/string-similarity'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\n\nimport type { Modifier, ModifierInputs, ResolverDocument } from './types'\n\nexport type PreparedInputs = {\n normalizedInputs: ModifierInputs\n resolvedInputs: ModifierInputs\n}\n\ntype InputProcessorConfig = {\n modifiers: ResolverDocument['modifiers']\n validationHandler: ValidationHandler\n errorOnMissingDefault?: boolean\n}\n\nexport class ModifierInputProcessor {\n private modifiers: ResolverDocument['modifiers']\n private validationHandler: ValidationHandler\n private errorOnMissingDefault: boolean | undefined\n\n constructor(config: InputProcessorConfig) {\n this.modifiers = config.modifiers\n this.validationHandler = config.validationHandler\n this.errorOnMissingDefault = config.errorOnMissingDefault\n }\n\n /**\n * Validate, normalize, and fill defaults for modifier inputs\n *\n * Processing order:\n * 1. Type-check values (must be strings)\n * 2. Normalize keys/values to lowercase (DTCG case-insensitive requirement)\n * 3. Validate against defined modifiers/contexts\n * 4. Fill defaults for unspecified modifiers\n *\n * @param modifierInputs - Raw user-supplied modifier inputs (e.g. `{ theme: 'dark' }`)\n * @returns Normalized inputs (lowercased) and resolved inputs (preserving original casing from resolver)\n */\n prepare(modifierInputs: ModifierInputs): PreparedInputs {\n if (this.validationHandler.shouldValidate()) {\n this.validateInputTypes(modifierInputs)\n }\n\n const originalInputMap = this.buildOriginalInputMap(modifierInputs)\n const normalizedInputs = this.normalizeInputs(modifierInputs)\n\n if (this.validationHandler.shouldValidate()) {\n this.validateInputs(normalizedInputs)\n }\n\n const normalizedWithDefaults = this.fillDefaults(normalizedInputs)\n const resolvedInputs = this.buildResolvedInputs(normalizedWithDefaults, originalInputMap)\n\n return { normalizedInputs: normalizedWithDefaults, resolvedInputs }\n }\n\n /**\n * Validate that all input values are strings (DTCG spec section 5.2)\n */\n private validateInputTypes(inputs: ModifierInputs): void {\n for (const [key, value] of Object.entries(inputs)) {\n if (typeof value !== 'string') {\n this.validationHandler.handleIssue(\n new ConfigurationError(\n `Invalid input type for modifier \"${key}\". Expected string but got ${typeof value}. ` +\n `All modifier inputs must be strings (e.g., { \"beta\": \"true\" } not { \"beta\": true }).`,\n ),\n )\n }\n }\n }\n\n /**\n * Normalize modifier inputs to be case-insensitive\n *\n * Per DTCG spec SHOULD requirement: inputs should be case-insensitive.\n * For example, { \"theme\": \"dark\" }, { \"Theme\": \"Dark\" }, and { \"THEME\": \"DARK\" }\n * should be treated as equivalent.\n */\n private normalizeInputs(inputs: ModifierInputs): ModifierInputs {\n const normalized: ModifierInputs = {}\n\n for (const [key, value] of Object.entries(inputs)) {\n if (typeof value !== 'string') {\n continue\n }\n normalized[key.toLowerCase()] = value.toLowerCase()\n }\n\n return normalized\n }\n\n private buildOriginalInputMap(\n inputs: ModifierInputs,\n ): Map<string, { key: string; value: string }> {\n const original = new Map<string, { key: string; value: string }>()\n for (const [key, value] of Object.entries(inputs)) {\n if (typeof value !== 'string') {\n continue\n }\n const lowerKey = key.toLowerCase()\n if (!original.has(lowerKey)) {\n original.set(lowerKey, { key, value })\n }\n }\n return original\n }\n\n private buildResolvedInputs(\n normalizedInputs: ModifierInputs,\n originalInputMap: Map<string, { key: string; value: string }>,\n ): ModifierInputs {\n const resolved: ModifierInputs = {}\n const seenNormalized = new Set<string>()\n\n if (this.modifiers) {\n for (const [modifierName, modifier] of Object.entries(this.modifiers)) {\n const normalizedName = modifierName.toLowerCase()\n const normalizedValue = normalizedInputs[normalizedName]\n if (normalizedValue == null) {\n continue\n }\n seenNormalized.add(normalizedName)\n const contextMap = new CaseInsensitiveMap<string>()\n for (const contextName of Object.keys(modifier.contexts)) {\n contextMap.set(contextName, contextName)\n }\n const originalContext = contextMap.getOriginalKey(normalizedValue)\n const fallbackValue = originalInputMap.get(normalizedName)?.value ?? normalizedValue\n resolved[modifierName] = originalContext ?? fallbackValue\n }\n }\n\n for (const [normalizedName, normalizedValue] of Object.entries(normalizedInputs)) {\n if (seenNormalized.has(normalizedName)) {\n continue\n }\n const originalEntry = originalInputMap.get(normalizedName)\n resolved[originalEntry?.key ?? normalizedName] = originalEntry?.value ?? normalizedValue\n }\n\n return resolved\n }\n\n /**\n * Validate modifier inputs against defined modifiers and contexts\n * Note: inputs should already be normalized to lowercase before calling\n */\n private validateInputs(inputs: ModifierInputs): void {\n if (!this.modifiers) {\n if (Object.keys(inputs).length > 0) {\n throw new ConfigurationError('No modifiers defined in resolver document')\n }\n return\n }\n\n const modifierMap = new CaseInsensitiveMap<{ name: string; modifier: Modifier }>()\n for (const [name, modifier] of Object.entries(this.modifiers)) {\n modifierMap.set(name, { name, modifier: modifier as Modifier })\n }\n\n const allModifierNames = Object.keys(this.modifiers)\n\n for (const [modifierName, contextValue] of Object.entries(inputs)) {\n const modifierEntry = modifierMap.get(modifierName)\n\n if (modifierEntry === undefined) {\n const suggestions = findSimilar(modifierName, allModifierNames)\n this.validationHandler.handleIssue(new ModifierError(modifierName, undefined, suggestions))\n continue\n }\n\n const contextMap = new CaseInsensitiveMap<string>()\n for (const contextName of Object.keys(modifierEntry.modifier.contexts)) {\n contextMap.set(contextName, contextName)\n }\n\n if (!contextMap.has(contextValue)) {\n const validContexts = Object.keys(modifierEntry.modifier.contexts)\n this.validationHandler.handleIssue(\n new ModifierError(modifierName, contextValue, validContexts),\n )\n }\n }\n }\n\n /**\n * Fill in default values for missing modifiers\n * Note: inputs should already be normalized to lowercase before calling\n */\n private fillDefaults(inputs: ModifierInputs): ModifierInputs {\n if (!this.modifiers) {\n return { ...inputs }\n }\n\n const result = { ...inputs }\n\n for (const [modifierName, modifier] of Object.entries(this.modifiers)) {\n const normalizedModifierName = modifierName.toLowerCase()\n\n if (normalizedModifierName in result) {\n continue\n }\n\n if (modifier.default) {\n result[normalizedModifierName] = modifier.default.toLowerCase()\n continue\n }\n\n if (this.shouldErrorOnMissingDefault()) {\n throw new ConfigurationError(`No default value for modifier: ${modifierName}`)\n }\n\n this.validationHandler.warn(\n `Missing modifier input for \"${modifierName}\". Using first context.`,\n )\n const firstContext = Object.keys(modifier.contexts)[0]\n if (firstContext) {\n result[normalizedModifierName] = firstContext.toLowerCase()\n }\n }\n\n return result\n }\n\n private shouldErrorOnMissingDefault(): boolean {\n if (this.errorOnMissingDefault !== undefined) {\n return this.errorOnMissingDefault\n }\n return this.validationHandler.isStrict()\n }\n}\n","/**\n * @fileoverview DTCG token parser with validation\n */\n\nimport * as path from 'node:path'\n\nimport { readJSONFile } from '@adapters/filesystem/file-utils'\nimport { ValidationError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { getErrorMessage } from '@shared/utils/error-utils'\nimport { formatTokenPath } from '@shared/utils/path-utils'\nimport { isTokenLike } from '@shared/utils/token-utils'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport { SchemaValidator } from '@validation/validator'\n\nimport { GroupExtensionResolver } from './group-extension-resolver'\nimport type {\n InternalResolvedToken,\n InternalResolvedTokens,\n InternalTokenDocument,\n InternalToken,\n Token,\n TokenCollection,\n TokenGroup,\n TokenType,\n TokenValue,\n} from '@shared/token-types'\n\n/** Characters forbidden in DTCG token/group names: `{`, `}`, and `.` */\nconst INVALID_NAME_CHARS_REGEX = /[{}.]/\n\nexport type TokenParserOptions = {\n preserveExtensions?: boolean\n warnOnCaseSensitiveNames?: boolean\n validation?: ValidationOptions\n}\n\nexport class TokenParser {\n private validator: SchemaValidator\n private options: TokenParserOptions\n private validationHandler: ValidationHandler\n\n constructor(options: TokenParserOptions = {}) {\n this.validator = new SchemaValidator()\n this.options = {\n preserveExtensions: true,\n warnOnCaseSensitiveNames: true,\n ...options,\n }\n this.validationHandler = new ValidationHandler(options.validation)\n }\n\n /**\n * Parse tokens from file\n */\n async parseFile(filePath: string): Promise<TokenCollection> {\n const absolutePath = path.isAbsolute(filePath)\n ? filePath\n : path.resolve(process.cwd(), filePath)\n\n const data = await readJSONFile(absolutePath)\n return this.parseObject(data)\n }\n\n /**\n * Parse tokens from string\n */\n parse(content: string, sourcePath?: string): TokenCollection {\n const contextMsg = sourcePath !== undefined && sourcePath !== '' ? ` in ${sourcePath}` : ''\n try {\n const data = JSON.parse(content) as unknown\n return this.parseObject(data)\n } catch (error) {\n const errorMsg = getErrorMessage(error)\n throw new ValidationError(`Failed to parse token JSON${contextMsg}: ${errorMsg}`, [\n { message: errorMsg },\n ])\n }\n }\n\n /**\n * Parse tokens from object\n * Resolves $extends group inheritance before returning\n */\n parseObject(data: unknown): TokenCollection {\n if (typeof data !== 'object' || data === null) {\n throw new ValidationError('Token data must be an object', [\n { message: 'Token data must be an object' },\n ])\n }\n\n const formatErrors = this.validator.validate('format', data)\n if (formatErrors.length > 0) {\n const errorMsg = this.validator.getErrorMessage(formatErrors)\n this.handleValidationIssue(`Invalid token document: ${errorMsg}`)\n }\n\n // Resolve group extensions ($extends) per DTCG spec Section 6.4\n const extensionResolver = new GroupExtensionResolver()\n const resolved = extensionResolver.resolveExtensions(data as TokenCollection)\n\n return resolved\n }\n\n /**\n * Flatten token collection into resolved tokens with paths\n *\n * Recursively processes a nested token structure and converts it into a flat\n * collection of resolved tokens with fully qualified paths and names.\n *\n * @param tokens - Token collection or record to flatten\n * @param parentPath - Parent path segments for nested tokens (default: [])\n * @param inheritedType - Type inherited from parent group (optional)\n * @returns Flat collection of resolved tokens indexed by dotted path\n */\n flatten(\n tokens: TokenCollection | InternalTokenDocument | TokenGroup,\n parentPath: string[] = [],\n inheritedType?: TokenType,\n ): InternalResolvedTokens {\n const result: InternalResolvedTokens = {}\n\n for (const [key, value] of Object.entries(tokens)) {\n this.processEntry({\n key,\n value,\n parentPath,\n inheritedType,\n result,\n })\n }\n\n // Check for case-sensitive name conflicts (DTCG SHOULD requirement)\n // Only check at the root level to avoid checking on every recursive call\n if (this.options.warnOnCaseSensitiveNames === true && parentPath.length === 0) {\n this.checkCaseSensitiveNames(result)\n }\n\n return result\n }\n\n private processEntry(params: {\n key: string\n value: unknown\n parentPath: string[]\n inheritedType?: TokenType\n result: InternalResolvedTokens\n }): void {\n const { key, value, parentPath, inheritedType, result } = params\n\n if (this.looksLikeToken(value) && key.startsWith('$')) {\n // Only $root is allowed as a $ prefixed token name\n this.validateTokenName(key, parentPath)\n }\n\n if (this.shouldSkipKey(key)) {\n return\n }\n\n this.validateTokenName(key, parentPath)\n const currentPath = [...parentPath, key]\n\n if (this.isObject(value)) {\n this.validateGroupStructure(value as Record<string, unknown>, currentPath)\n }\n\n if (this.isToken(value)) {\n const resolvedToken = this.buildResolvedToken(value, currentPath, inheritedType)\n this.ensureTokenType(resolvedToken, currentPath)\n result[resolvedToken.name] = resolvedToken\n return\n }\n\n if (this.isTokenGroup(value)) {\n this.flattenGroup(value, currentPath, inheritedType, result)\n }\n }\n\n private looksLikeToken(value: unknown): boolean {\n return isTokenLike(value)\n }\n\n private shouldSkipKey(key: string): boolean {\n return key.startsWith('$') && key !== '$root'\n }\n\n private isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n }\n\n private buildResolvedToken(\n token: InternalToken,\n currentPath: string[],\n inheritedType?: TokenType,\n ): InternalResolvedToken {\n this.validateResolvedToken(token, currentPath)\n\n const tokenName = currentPath.join('.')\n const resolvedToken: InternalResolvedToken = {\n ...token,\n path: currentPath,\n name: tokenName,\n originalValue: (token.$value ?? token.$ref ?? '') as TokenValue,\n }\n\n if (resolvedToken.$type == null && inheritedType != null) {\n resolvedToken.$type = inheritedType\n }\n\n return resolvedToken\n }\n\n private validateResolvedToken(token: InternalToken, currentPath: string[]): void {\n const tokenType = token.$type\n if (typeof tokenType !== 'string') {\n return\n }\n\n const tokenForValidation = this.stripInternalMetadata(token)\n const errors = this.validator.validateToken(tokenForValidation)\n if (errors.length === 0) {\n return\n }\n\n const errorMsg = this.validator.getErrorMessage(errors)\n this.handleValidationIssue(`Invalid token at ${currentPath.join('.')}: ${errorMsg}`)\n }\n\n private ensureTokenType(token: InternalResolvedToken, currentPath: string[]): void {\n if (token.$type != null) {\n return\n }\n\n const isAliasReference = this.isReference(token.$value)\n const hasTokenLevelRef = typeof (token as Record<string, unknown>).$ref === 'string'\n if (isAliasReference || hasTokenLevelRef) {\n return\n }\n\n this.handleValidationIssue(\n `Token at ${currentPath.join('.')} has no $type property. ` +\n `Tokens must have an explicit $type, inherit it from a parent group, or be a reference to another token.`,\n )\n }\n\n private flattenGroup(\n value: TokenGroup,\n currentPath: string[],\n inheritedType: TokenType | undefined,\n result: InternalResolvedTokens,\n ): void {\n const groupType = (value as Record<string, unknown>).$type as TokenType | undefined\n const typeToInherit = groupType ?? inheritedType\n const flattened = this.flatten(value, currentPath, typeToInherit)\n Object.assign(result, flattened)\n }\n\n /**\n * Type guard: check if value is a token\n */\n private isToken(value: unknown): value is InternalToken {\n return isTokenLike(value)\n }\n\n /**\n * Type guard: check if value is a token group\n */\n private isTokenGroup(value: unknown): value is TokenGroup {\n return typeof value === 'object' && value != null && !('$value' in value)\n }\n\n /**\n * Check if a value is a reference (alias reference)\n * References will have their type determined during alias resolution\n */\n private isReference(value: unknown): boolean {\n if (typeof value !== 'string') {\n return false\n }\n // Alias reference (e.g., \"{token.name}\")\n if (value.startsWith('{') && value.endsWith('}')) {\n return true\n }\n return false\n }\n\n /**\n * Validate token/group name according to DTCG specification\n *\n * Names MUST NOT:\n * - Begin with '$' (reserved for specification properties), except for '$root'\n * - Contain '{', '}', or '.' characters (special syntax roles)\n *\n * Exception: '$root' is allowed as a reserved token name (DTCG Section 6.2)\n */\n private validateTokenName(name: string, parentPath: string[]): void {\n if (name.startsWith('$') && name !== '$root') {\n const path = formatTokenPath(parentPath, name)\n this.handleValidationIssue(\n `Invalid token/group name at \"${path}\": Names cannot start with '$' as this prefix is reserved for DTCG properties. ` +\n `Only '$root' is allowed as a special token name.`,\n )\n }\n\n if (INVALID_NAME_CHARS_REGEX.test(name)) {\n const path = formatTokenPath(parentPath, name)\n const invalidChars = name.match(/[{}.]/g)?.join(', ') ?? ''\n this.handleValidationIssue(\n `Invalid token/group name at \"${path}\": Names cannot contain '{', '}', or '.' characters. Found: ${invalidChars}`,\n )\n }\n }\n\n /**\n * Validate group structure according to DTCG specification\n *\n * Groups MUST NOT contain both a $value property and child tokens/groups simultaneously.\n * This ensures clear distinction between tokens (leaf nodes) and groups (containers).\n *\n * Note: $root is treated as a child token, not a property (DTCG Section 6.2).\n */\n private validateGroupStructure(value: Record<string, unknown>, path: string[]): void {\n const hasValue = '$value' in value || '$ref' in value\n const hasChildren = Object.keys(value).some(\n (key) =>\n (!key.startsWith('$') || key === '$root') &&\n typeof value[key] === 'object' &&\n value[key] !== null,\n )\n\n if (hasValue && hasChildren) {\n this.handleValidationIssue(\n `Invalid structure at \"${formatTokenPath(path)}\": Object contains both $value/$ref and child tokens/groups. ` +\n `Per DTCG specification, groups cannot have both a value and children.`,\n )\n }\n }\n\n private stripInternalMetadata(token: Record<string, unknown>): Record<string, unknown> {\n const { path: _path, name: _name, originalValue: _originalValue, ...rest } = token\n const cleaned: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(rest)) {\n if (key.startsWith('_')) {\n continue\n }\n cleaned[key] = value\n }\n\n return cleaned\n }\n\n /**\n * Check for token names that differ only by case\n *\n * Per DTCG spec: \"Tools MAY display a warning when token names differ only by case.\"\n * This helps prevent issues in case-insensitive environments.\n *\n * Emits warnings via the configured validation handler when conflicts are found.\n */\n private checkCaseSensitiveNames(tokens: InternalResolvedTokens): void {\n const lowercaseMap = new Map<string, string>()\n\n for (const tokenName of Object.keys(tokens)) {\n const lower = tokenName.toLowerCase()\n const existing = lowercaseMap.get(lower)\n\n if (existing && existing !== tokenName) {\n // Case-sensitive name conflict detected (DTCG spec allows but tools MAY warn)\n this.reportWarning(\n `Token names differ only by case: \"${existing}\" and \"${tokenName}\". This may break in case-insensitive environments.`,\n )\n } else {\n lowercaseMap.set(lower, tokenName)\n }\n }\n }\n\n private handleValidationIssue(message: string): void {\n this.validationHandler.handleIssue(new ValidationError(message, [{ message }]))\n }\n\n private reportWarning(message: string): void {\n this.validationHandler.warn(message)\n }\n\n /**\n * Validate a single token\n */\n validateToken(token: Token): { valid: boolean; errors: string[] } {\n const tokenForValidation = this.stripInternalMetadata(token as Record<string, unknown>)\n const errors = this.validator.validateToken(tokenForValidation)\n\n return {\n valid: errors.length === 0,\n errors: errors.map((e) => e.message),\n }\n }\n}\n","/**\n * @fileoverview Path utilities for token path formatting\n */\n\n/**\n * Format a token path for error messages\n * Provides consistent path formatting across the codebase\n *\n * @param parentPath - Parent path segments\n * @param name - Current segment name\n * @returns Formatted path string (e.g., \"color.brand.primary\")\n */\nexport function formatTokenPath(parentPath: string[], name?: string): string {\n if (name === undefined || name === '') {\n return parentPath.join('.')\n }\n return parentPath.length > 0 ? `${parentPath.join('.')}.${name}` : name\n}\n","/**\n * @fileoverview Group extension resolver for DTCG $extends support\n *\n * Implements group inheritance per DTCG specification (Section 6.4).\n * Follows JSON Schema $ref semantics for deep merging and extension resolution.\n */\n\nimport { ValidationError } from '@shared/errors/index'\nimport { isTokenLike } from '@shared/utils/token-utils'\n\nimport type { Token, TokenCollection, TokenGroup } from '@shared/token-types'\n\nexport class GroupExtensionResolver {\n /**\n * Resolve all $extends references in a token collection\n * Returns a new collection with all group extensions resolved\n */\n resolveExtensions(collection: TokenCollection): TokenCollection {\n const result: TokenCollection = {}\n\n // Process each top-level group/token\n for (const [key, value] of Object.entries(collection)) {\n if (this.isToken(value)) {\n // Tokens at root level don't have extensions\n result[key] = value\n } else if (this.isGroup(value)) {\n // Resolve group extensions recursively\n result[key] = this.resolveGroup(value, [key], collection, new Set())\n }\n }\n\n return result\n }\n\n /**\n * Resolve extensions for a single group\n * @param group The group to resolve\n * @param path Current path in the hierarchy (for error messages)\n * @param collection The full token collection (for resolving references)\n * @param visited Set of visited paths (for circular reference detection)\n */\n private resolveGroup(\n group: TokenGroup,\n path: string[],\n collection: TokenCollection,\n visited: Set<string>,\n ): TokenGroup {\n const groupPath = path.join('.')\n\n // Check for circular references\n if (visited.has(groupPath)) {\n const cycle = Array.from(visited).join(' → ') + ' → ' + groupPath\n throw new ValidationError(\n `Circular group extension detected: ${cycle}. ` +\n `Groups must not create circular inheritance chains (DTCG Section 6.4.4).`,\n [{ message: `Circular group extension detected: ${cycle}` }],\n )\n }\n\n // If no $extends, process children recursively\n if (group.$extends == null) {\n return this.processGroupChildren(group, path, collection, visited)\n }\n\n // Parse the $extends reference\n const targetPath = this.parseGroupReference(group.$extends)\n\n // Find the target group\n const targetGroup = this.findGroup(targetPath, collection)\n if (targetGroup == null) {\n throw new ValidationError(\n `Group extension failed at \"${groupPath}\": Cannot find target group \"${targetPath}\". ` +\n `Ensure the referenced group exists.`,\n [\n {\n message: `Group extension failed at \"${groupPath}\": Cannot find target group \"${targetPath}\".`,\n },\n ],\n )\n }\n\n // Check that target is actually a group, not a token\n if (this.isToken(targetGroup)) {\n throw new ValidationError(\n `Group extension failed at \"${groupPath}\": Target \"${targetPath}\" is a token, not a group. ` +\n `$extends can only reference groups (DTCG Section 6.4).`,\n [\n {\n message: `Group extension failed at \"${groupPath}\": Target \"${targetPath}\" is a token.`,\n },\n ],\n )\n }\n\n // Add current group to visited set for circular detection\n const newVisited = new Set(visited)\n newVisited.add(groupPath)\n\n // Recursively resolve the target group first\n const resolvedTarget = this.resolveGroup(\n targetGroup,\n targetPath.split('.'),\n collection,\n newVisited,\n )\n\n // Merge local group with resolved target\n const merged = this.mergeGroups(resolvedTarget, group)\n\n // Process children of merged group recursively\n return this.processGroupChildren(merged, path, collection, visited)\n }\n\n /**\n * Process children of a group recursively\n */\n private processGroupChildren(\n group: TokenGroup,\n path: string[],\n collection: TokenCollection,\n visited: Set<string>,\n ): TokenGroup {\n const result: TokenGroup = { ...group }\n\n // Process each child\n for (const [key, value] of Object.entries(group)) {\n // Skip group properties\n if (key.startsWith('$')) {\n continue\n }\n\n if (this.isGroup(value)) {\n // Recursively resolve child group\n result[key] = this.resolveGroup(value, [...path, key], collection, visited)\n }\n // Tokens are left as-is\n }\n\n return result\n }\n\n /**\n * Merge two groups using deep merge semantics\n * Per DTCG spec Section 6.4.3:\n * - Same path = local overrides inherited\n * - Different paths = merge (both exist)\n * - Complete token replacement (not property-by-property merge)\n */\n private mergeGroups(inherited: TokenGroup, local: TokenGroup): TokenGroup {\n // Start with a copy of inherited group\n const result: TokenGroup = { ...inherited }\n\n // Apply local properties and tokens\n for (const [key, value] of Object.entries(local)) {\n // $extends is processed, don't copy it to result\n if (key === '$extends') {\n continue\n }\n\n // Group properties: local overrides inherited\n if (key.startsWith('$')) {\n result[key] = value\n continue\n }\n\n // Check if this key exists in inherited\n const inheritedValue = inherited[key]\n\n if (inheritedValue == null) {\n // New token/group: add it\n result[key] = value\n continue\n }\n\n // Both tokens or type mismatch (token vs group): local overrides\n const isInheritedToken = this.isToken(inheritedValue)\n const isLocalToken = this.isToken(value)\n\n if (isInheritedToken || isLocalToken) {\n result[key] = value\n continue\n }\n\n // Both groups: deep merge recursively\n result[key] = this.mergeGroups(inheritedValue as TokenGroup, value as TokenGroup)\n }\n\n return result\n }\n\n /**\n * Parse a group reference (alias or JSON Pointer format)\n * Supports: \"{group.name}\" or \"#/group/name\"\n */\n private parseGroupReference(ref: string): string {\n // Alias format: {group.name}\n if (ref.startsWith('{') && ref.endsWith('}')) {\n return ref.slice(1, -1)\n }\n\n // JSON Pointer format: #/group/name\n if (ref.startsWith('#/')) {\n return ref.slice(2).replace(/\\//g, '.')\n }\n\n // Invalid format\n throw new ValidationError(\n `Invalid group reference format: \"${ref}\". ` +\n `Use alias syntax \"{group.name}\" or JSON Pointer \"#/group/name\".`,\n [{ message: `Invalid group reference format: \"${ref}\".` }],\n )\n }\n\n /**\n * Find a group in the token collection by path\n */\n private findGroup(path: string, collection: TokenCollection): TokenGroup | Token | null {\n const parts = path.split('.')\n let current: unknown = collection\n for (const part of parts) {\n if (current == null || typeof current !== 'object') {\n return null as TokenGroup | Token | null\n }\n current = (current as Record<string, unknown>)[part]\n }\n\n return current as TokenGroup | Token | null\n }\n\n /**\n * Type guard: check if value is a token\n */\n private isToken(value: unknown): value is Token {\n return isTokenLike(value)\n }\n\n /**\n * Type guard: check if value is a group\n */\n private isGroup(value: unknown): value is TokenGroup {\n return typeof value === 'object' && value !== null && !('$value' in value) && !('$ref' in value)\n }\n}\n","/**\n * @license\n * Copyright (c) 2025 Dispersa Contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @fileoverview Main Dispersa API - Functional exports\n */\n\nimport { TypeWriter } from '@adapters/filesystem/type-writer'\nimport { BuildOrchestrator } from '@engine/build-orchestrator'\nimport { OutputProcessor } from '@engine/output-processor'\nimport { TokenPipeline } from '@engine/pipeline/token-pipeline'\nimport type { BuildConfig, DispersaOptions } from '@engine/types'\nimport { LintRunner } from '@lint/lint-runner'\nimport type { LintConfig, LintResult } from '@lint/types'\nimport type { BuildResult } from '@outputs/types'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport { ConfigurationError, LintError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { toBuildError } from '@shared/utils/error-utils'\nimport { stripInternalTokenMetadata } from '@shared/utils/token-utils'\nimport type { ResolvedTokens, InternalResolvedTokens } from '@shared/token-types'\nimport { SchemaValidator } from '@validation/validator'\n\nfunction createValidator(): SchemaValidator {\n return new SchemaValidator()\n}\n\nfunction createPipeline(options?: DispersaOptions): TokenPipeline {\n return new TokenPipeline({ validation: options?.validation })\n}\n\nfunction createOutputProcessor(): OutputProcessor {\n return new OutputProcessor()\n}\n\nfunction createOrchestrator(\n pipeline: TokenPipeline,\n outputProcessor: OutputProcessor,\n): BuildOrchestrator {\n return new BuildOrchestrator(pipeline, outputProcessor)\n}\n\nfunction resolveConfig(\n config: Partial<BuildConfig>,\n options?: DispersaOptions,\n): { resolver: string | ResolverDocument; buildPath: string } {\n const resolver = config.resolver ?? options?.resolver\n const buildPath = config.buildPath ?? options?.buildPath ?? ''\n\n if (!resolver) {\n throw new ConfigurationError('resolver is required in build config')\n }\n\n return { resolver, buildPath }\n}\n\nfunction validateBuildConfig(validator: SchemaValidator, config: BuildConfig): void {\n const configErrors = validator.validateBuildConfig(config)\n if (configErrors.length > 0) {\n throw new ConfigurationError(\n `Invalid build configuration: ${validator.getErrorMessage(configErrors)}`,\n )\n }\n\n for (const output of config.outputs) {\n const outputErrors = validator.validateOutputConfig(output)\n if (outputErrors.length > 0) {\n throw new ConfigurationError(\n `Invalid output '${output.name}': ${validator.getErrorMessage(outputErrors)}`,\n )\n }\n }\n}\n\nasync function resolvePipeline(\n pipeline: TokenPipeline,\n resolver: string | ResolverDocument,\n modifierInputs: ModifierInputs,\n): Promise<ResolvedTokens> {\n const { tokens } = await pipeline.resolve(resolver, modifierInputs)\n return stripInternalTokenMetadata(tokens)\n}\n\n/**\n * DTCG design token processor with multi-format output support\n *\n * Dispersa processes DTCG-compliant design tokens through a configurable pipeline,\n * resolves references and aliases, applies transforms and filters, and generates output\n * in multiple formats (CSS, JSON, JavaScript).\n *\n * **Runtime Validation:**\n * All functions validate their configuration inputs at runtime, including build configs,\n * output configs, and custom component registrations. This catches configuration errors\n * early with helpful error messages.\n *\n * Features:\n * - **Transforms**: Modify token values and names (e.g., convert colors, change case)\n * - **Filters**: Select which tokens to include in output\n * - **Preprocessors**: Transform raw token data before parsing\n * - **Renderers**: Generate output in various formats\n * - **Runtime validation**: JSON schema validation for all user inputs\n *\n * @example Basic build usage\n * ```typescript\n * import { build, css } from 'dispersa'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const result = await build({\n * resolver: './tokens.resolver.json',\n * buildPath: './output',\n * outputs: [\n * css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [nameKebabCase()]\n * })\n * ]\n * })\n * ```\n *\n * @example Mixed presets per output\n * ```typescript\n * import { build, css, json } from 'dispersa'\n *\n * const result = await build({\n * resolver: './tokens.resolver.json',\n * buildPath: './output',\n * outputs: [\n * css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root', // All themes in one CSS file\n * transforms: [nameKebabCase()]\n * }),\n * json({\n * name: 'json',\n * file: 'tokens-{theme}.json', // Separate file per theme\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ]\n * })\n * ```\n *\n * @example Using filters and preprocessors\n * ```typescript\n * import { build, css } from 'dispersa'\n * import { byType } from 'dispersa/filters'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const result = await build({\n * resolver: './tokens.resolver.json',\n * buildPath: './output',\n * outputs: [\n * css({\n * name: 'colors-only',\n * file: 'colors.css',\n * preset: 'standalone',\n * selector: ':root',\n * filters: [byType('color')],\n * transforms: [nameKebabCase()]\n * })\n * ],\n * permutations: [\n * { theme: 'light' },\n * { theme: 'dark' }\n * ]\n * })\n * ```\n */\nexport async function build(config: BuildConfig): Promise<BuildResult> {\n try {\n return await buildOrThrow(config)\n } catch (error) {\n return {\n success: false,\n outputs: [],\n errors: [toBuildError(error)],\n }\n }\n}\n\nexport async function buildOrThrow(config: BuildConfig): Promise<BuildResult> {\n const validator = createValidator()\n\n validateBuildConfig(validator, config)\n\n const { resolver, buildPath } = resolveConfig(config)\n\n const pipeline = createPipeline({ validation: config.validation })\n const outputProcessor = createOutputProcessor()\n const orchestrator = createOrchestrator(pipeline, outputProcessor)\n\n return orchestrator.build(resolver, buildPath, config)\n}\n\nexport async function buildPermutation(\n config: BuildConfig,\n modifierInputs: ModifierInputs = {},\n): Promise<BuildResult> {\n return build({\n ...config,\n permutations: [modifierInputs],\n })\n}\n\nexport async function resolveTokens(\n resolver: string | ResolverDocument,\n modifierInputs: ModifierInputs = {},\n validation?: ValidationOptions,\n): Promise<ResolvedTokens> {\n const pipeline = createPipeline({ validation })\n return resolvePipeline(pipeline, resolver, modifierInputs)\n}\n\nexport type LintOptions = {\n resolver: string | ResolverDocument\n modifierInputs?: ModifierInputs\n validation?: ValidationOptions\n} & LintConfig\n\nexport async function lint(options: LintOptions): Promise<LintResult> {\n const { resolver, modifierInputs = {}, validation, ...lintConfig } = options\n\n const pipeline = createPipeline({ validation })\n\n const runner = new LintRunner({\n ...lintConfig,\n failOnError: lintConfig.failOnError ?? true,\n })\n\n let tokenSets: InternalResolvedTokens[]\n\n if (Object.keys(modifierInputs).length > 0) {\n // Specific modifier inputs provided - resolve only that permutation\n const { tokens } = await pipeline.resolve(resolver, modifierInputs)\n tokenSets = [tokens]\n } else {\n // No specific modifier inputs - resolve all permutations\n const permutations = await pipeline.resolveAllPermutations(resolver)\n tokenSets = permutations.map((p) => p.tokens)\n }\n\n // Use runMultiple for deduplication across permutations\n const result = await runner.runMultiple(tokenSets)\n\n if (result.errorCount > 0 && lintConfig.failOnError !== false) {\n throw new LintError(result.issues)\n }\n\n return result\n}\n\nexport async function resolveAllPermutations(resolver: string | ResolverDocument): Promise<\n {\n tokens: ResolvedTokens\n modifierInputs: ModifierInputs\n }[]\n> {\n const pipeline = createPipeline()\n const permutations = await pipeline.resolveAllPermutations(resolver)\n return permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalTokenMetadata(tokens),\n modifierInputs,\n }))\n}\n\nexport async function generateTypes(\n tokens: ResolvedTokens,\n fileName: string,\n options?: { moduleName?: string },\n): Promise<void> {\n const typeWriter = new TypeWriter()\n await typeWriter.write(tokens, {\n fileName,\n moduleName: options?.moduleName ?? 'Tokens',\n includeValues: true,\n })\n}\n","/**\n * @fileoverview Token types - extended from schema-generated types\n *\n * Base token types are defined manually to match DTCG 2025.10.\n * This keeps TypeScript types stable while runtime validation relies on\n * the vendored DTCG JSON Schemas.\n */\n\n// ============================================================================\n// DTCG TOKEN TYPES (MANUAL)\n// ============================================================================\n\nexport type JsonPointerReferenceObject = {\n $ref: string\n}\n\nexport type TokenValueReference = string | JsonPointerReferenceObject\n\nexport type Token = {\n $value?: TokenValue | TokenValueReference\n $ref?: string\n $type?: TokenType\n $description?: string\n $deprecated?: boolean | string\n $extensions?: Record<string, unknown>\n}\n\n/**\n * Internal token shape used by the resolver pipeline\n */\nexport type InternalToken = Token & {\n /** Internal: Source modifier tag for bundle outputs (not part of DTCG spec) */\n _sourceModifier?: string\n}\n\ntype TokenGroupMetadataValue = string | boolean | Record<string, unknown> | undefined\n\ntype TokenGroupBase = {\n $type?: TokenType\n $description?: string\n $deprecated?: boolean | string\n $extensions?: Record<string, unknown>\n $extends?: string\n $root?: Token\n}\n\n// Note: interface used to allow recursive index signature (TS2456 with type alias).\nexport interface TokenGroup extends TokenGroupBase {\n [key: string]: Token | InternalToken | TokenGroup | TokenGroupMetadataValue\n}\n\n// ============================================================================\n// HELPER TYPES (NOT SCHEMA-GENERATED)\n// ============================================================================\n\n/**\n * Token type discriminator - union of all valid token type strings\n *\n * Represents the possible values for the $type property in DTCG tokens.\n */\nexport type TokenType =\n | 'color'\n | 'dimension'\n | 'fontFamily'\n | 'fontWeight'\n | 'duration'\n | 'cubicBezier'\n | 'number'\n | 'shadow'\n | 'typography'\n | 'border'\n | 'strokeStyle'\n | 'transition'\n | 'gradient'\n\n/**\n * Token value types - any valid value that can appear in a token\n *\n * Represents the possible types for the $value property in tokens.\n * Can be primitives, objects, or arrays depending on the token type.\n */\nexport type TokenValue = string | number | boolean | Record<string, unknown> | unknown[]\n\n// ============================================================================\n// VALUE TYPES FOR DEVELOPER CONVENIENCE\n// ============================================================================\n\n/**\n * Valid DTCG color space identifiers\n * All 14 color spaces from DTCG Color Module 2025-10\n */\nexport type ColorSpace =\n | 'srgb' // sRGB (IEC 61966-2-1:1999)\n | 'srgb-linear' // Linear sRGB\n | 'hsl' // Hue, Saturation, Lightness\n | 'hwb' // Hue, Whiteness, Blackness\n | 'lab' // CIELAB (CIE L*a*b*)\n | 'lch' // CIE LCH (Lightness, Chroma, Hue)\n | 'oklab' // Oklab perceptual color space\n | 'oklch' // Oklch (Lightness, Chroma, Hue)\n | 'display-p3' // Display P3 (DCI-P3 D65 whitepoint)\n | 'a98-rgb' // Adobe RGB (1998)\n | 'prophoto-rgb' // ProPhoto RGB (ROMM RGB)\n | 'rec2020' // Rec. 2020 (ITU-R BT.2020-2)\n | 'xyz-d65' // CIE XYZ with D65 whitepoint\n | 'xyz-d50' // CIE XYZ with D50 whitepoint\n\n/**\n * Color component value: number or the \"none\" keyword for missing channels\n * Token references are handled separately via alias resolution\n */\nexport type ColorComponent = number | 'none'\n\n/**\n * DTCG color object format with colorSpace and components\n * Each color space has different component meanings and ranges:\n * - RGB-based (srgb, srgb-linear, display-p3, a98-rgb, prophoto-rgb, rec2020): [R: 0-1, G: 0-1, B: 0-1]\n * - HSL: [H: angle, S: 0-100, L: 0-100]\n * - HWB: [H: angle, W: 0-100, B: 0-100]\n * - Lab/CIELab: [L: 0-100, a: -125 to 125, b: -125 to 125]\n * - LCH: [L: 0-100, C: 0-150, H: angle]\n * - OKLab: [L: 0-1, a: -0.4 to 0.4, b: -0.4 to 0.4]\n * - OKLCH: [L: 0-1, C: 0-0.4, H: angle]\n * - XYZ: [X: unbounded, Y: unbounded, Z: unbounded]\n */\nexport type ColorValueObject = {\n colorSpace: ColorSpace\n components: [ColorComponent, ColorComponent, ColorComponent]\n alpha?: number\n hex?: string\n}\n\n/**\n * DTCG 2025-10 compliant color value\n *\n * Per DTCG spec, color values must be one of:\n * 1. **Color object** with colorSpace and components (e.g., `{ colorSpace: 'srgb', components: [1, 0, 0] }`)\n * 2. **Token reference** using `{token.path}` or JSON Pointer object (e.g., `\"{color.brand.primary}\"`)\n *\n * ⚠️ **Important**: Arbitrary CSS color strings like `\"#ff0000\"`, `\"rgb(255, 0, 0)\"`, or `\"red\"`\n * are NOT valid per DTCG spec. String values MUST be alias references.\n *\n * @see {@link https://www.designtokens.org/tr/2025.10/color/ | DTCG Color Module}\n * @see {@link https://www.designtokens.org/tr/2025.10/format/#color-0 | DTCG Format: Color Type}\n *\n * @example Valid color values\n * ```typescript\n * // Object format (preferred)\n * const color1: ColorValue = {\n * colorSpace: 'srgb',\n * components: [1, 0, 0],\n * alpha: 1\n * }\n *\n * // Alias reference (resolves to another token)\n * const color2: ColorValue = \"{color.brand.primary}\"\n * ```\n */\nexport type ColorValue = ColorValueObject | TokenValueReference\n\n/**\n * DTCG 2025-10 compliant dimension value\n *\n * Per DTCG spec, dimension values MUST use object format with\n * numeric value and string unit properties.\n *\n * ⚠️ **Important**: String values like `\"16px\"` are NOT valid per DTCG spec.\n * Dimensions MUST be objects with separate value and unit properties.\n *\n * @see {@link https://www.designtokens.org/tr/2025.10/format/#dimension-0 | DTCG Format: Dimension Type}\n *\n * @example Valid dimension values\n * ```typescript\n * const spacing: DimensionValue = { value: 16, unit: 'px' }\n * const fontSize: DimensionValue = { value: 1.5, unit: 'rem' }\n * const borderWidth: DimensionValue = { value: 2, unit: 'px' }\n * ```\n */\nexport type DimensionValue = {\n value: number\n unit: 'px' | 'rem'\n}\n\n/**\n * Font family value - single string or array of fallback fonts\n */\nexport type FontFamilyValue = string | string[]\n\n/**\n * Font weight value - numeric (1-1000) or named value\n */\nexport type FontWeightValue = number | string\n\n/**\n * Duration value - DTCG duration object\n */\nexport type DurationValue = { value: number; unit: 'ms' | 's' }\n\n/**\n * Cubic bezier value - 4-number array for animation easing\n */\nexport type CubicBezierValue = [number, number, number, number]\n\n/**\n * Shadow value object (DTCG 2025.10 composite type - Section 9.6)\n *\n * Represents a shadow effect with color, offset, blur, and optional spread.\n * Uses proper ColorValue and DimensionValue types per DTCG spec.\n *\n * @example\n * ```json\n * {\n * \"$type\": \"shadow\",\n * \"$value\": {\n * \"color\": { \"colorSpace\": \"srgb\", \"components\": [0, 0, 0], \"alpha\": 0.5 },\n * \"offsetX\": { \"value\": 0, \"unit\": \"px\" },\n * \"offsetY\": { \"value\": 4, \"unit\": \"px\" },\n * \"blur\": { \"value\": 8, \"unit\": \"px\" },\n * \"spread\": { \"value\": 0, \"unit\": \"px\" }\n * }\n * }\n * ```\n */\nexport type ShadowValueObject = {\n /** Shadow color (color object or alias reference) */\n color: ColorValue\n /** Horizontal offset */\n offsetX: DimensionValue\n /** Vertical offset */\n offsetY: DimensionValue\n /** Blur radius */\n blur: DimensionValue\n /** Spread radius */\n spread: DimensionValue\n /** Whether shadow is inset */\n inset?: boolean\n}\n\n/**\n * Shadow value - single shadow or array of shadows\n */\nexport type ShadowValue = ShadowValueObject | ShadowValueObject[]\n\n/**\n * Unresolved typography token type (pre-resolution)\n */\nexport type UnresolvedTypographyToken = Token & {\n $type: 'typography'\n $value: TypographyValue | TokenValueReference\n}\n\n/**\n * Unresolved border token type (pre-resolution)\n */\nexport type UnresolvedBorderToken = Token & {\n $type: 'border'\n $value: BorderValue | TokenValueReference\n}\n\n/**\n * Unresolved stroke style token type (pre-resolution)\n */\nexport type UnresolvedStrokeStyleToken = Token & {\n $type: 'strokeStyle'\n $value: StrokeStyleValue | TokenValueReference\n}\n\n/**\n * Unresolved transition token type (pre-resolution)\n */\nexport type UnresolvedTransitionToken = Token & {\n $type: 'transition'\n $value: TransitionValue | TokenValueReference\n}\n\n/**\n * Unresolved gradient token type (pre-resolution)\n */\nexport type UnresolvedGradientToken = Token & {\n $type: 'gradient'\n $value: GradientValue | TokenValueReference\n}\n\n/**\n * Stroke style value object\n */\nexport type StrokeStyleValueObject = {\n dashArray: DimensionValue[]\n lineCap: 'round' | 'butt' | 'square'\n}\n\n/**\n * Stroke style value\n */\nexport type StrokeStyleValue = string | StrokeStyleValueObject\n\n/**\n * Border value object\n */\nexport type BorderValue = {\n color: ColorValue\n width: DimensionValue\n style: StrokeStyleValue\n}\n\n/**\n * Typography value object\n */\nexport type TypographyValue = {\n fontFamily: FontFamilyValue\n fontSize: DimensionValue\n fontWeight: FontWeightValue\n letterSpacing: DimensionValue\n lineHeight: number\n}\n\n/**\n * Transition value object\n */\nexport type TransitionValue = {\n duration: DurationValue\n delay: DurationValue\n timingFunction: CubicBezierValue\n}\n\n/**\n * Gradient stop value object\n */\nexport type GradientStop = {\n color: ColorValue\n position: number\n}\n\n/**\n * Gradient value\n */\nexport type GradientValue = GradientStop[]\n\n// ============================================================================\n// NARROWED VALUE TYPE (FOR CONSUMER USE)\n// ============================================================================\n\n/**\n * Union of all known DTCG token value types.\n *\n * Provides narrower typing than `TokenValue` for consumers who want\n * better autocomplete and type checking when working with resolved tokens.\n *\n * Use the type guard helpers (`isColorToken`, `isDimensionToken`, etc.)\n * to narrow a `ResolvedToken` to a specific value type.\n *\n * @example\n * ```typescript\n * import type { ResolvedToken } from 'dispersa'\n * import { isColorToken, isDimensionToken } from 'dispersa'\n *\n * function process(token: ResolvedToken) {\n * if (isColorToken(token)) {\n * // token.$value is narrowed to ColorValue\n * }\n * if (isDimensionToken(token)) {\n * // token.$value is narrowed to DimensionValue\n * }\n * }\n * ```\n */\nexport type DesignTokenValue =\n | ColorValueObject\n | DimensionValue\n | DurationValue\n | CubicBezierValue\n | ShadowValueObject\n | ShadowValueObject[]\n | TypographyValue\n | BorderValue\n | StrokeStyleValueObject\n | StrokeStyleValue\n | TransitionValue\n | GradientValue\n | FontFamilyValue\n | FontWeightValue\n | number\n\n// ============================================================================\n// TOKEN TYPE GUARDS\n// ============================================================================\n\n/** Type-narrowed token whose `$value` is a `ColorValueObject` or color string */\nexport type ColorToken = ResolvedToken & { $type: 'color' }\n\n/** Type-narrowed token whose `$value` is a `DimensionValue` */\nexport type DimensionToken = ResolvedToken & { $type: 'dimension' }\n\n/** Type-narrowed token whose `$value` is a `ShadowValue` */\nexport type ShadowToken = ResolvedToken & { $type: 'shadow' }\n\n/** Type-narrowed token whose `$value` is a `TypographyValue` */\nexport type TypographyToken = ResolvedToken & { $type: 'typography' }\n\n/** Type-narrowed token whose `$value` is a `BorderValue` */\nexport type BorderToken = ResolvedToken & { $type: 'border' }\n\n/** Type-narrowed token whose `$value` is a `DurationValue` */\nexport type DurationToken = ResolvedToken & { $type: 'duration' }\n\n/** Type-narrowed token whose `$value` is a `TransitionValue` */\nexport type TransitionToken = ResolvedToken & { $type: 'transition' }\n\n/** Type-narrowed token whose `$value` is a `GradientValue` */\nexport type GradientToken = ResolvedToken & { $type: 'gradient' }\n\n/** Check if a resolved token is a color token */\nexport function isColorToken(token: ResolvedToken): token is ColorToken {\n return token.$type === 'color'\n}\n\n/** Check if a resolved token is a dimension token */\nexport function isDimensionToken(token: ResolvedToken): token is DimensionToken {\n return token.$type === 'dimension'\n}\n\n/** Check if a resolved token is a shadow token */\nexport function isShadowToken(token: ResolvedToken): token is ShadowToken {\n return token.$type === 'shadow'\n}\n\n/** Check if a resolved token is a typography token */\nexport function isTypographyToken(token: ResolvedToken): token is TypographyToken {\n return token.$type === 'typography'\n}\n\n/** Check if a resolved token is a border token */\nexport function isBorderToken(token: ResolvedToken): token is BorderToken {\n return token.$type === 'border'\n}\n\n/** Check if a resolved token is a duration token */\nexport function isDurationToken(token: ResolvedToken): token is DurationToken {\n return token.$type === 'duration'\n}\n\n/** Check if a resolved token is a transition token */\nexport function isTransitionToken(token: ResolvedToken): token is TransitionToken {\n return token.$type === 'transition'\n}\n\n/** Check if a resolved token is a gradient token */\nexport function isGradientToken(token: ResolvedToken): token is GradientToken {\n return token.$type === 'gradient'\n}\n\n// ============================================================================\n// COMPOSED TYPES (NOT SCHEMA-GENERATED)\n// ============================================================================\n\n/**\n * Top-level collection of tokens and groups\n *\n * Maps token/group names to their definitions. This is the structure\n * of a raw token file before resolution.\n */\nexport type TokenCollection = Record<string, Token | TokenGroup>\n\n/**\n * Token document nodes used during resolution\n */\nexport type TokenNode = Token | TokenGroup\n\n/**\n * Internal token document nodes used during resolution\n */\nexport type InternalTokenNode = InternalToken | TokenGroup\n\n/**\n * Token document structure (pre-resolution)\n */\nexport type TokenDocument = Record<string, TokenNode>\n\n/**\n * Internal token document structure (pre-resolution, with internal metadata)\n */\nexport type InternalTokenDocument = Record<string, InternalTokenNode>\n\n/**\n * Fully resolved token with computed metadata\n *\n * After resolution, tokens include additional metadata like their\n * full path in the token hierarchy and the original value before\n * any alias or reference resolution.\n *\n * @example\n * ```typescript\n * {\n * $value: \"#ff0000\",\n * $type: \"color\",\n * path: [\"color\", \"brand\", \"primary\"],\n * name: \"color.brand.primary\",\n * originalValue: \"{color.red.500}\" // Before alias resolution\n * }\n * ```\n */\nexport type ResolvedToken = Token & {\n /** Hierarchical path segments (e.g., ['color', 'brand', 'primary']) */\n path: string[]\n\n /** Fully qualified token name (e.g., 'color.brand.primary') */\n name: string\n\n /**\n * The raw value before any alias or reference resolution.\n *\n * For alias tokens this contains the alias reference string\n * (e.g., `\"{color.primary}\"`) or a composite value with embedded\n * alias references. For non-alias tokens this equals `$value`.\n *\n * Use the built-in `isAlias()` / `isBase()` filters or inspect\n * this value with `getPureAliasReferenceName()` to determine\n * whether the token was originally an alias.\n */\n originalValue: TokenValue\n}\n\n/**\n * Collection of resolved tokens indexed by name\n *\n * Maps token names to their resolved definitions. This is the primary\n * format used throughout Dispersa after token resolution.\n *\n * @example\n * ```typescript\n * {\n * \"color.brand.primary\": {\n * $value: \"#ff0000\",\n * $type: \"color\",\n * path: [\"color\", \"brand\", \"primary\"],\n * name: \"color.brand.primary\",\n * originalValue: \"#ff0000\"\n * }\n * }\n * ```\n */\nexport type ResolvedTokens = Record<string, ResolvedToken>\n\n/**\n * Internal resolved token with metadata used by the pipeline and bundlers\n *\n * These fields are not part of the DTCG spec and should be stripped before\n * returning tokens to public callers or rendering output.\n */\nexport type InternalResolvedToken = ResolvedToken & {\n /** Internal: Whether this token was originally an alias (not part of DTCG spec) */\n _isAlias?: boolean\n /** Internal: Source modifier tag for bundle outputs (not part of DTCG spec) */\n _sourceModifier?: string\n /** Internal: Source set name for bundle outputs (not part of DTCG spec) */\n _sourceSet?: string\n}\n\n/**\n * Internal collection of resolved tokens (with internal metadata)\n */\nexport type InternalResolvedTokens = Record<string, InternalResolvedToken>\n","/**\n * @fileoverview Color format conversion utilities for DTCG 2025.10\n * Uses culori for accurate color science and conversions\n */\n\nimport type { ColorComponent, ColorSpace, ColorValueObject } from '@shared/token-types'\nimport {\n formatHex,\n formatHex8,\n type Color as CuloriColor,\n type Rgb,\n type Lrgb,\n type Hsl,\n type Hwb,\n type Lab,\n type Lch,\n type Oklab,\n type Oklch,\n type P3,\n type A98,\n type Prophoto,\n type Rec2020,\n type Xyz65,\n type Xyz50,\n} from 'culori'\n\n/**\n * Check if a color value is in DTCG object format\n */\nexport function isColorObject(value: unknown): value is ColorValueObject {\n return (\n typeof value === 'object' && value !== null && 'colorSpace' in value && 'components' in value\n )\n}\n\n/**\n * Convert a color component value to culori format\n * The \"none\" keyword becomes undefined (culori's representation of missing channels)\n */\nfunction componentToCulori(component: ColorComponent): number | undefined {\n return component === 'none' ? undefined : component\n}\n\n/**\n * Convert DTCG color object to culori color object\n * Handles all 14 DTCG color spaces and the \"none\" keyword\n */\nexport function dtcgObjectToCulori(color: ColorValueObject): CuloriColor {\n const [c1, c2, c3] = color.components.map(componentToCulori)\n const alpha = color.alpha !== undefined ? componentToCulori(color.alpha) : undefined\n\n // Normalize color space (case-insensitive, handle aliases)\n const colorSpace = color.colorSpace.toLowerCase() as Lowercase<ColorSpace>\n\n // Map DTCG color spaces to culori color objects with proper property names\n switch (colorSpace) {\n // RGB-based color spaces (components are R, G, B in 0-1 range)\n case 'srgb':\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n\n case 'srgb-linear':\n return { mode: 'lrgb', r: c1, g: c2, b: c3, alpha } as Lrgb\n\n case 'display-p3':\n return { mode: 'p3', r: c1, g: c2, b: c3, alpha } as P3\n\n case 'a98-rgb':\n return { mode: 'a98', r: c1, g: c2, b: c3, alpha } as A98\n\n case 'prophoto-rgb':\n return { mode: 'prophoto', r: c1, g: c2, b: c3, alpha } as Prophoto\n\n case 'rec2020':\n return { mode: 'rec2020', r: c1, g: c2, b: c3, alpha } as Rec2020\n\n // Cylindrical color spaces (Hue, Saturation/Whiteness, Lightness/Blackness)\n case 'hsl':\n return { mode: 'hsl', h: c1, s: c2, l: c3, alpha } as Hsl\n\n case 'hwb':\n return { mode: 'hwb', h: c1, w: c2, b: c3, alpha } as Hwb\n\n // Lab color spaces (Lightness, a/b or Chroma/Hue)\n case 'lab':\n return { mode: 'lab', l: c1, a: c2, b: c3, alpha } as Lab\n\n case 'lch':\n return { mode: 'lch', l: c1, c: c2, h: c3, alpha } as Lch\n\n case 'oklab':\n return { mode: 'oklab', l: c1, a: c2, b: c3, alpha } as Oklab\n\n case 'oklch':\n return { mode: 'oklch', l: c1, c: c2, h: c3, alpha } as Oklch\n\n // XYZ color spaces\n case 'xyz-d65':\n return { mode: 'xyz65', x: c1, y: c2, z: c3, alpha } as Xyz65\n\n case 'xyz-d50':\n return { mode: 'xyz50', x: c1, y: c2, z: c3, alpha } as Xyz50\n\n // Fallback to sRGB if color space is not recognized\n default:\n return { mode: 'rgb', r: c1, g: c2, b: c3, alpha } as Rgb\n }\n}\n\n/**\n * Convert DTCG color object to hex string\n */\nexport function colorObjectToHex(color: ColorValueObject): string {\n const culoriColor = dtcgObjectToCulori(color)\n const alpha = color.alpha ?? 1\n\n if (alpha < 1) {\n return formatHex8(culoriColor)\n }\n\n return formatHex(culoriColor)\n}\n","/**\n * @fileoverview Dimension format conversion utilities for DTCG 2025.10\n * Handles dimension object format { value: number, unit: string }\n */\n\nimport { DEFAULT_BASE_FONT_SIZE_PX } from '@shared/constants'\nimport type { DimensionValue } from '@shared/token-types'\n/**\n * Check if a value is in dimension object format\n */\nexport function isDimensionObject(value: unknown): value is DimensionValue {\n return typeof value === 'object' && value !== null && 'value' in value && 'unit' in value\n}\n\n/**\n * Convert DTCG dimension object to CSS string\n */\nexport function dimensionObjectToString(dimension: DimensionValue): string {\n return `${dimension.value}${dimension.unit}`\n}\n\n/**\n * Convert a DTCG dimension object between units (px, rem).\n *\n * Converts via px as an intermediate: rem -> px -> target.\n * Returns the original value unchanged for unsupported unit combinations.\n *\n * @param value - Source dimension object\n * @param toUnit - Target CSS unit\n * @param baseFontSize - Base font size in px used for rem conversions\n */\nexport function convertDimension(\n value: DimensionValue,\n toUnit: DimensionValue['unit'],\n baseFontSize = DEFAULT_BASE_FONT_SIZE_PX,\n): DimensionValue {\n const fromUnit = value.unit\n let numValue = value.value\n\n // Convert to px first (as intermediate)\n if (fromUnit === 'rem') {\n numValue = numValue * baseFontSize\n } else if (fromUnit !== 'px' && fromUnit !== toUnit) {\n // If not px, rem, or em, and not already target unit, return as-is\n return value\n }\n\n // Convert from px to target unit\n if (toUnit === 'rem') {\n numValue = numValue / baseFontSize\n } else if (toUnit !== 'px') {\n // Can't convert to other units, return original\n return value\n }\n\n return {\n value: numValue,\n unit: toUnit,\n }\n}\n","/**\n * @fileoverview Duration format conversion utilities for DTCG 2025.10\n * Handles duration object format { value: number, unit: 'ms' | 's' }\n */\n\nimport type { DurationValue } from '@shared/token-types'\n\n/**\n * Check if a value is in duration object format\n */\nexport function isDurationObject(value: unknown): value is DurationValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'value' in value &&\n 'unit' in value &&\n (value as { unit?: unknown }).unit !== undefined\n )\n}\n\n/**\n * Convert DTCG duration object to CSS string\n */\nexport function durationObjectToString(duration: DurationValue): string {\n return `${duration.value}${duration.unit}`\n}\n","/**\n * @fileoverview CSS renderer with theme selector support\n * Supports DTCG 2025.10 color and dimension object formats\n */\n\nimport { colorObjectToHex, isColorObject } from '@processing/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/transforms/built-in/dimension-converter'\nimport {\n durationObjectToString,\n isDurationObject,\n} from '@processing/transforms/built-in/duration-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getPureAliasReferenceName, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type {\n DimensionValue,\n DurationValue,\n ResolvedToken,\n ResolvedTokens,\n ShadowValueObject,\n} from '@shared/token-types'\nimport prettier from 'prettier'\n\nimport { buildSetLayerBlocks, bundleAsCss } from './presets/bundle'\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n filterTokensBySource,\n filterTokensFromSets,\n isBasePermutation,\n normalizeModifierInputs,\n resolveBaseFileName,\n resolveMediaQuery,\n resolveFileName,\n resolveSelector,\n stripInternalMetadata,\n} from '../utils'\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from '../metadata'\nimport type { CssRendererOptions, RenderContext, RenderOutput, Renderer } from '../types'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\ntype CssEntry = {\n name: string\n value: string\n}\n\ntype CompositeLeaf = {\n path: string[]\n value: unknown\n}\n\nexport class CssRenderer implements Renderer<CssRendererOptions> {\n async format(context: RenderContext, options?: CssRendererOptions): Promise<RenderOutput> {\n const opts: CssRendererOptions = {\n preset: options?.preset ?? 'bundle',\n selector: options?.selector,\n mediaQuery: options?.mediaQuery,\n minify: options?.minify ?? false,\n preserveReferences: options?.preserveReferences ?? false,\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n if (opts.preset === 'modifier') {\n return await this.formatModifier(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n private static readonly PRETTIER_PRINT_WIDTH = 80\n private static readonly PRETTIER_TAB_WIDTH = 2\n\n /**\n * Format tokens as CSS custom properties\n *\n * Converts resolved design tokens into CSS format with configurable selector,\n * media queries, and formatting options. Supports DTCG color and dimension objects.\n *\n * Note: This method expects selector and mediaQuery to be resolved strings.\n * Function-based selectors should be resolved before calling format().\n *\n * @param tokens - Resolved tokens to format\n * @param options - CSS formatting options (selector, media query, minify, etc.)\n * @returns Formatted CSS string with custom properties\n */\n private async formatTokens(\n tokens: ResolvedTokens,\n options?: ResolvedCssOptions,\n ): Promise<string> {\n const opts = {\n preset: 'bundle' as const,\n selector: ':root',\n mediaQuery: '',\n minify: false,\n preserveReferences: false,\n ...options,\n referenceTokens: options?.referenceTokens ?? tokens,\n }\n\n const sortedTokens = getSortedTokenEntries(tokens).map(([, token]) => token)\n const referenceTokens = opts.referenceTokens\n const lines: string[] = []\n\n this.buildCssBlock(lines, sortedTokens, opts.selector, tokens, referenceTokens, opts)\n\n const cssString = lines.join('')\n return opts.minify ? cssString : await this.formatWithPrettier(cssString)\n }\n\n private buildCssBlock(\n lines: string[],\n groupTokens: ResolvedToken[],\n selector: string,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n opts: Required<ResolvedCssOptions>,\n ): void {\n const indent = opts.minify ? '' : ' '\n const newline = opts.minify ? '' : '\\n'\n const space = opts.minify ? '' : ' '\n const hasMediaQuery = opts.mediaQuery != null && opts.mediaQuery !== ''\n const tokenIndent = hasMediaQuery ? indent + indent : indent\n\n if (hasMediaQuery) {\n lines.push(`@media ${opts.mediaQuery}${space}{${newline}`)\n lines.push(`${indent}${selector}${space}{${newline}`)\n } else {\n lines.push(`${selector}${space}{${newline}`)\n }\n\n for (const token of groupTokens) {\n this.pushTokenLines(\n lines,\n token,\n tokens,\n referenceTokens,\n opts.preserveReferences ?? false,\n tokenIndent,\n newline,\n space,\n )\n }\n\n if (hasMediaQuery) {\n lines.push(`${indent}}${newline}`)\n }\n lines.push(`}${newline}${newline}`)\n }\n\n private pushTokenLines(\n lines: string[],\n token: ResolvedToken,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n indent: string,\n newline: string,\n space: string,\n ): void {\n const entries = this.buildCssEntries(token, tokens, referenceTokens, preserveReferences)\n\n const deprecationComment = buildTokenDeprecationComment(token, 'css')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'css')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}${newline}`)\n }\n\n for (const entry of entries) {\n lines.push(`${indent}--${entry.name}:${space}${entry.value};${newline}`)\n }\n }\n\n private async formatWithPrettier(css: string): Promise<string> {\n try {\n return await prettier.format(css, {\n parser: 'css',\n printWidth: CssRenderer.PRETTIER_PRINT_WIDTH,\n tabWidth: CssRenderer.PRETTIER_TAB_WIDTH,\n useTabs: false,\n })\n } catch {\n // Prettier may fail on edge-case CSS; fall back to raw string\n return css\n }\n }\n\n private buildCssEntries(\n token: ResolvedToken,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n ): CssEntry[] {\n if (preserveReferences) {\n const refName = getPureAliasReferenceName(token.originalValue)\n if (refName !== undefined) {\n return [\n {\n name: token.name,\n value: this.buildCssVarReference(refName, referenceTokens, tokens),\n },\n ]\n }\n }\n\n if (!this.isCompositeToken(token)) {\n return [{ name: token.name, value: this.formatValue(token) }]\n }\n\n const leaves = this.collectCompositeLeaves(token.$value)\n if (leaves.length === 0) {\n return [{ name: token.name, value: this.formatLeafValue(token.$value) }]\n }\n\n const leafEntries = leaves.map((leaf) => ({\n name: this.buildCompositeName(token.name, leaf.path),\n value: this.formatLeafValue(\n this.resolveCompositeLeafValue(\n leaf,\n token.originalValue,\n tokens,\n referenceTokens,\n preserveReferences,\n ),\n ),\n }))\n\n const wholeValue = this.buildCompositeWholeValue(token, preserveReferences)\n if (!wholeValue) {\n return leafEntries\n }\n\n return [{ name: token.name, value: wholeValue }, ...leafEntries]\n }\n\n private isCompositeToken(token: ResolvedToken): boolean {\n const isCompositeType = [\n 'shadow',\n 'typography',\n 'border',\n 'strokeStyle',\n 'transition',\n 'gradient',\n ].includes(token.$type ?? '')\n if (!isCompositeType) {\n return false\n }\n\n const value = token.$value\n return (typeof value === 'object' && value !== null) || Array.isArray(value)\n }\n\n private buildCompositeWholeValue(\n token: ResolvedToken,\n preserveReferences: boolean,\n ): string | undefined {\n if (token.$type === 'shadow') {\n // Shadow always supports a whole-value (single or multi-layer)\n return preserveReferences ? this.buildShadowWholeValue(token) : this.formatValue(token)\n }\n if (token.$type === 'border') {\n // Border shorthand only works when style is a simple string (e.g. \"solid\").\n // Complex strokeStyle objects can't be represented as a CSS shorthand.\n if (!this.hasBorderShorthandStyle(token)) {\n return undefined\n }\n return preserveReferences ? this.buildBorderWholeValue(token) : this.formatValue(token)\n }\n if (token.$type === 'transition') {\n return preserveReferences ? this.buildTransitionWholeValue(token) : this.formatValue(token)\n }\n return undefined\n }\n\n private hasBorderShorthandStyle(token: ResolvedToken): boolean {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return false\n }\n return typeof (value as { style?: unknown }).style === 'string'\n }\n\n private buildShadowWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (Array.isArray(value)) {\n return value\n .map((shadow, index) => this.buildShadowLayerValue(token.name, shadow, [String(index)]))\n .join(', ')\n }\n if (typeof value === 'object' && value !== null) {\n return this.buildShadowLayerValue(token.name, value, [])\n }\n return undefined\n }\n\n private buildShadowLayerValue(baseName: string, shadow: unknown, prefix: string[]): string {\n if (typeof shadow !== 'object' || shadow === null) {\n return String(shadow)\n }\n const shadowObj = shadow as ShadowValueObject\n const parts: string[] = []\n\n if (shadowObj.inset === true) {\n parts.push('inset')\n }\n\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'offsetX']))\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'offsetY']))\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'blur']))\n\n if (shadowObj.spread != null) {\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'spread']))\n }\n\n parts.push(this.buildCompositeVar(baseName, [...prefix, 'color']))\n return parts.join(' ')\n }\n\n private buildBorderWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n const border = value as { style?: unknown }\n if (typeof border.style !== 'string') {\n return undefined\n }\n return [\n this.buildCompositeVar(token.name, ['width']),\n this.buildCompositeVar(token.name, ['style']),\n this.buildCompositeVar(token.name, ['color']),\n ].join(' ')\n }\n\n private buildTransitionWholeValue(token: ResolvedToken): string | undefined {\n const value = token.$value\n if (typeof value !== 'object' || value === null) {\n return undefined\n }\n return [\n this.buildCompositeVar(token.name, ['duration']),\n `cubic-bezier(${this.buildCompositeVar(token.name, ['timingFunction', '0'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '1'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '2'])}, ${this.buildCompositeVar(token.name, ['timingFunction', '3'])})`,\n this.buildCompositeVar(token.name, ['delay']),\n ].join(' ')\n }\n\n private buildCompositeVar(baseName: string, path: string[]): string {\n return `var(--${this.buildCompositeName(baseName, path)})`\n }\n\n private collectCompositeLeaves(value: unknown): CompositeLeaf[] {\n const leaves: CompositeLeaf[] = []\n this.collectLeafEntries(value, [], leaves)\n return leaves\n }\n\n private collectLeafEntries(value: unknown, path: string[], leaves: CompositeLeaf[]): void {\n if (this.isPrimitiveValue(value)) {\n leaves.push({ path, value })\n return\n }\n\n if (isColorObject(value) || isDimensionObject(value) || isDurationObject(value)) {\n leaves.push({ path, value })\n return\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n leaves.push({ path, value })\n return\n }\n value.forEach((item, index) => {\n this.collectLeafEntries(item, [...path, String(index)], leaves)\n })\n return\n }\n\n if (typeof value === 'object' && value !== null) {\n const entries = Object.entries(value)\n if (entries.length === 0) {\n leaves.push({ path, value })\n return\n }\n for (const [key, child] of entries) {\n this.collectLeafEntries(child, [...path, this.normalizePathSegment(key)], leaves)\n }\n return\n }\n\n leaves.push({ path, value })\n }\n\n private normalizePathSegment(segment: string): string {\n return segment.trim().replace(/\\s+/g, '-')\n }\n\n private buildCompositeName(base: string, path: string[]): string {\n if (path.length === 0) {\n return base\n }\n return `${base}-${path.join('-')}`\n }\n\n private formatLeafValue(value: unknown): string {\n if (isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (isDimensionObject(value)) {\n return dimensionObjectToString(value)\n }\n\n if (isDurationObject(value)) {\n return durationObjectToString(value)\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value)\n }\n\n if (Array.isArray(value)) {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'object' && value != null) {\n return JSON.stringify(value)\n }\n\n return String(value)\n }\n\n private resolveCompositeLeafValue(\n leaf: CompositeLeaf,\n originalValue: unknown,\n tokens: ResolvedTokens,\n referenceTokens: ResolvedTokens,\n preserveReferences: boolean,\n ): unknown {\n if (!preserveReferences) {\n return leaf.value\n }\n\n const originalLeafValue = this.getOriginalLeafValue(originalValue, leaf.path)\n const refName = getPureAliasReferenceName(originalLeafValue)\n if (refName === undefined) {\n return leaf.value\n }\n\n return this.buildCssVarReference(refName, referenceTokens, tokens)\n }\n\n private buildCssVarReference(\n refName: string,\n referenceTokens: ResolvedTokens,\n tokens: ResolvedTokens,\n ): string {\n const referencedToken = referenceTokens[refName] ?? tokens[refName]\n if (!referencedToken) {\n throw new ConfigurationError(\n `CSS reference \"{${refName}}\" could not be resolved. The referenced token is not present in the current output's token set. ` +\n `This usually means a filter (e.g. isAlias()) excluded the referenced token while preserveReferences is true. ` +\n `Either remove the filter, include the referenced token, or set preserveReferences to false.`,\n )\n }\n return `var(--${referencedToken.name})`\n }\n\n private getOriginalLeafValue(value: unknown, path: string[]): unknown {\n let current: unknown = value\n\n for (const segment of path) {\n if (Array.isArray(current)) {\n const index = Number(segment)\n if (!Number.isInteger(index)) {\n return undefined\n }\n current = current[index]\n continue\n }\n\n if (typeof current === 'object' && current !== null) {\n const entries = Object.entries(current)\n const matched = entries.find(([key]) => this.normalizePathSegment(key) === segment)\n if (!matched) {\n return undefined\n }\n current = matched[1]\n continue\n }\n\n return undefined\n }\n\n return current\n }\n\n private isPrimitiveValue(value: unknown): boolean {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n }\n\n /**\n * Format token value for CSS\n * Handles DTCG 2025.10 object formats for colors and dimensions\n */\n private formatValue(token: ResolvedToken): string {\n const value = token.$value\n\n const typed = this.formatTypedValue(token.$type, value)\n if (typed !== undefined) {\n return typed\n }\n\n return this.formatPrimitiveOrStructured(value, token.$type)\n }\n\n private formatTypedValue(type: string | undefined, value: unknown): string | undefined {\n if (type === 'color' && isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (type === 'dimension') {\n // Legacy fallback: string values from incomplete alias resolution\n return typeof value === 'string' ? value : dimensionObjectToString(value as DimensionValue)\n }\n\n if (type === 'duration') {\n if (isDurationObject(value)) {\n return durationObjectToString(value)\n }\n if (typeof value === 'string') {\n return value\n }\n }\n\n return undefined\n }\n\n private formatPrimitiveOrStructured(value: unknown, tokenType?: string): string {\n if (typeof value === 'string') {\n return value\n }\n if (typeof value === 'number') {\n return String(value)\n }\n if (Array.isArray(value)) {\n return this.formatArrayValue(value, tokenType)\n }\n if (typeof value === 'object' && value != null) {\n return this.formatCompositeValue(value as Record<string, unknown>, tokenType)\n }\n return String(value)\n }\n\n private formatArrayValue(value: unknown[], tokenType?: string): string {\n if (tokenType === 'shadow' && value.length > 0 && typeof value[0] === 'object') {\n return value\n .map((shadowObj) => this.formatShadow(shadowObj as unknown as ShadowValueObject))\n .join(', ')\n }\n // For arrays like font families\n return value.map((v) => (typeof v === 'string' && v.includes(' ') ? `\"${v}\"` : v)).join(', ')\n }\n\n /**\n * Format composite token values\n */\n private formatCompositeValue(value: Record<string, unknown>, tokenType?: string): string {\n if (tokenType === 'shadow') {\n return this.formatShadow(value as unknown as ShadowValueObject)\n }\n\n if (tokenType === 'border') {\n return this.formatBorder(value)\n }\n\n if (tokenType === 'transition') {\n return this.formatTransition(value)\n }\n\n // Default: JSON stringify (for debugging or unsupported types)\n return JSON.stringify(value)\n }\n\n /**\n * Format a single shadow object to CSS box-shadow syntax\n */\n private formatShadow(shadow: ShadowValueObject): string {\n const parts: string[] = []\n if (shadow.inset === true) {\n parts.push('inset')\n }\n\n // Enforce DTCG 2025.10 compliance: all dimension values must be objects\n\n parts.push(dimensionObjectToString(shadow.offsetX))\n parts.push(dimensionObjectToString(shadow.offsetY))\n parts.push(dimensionObjectToString(shadow.blur))\n\n if (shadow.spread != null) {\n parts.push(dimensionObjectToString(shadow.spread))\n }\n\n // Handle color objects (DTCG format)\n if (isColorObject(shadow.color)) {\n parts.push(colorObjectToHex(shadow.color))\n } else {\n parts.push(String(shadow.color))\n }\n\n return parts.join(' ')\n }\n\n /**\n * Format a border object to CSS border shorthand syntax\n */\n private formatBorder(value: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (isDimensionObject(value.width)) {\n parts.push(dimensionObjectToString(value.width as DimensionValue))\n } else if (value.width != null) {\n parts.push(String(value.width))\n }\n\n if (typeof value.style === 'string') {\n parts.push(value.style)\n }\n\n if (isColorObject(value.color)) {\n parts.push(colorObjectToHex(value.color))\n } else if (value.color != null) {\n parts.push(String(value.color))\n }\n\n return parts.join(' ')\n }\n\n /**\n * Format a transition object to CSS transition shorthand syntax\n */\n private formatTransition(value: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (isDurationObject(value.duration)) {\n parts.push(durationObjectToString(value.duration as DurationValue))\n } else if (value.duration != null) {\n parts.push(String(value.duration))\n }\n\n if (Array.isArray(value.timingFunction) && value.timingFunction.length === 4) {\n parts.push(`cubic-bezier(${value.timingFunction.join(', ')})`)\n }\n\n if (isDurationObject(value.delay)) {\n parts.push(durationObjectToString(value.delay as DurationValue))\n } else if (value.delay != null) {\n parts.push(String(value.delay))\n }\n\n return parts.join(' ')\n }\n\n private async formatBundle(context: RenderContext, options: CssRendererOptions): Promise<string> {\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens,\n modifierInputs,\n isBase: isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsCss(bundleData, context.resolver, options, async (tokens, resolved) => {\n return await this.formatTokens(tokens, {\n ...resolved,\n preserveReferences: options.preserveReferences ?? false,\n })\n })\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone CSS',\n )\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const { fileName, content } = await this.buildStandaloneFile(\n tokens,\n modifierInputs,\n context,\n options,\n )\n files[fileName] = content\n }\n\n return { kind: 'outputTree', files }\n }\n\n private async buildStandaloneFile(\n tokens: ResolvedTokens,\n modifierInputs: Record<string, string>,\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string }> {\n const isBase = isBasePermutation(modifierInputs, context.meta.defaults)\n const { modifierName, modifierContext } = this.resolveModifierContext(\n modifierInputs,\n context,\n isBase,\n )\n\n const selector = resolveSelector(\n options.selector,\n modifierName,\n modifierContext,\n isBase,\n modifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifierName,\n modifierContext,\n isBase,\n modifierInputs,\n )\n\n const content = await this.formatTokens(tokens, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens: tokens,\n })\n\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return { fileName, content }\n }\n\n private async formatModifier(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(context.buildPath, context.output.file, context.output.name, 'modifier CSS')\n if (!context.resolver.modifiers) {\n throw new ConfigurationError('Modifier preset requires modifiers to be defined in resolver')\n }\n\n const files: Record<string, string> = {}\n\n const baseResult = await this.buildModifierBaseFile(context, options)\n if (baseResult) {\n files[baseResult.fileName] = baseResult.content\n }\n\n for (const [modifierName, modifierDef] of Object.entries(context.resolver.modifiers)) {\n for (const contextValue of Object.keys(modifierDef.contexts)) {\n const result = await this.buildModifierContextFile(\n modifierName,\n contextValue,\n context,\n options,\n )\n if (result) {\n files[result.fileName] = result.content\n }\n }\n }\n\n return { kind: 'outputTree', files }\n }\n\n private async buildModifierBaseFile(\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string } | undefined> {\n const basePermutation = context.permutations.find(({ modifierInputs }) =>\n isBasePermutation(modifierInputs, context.meta.defaults),\n )\n if (!basePermutation) {\n return undefined\n }\n\n const setTokens = filterTokensFromSets(basePermutation.tokens)\n if (Object.keys(setTokens).length === 0) {\n return undefined\n }\n\n const setBlocks = buildSetLayerBlocks(setTokens, context.resolver)\n if (setBlocks.length === 0) {\n return undefined\n }\n\n const { selector, mediaQuery } = this.resolveBaseModifierContext(context, options)\n const content = await this.formatSetBlocksCss(\n setBlocks,\n basePermutation.tokens,\n selector,\n mediaQuery,\n options,\n )\n\n const fileName = context.output.file\n ? resolveBaseFileName(context.output.file, context.meta.defaults)\n : `${context.output.name}-base.css`\n\n return { fileName, content }\n }\n\n private resolveBaseModifierContext(\n context: RenderContext,\n options: CssRendererOptions,\n ): { selector: string; mediaQuery: string } {\n const modifiers = context.resolver.modifiers!\n const firstModifierName = Object.keys(modifiers)[0] ?? ''\n const firstModifierContext = context.meta.defaults[firstModifierName] ?? ''\n const baseModifierInputs = { ...context.meta.defaults }\n\n return {\n selector: resolveSelector(\n options.selector,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n ),\n mediaQuery: resolveMediaQuery(\n options.mediaQuery,\n firstModifierName,\n firstModifierContext,\n true,\n baseModifierInputs,\n ),\n }\n }\n\n private async formatSetBlocksCss(\n setBlocks: ReturnType<typeof buildSetLayerBlocks>,\n referenceTokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n options: CssRendererOptions,\n ): Promise<string> {\n const cssBlocks: string[] = []\n for (const block of setBlocks) {\n const cleanTokens = stripInternalMetadata(block.tokens)\n const css = await this.formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens,\n })\n const header = block.description\n ? `/* ${block.key} */\\n/* ${block.description} */`\n : `/* ${block.key} */`\n cssBlocks.push(`${header}\\n${css}`)\n }\n return cssBlocks.join('\\n')\n }\n\n private collectTokensForModifierContext(\n modifierName: string,\n contextValue: string,\n permutations: RenderContext['permutations'],\n ): { tokensFromSource: ResolvedTokens; referenceTokens: ResolvedTokens } {\n const expectedSource = `${modifierName}-${contextValue}`\n let tokensFromSource: ResolvedTokens = {}\n let referenceTokens: ResolvedTokens = {}\n\n for (const { tokens, modifierInputs } of permutations) {\n if (modifierInputs[modifierName] !== contextValue) {\n continue\n }\n tokensFromSource = { ...tokensFromSource, ...filterTokensBySource(tokens, expectedSource) }\n referenceTokens = { ...referenceTokens, ...tokens }\n }\n\n return { tokensFromSource, referenceTokens }\n }\n\n private async buildModifierContextFile(\n modifierName: string,\n contextValue: string,\n context: RenderContext,\n options: CssRendererOptions,\n ): Promise<{ fileName: string; content: string } | undefined> {\n const { tokensFromSource, referenceTokens } = this.collectTokensForModifierContext(\n modifierName,\n contextValue,\n context.permutations,\n )\n\n if (Object.keys(tokensFromSource).length === 0) {\n return undefined\n }\n\n const defaults = context.meta.defaults\n const isBase = contextValue === defaults[modifierName]\n const modifierInputs = { ...defaults, [modifierName]: contextValue }\n\n const selector = resolveSelector(\n options.selector,\n modifierName,\n contextValue,\n isBase,\n modifierInputs,\n )\n const mediaQuery = resolveMediaQuery(\n options.mediaQuery,\n modifierName,\n contextValue,\n isBase,\n modifierInputs,\n )\n\n const content = await this.formatTokens(tokensFromSource, {\n selector,\n mediaQuery,\n minify: options.minify ?? false,\n preserveReferences: options.preserveReferences ?? false,\n referenceTokens,\n })\n\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return { fileName, content }\n }\n\n private resolveModifierContext(\n modifierInputs: Record<string, string>,\n context: RenderContext,\n isBase: boolean,\n ): { modifierName: string; modifierContext: string } {\n if (!context.resolver.modifiers) {\n return { modifierName: '', modifierContext: '' }\n }\n\n const normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(context.meta.defaults)\n\n if (isBase) {\n const firstModifier = Object.keys(context.resolver.modifiers)[0] ?? ''\n return {\n modifierName: firstModifier,\n modifierContext: normalizedInputs[firstModifier] ?? '',\n }\n }\n\n for (const [name, value] of Object.entries(normalizedInputs)) {\n if (value !== normalizedDefaults[name]) {\n return { modifierName: name, modifierContext: value }\n }\n }\n\n return { modifierName: '', modifierContext: '' }\n }\n}\n\n/**\n * CSS renderer factory function.\n *\n * Options are provided via OutputConfig.options.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'css',\n * renderer: cssRenderer(),\n * options: {\n * preset: 'bundle',\n * selector: ':root',\n * mediaQuery: (modifierName, context) => {\n * if (modifierName === 'breakpoint' && context === 'mobile') {\n * return '(max-width: 768px)'\n * }\n * return ''\n * }\n * },\n * file: 'tokens.css'\n * }]\n * ```\n */\nexport function cssRenderer(): Renderer<CssRendererOptions> {\n const rendererInstance = new CssRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as CssRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview CSS bundler for multi-theme output\n */\n\nimport type { CssRendererOptions } from '../../types'\nimport type { ResolverDocument } from '@resolution/types'\nimport { BasePermutationError, ConfigurationError } from '@shared/errors/index'\nimport type { ResolvedToken, ResolvedTokens } from '@shared/token-types'\n\nimport type { BundleDataItem } from './types'\nimport {\n stripInternalMetadata,\n resolveSelector,\n resolveMediaQuery,\n countModifierDifferences,\n getExpectedSource,\n filterTokensBySource,\n parseModifierSource,\n normalizeModifierInputs,\n} from '../../utils'\n\nconst REF_PREFIX_SETS = '#/sets/'\nconst REF_PREFIX_MODIFIERS = '#/modifiers/'\n\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\nconst getSourceSet = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n return '_sourceSet' in token && typeof token._sourceSet === 'string'\n ? token._sourceSet\n : undefined\n}\n\nconst getSourceModifier = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n return '_sourceModifier' in token && typeof token._sourceModifier === 'string'\n ? token._sourceModifier\n : undefined\n}\n\n/**\n * Bundle tokens as CSS with descriptive comments\n *\n * CSS-specific strategy: Uses cascade model with minimal overrides\n * - Base permutation gets all tokens in :root\n * - Single-dimension modifiers get only their overrides in [data-*] selectors\n * - Multi-dimension permutations are skipped (would create duplicate selectors)\n */\nexport async function bundleAsCss(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n options?: CssRendererOptions,\n formatTokens?: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string> {\n const baseItem = bundleData.find((item) => item.isBase)\n if (!baseItem) {\n throw new BasePermutationError('Base permutation not found in bundle data')\n }\n if (!formatTokens) {\n throw new ConfigurationError('CSS formatter was not provided')\n }\n\n const orderedBundleData = orderBundleData(bundleData, resolver, baseItem)\n const cssBlocks: string[] = []\n\n for (const item of orderedBundleData) {\n if (item.isBase) {\n const blocks = await formatBasePermutation(item, resolver, options, formatTokens)\n cssBlocks.push(...blocks)\n continue\n }\n\n const block = await formatModifierPermutation(item, baseItem, options, formatTokens)\n if (block) {\n cssBlocks.push(block)\n }\n }\n\n return cssBlocks.join('\\n\\n')\n}\n\nasync function formatBasePermutation(\n { tokens, modifierInputs }: BundleDataItem,\n resolver: ResolverDocument,\n options: CssRendererOptions | undefined,\n formatTokens: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string[]> {\n const firstModifierName = resolver.modifiers ? Object.keys(resolver.modifiers)[0] : ''\n const modifier = firstModifierName ?? ''\n const context = modifierInputs[modifier] ?? ''\n\n const selector = resolveSelector(options?.selector, modifier, context, true, modifierInputs)\n const mediaQuery = resolveMediaQuery(options?.mediaQuery, modifier, context, true, modifierInputs)\n const referenceTokens = stripInternalMetadata(tokens)\n const defaultBlocks = buildDefaultLayerBlocks(tokens, modifierInputs, resolver)\n\n const cssBlocks: string[] = []\n for (const block of defaultBlocks) {\n const cleanTokens = stripInternalMetadata(block.tokens)\n const css = await formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options?.minify,\n referenceTokens,\n })\n const header = block.description\n ? `/* ${block.key} */\\n/* ${block.description} */`\n : `/* ${block.key} */`\n cssBlocks.push(`${header}\\n${css}`)\n }\n\n return cssBlocks\n}\n\nasync function formatModifierPermutation(\n { tokens, modifierInputs }: BundleDataItem,\n baseItem: BundleDataItem,\n options: CssRendererOptions | undefined,\n formatTokens: (tokens: ResolvedTokens, options: ResolvedCssOptions) => Promise<string>,\n): Promise<string | undefined> {\n // Skip permutations where multiple modifiers differ from base\n const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Non-base: filter to only tokens from this modifier's source\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n let tokensToInclude = filterTokensBySource(tokens, expectedSource)\n const hasSourceMetadata = Object.values(tokens).some(\n (token) => token != null && getSourceModifier(token) !== undefined,\n )\n\n // If tokens have no source metadata, fall back to full token set\n if (Object.keys(tokensToInclude).length === 0 && !hasSourceMetadata) {\n tokensToInclude = tokens\n }\n\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n const referenceTokens = stripInternalMetadata(tokens)\n const selector = resolveSelector(options?.selector, modifier, context, false, modifierInputs)\n const mediaQuery = resolveMediaQuery(\n options?.mediaQuery,\n modifier,\n context,\n false,\n modifierInputs,\n )\n\n const css = await formatTokens(cleanTokens, {\n selector,\n mediaQuery,\n minify: options?.minify,\n referenceTokens,\n })\n return `/* Modifier: ${modifier}=${context} */\\n${css}`\n}\n\nexport type SetLayerBlock = {\n key: string\n description?: string\n tokens: BundleDataItem['tokens']\n}\n\nfunction addLayerBlock(\n blocks: SetLayerBlock[],\n included: Set<string>,\n key: string,\n blockTokens: BundleDataItem['tokens'],\n description?: string,\n): void {\n if (Object.keys(blockTokens).length === 0) {\n return\n }\n for (const k of Object.keys(blockTokens)) {\n included.add(k)\n }\n blocks.push({ key, description, tokens: blockTokens })\n}\n\n/** Collect tokens belonging to a specific set, excluding already-included tokens */\nfunction collectSetTokens(\n tokens: BundleDataItem['tokens'],\n setName: string,\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name) && getSourceSet(token) === setName) {\n result[name] = token\n }\n }\n return result\n}\n\n/** Collect tokens belonging to a specific modifier source, excluding already-included tokens */\nfunction collectModifierTokens(\n tokens: BundleDataItem['tokens'],\n expectedSource: string,\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name) && (getSourceModifier(token) ?? '').toLowerCase() === expectedSource) {\n result[name] = token\n }\n }\n return result\n}\n\n/** Collect all tokens not yet included in any block */\nfunction collectRemainder(\n tokens: BundleDataItem['tokens'],\n included: Set<string>,\n): BundleDataItem['tokens'] {\n const result: BundleDataItem['tokens'] = {}\n for (const [name, token] of Object.entries(tokens)) {\n if (!included.has(name)) {\n result[name] = token\n }\n }\n return result\n}\n\n/**\n * Group tokens by their originating set, following the resolver's resolution order.\n *\n * Produces one block per set (e.g. \"Set: colors\", \"Set: typography\") plus\n * an \"Unattributed\" block for any tokens that don't belong to a known set.\n * This is used by both the bundle preset (base permutation) and the modifier\n * preset (base file) to produce structured CSS output with set comments.\n */\nexport function buildSetLayerBlocks(\n tokens: BundleDataItem['tokens'],\n resolver: ResolverDocument,\n): SetLayerBlock[] {\n const blocks: SetLayerBlock[] = []\n const included = new Set<string>()\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string' || !ref.startsWith(REF_PREFIX_SETS)) {\n continue\n }\n\n const setName = ref.slice(REF_PREFIX_SETS.length)\n addLayerBlock(\n blocks,\n included,\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n }\n\n addLayerBlock(blocks, included, 'Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\nfunction buildDefaultLayerBlocks(\n tokens: BundleDataItem['tokens'],\n baseModifierInputs: Record<string, string>,\n resolver: ResolverDocument,\n): SetLayerBlock[] {\n const blocks: SetLayerBlock[] = []\n const included = new Set<string>()\n const baseInputs = normalizeModifierInputs(baseModifierInputs)\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n processResolutionOrderRef(ref, tokens, blocks, included, baseInputs, resolver)\n }\n\n addLayerBlock(blocks, included, 'Unattributed', collectRemainder(tokens, included))\n return blocks\n}\n\nfunction processResolutionOrderRef(\n ref: string,\n tokens: BundleDataItem['tokens'],\n blocks: SetLayerBlock[],\n included: Set<string>,\n baseInputs: Record<string, string>,\n resolver: ResolverDocument,\n): void {\n if (ref.startsWith(REF_PREFIX_SETS)) {\n const setName = ref.slice(REF_PREFIX_SETS.length)\n addLayerBlock(\n blocks,\n included,\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n return\n }\n\n if (!ref.startsWith(REF_PREFIX_MODIFIERS)) {\n return\n }\n\n const modifierName = ref.slice(REF_PREFIX_MODIFIERS.length)\n const modifier = resolver.modifiers?.[modifierName]\n const selectedContext = baseInputs[modifierName.toLowerCase()]\n if (!modifier || !selectedContext) {\n return\n }\n\n const expectedSource = `${modifierName}-${selectedContext}`.toLowerCase()\n addLayerBlock(\n blocks,\n included,\n `Modifier: ${modifierName}=${selectedContext} (default)`,\n collectModifierTokens(tokens, expectedSource, included),\n modifier.description,\n )\n}\n\n/** Find a permutation that differs from the base in exactly one modifier dimension */\nfunction findSingleDiffPermutation(\n bundleData: BundleDataItem[],\n modifierName: string,\n context: string,\n baseInputs: Record<string, string>,\n): BundleDataItem | undefined {\n const normalizedModifier = modifierName.toLowerCase()\n const normalizedContext = context.toLowerCase()\n\n return bundleData.find((item) => {\n if (item.isBase) {\n return false\n }\n const inputs = normalizeModifierInputs(item.modifierInputs)\n if (inputs[normalizedModifier] !== normalizedContext) {\n return false\n }\n return Object.entries(baseInputs).every(([k, v]) => k === normalizedModifier || inputs[k] === v)\n })\n}\n\nfunction pushUniqueBundleItem(\n ordered: BundleDataItem[],\n includedKeys: Set<string>,\n item: BundleDataItem | undefined,\n): void {\n if (!item) {\n return\n }\n const key = stableInputsKey(item.modifierInputs)\n if (includedKeys.has(key)) {\n return\n }\n includedKeys.add(key)\n ordered.push(item)\n}\n\nfunction appendModifierPermutations(\n bundleData: BundleDataItem[],\n modifiers: NonNullable<ResolverDocument['modifiers']>,\n orderedNames: string[],\n baseInputs: Record<string, string>,\n ordered: BundleDataItem[],\n includedKeys: Set<string>,\n): void {\n for (const modifierName of orderedNames) {\n const modifierDef = modifiers[modifierName]\n if (!modifierDef) {\n continue\n }\n\n const defaultValue = baseInputs[modifierName.toLowerCase()] ?? ''\n for (const ctx of Object.keys(modifierDef.contexts)) {\n if (defaultValue === ctx.toLowerCase()) {\n continue\n }\n pushUniqueBundleItem(\n ordered,\n includedKeys,\n findSingleDiffPermutation(bundleData, modifierName, ctx, baseInputs),\n )\n }\n }\n}\n\nfunction orderBundleData(\n bundleData: BundleDataItem[],\n resolver: ResolverDocument,\n baseItem: BundleDataItem,\n): BundleDataItem[] {\n const modifiers = resolver.modifiers\n if (!modifiers) {\n return bundleData\n }\n\n const baseInputs = normalizeModifierInputs(baseItem.modifierInputs)\n const orderedModifierNames = getOrderedModifierNames(resolver)\n if (orderedModifierNames.length === 0) {\n return bundleData\n }\n\n const firstModifierDef = modifiers[orderedModifierNames[0] ?? '']\n if (!firstModifierDef) {\n return bundleData\n }\n\n const includedKeys = new Set<string>()\n const ordered: BundleDataItem[] = []\n\n pushUniqueBundleItem(ordered, includedKeys, baseItem)\n appendModifierPermutations(\n bundleData,\n modifiers,\n orderedModifierNames,\n baseInputs,\n ordered,\n includedKeys,\n )\n\n return ordered.length > 0 ? ordered : bundleData\n}\n\nfunction getOrderedModifierNames(resolver: ResolverDocument): string[] {\n const modifiers = resolver.modifiers ?? {}\n const seen = new Set<string>()\n const ordered: string[] = []\n\n for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n if (!ref.startsWith(REF_PREFIX_MODIFIERS)) {\n continue\n }\n const name = ref.slice(REF_PREFIX_MODIFIERS.length)\n if (seen.has(name)) {\n continue\n }\n if (!(name in modifiers)) {\n continue\n }\n ordered.push(name)\n seen.add(name)\n }\n\n for (const name of Object.keys(modifiers)) {\n if (seen.has(name)) {\n continue\n }\n ordered.push(name)\n seen.add(name)\n }\n\n return ordered\n}\n\nfunction stableInputsKey(modifierInputs: Record<string, string>): string {\n const normalized = normalizeModifierInputs(modifierInputs)\n return Object.keys(normalized)\n .sort()\n .map((k) => `${k}=${normalized[k]}`)\n .join('|')\n}\n","/**\n * @fileoverview JavaScript module renderer using Prettier for formatting\n */\n\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from '../utils'\nimport { buildNestedTokenObject, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedToken, ResolvedTokens } from '@shared/token-types'\nimport prettier from 'prettier'\n\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from '../metadata'\nimport { outputTree } from '../output-tree'\nimport type { JsModuleRendererOptions, RenderContext, RenderOutput, Renderer } from '../types'\n\nexport class JsModuleRenderer implements Renderer<JsModuleRendererOptions> {\n async format(context: RenderContext, options?: JsModuleRendererOptions): Promise<RenderOutput> {\n const opts: Required<JsModuleRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n structure: options?.structure ?? 'nested',\n minify: options?.minify ?? false,\n moduleName: options?.moduleName ?? 'tokens',\n generateHelper: options?.generateHelper ?? false,\n }\n\n if (opts.preset === 'bundle') {\n const { bundleAsJsModule } = await import('./presets/bundle')\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalMetadata(tokens),\n modifierInputs,\n isBase: isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsJsModule(bundleData, context.resolver, opts, async (tokens) => {\n return await this.formatTokens(tokens, opts)\n })\n }\n\n assertFileRequired(context.buildPath, context.output.file, context.output.name, 'JS module')\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const cleanTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(cleanTokens, opts)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'js',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private async formatTokens(\n tokens: ResolvedTokens,\n options: Required<JsModuleRendererOptions>,\n ): Promise<string> {\n const lines: string[] = []\n lines.push(...this.formatAsObject(tokens, options))\n\n const code = lines.join('\\n')\n\n if (options.minify) {\n return code\n }\n\n return await prettier.format(code, {\n parser: 'babel',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n semi: false,\n singleQuote: true,\n trailingComma: 'es5',\n })\n }\n\n private formatAsObject(\n tokens: ResolvedTokens,\n options: Required<JsModuleRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const tokenMap = this.buildTokenMap(tokens)\n const varName = options.moduleName !== '' ? options.moduleName : 'tokens'\n\n if (options.structure === 'flat') {\n lines.push(`const ${varName} = {`)\n this.addFlatProperties(lines, tokens, 1)\n lines.push('}')\n } else {\n lines.push(`const ${varName} = {`)\n const tokenObj = this.tokensToPlainObject(tokens, 'nested')\n this.addNestedProperties(lines, tokenObj, tokenMap, 1)\n lines.push('}')\n }\n\n lines.push('')\n lines.push(`export default ${varName}`)\n\n return lines\n }\n\n private buildTokenMap(tokens: ResolvedTokens): Map<string, ResolvedToken> {\n const map = new Map<string, ResolvedToken>()\n for (const [name, token] of Object.entries(tokens)) {\n map.set(name, token)\n }\n return map\n }\n\n private addFlatProperties(lines: string[], tokens: ResolvedTokens, indent: number): void {\n const indentStr = ' '.repeat(indent)\n const sortedEntries = getSortedTokenEntries(tokens)\n\n for (let i = 0; i < sortedEntries.length; i++) {\n const [name, token] = sortedEntries[i]!\n const isLast = i === sortedEntries.length - 1\n\n this.pushTokenComments(lines, token, indentStr)\n\n lines.push(\n `${indentStr}${this.quoteKey(name)}: ${JSON.stringify(token.$value)}${isLast ? '' : ','}`,\n )\n }\n }\n\n private pushTokenComments(lines: string[], token: ResolvedToken, indent: string): void {\n const deprecationComment = buildTokenDeprecationComment(token, 'js')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'js')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}`)\n }\n }\n\n private tokensToPlainObject(\n tokens: ResolvedTokens,\n structure: 'flat' | 'nested',\n ): Record<string, unknown> {\n if (structure === 'nested') {\n return buildNestedTokenObject(tokens, (token) => token.$value)\n }\n\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = token.$value\n }\n return result\n }\n\n private addNestedProperties(\n lines: string[],\n obj: Record<string, unknown>,\n tokenMap: Map<string, ResolvedToken>,\n indent: number,\n ): void {\n const indentStr = ' '.repeat(indent)\n const entries = Object.entries(obj).sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n if (entry == null) {\n continue\n }\n const [key, value] = entry\n const isLast = i === entries.length - 1\n const isNestedObject = typeof value === 'object' && value !== null && !Array.isArray(value)\n\n if (!isNestedObject) {\n const token = tokenMap.get(key)\n if (token) {\n this.pushTokenComments(lines, token, indentStr)\n }\n\n lines.push(\n `${indentStr}${this.quoteKey(key)}: ${JSON.stringify(value)}${isLast ? '' : ','}`,\n )\n continue\n }\n\n lines.push(`${indentStr}${this.quoteKey(key)}: {`)\n this.addNestedProperties(lines, value as Record<string, unknown>, tokenMap, indent + 1)\n lines.push(`${indentStr}}${isLast ? '' : ','}`)\n }\n }\n\n private quoteKey(key: string): string {\n if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n return key\n }\n return `\"${key}\"`\n }\n}\n\nexport function jsRenderer(): Renderer<JsModuleRendererOptions> {\n const rendererInstance = new JsModuleRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as JsModuleRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview JSON renderer using Prettier for consistent formatting\n */\n\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from '../utils'\nimport { buildNestedTokenObject, getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { ResolvedToken, ResolvedTokens } from '@shared/token-types'\nimport prettier from 'prettier'\n\nimport { outputTree } from '../output-tree'\nimport type { JsonRendererOptions, RenderContext, RenderOutput, Renderer } from '../types'\n\nexport class JsonRenderer implements Renderer<JsonRendererOptions> {\n async format(context: RenderContext, options?: JsonRendererOptions): Promise<RenderOutput> {\n const opts: Required<JsonRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n structure: options?.structure ?? 'nested',\n minify: options?.minify ?? false,\n includeMetadata: options?.includeMetadata ?? false,\n }\n\n if (opts.preset === 'bundle') {\n const { bundleAsJson } = await import('./presets/bundle')\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalMetadata(tokens),\n modifierInputs,\n isBase: isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsJson(bundleData, context.resolver, async (tokens) => {\n return await this.formatTokens(tokens, opts)\n })\n }\n\n assertFileRequired(context.buildPath, context.output.file, context.output.name, 'JSON')\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(processedTokens, opts)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'json',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n private async formatTokens(\n tokens: ResolvedTokens,\n options: JsonRendererOptions,\n ): Promise<string> {\n const opts: Required<JsonRendererOptions> = {\n preset: options.preset ?? 'standalone',\n structure: options.structure ?? 'nested',\n minify: options.minify ?? false,\n includeMetadata: options.includeMetadata ?? false,\n }\n\n let output: unknown\n\n if (opts.structure === 'flat') {\n // Flat format: { \"token.name\": \"value\" } or { \"token.name\": { $value, $type, ... } }\n output = opts.includeMetadata ? this.flattenTokens(tokens) : this.flattenValues(tokens)\n } else {\n // Nested format: { \"token\": { \"name\": \"value\" } }\n output = opts.includeMetadata ? this.nestTokens(tokens) : this.nestValues(tokens)\n }\n\n const jsonString = JSON.stringify(output)\n\n // Use Prettier for consistent, high-quality formatting\n if (!opts.minify) {\n return await prettier.format(jsonString, {\n parser: 'json',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n })\n }\n\n return jsonString\n }\n\n /**\n * Flatten tokens to simple key-value pairs\n */\n private flattenValues(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = token.$value\n }\n return result\n }\n\n /**\n * Flatten tokens to metadata objects\n */\n private flattenTokens(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = this.serializeToken(token)\n }\n return result\n }\n\n private nestValues(tokens: ResolvedTokens): Record<string, unknown> {\n return buildNestedTokenObject(tokens, (token) => token.$value)\n }\n\n private nestTokens(tokens: ResolvedTokens): Record<string, unknown> {\n return buildNestedTokenObject(tokens, (token) => this.serializeToken(token))\n }\n\n private serializeToken(token: ResolvedToken): Record<string, unknown> {\n return {\n $value: token.$value,\n ...(typeof token.$type === 'string' && { $type: token.$type }),\n ...(token.$description != null &&\n token.$description !== '' && { $description: token.$description }),\n ...(token.$deprecated != null &&\n token.$deprecated !== false && { $deprecated: token.$deprecated }),\n ...(token.$extensions != null && { $extensions: token.$extensions }),\n }\n }\n}\n\n/**\n * JSON renderer factory function\n *\n * Creates a JSON renderer with the specified preset and options.\n *\n * @param preset - Output preset: 'bundle' or 'standalone'\n * @param options - JSON formatting options (structure, minify, includeMetadata)\n * @returns Renderer instance\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'json',\n * renderer: jsonRenderer(),\n * options: { preset: 'bundle', structure: 'nested', includeMetadata: true },\n * file: 'tokens.json'\n * }]\n * ```\n */\nexport function jsonRenderer(): Renderer<JsonRendererOptions> {\n const rendererInstance = new JsonRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as JsonRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Tailwind CSS v4 renderer using @theme directive\n * Generates CSS with @theme blocks for Tailwind v4+ design token integration\n */\n\nimport { colorObjectToHex, isColorObject } from '@processing/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@processing/transforms/built-in/dimension-converter'\nimport {\n durationObjectToString,\n isDurationObject,\n} from '@processing/transforms/built-in/duration-converter'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type { DimensionValue, ResolvedToken, ResolvedTokens } from '@shared/token-types'\nimport prettier from 'prettier'\n\nimport { bundleAsTailwind } from './presets/bundle'\nimport {\n assertFileRequired,\n buildInMemoryOutputKey,\n isBasePermutation,\n resolveFileName,\n stripInternalMetadata,\n} from '../utils'\nimport { buildTokenDeprecationComment, buildTokenDescriptionComment } from '../metadata'\nimport { outputTree } from '../output-tree'\nimport type {\n MediaQueryFunction,\n RenderContext,\n RenderOutput,\n Renderer,\n SelectorFunction,\n} from '../types'\n\n/**\n * Options for Tailwind CSS v4 renderer\n *\n * Controls how tokens are converted to Tailwind v4 @theme CSS variables.\n *\n * @example Bundle with dark mode overrides\n * ```typescript\n * tailwind({\n * name: 'tailwind',\n * file: 'theme.css',\n * preset: 'bundle',\n * selector: (modifier, context, isBase) => {\n * if (isBase) return ':root'\n * return `[data-${modifier}=\"${context}\"]`\n * },\n * })\n * ```\n */\nexport type TailwindRendererOptions = {\n preset?: 'bundle' | 'standalone'\n includeImport?: boolean\n namespace?: string\n minify?: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n}\n\n/**\n * Mapping from DTCG token types to Tailwind v4 CSS variable namespace prefixes\n */\nconst TAILWIND_NAMESPACE_MAP: Record<string, string> = {\n color: 'color',\n dimension: 'spacing',\n fontFamily: 'font',\n fontWeight: 'font-weight',\n duration: 'duration',\n shadow: 'shadow',\n number: 'number',\n cubicBezier: 'ease',\n}\n\n/**\n * Resolved Tailwind options with required base fields.\n * selector and mediaQuery remain optional (only used in bundle mode).\n * variantDeclarations is populated by the bundler from non-base permutations.\n */\ntype ResolvedTailwindOptions = {\n preset: 'bundle' | 'standalone'\n includeImport: boolean\n namespace: string\n minify: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n variantDeclarations: string[]\n}\n\nexport class TailwindRenderer implements Renderer<TailwindRendererOptions> {\n async format(context: RenderContext, options?: TailwindRendererOptions): Promise<RenderOutput> {\n const opts: ResolvedTailwindOptions = {\n preset: options?.preset ?? 'bundle',\n includeImport: options?.includeImport ?? true,\n namespace: options?.namespace ?? '',\n minify: options?.minify ?? false,\n selector: options?.selector,\n mediaQuery: options?.mediaQuery,\n variantDeclarations: [],\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n /**\n * Format tokens as Tailwind v4 @theme CSS variables\n */\n async formatTokens(tokens: ResolvedTokens, options: ResolvedTailwindOptions): Promise<string> {\n const lines: string[] = []\n const indent = options.minify ? '' : ' '\n const newline = options.minify ? '' : '\\n'\n const space = options.minify ? '' : ' '\n\n if (options.includeImport) {\n lines.push(`@import \"tailwindcss\";${newline}`)\n }\n\n // Emit @custom-variant declarations (auto-derived from non-base modifiers)\n if (options.variantDeclarations.length > 0) {\n if (options.includeImport) {\n lines.push(newline)\n }\n for (const declaration of options.variantDeclarations) {\n lines.push(`${declaration}${newline}`)\n }\n }\n\n if (options.includeImport || options.variantDeclarations.length > 0) {\n lines.push(newline)\n }\n\n const themeDirective = options.namespace ? `@theme namespace(${options.namespace})` : '@theme'\n\n lines.push(`${themeDirective}${space}{${newline}`)\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const varName = this.buildVariableName(token)\n const varValue = this.formatValue(token)\n\n const deprecationComment = buildTokenDeprecationComment(token, 'tailwind')\n if (deprecationComment) {\n lines.push(`${indent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'tailwind')\n if (descriptionComment) {\n lines.push(`${indent}${descriptionComment}${newline}`)\n }\n\n lines.push(`${indent}--${varName}:${space}${varValue};${newline}`)\n }\n\n lines.push(`}${newline}`)\n\n const cssString = lines.join('')\n return options.minify ? cssString : await this.formatWithPrettier(cssString)\n }\n\n /**\n * Format tokens as plain CSS custom property overrides inside a selector block.\n * Used for modifier overrides (e.g., dark mode) appended after the @theme block.\n */\n async formatOverrideBlock(\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ): Promise<string> {\n const indent = minify ? '' : ' '\n const newline = minify ? '' : '\\n'\n const space = minify ? '' : ' '\n const hasMediaQuery = mediaQuery !== ''\n const tokenIndent = hasMediaQuery ? indent + indent : indent\n\n const lines: string[] = []\n\n if (hasMediaQuery) {\n lines.push(`@media ${mediaQuery}${space}{${newline}`)\n lines.push(`${indent}${selector}${space}{${newline}`)\n } else {\n lines.push(`${selector}${space}{${newline}`)\n }\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const varName = this.buildVariableName(token)\n const varValue = this.formatValue(token)\n\n const deprecationComment = buildTokenDeprecationComment(token, 'tailwind')\n if (deprecationComment) {\n lines.push(`${tokenIndent}${deprecationComment}${newline}`)\n }\n\n const descriptionComment = buildTokenDescriptionComment(token, 'tailwind')\n if (descriptionComment) {\n lines.push(`${tokenIndent}${descriptionComment}${newline}`)\n }\n\n lines.push(`${tokenIndent}--${varName}:${space}${varValue};${newline}`)\n }\n\n if (hasMediaQuery) {\n lines.push(`${indent}}${newline}`)\n lines.push(`}${newline}`)\n } else {\n lines.push(`}${newline}`)\n }\n\n return lines.join('')\n }\n\n private buildVariableName(token: ResolvedToken): string {\n const prefix = TAILWIND_NAMESPACE_MAP[token.$type ?? '']\n if (!prefix) {\n return token.name\n }\n\n // If token name already starts with the prefix, don't double-prefix\n const nameLower = token.name.toLowerCase()\n const prefixLower = prefix.toLowerCase()\n if (nameLower.startsWith(`${prefixLower}-`) || nameLower.startsWith(`${prefixLower}.`)) {\n return token.name\n }\n\n return `${prefix}-${token.name}`\n }\n\n private formatValue(token: ResolvedToken): string {\n const value = token.$value\n\n if (token.$type === 'color' && isColorObject(value)) {\n return colorObjectToHex(value)\n }\n\n if (token.$type === 'dimension' && isDimensionObject(value)) {\n return dimensionObjectToString(value as DimensionValue)\n }\n\n if (token.$type === 'duration' && isDurationObject(value)) {\n return durationObjectToString(value)\n }\n\n if (token.$type === 'fontFamily') {\n if (Array.isArray(value)) {\n return value\n .map((v) => (typeof v === 'string' && v.includes(' ') ? `\"${v}\"` : v))\n .join(', ')\n }\n return typeof value === 'string' ? value : String(value)\n }\n\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `cubic-bezier(${value.join(', ')})`\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n return String(value)\n }\n\n private formatShadowValue(value: unknown): string {\n if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') {\n return value.map((s) => this.formatSingleShadow(s as Record<string, unknown>)).join(', ')\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>)\n }\n\n return String(value)\n }\n\n private formatSingleShadow(shadow: Record<string, unknown>): string {\n const parts: string[] = []\n\n if (shadow.inset === true) {\n parts.push('inset')\n }\n\n if (isDimensionObject(shadow.offsetX)) {\n parts.push(dimensionObjectToString(shadow.offsetX as DimensionValue))\n }\n if (isDimensionObject(shadow.offsetY)) {\n parts.push(dimensionObjectToString(shadow.offsetY as DimensionValue))\n }\n if (isDimensionObject(shadow.blur)) {\n parts.push(dimensionObjectToString(shadow.blur as DimensionValue))\n }\n if (shadow.spread != null && isDimensionObject(shadow.spread)) {\n parts.push(dimensionObjectToString(shadow.spread as DimensionValue))\n }\n if (isColorObject(shadow.color)) {\n parts.push(colorObjectToHex(shadow.color))\n } else if (shadow.color != null) {\n parts.push(String(shadow.color))\n }\n\n return parts.join(' ')\n }\n\n private async formatWithPrettier(css: string): Promise<string> {\n try {\n return await prettier.format(css, {\n parser: 'css',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n })\n } catch {\n return css\n }\n }\n\n private async formatBundle(\n context: RenderContext,\n options: ResolvedTailwindOptions,\n ): Promise<string> {\n const bundleData = context.permutations.map(({ tokens, modifierInputs }) => ({\n tokens,\n modifierInputs,\n isBase: isBasePermutation(modifierInputs, context.meta.defaults),\n }))\n\n return await bundleAsTailwind(\n bundleData,\n options,\n async (tokens, opts) => await this.formatTokens(tokens, opts),\n async (tokens, selector, mediaQuery, minify) =>\n await this.formatOverrideBlock(tokens, selector, mediaQuery, minify),\n )\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: ResolvedTailwindOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone Tailwind',\n )\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = await this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'css',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n}\n\n/**\n * Tailwind CSS v4 renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'tailwind',\n * renderer: tailwindRenderer(),\n * options: {\n * preset: 'bundle',\n * includeImport: true,\n * },\n * file: 'theme.css'\n * }]\n * ```\n */\nexport function tailwindRenderer(): Renderer<TailwindRendererOptions> {\n const rendererInstance = new TailwindRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as TailwindRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Tailwind CSS v4 bundler for multi-theme output\n *\n * Bundles multiple permutations into a single Tailwind @theme file.\n * The base permutation tokens are included in @theme to define the utility\n * vocabulary. Non-base permutations (e.g., dark mode) are appended as plain\n * CSS custom property overrides with configurable selectors/media queries.\n */\n\nimport type { TailwindRendererOptions } from '../renderer'\nimport type { MediaQueryFunction, SelectorFunction } from '../../types'\nimport { BasePermutationError } from '@shared/errors/index'\nimport type { ResolvedTokens } from '@shared/token-types'\n\nimport type { BundleDataItem } from './types'\nimport {\n countModifierDifferences,\n getExpectedSource,\n normalizeModifierInputs,\n parseModifierSource,\n resolveMediaQuery,\n resolveSelector,\n stripInternalMetadata,\n} from '../../utils'\n\ntype ResolvedTailwindOptions = {\n preset: 'bundle' | 'standalone'\n includeImport: boolean\n namespace: string\n minify: boolean\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n variantDeclarations: string[]\n}\n\n/**\n * Bundle tokens as a Tailwind v4 @theme CSS file with modifier overrides\n *\n * Strategy:\n * - Base permutation tokens go into @theme (defines the Tailwind utility vocabulary)\n * - Non-base permutations are appended as plain CSS custom property overrides\n * using configurable selectors/media queries, consistent with the CSS renderer\n */\nexport async function bundleAsTailwind(\n bundleData: BundleDataItem[],\n options: ResolvedTailwindOptions | TailwindRendererOptions,\n formatThemeTokens: (tokens: ResolvedTokens, options: ResolvedTailwindOptions) => Promise<string>,\n formatOverrideBlock: (\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ) => Promise<string>,\n): Promise<string> {\n const baseItem = bundleData.find((item) => item.isBase)\n if (!baseItem) {\n throw new BasePermutationError('Base permutation not found in bundle data')\n }\n\n const resolvedOpts = resolveOptions(options)\n const cssBlocks: string[] = []\n\n // Collect @custom-variant declarations from non-base permutations\n const variantDeclarations = collectVariantDeclarations(bundleData, baseItem, resolvedOpts)\n const themeOpts: ResolvedTailwindOptions = { ...resolvedOpts, variantDeclarations }\n\n // Base permutation: format as @theme block\n const baseTokens = stripInternalMetadata(baseItem.tokens)\n const themeBlock = await formatThemeTokens(baseTokens, themeOpts)\n cssBlocks.push(themeBlock)\n\n // Non-base permutations: format as plain CSS override blocks\n for (const item of bundleData) {\n if (item.isBase) {\n continue\n }\n\n const block = await formatModifierOverride(item, baseItem, resolvedOpts, formatOverrideBlock)\n if (block) {\n cssBlocks.push(block)\n }\n }\n\n return cssBlocks.join('\\n')\n}\n\nfunction resolveModifierSelectorAndMedia(\n options: ResolvedTailwindOptions,\n modifier: string,\n context: string,\n modifierInputs: Record<string, string>,\n): { selector: string; mediaQuery: string } {\n const normalized = normalizeModifierInputs(modifierInputs)\n return {\n selector: resolveSelector(options.selector, modifier, context, false, normalized),\n mediaQuery: resolveMediaQuery(options.mediaQuery, modifier, context, false, normalized),\n }\n}\n\nasync function formatModifierOverride(\n { tokens, modifierInputs }: BundleDataItem,\n baseItem: BundleDataItem,\n options: ResolvedTailwindOptions,\n formatOverrideBlock: (\n tokens: ResolvedTokens,\n selector: string,\n mediaQuery: string,\n minify: boolean,\n ) => Promise<string>,\n): Promise<string | undefined> {\n const differenceCount = countModifierDifferences(modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n return undefined\n }\n\n // Value-based filtering catches alias tokens that change indirectly\n // (e.g., background-base references gray.25 which differs in dark mode).\n const tokensToInclude = filterTokensByValueChange(tokens, baseItem.tokens)\n if (Object.keys(tokensToInclude).length === 0) {\n return undefined\n }\n\n const expectedSource = getExpectedSource(modifierInputs, baseItem.modifierInputs)\n const [modifier, context] = parseModifierSource(expectedSource)\n const cleanTokens = stripInternalMetadata(tokensToInclude)\n const { selector, mediaQuery } = resolveModifierSelectorAndMedia(\n options,\n modifier,\n context,\n modifierInputs,\n )\n\n const css = await formatOverrideBlock(cleanTokens, selector, mediaQuery, options.minify)\n return `/* Modifier: ${modifier}=${context} */\\n${css}`\n}\n\n/**\n * Filter tokens to those whose resolved value differs from the base permutation.\n *\n * Unlike source-based filtering, this catches alias tokens that change\n * indirectly through reference resolution (e.g., background-base references\n * gray.25 which has a different value in dark mode).\n */\nfunction filterTokensByValueChange(\n currentTokens: ResolvedTokens,\n baseTokens: ResolvedTokens,\n): ResolvedTokens {\n const changed: ResolvedTokens = {}\n\n for (const [name, token] of Object.entries(currentTokens)) {\n const baseToken = baseTokens[name]\n if (!baseToken) {\n changed[name] = token\n continue\n }\n if (JSON.stringify(token.$value) !== JSON.stringify(baseToken.$value)) {\n changed[name] = token\n }\n }\n\n return changed\n}\n\n/**\n * Derive @custom-variant declarations from non-base permutations.\n *\n * For each non-base permutation that differs by a single modifier,\n * builds a Tailwind v4 @custom-variant line using the resolved selector\n * or media query. Variant names follow the {modifier}-{context} format\n * (e.g. \"theme-dark\") to avoid collisions across modifier dimensions.\n */\nfunction collectVariantDeclarations(\n bundleData: BundleDataItem[],\n baseItem: BundleDataItem,\n options: ResolvedTailwindOptions,\n): string[] {\n const declarations: string[] = []\n\n for (const item of bundleData) {\n if (item.isBase) {\n continue\n }\n\n const differenceCount = countModifierDifferences(item.modifierInputs, baseItem.modifierInputs)\n if (differenceCount > 1) {\n continue\n }\n\n const expectedSource = getExpectedSource(item.modifierInputs, baseItem.modifierInputs)\n const [modifier, context] = parseModifierSource(expectedSource)\n const variantName = `${modifier}-${context}`\n const normalized = normalizeModifierInputs(item.modifierInputs)\n\n const mediaQuery = resolveMediaQuery(options.mediaQuery, modifier, context, false, normalized)\n if (mediaQuery !== '') {\n declarations.push(`@custom-variant ${variantName} (@media ${mediaQuery});`)\n continue\n }\n\n const selector = resolveSelector(options.selector, modifier, context, false, normalized)\n declarations.push(`@custom-variant ${variantName} (&:where(${selector}, ${selector} *));`)\n }\n\n return declarations\n}\n\nfunction resolveOptions(\n options: ResolvedTailwindOptions | TailwindRendererOptions,\n): ResolvedTailwindOptions {\n return {\n preset: options.preset ?? 'bundle',\n includeImport: options.includeImport ?? true,\n namespace: options.namespace ?? '',\n minify: options.minify ?? false,\n selector: options.selector,\n mediaQuery: options.mediaQuery,\n variantDeclarations: [],\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview iOS/SwiftUI renderer for design tokens\n * Generates Swift code targeting SwiftUI (iOS 17+)\n */\n\nimport { isColorObject, dtcgObjectToCulori } from '@processing/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/transforms/built-in/dimension-converter'\nimport { isDurationObject } from '@processing/transforms/built-in/duration-converter'\nimport type {\n ColorValueObject,\n DimensionValue,\n DurationValue,\n GradientStop,\n ResolvedToken,\n ResolvedTokens,\n} from '@shared/token-types'\nimport { isBorderToken, isShadowToken, isTypographyToken } from '@shared/token-types'\nimport { converter } from 'culori'\n\nimport {\n assertFileRequired,\n buildGeneratedFileHeader,\n buildInMemoryOutputKey,\n groupTokensByType,\n indentStr,\n resolveFileName,\n stripInternalMetadata,\n toSafeIdentifier,\n} from '../utils'\nimport { buildSwiftDeprecationAttribute, buildTokenDescriptionComment } from '../metadata'\nimport { outputTree } from '../output-tree'\nimport type { RenderContext, RenderOutput, Renderer } from '../types'\n\n/**\n * Options for iOS/SwiftUI renderer\n */\nexport type IosRendererOptions = {\n preset?: 'standalone'\n accessLevel?: 'public' | 'internal'\n /**\n * Output structure:\n * - `'enum'` — nested enums inside a single root enum\n * - `'grouped'` — namespace enum with separate extensions per token group\n */\n structure?: 'enum' | 'grouped'\n enumName?: string\n /** Namespace enum name used in grouped mode (default: 'DesignTokens') */\n extensionNamespace?: string\n colorSpace?: 'sRGB' | 'displayP3'\n /**\n * Target Swift language version.\n * - `'5.9'` (default) — standard static let declarations\n * - `'6.0'` — adds `nonisolated(unsafe)` to static properties for\n * Swift 6 strict concurrency compliance\n */\n swiftVersion?: '5.9' | '6.0'\n /** Number of spaces per indentation level (default 4) */\n indent?: number\n /** Add @frozen annotation to enums and structs for ABI stability (default false) */\n frozen?: boolean\n}\n\nconst toSRGB = converter('rgb')\nconst toP3 = converter('p3')\n\nconst SWIFT_TYPE_GROUP_MAP: Record<string, string> = {\n color: 'Colors',\n dimension: 'Spacing',\n fontFamily: 'Fonts',\n fontWeight: 'FontWeights',\n duration: 'Durations',\n shadow: 'Shadows',\n typography: 'Typography',\n number: 'Numbers',\n cubicBezier: 'Animations',\n border: 'Borders',\n gradient: 'Gradients',\n}\n\n/**\n * Swift reserved keywords that require backtick-escaping when used as identifiers.\n */\nconst SWIFT_KEYWORDS = new Set([\n 'associatedtype',\n 'class',\n 'deinit',\n 'enum',\n 'extension',\n 'fileprivate',\n 'func',\n 'import',\n 'init',\n 'inout',\n 'internal',\n 'let',\n 'open',\n 'operator',\n 'private',\n 'protocol',\n 'public',\n 'rethrows',\n 'static',\n 'struct',\n 'subscript',\n 'typealias',\n 'var',\n 'break',\n 'case',\n 'continue',\n 'default',\n 'defer',\n 'do',\n 'else',\n 'fallthrough',\n 'for',\n 'guard',\n 'if',\n 'in',\n 'repeat',\n 'return',\n 'switch',\n 'where',\n 'while',\n 'as',\n 'catch',\n 'false',\n 'is',\n 'nil',\n 'super',\n 'self',\n 'Self',\n 'throw',\n 'throws',\n 'true',\n 'try',\n 'Type',\n 'Protocol',\n])\n\nexport class IosRenderer implements Renderer<IosRendererOptions> {\n async format(context: RenderContext, options?: IosRendererOptions): Promise<RenderOutput> {\n const opts: Required<IosRendererOptions> = {\n preset: options?.preset ?? 'standalone',\n accessLevel: options?.accessLevel ?? 'public',\n structure: options?.structure ?? 'enum',\n enumName: options?.enumName ?? 'DesignTokens',\n extensionNamespace: options?.extensionNamespace ?? 'DesignTokens',\n colorSpace: options?.colorSpace ?? 'sRGB',\n swiftVersion: options?.swiftVersion ?? '5.9',\n indent: options?.indent ?? 4,\n frozen: options?.frozen ?? false,\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n private formatTokens(tokens: ResolvedTokens, options: Required<IosRendererOptions>): string {\n const access = options.accessLevel\n const groups = groupTokensByType(tokens, SWIFT_TYPE_GROUP_MAP)\n const imports = this.collectImports(tokens)\n const staticPrefix = this.staticLetPrefix(options)\n const frozen = this.frozenPrefix(options)\n const lines: string[] = []\n\n lines.push(buildGeneratedFileHeader())\n lines.push('')\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n\n lines.push(...this.buildStructDefinitions(tokens, access, options))\n this.pushTokenLayout(lines, groups, options, access, staticPrefix, frozen)\n lines.push(...this.buildViewExtensions(tokens, access, options))\n if (options.structure !== 'grouped') {\n lines.push('')\n }\n\n return lines.join('\\n')\n }\n\n private pushTokenLayout(\n lines: string[],\n groups: Array<{ name: string; tokens: ResolvedToken[] }>,\n options: Required<IosRendererOptions>,\n access: string,\n staticPrefix: string,\n frozen: string,\n ): void {\n const i1 = indentStr(options.indent, 1)\n const i2 = indentStr(options.indent, 2)\n\n if (options.structure === 'grouped') {\n this.pushGroupedLayout(lines, groups, options, access, i1, i2, staticPrefix, frozen)\n return\n }\n\n lines.push('')\n lines.push(`${frozen}${access} enum ${options.enumName} {`)\n\n for (const group of groups) {\n lines.push(`${i1}${frozen}${access} enum ${group.name} {`)\n this.pushTokenDeclarations(lines, group.tokens, options, access, i2, staticPrefix)\n lines.push(`${i1}}`)\n lines.push('')\n }\n\n lines.push('}')\n }\n\n private pushGroupedLayout(\n lines: string[],\n groups: Array<{ name: string; tokens: ResolvedToken[] }>,\n options: Required<IosRendererOptions>,\n access: string,\n i1: string,\n i2: string,\n staticPrefix: string,\n frozen: string,\n ): void {\n const namespace = options.extensionNamespace\n lines.push('')\n lines.push(`${frozen}${access} enum ${namespace} {}`)\n lines.push('')\n\n for (const group of groups) {\n lines.push(`${access} extension ${namespace} {`)\n lines.push(`${i1}${frozen}enum ${group.name} {`)\n this.pushTokenDeclarations(lines, group.tokens, options, access, i2, staticPrefix)\n lines.push(`${i1}}`)\n lines.push('}')\n lines.push('')\n }\n }\n\n private pushTokenDeclarations(\n lines: string[],\n tokens: ResolvedToken[],\n options: Required<IosRendererOptions>,\n access: string,\n indent: string,\n staticPrefix: string,\n ): void {\n for (const token of tokens) {\n const swiftName = this.buildQualifiedSwiftName(token)\n const swiftValue = this.formatSwiftValue(token, options)\n const typeAnnotation = this.getTypeAnnotation(token)\n const annotation = typeAnnotation ? `: ${typeAnnotation}` : ''\n const docComment = buildTokenDescriptionComment(token, 'swift')\n if (docComment) {\n lines.push(`${indent}${docComment}`)\n }\n\n const deprecationAttr = buildSwiftDeprecationAttribute(token)\n if (deprecationAttr) {\n lines.push(`${indent}${deprecationAttr}`)\n }\n\n lines.push(`${indent}${access} ${staticPrefix}${swiftName}${annotation} = ${swiftValue}`)\n }\n }\n\n private collectImports(tokens: ResolvedTokens): string[] {\n const imports = new Set<string>()\n imports.add('SwiftUI')\n\n for (const [, token] of Object.entries(tokens)) {\n if (token.$type === 'duration') {\n imports.add('Foundation')\n }\n }\n\n return Array.from(imports).sort()\n }\n\n /**\n * Builds a qualified Swift name from a token's path, preserving parent\n * hierarchy segments to avoid duplicate identifiers.\n *\n * For example, `color.blue.400` in the `Colors` group becomes `blue400`\n * instead of just `_400`.\n */\n private buildQualifiedSwiftName(token: ResolvedToken): string {\n const path = token.path\n\n // The first segment is typically the token type (color, spacing, etc.)\n // which is already represented by the group enum. Strip it.\n const withoutTypePrefix = path.length > 1 ? path.slice(1) : path\n\n const joined = withoutTypePrefix.join('_')\n return toSafeIdentifier(joined, SWIFT_KEYWORDS, false)\n }\n\n private formatSwiftValue(token: ResolvedToken, options: Required<IosRendererOptions>): string {\n const { $type, $value: value } = token\n\n switch ($type) {\n case 'color':\n return this.formatColorValue(value, options)\n case 'dimension':\n return this.formatDimensionValue(value)\n case 'fontFamily':\n return this.formatFontFamilyValue(value)\n case 'fontWeight':\n return this.formatFontWeightValue(value)\n case 'duration':\n return this.formatDurationValue(value)\n case 'shadow':\n return this.formatShadowValue(value, options)\n case 'typography':\n return this.formatTypographyValue(value)\n case 'border':\n return this.formatBorderValue(value, options)\n case 'gradient':\n return this.formatGradientValue(value, options)\n case 'number':\n return String(value)\n case 'cubicBezier':\n if (Array.isArray(value) && value.length === 4) {\n return `UnitCurve.bezier(startControlPoint: UnitPoint(x: ${value[0]}, y: ${value[1]}), endControlPoint: UnitPoint(x: ${value[2]}, y: ${value[3]}))`\n }\n break\n }\n\n return this.formatSwiftPrimitive(value)\n }\n\n private formatSwiftPrimitive(value: unknown): string {\n if (typeof value === 'string') {\n return `\"${this.escapeSwiftString(value)}\"`\n }\n if (typeof value === 'number') {\n return String(value)\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n return `\"${this.escapeSwiftString(String(value))}\"`\n }\n\n private formatColorValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (!isColorObject(value)) {\n return typeof value === 'string' ? `Color(\"${this.escapeSwiftString(value)}\")` : 'Color.clear'\n }\n\n const colorObj = value as ColorValueObject\n const alpha = colorObj.alpha ?? 1\n\n if (options.colorSpace === 'displayP3') {\n const p3 = toP3(dtcgObjectToCulori(colorObj))\n const r = this.roundComponent(p3?.r ?? 0)\n const g = this.roundComponent(p3?.g ?? 0)\n const b = this.roundComponent(p3?.b ?? 0)\n return alpha < 1\n ? `Color(.displayP3, red: ${r}, green: ${g}, blue: ${b}, opacity: ${this.roundComponent(alpha)})`\n : `Color(.displayP3, red: ${r}, green: ${g}, blue: ${b})`\n }\n\n const rgb = toSRGB(dtcgObjectToCulori(colorObj))\n const r = this.roundComponent(rgb?.r ?? 0)\n const g = this.roundComponent(rgb?.g ?? 0)\n const b = this.roundComponent(rgb?.b ?? 0)\n\n return alpha < 1\n ? `Color(red: ${r}, green: ${g}, blue: ${b}, opacity: ${this.roundComponent(alpha)})`\n : `Color(red: ${r}, green: ${g}, blue: ${b})`\n }\n\n private formatDimensionValue(value: unknown): string {\n if (isDimensionObject(value)) {\n return this.dimensionToPoints(value as DimensionValue)\n }\n\n return String(value)\n }\n\n private formatFontFamilyValue(value: unknown): string {\n if (Array.isArray(value)) {\n const primary = value[0]\n return typeof primary === 'string' ? `\"${this.escapeSwiftString(primary)}\"` : '\"system\"'\n }\n\n return typeof value === 'string' ? `\"${this.escapeSwiftString(value)}\"` : '\"system\"'\n }\n\n private formatFontWeightValue(value: unknown): string {\n if (typeof value === 'number') {\n return this.numericFontWeight(value)\n }\n\n if (typeof value === 'string') {\n return this.namedFontWeight(value) ?? 'Font.Weight.regular'\n }\n\n return 'Font.Weight.regular'\n }\n\n private numericFontWeight(weight: number): string {\n if (weight <= 100) {\n return 'Font.Weight.ultraLight'\n }\n if (weight <= 200) {\n return 'Font.Weight.thin'\n }\n if (weight <= 300) {\n return 'Font.Weight.light'\n }\n if (weight <= 400) {\n return 'Font.Weight.regular'\n }\n if (weight <= 500) {\n return 'Font.Weight.medium'\n }\n if (weight <= 600) {\n return 'Font.Weight.semibold'\n }\n if (weight <= 700) {\n return 'Font.Weight.bold'\n }\n if (weight <= 800) {\n return 'Font.Weight.heavy'\n }\n return 'Font.Weight.black'\n }\n\n private namedFontWeight(name: string): string | undefined {\n const map: Record<string, string> = {\n thin: 'Font.Weight.thin',\n ultralight: 'Font.Weight.ultraLight',\n extralight: 'Font.Weight.ultraLight',\n light: 'Font.Weight.light',\n regular: 'Font.Weight.regular',\n normal: 'Font.Weight.regular',\n medium: 'Font.Weight.medium',\n semibold: 'Font.Weight.semibold',\n demibold: 'Font.Weight.semibold',\n bold: 'Font.Weight.bold',\n heavy: 'Font.Weight.heavy',\n extrabold: 'Font.Weight.heavy',\n black: 'Font.Weight.black',\n ultrabold: 'Font.Weight.black',\n }\n\n return map[name.toLowerCase()]\n }\n\n private formatDurationValue(value: unknown): string {\n if (isDurationObject(value)) {\n const dur = value as DurationValue\n const seconds = dur.unit === 'ms' ? dur.value / 1000 : dur.value\n return String(seconds)\n }\n\n return typeof value === 'number' ? String(value) : '0'\n }\n\n private formatShadowValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (Array.isArray(value) && value.length > 0) {\n // Use the first shadow layer for SwiftUI\n return this.formatSingleShadow(value[0] as Record<string, unknown>, options)\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>, options)\n }\n\n return 'ShadowStyle(color: .clear, radius: 0, x: 0, y: 0, spread: 0)'\n }\n\n private formatSingleShadow(\n shadow: Record<string, unknown>,\n options: Required<IosRendererOptions>,\n ): string {\n const color = isColorObject(shadow.color)\n ? this.formatColorValue(shadow.color, options)\n : 'Color.black.opacity(0.25)'\n\n const radius = isDimensionObject(shadow.blur)\n ? this.dimensionToCGFloat(shadow.blur as DimensionValue)\n : '8'\n\n const x = isDimensionObject(shadow.offsetX)\n ? this.dimensionToCGFloat(shadow.offsetX as DimensionValue)\n : '0'\n\n const y = isDimensionObject(shadow.offsetY)\n ? this.dimensionToCGFloat(shadow.offsetY as DimensionValue)\n : '0'\n\n const spread = isDimensionObject(shadow.spread)\n ? this.dimensionToCGFloat(shadow.spread as DimensionValue)\n : '0'\n\n return `ShadowStyle(color: ${color}, radius: ${radius}, x: ${x}, y: ${y}, spread: ${spread})`\n }\n\n private formatTypographyValue(value: unknown): string {\n if (typeof value !== 'object' || value === null) {\n return 'TypographyStyle(font: Font.body, tracking: 0, lineSpacing: 0)'\n }\n\n const typo = value as Record<string, unknown>\n\n const size = isDimensionObject(typo.fontSize)\n ? this.dimensionToPoints(typo.fontSize as DimensionValue)\n : '16'\n\n const weight =\n typo.fontWeight != null ? this.formatFontWeightValue(typo.fontWeight) : 'Font.Weight.regular'\n\n const fontExpr = this.buildFontExpression(typo, size, weight)\n const tracking = this.extractTracking(typo)\n const lineSpacing = this.extractLineSpacing(typo)\n\n return `TypographyStyle(font: ${fontExpr}, tracking: ${tracking}, lineSpacing: ${lineSpacing})`\n }\n\n private buildFontExpression(typo: Record<string, unknown>, size: string, weight: string): string {\n if (typo.fontFamily != null) {\n const family = Array.isArray(typo.fontFamily) ? typo.fontFamily[0] : typo.fontFamily\n if (typeof family === 'string') {\n return `Font.custom(\"${this.escapeSwiftString(family)}\", size: ${size}).weight(${weight})`\n }\n }\n\n return `Font.system(size: ${size}, weight: ${weight})`\n }\n\n private extractTracking(typo: Record<string, unknown>): string {\n if (!isDimensionObject(typo.letterSpacing)) {\n return '0'\n }\n return this.dimensionToPoints(typo.letterSpacing as DimensionValue)\n }\n\n private extractLineSpacing(typo: Record<string, unknown>): string {\n if (typo.lineHeight == null || typeof typo.lineHeight !== 'number') {\n return '0'\n }\n if (!isDimensionObject(typo.fontSize)) {\n return '0'\n }\n const basePt = this.dimensionToNumericPoints(typo.fontSize as DimensionValue)\n const lineHeightPt = Math.round(basePt * typo.lineHeight * 100) / 100\n return String(lineHeightPt - basePt)\n }\n\n private dimensionToNumericPoints(dim: DimensionValue): number {\n return dim.unit === 'rem' ? dim.value * 16 : dim.value\n }\n\n private dimensionToPoints(dim: DimensionValue): string {\n return String(this.dimensionToNumericPoints(dim))\n }\n\n /** Formats a dimension as a CGFloat literal (appends `.0` for integers). */\n private dimensionToCGFloat(dim: DimensionValue): string {\n const ptValue = this.dimensionToNumericPoints(dim)\n return Number.isInteger(ptValue) ? `${ptValue}.0` : String(ptValue)\n }\n\n private getTypeAnnotation(token: ResolvedToken): string | undefined {\n switch (token.$type) {\n case 'dimension':\n return 'CGFloat'\n case 'duration':\n return 'TimeInterval'\n case 'number':\n return 'Double'\n case 'fontWeight':\n return 'Font.Weight'\n case 'fontFamily':\n return 'String'\n default:\n return undefined\n }\n }\n\n private escapeSwiftString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n')\n }\n\n private roundComponent(value: number): number {\n return Math.round(value * 10000) / 10000\n }\n\n /**\n * Returns the prefix for `static let` declarations.\n * Swift 6 requires `nonisolated(unsafe)` on global stored properties.\n */\n private staticLetPrefix(options: Required<IosRendererOptions>): string {\n return options.swiftVersion === '6.0' ? 'nonisolated(unsafe) static let ' : 'static let '\n }\n\n /** Returns `@frozen ` when the frozen option is enabled, empty string otherwise. */\n private frozenPrefix(options: Required<IosRendererOptions>): string {\n return options.frozen ? '@frozen ' : ''\n }\n\n /** Returns `: Sendable` when targeting Swift 6, empty string otherwise. */\n private structConformances(options: Required<IosRendererOptions>): string {\n return options.swiftVersion === '6.0' ? ': Sendable' : ''\n }\n\n /** Emits all struct definitions needed by the token set. */\n private buildStructDefinitions(\n tokens: ResolvedTokens,\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const lines: string[] = []\n\n if (Object.values(tokens).some(isShadowToken)) {\n lines.push('')\n lines.push(...this.buildShadowStyleStruct(access, options))\n }\n\n if (Object.values(tokens).some(isTypographyToken)) {\n lines.push('')\n lines.push(...this.buildTypographyStyleStruct(access, options))\n }\n\n if (Object.values(tokens).some(isBorderToken)) {\n lines.push('')\n lines.push(...this.buildBorderStyleStruct(access, options))\n }\n\n return lines\n }\n\n private buildShadowStyleStruct(access: string, options: Required<IosRendererOptions>): string[] {\n const i1 = indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct ShadowStyle${conformances} {`,\n `${i1}${access} let color: Color`,\n `${i1}${access} let radius: CGFloat`,\n `${i1}${access} let x: CGFloat`,\n `${i1}${access} let y: CGFloat`,\n `${i1}${access} let spread: CGFloat`,\n '}',\n ]\n }\n\n private buildTypographyStyleStruct(\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const i1 = indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct TypographyStyle${conformances} {`,\n `${i1}${access} let font: Font`,\n `${i1}${access} let tracking: CGFloat`,\n `${i1}${access} let lineSpacing: CGFloat`,\n '}',\n ]\n }\n\n private buildBorderStyleStruct(access: string, options: Required<IosRendererOptions>): string[] {\n const i1 = indentStr(options.indent, 1)\n const conformances = this.structConformances(options)\n const frozen = this.frozenPrefix(options)\n return [\n `${frozen}${access} struct BorderStyle${conformances} {`,\n `${i1}${access} let color: Color`,\n `${i1}${access} let width: CGFloat`,\n '}',\n ]\n }\n\n /** Emits convenience View extensions for shadow and typography application. */\n private buildViewExtensions(\n tokens: ResolvedTokens,\n access: string,\n options: Required<IosRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const i1 = indentStr(options.indent, 1)\n const i2 = indentStr(options.indent, 2)\n\n if (Object.values(tokens).some(isShadowToken)) {\n lines.push('')\n lines.push(`${access} extension View {`)\n lines.push(`${i1}func shadowStyle(_ style: ShadowStyle) -> some View {`)\n lines.push(\n `${i2}self.shadow(color: style.color, radius: style.radius, x: style.x, y: style.y)`,\n )\n lines.push(`${i1}}`)\n lines.push('}')\n }\n\n if (Object.values(tokens).some(isTypographyToken)) {\n lines.push('')\n lines.push(`${access} extension View {`)\n lines.push(`${i1}func typographyStyle(_ style: TypographyStyle) -> some View {`)\n lines.push(\n `${i2}self.font(style.font).tracking(style.tracking).lineSpacing(style.lineSpacing)`,\n )\n lines.push(`${i1}}`)\n lines.push('}')\n }\n\n return lines\n }\n\n private formatBorderValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (typeof value !== 'object' || value === null) {\n return 'BorderStyle(color: .clear, width: 0)'\n }\n\n const border = value as Record<string, unknown>\n\n const color = isColorObject(border.color)\n ? this.formatColorValue(border.color, options)\n : 'Color.clear'\n\n const width = isDimensionObject(border.width)\n ? this.dimensionToCGFloat(border.width as DimensionValue)\n : '1.0'\n\n return `BorderStyle(color: ${color}, width: ${width})`\n }\n\n private formatGradientValue(value: unknown, options: Required<IosRendererOptions>): string {\n if (!Array.isArray(value) || value.length === 0) {\n return 'Gradient(stops: [])'\n }\n\n const stops = (value as GradientStop[]).map((stop) => {\n const color = isColorObject(stop.color)\n ? this.formatColorValue(stop.color, options)\n : 'Color.clear'\n return `.init(color: ${color}, location: ${stop.position})`\n })\n\n return `Gradient(stops: [${stops.join(', ')}])`\n }\n\n private async formatStandalone(\n context: RenderContext,\n options: Required<IosRendererOptions>,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone iOS',\n )\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'swift',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n}\n\n/**\n * iOS/SwiftUI renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'ios',\n * renderer: iosRenderer(),\n * options: {\n * accessLevel: 'public',\n * structure: 'enum', // or 'grouped' for extension-based layout\n * enumName: 'DesignTokens',\n * colorSpace: 'sRGB',\n * },\n * file: 'DesignTokens-{theme}.swift'\n * }]\n * ```\n */\nexport function iosRenderer(): Renderer<IosRendererOptions> {\n const rendererInstance = new IosRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as IosRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @license MIT\n * Copyright (c) 2025-present Dispersa Contributors\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * @fileoverview Android/Jetpack Compose renderer for design tokens\n * Generates Kotlin code targeting Jetpack Compose with Material 3.\n *\n * @experimental This renderer is experimental. Its API, generated code structure,\n * and options may change in future releases.\n *\n * Supports two structure modes:\n * - `'nested'` — token path hierarchy as nested `object` declarations\n * - `'flat'` — tokens grouped by type into semantic sub-objects (Colors, Spacing, etc.)\n */\n\nimport {\n colorObjectToHex,\n isColorObject,\n dtcgObjectToCulori,\n} from '@processing/transforms/built-in/color-converter'\nimport { isDimensionObject } from '@processing/transforms/built-in/dimension-converter'\nimport { isDurationObject } from '@processing/transforms/built-in/duration-converter'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport type {\n ColorValueObject,\n DimensionValue,\n ResolvedToken,\n ResolvedTokens,\n} from '@shared/token-types'\nimport { converter } from 'culori'\n\nimport {\n assertFileRequired,\n buildGeneratedFileHeader,\n buildInMemoryOutputKey,\n groupTokensByType,\n indentStr,\n resolveFileName,\n stripInternalMetadata,\n toSafeIdentifier,\n} from '../utils'\nimport type { TokenGroup } from '../utils'\nimport { buildKotlinDeprecationAnnotation, buildTokenDescriptionComment } from '../metadata'\nimport { outputTree } from '../output-tree'\nimport type { RenderContext, RenderOutput, Renderer } from '../types'\n\n/**\n * Options for Android/Jetpack Compose renderer\n *\n * Note: `packageName` is marked optional for type compatibility with the Renderer\n * generic, but is validated as required at runtime in the renderer's format() method.\n *\n * @experimental This type is experimental. Properties and behavior may change.\n */\nexport type AndroidRendererOptions = {\n preset?: 'standalone' | 'bundle'\n packageName?: string\n objectName?: string\n /**\n * Color output format for Kotlin Color initializers.\n * - `'argb_hex'` (default) — `Color(0xAARRGGBB)` hex literal\n * - `'argb_float'` — `Color(r, g, b, a)` float components\n *\n * Legacy aliases: `'argb8'` maps to `'argb_hex'`, `'argb_floats'` maps to `'argb_float'`.\n */\n colorFormat?: 'argb_hex' | 'argb_float' | 'argb8' | 'argb_floats'\n /**\n * Color space for generated Color values.\n * - `'sRGB'` (default) — standard sRGB color space\n * - `'displayP3'` — Display P3 wide gamut via `ColorSpaces.DisplayP3`\n */\n colorSpace?: 'sRGB' | 'displayP3'\n /**\n * Structure mode for token organization.\n * - `'nested'` (default) — mirror token path hierarchy as nested objects\n * - `'flat'` — group tokens by $type into semantic sub-objects (Colors, Spacing, etc.)\n */\n structure?: 'nested' | 'flat'\n /**\n * Kotlin visibility modifier for the generated object and its members.\n * - `undefined` (default) — no explicit modifier, which means `public` in Kotlin\n * - `'public'` — explicit `public object` / `public val`\n * - `'internal'` — `internal object` / `internal val` (useful for KMP / multi-module)\n */\n visibility?: 'public' | 'internal'\n /** Number of spaces per indentation level (default 4) */\n indent?: number\n}\n\n/**\n * Internal resolved options with all defaults applied.\n */\ntype ResolvedOptions = {\n preset: 'standalone' | 'bundle'\n packageName: string\n objectName: string\n colorFormat: 'argb_hex' | 'argb_float'\n colorSpace: 'sRGB' | 'displayP3'\n structure: 'nested' | 'flat'\n visibility: 'public' | 'internal' | undefined\n visPrefix: string\n indent: number\n}\n\ntype TokenTreeNode = {\n children: Map<string, TokenTreeNode>\n token?: ResolvedToken\n}\n\nconst toSRGB = converter('rgb')\nconst toP3 = converter('p3')\n\nconst KOTLIN_KEYWORDS = new Set([\n 'val',\n 'var',\n 'fun',\n 'class',\n 'object',\n 'when',\n 'is',\n 'in',\n 'return',\n 'break',\n 'continue',\n 'do',\n 'while',\n 'for',\n 'if',\n 'else',\n 'try',\n 'catch',\n 'throw',\n 'as',\n 'this',\n 'super',\n 'null',\n 'true',\n 'false',\n])\n\nconst KOTLIN_TYPE_GROUP_MAP: Record<string, string> = {\n color: 'Colors',\n dimension: 'Spacing',\n fontFamily: 'Fonts',\n fontWeight: 'FontWeights',\n duration: 'Durations',\n shadow: 'Shadows',\n typography: 'Typography',\n number: 'Numbers',\n cubicBezier: 'Animations',\n border: 'Borders',\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction resolveColorFormat(format?: string): 'argb_hex' | 'argb_float' {\n if (format === 'argb_floats' || format === 'argb_float') {\n return 'argb_float'\n }\n return 'argb_hex'\n}\n\nfunction escapeKotlinString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\$/g, '\\\\$')\n}\n\nfunction formatKotlinNumber(value: number): string {\n return Number.isInteger(value) ? `${value}.0` : String(value)\n}\n\nfunction roundComponent(value: number): number {\n return Math.round(value * 1000) / 1000\n}\n\nfunction toResourceName(family: string): string {\n return family\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '')\n}\n\n// ---------------------------------------------------------------------------\n// Renderer\n// ---------------------------------------------------------------------------\n\nexport class AndroidRenderer implements Renderer<AndroidRendererOptions> {\n async format(context: RenderContext, options?: AndroidRendererOptions): Promise<RenderOutput> {\n if (!options?.packageName) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": packageName is required for Android output`,\n )\n }\n\n const visibility = options?.visibility\n const opts: ResolvedOptions = {\n preset: options?.preset ?? 'standalone',\n packageName: options.packageName,\n objectName: options?.objectName ?? 'DesignTokens',\n colorFormat: resolveColorFormat(options?.colorFormat),\n colorSpace: options?.colorSpace ?? 'sRGB',\n structure: options?.structure ?? 'nested',\n visibility,\n visPrefix: visibility ? `${visibility} ` : '',\n indent: options?.indent ?? 4,\n }\n\n if (opts.preset === 'bundle') {\n return await this.formatBundle(context, opts)\n }\n\n return await this.formatStandalone(context, opts)\n }\n\n // -----------------------------------------------------------------------\n // Token tree (nested mode)\n // -----------------------------------------------------------------------\n\n private buildTokenTree(tokens: ResolvedTokens): TokenTreeNode {\n const root: TokenTreeNode = { children: new Map() }\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n let current = root\n const segments = token.path\n\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i]!\n if (!current.children.has(seg)) {\n current.children.set(seg, { children: new Map() })\n }\n current = current.children.get(seg)!\n }\n\n const leafName = segments[segments.length - 1] ?? token.name\n const leaf: TokenTreeNode = current.children.get(leafName) ?? { children: new Map() }\n leaf.token = token\n current.children.set(leafName, leaf)\n }\n\n return root\n }\n\n // -----------------------------------------------------------------------\n // Flat structure grouping\n // -----------------------------------------------------------------------\n\n /**\n * Builds a flattened camelCase name from a token's path, stripping the\n * type prefix segment (which is already represented by the group object).\n */\n private buildFlatKotlinName(token: ResolvedToken): string {\n const path = token.path\n const withoutTypePrefix = path.length > 1 ? path.slice(1) : path\n const joined = withoutTypePrefix.join('_')\n return toSafeIdentifier(joined, KOTLIN_KEYWORDS, false)\n }\n\n // -----------------------------------------------------------------------\n // Rendering\n // -----------------------------------------------------------------------\n\n private formatTokens(tokens: ResolvedTokens, options: ResolvedOptions): string {\n if (options.structure === 'flat') {\n return this.formatAsFlat(tokens, options)\n }\n return this.formatAsNested(tokens, options)\n }\n\n private formatAsNested(tokens: ResolvedTokens, options: ResolvedOptions): string {\n const tokenTypes = this.collectTokenTypesFromEntries(tokens)\n const tree = this.buildTokenTree(tokens)\n\n return this.buildFile(tokenTypes, options, (lines) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}object ${options.objectName} {`)\n this.renderTreeChildren(lines, tree, 1, options)\n lines.push('}')\n })\n }\n\n private formatAsFlat(tokens: ResolvedTokens, options: ResolvedOptions): string {\n const groups = groupTokensByType(tokens, KOTLIN_TYPE_GROUP_MAP)\n const tokenTypes = this.collectTokenTypesFromEntries(tokens)\n\n return this.buildFile(tokenTypes, options, (lines) => {\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}object ${options.objectName} {`)\n this.renderFlatGroups(lines, groups, 1, options)\n lines.push('}')\n })\n }\n\n /**\n * Shared file preamble: header, package, imports, optional ShadowToken class.\n * The `renderBody` callback appends the main object(s) to `lines`.\n */\n private buildFile(\n tokenTypes: Set<string>,\n options: ResolvedOptions,\n renderBody: (lines: string[]) => void,\n ): string {\n const imports = this.collectImports(tokenTypes, options)\n const lines: string[] = []\n\n lines.push(buildGeneratedFileHeader())\n lines.push('')\n lines.push(`package ${options.packageName}`)\n lines.push('')\n\n for (const imp of imports) {\n lines.push(`import ${imp}`)\n }\n if (imports.length > 0) {\n lines.push('')\n }\n\n if (tokenTypes.has('shadow')) {\n lines.push(...this.buildShadowTokenClass(options))\n lines.push('')\n }\n\n renderBody(lines)\n lines.push('')\n\n return lines.join('\\n')\n }\n\n private renderFlatGroups(\n lines: string[],\n groups: TokenGroup[],\n baseDepth: number,\n options: ResolvedOptions,\n ): void {\n const groupIndent = indentStr(options.indent, baseDepth)\n const valIndent = indentStr(options.indent, baseDepth + 1)\n\n for (const group of groups) {\n lines.push(`${groupIndent}${options.visPrefix}object ${group.name} {`)\n for (const token of group.tokens) {\n const kotlinName = this.buildFlatKotlinName(token)\n const kotlinValue = this.formatKotlinValue(token, options, baseDepth + 1)\n const annotation = this.typeAnnotationSuffix(token)\n\n const descriptionComment = buildTokenDescriptionComment(token, 'kotlin')\n if (descriptionComment) {\n lines.push(`${valIndent}${descriptionComment}`)\n }\n\n const deprecation = buildKotlinDeprecationAnnotation(token)\n if (deprecation) {\n lines.push(`${valIndent}${deprecation}`)\n }\n\n lines.push(\n `${valIndent}${options.visPrefix}val ${kotlinName}${annotation} = ${kotlinValue}`,\n )\n }\n lines.push(`${groupIndent}}`)\n lines.push('')\n }\n }\n\n private renderTreeChildren(\n lines: string[],\n node: TokenTreeNode,\n depth: number,\n options: ResolvedOptions,\n ): void {\n const pad = indentStr(options.indent, depth)\n const entries = Array.from(node.children.entries())\n\n for (let idx = 0; idx < entries.length; idx++) {\n const [key, child] = entries[idx]!\n\n if (child.token && child.children.size === 0) {\n this.renderLeaf(lines, key, child.token, depth, options)\n } else if (child.children.size > 0 && !child.token) {\n const objectName = toSafeIdentifier(key, KOTLIN_KEYWORDS, true)\n lines.push(`${pad}${options.visPrefix}object ${objectName} {`)\n this.renderTreeChildren(lines, child, depth + 1, options)\n lines.push(`${pad}}`)\n if (idx < entries.length - 1) {\n lines.push('')\n }\n } else {\n this.renderLeaf(lines, key, child.token!, depth, options)\n this.renderTreeChildren(lines, child, depth, options)\n }\n }\n }\n\n private renderLeaf(\n lines: string[],\n key: string,\n token: ResolvedToken,\n depth: number,\n options: ResolvedOptions,\n ): void {\n const pad = indentStr(options.indent, depth)\n const kotlinName = toSafeIdentifier(key, KOTLIN_KEYWORDS, false)\n const kotlinValue = this.formatKotlinValue(token, options, depth)\n const annotation = this.typeAnnotationSuffix(token)\n\n const descriptionComment = buildTokenDescriptionComment(token, 'kotlin')\n if (descriptionComment) {\n lines.push(`${pad}${descriptionComment}`)\n }\n\n const deprecation = buildKotlinDeprecationAnnotation(token)\n if (deprecation) {\n lines.push(`${pad}${deprecation}`)\n }\n\n lines.push(`${pad}${options.visPrefix}val ${kotlinName}${annotation} = ${kotlinValue}`)\n }\n\n // -----------------------------------------------------------------------\n // Shadow data class\n // -----------------------------------------------------------------------\n\n private buildShadowTokenClass(options: ResolvedOptions): string[] {\n const i1 = indentStr(options.indent, 1)\n return [\n '@Immutable',\n `${options.visPrefix}data class ShadowToken(`,\n `${i1}val color: Color,`,\n `${i1}val elevation: Dp,`,\n `${i1}val offsetX: Dp,`,\n `${i1}val offsetY: Dp,`,\n ')',\n ]\n }\n\n // -----------------------------------------------------------------------\n // Imports (tree-shaken)\n // -----------------------------------------------------------------------\n\n private collectImports(tokenTypes: Set<string>, options: ResolvedOptions): string[] {\n const imports = new Set<string>()\n const ns = 'androidx.compose'\n const hasColors =\n tokenTypes.has('color') || tokenTypes.has('shadow') || tokenTypes.has('border')\n\n if (hasColors) {\n imports.add(`${ns}.ui.graphics.Color`)\n }\n if (tokenTypes.has('dimension') || tokenTypes.has('shadow') || tokenTypes.has('border')) {\n imports.add(`${ns}.ui.unit.Dp`)\n imports.add(`${ns}.ui.unit.dp`)\n }\n if (tokenTypes.has('typography') || tokenTypes.has('fontFamily')) {\n imports.add(`${ns}.ui.text.TextStyle`)\n imports.add(`${ns}.ui.unit.sp`)\n }\n if (tokenTypes.has('typography') || tokenTypes.has('fontWeight')) {\n imports.add(`${ns}.ui.text.font.FontWeight`)\n }\n if (tokenTypes.has('fontFamily')) {\n imports.add(`${ns}.ui.text.font.FontFamily`)\n }\n if (tokenTypes.has('duration')) {\n imports.add('kotlin.time.Duration')\n imports.add('kotlin.time.Duration.Companion.milliseconds')\n imports.add('kotlin.time.Duration.Companion.seconds')\n }\n if (tokenTypes.has('cubicBezier')) {\n imports.add(`${ns}.animation.core.CubicBezierEasing`)\n }\n if (tokenTypes.has('shadow')) {\n imports.add(`${ns}.runtime.Immutable`)\n }\n if (tokenTypes.has('border')) {\n imports.add(`${ns}.foundation.BorderStroke`)\n }\n if (options.colorSpace === 'displayP3' && hasColors) {\n imports.add(`${ns}.ui.graphics.colorspace.ColorSpaces`)\n }\n\n return Array.from(imports).sort()\n }\n\n private collectTokenTypesFromEntries(tokens: ResolvedTokens): Set<string> {\n const types = new Set<string>()\n for (const [, token] of Object.entries(tokens)) {\n if (token.$type) {\n types.add(token.$type)\n }\n }\n return types\n }\n\n // -----------------------------------------------------------------------\n // Type annotations\n // -----------------------------------------------------------------------\n\n private getTypeAnnotation(token: ResolvedToken): string | undefined {\n switch (token.$type) {\n case 'color':\n return 'Color'\n case 'dimension':\n return 'Dp'\n case 'fontFamily':\n return 'FontFamily'\n case 'fontWeight':\n return 'FontWeight'\n case 'duration':\n return 'Duration'\n case 'shadow':\n return 'ShadowToken'\n case 'cubicBezier':\n return 'CubicBezierEasing'\n case 'number':\n return 'Double'\n case 'typography':\n return 'TextStyle'\n case 'border':\n return 'BorderStroke'\n default: {\n const value = token.$value\n if (typeof value === 'string') {\n return 'String'\n }\n if (typeof value === 'boolean') {\n return 'Boolean'\n }\n if (typeof value === 'number') {\n return 'Double'\n }\n return undefined\n }\n }\n }\n\n private typeAnnotationSuffix(token: ResolvedToken): string {\n const type = this.getTypeAnnotation(token)\n return type ? `: ${type}` : ''\n }\n\n // -----------------------------------------------------------------------\n // Value formatting\n // -----------------------------------------------------------------------\n\n private formatKotlinValue(token: ResolvedToken, options: ResolvedOptions, depth: number): string {\n const value = token.$value\n\n if (token.$type === 'color') {\n return this.formatColorValue(value, options)\n }\n if (token.$type === 'dimension') {\n return this.formatDimensionValue(value)\n }\n if (token.$type === 'fontFamily') {\n return this.formatFontFamilyValue(value)\n }\n if (token.$type === 'fontWeight') {\n return this.formatFontWeightValue(value)\n }\n if (token.$type === 'duration') {\n return this.formatDurationValue(value)\n }\n if (token.$type === 'shadow') {\n return this.formatShadowValue(value, options, depth)\n }\n if (token.$type === 'typography') {\n return this.formatTypographyValue(value, options, depth)\n }\n if (token.$type === 'border') {\n return this.formatBorderValue(value, options)\n }\n\n if (token.$type === 'number') {\n return typeof value === 'number' ? formatKotlinNumber(value) : String(value)\n }\n\n if (token.$type === 'cubicBezier' && Array.isArray(value) && value.length === 4) {\n return `CubicBezierEasing(${value[0]}f, ${value[1]}f, ${value[2]}f, ${value[3]}f)`\n }\n\n if (typeof value === 'string') {\n return `\"${escapeKotlinString(value)}\"`\n }\n if (typeof value === 'number') {\n return formatKotlinNumber(value)\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n\n return `\"${escapeKotlinString(String(value))}\"`\n }\n\n private formatColorValue(value: unknown, options: ResolvedOptions): string {\n if (!isColorObject(value)) {\n if (typeof value === 'string') {\n const hex = value.replace('#', '')\n if (/^[0-9a-fA-F]{6,8}$/.test(hex)) {\n const argb = hex.length === 8 ? hex : `FF${hex}`\n return `Color(0x${argb.toUpperCase()})`\n }\n }\n return 'Color.Unspecified'\n }\n\n const colorObj = value as ColorValueObject\n const alpha = colorObj.alpha ?? 1\n\n if (options.colorFormat === 'argb_float' || options.colorSpace === 'displayP3') {\n return this.formatFloatColor(colorObj, alpha, options)\n }\n\n return this.formatHexColor(colorObj, alpha)\n }\n\n private formatFloatColor(\n colorObj: ColorValueObject,\n alpha: number,\n options: ResolvedOptions,\n ): string {\n if (options.colorSpace === 'displayP3') {\n const p3 = toP3(dtcgObjectToCulori(colorObj))\n const r = roundComponent(p3?.r ?? 0)\n const g = roundComponent(p3?.g ?? 0)\n const b = roundComponent(p3?.b ?? 0)\n return `Color(${r}f, ${g}f, ${b}f, ${roundComponent(alpha)}f, ColorSpaces.DisplayP3)`\n }\n\n const rgb = toSRGB(dtcgObjectToCulori(colorObj))\n const r = roundComponent(rgb?.r ?? 0)\n const g = roundComponent(rgb?.g ?? 0)\n const b = roundComponent(rgb?.b ?? 0)\n return `Color(${r}f, ${g}f, ${b}f, ${roundComponent(alpha)}f)`\n }\n\n private formatHexColor(colorObj: ColorValueObject, alpha: number): string {\n const hex = colorObjectToHex(colorObj)\n const hexClean = hex.replace('#', '')\n\n if (hexClean.length === 8) {\n const rrggbb = hexClean.slice(0, 6)\n const aa = hexClean.slice(6, 8)\n return `Color(0x${aa.toUpperCase()}${rrggbb.toUpperCase()})`\n }\n\n const alphaHex =\n alpha < 1\n ? Math.round(alpha * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase()\n : 'FF'\n return `Color(0x${alphaHex}${hexClean.toUpperCase()})`\n }\n\n private formatDimensionValue(value: unknown): string {\n if (isDimensionObject(value)) {\n const dim = value as DimensionValue\n const dpValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n return `${dpValue}.dp`\n }\n\n return typeof value === 'number' ? `${value}.dp` : `0.dp`\n }\n\n private formatFontFamilyValue(value: unknown): string {\n if (Array.isArray(value)) {\n const primary = value[0]\n if (typeof primary === 'string') {\n return this.mapKotlinFontFamily(primary)\n }\n return 'FontFamily.Default'\n }\n\n return typeof value === 'string' ? this.mapKotlinFontFamily(value) : 'FontFamily.Default'\n }\n\n private mapKotlinFontFamily(family: string): string {\n const normalized = family.toLowerCase().replace(/['\"]/g, '').trim()\n const builtIn: Record<string, string> = {\n 'sans-serif': 'FontFamily.SansSerif',\n serif: 'FontFamily.Serif',\n monospace: 'FontFamily.Monospace',\n cursive: 'FontFamily.Cursive',\n }\n\n return (\n builtIn[normalized] ??\n `FontFamily.Default // TODO: load \"${family}\" via Font(R.font.${toResourceName(family)})`\n )\n }\n\n private formatFontWeightValue(value: unknown): string {\n if (typeof value === 'number') {\n return this.numericFontWeight(value)\n }\n if (typeof value === 'string') {\n return this.namedFontWeight(value) ?? 'FontWeight.Normal'\n }\n return 'FontWeight.Normal'\n }\n\n private numericFontWeight(weight: number): string {\n if (weight <= 100) {\n return 'FontWeight.Thin'\n }\n if (weight <= 200) {\n return 'FontWeight.ExtraLight'\n }\n if (weight <= 300) {\n return 'FontWeight.Light'\n }\n if (weight <= 400) {\n return 'FontWeight.Normal'\n }\n if (weight <= 500) {\n return 'FontWeight.Medium'\n }\n if (weight <= 600) {\n return 'FontWeight.SemiBold'\n }\n if (weight <= 700) {\n return 'FontWeight.Bold'\n }\n if (weight <= 800) {\n return 'FontWeight.ExtraBold'\n }\n return 'FontWeight.Black'\n }\n\n private namedFontWeight(name: string): string | undefined {\n const map: Record<string, string> = {\n thin: 'FontWeight.Thin',\n extralight: 'FontWeight.ExtraLight',\n ultralight: 'FontWeight.ExtraLight',\n light: 'FontWeight.Light',\n regular: 'FontWeight.Normal',\n normal: 'FontWeight.Normal',\n medium: 'FontWeight.Medium',\n semibold: 'FontWeight.SemiBold',\n demibold: 'FontWeight.SemiBold',\n bold: 'FontWeight.Bold',\n extrabold: 'FontWeight.ExtraBold',\n heavy: 'FontWeight.ExtraBold',\n black: 'FontWeight.Black',\n ultrabold: 'FontWeight.Black',\n }\n\n return map[name.toLowerCase()]\n }\n\n private formatDurationValue(value: unknown): string {\n if (isDurationObject(value)) {\n return value.unit === 'ms' ? `${value.value}.milliseconds` : `${value.value}.seconds`\n }\n\n return typeof value === 'number' ? `${value}.milliseconds` : '0.milliseconds'\n }\n\n private formatShadowValue(value: unknown, options: ResolvedOptions, depth: number): string {\n if (Array.isArray(value) && value.length > 0) {\n return this.formatSingleShadow(value[0] as Record<string, unknown>, options, depth)\n }\n\n if (typeof value === 'object' && value !== null) {\n return this.formatSingleShadow(value as Record<string, unknown>, options, depth)\n }\n\n return 'ShadowToken(color = Color.Unspecified, elevation = 0.dp, offsetX = 0.dp, offsetY = 0.dp)'\n }\n\n private formatSingleShadow(\n shadow: Record<string, unknown>,\n options: ResolvedOptions,\n depth: number,\n ): string {\n const color = isColorObject(shadow.color)\n ? this.formatColorValue(shadow.color, options)\n : 'Color.Black'\n\n const elevation = isDimensionObject(shadow.blur)\n ? this.formatDimensionValue(shadow.blur)\n : '0.dp'\n\n const offsetX = isDimensionObject(shadow.offsetX)\n ? this.formatDimensionValue(shadow.offsetX)\n : '0.dp'\n\n const offsetY = isDimensionObject(shadow.offsetY)\n ? this.formatDimensionValue(shadow.offsetY)\n : '0.dp'\n\n const propIndent = indentStr(options.indent, depth + 1)\n const closeIndent = indentStr(options.indent, depth)\n return [\n 'ShadowToken(',\n `${propIndent}color = ${color},`,\n `${propIndent}elevation = ${elevation},`,\n `${propIndent}offsetX = ${offsetX},`,\n `${propIndent}offsetY = ${offsetY},`,\n `${closeIndent})`,\n ].join('\\n')\n }\n\n private formatBorderValue(value: unknown, options: ResolvedOptions): string {\n if (typeof value !== 'object' || value === null) {\n return 'BorderStroke(0.dp, Color.Unspecified)'\n }\n\n const border = value as Record<string, unknown>\n const width = isDimensionObject(border.width) ? this.formatDimensionValue(border.width) : '0.dp'\n\n const color = isColorObject(border.color)\n ? this.formatColorValue(border.color, options)\n : 'Color.Unspecified'\n\n return `BorderStroke(${width}, ${color})`\n }\n\n private formatTypographyValue(value: unknown, options: ResolvedOptions, depth: number): string {\n if (typeof value !== 'object' || value === null) {\n return 'TextStyle()'\n }\n\n const typo = value as Record<string, unknown>\n const parts: string[] = []\n\n if (isDimensionObject(typo.fontSize)) {\n const dim = typo.fontSize as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n parts.push(`fontSize = ${spValue}.sp`)\n }\n\n if (typo.fontWeight != null) {\n parts.push(`fontWeight = ${this.formatFontWeightValue(typo.fontWeight)}`)\n }\n\n if (typo.lineHeight != null && typeof typo.lineHeight === 'number') {\n if (isDimensionObject(typo.fontSize)) {\n const dim = typo.fontSize as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n const lineHeightSp = Math.round(spValue * typo.lineHeight * 100) / 100\n parts.push(`lineHeight = ${lineHeightSp}.sp`)\n }\n }\n\n if (isDimensionObject(typo.letterSpacing)) {\n const dim = typo.letterSpacing as DimensionValue\n const spValue = dim.unit === 'rem' ? dim.value * 16 : dim.value\n parts.push(`letterSpacing = ${spValue}.sp`)\n }\n\n if (parts.length === 0) {\n return 'TextStyle()'\n }\n\n const propIndent = indentStr(options.indent, depth + 1)\n const closeIndent = indentStr(options.indent, depth)\n return `TextStyle(\\n${parts.map((p) => `${propIndent}${p}`).join(',\\n')},\\n${closeIndent})`\n }\n\n // -----------------------------------------------------------------------\n // Output: standalone\n // -----------------------------------------------------------------------\n\n private async formatStandalone(\n context: RenderContext,\n options: ResolvedOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'standalone Android',\n )\n\n const files: Record<string, string> = {}\n for (const { tokens, modifierInputs } of context.permutations) {\n const processedTokens = stripInternalMetadata(tokens)\n const content = this.formatTokens(processedTokens, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, modifierInputs)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'kt',\n modifierInputs,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n files[fileName] = content\n }\n\n return outputTree(files)\n }\n\n // -----------------------------------------------------------------------\n // Output: bundle\n // -----------------------------------------------------------------------\n\n private async formatBundle(\n context: RenderContext,\n options: ResolvedOptions,\n ): Promise<RenderOutput> {\n assertFileRequired(\n context.buildPath,\n context.output.file,\n context.output.name,\n 'bundle Android',\n )\n\n const content = this.formatBundleContent(context, options)\n const fileName = context.output.file\n ? resolveFileName(context.output.file, context.meta.basePermutation)\n : buildInMemoryOutputKey({\n outputName: context.output.name,\n extension: 'kt',\n modifierInputs: context.meta.basePermutation,\n resolver: context.resolver,\n defaults: context.meta.defaults,\n })\n\n return outputTree({ [fileName]: content })\n }\n\n private formatBundleContent(context: RenderContext, options: ResolvedOptions): string {\n const allTokenTypes = this.collectAllPermutationTypes(context)\n\n return this.buildFile(allTokenTypes, options, (lines) => {\n const i1 = indentStr(options.indent, 1)\n\n lines.push(`@Suppress(\"unused\")`)\n lines.push(`${options.visPrefix}object ${options.objectName} {`)\n\n for (let idx = 0; idx < context.permutations.length; idx++) {\n const { tokens, modifierInputs } = context.permutations[idx]!\n const processedTokens = stripInternalMetadata(tokens)\n const permName = this.buildPermutationName(modifierInputs)\n lines.push(`${i1}${options.visPrefix}object ${permName} {`)\n this.renderBundleTokens(lines, processedTokens, options, 2)\n lines.push(`${i1}}`)\n if (idx < context.permutations.length - 1) {\n lines.push('')\n }\n }\n\n lines.push('}')\n })\n }\n\n private collectAllPermutationTypes(context: RenderContext): Set<string> {\n const types = new Set<string>()\n for (const { tokens } of context.permutations) {\n for (const t of this.collectTokenTypesFromEntries(stripInternalMetadata(tokens))) {\n types.add(t)\n }\n }\n return types\n }\n\n private renderBundleTokens(\n lines: string[],\n tokens: ResolvedTokens,\n options: ResolvedOptions,\n baseDepth: number,\n ): void {\n if (options.structure === 'flat') {\n const groups = groupTokensByType(tokens, KOTLIN_TYPE_GROUP_MAP)\n this.renderFlatGroups(lines, groups, baseDepth, options)\n return\n }\n\n const tree = this.buildTokenTree(tokens)\n this.renderTreeChildren(lines, tree, baseDepth, options)\n }\n\n private buildPermutationName(modifierInputs: Record<string, string>): string {\n const values = Object.values(modifierInputs)\n if (values.length === 0) {\n return 'Default'\n }\n return values.map((v) => toSafeIdentifier(v, KOTLIN_KEYWORDS, true)).join('')\n }\n}\n\n/**\n * Android/Jetpack Compose renderer factory function.\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'android',\n * renderer: androidRenderer(),\n * options: {\n * packageName: 'com.example.tokens',\n * objectName: 'DesignTokens',\n * colorFormat: 'argb_hex',\n * },\n * file: 'DesignTokens-{theme}.kt'\n * }]\n * ```\n */\nexport function androidRenderer(): Renderer<AndroidRendererOptions> {\n const rendererInstance = new AndroidRenderer()\n return {\n format: (context, options) =>\n rendererInstance.format(\n context,\n options ?? (context.output.options as AndroidRendererOptions | undefined),\n ),\n }\n}\n","/**\n * @fileoverview Renderer system types for token output generation\n *\n * Note: outputs/types has types for both renderers (Renderer, RenderContext)\n * and output configuration (OutputConfig, LifecycleHooks). This works because\n * they're all related to the output phase of token processing.\n */\n\nimport type { Filter } from '@processing/filters/types'\nimport type { ModifierInputs, ResolverDocument } from '@resolution/types'\nimport type { ResolvedTokens } from '@shared/token-types'\nimport type { Transform } from '@processing/transforms/types'\n\n/**\n * Generic options object for renderers\n *\n * Each renderer can define its own specific options that extend this base type.\n */\nexport type FormatOptions = Record<string, unknown>\n\n/**\n * Data for a single permutation (combination of modifier values)\n */\nexport type PermutationData = {\n tokens: ResolvedTokens\n modifierInputs: ModifierInputs\n}\n\n/**\n * Metadata for renderers to reason about modifier dimensions.\n */\nexport type RenderMeta = {\n dimensions: string[]\n defaults: Record<string, string>\n basePermutation: ModifierInputs\n}\n\n/**\n * Context provided to renderer formatters.\n */\nexport type RenderContext<TOptions extends FormatOptions = FormatOptions> = {\n permutations: PermutationData[]\n output: OutputConfig<TOptions>\n resolver: ResolverDocument\n meta: RenderMeta\n buildPath?: string\n}\n\n/**\n * Multi-file output representation for renderers.\n */\nexport type OutputTree = {\n kind: 'outputTree'\n files: Record<string, string>\n}\n\nexport type RenderOutput = string | OutputTree\n\n/**\n * Output from a build operation\n */\nexport type BuildOutput = {\n name: string\n /** File path where output was written (undefined for in-memory mode) */\n path?: string\n content: string\n}\n\n/**\n * Renderer definition for converting tokens to output format\n *\n * Renderers implement a single `format()` method that can return either\n * a single string or an OutputTree for multi-file outputs.\n *\n * @example Simple renderer with format()\n * ```typescript\n * const scssRenderer: Renderer = {\n * format: (context) => {\n * const tokens = context.permutations[0]?.tokens ?? {}\n * return Object.entries(tokens)\n * .map(([name, token]) => `$${name}: ${token.$value};`)\n * .join('\\n')\n * },\n * }\n * ```\n */\nexport type Renderer<TOptions extends FormatOptions = FormatOptions> = {\n /**\n * Preset identifier (e.g., 'bundle', 'standalone', 'modifier')\n * Indicates which variant of the renderer this is\n */\n preset?: string\n\n /**\n * Convert tokens to output content.\n *\n * Renderers receive all resolved permutations and modifier metadata via context.\n * They can return either a single string (single output file) or an OutputTree\n * for multi-file outputs.\n */\n format: (\n context: RenderContext<TOptions>,\n options?: TOptions,\n ) => RenderOutput | Promise<RenderOutput>\n}\n\n/**\n * Helper for defining custom renderers with full type inference.\n *\n * Works like Vue's `defineComponent()` or Vite's `defineConfig()` --\n * an identity function that enables TypeScript to infer the options type\n * from the generic parameter, giving you autocomplete and type-checking\n * on both `context` and `options` inside `format()`.\n *\n * @example\n * ```typescript\n * import { defineRenderer } from 'dispersa/outputs'\n *\n * type MyOptions = { prefix: string; minify?: boolean }\n *\n * const myRenderer = defineRenderer<MyOptions>({\n * format(context, options) {\n * // options is typed as MyOptions | undefined\n * // context.output.options is typed as MyOptions | undefined\n * const prefix = options?.prefix ?? 'token'\n * return Object.entries(context.permutations[0]?.tokens ?? {})\n * .map(([name, token]) => `${prefix}-${name}: ${token.$value}`)\n * .join('\\n')\n * },\n * })\n * ```\n */\nexport function defineRenderer<T extends FormatOptions>(renderer: Renderer<T>): Renderer<T> {\n return renderer\n}\n\n/**\n * Function type for dynamically generating CSS selectors based on modifier context\n *\n * @param modifierName - Name of the modifier (e.g., 'theme', 'breakpoint')\n * @param context - Context value of the modifier (e.g., 'dark', 'mobile')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns CSS selector string (e.g., '[data-theme=\"dark\"]')\n */\nexport type SelectorFunction = (\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n) => string\n\n/**\n * Function type for dynamically generating media queries based on modifier context\n *\n * @param modifierName - Name of the modifier (e.g., 'theme', 'breakpoint')\n * @param context - Context value of the modifier (e.g., 'dark', 'mobile')\n * @param isBase - Whether this is the base permutation\n * @param allModifierInputs - All modifier inputs for this permutation\n * @returns Media query string (e.g., '(max-width: 768px)') or empty string for no media query\n */\nexport type MediaQueryFunction = (\n modifierName: string,\n context: string,\n isBase: boolean,\n allModifierInputs: Record<string, string>,\n) => string\n\n/**\n * Options for CSS custom properties renderer\n *\n * Controls how tokens are converted to CSS custom properties (CSS variables).\n *\n * **Note:** Token naming is controlled through transforms, not renderer options.\n * Use `nameKebabCase()` and `namePrefix()` for naming control.\n *\n * @example String-based selectors\n * ```typescript\n * css({\n * name: 'tokens',\n * file: 'tokens.css',\n * transforms: [nameKebabCase(), namePrefix('ds-')],\n * preset: 'bundle',\n * selector: ':root',\n * })\n * ```\n *\n * @example Function-based selectors\n * ```typescript\n * outputs: [{\n * renderer: cssRenderer(),\n * options: {\n * preset: 'bundle',\n * selector: (modifier, context, isBase, allInputs) => {\n * if (isBase) return ':root'\n * return `[data-${modifier}=\"${context}\"]`\n * },\n * mediaQuery: (modifier, context) => {\n * if (modifier === 'breakpoint' && context === 'mobile') {\n * return '(max-width: 768px)'\n * }\n * return ''\n * }\n * }\n * }]\n * ```\n */\nexport type CssRendererOptions = {\n preset?: 'bundle' | 'standalone' | 'modifier'\n selector?: string | SelectorFunction\n mediaQuery?: string | MediaQueryFunction\n minify?: boolean\n preserveReferences?: boolean\n}\n\n/**\n * Options for JSON renderer\n *\n * Controls the structure and formatting of JSON token output.\n *\n * @example\n * ```typescript\n * {\n * structure: 'flat',\n * minify: true,\n * includeMetadata: true\n * }\n * ```\n */\nexport type { JsonRendererOptions } from '@validation/config-schemas'\n\n/**\n * Options for JavaScript module renderer\n *\n * Generates JavaScript modules for direct import in applications.\n * Aligned with JSON renderer options for consistency.\n *\n * @example\n * ```typescript\n * {\n * structure: 'nested',\n * minify: false,\n * moduleName: 'designTokens'\n * }\n * ```\n */\nexport type { JsModuleRendererOptions } from '@validation/config-schemas'\n\n/**\n * Options for Tailwind CSS v4 renderer\n *\n * Generates CSS with @theme blocks for Tailwind v4+ design token integration.\n */\nexport type { TailwindRendererOptions } from './tailwind/renderer'\n\n/**\n * Options for iOS/SwiftUI renderer\n *\n * Generates Swift code targeting SwiftUI (iOS 17+, Swift 6).\n */\nexport type { IosRendererOptions } from './ios/renderer'\n\n/**\n * Options for Android/Jetpack Compose renderer\n *\n * Generates Kotlin code targeting Jetpack Compose with Material 3.\n *\n * @experimental This type is experimental. Properties and behavior may change.\n */\nexport type { AndroidRendererOptions } from './android/renderer'\n\n/**\n * Result of a token build operation\n *\n * Contains success status, generated output files, and any errors encountered.\n *\n * @example\n * ```typescript\n * const result = await build(config)\n * if (result.success) {\n * result.outputs.forEach(output => {\n * console.log(`Generated ${output.name}: ${output.path}`)\n * })\n * } else {\n * console.error('Build errors:', result.errors)\n * }\n * ```\n */\n/**\n * Error code identifying the type of build error\n */\nexport type ErrorCode =\n | 'TOKEN_REFERENCE'\n | 'CIRCULAR_REFERENCE'\n | 'VALIDATION'\n | 'FILE_OPERATION'\n | 'CONFIGURATION'\n | 'BASE_PERMUTATION'\n | 'MODIFIER'\n | 'UNKNOWN'\n\n/**\n * Structured error from a build operation\n *\n * Preserves typed context from the error hierarchy so consumers\n * can programmatically react to specific failure modes.\n */\nexport type BuildError = {\n /** Human-readable error message */\n message: string\n\n /** Machine-readable error code identifying the failure type */\n code: ErrorCode\n\n /** File path where the error occurred (for file operation errors) */\n path?: string\n\n /** Token path where the error occurred (e.g. 'color.primary') */\n tokenPath?: string\n\n /** Error severity */\n severity: 'error' | 'warning'\n\n /** Suggested alternatives (e.g. similar token names for TOKEN_REFERENCE errors) */\n suggestions?: string[]\n}\n\nexport type BuildResult = {\n /** Whether the build completed successfully */\n success: boolean\n\n /** Array of generated output files */\n outputs: BuildOutput[]\n\n /** Array of errors encountered during build (only present if success is false) */\n errors?: BuildError[]\n}\n\n// ============================================================================\n// OUTPUT CONFIG TYPES\n// ============================================================================\n\n/**\n * Lifecycle hooks for the build process.\n *\n * The same hook type is used on both global build config (BuildConfig.hooks) and\n * per-output config (OutputConfig.hooks). All hooks are optional and support\n * both sync and async functions.\n *\n * **Execution order:**\n * 1. Global `onBuildStart`\n * 2. For each output: per-output `onBuildStart` → process → per-output `onBuildEnd`\n * 3. Global `onBuildEnd`\n */\nexport type LifecycleHooks = {\n /** Called before permutation resolution and output processing begins */\n onBuildStart?: (context: {\n config: unknown\n resolver: string | ResolverDocument\n }) => void | Promise<void>\n\n /** Called after all outputs have been processed (success or failure) */\n onBuildEnd?: (result: BuildResult) => void | Promise<void>\n}\n\n/**\n * Function that generates an output file path based on modifier inputs.\n *\n * Used as the `file` property on OutputConfig and builder configs when\n * the file name needs to vary per permutation.\n */\nexport type FileFunction = (modifierInputs: ModifierInputs) => string\n\n/**\n * Output configuration for a single build target\n *\n * Defines how tokens should be formatted and output for a specific target\n * format (CSS, JSON, JavaScript, etc.).\n *\n * **Processing Order:**\n * - Global filters (from BuildConfig) are applied first to all outputs\n * - Then output-specific filters are applied (AND logic with global filters)\n * - Global transforms are applied next\n * - Finally output-specific transforms are applied\n *\n * **Output File Names:**\n * The `file` field supports subdirectories and dynamic naming patterns.\n * Parent directories are created automatically.\n *\n * @example Using builder helpers (recommended)\n * ```typescript\n * import { css, json } from 'dispersa'\n * import { colorToHex, dimensionToPx } from 'dispersa/transforms'\n *\n * // CSS output with transforms\n * css({\n * name: 'css',\n * file: 'css/tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [colorToHex(), dimensionToPx()],\n * })\n *\n * // JSON output with static filename\n * json({\n * name: 'json',\n * file: 'json/tokens.json',\n * preset: 'standalone',\n * structure: 'flat',\n * })\n * ```\n *\n * @example Pattern-based and function-based filenames\n * ```typescript\n * import { css } from 'dispersa'\n *\n * // Standalone mode with pattern-based filename\n * css({\n * name: 'css-standalone',\n * file: 'tokens-{theme}-{platform}.css', // → tokens-light-web.css, tokens-dark-mobile.css\n * preset: 'standalone',\n * selector: ':root',\n * })\n *\n * // Function-based filename\n * css({\n * name: 'css-custom',\n * preset: 'standalone',\n * selector: ':root',\n * file: (modifierInputs) => {\n * const parts = Object.entries(modifierInputs).map(([k, v]) => `${k}-${v}`)\n * return `tokens-${parts.join('-')}.css`\n * },\n * })\n * ```\n *\n * @see CssRendererOptions\n * @see JsonRendererOptions\n * @see JsModuleRendererOptions\n */\nexport type OutputConfig<TOptions extends FormatOptions = FormatOptions> = {\n /** Unique identifier for this output */\n name: string\n\n /** Renderer instance (created via renderer factory function) */\n renderer: Renderer<TOptions>\n\n /**\n * Array of filter objects to apply\n * Filters are applied before transforms (to select which tokens to process)\n */\n filters?: Filter[]\n\n /** Array of transform objects to apply */\n transforms?: Transform[]\n\n /**\n * Output file path, can be static or dynamic\n *\n * Supports subdirectories (e.g., \"css/tokens.css\").\n * In standalone preset (one file per permutation), supports:\n * - Pattern strings with placeholders: `tokens-{theme}-{platform}.css`\n * - Function that receives modifierInputs: `(modifierInputs) => \\`tokens-${...}.css\\``\n * - Plain string (applies default pattern with all modifiers)\n *\n * @example\n * ```typescript\n * // Static filename (bundle preset or single permutation)\n * file: 'tokens.css'\n *\n * // With subdirectory\n * file: 'css/tokens.css'\n *\n * // Pattern with placeholders (standalone preset)\n * file: 'tokens-{theme}-{platform}.css'\n *\n * // Function for complex logic (standalone preset)\n * file: (modifierInputs) => {\n * const parts = Object.entries(modifierInputs).map(([k, v]) => `${k}-${v}`)\n * return `output/${parts.join('-')}/tokens.css`\n * }\n * ```\n */\n file?: string | FileFunction\n\n /**\n * Renderer-specific options passed to the formatter.\n */\n options?: TOptions\n\n /**\n * Lifecycle hooks for this output.\n *\n * Per-output hooks fire in addition to global hooks on BuildConfig.\n * `onBuildStart` fires before this output is processed,\n * `onBuildEnd` fires after this output finishes (success or failure).\n */\n hooks?: LifecycleHooks\n}\n","/**\n * @fileoverview Built-in name transforms using change-case library for robust case conversion\n */\n\nimport { ResolvedToken } from '@shared/token-types'\nimport { camelCase, kebabCase, snakeCase, pascalCase, constantCase } from 'change-case'\n\nimport type { Transform } from '../types'\n\n/**\n * Convert token name to camelCase\n */\nexport function nameCamelCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = camelCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to kebab-case\n */\nexport function nameKebabCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = kebabCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to snake_case\n */\nexport function nameSnakeCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = snakeCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to PascalCase\n */\nexport function namePascalCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = pascalCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Convert token name to CONSTANT_CASE\n */\nexport function nameConstantCase(): Transform {\n return {\n transform: (token: ResolvedToken) => {\n const name = constantCase(token.path.join(' '))\n return {\n ...token,\n name,\n }\n },\n }\n}\n\n/**\n * Add prefix to token name\n *\n * @example\n * ```typescript\n * // Add 'ds-' prefix to all token names\n * transforms: [namePrefix('ds-')]\n * // 'color.primary' becomes 'ds-color.primary'\n * ```\n */\nexport function namePrefix(prefix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${prefix}${token.name}`,\n }\n },\n }\n}\n\n/**\n * Add suffix to token name\n *\n * @example\n * ```typescript\n * // Add '-token' suffix to all token names\n * transforms: [nameSuffix('-token')]\n * // 'color.primary' becomes 'color.primary-token'\n * ```\n */\nexport function nameSuffix(suffix: string): Transform {\n return {\n transform: (token: ResolvedToken) => {\n return {\n ...token,\n name: `${token.name}${suffix}`,\n }\n },\n }\n}\n","/**\n * @license\n * Copyright (c) 2025 Dispersa Contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @fileoverview Builder functions for creating output configurations\n *\n * These builder functions provide a convenient way to create OutputConfig objects\n * with flattened options for better DX and discoverability.\n */\n\nimport type { FileFunction, LifecycleHooks, OutputConfig } from '@outputs/types'\nimport type { Filter } from '@processing/filters/types'\nimport { nameKebabCase } from '@processing/transforms/built-in/name-transforms'\nimport type { Transform } from '@processing/transforms/types'\nimport { androidRenderer } from '@outputs/android'\nimport { cssRenderer } from '@outputs/css'\nimport { iosRenderer } from '@outputs/ios'\nimport { jsRenderer } from '@outputs/js'\nimport { jsonRenderer } from '@outputs/json'\nimport { tailwindRenderer } from '@outputs/tailwind'\nimport type {\n AndroidRendererOptions,\n CssRendererOptions,\n IosRendererOptions,\n JsModuleRendererOptions,\n JsonRendererOptions,\n TailwindRendererOptions,\n} from '@outputs/types'\n\n// ============================================================================\n// BASE BUILDER CONFIGURATION\n// ============================================================================\n\n/**\n * Base configuration shared across all builders\n */\ntype BuilderConfigBase = {\n /** Unique identifier for this output */\n name: string\n\n /** Output file path (string, pattern with {placeholders}, or function) - optional for in-memory mode */\n file?: string | FileFunction\n\n /** Array of transform functions to apply */\n transforms?: Transform[]\n\n /** Array of filter functions to apply */\n filters?: Filter[]\n\n /** Per-output lifecycle hooks */\n hooks?: LifecycleHooks\n}\n\n// ============================================================================\n// CSS BUILDER\n// ============================================================================\n\n/**\n * CSS builder configuration with flattened options\n */\nexport type CssBuilderConfig = BuilderConfigBase & CssRendererOptions\n\n/**\n * Create CSS output configuration with flattened options\n *\n * Creates an OutputConfig for CSS custom properties output. All CSS-specific options\n * (selector, mediaQuery, etc.) are provided at the top level alongside common options\n * like name and file for improved discoverability.\n *\n * @param config - CSS builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'bundle' for CSS, meaning all themes are combined into\n * one file with appropriate selectors. Use preset: 'standalone' for separate files.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `build()`.\n *\n * @example Basic CSS bundle with transforms\n * ```typescript\n * import { css } from 'dispersa'\n * import { colorToHex } from 'dispersa/transforms'\n *\n * // nameKebabCase() is applied automatically before your transforms\n * const config = css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [colorToHex()]\n * })\n * ```\n *\n * @example Standalone CSS with filters\n * ```typescript\n * import { css } from 'dispersa'\n * import { byType } from 'dispersa/filters'\n *\n * const config = css({\n * name: 'css-colors',\n * file: 'colors-{theme}.css',\n * preset: 'standalone',\n * selector: ':root',\n * filters: [byType('color')]\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { css } from 'dispersa'\n *\n * const config = css({\n * name: 'css',\n * preset: 'bundle',\n * selector: ':root'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function css(config: CssBuilderConfig): OutputConfig<CssRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'bundle',\n ...rendererOptions\n }: CssBuilderConfig = config\n\n return {\n name,\n file,\n renderer: cssRenderer(),\n options: { preset, ...rendererOptions },\n transforms: [nameKebabCase(), ...(transforms ?? [])],\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// JSON BUILDER\n// ============================================================================\n\n/**\n * JSON builder configuration with flattened options\n */\nexport type JsonBuilderConfig = BuilderConfigBase & JsonRendererOptions\n\n/**\n * Create JSON output configuration with flattened options\n *\n * Creates an OutputConfig for JSON token output. All JSON-specific options\n * (structure, includeMetadata, etc.) are provided at the top level for improved\n * discoverability and cleaner configuration.\n *\n * @param config - JSON builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'standalone' for JSON, meaning separate files per theme.\n * Use preset: 'bundle' to combine all themes into one file with metadata.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `build()`.\n *\n * @example Standalone JSON with flat structure\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json',\n * file: 'tokens-{theme}.json',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ```\n *\n * @example Bundle JSON with metadata\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json-bundle',\n * file: 'tokens.json',\n * preset: 'bundle',\n * structure: 'nested',\n * includeMetadata: true\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { json } from 'dispersa'\n *\n * const config = json({\n * name: 'json',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function json(config: JsonBuilderConfig): OutputConfig<JsonRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: jsonRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// JS MODULE BUILDER\n// ============================================================================\n\n/**\n * JS module builder configuration with flattened options\n */\nexport type JsBuilderConfig = BuilderConfigBase & JsModuleRendererOptions\n\n/**\n * Create JavaScript module output configuration with flattened options\n *\n * Creates an OutputConfig for JavaScript/TypeScript module output. All JS-specific\n * options (moduleName, generateHelper, etc.) are provided at the top level for\n * improved discoverability and cleaner configuration.\n *\n * @param config - JS module builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'standalone' for JS, meaning separate files per theme.\n * Use preset: 'bundle' with generateHelper: true to create a single file with\n * a helper function for dynamic theme switching.\n *\n * The `file` property is optional. When omitted, content is returned in-memory instead\n * of being written to disk. The `file` property is required when `buildPath` is provided\n * to `build()`.\n *\n * @example Bundle JS with helper function\n * ```typescript\n * import { js } from 'dispersa'\n * import { nameCamelCase } from 'dispersa/transforms'\n *\n * const config = js({\n * name: 'js',\n * file: 'tokens.js',\n * preset: 'bundle',\n * moduleName: 'tokens',\n * generateHelper: true,\n * transforms: [nameCamelCase()]\n * })\n * ```\n *\n * @example Standalone JS modules\n * ```typescript\n * import { js } from 'dispersa'\n *\n * const config = js({\n * name: 'js-tokens',\n * file: 'tokens-{theme}.js',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * ```\n *\n * @example In-memory mode without file output\n * ```typescript\n * import { js } from 'dispersa'\n *\n * const config = js({\n * name: 'js',\n * preset: 'standalone',\n * structure: 'flat'\n * })\n * // Use without buildPath to get content in-memory\n * const result = await build({ outputs: [config] })\n * console.log(result.outputs[0].content)\n * ```\n */\nexport function js(config: JsBuilderConfig): OutputConfig<JsModuleRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: jsRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// TAILWIND CSS v4 BUILDER\n// ============================================================================\n\n/**\n * Tailwind CSS v4 builder configuration with flattened options\n */\nexport type TailwindBuilderConfig = BuilderConfigBase & TailwindRendererOptions\n\n/**\n * Create Tailwind CSS v4 output configuration with flattened options\n *\n * Creates an OutputConfig for Tailwind v4 @theme CSS output. All Tailwind-specific\n * options (includeImport, namespace, etc.) are provided at the top level for\n * improved discoverability.\n *\n * @param config - Tailwind builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The preset defaults to 'bundle' for Tailwind, meaning the base permutation tokens\n * are used to define the @theme vocabulary. Use preset: 'standalone' for separate files.\n *\n * @example Bundle Tailwind theme with transforms\n * ```typescript\n * import { tailwind } from 'dispersa'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const config = tailwind({\n * name: 'tailwind',\n * file: 'theme.css',\n * preset: 'bundle',\n * includeImport: true,\n * transforms: [nameKebabCase()]\n * })\n * ```\n *\n * @example Standalone files per theme\n * ```typescript\n * import { tailwind } from 'dispersa'\n *\n * const config = tailwind({\n * name: 'tailwind',\n * file: 'theme-{theme}.css',\n * preset: 'standalone',\n * includeImport: false,\n * })\n * ```\n */\nexport function tailwind(config: TailwindBuilderConfig): OutputConfig<TailwindRendererOptions> {\n const { name, file, transforms, filters, hooks, preset = 'bundle', ...rendererOptions } = config\n\n return {\n name,\n file,\n renderer: tailwindRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// iOS / SWIFTUI BUILDER\n// ============================================================================\n\n/**\n * iOS/SwiftUI builder configuration with flattened options\n */\nexport type IosBuilderConfig = BuilderConfigBase & IosRendererOptions\n\n/**\n * Create iOS/SwiftUI output configuration with flattened options\n *\n * Creates an OutputConfig for Swift code generation targeting SwiftUI (iOS 17+, Swift 6).\n * All iOS-specific options (accessLevel, structure, etc.) are provided at the top level.\n *\n * @param config - iOS builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * Only standalone preset is supported. Each permutation generates a separate Swift file.\n *\n * @example Enum-based SwiftUI tokens\n * ```typescript\n * import { ios } from 'dispersa'\n *\n * const config = ios({\n * name: 'ios',\n * file: 'DesignTokens-{theme}.swift',\n * accessLevel: 'public',\n * structure: 'enum',\n * enumName: 'DesignTokens',\n * colorSpace: 'sRGB',\n * })\n * ```\n *\n * @example Grouped SwiftUI tokens (namespace enum + extensions per group)\n * ```typescript\n * import { ios } from 'dispersa'\n *\n * const config = ios({\n * name: 'ios-tokens',\n * file: 'Tokens-{theme}.swift',\n * structure: 'grouped',\n * colorSpace: 'displayP3',\n * })\n * ```\n */\nexport function ios(config: IosBuilderConfig): OutputConfig<IosRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: iosRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n\n// ============================================================================\n// ANDROID / JETPACK COMPOSE BUILDER\n// ============================================================================\n\n/**\n * Android/Jetpack Compose builder configuration with flattened options\n */\nexport type AndroidBuilderConfig = BuilderConfigBase & AndroidRendererOptions\n\n/**\n * Create Android/Jetpack Compose output configuration with flattened options\n *\n * Creates an OutputConfig for Kotlin code generation targeting Jetpack Compose\n * with Material 3. All Android-specific options (packageName, objectName, etc.)\n * are provided at the top level.\n *\n * @experimental This builder is experimental. Options and generated output may change.\n * @param config - Android builder configuration with flattened options\n * @returns Complete OutputConfig ready for use in build()\n *\n * @remarks\n * The `packageName` option is required (Kotlin convention). Supports both\n * `'standalone'` (default, one file per permutation) and `'bundle'` (all\n * permutations in a single file) presets.\n *\n * @example Standalone Compose tokens with hex colors\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android',\n * file: 'DesignTokens-{theme}.kt',\n * packageName: 'com.example.tokens',\n * objectName: 'DesignTokens',\n * colorFormat: 'argb_hex',\n * })\n * ```\n *\n * @example Flat structure with Display P3 colors\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android-tokens',\n * file: 'Tokens-{theme}.kt',\n * packageName: 'com.example.design',\n * structure: 'flat',\n * colorSpace: 'displayP3',\n * colorFormat: 'argb_float',\n * })\n * ```\n *\n * @example Bundle mode — all themes in one file\n * ```typescript\n * import { android } from 'dispersa'\n *\n * const config = android({\n * name: 'android-bundle',\n * file: 'DesignTokens.kt',\n * packageName: 'com.example.tokens',\n * preset: 'bundle',\n * structure: 'flat',\n * })\n * ```\n */\nexport function android(config: AndroidBuilderConfig): OutputConfig<AndroidRendererOptions> {\n const {\n name,\n file,\n transforms,\n filters,\n hooks,\n preset = 'standalone',\n ...rendererOptions\n } = config\n\n return {\n name,\n file,\n renderer: androidRenderer(),\n options: { preset, ...rendererOptions },\n transforms,\n filters,\n hooks,\n }\n}\n","/**\n * @license\n * Copyright (c) 2025 Dispersa Contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @fileoverview Dispersa - DTCG Design Token Processor\n * Main public API exports\n */\n\n// ============================================================================\n// PRIMARY API\n// ============================================================================\n\nexport {\n build,\n buildOrThrow,\n buildPermutation,\n resolveTokens,\n lint,\n resolveAllPermutations,\n generateTypes,\n} from './dispersa'\n\nexport type { LintOptions } from './dispersa'\n\n// ============================================================================\n// PUBLIC TYPES\n// ============================================================================\n\n// Config types\nexport type { OutputConfig, FileFunction, LifecycleHooks } from '@outputs/types'\nexport type { BuildConfig, DispersaOptions } from '@engine/types'\n\n// Validation types\nexport type { ValidationMode, ValidationOptions } from '@shared/types/validation'\n\n// Token types\nexport type {\n ResolvedToken,\n ResolvedTokens,\n DesignTokenValue,\n TokenValue,\n TokenValueReference,\n TokenType,\n ColorToken,\n DimensionToken,\n ShadowToken,\n DurationToken,\n TypographyToken,\n BorderToken,\n TransitionToken,\n GradientToken,\n ColorValueObject,\n ColorValue,\n ColorSpace,\n ColorComponent,\n DimensionValue,\n DurationValue,\n FontFamilyValue,\n FontWeightValue,\n CubicBezierValue,\n ShadowValueObject,\n TypographyValue,\n BorderValue,\n StrokeStyleValue,\n StrokeStyleValueObject,\n TransitionValue,\n GradientValue,\n GradientStop,\n} from '@shared/token-types'\n\n// Token type guards\nexport {\n isColorToken,\n isDimensionToken,\n isShadowToken,\n isTypographyToken,\n isBorderToken,\n isDurationToken,\n isTransitionToken,\n isGradientToken,\n} from '@shared/token-types'\n\n// Transform types\nexport type { Transform } from '@processing/transforms/types'\n\n// Filter types\nexport type { Filter } from '@processing/filters/types'\n\n// Preprocessor types\nexport type { Preprocessor } from '@processing/preprocessors/types'\n\n// Renderer types\nexport type {\n AndroidRendererOptions,\n BuildError,\n BuildOutput,\n BuildResult,\n CssRendererOptions,\n ErrorCode,\n FormatOptions,\n IosRendererOptions,\n JsModuleRendererOptions,\n JsonRendererOptions,\n MediaQueryFunction,\n OutputTree,\n PermutationData,\n Renderer,\n RenderContext,\n RenderMeta,\n RenderOutput,\n SelectorFunction,\n TailwindRendererOptions,\n} from '@outputs/types'\n\n// Resolver types\nexport type { ModifierInputs, ResolverDocument } from '@resolution/types'\n\n// ============================================================================\n// OUTPUT BUILDERS\n// ============================================================================\n\nexport { css, json, js, tailwind, ios, android } from '@outputs'\nexport type {\n AndroidBuilderConfig,\n CssBuilderConfig,\n IosBuilderConfig,\n JsBuilderConfig,\n JsonBuilderConfig,\n TailwindBuilderConfig,\n} from '@outputs'\n\n// ============================================================================\n// CUSTOM RENDERER HELPERS\n// ============================================================================\n\nexport { defineRenderer, outputTree, isOutputTree } from '@outputs'\n\n// ============================================================================\n// ERROR CLASSES\n// ============================================================================\n\nexport {\n DispersaError,\n TokenReferenceError,\n CircularReferenceError,\n ValidationError,\n FileOperationError,\n ConfigurationError,\n BasePermutationError,\n ModifierError,\n LintError,\n} from '@shared/errors/index'\n"]}