dispersa 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/dist/builders.cjs +1832 -0
  3. package/dist/builders.cjs.map +1 -0
  4. package/dist/builders.d.cts +228 -0
  5. package/dist/builders.d.ts +228 -0
  6. package/dist/builders.js +1824 -0
  7. package/dist/builders.js.map +1 -0
  8. package/dist/errors.cjs +110 -0
  9. package/dist/errors.cjs.map +1 -0
  10. package/dist/errors.d.cts +97 -0
  11. package/dist/errors.d.ts +97 -0
  12. package/dist/errors.js +99 -0
  13. package/dist/errors.js.map +1 -0
  14. package/dist/filters.cjs +445 -0
  15. package/dist/filters.cjs.map +1 -0
  16. package/dist/filters.d.cts +86 -0
  17. package/dist/filters.d.ts +86 -0
  18. package/dist/filters.js +440 -0
  19. package/dist/filters.js.map +1 -0
  20. package/dist/index-CPB9Ea9U.d.ts +581 -0
  21. package/dist/index-DKf9WMQG.d.cts +581 -0
  22. package/dist/index.cjs +7843 -0
  23. package/dist/index.cjs.map +1 -0
  24. package/dist/index.d.cts +332 -0
  25. package/dist/index.d.ts +332 -0
  26. package/dist/index.js +7802 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/preprocessors.cjs +13 -0
  29. package/dist/preprocessors.cjs.map +1 -0
  30. package/dist/preprocessors.d.cts +17 -0
  31. package/dist/preprocessors.d.ts +17 -0
  32. package/dist/preprocessors.js +11 -0
  33. package/dist/preprocessors.js.map +1 -0
  34. package/dist/renderers.cjs +28 -0
  35. package/dist/renderers.cjs.map +1 -0
  36. package/dist/renderers.d.cts +43 -0
  37. package/dist/renderers.d.ts +43 -0
  38. package/dist/renderers.js +24 -0
  39. package/dist/renderers.js.map +1 -0
  40. package/dist/transforms.cjs +453 -0
  41. package/dist/transforms.cjs.map +1 -0
  42. package/dist/transforms.d.cts +138 -0
  43. package/dist/transforms.d.ts +138 -0
  44. package/dist/transforms.js +429 -0
  45. package/dist/transforms.js.map +1 -0
  46. package/dist/types-BDY1xBmD.d.cts +30 -0
  47. package/dist/types-C1GpiJ6q.d.cts +368 -0
  48. package/dist/types-C1GpiJ6q.d.ts +368 -0
  49. package/dist/types-Cl-1UYGD.d.ts +30 -0
  50. package/dist/types-DJH6_4U9.d.ts +430 -0
  51. package/dist/types-DM5faYUn.d.cts +43 -0
  52. package/dist/types-DbufGPrb.d.cts +430 -0
  53. package/dist/types-DdPWYkgh.d.ts +43 -0
  54. package/package.json +141 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/utils/token-utils.ts","../src/shared/errors/index.ts","../src/lib/validation/dtcg-schemas/2025.10/format/group.json","../src/lib/validation/dtcg-schemas/2025.10/format/groupOrToken.json","../src/lib/validation/dtcg-schemas/2025.10/format/token.json","../src/lib/validation/dtcg-schemas/2025.10/format/tokenType.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/border.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/color.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/cubicBezier.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/dimension.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/duration.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/fontFamily.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/fontWeight.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/gradient.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/number.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/shadow.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/strokeStyle.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/transition.json","../src/lib/validation/dtcg-schemas/2025.10/format/values/typography.json","../src/lib/validation/dtcg-schemas/2025.10/format.json","../src/lib/validation/dtcg-schemas/2025.10/resolver/modifier.json","../src/lib/validation/dtcg-schemas/2025.10/resolver/resolutionOrder.json","../src/lib/validation/dtcg-schemas/2025.10/resolver/set.json","../src/lib/validation/dtcg-schemas/2025.10/resolver.json","../src/lib/validation/schemas.ts","../src/lib/validation/config-schemas.ts","../src/lib/validation/validator.ts","../src/lib/validation/index.ts","../src/shared/utils/validation-handler.ts","../src/adapters/filesystem/resolver-parser.ts","../src/adapters/filesystem/resolver-loader.ts","../src/renderers/bundlers/utils.ts","../src/renderers/bundlers/js.ts","../src/renderers/bundlers/json.ts","../src/lib/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/lib/processing/token-modifier.ts","../src/build/output-processor.ts","../src/renderers/output-tree.ts","../src/build/pipeline/token-pipeline.ts","../src/shared/constants.ts","../src/lib/resolution/alias-resolver.ts","../src/shared/utils/string-similarity.ts","../src/lib/resolution/reference-resolver.ts","../src/lib/resolution/resolution-engine.ts","../src/shared/utils/case-insensitive-map.ts","../src/lib/resolution/modifier-input-processor.ts","../src/lib/tokens/token-parser.ts","../src/shared/utils/path-utils.ts","../src/lib/tokens/group-extension-resolver.ts","../src/dispersa.ts","../src/lib/tokens/types.ts","../src/lib/processing/processors/transforms/built-in/color-converter.ts","../src/lib/processing/processors/transforms/built-in/dimension-converter.ts","../src/renderers/css.ts","../src/renderers/bundlers/css.ts","../src/renderers/js-module.ts","../src/renderers/json.ts","../src/builders.ts","../src/renderers/types.ts","../src/index.ts"],"names":["path","path2","fsConstants","path3","ResolverLoader","path4","access","readFile","mkdir","writeFile","path5","resolved","path6","css","bundleAsJsModule","prettier","bundleAsJson"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @fileoverview Token utility functions\n */\n\nimport type { InternalResolvedTokens, ResolvedToken, ResolvedTokens } from '@lib/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 // CSS comment format: \"DEPRECATED: message\" or just \"DEPRECATED\"\n const msg = deprecationMsg ? ` ${deprecationMsg}` : ''\n return `DEPRECATED${msg}`\n } else {\n // Bracket format: \"[DEPRECATED: message]\" or \"[DEPRECATED]\"\n const msg = deprecationMsg ? `: ${deprecationMsg}` : ''\n const prefix = `[DEPRECATED${msg}]`\n return description ? `${prefix} ${description}` : prefix\n }\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 * 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","/**\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 a color format cannot be parsed\n */\nexport class ColorParseError extends DispersaError {\n constructor(public colorValue: string) {\n super(`Color parsing failed: '${colorValue}'. Provide a valid CSS color or DTCG color object.`)\n this.name = 'ColorParseError'\n }\n}\n\n/**\n * Thrown when a dimension format is invalid\n */\nexport class DimensionFormatError extends DispersaError {\n constructor(public dimensionValue: string) {\n super(`Dimension parsing failed: '${dimensionValue}'. Provide a valid DTCG dimension object.`)\n this.name = 'DimensionFormatError'\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 \"$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/**\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 * 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 hooks: {\n type: 'object',\n description: 'Global build lifecycle hooks (functions, validated at runtime)',\n additionalProperties: true,\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/**\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 * @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: object): void {\n const validate = this.ajv.compile(schema as Record<string, unknown>)\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 // Looks like a token - validate as token\n const tokenErrors = this.validateToken(obj)\n if (tokenErrors.length === 0) {\n return { type: 'token', errors: [] }\n }\n // Failed as token, but it clearly has $value/$ref, so it's an invalid token\n return {\n type: 'invalid',\n errors: tokenErrors,\n message: 'Object has $value/$ref but failed token validation',\n }\n } else {\n // Looks like a group - validate as group\n const groupErrors = this.validateGroup(obj)\n if (groupErrors.length === 0) {\n return { type: 'group', errors: [] }\n }\n\n // Failed as group - could it be a malformed token?\n const tokenErrors = this.validateToken(obj)\n if (tokenErrors.length === 0) {\n return { type: 'token', errors: [] }\n }\n\n // Failed both - return better error\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 /**\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 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 * @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 '@lib/resolution/resolution.types'\nimport { SchemaValidator } from '@lib/validation/index'\nimport { FileOperationError, ValidationError } from '@shared/errors/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\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 // Check sets\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 // Check modifiers\n if (resolver.modifiers) {\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\n /**\n * Validate source references in an array\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 const ref = (source as { $ref: string }).$ref\n\n // MUST NOT reference modifiers from sets/modifiers\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 // MUST NOT reference resolutionOrder items\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 /**\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 '@lib/resolution/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 // File-based: load from filesystem\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 } else {\n // In-memory: validate the inline object\n const resolverDoc = this.parser.parseInline(resolver)\n // Use configured base directory for any file references\n return { resolverDoc, baseDir: this.options.baseDir }\n }\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 * @fileoverview Shared utilities for bundlers\n */\n\nimport type { ModifierInputs, ResolvedTokens } from '@config/index'\nimport type { ResolverDocument } from '@lib/resolution/resolution.types'\nimport type { InternalResolvedTokens } from '@lib/tokens/types'\nimport type { MediaQueryFunction, SelectorFunction } from '@renderers/types'\nimport { stripInternalTokenMetadata } from '@shared/utils/token-utils'\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 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 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 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 normalizedInputs = normalizeModifierInputs(modifierInputs)\n const normalizedDefaults = normalizeModifierInputs(defaults)\n const isBase = Object.entries(normalizedDefaults).every(\n ([key, value]) => normalizedInputs[key] === value,\n )\n const permutationKey = generatePermutationKey(modifierInputs, resolver, isBase)\n return `${outputName}-${permutationKey}.${extension}`\n}\n\n/**\n * Build metadata for bundle formats\n */\nexport function buildMetadata(resolver: ResolverDocument): {\n dimensions: string[]\n defaults: Record<string, string>\n} {\n const metadata: {\n dimensions: string[]\n defaults: Record<string, string>\n } = {\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 * 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', output: 'mobile'}\n * becomes \"tokens-dark-mobile.css\".\n *\n * Also supports {modifierName} and {context} for modifier-specific files.\n *\n * @param pattern - Filename pattern with {key} placeholders\n * @param modifierInputs - Modifier values to interpolate\n * @param modifierName - Optional specific modifier name for {modifierName} placeholder\n * @param context - Optional specific context value for {context} placeholder\n * @returns Interpolated filename\n */\nexport function interpolatePattern(\n pattern: string,\n modifierInputs: ModifierInputs,\n modifierName?: string,\n context?: string,\n): string {\n let result = pattern\n\n // Replace {modifierName} and {context} if provided\n if (modifierName !== undefined) {\n result = result.replace(/\\{modifierName\\}/g, modifierName)\n }\n if (context !== undefined) {\n result = result.replace(/\\{context\\}/g, context)\n }\n\n // Replace modifier input placeholders\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 * @param modifierName - Optional specific modifier name for {modifierName} placeholder\n * @param context - Optional specific context value for {context} placeholder\n * @returns Resolved filename\n */\nexport function resolveFileName(\n fileName: string | ((modifierInputs: ModifierInputs) => string),\n modifierInputs: ModifierInputs,\n modifierName?: string,\n context?: string,\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, modifierName, context)\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 // If modifierName and context are provided (modifier mode), use only those\n if (modifierName !== undefined && context !== undefined) {\n return `${baseName}-${modifierName}-${context}${extension}`\n }\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 * @fileoverview JavaScript module bundler for multi-theme output\n */\n\nimport type { ResolverDocument } from '@lib/resolution/resolution.types'\nimport type { ResolvedTokens } from '@lib/tokens/types'\nimport type { JsModuleRendererOptions } from '@renderers/types'\nimport { ConfigurationError } from '@shared/errors/index'\n\nimport type { BundleDataItem } from './types'\nimport { buildMetadata, normalizeModifierInputs, stripInternalMetadata } from './utils'\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 // Find the start of the object assignment: \"const name = {\"\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 // Include the opening brace\n let braceCount = 0\n let inString = false\n let stringChar = ''\n let escaped = false\n\n for (let i = startIndex; i < formattedJs.length; i++) {\n const char = formattedJs[i]\n\n // Handle string literals (ignore braces inside strings)\n if (!escaped && (char === '\"' || char === \"'\" || char === '`')) {\n if (!inString) {\n inString = true\n stringChar = char\n } else if (char === stringChar) {\n inString = false\n stringChar = ''\n }\n }\n\n // Track escape sequences\n escaped = !escaped && char === '\\\\'\n\n // Count braces when not in a string\n if (!inString) {\n if (char === '{') {\n braceCount++\n } else if (char === '}') {\n braceCount--\n if (braceCount === 0) {\n // Found the matching closing brace\n return formattedJs.substring(startIndex, i + 1)\n }\n }\n }\n }\n\n // Fallback if no matching brace found\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: ReturnType<typeof buildMetadata>,\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 } 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 const formattedJs = await formatTokens(cleanTokens)\n const tokenObject = extractObjectFromJsModule(formattedJs)\n const indentedObject = tokenObject.replace(/\\n/g, '\\n ')\n jsBlocks.push(` // ${key}\\n ${JSON.stringify(camelKey)}: ${indentedObject}`)\n }\n\n return assembleJsBundle(metadata, jsBlocks, options?.generateHelper ?? false)\n}\n","/**\n * @fileoverview JSON bundler for multi-theme output\n */\n\nimport type { ResolverDocument } from '@lib/resolution/resolution.types'\nimport type { ResolvedTokens } from '@lib/tokens/types'\nimport { ConfigurationError } from '@shared/errors/index'\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 // Build metadata\n const metadata = buildMetadata(resolver)\n\n // Build tokens object\n const tokens: Record<string, unknown> = {}\n for (const { tokens: tokenSet, modifierInputs } of bundleData) {\n // Strip internal metadata before formatting\n const cleanTokens = stripInternalMetadata(tokenSet)\n\n // Generate key from full modifier inputs for all combinations\n if (!formatTokens) {\n throw new ConfigurationError('JSON formatter was not provided')\n }\n\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 // Return complete bundle with metadata\n const bundle = {\n _meta: metadata,\n tokens,\n }\n\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 '@lib/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 } else {\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\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 if (options.exportType === 'type') {\n lines.push(`export type ${options.moduleName} = {`)\n this.addStructureProperties(lines, structure, 1)\n lines.push('}')\n } else {\n lines.push(`export interface ${options.moduleName} {`)\n this.addStructureProperties(lines, structure, 1)\n lines.push('}')\n }\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 '@lib/codegen/type-generator'\nimport type { ResolvedTokens } from '@lib/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 {\n BuildConfig,\n BuildResult,\n ResolverDocument\n} from '@config/index'\nimport { buildMetadata, resolveResolverDocument } from '@renderers/bundlers/utils'\nimport type { PermutationData, RenderContext } from '@renderers/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 let permutations: PermutationData[]\n \n // Check if we should use explicit permutations or auto-discover\n // Note: Resolver errors (file not found, invalid config) will throw and bubble up\n if (config.permutations && config.permutations.length > 0) {\n // Explicit permutations: resolve each one with global transforms/filters\n 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 } else {\n // Auto-discover all permutations with global transforms/filters\n permutations = await this.pipeline.resolveAllPermutations(\n resolver,\n config.transforms,\n config.preprocessors,\n config.filters,\n )\n }\n \n // Execute build - errors during build execution (renderers, transforms) are caught here\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 const outputs: BuildResult['outputs'] = []\n const errors: BuildResult['errors'] = []\n\n try {\n const resolverDoc = await resolveResolverDocument(resolver)\n const metadata = buildMetadata(resolverDoc)\n const basePermutation = metadata.defaults\n\n // Process all outputs in parallel -- each output is independent\n // (own renderer, own filters/transforms, own file paths)\n const settled = await Promise.allSettled(\n config.outputs.map(async (output) => {\n // Fire per-output onBuildStart hook\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, basePermutation, buildPath)\n\n // Fire per-output onBuildEnd hook\n if (output.hooks?.onBuildEnd) {\n await output.hooks.onBuildEnd({ success: true, outputs: results })\n }\n\n return results\n } catch (error) {\n // Fire per-output onBuildEnd hook even on failure\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\n // Collect results and errors from settled promises\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 const result: BuildResult = {\n success: errors.length === 0,\n outputs,\n errors: errors.length > 0 ? errors : undefined,\n }\n\n // Fire global onBuildEnd hook after all outputs have been processed\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 // Fire global onBuildEnd hook even on top-level failure\n if (config.hooks?.onBuildEnd) {\n await config.hooks.onBuildEnd(result)\n }\n\n return result\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 ColorParseError,\n ConfigurationError,\n DimensionFormatError,\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 ColorParseError) {\n return { message, code: 'COLOR_PARSE', severity: 'error' }\n }\n if (error instanceof DimensionFormatError) {\n return { message, code: 'DIMENSION_FORMAT', 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 '@lib/processing/processors/filters/types'\nimport type { Transform } from '@lib/processing/processors/transforms/types'\nimport type { ResolvedTokens } from '@lib/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 { ModifierInputs, OutputConfig, ResolvedTokens } from '@config/index'\nimport { applyFilters, applyTransforms } from '@lib/processing/token-modifier'\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 → 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 type {\n Filter,\n ModifierInputs,\n Preprocessor,\n ResolverDocument,\n Transform,\n} from '@config/index'\nimport type { ValidationOptions } from '@shared/types/validation'\nimport { ValidationHandler } from '@shared/utils/validation-handler'\nimport { applyFilters, applyTransforms } from '@lib/processing/token-modifier'\nimport { AliasResolver } from '@lib/resolution/alias-resolver'\nimport { ReferenceResolver } from '@lib/resolution/reference-resolver'\nimport { ResolutionEngine } from '@lib/resolution/resolution-engine'\nimport { TokenParser } from '@lib/tokens/token-parser'\nimport type { InternalResolvedTokens, InternalTokenDocument } from '@lib/tokens/types'\nimport type {\n AliasResolvedStage,\n EngineReadyStage,\n FinalStage,\n FlattenedStage,\n LoadedResolverStage,\n PreprocessedStage,\n ReferenceResolvedStage,\n RawTokensStage,\n} from './pipeline-stages'\n\nexport type TokenPipelineOptions = {\n validation?: ValidationOptions\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. Apply filters (if provided) — runs first to remove tokens before transforms\n * 9. 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 * @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<{\n tokens: InternalResolvedTokens\n resolutionEngine: ResolutionEngine\n modifierInputs: ModifierInputs\n }> {\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-9 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 filtered = this.applyFilterStage(aliasResolved, 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: Apply filters to final tokens (before transforms to skip unnecessary work)\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 9: 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 * 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 * @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 type { InternalResolvedToken, InternalResolvedTokens, TokenValue } from '@lib/tokens/types'\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'\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 './resolution.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 type { InternalTokenDocument } from '@lib/tokens/types'\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'\n\nimport { ModifierInputProcessor } from './modifier-input-processor'\nimport { ReferenceResolver } from './reference-resolver'\nimport type {\n Modifier,\n ModifierInputs,\n ReferenceObject,\n ResolverDocument,\n Set,\n} from './resolution.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 ): InternalTokenDocument {\n const result = { ...target }\n\n for (const [key, value] of Object.entries(source)) {\n if (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !('$value' in value)\n ) {\n // Recursively merge groups\n result[key] = this.mergeTokens(\n ((result[key] as InternalTokenDocument | undefined) ?? {}) as InternalTokenDocument,\n value as InternalTokenDocument,\n )\n } else {\n // Override token values\n result[key] = value\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 './resolution.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 { SchemaValidator } from '@lib/validation/validator'\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'\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\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 {\n BuildConfig,\n BuildResult,\n ModifierInputs,\n ResolvedTokens,\n ResolverDocument,\n DispersaOptions,\n} from '@config/index'\nimport { SchemaValidator } from '@lib/validation/validator'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { toBuildError } from '@shared/utils/error-utils'\nimport { stripInternalTokenMetadata } from '@shared/utils/token-utils'\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 * Dispersa validates all configuration inputs at runtime, including constructor options,\n * build configs, output configs, and custom component registrations. This catches\n * configuration errors 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 usage with constructor defaults\n * ```typescript\n * const dispersa = new Dispersa({\n * resolver: './tokens.resolver.json',\n * buildPath: './output'\n * })\n *\n * const result = await dispersa.build({\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 { css, json } from 'dispersa'\n *\n * const dispersa = new Dispersa({\n * resolver: './tokens.resolver.json',\n * buildPath: './output'\n * })\n *\n * await dispersa.build({\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 { css } from 'dispersa'\n * import { byType } from 'dispersa/filters'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const dispersa = new Dispersa({\n * resolver: './tokens.resolver.json',\n * buildPath: './output'\n * })\n *\n * await dispersa.build({\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 class Dispersa {\n private validator: SchemaValidator\n private pipeline: TokenPipeline\n private outputProcessor: OutputProcessor\n private orchestrator: BuildOrchestrator\n private options: DispersaOptions\n\n /**\n * Creates a new Dispersa instance\n *\n * @param options - Configuration options (optional, can be empty object)\n * @param options.resolver - Default resolver (file path or inline object, optional if provided at build time)\n * @param options.buildPath - Default output directory for generated files (omit for in-memory mode)\n * @throws {ConfigurationError} If options are invalid and validation is enabled\n */\n constructor(options: DispersaOptions = {}) {\n this.options = options\n\n // Initialize validator\n this.validator = new SchemaValidator()\n\n // Validate constructor options\n const errors = this.validator.validateDispersaOptions(options)\n if (errors.length > 0) {\n throw new ConfigurationError(\n `Invalid Dispersa options: ${this.validator.getErrorMessage(errors)}`,\n )\n }\n\n // Initialize pipeline and processor\n this.pipeline = new TokenPipeline({ validation: options.validation })\n this.outputProcessor = new OutputProcessor()\n\n // Initialize build orchestrator\n this.orchestrator = new BuildOrchestrator(this.pipeline, this.outputProcessor)\n }\n\n /**\n * Builds design tokens from a resolver configuration\n *\n * Processes tokens through the resolution pipeline, applies preprocessors,\n * transforms, and filters, then generates output files in multiple formats\n * for specified outputs.\n *\n * **Runtime Validation:**\n * This method validates the build configuration\n * and all output configurations before processing, throwing helpful errors for\n * invalid inputs.\n *\n * **Permutation Handling:**\n * - If `config.permutations` is provided and non-empty, builds those specific permutations\n * - If `config.permutations` is undefined or empty, auto-discovers all permutations from resolver\n *\n * @param config - Build configuration\n * @param config.resolver - Resolver configuration (file path or inline object, optional if set in constructor)\n * @param config.outputs - Array of output configurations (renderers, transforms, filters)\n * @param config.buildPath - Output directory for generated files (omit for in-memory mode, optional if set in constructor)\n * @param config.transforms - Global transforms to apply to all tokens\n * @param config.preprocessors - Global preprocessors to apply before parsing\n * @param config.permutations - Array of modifier inputs for generating variations\n * @returns Build result with success status and generated output files\n * @throws {ConfigurationError} If configuration is invalid\n * @throws {FileOperationError} If file operations fail\n *\n * @example Basic build\n * ```typescript\n * const dispersa = new Dispersa({\n * resolver: './tokens.resolver.json',\n * buildPath: './output'\n * })\n *\n * const result = await dispersa.build({\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 With filters and multiple presets\n * ```typescript\n * const result = await dispersa.build({\n * resolver: './tokens.resolver.json',\n * outputs: [\n * css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root', // All themes in one 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 * buildPath: './output',\n * permutations: [\n * { theme: 'light' },\n * { theme: 'dark' }\n * ]\n * })\n * ```\n */\n async build(config: BuildConfig): Promise<BuildResult> {\n try {\n return await this.buildOrThrow(config)\n } catch (error) {\n return {\n success: false,\n outputs: [],\n errors: [toBuildError(error)],\n }\n }\n }\n\n /**\n * Builds design tokens and throws on any failure.\n *\n * Unlike {@link build}, which catches errors and returns them inside\n * `BuildResult.errors`, this method propagates the first error as an\n * exception. Use it when you want fail-fast behavior in CLI or CI workflows.\n *\n * @param config - Build configuration specifying resolver, outputs, transforms, etc.\n * @returns A successful `BuildResult` (never contains errors)\n * @throws {ConfigurationError} When the build config or resolver is invalid\n * @throws {DispersaError} When token resolution, transforms, or rendering fails\n *\n * @example\n * ```typescript\n * try {\n * const result = await dispersa.buildOrThrow({\n * resolver: './tokens.resolver.json',\n * outputs: [css({ name: 'css', file: 'tokens.css' })],\n * buildPath: './output',\n * })\n * } catch (error) {\n * process.exit(1)\n * }\n * ```\n */\n async buildOrThrow(config: BuildConfig): Promise<BuildResult> {\n // Validate overall build config structure\n const configErrors = this.validator.validateBuildConfig(config)\n if (configErrors.length > 0) {\n throw new ConfigurationError(\n `Invalid build configuration: ${this.validator.getErrorMessage(configErrors)}`,\n )\n }\n\n // Validate each output config\n for (const output of config.outputs) {\n const outputErrors = this.validator.validateOutputConfig(output)\n if (outputErrors.length > 0) {\n throw new ConfigurationError(\n `Invalid output '${output.name}': ${this.validator.getErrorMessage(outputErrors)}`,\n )\n }\n }\n\n // Resolve config with constructor defaults\n const { resolver, buildPath } = this.resolveConfig(config)\n\n // Delegate to orchestrator\n return this.orchestrator.build(resolver, buildPath, config)\n }\n\n /**\n * Builds tokens for a single permutation with all configured outputs\n *\n * Convenience wrapper around `build()` that forces a single permutation.\n * This means it has the same runtime validation and error semantics as `build()`:\n * it returns a `BuildResult` object rather than throwing (use `buildOrThrow()` if you\n * want fail-fast behavior).\n *\n * @param config - Build configuration\n * @param modifierInputs - Modifier values (e.g., `{ theme: 'dark' }`)\n * @returns Build result (success, outputs, optional errors)\n */\n async buildPermutation(\n config: BuildConfig,\n modifierInputs: ModifierInputs = {},\n ): Promise<BuildResult> {\n return await this.build({\n ...config,\n permutations: [modifierInputs],\n })\n }\n\n /**\n * Resolve configuration with constructor defaults\n */\n private resolveConfig(config: Partial<BuildConfig>): {\n resolver: string | ResolverDocument\n buildPath: string\n } {\n const resolver = config.resolver ?? this.options.resolver\n const buildPath = config.buildPath ?? this.options.buildPath ?? ''\n\n if (!resolver) {\n throw new ConfigurationError(\n 'resolver must be provided either in constructor options or build config',\n )\n }\n\n return { resolver, buildPath }\n }\n\n /**\n * Resolves tokens for a specific permutation without generating output files\n *\n * Useful for programmatic access to resolved token values, testing,\n * or implementing custom output logic. Returns fully resolved tokens\n * with all references and aliases resolved.\n *\n * @param resolver - Resolver configuration (file path or inline object)\n * @param modifierInputs - Modifier values for this permutation (e.g., `{ theme: 'dark' }`)\n * @returns Object mapping token names to resolved token objects\n * @throws {FileOperationError} If resolver file cannot be read\n * @throws {TokenReferenceError} If token references cannot be resolved (when validate is enabled)\n *\n * @example\n * ```typescript\n * const tokens = await dispersa.resolveTokens(\n * './tokens.resolver.json',\n * { theme: 'dark' }\n * )\n *\n * console.log(tokens['color.background'].$value) // '#1a1a1a'\n * ```\n */\n async resolveTokens(\n resolver: string | ResolverDocument,\n modifierInputs: ModifierInputs = {},\n ): Promise<ResolvedTokens> {\n const { tokens } = await this.pipeline.resolve(resolver, modifierInputs)\n return stripInternalTokenMetadata(tokens)\n }\n\n /**\n * Resolves tokens for all permutations defined in the resolver\n *\n * Auto-discovers all possible permutations from the resolver's modifier\n * definitions and resolves tokens for each one. Useful for generating\n * comprehensive token sets or validating all theme variations.\n *\n * @param resolver - Resolver configuration (file path or inline object)\n * @returns Array of resolved token sets with their modifier inputs\n * @throws {FileOperationError} If resolver file cannot be read\n * @throws {TokenReferenceError} If token references cannot be resolved (when validate is enabled)\n *\n * @example\n * ```typescript\n * const permutations = await dispersa.resolveAllPermutations(\n * './tokens.resolver.json'\n * )\n *\n * permutations.forEach(({ tokens, modifierInputs }) => {\n * console.log(`Theme: ${modifierInputs.theme}`)\n * console.log(`Tokens: ${Object.keys(tokens).length}`)\n * })\n * ```\n */\n async resolveAllPermutations(resolver: string | ResolverDocument): Promise<\n {\n tokens: ResolvedTokens\n modifierInputs: ModifierInputs\n }[]\n > {\n const permutations = await this.pipeline.resolveAllPermutations(resolver)\n return permutations.map(({ tokens, modifierInputs }) => ({\n tokens: stripInternalTokenMetadata(tokens),\n modifierInputs,\n }))\n }\n\n /**\n * Generates TypeScript type definitions from resolved tokens\n *\n * Creates a `.d.ts` file with type-safe token definitions including:\n * - Token name union type for autocomplete\n * - Token value types\n * - Nested structure types matching token organization\n *\n * @param tokens - Resolved tokens object\n * @param fileName - Path for the generated `.d.ts` file\n * @param options - Generation options\n * @param options.moduleName - Name for the exported types (default: 'Tokens')\n * @returns Promise that resolves when file is written\n * @throws {FileOperationError} If file cannot be written\n *\n * @example\n * ```typescript\n * const tokens = await dispersa.resolveTokens('./tokens.resolver.json')\n * await dispersa.generateTypes(tokens, './src/tokens.d.ts', {\n * moduleName: 'DesignTokens'\n * })\n *\n * // Generated types can be used like:\n * // const tokenName: TokenName = 'color.background'\n * // const tokens: DesignTokens = { ... }\n * ```\n */\n async 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","/**\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 * Typography token type\n */\nexport type TypographyToken = Token & {\n $type: 'typography'\n $value: TypographyValue | TokenValueReference\n}\n\n/**\n * Border token type\n */\nexport type BorderToken = Token & {\n $type: 'border'\n $value: BorderValue | TokenValueReference\n}\n\n/**\n * Stroke style token type\n */\nexport type StrokeStyleToken = Token & {\n $type: 'strokeStyle'\n $value: StrokeStyleValue | TokenValueReference\n}\n\n/**\n * Transition token type\n */\nexport type TransitionToken = Token & {\n $type: 'transition'\n $value: TransitionValue | TokenValueReference\n}\n\n/**\n * Gradient token type\n */\nexport type GradientToken = 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 | boolean\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 TypographyTokenNarrowed = ResolvedToken & { $type: 'typography' }\n\n/** Type-narrowed token whose `$value` is a `BorderValue` */\nexport type BorderTokenNarrowed = 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 TransitionTokenNarrowed = ResolvedToken & { $type: 'transition' }\n\n/** Type-narrowed token whose `$value` is a `GradientValue` */\nexport type GradientTokenNarrowed = 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 TypographyTokenNarrowed {\n return token.$type === 'typography'\n}\n\n/** Check if a resolved token is a border token */\nexport function isBorderToken(token: ResolvedToken): token is BorderTokenNarrowed {\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 TransitionTokenNarrowed {\n return token.$type === 'transition'\n}\n\n/** Check if a resolved token is a gradient token */\nexport function isGradientToken(token: ResolvedToken): token is GradientTokenNarrowed {\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 '@lib/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 type { DimensionValue } from '@lib/tokens/types'\nimport { DEFAULT_BASE_FONT_SIZE_PX } from '@shared/constants'\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 CSS renderer with theme selector support\n * Supports DTCG 2025.10 color and dimension object formats\n */\n\nimport {\n colorObjectToHex,\n isColorObject,\n} from '@lib/processing/processors/transforms/built-in/color-converter'\nimport {\n dimensionObjectToString,\n isDimensionObject,\n} from '@lib/processing/processors/transforms/built-in/dimension-converter'\nimport type {\n DimensionValue,\n DurationValue,\n ResolvedToken,\n ResolvedTokens,\n} from '@lib/tokens/types'\nimport { ConfigurationError } from '@shared/errors/index'\nimport {\n formatDeprecationMessage,\n getPureAliasReferenceName,\n getSortedTokenEntries,\n} from '@shared/utils/token-utils'\nimport prettier from 'prettier'\n\nimport { bundleAsCss } from './bundlers/css'\nimport {\n buildInMemoryOutputKey,\n filterTokensBySource,\n normalizeModifierInputs,\n resolveMediaQuery,\n resolveFileName,\n resolveSelector,\n} from './bundlers/utils'\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 Shadow = {\n color: unknown\n offsetX: DimensionValue\n offsetY: DimensionValue\n blur: DimensionValue\n spread?: DimensionValue\n inset?: boolean\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 private sanitizeCssCommentText(text: string): string {\n return text.replace(/\\*\\//g, '*\\\\/').replace(/\\r?\\n/g, ' ').trim()\n }\n\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 referenceTokens: undefined,\n ...options,\n }\n\n const groups = this.groupTokens(tokens, opts)\n const referenceTokens = opts.referenceTokens ?? tokens\n const lines: string[] = []\n\n for (const [selector, groupTokens] of Object.entries(groups)) {\n this.buildCssBlock(lines, groupTokens, selector, tokens, referenceTokens, opts)\n }\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 if (token.$deprecated != null && token.$deprecated !== false) {\n const deprecationMsg = formatDeprecationMessage(token, '', 'comment')\n lines.push(`${indent}/* ${this.sanitizeCssCommentText(deprecationMsg)} */${newline}`)\n }\n\n if (token.$description && token.$description !== '') {\n lines.push(`${indent}/* ${this.sanitizeCssCommentText(token.$description)} */${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 /**\n * Group tokens by selector (for theme support)\n */\n private groupTokens(\n tokens: ResolvedTokens,\n options: Required<CssRendererOptions>,\n ): Record<string, ResolvedToken[]> {\n const sortedTokens = getSortedTokenEntries(tokens).map(([, token]) => token)\n return {\n [options.selector as string]: sortedTokens,\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 Shadow\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) || this.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 (this.isDurationObject(value)) {\n return this.formatDurationValue(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 private 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 private formatDurationValue(value: DurationValue): string {\n if (typeof value === 'string') {\n return value\n }\n return `${value.value}${value.unit}`\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 (this.isDurationObject(value)) {\n return this.formatDurationValue(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.map((shadowObj) => this.formatShadow(shadowObj as unknown as Shadow)).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 Shadow)\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: Shadow): 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 (this.isDurationObject(value.duration)) {\n parts.push(this.formatDurationValue(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 (this.isDurationObject(value.delay)) {\n parts.push(this.formatDurationValue(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: this.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 const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for standalone CSS output`,\n )\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 = this.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 const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for modifier CSS output`,\n )\n }\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 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 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, modifierName, contextValue)\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 private 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(\n ([key, value]) => normalizedInputs[key] === value,\n )\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 * @fileoverview CSS bundler for multi-theme output\n */\n\nimport type { ResolverDocument } from '@lib/resolution/resolution.types'\nimport type { ResolvedToken, ResolvedTokens } from '@lib/tokens/types'\nimport type { CssRendererOptions } from '@renderers/types'\nimport { BasePermutationError, ConfigurationError } from '@shared/errors/index'\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\ntype ResolvedCssOptions = Omit<CssRendererOptions, 'selector' | 'mediaQuery'> & {\n selector?: string\n mediaQuery?: string\n referenceTokens?: ResolvedTokens\n}\n\ntype TokenWithSource = ResolvedToken & {\n _sourceSet?: string\n _sourceModifier?: string\n}\n\nconst getSourceSet = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n const maybe = token as TokenWithSource\n return typeof maybe._sourceSet === 'string' ? maybe._sourceSet : undefined\n}\n\nconst getSourceModifier = (token: ResolvedToken): string | undefined => {\n if (typeof token !== 'object' || token === null) {\n return undefined\n }\n const maybe = token as TokenWithSource\n return typeof maybe._sourceModifier === 'string' ? maybe._sourceModifier : 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\ntype DefaultLayerBlock = {\n key: string\n description?: string\n tokens: BundleDataItem['tokens']\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\nfunction buildDefaultLayerBlocks(\n tokens: BundleDataItem['tokens'],\n baseModifierInputs: Record<string, string>,\n resolver: ResolverDocument,\n): DefaultLayerBlock[] {\n const blocks: DefaultLayerBlock[] = []\n const included = new Set<string>()\n const baseInputs = normalizeModifierInputs(baseModifierInputs)\n\n const addBlock = (key: string, blockTokens: BundleDataItem['tokens'], description?: string) => {\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 for (const item of resolver.resolutionOrder) {\n const ref = (item as { $ref?: unknown }).$ref\n if (typeof ref !== 'string') {\n continue\n }\n\n if (ref.startsWith('#/sets/')) {\n const setName = ref.slice('#/sets/'.length)\n addBlock(\n `Set: ${setName}`,\n collectSetTokens(tokens, setName, included),\n resolver.sets?.[setName]?.description,\n )\n continue\n }\n\n if (ref.startsWith('#/modifiers/')) {\n const modifierName = ref.slice('#/modifiers/'.length)\n const modifier = resolver.modifiers?.[modifierName]\n const selectedContext = baseInputs[modifierName.toLowerCase()]\n if (!modifier || !selectedContext) {\n continue\n }\n\n const expectedSource = `${modifierName}-${selectedContext}`.toLowerCase()\n addBlock(\n `Modifier: ${modifierName}=${selectedContext} (default)`,\n collectModifierTokens(tokens, expectedSource, included),\n modifier.description,\n )\n }\n }\n\n addBlock('Unattributed', collectRemainder(tokens, included))\n return blocks\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 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 const pushUnique = (item: BundleDataItem | undefined) => {\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\n pushUnique(baseItem)\n\n for (const modifierName of orderedModifierNames) {\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 pushUnique(findSingleDiffPermutation(bundleData, modifierName, ctx, baseInputs))\n }\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('#/modifiers/')) {\n continue\n }\n const name = ref.slice('#/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 type { ResolvedTokens } from '@lib/tokens/types'\nimport {\n buildInMemoryOutputKey,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\nimport prettier from 'prettier'\n\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: this.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 const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for JS module output`,\n )\n }\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: JsModuleRendererOptions,\n ): Promise<string> {\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 const lines: string[] = []\n lines.push(...this.formatAsObject(tokens, opts))\n\n const code = lines.join('\\n')\n\n // Skip prettier formatting if minify is true\n if (opts.minify) {\n return code\n }\n\n // Use Prettier for consistent, high-quality formatting\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 /**\n * Format as default export object\n */\n private formatAsObject(\n tokens: ResolvedTokens,\n options: Required<JsModuleRendererOptions>,\n ): string[] {\n const lines: string[] = []\n const tokenObj = this.tokensToPlainObject(tokens, options.structure)\n const varName = options.moduleName !== '' ? options.moduleName : 'tokens'\n\n lines.push(`const ${varName} = {`)\n this.addObjectProperties(lines, tokenObj, 1)\n lines.push('}')\n lines.push('')\n lines.push(`export default ${varName}`)\n\n return lines\n }\n\n /**\n * Convert tokens to plain object with flat or nested structure\n */\n private tokensToPlainObject(\n tokens: ResolvedTokens,\n structure: 'flat' | 'nested',\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n if (structure === 'flat') {\n // Flat structure: { \"token.name\": \"value\" }\n for (const [name, token] of getSortedTokenEntries(tokens)) {\n result[name] = token.$value\n }\n } else {\n // Nested structure: { \"token\": { \"name\": \"value\" } }\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const parts = token.path\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.$value\n }\n }\n }\n\n return result\n }\n\n /**\n * Add object properties to lines\n */\n private addObjectProperties(lines: string[], obj: Record<string, unknown>, indent: number): 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\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n lines.push(`${indentStr}${this.quoteKey(key)}: {`)\n this.addObjectProperties(lines, value as Record<string, unknown>, indent + 1)\n lines.push(`${indentStr}}${isLast ? '' : ','}`)\n } else {\n const valueStr = JSON.stringify(value)\n lines.push(`${indentStr}${this.quoteKey(key)}: ${valueStr}${isLast ? '' : ','}`)\n }\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 private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n return Object.entries(modifierInputs).every(([key, value]) => value === defaults[key])\n }\n}\n\n/**\n * JavaScript module renderer factory function\n *\n * Creates a JS module renderer with the specified preset and options.\n *\n * @param preset - Output preset: 'bundle' or 'standalone'\n * @param options - JS module formatting options (structure, minify, moduleName, generateHelper)\n * @returns Renderer instance\n *\n * @example\n * ```typescript\n * outputs: [{\n * name: 'js',\n * renderer: jsRenderer(),\n * options: { preset: 'standalone', structure: 'flat', moduleName: 'tokens' },\n * file: 'tokens.js'\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 type { ResolvedToken, ResolvedTokens } from '@lib/tokens/types'\nimport {\n buildInMemoryOutputKey,\n resolveFileName,\n stripInternalMetadata,\n} from '@renderers/bundlers/utils'\nimport { ConfigurationError } from '@shared/errors/index'\nimport { getSortedTokenEntries } from '@shared/utils/token-utils'\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: this.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 const requiresFile = context.buildPath !== undefined && context.buildPath !== ''\n if (!context.output.file && requiresFile) {\n throw new ConfigurationError(\n `Output \"${context.output.name}\": file is required for JSON output`,\n )\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, 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 /**\n * Nest tokens by path (values only)\n */\n private nestValues(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const parts = token.path\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part === null || part === undefined) {\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 && lastPart !== undefined) {\n current[lastPart] = token.$value\n }\n }\n\n return result\n }\n\n /**\n * Nest tokens by path (with metadata)\n */\n private nestTokens(tokens: ResolvedTokens): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const [, token] of getSortedTokenEntries(tokens)) {\n const parts = token.path\n let current = result\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]\n if (part === null || part === undefined) {\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 && lastPart !== undefined) {\n current[lastPart] = this.serializeToken(token)\n }\n }\n\n return result\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 private isBasePermutation(\n modifierInputs: Record<string, string>,\n defaults: Record<string, string>,\n ): boolean {\n return Object.entries(modifierInputs).every(([key, value]) => value === defaults[key])\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\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 { LifecycleHooks, OutputConfig } from '@config/index'\nimport type { Filter } from '@lib/processing/processors/filters/types'\nimport type { Transform } from '@lib/processing/processors/transforms/types'\nimport type { ModifierInputs } from '@lib/resolution/resolution.types'\nimport { cssRenderer } from '@renderers/css'\nimport { jsRenderer } from '@renderers/js-module'\nimport { jsonRenderer } from '@renderers/json'\nimport type {\n CssRendererOptions,\n JsModuleRendererOptions,\n JsonRendererOptions,\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 | ((modifierInputs: ModifierInputs) => string)\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 `dispersa.build()`.\n *\n * @example Basic CSS bundle with transforms\n * ```typescript\n * import { css } from 'dispersa'\n * import { nameKebabCase } from 'dispersa/transforms'\n *\n * const config = css({\n * name: 'css',\n * file: 'tokens.css',\n * preset: 'bundle',\n * selector: ':root',\n * transforms: [nameKebabCase()]\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 dispersa.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,\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 `dispersa.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 dispersa.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 `dispersa.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 dispersa.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 * @fileoverview Renderer system types for token output generation\n */\n\nimport type { ModifierInputs, OutputConfig, ResolverDocument } from '@config/index'\nimport type { ResolvedTokens } from '@lib/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/**\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 '@lib/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 '@lib/validation/config-schemas'\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 dispersa.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 | 'COLOR_PARSE'\n | 'DIMENSION_FORMAT'\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 { Dispersa } from './dispersa'\n\n// ============================================================================\n// PUBLIC TYPES\n// ============================================================================\n\n// Config types\nexport type {\n OutputConfig,\n BuildConfig,\n LifecycleHooks,\n DispersaOptions,\n ValidationOptions,\n} from '@config/index'\n\n// Validation types\nexport type { ValidationMode } from '@shared/types/validation'\n\n// Token types\nexport type {\n ResolvedToken,\n ResolvedTokens,\n DesignTokenValue,\n ColorToken,\n DimensionToken,\n ShadowToken,\n DurationToken,\n ColorValueObject,\n DimensionValue,\n ShadowValueObject,\n TypographyValue,\n BorderValue,\n TransitionValue,\n GradientValue,\n TokenType,\n} from '@lib/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 '@lib/tokens/types'\n\n// Transform types\nexport type { Transform } from '@lib/processing/processors/transforms/types'\n\n// Filter types\nexport type { Filter } from '@lib/processing/processors/filters/types'\n\n// Preprocessor types\nexport type { Preprocessor } from '@lib/processing/processors/preprocessors/types'\n\n// Renderer types\nexport type {\n BuildError,\n BuildOutput,\n BuildResult,\n CssRendererOptions,\n ErrorCode,\n FormatOptions,\n JsModuleRendererOptions,\n JsonRendererOptions,\n MediaQueryFunction,\n OutputTree,\n PermutationData,\n Renderer,\n RenderContext,\n RenderMeta,\n RenderOutput,\n SelectorFunction,\n} from '@renderers/types'\n\n// Resolver types\nexport type { ModifierInputs, ResolverDocument } from '@lib/resolution/resolution.types'\n\n// ============================================================================\n// OUTPUT BUILDERS\n// ============================================================================\n\nexport { css, json, js } from './builders'\nexport type {\n CssBuilderConfig,\n JsonBuilderConfig,\n JsBuilderConfig,\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 ColorParseError,\n DimensionFormatError,\n FileOperationError,\n ConfigurationError,\n BasePermutationError,\n ModifierError,\n} from '@shared/errors/index'\n"]}