@tokens-studio/tokenscript-interpreter 0.32.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/chunk-33CDF4L4.js +6444 -0
  2. package/dist/chunk-33CDF4L4.js.map +1 -0
  3. package/dist/chunk-AXH5N7KV.js +99 -0
  4. package/dist/chunk-AXH5N7KV.js.map +1 -0
  5. package/dist/chunk-QP7M6WUR.js +6227 -0
  6. package/dist/chunk-QP7M6WUR.js.map +1 -0
  7. package/dist/cli.js +242 -2
  8. package/dist/cli.js.map +1 -1
  9. package/dist/compliance-suite.js +2 -2
  10. package/dist/config-DtbN3iyg.d.ts +918 -0
  11. package/dist/lib/{chunk-QYRJ6NSL.cjs → chunk-LEYHQJTL.cjs} +3 -2
  12. package/dist/lib/chunk-LEYHQJTL.cjs.map +1 -0
  13. package/dist/lib/{chunk-GKSWF7FF.cjs → chunk-LMGHS2NP.cjs} +102 -100
  14. package/dist/lib/chunk-LMGHS2NP.cjs.map +1 -0
  15. package/dist/lib/{chunk-LI2D53SH.js → chunk-LSTH2XJ4.js} +5 -3
  16. package/dist/lib/chunk-LSTH2XJ4.js.map +1 -0
  17. package/dist/lib/{chunk-YD3MIYOO.js → chunk-ODVWXGOM.js} +3 -2
  18. package/dist/lib/chunk-ODVWXGOM.js.map +1 -0
  19. package/dist/lib/{chunk-UYVHWJIC.js → chunk-RWXDOZAS.js} +250 -5
  20. package/dist/lib/chunk-RWXDOZAS.js.map +1 -0
  21. package/dist/lib/{chunk-QGOGK2VP.cjs → chunk-YCIBJDRB.cjs} +790 -543
  22. package/dist/lib/chunk-YCIBJDRB.cjs.map +1 -0
  23. package/dist/lib/index.cjs +97 -89
  24. package/dist/lib/index.d.cts +5 -5
  25. package/dist/lib/index.d.ts +5 -5
  26. package/dist/lib/index.js +3 -3
  27. package/dist/lib/{interpreter-DNmBc--s.d.ts → interpreter-6QwMkUqD.d.cts} +30 -2
  28. package/dist/lib/{interpreter-CP7CNwDa.d.cts → interpreter-v7WiwSP9.d.ts} +30 -2
  29. package/dist/lib/interpreter.cjs +73 -73
  30. package/dist/lib/interpreter.d.cts +4 -4
  31. package/dist/lib/interpreter.d.ts +4 -4
  32. package/dist/lib/interpreter.js +3 -3
  33. package/dist/lib/processor-node.cjs +12 -12
  34. package/dist/lib/processor-node.d.cts +3 -3
  35. package/dist/lib/processor-node.d.ts +3 -3
  36. package/dist/lib/processor-node.js +3 -3
  37. package/dist/lib/processor.cjs +23 -15
  38. package/dist/lib/processor.d.cts +18 -5
  39. package/dist/lib/processor.d.ts +18 -5
  40. package/dist/lib/processor.js +3 -3
  41. package/dist/lib/schema.cjs +5 -5
  42. package/dist/lib/schema.d.cts +1 -1
  43. package/dist/lib/schema.d.ts +1 -1
  44. package/dist/lib/schema.js +3 -3
  45. package/dist/lib/syntax-highlighting.cjs +15 -15
  46. package/dist/lib/syntax-highlighting.d.cts +1 -1
  47. package/dist/lib/syntax-highlighting.d.ts +1 -1
  48. package/dist/lib/syntax-highlighting.js +2 -2
  49. package/dist/lib/{types-DHgmzR1Z.d.ts → types-BI0AZ4Ej.d.ts} +2 -2
  50. package/dist/lib/{types-BimJex2v.d.cts → types-EB8V9c46.d.cts} +1 -0
  51. package/dist/lib/{types-BimJex2v.d.ts → types-EB8V9c46.d.ts} +1 -0
  52. package/dist/lib/{types-DsJuwrq3.d.cts → types-cFwP43uv.d.cts} +2 -2
  53. package/dist/lib/types.cjs +6 -6
  54. package/dist/lib/types.d.cts +1 -1
  55. package/dist/lib/types.d.ts +1 -1
  56. package/dist/lib/types.js +1 -1
  57. package/dist/processor/index.d.ts +15 -2
  58. package/dist/processor/index.js +24 -3
  59. package/dist/processor/index.js.map +1 -1
  60. package/dist/repl.d.ts +1 -1
  61. package/dist/repl.js +2 -2
  62. package/dist/types.d.ts +1 -1
  63. package/dist/types.js +1 -1
  64. package/package.json +1 -1
  65. package/dist/lib/chunk-GKSWF7FF.cjs.map +0 -1
  66. package/dist/lib/chunk-LI2D53SH.js.map +0 -1
  67. package/dist/lib/chunk-QGOGK2VP.cjs.map +0 -1
  68. package/dist/lib/chunk-QYRJ6NSL.cjs.map +0 -1
  69. package/dist/lib/chunk-UYVHWJIC.js.map +0 -1
  70. package/dist/lib/chunk-YD3MIYOO.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/processor/resolver/DependencyTracker.ts","../../src/processor/resolver/helpers.ts","../../src/processor/resolver/issue-helpers.ts","../../src/processor/resolver/PrefixExtractor.ts","../../src/processor/resolver/PrefixManager.ts","../../src/processor/resolver/ReadinessTracker.ts","../../src/processor/resolver/ResolutionNotifier.ts","../../src/processor/utils/theme-resolver.ts","../../src/processor/utils/tokens.ts","../../src/processor/utils/set-processor.ts","../../src/processor/process.ts","../../src/processor/errors.ts","../../src/processor/resolver/TokenInterpreter.ts","../../src/processor/object-parsers/default-object-parsers.ts","../../src/processor/object-parsers/parsers/number-with-unit.ts","../../src/processor/object-parsers/symbol-conversion.ts","../../src/processor/utils/DependencyGraph.ts","../../src/processor/utils/structured-tokens.ts","../../src/processor/validator/types.ts","../../src/processor/resolver/TokenResolver.ts","../../src/processor/builders/MapBuilder.ts","../../src/processor/builders/base.ts","../../src/processor/builders/flatten.ts","../../src/processor/builders/ObjectBuilder.ts","../../src/processor/builders/StringMapBuilder.ts"],"names":["ValidationSeverity","isNested","unresolved","dependencyError","tokenValue"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Tracks token and prefix dependencies required for prefix resolution.\n *\n * Maintains bidirectional maps for both token and prefix dependencies,\n * enabling efficient lookups in both directions and readiness checking.\n */\nexport class DependencyTracker {\n private readonly tokenDeps = new Map<string, Set<string>>();\n private readonly reverseDeps = new Map<string, Set<string>>();\n private readonly prefixDeps = new Map<string, Set<string>>();\n private readonly prefixReverseDeps = new Map<string, Set<string>>();\n\n addTokenDependency(dependent: string, dependency: string): void {\n this.addToSetMap(this.tokenDeps, dependent, dependency);\n this.addToSetMap(this.reverseDeps, dependency, dependent);\n }\n\n removeTokenDependency(dependent: string, dependency: string): void {\n this.removeFromSetMap(this.tokenDeps, dependent, dependency);\n this.removeFromSetMap(this.reverseDeps, dependency, dependent);\n }\n\n addPrefixDependency(dependent: string, prefix: string): void {\n this.addToSetMap(this.prefixDeps, dependent, prefix);\n this.addToSetMap(this.prefixReverseDeps, prefix, dependent);\n }\n\n removePrefixDependency(dependent: string, prefix: string): void {\n this.removeFromSetMap(this.prefixDeps, dependent, prefix);\n this.removeFromSetMap(this.prefixReverseDeps, prefix, dependent);\n }\n\n getTokenDependents(token: string): Set<string> {\n return this.cloneSet(this.reverseDeps.get(token));\n }\n\n getTokenDependentsIterable(token: string): Iterable<string> {\n return this.reverseDeps.get(token) ?? [];\n }\n\n getTokensWaitingForPrefix(prefix: string): Set<string> {\n return this.cloneSet(this.prefixReverseDeps.get(prefix));\n }\n\n getTokensWaitingForPrefixIterable(prefix: string): Iterable<string> {\n return this.prefixReverseDeps.get(prefix) ?? [];\n }\n\n getTokenDependencies(token: string): Set<string> {\n return this.cloneSet(this.tokenDeps.get(token));\n }\n\n getPrefixDependencies(token: string): Set<string> {\n return this.cloneSet(this.prefixDeps.get(token));\n }\n\n isTokenReady(token: string): boolean {\n const tokenDeps = this.tokenDeps.get(token);\n const prefixDeps = this.prefixDeps.get(token);\n return (!tokenDeps || tokenDeps.size === 0) && (!prefixDeps || prefixDeps.size === 0);\n }\n\n hasAnyDependencies(): boolean {\n return this.tokenDeps.size > 0 || this.prefixDeps.size > 0;\n }\n\n getUnresolvedTokens(): string[] {\n const unresolved = new Set<string>();\n for (const [token] of this.tokenDeps) unresolved.add(token);\n for (const [token] of this.prefixDeps) unresolved.add(token);\n return Array.from(unresolved);\n }\n\n private addToSetMap<K, V>(map: Map<K, Set<V>>, key: K, value: V): void {\n let set = map.get(key);\n if (!set) {\n set = new Set<V>();\n map.set(key, set);\n }\n set.add(value);\n }\n\n private removeFromSetMap<K, V>(map: Map<K, Set<V>>, key: K, value: V): void {\n const set = map.get(key);\n if (!set) return;\n set.delete(value);\n if (set.size === 0) {\n map.delete(key);\n }\n }\n\n private cloneSet(values?: Set<string>): Set<string> {\n return values ? new Set(values) : new Set();\n }\n}\n","import { isLanguageError } from \"@interpreter/errors\";\nimport { ProcessorErrorCode } from \"@interpreter/errors/codes/processor\";\nimport type { RefPath, TokenOperationResult } from \"./types\";\n\n/**\n * Get all affected token paths from the dependants graph.\n * Returns the set of all tokens that depend on the changed token.\n */\nexport function getAffectedTokens(result: TokenOperationResult): Set<RefPath> {\n if (!result.dependants?.graph) {\n return new Set();\n }\n return new Set(result.dependants.graph.getNodes().keys());\n}\n\n/**\n * Get broken references from issues.\n * Filters issues for TOKEN_NOT_FOUND or DEPENDENCY_ERROR codes.\n */\nexport function getBrokenReferences(result: TokenOperationResult): Set<RefPath> {\n if (!result.issues) {\n return new Set();\n }\n\n const brokenRefs = new Set<RefPath>();\n\n for (const [tokenPath, issues] of result.issues) {\n for (const issue of issues) {\n // Check for ProcessorError with TOKEN_NOT_FOUND or DEPENDENCY_ERROR code\n if (\n isLanguageError(issue) &&\n (issue.code === ProcessorErrorCode.TOKEN_NOT_FOUND ||\n issue.code === ProcessorErrorCode.DEPENDENCY_ERROR)\n ) {\n brokenRefs.add(tokenPath);\n break;\n }\n }\n }\n\n return brokenRefs;\n}\n\n/**\n * For rename operations: get tokens whose references were updated.\n * Pass the set of tokens that were modified during rename.\n */\nexport function getRenamedReferences(\n _result: TokenOperationResult,\n modifiedTokens: Set<RefPath>,\n): Set<RefPath> {\n return modifiedTokens;\n}\n\n/**\n * Get tokens from the dependants graph whose values actually changed.\n * Compares the old token values with the new result to filter only modified tokens.\n */\nexport function getModifiedDependants(\n oldTokens: Map<RefPath, any>,\n result: TokenOperationResult,\n): Set<RefPath> {\n const modified = new Set<RefPath>();\n\n // Get all dependants from the graph\n const affectedTokens = getAffectedTokens(result);\n\n // Filter to only those whose values actually changed\n for (const tokenPath of affectedTokens) {\n const oldValue = oldTokens.get(tokenPath);\n const newValue = result.tokens.get(tokenPath);\n\n // Compare values - if they differ, the token was modified\n if (oldValue !== newValue) {\n modified.add(tokenPath);\n }\n }\n\n return modified;\n}\n","import type { ProcessorErrorCode } from \"@interpreter/errors\";\nimport type { IssuesMap } from \"./types\";\n\n/**\n * Check if issues map contains an error with the specified code.\n * Useful for checking if any token has a specific type of error.\n *\n * @example\n * ```typescript\n * const result = resolver.updateToken({ ... });\n * if (hasIssueWithCode(result.issues, ProcessorErrorCode.CIRCULAR_DEPENDENCY)) {\n * console.error(\"Circular dependency detected\");\n * }\n * ```\n */\nexport function hasIssueWithCode(issues: IssuesMap | undefined, code: ProcessorErrorCode): boolean {\n if (!issues) return false;\n return Array.from(issues.entries()).some(([_tokenName, issueList]) =>\n issueList.some((issue) => \"code\" in issue && issue.code === code),\n );\n}\n\n/**\n * Check if a specific token has an issue with the specified code.\n *\n * @example\n * ```typescript\n * const result = resolver.updateToken({ tokenPath: \"foo\", ... });\n * if (tokenHasIssueWithCode(result.issues, \"foo\", ProcessorErrorCode.CIRCULAR_DEPENDENCY)) {\n * console.error(\"Token 'foo' has a circular dependency\");\n * }\n * ```\n */\nexport function tokenHasIssueWithCode(\n issues: IssuesMap | undefined,\n tokenName: string,\n code: ProcessorErrorCode,\n): boolean {\n if (!issues) return false;\n const tokenIssues = issues.get(tokenName);\n if (!tokenIssues) return false;\n return tokenIssues.some((issue) => \"code\" in issue && issue.code === code);\n}\n\n/**\n * Get all tokens that have issues of any kind.\n *\n * @example\n * ```typescript\n * const result = resolver.build(tokens);\n * const tokensWithIssues = getTokensWithIssues(result.issues);\n * console.log(`${tokensWithIssues.size} tokens have issues`);\n * ```\n */\nexport function getTokensWithIssues(issues: IssuesMap | undefined): Set<string> {\n if (!issues) return new Set();\n return new Set(issues.keys());\n}\n\n/**\n * Check if there are any issues at all.\n *\n * @example\n * ```typescript\n * const result = resolver.build(tokens);\n * if (hasAnyIssues(result.issues)) {\n * console.error(\"There are issues with the tokens\");\n * }\n * ```\n */\nexport function hasAnyIssues(issues: IssuesMap | undefined): boolean {\n return issues !== undefined && issues.size > 0;\n}\n\n/**\n * Check if a specific token has any error (not lint issue).\n * Errors have a `code` property, while lint issues do not.\n *\n * @example\n * ```typescript\n * const result = resolver.build(tokens);\n * const tokenIssues = result.issues?.get(\"foo\");\n * if (tokenHasError(tokenIssues)) {\n * console.error(\"Token 'foo' has an error\");\n * }\n * ```\n */\nexport function tokenHasError(tokenIssues: Array<{ message: string }> | undefined): boolean {\n if (!tokenIssues) return false;\n return tokenIssues.some((issue) => \"code\" in issue);\n}\n\n/**\n * Get the first error from a token's issues (if any).\n * Returns undefined if there are no errors (only lint issues).\n *\n * @example\n * ```typescript\n * const result = resolver.build(tokens);\n * const error = getTokenError(result.issues, \"foo\");\n * if (error) {\n * console.error(\"Token 'foo' has error:\", error.message);\n * }\n * ```\n */\nexport function getTokenError(issues: IssuesMap | undefined, tokenName: string): Error | undefined {\n if (!issues) return undefined;\n const tokenIssues = issues.get(tokenName);\n if (!tokenIssues) return undefined;\n return tokenIssues.find((issue) => \"code\" in issue) as Error | undefined;\n}\n","import type { RefPath } from \"./types\";\n\n/**\n * Optimizes prefix extraction by caching results.\n *\n * Instead of repeatedly computing prefix paths by scanning for dots,\n * this class caches the computed results to avoid redundant string operations.\n */\nexport class PrefixExtractor {\n private readonly prefixCache = new Map<RefPath, string[]>();\n\n /**\n * Extract all prefix paths for a token reference.\n *\n * Example: \"a.b.c\" returns [\"a\", \"a.b\"]\n * Cached after first call for the same token.\n */\n extractPrefixes(tokenName: RefPath): string[] {\n const cached = this.prefixCache.get(tokenName);\n if (cached) {\n return cached;\n }\n\n const prefixes: string[] = [];\n let dotIndex = tokenName.indexOf(\".\");\n\n while (dotIndex !== -1) {\n prefixes.push(tokenName.slice(0, dotIndex));\n dotIndex = tokenName.indexOf(\".\", dotIndex + 1);\n }\n\n this.prefixCache.set(tokenName, prefixes);\n return prefixes;\n }\n\n clearCache(): void {\n this.prefixCache.clear();\n }\n}\n","import type { Config } from \"@interpreter/config\";\nimport type { InterpreterResult } from \"@interpreter/interpreter\";\nimport {\n DictionarySymbol,\n isTokenscriptSymbol,\n NullSymbol,\n StringSymbol,\n} from \"@interpreter/symbols\";\nimport type { ISymbolType } from \"@src/types\";\nimport { PrefixExtractor } from \"./PrefixExtractor\";\nimport type { RefPath, ResolvedValueMap, TokenInputMap } from \"./types\";\n\n/**\n * Handles prefix bookkeeping, dictionary construction, and virtual child tracking.\n */\nexport class PrefixManager {\n private readonly prefixes = new Map<string, Set<RefPath>>();\n private readonly tokenPrefixes = new Map<RefPath, Set<string>>();\n private readonly activePrefixes = new Map<string, Set<RefPath>>();\n private readonly virtualChildren = new Map<RefPath, Set<RefPath>>();\n private readonly prefixExtractor = new PrefixExtractor();\n\n // Optimization caches\n private readonly directChildrenCache = new Map<string, Set<string>>();\n private readonly parentLookupCache = new Map<RefPath, RefPath | undefined>();\n\n constructor(private readonly config?: Config) {}\n\n addTokenToPrefix(tokenName: RefPath): void {\n const prefixes = this.prefixExtractor.extractPrefixes(tokenName);\n if (prefixes.length === 0) return;\n\n for (const prefix of prefixes) {\n this.addToSetMap(this.prefixes, prefix, tokenName);\n this.addToSetMap(this.tokenPrefixes, tokenName, prefix);\n\n // Cache direct children for this prefix\n const prefixLen = prefix.length + 1;\n const shortName = tokenName.slice(prefixLen);\n if (!shortName.includes(\".\")) {\n this.addToSetMap(this.directChildrenCache, prefix, shortName);\n }\n }\n }\n\n hasPrefix(prefix: string): boolean {\n return this.prefixes.has(prefix);\n }\n\n activatePrefix(prefix: string): void {\n if (this.activePrefixes.has(prefix)) return;\n const members = this.prefixes.get(prefix);\n if (!members || members.size === 0) return;\n this.activePrefixes.set(prefix, new Set(members));\n }\n\n markTokenResolved(tokenName: RefPath): string[] {\n const prefixes = this.tokenPrefixes.get(tokenName);\n if (!prefixes || prefixes.size === 0) return [];\n\n const ready: string[] = [];\n for (const prefix of prefixes) {\n const pending = this.activePrefixes.get(prefix);\n if (!pending) continue;\n pending.delete(tokenName);\n if (pending.size === 0) {\n this.activePrefixes.delete(prefix);\n ready.push(prefix);\n }\n }\n\n this.tokenPrefixes.delete(tokenName);\n return ready;\n }\n\n buildPrefixDictionary(\n prefix: string,\n referenceCache: ResolvedValueMap,\n ): DictionarySymbol | undefined {\n const directChildren = this.directChildrenCache.get(prefix);\n if (!directChildren || directChildren.size === 0) return undefined;\n\n const dictionaryEntries = new Map<string, ISymbolType>();\n\n for (const shortName of directChildren) {\n const tokenName = `${prefix}.${shortName}`;\n const referenceValue = referenceCache.get(tokenName);\n const symbol = this.toSymbol(referenceValue);\n if (symbol) {\n dictionaryEntries.set(shortName, symbol.cloneIfMutable());\n }\n }\n\n if (dictionaryEntries.size === 0) return undefined;\n return new DictionarySymbol(dictionaryEntries, this.config);\n }\n\n findParentToken(reference: RefPath, tokens: TokenInputMap): RefPath | undefined {\n const cached = this.parentLookupCache.get(reference);\n if (cached !== undefined) {\n return cached === null ? undefined : cached;\n }\n\n let lastDotIndex = reference.lastIndexOf(\".\");\n while (lastDotIndex > 0) {\n const candidate = reference.slice(0, lastDotIndex);\n if (tokens.has(candidate)) {\n this.parentLookupCache.set(reference, candidate);\n return candidate;\n }\n lastDotIndex = reference.lastIndexOf(\".\", lastDotIndex - 1);\n }\n\n this.parentLookupCache.set(reference, null as unknown as undefined);\n return undefined;\n }\n\n addVirtualChild(parent: RefPath, child: RefPath): void {\n this.addToSetMap(this.virtualChildren, parent, child);\n }\n\n getVirtualChildren(parent: RefPath): Set<RefPath> {\n const children = this.virtualChildren.get(parent);\n return children ? new Set(children) : new Set();\n }\n\n getAndRemoveVirtualChildren(parent: RefPath): Set<RefPath> {\n const children = this.virtualChildren.get(parent);\n if (!children) return new Set();\n this.virtualChildren.delete(parent);\n return children;\n }\n\n removeVirtualChildren(parent: RefPath): void {\n this.virtualChildren.delete(parent);\n }\n\n getReadyPrefixes(): string[] {\n return Array.from(this.activePrefixes.keys()).filter((prefix) => {\n const pending = this.activePrefixes.get(prefix);\n return pending && pending.size === 0;\n });\n }\n\n clearCaches(): void {\n this.directChildrenCache.clear();\n this.parentLookupCache.clear();\n }\n\n private addToSetMap<K, V>(map: Map<K, Set<V>>, key: K, value: V): void {\n let set = map.get(key);\n if (!set) {\n set = new Set<V>();\n map.set(key, set);\n }\n set.add(value);\n }\n\n private toSymbol(value: InterpreterResult | undefined): ISymbolType | undefined {\n if (value === undefined) return undefined;\n\n if (value === null) return new NullSymbol(this.config);\n if (isTokenscriptSymbol(value)) return value;\n\n return new StringSymbol(String(value), this.config);\n }\n}\n","import type { DependencyTracker } from \"./DependencyTracker\";\nimport type { RefPath } from \"./types\";\n\n/**\n * Optimizes readiness checking by caching results.\n *\n * Readiness checking (whether all dependencies are resolved) can be expensive\n * when done repeatedly. This class caches the state and invalidates intelligently\n * when dependencies change.\n */\nexport class ReadinessTracker {\n private readonly readyCache = new Map<RefPath, boolean>();\n\n /**\n * Check if a token is ready to be resolved.\n * Results are cached until marked dirty.\n */\n isReady(tokenName: RefPath, dependencyTracker: DependencyTracker): boolean {\n if (!this.readyCache.has(tokenName)) {\n const ready = dependencyTracker.isTokenReady(tokenName);\n this.readyCache.set(tokenName, ready);\n return ready;\n }\n const cached = this.readyCache.get(tokenName);\n return cached ?? false;\n }\n\n /**\n * Mark a token's readiness state as dirty after a dependency change\n */\n markDirty(tokenName: RefPath): void {\n this.readyCache.delete(tokenName);\n }\n\n /**\n * Clear all cached state (e.g., for testing)\n */\n clearCache(): void {\n this.readyCache.clear();\n }\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport type { DependencyTracker } from \"./DependencyTracker\";\nimport type { PrefixManager } from \"./PrefixManager\";\nimport type { ReadinessTracker } from \"./ReadinessTracker\";\nimport type { RefPath } from \"./types\";\n\n/**\n * Centralizes dependency and prefix release notification logic with cascade resolution.\n *\n * Eliminates repeated patterns for:\n * - Releasing token dependencies\n * - Releasing prefix constraints\n * - Cascade resolving dependents when they become ready\n */\nexport class ResolutionNotifier {\n constructor(\n private readonly dependencyTracker: DependencyTracker,\n private readonly prefixManager: PrefixManager,\n private readonly readinessTracker: ReadinessTracker,\n private readonly pendingResolution: Set<RefPath>,\n private readonly readyQueue: Set<RefPath>,\n private readonly resolveCallback: (tokenName: RefPath) => void,\n private readonly buildDictionaryCallback: (\n prefix: string,\n referenceCache: Map<string, InterpreterResult>,\n ) => void,\n ) {}\n\n /**\n * Release all dependencies and prefixes for a token and its flattened children.\n * This is called after a token has been successfully resolved.\n * Triggers cascade resolution of any newly-ready dependents.\n */\n releaseDependencies(\n tokenName: RefPath,\n flattened: RefPath[] | undefined,\n referenceCache: Map<string, InterpreterResult>,\n ): void {\n this.releaseDependentsFor(tokenName);\n this.releasePrefixesFor(tokenName, referenceCache);\n\n if (flattened) {\n for (const flatName of flattened) {\n this.releaseDependentsFor(flatName);\n this.releasePrefixesFor(flatName, referenceCache);\n }\n }\n }\n\n /**\n * Release dependents waiting for a specific token and add to ready queue\n */\n private releaseDependentsFor(name: RefPath): void {\n for (const dependent of this.dependencyTracker.getTokenDependentsIterable(name)) {\n if (this.pendingResolution.has(dependent)) continue;\n\n this.dependencyTracker.removeTokenDependency(dependent, name);\n this.readinessTracker.markDirty(dependent);\n\n if (this.readinessTracker.isReady(dependent, this.dependencyTracker)) {\n this.readyQueue.add(dependent);\n }\n }\n }\n\n /**\n * Release prefixes that may now be complete after a token resolution\n */\n private releasePrefixesFor(name: RefPath, referenceCache: Map<string, InterpreterResult>): void {\n const readyPrefixes = this.prefixManager.markTokenResolved(name);\n if (readyPrefixes.length === 0) return;\n\n for (const prefix of readyPrefixes) {\n this.releasePrefixDependents(prefix, referenceCache);\n }\n }\n\n /**\n * Release tokens waiting for a specific prefix and add to ready queue\n */\n private releasePrefixDependents(\n prefix: string,\n referenceCache: Map<string, InterpreterResult>,\n ): void {\n // Build dictionary for this prefix\n this.buildDictionaryCallback(prefix, referenceCache);\n\n // Release tokens waiting for this prefix\n for (const tokenName of this.dependencyTracker.getTokensWaitingForPrefixIterable(prefix)) {\n if (this.pendingResolution.has(tokenName)) continue;\n\n this.dependencyTracker.removePrefixDependency(tokenName, prefix);\n this.readinessTracker.markDirty(tokenName);\n\n if (this.readinessTracker.isReady(tokenName, this.dependencyTracker)) {\n this.readyQueue.add(tokenName);\n }\n }\n }\n}\n","import { z } from \"@tokens-studio/schema-validation\";\nimport { isObject } from \"@/src/interpreter/utils/type\";\n\n/**\n * Validation for the `$themes.json` file format used by Figma Tokens\n * Studio. NOT part of the schema language; this is application config\n * that travels alongside token sets.\n *\n * The `$themes.json` data carries many extra fields beyond what this\n * resolver consumes (`id`, `$figmaStyleReferences`,\n * `$figmaCollectionVariableIds`, etc. — Figma plugin bookkeeping).\n * The schemas below are intentionally LOOSE on every object level: in\n * zod v4 `z.object()` strips unknown keys silently rather than\n * failing, which matches what real `$themes.json` files need.\n */\n\n// Old object format: { \"core\": \"enabled\", \"semantic\": \"source\" }\nconst TokenSetStatus = z.enum([\"enabled\", \"source\"]);\nconst SelectedTokenSetsObjectSchema = z.record(z.string(), TokenSetStatus);\n\n// New array format: [{ id: \"core\", status: \"enabled\" }]\nconst SelectedTokenSetsArraySchema = z.array(\n z.object({\n id: z.string(),\n status: TokenSetStatus,\n }),\n);\n\n// Either format is accepted.\nconst SelectedTokenSetsSchema = z.union([\n SelectedTokenSetsObjectSchema,\n SelectedTokenSetsArraySchema,\n]);\n\nconst ThemeSchema = z.object({\n name: z.string(),\n selectedTokenSets: SelectedTokenSetsSchema,\n figmaCollectionId: z.string().optional(),\n figmaModeId: z.string().optional(),\n group: z.string().optional(),\n});\n\nconst ThemesArraySchema = z.array(ThemeSchema);\n\nexport type ThemesArray = z.infer<typeof ThemesArraySchema>;\nexport type Theme = z.infer<typeof ThemeSchema>;\nexport type SelectedTokenSets = z.infer<typeof SelectedTokenSetsSchema>;\nexport type SelectedTokenSetsObject = z.infer<typeof SelectedTokenSetsObjectSchema>;\nexport type SelectedTokenSetsArray = z.infer<typeof SelectedTokenSetsArraySchema>;\n\n/**\n * Selects a theme by name from an array of themes.\n *\n * @param themes - Array of themes to search through\n * @param themeName - Name of the theme to find\n * @returns The matching theme or undefined if not found\n *\n * @example\n * const themes = [\n * { name: \"light\", selectedTokenSets: { core: \"enabled\" } },\n * { name: \"dark\", selectedTokenSets: { core: \"enabled\" } },\n * ];\n * const darkTheme = selectTheme(themes, \"dark\");\n * // => { name: \"dark\", selectedTokenSets: { core: \"enabled\" } }\n */\nexport const selectTheme = (themes: ThemesArray, themeName: string): Theme | undefined => {\n return themes.find((theme) => theme.name === themeName);\n};\n\n/**\n * Selects a theme by name, or returns the first theme if no name is provided.\n *\n * @param themes - Array of themes to search through\n * @param themeName - Optional name of the theme to find\n * @returns The matching theme, first theme, or undefined if array is empty\n *\n * @example\n * const themes = [\n * { name: \"light\", selectedTokenSets: { core: \"enabled\" } },\n * { name: \"dark\", selectedTokenSets: { core: \"enabled\" } },\n * ];\n * const theme = selectThemeOrFirst(themes, \"dark\");\n * // => { name: \"dark\", selectedTokenSets: { core: \"enabled\" } }\n *\n * const defaultTheme = selectThemeOrFirst(themes);\n * // => { name: \"light\", selectedTokenSets: { core: \"enabled\" } }\n */\nexport const selectThemeOrFirst = (themes: ThemesArray, themeName?: string): Theme | undefined => {\n if (!themeName) {\n return themes[0];\n }\n\n const theme = selectTheme(themes, themeName);\n return theme ?? themes[0];\n};\n\n/**\n * Resolves themes from collected json.\n *\n * Validates the structure with zod (via the schema-validation\n * library's `z` re-export):\n * - Each theme must have a `name` string property\n * - Each theme must have a `selectedTokenSets` property in either\n * the old object format (`{ name: \"enabled\" | \"source\" }`) or the\n * new array format (`[{ id, status }]`)\n * - Optional properties: figmaCollectionId, figmaModeId, group\n * - Extra fields are silently passed through (real-world\n * `$themes.json` files carry Figma plugin bookkeeping fields).\n *\n * @param jsonFiles - Record of collected jsons from file-collector\n * @returns Tuple of [path, themes array] or undefined if no valid themes found\n */\nexport const resolveThemes = (\n jsonFiles: Record<string, unknown>,\n): [string, ThemesArray] | undefined => {\n const themesFile = jsonFiles.$themes;\n if (themesFile) {\n // First try as an object with $themes property\n if (isObject(themesFile) && \"$themes\" in themesFile) {\n const inner = ThemesArraySchema.safeParse(themesFile.$themes);\n if (inner.success) {\n return [\"$themes\", inner.data];\n }\n }\n\n // Then try as a direct array of themes\n const direct = ThemesArraySchema.safeParse(themesFile);\n if (direct.success) {\n return [\"$themes\", direct.data];\n }\n }\n\n return undefined;\n};\n\n/**\n * Extracts an ordered array of set names from selectedTokenSets.\n *\n * Handles both object and array formats:\n * - Object format: { \"core\": \"enabled\", \"semantic\": \"source\" } => [\"core\", \"semantic\"]\n * - Array format: [{ id: \"core\", status: \"enabled\" }] => [\"core\"]\n *\n * @param selectedTokenSets - The selectedTokenSets from a theme\n * @returns Array of set names in order\n *\n * @example\n * const sets = { core: \"enabled\", semantic: \"source\" };\n * const names = extractSetNames(sets);\n * // => [\"core\", \"semantic\"]\n *\n * const setsArray = [{ id: \"core\", status: \"enabled\" }];\n * const namesFromArray = extractSetNames(setsArray);\n * // => [\"core\"]\n */\nexport const extractSetNames = (selectedTokenSets: SelectedTokenSets): string[] => {\n if (Array.isArray(selectedTokenSets)) {\n return selectedTokenSets.map((set) => set.id);\n }\n return Object.keys(selectedTokenSets);\n};\n","import type { SymbolMetadata } from \"@src/types\";\nimport { getKeyAlt, isObject, isString } from \"@/src/interpreter/utils/type\";\n\n/**\n * Structured token data containing value and optional type information\n */\nexport interface TokenData {\n $value: unknown;\n $type?: string;\n /**\n * Optional metadata attached to the token.\n * This is passed through to the TokenSymbol and preserved during cloning.\n * Not accessible to the tokenscript language.\n */\n $metadata?: SymbolMetadata;\n}\n\nexport function getTokenValue(data: string | TokenData): unknown {\n return isString(data) ? data : data.$value;\n}\n\nexport function setTokenValue(value: string | TokenData): TokenData {\n return isString(value) ? { $value: value } : value;\n}\n\n/**\n * Flattens a nested tokens object structure into a flat key-value map with dot-separated paths.\n * Now preserves structured values and captures $type information.\n *\n * @param obj - The nested object to flatten\n * @param prefixAccumulator - Recursion prefix accumulator\n * @returns Flat map of token paths to TokenData\n *\n * @example\n * Input: { color: { red: { $value: \"#FF0000\" } } }\n * Output: Map { \"color.red\" => { $value: \"#FF0000\" } }\n *\n * @example\n * Input: { shadow: { $type: \"shadow\", $value: { offsetX: 0, offsetY: 4 } } }\n * Output: Map { \"shadow\" => { $value: { offsetX: 0, offsetY: 4 }, $type: \"shadow\" } }\n */\nexport function flattenTokensObject(\n obj: Record<string, unknown>,\n prefixAccumulator = \"\",\n): Map<string, TokenData> {\n const result = new Map<string, TokenData>();\n\n for (const [prefix, value] of Object.entries(obj)) {\n if (prefix.startsWith(\"$\")) {\n continue;\n }\n\n const path = prefixAccumulator ? `${prefixAccumulator}.${prefix}` : prefix;\n\n if (isObject(value)) {\n const objValue = value as Record<string, unknown>;\n const tokenValue = getKeyAlt([\"$value\", \"value\"], objValue);\n\n if (tokenValue !== undefined) {\n // Capture $type and $metadata if present\n const tokenType = objValue.$type;\n const tokenMetadata = objValue.$metadata as SymbolMetadata | undefined;\n const tokenData: TokenData = {\n $value: tokenValue,\n ...(tokenType !== undefined && { $type: String(tokenType) }),\n ...(tokenMetadata !== undefined && { $metadata: tokenMetadata }),\n };\n result.set(path, tokenData);\n }\n // Recurse into structure\n else {\n const nested = flattenTokensObject(objValue, path);\n for (const [nestedKey, nestedValue] of nested) {\n result.set(nestedKey, nestedValue);\n }\n }\n }\n // Primitive values are stored directly\n else {\n result.set(path, { $value: value });\n }\n }\n\n return result;\n}\n\nexport function normalizeToTokenData(value: unknown): TokenData {\n if (typeof value === \"string\") {\n return { $value: value };\n }\n if (isObject(value) && \"$value\" in value) {\n const obj = value as Record<string, unknown>;\n const metadata = obj.$metadata as SymbolMetadata | undefined;\n return {\n $value: obj.$value,\n ...(isString(obj.$type) && { $type: obj.$type }),\n ...(metadata !== undefined && { $metadata: metadata }),\n };\n }\n return { $value: value };\n}\n\nexport function recordToMap(record: Record<string, unknown>): Map<string, TokenData> {\n const map = new Map<string, TokenData>();\n for (const [key, value] of Object.entries(record)) {\n map.set(key, normalizeToTokenData(value));\n }\n return map;\n}\n\nexport function isNested(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).some((key) => {\n const value = obj[key];\n return isObject(value) && !key.startsWith(\"$\");\n });\n}\n","import { ProcessorError, ProcessorErrorCode } from \"../../interpreter/errors\";\nimport { isObject } from \"../../interpreter/utils/type\";\nimport { extractSetNames, resolveThemes, selectTheme } from \"./theme-resolver\";\nimport type { TokenData } from \"./tokens\";\nimport { flattenTokensObject, isNested, normalizeToTokenData, recordToMap } from \"./tokens\";\n\nexport function determineSets(\n jsonFiles: Record<string, unknown>,\n activeSets?: string[],\n activeTheme?: string,\n): string[] {\n if (activeSets) return activeSets;\n\n if (activeTheme) {\n const resolved = resolveThemes(jsonFiles);\n if (!resolved) {\n throw new ProcessorError(ProcessorErrorCode.NO_THEMES_FOUND, {\n data: { themeName: activeTheme },\n });\n }\n\n const [, themes] = resolved;\n const theme = selectTheme(themes, activeTheme);\n\n if (!theme) {\n throw new ProcessorError(ProcessorErrorCode.THEME_NOT_FOUND, {\n data: {\n themeName: activeTheme,\n availableThemes: themes.map((t) => t.name),\n },\n });\n }\n\n return extractSetNames(theme.selectedTokenSets);\n }\n\n // Default: if normalized to single entry, use it\n const keys = Object.keys(jsonFiles);\n if (keys.length === 1) {\n return keys;\n }\n\n // If normalized to multiple entries but no selection made, we can't proceed\n if (keys.length > 1) {\n throw new ProcessorError(ProcessorErrorCode.MULTIPLE_SETS_NO_SELECTION, {\n data: { setNames: keys },\n });\n }\n\n throw new ProcessorError(ProcessorErrorCode.NO_SETS_TO_PROCESS);\n}\n\n/**\n * Converts setData to a Map of TokenData.\n * Handles Map, nested objects, and flat records.\n */\nfunction getSetTokens(setData: unknown): Map<string, TokenData> {\n if (setData instanceof Map) {\n return setData;\n }\n\n if (!isObject(setData)) {\n return new Map<string, TokenData>();\n }\n\n if (isNested(setData)) {\n return flattenTokensObject(setData, \"\");\n }\n\n return recordToMap(setData);\n}\n\n/**\n * Flattens token sets or Map inputs to a normalized TokenDataMap.\n * Handles normalization of string values to TokenData format.\n *\n * @param sets - Record of token sets or a Map of tokens\n * @param setNames - Names of sets to process (ignored if sets is a Map)\n * @returns Normalized Map<string, TokenData>\n */\nexport function flattenToTokens(\n sets: Record<string, unknown> | Map<string, unknown>,\n setNames: string[],\n): Map<string, TokenData> {\n const tokens = new Map<string, TokenData>();\n\n // For Map input, iterate directly; for Record, iterate through setNames\n const entries =\n sets instanceof Map ? sets.entries() : setNames.map((name) => [name, sets[name]] as const);\n\n for (const [key, setData] of entries) {\n if (sets instanceof Map) {\n // Direct Map entry - key is token name, setData is the value\n tokens.set(key, normalizeToTokenData(setData));\n } else {\n // Record entry - key is setName, setData is the set content\n // Check if set exists (only needed for Record lookups)\n if (!setData) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_SET_NOT_FOUND, {\n data: { setName: key },\n });\n }\n\n if (!isObject(setData) && !(setData instanceof Map)) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_SET_INVALID, {\n data: { setName: key },\n });\n }\n\n const setTokens = getSetTokens(setData);\n\n for (const [tokenKey, value] of setTokens) {\n tokens.set(tokenKey, normalizeToTokenData(value));\n }\n }\n }\n\n return tokens;\n}\n","import type { InterpreterResult } from \"../interpreter/interpreter\";\nimport { buildTokens } from \"./builders/base\";\nimport type { ProcessOptions, ProcessResult, ProcessSetsOptions } from \"./types\";\nimport { determineSets, flattenToTokens } from \"./utils/set-processor\";\nimport type { TokenData } from \"./utils/tokens\";\n\n// Main ------------------------------------------------------------------------\n\n/**\n * Process flat token collection.\n *\n * @param tokens - Token input in various formats (Map or Record)\n * @param options - Processing options\n * @returns Processed tokens with resolved values\n *\n * @note Performance optimization: If you already have a `Map<string, TokenData>`,\n * you can skip this function and call `buildTokens` directly to avoid unnecessary flattening.\n */\nexport function processTokens<T = Map<string, string | InterpreterResult>>(\n tokens: Map<string, TokenData> | Map<string, string> | Record<string, any>,\n options?: ProcessOptions,\n): ProcessResult<T> {\n const tokenDataMap =\n tokens instanceof Map ? flattenToTokens(tokens, []) : flattenToTokens({ tokens }, [\"tokens\"]);\n\n return buildTokens(tokenDataMap, options) as ProcessResult<T>;\n}\n\n/**\n * Process token sets with theme or set selection.\n */\nexport function processTokenSets<T = Map<string, string | InterpreterResult>>(\n normalizedFiles: Record<string, unknown>,\n options?: ProcessSetsOptions,\n): ProcessResult<T> {\n const { activeSets, activeTheme } = options ?? {};\n\n const setNames = determineSets(normalizedFiles, activeSets, activeTheme);\n\n const tokens = flattenToTokens(normalizedFiles, setNames);\n\n return buildTokens(tokens, options) as ProcessResult<T>;\n}\n","import { ProcessorError, ProcessorErrorCode } from \"@interpreter/errors\";\n\nexport function collectErrors(result: {\n issues?: Map<string, Array<{ message: string }>>;\n tokens: Map<string, any>;\n}): Record<string, { message: string; originalValue: string }> {\n const errors: Record<string, { message: string; originalValue: string }> = {};\n if (!result.issues) return errors;\n\n for (const [tokenName, issueList] of result.issues) {\n const originalValue = result.tokens.get(tokenName);\n // Get the first error issue\n const error = issueList.find((issue) => \"code\" in issue);\n if (error) {\n errors[tokenName] = {\n message: error.message,\n originalValue: String(originalValue),\n };\n }\n }\n return errors;\n}\n\n/**\n * Create a ProcessorError for dependency-related failures.\n * Builds the dependency chain and extracts the root cause.\n */\nexport function createDependencyError(\n tokenName: string,\n dependencyName: string,\n originalError: Error,\n): ProcessorError {\n // Extract chain and root error\n const { chain, rootError } = extractDependencyInfo(tokenName, dependencyName, originalError);\n const chainStr = chain.join(\" → \");\n\n return new ProcessorError(ProcessorErrorCode.DEPENDENCY_ERROR, {\n data: {\n tokenName,\n chain: chainStr,\n rootCause: rootError.message,\n },\n });\n}\n\nfunction extractDependencyInfo(\n tokenName: string,\n dependencyName: string,\n error: Error,\n): { chain: string[]; rootError: Error } {\n // Check if it's already a dependency error\n if (\n error instanceof ProcessorError &&\n error.code === ProcessorErrorCode.DEPENDENCY_ERROR &&\n error.data.chain\n ) {\n // Parse the chain from the existing error\n const existingChain = String(error.data.chain).split(\" → \");\n return {\n chain: [tokenName, ...existingChain],\n rootError: new Error(String(error.data.rootCause)),\n };\n }\n\n // Otherwise, it's a new chain\n return {\n chain: [tokenName, dependencyName],\n rootError: error,\n };\n}\n","import type { ASTNode } from \"@interpreter/ast\";\nimport type { Config } from \"@interpreter/config\";\nimport { isLanguageError, ProcessorError, ProcessorErrorCode } from \"@interpreter/errors\";\nimport { Interpreter } from \"@interpreter/interpreter\";\nimport { parseExpression } from \"@interpreter/parser\";\nimport { DictionarySymbol, jsValueToSymbolType } from \"@interpreter/symbols\";\nimport type { ISymbolType } from \"@src/types\";\nimport { createDependencyError } from \"../errors\";\nimport type { ASTNodeMap, RefPath, ResolvedValueMap, TokenResult, TokenResultMap } from \"./types\";\n\n/**\n * Handles token interpretation and dependency error checking.\n * Manages the interpreter instance and AST execution.\n */\nexport interface TokenInterpreterOptions {\n /** Whether to inject inline constants into the symbol table before evaluation. Defaults to true. */\n inlineConstants?: boolean;\n}\n\nexport class TokenInterpreter {\n private readonly interpreter: Interpreter;\n private readonly astNodes: ASTNodeMap = new Map();\n private readonly parsedConstants: Map<string, ISymbolType> = new Map();\n private readonly inlineConstantsEnabled: boolean;\n\n constructor(\n private readonly referenceCache: ResolvedValueMap,\n private readonly config?: Config,\n options?: TokenInterpreterOptions,\n ) {\n this.inlineConstantsEnabled = options?.inlineConstants ?? true;\n this.interpreter = new Interpreter(null, {\n references: this.referenceCache as Map<string, any>,\n config: this.config,\n });\n\n if (this.inlineConstantsEnabled) {\n this.parseConstants();\n }\n }\n\n private parseConstants(): void {\n if (!this.config) return;\n\n for (const [name, rawValue] of this.config.inlineConstants) {\n if (typeof rawValue === \"string\") {\n try {\n const { ast } = parseExpression(rawValue);\n if (ast) {\n const tempInterpreter = new Interpreter(ast, { config: this.config });\n const result = tempInterpreter.interpret();\n if (result !== null && typeof result !== \"string\") {\n this.parsedConstants.set(name, result);\n } else if (typeof result === \"string\") {\n this.parsedConstants.set(name, jsValueToSymbolType(result, this.config));\n }\n }\n } catch {\n // If parsing fails, store as string symbol\n this.parsedConstants.set(name, jsValueToSymbolType(rawValue, this.config));\n }\n } else {\n this.parsedConstants.set(name, jsValueToSymbolType(rawValue, this.config));\n }\n }\n }\n\n private injectConstants(): void {\n for (const [name, value] of this.parsedConstants) {\n this.interpreter.setSymbol(name, value.cloneIfMutable());\n }\n }\n\n setTokenAST(tokenName: RefPath, ast: ASTNode): void {\n this.astNodes.set(tokenName, ast);\n }\n\n getTokenAST(tokenName: RefPath): ASTNode | undefined {\n return this.astNodes.get(tokenName);\n }\n\n interpretToken(tokenName: RefPath, originalValue: string): TokenResult {\n const ast = this.astNodes.get(tokenName);\n\n if (!ast) {\n return originalValue;\n }\n\n return this.interpretTokenWithAST(tokenName, ast);\n }\n\n interpretTokenWithAST(_tokenName: RefPath, ast: ASTNode): TokenResult {\n try {\n this.interpreter.resetSymbolTable();\n if (this.inlineConstantsEnabled) {\n this.injectConstants();\n }\n this.interpreter.setAst(ast);\n return this.interpreter.interpret();\n } catch (error) {\n if (isLanguageError(error)) {\n return error;\n }\n return new Error(\"Unknown error during token interpretation\", { cause: error });\n }\n }\n\n buildDependencyError(\n tokenName: RefPath,\n dependencies: Set<RefPath>,\n resolved: TokenResultMap,\n missingDependencies?: Set<RefPath>,\n ): ProcessorError | undefined {\n for (const dep of dependencies) {\n // Check resolved map first\n const depValue = resolved.get(dep);\n if (depValue instanceof Error) {\n return createDependencyError(tokenName, dep, depValue);\n }\n\n // Check if it's a missing dependency (explicitly marked as missing)\n if (missingDependencies?.has(dep)) {\n const error = new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: dep },\n });\n return createDependencyError(tokenName, dep, error);\n }\n }\n return undefined;\n }\n\n flattenDictionaryToCache(tokenName: RefPath, value: TokenResult): RefPath[] {\n if (!(value instanceof DictionarySymbol) || !value.value) {\n return [];\n }\n\n const flattenedNames: RefPath[] = [];\n const entries = value.value;\n\n for (const [childKey, childValue] of entries) {\n const flattenedKey = `${tokenName}.${childKey}`;\n const clone = this.isSymbolType(childValue) ? childValue.cloneIfMutable() : childValue;\n this.referenceCache.set(flattenedKey, clone);\n flattenedNames.push(flattenedKey);\n }\n\n return flattenedNames;\n }\n\n updateReferenceCache(tokenName: RefPath, value: TokenResult): void {\n if (value instanceof Error) return;\n this.referenceCache.set(tokenName, value);\n }\n\n private isSymbolType(value: unknown): value is ISymbolType {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n typeof (value as ISymbolType).cloneIfMutable === \"function\",\n );\n }\n}\n","import type { ObjectParser } from \".\";\n\nexport const defaultObjectParsers: ObjectParser[] = [];\n","import type { Config } from \"@interpreter/config\";\nimport { NumberWithUnitSymbol } from \"@interpreter/symbols\";\nimport { isNumber, isObject, isString } from \"@interpreter/utils/type\";\nimport type { ISymbolType } from \"@src/types\";\nimport type { ObjectParser } from \"..\";\n\n/**\n * Matches objects with shape { value: number, unit: string }.\n */\nexport const numberWithUnitParser: ObjectParser = {\n predicate: (value: unknown): boolean => {\n if (!isObject(value)) {\n return false;\n }\n const obj = value as Record<string, unknown>;\n return (\n \"value\" in obj &&\n \"unit\" in obj &&\n isNumber(obj.value) &&\n isString(obj.unit) &&\n Object.keys(obj).length === 2\n );\n },\n toSymbol: (value: any, config?: Config): ISymbolType =>\n new NumberWithUnitSymbol(value.value, value.unit, config),\n};\n","import type { Config } from \"@interpreter/config\";\nimport type { InterpreterResult } from \"@interpreter/interpreter\";\nimport {\n DictionarySymbol,\n jsValueToSymbolType,\n ListSymbol,\n TokenSymbol,\n} from \"@interpreter/symbols\";\nimport { isArray, isObject } from \"@interpreter/utils/type\";\nimport type { ISymbolType, SymbolMetadata } from \"@src/types\";\nimport { defaultObjectParsers, type ObjectParser } from \".\";\n\nexport function parseValueToSymbol(\n value: unknown,\n config?: Config,\n parsers: ObjectParser[] = defaultObjectParsers,\n): ISymbolType | unknown {\n // If already a symbol, return as-is\n if (value && typeof value === \"object\" && \"getTypeName\" in value) {\n return value;\n }\n\n // Try custom object parsers first\n for (const parser of parsers) {\n if (parser.predicate(value)) {\n return parser.toSymbol(value, config);\n }\n }\n\n // Fallback to default jsValueToSymbolType for primitives, objects, and arrays\n return jsValueToSymbolType(value, config);\n}\n\nexport function createTokenSymbol(\n value: unknown,\n tokenType: string = \"unknown\",\n config?: Config,\n parsers: ObjectParser[] = defaultObjectParsers,\n metadata?: SymbolMetadata,\n): TokenSymbol {\n if (isObject(value)) {\n const symbolMap: Record<string, ISymbolType> = {};\n for (const [key, val] of Object.entries(value)) {\n symbolMap[key] = parseValueToSymbol(val, config, parsers) as ISymbolType;\n }\n return new TokenSymbol(tokenType, symbolMap, config, metadata);\n }\n\n if (isArray(value)) {\n const symbolArray = value.map((val) => parseValueToSymbol(val, config, parsers) as ISymbolType);\n return new TokenSymbol(tokenType, symbolArray, config, metadata);\n }\n\n return new TokenSymbol(tokenType, value as Record<string, any>, config, metadata);\n}\n\n/**\n * Helper function to recursively build values from resolved fields.\n * Handles nested objects and arrays.\n *\n * @param currentPath - The current path being processed\n * @param originalValue - The original value at this path\n * @param resolvedFields - Map of field paths to resolved values\n * @param config - Optional config\n * @param parsers - Optional custom object parsers\n * @returns ISymbolType representation of the value\n */\nfunction buildValueFromResolvedFields(\n currentPath: string,\n originalValue: unknown,\n resolvedFields: Map<string, InterpreterResult>,\n config?: Config,\n parsers: ObjectParser[] = defaultObjectParsers,\n): ISymbolType {\n // If this exact path is resolved, use it\n if (resolvedFields.has(currentPath)) {\n return resolvedFields.get(currentPath) as ISymbolType;\n }\n\n // Check if this value matches an object parser (e.g., { value: 8, unit: \"px\" })\n // before recursively processing it\n if (isObject(originalValue)) {\n for (const parser of parsers) {\n if (parser.predicate(originalValue)) {\n return parser.toSymbol(originalValue, config) as ISymbolType;\n }\n }\n\n // No parser matched, recurse into object fields\n // Wrap in DictionarySymbol for TokenScript compatibility\n const symbolMap: Record<string, ISymbolType> = {};\n for (const [key, val] of Object.entries(originalValue)) {\n const fieldPath = `${currentPath}.${key}`;\n symbolMap[key] = buildValueFromResolvedFields(\n fieldPath,\n val,\n resolvedFields,\n config,\n parsers,\n );\n }\n return new DictionarySymbol(symbolMap, config);\n }\n\n if (isArray(originalValue)) {\n const symbolArray: ISymbolType[] = [];\n for (let i = 0; i < originalValue.length; i++) {\n const fieldPath = `${currentPath}[${i}]`;\n symbolArray.push(\n buildValueFromResolvedFields(fieldPath, originalValue[i], resolvedFields, config, parsers),\n );\n }\n return new ListSymbol(symbolArray, false, config);\n }\n\n // Primitive values - convert to symbol\n return parseValueToSymbol(originalValue, config, parsers) as ISymbolType;\n}\n\n/**\n * Create a TokenSymbol from resolved fields and original structured value.\n * This combines the original value with resolved fields to build the final TokenSymbol.\n * Handles nested objects and arrays recursively.\n *\n * @param tokenName - The parent token name\n * @param resolvedFields - Map of field paths to resolved values\n * @param originalValue - The original structured value\n * @param tokenType - The token type\n * @param config - Optional config\n * @param parsers - Optional custom object parsers\n * @returns TokenSymbol with resolved values\n */\nexport function createTokenSymbolFromResolvedFields(\n tokenName: string,\n resolvedFields: Map<string, InterpreterResult>,\n originalValue: unknown,\n tokenType: string = \"unknown\",\n config?: Config,\n parsers: ObjectParser[] = defaultObjectParsers,\n metadata?: SymbolMetadata,\n): TokenSymbol {\n if (isObject(originalValue)) {\n const symbolMap: Record<string, ISymbolType> = {};\n for (const [key, val] of Object.entries(originalValue)) {\n const fieldPath = `${tokenName}.${key}`;\n symbolMap[key] = buildValueFromResolvedFields(\n fieldPath,\n val,\n resolvedFields,\n config,\n parsers,\n );\n }\n return new TokenSymbol(tokenType, symbolMap, config, metadata);\n }\n\n if (isArray(originalValue)) {\n const symbolArray: ISymbolType[] = [];\n for (let i = 0; i < originalValue.length; i++) {\n const fieldPath = `${tokenName}[${i}]`;\n symbolArray.push(\n buildValueFromResolvedFields(fieldPath, originalValue[i], resolvedFields, config, parsers),\n );\n }\n return new TokenSymbol(tokenType, symbolArray, config, metadata);\n }\n\n // Fallback for other types\n return new TokenSymbol(tokenType, originalValue as Record<string, any>, config, metadata);\n}\n","import { ProcessorError, ProcessorErrorCode } from \"@interpreter/errors\";\n\nexport class DependencyGraph<N = string> {\n private nodes = new Map<N, Set<N>>();\n\n addNode(node: N, dependencies: N[] | Set<N> = []): void {\n if (!this.nodes.has(node)) {\n this.nodes.set(node, new Set(dependencies));\n }\n }\n\n removeNode(node: N): void {\n this.nodes.delete(node);\n // Also remove this node from all dependency sets\n for (const deps of this.nodes.values()) {\n deps.delete(node);\n }\n }\n\n getNodes(): Map<N, Set<N>> {\n return this.nodes;\n }\n\n // Find nodes with no dependencies\n entryNodes(): N[] {\n const entries: N[] = [];\n for (const [node, deps] of this.nodes) {\n if (deps.size === 0) {\n entries.push(node);\n }\n }\n return entries;\n }\n\n // Find a cycle in the graph starting from the given nodes\n private findCycle(candidateNodes: N[]): N[] {\n const visited = new Set<N>();\n const recursionStack = new Set<N>();\n const path: N[] = [];\n\n const dfs = (node: N): boolean => {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const deps = this.nodes.get(node);\n if (deps) {\n for (const dep of deps) {\n if (!visited.has(dep)) {\n if (dfs(dep)) {\n return true;\n }\n } else if (recursionStack.has(dep)) {\n return true;\n }\n }\n }\n\n path.pop();\n recursionStack.delete(node);\n return false;\n };\n\n for (const node of candidateNodes) {\n if (!visited.has(node)) {\n if (dfs(node)) {\n return path;\n }\n }\n }\n\n return candidateNodes;\n }\n\n // Topological sort using Kahn's algorithm\n topologicalSort(): N[] {\n const inDegree = new Map<N, number>();\n const result: N[] = [];\n\n // Calculate in-degrees\n for (const node of this.nodes.keys()) {\n inDegree.set(node, 0);\n }\n for (const deps of this.nodes.values()) {\n for (const dep of deps) {\n inDegree.set(dep, (inDegree.get(dep) || 0) + 1);\n }\n }\n\n // Queue nodes with no dependencies\n const queue: N[] = [];\n for (const [node, degree] of inDegree) {\n if (degree === 0) {\n queue.push(node);\n }\n }\n\n while (queue.length > 0) {\n const node = queue.shift();\n if (node === undefined) break;\n result.push(node);\n\n // Reduce in-degree for dependents\n const deps = this.nodes.get(node) || new Set();\n for (const dep of deps) {\n const newDegree = (inDegree.get(dep) || 0) - 1;\n inDegree.set(dep, newDegree);\n if (newDegree === 0) {\n queue.push(dep);\n }\n }\n }\n\n // If result doesn't contain all nodes, there's a cycle\n if (result.length !== this.nodes.size) {\n const resultSet = new Set(result);\n const remainingNodes: N[] = [];\n for (const node of this.nodes.keys()) {\n if (!resultSet.has(node)) {\n remainingNodes.push(node);\n }\n }\n const cycle = this.findCycle(remainingNodes);\n const tokens = `${cycle.map((n) => String(n)).join(\" → \")} → ${String(cycle[0])}`;\n throw new ProcessorError(ProcessorErrorCode.CIRCULAR_DEPENDENCY, {\n data: { tokens },\n });\n }\n\n return result;\n }\n}\n","import { isArray, isObject, isString } from \"@interpreter/utils/type\";\nimport { defaultObjectParsers, type ObjectParser } from \"../object-parsers\";\n\n/**\n * Check if a value matches any object parser predicate.\n * Object parsers handle special object structures like { value: 8, unit: \"px\" }.\n */\nfunction matchesObjectParser(value: unknown, parsers: ObjectParser[]): boolean {\n if (!isObject(value)) return false;\n return parsers.some((parser) => parser.predicate(value));\n}\n\n/**\n * Extract string fields from a structured value (object or array).\n * Returns a map of field paths to their string values.\n * Recursively extracts from nested objects and arrays, but skips objects\n * that match an object parser (e.g., { value: 8, unit: \"px\" }).\n *\n * @param value - The structured value to extract from\n * @param parentPath - The parent token path\n * @param objectParsers - Optional array of object parsers to check against\n * @returns Map of field paths to string values\n *\n * @example\n * extractStringFields({ offsetX: \"{base}\", offsetY: 4 }, \"shadow\")\n * => Map { \"shadow.offsetX\" => \"{base}\" }\n *\n * @example\n * extractStringFields([{ blur: \"{size}\", color: \"red\" }], \"shadow\")\n * => Map { \"shadow[0].blur\" => \"{size}\" }\n *\n * @example\n * // Object parsers prevent extraction from parsed objects\n * extractStringFields({ small: { value: 8, unit: \"px\" } }, \"spacing\", parsers)\n * => Map {} // empty, because { value, unit } matches NumberWithUnit parser\n */\nexport function extractStringFields(\n value: unknown,\n parentPath: string,\n objectParsers: ObjectParser[] = defaultObjectParsers,\n): Map<string, string> {\n const result = new Map<string, string>();\n\n const processValue = (val: unknown, path: string) => {\n if (isString(val)) {\n result.set(path, val);\n } else if (isObject(val)) {\n // Skip objects that match an object parser (they'll be handled as atomic values)\n if (matchesObjectParser(val, objectParsers)) {\n return;\n }\n // Recurse into nested objects\n const nested = extractStringFields(val, path, objectParsers);\n for (const [nestedPath, nestedVal] of nested) {\n result.set(nestedPath, nestedVal);\n }\n } else if (isArray(val)) {\n // Recurse into arrays\n const nested = extractStringFields(val, path, objectParsers);\n for (const [nestedPath, nestedVal] of nested) {\n result.set(nestedPath, nestedVal);\n }\n }\n };\n\n if (isObject(value)) {\n for (const [key, val] of Object.entries(value)) {\n processValue(val, `${parentPath}.${key}`);\n }\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n processValue(value[i], `${parentPath}[${i}]`);\n }\n }\n\n return result;\n}\n","import type { RefPath } from \"../resolver/types\";\n\nexport enum ValidationSeverity {\n ERROR = \"error\",\n WARNING = \"warning\",\n INFO = \"info\",\n}\n\n/**\n * A validation issue found during token type validation.\n *\n * @property code - Unique error code for this specific issue type\n * @property severity - Severity level (ERROR, WARNING, INFO)\n * @property message - Human-readable description of the issue\n * @property tokenName - The token where the issue was found\n * @property path - Path to the specific field within a structured token (e.g., [\"fontSize\"] or [0, \"blur\"] for arrays)\n * @property line - Optional line number in the source\n * @property data - Additional structured data for debugging\n */\nexport interface ValidationIssue {\n code: string;\n severity: ValidationSeverity;\n message: string;\n tokenName: RefPath;\n path?: (string | number)[];\n line?: number;\n data?: Record<string, unknown>;\n}\n","import type { ASTNode } from \"@interpreter/ast\";\nimport type { Config } from \"@interpreter/config\";\nimport {\n isLanguageError,\n type LanguageError,\n ProcessorError,\n ProcessorErrorCode,\n} from \"@interpreter/errors\";\nimport type { InterpreterResult } from \"@interpreter/interpreter\";\nimport { type ParseExpressionResult, parseExpression } from \"@interpreter/parser\";\nimport {\n BooleanSymbol,\n DictionarySymbol,\n ListSymbol,\n NullSymbol,\n NumberSymbol,\n StringSymbol,\n TokenSymbol,\n} from \"@interpreter/symbols\";\nimport { renameReferences } from \"@interpreter/utils/references\";\nimport { isArray, isBoolean, isNull, isNumber, isObject, isString } from \"@interpreter/utils/type\";\nimport { type ISymbolType, UNINTERPRETED_KEYWORDS } from \"@src/types\";\nimport { createDependencyError } from \"../errors\";\nimport {\n createTokenSymbol,\n createTokenSymbolFromResolvedFields,\n type ObjectParser,\n} from \"../object-parsers\";\nimport { DependencyGraph } from \"../utils/DependencyGraph\";\nimport { extractStringFields } from \"../utils/structured-tokens\";\nimport { getTokenValue, setTokenValue, type TokenData } from \"../utils/tokens\";\nimport type { ValidationIssue } from \"../validator\";\nimport { ValidationSeverity } from \"../validator\";\nimport { DependencyTracker } from \"./DependencyTracker\";\nimport { PrefixManager } from \"./PrefixManager\";\nimport { ReadinessTracker } from \"./ReadinessTracker\";\nimport { ResolutionNotifier } from \"./ResolutionNotifier\";\nimport { TokenInterpreter } from \"./TokenInterpreter\";\nimport type {\n CreateTokenParams,\n CreateTokenResult,\n DeleteTokenParams,\n DeleteTokenResult,\n IssuesMap,\n RefPath,\n ResolvedValueMap,\n ResolveIssue,\n ResolveValueParams,\n ResolveValueResult,\n TokenDataMap,\n TokenInputMap,\n TokenResult,\n TokenResultMap,\n UnresolvedTokenMap,\n UpdateTokenParams,\n UpdateTokenResult,\n} from \"./types\";\n\n/**\n * Validate a resolved value against a registered token type spec.\n * Returns an array of ValidationIssue for any failures.\n *\n * Shared between PrefixResolver (full resolution) and TokenResolver.resolveValue\n * (lightweight preview resolution).\n */\nfunction collectTypeValidationIssues(\n config: Config | undefined,\n tokenName: RefPath,\n tokenType: string,\n value: InterpreterResult,\n): ValidationIssue[] {\n if (!config?.tokenManager) return [];\n if (!config.tokenManager.getSpecByType(tokenType)) return [];\n\n if (value === null || typeof value === \"string\") return [];\n\n let valueToValidate: ListSymbol | DictionarySymbol | typeof value;\n\n if (value instanceof TokenSymbol) {\n const innerValue = value.value;\n if (Array.isArray(innerValue)) {\n valueToValidate = new ListSymbol(innerValue, false, config);\n } else if (innerValue instanceof Map) {\n valueToValidate = new DictionarySymbol(innerValue, config);\n } else {\n valueToValidate = value;\n }\n } else if (typeof value === \"object\" && value !== null && \"type\" in value) {\n valueToValidate = value;\n } else {\n return [];\n }\n\n const validationResults = config.tokenManager.validate(tokenType, valueToValidate as ISymbolType);\n\n const issues: ValidationIssue[] = [];\n for (const result of validationResults) {\n if (!result.valid && result.error) {\n const isNested = result.path && result.path.length > 0;\n issues.push({\n code: result.error,\n severity: ValidationSeverity.WARNING,\n message: isNested\n ? `Validation failed at ${result.path?.join(\".\")}: ${result.error}`\n : `Token validation failed: ${result.error}`,\n tokenName,\n path: result.path,\n data: isNested\n ? { tokenType: result.tokenType, parentTokenType: tokenType }\n : { tokenType },\n });\n }\n }\n return issues;\n}\n\n/**\n * Parse a field path string into an array of path segments.\n * E.g., \"[0].blur\" -> [0, \"blur\"]\n * E.g., \"offsetX\" -> [\"offsetX\"]\n * E.g., \"[0][1].color\" -> [0, 1, \"color\"]\n */\nfunction parseFieldPath(fieldPath: string): (string | number)[] {\n const result: (string | number)[] = [];\n let remaining = fieldPath;\n\n while (remaining.length > 0) {\n // Check for array index: [n]\n const arrayMatch = remaining.match(/^\\[(\\d+)\\]/);\n if (arrayMatch) {\n result.push(parseInt(arrayMatch[1], 10));\n remaining = remaining.substring(arrayMatch[0].length);\n continue;\n }\n\n // Check for property access: .name or name (at start)\n const propMatch = remaining.match(/^\\.?([^.[\\]]+)/);\n if (propMatch) {\n result.push(propMatch[1]);\n remaining = remaining.substring(propMatch[0].length);\n continue;\n }\n\n // Skip leading dot\n if (remaining.startsWith(\".\")) {\n remaining = remaining.substring(1);\n continue;\n }\n\n // Unknown format, break to avoid infinite loop\n break;\n }\n\n return result;\n}\n\n/**\n * Convert a LanguageError to a ValidationIssue for uniform interface.\n * This allows sub-field errors to be in the same format as validation issues.\n */\nfunction errorToValidationIssue(\n error: LanguageError,\n parentToken: RefPath,\n path: (string | number)[],\n): ValidationIssue {\n return {\n code: error.code,\n severity: ValidationSeverity.ERROR,\n message: path.length > 0 ? `Error at ${path.join(\".\")}: ${error.message}` : error.message,\n tokenName: parentToken,\n path,\n line: error.line,\n data: error.data as Record<string, unknown>,\n };\n}\n\nexport type ProcessorResult = {\n graph: DependencyGraph<RefPath>;\n resolved: TokenResultMap;\n issues?: IssuesMap;\n};\n\nexport type ProcessorCallbacks = {\n onResolve?: (tokenName: RefPath, value: InterpreterResult) => void;\n onError?: (\n tokenName: RefPath,\n error: Error,\n originalValue: string | unknown,\n metadata?: { isSubField: boolean; parentToken?: string; fieldPath?: string },\n ) => void;\n};\n\nexport type ProcessorOutput = ProcessorResult & {\n tokens: ResolvedValueMap;\n resolver: TokenResolver;\n issues?: IssuesMap;\n};\n\nexport type ResolverParams = {\n tokens: TokenInputMap;\n callbacks?: ProcessorCallbacks;\n config?: Config;\n objectParsers?: ObjectParser[];\n initialCache?: ResolvedValueMap;\n};\n\n/**\n * Find all tokens affected by a change to the given token.\n *\n * Uses BFS traversal on the reverse dependency graph to identify\n * the changed token plus all tokens that transitively depend on it.\n *\n * @param tokenName - The token that changed\n * @param graph - The dependency graph from ProcessorResult\n * @returns Object containing affected tokens and a subgraph showing their relationships\n *\n * @example\n * const { tokens, subgraph } = getTokenDependencyGraph(\"color.primary\", processorResult.graph);\n * console.log(tokens); // Set(['color.primary', 'button.background', ...])\n * console.log(subgraph.getNodes()); // Map showing dependency relationships\n */\nexport function getTokenDependencyGraph(\n tokenName: RefPath,\n graph: DependencyGraph<RefPath>,\n): {\n tokens: Set<RefPath>;\n subgraph: DependencyGraph<RefPath>;\n} {\n // Build reverse dependency graph to find dependents\n const reverseDeps = new Map<RefPath, Set<RefPath>>();\n const graphNodes = graph.getNodes();\n\n for (const [node, dependencies] of graphNodes) {\n for (const dep of dependencies) {\n if (!reverseDeps.has(dep)) {\n reverseDeps.set(dep, new Set());\n }\n reverseDeps.get(dep)?.add(node);\n }\n }\n\n // Find all tokens transitively affected by this change using BFS\n const affectedTokens = new Set<RefPath>();\n const queue: RefPath[] = [tokenName];\n const visited = new Set<RefPath>();\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (current === undefined || visited.has(current)) continue;\n\n visited.add(current);\n affectedTokens.add(current);\n\n // Add all tokens that depend on this one\n const dependents = reverseDeps.get(current);\n if (dependents) {\n for (const dependent of dependents) {\n if (!visited.has(dependent)) {\n queue.push(dependent);\n }\n }\n }\n }\n\n // Build subgraph containing only affected tokens and their relationships\n const subgraph = new DependencyGraph<RefPath>();\n for (const token of affectedTokens) {\n const dependencies = graphNodes.get(token);\n if (dependencies) {\n // Only include dependencies that are also in the affected set\n const affectedDeps = new Set<RefPath>();\n for (const dep of dependencies) {\n if (affectedTokens.has(dep)) {\n affectedDeps.add(dep);\n }\n }\n subgraph.addNode(token, affectedDeps);\n } else {\n subgraph.addNode(token, []);\n }\n }\n\n return {\n tokens: affectedTokens,\n subgraph,\n };\n}\n\nclass PrefixResolver {\n private readonly tokens: TokenInputMap;\n private readonly callbacks?: ProcessorCallbacks;\n private readonly config?: Config;\n private readonly objectParsers?: ObjectParser[];\n private readonly graph = new DependencyGraph<RefPath>();\n private readonly resolved: TokenResultMap = new Map();\n private readonly unresolved: UnresolvedTokenMap = new Map();\n private readonly referenceCache: ResolvedValueMap = new Map();\n private readonly pendingResolution: Set<RefPath> = new Set();\n private readonly readyQueue: Set<RefPath> = new Set();\n\n // Core components\n private readonly dependencyTracker: DependencyTracker;\n private readonly prefixManager: PrefixManager;\n private readonly tokenInterpreter: TokenInterpreter;\n\n // Phase 3: Optimization components\n private readonly notifier: ResolutionNotifier;\n private readonly readinessTracker: ReadinessTracker;\n\n // Structured tokens tracking\n private readonly subFieldPaths: Set<RefPath> = new Set();\n private readonly structuredTokens: TokenDataMap = new Map();\n\n // Issues collection (errors and lint issues)\n private readonly issues: IssuesMap = new Map();\n\n // Phase state\n private earlyResolved: RefPath[] = [];\n\n // Track missing dependencies that were referenced but don't exist\n private missingDependencies: Set<RefPath> = new Set();\n\n constructor(private readonly params: ResolverParams) {\n const { tokens, callbacks, config, objectParsers } = params;\n\n this.tokens = tokens;\n this.callbacks = callbacks;\n this.config = config;\n this.objectParsers = objectParsers;\n\n // Initialize components\n this.dependencyTracker = new DependencyTracker();\n this.prefixManager = new PrefixManager(config);\n this.tokenInterpreter = new TokenInterpreter(this.referenceCache, config);\n\n // Initialize Phase 3 optimization components\n this.readinessTracker = new ReadinessTracker();\n this.notifier = new ResolutionNotifier(\n this.dependencyTracker,\n this.prefixManager,\n this.readinessTracker,\n this.pendingResolution,\n this.readyQueue,\n (tokenName) => this.resolveSingleToken(tokenName),\n (prefix, cache) => this.buildPrefixDictionary(prefix, cache),\n );\n }\n\n private addIssue(tokenName: RefPath, issue: ResolveIssue): void {\n const existing = this.issues.get(tokenName) || [];\n this.issues.set(tokenName, [...existing, issue]);\n }\n\n /**\n * Add an issue for a sub-field, converting the error to a ValidationIssue.\n * This ensures all issues have a uniform interface (same as validation issues).\n */\n private addSubFieldIssue(parentToken: string, fieldPath: string, error: LanguageError): void {\n const path = parseFieldPath(fieldPath);\n const issue = errorToValidationIssue(error, parentToken, path);\n // Store under parent token name for uniform access\n this.addIssue(parentToken, issue);\n }\n\n private ensureLanguageError(error: Error): LanguageError {\n if (isLanguageError(error)) {\n return error;\n }\n // Wrap unknown errors as ProcessorError\n return new ProcessorError(ProcessorErrorCode.UNKNOWN_PARSING_ERROR, {\n data: { error: error.message },\n });\n }\n\n private resolveError(refPath: RefPath, error: LanguageError, value: string): LanguageError {\n // When a token references a missing dependency (e.g., `bar = \"{foo}\"` where `foo` doesn't exist),\n // we should only report the error on `bar`, not create a phantom entry for `foo` in the output.\n const isActualToken = this.tokens.has(refPath) || this.subFieldPaths.has(refPath);\n\n if (isActualToken) {\n this.resolved.set(refPath, error);\n this.callbacks?.onError?.(refPath, error, value);\n\n // For sub-fields, add issue under parent token with path for uniform interface\n if (this.subFieldPaths.has(refPath)) {\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(refPath);\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, error);\n } else {\n this.addIssue(refPath, error);\n }\n } else {\n this.addIssue(refPath, error);\n }\n\n this.earlyResolved.push(refPath);\n this.graph.addNode(refPath, []);\n }\n\n return error;\n }\n\n private lintTokenResult(tokenName: RefPath, value: InterpreterResult): void {\n // Skip linting sub-fields (internal tokens for structured token resolution)\n if (this.subFieldPaths.has(tokenName)) return;\n\n const tokenData = this.tokens.get(tokenName);\n const tokenType =\n tokenData && typeof tokenData === \"object\" && \"$type\" in tokenData\n ? tokenData.$type\n : undefined;\n\n // Run token type validation\n this.validateTokenType(tokenName, tokenType, value);\n }\n\n private validateTokenType(\n tokenName: RefPath,\n tokenType: string | undefined,\n value: InterpreterResult,\n ): void {\n if (!tokenType) return;\n for (const issue of collectTypeValidationIssues(this.config, tokenName, tokenType, value)) {\n this.addIssue(tokenName, issue);\n }\n }\n\n private earlyResolvePrimitiveToken(tokenName: RefPath, value: InterpreterResult): void {\n this.resolved.set(tokenName, value);\n this.referenceCache.set(tokenName, value);\n this.callbacks?.onResolve?.(tokenName, value);\n this.lintTokenResult(tokenName, value);\n this.graph.addNode(tokenName, []);\n this.earlyResolved.push(tokenName);\n }\n\n private tryParseExpression(refPath: RefPath, value: string): ParseExpressionResult | Error {\n try {\n return parseExpression(value);\n } catch (error) {\n if (isLanguageError(error)) {\n return this.resolveError(refPath, error, value);\n }\n return this.resolveError(\n refPath,\n new ProcessorError(ProcessorErrorCode.UNKNOWN_PARSING_ERROR, {\n data: { error: error instanceof Error ? error.message : String(error) },\n }),\n value,\n );\n }\n }\n\n private processParsedToken(tokenName: RefPath, ast: ASTNode, dependencies: Set<RefPath>): void {\n this.tokenInterpreter.setTokenAST(tokenName, ast);\n\n if (dependencies.size > 0) {\n this.unresolved.set(tokenName, { ast, dependencies });\n }\n\n this.graph.addNode(tokenName, dependencies);\n\n for (const dep of dependencies) {\n if (this.prefixManager.hasPrefix(dep) && !this.tokens.has(dep)) {\n continue;\n }\n\n if (this.resolved.has(dep)) continue;\n\n this.dependencyTracker.addTokenDependency(tokenName, dep);\n\n if (this.tokens.has(dep)) continue;\n\n const parentToken = this.prefixManager.findParentToken(dep, this.tokens);\n if (parentToken) {\n this.prefixManager.addVirtualChild(parentToken, dep);\n continue;\n }\n\n // Track missing dependencies that aren't actual tokens\n // The error will be reported on the token that references it\n if (!this.referenceCache.has(dep) && !this.resolved.has(dep) && !this.tokens.has(dep)) {\n this.missingDependencies.add(dep);\n }\n }\n }\n\n public resolve(): ProcessorResult {\n this.parseAndBuildGraph();\n this.mapPrefixDependencies();\n this.releaseEarlyResolved();\n this.resolveDependencyFreeTokens();\n this.finalizeResolution();\n return {\n graph: this.graph,\n resolved: this.resolved,\n issues: this.issues.size > 0 ? this.issues : undefined,\n };\n }\n\n // Expose internal state for incremental updates\n public getGraph(): DependencyGraph<RefPath> {\n return this.graph;\n }\n\n public getReferenceCache(): Map<string, InterpreterResult> {\n return this.referenceCache;\n }\n\n public getTokenInterpreter(): TokenInterpreter {\n return this.tokenInterpreter;\n }\n\n public getSubFieldPaths(): Set<RefPath> {\n return this.subFieldPaths;\n }\n\n public clone(overrides: Partial<ResolverParams>): PrefixResolver {\n const { tokens, callbacks } = {\n ...this.params,\n ...overrides,\n };\n\n const resolver = new PrefixResolver({\n tokens,\n callbacks,\n config: this.config,\n objectParsers: this.objectParsers,\n });\n\n if (overrides.initialCache && overrides.tokens) {\n for (const [tokenName, value] of overrides.initialCache) {\n if (!overrides.tokens.has(tokenName)) {\n resolver.referenceCache.set(tokenName, value);\n }\n }\n }\n\n return resolver;\n }\n\n /**\n * Phase 1: Parse and build graph (ResolutionPhase.PARSE_AND_BUILD_GRAPH)\n * - Parse all token values into ASTs\n * - Build dependency graph\n * - Identify and mark early-resolved tokens\n * - Detect missing token dependencies\n * - Handle primitive and structured tokens\n */\n private parseAndBuildGraph(): void {\n this.earlyResolved = [];\n\n for (const [tokenName, tokenData] of this.tokens.entries()) {\n const tokenValue = getTokenValue(tokenData);\n\n // Handle uninterpreted keywords\n if (isString(tokenValue) && UNINTERPRETED_KEYWORDS.includes(tokenValue)) {\n const symbol = new StringSymbol(tokenValue, this.config);\n this.earlyResolvePrimitiveToken(tokenName, symbol);\n continue;\n }\n\n if (isNumber(tokenValue)) {\n this.earlyResolvePrimitiveToken(tokenName, new NumberSymbol(tokenValue, this.config));\n continue;\n }\n\n if (isBoolean(tokenValue)) {\n this.earlyResolvePrimitiveToken(tokenName, new BooleanSymbol(tokenValue, this.config));\n continue;\n }\n\n if (isNull(tokenValue)) {\n this.earlyResolvePrimitiveToken(tokenName, new NullSymbol(this.config));\n continue;\n }\n\n if (isObject(tokenValue) || isArray(tokenValue)) {\n this.handleStructuredToken(tokenName, setTokenValue(tokenData));\n continue;\n }\n\n // Handle string values (may contain references)\n const tokenValueStr = String(tokenValue);\n const parseResult = this.tryParseExpression(tokenName, tokenValueStr);\n if (parseResult instanceof Error) {\n continue;\n }\n\n const { ast, parser } = parseResult;\n if (!ast) {\n this.earlyResolvePrimitiveToken(tokenName, \"\");\n continue;\n }\n\n this.prefixManager.addTokenToPrefix(tokenName);\n this.processParsedToken(tokenName, ast, parser.requiredReferences);\n }\n }\n\n private handleStructuredToken(tokenName: RefPath, tokenData: TokenData): void {\n const tokenValue = tokenData.$value;\n\n // Store for later assembly\n this.structuredTokens.set(tokenName, tokenData);\n\n // Extract string fields that may contain references\n const stringFields = extractStringFields(\n tokenValue,\n tokenName,\n this.objectParsers || undefined,\n );\n\n if (stringFields.size === 0) {\n // No string fields to resolve, token is ready\n // Create TokenSymbol and store it in both resolved and reference cache\n const tokenType = tokenData.$type || \"unknown\";\n const tokenSymbol = createTokenSymbol(\n tokenValue,\n tokenType,\n this.config,\n this.objectParsers,\n tokenData.$metadata,\n );\n this.resolved.set(tokenName, tokenSymbol);\n this.referenceCache.set(tokenName, tokenSymbol);\n\n this.callbacks?.onResolve?.(tokenName, tokenSymbol);\n this.lintTokenResult(tokenName, tokenSymbol);\n this.graph.addNode(tokenName, []);\n this.earlyResolved.push(tokenName);\n return;\n }\n\n // Add string fields as virtual tokens\n for (const [fieldPath, fieldValue] of stringFields) {\n this.subFieldPaths.add(fieldPath);\n\n const parseResult = this.tryParseExpression(fieldPath, fieldValue);\n if (parseResult instanceof Error) {\n continue;\n }\n\n const { ast, parser } = parseResult;\n if (!ast) {\n this.earlyResolvePrimitiveToken(fieldPath, \"\");\n continue;\n }\n\n this.processParsedToken(fieldPath, ast, parser.requiredReferences);\n }\n\n // Parent token depends on all its sub-fields\n const subFieldDeps = Array.from(stringFields.keys());\n this.graph.addNode(tokenName, subFieldDeps);\n for (const dep of subFieldDeps) {\n this.dependencyTracker.addTokenDependency(tokenName, dep);\n }\n this.unresolved.set(tokenName, {\n ast: null as any,\n dependencies: new Set(subFieldDeps),\n });\n }\n\n /**\n * Phase 2: Map prefix dependencies (ResolutionPhase.MAP_PREFIX_DEPENDENCIES)\n * - Identify which tokens depend on prefixes\n * - Activate prefix resolution tracking\n * - Mark prefix dependencies for later resolution\n */\n private mapPrefixDependencies(): void {\n for (const [tokenName, unresolved] of this.unresolved.entries()) {\n for (const dep of unresolved.dependencies) {\n if (this.prefixManager.hasPrefix(dep) && !this.tokens.has(dep)) {\n this.prefixManager.activatePrefix(dep);\n this.dependencyTracker.addPrefixDependency(tokenName, dep);\n }\n }\n }\n }\n\n /**\n * Phase 3: Release early resolved (ResolutionPhase.RELEASE_EARLY_RESOLVED)\n * - Notify dependents of early-resolved tokens\n * - Release prefix dependencies waiting for these tokens\n * - Trigger cascade resolution of dependent tokens\n */\n private releaseEarlyResolved(): void {\n for (const tokenName of this.earlyResolved) {\n this.notifyResolution(tokenName);\n }\n }\n\n /**\n * Phase 4: Resolve dependency-free tokens (ResolutionPhase.RESOLVE_DEPENDENCY_FREE)\n * - Seed ready queue with initially dependency-free tokens\n * - Process queue in event-driven manner (cascade resolution)\n * - Queue is populated by ResolutionNotifier when dependencies are released\n */\n private resolveDependencyFreeTokens(): void {\n // Seed ready queue with initially dependency-free tokens (including sub-fields)\n const allTokens = new Set([...this.tokens.keys(), ...this.subFieldPaths]);\n\n for (const tokenName of allTokens) {\n if (this.resolved.has(tokenName)) continue;\n\n if (this.readinessTracker.isReady(tokenName, this.dependencyTracker)) {\n this.readyQueue.add(tokenName);\n }\n }\n\n // Process ready queue (event-driven cascade resolution)\n while (this.readyQueue.size > 0) {\n const tokenName = this.readyQueue.values().next().value as RefPath;\n this.readyQueue.delete(tokenName);\n this.resolveSingleToken(tokenName);\n }\n }\n\n /**\n * Extract parent token and field path from a sub-field token name.\n * Example: \"shadow.card.offsetY\" -> { parentToken: \"shadow.card\", fieldPath: \"offsetY\" }\n * Example: \"shadow[0].blur\" -> { parentToken: \"shadow\", fieldPath: \"[0].blur\" }\n */\n private extractSubFieldMetadata(subFieldPath: RefPath): {\n parentToken: string;\n fieldPath: string;\n } {\n // Find the parent token by checking which structured token this sub-field belongs to\n for (const [parentToken] of this.structuredTokens) {\n // Check for both dot notation (shadow.offsetX) and bracket notation (shadow[0].blur)\n if (\n subFieldPath.startsWith(`${parentToken}.`) ||\n subFieldPath.startsWith(`${parentToken}[`)\n ) {\n const fieldPath = subFieldPath.substring(parentToken.length);\n // Remove leading dot if present (for dot notation like \"shadow.offsetX\" -> \"offsetX\")\n const normalizedFieldPath = fieldPath.startsWith(\".\") ? fieldPath.substring(1) : fieldPath;\n return { parentToken, fieldPath: normalizedFieldPath };\n }\n }\n\n // Fallback: split on last dot\n const lastDotIndex = subFieldPath.lastIndexOf(\".\");\n if (lastDotIndex !== -1) {\n return {\n parentToken: subFieldPath.substring(0, lastDotIndex),\n fieldPath: subFieldPath.substring(lastDotIndex + 1),\n };\n }\n\n // No parent found\n return { parentToken: \"\", fieldPath: subFieldPath };\n }\n\n private resolveSingleToken(tokenName: RefPath): void {\n if (this.resolved.has(tokenName)) return;\n\n // Prevent re-entrant resolution during cascade\n this.pendingResolution.add(tokenName);\n\n // Check if this is a structured token\n if (this.structuredTokens.has(tokenName)) {\n this.resolveStructuredToken(tokenName);\n this.pendingResolution.delete(tokenName);\n return;\n }\n\n // Check if this is a sub-field (virtual token)\n if (this.subFieldPaths.has(tokenName)) {\n // Sub-fields are resolved via TokenInterpreter\n const ast = this.tokenInterpreter.getTokenAST(tokenName);\n if (ast) {\n const unresolved = this.unresolved.get(tokenName);\n const dependencyError = unresolved\n ? this.tokenInterpreter.buildDependencyError(\n tokenName,\n unresolved.dependencies,\n this.resolved,\n )\n : undefined;\n\n if (dependencyError) {\n this.resolved.set(tokenName, dependencyError);\n // Call onError for sub-field with metadata\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(tokenName);\n this.callbacks?.onError?.(tokenName, dependencyError, \"\", {\n isSubField: true,\n parentToken,\n fieldPath,\n });\n // Add issue under parent token with path for uniform interface\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, dependencyError);\n } else {\n this.addIssue(tokenName, dependencyError);\n }\n } else {\n const tokenValue = this.tokenInterpreter.interpretTokenWithAST(tokenName, ast);\n this.resolved.set(tokenName, tokenValue);\n\n if (tokenValue instanceof Error) {\n // Call onError for sub-field with metadata\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(tokenName);\n this.callbacks?.onError?.(tokenName, tokenValue, \"\", {\n isSubField: true,\n parentToken,\n fieldPath,\n });\n // Add issue under parent token with path for uniform interface\n const langError = this.ensureLanguageError(tokenValue);\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, langError);\n } else {\n this.addIssue(tokenName, langError);\n }\n } else {\n // Don't call onResolve for sub-fields\n this.tokenInterpreter.updateReferenceCache(tokenName, tokenValue);\n }\n }\n }\n\n this.unresolved.delete(tokenName);\n this.notifyResolution(tokenName);\n this.pendingResolution.delete(tokenName);\n return;\n }\n\n // For regular tokens\n const originalValue = this.tokens.get(tokenName);\n if (originalValue === undefined) return;\n\n // For string/primitive tokens\n const tokenValueStr: string = String(getTokenValue(originalValue));\n\n const unresolved = this.unresolved.get(tokenName);\n const dependencyError = unresolved\n ? this.tokenInterpreter.buildDependencyError(\n tokenName,\n unresolved.dependencies,\n this.resolved,\n )\n : undefined;\n\n let tokenValue: TokenResult;\n\n if (dependencyError) {\n tokenValue = dependencyError;\n this.resolved.set(tokenName, dependencyError);\n this.callbacks?.onError?.(tokenName, dependencyError, tokenValueStr);\n this.addIssue(tokenName, dependencyError);\n } else {\n tokenValue = this.tokenInterpreter.interpretToken(tokenName, tokenValueStr);\n this.resolved.set(tokenName, tokenValue);\n\n if (tokenValue instanceof Error) {\n this.callbacks?.onError?.(tokenName, tokenValue, tokenValueStr);\n this.addIssue(tokenName, this.ensureLanguageError(tokenValue));\n } else {\n this.callbacks?.onResolve?.(tokenName, tokenValue);\n this.lintTokenResult(tokenName, tokenValue);\n this.tokenInterpreter.updateReferenceCache(tokenName, tokenValue);\n }\n }\n\n const flattened = this.tokenInterpreter.flattenDictionaryToCache(tokenName, tokenValue);\n this.resolveVirtualChildren(tokenName, flattened);\n this.notifyResolution(tokenName, flattened);\n this.unresolved.delete(tokenName);\n this.pendingResolution.delete(tokenName);\n }\n\n /**\n * Resolve a structured token by assembling resolved sub-fields\n */\n private resolveStructuredToken(tokenName: RefPath): void {\n const tokenData = this.structuredTokens.get(tokenName);\n if (!tokenData) return;\n\n const originalValue = tokenData.$value;\n\n // Extract string fields\n const stringFields = extractStringFields(\n originalValue,\n tokenName,\n this.objectParsers || undefined,\n );\n\n // Check for dependency errors in sub-fields\n const resolvedFields = new Map<string, InterpreterResult>();\n let hasError = false;\n\n for (const [fieldPath] of stringFields) {\n const fieldValue = this.resolved.get(fieldPath);\n if (fieldValue === undefined) {\n // Sub-field not resolved yet (shouldn't happen if dependencies are correct)\n const error = new ProcessorError(ProcessorErrorCode.SUB_FIELD_NOT_RESOLVED, {\n data: { fieldPath },\n });\n this.resolved.set(tokenName, error);\n this.callbacks?.onError?.(tokenName, error, originalValue);\n this.addIssue(tokenName, error);\n hasError = true;\n break;\n }\n if (fieldValue instanceof Error) {\n // Sub-field has error, propagate to parent\n this.resolved.set(tokenName, fieldValue);\n this.callbacks?.onError?.(tokenName, fieldValue, originalValue);\n this.addIssue(tokenName, this.ensureLanguageError(fieldValue));\n hasError = true;\n break;\n }\n resolvedFields.set(fieldPath, fieldValue);\n }\n\n if (!hasError) {\n // Create TokenSymbol directly from resolved fields and original value\n const tokenType = tokenData.$type || \"unknown\";\n const tokenSymbol = createTokenSymbolFromResolvedFields(\n tokenName,\n resolvedFields,\n originalValue,\n tokenType,\n this.config,\n this.objectParsers,\n tokenData.$metadata,\n );\n this.resolved.set(tokenName, tokenSymbol);\n this.referenceCache.set(tokenName, tokenSymbol);\n\n this.callbacks?.onResolve?.(tokenName, tokenSymbol);\n this.lintTokenResult(tokenName, tokenSymbol);\n }\n\n this.unresolved.delete(tokenName);\n this.notifyResolution(tokenName);\n }\n\n private resolveVirtualChildren(parent: RefPath, flattened: RefPath[]): void {\n const children = this.prefixManager.getAndRemoveVirtualChildren(parent);\n if (children.size === 0) return;\n\n const satisfied = flattened.length > 0 ? new Set(flattened) : null;\n const parentValue = this.resolved.get(parent);\n\n for (const child of children) {\n if (satisfied?.has(child) || this.referenceCache.has(child) || this.resolved.has(child)) {\n continue;\n }\n\n const error =\n parentValue instanceof Error\n ? createDependencyError(child, parent, parentValue)\n : new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: child },\n });\n\n this.resolved.set(child, error);\n this.callbacks?.onError?.(child, error, \"\");\n }\n }\n\n private notifyResolution(name: RefPath, flattened?: RefPath[]): void {\n this.notifier.releaseDependencies(name, flattened, this.referenceCache);\n }\n\n /**\n * Helper for ResolutionNotifier to build prefix dictionaries\n */\n private buildPrefixDictionary(prefix: string, cache: Map<string, InterpreterResult>): void {\n const dictionary = this.prefixManager.buildPrefixDictionary(prefix, cache);\n if (dictionary) {\n cache.set(prefix, dictionary);\n }\n }\n\n /**\n * Phase 5: Finalize resolution (ResolutionPhase.FINALIZE)\n * - Handle any true stragglers not caught by event-driven phase\n * - Generate errors for unresolved tokens with dependency issues\n * - Check for circular dependencies\n */\n private finalizeResolution(): void {\n const unresolvedTokens: RefPath[] = [];\n\n // Handle unresolved tokens (both regular tokens and sub-fields)\n const allTokens = new Set([...this.tokens.keys(), ...this.subFieldPaths]);\n\n for (const tokenName of allTokens) {\n if (this.resolved.has(tokenName)) continue;\n\n const isSubField = this.subFieldPaths.has(tokenName);\n\n let tokenValueStr = \"\";\n if (!isSubField) {\n const originalValue = this.tokens.get(tokenName);\n if (originalValue === undefined) continue;\n tokenValueStr = String(getTokenValue(originalValue));\n }\n\n // Check for dependency errors\n const unresolved = this.unresolved.get(tokenName);\n if (unresolved) {\n const dependencyError = this.tokenInterpreter.buildDependencyError(\n tokenName,\n unresolved.dependencies,\n this.resolved,\n this.missingDependencies,\n );\n if (dependencyError) {\n this.resolved.set(tokenName, dependencyError);\n\n if (isSubField) {\n // Call onError for sub-field with metadata\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(tokenName);\n this.callbacks?.onError?.(tokenName, dependencyError, tokenValueStr, {\n isSubField: true,\n parentToken,\n fieldPath,\n });\n // Add issue under parent token with path for uniform interface\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, dependencyError);\n } else {\n this.addIssue(tokenName, dependencyError);\n }\n } else {\n this.callbacks?.onError?.(tokenName, dependencyError, tokenValueStr);\n this.addIssue(tokenName, dependencyError);\n }\n\n this.resolveVirtualChildren(tokenName, []);\n this.notifyResolution(tokenName);\n this.unresolved.delete(tokenName);\n continue;\n }\n }\n\n unresolvedTokens.push(tokenName);\n }\n\n // Process any tokens that became ready during dependency error resolution\n while (this.readyQueue.size > 0) {\n const tokenName = this.readyQueue.values().next().value as RefPath;\n this.readyQueue.delete(tokenName);\n this.resolveSingleToken(tokenName);\n }\n\n // Filter out tokens that were resolved during the ready queue processing\n const stillUnresolved = unresolvedTokens.filter((tokenName) => !this.resolved.has(tokenName));\n\n // Handle remaining unresolved tokens\n if (stillUnresolved.length > 0) {\n // Build a set of tokens that depend on missing dependencies\n const tokensWithMissingDeps = new Set<string>();\n\n // Check each unresolved token to see if it depends on missing tokens\n for (const tokenName of stillUnresolved) {\n const unresolvedData = this.unresolved.get(tokenName);\n if (unresolvedData) {\n // Check if any of its dependencies are missing\n for (const dep of unresolvedData.dependencies) {\n if (this.missingDependencies.has(dep)) {\n tokensWithMissingDeps.add(tokenName);\n break;\n }\n }\n }\n }\n\n for (const tokenName of stillUnresolved) {\n const isSubField = this.subFieldPaths.has(tokenName);\n\n let tokenValueStr = \"\";\n if (!isSubField) {\n const originalValue = this.tokens.get(tokenName);\n if (originalValue === undefined) continue;\n tokenValueStr = String(getTokenValue(originalValue));\n }\n\n // If token depends on missing dependencies, it's not a circular dependency\n // Otherwise, if it's still unresolved, it must be part of a cycle\n const dependsOnMissing = tokensWithMissingDeps.has(tokenName);\n const error = dependsOnMissing\n ? new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName },\n })\n : new ProcessorError(ProcessorErrorCode.CIRCULAR_DEPENDENCY, {\n data: { tokens: tokenName },\n });\n\n this.resolved.set(tokenName, error);\n\n if (isSubField) {\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(tokenName);\n this.callbacks?.onError?.(tokenName, error, tokenValueStr, {\n isSubField: true,\n parentToken,\n fieldPath,\n });\n // Add issue under parent token with path for uniform interface\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, error);\n } else {\n this.addIssue(tokenName, error);\n }\n } else {\n this.callbacks?.onError?.(tokenName, error, tokenValueStr);\n this.addIssue(tokenName, error);\n }\n\n this.resolveVirtualChildren(tokenName, []);\n this.notifyResolution(tokenName);\n this.unresolved.delete(tokenName);\n }\n }\n }\n}\n\n/**\n * TokenResolver - Resolves tokens with dependencies using prefix-aware resolution\n *\n * @example\n * const processor = new TokenResolver();\n * const tokens = new Map([\n * [\"a\", { $value: \"10\" }],\n * [\"b\", { $value: \"{a} * 2\" }],\n * ]);\n * const result = processor.build(tokens);\n */\nexport class TokenResolver {\n private prefixResolver?: PrefixResolver;\n private tokens?: TokenDataMap;\n private config?: Config;\n private objectParsers?: ObjectParser[];\n\n public processTokens(\n tokens: TokenInputMap,\n callbacks?: ProcessorCallbacks,\n config?: Config,\n objectParsers?: ObjectParser[],\n ): ProcessorResult {\n const resolver = new PrefixResolver({\n tokens,\n callbacks,\n config,\n objectParsers,\n });\n return resolver.resolve();\n }\n\n /**\n * Find all tokens affected by a change to the given token.\n *\n * Uses BFS traversal on the reverse dependency graph to identify\n * the changed token plus all tokens that transitively depend on it.\n *\n * @param tokenName - The token that changed\n * @returns Object containing affected tokens and a subgraph showing their relationships\n *\n * @example\n * const { resolver } = new TokenResolver().build(tokens);\n * const { tokens, subgraph } = resolver.getTokenDependencyGraph(\"color.primary\");\n * console.log(tokens); // Set(['color.primary', 'button.background', ...])\n */\n public getTokenDependencyGraph(tokenName: RefPath): {\n tokens: Set<RefPath>;\n subgraph: DependencyGraph<RefPath>;\n } {\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n\n const graph = this.prefixResolver.getGraph();\n\n // Build reverse dependency graph to find dependents\n const reverseDeps = new Map<RefPath, Set<RefPath>>();\n const graphNodes = graph.getNodes();\n\n for (const [node, dependencies] of graphNodes) {\n for (const dep of dependencies) {\n if (!reverseDeps.has(dep)) {\n reverseDeps.set(dep, new Set());\n }\n reverseDeps.get(dep)?.add(node);\n }\n }\n\n // Find all tokens transitively affected by this change using BFS\n const affectedTokens = new Set<RefPath>();\n const queue: RefPath[] = [tokenName];\n const visited = new Set<RefPath>();\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (current === undefined || visited.has(current)) continue;\n\n visited.add(current);\n affectedTokens.add(current);\n\n // Add all tokens that depend on this one\n const dependents = reverseDeps.get(current);\n if (dependents) {\n for (const dependent of dependents) {\n if (!visited.has(dependent)) {\n queue.push(dependent);\n }\n }\n }\n }\n\n // Build subgraph containing only affected tokens and their relationships\n const subgraph = new DependencyGraph<RefPath>();\n for (const token of affectedTokens) {\n const dependencies = graphNodes.get(token);\n if (dependencies) {\n // Only include dependencies that are also in the affected set\n const affectedDeps = new Set<RefPath>();\n for (const dep of dependencies) {\n if (affectedTokens.has(dep)) {\n affectedDeps.add(dep);\n }\n }\n subgraph.addNode(token, affectedDeps);\n } else {\n subgraph.addNode(token, []);\n }\n }\n\n return {\n tokens: affectedTokens,\n subgraph,\n };\n }\n\n public build(\n tokens: TokenDataMap,\n config?: Config,\n objectParsers?: ObjectParser[],\n ): ProcessorOutput {\n const output: ResolvedValueMap = new Map();\n\n const callbacks: ProcessorCallbacks = {\n onResolve: (tokenName, value) => {\n output.set(tokenName, value);\n },\n onError: (tokenName, _error, originalValue) => {\n // Store the original value in output for tokens with errors\n // Cast to any since originalValue can be an object for structured tokens\n output.set(tokenName, originalValue as any);\n // Errors are tracked in the issues map\n },\n };\n\n // Create and store the resolver for future updates\n this.prefixResolver = new PrefixResolver({\n tokens,\n callbacks,\n config,\n objectParsers,\n });\n this.tokens = tokens;\n this.config = config;\n this.objectParsers = objectParsers;\n\n const result = this.prefixResolver.resolve();\n\n // Filter out sub-field paths from output and issues\n const subFieldPaths = this.prefixResolver.getSubFieldPaths();\n if (subFieldPaths.size > 0) {\n for (const subFieldPath of subFieldPaths) {\n output.delete(subFieldPath);\n result.issues?.delete(subFieldPath);\n }\n }\n\n return {\n ...result,\n tokens: output,\n resolver: this,\n issues: result.issues,\n };\n }\n\n private ensureInitialized(): void {\n if (!this.prefixResolver || !this.tokens) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n }\n\n private normalizeTokenPath(tokenPath: string | null | undefined): string {\n return tokenPath?.trim() || \"\";\n }\n\n private createOutputCallbacks(): {\n output: ResolvedValueMap;\n callbacks: ProcessorCallbacks;\n } {\n const output: ResolvedValueMap = new Map();\n const callbacks: ProcessorCallbacks = {\n onResolve: (name, value) => {\n output.set(name, value);\n },\n onError: (_name, _error) => {\n // Errors are already tracked in the PrefixResolver's issues map\n },\n };\n return { output, callbacks };\n }\n\n private rebuildResolver(\n updatedTokens: TokenDataMap,\n callbacks: ProcessorCallbacks,\n changedTokenPath?: string,\n ): ProcessorResult {\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n\n // Use the dependency graph to find tokens affected by the change.\n // Only unaffected tokens get their cached values seeded — affected tokens\n // (and deleted tokens) must be re-resolved from scratch.\n let dirtyTokens: Set<string> | null = null;\n if (changedTokenPath) {\n const graph = this.prefixResolver.getGraph();\n const { tokens: affected } = getTokenDependencyGraph(changedTokenPath, graph);\n dirtyTokens = affected;\n }\n\n const newResolver = this.prefixResolver.clone({\n tokens: updatedTokens,\n callbacks,\n });\n\n const oldCache = this.prefixResolver.getReferenceCache();\n const newCache = newResolver.getReferenceCache();\n for (const [tokenName, value] of oldCache) {\n if (!updatedTokens.has(tokenName)) continue; // deleted token\n if (dirtyTokens?.has(tokenName)) continue; // affected by change\n newCache.set(tokenName, value);\n }\n\n const result = newResolver.resolve();\n this.prefixResolver = newResolver;\n return result;\n }\n\n public updateToken(params: UpdateTokenParams): UpdateTokenResult {\n this.ensureInitialized();\n\n const { tokenPath, tokenData, tokenPathRenamed, updateReferences = false } = params;\n const prevPath = this.normalizeTokenPath(tokenPath);\n const newPath = tokenPathRenamed?.trim();\n\n if (!this.tokens || !this.tokens.has(prevPath)) {\n if (tokenData) {\n const createResult = this.createToken({\n tokenPath: prevPath,\n tokenData,\n });\n return {\n ...createResult,\n updated: false,\n };\n }\n throw new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: prevPath },\n });\n }\n\n const oldTokenData = this.tokens.get(prevPath);\n if (!oldTokenData) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: prevPath },\n });\n }\n\n const isRename = newPath && newPath !== prevPath;\n\n // Validate newPath doesn't already exist when renaming\n if (isRename && this.tokens.has(newPath)) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_ALREADY_EXISTS, {\n data: { tokenName: newPath },\n });\n }\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n const currentGraph = this.prefixResolver.getGraph();\n const { tokens: affectedTokens } = getTokenDependencyGraph(prevPath, currentGraph);\n affectedTokens.delete(prevPath);\n\n const updatedTokens = new Map(this.tokens);\n\n // Handle rename with reference updates if requested\n if (isRename && updateReferences && affectedTokens.size > 0) {\n const renameMap = { [prevPath]: newPath };\n const tokenInterpreter = this.prefixResolver.getTokenInterpreter();\n\n // Update references in all dependent tokens\n for (const dependentToken of affectedTokens) {\n const dependentTokenData = updatedTokens.get(dependentToken);\n if (!dependentTokenData) continue;\n\n const dependentValue = getTokenValue(dependentTokenData);\n if (!isString(dependentValue)) continue;\n\n // Get cached AST instead of reparsing\n const ast = tokenInterpreter.getTokenAST(dependentToken);\n if (!ast) continue;\n\n // Rename references using the utility function\n const updatedValue = renameReferences(dependentValue, ast, renameMap);\n\n // Only update if there was an actual change\n if (updatedValue !== dependentValue) {\n const updatedTokenData = { ...dependentTokenData, $value: updatedValue };\n updatedTokens.set(dependentToken, updatedTokenData);\n }\n }\n }\n\n // Update/rename the token itself\n updatedTokens.delete(prevPath);\n const finalPath = isRename ? newPath : prevPath;\n updatedTokens.set(finalPath, tokenData || oldTokenData);\n this.tokens = updatedTokens;\n\n const { output, callbacks } = this.createOutputCallbacks();\n const resolverResult = this.rebuildResolver(updatedTokens, callbacks, prevPath);\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n const { subgraph } = getTokenDependencyGraph(finalPath, this.prefixResolver.getGraph());\n\n const resolvedValue = output.get(finalPath);\n\n return {\n tokens: output,\n resolved: resolvedValue,\n issues: resolverResult.issues,\n dependants: { graph: subgraph },\n updated: true,\n };\n }\n\n public createToken(params: CreateTokenParams): CreateTokenResult {\n this.ensureInitialized();\n\n const { tokenPath, tokenData } = params;\n const normalizedTokenPath = this.normalizeTokenPath(tokenPath);\n\n if (this.tokens?.has(normalizedTokenPath)) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_ALREADY_EXISTS, {\n data: { tokenName: normalizedTokenPath },\n });\n }\n\n const updatedTokens = new Map(this.tokens);\n updatedTokens.set(normalizedTokenPath, tokenData);\n this.tokens = updatedTokens;\n\n const { output, callbacks } = this.createOutputCallbacks();\n const resolverResult = this.rebuildResolver(updatedTokens, callbacks, normalizedTokenPath);\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n const { subgraph } = getTokenDependencyGraph(\n normalizedTokenPath,\n this.prefixResolver.getGraph(),\n );\n\n const resolvedValue = output.get(normalizedTokenPath);\n\n return {\n tokens: output,\n resolved: resolvedValue,\n issues: resolverResult.issues,\n dependants: { graph: subgraph },\n created: true,\n };\n }\n\n public deleteToken(params: DeleteTokenParams): DeleteTokenResult {\n this.ensureInitialized();\n\n const { tokenPath } = params;\n const normalizedTokenPath = this.normalizeTokenPath(tokenPath);\n\n if (!this.tokens?.has(normalizedTokenPath)) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: normalizedTokenPath },\n });\n }\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n const currentGraph = this.prefixResolver.getGraph();\n const { subgraph } = getTokenDependencyGraph(normalizedTokenPath, currentGraph);\n\n // Remove the deleted token from the subgraph (it no longer exists)\n subgraph.removeNode(normalizedTokenPath);\n\n const updatedTokens = new Map(this.tokens);\n updatedTokens.delete(normalizedTokenPath);\n this.tokens = updatedTokens;\n\n const { output, callbacks } = this.createOutputCallbacks();\n const resolverResult = this.rebuildResolver(updatedTokens, callbacks, normalizedTokenPath);\n\n return {\n tokens: output,\n issues: resolverResult.issues,\n dependants: { graph: subgraph },\n };\n }\n\n /**\n * Resolve a single value expression against the existing warm cache.\n * No cloning, no graph rebuild, no re-parsing of other tokens.\n * Use this for lightweight preview resolution (e.g. live form input).\n *\n * **Important:** This method reads from the resolver's current cache and\n * shares its interpreter instance. It is intended for development-time\n * previews only. Callers that need isolation (e.g. speculative resolution\n * that must not observe or affect other operations) should clone the\n * `TokenResolver` first via `build()` on a copy of the token map.\n *\n * Must not be called concurrently with `updateToken`, `createToken`,\n * or `deleteToken` — those methods rebuild the internal resolver and\n * the shared interpreter state would conflict.\n */\n public resolveValue(params: ResolveValueParams): ResolveValueResult {\n this.ensureInitialized();\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n\n const { value, type, validate } = params;\n const issues: ResolveIssue[] = [];\n\n if (value === undefined || value === null || value === \"\") {\n return { resolved: null, issues };\n }\n\n const valueStr = String(value);\n\n // Parse the expression — LanguageErrors are thrown on syntax errors\n let ast: ASTNode | null = null;\n try {\n const result = parseExpression(valueStr);\n ast = result.ast;\n } catch (error) {\n if (isLanguageError(error)) {\n issues.push(error);\n return { resolved: null, issues };\n }\n throw error;\n }\n\n if (!ast) {\n return { resolved: valueStr, issues };\n }\n\n // Interpret against the warm reference cache — no clone, no rebuild\n const tokenInterpreter = this.prefixResolver.getTokenInterpreter();\n const resolved = tokenInterpreter.interpretTokenWithAST(\"\\0__preview__\", ast);\n\n if (resolved instanceof Error) {\n if (isLanguageError(resolved)) {\n issues.push(resolved);\n }\n return { resolved: null, issues };\n }\n\n if (validate && type) {\n issues.push(...collectTypeValidationIssues(this.config, \"\\0__preview__\", type, resolved));\n }\n\n return { resolved, issues };\n }\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport type { TokenBuilder } from \"./types\";\n\nexport class MapBuilder implements TokenBuilder<Map<string, string | InterpreterResult>> {\n readonly name = \"map\";\n protected result: Map<string, string | InterpreterResult> = new Map();\n private successfullyResolved: Map<string, InterpreterResult> = new Map();\n\n onResolve(tokenName: string, value: InterpreterResult): void {\n this.successfullyResolved.set(tokenName, value);\n this.result.set(tokenName, value);\n }\n\n onError(tokenName: string, _error: Error, originalValue: string | unknown): void {\n this.result.set(tokenName, originalValue as string);\n }\n\n getResult(): Map<string, string | InterpreterResult> {\n return this.result;\n }\n\n getResolvedTokens(): Map<string, InterpreterResult> {\n return this.successfullyResolved;\n }\n}\n","import type { Config } from \"@interpreter/config\";\nimport type { InterpreterResult } from \"@interpreter/interpreter\";\nimport {\n isTokenscriptSymbol,\n serializeInterpreterResult,\n stringifyInterpreterResult,\n} from \"@interpreter/symbols\";\nimport type { ObjectParser } from \"../object-parsers\";\nimport { getTokenError } from \"../resolver\";\nimport { type ProcessorOutput, TokenResolver } from \"../resolver/TokenResolver\";\nimport type { IssuesMap } from \"../resolver/types\";\nimport type { TokenData } from \"../utils/tokens\";\nimport { MapBuilder } from \"./MapBuilder\";\nimport type { TokenBuilder } from \"./types\";\n\nexport { serializeInterpreterResult, stringifyInterpreterResult };\n\nexport type TokenDataMap = Map<string, TokenData>;\n\nexport function toJsonObject(value: unknown): unknown {\n if (value instanceof Map) return Object.fromEntries(value);\n if (isTokenscriptSymbol(value)) return value.toJs({ stringify: true });\n return value;\n}\n\nexport function stringifyAsJson(output: unknown, indent = 2): string {\n return JSON.stringify(output, (_key, value) => toJsonObject(value), indent);\n}\n\nexport interface BuildTokensOptions<T> {\n builder?: TokenBuilder<T>;\n config?: Config;\n objectParsers?: ObjectParser[];\n}\n\n/**\n * Builds tokens from a normalized TokenDataMap.\n *\n * This is the core token processing function. For most use cases, call this directly\n * rather than using the higher-level processTokens/processTokenSets wrappers.\n *\n * @param tokens - Map of token names to TokenData. Must be pre-normalized to TokenData format.\n * @param options - Build options (all optional):\n * - builder: Custom token builder (default: MapBuilder)\n * - config: Interpreter config\n * - objectParsers: Array of object parsers\n * - linter: Lint runner\n * @returns ProcessorOutput with resolved tokens, output, and optional lint results.\n *\n * @remarks\n * Consumers must normalize input to Map<string, TokenData> before calling this function.\n * Use processTokens/processTokenSets for automatic normalization of Records and Maps.\n */\nexport function buildTokens<T = Map<string, InterpreterResult>>(\n tokens: TokenDataMap,\n options?: BuildTokensOptions<T>,\n): ProcessorOutput & {\n output: T;\n issues?: IssuesMap;\n} {\n const { config, builder = new MapBuilder(), objectParsers } = options ?? {};\n\n // Always create a MapBuilder for the tokens map output\n const tokensMapBuilder = builder.constructor === MapBuilder ? builder : new MapBuilder();\n\n // Use build() to properly initialize the resolver for CRUD operations.\n // build() stores the PrefixResolver in the TokenResolver instance, enabling\n // updateToken, createToken, and deleteToken to work on the returned resolver.\n const result = new TokenResolver().build(tokens, config, objectParsers);\n\n // Process all tokens - both successful and failed\n // Errors are now tracked in issues map\n for (const [tokenName, value] of result.tokens) {\n const error = getTokenError(result.issues, tokenName);\n\n if (error) {\n // Token has an error - get original value (keep objects as-is)\n const originalValue = tokens.get(tokenName);\n const originalValueData =\n typeof originalValue === \"string\" ? originalValue : originalValue?.$value;\n\n builder.onError(tokenName, error, originalValueData);\n\n if (builder.constructor !== MapBuilder)\n tokensMapBuilder.onError(tokenName, error, originalValueData);\n } else {\n // Token resolved successfully\n builder.onResolve(tokenName, value);\n\n if (builder.constructor !== MapBuilder) tokensMapBuilder.onResolve(tokenName, value);\n }\n }\n\n const tokensMap = tokensMapBuilder.getResult();\n const builderOutput = builder.getResult();\n const issues = result.issues;\n\n return {\n ...result,\n tokens: tokensMap,\n output: builderOutput as T,\n issues,\n resolver: result.resolver,\n };\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport { DictionarySymbol } from \"@interpreter/symbols\";\n\nexport type FlattenCallback<T> = (key: string, value: InterpreterResult) => T;\n\n/**\n * Flatten a DictionarySymbol into key-value pairs\n *\n * @param result - The InterpreterResult to flatten (only DictionarySymbol will be flattened)\n * @param prefix - The prefix to prepend to keys\n * @param callback - Callback function that receives each flattened key-value pair\n *\n * @example\n * const result: Record<string, unknown> = {};\n * flattenChildrenObject(dictionarySymbol, \"root\", (key, value) => {\n * result[key] = value;\n * });\n */\nexport function flattenChildrenObject<T>(\n result: InterpreterResult,\n prefix: string,\n callback: FlattenCallback<T>,\n): void {\n if (result instanceof DictionarySymbol) {\n flattenChildrenMap(result.value, prefix, callback);\n }\n}\n\n/**\n * Flatten a Map structure into key-value pairs\n *\n * @param map - The map to flatten (from Dictionary.value)\n * @param prefix - The prefix to prepend to keys\n * @param callback - Callback function that receives each flattened key-value pair\n *\n * @example\n * const result = new Map<string, unknown>();\n * flattenChildrenMap(dictionarySymbol.value, \"root\", (key, value) => {\n * result.set(key, value);\n * });\n */\nexport function flattenChildrenMap<T>(\n map: Map<string, InterpreterResult>,\n prefix: string,\n callback: FlattenCallback<T>,\n): void {\n for (const [key, value] of map.entries()) {\n const newKey = `${prefix}.${key}`;\n\n if (typeof value === \"undefined\") {\n continue;\n }\n\n if (value instanceof DictionarySymbol) {\n flattenChildrenMap(value.value, newKey, callback);\n } else {\n callback(newKey, value);\n }\n }\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport { isObject } from \"@/src/interpreter/utils/type\";\nimport { serializeInterpreterResult } from \"./base\";\nimport { flattenChildrenObject } from \"./flatten\";\nimport type { TokenBuilder } from \"./types\";\n\nfunction setNestedValue(target: Record<string, unknown>, path: string, value: unknown): void {\n if (path.length === 0) {\n return;\n }\n const segments = path.split(\".\");\n let cursor: Record<string, unknown> = target;\n for (let i = 0; i < segments.length; i++) {\n const key = segments[i];\n const isLast = i === segments.length - 1;\n if (isLast) {\n cursor[key] = value;\n return;\n }\n if (!isObject(cursor[key])) {\n cursor[key] = {};\n }\n cursor = cursor[key] as Record<string, unknown>;\n }\n}\n\n/**\n * Nested Object Builder\n *\n * Builds a nested object structure incrementally as tokens are resolved.\n * Converts flat token paths to nested structure.\n * Example: \"color.primary\" -> { color: { primary: value } }\n */\nexport class NestedObjectBuilder implements TokenBuilder<Record<string, unknown>> {\n readonly name = \"nested\";\n private result: Record<string, unknown> = {};\n\n onResolve(tokenName: string, value: InterpreterResult): void {\n const serialized = serializeInterpreterResult(value, { stringify: true });\n if (typeof serialized !== \"undefined\") {\n setNestedValue(this.result, tokenName, serialized);\n }\n }\n\n onError(tokenName: string, _error: Error, originalValue: string | unknown): void {\n // Store original value for failed tokens\n setNestedValue(this.result, tokenName, originalValue);\n }\n\n getResult(): Record<string, unknown> {\n return this.result;\n }\n}\n\n/**\n * Flat Object Builder\n *\n * Builds a flat key-value object incrementally as tokens are resolved.\n * Example: \"color.primary\" -> { \"color.primary\": value }\n */\nexport class FlatObjectBuilder implements TokenBuilder<Record<string, unknown>> {\n readonly name = \"flat\";\n private result: Record<string, unknown> = {};\n\n onResolve(tokenName: string, value: InterpreterResult): void {\n // First try to flatten the InterpreterResult directly (handles Dictionary symbols)\n let didFlatten = false;\n flattenChildrenObject(value, tokenName, (key, val) => {\n didFlatten = true;\n this.result[key] = serializeInterpreterResult(val, { stringify: true });\n });\n\n // If nothing was flattened, serialize and store the value directly\n if (!didFlatten) {\n const serialized = serializeInterpreterResult(value, { stringify: true });\n if (typeof serialized !== \"undefined\") {\n this.result[tokenName] = serialized;\n }\n }\n }\n\n onError(tokenName: string, _error: Error, originalValue: string | unknown): void {\n // Store original value for failed tokens\n this.result[tokenName] = originalValue;\n }\n\n getResult(): Record<string, unknown> {\n return this.result;\n }\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport { stringifyInterpreterResult } from \"./base\";\nimport { MapBuilder } from \"./MapBuilder\";\n\nexport class StringMapBuilder extends MapBuilder {\n onResolve(tokenName: string, value: InterpreterResult): void {\n super.onResolve(tokenName, value);\n this.result.set(tokenName, stringifyInterpreterResult(value));\n }\n\n getResult(): Map<string, string> {\n const stringMap = new Map<string, string>();\n for (const [key, value] of this.result.entries()) {\n stringMap.set(key, typeof value === \"string\" ? value : stringifyInterpreterResult(value));\n }\n return stringMap;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/processor/resolver/DependencyTracker.ts","../../src/processor/resolver/helpers.ts","../../src/processor/resolver/issue-helpers.ts","../../src/processor/resolver/PrefixExtractor.ts","../../src/processor/resolver/PrefixManager.ts","../../src/processor/resolver/ReadinessTracker.ts","../../src/processor/resolver/ResolutionNotifier.ts","../../src/processor/utils/theme-resolver.ts","../../src/processor/utils/tokens.ts","../../src/processor/utils/set-processor.ts","../../src/processor/process.ts","../../src/processor/errors.ts","../../src/processor/resolver/TokenInterpreter.ts","../../src/processor/object-parsers/default-object-parsers.ts","../../src/processor/object-parsers/parsers/number-with-unit.ts","../../src/processor/object-parsers/symbol-conversion.ts","../../src/processor/utils/DependencyGraph.ts","../../src/processor/utils/name-validation.ts","../../src/processor/utils/structured-tokens.ts","../../src/processor/validator/types.ts","../../src/processor/resolver/TokenResolver.ts","../../src/processor/builders/MapBuilder.ts","../../src/processor/builders/base.ts","../../src/processor/builders/flatten.ts","../../src/processor/builders/ObjectBuilder.ts","../../src/processor/builders/StringMapBuilder.ts"],"names":["ValidationSeverity","isNested","unresolved","dependencyError","tokenValue"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Tracks token and prefix dependencies required for prefix resolution.\n *\n * Maintains bidirectional maps for both token and prefix dependencies,\n * enabling efficient lookups in both directions and readiness checking.\n */\nexport class DependencyTracker {\n private readonly tokenDeps = new Map<string, Set<string>>();\n private readonly reverseDeps = new Map<string, Set<string>>();\n private readonly prefixDeps = new Map<string, Set<string>>();\n private readonly prefixReverseDeps = new Map<string, Set<string>>();\n\n addTokenDependency(dependent: string, dependency: string): void {\n this.addToSetMap(this.tokenDeps, dependent, dependency);\n this.addToSetMap(this.reverseDeps, dependency, dependent);\n }\n\n removeTokenDependency(dependent: string, dependency: string): void {\n this.removeFromSetMap(this.tokenDeps, dependent, dependency);\n this.removeFromSetMap(this.reverseDeps, dependency, dependent);\n }\n\n addPrefixDependency(dependent: string, prefix: string): void {\n this.addToSetMap(this.prefixDeps, dependent, prefix);\n this.addToSetMap(this.prefixReverseDeps, prefix, dependent);\n }\n\n removePrefixDependency(dependent: string, prefix: string): void {\n this.removeFromSetMap(this.prefixDeps, dependent, prefix);\n this.removeFromSetMap(this.prefixReverseDeps, prefix, dependent);\n }\n\n getTokenDependents(token: string): Set<string> {\n return this.cloneSet(this.reverseDeps.get(token));\n }\n\n getTokenDependentsIterable(token: string): Iterable<string> {\n return this.reverseDeps.get(token) ?? [];\n }\n\n getTokensWaitingForPrefix(prefix: string): Set<string> {\n return this.cloneSet(this.prefixReverseDeps.get(prefix));\n }\n\n getTokensWaitingForPrefixIterable(prefix: string): Iterable<string> {\n return this.prefixReverseDeps.get(prefix) ?? [];\n }\n\n getTokenDependencies(token: string): Set<string> {\n return this.cloneSet(this.tokenDeps.get(token));\n }\n\n getPrefixDependencies(token: string): Set<string> {\n return this.cloneSet(this.prefixDeps.get(token));\n }\n\n isTokenReady(token: string): boolean {\n const tokenDeps = this.tokenDeps.get(token);\n const prefixDeps = this.prefixDeps.get(token);\n return (!tokenDeps || tokenDeps.size === 0) && (!prefixDeps || prefixDeps.size === 0);\n }\n\n hasAnyDependencies(): boolean {\n return this.tokenDeps.size > 0 || this.prefixDeps.size > 0;\n }\n\n getUnresolvedTokens(): string[] {\n const unresolved = new Set<string>();\n for (const [token] of this.tokenDeps) unresolved.add(token);\n for (const [token] of this.prefixDeps) unresolved.add(token);\n return Array.from(unresolved);\n }\n\n private addToSetMap<K, V>(map: Map<K, Set<V>>, key: K, value: V): void {\n let set = map.get(key);\n if (!set) {\n set = new Set<V>();\n map.set(key, set);\n }\n set.add(value);\n }\n\n private removeFromSetMap<K, V>(map: Map<K, Set<V>>, key: K, value: V): void {\n const set = map.get(key);\n if (!set) return;\n set.delete(value);\n if (set.size === 0) {\n map.delete(key);\n }\n }\n\n private cloneSet(values?: Set<string>): Set<string> {\n return values ? new Set(values) : new Set();\n }\n}\n","import { isLanguageError } from \"@interpreter/errors\";\nimport { ProcessorErrorCode } from \"@interpreter/errors/codes/processor\";\nimport type { RefPath, TokenOperationResult } from \"./types\";\n\n/**\n * Get all affected token paths from the dependants graph.\n * Returns the set of all tokens that depend on the changed token.\n */\nexport function getAffectedTokens(result: TokenOperationResult): Set<RefPath> {\n if (!result.dependants?.graph) {\n return new Set();\n }\n return new Set(result.dependants.graph.getNodes().keys());\n}\n\n/**\n * Get broken references from issues.\n * Filters issues for TOKEN_NOT_FOUND or DEPENDENCY_ERROR codes.\n */\nexport function getBrokenReferences(result: TokenOperationResult): Set<RefPath> {\n if (!result.issues) {\n return new Set();\n }\n\n const brokenRefs = new Set<RefPath>();\n\n for (const [tokenPath, issues] of result.issues) {\n for (const issue of issues) {\n // Check for ProcessorError with TOKEN_NOT_FOUND or DEPENDENCY_ERROR code\n if (\n isLanguageError(issue) &&\n (issue.code === ProcessorErrorCode.TOKEN_NOT_FOUND ||\n issue.code === ProcessorErrorCode.DEPENDENCY_ERROR)\n ) {\n brokenRefs.add(tokenPath);\n break;\n }\n }\n }\n\n return brokenRefs;\n}\n\n/**\n * For rename operations: get tokens whose references were updated.\n * Pass the set of tokens that were modified during rename.\n */\nexport function getRenamedReferences(\n _result: TokenOperationResult,\n modifiedTokens: Set<RefPath>,\n): Set<RefPath> {\n return modifiedTokens;\n}\n\n/**\n * Get tokens from the dependants graph whose values actually changed.\n * Compares the old token values with the new result to filter only modified tokens.\n */\nexport function getModifiedDependants(\n oldTokens: Map<RefPath, any>,\n result: TokenOperationResult,\n): Set<RefPath> {\n const modified = new Set<RefPath>();\n\n // Get all dependants from the graph\n const affectedTokens = getAffectedTokens(result);\n\n // Filter to only those whose values actually changed\n for (const tokenPath of affectedTokens) {\n const oldValue = oldTokens.get(tokenPath);\n const newValue = result.tokens.get(tokenPath);\n\n // Compare values - if they differ, the token was modified\n if (oldValue !== newValue) {\n modified.add(tokenPath);\n }\n }\n\n return modified;\n}\n","import type { ProcessorErrorCode } from \"@interpreter/errors\";\nimport type { IssuesMap } from \"./types\";\n\n/**\n * Check if issues map contains an error with the specified code.\n * Useful for checking if any token has a specific type of error.\n *\n * @example\n * ```typescript\n * const result = resolver.updateToken({ ... });\n * if (hasIssueWithCode(result.issues, ProcessorErrorCode.CIRCULAR_DEPENDENCY)) {\n * console.error(\"Circular dependency detected\");\n * }\n * ```\n */\nexport function hasIssueWithCode(issues: IssuesMap | undefined, code: ProcessorErrorCode): boolean {\n if (!issues) return false;\n return Array.from(issues.entries()).some(([_tokenName, issueList]) =>\n issueList.some((issue) => \"code\" in issue && issue.code === code),\n );\n}\n\n/**\n * Check if a specific token has an issue with the specified code.\n *\n * @example\n * ```typescript\n * const result = resolver.updateToken({ tokenPath: \"foo\", ... });\n * if (tokenHasIssueWithCode(result.issues, \"foo\", ProcessorErrorCode.CIRCULAR_DEPENDENCY)) {\n * console.error(\"Token 'foo' has a circular dependency\");\n * }\n * ```\n */\nexport function tokenHasIssueWithCode(\n issues: IssuesMap | undefined,\n tokenName: string,\n code: ProcessorErrorCode,\n): boolean {\n if (!issues) return false;\n const tokenIssues = issues.get(tokenName);\n if (!tokenIssues) return false;\n return tokenIssues.some((issue) => \"code\" in issue && issue.code === code);\n}\n\n/**\n * Get all tokens that have issues of any kind.\n *\n * @example\n * ```typescript\n * const result = resolver.build(tokens);\n * const tokensWithIssues = getTokensWithIssues(result.issues);\n * console.log(`${tokensWithIssues.size} tokens have issues`);\n * ```\n */\nexport function getTokensWithIssues(issues: IssuesMap | undefined): Set<string> {\n if (!issues) return new Set();\n return new Set(issues.keys());\n}\n\n/**\n * Check if there are any issues at all.\n *\n * @example\n * ```typescript\n * const result = resolver.build(tokens);\n * if (hasAnyIssues(result.issues)) {\n * console.error(\"There are issues with the tokens\");\n * }\n * ```\n */\nexport function hasAnyIssues(issues: IssuesMap | undefined): boolean {\n return issues !== undefined && issues.size > 0;\n}\n\n/**\n * Check if a specific token has any error (not lint issue).\n * Errors have a `code` property, while lint issues do not.\n *\n * @example\n * ```typescript\n * const result = resolver.build(tokens);\n * const tokenIssues = result.issues?.get(\"foo\");\n * if (tokenHasError(tokenIssues)) {\n * console.error(\"Token 'foo' has an error\");\n * }\n * ```\n */\nexport function tokenHasError(tokenIssues: Array<{ message: string }> | undefined): boolean {\n if (!tokenIssues) return false;\n return tokenIssues.some((issue) => \"code\" in issue);\n}\n\n/**\n * Get the first error from a token's issues (if any).\n * Returns undefined if there are no errors (only lint issues).\n *\n * @example\n * ```typescript\n * const result = resolver.build(tokens);\n * const error = getTokenError(result.issues, \"foo\");\n * if (error) {\n * console.error(\"Token 'foo' has error:\", error.message);\n * }\n * ```\n */\nexport function getTokenError(issues: IssuesMap | undefined, tokenName: string): Error | undefined {\n if (!issues) return undefined;\n const tokenIssues = issues.get(tokenName);\n if (!tokenIssues) return undefined;\n return tokenIssues.find((issue) => \"code\" in issue) as Error | undefined;\n}\n","import type { RefPath } from \"./types\";\n\n/**\n * Optimizes prefix extraction by caching results.\n *\n * Instead of repeatedly computing prefix paths by scanning for dots,\n * this class caches the computed results to avoid redundant string operations.\n */\nexport class PrefixExtractor {\n private readonly prefixCache = new Map<RefPath, string[]>();\n\n /**\n * Extract all prefix paths for a token reference.\n *\n * Example: \"a.b.c\" returns [\"a\", \"a.b\"]\n * Cached after first call for the same token.\n */\n extractPrefixes(tokenName: RefPath): string[] {\n const cached = this.prefixCache.get(tokenName);\n if (cached) {\n return cached;\n }\n\n const prefixes: string[] = [];\n let dotIndex = tokenName.indexOf(\".\");\n\n while (dotIndex !== -1) {\n prefixes.push(tokenName.slice(0, dotIndex));\n dotIndex = tokenName.indexOf(\".\", dotIndex + 1);\n }\n\n this.prefixCache.set(tokenName, prefixes);\n return prefixes;\n }\n\n clearCache(): void {\n this.prefixCache.clear();\n }\n}\n","import type { Config } from \"@interpreter/config\";\nimport type { InterpreterResult } from \"@interpreter/interpreter\";\nimport {\n DictionarySymbol,\n isTokenscriptSymbol,\n NullSymbol,\n StringSymbol,\n} from \"@interpreter/symbols\";\nimport type { ISymbolType } from \"@src/types\";\nimport { PrefixExtractor } from \"./PrefixExtractor\";\nimport type { RefPath, ResolvedValueMap, TokenInputMap } from \"./types\";\n\n/**\n * Handles prefix bookkeeping, dictionary construction, and virtual child tracking.\n */\nexport class PrefixManager {\n private readonly prefixes = new Map<string, Set<RefPath>>();\n private readonly tokenPrefixes = new Map<RefPath, Set<string>>();\n private readonly activePrefixes = new Map<string, Set<RefPath>>();\n private readonly virtualChildren = new Map<RefPath, Set<RefPath>>();\n private readonly prefixExtractor = new PrefixExtractor();\n\n // Optimization caches\n private readonly directChildrenCache = new Map<string, Set<string>>();\n private readonly parentLookupCache = new Map<RefPath, RefPath | undefined>();\n\n constructor(private readonly config?: Config) {}\n\n addTokenToPrefix(tokenName: RefPath): void {\n const prefixes = this.prefixExtractor.extractPrefixes(tokenName);\n if (prefixes.length === 0) return;\n\n for (const prefix of prefixes) {\n this.addToSetMap(this.prefixes, prefix, tokenName);\n this.addToSetMap(this.tokenPrefixes, tokenName, prefix);\n\n // Cache direct children for this prefix\n const prefixLen = prefix.length + 1;\n const shortName = tokenName.slice(prefixLen);\n if (!shortName.includes(\".\")) {\n this.addToSetMap(this.directChildrenCache, prefix, shortName);\n }\n }\n }\n\n hasPrefix(prefix: string): boolean {\n return this.prefixes.has(prefix);\n }\n\n activatePrefix(prefix: string): void {\n if (this.activePrefixes.has(prefix)) return;\n const members = this.prefixes.get(prefix);\n if (!members || members.size === 0) return;\n this.activePrefixes.set(prefix, new Set(members));\n }\n\n markTokenResolved(tokenName: RefPath): string[] {\n const prefixes = this.tokenPrefixes.get(tokenName);\n if (!prefixes || prefixes.size === 0) return [];\n\n const ready: string[] = [];\n for (const prefix of prefixes) {\n const pending = this.activePrefixes.get(prefix);\n if (!pending) continue;\n pending.delete(tokenName);\n if (pending.size === 0) {\n this.activePrefixes.delete(prefix);\n ready.push(prefix);\n }\n }\n\n this.tokenPrefixes.delete(tokenName);\n return ready;\n }\n\n buildPrefixDictionary(\n prefix: string,\n referenceCache: ResolvedValueMap,\n ): DictionarySymbol | undefined {\n const directChildren = this.directChildrenCache.get(prefix);\n if (!directChildren || directChildren.size === 0) return undefined;\n\n const dictionaryEntries = new Map<string, ISymbolType>();\n\n for (const shortName of directChildren) {\n const tokenName = `${prefix}.${shortName}`;\n const referenceValue = referenceCache.get(tokenName);\n const symbol = this.toSymbol(referenceValue);\n if (symbol) {\n dictionaryEntries.set(shortName, symbol.cloneIfMutable());\n }\n }\n\n if (dictionaryEntries.size === 0) return undefined;\n return new DictionarySymbol(dictionaryEntries, this.config);\n }\n\n findParentToken(reference: RefPath, tokens: TokenInputMap): RefPath | undefined {\n const cached = this.parentLookupCache.get(reference);\n if (cached !== undefined) {\n return cached === null ? undefined : cached;\n }\n\n let lastDotIndex = reference.lastIndexOf(\".\");\n while (lastDotIndex > 0) {\n const candidate = reference.slice(0, lastDotIndex);\n if (tokens.has(candidate)) {\n this.parentLookupCache.set(reference, candidate);\n return candidate;\n }\n lastDotIndex = reference.lastIndexOf(\".\", lastDotIndex - 1);\n }\n\n this.parentLookupCache.set(reference, null as unknown as undefined);\n return undefined;\n }\n\n addVirtualChild(parent: RefPath, child: RefPath): void {\n this.addToSetMap(this.virtualChildren, parent, child);\n }\n\n getVirtualChildren(parent: RefPath): Set<RefPath> {\n const children = this.virtualChildren.get(parent);\n return children ? new Set(children) : new Set();\n }\n\n getAndRemoveVirtualChildren(parent: RefPath): Set<RefPath> {\n const children = this.virtualChildren.get(parent);\n if (!children) return new Set();\n this.virtualChildren.delete(parent);\n return children;\n }\n\n removeVirtualChildren(parent: RefPath): void {\n this.virtualChildren.delete(parent);\n }\n\n getReadyPrefixes(): string[] {\n return Array.from(this.activePrefixes.keys()).filter((prefix) => {\n const pending = this.activePrefixes.get(prefix);\n return pending && pending.size === 0;\n });\n }\n\n clearCaches(): void {\n this.directChildrenCache.clear();\n this.parentLookupCache.clear();\n }\n\n private addToSetMap<K, V>(map: Map<K, Set<V>>, key: K, value: V): void {\n let set = map.get(key);\n if (!set) {\n set = new Set<V>();\n map.set(key, set);\n }\n set.add(value);\n }\n\n private toSymbol(value: InterpreterResult | undefined): ISymbolType | undefined {\n if (value === undefined) return undefined;\n\n if (value === null) return new NullSymbol(this.config);\n if (isTokenscriptSymbol(value)) return value;\n\n return new StringSymbol(String(value), this.config);\n }\n}\n","import type { DependencyTracker } from \"./DependencyTracker\";\nimport type { RefPath } from \"./types\";\n\n/**\n * Optimizes readiness checking by caching results.\n *\n * Readiness checking (whether all dependencies are resolved) can be expensive\n * when done repeatedly. This class caches the state and invalidates intelligently\n * when dependencies change.\n */\nexport class ReadinessTracker {\n private readonly readyCache = new Map<RefPath, boolean>();\n\n /**\n * Check if a token is ready to be resolved.\n * Results are cached until marked dirty.\n */\n isReady(tokenName: RefPath, dependencyTracker: DependencyTracker): boolean {\n if (!this.readyCache.has(tokenName)) {\n const ready = dependencyTracker.isTokenReady(tokenName);\n this.readyCache.set(tokenName, ready);\n return ready;\n }\n const cached = this.readyCache.get(tokenName);\n return cached ?? false;\n }\n\n /**\n * Mark a token's readiness state as dirty after a dependency change\n */\n markDirty(tokenName: RefPath): void {\n this.readyCache.delete(tokenName);\n }\n\n /**\n * Clear all cached state (e.g., for testing)\n */\n clearCache(): void {\n this.readyCache.clear();\n }\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport type { DependencyTracker } from \"./DependencyTracker\";\nimport type { PrefixManager } from \"./PrefixManager\";\nimport type { ReadinessTracker } from \"./ReadinessTracker\";\nimport type { RefPath } from \"./types\";\n\n/**\n * Centralizes dependency and prefix release notification logic with cascade resolution.\n *\n * Eliminates repeated patterns for:\n * - Releasing token dependencies\n * - Releasing prefix constraints\n * - Cascade resolving dependents when they become ready\n */\nexport class ResolutionNotifier {\n constructor(\n private readonly dependencyTracker: DependencyTracker,\n private readonly prefixManager: PrefixManager,\n private readonly readinessTracker: ReadinessTracker,\n private readonly pendingResolution: Set<RefPath>,\n private readonly readyQueue: Set<RefPath>,\n private readonly resolveCallback: (tokenName: RefPath) => void,\n private readonly buildDictionaryCallback: (\n prefix: string,\n referenceCache: Map<string, InterpreterResult>,\n ) => void,\n ) {}\n\n /**\n * Release all dependencies and prefixes for a token and its flattened children.\n * This is called after a token has been successfully resolved.\n * Triggers cascade resolution of any newly-ready dependents.\n */\n releaseDependencies(\n tokenName: RefPath,\n flattened: RefPath[] | undefined,\n referenceCache: Map<string, InterpreterResult>,\n ): void {\n this.releaseDependentsFor(tokenName);\n this.releasePrefixesFor(tokenName, referenceCache);\n\n if (flattened) {\n for (const flatName of flattened) {\n this.releaseDependentsFor(flatName);\n this.releasePrefixesFor(flatName, referenceCache);\n }\n }\n }\n\n /**\n * Release dependents waiting for a specific token and add to ready queue\n */\n private releaseDependentsFor(name: RefPath): void {\n for (const dependent of this.dependencyTracker.getTokenDependentsIterable(name)) {\n if (this.pendingResolution.has(dependent)) continue;\n\n this.dependencyTracker.removeTokenDependency(dependent, name);\n this.readinessTracker.markDirty(dependent);\n\n if (this.readinessTracker.isReady(dependent, this.dependencyTracker)) {\n this.readyQueue.add(dependent);\n }\n }\n }\n\n /**\n * Release prefixes that may now be complete after a token resolution\n */\n private releasePrefixesFor(name: RefPath, referenceCache: Map<string, InterpreterResult>): void {\n const readyPrefixes = this.prefixManager.markTokenResolved(name);\n if (readyPrefixes.length === 0) return;\n\n for (const prefix of readyPrefixes) {\n this.releasePrefixDependents(prefix, referenceCache);\n }\n }\n\n /**\n * Release tokens waiting for a specific prefix and add to ready queue\n */\n private releasePrefixDependents(\n prefix: string,\n referenceCache: Map<string, InterpreterResult>,\n ): void {\n // Build dictionary for this prefix\n this.buildDictionaryCallback(prefix, referenceCache);\n\n // Release tokens waiting for this prefix\n for (const tokenName of this.dependencyTracker.getTokensWaitingForPrefixIterable(prefix)) {\n if (this.pendingResolution.has(tokenName)) continue;\n\n this.dependencyTracker.removePrefixDependency(tokenName, prefix);\n this.readinessTracker.markDirty(tokenName);\n\n if (this.readinessTracker.isReady(tokenName, this.dependencyTracker)) {\n this.readyQueue.add(tokenName);\n }\n }\n }\n}\n","import { z } from \"@tokens-studio/schema-validation\";\nimport { isObject } from \"@/src/interpreter/utils/type\";\n\n/**\n * Validation for the `$themes.json` file format used by Figma Tokens\n * Studio. NOT part of the schema language; this is application config\n * that travels alongside token sets.\n *\n * The `$themes.json` data carries many extra fields beyond what this\n * resolver consumes (`id`, `$figmaStyleReferences`,\n * `$figmaCollectionVariableIds`, etc. — Figma plugin bookkeeping).\n * The schemas below are intentionally LOOSE on every object level: in\n * zod v4 `z.object()` strips unknown keys silently rather than\n * failing, which matches what real `$themes.json` files need.\n */\n\n// Old object format: { \"core\": \"enabled\", \"semantic\": \"source\" }\nconst TokenSetStatus = z.enum([\"enabled\", \"source\"]);\nconst SelectedTokenSetsObjectSchema = z.record(z.string(), TokenSetStatus);\n\n// New array format: [{ id: \"core\", status: \"enabled\" }]\nconst SelectedTokenSetsArraySchema = z.array(\n z.object({\n id: z.string(),\n status: TokenSetStatus,\n }),\n);\n\n// Either format is accepted.\nconst SelectedTokenSetsSchema = z.union([\n SelectedTokenSetsObjectSchema,\n SelectedTokenSetsArraySchema,\n]);\n\nconst ThemeSchema = z.object({\n name: z.string(),\n selectedTokenSets: SelectedTokenSetsSchema,\n figmaCollectionId: z.string().optional(),\n figmaModeId: z.string().optional(),\n group: z.string().optional(),\n});\n\nconst ThemesArraySchema = z.array(ThemeSchema);\n\nexport type ThemesArray = z.infer<typeof ThemesArraySchema>;\nexport type Theme = z.infer<typeof ThemeSchema>;\nexport type SelectedTokenSets = z.infer<typeof SelectedTokenSetsSchema>;\nexport type SelectedTokenSetsObject = z.infer<typeof SelectedTokenSetsObjectSchema>;\nexport type SelectedTokenSetsArray = z.infer<typeof SelectedTokenSetsArraySchema>;\n\n/**\n * Selects a theme by name from an array of themes.\n *\n * @param themes - Array of themes to search through\n * @param themeName - Name of the theme to find\n * @returns The matching theme or undefined if not found\n *\n * @example\n * const themes = [\n * { name: \"light\", selectedTokenSets: { core: \"enabled\" } },\n * { name: \"dark\", selectedTokenSets: { core: \"enabled\" } },\n * ];\n * const darkTheme = selectTheme(themes, \"dark\");\n * // => { name: \"dark\", selectedTokenSets: { core: \"enabled\" } }\n */\nexport const selectTheme = (themes: ThemesArray, themeName: string): Theme | undefined => {\n return themes.find((theme) => theme.name === themeName);\n};\n\n/**\n * Selects a theme by name, or returns the first theme if no name is provided.\n *\n * @param themes - Array of themes to search through\n * @param themeName - Optional name of the theme to find\n * @returns The matching theme, first theme, or undefined if array is empty\n *\n * @example\n * const themes = [\n * { name: \"light\", selectedTokenSets: { core: \"enabled\" } },\n * { name: \"dark\", selectedTokenSets: { core: \"enabled\" } },\n * ];\n * const theme = selectThemeOrFirst(themes, \"dark\");\n * // => { name: \"dark\", selectedTokenSets: { core: \"enabled\" } }\n *\n * const defaultTheme = selectThemeOrFirst(themes);\n * // => { name: \"light\", selectedTokenSets: { core: \"enabled\" } }\n */\nexport const selectThemeOrFirst = (themes: ThemesArray, themeName?: string): Theme | undefined => {\n if (!themeName) {\n return themes[0];\n }\n\n const theme = selectTheme(themes, themeName);\n return theme ?? themes[0];\n};\n\n/**\n * Resolves themes from collected json.\n *\n * Validates the structure with zod (via the schema-validation\n * library's `z` re-export):\n * - Each theme must have a `name` string property\n * - Each theme must have a `selectedTokenSets` property in either\n * the old object format (`{ name: \"enabled\" | \"source\" }`) or the\n * new array format (`[{ id, status }]`)\n * - Optional properties: figmaCollectionId, figmaModeId, group\n * - Extra fields are silently passed through (real-world\n * `$themes.json` files carry Figma plugin bookkeeping fields).\n *\n * @param jsonFiles - Record of collected jsons from file-collector\n * @returns Tuple of [path, themes array] or undefined if no valid themes found\n */\nexport const resolveThemes = (\n jsonFiles: Record<string, unknown>,\n): [string, ThemesArray] | undefined => {\n const themesFile = jsonFiles.$themes;\n if (themesFile) {\n // First try as an object with $themes property\n if (isObject(themesFile) && \"$themes\" in themesFile) {\n const inner = ThemesArraySchema.safeParse(themesFile.$themes);\n if (inner.success) {\n return [\"$themes\", inner.data];\n }\n }\n\n // Then try as a direct array of themes\n const direct = ThemesArraySchema.safeParse(themesFile);\n if (direct.success) {\n return [\"$themes\", direct.data];\n }\n }\n\n return undefined;\n};\n\n/**\n * Extracts an ordered array of set names from selectedTokenSets.\n *\n * Handles both object and array formats:\n * - Object format: { \"core\": \"enabled\", \"semantic\": \"source\" } => [\"core\", \"semantic\"]\n * - Array format: [{ id: \"core\", status: \"enabled\" }] => [\"core\"]\n *\n * @param selectedTokenSets - The selectedTokenSets from a theme\n * @returns Array of set names in order\n *\n * @example\n * const sets = { core: \"enabled\", semantic: \"source\" };\n * const names = extractSetNames(sets);\n * // => [\"core\", \"semantic\"]\n *\n * const setsArray = [{ id: \"core\", status: \"enabled\" }];\n * const namesFromArray = extractSetNames(setsArray);\n * // => [\"core\"]\n */\nexport const extractSetNames = (selectedTokenSets: SelectedTokenSets): string[] => {\n if (Array.isArray(selectedTokenSets)) {\n return selectedTokenSets.map((set) => set.id);\n }\n return Object.keys(selectedTokenSets);\n};\n","import type { SymbolMetadata } from \"@src/types\";\nimport { getKeyAlt, isObject, isString } from \"@/src/interpreter/utils/type\";\n\n/**\n * Structured token data containing value and optional type information\n */\nexport interface TokenData {\n $value: unknown;\n $type?: string;\n /**\n * Optional metadata attached to the token.\n * This is passed through to the TokenSymbol and preserved during cloning.\n * Not accessible to the tokenscript language.\n */\n $metadata?: SymbolMetadata;\n}\n\nexport function getTokenValue(data: string | TokenData): unknown {\n return isString(data) ? data : data.$value;\n}\n\nexport function setTokenValue(value: string | TokenData): TokenData {\n return isString(value) ? { $value: value } : value;\n}\n\n/**\n * Flattens a nested tokens object structure into a flat key-value map with dot-separated paths.\n * Now preserves structured values and captures $type information.\n *\n * @param obj - The nested object to flatten\n * @param prefixAccumulator - Recursion prefix accumulator\n * @returns Flat map of token paths to TokenData\n *\n * @example\n * Input: { color: { red: { $value: \"#FF0000\" } } }\n * Output: Map { \"color.red\" => { $value: \"#FF0000\" } }\n *\n * @example\n * Input: { shadow: { $type: \"shadow\", $value: { offsetX: 0, offsetY: 4 } } }\n * Output: Map { \"shadow\" => { $value: { offsetX: 0, offsetY: 4 }, $type: \"shadow\" } }\n */\nexport function flattenTokensObject(\n obj: Record<string, unknown>,\n prefixAccumulator = \"\",\n): Map<string, TokenData> {\n const result = new Map<string, TokenData>();\n\n for (const [prefix, value] of Object.entries(obj)) {\n if (prefix.startsWith(\"$\")) {\n continue;\n }\n\n const path = prefixAccumulator ? `${prefixAccumulator}.${prefix}` : prefix;\n\n if (isObject(value)) {\n const objValue = value as Record<string, unknown>;\n const tokenValue = getKeyAlt([\"$value\", \"value\"], objValue);\n\n if (tokenValue !== undefined) {\n // Capture $type and $metadata if present\n const tokenType = objValue.$type;\n const tokenMetadata = objValue.$metadata as SymbolMetadata | undefined;\n const tokenData: TokenData = {\n $value: tokenValue,\n ...(tokenType !== undefined && { $type: String(tokenType) }),\n ...(tokenMetadata !== undefined && { $metadata: tokenMetadata }),\n };\n result.set(path, tokenData);\n }\n // Recurse into structure\n else {\n const nested = flattenTokensObject(objValue, path);\n for (const [nestedKey, nestedValue] of nested) {\n result.set(nestedKey, nestedValue);\n }\n }\n }\n // Primitive values are stored directly\n else {\n result.set(path, { $value: value });\n }\n }\n\n return result;\n}\n\nexport function normalizeToTokenData(value: unknown): TokenData {\n if (typeof value === \"string\") {\n return { $value: value };\n }\n if (isObject(value) && \"$value\" in value) {\n const obj = value as Record<string, unknown>;\n const metadata = obj.$metadata as SymbolMetadata | undefined;\n return {\n $value: obj.$value,\n ...(isString(obj.$type) && { $type: obj.$type }),\n ...(metadata !== undefined && { $metadata: metadata }),\n };\n }\n return { $value: value };\n}\n\nexport function recordToMap(record: Record<string, unknown>): Map<string, TokenData> {\n const map = new Map<string, TokenData>();\n for (const [key, value] of Object.entries(record)) {\n map.set(key, normalizeToTokenData(value));\n }\n return map;\n}\n\nexport function isNested(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).some((key) => {\n const value = obj[key];\n return isObject(value) && !key.startsWith(\"$\");\n });\n}\n","import { ProcessorError, ProcessorErrorCode } from \"../../interpreter/errors\";\nimport { isObject } from \"../../interpreter/utils/type\";\nimport { extractSetNames, resolveThemes, selectTheme } from \"./theme-resolver\";\nimport type { TokenData } from \"./tokens\";\nimport { flattenTokensObject, isNested, normalizeToTokenData, recordToMap } from \"./tokens\";\n\nexport function determineSets(\n jsonFiles: Record<string, unknown>,\n activeSets?: string[],\n activeTheme?: string,\n): string[] {\n if (activeSets) return activeSets;\n\n if (activeTheme) {\n const resolved = resolveThemes(jsonFiles);\n if (!resolved) {\n throw new ProcessorError(ProcessorErrorCode.NO_THEMES_FOUND, {\n data: { themeName: activeTheme },\n });\n }\n\n const [, themes] = resolved;\n const theme = selectTheme(themes, activeTheme);\n\n if (!theme) {\n throw new ProcessorError(ProcessorErrorCode.THEME_NOT_FOUND, {\n data: {\n themeName: activeTheme,\n availableThemes: themes.map((t) => t.name),\n },\n });\n }\n\n return extractSetNames(theme.selectedTokenSets);\n }\n\n // Default: if normalized to single entry, use it\n const keys = Object.keys(jsonFiles);\n if (keys.length === 1) {\n return keys;\n }\n\n // If normalized to multiple entries but no selection made, we can't proceed\n if (keys.length > 1) {\n throw new ProcessorError(ProcessorErrorCode.MULTIPLE_SETS_NO_SELECTION, {\n data: { setNames: keys },\n });\n }\n\n throw new ProcessorError(ProcessorErrorCode.NO_SETS_TO_PROCESS);\n}\n\n/**\n * Converts setData to a Map of TokenData.\n * Handles Map, nested objects, and flat records.\n */\nfunction getSetTokens(setData: unknown): Map<string, TokenData> {\n if (setData instanceof Map) {\n return setData;\n }\n\n if (!isObject(setData)) {\n return new Map<string, TokenData>();\n }\n\n if (isNested(setData)) {\n return flattenTokensObject(setData, \"\");\n }\n\n return recordToMap(setData);\n}\n\n/**\n * Flattens token sets or Map inputs to a normalized TokenDataMap.\n * Handles normalization of string values to TokenData format.\n *\n * @param sets - Record of token sets or a Map of tokens\n * @param setNames - Names of sets to process (ignored if sets is a Map)\n * @returns Normalized Map<string, TokenData>\n */\nexport function flattenToTokens(\n sets: Record<string, unknown> | Map<string, unknown>,\n setNames: string[],\n): Map<string, TokenData> {\n const tokens = new Map<string, TokenData>();\n\n // For Map input, iterate directly; for Record, iterate through setNames\n const entries =\n sets instanceof Map ? sets.entries() : setNames.map((name) => [name, sets[name]] as const);\n\n for (const [key, setData] of entries) {\n if (sets instanceof Map) {\n // Direct Map entry - key is token name, setData is the value\n tokens.set(key, normalizeToTokenData(setData));\n } else {\n // Record entry - key is setName, setData is the set content\n // Check if set exists (only needed for Record lookups)\n if (!setData) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_SET_NOT_FOUND, {\n data: { setName: key },\n });\n }\n\n if (!isObject(setData) && !(setData instanceof Map)) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_SET_INVALID, {\n data: { setName: key },\n });\n }\n\n const setTokens = getSetTokens(setData);\n\n for (const [tokenKey, value] of setTokens) {\n tokens.set(tokenKey, normalizeToTokenData(value));\n }\n }\n }\n\n return tokens;\n}\n","import type { InterpreterResult } from \"../interpreter/interpreter\";\nimport { buildTokens } from \"./builders/base\";\nimport type { ProcessOptions, ProcessResult, ProcessSetsOptions } from \"./types\";\nimport { determineSets, flattenToTokens } from \"./utils/set-processor\";\nimport type { TokenData } from \"./utils/tokens\";\n\n// Main ------------------------------------------------------------------------\n\n/**\n * Process flat token collection.\n *\n * @param tokens - Token input in various formats (Map or Record)\n * @param options - Processing options\n * @returns Processed tokens with resolved values\n *\n * @note Performance optimization: If you already have a `Map<string, TokenData>`,\n * you can skip this function and call `buildTokens` directly to avoid unnecessary flattening.\n */\nexport function processTokens<T = Map<string, string | InterpreterResult>>(\n tokens: Map<string, TokenData> | Map<string, string> | Record<string, any>,\n options?: ProcessOptions,\n): ProcessResult<T> {\n const tokenDataMap =\n tokens instanceof Map ? flattenToTokens(tokens, []) : flattenToTokens({ tokens }, [\"tokens\"]);\n\n return buildTokens(tokenDataMap, options) as ProcessResult<T>;\n}\n\n/**\n * Process token sets with theme or set selection.\n */\nexport function processTokenSets<T = Map<string, string | InterpreterResult>>(\n normalizedFiles: Record<string, unknown>,\n options?: ProcessSetsOptions,\n): ProcessResult<T> {\n const { activeSets, activeTheme } = options ?? {};\n\n const setNames = determineSets(normalizedFiles, activeSets, activeTheme);\n\n const tokens = flattenToTokens(normalizedFiles, setNames);\n\n return buildTokens(tokens, options) as ProcessResult<T>;\n}\n","import { ProcessorError, ProcessorErrorCode } from \"@interpreter/errors\";\n\nexport function collectErrors(result: {\n issues?: Map<string, Array<{ message: string }>>;\n tokens: Map<string, any>;\n}): Record<string, { message: string; originalValue: string }> {\n const errors: Record<string, { message: string; originalValue: string }> = {};\n if (!result.issues) return errors;\n\n for (const [tokenName, issueList] of result.issues) {\n const originalValue = result.tokens.get(tokenName);\n // Get the first error issue\n const error = issueList.find((issue) => \"code\" in issue);\n if (error) {\n errors[tokenName] = {\n message: error.message,\n originalValue: String(originalValue),\n };\n }\n }\n return errors;\n}\n\n/**\n * Create a ProcessorError for dependency-related failures.\n * Builds the dependency chain and extracts the root cause.\n */\nexport function createDependencyError(\n tokenName: string,\n dependencyName: string,\n originalError: Error,\n): ProcessorError {\n // Extract chain and root error\n const { chain, rootError } = extractDependencyInfo(tokenName, dependencyName, originalError);\n const chainStr = chain.join(\" → \");\n\n return new ProcessorError(ProcessorErrorCode.DEPENDENCY_ERROR, {\n data: {\n tokenName,\n chain: chainStr,\n rootCause: rootError.message,\n },\n });\n}\n\nfunction extractDependencyInfo(\n tokenName: string,\n dependencyName: string,\n error: Error,\n): { chain: string[]; rootError: Error } {\n // Check if it's already a dependency error\n if (\n error instanceof ProcessorError &&\n error.code === ProcessorErrorCode.DEPENDENCY_ERROR &&\n error.data.chain\n ) {\n // Parse the chain from the existing error\n const existingChain = String(error.data.chain).split(\" → \");\n return {\n chain: [tokenName, ...existingChain],\n rootError: new Error(String(error.data.rootCause)),\n };\n }\n\n // Otherwise, it's a new chain\n return {\n chain: [tokenName, dependencyName],\n rootError: error,\n };\n}\n","import type { ASTNode } from \"@interpreter/ast\";\nimport type { Config } from \"@interpreter/config\";\nimport { isLanguageError, ProcessorError, ProcessorErrorCode } from \"@interpreter/errors\";\nimport { Interpreter } from \"@interpreter/interpreter\";\nimport { parseExpression } from \"@interpreter/parser\";\nimport { DictionarySymbol, jsValueToSymbolType } from \"@interpreter/symbols\";\nimport type { ISymbolType } from \"@src/types\";\nimport { createDependencyError } from \"../errors\";\nimport type { ASTNodeMap, RefPath, ResolvedValueMap, TokenResult, TokenResultMap } from \"./types\";\n\n/**\n * Handles token interpretation and dependency error checking.\n * Manages the interpreter instance and AST execution.\n */\nexport interface TokenInterpreterOptions {\n /** Whether to inject inline constants into the symbol table before evaluation. Defaults to true. */\n inlineConstants?: boolean;\n}\n\nexport class TokenInterpreter {\n private readonly interpreter: Interpreter;\n private readonly astNodes: ASTNodeMap = new Map();\n private readonly parsedConstants: Map<string, ISymbolType> = new Map();\n private readonly inlineConstantsEnabled: boolean;\n\n constructor(\n private readonly referenceCache: ResolvedValueMap,\n private readonly config?: Config,\n options?: TokenInterpreterOptions,\n ) {\n this.inlineConstantsEnabled = options?.inlineConstants ?? true;\n this.interpreter = new Interpreter(null, {\n references: this.referenceCache as Map<string, any>,\n config: this.config,\n });\n\n if (this.inlineConstantsEnabled) {\n this.parseConstants();\n }\n }\n\n private parseConstants(): void {\n if (!this.config) return;\n\n for (const [name, rawValue] of this.config.inlineConstants) {\n if (typeof rawValue === \"string\") {\n try {\n const { ast } = parseExpression(rawValue);\n if (ast) {\n const tempInterpreter = new Interpreter(ast, { config: this.config });\n const result = tempInterpreter.interpret();\n if (result !== null && typeof result !== \"string\") {\n this.parsedConstants.set(name, result);\n } else if (typeof result === \"string\") {\n this.parsedConstants.set(name, jsValueToSymbolType(result, this.config));\n }\n }\n } catch {\n // If parsing fails, store as string symbol\n this.parsedConstants.set(name, jsValueToSymbolType(rawValue, this.config));\n }\n } else {\n this.parsedConstants.set(name, jsValueToSymbolType(rawValue, this.config));\n }\n }\n }\n\n private injectConstants(): void {\n for (const [name, value] of this.parsedConstants) {\n this.interpreter.setSymbol(name, value.cloneIfMutable());\n }\n }\n\n setTokenAST(tokenName: RefPath, ast: ASTNode): void {\n this.astNodes.set(tokenName, ast);\n }\n\n getTokenAST(tokenName: RefPath): ASTNode | undefined {\n return this.astNodes.get(tokenName);\n }\n\n interpretToken(tokenName: RefPath, originalValue: string): TokenResult {\n const ast = this.astNodes.get(tokenName);\n\n if (!ast) {\n return originalValue;\n }\n\n return this.interpretTokenWithAST(tokenName, ast);\n }\n\n interpretTokenWithAST(_tokenName: RefPath, ast: ASTNode): TokenResult {\n try {\n this.interpreter.resetSymbolTable();\n if (this.inlineConstantsEnabled) {\n this.injectConstants();\n }\n this.interpreter.setAst(ast);\n return this.interpreter.interpret();\n } catch (error) {\n if (isLanguageError(error)) {\n return error;\n }\n return new Error(\"Unknown error during token interpretation\", { cause: error });\n }\n }\n\n buildDependencyError(\n tokenName: RefPath,\n dependencies: Set<RefPath>,\n resolved: TokenResultMap,\n missingDependencies?: Set<RefPath>,\n ): ProcessorError | undefined {\n for (const dep of dependencies) {\n // Check resolved map first\n const depValue = resolved.get(dep);\n if (depValue instanceof Error) {\n return createDependencyError(tokenName, dep, depValue);\n }\n\n // Check if it's a missing dependency (explicitly marked as missing)\n if (missingDependencies?.has(dep)) {\n const error = new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: dep },\n });\n return createDependencyError(tokenName, dep, error);\n }\n }\n return undefined;\n }\n\n flattenDictionaryToCache(tokenName: RefPath, value: TokenResult): RefPath[] {\n if (!(value instanceof DictionarySymbol) || !value.value) {\n return [];\n }\n\n const flattenedNames: RefPath[] = [];\n const entries = value.value;\n\n for (const [childKey, childValue] of entries) {\n const flattenedKey = `${tokenName}.${childKey}`;\n const clone = this.isSymbolType(childValue) ? childValue.cloneIfMutable() : childValue;\n this.referenceCache.set(flattenedKey, clone);\n flattenedNames.push(flattenedKey);\n }\n\n return flattenedNames;\n }\n\n updateReferenceCache(tokenName: RefPath, value: TokenResult): void {\n if (value instanceof Error) return;\n this.referenceCache.set(tokenName, value);\n }\n\n private isSymbolType(value: unknown): value is ISymbolType {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n typeof (value as ISymbolType).cloneIfMutable === \"function\",\n );\n }\n}\n","import type { ObjectParser } from \".\";\n\nexport const defaultObjectParsers: ObjectParser[] = [];\n","import type { Config } from \"@interpreter/config\";\nimport { NumberWithUnitSymbol } from \"@interpreter/symbols\";\nimport { isNumber, isObject, isString } from \"@interpreter/utils/type\";\nimport type { ISymbolType } from \"@src/types\";\nimport type { ObjectParser } from \"..\";\n\n/**\n * Matches objects with shape { value: number, unit: string }.\n */\nexport const numberWithUnitParser: ObjectParser = {\n predicate: (value: unknown): boolean => {\n if (!isObject(value)) {\n return false;\n }\n const obj = value as Record<string, unknown>;\n return (\n \"value\" in obj &&\n \"unit\" in obj &&\n isNumber(obj.value) &&\n isString(obj.unit) &&\n Object.keys(obj).length === 2\n );\n },\n toSymbol: (value: any, config?: Config): ISymbolType =>\n new NumberWithUnitSymbol(value.value, value.unit, config),\n};\n","import type { Config } from \"@interpreter/config\";\nimport type { InterpreterResult } from \"@interpreter/interpreter\";\nimport {\n DictionarySymbol,\n jsValueToSymbolType,\n ListSymbol,\n TokenSymbol,\n} from \"@interpreter/symbols\";\nimport { isArray, isObject } from \"@interpreter/utils/type\";\nimport type { ISymbolType, SymbolMetadata } from \"@src/types\";\nimport { defaultObjectParsers, type ObjectParser } from \".\";\n\nexport function parseValueToSymbol(\n value: unknown,\n config?: Config,\n parsers: ObjectParser[] = defaultObjectParsers,\n): ISymbolType | unknown {\n // If already a symbol, return as-is\n if (value && typeof value === \"object\" && \"getTypeName\" in value) {\n return value;\n }\n\n // Try custom object parsers first\n for (const parser of parsers) {\n if (parser.predicate(value)) {\n return parser.toSymbol(value, config);\n }\n }\n\n // Fallback to default jsValueToSymbolType for primitives, objects, and arrays\n return jsValueToSymbolType(value, config);\n}\n\nexport function createTokenSymbol(\n value: unknown,\n tokenType: string = \"unknown\",\n config?: Config,\n parsers: ObjectParser[] = defaultObjectParsers,\n metadata?: SymbolMetadata,\n): TokenSymbol {\n if (isObject(value)) {\n const symbolMap: Record<string, ISymbolType> = {};\n for (const [key, val] of Object.entries(value)) {\n symbolMap[key] = parseValueToSymbol(val, config, parsers) as ISymbolType;\n }\n return new TokenSymbol(tokenType, symbolMap, config, metadata);\n }\n\n if (isArray(value)) {\n const symbolArray = value.map((val) => parseValueToSymbol(val, config, parsers) as ISymbolType);\n return new TokenSymbol(tokenType, symbolArray, config, metadata);\n }\n\n return new TokenSymbol(tokenType, value as Record<string, any>, config, metadata);\n}\n\n/**\n * Helper function to recursively build values from resolved fields.\n * Handles nested objects and arrays.\n *\n * @param currentPath - The current path being processed\n * @param originalValue - The original value at this path\n * @param resolvedFields - Map of field paths to resolved values\n * @param config - Optional config\n * @param parsers - Optional custom object parsers\n * @returns ISymbolType representation of the value\n */\nfunction buildValueFromResolvedFields(\n currentPath: string,\n originalValue: unknown,\n resolvedFields: Map<string, InterpreterResult>,\n config?: Config,\n parsers: ObjectParser[] = defaultObjectParsers,\n): ISymbolType {\n // If this exact path is resolved, use it\n if (resolvedFields.has(currentPath)) {\n return resolvedFields.get(currentPath) as ISymbolType;\n }\n\n // Check if this value matches an object parser (e.g., { value: 8, unit: \"px\" })\n // before recursively processing it\n if (isObject(originalValue)) {\n for (const parser of parsers) {\n if (parser.predicate(originalValue)) {\n return parser.toSymbol(originalValue, config) as ISymbolType;\n }\n }\n\n // No parser matched, recurse into object fields\n // Wrap in DictionarySymbol for TokenScript compatibility\n const symbolMap: Record<string, ISymbolType> = {};\n for (const [key, val] of Object.entries(originalValue)) {\n const fieldPath = `${currentPath}.${key}`;\n symbolMap[key] = buildValueFromResolvedFields(\n fieldPath,\n val,\n resolvedFields,\n config,\n parsers,\n );\n }\n return new DictionarySymbol(symbolMap, config);\n }\n\n if (isArray(originalValue)) {\n const symbolArray: ISymbolType[] = [];\n for (let i = 0; i < originalValue.length; i++) {\n const fieldPath = `${currentPath}[${i}]`;\n symbolArray.push(\n buildValueFromResolvedFields(fieldPath, originalValue[i], resolvedFields, config, parsers),\n );\n }\n return new ListSymbol(symbolArray, false, config);\n }\n\n // Primitive values - convert to symbol\n return parseValueToSymbol(originalValue, config, parsers) as ISymbolType;\n}\n\n/**\n * Create a TokenSymbol from resolved fields and original structured value.\n * This combines the original value with resolved fields to build the final TokenSymbol.\n * Handles nested objects and arrays recursively.\n *\n * @param tokenName - The parent token name\n * @param resolvedFields - Map of field paths to resolved values\n * @param originalValue - The original structured value\n * @param tokenType - The token type\n * @param config - Optional config\n * @param parsers - Optional custom object parsers\n * @returns TokenSymbol with resolved values\n */\nexport function createTokenSymbolFromResolvedFields(\n tokenName: string,\n resolvedFields: Map<string, InterpreterResult>,\n originalValue: unknown,\n tokenType: string = \"unknown\",\n config?: Config,\n parsers: ObjectParser[] = defaultObjectParsers,\n metadata?: SymbolMetadata,\n): TokenSymbol {\n if (isObject(originalValue)) {\n const symbolMap: Record<string, ISymbolType> = {};\n for (const [key, val] of Object.entries(originalValue)) {\n const fieldPath = `${tokenName}.${key}`;\n symbolMap[key] = buildValueFromResolvedFields(\n fieldPath,\n val,\n resolvedFields,\n config,\n parsers,\n );\n }\n return new TokenSymbol(tokenType, symbolMap, config, metadata);\n }\n\n if (isArray(originalValue)) {\n const symbolArray: ISymbolType[] = [];\n for (let i = 0; i < originalValue.length; i++) {\n const fieldPath = `${tokenName}[${i}]`;\n symbolArray.push(\n buildValueFromResolvedFields(fieldPath, originalValue[i], resolvedFields, config, parsers),\n );\n }\n return new TokenSymbol(tokenType, symbolArray, config, metadata);\n }\n\n // Fallback for other types\n return new TokenSymbol(tokenType, originalValue as Record<string, any>, config, metadata);\n}\n","import { ProcessorError, ProcessorErrorCode } from \"@interpreter/errors\";\n\nexport class DependencyGraph<N = string> {\n private nodes = new Map<N, Set<N>>();\n\n addNode(node: N, dependencies: N[] | Set<N> = []): void {\n if (!this.nodes.has(node)) {\n this.nodes.set(node, new Set(dependencies));\n }\n }\n\n removeNode(node: N): void {\n this.nodes.delete(node);\n // Also remove this node from all dependency sets\n for (const deps of this.nodes.values()) {\n deps.delete(node);\n }\n }\n\n getNodes(): Map<N, Set<N>> {\n return this.nodes;\n }\n\n // Find nodes with no dependencies\n entryNodes(): N[] {\n const entries: N[] = [];\n for (const [node, deps] of this.nodes) {\n if (deps.size === 0) {\n entries.push(node);\n }\n }\n return entries;\n }\n\n // Find a cycle in the graph starting from the given nodes\n private findCycle(candidateNodes: N[]): N[] {\n const visited = new Set<N>();\n const recursionStack = new Set<N>();\n const path: N[] = [];\n\n const dfs = (node: N): boolean => {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const deps = this.nodes.get(node);\n if (deps) {\n for (const dep of deps) {\n if (!visited.has(dep)) {\n if (dfs(dep)) {\n return true;\n }\n } else if (recursionStack.has(dep)) {\n return true;\n }\n }\n }\n\n path.pop();\n recursionStack.delete(node);\n return false;\n };\n\n for (const node of candidateNodes) {\n if (!visited.has(node)) {\n if (dfs(node)) {\n return path;\n }\n }\n }\n\n return candidateNodes;\n }\n\n // Topological sort using Kahn's algorithm\n topologicalSort(): N[] {\n const inDegree = new Map<N, number>();\n const result: N[] = [];\n\n // Calculate in-degrees\n for (const node of this.nodes.keys()) {\n inDegree.set(node, 0);\n }\n for (const deps of this.nodes.values()) {\n for (const dep of deps) {\n inDegree.set(dep, (inDegree.get(dep) || 0) + 1);\n }\n }\n\n // Queue nodes with no dependencies\n const queue: N[] = [];\n for (const [node, degree] of inDegree) {\n if (degree === 0) {\n queue.push(node);\n }\n }\n\n while (queue.length > 0) {\n const node = queue.shift();\n if (node === undefined) break;\n result.push(node);\n\n // Reduce in-degree for dependents\n const deps = this.nodes.get(node) || new Set();\n for (const dep of deps) {\n const newDegree = (inDegree.get(dep) || 0) - 1;\n inDegree.set(dep, newDegree);\n if (newDegree === 0) {\n queue.push(dep);\n }\n }\n }\n\n // If result doesn't contain all nodes, there's a cycle\n if (result.length !== this.nodes.size) {\n const resultSet = new Set(result);\n const remainingNodes: N[] = [];\n for (const node of this.nodes.keys()) {\n if (!resultSet.has(node)) {\n remainingNodes.push(node);\n }\n }\n const cycle = this.findCycle(remainingNodes);\n const tokens = `${cycle.map((n) => String(n)).join(\" → \")} → ${String(cycle[0])}`;\n throw new ProcessorError(ProcessorErrorCode.CIRCULAR_DEPENDENCY, {\n data: { tokens },\n });\n }\n\n return result;\n }\n}\n","/**\n * Token name validation.\n *\n * Must stay in sync with the Go and Ruby versions. The shared fixture\n * at tokenscript/test-suites/token-name-validation.json proves they agree.\n * Uses explicit whitespace chars (not \\s) to ensure identical behavior\n * across Go/JS/Ruby regex engines.\n */\n\nconst INVALID_TOKEN_NAME_CHARS = /[ \\t\\n\\r\\f{}[\\]]/;\n\n/** Returns true if a single name segment is valid: non-empty and contains no whitespace, braces, or brackets. */\nexport function validateTokenName(name: string): boolean {\n return name.length > 0 && !INVALID_TOKEN_NAME_CHARS.test(name);\n}\n\n/** Splits a dot-delimited token path into its name segments. */\nexport function splitTokenPath(path: string): string[] {\n return path.split(\".\");\n}\n\n/** Returns true if every segment of a dot-delimited token path is a valid token name. */\nexport function validateTokenPath(path: string): boolean {\n return splitTokenPath(path).every(validateTokenName);\n}\n","import { isArray, isObject, isString } from \"@interpreter/utils/type\";\nimport { defaultObjectParsers, type ObjectParser } from \"../object-parsers\";\n\n/**\n * Check if a value matches any object parser predicate.\n * Object parsers handle special object structures like { value: 8, unit: \"px\" }.\n */\nfunction matchesObjectParser(value: unknown, parsers: ObjectParser[]): boolean {\n if (!isObject(value)) return false;\n return parsers.some((parser) => parser.predicate(value));\n}\n\n/**\n * Extract string fields from a structured value (object or array).\n * Returns a map of field paths to their string values.\n * Recursively extracts from nested objects and arrays, but skips objects\n * that match an object parser (e.g., { value: 8, unit: \"px\" }).\n *\n * @param value - The structured value to extract from\n * @param parentPath - The parent token path\n * @param objectParsers - Optional array of object parsers to check against\n * @returns Map of field paths to string values\n *\n * @example\n * extractStringFields({ offsetX: \"{base}\", offsetY: 4 }, \"shadow\")\n * => Map { \"shadow.offsetX\" => \"{base}\" }\n *\n * @example\n * extractStringFields([{ blur: \"{size}\", color: \"red\" }], \"shadow\")\n * => Map { \"shadow[0].blur\" => \"{size}\" }\n *\n * @example\n * // Object parsers prevent extraction from parsed objects\n * extractStringFields({ small: { value: 8, unit: \"px\" } }, \"spacing\", parsers)\n * => Map {} // empty, because { value, unit } matches NumberWithUnit parser\n */\nexport function extractStringFields(\n value: unknown,\n parentPath: string,\n objectParsers: ObjectParser[] = defaultObjectParsers,\n): Map<string, string> {\n const result = new Map<string, string>();\n\n const processValue = (val: unknown, path: string) => {\n if (isString(val)) {\n result.set(path, val);\n } else if (isObject(val)) {\n // Skip objects that match an object parser (they'll be handled as atomic values)\n if (matchesObjectParser(val, objectParsers)) {\n return;\n }\n // Recurse into nested objects\n const nested = extractStringFields(val, path, objectParsers);\n for (const [nestedPath, nestedVal] of nested) {\n result.set(nestedPath, nestedVal);\n }\n } else if (isArray(val)) {\n // Recurse into arrays\n const nested = extractStringFields(val, path, objectParsers);\n for (const [nestedPath, nestedVal] of nested) {\n result.set(nestedPath, nestedVal);\n }\n }\n };\n\n if (isObject(value)) {\n for (const [key, val] of Object.entries(value)) {\n processValue(val, `${parentPath}.${key}`);\n }\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n processValue(value[i], `${parentPath}[${i}]`);\n }\n }\n\n return result;\n}\n","import type { RefPath } from \"../resolver/types\";\n\nexport enum ValidationSeverity {\n ERROR = \"error\",\n WARNING = \"warning\",\n INFO = \"info\",\n}\n\n/**\n * A validation issue found during token type validation.\n *\n * @property code - Unique error code for this specific issue type\n * @property severity - Severity level (ERROR, WARNING, INFO)\n * @property message - Human-readable description of the issue\n * @property tokenName - The token where the issue was found\n * @property path - Path to the specific field within a structured token (e.g., [\"fontSize\"] or [0, \"blur\"] for arrays)\n * @property line - Optional line number in the source\n * @property data - Additional structured data for debugging\n */\nexport interface ValidationIssue {\n code: string;\n severity: ValidationSeverity;\n message: string;\n tokenName: RefPath;\n path?: (string | number)[];\n line?: number;\n data?: Record<string, unknown>;\n}\n","import type { ASTNode } from \"@interpreter/ast\";\nimport type { Config } from \"@interpreter/config\";\nimport {\n isLanguageError,\n type LanguageError,\n ProcessorError,\n ProcessorErrorCode,\n} from \"@interpreter/errors\";\nimport type { InterpreterResult } from \"@interpreter/interpreter\";\nimport { type ParseExpressionResult, parseExpression } from \"@interpreter/parser\";\nimport {\n BooleanSymbol,\n DictionarySymbol,\n ListSymbol,\n NullSymbol,\n NumberSymbol,\n StringSymbol,\n TokenSymbol,\n} from \"@interpreter/symbols\";\nimport { renameReferences } from \"@interpreter/utils/references\";\nimport { isArray, isBoolean, isNull, isNumber, isObject, isString } from \"@interpreter/utils/type\";\nimport { type ISymbolType, UNINTERPRETED_KEYWORDS } from \"@src/types\";\nimport { createDependencyError } from \"../errors\";\nimport {\n createTokenSymbol,\n createTokenSymbolFromResolvedFields,\n type ObjectParser,\n} from \"../object-parsers\";\nimport { DependencyGraph } from \"../utils/DependencyGraph\";\nimport { validateTokenPath } from \"../utils/name-validation\";\nimport { extractStringFields } from \"../utils/structured-tokens\";\nimport { getTokenValue, setTokenValue, type TokenData } from \"../utils/tokens\";\nimport type { ValidationIssue } from \"../validator\";\nimport { ValidationSeverity } from \"../validator\";\nimport { DependencyTracker } from \"./DependencyTracker\";\nimport { PrefixManager } from \"./PrefixManager\";\nimport { ReadinessTracker } from \"./ReadinessTracker\";\nimport { ResolutionNotifier } from \"./ResolutionNotifier\";\nimport { TokenInterpreter } from \"./TokenInterpreter\";\nimport type {\n CreateTokenParams,\n CreateTokenResult,\n DeleteTokenParams,\n DeleteTokenResult,\n IssuesMap,\n RefPath,\n ResolvedValueMap,\n ResolveIssue,\n ResolveValueParams,\n ResolveValueResult,\n TokenDataMap,\n TokenInputMap,\n TokenResult,\n TokenResultMap,\n UnresolvedTokenMap,\n UpdateTokenParams,\n UpdateTokenResult,\n} from \"./types\";\n\n/**\n * Validate a resolved value against a registered token type spec.\n * Returns an array of ValidationIssue for any failures.\n *\n * Shared between PrefixResolver (full resolution) and TokenResolver.resolveValue\n * (lightweight preview resolution).\n */\nfunction collectTypeValidationIssues(\n config: Config | undefined,\n tokenName: RefPath,\n tokenType: string,\n value: InterpreterResult,\n): ValidationIssue[] {\n if (!config?.tokenManager) return [];\n if (!config.tokenManager.getSpecByType(tokenType)) return [];\n\n if (value === null || typeof value === \"string\") return [];\n\n let valueToValidate: ListSymbol | DictionarySymbol | typeof value;\n\n if (value instanceof TokenSymbol) {\n const innerValue = value.value;\n if (Array.isArray(innerValue)) {\n valueToValidate = new ListSymbol(innerValue, false, config);\n } else if (innerValue instanceof Map) {\n valueToValidate = new DictionarySymbol(innerValue, config);\n } else {\n valueToValidate = value;\n }\n } else if (typeof value === \"object\" && value !== null && \"type\" in value) {\n valueToValidate = value;\n } else {\n return [];\n }\n\n const validationResults = config.tokenManager.validate(tokenType, valueToValidate as ISymbolType);\n\n const issues: ValidationIssue[] = [];\n for (const result of validationResults) {\n if (!result.valid && result.error) {\n const isNested = result.path && result.path.length > 0;\n issues.push({\n code: result.error,\n severity: ValidationSeverity.WARNING,\n message: isNested\n ? `Validation failed at ${result.path?.join(\".\")}: ${result.error}`\n : `Token validation failed: ${result.error}`,\n tokenName,\n path: result.path,\n data: isNested\n ? { tokenType: result.tokenType, parentTokenType: tokenType }\n : { tokenType },\n });\n }\n }\n return issues;\n}\n\n/**\n * Parse a field path string into an array of path segments.\n * E.g., \"[0].blur\" -> [0, \"blur\"]\n * E.g., \"offsetX\" -> [\"offsetX\"]\n * E.g., \"[0][1].color\" -> [0, 1, \"color\"]\n */\nfunction parseFieldPath(fieldPath: string): (string | number)[] {\n const result: (string | number)[] = [];\n let remaining = fieldPath;\n\n while (remaining.length > 0) {\n // Check for array index: [n]\n const arrayMatch = remaining.match(/^\\[(\\d+)\\]/);\n if (arrayMatch) {\n result.push(parseInt(arrayMatch[1], 10));\n remaining = remaining.substring(arrayMatch[0].length);\n continue;\n }\n\n // Check for property access: .name or name (at start)\n const propMatch = remaining.match(/^\\.?([^.[\\]]+)/);\n if (propMatch) {\n result.push(propMatch[1]);\n remaining = remaining.substring(propMatch[0].length);\n continue;\n }\n\n // Skip leading dot\n if (remaining.startsWith(\".\")) {\n remaining = remaining.substring(1);\n continue;\n }\n\n // Unknown format, break to avoid infinite loop\n break;\n }\n\n return result;\n}\n\n/**\n * Convert a LanguageError to a ValidationIssue for uniform interface.\n * This allows sub-field errors to be in the same format as validation issues.\n */\nfunction errorToValidationIssue(\n error: LanguageError,\n parentToken: RefPath,\n path: (string | number)[],\n): ValidationIssue {\n return {\n code: error.code,\n severity: ValidationSeverity.ERROR,\n message: path.length > 0 ? `Error at ${path.join(\".\")}: ${error.message}` : error.message,\n tokenName: parentToken,\n path,\n line: error.line,\n data: error.data as Record<string, unknown>,\n };\n}\n\nexport type ProcessorResult = {\n graph: DependencyGraph<RefPath>;\n resolved: TokenResultMap;\n issues?: IssuesMap;\n};\n\nexport type ProcessorCallbacks = {\n onResolve?: (tokenName: RefPath, value: InterpreterResult) => void;\n onError?: (\n tokenName: RefPath,\n error: Error,\n originalValue: string | unknown,\n metadata?: { isSubField: boolean; parentToken?: string; fieldPath?: string },\n ) => void;\n};\n\nexport type ProcessorOutput = ProcessorResult & {\n tokens: ResolvedValueMap;\n resolver: TokenResolver;\n issues?: IssuesMap;\n};\n\nexport type ResolverParams = {\n tokens: TokenInputMap;\n callbacks?: ProcessorCallbacks;\n config?: Config;\n objectParsers?: ObjectParser[];\n initialCache?: ResolvedValueMap;\n};\n\n/**\n * Find all tokens affected by a change to the given token.\n *\n * Uses BFS traversal on the reverse dependency graph to identify\n * the changed token plus all tokens that transitively depend on it.\n *\n * @param tokenName - The token that changed\n * @param graph - The dependency graph from ProcessorResult\n * @returns Object containing affected tokens and a subgraph showing their relationships\n *\n * @example\n * const { tokens, subgraph } = getTokenDependencyGraph(\"color.primary\", processorResult.graph);\n * console.log(tokens); // Set(['color.primary', 'button.background', ...])\n * console.log(subgraph.getNodes()); // Map showing dependency relationships\n */\nexport function getTokenDependencyGraph(\n tokenName: RefPath,\n graph: DependencyGraph<RefPath>,\n): {\n tokens: Set<RefPath>;\n subgraph: DependencyGraph<RefPath>;\n} {\n // Build reverse dependency graph to find dependents\n const reverseDeps = new Map<RefPath, Set<RefPath>>();\n const graphNodes = graph.getNodes();\n\n for (const [node, dependencies] of graphNodes) {\n for (const dep of dependencies) {\n if (!reverseDeps.has(dep)) {\n reverseDeps.set(dep, new Set());\n }\n reverseDeps.get(dep)?.add(node);\n }\n }\n\n // Find all tokens transitively affected by this change using BFS\n const affectedTokens = new Set<RefPath>();\n const queue: RefPath[] = [tokenName];\n const visited = new Set<RefPath>();\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (current === undefined || visited.has(current)) continue;\n\n visited.add(current);\n affectedTokens.add(current);\n\n // Add all tokens that depend on this one\n const dependents = reverseDeps.get(current);\n if (dependents) {\n for (const dependent of dependents) {\n if (!visited.has(dependent)) {\n queue.push(dependent);\n }\n }\n }\n }\n\n // Build subgraph containing only affected tokens and their relationships\n const subgraph = new DependencyGraph<RefPath>();\n for (const token of affectedTokens) {\n const dependencies = graphNodes.get(token);\n if (dependencies) {\n // Only include dependencies that are also in the affected set\n const affectedDeps = new Set<RefPath>();\n for (const dep of dependencies) {\n if (affectedTokens.has(dep)) {\n affectedDeps.add(dep);\n }\n }\n subgraph.addNode(token, affectedDeps);\n } else {\n subgraph.addNode(token, []);\n }\n }\n\n return {\n tokens: affectedTokens,\n subgraph,\n };\n}\n\nclass PrefixResolver {\n private readonly tokens: TokenInputMap;\n private readonly callbacks?: ProcessorCallbacks;\n private readonly config?: Config;\n private readonly objectParsers?: ObjectParser[];\n private readonly graph = new DependencyGraph<RefPath>();\n private readonly resolved: TokenResultMap = new Map();\n private readonly unresolved: UnresolvedTokenMap = new Map();\n private readonly referenceCache: ResolvedValueMap = new Map();\n private readonly pendingResolution: Set<RefPath> = new Set();\n private readonly readyQueue: Set<RefPath> = new Set();\n\n // Core components\n private readonly dependencyTracker: DependencyTracker;\n private readonly prefixManager: PrefixManager;\n private readonly tokenInterpreter: TokenInterpreter;\n\n // Phase 3: Optimization components\n private readonly notifier: ResolutionNotifier;\n private readonly readinessTracker: ReadinessTracker;\n\n // Structured tokens tracking\n private readonly subFieldPaths: Set<RefPath> = new Set();\n private readonly structuredTokens: TokenDataMap = new Map();\n\n // Issues collection (errors and lint issues)\n private readonly issues: IssuesMap = new Map();\n\n // Phase state\n private earlyResolved: RefPath[] = [];\n\n // Track missing dependencies that were referenced but don't exist\n private missingDependencies: Set<RefPath> = new Set();\n\n constructor(private readonly params: ResolverParams) {\n const { tokens, callbacks, config, objectParsers } = params;\n\n this.tokens = tokens;\n this.callbacks = callbacks;\n this.config = config;\n this.objectParsers = objectParsers;\n\n // Initialize components\n this.dependencyTracker = new DependencyTracker();\n this.prefixManager = new PrefixManager(config);\n this.tokenInterpreter = new TokenInterpreter(this.referenceCache, config);\n\n // Initialize Phase 3 optimization components\n this.readinessTracker = new ReadinessTracker();\n this.notifier = new ResolutionNotifier(\n this.dependencyTracker,\n this.prefixManager,\n this.readinessTracker,\n this.pendingResolution,\n this.readyQueue,\n (tokenName) => this.resolveSingleToken(tokenName),\n (prefix, cache) => this.buildPrefixDictionary(prefix, cache),\n );\n }\n\n private addIssue(tokenName: RefPath, issue: ResolveIssue): void {\n const existing = this.issues.get(tokenName) || [];\n this.issues.set(tokenName, [...existing, issue]);\n }\n\n /**\n * Add an issue for a sub-field, converting the error to a ValidationIssue.\n * This ensures all issues have a uniform interface (same as validation issues).\n */\n private addSubFieldIssue(parentToken: string, fieldPath: string, error: LanguageError): void {\n const path = parseFieldPath(fieldPath);\n const issue = errorToValidationIssue(error, parentToken, path);\n // Store under parent token name for uniform access\n this.addIssue(parentToken, issue);\n }\n\n private ensureLanguageError(error: Error): LanguageError {\n if (isLanguageError(error)) {\n return error;\n }\n // Wrap unknown errors as ProcessorError\n return new ProcessorError(ProcessorErrorCode.UNKNOWN_PARSING_ERROR, {\n data: { error: error.message },\n });\n }\n\n private resolveError(refPath: RefPath, error: LanguageError, value: string): LanguageError {\n // When a token references a missing dependency (e.g., `bar = \"{foo}\"` where `foo` doesn't exist),\n // we should only report the error on `bar`, not create a phantom entry for `foo` in the output.\n const isActualToken = this.tokens.has(refPath) || this.subFieldPaths.has(refPath);\n\n if (isActualToken) {\n this.resolved.set(refPath, error);\n this.callbacks?.onError?.(refPath, error, value);\n\n // For sub-fields, add issue under parent token with path for uniform interface\n if (this.subFieldPaths.has(refPath)) {\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(refPath);\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, error);\n } else {\n this.addIssue(refPath, error);\n }\n } else {\n this.addIssue(refPath, error);\n }\n\n this.earlyResolved.push(refPath);\n this.graph.addNode(refPath, []);\n }\n\n return error;\n }\n\n private lintTokenResult(tokenName: RefPath, value: InterpreterResult): void {\n // Skip linting sub-fields (internal tokens for structured token resolution)\n if (this.subFieldPaths.has(tokenName)) return;\n\n const tokenData = this.tokens.get(tokenName);\n const tokenType =\n tokenData && typeof tokenData === \"object\" && \"$type\" in tokenData\n ? tokenData.$type\n : undefined;\n\n // Run token type validation\n this.validateTokenType(tokenName, tokenType, value);\n }\n\n private validateTokenType(\n tokenName: RefPath,\n tokenType: string | undefined,\n value: InterpreterResult,\n ): void {\n if (!tokenType) return;\n for (const issue of collectTypeValidationIssues(this.config, tokenName, tokenType, value)) {\n this.addIssue(tokenName, issue);\n }\n }\n\n private earlyResolvePrimitiveToken(tokenName: RefPath, value: InterpreterResult): void {\n this.resolved.set(tokenName, value);\n this.referenceCache.set(tokenName, value);\n this.callbacks?.onResolve?.(tokenName, value);\n this.lintTokenResult(tokenName, value);\n this.graph.addNode(tokenName, []);\n this.earlyResolved.push(tokenName);\n }\n\n private tryParseExpression(refPath: RefPath, value: string): ParseExpressionResult | Error {\n try {\n return parseExpression(value);\n } catch (error) {\n if (isLanguageError(error)) {\n return this.resolveError(refPath, error, value);\n }\n return this.resolveError(\n refPath,\n new ProcessorError(ProcessorErrorCode.UNKNOWN_PARSING_ERROR, {\n data: { error: error instanceof Error ? error.message : String(error) },\n }),\n value,\n );\n }\n }\n\n private processParsedToken(tokenName: RefPath, ast: ASTNode, dependencies: Set<RefPath>): void {\n this.tokenInterpreter.setTokenAST(tokenName, ast);\n\n if (dependencies.size > 0) {\n this.unresolved.set(tokenName, { ast, dependencies });\n }\n\n this.graph.addNode(tokenName, dependencies);\n\n for (const dep of dependencies) {\n if (this.prefixManager.hasPrefix(dep) && !this.tokens.has(dep)) {\n continue;\n }\n\n if (this.resolved.has(dep)) continue;\n\n this.dependencyTracker.addTokenDependency(tokenName, dep);\n\n if (this.tokens.has(dep)) continue;\n\n const parentToken = this.prefixManager.findParentToken(dep, this.tokens);\n if (parentToken) {\n this.prefixManager.addVirtualChild(parentToken, dep);\n continue;\n }\n\n // Track missing dependencies that aren't actual tokens\n // The error will be reported on the token that references it\n if (!this.referenceCache.has(dep) && !this.resolved.has(dep) && !this.tokens.has(dep)) {\n this.missingDependencies.add(dep);\n }\n }\n }\n\n public resolve(): ProcessorResult {\n this.parseAndBuildGraph();\n this.mapPrefixDependencies();\n this.releaseEarlyResolved();\n this.resolveDependencyFreeTokens();\n this.finalizeResolution();\n return {\n graph: this.graph,\n resolved: this.resolved,\n issues: this.issues.size > 0 ? this.issues : undefined,\n };\n }\n\n // Expose internal state for incremental updates\n public getGraph(): DependencyGraph<RefPath> {\n return this.graph;\n }\n\n public getReferenceCache(): Map<string, InterpreterResult> {\n return this.referenceCache;\n }\n\n public getTokenInterpreter(): TokenInterpreter {\n return this.tokenInterpreter;\n }\n\n public getSubFieldPaths(): Set<RefPath> {\n return this.subFieldPaths;\n }\n\n public clone(overrides: Partial<ResolverParams>): PrefixResolver {\n const { tokens, callbacks } = {\n ...this.params,\n ...overrides,\n };\n\n const resolver = new PrefixResolver({\n tokens,\n callbacks,\n config: this.config,\n objectParsers: this.objectParsers,\n });\n\n if (overrides.initialCache && overrides.tokens) {\n for (const [tokenName, value] of overrides.initialCache) {\n if (!overrides.tokens.has(tokenName)) {\n resolver.referenceCache.set(tokenName, value);\n }\n }\n }\n\n return resolver;\n }\n\n /**\n * Phase 1: Parse and build graph (ResolutionPhase.PARSE_AND_BUILD_GRAPH)\n * - Parse all token values into ASTs\n * - Build dependency graph\n * - Identify and mark early-resolved tokens\n * - Detect missing token dependencies\n * - Handle primitive and structured tokens\n */\n private parseAndBuildGraph(): void {\n this.earlyResolved = [];\n\n for (const [tokenName, tokenData] of this.tokens.entries()) {\n // Validate token name: each dot-separated segment must not contain\n // spaces, braces, or brackets.\n if (!validateTokenPath(tokenName)) {\n this.addIssue(tokenName, {\n code: \"INVALID_TOKEN_NAME\",\n severity: ValidationSeverity.ERROR,\n message: `token \"${tokenName}\" contains invalid characters in name (spaces, braces, or brackets are not allowed)`,\n tokenName,\n data: { path: tokenName },\n });\n }\n\n const tokenValue = getTokenValue(tokenData);\n\n // Handle uninterpreted keywords\n if (isString(tokenValue) && UNINTERPRETED_KEYWORDS.includes(tokenValue)) {\n const symbol = new StringSymbol(tokenValue, this.config);\n this.earlyResolvePrimitiveToken(tokenName, symbol);\n continue;\n }\n\n if (isNumber(tokenValue)) {\n this.earlyResolvePrimitiveToken(tokenName, new NumberSymbol(tokenValue, this.config));\n continue;\n }\n\n if (isBoolean(tokenValue)) {\n this.earlyResolvePrimitiveToken(tokenName, new BooleanSymbol(tokenValue, this.config));\n continue;\n }\n\n if (isNull(tokenValue)) {\n this.earlyResolvePrimitiveToken(tokenName, new NullSymbol(this.config));\n continue;\n }\n\n if (isObject(tokenValue) || isArray(tokenValue)) {\n this.handleStructuredToken(tokenName, setTokenValue(tokenData));\n continue;\n }\n\n // Handle string values (may contain references)\n const tokenValueStr = String(tokenValue);\n const parseResult = this.tryParseExpression(tokenName, tokenValueStr);\n if (parseResult instanceof Error) {\n continue;\n }\n\n const { ast, parser } = parseResult;\n if (!ast) {\n this.earlyResolvePrimitiveToken(tokenName, \"\");\n continue;\n }\n\n this.prefixManager.addTokenToPrefix(tokenName);\n this.processParsedToken(tokenName, ast, parser.requiredReferences);\n }\n }\n\n private handleStructuredToken(tokenName: RefPath, tokenData: TokenData): void {\n const tokenValue = tokenData.$value;\n\n // Store for later assembly\n this.structuredTokens.set(tokenName, tokenData);\n\n // Extract string fields that may contain references\n const stringFields = extractStringFields(\n tokenValue,\n tokenName,\n this.objectParsers || undefined,\n );\n\n if (stringFields.size === 0) {\n // No string fields to resolve, token is ready\n // Create TokenSymbol and store it in both resolved and reference cache\n const tokenType = tokenData.$type || \"unknown\";\n const tokenSymbol = createTokenSymbol(\n tokenValue,\n tokenType,\n this.config,\n this.objectParsers,\n tokenData.$metadata,\n );\n this.resolved.set(tokenName, tokenSymbol);\n this.referenceCache.set(tokenName, tokenSymbol);\n\n this.callbacks?.onResolve?.(tokenName, tokenSymbol);\n this.lintTokenResult(tokenName, tokenSymbol);\n this.graph.addNode(tokenName, []);\n this.earlyResolved.push(tokenName);\n return;\n }\n\n // Add string fields as virtual tokens\n for (const [fieldPath, fieldValue] of stringFields) {\n this.subFieldPaths.add(fieldPath);\n\n const parseResult = this.tryParseExpression(fieldPath, fieldValue);\n if (parseResult instanceof Error) {\n continue;\n }\n\n const { ast, parser } = parseResult;\n if (!ast) {\n this.earlyResolvePrimitiveToken(fieldPath, \"\");\n continue;\n }\n\n this.processParsedToken(fieldPath, ast, parser.requiredReferences);\n }\n\n // Parent token depends on all its sub-fields\n const subFieldDeps = Array.from(stringFields.keys());\n this.graph.addNode(tokenName, subFieldDeps);\n for (const dep of subFieldDeps) {\n this.dependencyTracker.addTokenDependency(tokenName, dep);\n }\n this.unresolved.set(tokenName, {\n ast: null as any,\n dependencies: new Set(subFieldDeps),\n });\n }\n\n /**\n * Phase 2: Map prefix dependencies (ResolutionPhase.MAP_PREFIX_DEPENDENCIES)\n * - Identify which tokens depend on prefixes\n * - Activate prefix resolution tracking\n * - Mark prefix dependencies for later resolution\n */\n private mapPrefixDependencies(): void {\n for (const [tokenName, unresolved] of this.unresolved.entries()) {\n for (const dep of unresolved.dependencies) {\n if (this.prefixManager.hasPrefix(dep) && !this.tokens.has(dep)) {\n this.prefixManager.activatePrefix(dep);\n this.dependencyTracker.addPrefixDependency(tokenName, dep);\n }\n }\n }\n }\n\n /**\n * Phase 3: Release early resolved (ResolutionPhase.RELEASE_EARLY_RESOLVED)\n * - Notify dependents of early-resolved tokens\n * - Release prefix dependencies waiting for these tokens\n * - Trigger cascade resolution of dependent tokens\n */\n private releaseEarlyResolved(): void {\n for (const tokenName of this.earlyResolved) {\n this.notifyResolution(tokenName);\n }\n }\n\n /**\n * Phase 4: Resolve dependency-free tokens (ResolutionPhase.RESOLVE_DEPENDENCY_FREE)\n * - Seed ready queue with initially dependency-free tokens\n * - Process queue in event-driven manner (cascade resolution)\n * - Queue is populated by ResolutionNotifier when dependencies are released\n */\n private resolveDependencyFreeTokens(): void {\n // Seed ready queue with initially dependency-free tokens (including sub-fields)\n const allTokens = new Set([...this.tokens.keys(), ...this.subFieldPaths]);\n\n for (const tokenName of allTokens) {\n if (this.resolved.has(tokenName)) continue;\n\n if (this.readinessTracker.isReady(tokenName, this.dependencyTracker)) {\n this.readyQueue.add(tokenName);\n }\n }\n\n // Process ready queue (event-driven cascade resolution)\n while (this.readyQueue.size > 0) {\n const tokenName = this.readyQueue.values().next().value as RefPath;\n this.readyQueue.delete(tokenName);\n this.resolveSingleToken(tokenName);\n }\n }\n\n /**\n * Extract parent token and field path from a sub-field token name.\n * Example: \"shadow.card.offsetY\" -> { parentToken: \"shadow.card\", fieldPath: \"offsetY\" }\n * Example: \"shadow[0].blur\" -> { parentToken: \"shadow\", fieldPath: \"[0].blur\" }\n */\n private extractSubFieldMetadata(subFieldPath: RefPath): {\n parentToken: string;\n fieldPath: string;\n } {\n // Find the parent token by checking which structured token this sub-field belongs to\n for (const [parentToken] of this.structuredTokens) {\n // Check for both dot notation (shadow.offsetX) and bracket notation (shadow[0].blur)\n if (\n subFieldPath.startsWith(`${parentToken}.`) ||\n subFieldPath.startsWith(`${parentToken}[`)\n ) {\n const fieldPath = subFieldPath.substring(parentToken.length);\n // Remove leading dot if present (for dot notation like \"shadow.offsetX\" -> \"offsetX\")\n const normalizedFieldPath = fieldPath.startsWith(\".\") ? fieldPath.substring(1) : fieldPath;\n return { parentToken, fieldPath: normalizedFieldPath };\n }\n }\n\n // Fallback: split on last dot\n const lastDotIndex = subFieldPath.lastIndexOf(\".\");\n if (lastDotIndex !== -1) {\n return {\n parentToken: subFieldPath.substring(0, lastDotIndex),\n fieldPath: subFieldPath.substring(lastDotIndex + 1),\n };\n }\n\n // No parent found\n return { parentToken: \"\", fieldPath: subFieldPath };\n }\n\n private resolveSingleToken(tokenName: RefPath): void {\n if (this.resolved.has(tokenName)) return;\n\n // Prevent re-entrant resolution during cascade\n this.pendingResolution.add(tokenName);\n\n // Check if this is a structured token\n if (this.structuredTokens.has(tokenName)) {\n this.resolveStructuredToken(tokenName);\n this.pendingResolution.delete(tokenName);\n return;\n }\n\n // Check if this is a sub-field (virtual token)\n if (this.subFieldPaths.has(tokenName)) {\n // Sub-fields are resolved via TokenInterpreter\n const ast = this.tokenInterpreter.getTokenAST(tokenName);\n if (ast) {\n const unresolved = this.unresolved.get(tokenName);\n const dependencyError = unresolved\n ? this.tokenInterpreter.buildDependencyError(\n tokenName,\n unresolved.dependencies,\n this.resolved,\n )\n : undefined;\n\n if (dependencyError) {\n this.resolved.set(tokenName, dependencyError);\n // Call onError for sub-field with metadata\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(tokenName);\n this.callbacks?.onError?.(tokenName, dependencyError, \"\", {\n isSubField: true,\n parentToken,\n fieldPath,\n });\n // Add issue under parent token with path for uniform interface\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, dependencyError);\n } else {\n this.addIssue(tokenName, dependencyError);\n }\n } else {\n const tokenValue = this.tokenInterpreter.interpretTokenWithAST(tokenName, ast);\n this.resolved.set(tokenName, tokenValue);\n\n if (tokenValue instanceof Error) {\n // Call onError for sub-field with metadata\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(tokenName);\n this.callbacks?.onError?.(tokenName, tokenValue, \"\", {\n isSubField: true,\n parentToken,\n fieldPath,\n });\n // Add issue under parent token with path for uniform interface\n const langError = this.ensureLanguageError(tokenValue);\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, langError);\n } else {\n this.addIssue(tokenName, langError);\n }\n } else {\n // Don't call onResolve for sub-fields\n this.tokenInterpreter.updateReferenceCache(tokenName, tokenValue);\n }\n }\n }\n\n this.unresolved.delete(tokenName);\n this.notifyResolution(tokenName);\n this.pendingResolution.delete(tokenName);\n return;\n }\n\n // For regular tokens\n const originalValue = this.tokens.get(tokenName);\n if (originalValue === undefined) return;\n\n // For string/primitive tokens\n const tokenValueStr: string = String(getTokenValue(originalValue));\n\n const unresolved = this.unresolved.get(tokenName);\n const dependencyError = unresolved\n ? this.tokenInterpreter.buildDependencyError(\n tokenName,\n unresolved.dependencies,\n this.resolved,\n )\n : undefined;\n\n let tokenValue: TokenResult;\n\n if (dependencyError) {\n tokenValue = dependencyError;\n this.resolved.set(tokenName, dependencyError);\n this.callbacks?.onError?.(tokenName, dependencyError, tokenValueStr);\n this.addIssue(tokenName, dependencyError);\n } else {\n tokenValue = this.tokenInterpreter.interpretToken(tokenName, tokenValueStr);\n this.resolved.set(tokenName, tokenValue);\n\n if (tokenValue instanceof Error) {\n this.callbacks?.onError?.(tokenName, tokenValue, tokenValueStr);\n this.addIssue(tokenName, this.ensureLanguageError(tokenValue));\n } else {\n this.callbacks?.onResolve?.(tokenName, tokenValue);\n this.lintTokenResult(tokenName, tokenValue);\n this.tokenInterpreter.updateReferenceCache(tokenName, tokenValue);\n }\n }\n\n const flattened = this.tokenInterpreter.flattenDictionaryToCache(tokenName, tokenValue);\n this.resolveVirtualChildren(tokenName, flattened);\n this.notifyResolution(tokenName, flattened);\n this.unresolved.delete(tokenName);\n this.pendingResolution.delete(tokenName);\n }\n\n /**\n * Resolve a structured token by assembling resolved sub-fields\n */\n private resolveStructuredToken(tokenName: RefPath): void {\n const tokenData = this.structuredTokens.get(tokenName);\n if (!tokenData) return;\n\n const originalValue = tokenData.$value;\n\n // Extract string fields\n const stringFields = extractStringFields(\n originalValue,\n tokenName,\n this.objectParsers || undefined,\n );\n\n // Check for dependency errors in sub-fields\n const resolvedFields = new Map<string, InterpreterResult>();\n let hasError = false;\n\n for (const [fieldPath] of stringFields) {\n const fieldValue = this.resolved.get(fieldPath);\n if (fieldValue === undefined) {\n // Sub-field not resolved yet (shouldn't happen if dependencies are correct)\n const error = new ProcessorError(ProcessorErrorCode.SUB_FIELD_NOT_RESOLVED, {\n data: { fieldPath },\n });\n this.resolved.set(tokenName, error);\n this.callbacks?.onError?.(tokenName, error, originalValue);\n this.addIssue(tokenName, error);\n hasError = true;\n break;\n }\n if (fieldValue instanceof Error) {\n // Sub-field has error, propagate to parent\n this.resolved.set(tokenName, fieldValue);\n this.callbacks?.onError?.(tokenName, fieldValue, originalValue);\n this.addIssue(tokenName, this.ensureLanguageError(fieldValue));\n hasError = true;\n break;\n }\n resolvedFields.set(fieldPath, fieldValue);\n }\n\n if (!hasError) {\n // Create TokenSymbol directly from resolved fields and original value\n const tokenType = tokenData.$type || \"unknown\";\n const tokenSymbol = createTokenSymbolFromResolvedFields(\n tokenName,\n resolvedFields,\n originalValue,\n tokenType,\n this.config,\n this.objectParsers,\n tokenData.$metadata,\n );\n this.resolved.set(tokenName, tokenSymbol);\n this.referenceCache.set(tokenName, tokenSymbol);\n\n this.callbacks?.onResolve?.(tokenName, tokenSymbol);\n this.lintTokenResult(tokenName, tokenSymbol);\n }\n\n this.unresolved.delete(tokenName);\n this.notifyResolution(tokenName);\n }\n\n private resolveVirtualChildren(parent: RefPath, flattened: RefPath[]): void {\n const children = this.prefixManager.getAndRemoveVirtualChildren(parent);\n if (children.size === 0) return;\n\n const satisfied = flattened.length > 0 ? new Set(flattened) : null;\n const parentValue = this.resolved.get(parent);\n\n for (const child of children) {\n if (satisfied?.has(child) || this.referenceCache.has(child) || this.resolved.has(child)) {\n continue;\n }\n\n const error =\n parentValue instanceof Error\n ? createDependencyError(child, parent, parentValue)\n : new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: child },\n });\n\n this.resolved.set(child, error);\n this.callbacks?.onError?.(child, error, \"\");\n }\n }\n\n private notifyResolution(name: RefPath, flattened?: RefPath[]): void {\n this.notifier.releaseDependencies(name, flattened, this.referenceCache);\n }\n\n /**\n * Helper for ResolutionNotifier to build prefix dictionaries\n */\n private buildPrefixDictionary(prefix: string, cache: Map<string, InterpreterResult>): void {\n const dictionary = this.prefixManager.buildPrefixDictionary(prefix, cache);\n if (dictionary) {\n cache.set(prefix, dictionary);\n }\n }\n\n /**\n * Phase 5: Finalize resolution (ResolutionPhase.FINALIZE)\n * - Handle any true stragglers not caught by event-driven phase\n * - Generate errors for unresolved tokens with dependency issues\n * - Check for circular dependencies\n */\n private finalizeResolution(): void {\n const unresolvedTokens: RefPath[] = [];\n\n // Handle unresolved tokens (both regular tokens and sub-fields)\n const allTokens = new Set([...this.tokens.keys(), ...this.subFieldPaths]);\n\n for (const tokenName of allTokens) {\n if (this.resolved.has(tokenName)) continue;\n\n const isSubField = this.subFieldPaths.has(tokenName);\n\n let tokenValueStr = \"\";\n if (!isSubField) {\n const originalValue = this.tokens.get(tokenName);\n if (originalValue === undefined) continue;\n tokenValueStr = String(getTokenValue(originalValue));\n }\n\n // Check for dependency errors\n const unresolved = this.unresolved.get(tokenName);\n if (unresolved) {\n const dependencyError = this.tokenInterpreter.buildDependencyError(\n tokenName,\n unresolved.dependencies,\n this.resolved,\n this.missingDependencies,\n );\n if (dependencyError) {\n this.resolved.set(tokenName, dependencyError);\n\n if (isSubField) {\n // Call onError for sub-field with metadata\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(tokenName);\n this.callbacks?.onError?.(tokenName, dependencyError, tokenValueStr, {\n isSubField: true,\n parentToken,\n fieldPath,\n });\n // Add issue under parent token with path for uniform interface\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, dependencyError);\n } else {\n this.addIssue(tokenName, dependencyError);\n }\n } else {\n this.callbacks?.onError?.(tokenName, dependencyError, tokenValueStr);\n this.addIssue(tokenName, dependencyError);\n }\n\n this.resolveVirtualChildren(tokenName, []);\n this.notifyResolution(tokenName);\n this.unresolved.delete(tokenName);\n continue;\n }\n }\n\n unresolvedTokens.push(tokenName);\n }\n\n // Process any tokens that became ready during dependency error resolution\n while (this.readyQueue.size > 0) {\n const tokenName = this.readyQueue.values().next().value as RefPath;\n this.readyQueue.delete(tokenName);\n this.resolveSingleToken(tokenName);\n }\n\n // Filter out tokens that were resolved during the ready queue processing\n const stillUnresolved = unresolvedTokens.filter((tokenName) => !this.resolved.has(tokenName));\n\n // Handle remaining unresolved tokens\n if (stillUnresolved.length > 0) {\n // Build a set of tokens that depend on missing dependencies\n const tokensWithMissingDeps = new Set<string>();\n\n // Check each unresolved token to see if it depends on missing tokens\n for (const tokenName of stillUnresolved) {\n const unresolvedData = this.unresolved.get(tokenName);\n if (unresolvedData) {\n // Check if any of its dependencies are missing\n for (const dep of unresolvedData.dependencies) {\n if (this.missingDependencies.has(dep)) {\n tokensWithMissingDeps.add(tokenName);\n break;\n }\n }\n }\n }\n\n for (const tokenName of stillUnresolved) {\n const isSubField = this.subFieldPaths.has(tokenName);\n\n let tokenValueStr = \"\";\n if (!isSubField) {\n const originalValue = this.tokens.get(tokenName);\n if (originalValue === undefined) continue;\n tokenValueStr = String(getTokenValue(originalValue));\n }\n\n // If token depends on missing dependencies, it's not a circular dependency\n // Otherwise, if it's still unresolved, it must be part of a cycle\n const dependsOnMissing = tokensWithMissingDeps.has(tokenName);\n const error = dependsOnMissing\n ? new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName },\n })\n : new ProcessorError(ProcessorErrorCode.CIRCULAR_DEPENDENCY, {\n data: { tokens: tokenName },\n });\n\n this.resolved.set(tokenName, error);\n\n if (isSubField) {\n const { parentToken, fieldPath } = this.extractSubFieldMetadata(tokenName);\n this.callbacks?.onError?.(tokenName, error, tokenValueStr, {\n isSubField: true,\n parentToken,\n fieldPath,\n });\n // Add issue under parent token with path for uniform interface\n if (parentToken) {\n this.addSubFieldIssue(parentToken, fieldPath, error);\n } else {\n this.addIssue(tokenName, error);\n }\n } else {\n this.callbacks?.onError?.(tokenName, error, tokenValueStr);\n this.addIssue(tokenName, error);\n }\n\n this.resolveVirtualChildren(tokenName, []);\n this.notifyResolution(tokenName);\n this.unresolved.delete(tokenName);\n }\n }\n }\n}\n\n/**\n * TokenResolver - Resolves tokens with dependencies using prefix-aware resolution\n *\n * @example\n * const processor = new TokenResolver();\n * const tokens = new Map([\n * [\"a\", { $value: \"10\" }],\n * [\"b\", { $value: \"{a} * 2\" }],\n * ]);\n * const result = processor.build(tokens);\n */\nexport class TokenResolver {\n private prefixResolver?: PrefixResolver;\n private tokens?: TokenDataMap;\n private config?: Config;\n private objectParsers?: ObjectParser[];\n\n public processTokens(\n tokens: TokenInputMap,\n callbacks?: ProcessorCallbacks,\n config?: Config,\n objectParsers?: ObjectParser[],\n ): ProcessorResult {\n const resolver = new PrefixResolver({\n tokens,\n callbacks,\n config,\n objectParsers,\n });\n return resolver.resolve();\n }\n\n /**\n * Find all tokens affected by a change to the given token.\n *\n * Uses BFS traversal on the reverse dependency graph to identify\n * the changed token plus all tokens that transitively depend on it.\n *\n * @param tokenName - The token that changed\n * @returns Object containing affected tokens and a subgraph showing their relationships\n *\n * @example\n * const { resolver } = new TokenResolver().build(tokens);\n * const { tokens, subgraph } = resolver.getTokenDependencyGraph(\"color.primary\");\n * console.log(tokens); // Set(['color.primary', 'button.background', ...])\n */\n public getTokenDependencyGraph(tokenName: RefPath): {\n tokens: Set<RefPath>;\n subgraph: DependencyGraph<RefPath>;\n } {\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n\n const graph = this.prefixResolver.getGraph();\n\n // Build reverse dependency graph to find dependents\n const reverseDeps = new Map<RefPath, Set<RefPath>>();\n const graphNodes = graph.getNodes();\n\n for (const [node, dependencies] of graphNodes) {\n for (const dep of dependencies) {\n if (!reverseDeps.has(dep)) {\n reverseDeps.set(dep, new Set());\n }\n reverseDeps.get(dep)?.add(node);\n }\n }\n\n // Find all tokens transitively affected by this change using BFS\n const affectedTokens = new Set<RefPath>();\n const queue: RefPath[] = [tokenName];\n const visited = new Set<RefPath>();\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (current === undefined || visited.has(current)) continue;\n\n visited.add(current);\n affectedTokens.add(current);\n\n // Add all tokens that depend on this one\n const dependents = reverseDeps.get(current);\n if (dependents) {\n for (const dependent of dependents) {\n if (!visited.has(dependent)) {\n queue.push(dependent);\n }\n }\n }\n }\n\n // Build subgraph containing only affected tokens and their relationships\n const subgraph = new DependencyGraph<RefPath>();\n for (const token of affectedTokens) {\n const dependencies = graphNodes.get(token);\n if (dependencies) {\n // Only include dependencies that are also in the affected set\n const affectedDeps = new Set<RefPath>();\n for (const dep of dependencies) {\n if (affectedTokens.has(dep)) {\n affectedDeps.add(dep);\n }\n }\n subgraph.addNode(token, affectedDeps);\n } else {\n subgraph.addNode(token, []);\n }\n }\n\n return {\n tokens: affectedTokens,\n subgraph,\n };\n }\n\n public build(\n tokens: TokenDataMap,\n config?: Config,\n objectParsers?: ObjectParser[],\n ): ProcessorOutput {\n const output: ResolvedValueMap = new Map();\n\n const callbacks: ProcessorCallbacks = {\n onResolve: (tokenName, value) => {\n output.set(tokenName, value);\n },\n onError: (tokenName, _error, originalValue) => {\n // Store the original value in output for tokens with errors\n // Cast to any since originalValue can be an object for structured tokens\n output.set(tokenName, originalValue as any);\n // Errors are tracked in the issues map\n },\n };\n\n // Create and store the resolver for future updates\n this.prefixResolver = new PrefixResolver({\n tokens,\n callbacks,\n config,\n objectParsers,\n });\n this.tokens = tokens;\n this.config = config;\n this.objectParsers = objectParsers;\n\n const result = this.prefixResolver.resolve();\n\n // Filter out sub-field paths from output and issues\n const subFieldPaths = this.prefixResolver.getSubFieldPaths();\n if (subFieldPaths.size > 0) {\n for (const subFieldPath of subFieldPaths) {\n output.delete(subFieldPath);\n result.issues?.delete(subFieldPath);\n }\n }\n\n return {\n ...result,\n tokens: output,\n resolver: this,\n issues: result.issues,\n };\n }\n\n private ensureInitialized(): void {\n if (!this.prefixResolver || !this.tokens) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n }\n\n private normalizeTokenPath(tokenPath: string | null | undefined): string {\n return tokenPath?.trim() || \"\";\n }\n\n private createOutputCallbacks(): {\n output: ResolvedValueMap;\n callbacks: ProcessorCallbacks;\n } {\n const output: ResolvedValueMap = new Map();\n const callbacks: ProcessorCallbacks = {\n onResolve: (name, value) => {\n output.set(name, value);\n },\n onError: (_name, _error) => {\n // Errors are already tracked in the PrefixResolver's issues map\n },\n };\n return { output, callbacks };\n }\n\n private rebuildResolver(\n updatedTokens: TokenDataMap,\n callbacks: ProcessorCallbacks,\n changedTokenPath?: string,\n ): ProcessorResult {\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n\n // Use the dependency graph to find tokens affected by the change.\n // Only unaffected tokens get their cached values seeded — affected tokens\n // (and deleted tokens) must be re-resolved from scratch.\n let dirtyTokens: Set<string> | null = null;\n if (changedTokenPath) {\n const graph = this.prefixResolver.getGraph();\n const { tokens: affected } = getTokenDependencyGraph(changedTokenPath, graph);\n dirtyTokens = affected;\n }\n\n const newResolver = this.prefixResolver.clone({\n tokens: updatedTokens,\n callbacks,\n });\n\n const oldCache = this.prefixResolver.getReferenceCache();\n const newCache = newResolver.getReferenceCache();\n for (const [tokenName, value] of oldCache) {\n if (!updatedTokens.has(tokenName)) continue; // deleted token\n if (dirtyTokens?.has(tokenName)) continue; // affected by change\n newCache.set(tokenName, value);\n }\n\n const result = newResolver.resolve();\n this.prefixResolver = newResolver;\n return result;\n }\n\n public updateToken(params: UpdateTokenParams): UpdateTokenResult {\n this.ensureInitialized();\n\n const { tokenPath, tokenData, tokenPathRenamed, updateReferences = false } = params;\n const prevPath = this.normalizeTokenPath(tokenPath);\n const newPath = tokenPathRenamed?.trim();\n\n if (!this.tokens || !this.tokens.has(prevPath)) {\n if (tokenData) {\n const createResult = this.createToken({\n tokenPath: prevPath,\n tokenData,\n });\n return {\n ...createResult,\n updated: false,\n };\n }\n throw new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: prevPath },\n });\n }\n\n const oldTokenData = this.tokens.get(prevPath);\n if (!oldTokenData) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: prevPath },\n });\n }\n\n const isRename = newPath && newPath !== prevPath;\n\n // Validate newPath doesn't already exist when renaming\n if (isRename && this.tokens.has(newPath)) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_ALREADY_EXISTS, {\n data: { tokenName: newPath },\n });\n }\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n const currentGraph = this.prefixResolver.getGraph();\n const { tokens: affectedTokens } = getTokenDependencyGraph(prevPath, currentGraph);\n affectedTokens.delete(prevPath);\n\n const updatedTokens = new Map(this.tokens);\n\n // Handle rename with reference updates if requested\n if (isRename && updateReferences && affectedTokens.size > 0) {\n const renameMap = { [prevPath]: newPath };\n const tokenInterpreter = this.prefixResolver.getTokenInterpreter();\n\n // Update references in all dependent tokens\n for (const dependentToken of affectedTokens) {\n const dependentTokenData = updatedTokens.get(dependentToken);\n if (!dependentTokenData) continue;\n\n const dependentValue = getTokenValue(dependentTokenData);\n if (!isString(dependentValue)) continue;\n\n // Get cached AST instead of reparsing\n const ast = tokenInterpreter.getTokenAST(dependentToken);\n if (!ast) continue;\n\n // Rename references using the utility function\n const updatedValue = renameReferences(dependentValue, ast, renameMap);\n\n // Only update if there was an actual change\n if (updatedValue !== dependentValue) {\n const updatedTokenData = { ...dependentTokenData, $value: updatedValue };\n updatedTokens.set(dependentToken, updatedTokenData);\n }\n }\n }\n\n // Update/rename the token itself\n updatedTokens.delete(prevPath);\n const finalPath = isRename ? newPath : prevPath;\n updatedTokens.set(finalPath, tokenData || oldTokenData);\n this.tokens = updatedTokens;\n\n const { output, callbacks } = this.createOutputCallbacks();\n const resolverResult = this.rebuildResolver(updatedTokens, callbacks, prevPath);\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n const { subgraph } = getTokenDependencyGraph(finalPath, this.prefixResolver.getGraph());\n\n const resolvedValue = output.get(finalPath);\n\n return {\n tokens: output,\n resolved: resolvedValue,\n issues: resolverResult.issues,\n dependants: { graph: subgraph },\n updated: true,\n };\n }\n\n public createToken(params: CreateTokenParams): CreateTokenResult {\n this.ensureInitialized();\n\n const { tokenPath, tokenData } = params;\n const normalizedTokenPath = this.normalizeTokenPath(tokenPath);\n\n if (this.tokens?.has(normalizedTokenPath)) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_ALREADY_EXISTS, {\n data: { tokenName: normalizedTokenPath },\n });\n }\n\n const updatedTokens = new Map(this.tokens);\n updatedTokens.set(normalizedTokenPath, tokenData);\n this.tokens = updatedTokens;\n\n const { output, callbacks } = this.createOutputCallbacks();\n const resolverResult = this.rebuildResolver(updatedTokens, callbacks, normalizedTokenPath);\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n const { subgraph } = getTokenDependencyGraph(\n normalizedTokenPath,\n this.prefixResolver.getGraph(),\n );\n\n const resolvedValue = output.get(normalizedTokenPath);\n\n return {\n tokens: output,\n resolved: resolvedValue,\n issues: resolverResult.issues,\n dependants: { graph: subgraph },\n created: true,\n };\n }\n\n public deleteToken(params: DeleteTokenParams): DeleteTokenResult {\n this.ensureInitialized();\n\n const { tokenPath } = params;\n const normalizedTokenPath = this.normalizeTokenPath(tokenPath);\n\n if (!this.tokens?.has(normalizedTokenPath)) {\n throw new ProcessorError(ProcessorErrorCode.TOKEN_NOT_FOUND, {\n data: { tokenName: normalizedTokenPath },\n });\n }\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n const currentGraph = this.prefixResolver.getGraph();\n const { subgraph } = getTokenDependencyGraph(normalizedTokenPath, currentGraph);\n\n // Remove the deleted token from the subgraph (it no longer exists)\n subgraph.removeNode(normalizedTokenPath);\n\n const updatedTokens = new Map(this.tokens);\n updatedTokens.delete(normalizedTokenPath);\n this.tokens = updatedTokens;\n\n const { output, callbacks } = this.createOutputCallbacks();\n const resolverResult = this.rebuildResolver(updatedTokens, callbacks, normalizedTokenPath);\n\n return {\n tokens: output,\n issues: resolverResult.issues,\n dependants: { graph: subgraph },\n };\n }\n\n /**\n * Resolve a single value expression against the existing warm cache.\n * No cloning, no graph rebuild, no re-parsing of other tokens.\n * Use this for lightweight preview resolution (e.g. live form input).\n *\n * **Important:** This method reads from the resolver's current cache and\n * shares its interpreter instance. It is intended for development-time\n * previews only. Callers that need isolation (e.g. speculative resolution\n * that must not observe or affect other operations) should clone the\n * `TokenResolver` first via `build()` on a copy of the token map.\n *\n * Must not be called concurrently with `updateToken`, `createToken`,\n * or `deleteToken` — those methods rebuild the internal resolver and\n * the shared interpreter state would conflict.\n */\n public resolveValue(params: ResolveValueParams): ResolveValueResult {\n this.ensureInitialized();\n\n if (!this.prefixResolver) {\n throw new ProcessorError(ProcessorErrorCode.RESOLVER_NOT_INITIALIZED);\n }\n\n const { value, type, validate } = params;\n const issues: ResolveIssue[] = [];\n\n if (value === undefined || value === null || value === \"\") {\n return { resolved: null, issues };\n }\n\n const valueStr = String(value);\n\n // Parse the expression — LanguageErrors are thrown on syntax errors\n let ast: ASTNode | null = null;\n try {\n const result = parseExpression(valueStr);\n ast = result.ast;\n } catch (error) {\n if (isLanguageError(error)) {\n issues.push(error);\n return { resolved: null, issues };\n }\n throw error;\n }\n\n if (!ast) {\n return { resolved: valueStr, issues };\n }\n\n // Interpret against the warm reference cache — no clone, no rebuild\n const tokenInterpreter = this.prefixResolver.getTokenInterpreter();\n const resolved = tokenInterpreter.interpretTokenWithAST(\"\\0__preview__\", ast);\n\n if (resolved instanceof Error) {\n if (isLanguageError(resolved)) {\n issues.push(resolved);\n }\n return { resolved: null, issues };\n }\n\n if (validate && type) {\n issues.push(...collectTypeValidationIssues(this.config, \"\\0__preview__\", type, resolved));\n }\n\n return { resolved, issues };\n }\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport type { TokenBuilder } from \"./types\";\n\nexport class MapBuilder implements TokenBuilder<Map<string, string | InterpreterResult>> {\n readonly name = \"map\";\n protected result: Map<string, string | InterpreterResult> = new Map();\n private successfullyResolved: Map<string, InterpreterResult> = new Map();\n\n onResolve(tokenName: string, value: InterpreterResult): void {\n this.successfullyResolved.set(tokenName, value);\n this.result.set(tokenName, value);\n }\n\n onError(tokenName: string, _error: Error, originalValue: string | unknown): void {\n this.result.set(tokenName, originalValue as string);\n }\n\n getResult(): Map<string, string | InterpreterResult> {\n return this.result;\n }\n\n getResolvedTokens(): Map<string, InterpreterResult> {\n return this.successfullyResolved;\n }\n}\n","import type { Config } from \"@interpreter/config\";\nimport type { InterpreterResult } from \"@interpreter/interpreter\";\nimport {\n isTokenscriptSymbol,\n serializeInterpreterResult,\n stringifyInterpreterResult,\n} from \"@interpreter/symbols\";\nimport type { ObjectParser } from \"../object-parsers\";\nimport { getTokenError } from \"../resolver\";\nimport { type ProcessorOutput, TokenResolver } from \"../resolver/TokenResolver\";\nimport type { IssuesMap } from \"../resolver/types\";\nimport type { TokenData } from \"../utils/tokens\";\nimport { MapBuilder } from \"./MapBuilder\";\nimport type { TokenBuilder } from \"./types\";\n\nexport { serializeInterpreterResult, stringifyInterpreterResult };\n\nexport type TokenDataMap = Map<string, TokenData>;\n\nexport function toJsonObject(value: unknown): unknown {\n if (value instanceof Map) return Object.fromEntries(value);\n if (isTokenscriptSymbol(value)) return value.toJs({ stringify: true });\n return value;\n}\n\nexport function stringifyAsJson(output: unknown, indent = 2): string {\n return JSON.stringify(output, (_key, value) => toJsonObject(value), indent);\n}\n\nexport interface BuildTokensOptions<T> {\n builder?: TokenBuilder<T>;\n config?: Config;\n objectParsers?: ObjectParser[];\n}\n\n/**\n * Builds tokens from a normalized TokenDataMap.\n *\n * This is the core token processing function. For most use cases, call this directly\n * rather than using the higher-level processTokens/processTokenSets wrappers.\n *\n * @param tokens - Map of token names to TokenData. Must be pre-normalized to TokenData format.\n * @param options - Build options (all optional):\n * - builder: Custom token builder (default: MapBuilder)\n * - config: Interpreter config\n * - objectParsers: Array of object parsers\n * - linter: Lint runner\n * @returns ProcessorOutput with resolved tokens, output, and optional lint results.\n *\n * @remarks\n * Consumers must normalize input to Map<string, TokenData> before calling this function.\n * Use processTokens/processTokenSets for automatic normalization of Records and Maps.\n */\nexport function buildTokens<T = Map<string, InterpreterResult>>(\n tokens: TokenDataMap,\n options?: BuildTokensOptions<T>,\n): ProcessorOutput & {\n output: T;\n issues?: IssuesMap;\n} {\n const { config, builder = new MapBuilder(), objectParsers } = options ?? {};\n\n // Always create a MapBuilder for the tokens map output\n const tokensMapBuilder = builder.constructor === MapBuilder ? builder : new MapBuilder();\n\n // Use build() to properly initialize the resolver for CRUD operations.\n // build() stores the PrefixResolver in the TokenResolver instance, enabling\n // updateToken, createToken, and deleteToken to work on the returned resolver.\n const result = new TokenResolver().build(tokens, config, objectParsers);\n\n // Process all tokens - both successful and failed\n // Errors are now tracked in issues map\n for (const [tokenName, value] of result.tokens) {\n const error = getTokenError(result.issues, tokenName);\n\n if (error) {\n // Token has an error - get original value (keep objects as-is)\n const originalValue = tokens.get(tokenName);\n const originalValueData =\n typeof originalValue === \"string\" ? originalValue : originalValue?.$value;\n\n builder.onError(tokenName, error, originalValueData);\n\n if (builder.constructor !== MapBuilder)\n tokensMapBuilder.onError(tokenName, error, originalValueData);\n } else {\n // Token resolved successfully\n builder.onResolve(tokenName, value);\n\n if (builder.constructor !== MapBuilder) tokensMapBuilder.onResolve(tokenName, value);\n }\n }\n\n const tokensMap = tokensMapBuilder.getResult();\n const builderOutput = builder.getResult();\n const issues = result.issues;\n\n return {\n ...result,\n tokens: tokensMap,\n output: builderOutput as T,\n issues,\n resolver: result.resolver,\n };\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport { DictionarySymbol } from \"@interpreter/symbols\";\n\nexport type FlattenCallback<T> = (key: string, value: InterpreterResult) => T;\n\n/**\n * Flatten a DictionarySymbol into key-value pairs\n *\n * @param result - The InterpreterResult to flatten (only DictionarySymbol will be flattened)\n * @param prefix - The prefix to prepend to keys\n * @param callback - Callback function that receives each flattened key-value pair\n *\n * @example\n * const result: Record<string, unknown> = {};\n * flattenChildrenObject(dictionarySymbol, \"root\", (key, value) => {\n * result[key] = value;\n * });\n */\nexport function flattenChildrenObject<T>(\n result: InterpreterResult,\n prefix: string,\n callback: FlattenCallback<T>,\n): void {\n if (result instanceof DictionarySymbol) {\n flattenChildrenMap(result.value, prefix, callback);\n }\n}\n\n/**\n * Flatten a Map structure into key-value pairs\n *\n * @param map - The map to flatten (from Dictionary.value)\n * @param prefix - The prefix to prepend to keys\n * @param callback - Callback function that receives each flattened key-value pair\n *\n * @example\n * const result = new Map<string, unknown>();\n * flattenChildrenMap(dictionarySymbol.value, \"root\", (key, value) => {\n * result.set(key, value);\n * });\n */\nexport function flattenChildrenMap<T>(\n map: Map<string, InterpreterResult>,\n prefix: string,\n callback: FlattenCallback<T>,\n): void {\n for (const [key, value] of map.entries()) {\n const newKey = `${prefix}.${key}`;\n\n if (typeof value === \"undefined\") {\n continue;\n }\n\n if (value instanceof DictionarySymbol) {\n flattenChildrenMap(value.value, newKey, callback);\n } else {\n callback(newKey, value);\n }\n }\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport { isObject } from \"@/src/interpreter/utils/type\";\nimport { serializeInterpreterResult } from \"./base\";\nimport { flattenChildrenObject } from \"./flatten\";\nimport type { TokenBuilder } from \"./types\";\n\nfunction setNestedValue(target: Record<string, unknown>, path: string, value: unknown): void {\n if (path.length === 0) {\n return;\n }\n const segments = path.split(\".\");\n let cursor: Record<string, unknown> = target;\n for (let i = 0; i < segments.length; i++) {\n const key = segments[i];\n const isLast = i === segments.length - 1;\n if (isLast) {\n cursor[key] = value;\n return;\n }\n if (!isObject(cursor[key])) {\n cursor[key] = {};\n }\n cursor = cursor[key] as Record<string, unknown>;\n }\n}\n\n/**\n * Nested Object Builder\n *\n * Builds a nested object structure incrementally as tokens are resolved.\n * Converts flat token paths to nested structure.\n * Example: \"color.primary\" -> { color: { primary: value } }\n */\nexport class NestedObjectBuilder implements TokenBuilder<Record<string, unknown>> {\n readonly name = \"nested\";\n private result: Record<string, unknown> = {};\n\n onResolve(tokenName: string, value: InterpreterResult): void {\n const serialized = serializeInterpreterResult(value, { stringify: true });\n if (typeof serialized !== \"undefined\") {\n setNestedValue(this.result, tokenName, serialized);\n }\n }\n\n onError(tokenName: string, _error: Error, originalValue: string | unknown): void {\n // Store original value for failed tokens\n setNestedValue(this.result, tokenName, originalValue);\n }\n\n getResult(): Record<string, unknown> {\n return this.result;\n }\n}\n\n/**\n * Flat Object Builder\n *\n * Builds a flat key-value object incrementally as tokens are resolved.\n * Example: \"color.primary\" -> { \"color.primary\": value }\n */\nexport class FlatObjectBuilder implements TokenBuilder<Record<string, unknown>> {\n readonly name = \"flat\";\n private result: Record<string, unknown> = {};\n\n onResolve(tokenName: string, value: InterpreterResult): void {\n // First try to flatten the InterpreterResult directly (handles Dictionary symbols)\n let didFlatten = false;\n flattenChildrenObject(value, tokenName, (key, val) => {\n didFlatten = true;\n this.result[key] = serializeInterpreterResult(val, { stringify: true });\n });\n\n // If nothing was flattened, serialize and store the value directly\n if (!didFlatten) {\n const serialized = serializeInterpreterResult(value, { stringify: true });\n if (typeof serialized !== \"undefined\") {\n this.result[tokenName] = serialized;\n }\n }\n }\n\n onError(tokenName: string, _error: Error, originalValue: string | unknown): void {\n // Store original value for failed tokens\n this.result[tokenName] = originalValue;\n }\n\n getResult(): Record<string, unknown> {\n return this.result;\n }\n}\n","import type { InterpreterResult } from \"@interpreter/interpreter\";\nimport { stringifyInterpreterResult } from \"./base\";\nimport { MapBuilder } from \"./MapBuilder\";\n\nexport class StringMapBuilder extends MapBuilder {\n onResolve(tokenName: string, value: InterpreterResult): void {\n super.onResolve(tokenName, value);\n this.result.set(tokenName, stringifyInterpreterResult(value));\n }\n\n getResult(): Map<string, string> {\n const stringMap = new Map<string, string>();\n for (const [key, value] of this.result.entries()) {\n stringMap.set(key, typeof value === \"string\" ? value : stringifyInterpreterResult(value));\n }\n return stringMap;\n }\n}\n"]}