@tokens-studio/tokenscript-interpreter 0.36.3 → 0.37.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.
- package/dist/chunk-2EEKBDOX.js +5308 -0
- package/dist/chunk-2EEKBDOX.js.map +1 -0
- package/dist/chunk-2NMUBWBX.js +5861 -0
- package/dist/chunk-2NMUBWBX.js.map +1 -0
- package/dist/chunk-2OHE65GL.js +5779 -0
- package/dist/chunk-2OHE65GL.js.map +1 -0
- package/dist/chunk-2PZR6BQ6.js +5773 -0
- package/dist/chunk-2PZR6BQ6.js.map +1 -0
- package/dist/chunk-2QDDLPUW.js +5858 -0
- package/dist/chunk-2QDDLPUW.js.map +1 -0
- package/dist/chunk-4DUQBXYY.js +5762 -0
- package/dist/chunk-4DUQBXYY.js.map +1 -0
- package/dist/chunk-4SLJE4IW.js +5322 -0
- package/dist/chunk-4SLJE4IW.js.map +1 -0
- package/dist/chunk-6ABZOYUP.js +5802 -0
- package/dist/chunk-6ABZOYUP.js.map +1 -0
- package/dist/chunk-6HQZVWXZ.js +5341 -0
- package/dist/chunk-6HQZVWXZ.js.map +1 -0
- package/dist/chunk-6UY773C4.js +5292 -0
- package/dist/chunk-6UY773C4.js.map +1 -0
- package/dist/chunk-75Z55XEZ.js +5681 -0
- package/dist/chunk-75Z55XEZ.js.map +1 -0
- package/dist/chunk-7IWYKR22.js +5778 -0
- package/dist/chunk-7IWYKR22.js.map +1 -0
- package/dist/chunk-AVZUAMNS.js +5757 -0
- package/dist/chunk-AVZUAMNS.js.map +1 -0
- package/dist/chunk-BL7GZSRR.js +5724 -0
- package/dist/chunk-BL7GZSRR.js.map +1 -0
- package/dist/chunk-BMZ5NY7J.js +93 -0
- package/dist/chunk-BMZ5NY7J.js.map +1 -0
- package/dist/{chunk-AXH5N7KV.js → chunk-BNLQ6GCU.js} +2 -6
- package/dist/chunk-BNLQ6GCU.js.map +1 -0
- package/dist/chunk-BSJBGMCX.js +93 -0
- package/dist/{chunk-RI2BWY7D.js.map → chunk-BSJBGMCX.js.map} +1 -1
- package/dist/chunk-BUJRELXW.js +5342 -0
- package/dist/chunk-BUJRELXW.js.map +1 -0
- package/dist/chunk-DCOIGXSK.js +5763 -0
- package/dist/chunk-DCOIGXSK.js.map +1 -0
- package/dist/chunk-DZDZDYPO.js +5654 -0
- package/dist/chunk-DZDZDYPO.js.map +1 -0
- package/dist/{chunk-5S3H4SYX.js → chunk-GAE7SZLZ.js} +154 -9
- package/dist/chunk-GAE7SZLZ.js.map +1 -0
- package/dist/chunk-HFLLWRRV.js +5791 -0
- package/dist/chunk-HFLLWRRV.js.map +1 -0
- package/dist/{lib/chunk-ODVWXGOM.js → chunk-JL4UU4PY.js} +2 -8
- package/dist/chunk-JL4UU4PY.js.map +1 -0
- package/dist/{chunk-CKLFRLH7.js → chunk-JUGNHFDN.js} +220 -338
- package/dist/chunk-JUGNHFDN.js.map +1 -0
- package/dist/{chunk-RI2BWY7D.js → chunk-K2OUSWUX.js} +2 -3
- package/dist/chunk-K2OUSWUX.js.map +1 -0
- package/dist/chunk-KOLA6XR5.js +5770 -0
- package/dist/chunk-KOLA6XR5.js.map +1 -0
- package/dist/{chunk-3ZOUTFP5.js → chunk-L77CTMYP.js} +169 -296
- package/dist/chunk-L77CTMYP.js.map +1 -0
- package/dist/chunk-LIXBSHBJ.js +99 -0
- package/dist/chunk-LIXBSHBJ.js.map +1 -0
- package/dist/chunk-LM5SZQV5.js +5763 -0
- package/dist/chunk-LM5SZQV5.js.map +1 -0
- package/dist/chunk-M76AGXPG.js +5772 -0
- package/dist/chunk-M76AGXPG.js.map +1 -0
- package/dist/{chunk-QP7M6WUR.js → chunk-OV2GMYVM.js} +221 -341
- package/dist/chunk-OV2GMYVM.js.map +1 -0
- package/dist/{chunk-33CDF4L4.js → chunk-P4VLJQEI.js} +235 -838
- package/dist/chunk-P4VLJQEI.js.map +1 -0
- package/dist/chunk-QLSMLF5S.js +5302 -0
- package/dist/chunk-QLSMLF5S.js.map +1 -0
- package/dist/chunk-QYTZHMUN.js +5831 -0
- package/dist/chunk-QYTZHMUN.js.map +1 -0
- package/dist/chunk-SBM4WTQW.js +5771 -0
- package/dist/chunk-SBM4WTQW.js.map +1 -0
- package/dist/chunk-UAQCLV6Y.js +5816 -0
- package/dist/chunk-UAQCLV6Y.js.map +1 -0
- package/dist/chunk-YIZGWYGL.js +5300 -0
- package/dist/chunk-YIZGWYGL.js.map +1 -0
- package/dist/chunk-Z437BNC5.js +107 -0
- package/dist/chunk-Z437BNC5.js.map +1 -0
- package/dist/cli.js +182 -17
- package/dist/cli.js.map +1 -1
- package/dist/compliance-suite.js +3 -5
- package/dist/compliance-suite.js.map +1 -1
- package/dist/config-Bb9I9K-y.d.ts +1005 -0
- package/dist/config-Be-GTPYh.d.ts +976 -0
- package/dist/config-BkIqJNxv.d.ts +1009 -0
- package/dist/config-Cp5BqDfR.d.ts +731 -0
- package/dist/config-D36YRJGj.d.ts +1007 -0
- package/dist/{config-CFhN7-6U.d.ts → config-DB5rZBMx.d.ts} +109 -17
- package/dist/config-DQj8LHMT.d.ts +995 -0
- package/dist/{config-DtbN3iyg.d.ts → config-Mw_Iq324.d.ts} +5 -2
- package/dist/config-P6Ivo_zY.d.ts +997 -0
- package/dist/config-RCpZF46f.d.ts +960 -0
- package/dist/lib/{chunk-PXS4WZYB.cjs → chunk-EMRAAGPR.cjs} +102 -100
- package/dist/lib/chunk-EMRAAGPR.cjs.map +1 -0
- package/dist/lib/{chunk-XHA2RNU7.cjs → chunk-JQKYSUJJ.cjs} +728 -568
- package/dist/lib/chunk-JQKYSUJJ.cjs.map +1 -0
- package/dist/lib/{chunk-73YLAUUC.js → chunk-MD2DETZV.js} +5 -3
- package/dist/lib/chunk-MD2DETZV.js.map +1 -0
- package/dist/lib/chunk-SLITBMFB.js +114 -0
- package/dist/lib/chunk-SLITBMFB.js.map +1 -0
- package/dist/lib/{chunk-F5SBEZH2.js → chunk-VXZQQBEA.js} +175 -16
- package/dist/lib/chunk-VXZQQBEA.js.map +1 -0
- package/dist/lib/{chunk-LEYHQJTL.cjs → chunk-ZMMIYWFF.cjs} +11 -2
- package/dist/lib/chunk-ZMMIYWFF.cjs.map +1 -0
- package/dist/lib/index.cjs +99 -91
- package/dist/lib/index.d.cts +4 -4
- package/dist/lib/index.d.ts +4 -4
- package/dist/lib/index.js +3 -3
- package/dist/lib/{interpreter-6QwMkUqD.d.cts → interpreter-ByrEtz7T.d.ts} +54 -4
- package/dist/lib/{interpreter-v7WiwSP9.d.ts → interpreter-CG0Jw_k-.d.cts} +54 -4
- package/dist/lib/interpreter.cjs +81 -73
- package/dist/lib/interpreter.d.cts +7 -6
- package/dist/lib/interpreter.d.ts +7 -6
- package/dist/lib/interpreter.js +3 -3
- package/dist/lib/processor-node.cjs +12 -12
- package/dist/lib/processor-node.d.cts +3 -3
- package/dist/lib/processor-node.d.ts +3 -3
- package/dist/lib/processor-node.js +3 -3
- package/dist/lib/processor.cjs +17 -17
- package/dist/lib/processor.d.cts +4 -4
- package/dist/lib/processor.d.ts +4 -4
- package/dist/lib/processor.js +3 -3
- package/dist/lib/schema.cjs +5 -5
- package/dist/lib/schema.d.cts +1 -1
- package/dist/lib/schema.d.ts +1 -1
- package/dist/lib/schema.js +3 -3
- package/dist/lib/syntax-highlighting.cjs +15 -15
- package/dist/lib/syntax-highlighting.d.cts +1 -1
- package/dist/lib/syntax-highlighting.d.ts +1 -1
- package/dist/lib/syntax-highlighting.js +2 -2
- package/dist/lib/{types-BI0AZ4Ej.d.ts → types-BZAWM2oN.d.ts} +2 -2
- package/dist/lib/{types-cFwP43uv.d.cts → types-BhyJ6plH.d.cts} +2 -2
- package/dist/lib/{types-EB8V9c46.d.cts → types-DA9_CC7p.d.cts} +5 -2
- package/dist/lib/{types-EB8V9c46.d.ts → types-DA9_CC7p.d.ts} +5 -2
- package/dist/lib/types.cjs +10 -6
- package/dist/lib/types.d.cts +1 -1
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/types.js +1 -1
- package/dist/processor/index.d.ts +1 -1
- package/dist/processor/index.js +18 -2
- package/dist/processor/index.js.map +1 -1
- package/dist/repl.d.ts +15 -3
- package/dist/repl.js +6 -8
- package/dist/repl.js.map +1 -1
- package/dist/token-schemas.js +414 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-33CDF4L4.js.map +0 -1
- package/dist/chunk-3ZOUTFP5.js.map +0 -1
- package/dist/chunk-5S3H4SYX.js.map +0 -1
- package/dist/chunk-AXH5N7KV.js.map +0 -1
- package/dist/chunk-CKLFRLH7.js.map +0 -1
- package/dist/chunk-GJIOYGP6.js +0 -6446
- package/dist/chunk-GJIOYGP6.js.map +0 -1
- package/dist/chunk-HHCPY4WI.js +0 -6456
- package/dist/chunk-HHCPY4WI.js.map +0 -1
- package/dist/chunk-MXKGYBE4.js +0 -6457
- package/dist/chunk-MXKGYBE4.js.map +0 -1
- package/dist/chunk-NGG6MBER.js +0 -6452
- package/dist/chunk-NGG6MBER.js.map +0 -1
- package/dist/chunk-QP7M6WUR.js.map +0 -1
- package/dist/lib/chunk-73YLAUUC.js.map +0 -1
- package/dist/lib/chunk-F5SBEZH2.js.map +0 -1
- package/dist/lib/chunk-LEYHQJTL.cjs.map +0 -1
- package/dist/lib/chunk-ODVWXGOM.js.map +0 -1
- package/dist/lib/chunk-PXS4WZYB.cjs.map +0 -1
- package/dist/lib/chunk-XHA2RNU7.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interpreter/errors/messages/en.ts","../src/interpreter/errors/messages/index.ts","../src/interpreter/errors/base.ts","../src/interpreter/errors/utils.ts","../src/interpreter/utils/type.ts","../src/interpreter/utils/color.ts","../src/interpreter/utils/string.ts","../src/interpreter/symbols.ts","../src/interpreter/tolerant/partial-nodes.ts","../src/interpreter/ast.ts","../src/interpreter/lexer.ts","../src/interpreter/parser.ts","../src/interpreter/utils/references.ts","../src/interpreter/config/managers/color/schema.ts","../src/utils/schema-uri.ts","../src/interpreter/config/managers/base-manager.ts","../src/interpreter/config/managers/functions/builtin/math.ts","../src/interpreter/config/managers/functions/schema.ts","../src/interpreter/config/managers/functions/manager.ts","../src/interpreter/config/managers/unit/schema.ts","../src/interpreter/config/managers/unit/manager.ts","../src/interpreter/config/managers/color/manager.ts","../src/interpreter/config/managers/token/schema.ts","../src/interpreter/config/managers/token/manager.ts","../src/interpreter/config/config.ts","../src/interpreter/operations.ts","../src/interpreter/symbolTable.ts","../src/interpreter/interpreter.ts"],"names":["alphaValue","isNumber","nums","sum","firstUnitArg","typeName","specName","ZodError","spec","opA","opB","resultValue"],"mappings":"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","file":"chunk-HHCPY4WI.js","sourcesContent":["import { ColorErrorCode } from \"../codes/color\";\nimport { ConfigErrorCode } from \"../codes/config\";\nimport { FunctionsErrorCode } from \"../codes/functions\";\nimport { InterpreterErrorCode } from \"../codes/interpreter\";\nimport { LexerErrorCode } from \"../codes/lexer\";\nimport { OperationsErrorCode } from \"../codes/operations\";\nimport { ParserErrorCode } from \"../codes/parser\";\nimport { ProcessorErrorCode } from \"../codes/processor\";\nimport { SymbolsErrorCode } from \"../codes/symbols\";\nimport { UnitErrorCode } from \"../codes/unit\";\nimport type { MessageMap } from \"./types\";\n\nexport const messages: MessageMap = {\n // Lexer errors\n [LexerErrorCode.INVALID_CHARACTER]: (data) =>\n `Invalid character '${data.char}' at position ${data.position}.${data.description ? ` ${data.description}` : \"\"}`,\n\n [LexerErrorCode.UNTERMINATED_STRING]: (data) =>\n `Unterminated string, missing '${data.quoteType}'.`,\n\n [LexerErrorCode.UNTERMINATED_REFERENCE]: \"Unterminated reference, missing '}'.\",\n\n [LexerErrorCode.EMPTY_VARIABLE_NAME]: \"Empty variable name.\",\n\n [LexerErrorCode.INVALID_HEX_COLOR_FORMAT]: (data) =>\n `Invalid hex color format: ${data.value}. Length should be ${data.expectedLength}.`,\n\n [LexerErrorCode.EXPECTED_CHARACTER]: (data) =>\n `Expected character ${data.expected} got ${data.got}`,\n\n [LexerErrorCode.MULTIPLE_DECIMAL_POINTS]: (data) =>\n `Invalid number '${data.value}': multiple decimal points.`,\n\n // Parser errors\n [ParserErrorCode.UNEXPECTED_TOKEN]: (data) => `Unexpected token: ${data.token}`,\n\n [ParserErrorCode.EXPECTED_TOKEN_TYPE]: (data) =>\n `Expected token type ${data.expected} but got ${data.got}`,\n\n [ParserErrorCode.CONDITION_MUST_BE_BOOLEAN]: \"If/elif condition must be a boolean\",\n\n [ParserErrorCode.INVALID_SYNTAX]: (data) =>\n data?.message ? String(data.message) : \"Invalid syntax\",\n\n [ParserErrorCode.UNEXPECTED_END]: \"Unexpected end of input\",\n\n [ParserErrorCode.TOLERANT_REQUIRES_INLINE]:\n \"Tolerant mode only supports inline expressions. Use parse(true) for tolerant parsing.\",\n\n // Interpreter errors\n [InterpreterErrorCode.UNKNOWN_NODE_TYPE]: (data) =>\n `No visit method for AST node type: ${data.nodeType}`,\n\n [InterpreterErrorCode.ARITHMETIC_REQUIRES_NUMBER]: (data) =>\n `Arithmetic operator ${data.operator} requires Number or NumberWithUnit operands, got ${data.leftType} and ${data.rightType}.`,\n\n [InterpreterErrorCode.UNKNOWN_BINARY_OPERATOR]: (data) =>\n `Unknown binary operator: ${data.operator} or type ${data.tokenType}`,\n\n [InterpreterErrorCode.UNARY_MINUS_NULL]: (data) =>\n `Cannot apply unary '-' to a null ${data.symbolType}.`,\n\n [InterpreterErrorCode.UNARY_PLUS_NON_NUMBER]: (data) =>\n `Cannot apply unary '+' to non-number value: ${data.value}`,\n\n [InterpreterErrorCode.UNARY_NOT_NON_BOOLEAN]: (data) =>\n `Cannot apply NOT to non-boolean value: ${data.value}.`,\n\n [InterpreterErrorCode.UNKNOWN_UNARY_OPERATOR]: (data) =>\n `Unknown unary operator type: ${data.operator}`,\n\n [InterpreterErrorCode.UNKNOWN_REFERENCE]: (data) => `Unknown reference: ${data.reference}`,\n\n [InterpreterErrorCode.UNKNOWN_FUNCTION]: (data) => `Unknown function: '${data.functionName}'`,\n\n [InterpreterErrorCode.INVALID_VARIABLE_NAME]: (data) =>\n `Invalid variable name '${data.name}'. Use a simple name (and underscores) without '.', '-', '['.`,\n\n [InterpreterErrorCode.VARIABLE_ALREADY_DEFINED]: (data) =>\n `Variable '${data.name}' already defined. Use a different name.`,\n\n [InterpreterErrorCode.INVALID_VARIABLE_TYPE]: (data) =>\n `Invalid variable type '${data.typeName}'. Use a valid type. (${data.validTypes})`,\n\n [InterpreterErrorCode.INVALID_VALUE_FOR_VARIABLE]: (data) =>\n `Invalid value '${data.value}' ('${data.type}') for variable '${data.name}'. Use a valid value.`,\n\n [InterpreterErrorCode.VARIABLE_NOT_FOUND]: (data) => `Variable '${data.name}' not found.`,\n\n [InterpreterErrorCode.ASSIGNMENT_VALUE_NULL]: (data) =>\n `Assignment value for '${data.identifier}' is null.`,\n\n [InterpreterErrorCode.TYPE_MISMATCH]: (data) =>\n `Invalid value '${data.value}' (Found '${data.foundType}', expected '${data.expectedType}') for variable '${data.identifier}'. Use a valid value.`,\n\n [InterpreterErrorCode.CANNOT_ASSIGN_TYPE]: (data) =>\n `Cannot assign ${data.valueType} to variable '${data.identifier}' of type ${data.variableType}.`,\n\n [InterpreterErrorCode.METHOD_RETURNED_NULL]: (data) =>\n `Method '${data.methodName}' returned null or undefined`,\n\n [InterpreterErrorCode.METHOD_NOT_FOUND]: (data) =>\n `Method '${data.methodName}' not found on '${data.value}' (${data.type})`,\n\n [InterpreterErrorCode.ATTRIBUTE_RETURNED_NULL]: (data) =>\n `Attribute '${data.attributeName}' returned null or undefined`,\n\n [InterpreterErrorCode.ATTRIBUTE_NOT_FOUND]: (data) =>\n `Attribute '${data.attributeName}' not found on '${data.value}' (${data.type})`,\n\n [InterpreterErrorCode.CANNOT_ACCESS_ATTRIBUTES]: (data) =>\n `Cannot access attributes on ${data.type}`,\n\n [InterpreterErrorCode.MAX_ITERATIONS_EXCEEDED]: \"Max iterations exceeded in while loop.\",\n\n [InterpreterErrorCode.WHILE_CONDITION_NOT_BOOLEAN]: \"While loop condition must be a boolean.\",\n\n [InterpreterErrorCode.IF_CONDITION_NOT_BOOLEAN]: \"If/elif condition must be a boolean.\",\n\n [InterpreterErrorCode.FOR_EACH_NOT_LIST]: (data) =>\n `for...in requires a List, got ${data.actualType}.`,\n\n [InterpreterErrorCode.FOR_EACH_VARIABLE_SHADOW]: (data) =>\n `for...in variable '${data.name}' shadows an existing variable in this scope.`,\n\n [InterpreterErrorCode.FOR_EACH_DUPLICATE_VARS]: (data) =>\n `for...in item and index variables must have different names, both are '${data.name}'.`,\n\n [InterpreterErrorCode.UNKNOWN_ERROR]: \"An unknown error occurred during interpretation.\",\n\n // Operations errors\n [OperationsErrorCode.UNSUPPORTED_OPERAND_TYPE]: (data) =>\n `Unsupported operand type for unit decomposition: ${data.type}`,\n\n [OperationsErrorCode.CANNOT_MIX_UNITS]: (data) => `Cannot mix units: ${data.units.join(\", \")}`,\n\n [OperationsErrorCode.INCOMPATIBLE_TYPES]: (data) =>\n `Cannot compare ${data.typeA} with ${data.typeB}. Incompatible types.`,\n\n [OperationsErrorCode.CANNOT_COMPARE_UNITS]: (data) =>\n `Cannot compare NumberWithUnit of different units: ${data.unitA} and ${data.unitB}`,\n\n [OperationsErrorCode.ORDERING_WITH_NULL]: \"Cannot perform ordering comparison with null values.\",\n\n [OperationsErrorCode.LOGICAL_REQUIRES_BOOLEAN]: (data) =>\n `${data.operator} operator requires boolean operands.`,\n\n [OperationsErrorCode.DIVISION_BY_ZERO]: \"Division by zero.\",\n\n [OperationsErrorCode.UNIT_EXPONENT_NOT_SUPPORTED]: (data) =>\n `Cannot raise ${data.unitA} to the power of ${data.unitB}. Unit exponents are not supported.`,\n\n // Symbols errors\n [SymbolsErrorCode.VALUE_MUST_BE_TYPE]: (data) =>\n `Value must be ${data.expectedType}, got ${data.actualType}.`,\n\n [SymbolsErrorCode.VALUE_IS_NULL]: (data) => `Value must be ${data.expectedType}, got null.`,\n\n [SymbolsErrorCode.METHOD_NOT_FOUND]: (data) =>\n `Method '${data.methodName}' not found or invalid arguments on type '${data.type}'.`,\n\n [SymbolsErrorCode.MISSING_REQUIRED_ARGUMENT]: (data) =>\n `Missing required argument '${data.argumentName}' for method '${data.methodName}'.`,\n\n [SymbolsErrorCode.ATTRIBUTE_NOT_FOUND]: (data) =>\n `Attribute '${data.attributeName}' not found on ${data.type}.`,\n\n [SymbolsErrorCode.CANNOT_SET_ATTRIBUTE]: (data) =>\n `Cannot set attribute '${data.attributeName}' on type '${data.type}'.`,\n\n [SymbolsErrorCode.INVALID_RADIX]: (data) =>\n `Invalid radix: ${data.radix}. Must be between 2 and 36.`,\n\n [SymbolsErrorCode.RADIX_CONVERSION_ERROR]: (data) =>\n `Error converting to base ${data.base}: ${data.error}.`,\n\n [SymbolsErrorCode.CANNOT_CONCATENATE]: (data) => `Cannot concatenate ${data.type} to String.`,\n\n [SymbolsErrorCode.CANNOT_SPLIT]: (data) => `Cannot split String by ${data.type}.`,\n\n [SymbolsErrorCode.INDEX_OUT_OF_RANGE]: (data) => `Index out of range for ${data.operation}.`,\n\n [SymbolsErrorCode.KEY_MUST_BE_STRING]: (data) =>\n `Key must be a StringSymbol or string, got ${data.type}.`,\n\n [SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE]: (data) =>\n `Cannot ${data.operation} Token with ${data.valueType} value.`,\n\n [SymbolsErrorCode.INVALID_HEX_COLOR]: (data) => `Invalid hex color format: ${data.value}`,\n\n [SymbolsErrorCode.COLOR_MANAGER_NOT_AVAILABLE]: \"ColorManager not available\",\n\n [SymbolsErrorCode.INVALID_COLOR_VALUE]: (data) =>\n `Value ${data.value} must be string, attributes record, or null, got ${data.type}.`,\n\n // Functions errors\n [FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS]: (data) =>\n `${data.functionName}() expects number arguments.`,\n\n [FunctionsErrorCode.REQUIRES_MIN_ARGUMENTS]: (data) =>\n `${data.functionName}() requires at least ${data.minArgs} argument${data.minArgs === 1 ? \"\" : \"s\"}.`,\n\n [FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT]: (data) =>\n `${data.functionName}() expects ${data.expectedType} as ${data.argumentPosition} argument.`,\n\n [FunctionsErrorCode.DIVISION_BY_ZERO]: (data) => `${data.functionName}() division by zero.`,\n\n [FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE]: (data) =>\n `${data.functionName}() argument must be ${data.constraint}.`,\n\n [FunctionsErrorCode.INVALID_BASE]: (data) =>\n `${data.functionName}() base must be ${data.constraint}.`,\n\n [FunctionsErrorCode.PARSE_ERROR]: (data) =>\n `Invalid string for ${data.functionName}: \"${data.value}\" with base ${data.base}.`,\n\n [FunctionsErrorCode.UNIT_CONVERSION_FAILED]: (data) =>\n `${data.functionName || \"function\"}() unit conversion failed${data.error ? `: ${data.error}` : \"\"}`,\n\n [FunctionsErrorCode.NO_CONFIG_AVAILABLE]: (data) =>\n `No config available for dynamic function '${data.functionName || \"unknown\"}'`,\n\n [FunctionsErrorCode.FUNCTION_RETURNED_NULL]: (data) =>\n `Dynamic function '${data.functionName || \"unknown\"}' returned null`,\n\n [FunctionsErrorCode.EXECUTION_ERROR]: (data) =>\n `Error executing dynamic function '${data.functionName || \"unknown\"}'${data.error ? `: ${data.error}` : \"\"}`,\n\n // Config errors\n [ConfigErrorCode.NO_SPEC_FOUND]: (data) => `No spec found for ${data.specName}`,\n\n [ConfigErrorCode.NO_TYPE_FOUND]: (data) => `No type found for ${data.typeName}`,\n\n // Processor errors\n [ProcessorErrorCode.TOKEN_NOT_FOUND]: (data) => `Token '${data.tokenName}' not found`,\n\n [ProcessorErrorCode.TOKEN_ALREADY_EXISTS]: (data) => `Token '${data.tokenName}' already exists.`,\n\n [ProcessorErrorCode.CIRCULAR_DEPENDENCY]: (data) =>\n `Circular dependency detected: ${Array.isArray(data.tokens) ? data.tokens.join(\", \") : data.tokens}`,\n\n [ProcessorErrorCode.SUB_FIELD_NOT_RESOLVED]: (data) =>\n `Sub-field '${data.fieldPath}' not resolved`,\n\n [ProcessorErrorCode.DEPENDENCY_ERROR]: (data) =>\n `Token '${data.tokenName}' failed due to dependency error: ${data.chain}\\nRoot cause: ${data.rootCause}`,\n\n [ProcessorErrorCode.NO_THEMES_FOUND]: (data) => `No themes found for theme \"${data.themeName}\"`,\n\n [ProcessorErrorCode.THEME_NOT_FOUND]: (data) =>\n `Theme \"${data.themeName}\" not found. Available: ${data.availableThemes.join(\", \")}`,\n\n [ProcessorErrorCode.TOKEN_SET_NOT_FOUND]: (data) => `Token set \"${data.setName}\" not found`,\n\n [ProcessorErrorCode.TOKEN_SET_INVALID]: (data) => `Token set \"${data.setName}\" is not an object`,\n\n [ProcessorErrorCode.NO_SETS_TO_PROCESS]: \"No sets to process\",\n\n [ProcessorErrorCode.MULTIPLE_SETS_NO_SELECTION]: (data) =>\n `Multiple sets found (${data.setNames.join(\", \")}) - specify activeSets or activeTheme`,\n\n // Color errors\n [ColorErrorCode.INITIALIZER_CRASHED]: \"Initializer crashed!\",\n\n [ColorErrorCode.INITIALIZER_CONSTRUCT_FAILED]: (data) =>\n `Could not construct initializer from schema${data.error ? `: ${data.error}` : \"\"}`,\n\n [ColorErrorCode.INITIALIZER_NOT_FOUND]: (data) =>\n `No initializer found for keyword '${data.keyword}'`,\n\n [ColorErrorCode.CONVERSION_TARGET_NOT_FOUND]: (data) =>\n `Conversion function crashed! No target spec found for ${data.targetUri}`,\n\n [ColorErrorCode.SOURCE_URI_NOT_FOUND]: (data) =>\n `No source URI found for color type '${data.colorType}'`,\n\n [ColorErrorCode.TARGET_URI_NOT_FOUND]: (data) =>\n `No target URI found for color type '${data.colorType}'`,\n\n [ColorErrorCode.CONVERSION_ERROR]: (data) =>\n data.message ? String(data.message) : \"Color conversion failed\",\n\n [ColorErrorCode.STRING_VALUE_ASSIGNMENT]: (data) =>\n `Cannot set attributes '${data.attributes}' for variable ${data.identifier} on Color type ${data.colorType}.`,\n\n [ColorErrorCode.ATTRIBUTE_CHAIN_TOO_LONG]: (data) =>\n `Attributes chain '${data.attributes}' for variable ${data.identifier} on Color type ${data.colorType} may not exceed one element.`,\n\n [ColorErrorCode.MISSING_SPEC]: (data) =>\n `No spec ${data.colorType} defined for variable ${data.identifier} on Color type ${data.colorType}.`,\n\n [ColorErrorCode.MISSING_SCHEMA]: (data) => `No schema defined for Color type ${data.colorType}.`,\n\n [ColorErrorCode.MISSING_ATTRIBUTE_SCHEMA]: (data) =>\n `No schema found for key ${data.attribute} for variable ${data.identifier} on Color type ${data.colorType}.`,\n\n [ColorErrorCode.INVALID_ATTRIBUTE_TYPE]: (data) =>\n `Invalid attribute type '${data.attributeType}'. Use a valid type. (${data.validTypes})`,\n\n [ColorErrorCode.INVALID_ALPHA_VALUE]: (data) =>\n `Invalid alpha value '${data.alpha}'. Alpha must be between 0 and 1.`,\n\n // Unit errors\n [UnitErrorCode.CONVERSION_CRASHED]: (data) =>\n `Conversion function crashed!${data.error ? ` ${data.error}` : \"\"}`,\n\n [UnitErrorCode.SOURCE_URI_NOT_FOUND]: (data) => `No source URI found for unit '${data.unit}'`,\n\n [UnitErrorCode.RELATIVE_REQUIRES_TWO_NUMBERS]: \"Relative conversion requires exactly 2 numbers\",\n\n [UnitErrorCode.NO_TO_ABSOLUTE_SCRIPT]: (data) =>\n `No to_absolute script found for relative unit '${data.unit}'`,\n\n [UnitErrorCode.TO_ABSOLUTE_MUST_RETURN_NUMBER]: \"to_absolute script must return a number\",\n\n [UnitErrorCode.CANNOT_CONVERT_MULTIPLE_RELATIVE]:\n \"Cannot convert multiple relative units to a common format.\",\n\n [UnitErrorCode.NO_VALID_CONVERSION_PATH]:\n \"No valid conversion paths found for the provided inputs.\",\n};\n","import type { AllErrorCodes } from \"../base\";\nimport { messages } from \"./en\";\n\nexport const getMessage = (\n code: AllErrorCodes | string,\n data?: Record<string, unknown>,\n): string => {\n const template = messages[code];\n if (!template) {\n return `Unknown error: ${code}`;\n }\n if (typeof template === \"function\") {\n return template(data || {});\n }\n return template;\n};\n\nexport const isValidErrorCode = (code: string): code is AllErrorCodes => {\n return code in messages;\n};\n\nexport type { MessageFunction, MessageMap, MessageTemplate } from \"./types\";\n","import type { Token } from \"@src/types\";\nimport type { ColorErrorCode } from \"./codes/color\";\nimport type { ConfigErrorCode } from \"./codes/config\";\nimport type { FunctionsErrorCode } from \"./codes/functions\";\nimport type { InterpreterErrorCode } from \"./codes/interpreter\";\nimport type { LexerErrorCode } from \"./codes/lexer\";\nimport type { OperationsErrorCode } from \"./codes/operations\";\nimport type { ParserErrorCode } from \"./codes/parser\";\nimport type { ProcessorErrorCode } from \"./codes/processor\";\nimport type { SymbolsErrorCode } from \"./codes/symbols\";\nimport type { UnitErrorCode } from \"./codes/unit\";\nimport { getMessage } from \"./messages\";\n\nexport interface ErrorOptions {\n token?: Token;\n line?: number;\n data?: Record<string, unknown>;\n cause?: unknown;\n}\n\nexport type AllErrorCodes =\n | LexerErrorCode\n | ParserErrorCode\n | InterpreterErrorCode\n | OperationsErrorCode\n | SymbolsErrorCode\n | FunctionsErrorCode\n | ConfigErrorCode\n | ProcessorErrorCode\n | ColorErrorCode\n | UnitErrorCode;\n\nexport type InterpreterErrorCodes =\n | InterpreterErrorCode\n | OperationsErrorCode\n | SymbolsErrorCode\n | FunctionsErrorCode\n | ConfigErrorCode\n | ColorErrorCode\n | UnitErrorCode;\n\nexport class LanguageError extends Error {\n public readonly code: string;\n public readonly data: Record<string, unknown>;\n public readonly line?: number;\n public readonly token?: Token;\n public readonly originalMessage: string;\n\n constructor(code: string, options?: ErrorOptions) {\n const message = getMessage(code, options?.data);\n super(message, options?.cause ? { cause: options.cause } : undefined);\n\n this.name = this.constructor.name;\n this.code = code;\n this.data = options?.data || {};\n this.token = options?.token;\n\n // Derive line from token if not explicitly provided\n this.line = options?.line ?? options?.token?.line;\n\n this.originalMessage = message;\n this.message = this.formatMessage();\n }\n\n private formatMessage(): string {\n let base = this.originalMessage;\n if (this.line !== undefined) {\n base = `Line ${this.line}: ${base}`;\n }\n if (this.token?.value) {\n base += `\\nNear token: ${String(this.token.value)}`;\n }\n return base;\n }\n}\n\nexport class LexerError extends LanguageError {\n public readonly code: LexerErrorCode;\n\n constructor(code: LexerErrorCode, options?: ErrorOptions) {\n super(code, options);\n this.name = \"LexerError\";\n this.code = code;\n }\n}\n\nexport class ParserError extends LanguageError {\n public readonly code: ParserErrorCode;\n\n constructor(code: ParserErrorCode, options?: ErrorOptions) {\n super(code, options);\n this.name = \"ParserError\";\n this.code = code;\n }\n}\n\nexport class InterpreterError extends LanguageError {\n public readonly code: InterpreterErrorCodes;\n\n constructor(code: InterpreterErrorCodes, options?: ErrorOptions) {\n super(code, options);\n this.name = \"InterpreterError\";\n this.code = code;\n }\n}\n\nexport class ProcessorError extends LanguageError {\n public readonly code: ProcessorErrorCode;\n\n constructor(code: ProcessorErrorCode, options?: ErrorOptions) {\n super(code, options);\n this.name = \"ProcessorError\";\n this.code = code;\n }\n}\n","import { InterpreterError, LanguageError, LexerError, ParserError, ProcessorError } from \"./base\";\n\n/**\n * Union type for serialized error data that can be passed in error data objects.\n * Used when wrapping errors from catch blocks.\n */\nexport type SerializedError = Error | LanguageError | string | { message: string; stack?: string };\n\nexport function isLanguageError(error: unknown): error is LanguageError {\n return error instanceof LanguageError;\n}\n\nexport function isLexerError(error: unknown): error is LexerError {\n return error instanceof LexerError;\n}\n\nexport function isParserError(error: unknown): error is ParserError {\n return error instanceof ParserError;\n}\n\nexport function isInterpreterError(error: unknown): error is InterpreterError {\n return error instanceof InterpreterError;\n}\n\nexport function isProcessorError(error: unknown): error is ProcessorError {\n return error instanceof ProcessorError;\n}\n\n/**\n * Serializes an error into a structured format suitable for error data.\n * Preserves error information while ensuring it's serializable.\n */\nexport function serializeError(error: unknown): SerializedError {\n if (error instanceof LanguageError) {\n return error;\n }\n if (error instanceof Error) {\n return error;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error && typeof error === \"object\" && \"message\" in error) {\n return error as { message: string; stack?: string };\n }\n return String(error);\n}\n","// Optional --------------------------------------------------------------------\n\nexport const isSome = <T>(v: T | null | undefined): v is T => {\n return v != null;\n};\n\nexport const isNone = (v: unknown): v is null | undefined => {\n return v == null;\n};\n\n// Primitive type guards -------------------------------------------------------\n\nexport const isNull = (v: unknown): v is null => {\n return v === null;\n};\n\nexport const isUndefined = (v: unknown): v is undefined => {\n return v === undefined;\n};\n\nexport const isObject = (v: unknown): v is Record<string, unknown> => {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n};\n\nexport const isString = (v: unknown): v is string => {\n return typeof v === \"string\";\n};\n\nexport const isNumber = (v: unknown): v is number => {\n return typeof v === \"number\" && !Number.isNaN(v);\n};\n\nexport const isBoolean = (v: unknown): v is boolean => {\n return typeof v === \"boolean\";\n};\n\nexport const isArray = <T = unknown>(v: unknown): v is T[] => {\n return Array.isArray(v);\n};\n\nexport const isFunction = (v: unknown): v is (...args: unknown[]) => unknown => {\n return typeof v === \"function\";\n};\n\nexport const isDate = (v: unknown): v is Date => {\n return v instanceof Date && !Number.isNaN(v.getTime());\n};\n\n// Object ----------------------------------------------------------------------\n\nexport const isMap = (v: unknown): v is Map<unknown, unknown> => v instanceof Map;\n\nexport const isPlainObject = (v: unknown): v is Record<string, unknown> => {\n if (!isObject(v)) return false;\n\n // Objects created by the Object constructor or with null prototype\n const proto = Object.getPrototypeOf(v);\n return proto === Object.prototype || proto === null;\n};\n\nexport const hasProperty = <K extends string>(obj: unknown, key: K): obj is Record<K, unknown> => {\n return isObject(obj) && key in obj;\n};\n\nexport const getKeyAlt = <K extends string, T>(\n keys: readonly K[],\n record: Partial<Record<K, T>>,\n): T | undefined => {\n for (const key of keys) {\n if (key in record) {\n return record[key];\n }\n }\n return undefined;\n};\n\nexport const isObjectWithKey = <K extends string>(\n value: unknown,\n key: K,\n): value is Record<K, unknown> => {\n return isObject(value) && key in value;\n};\n\nexport const isNonEmptyObject = (v: unknown): boolean => {\n return isObject(v) && Object.keys(v).length > 0;\n};\n\nexport const isSingleEntryObject = (v: unknown): boolean => {\n return isObject(v) && Object.keys(v).length === 1;\n};\n\n// Array -----------------------------------------------------------------------\n\nexport const isNonEmptyArray = <T>(v: unknown): v is [T, ...T[]] => {\n return isArray(v) && v.length > 0;\n};\n\nexport const ensureArray = <T>(v: T | T[] | null | undefined): T[] => {\n if (isNone(v)) return [];\n if (isArray<T>(v)) return v;\n return [v];\n};\n\nexport const isOutOfBounds = <T>(value: unknown, index: number): boolean => {\n if (!isArray<T>(value)) return true;\n return index < 0 || index >= value.length;\n};\n\nexport const isOutOfBoundsInclusive = <T>(value: unknown, index: number): boolean => {\n if (!isArray<T>(value)) return true;\n return index < 0 || index > value.length;\n};\n\nexport const isEmpty = (v: unknown): boolean => {\n if (isNone(v)) return true;\n if (isString(v) || isArray(v)) return v.length === 0;\n if (isObject(v)) return Object.keys(v).length === 0;\n return false;\n};\n\n// Number parsing --------------------------------------------------------------\n\nexport const safeParseInt = (v: unknown): number | null => {\n if (isNumber(v)) return Math.floor(v);\n if (isString(v)) {\n const parsed = parseInt(v, 10);\n return Number.isNaN(parsed) ? null : parsed;\n }\n return null;\n};\n\nexport const safeParseFloat = (v: unknown): number | null => {\n if (isNumber(v)) return v;\n if (isString(v)) {\n const parsed = parseFloat(v);\n return Number.isNaN(parsed) ? null : parsed;\n }\n return null;\n};\n\n// Type Assertion Helpers ------------------------------------------------------\n\nexport const assertIsSome = <T>(v: T | null | undefined, message?: string): T => {\n if (isNone(v)) {\n throw new Error(message || \"Expected value to be defined\");\n }\n return v;\n};\n\nexport const assertIsType = <T>(v: unknown, guard: (v: unknown) => v is T, message?: string): T => {\n if (!guard(v)) {\n throw new Error(message || \"Type assertion failed\");\n }\n return v;\n};\n\nexport const optional = <T, R>(value: T | null | undefined, fn: (v: T) => R): R | undefined => {\n return isSome(value) ? fn(value) : undefined;\n};\n\nexport const when = <A, B>(a: A, b: B): B | undefined => {\n return a !== undefined && a !== null && a !== false ? b : undefined;\n};\n\nexport const withDefault = <T>(v: T | null | undefined, defaultValue: T): T => {\n return isSome(v) ? v : defaultValue;\n};\n\nexport const isEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n\n if (isNone(a) || isNone(b)) return a === b;\n\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, index) => isEqual(item, b[index]));\n }\n\n if (isObject(a) && isObject(b)) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n return keysA.every((key) => keysB.includes(key) && isEqual(a[key], b[key]));\n }\n\n return false;\n};\n\n// Conversion ------------------------------------------------------------------\n\nexport const nullToUndefined = <T>(v: T | null | undefined): T | undefined =>\n isNull(v) ? undefined : v;\n","import { ColorErrorCode, InterpreterError, SymbolsErrorCode } from \"../errors\";\nimport { isString } from \"./type\";\n\nexport function isValidHex(value: string): boolean {\n if (!isString(value)) return false;\n if (!value.startsWith(\"#\")) return false;\n const hexPart = value.substring(1);\n // Support hex3 (#RGB), hex4 (#RGBA), hex6 (#RRGGBB), hex8 (#RRGGBBAA)\n if (\n !(hexPart.length === 3 || hexPart.length === 4 || hexPart.length === 6 || hexPart.length === 8)\n )\n return false;\n for (let i = 0; i < hexPart.length; i++) {\n const char = hexPart[i].toLowerCase();\n if (!((char >= \"0\" && char <= \"9\") || (char >= \"a\" && char <= \"f\"))) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Parses a hex color string and extracts the color value and alpha.\n * Supports hex3 (#RGB), hex4 (#RGBA), hex6 (#RRGGBB), hex8 (#RRGGBBAA) formats.\n *\n * For backwards compatibility:\n * - hex3 and hex6 formats are preserved as-is (no alpha)\n * - hex4 is converted to hex6 with alpha extracted\n * - hex8 is converted to hex6 with alpha extracted\n *\n * Returns the color value and alpha (0-1 range, or null if not specified).\n */\nexport function parseHexWithAlpha(value: string): { color: string; alpha: number | null } {\n if (!isValidHex(value)) {\n throw new InterpreterError(SymbolsErrorCode.INVALID_HEX_COLOR, {\n data: { value },\n });\n }\n\n const hexPart = value.substring(1);\n\n if (hexPart.length === 3) {\n // #RGB - preserve as-is, no alpha\n return { color: value, alpha: null };\n }\n\n if (hexPart.length === 4) {\n // #RGBA -> #RRGGBB with alpha\n const r = hexPart[0];\n const g = hexPart[1];\n const b = hexPart[2];\n const a = hexPart[3];\n const expanded = `${r}${r}${g}${g}${b}${b}`;\n const alphaValue = Number.parseInt(a + a, 16) / 255;\n return { color: `#${expanded}`, alpha: alphaValue };\n }\n\n if (hexPart.length === 6) {\n // #RRGGBB - preserve as-is, no alpha\n return { color: value, alpha: null };\n }\n\n // hexPart.length === 8\n // #RRGGBBAA -> #RRGGBB with alpha\n const colorPart = hexPart.substring(0, 6);\n const alphaPart = hexPart.substring(6, 8);\n const alphaValue = Number.parseInt(alphaPart, 16) / 255;\n return { color: `#${colorPart}`, alpha: alphaValue };\n}\n\nexport function isValidAlpha(alpha: number | null): boolean {\n return alpha === null || (alpha >= 0 && alpha <= 1);\n}\n\nexport function ensureValidAlpha(alpha: number | null): void {\n if (!isValidAlpha(alpha)) {\n throw new InterpreterError(ColorErrorCode.INVALID_ALPHA_VALUE, {\n data: { alpha: alpha as number },\n });\n }\n}\n\nexport function isTransparent(alpha: number | null): alpha is number {\n return alpha !== null && alpha < 1;\n}\n\n/**\n * Formats a hex color with alpha as hex8 format (#RRGGBBAA).\n * Expands hex3 (#RGB) to hex6 (#RRGGBB) before appending alpha.\n */\nexport function formatHex8(hexColor: string, alpha: number): string {\n const alphaHex = Math.round(alpha * 255)\n .toString(16)\n .padStart(2, \"0\");\n\n // Expand 3-char hex to 6-char if needed\n let hex6 = hexColor;\n if (hexColor.length === 4) {\n // #RGB -> #RRGGBB\n hex6 = `#${hexColor[1]}${hexColor[1]}${hexColor[2]}${hexColor[2]}${hexColor[3]}${hexColor[3]}`;\n }\n\n return `${hex6}${alphaHex}`;\n}\n","export enum CodePoint {\n HYPHEN = 45,\n UNDERSCORE = 95,\n FORWARD_TICK = 180,\n BACKWARD_TICK = 96,\n}\n\nexport const isAlpha = (char: string | null): boolean => {\n if (char === null) return false;\n const cp = char.codePointAt(0) ?? 0;\n return (\n (cp >= 65 && cp <= 90) || // A-Z\n (cp >= 97 && cp <= 122) // a-z\n );\n};\n\nexport const isNumber = (char: string | null): boolean => {\n if (char === null) return false;\n const cp = char.codePointAt(0) ?? 0;\n return cp >= 48 && cp <= 57; // 0-9\n};\n\nexport const isAlphaNumeric = (char: string | null): boolean => {\n if (char === null) return false;\n return isAlpha(char) || isNumber(char);\n};\n\nexport const isSpace = (char: string | null) => {\n if (char === null) return false;\n return /\\s/.test(char);\n};\n\nexport const capitalize = (str: string): string =>\n `${str.charAt(0).toUpperCase()}${str.slice(1).toLowerCase()}`;\n","import { type ISymbolType, SupportedFormats, type SymbolMetadata } from \"@src/types\";\nimport type { Config } from \"./config/config\";\nimport { InterpreterError, SymbolsErrorCode } from \"./errors\";\nimport { ensureValidAlpha, formatHex8, isValidHex } from \"./utils/color\";\nimport { capitalize } from \"./utils/string\";\nimport {\n isArray,\n isBoolean,\n isMap,\n isNone,\n isNull,\n isNumber,\n isObject,\n isObjectWithKey,\n isOutOfBounds,\n isOutOfBoundsInclusive,\n isSome,\n isString,\n isUndefined,\n nullToUndefined,\n} from \"./utils/type\";\n\n// Types -----------------------------------------------------------------------\n\nexport interface ToJsOptions {\n /** Whether to recursively convert nested values (default: true) */\n recursive?: boolean;\n /** Whether to use toString() for structured types (default: false) */\n stringify?: boolean;\n}\n\n// Utilities -------------------------------------------------------------------\n\nexport function isTokenscriptSymbol(value: unknown): value is ISymbolType {\n return isObjectWithKey(value, \"getTypeName\");\n}\n\nexport function isList(value: TokenSymbol): boolean {\n return isArray(value.value);\n}\n\nexport function isDictionary(value: TokenSymbol): boolean {\n return isMap(value.value);\n}\n\nexport const typeEquals = (typeA: string | null, typeB: string | null) =>\n typeA?.toLowerCase() === typeB?.toLowerCase();\n\n/**\n * Constructs captialized type name from `base` and `sub?`\n * E.g.: base = color, sub = hex => Color.Hex\n * base = COLOR => Color\n */\nexport const typeName = (base: string, sub?: string): string => {\n const baseStr = capitalize(base);\n if (sub) {\n const subStr = capitalize(sub);\n return `${baseStr}.${subStr}`;\n }\n return baseStr;\n};\n\nexport const getResultTypeName = (result: unknown): string => {\n if (isNull(result)) {\n return \"Null\";\n }\n if (isString(result)) {\n return \"String\";\n }\n if (isTokenscriptSymbol(result)) {\n return result.getTypeName();\n }\n return \"Unknown\";\n};\n\nconst formatObjectEntries = (\n data: Record<string, unknown> | Map<string, unknown> | Array<[string, unknown]>,\n): string => {\n let entries: Array<[string, unknown]>;\n\n if (isArray(data)) {\n entries = data;\n } else if (isMap(data)) {\n entries = Array.from(data.entries());\n } else {\n entries = Object.entries(data);\n }\n\n const formattedEntries = entries.map(([key, value]) => `${key}: ${String(value)}`).join(\", \");\n return `{${formattedEntries}}`;\n};\n\n// Dictionary and List Implementation Functions --------------------------------\n\nconst expectStringKey = (key: StringSymbol | string): string => {\n if (isString(key)) {\n return key;\n }\n if (key instanceof StringSymbol && isSome(key.value)) {\n return key.value;\n }\n throw new InterpreterError(SymbolsErrorCode.KEY_MUST_BE_STRING, {\n data: { type: typeof key },\n });\n};\n\nexport const DictionaryImpl = {\n get(value: Map<string, ISymbolType>, key: StringSymbol | string, config?: Config): ISymbolType {\n const keyStr = expectStringKey(key);\n const result = value.get(keyStr);\n if (isSome(result)) {\n return result;\n }\n return new NullSymbol(config);\n },\n\n set(value: Map<string, ISymbolType>, key: StringSymbol | string, val: ISymbolType): void {\n const keyStr = expectStringKey(key);\n value.set(keyStr, val.cloneIfMutable());\n },\n\n deleteKey(value: Map<string, ISymbolType>, key: StringSymbol | string): void {\n const keyStr = expectStringKey(key);\n value.delete(keyStr);\n },\n\n keys(value: Map<string, ISymbolType>, config?: Config): ListSymbol {\n const keys = Array.from(value.keys()).map((key) => new StringSymbol(key, config));\n return new ListSymbol(keys, false, config);\n },\n\n values(value: Map<string, ISymbolType>, config?: Config): ListSymbol {\n const values = Array.from(value.values());\n return new ListSymbol(values, false, config);\n },\n\n keyExists(\n value: Map<string, ISymbolType>,\n key: StringSymbol | string,\n config?: Config,\n ): BooleanSymbol {\n const keyStr = expectStringKey(key);\n return new BooleanSymbol(value.has(keyStr), config);\n },\n\n length(value: Map<string, ISymbolType>, config?: Config): NumberSymbol {\n return new NumberSymbol(value.size, config);\n },\n\n clear(value: Map<string, ISymbolType>): void {\n value.clear();\n },\n\n deepCopy(value: Map<string, ISymbolType>): Map<string, ISymbolType> {\n const copiedMap = new Map<string, ISymbolType>();\n for (const [key, val] of value.entries()) {\n copiedMap.set(key, val.deepCopy());\n }\n return copiedMap;\n },\n\n toString(value: Map<string, ISymbolType>): string {\n return formatObjectEntries(value);\n },\n\n hasAttribute(value: Map<string, ISymbolType>, attributeName: string): boolean {\n return value.has(attributeName);\n },\n\n getAttribute(value: Map<string, ISymbolType>, attributeName: string): ISymbolType | null {\n const val = value.get(attributeName);\n return val !== undefined ? val : null;\n },\n};\n\nexport const ListImpl = {\n append(value: ISymbolType[], item: ISymbolType): void {\n value.push(item.cloneIfMutable());\n },\n\n extend(value: ISymbolType[], ...items: ISymbolType[]): void {\n for (const item of items) {\n if (item instanceof ListSymbol) {\n value.push(...item.value.map((element: ISymbolType) => element.cloneIfMutable()));\n } else {\n value.push(item.cloneIfMutable());\n }\n }\n },\n\n insert(value: ISymbolType[], indexSymbol: ISymbolType, item: ISymbolType): void {\n const index = indexSymbol.value as number;\n if (isOutOfBoundsInclusive(value, index)) {\n throw new InterpreterError(SymbolsErrorCode.INDEX_OUT_OF_RANGE, {\n data: { operation: \"insert\" },\n });\n }\n value.splice(index, 0, item.cloneIfMutable());\n },\n\n deleteAt(value: ISymbolType[], indexSymbol: ISymbolType): void {\n const index = indexSymbol.value as number;\n if (isOutOfBounds(value, index)) {\n throw new InterpreterError(SymbolsErrorCode.INDEX_OUT_OF_RANGE, {\n data: { operation: \"deletion\" },\n });\n }\n value.splice(index, 1);\n },\n\n length(value: ISymbolType[], config?: Config): NumberSymbol {\n return new NumberSymbol(value.length, config);\n },\n\n indexOf(value: ISymbolType[], item: ISymbolType, config?: Config): NumberSymbol {\n const idx = value.findIndex((el) => el.equals(item));\n return new NumberSymbol(idx, config);\n },\n\n get(value: ISymbolType[], indexSymbol: ISymbolType): ISymbolType {\n const index = indexSymbol.value as number;\n if (isOutOfBounds(value, index)) {\n throw new InterpreterError(SymbolsErrorCode.INDEX_OUT_OF_RANGE, {\n data: { operation: \"get\" },\n });\n }\n return value[index];\n },\n\n update(value: ISymbolType[], indexSymbol: ISymbolType, item: ISymbolType): void {\n const index = indexSymbol.value as number;\n if (isOutOfBounds(value, index)) {\n throw new InterpreterError(SymbolsErrorCode.INDEX_OUT_OF_RANGE, {\n data: { operation: \"update\" },\n });\n }\n value[index] = item.cloneIfMutable();\n },\n\n join(value: ISymbolType[], separator: ISymbolType | undefined, config?: Config): StringSymbol {\n const sep = separator?.value || \"\";\n const stringElements = value.map((element) => {\n if (element.value === null) {\n return \"null\";\n }\n return element.toString();\n });\n return new StringSymbol(stringElements.join(sep), config);\n },\n\n deepCopy(value: ISymbolType[]): ISymbolType[] {\n return value.map((element) => element.deepCopy());\n },\n\n toString(value: ISymbolType[], isImplicit: boolean = false): string {\n const delimiter = isImplicit ? \" \" : \", \";\n return value.map((x) => (x.value === null ? \"null\" : x.toString())).join(delimiter);\n },\n};\n\n// Base Type -------------------------------------------------------------------\n\ntype SupportedMethods = Record<string, MethodDefinitionDef>;\n\ninterface MethodArgumentDef {\n name: string;\n type: any; // Could be ISymbolType constructor or a special marker like SymbolSelfType\n optional?: boolean;\n}\n\ninterface MethodDefinitionDef {\n name?: string;\n function: (...args: any[]) => ISymbolType | null | undefined;\n args: MethodArgumentDef[];\n returnType: any; // Could be ISymbolType constructor or a special marker\n}\n\nexport abstract class BaseSymbolType implements ISymbolType {\n abstract type: string;\n public value: any | null;\n public config?: Config;\n static _SUPPORTED_METHODS?: SupportedMethods;\n\n constructor(value: any, config?: Config) {\n this.value = value;\n this.config = config;\n }\n\n abstract validValue(value: any): boolean;\n\n /**\n * Forces creating a deepCopy of provided symbol no matter if it's immutable or not.\n */\n abstract deepCopy(): ISymbolType;\n\n /**\n * Returns a copy of the symbol if it's mutable, otherwise returns the same instance.\n *\n * This method is used to prevent reference sharing issues when storing symbols in\n * containers like lists and dictionaries. Immutable symbols (Number, String, Boolean,\n * NumberWithUnit, Null, hex ColorSymbol) can safely share references since they\n * cannot be modified after creation. Mutable symbols (List, Dictionary, dynamic\n * ColorSymbol) need to be deep copied to prevent unintended mutations.\n *\n * @returns For immutable symbols: returns `this` (same reference)\n * For mutable symbols: returns `this.deepCopy()` (new instance)\n */\n abstract cloneIfMutable(): ISymbolType;\n\n abstract toJs(options?: ToJsOptions): JsValue;\n\n toString(): string {\n return String(this.value);\n }\n\n getTypeName(): string {\n return this.type;\n }\n\n typeEquals(other: ISymbolType): boolean {\n return typeEquals(this.type, other.type);\n }\n\n equals(other: ISymbolType): boolean {\n return this.typeEquals(other) && this.value === other.value;\n }\n\n hasMethod?(methodName: string, args: ISymbolType[]): boolean {\n const methodDefinition = (this.constructor as any)._SUPPORTED_METHODS?.[\n methodName.toLowerCase()\n ];\n if (!methodDefinition) return false;\n if (methodDefinition.args.length === 0) return true;\n\n const requiredArgs = methodDefinition.args.filter((arg: MethodArgumentDef) => !arg.optional);\n\n if (args.length < requiredArgs.length) {\n return false;\n }\n\n if (args.length > methodDefinition.args.length) {\n return false;\n }\n\n return true;\n }\n\n callMethod?(methodName: string, args: ISymbolType[]): ISymbolType | null | undefined {\n const methodDefinition = (this.constructor as any)._SUPPORTED_METHODS?.[\n methodName.toLowerCase()\n ];\n if (!methodDefinition || !this.hasMethod?.(methodName, args)) {\n throw new InterpreterError(SymbolsErrorCode.METHOD_NOT_FOUND, {\n data: { methodName, type: this.type },\n });\n }\n\n if (methodDefinition.args.length === 0) {\n return methodDefinition.function.call(this, ...args);\n }\n\n const processedArgs: ISymbolType[] = [];\n\n methodDefinition.args.forEach((argDef: MethodArgumentDef, index: number) => {\n if (args[index] !== undefined) {\n processedArgs.push(args[index]);\n } else if (!argDef.optional) {\n throw new InterpreterError(SymbolsErrorCode.MISSING_REQUIRED_ARGUMENT, {\n data: { argumentName: argDef.name, methodName },\n });\n }\n });\n\n return methodDefinition.function.call(this, ...processedArgs);\n }\n\n hasAttribute?(_attributeName: string): boolean {\n return false;\n }\n\n getAttribute?(attributeName: string): ISymbolType | null {\n throw new InterpreterError(SymbolsErrorCode.ATTRIBUTE_NOT_FOUND, {\n data: { attributeName, type: this.type },\n });\n }\n\n setAttribute?(attributeName: string, _value: ISymbolType): void {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_SET_ATTRIBUTE, {\n data: { attributeName, type: this.type },\n });\n }\n}\n\n// Concrete Symbol Types -------------------------------------------------------\n\n/**\n * Null type to differentiate from null values from the host language\n * Methods returning `null` should return this type, also as empty variables should keep this.\n * Host language `null` or `undefined` will crash when used as values during intepretation.\n */\nexport class NullSymbol extends BaseSymbolType {\n type = \"Null\";\n static readonly type = \"Null\";\n\n constructor(config?: Config) {\n super(null, config);\n }\n\n validValue(val: any): boolean {\n return isNone(val);\n }\n\n toString(): string {\n return \"null\";\n }\n\n deepCopy(): NullSymbol {\n return new NullSymbol(this.config);\n }\n\n cloneIfMutable(): NullSymbol {\n return this;\n }\n\n equals(other: ISymbolType): boolean {\n return other instanceof NullSymbol;\n }\n\n static empty(): NullSymbol {\n return new NullSymbol();\n }\n\n toJs(_options?: ToJsOptions): null {\n return null;\n }\n}\n\ntype NumberValue = number | null;\n\nexport class NumberSymbol extends BaseSymbolType {\n type = \"Number\";\n static readonly type = \"Number\";\n static _SUPPORTED_METHODS = {\n to_string: {\n name: \"to_string\",\n function: function (this: NumberSymbol, radix?: NumberSymbol) {\n return this.toStringSymbol(radix);\n },\n args: [\n {\n name: \"radix\",\n type: \"Number\",\n optional: true,\n },\n ],\n returnType: \"String\",\n },\n };\n\n public value: NumberValue;\n\n constructor(value: number | NumberSymbol | NumberWithUnitSymbol | null, config?: Config) {\n let safeValue: NumberValue;\n if (isNumber(value)) {\n safeValue = value;\n } else if (value instanceof NumberSymbol || value instanceof NumberWithUnitSymbol) {\n safeValue = value.value as number;\n } else if (isNull(value)) {\n safeValue = null;\n } else {\n throw new InterpreterError(SymbolsErrorCode.VALUE_MUST_BE_TYPE, {\n data: { expectedType: \"int or float\", actualType: typeof value },\n });\n }\n super(safeValue, config);\n this.value = safeValue;\n }\n\n validValue(val: any): boolean {\n return isNumber(val) || val instanceof NumberSymbol;\n }\n\n expectSafeValue(val: any): asserts val is number {\n if (isNone(val)) {\n throw new InterpreterError(SymbolsErrorCode.VALUE_IS_NULL, {\n data: { expectedType: \"int or float\" },\n });\n }\n }\n\n toString(): string {\n return String(this.value);\n }\n\n deepCopy(): NumberSymbol {\n return new NumberSymbol(this.value, this.config);\n }\n\n cloneIfMutable(): NumberSymbol {\n return this;\n }\n\n static empty(): NumberSymbol {\n return new NumberSymbol(null);\n }\n\n hasAttribute(attributeName: string): boolean {\n return attributeName === \"value\";\n }\n\n getAttribute(attributeName: string): ISymbolType | null {\n if (attributeName === \"value\") {\n return new NumberSymbol(this.value, this.config);\n }\n throw new InterpreterError(SymbolsErrorCode.ATTRIBUTE_NOT_FOUND, {\n data: { attributeName, type: \"Number\" },\n });\n }\n\n // Direct translation of to_string method from token_interpreter/symbols.py\n toStringSymbol(radix?: NumberSymbol): StringSymbol {\n this.expectSafeValue(this.value);\n\n if (radix) {\n this.expectSafeValue(radix?.value);\n } else {\n return new StringSymbol(String(this.value), this.config);\n }\n\n const base = radix.value;\n if (!Number.isInteger(base) || base < 2 || base > 36) {\n throw new InterpreterError(SymbolsErrorCode.INVALID_RADIX, {\n data: { radix: base },\n });\n }\n\n let numValue: number;\n if (base === 16) {\n numValue = Math.round(this.value);\n // For hexadecimal, round non-integer values (with .5 rounding down)\n // Otherwise color conversion to hex wont work as expected\n const fractionalPart = Math.abs(this.value % 1);\n if (fractionalPart === 0.5) {\n // .5 cases round down (towards negative infinity)\n numValue = Math.floor(this.value);\n } else {\n // Normal rounding for other fractional parts\n numValue = Math.round(this.value);\n }\n } else {\n numValue = this.value;\n }\n\n try {\n if (Number.isInteger(numValue) && radix) {\n return new StringSymbol(numValue.toString(base), this.config);\n } else {\n return new StringSymbol(String(this.value), this.config);\n }\n } catch (e) {\n throw new InterpreterError(SymbolsErrorCode.RADIX_CONVERSION_ERROR, {\n data: { base, error: String(e) },\n });\n }\n }\n\n toJs(_options?: ToJsOptions): NumberValue {\n return this.value;\n }\n}\n\ntype StringValue = string | null;\n\nexport class StringSymbol extends BaseSymbolType {\n type = \"String\";\n static readonly type = \"String\";\n static _SUPPORTED_METHODS = {\n upper: {\n function: function (this: StringSymbol) {\n return this.upper();\n },\n args: [],\n returnType: \"String\",\n },\n lower: {\n function: function (this: StringSymbol) {\n return this.lower();\n },\n args: [],\n returnType: \"String\",\n },\n length: {\n function: function (this: StringSymbol) {\n return this.length();\n },\n args: [],\n returnType: \"Number\",\n },\n concat: {\n function: function (this: StringSymbol, other: StringSymbol) {\n return this.concat(other);\n },\n args: [{ name: \"other\", type: \"String\" }],\n returnType: \"String\",\n },\n split: {\n function: function (this: StringSymbol, delimiter?: StringSymbol) {\n return this.split(delimiter);\n },\n args: [{ name: \"delimiter\", type: \"String\", optional: true }],\n returnType: \"List\",\n },\n };\n\n public value: StringValue;\n\n constructor(value: string | StringSymbol | null, config?: Config) {\n let safeValue: string | null;\n if (typeof value === \"string\") {\n safeValue = value;\n } else if (value instanceof StringSymbol) {\n safeValue = value.value;\n } else if (value === null) {\n safeValue = null;\n } else {\n throw new InterpreterError(SymbolsErrorCode.VALUE_MUST_BE_TYPE, {\n data: { expectedType: \"string\", actualType: typeof value },\n });\n }\n super(safeValue, config);\n this.value = safeValue;\n }\n\n validValue(val: any): boolean {\n return typeof val === \"string\" || val instanceof StringSymbol;\n }\n\n expectSafeValue(val: any): asserts val is string {\n if (val === null || val === undefined) {\n throw new InterpreterError(SymbolsErrorCode.VALUE_IS_NULL, {\n data: { expectedType: \"string\" },\n });\n }\n }\n\n upper(): StringSymbol {\n this.expectSafeValue(this.value);\n return new StringSymbol(this.value.toUpperCase(), this.config);\n }\n\n deepCopy(): StringSymbol {\n return new StringSymbol(this.value, this.config);\n }\n\n cloneIfMutable(): StringSymbol {\n return this;\n }\n\n static empty(): StringSymbol {\n return new StringSymbol(null);\n }\n\n lower(): StringSymbol {\n this.expectSafeValue(this.value);\n return new StringSymbol(this.value.toLowerCase(), this.config);\n }\n\n length(): NumberSymbol {\n this.expectSafeValue(this.value);\n return new NumberSymbol(this.value.length, this.config);\n }\n\n concat(other: StringSymbol): StringSymbol {\n this.expectSafeValue(this.value);\n if (other instanceof StringSymbol) {\n other.expectSafeValue(other.value);\n return new StringSymbol(this.value + other.value, this.config);\n }\n throw new InterpreterError(SymbolsErrorCode.CANNOT_CONCATENATE, {\n data: { type: `String ${typeof other}` },\n });\n }\n\n split(delimiter?: StringSymbol): ListSymbol {\n this.expectSafeValue(this.value);\n const strValue = this.value;\n\n if (delimiter instanceof StringSymbol) {\n const parts = strValue.split(delimiter.value as string);\n return new ListSymbol(\n parts.map((p) => new StringSymbol(p, this.config)),\n false,\n this.config,\n );\n } else if (typeof delimiter === \"string\") {\n const parts = strValue.split(delimiter);\n return new ListSymbol(\n parts.map((p) => new StringSymbol(p, this.config)),\n false,\n this.config,\n );\n } else if (delimiter === undefined || delimiter === null) {\n const parts = Array.from(strValue);\n return new ListSymbol(\n parts.map((p) => new StringSymbol(p, this.config)),\n false,\n this.config,\n );\n }\n\n throw new InterpreterError(SymbolsErrorCode.CANNOT_SPLIT, {\n data: { type: typeof delimiter },\n });\n }\n\n toJs(_options?: ToJsOptions): StringValue {\n return this.value;\n }\n}\n\ntype BooleanValue = boolean | null;\n\nexport class BooleanSymbol extends BaseSymbolType {\n type = \"Boolean\";\n static readonly type = \"Boolean\";\n\n public value: BooleanValue;\n constructor(value: boolean | BooleanSymbol | null, config?: Config) {\n let safeValue: BooleanValue;\n if (typeof value === \"boolean\") {\n safeValue = value;\n } else if (value instanceof BooleanSymbol) {\n safeValue = value.value;\n } else if (value === null) {\n safeValue = null;\n } else {\n throw new InterpreterError(SymbolsErrorCode.VALUE_MUST_BE_TYPE, {\n data: { expectedType: \"boolean\", actualType: typeof value },\n });\n }\n super(safeValue, config);\n this.value = safeValue;\n }\n\n validValue(val: any): boolean {\n return typeof val === \"boolean\" || val instanceof BooleanSymbol;\n }\n\n expectSafeValue(val: any): asserts val is boolean {\n if (val === null || val === undefined) {\n throw new InterpreterError(SymbolsErrorCode.VALUE_IS_NULL, {\n data: { expectedType: \"boolean\" },\n });\n }\n }\n\n deepCopy(): BooleanSymbol {\n return new BooleanSymbol(this.value, this.config);\n }\n\n cloneIfMutable(): BooleanSymbol {\n return this;\n }\n\n static empty(): BooleanSymbol {\n return new BooleanSymbol(null);\n }\n\n toJs(_options?: ToJsOptions): BooleanValue {\n return this.value;\n }\n}\n\nexport class ListSymbol extends BaseSymbolType {\n type = \"List\";\n static readonly type = \"List\";\n static _SUPPORTED_METHODS = {\n append: {\n function: function (this: ListSymbol, item: ISymbolType) {\n return this.append(item);\n },\n args: [{ name: \"item\", type: \"any\" }],\n returnType: \"List\",\n },\n extend: {\n function: function (this: ListSymbol, ...items: ISymbolType[]) {\n return this.extend(...items);\n },\n args: [],\n returnType: \"List\",\n },\n insert: {\n function: function (this: ListSymbol, index: NumberSymbol, item: ISymbolType) {\n return this.insert(index, item);\n },\n args: [\n { name: \"index\", type: \"Number\" },\n { name: \"item\", type: \"any\" },\n ],\n returnType: \"List\",\n },\n delete: {\n function: function (this: ListSymbol, index: NumberSymbol) {\n return this.delete(index);\n },\n args: [{ name: \"index\", type: \"Number\" }],\n returnType: \"List\",\n },\n length: {\n function: function (this: ListSymbol) {\n return this.length();\n },\n args: [],\n returnType: \"Number\",\n },\n index: {\n function: function (this: ListSymbol, item: ISymbolType) {\n return this.index(item);\n },\n args: [{ name: \"item\", type: \"any\" }],\n returnType: \"Number\",\n },\n get: {\n function: function (this: ListSymbol, index: NumberSymbol) {\n return this.get(index);\n },\n args: [{ name: \"index\", type: \"Number\" }],\n returnType: \"any\",\n },\n update: {\n function: function (this: ListSymbol, index: NumberSymbol, item: ISymbolType) {\n return this.update(index, item);\n },\n args: [\n { name: \"index\", type: \"Number\" },\n { name: \"item\", type: \"any\" },\n ],\n returnType: \"List\",\n },\n join: {\n function: function (this: ListSymbol, separator?: StringSymbol) {\n return this.join(separator);\n },\n args: [{ name: \"separator\", type: \"String\", optional: true }],\n returnType: \"String\",\n },\n };\n\n public value: ISymbolType[];\n public isImplicit: boolean;\n\n constructor(elements: ISymbolType[] | null, isImplicit = false, config?: Config) {\n const safeElements = elements === null ? [] : elements;\n super(safeElements, config);\n this.value = safeElements;\n this.isImplicit = isImplicit;\n }\n\n validValue(val: any): boolean {\n return Array.isArray(val) || val instanceof ListSymbol;\n }\n\n toString(): string {\n return ListImpl.toString(this.value, this.isImplicit);\n }\n\n append(item: ISymbolType): ListSymbol {\n ListImpl.append(this.value, item);\n return this;\n }\n\n extend(...items: ISymbolType[]): ListSymbol {\n ListImpl.extend(this.value, ...items);\n return this;\n }\n\n insert(indexSymbol: NumberSymbol, item: ISymbolType): ListSymbol {\n ListImpl.insert(this.value, indexSymbol, item);\n return this;\n }\n\n delete(indexSymbol: NumberSymbol): ListSymbol {\n ListImpl.deleteAt(this.value, indexSymbol);\n return this;\n }\n\n length(): NumberSymbol {\n return ListImpl.length(this.value, this.config);\n }\n\n index(item: ISymbolType): NumberSymbol {\n return ListImpl.indexOf(this.value, item, this.config);\n }\n\n get(indexSymbol: NumberSymbol): ISymbolType {\n return ListImpl.get(this.value, indexSymbol);\n }\n\n update(indexSymbol: NumberSymbol, item: ISymbolType): ListSymbol {\n ListImpl.update(this.value, indexSymbol, item);\n return this;\n }\n\n join(separator?: StringSymbol): StringSymbol {\n return ListImpl.join(this.value, separator, this.config);\n }\n\n deepCopy(): ListSymbol {\n const copiedElements = ListImpl.deepCopy(this.value);\n return new ListSymbol(copiedElements, this.isImplicit, this.config);\n }\n\n cloneIfMutable(): ListSymbol {\n return this.deepCopy();\n }\n\n static empty(): ListSymbol {\n return new ListSymbol(null);\n }\n\n getTypeName(): string {\n return this.isImplicit ? typeName(this.type, \"Implicit\") : typeName(this.type);\n }\n\n toJs(options?: ToJsOptions): JsValue[] {\n const { recursive = true } = options ?? {};\n if (!recursive) return this.value as any;\n return this.value.map((item) => item.toJs(options));\n }\n}\n\ntype NumberWithUnitValue = number | null;\n\nexport class NumberWithUnitSymbol extends BaseSymbolType {\n type = \"NumberWithUnit\";\n static readonly type = \"NumberWithUnit\";\n static _SUPPORTED_METHODS = {\n to_string: {\n name: \"to_string\",\n function: function (this: NumberWithUnitSymbol) {\n return this.toStringSymbol();\n },\n args: [\n {\n name: \"radix\",\n type: \"Number\",\n optional: true,\n },\n ],\n returnType: \"String\",\n },\n to_number: {\n function: function (this: NumberWithUnitSymbol) {\n return this.to_number();\n },\n args: [],\n returnType: \"Number\",\n },\n };\n\n public value: NumberWithUnitValue;\n public unit: SupportedFormats;\n\n constructor(\n value: number | NumberSymbol | null,\n unit: SupportedFormats | string,\n config?: Config,\n ) {\n let safeValue: NumberWithUnitValue;\n if (typeof value === \"number\") {\n safeValue = value;\n } else if (value instanceof NumberSymbol) {\n safeValue = value.value;\n } else if (value === null) {\n safeValue = null;\n } else {\n throw new InterpreterError(SymbolsErrorCode.VALUE_MUST_BE_TYPE, {\n data: { expectedType: \"number or NumberSymbol\", actualType: typeof value },\n });\n }\n super(safeValue, config);\n this.value = safeValue;\n\n if (typeof unit === \"string\" && !(Object.values(SupportedFormats) as string[]).includes(unit)) {\n throw new InterpreterError(SymbolsErrorCode.ATTRIBUTE_NOT_FOUND, {\n data: { attributeName: unit, type: \"Unit\" },\n });\n }\n this.unit = typeof unit === \"string\" ? (unit as SupportedFormats) : unit;\n }\n\n validValue(val: any): boolean {\n return val instanceof NumberWithUnitSymbol;\n }\n\n static fromRecord(\n record: {\n value: number | string;\n unit: string;\n type?: string;\n },\n config?: Config,\n ): NumberWithUnitSymbol | undefined {\n if (record === null || typeof record !== \"object\") return;\n if (record.type !== \"NumberWithUnit\") return;\n if (!record.value && !record.unit) return;\n if (typeof record.value !== \"number\") return;\n\n return new NumberWithUnitSymbol(record.value, record.unit, config);\n }\n\n toString(): string {\n return `${this.value}${this.unit}`;\n }\n\n expectSafeValue(val: any): asserts val is number {\n if (val === null || val === undefined) {\n throw new InterpreterError(SymbolsErrorCode.VALUE_IS_NULL, {\n data: { expectedType: \"number\" },\n });\n }\n }\n\n toStringSymbol(): StringSymbol {\n this.expectSafeValue(this.value);\n return new StringSymbol(`${this.value}${this.unit}`, this.config);\n }\n\n to_number(): NumberSymbol {\n this.expectSafeValue(this.value);\n return new NumberSymbol(this.value, this.config);\n }\n\n equals(other: ISymbolType): boolean {\n return (\n other instanceof NumberWithUnitSymbol &&\n this.value === other.value &&\n this.unit.toLowerCase() === other?.unit.toLowerCase()\n );\n }\n\n deepCopy(): NumberWithUnitSymbol {\n return new NumberWithUnitSymbol(this.value, this.unit, this.config);\n }\n\n cloneIfMutable(): NumberWithUnitSymbol {\n return this;\n }\n\n static empty(): NumberWithUnitSymbol {\n return new NumberWithUnitSymbol(null, \"px\");\n }\n\n hasAttribute(attributeName: string): boolean {\n return attributeName === \"value\";\n }\n\n getAttribute(attributeName: string): ISymbolType | null {\n if (attributeName === \"value\") {\n return new NumberSymbol(this.value, this.config);\n }\n throw new InterpreterError(SymbolsErrorCode.ATTRIBUTE_NOT_FOUND, {\n data: { attributeName, type: \"NumberWithUnit\" },\n });\n }\n\n getTypeName(): string {\n return `${this.type}.${capitalize(this.unit)}`;\n }\n\n toJs(options?: ToJsOptions): string | { value: number | null; unit: string } {\n const { stringify = false } = options ?? {};\n if (stringify) return this.toString();\n return { value: this.value, unit: this.unit };\n }\n}\n\nexport class DictionarySymbol extends BaseSymbolType {\n type = \"Dictionary\";\n static readonly type = \"Dictionary\";\n static _SUPPORTED_METHODS = {\n get: {\n function: function (this: DictionarySymbol, key: StringSymbol) {\n return this.get(key);\n },\n args: [{ name: \"key\", type: \"String\", optional: false }],\n returnType: \"any\",\n },\n set: {\n function: function (this: DictionarySymbol, key: StringSymbol, value: ISymbolType) {\n return this.set(key, value);\n },\n args: [\n { name: \"key\", type: \"String\", optional: false },\n { name: \"value\", type: \"any\", optional: false },\n ],\n returnType: \"Dictionary\",\n },\n delete: {\n function: function (this: DictionarySymbol, key: StringSymbol) {\n return this.delete(key);\n },\n args: [{ name: \"key\", type: \"String\", optional: false }],\n returnType: \"Dictionary\",\n },\n keys: {\n function: function (this: DictionarySymbol) {\n return this.keys();\n },\n args: [],\n returnType: \"List\",\n },\n values: {\n function: function (this: DictionarySymbol) {\n return this.values();\n },\n args: [],\n returnType: \"List\",\n },\n key_exists: {\n function: function (this: DictionarySymbol, key: StringSymbol) {\n return this.keyExists(key);\n },\n args: [{ name: \"key\", type: \"String\", optional: false }],\n returnType: \"Boolean\",\n },\n length: {\n function: function (this: DictionarySymbol) {\n return this.length();\n },\n args: [],\n returnType: \"Number\",\n },\n clear: {\n function: function (this: DictionarySymbol) {\n return this.clear();\n },\n args: [],\n returnType: \"Dictionary\",\n },\n };\n\n public value: Map<string, ISymbolType>;\n\n constructor(\n value: Map<string, ISymbolType> | Record<string, ISymbolType> | DictionarySymbol | null,\n config?: Config,\n ) {\n let safeValue: Map<string, ISymbolType> | null;\n if (value instanceof DictionarySymbol) {\n safeValue = value.value;\n } else if (isMap(value)) {\n safeValue = value;\n } else if (isNull(value)) {\n safeValue = new Map();\n } else if (isObject(value)) {\n safeValue = new Map(Object.entries(value));\n } else {\n throw new InterpreterError(SymbolsErrorCode.VALUE_MUST_BE_TYPE, {\n data: { expectedType: \"dict\", actualType: typeof value },\n });\n }\n super(safeValue, config);\n this.value = safeValue;\n }\n\n validValue(val: any): boolean {\n return isMap(val) || isNull(val);\n }\n\n toString(): string {\n return DictionaryImpl.toString(this.value);\n }\n\n get(key: StringSymbol): ISymbolType {\n return DictionaryImpl.get(this.value, key, this.config);\n }\n\n set(key: StringSymbol, value: ISymbolType): DictionarySymbol {\n DictionaryImpl.set(this.value, key, value);\n return this;\n }\n\n delete(key: StringSymbol): DictionarySymbol {\n DictionaryImpl.deleteKey(this.value, key);\n return this;\n }\n\n keys(): ListSymbol {\n return DictionaryImpl.keys(this.value, this.config);\n }\n\n values(): ListSymbol {\n return DictionaryImpl.values(this.value, this.config);\n }\n\n keyExists(key: StringSymbol): BooleanSymbol {\n return DictionaryImpl.keyExists(this.value, key, this.config);\n }\n\n length(): NumberSymbol {\n return DictionaryImpl.length(this.value, this.config);\n }\n\n clear(): DictionarySymbol {\n DictionaryImpl.clear(this.value);\n return this;\n }\n\n deepCopy(): DictionarySymbol {\n const copiedMap = DictionaryImpl.deepCopy(this.value);\n return new DictionarySymbol(copiedMap, this.config);\n }\n\n cloneIfMutable(): DictionarySymbol {\n return this.deepCopy();\n }\n\n static empty(): DictionarySymbol {\n return new DictionarySymbol(null);\n }\n\n hasAttribute(attributeName: string): boolean {\n return DictionaryImpl.hasAttribute(this.value, attributeName);\n }\n\n getAttribute(attributeName: string): ISymbolType | null {\n return DictionaryImpl.getAttribute(this.value, attributeName);\n }\n\n toJs(options?: ToJsOptions): Record<string, JsValue> {\n const { recursive = true } = options ?? {};\n const obj: Record<string, JsValue> = {};\n for (const [key, child] of this.value.entries()) {\n obj[key] = recursive ? child.toJs(options) : (child as any);\n }\n return obj;\n }\n}\n\nexport type TokenValue = Map<string, ISymbolType> | ISymbolType[];\n\nexport class TokenSymbol extends BaseSymbolType {\n type = \"Token\";\n static readonly type = \"Token\";\n static _SUPPORTED_METHODS = {\n get: {\n function: function (this: TokenSymbol, keyOrIndex: StringSymbol | NumberSymbol) {\n return this.get(keyOrIndex);\n },\n args: [{ name: \"keyOrIndex\", type: \"String|Number\", optional: false }],\n returnType: \"any\",\n },\n set: {\n function: function (this: TokenSymbol, key: StringSymbol, value: ISymbolType) {\n return this.set(key, value);\n },\n args: [\n { name: \"key\", type: \"String\", optional: false },\n { name: \"value\", type: \"any\", optional: false },\n ],\n returnType: \"Token\",\n },\n keys: {\n function: function (this: TokenSymbol) {\n return this.keys();\n },\n args: [],\n returnType: \"List\",\n },\n values: {\n function: function (this: TokenSymbol) {\n return this.values();\n },\n args: [],\n returnType: \"List\",\n },\n length: {\n function: function (this: TokenSymbol) {\n return this.length();\n },\n args: [],\n returnType: \"Number\",\n },\n // List methods (when value is Array)\n append: {\n function: function (this: TokenSymbol, item: ISymbolType) {\n return this.append(item);\n },\n args: [{ name: \"item\", type: \"any\" }],\n returnType: \"Token\",\n },\n extend: {\n function: function (this: TokenSymbol, ...items: ISymbolType[]) {\n return this.extend(...items);\n },\n args: [],\n returnType: \"Token\",\n },\n insert: {\n function: function (this: TokenSymbol, index: NumberSymbol, item: ISymbolType) {\n return this.insert(index, item);\n },\n args: [\n { name: \"index\", type: \"Number\" },\n { name: \"item\", type: \"any\" },\n ],\n returnType: \"Token\",\n },\n delete: {\n function: function (this: TokenSymbol, index: NumberSymbol) {\n return this.delete(index);\n },\n args: [{ name: \"index\", type: \"Number\" }],\n returnType: \"Token\",\n },\n index: {\n function: function (this: TokenSymbol, item: ISymbolType) {\n return this.index(item);\n },\n args: [{ name: \"item\", type: \"any\" }],\n returnType: \"Number\",\n },\n update: {\n function: function (this: TokenSymbol, index: NumberSymbol, item: ISymbolType) {\n return this.update(index, item);\n },\n args: [\n { name: \"index\", type: \"Number\" },\n { name: \"item\", type: \"any\" },\n ],\n returnType: \"Token\",\n },\n join: {\n function: function (this: TokenSymbol, separator?: StringSymbol) {\n return this.join(separator);\n },\n args: [{ name: \"separator\", type: \"String\", optional: true }],\n returnType: \"String\",\n },\n };\n\n public subType: string;\n public value: TokenValue;\n /**\n * Optional metadata attached to this token.\n * This is a reference that is preserved (not cloned) during deepCopy/cloneIfMutable operations.\n * It is not accessible to the tokenscript language and is intended for external use\n * (e.g., storing token IDs for tracing).\n */\n public metadata?: SymbolMetadata;\n\n constructor(\n subType: string,\n value: TokenValue | Record<string, ISymbolType> | TokenSymbol | null,\n config?: Config,\n metadata?: SymbolMetadata,\n ) {\n let safeValue: TokenValue;\n if (value instanceof TokenSymbol) {\n safeValue = value.value;\n } else if (isMap(value)) {\n safeValue = value;\n } else if (isObject(value)) {\n safeValue = new Map(Object.entries(value));\n } else if (isArray(value)) {\n safeValue = value;\n } else if (isNull(value)) {\n safeValue = new Map();\n } else {\n throw new InterpreterError(SymbolsErrorCode.VALUE_MUST_BE_TYPE, {\n data: { expectedType: \"Record or List\", actualType: typeof value },\n });\n }\n\n super(safeValue, config);\n this.value = safeValue;\n this.subType = subType;\n this.metadata = metadata;\n }\n\n validValue(val: any): boolean {\n return isMap(val) || isArray(val) || isNull(val);\n }\n\n toString(): string {\n if (isMap(this.value)) {\n return DictionaryImpl.toString(this.value);\n }\n return ListImpl.toString(this.value);\n }\n\n get(keyOrIndex: StringSymbol | NumberSymbol | string | number): ISymbolType {\n if (isArray(this.value)) {\n const indexSymbol =\n typeof keyOrIndex === \"number\" ? new NumberSymbol(keyOrIndex, this.config) : keyOrIndex;\n if (!(indexSymbol instanceof NumberSymbol)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"List get\", valueType: \"non-Number index\" },\n });\n }\n return ListImpl.get(this.value, indexSymbol);\n }\n const keySymbol =\n typeof keyOrIndex === \"string\" ? new StringSymbol(keyOrIndex, this.config) : keyOrIndex;\n if (!(keySymbol instanceof StringSymbol)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"Dictionary get\", valueType: \"non-String key\" },\n });\n }\n return DictionaryImpl.get(this.value, keySymbol, this.config);\n }\n\n set(key: StringSymbol, value: ISymbolType): TokenSymbol {\n if (isArray(this.value)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"set key\", valueType: \"List\" },\n });\n }\n DictionaryImpl.set(this.value, key, value);\n return this;\n }\n\n keys(): ListSymbol {\n if (isArray(this.value)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"get keys\", valueType: \"List\" },\n });\n }\n return DictionaryImpl.keys(this.value, this.config);\n }\n\n values(): ListSymbol {\n if (isMap(this.value)) {\n return DictionaryImpl.values(this.value, this.config);\n }\n return new ListSymbol(this.value, false, this.config);\n }\n\n length(): NumberSymbol {\n if (isMap(this.value)) {\n return DictionaryImpl.length(this.value, this.config);\n }\n return ListImpl.length(this.value, this.config);\n }\n\n // List-specific methods\n append(item: ISymbolType): TokenSymbol {\n if (isMap(this.value)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"append\", valueType: \"Dictionary\" },\n });\n }\n ListImpl.append(this.value, item);\n return this;\n }\n\n extend(...items: ISymbolType[]): TokenSymbol {\n if (isMap(this.value)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"extend\", valueType: \"Dictionary\" },\n });\n }\n ListImpl.extend(this.value, ...items);\n return this;\n }\n\n insert(indexSymbol: NumberSymbol, item: ISymbolType): TokenSymbol {\n if (isMap(this.value)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"insert\", valueType: \"Dictionary\" },\n });\n }\n ListImpl.insert(this.value, indexSymbol, item);\n return this;\n }\n\n delete(indexSymbol: NumberSymbol): TokenSymbol {\n if (isMap(this.value)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"delete\", valueType: \"Dictionary\" },\n });\n }\n ListImpl.deleteAt(this.value, indexSymbol);\n return this;\n }\n\n index(item: ISymbolType): NumberSymbol {\n if (isMap(this.value)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"get index\", valueType: \"Dictionary\" },\n });\n }\n return ListImpl.indexOf(this.value, item, this.config);\n }\n\n update(indexSymbol: NumberSymbol, item: ISymbolType): TokenSymbol {\n if (isMap(this.value)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"update\", valueType: \"Dictionary\" },\n });\n }\n ListImpl.update(this.value, indexSymbol, item);\n return this;\n }\n\n join(separator?: StringSymbol): StringSymbol {\n if (isMap(this.value)) {\n throw new InterpreterError(SymbolsErrorCode.CANNOT_OPERATION_ON_TOKEN_TYPE, {\n data: { operation: \"join\", valueType: \"Dictionary\" },\n });\n }\n return ListImpl.join(this.value, separator, this.config);\n }\n\n deepCopy(): TokenSymbol {\n if (isMap(this.value)) {\n return new TokenSymbol(\n this.subType,\n DictionaryImpl.deepCopy(this.value),\n this.config,\n this.metadata,\n );\n }\n return new TokenSymbol(this.subType, ListImpl.deepCopy(this.value), this.config, this.metadata);\n }\n\n cloneIfMutable(): TokenSymbol {\n return this.deepCopy();\n }\n\n static empty(): TokenSymbol {\n return new TokenSymbol(\"unknown\", null);\n }\n\n hasAttribute(attributeName: string): boolean {\n if (attributeName === \"subType\" || attributeName === \"type\") {\n return true;\n }\n if (isMap(this.value)) {\n return DictionaryImpl.hasAttribute(this.value, attributeName);\n }\n return false;\n }\n\n getAttribute(attributeName: string): ISymbolType | null {\n if (attributeName === \"subType\") {\n return new StringSymbol(this.subType, this.config);\n }\n if (attributeName === \"type\") {\n return new StringSymbol(this.type, this.config);\n }\n if (isMap(this.value)) {\n return DictionaryImpl.getAttribute(this.value, attributeName);\n }\n return null;\n }\n\n getTypeName(): string {\n return typeName(this.type, this.subType);\n }\n\n toJs(options?: ToJsOptions): JsValue[] | Record<string, JsValue> {\n const { recursive = true } = options ?? {};\n if (isMap(this.value)) {\n const obj: Record<string, JsValue> = {};\n const mapValue = this.value as Map<string, ISymbolType>;\n for (const [key, child] of mapValue.entries()) {\n obj[key] = recursive ? child.toJs(options) : (child as any);\n }\n return obj;\n }\n if (isArray(this.value)) {\n const arrayValue = this.value as ISymbolType[];\n return recursive ? arrayValue.map((item) => item.toJs(options)) : (arrayValue as any);\n }\n return {};\n }\n}\n\nexport type dynamicColorValue = Record<string, ISymbolType>;\ntype ColorValue = string | dynamicColorValue | null;\n\nexport class ColorSymbol extends BaseSymbolType {\n type = \"Color\";\n static readonly type = \"Color\";\n static _SUPPORTED_METHODS = {\n to_string: {\n name: \"to_string\",\n function: function (this: ColorSymbol) {\n return this.toStringSymbol();\n },\n args: [],\n returnType: \"String\",\n },\n };\n\n public subType: string | null = null;\n public value: ColorValue;\n public alpha: number | null = null;\n\n static empty(): ColorSymbol {\n return new ColorSymbol(null);\n }\n\n constructor(value: ColorValue, subType?: string, alpha?: number | null, config?: Config) {\n const isHex = (isUndefined(subType) || subType?.toLowerCase() === \"hex\") && isString(value);\n const isDynamic = isString(subType) && isObject(value);\n const isValid = isNull(value) || isHex || isDynamic;\n\n if (!isValid) {\n throw new InterpreterError(SymbolsErrorCode.INVALID_COLOR_VALUE, {\n data: { value: String(value), type: typeof value },\n });\n }\n\n if (isHex) {\n if (!isValidHex(value)) {\n throw new InterpreterError(SymbolsErrorCode.INVALID_HEX_COLOR, {\n data: { value: String(value) },\n });\n }\n }\n\n super(value, config);\n\n this.value = value;\n this.subType = isHex ? \"Hex\" : subType || null;\n\n const alphaValue = alpha ?? null;\n ensureValidAlpha(alphaValue);\n this.alpha = alphaValue;\n }\n\n toStringSymbol(): StringSymbol {\n if (this.config?.colorManager) {\n const formatted = this.config.colorManager.formatColorMethod(this);\n return new StringSymbol(formatted, this.config);\n }\n if (isObject(this.value)) {\n return new StringSymbol(formatObjectEntries(this.value), this.config);\n }\n if (isString(this.value)) {\n // For hex colors with alpha, output hex8 format\n if (this.isHex() && this.alpha !== null) {\n return new StringSymbol(formatHex8(this.value, this.alpha), this.config);\n }\n return new StringSymbol(this.value, this.config);\n }\n return new StringSymbol(\"\", this.config);\n }\n\n toString(): string {\n return this.toStringSymbol().toString();\n }\n\n to(targetType: string): ColorSymbol {\n if (!this.config?.colorManager) {\n throw new InterpreterError(SymbolsErrorCode.COLOR_MANAGER_NOT_AVAILABLE);\n }\n return this.config.colorManager.convertToByType(this, targetType);\n }\n\n typeEquals(other: ISymbolType): boolean {\n if (!typeEquals(this.type, other.type)) return false;\n const otherColor = other as ColorSymbol;\n // Edge-Case Color without type is equal to Hex only\n if ((!this.subType && otherColor.isHex()) || (this.isHex() && !otherColor.subType)) return true;\n return typeEquals(this.subType, (other as ColorSymbol).subType);\n }\n\n isHex(): boolean {\n return typeEquals(this.subType, \"hex\");\n }\n\n validValue(val: any): boolean {\n return val instanceof ColorSymbol || isNull(val) || isObject(val) || isValidHex(val);\n }\n\n equals(other: ISymbolType): boolean {\n if (!this.typeEquals(other)) return false;\n\n const otherColor = other as ColorSymbol;\n\n if (this.alpha !== otherColor.alpha) return false;\n\n // Compare non-hex\n if (isObject(this.value) && isObject(otherColor.value)) {\n const thisKeys = Object.keys(this.value);\n const otherKeys = Object.keys(otherColor.value);\n\n if (thisKeys.length !== otherKeys.length) return false;\n\n for (const key of thisKeys) {\n if (!this.value[key].equals(otherColor.value[key])) return false;\n }\n return true;\n }\n\n // Compare hex value directly\n return this.value === otherColor.value;\n }\n\n deepCopy(): ColorSymbol {\n if (isObject(this.value)) {\n // For dynamic colors with object values, deep copy the object\n const copiedValue: dynamicColorValue = {};\n for (const [key, val] of Object.entries(this.value)) {\n copiedValue[key] = val.deepCopy();\n }\n return new ColorSymbol(copiedValue, this.subType || undefined, this.alpha, this.config);\n }\n // For hex colors (string values), no deep copy needed\n return new ColorSymbol(this.value, this.subType || undefined, this.alpha, this.config);\n }\n\n cloneIfMutable(): ColorSymbol {\n if (isObject(this.value)) {\n // Dynamic colors with object values are mutable, need deep copy\n return this.deepCopy();\n }\n // Hex colors (string values) are immutable, return this\n return this;\n }\n\n hasAttribute(attributeName: string): boolean {\n if (attributeName === \"to\" || attributeName === \"alpha\") {\n return true;\n }\n\n // For dynamic colors (object values), check if the attribute exists\n if (isObject(this.value)) {\n return attributeName in this.value;\n }\n\n // For hex colors and null values, no attributes are supported\n return false;\n }\n\n getAttribute(attributeName: string): ISymbolType | null {\n if (attributeName === \"to\") {\n return this;\n }\n\n if (attributeName === \"alpha\") {\n return this.alpha !== null\n ? new NumberSymbol(this.alpha, this.config)\n : new NullSymbol(this.config);\n }\n\n if (isObject(this.value)) {\n const attributeValue = this.value[attributeName];\n if (attributeValue !== undefined) {\n return attributeValue;\n }\n }\n\n throw new InterpreterError(SymbolsErrorCode.ATTRIBUTE_NOT_FOUND, {\n data: { attributeName, type: \"Color\" },\n });\n }\n\n hasMethod(methodName: string, args: ISymbolType[]): boolean {\n // First check if it's a built-in method\n if (super.hasMethod?.(methodName, args)) {\n return true;\n }\n\n // Check if it's a color conversion method\n if (this.config?.colorManager.hasInitializer(methodName)) {\n return true;\n }\n\n return false;\n }\n\n callMethod(methodName: string, args: ISymbolType[]): ISymbolType | null | undefined {\n // First check if it's a built-in method\n const methodDefinition = (this.constructor as any)._SUPPORTED_METHODS?.[\n methodName.toLowerCase()\n ];\n if (methodDefinition && super.hasMethod?.(methodName, args)) {\n return super.callMethod?.(methodName, args);\n }\n\n // Handle color conversion methods\n if (this.config?.colorManager.hasInitializer(methodName)) {\n return this.config.colorManager.convertToByType(this, methodName);\n }\n\n throw new InterpreterError(SymbolsErrorCode.METHOD_NOT_FOUND, {\n data: { methodName, type: this.type },\n });\n }\n\n getTypeName(): string {\n return typeName(this.type, nullToUndefined(this.subType));\n }\n\n toJs(options?: ToJsOptions): string | Record<string, JsValue> {\n const { stringify = false, recursive = true } = options ?? {};\n\n if (stringify) {\n return this.toString();\n }\n\n // For hex colors (string value)\n if (isString(this.value)) {\n return {\n type: this.subType || \"hex\",\n value: this.value,\n alpha: this.alpha,\n };\n }\n\n // For dynamic colors (object value)\n if (isObject(this.value)) {\n const result: Record<string, JsValue> = {\n type: this.subType || \"unknown\",\n alpha: this.alpha,\n };\n\n for (const [key, val] of Object.entries(this.value)) {\n result[key] = recursive ? val.toJs(options) : (val as any);\n }\n\n return result;\n }\n\n // For null values\n return {\n type: this.subType || \"unknown\",\n value: null,\n alpha: this.alpha,\n };\n }\n}\n\n// Symbol Normalization Utilities ----------------------------------------------\n\nexport const jsValueToSymbolType = (value: any, config?: Config): ISymbolType => {\n if (value instanceof BaseSymbolType) {\n value.config = config;\n return value;\n }\n if (isNone(value)) return new NullSymbol(config);\n if (isNumber(value)) return new NumberSymbol(value, config);\n if (isString(value)) {\n if (isValidHex(value)) return new ColorSymbol(value, \"Hex\", null, config);\n return new StringSymbol(value, config);\n }\n if (isBoolean(value)) return new BooleanSymbol(value, config);\n if (isArray(value))\n return new ListSymbol(\n value.map((item) => jsValueToSymbolType(item, config)),\n false,\n config,\n );\n\n // Convert plain object to dictionary\n if (isObject(value)) {\n const dict = new Map<string, ISymbolType>();\n for (const key in value) {\n dict.set(key, jsValueToSymbolType(value[key], config));\n }\n return new DictionarySymbol(dict, config);\n }\n\n throw new InterpreterError(SymbolsErrorCode.VALUE_MUST_BE_TYPE, {\n data: { expectedType: \"valid TokenScript type\", actualType: typeof value },\n });\n};\n\nexport const nullableSymbolTypes = {\n [NumberSymbol.type.toLowerCase()]: NumberSymbol,\n [StringSymbol.type.toLowerCase()]: StringSymbol,\n [BooleanSymbol.type.toLowerCase()]: BooleanSymbol,\n [NumberWithUnitSymbol.type.toLowerCase()]: NumberWithUnitSymbol,\n [ColorSymbol.type.toLowerCase()]: ColorSymbol,\n [NullSymbol.type.toLowerCase()]: NullSymbol,\n} as const;\n\nexport const basicSymbolTypes = {\n ...nullableSymbolTypes,\n [ListSymbol.type.toLowerCase()]: ListSymbol,\n [DictionarySymbol.type.toLowerCase()]: DictionarySymbol,\n [TokenSymbol.type.toLowerCase()]: TokenSymbol,\n} as const;\n\nexport type BasicSymbolTypeConstructor = (typeof basicSymbolTypes)[keyof typeof basicSymbolTypes];\n\nexport const isNullableSymbol = (symbol: ISymbolType): boolean =>\n symbol.type.toLowerCase() in nullableSymbolTypes;\n\nexport const hasNullValue = (symbol: ISymbolType): boolean =>\n isNullableSymbol(symbol) && isNull(symbol.value);\n\n// Symbol to JS Value Conversion -----------------------------------------------\n\n/**\n * Represents a JavaScript value that can be produced from a TokenScript symbol.\n * This includes primitives, arrays, and plain objects (recursively).\n */\nexport type JsValue = string | number | boolean | null | JsValue[] | { [key: string]: JsValue };\n\n/**\n * Serializes an interpreter result (symbol or primitive) to a plain JavaScript value.\n */\nexport function serializeInterpreterResult(\n value: ISymbolType | string | null,\n options?: ToJsOptions,\n): unknown {\n if (isString(value)) return value;\n if (isNull(value)) return null;\n if (isTokenscriptSymbol(value)) return value.toJs(options);\n return value;\n}\n\n/**\n * Converts an interpreter result to a string representation.\n */\nexport function stringifyInterpreterResult(value: ISymbolType | string | null): string {\n if (isString(value)) return value;\n if (isTokenscriptSymbol(value)) return value.toString();\n return String(value);\n}\n","import type { ASTNode, Operations, Token, TokenType } from \"@src/types\";\n\n/**\n * Partial reference node - represents an incomplete reference like {color without closing }\n */\nexport class PartialReferenceNode implements ASTNode {\n nodeType = \"PartialReferenceNode\";\n\n constructor(\n /** The partial reference name typed so far (e.g., \"color\" or \"foo.bar\") */\n public partialValue: string,\n public token: Token,\n ) {}\n}\n\n/**\n * Partial string node - represents an incomplete string like \"hello without closing quote\n */\nexport class PartialStringNode implements ASTNode {\n nodeType = \"PartialStringNode\";\n\n constructor(\n /** The partial string value typed so far */\n public partialValue: string,\n /** The quote type used (' or \") */\n public quoteType: string,\n public token: Token,\n ) {}\n}\n\n/**\n * Partial function call node - represents an incomplete function call like func(1, 2 without closing )\n */\nexport class PartialFunctionCallNode implements ASTNode {\n nodeType = \"PartialFunctionCallNode\";\n\n constructor(\n /** The function name */\n public name: string,\n /** Arguments parsed so far */\n public args: ASTNode[],\n public token: Token,\n ) {}\n}\n\n/**\n * Partial binary operation node - represents an incomplete binary operation like 1 + without right operand\n */\nexport class PartialBinOpNode implements ASTNode {\n nodeType = \"PartialBinOpNode\";\n public token: Token;\n\n constructor(\n /** The left operand */\n public left: ASTNode,\n /** The operator token */\n public opToken: Token,\n ) {\n this.token = opToken;\n }\n\n get op(): Operations | TokenType {\n return this.opToken.value as Operations | TokenType;\n }\n}\n\n/**\n * Partial unary operation node - represents an incomplete unary operation like - without operand\n */\nexport class PartialUnaryOpNode implements ASTNode {\n nodeType = \"PartialUnaryOpNode\";\n public token: Token;\n\n constructor(\n /** The operator token */\n public opToken: Token,\n ) {\n this.token = opToken;\n }\n\n get op(): Operations {\n return this.opToken.value as Operations;\n }\n}\n\n/**\n * Partial parenthesized expression - represents an incomplete parenthesized expression like (1 + 2 without closing )\n */\nexport class PartialParenNode implements ASTNode {\n nodeType = \"PartialParenNode\";\n\n constructor(\n /** The expression inside the parentheses (may itself be partial) */\n public expr: ASTNode,\n public token: Token,\n ) {}\n}\n","import type { ASTNode, Operations, SupportedFormats, Token, TokenType } from \"@src/types\";\nimport {\n PartialBinOpNode,\n PartialFunctionCallNode,\n PartialParenNode,\n PartialUnaryOpNode,\n} from \"./tolerant/partial-nodes\";\n\n// Re-export ASTNode for external consumers\nexport type { ASTNode } from \"@src/types\";\n\n// Nodes -----------------------------------------------------------------------\n\nexport class BinOpNode implements ASTNode {\n nodeType = \"BinOpNode\";\n constructor(\n public left: ASTNode,\n public opToken: Token,\n public right: ASTNode,\n public token?: Token,\n ) {\n this.token = opToken;\n }\n get op(): Operations | TokenType {\n return this.opToken.value as Operations | TokenType;\n }\n}\n\nexport class NumNode implements ASTNode {\n nodeType = \"NumNode\";\n public value: number;\n constructor(public token: Token) {\n if (this.token.value.includes(\".\")) {\n this.value = Number.parseFloat(this.token.value);\n } else {\n this.value = Number.parseInt(this.token.value, 10);\n }\n }\n}\n\nexport class StringNode implements ASTNode {\n nodeType = \"StringNode\";\n public value: string;\n constructor(public token: Token) {\n this.value = token.value;\n }\n}\n\nexport class TemplateStringNode implements ASTNode {\n nodeType = \"TemplateStringNode\";\n constructor(\n public parts: ASTNode[],\n public token?: Token,\n ) {}\n}\n\nexport class UnaryOpNode implements ASTNode {\n nodeType = \"UnaryOpNode\";\n constructor(\n public opToken: Token,\n public expr: ASTNode,\n public token?: Token,\n ) {\n this.token = opToken;\n }\n get op(): Operations {\n return this.opToken.value as Operations;\n }\n}\n\nexport class ListNode implements ASTNode {\n nodeType = \"ListNode\";\n constructor(\n public elements: ASTNode[],\n public token?: Token,\n ) {}\n}\n\nexport class ImplicitListNode extends ListNode {\n override nodeType = \"ImplicitListNode\";\n public isImplicit = true;\n constructor(\n public elements: ASTNode[],\n public token?: Token,\n ) {\n super(elements, token);\n }\n}\n\nexport class FunctionCallNode implements ASTNode {\n nodeType = \"FunctionCallNode\";\n public name: string;\n constructor(\n nameTokenValue: string,\n public args: ASTNode[],\n public token?: Token,\n ) {\n this.name = nameTokenValue;\n }\n}\n\nexport class NoOpNode implements ASTNode {\n nodeType = \"NoOpNode\";\n constructor(public token?: Token) {}\n}\n\nexport class ReferenceNode implements ASTNode {\n nodeType = \"ReferenceNode\";\n public value: string;\n constructor(public token: Token) {\n this.value = token.value;\n }\n}\n\nexport class IdentifierNode implements ASTNode {\n nodeType = \"IdentifierNode\";\n public name: string;\n constructor(public token: Token) {\n this.name = token.value;\n }\n}\n\nexport class HexColorNode implements ASTNode {\n nodeType = \"HexColorNode\";\n public value: string;\n constructor(public token: Token) {\n this.value = token.value;\n }\n}\n\nexport class BooleanNode implements ASTNode {\n nodeType = \"BooleanNode\";\n constructor(\n public value: boolean,\n public token?: Token,\n ) {}\n}\n\nexport class NullNode implements ASTNode {\n nodeType = \"NullNode\";\n constructor(public token?: Token) {}\n}\n\nexport class ElementWithUnitNode implements ASTNode {\n nodeType = \"ElementWithUnitNode\";\n public unit: SupportedFormats;\n constructor(\n public astNode: ASTNode,\n unitTokenValue: SupportedFormats,\n public token?: Token,\n ) {\n this.unit = unitTokenValue;\n }\n}\n\nexport class AssignNode implements ASTNode {\n nodeType = \"AssignNode\";\n constructor(\n public varName: IdentifierNode,\n public typeDecl: TypeDeclNode, // Represents the full type string like 'Color.RGB' or 'String'\n public assignmentExpr: ASTNode | null, // Null if no assignment\n public token?: Token,\n ) {}\n}\n\nexport class TypeDeclNode implements ASTNode {\n nodeType = \"TypeDeclNode\";\n // baseType: e.g. \"Color\", \"List\"\n // subTypes: e.g. [\"RGB\"] for \"Color.RGB\", or [\"String\"] for \"List.String\" (hypothetical)\n constructor(\n public baseType: IdentifierNode,\n public subTypes: IdentifierNode[],\n public token?: Token,\n ) {}\n\n name(): string {\n let typeStr = this.baseType.name;\n if (this.subTypes.length > 0) {\n typeStr += `.${this.subTypes.map((s) => s.name).join(\".\")}`;\n }\n return typeStr;\n }\n}\n\nexport const attributesToString = (attrs: string[]): string => attrs.join(\".\");\n\nexport const identifiersChainToString = (attrs: IdentifierNode[]): string =>\n attributesToString(attrs.map((x) => x.name));\n\nexport class ReassignNode implements ASTNode {\n nodeType = \"ReassignNode\";\n constructor(\n public identifier: IdentifierNode | IdentifierNode[],\n public value: ASTNode,\n public token?: Token,\n ) {}\n baseIdentifier(): IdentifierNode {\n return Array.isArray(this.identifier) ? this.identifier[0] : this.identifier;\n }\n isAttributeAssignment(): boolean {\n return Array.isArray(this.identifier) && !!this.identifier[1];\n }\n identifierToString(): string {\n const parts = Array.isArray(this.identifier) ? this.identifier : [this.identifier];\n return identifiersChainToString(parts);\n }\n attributesChain(): IdentifierNode[] {\n if (Array.isArray(this.identifier)) {\n return this.identifier.slice(1);\n } else {\n return [];\n }\n }\n attributesStringChain(): string[] {\n return this.attributesChain().map((x) => x.name);\n }\n}\n\nexport class ReturnNode implements ASTNode {\n nodeType = \"ReturnNode\";\n constructor(\n public expr: ASTNode,\n public token?: Token,\n ) {}\n}\n\nexport class WhileNode implements ASTNode {\n nodeType = \"WhileNode\";\n constructor(\n public condition: ASTNode,\n public body: StatementListNode,\n public token?: Token,\n ) {}\n}\n\nexport class ForEachNode implements ASTNode {\n nodeType = \"ForEachNode\";\n constructor(\n public itemVar: string,\n public indexVar: string | null,\n public collection: ASTNode,\n public body: StatementListNode,\n public token?: Token,\n ) {}\n}\n\nexport class IfConditionNode implements ASTNode {\n nodeType = \"IfConditionNode\";\n constructor(\n public condition: ASTNode,\n public body: StatementListNode,\n public token?: Token,\n ) {}\n}\n\nexport class IfNode implements ASTNode {\n nodeType = \"IfNode\";\n constructor(\n public conditions: IfConditionNode[],\n public elseBody: StatementListNode | null,\n public token?: Token,\n ) {}\n}\n\nexport class BlockNode implements ASTNode {\n // Represents the [...] block\n nodeType = \"BlockNode\";\n constructor(\n public statements: StatementListNode,\n public token?: Token,\n ) {}\n}\n\nexport class StatementListNode implements ASTNode {\n nodeType = \"StatementListNode\";\n constructor(\n public statements: ASTNode[],\n public token?: Token,\n ) {}\n}\n\nexport class AttributeAccessNode implements ASTNode {\n nodeType = \"AttributeAccessNode\";\n // 'left' is the object, 'right' is the attribute (IdentifierNode) or method (FunctionCallNode)\n // In tolerant mode, 'right' may also be a PartialFunctionCallNode\n constructor(\n public left: ASTNode,\n public right: IdentifierNode | FunctionCallNode | PartialFunctionCallNode,\n public token?: Token,\n ) {}\n}\n\n// Utilities -------------------------------------------------------------------\n\n/**\n * Walk the AST and call the visit function on each node\n *\n * @param node - The AST node to traverse\n * @param onVisit - Function called for each node during traversal\n *\n * @example\n * // Print all node types\n * walk(ast, (node) => console.log(node.nodeType));\n *\n * @example\n * // Collect all reference nodes\n * const refs: ReferenceNode[] = [];\n * walk(ast, (node) => {\n * if (node instanceof ReferenceNode) refs.push(node);\n * });\n */\nexport function walkAST(node: ASTNode, onVisit: (node: ASTNode) => void): void {\n onVisit(node);\n\n if (node instanceof BinOpNode) {\n walkAST(node.left, onVisit);\n walkAST(node.right, onVisit);\n } else if (node instanceof UnaryOpNode) {\n walkAST(node.expr, onVisit);\n } else if (node instanceof ListNode || node instanceof ImplicitListNode) {\n for (const element of node.elements) {\n walkAST(element, onVisit);\n }\n } else if (node instanceof FunctionCallNode) {\n for (const arg of node.args) {\n walkAST(arg, onVisit);\n }\n } else if (node instanceof ElementWithUnitNode) {\n walkAST(node.astNode, onVisit);\n } else if (node instanceof AssignNode) {\n if (node.assignmentExpr) {\n walkAST(node.assignmentExpr, onVisit);\n }\n } else if (node instanceof ReassignNode) {\n walkAST(node.value, onVisit);\n } else if (node instanceof ReturnNode) {\n walkAST(node.expr, onVisit);\n } else if (node instanceof WhileNode) {\n walkAST(node.condition, onVisit);\n walkAST(node.body, onVisit);\n } else if (node instanceof ForEachNode) {\n walkAST(node.collection, onVisit);\n walkAST(node.body, onVisit);\n } else if (node instanceof IfConditionNode) {\n walkAST(node.condition, onVisit);\n walkAST(node.body, onVisit);\n } else if (node instanceof IfNode) {\n for (const condition of node.conditions) {\n walkAST(condition, onVisit);\n }\n if (node.elseBody) {\n walkAST(node.elseBody, onVisit);\n }\n } else if (node instanceof BlockNode) {\n walkAST(node.statements, onVisit);\n } else if (node instanceof StatementListNode) {\n for (const statement of node.statements) {\n walkAST(statement, onVisit);\n }\n } else if (node instanceof TemplateStringNode) {\n for (const part of node.parts) {\n walkAST(part, onVisit);\n }\n } else if (node instanceof AttributeAccessNode) {\n walkAST(node.left, onVisit);\n if (node.right instanceof FunctionCallNode || node.right instanceof PartialFunctionCallNode) {\n walkAST(node.right, onVisit);\n }\n }\n // Handle partial nodes from tolerant parsing\n else if (node instanceof PartialBinOpNode) {\n walkAST(node.left, onVisit);\n } else if (node instanceof PartialUnaryOpNode) {\n // No child nodes to walk\n } else if (node instanceof PartialFunctionCallNode) {\n for (const arg of node.args) {\n walkAST(arg, onVisit);\n }\n } else if (node instanceof PartialParenNode) {\n walkAST(node.expr, onVisit);\n }\n}\n\n/**\n * Walk the AST and collect all nodes that match the predicate into a flat list\n *\n * @param ast - The AST node to traverse\n * @param predicate - Function to test each node\n * @returns Flat array of matching nodes\n *\n * @example\n * // Find all reference nodes\n * const refs = filterAST(ast, (node) => node instanceof ReferenceNode);\n *\n * @example\n * // Find references to a specific token\n * const refs = filterAST(ast, (node) =>\n * node instanceof ReferenceNode && node.value === \"color.primary\"\n * );\n */\nexport function filterAST<T extends ASTNode>(\n ast: ASTNode,\n predicate: (node: ASTNode) => boolean,\n): T[] {\n const results: T[] = [];\n walkAST(ast, (node) => {\n if (predicate(node)) {\n results.push(node as T);\n }\n });\n return results;\n}\n\n/**\n * Collect all reference nodes from the AST\n *\n * @param ast - The AST node to traverse\n * @param targetName - Optional: only collect references matching this name\n * @returns Array of reference nodes\n *\n * @example\n * // Get all references\n * const refs = collectReferenceNodes(ast);\n *\n * @example\n * // Get references to a specific token\n * const refs = collectReferenceNodes(ast, \"color.primary\");\n */\nexport function collectReferenceNodes(ast: ASTNode, targetName?: string): ReferenceNode[] {\n if (targetName) {\n return filterAST<ReferenceNode>(\n ast,\n (node) => node instanceof ReferenceNode && node.value === targetName,\n );\n }\n return filterAST<ReferenceNode>(ast, (node) => node instanceof ReferenceNode);\n}\n\n/**\n * Get the last statement from an AST node.\n * If the node is a StatementListNode, returns the last statement.\n * Otherwise, returns the node itself.\n */\nexport function getLastStatement(ast: ASTNode): ASTNode {\n if (ast instanceof StatementListNode) {\n const statements = ast.statements;\n if (statements && statements.length > 0) {\n return statements[statements.length - 1];\n }\n }\n return ast;\n}\n\n/**\n * Check if an AST node or its last statement is an AssignNode with an assignment expression.\n * This is useful for determining if a REPL should print the assigned value.\n *\n * Returns the variable name and whether it has an assignment expression:\n * - `variable foo: String;` -> { varName: \"foo\", hasAssignment: false }\n * - `variable foo: String = \"bar\";` -> { varName: \"foo\", hasAssignment: true }\n * - Other nodes -> null\n */\nexport function getAssignmentInfo(ast: ASTNode): {\n varName: string;\n hasAssignment: boolean;\n} | null {\n const lastStatement = getLastStatement(ast);\n\n if (lastStatement instanceof AssignNode) {\n return {\n varName: lastStatement.varName.name,\n hasAssignment: lastStatement.assignmentExpr !== null,\n };\n }\n\n return null;\n}\n\n/**\n * Check if an AST node or its last statement is a ReassignNode.\n * This is useful for determining if a REPL should print the reassigned value.\n *\n * Returns the variable name:\n * - `a = 1 + 1` -> { varName: \"a\" }\n * - Other nodes -> null\n */\nexport function getReassignmentInfo(ast: ASTNode): { varName: string } | null {\n const lastStatement = getLastStatement(ast);\n\n if (lastStatement instanceof ReassignNode) {\n return {\n varName: lastStatement.baseIdentifier().name,\n };\n }\n\n return null;\n}\n","import { Operations, ReservedKeyword, SupportedFormats, type Token, TokenType } from \"@src/types\";\nimport { LexerError, LexerErrorCode } from \"./errors\";\nimport { CodePoint, isAlpha, isAlphaNumeric, isNumber, isSpace } from \"./utils/string\";\n\nconst SUPPORTED_FORMAT_STRINGS: Record<string, SupportedFormats> = {};\nfor (const val of Object.values(SupportedFormats) as string[]) {\n SUPPORTED_FORMAT_STRINGS[val.toLowerCase()] = val as SupportedFormats;\n}\n\nconst RESERVED_KEYWORD_STRINGS: Record<string, ReservedKeyword> = {};\nfor (const val of Object.values(ReservedKeyword) as string[]) {\n RESERVED_KEYWORD_STRINGS[val.toLowerCase()] = val as ReservedKeyword;\n}\n\n/**\n * Options for the Lexer\n */\nexport interface LexerOptions {\n /**\n * If true, the lexer will not throw errors on incomplete input.\n * Instead, it will return partial tokens where appropriate.\n */\n tolerant?: boolean;\n}\n\nexport class Lexer {\n private text: string;\n private currentChar: string | null;\n private pos = 0;\n private line = 1;\n private column = 1;\n /**\n * Track the last NUMBER, RPAREN, or REFERENCE token for FORMAT adjacency detection.\n * FORMAT tokens (units like 'px', 's', 'ms') are only valid when immediately adjacent\n * to these tokens (no whitespace). This prevents conflicts where unit keywords\n * could be confused with identifiers (e.g., 's' for saturation vs seconds).\n *\n * @see docs/tokenscript/edge-cases/format-unit-parsing.md\n */\n private _lastUnitableToken: Token | null = null;\n private tolerant: boolean;\n private collectedTokens: Token[] = [];\n\n constructor(text: string, options?: LexerOptions) {\n this.text = text;\n this.currentChar = this.pos < this.text.length ? this.text[this.pos] : null;\n this.tolerant = options?.tolerant ?? false;\n }\n\n /**\n * Check if a FORMAT token (unit suffix) is valid at the given position.\n * FORMAT is only valid when immediately adjacent to a NUMBER or RPAREN.\n * e.g., '3s' (number with unit), '(3px + 4px)rem' (unit conversion)\n */\n private isValidFormatPosition(startPos: number): boolean {\n return this._lastUnitableToken !== null && this._lastUnitableToken.endPos === startPos;\n }\n\n private error(code: LexerErrorCode, data?: Record<string, unknown>): never {\n throw new LexerError(code, {\n line: this.line,\n data,\n });\n }\n\n private advance(): void {\n if (this.currentChar === \"\\n\") {\n this.line++;\n this.column = 0;\n }\n this.pos++;\n this.column++;\n this.currentChar = this.pos < this.text.length ? this.text[this.pos] : null;\n }\n\n private eat(char: string): void {\n if (this.currentChar === char) {\n this.advance();\n } else {\n this.error(LexerErrorCode.EXPECTED_CHARACTER, {\n expected: char,\n got: this.currentChar,\n });\n }\n }\n\n private peek(n = 1): string | null {\n return this.text[this.pos + n] ?? null;\n }\n\n private skipWhitespace(): void {\n while (isSpace(this.currentChar)) {\n this.advance();\n }\n }\n\n private skipLine(): void {\n while (this.currentChar !== null && this.currentChar !== \"\\n\") {\n this.advance();\n }\n if (this.currentChar === \"\\n\") {\n this.eat(\"\\n\");\n }\n }\n\n private isComment(): boolean {\n return this.currentChar === \"/\" && this.peek() === \"/\";\n }\n\n private number(): Token {\n const startPos = this.pos;\n let result = \"\";\n let hasDecimalPoint = false;\n\n // Prepend 0 to digits like \".5\"\n if (this.currentChar === \".\") {\n result += \"0\";\n }\n\n while (isNumber(this.currentChar) || this.currentChar === \".\") {\n if (this.currentChar === \".\") {\n // Dot not followed by a digit is a method-call dot (e.g. 1.to_string())\n if (!isNumber(this.peek())) {\n break;\n }\n // Second dot followed by a digit is genuinely malformed (e.g. 3.3.3)\n if (hasDecimalPoint) {\n this.error(LexerErrorCode.MULTIPLE_DECIMAL_POINTS, {\n value: result + this.currentChar,\n });\n }\n hasDecimalPoint = true;\n }\n result += this.currentChar;\n this.advance();\n }\n\n const token: Token = {\n type: TokenType.NUMBER,\n value: result,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n // Track for FORMAT adjacency detection (e.g., '3s', '3.5ms')\n this._lastUnitableToken = token;\n return token;\n }\n\n // Python like isdigit, that allows numbers starting with '.'\n private isDigit(): boolean {\n if (this.currentChar === null) return false;\n return isNumber(this.currentChar) || (this.currentChar === \".\" && isNumber(this.peek()));\n }\n\n private isValidIdentifierStart(char: string | null): boolean {\n if (char === null) return false;\n if (isAlpha(char)) return true;\n\n const cp = char.codePointAt(0) ?? 0;\n\n // Support emoji range\n if (cp <= 127) return false;\n\n // Disallowed Characters\n if (cp === CodePoint.FORWARD_TICK) return false;\n if (cp === CodePoint.BACKWARD_TICK) return false;\n\n return true;\n }\n\n private isValidStringElement(char: string | null): boolean {\n if (char === null) return false;\n const cp = char.codePointAt(0) ?? 0;\n return (\n isAlphaNumeric(char) || cp === CodePoint.HYPHEN || cp === CodePoint.UNDERSCORE || cp > 127 // Support emoji range\n );\n }\n\n private stringElement(): Token {\n const startPos = this.pos;\n let result = \"\";\n\n while (this.isValidStringElement(this.currentChar)) {\n result += this.currentChar;\n this.advance();\n }\n\n const normalizedResult = result.toLowerCase();\n\n const keyword = RESERVED_KEYWORD_STRINGS[normalizedResult];\n if (keyword) {\n return {\n type: TokenType.RESERVED_KEYWORD,\n value: keyword,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n }\n\n // FORMAT tokens (units like 'px', 's', 'ms') are only valid immediately after NUMBER or RPAREN\n // e.g., '3s' (number with unit), '(3px + 4px)rem' (unit conversion)\n // In other contexts (with whitespace or other tokens between), treat as STRING (identifier)\n const format = SUPPORTED_FORMAT_STRINGS[normalizedResult];\n if (format && this.isValidFormatPosition(startPos)) {\n return {\n type: TokenType.FORMAT,\n value: format,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n }\n\n return {\n type: TokenType.STRING,\n value: result,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n }\n\n private reference(): Token {\n this.eat(\"{\");\n\n const refStartPos = this.pos;\n let result = \"\";\n while (this.currentChar !== null && this.currentChar !== \"}\") {\n if (this.currentChar === \"{\") {\n if (this.tolerant) {\n // In tolerant mode, treat nested { as end of partial reference\n break;\n }\n this.error(LexerErrorCode.UNTERMINATED_REFERENCE, {});\n }\n if (isSpace(this.currentChar)) {\n this.advance();\n continue;\n }\n result += this.currentChar;\n this.advance();\n }\n\n if (this.currentChar === null) {\n if (this.tolerant) {\n // In tolerant mode, return a partial reference token\n return {\n type: TokenType.PARTIAL_REFERENCE,\n value: result,\n line: this.line,\n pos: refStartPos,\n endPos: this.pos,\n };\n }\n this.error(LexerErrorCode.UNTERMINATED_REFERENCE, {});\n }\n\n if (result === \"\") {\n if (this.tolerant) {\n // In tolerant mode, return empty partial reference\n return {\n type: TokenType.PARTIAL_REFERENCE,\n value: \"\",\n line: this.line,\n pos: refStartPos,\n endPos: this.pos,\n };\n }\n this.error(LexerErrorCode.EMPTY_VARIABLE_NAME, {});\n }\n\n const refEndPos = this.pos;\n this.eat(\"}\");\n\n const token: Token = {\n type: TokenType.REFERENCE,\n value: result,\n line: this.line,\n pos: refStartPos,\n endPos: refEndPos,\n };\n // Track for FORMAT adjacency - use actual position after closing brace\n this._lastUnitableToken = { ...token, endPos: this.pos };\n return token;\n }\n\n private explicitString(quoteType: string): Token {\n const startPos = this.pos;\n this.eat(quoteType);\n\n let result = \"\";\n while (this.currentChar !== null && this.currentChar !== quoteType) {\n result += this.currentChar;\n this.advance();\n }\n\n if (this.currentChar === null) {\n if (this.tolerant) {\n // In tolerant mode, return a partial string token\n return {\n type: TokenType.PARTIAL_STRING,\n value: result,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n }\n this.error(LexerErrorCode.UNTERMINATED_STRING, { quoteType });\n }\n\n this.eat(quoteType);\n\n return {\n type: TokenType.EXPLICIT_STRING,\n value: result,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n }\n\n /**\n * Read a backtick-delimited template string.\n * Supports escape sequences: \\{ \\$ \\` \\\\\n * The raw content (with escapes preserved) is stored as the token value.\n * The parser handles splitting into segments.\n */\n private templateString(): Token {\n const startPos = this.pos;\n this.eat(\"`\");\n\n let result = \"\";\n while (this.currentChar !== null && this.currentChar !== \"`\") {\n if (this.currentChar === \"\\\\\") {\n const next = this.peek();\n if (next === \"{\" || next === \"$\" || next === \"`\" || next === \"\\\\\") {\n result += \"\\\\\";\n result += next;\n this.advance(); // consume backslash\n this.advance(); // consume escaped char\n continue;\n }\n }\n result += this.currentChar;\n this.advance();\n }\n\n if (this.currentChar === null) {\n if (this.tolerant) {\n return {\n type: TokenType.TEMPLATE_STRING,\n value: result,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n }\n this.error(LexerErrorCode.UNTERMINATED_TEMPLATE_STRING, {});\n }\n\n this.eat(\"`\");\n\n return {\n type: TokenType.TEMPLATE_STRING,\n value: result,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n }\n\n private hexColor(): Token {\n const startPos = this.pos;\n let result = \"\";\n while (isAlpha(this.currentChar) || this.isDigit() || this.currentChar === \"#\") {\n result += this.currentChar;\n this.advance();\n }\n // Support #RGB (4), #RGBA (5), #RRGGBB (7), #RRGGBBAA (9)\n if (result.length !== 4 && result.length !== 5 && result.length !== 7 && result.length !== 9) {\n if (this.tolerant) {\n // In tolerant mode, accept partial hex colors\n return {\n type: TokenType.HEX_COLOR,\n value: result,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n }\n this.error(LexerErrorCode.INVALID_HEX_COLOR_FORMAT, {\n value: result,\n expectedLength: \"#RGB, #RGBA, #RRGGBB, or #RRGGBBAA\",\n });\n }\n return {\n type: TokenType.HEX_COLOR,\n value: result,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n }\n\n private collectToken(token: Token): Token {\n if (this.tolerant) {\n this.collectedTokens.push(token);\n }\n return token;\n }\n\n public nextToken(): Token {\n while (this.currentChar !== null) {\n this.skipWhitespace();\n if (this.currentChar === null) break;\n\n if (this.isComment()) {\n this.skipLine();\n continue;\n }\n\n if (this.isDigit()) {\n return this.collectToken(this.number());\n }\n\n if (this.currentChar === \"'\" || this.currentChar === '\"') {\n return this.collectToken(this.explicitString(this.currentChar));\n }\n\n if (this.currentChar === \"`\") {\n return this.collectToken(this.templateString());\n }\n\n if (this.isValidIdentifierStart(this.currentChar)) {\n return this.collectToken(this.stringElement());\n }\n\n if (this.currentChar === \"{\") {\n return this.collectToken(this.reference());\n }\n if (this.currentChar === \"[\") {\n const startPos = this.pos;\n this.eat(\"[\");\n return this.collectToken({\n type: TokenType.LBLOCK,\n value: \"[\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"]\") {\n const startPos = this.pos;\n this.eat(\"]\");\n return this.collectToken({\n type: TokenType.RBLOCK,\n value: \"]\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"!\" && this.peek() === \"=\") {\n const startPos = this.pos;\n this.eat(\"!\");\n this.eat(\"=\");\n return this.collectToken({\n type: TokenType.IS_NOT_EQ,\n value: \"!=\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"+\") {\n const startPos = this.pos;\n this.eat(\"+\");\n return this.collectToken({\n type: TokenType.OPERATION,\n value: Operations.ADD,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"-\") {\n const startPos = this.pos;\n this.eat(\"-\");\n return this.collectToken({\n type: TokenType.OPERATION,\n value: Operations.SUBTRACT,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"*\") {\n const startPos = this.pos;\n this.eat(\"*\");\n return this.collectToken({\n type: TokenType.OPERATION,\n value: Operations.MULTIPLY,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"/\") {\n const startPos = this.pos;\n this.eat(\"/\");\n return this.collectToken({\n type: TokenType.OPERATION,\n value: Operations.DIVIDE,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"^\") {\n const startPos = this.pos;\n this.eat(\"^\");\n return this.collectToken({\n type: TokenType.OPERATION,\n value: Operations.POWER,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"!\") {\n const startPos = this.pos;\n this.eat(\"!\");\n return this.collectToken({\n type: TokenType.OPERATION,\n value: Operations.LOGIC_NOT,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"(\") {\n const startPos = this.pos;\n this.eat(\"(\");\n return this.collectToken({\n type: TokenType.LPAREN,\n value: \"(\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \")\") {\n const startPos = this.pos;\n this.eat(\")\");\n const token: Token = {\n type: TokenType.RPAREN,\n value: \")\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\n // Track for FORMAT adjacency detection (e.g., '(3px + 4px)rem')\n this._lastUnitableToken = token;\n return this.collectToken(token);\n }\n if (this.currentChar === \",\") {\n const startPos = this.pos;\n this.eat(\",\");\n return this.collectToken({\n type: TokenType.COMMA,\n value: \",\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \".\") {\n if (this.peek() !== null && isNumber(this.peek())) {\n return this.collectToken(this.number());\n }\n const startPos = this.pos;\n this.eat(\".\");\n return this.collectToken({\n type: TokenType.DOT,\n value: \".\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"#\") {\n return this.collectToken(this.hexColor());\n }\n if (this.currentChar === \"%\") {\n const startPos = this.pos;\n this.eat(\"%\");\n return this.collectToken({\n type: TokenType.FORMAT,\n value: SupportedFormats.PERCENTAGE,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"=\") {\n const startPos = this.pos;\n if (this.peek() === \"=\") {\n this.eat(\"=\");\n this.eat(\"=\");\n return this.collectToken({\n type: TokenType.IS_EQ,\n value: \"==\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n this.eat(\"=\");\n return this.collectToken({\n type: TokenType.ASSIGN,\n value: \"=\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \">\") {\n const startPos = this.pos;\n if (this.peek() === \"=\") {\n this.eat(\">\");\n this.eat(\"=\");\n return this.collectToken({\n type: TokenType.IS_GT_EQ,\n value: \">=\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n this.eat(\">\");\n return this.collectToken({\n type: TokenType.IS_GT,\n value: \">\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"<\") {\n const startPos = this.pos;\n if (this.peek() === \"=\") {\n this.eat(\"<\");\n this.eat(\"=\");\n return this.collectToken({\n type: TokenType.IS_LT_EQ,\n value: \"<=\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n this.eat(\"<\");\n return this.collectToken({\n type: TokenType.IS_LT,\n value: \"<\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \";\") {\n const startPos = this.pos;\n this.eat(\";\");\n return this.collectToken({\n type: TokenType.SEMICOLON,\n value: \";\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"&\" && this.peek() === \"&\") {\n const startPos = this.pos;\n this.eat(\"&\");\n this.eat(\"&\");\n return this.collectToken({\n type: TokenType.LOGIC_AND,\n value: Operations.LOGIC_AND,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \"|\" && this.peek() === \"|\") {\n const startPos = this.pos;\n this.eat(\"|\");\n this.eat(\"|\");\n return this.collectToken({\n type: TokenType.LOGIC_OR,\n value: Operations.LOGIC_OR,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n if (this.currentChar === \":\") {\n const startPos = this.pos;\n this.eat(\":\");\n return this.collectToken({\n type: TokenType.COLON,\n value: \":\",\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n });\n }\n\n // If we reach here, the character is not valid\n if (this.tolerant) {\n // In tolerant mode, skip invalid characters\n this.advance();\n // Continue to next iteration to try to find a valid token\n continue;\n }\n const char = this.currentChar === null ? \"end of input\" : this.currentChar;\n this.error(LexerErrorCode.INVALID_CHARACTER, {\n char,\n position: this.pos,\n });\n }\n const eofToken: Token = {\n type: TokenType.EOF,\n value: null,\n line: this.line,\n pos: this.pos,\n endPos: this.pos,\n };\n return this.collectToken(eofToken);\n }\n\n /**\n * Get all tokens that have been collected during tokenization.\n * This is useful for tolerant parsing to get all tokens including partial ones.\n */\n public getAllTokens(): Token[] {\n return [...this.collectedTokens];\n }\n\n /**\n * Tokenize the entire input and return all tokens.\n * This is a convenience method for tolerant parsing.\n */\n public tokenizeAll(): Token[] {\n const tokens: Token[] = [];\n let token = this.nextToken();\n while (token.type !== TokenType.EOF) {\n tokens.push(token);\n token = this.nextToken();\n }\n tokens.push(token); // Include EOF\n return tokens;\n }\n\n peekToken(): Token | null {\n // Save current state\n const savedPos = this.pos;\n const savedChar = this.currentChar;\n const savedLine = this.line;\n const savedColumn = this.column;\n const savedCollectedLength = this.collectedTokens.length;\n\n const nextToken = this.nextToken();\n\n // Restore state (including collectedTokens to avoid duplicates in tolerant mode)\n this.pos = savedPos;\n this.currentChar = savedChar;\n this.line = savedLine;\n this.column = savedColumn;\n this.collectedTokens.length = savedCollectedLength;\n\n return nextToken.type === TokenType.EOF ? null : nextToken;\n }\n\n peekTokens(n: number): Token[] | null {\n // Save current state\n const savedPos = this.pos;\n const savedChar = this.currentChar;\n const savedLine = this.line;\n const savedColumn = this.column;\n const savedCollectedLength = this.collectedTokens.length;\n\n const tokens: Token[] = [];\n for (let i = 0; i < n; i++) {\n const token = this.nextToken();\n if (token.type === TokenType.EOF) {\n break;\n }\n tokens.push(token);\n }\n\n // Restore state (including collectedTokens to avoid duplicates in tolerant mode)\n this.pos = savedPos;\n this.currentChar = savedChar;\n this.line = savedLine;\n this.column = savedColumn;\n this.collectedTokens.length = savedCollectedLength;\n\n return tokens.length > 0 ? tokens : null;\n }\n\n public isEOF(): boolean {\n // Check if we're at the end of input or only have whitespace remaining\n let tempPos = this.pos;\n let tempChar = this.currentChar;\n\n // Skip whitespace\n while (tempChar !== null && /\\s/.test(tempChar)) {\n tempPos++;\n tempChar = tempPos < this.text.length ? this.text[tempPos] : null;\n }\n\n return tempChar === null;\n }\n\n public getSourceInfo(): { text: string; pos: number; line: number; column: number } {\n return {\n text: this.text,\n pos: this.pos,\n line: this.line,\n column: this.column,\n };\n }\n}\n","import { type ASTNode, Operations, ReservedKeyword, type Token, TokenType } from \"@src/types\";\nimport {\n AssignNode,\n AttributeAccessNode,\n BinOpNode,\n BlockNode,\n BooleanNode,\n ElementWithUnitNode,\n ForEachNode,\n FunctionCallNode,\n HexColorNode,\n IdentifierNode,\n IfConditionNode,\n IfNode,\n ImplicitListNode,\n ListNode,\n NullNode,\n NumNode,\n ReassignNode,\n ReferenceNode,\n ReturnNode,\n StatementListNode,\n StringNode,\n TemplateStringNode,\n TypeDeclNode,\n UnaryOpNode,\n WhileNode,\n} from \"./ast\";\nimport { ParserError, ParserErrorCode } from \"./errors\";\nimport { Lexer } from \"./lexer\";\nimport {\n PartialBinOpNode,\n PartialFunctionCallNode,\n PartialParenNode,\n PartialReferenceNode,\n PartialStringNode,\n PartialUnaryOpNode,\n} from \"./tolerant/partial-nodes\";\nimport type { IncompleteInfo } from \"./tolerant/types\";\nimport { IncompleteType } from \"./tolerant/types\";\n\n/**\n * Options for the Parser\n */\nexport interface ParserOptions {\n /**\n * If true, the parser will not throw errors on incomplete input.\n * Instead, it will return partial AST nodes where appropriate.\n */\n tolerant?: boolean;\n}\n\nexport class Parser {\n private lexer: Lexer;\n private currentToken: Token;\n public requiredReferences: Set<string> = new Set();\n private tolerant: boolean;\n private incompleteInfo: IncompleteInfo[] = [];\n\n constructor(lexer: Lexer, options?: ParserOptions) {\n this.lexer = lexer;\n this.currentToken = this.lexer.nextToken();\n this.tolerant = options?.tolerant ?? false;\n }\n\n /**\n * In tolerant mode, check if the current token is EOF after consuming an operator.\n * If so, record the incomplete info and return a PartialBinOpNode.\n * Returns null if not at EOF or not in tolerant mode.\n */\n private tryRecoverMissingOperand(left: ASTNode, opToken: Token): PartialBinOpNode | null {\n if (this.tolerant && this.currentToken.type === TokenType.EOF) {\n this.incompleteInfo.push({\n type: IncompleteType.MISSING_OPERAND,\n startPos: opToken.pos,\n endPos: opToken.endPos,\n });\n return new PartialBinOpNode(left, opToken);\n }\n return null;\n }\n\n /**\n * Check if the parser encountered any incomplete constructs\n */\n public hasIncomplete(): boolean {\n return this.incompleteInfo.length > 0;\n }\n\n /**\n * Get information about incomplete constructs\n */\n public getIncomplete(): IncompleteInfo[] {\n return [...this.incompleteInfo];\n }\n\n private formatError(message: string, token: Token = this.currentToken): string {\n const {\n text: sourceText,\n line: currentLine,\n column: currentColumn,\n } = this.lexer.getSourceInfo();\n const lines = sourceText.split(\"\\n\");\n const tokenLine = token.line;\n const errorLineText = lines[tokenLine - 1] || \"\";\n\n // Find the column position of the token\n let column = 1;\n\n if (currentLine === tokenLine) {\n // If we're on the same line, use the current column position\n column = currentColumn;\n } else {\n // If token is from a previous line, estimate the column by finding the token value\n const tokenValue = String(token.value || \"\");\n const tokenIndex = errorLineText.indexOf(tokenValue);\n if (tokenIndex >= 0) {\n column = tokenIndex + 1;\n }\n }\n\n // Show context lines (2 before, 2 after)\n const contextLines = 2;\n const startLine = Math.max(0, tokenLine - 1 - contextLines);\n const endLine = Math.min(lines.length - 1, tokenLine - 1 + contextLines);\n\n let contextText = \"\";\n for (let i = startLine; i <= endLine; i++) {\n const lineNum = i + 1;\n const lineText = lines[i] || \"\";\n const isErrorLine = lineNum === tokenLine;\n\n // Add line number prefix\n const linePrefix = `${lineNum.toString().padStart(3, \" \")} | `;\n contextText += `${linePrefix + lineText}\\n`;\n\n // Add pointer line for the error line\n if (isErrorLine) {\n const pointer = `${\" \".repeat(linePrefix.length - 1 + Math.max(0, column - 1))}^`;\n contextText += `${pointer}\\n`;\n }\n }\n\n return `${message}\\n\\n${contextText}`;\n }\n\n private peekTokens(n: number): Token[] | null {\n return this.lexer.peekTokens(n);\n }\n\n /**\n * Check if the current token can be treated as an identifier.\n * FORMAT tokens (like 's', 'ms') are valid identifiers in most contexts\n * (variable names, attribute names, type names).\n */\n private isIdentifierToken(token: Token = this.currentToken): boolean {\n return token.type === TokenType.STRING || token.type === TokenType.FORMAT;\n }\n\n /**\n * Eat an identifier token (STRING or FORMAT).\n * FORMAT tokens can be valid identifiers in contexts like variable names,\n * attribute names, and type names.\n */\n private eatIdentifier(): Token {\n if (this.isIdentifierToken()) {\n const token = this.currentToken;\n this.eat(this.currentToken.type);\n return token;\n }\n this.error(ParserErrorCode.UNEXPECTED_TOKEN, { token: String(this.currentToken.value) });\n }\n\n private error(code: ParserErrorCode, data?: Record<string, unknown>): never {\n const message = data?.message ? String(data.message) : undefined;\n const formattedMessage = this.formatError(\n message || (code === ParserErrorCode.INVALID_SYNTAX ? \"Invalid syntax\" : code),\n );\n throw new ParserError(code, {\n token: this.currentToken,\n data: { ...data, message: formattedMessage },\n });\n }\n\n private eat(tokenType: TokenType): Token {\n const token = this.currentToken;\n if (this.currentToken.type === tokenType) {\n this.currentToken = this.lexer.nextToken();\n } else {\n this.error(ParserErrorCode.EXPECTED_TOKEN_TYPE, {\n expected: tokenType,\n got: this.currentToken.type,\n });\n }\n return token;\n }\n\n private typeDeclaration(): TypeDeclNode {\n const baseTypeToken = this.eatIdentifier();\n const baseType = new IdentifierNode(baseTypeToken);\n\n const subTypes: IdentifierNode[] = [];\n while (this.currentToken.type === TokenType.DOT) {\n this.eat(TokenType.DOT);\n const subTypeToken = this.eatIdentifier();\n subTypes.push(new IdentifierNode(subTypeToken));\n }\n return new TypeDeclNode(baseType, subTypes, baseTypeToken);\n }\n\n private statementsList(): ASTNode | StatementListNode {\n const statements: ASTNode[] = [];\n const token = this.currentToken;\n\n while (\n this.currentToken.type !== TokenType.EOF &&\n this.currentToken.type !== TokenType.RBLOCK\n ) {\n statements.push(this.statement());\n if (this.currentToken.type === TokenType.SEMICOLON) {\n this.eat(TokenType.SEMICOLON);\n } else {\n if (\n (this.currentToken.type as TokenType) === TokenType.EOF ||\n (this.currentToken.type as TokenType) === TokenType.RBLOCK\n ) {\n break;\n }\n }\n }\n\n if (statements.length === 1) {\n return statements[0];\n }\n\n return new StatementListNode(statements, token);\n }\n\n private statement(): ASTNode {\n if (this.currentToken.type === TokenType.RESERVED_KEYWORD) {\n switch (this.currentToken.value) {\n case ReservedKeyword.RETURN:\n return this.returnStatement();\n case ReservedKeyword.WHILE:\n return this.whileStatement();\n case ReservedKeyword.FOR:\n return this.forStatement();\n case ReservedKeyword.IF:\n return this.ifStatement();\n case ReservedKeyword.VARIABLE:\n return this.assignVariable();\n }\n } else if (this.isIdentifierToken()) {\n // Look ahead to check the token sequence for property reassignment (e.g., output.s = ...)\n const nextTokens = this.peekTokens(4); // Get next 4 tokens\n if (nextTokens !== null) {\n for (let i = 0; i < nextTokens.length - 1; i += 2) {\n if (nextTokens[i].type === TokenType.DOT && this.isIdentifierToken(nextTokens[i + 1])) {\n if (i + 2 < nextTokens.length && nextTokens[i + 2].type === TokenType.ASSIGN) {\n const name = this.currentToken;\n this.eat(this.currentToken.type);\n return this.reassignVariable(name);\n }\n }\n }\n }\n\n // Check for simple variable reassignment (var = ...)\n const nextToken = this.lexer.peekToken();\n if (nextToken && nextToken.type === TokenType.ASSIGN) {\n return this.reassignVariable();\n }\n }\n\n return this.listExpr();\n }\n\n private assignVariable(): AssignNode {\n const token = this.eat(TokenType.RESERVED_KEYWORD);\n\n const varNameToken = this.eatIdentifier();\n const varName = new IdentifierNode(varNameToken);\n this.eat(TokenType.COLON);\n\n const typeDecl = this.typeDeclaration();\n\n if (this.currentToken.type === TokenType.ASSIGN) {\n this.eat(TokenType.ASSIGN);\n const assignmentExpr = this.listExpr();\n return new AssignNode(varName, typeDecl, assignmentExpr, token);\n }\n\n return new AssignNode(varName, typeDecl, null, token);\n }\n\n private reassignVariable(nameToken?: Token): ReassignNode {\n const varNameToken = nameToken || this.eatIdentifier();\n let name: IdentifierNode | IdentifierNode[] = new IdentifierNode(varNameToken);\n\n if (this.currentToken.type === TokenType.DOT) {\n const names: IdentifierNode[] = [new IdentifierNode(varNameToken)];\n while (this.currentToken.type === TokenType.DOT) {\n this.eat(TokenType.DOT);\n const propertyToken = this.eatIdentifier();\n names.push(new IdentifierNode(propertyToken));\n }\n name = names;\n }\n\n this.eat(TokenType.ASSIGN);\n\n const assignmentExpr = this.listExpr();\n\n return new ReassignNode(name, assignmentExpr, varNameToken);\n }\n\n private reference(): ASTNode {\n const token = this.currentToken;\n\n // Handle partial reference tokens (from tolerant lexer)\n if (token.type === TokenType.PARTIAL_REFERENCE) {\n this.eat(TokenType.PARTIAL_REFERENCE);\n this.incompleteInfo.push({\n type: IncompleteType.UNCLOSED_REFERENCE,\n startPos: token.pos,\n endPos: token.endPos,\n partialValue: token.value,\n });\n return new PartialReferenceNode(token.value, token);\n }\n\n const node = new ReferenceNode(token);\n this.eat(TokenType.REFERENCE);\n this.requiredReferences.add(node.value);\n\n if (this.currentToken.type === TokenType.FORMAT) {\n return this.format(node);\n }\n return node;\n }\n\n // logic_term ((AND | OR) logic_term)*\n private expr(): ASTNode {\n let node = this.logicTerm();\n while (\n this.currentToken.type === TokenType.LOGIC_AND ||\n this.currentToken.type === TokenType.LOGIC_OR\n ) {\n const token = this.eat(this.currentToken.type);\n const partial = this.tryRecoverMissingOperand(node, token);\n if (partial) return partial;\n node = new BinOpNode(node, token, this.logicTerm());\n }\n return node;\n }\n\n private conditionExpr(): ASTNode {\n if (this.currentToken.type === TokenType.STRING) {\n const nextToken = this.lexer.peekToken();\n if (nextToken && nextToken.type === TokenType.ASSIGN) {\n throw new ParserError(ParserErrorCode.CONDITION_MUST_BE_BOOLEAN, {\n token: this.currentToken,\n });\n }\n }\n\n return this.expr();\n }\n\n private returnStatement(): ReturnNode {\n const token = this.eat(TokenType.RESERVED_KEYWORD); // 'return'\n const expr = this.listExpr();\n return new ReturnNode(expr, token);\n }\n\n private whileStatement(): WhileNode {\n const whileToken = this.eat(TokenType.RESERVED_KEYWORD); // 'while'\n this.eat(TokenType.LPAREN);\n const condition = this.conditionExpr();\n this.eat(TokenType.RPAREN);\n const body = this.block();\n return new WhileNode(condition, body.statements as StatementListNode, whileToken);\n }\n\n private forStatement(): ForEachNode {\n const forToken = this.eat(TokenType.RESERVED_KEYWORD); // 'for'\n\n // First identifier: item variable\n if (!this.isIdentifierToken()) {\n throw new ParserError(ParserErrorCode.EXPECTED_TOKEN_TYPE, {\n token: this.currentToken,\n data: { expectedType: \"identifier\", actualType: this.currentToken.type },\n });\n }\n const firstVar = this.currentToken.value as string;\n this.eat(this.currentToken.type);\n\n // Check for comma → item, index\n let indexVar: string | null = null;\n if (this.currentToken.type === TokenType.COMMA) {\n this.eat(TokenType.COMMA);\n if (!this.isIdentifierToken()) {\n throw new ParserError(ParserErrorCode.EXPECTED_TOKEN_TYPE, {\n token: this.currentToken,\n data: { expectedType: \"identifier\", actualType: this.currentToken.type },\n });\n }\n indexVar = this.currentToken.value as string;\n this.eat(this.currentToken.type);\n }\n\n // Expect contextual 'in' — parsed as STRING token with value \"in\"\n if (!this.isIdentifierToken() || this.currentToken.value !== \"in\") {\n throw new ParserError(ParserErrorCode.EXPECTED_TOKEN_TYPE, {\n token: this.currentToken,\n data: { expectedType: \"'in'\", actualType: this.currentToken.value },\n });\n }\n this.eat(this.currentToken.type);\n\n // Parse collection expression (e.g., [1, 2, 3], range(3), myList).\n const collection = this.expr();\n\n // Parse body block\n const body = this.block();\n\n // Consume optional trailing semicolon\n if (this.currentToken.type === TokenType.SEMICOLON) {\n this.eat(TokenType.SEMICOLON);\n }\n\n return new ForEachNode(\n firstVar,\n indexVar,\n collection,\n body.statements as StatementListNode,\n forToken,\n );\n }\n\n private ifStatement(): IfNode {\n const ifToken = this.eat(TokenType.RESERVED_KEYWORD); // 'if'\n this.eat(TokenType.LPAREN);\n const condition = this.conditionExpr();\n this.eat(TokenType.RPAREN);\n const ifBody = this.block().statements as StatementListNode;\n\n const conditions = [new IfConditionNode(condition, ifBody, ifToken)];\n\n // Handle elif clauses\n while (\n this.currentToken.type === TokenType.RESERVED_KEYWORD &&\n this.currentToken.value === ReservedKeyword.ELIF\n ) {\n this.eat(TokenType.RESERVED_KEYWORD); // 'elif'\n this.eat(TokenType.LPAREN);\n const elifCondition = this.conditionExpr();\n this.eat(TokenType.RPAREN);\n const elifBody = this.block().statements as StatementListNode;\n conditions.push(new IfConditionNode(elifCondition, elifBody, ifToken));\n }\n\n // Check for 'else' block\n let elseBody: StatementListNode | null = null;\n if (\n this.currentToken.type === TokenType.RESERVED_KEYWORD &&\n this.currentToken.value === ReservedKeyword.ELSE\n ) {\n this.eat(TokenType.RESERVED_KEYWORD); // 'else'\n elseBody = this.block().statements as StatementListNode;\n }\n\n return new IfNode(conditions, elseBody, ifToken);\n }\n\n private block(): BlockNode {\n this.eat(TokenType.LBLOCK);\n const statements = this.statementsList() as StatementListNode;\n this.eat(TokenType.RBLOCK);\n return new BlockNode(statements);\n }\n\n // Explicit list literal: [expr, expr, ...]\n private explicitList(): ListNode {\n const token = this.currentToken;\n this.eat(TokenType.LBLOCK);\n\n const elements: ASTNode[] = [];\n\n if (this.currentToken.type !== TokenType.RBLOCK) {\n elements.push(this.expr());\n while (this.currentToken.type === TokenType.COMMA) {\n this.eat(TokenType.COMMA);\n elements.push(this.expr());\n }\n }\n\n this.eat(TokenType.RBLOCK);\n return new ListNode(elements, token);\n }\n\n // implicit_list_expr : factor ((COMMA) factor)*\n private implicitListExpr(): ASTNode {\n const token = this.currentToken;\n const elements: ASTNode[] = [this.expr()];\n\n while (\n this.currentToken.type !== TokenType.COMMA &&\n this.currentToken.type !== TokenType.RPAREN &&\n this.currentToken.type !== TokenType.EOF &&\n this.currentToken.type !== TokenType.SEMICOLON\n ) {\n elements.push(this.expr());\n }\n\n if (elements.length === 1) return elements[0];\n\n return new ImplicitListNode(elements, token);\n }\n\n // factor ((COMMA) factor)\n private listExpr(): ASTNode {\n const firstToken = this.currentToken;\n const elements: ASTNode[] = [this.implicitListExpr()];\n\n while (this.currentToken.type === TokenType.COMMA) {\n this.eat(TokenType.COMMA);\n elements.push(this.implicitListExpr());\n }\n\n if (elements.length === 1) {\n return elements[0];\n }\n\n return new ListNode(elements, firstToken);\n }\n\n // term ((PLUS | MINUS) term)*\n private logicTerm(): ASTNode {\n let node = this.comparison();\n while (\n this.currentToken.type === TokenType.OPERATION &&\n (this.currentToken.value === Operations.ADD ||\n this.currentToken.value === Operations.SUBTRACT)\n ) {\n const token = this.eat(TokenType.OPERATION);\n const partial = this.tryRecoverMissingOperand(node, token);\n if (partial) return partial;\n node = new BinOpNode(node, token, this.comparison());\n }\n return node;\n }\n\n // term ((IS_EQ | IS_NOT_EQ | IS_GT | IS_LT | IS_GT_EQ | IS_LT_EQ) term)*\n private comparison(): ASTNode {\n let node = this.term();\n while (\n this.currentToken.type === TokenType.IS_EQ ||\n this.currentToken.type === TokenType.IS_NOT_EQ ||\n this.currentToken.type === TokenType.IS_GT ||\n this.currentToken.type === TokenType.IS_LT ||\n this.currentToken.type === TokenType.IS_GT_EQ ||\n this.currentToken.type === TokenType.IS_LT_EQ\n ) {\n const token = this.eat(this.currentToken.type);\n const partial = this.tryRecoverMissingOperand(node, token);\n if (partial) return partial;\n node = new BinOpNode(node, token, this.term());\n }\n return node;\n }\n\n // Term = Power ((\"*\" | \"/\") Power)*\n private term(): ASTNode {\n let node = this.power();\n while (\n this.currentToken.type === TokenType.OPERATION &&\n (this.currentToken.value === Operations.MULTIPLY ||\n this.currentToken.value === Operations.DIVIDE)\n ) {\n const token = this.eat(TokenType.OPERATION);\n const partial = this.tryRecoverMissingOperand(node, token);\n if (partial) return partial;\n node = new BinOpNode(node, token, this.power());\n }\n return node;\n }\n\n // factor (POWER factor)*\n private power(): ASTNode {\n let node = this.factor();\n while (\n this.currentToken.type === TokenType.OPERATION &&\n this.currentToken.value === Operations.POWER\n ) {\n const token = this.eat(TokenType.OPERATION);\n const partial = this.tryRecoverMissingOperand(node, token);\n if (partial) return partial;\n node = new BinOpNode(node, token, this.factor());\n }\n return node;\n }\n\n private format(node: ASTNode): ASTNode {\n const formatToken = this.currentToken;\n this.eat(TokenType.FORMAT);\n return new ElementWithUnitNode(node, formatToken.value);\n }\n\n private number(): ASTNode {\n let node: ASTNode = new NumNode(this.currentToken);\n this.eat(TokenType.NUMBER);\n if (this.currentToken.type === TokenType.FORMAT) {\n return this.format(node);\n }\n node = this.attributeAccess(node);\n return node;\n }\n\n // factor : PLUS factor\n // | MINUS factor\n // | NOT factor\n // | NUMBER (FORMAT)?\n // | LPAREN expr RPAREN (FORMAT)?\n // | REFERENCE (DOT (STRING | function))*\n // | STRING (LPAREN args RPAREN)? (DOT (STRING | function))*\n // | EXPLICIT_STRING (DOT (STRING | function))*\n // | HEX_COLOR\n private factor(): ASTNode {\n const token = this.currentToken;\n\n // Explicit list literal: [expr, expr, ...]\n if (token.type === TokenType.LBLOCK) {\n let node: ASTNode = this.explicitList();\n node = this.attributeAccess(node);\n return node;\n }\n\n // Handle unary operators\n if (\n token.type === TokenType.OPERATION &&\n (token.value === Operations.ADD ||\n token.value === Operations.SUBTRACT ||\n token.value === Operations.LOGIC_NOT)\n ) {\n this.eat(TokenType.OPERATION);\n if (this.tolerant && this.currentToken.type === TokenType.EOF) {\n this.incompleteInfo.push({\n type: IncompleteType.MISSING_OPERAND,\n startPos: token.pos,\n endPos: token.endPos,\n });\n return new PartialUnaryOpNode(token);\n }\n return new UnaryOpNode(token, this.factor());\n }\n\n if (\n token.type === TokenType.RESERVED_KEYWORD &&\n (token.value === ReservedKeyword.TRUE || token.value === ReservedKeyword.FALSE)\n ) {\n this.eat(TokenType.RESERVED_KEYWORD);\n let boolNode: ASTNode = new BooleanNode(token.value === ReservedKeyword.TRUE, token);\n boolNode = this.attributeAccess(boolNode);\n return boolNode;\n }\n\n if (token.type === TokenType.RESERVED_KEYWORD && token.value === ReservedKeyword.NULL) {\n this.eat(TokenType.RESERVED_KEYWORD);\n let nullNode: ASTNode = new NullNode(token);\n nullNode = this.attributeAccess(nullNode);\n return nullNode;\n }\n\n if (token.type === TokenType.NUMBER) {\n return this.number();\n }\n\n if (token.type === TokenType.LPAREN) {\n const lparenToken = token;\n this.eat(TokenType.LPAREN);\n\n // In tolerant mode, handle EOF or empty paren\n if (this.tolerant && this.currentToken.type === TokenType.EOF) {\n this.incompleteInfo.push({\n type: IncompleteType.UNCLOSED_PAREN,\n startPos: lparenToken.pos,\n });\n // Return a partial node with null expression\n return new PartialParenNode(new NullNode(lparenToken), lparenToken);\n }\n\n const node = this.expr();\n\n // In tolerant mode, handle missing closing paren\n if (this.tolerant && this.currentToken.type === TokenType.EOF) {\n this.incompleteInfo.push({\n type: IncompleteType.UNCLOSED_PAREN,\n startPos: lparenToken.pos,\n });\n return new PartialParenNode(node, lparenToken);\n }\n\n this.eat(TokenType.RPAREN);\n if (this.currentToken.type === TokenType.FORMAT) {\n return this.format(node);\n }\n return this.attributeAccess(node);\n }\n\n // Handle partial reference tokens\n if (token.type === TokenType.PARTIAL_REFERENCE) {\n let node = this.reference();\n node = this.attributeAccess(node);\n return node;\n }\n\n if (token.type === TokenType.REFERENCE) {\n let node = this.reference();\n // Handle attribute access like {ref}.property or {ref}.method()\n node = this.attributeAccess(node);\n return node;\n }\n\n if (token.type === TokenType.HEX_COLOR) {\n this.eat(TokenType.HEX_COLOR);\n let hexNode: ASTNode = new HexColorNode(token);\n hexNode = this.attributeAccess(hexNode);\n return hexNode;\n }\n\n // Handle partial string tokens\n if (token.type === TokenType.PARTIAL_STRING) {\n this.eat(TokenType.PARTIAL_STRING);\n const sourceText = this.lexer.getSourceInfo().text;\n const quoteType = sourceText[token.pos] ?? '\"';\n this.incompleteInfo.push({\n type: IncompleteType.UNCLOSED_STRING,\n startPos: token.pos,\n endPos: token.endPos,\n partialValue: token.value,\n });\n return new PartialStringNode(token.value, quoteType, token);\n }\n\n // Identifier or function call\n // FORMAT tokens (like 's', 'ms') can be used as identifiers/function names\n if (this.isIdentifierToken(token)) {\n this.eat(token.type);\n let node: ASTNode;\n // After eating the identifier, currentToken is updated.\n // This comparison (this.currentToken.type as TokenType) === TokenType.LPAREN is valid.\n if ((this.currentToken.type as TokenType) === TokenType.LPAREN) {\n // Function call\n node = this.functionCall(token);\n } else {\n // Identifier\n node = new IdentifierNode(token);\n }\n // Handle attribute access like ident.property or ident.method()\n node = this.attributeAccess(node);\n return node;\n }\n if (token.type === TokenType.TEMPLATE_STRING) {\n return this.templateString();\n }\n\n if (token.type === TokenType.EXPLICIT_STRING) {\n this.eat(TokenType.EXPLICIT_STRING);\n let node: ASTNode = new StringNode(token);\n node = this.attributeAccess(node); // For string methods like \"hello\".length()\n return node;\n }\n\n // In tolerant mode, handle EOF gracefully\n if (this.tolerant && token.type === TokenType.EOF) {\n return new NullNode(token);\n }\n\n this.error(ParserErrorCode.UNEXPECTED_TOKEN, { token: String(token.value) });\n }\n\n private attributeAccess(leftNode: ASTNode): ASTNode {\n let node = leftNode;\n while (this.currentToken.type === TokenType.DOT) {\n const dotToken = this.eat(TokenType.DOT);\n // In tolerant mode, handle trailing dot without property name\n // Cast needed: TS narrows currentToken.type after the while(DOT) guard,\n // but eat() replaces currentToken so it can now be EOF.\n if (this.tolerant && (this.currentToken.type as TokenType) === TokenType.EOF) {\n this.incompleteInfo.push({\n type: IncompleteType.TRAILING_DOT,\n startPos: dotToken.pos,\n endPos: dotToken.endPos,\n });\n break;\n }\n // Accept STRING or FORMAT as valid identifier in attribute position\n // FORMAT tokens (like 's', 'ms') can still be valid attribute names\n if (this.isIdentifierToken()) {\n const nextToken = this.lexer.peekToken();\n if (nextToken && nextToken.type === TokenType.LPAREN) {\n // It's a method call\n const methodName = this.currentToken.value as string;\n this.eat(this.currentToken.type);\n const funcCall = this.functionCall({ ...this.currentToken, value: methodName } as Token);\n node = new AttributeAccessNode(node, funcCall);\n } else {\n // It's a property access\n const attrToken = this.currentToken;\n this.eat(this.currentToken.type);\n node = new AttributeAccessNode(node, new IdentifierNode(attrToken));\n }\n }\n }\n return node;\n }\n\n private functionCall(functionName: Token): FunctionCallNode | PartialFunctionCallNode {\n this.eat(TokenType.LPAREN);\n const args: ASTNode[] = [];\n while (this.currentToken.type !== TokenType.RPAREN) {\n // In tolerant mode, handle EOF before closing paren\n if (this.tolerant && this.currentToken.type === TokenType.EOF) {\n this.incompleteInfo.push({\n type: IncompleteType.UNCLOSED_FUNCTION,\n startPos: functionName.pos,\n partialValue: functionName.value as string,\n });\n return new PartialFunctionCallNode(functionName.value as string, args, functionName);\n }\n if (this.currentToken.type === TokenType.COMMA) {\n this.eat(TokenType.COMMA);\n }\n args.push(this.implicitListExpr());\n }\n this.eat(TokenType.RPAREN);\n return new FunctionCallNode(functionName.value as string, args, functionName);\n }\n\n /**\n * Parse a TEMPLATE_STRING token into a TemplateStringNode.\n * Scans the raw content for:\n * - {ref.path} → ReferenceNode\n * - ${expression} → parsed sub-expression\n * - \\{ \\${ \\` \\\\ → escaped literals (backslash removed)\n * - everything else → literal StringNode segments\n */\n private templateString(): ASTNode {\n const token = this.currentToken;\n const raw = token.value as string;\n this.eat(TokenType.TEMPLATE_STRING);\n\n const parts: ASTNode[] = [];\n let literal = \"\";\n let i = 0;\n\n const flushLiteral = () => {\n if (literal.length > 0) {\n parts.push(new StringNode({ ...token, value: literal }));\n literal = \"\";\n }\n };\n\n while (i < raw.length) {\n const ch = raw[i];\n\n // Escape sequences: \\{ \\${ \\$ \\` \\\\\n if (ch === \"\\\\\" && i + 1 < raw.length) {\n const next = raw[i + 1];\n if (next === \"{\" || next === \"`\" || next === \"\\\\\") {\n literal += next;\n i += 2;\n continue;\n }\n if (next === \"$\") {\n if (i + 2 < raw.length && raw[i + 2] === \"{\") {\n // \\${ → literal \"${\", prevents expression interpolation\n literal += \"${\";\n i += 3;\n } else {\n // \\$ → literal \"$\"\n literal += \"$\";\n i += 2;\n }\n continue;\n }\n }\n\n // Expression interpolation: ${...}\n if (ch === \"$\" && i + 1 < raw.length && raw[i + 1] === \"{\") {\n flushLiteral();\n // Find matching closing brace (tracking nesting, rejecting backticks)\n const start = i + 2;\n let depth = 1;\n let j = start;\n while (j < raw.length && depth > 0) {\n if (raw[j] === \"`\") {\n this.error(ParserErrorCode.INVALID_SYNTAX, {\n message: \"Nested template strings are not allowed inside ${...}\",\n });\n }\n if (raw[j] === \"{\") depth++;\n else if (raw[j] === \"}\") depth--;\n if (depth > 0) j++;\n }\n if (depth !== 0) {\n this.error(ParserErrorCode.INVALID_SYNTAX, {\n message: \"Unterminated ${...} in template string\",\n });\n }\n const exprStr = raw.slice(start, j);\n const subLexer = new Lexer(exprStr);\n const subParser = new Parser(subLexer);\n const exprNode = subParser.expr();\n // Collect references from the sub-expression\n for (const ref of subParser.requiredReferences) {\n this.requiredReferences.add(ref);\n }\n parts.push(exprNode);\n i = j + 1; // skip past closing }\n continue;\n }\n\n // Reference interpolation: {ref.path}\n if (ch === \"{\") {\n flushLiteral();\n const start = i + 1;\n let j = start;\n while (j < raw.length && raw[j] !== \"}\") {\n if (raw[j] === \"{\") {\n this.error(ParserErrorCode.INVALID_SYNTAX, {\n message: \"Nested braces in template reference\",\n });\n }\n j++;\n }\n if (j >= raw.length) {\n this.error(ParserErrorCode.INVALID_SYNTAX, {\n message: \"Unterminated {ref} in template string\",\n });\n }\n let refPath = raw.slice(start, j);\n // Strip whitespace inside reference (same as lexer behavior)\n refPath = refPath.replace(/[ \\t]/g, \"\");\n if (refPath.length === 0) {\n this.error(ParserErrorCode.INVALID_SYNTAX, {\n message: \"Empty reference in template string\",\n });\n }\n this.requiredReferences.add(refPath);\n parts.push(\n new ReferenceNode({\n ...token,\n type: TokenType.REFERENCE,\n value: refPath,\n }),\n );\n i = j + 1; // skip past closing }\n continue;\n }\n\n // Regular character\n literal += ch;\n i++;\n }\n\n flushLiteral();\n\n // Optimization: if the template has zero interpolations, return a plain StringNode\n if (parts.length === 1 && parts[0] instanceof StringNode) {\n return parts[0];\n }\n\n return new TemplateStringNode(parts, token);\n }\n\n public parse(inlineMode = false): ASTNode | null {\n if (this.tolerant && !inlineMode) {\n this.error(ParserErrorCode.TOLERANT_REQUIRES_INLINE);\n }\n\n if (this.currentToken.type === TokenType.EOF) return null;\n\n if (inlineMode) return this.listExpr();\n\n const node = this.statementsList();\n if ((this.currentToken.type as TokenType) !== TokenType.EOF) {\n this.error(ParserErrorCode.INVALID_SYNTAX, {\n message: \"Unexpected token at the end of input.\",\n });\n }\n return node;\n }\n}\n\nexport interface ParseExpressionResult {\n lexer: Lexer;\n parser: Parser;\n ast: ASTNode | null;\n}\n\nexport function parseExpression(text: string): ParseExpressionResult {\n const lexer = new Lexer(text);\n const parser = new Parser(lexer);\n const ast = parser.parse();\n\n return {\n lexer,\n parser,\n ast,\n };\n}\n","import type { ASTNode } from \"@interpreter/ast\";\nimport { collectReferenceNodes } from \"@interpreter/ast\";\nimport { isSome } from \"./type\";\n\n/**\n * Position of a reference in the original string\n */\ntype ReferencePosition = {\n start: number;\n end: number;\n oldName: string;\n newName: string;\n};\n\n/**\n * Rename references in a token value string using an AST and rename map\n *\n * @param originalValue - The original token value string\n * @param ast - The parsed AST of the token value\n * @param renameMap - Map of old names to new names { \"old.name\": \"new.name\" }\n * @returns The updated token value string with renamed references\n *\n * @example\n * const renameMap = { \"color.primary\": \"color.main\" };\n * const updated = renameReferences(\"{color.primary}\", ast, renameMap);\n * // Returns: \"{color.main}\"\n *\n * @example\n * const renameMap = { \"a\": \"x\", \"b\": \"y\" };\n * const updated = renameReferences(\"{a} + {b}\", ast, renameMap);\n * // Returns: \"{x} + {y}\"\n */\nexport function renameReferences(\n originalValue: string,\n ast: ASTNode,\n renameMap: Record<string, string>,\n): string {\n const positions: ReferencePosition[] = [];\n\n // Collect positions for all references that need to be renamed\n for (const [oldName, newName] of Object.entries(renameMap)) {\n const references = collectReferenceNodes(ast, oldName);\n\n for (const ref of references) {\n if (isSome(ref.token.pos) && isSome(ref.token.endPos)) {\n positions.push({\n start: ref.token.pos,\n end: ref.token.endPos,\n oldName,\n newName,\n });\n }\n }\n }\n\n // Sort in reverse order for safe replacement (replace from end to start)\n // This way, earlier positions remain valid as we make replacements\n positions.sort((a, b) => b.start - a.start);\n\n // Apply replacements\n let result = originalValue;\n for (const pos of positions) {\n result = result.substring(0, pos.start) + pos.newName + result.substring(pos.end);\n }\n\n return result;\n}\n","// Color-kind schema shim.\n//\n// Re-exports the typed shapes from @tokens-studio/schema-validation so\n// that the rest of the interpreter can continue importing from\n// \"@interpreter/config/managers/color/schema\". The schema-validation\n// package is the cross-language source of truth for the schema language\n// (TS / Go / Ruby).\n//\n// Aliases preserve the historical interpreter names (`SpecProperty`,\n// `ColorSpecificationSchema`, `validSchemaTypes`,\n// `MINIMAL_COLOR_SPECIFICATION`) so consumer code does not have to\n// change.\n\nimport { Color, type z } from \"@tokens-studio/schema-validation\";\n\n// Types -----------------------------------------------------------------------\n\nexport type ColorSpecification = Color.ColorSpecification;\n\n/**\n * A property of a color schema (typically a channel like r/g/b/a).\n * Historical alias for the `ColorProperty` type from the\n * schema-validation library.\n */\nexport type SpecProperty = Color.ColorProperty;\n\n// Validation API --------------------------------------------------------------\n//\n// Explicit type annotations on these re-exports are required because\n// tsup's DTS bundling (rollup-plugin-dts) can't construct a public path\n// for the internal types that transitively appear in the inferred\n// return types of `Color.parseColorSpec` etc. Without the annotation\n// the DTS emit fails with TS4023 / TS2742.\n\n/**\n * Validate and parse a JSON value as a color specification. Throws a\n * `ZodError` with a structured field-by-field error report on failure.\n *\n * Strictness:\n * - Top level: unknown fields are tolerated (silently stripped).\n * - Nested shapes (ColorSchema, ColorProperty, Initializer, Conversion,\n * ColorScriptBlock): unknown fields and unsupported enum values fail.\n */\nexport const parseColorSpec: (json: unknown) => ColorSpecification = Color.parseColorSpec;\n\n/**\n * Like `parseColorSpec` but returns a `{ success, data | error }`\n * discriminated union instead of throwing.\n */\nexport const safeParseColorSpec: (json: unknown) => z.ZodSafeParseResult<ColorSpecification> =\n Color.safeParseColorSpec;\n\n/**\n * Historical compatibility alias for `parseColorSpec`. Wrap a call in a\n * `try { ... } catch (err) { ... }` to handle validation failures.\n *\n * @deprecated Prefer `parseColorSpec` / `safeParseColorSpec`.\n */\nexport const ColorSpecificationSchema: (json: unknown) => ColorSpecification = Color.parseColorSpec;\n\n// Constants -------------------------------------------------------------------\n\n/**\n * The set of valid `type` values for a color schema property.\n *\n * Hand-spelled (rather than reading `.options` off the zod enum)\n * because tsup's DTS bundling drops the value side of namespaced\n * re-exports.\n */\nexport const validSchemaTypes = [\"number\", \"string\", \"color\"] as const;\n\n// Helpers ---------------------------------------------------------------------\n\n/** Lowercased lookup name for a color spec. */\nexport const specName: (spec: ColorSpecification) => string = Color.specName;\n\n// Defaults --------------------------------------------------------------------\n\n/**\n * Minimal viable ColorSpecification for testing and defaults.\n *\n * Always passes `parseColorSpec` — see the schema-minimal regression\n * test in tests/interpreter/color/schema-minimal.test.ts.\n */\nexport const MINIMAL_COLOR_SPECIFICATION: ColorSpecification = {\n name: \"MinimalColor\",\n type: \"color\" as const,\n schema: {\n type: \"object\",\n properties: {\n value: {\n type: \"string\",\n },\n },\n },\n initializers: [\n {\n keyword: \"minimal\",\n script: {\n type: \"https://schema.example.com/tokenscript/0/\",\n script: \"return {input};\",\n },\n },\n ],\n conversions: [],\n};\n","/**\n * Utilities for working with TokenScript schema URIs\n *\n * Handles URI construction, parsing, and manipulation for the TokenScript schema registry.\n */\n\nimport { isObject, safeParseInt } from \"../interpreter/utils/type.js\";\n\nexport type SemanticVersion =\n | { major: number }\n | { major: number; minor: number }\n | { major: number; minor: number; patch: number };\n\ntype SchemaVersion = \"latest\" | SemanticVersion | null;\n\nexport interface SchemaUriComponents {\n baseUrl: string;\n category: \"schema\" | \"core\" | \"function\";\n name: string;\n version: SchemaVersion;\n}\n\nexport const DEFAULT_REGISTRY_URL = \"https://schema.tokenscript.dev.gcp.tokens.studio\";\n\nexport const DEFAULT_API_PATH = \"/api/v1\";\n\nexport function parseSemverFromString(versionString: string): SemanticVersion | null {\n const parts = versionString.split(\".\");\n const numbers: number[] = [];\n\n for (const part of parts) {\n const num = safeParseInt(part);\n if (num === null) return null;\n numbers.push(num);\n }\n\n if (numbers.length !== parts.length) return null;\n\n if (numbers.length === 3) {\n return { major: numbers[0], minor: numbers[1], patch: numbers[2] };\n }\n\n if (numbers.length === 2) {\n return { major: numbers[0], minor: numbers[1] };\n }\n\n if (numbers.length === 1) {\n return { major: numbers[0] };\n }\n\n return null;\n}\n\nexport function parseVersionString(versionString: string): SchemaVersion {\n return versionString === \"latest\" ? \"latest\" : parseSemverFromString(versionString);\n}\n\nexport function semverToString(version: SchemaVersion | undefined): string {\n if (version === undefined) {\n return \"latest\";\n }\n if (isObject(version)) {\n if (\"patch\" in version) return `${version.major}.${version.minor}.${version.patch}`;\n if (\"minor\" in version) return `${version.major}.${version.minor}`;\n return `${version.major}`;\n }\n return \"latest\";\n}\n\nexport function buildSchemaUri(\n params: Partial<SchemaUriComponents> & { category: string; name: string },\n): string {\n const { baseUrl, category, name, version } = params;\n\n const versionString = semverToString(version);\n\n const effectiveBaseUrl = baseUrl === undefined ? DEFAULT_REGISTRY_URL : baseUrl;\n\n if (effectiveBaseUrl === \"\") {\n return `${DEFAULT_API_PATH}/${category}/${name}/${versionString}/`;\n }\n\n return `${effectiveBaseUrl}${DEFAULT_API_PATH}/${category}/${name}/${versionString}/`;\n}\n\n/**\n * Parse a schema URI into its components\n *\n * @example\n * parseSchemaUri(\"https://schema.tokenscript.dev.gcp.tokens.studio/api/v1/schema/rgb-color/0.0.1/\")\n * // => { baseUrl: \"...\", category: \"schema\", name: \"rgb-color\", version: \"0.0.1\" }\n *\n * parseSchemaUri(\"/api/v1/schema/rgb-color/0.0.1/\")\n * // => { baseUrl: \"\", category: \"schema\", name: \"rgb-color\", version: \"0.0.1\" }\n */\nexport function parseSchemaUri(uri: string): SchemaUriComponents | null {\n let baseUrl = \"\";\n let pathname = uri;\n\n // Try parsing as full URL first\n try {\n const url = new URL(uri);\n baseUrl = `${url.protocol}//${url.host}`;\n pathname = url.pathname;\n } catch {\n // If URL parsing fails, treat as relative path\n // Check if it starts with a protocol (incomplete URL)\n if (uri.includes(\"://\")) {\n return null;\n }\n // It's a relative path, use as-is\n pathname = uri;\n }\n\n // Parse pathname: /api/v1/schema/rgb-color/0.0.1/\n const pathParts = pathname.split(\"/\").filter((part) => part !== \"\");\n\n // Expected format: [api, v1, category, name, version]\n if (pathParts.length < 5) {\n return null;\n }\n\n // Check if it starts with api/vN\n if (pathParts[0] !== \"api\" || !pathParts[1].startsWith(\"v\")) {\n return null;\n }\n\n const category = pathParts[2];\n if (category !== \"schema\" && category !== \"core\" && category !== \"function\") {\n return null;\n }\n\n const name = pathParts[3];\n const version = parseVersionString(pathParts[4]);\n\n return {\n baseUrl,\n category: category as \"schema\" | \"core\" | \"function\",\n name,\n version,\n };\n}\n\n/**\n * Extract the base URI without version\n *\n * @example\n * getBaseUri(\"https://.../api/v1/schema/rgb-color/0.0.1/\")\n * // => \"https://.../api/v1/schema/rgb-color/\"\n *\n * getBaseUri(\"/api/v1/schema/rgb-color/0.0.1/\")\n * // => \"/api/v1/schema/rgb-color/\"\n */\nexport function getBaseUri(uri: string): string {\n const components = parseSchemaUri(uri);\n\n if (!components) {\n return uri;\n }\n\n const { baseUrl, category, name } = components;\n\n if (baseUrl === \"\") {\n return `${DEFAULT_API_PATH}/${category}/${name}/`;\n }\n\n return `${baseUrl}${DEFAULT_API_PATH}/${category}/${name}/`;\n}\n\n/**\n * Remove version from URI (for backward compatibility)\n * Same as getBaseUri\n */\nexport function removeVersionFromUri(uri: string): string {\n return getBaseUri(uri);\n}\n\n/**\n * Parse semantic version from URI\n *\n * @example\n * parseSemverFromUri(\"https://.../api/v1/schema/rgb-color/0.0.1/\")\n * // => { major: 0, minor: 0, patch: 1 }\n */\nexport function parseSemverFromUri(uri: string): SemanticVersion | null {\n const components = parseSchemaUri(uri);\n if (!components || components.version === \"latest\" || components.version === null) {\n return null;\n }\n return components.version;\n}\n\n/**\n * Generate version resolution candidates from most specific to least specific\n *\n * @example\n * generateVersionCandidates(\"https://.../schema/rgb-color/0.0.1/\")\n * // => [\"https://.../schema/rgb-color/0.0.1/\", \"https://.../schema/rgb-color/0.0/\", ...]\n */\nexport function generateVersionCandidates(uri: string): string[] {\n const components = parseSchemaUri(uri);\n if (!components) {\n return [uri];\n }\n\n const candidates: string[] = [];\n\n // First try the original URI as-is\n candidates.push(uri);\n\n // If it's already a /latest/ URI or null, only try that\n if (components.version === \"latest\" || components.version === null) {\n return candidates;\n }\n\n // Version is a SemanticVersion object - generate less specific versions\n if (\"patch\" in components.version) {\n // Try major.minor (without patch)\n candidates.push(\n buildSchemaUri({\n ...components,\n version: { major: components.version.major, minor: components.version.minor },\n }),\n );\n }\n\n if (\"minor\" in components.version) {\n // Try major only\n candidates.push(\n buildSchemaUri({\n ...components,\n version: { major: components.version.major },\n }),\n );\n }\n\n // Finally try /latest/\n candidates.push(\n buildSchemaUri({\n ...components,\n version: \"latest\",\n }),\n );\n\n return candidates;\n}\n\n/**\n * Compare two semantic versions\n * @returns positive if v1 > v2, negative if v1 < v2, 0 if equal\n */\nexport function compareVersions(v1: SemanticVersion, v2: SemanticVersion): number {\n if (v1.major !== v2.major) return v1.major - v2.major;\n\n const v1Minor = \"minor\" in v1 ? v1.minor : 0;\n const v2Minor = \"minor\" in v2 ? v2.minor : 0;\n if (v1Minor !== v2Minor) return v1Minor - v2Minor;\n\n const v1Patch = \"patch\" in v1 ? v1.patch : 0;\n const v2Patch = \"patch\" in v2 ? v2.patch : 0;\n return v1Patch - v2Patch;\n}\n\n/**\n * Build a fetch URL for a schema (with format query parameter)\n *\n * @example\n * buildFetchUrl(\"rgb-color\", \"latest\")\n * // => \"https://.../api/v1/schema/rgb-color/latest?format=json\"\n */\nexport function buildFetchUrl(\n name: string,\n version: \"latest\" | SemanticVersion | string,\n options?: {\n baseUrl?: string;\n category?: \"schema\" | \"core\" | \"function\";\n format?: string;\n },\n): string {\n const { baseUrl = DEFAULT_REGISTRY_URL, category = \"schema\", format = \"json\" } = options || {};\n\n const versionParam = typeof version === \"string\" ? parseVersionString(version) : version;\n\n const uri = buildSchemaUri({ baseUrl, category, name, version: versionParam });\n return `${uri}?format=${format}`;\n}\n\n/**\n * Extract schema name from URI\n *\n * @example\n * extractSchemaName(\"https://.../api/v1/schema/rgb-color/0.0.1/\")\n * // => \"rgb-color\"\n */\nexport function extractSchemaName(uri: string): string | null {\n const components = parseSchemaUri(uri);\n return components?.name || null;\n}\n\n/**\n * Extract version from URI\n *\n * @example\n * extractVersion(\"https://.../api/v1/schema/rgb-color/0.0.1/\")\n * // => { major: 0, minor: 0, patch: 1 }\n */\nexport function extractVersion(uri: string): \"latest\" | SemanticVersion | null {\n const components = parseSchemaUri(uri);\n return components?.version || null;\n}\n\n/**\n * Check if URI is a core type (hex-color, tokenscript, etc)\n */\nexport function isCoreType(uri: string): boolean {\n const components = parseSchemaUri(uri);\n return components?.category === \"core\";\n}\n\n/**\n * Check if URI is a function\n */\nexport function isFunctionType(uri: string): boolean {\n const components = parseSchemaUri(uri);\n return components?.category === \"function\";\n}\n\n/**\n * Check if URI is a schema\n */\nexport function isSchemaType(uri: string): boolean {\n const components = parseSchemaUri(uri);\n return components?.category === \"schema\";\n}\n\n/**\n * Update version in existing URI\n *\n * @example\n * updateVersion(\"https://.../schema/rgb-color/0.0.1/\", \"1.0.0\")\n * // => \"https://.../schema/rgb-color/1.0.0/\"\n */\nexport function updateVersion(uri: string, newVersion: string): string {\n const components = parseSchemaUri(uri);\n if (!components) {\n throw new Error(`Invalid schema URI: ${uri}`);\n }\n\n return buildSchemaUri({ ...components, version: parseVersionString(newVersion) });\n}\n\n/**\n * Normalize URI to ensure it ends with trailing slash\n */\nexport function normalizeUri(uri: string): string {\n return uri.endsWith(\"/\") ? uri : `${uri}/`;\n}\n\n/**\n * Check if two URIs point to the same schema (ignoring version)\n *\n * @example\n * isSameSchema(\"https://.../schema/rgb-color/0.0.1/\", \"https://.../schema/rgb-color/1.0.0/\")\n * // => true\n */\nexport function isSameSchema(uri1: string, uri2: string): boolean {\n const components1 = parseSchemaUri(uri1);\n const components2 = parseSchemaUri(uri2);\n\n if (!components1 || !components2) {\n // Fallback to string comparison without version for non-parseable URIs\n const base1 = getBaseUri(uri1);\n const base2 = getBaseUri(uri2);\n return base1 === base2;\n }\n\n return (\n components1.baseUrl === components2.baseUrl &&\n components1.category === components2.category &&\n components1.name === components2.name\n );\n}\n","import {\n compareVersions as compareSchemaVersions,\n generateVersionCandidates as generateSchemaVersionCandidates,\n getBaseUri as getSchemaBaseUri,\n isSameSchema,\n parseSchemaUri,\n parseSemverFromUri as parseSchemaVersion,\n type SemanticVersion,\n} from \"@src/utils/schema-uri\";\nimport type { Config } from \"../config\";\n\ntype uri = string;\ntype specType = string;\n\n/**\n * Base manager class that provides common functionality for managing specifications,\n * conversions, and BFS-based conversion path resolution.\n */\nexport abstract class BaseManager<TSpec, TInput, TOutput> {\n protected specs: Map<uri, TSpec> = new Map();\n protected specTypes: Map<uri, specType> = new Map();\n protected conversions: Map<uri, Map<uri, (input: TInput) => TOutput>> = new Map();\n protected parentConfig?: Config;\n\n protected removeVersionFromUri(uri: uri): uri {\n return getSchemaBaseUri(uri);\n }\n\n /**\n * Check if two URIs point to the same schema (ignoring version)\n */\n protected isSameSchemaUri(uri1: uri, uri2: uri): boolean {\n return isSameSchema(uri1, uri2);\n }\n\n /**\n * Parse semantic version from URI\n * Example: \"/api/v1/schema/srgb-color/0.0.1/\" -> { major: 0, minor: 0, patch: 1 }\n */\n protected parseSemverFromUri(uri: uri): SemanticVersion | null {\n return parseSchemaVersion(uri);\n }\n\n /**\n * Get base URI without version\n * Example: \"/api/v1/schema/srgb-color/0.0.1/\" -> \"/api/v1/schema/srgb-color/\"\n */\n protected getBaseUri(uri: uri): uri {\n return getSchemaBaseUri(uri);\n }\n\n /**\n * Generate version resolution candidates from most specific to least specific\n * Example: \"0.0.1\" -> [\"0.0.1\", \"0.0\", \"0\", \"latest\"]\n */\n protected generateVersionCandidates(uri: uri): uri[] {\n return generateSchemaVersionCandidates(uri);\n }\n\n /**\n * Find the latest (highest) semantic version for a URI\n */\n protected findLatestVersion(uri: uri): uri | null {\n const source = parseSchemaUri(uri);\n if (!source) {\n return null;\n }\n\n let latestVersion: SemanticVersion | null = null;\n let latestUri: uri | null = null;\n\n for (const [specUri] of this.specs) {\n const target = parseSchemaUri(specUri);\n if (\n target &&\n target.baseUrl === source.baseUrl &&\n target.category === source.category &&\n target.name === source.name\n ) {\n const version = this.parseSemverFromUri(specUri);\n if (target.version && version) {\n if (!latestVersion || compareSchemaVersions(version, latestVersion) > 0) {\n latestVersion = version;\n latestUri = specUri;\n }\n }\n }\n }\n\n return latestUri;\n }\n\n /**\n * Resolve URI by trying version candidates from most specific to least specific\n */\n protected resolveVersionUri(uri: uri): uri | null {\n // Handle /latest/ URIs specifically\n if (uri.includes(\"/latest/\")) {\n return this.findLatestVersion(uri);\n }\n\n const candidates = this.generateVersionCandidates(uri);\n\n for (const candidate of candidates) {\n if (this.specs.has(candidate)) {\n return candidate;\n }\n\n // If we hit a /latest/ candidate, resolve it\n if (candidate.includes(\"/latest/\")) {\n const latestUri = this.findLatestVersion(candidate);\n if (latestUri) {\n return latestUri;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Find a conversion path from source to target format using BFS with version resolution\n */\n protected findConversionPath(sourceUri: uri, targetUri: uri): uri[] {\n if (this.isSameSchemaUri(sourceUri, targetUri)) {\n return [sourceUri];\n }\n\n const visited = new Set<uri>();\n const normalizedSource = this.getBaseUri(sourceUri);\n visited.add(normalizedSource);\n\n const queue: Array<[uri, uri[]]> = [[sourceUri, [sourceUri]]];\n\n while (queue.length > 0) {\n const first = queue.shift();\n if (!first) break;\n const [current, path] = first;\n\n const possibleSources: uri[] = [current];\n\n const resolvedCurrent = this.resolveVersionUri(current);\n if (resolvedCurrent && resolvedCurrent !== current) {\n possibleSources.push(resolvedCurrent);\n }\n\n // Also check if there are registered conversions that could resolve TO our current URI\n for (const [registeredSource] of this.conversions) {\n const registeredSourceResolved = this.resolveVersionUri(registeredSource);\n if (registeredSourceResolved === current || registeredSource === current) {\n possibleSources.push(registeredSource);\n }\n }\n\n for (const sourceToCheck of new Set(possibleSources)) {\n const availableConversions = this.conversions.get(sourceToCheck);\n if (!availableConversions) continue;\n\n for (const uri of availableConversions.keys()) {\n if (this.isSameSchemaUri(uri, targetUri)) {\n return [...path, uri];\n }\n\n // Continue BFS\n const normalizedNext = this.getBaseUri(uri);\n if (!visited.has(normalizedNext)) {\n visited.add(normalizedNext);\n queue.push([uri, [...path, uri]]);\n }\n }\n }\n }\n\n return [];\n }\n\n /**\n * Check if a conversion path exists between source and target URIs with version resolution\n */\n public hasConversion(sourceUri: uri, targetUri: uri): boolean {\n // Try exact URIs first\n if (this.conversions.get(sourceUri)?.has(targetUri)) {\n return true;\n }\n\n const resolvedSourceUri = this.resolveVersionUri(sourceUri) || sourceUri;\n const resolvedTargetUri = this.resolveVersionUri(targetUri) || targetUri;\n\n // Try with resolved URIs\n if (this.conversions.get(resolvedSourceUri)?.has(resolvedTargetUri)) {\n return true;\n }\n\n // Check if there's a conversion from the resolved source to any URI that could resolve to our target\n const sourceConversions = this.conversions.get(resolvedSourceUri);\n if (sourceConversions) {\n for (const registeredTargetUri of sourceConversions.keys()) {\n // Check if the registered conversion target resolves to the same URI as our requested target\n const resolvedRegisteredTarget =\n this.resolveVersionUri(registeredTargetUri) || registeredTargetUri;\n if (resolvedRegisteredTarget === resolvedTargetUri) {\n return true;\n }\n }\n }\n\n const conversionPath = this.findConversionPath(resolvedSourceUri, resolvedTargetUri);\n return conversionPath.length > 0;\n }\n\n /**\n * Get a specification by its URI with version resolution\n */\n public getSpec(uri: uri): TSpec | undefined {\n // First try exact match\n const exactMatch = this.specs.get(uri);\n if (exactMatch) {\n return exactMatch;\n }\n\n // Try version resolution\n const resolvedUri = this.resolveVersionUri(uri);\n if (resolvedUri) {\n return this.specs.get(resolvedUri);\n }\n\n return undefined;\n }\n\n /**\n * Convert input through a chain of conversions to reach the target URI with version resolution\n */\n protected convertThroughPath(input: TInput, sourceUri: uri, targetUri: uri): TOutput {\n // Resolve URIs with version fallback\n const resolvedSourceUri = this.resolveVersionUri(sourceUri) || sourceUri;\n const resolvedTargetUri = this.resolveVersionUri(targetUri) || targetUri;\n\n if (resolvedSourceUri === resolvedTargetUri) {\n return input as unknown as TOutput;\n }\n\n // Try direct conversion first with resolved URIs\n const directConversionFn = this.conversions.get(resolvedSourceUri)?.get(resolvedTargetUri);\n if (directConversionFn) {\n return directConversionFn(input);\n }\n\n // If no direct conversion, find a path through intermediate conversions\n const conversionPath = this.findConversionPath(resolvedSourceUri, resolvedTargetUri);\n if (conversionPath.length === 0) {\n throw new Error(`No conversion path found from '${sourceUri}' to '${targetUri}'`);\n }\n\n // Execute the conversion chain with version resolution\n let current = input;\n for (let i = 0; i < conversionPath.length - 1; i++) {\n const fromUri = conversionPath[i];\n const toUri = conversionPath[i + 1];\n\n // Try to find conversion function using version resolution\n let conversionFn = this.conversions.get(fromUri)?.get(toUri);\n\n if (!conversionFn) {\n // Try with resolved URIs\n const resolvedFromUri = this.resolveVersionUri(fromUri) || fromUri;\n const resolvedToUri = this.resolveVersionUri(toUri) || toUri;\n\n conversionFn = this.conversions.get(resolvedFromUri)?.get(resolvedToUri);\n\n if (!conversionFn) {\n // Try to find conversion by checking all registered conversions that could match\n const fromConversions = this.conversions.get(resolvedFromUri);\n if (fromConversions) {\n for (const [registeredToUri, registeredFn] of fromConversions) {\n const resolvedRegisteredTo =\n this.resolveVersionUri(registeredToUri) || registeredToUri;\n if (resolvedRegisteredTo === resolvedToUri) {\n conversionFn = registeredFn;\n break;\n }\n }\n }\n\n // If still not found, check if there are conversions from other URIs that resolve to our fromUri\n if (!conversionFn) {\n for (const [registeredFromUri, conversions] of this.conversions) {\n const resolvedRegisteredFrom =\n this.resolveVersionUri(registeredFromUri) || registeredFromUri;\n if (resolvedRegisteredFrom === resolvedFromUri) {\n for (const [registeredToUri, registeredFn] of conversions) {\n const resolvedRegisteredTo =\n this.resolveVersionUri(registeredToUri) || registeredToUri;\n if (resolvedRegisteredTo === resolvedToUri) {\n conversionFn = registeredFn;\n break;\n }\n }\n if (conversionFn) break;\n }\n }\n }\n }\n }\n\n if (!conversionFn) {\n throw new Error(\n `Missing conversion step from '${fromUri}' to '${toUri}' in conversion path`,\n );\n }\n\n current = conversionFn(current) as unknown as TInput;\n }\n\n return current as unknown as TOutput;\n }\n\n /**\n * Register a conversion function between two URIs\n */\n protected registerConversionFunction(\n sourceUri: uri,\n targetUri: uri,\n conversionFn: (input: TInput) => TOutput,\n ): void {\n if (!this.conversions.has(sourceUri)) {\n this.conversions.set(sourceUri, new Map());\n }\n\n const sourceMap = this.conversions.get(sourceUri);\n if (sourceMap) {\n sourceMap.set(targetUri, conversionFn);\n }\n }\n\n public abstract register(uri: uri, spec: TSpec | specType): TSpec;\n\n protected abstract getSpecName(spec: TSpec): string;\n\n /**\n * Abstract method for creating a clone of the manager\n */\n public abstract clone(): this;\n\n /**\n * Set the parent config reference\n */\n public setParentConfig(config: Config) {\n this.parentConfig = config;\n }\n\n /**\n * Get the parent config reference\n */\n public getParentConfig() {\n return this.parentConfig;\n }\n\n /**\n * Creates interpreter configuration with full context for conversion functions and initializers.\n * Uses parent config if available to provide access to all managers and registrations.\n */\n protected createInterpreterConfig(references: Record<string, any>): {\n references: Record<string, any>;\n config?: Config;\n } {\n if (!this.parentConfig) {\n return { references };\n }\n\n // Use the parent config directly to ensure all registrations are available\n return {\n references,\n config: this.parentConfig,\n };\n }\n}\n","import {\n FunctionsErrorCode,\n InterpreterError,\n isLanguageError,\n serializeError,\n} from \"@interpreter/errors\";\nimport { NumberSymbol, NumberWithUnitSymbol } from \"@interpreter/symbols\";\nimport type { ISymbolType } from \"@src/types\";\nimport type { UnitManager } from \"../unit/manager\";\n\ntype FunctionImpl = (...args: ISymbolType[]) => ISymbolType;\n\n/**\n * Extracts a numeric value from a symbol.\n * Accepts NumberSymbol, NumberWithUnitSymbol, or any symbol with a numeric value.\n */\nfunction extractNumber(arg: ISymbolType, functionName: string): number {\n if (arg === undefined || arg === null) {\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName },\n });\n }\n if (arg instanceof NumberSymbol) return arg.value as number;\n if (arg instanceof NumberWithUnitSymbol) return arg.value as number;\n if (typeof arg.value === \"number\") return arg.value as number;\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName },\n });\n}\n\n/**\n * Applies a function over the numeric value, preserving NumberWithUnitSymbol wrapper.\n */\nfunction over(\n arg: ISymbolType,\n fn: (value: number) => number,\n functionName: string,\n): NumberSymbol | NumberWithUnitSymbol {\n const value = extractNumber(arg, functionName);\n const result = fn(value);\n if (arg instanceof NumberWithUnitSymbol) {\n return new NumberWithUnitSymbol(result, arg.unit);\n }\n return new NumberSymbol(result);\n}\n\n/**\n * Applies a binary function over two numeric values.\n * Preserves the unit from the first argument if it's a NumberWithUnitSymbol.\n */\nfunction overTwo(\n a: ISymbolType,\n b: ISymbolType,\n fn: (aVal: number, bVal: number) => number,\n functionName: string,\n): NumberSymbol | NumberWithUnitSymbol {\n const aVal = extractNumber(a, functionName);\n const bVal = extractNumber(b, functionName);\n const result = fn(aVal, bVal);\n if (a instanceof NumberWithUnitSymbol) {\n return new NumberWithUnitSymbol(result, a.unit);\n }\n return new NumberSymbol(result);\n}\n\n/**\n * Applies a reducer function over multiple numeric values.\n * Preserves the unit from the first NumberWithUnitSymbol argument.\n */\nfunction overMany(\n args: ISymbolType[],\n fn: (nums: number[]) => number,\n functionName: string,\n minArgs?: number,\n): NumberSymbol | NumberWithUnitSymbol {\n if (minArgs !== undefined && args.length < minArgs) {\n throw new InterpreterError(FunctionsErrorCode.REQUIRES_MIN_ARGUMENTS, {\n data: { functionName, minArgs },\n });\n }\n const nums = args.map((arg) => extractNumber(arg, functionName));\n const result = fn(nums);\n const firstUnitArg = args.find((arg) => arg instanceof NumberWithUnitSymbol) as\n | NumberWithUnitSymbol\n | undefined;\n if (firstUnitArg) {\n return new NumberWithUnitSymbol(result, firstUnitArg.unit);\n }\n return new NumberSymbol(result);\n}\n\n/**\n * Creates a sum function with optional unit manager getter for unit conversion.\n * Uses a getter to allow lazy access to the unit manager.\n */\nexport function createSumFunction(getUnitManager?: () => UnitManager | undefined): FunctionImpl {\n return (...args: ISymbolType[]): ISymbolType => {\n if (args.length < 2)\n throw new InterpreterError(FunctionsErrorCode.REQUIRES_MIN_ARGUMENTS, {\n data: { functionName: \"sum\", minArgs: 2 },\n });\n\n const hasUnits = args.some((arg) => arg instanceof NumberWithUnitSymbol);\n\n if (!hasUnits) {\n const nums = args.map((arg) => extractNumber(arg, \"sum\"));\n return new NumberSymbol(nums.reduce((acc, val) => acc + val, 0));\n }\n\n const numericArgs = args.filter(\n (arg) => arg instanceof NumberSymbol || arg instanceof NumberWithUnitSymbol,\n ) as Array<NumberSymbol | NumberWithUnitSymbol>;\n\n if (numericArgs.length !== args.length) {\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName: \"sum\" },\n });\n }\n\n const unitManager = getUnitManager?.();\n if (unitManager) {\n try {\n const converted = unitManager.convertToCommonFormat(numericArgs);\n const sum = converted.reduce((acc, arg) => acc + (arg.value as number), 0);\n\n const firstUnitArg = converted.find(\n (arg) => arg instanceof NumberWithUnitSymbol,\n ) as NumberWithUnitSymbol;\n\n if (firstUnitArg) {\n return new NumberWithUnitSymbol(sum, firstUnitArg.unit);\n }\n return new NumberSymbol(sum);\n } catch (error) {\n throw new InterpreterError(FunctionsErrorCode.UNIT_CONVERSION_FAILED, {\n data: {\n functionName: \"sum\",\n error: isLanguageError(error) ? error : serializeError(error),\n },\n });\n }\n }\n\n // Fallback: sum without conversion\n const firstUnitArg = args.find(\n (arg) => arg instanceof NumberWithUnitSymbol,\n ) as NumberWithUnitSymbol;\n\n const nums = args.map((arg) => extractNumber(arg, \"sum\"));\n const sum = nums.reduce((acc, val) => acc + val, 0);\n\n if (firstUnitArg) {\n return new NumberWithUnitSymbol(sum, firstUnitArg.unit);\n }\n return new NumberSymbol(sum);\n };\n}\n\nexport const mathFunctions: Record<string, FunctionImpl> = {\n min: (...args: ISymbolType[]) => overMany(args, (nums) => Math.min(...nums), \"min\", 1),\n\n max: (...args: ISymbolType[]) => overMany(args, (nums) => Math.max(...nums), \"max\", 1),\n\n mod: (a: ISymbolType, b: ISymbolType) =>\n overTwo(\n a,\n b,\n (aVal, bVal) => {\n if (bVal === 0)\n throw new InterpreterError(FunctionsErrorCode.DIVISION_BY_ZERO, {\n data: { functionName: \"mod\" },\n });\n return ((aVal % bVal) + bVal) % bVal;\n },\n \"mod\",\n ),\n\n average: (...args: ISymbolType[]) =>\n overMany(args, (nums) => nums.reduce((acc, val) => acc + val, 0) / nums.length, \"average\", 1),\n\n round: (arg: ISymbolType) => over(arg, Math.round, \"round\"),\n abs: (arg: ISymbolType) => over(arg, Math.abs, \"abs\"),\n sqrt: (arg: ISymbolType) => over(arg, Math.sqrt, \"sqrt\"),\n floor: (arg: ISymbolType) => over(arg, Math.floor, \"floor\"),\n ceil: (arg: ISymbolType) => over(arg, Math.ceil, \"ceil\"),\n cbrt: (arg: ISymbolType) => over(arg, Math.cbrt, \"cbrt\"),\n sign: (arg: ISymbolType) => new NumberSymbol(Math.sign(extractNumber(arg, \"sign\"))),\n trunc: (arg: ISymbolType) => over(arg, Math.trunc, \"trunc\"),\n exp: (arg: ISymbolType) => over(arg, Math.exp, \"exp\"),\n expm1: (arg: ISymbolType) => over(arg, Math.expm1, \"expm1\"),\n\n pow: (base: ISymbolType, exp: ISymbolType) => overTwo(base, exp, (b, e) => b ** e, \"pow\"),\n\n round_to: (value: ISymbolType, precision?: ISymbolType) => {\n const precisionValue = precision !== undefined ? extractNumber(precision, \"round_to\") : 0;\n const fn =\n precisionValue === 0\n ? Math.round\n : (v: number) => {\n const factor = 10 ** precisionValue;\n return Math.round(v * factor) / factor;\n };\n return over(value, fn, \"round_to\");\n },\n\n hypot: (...args: ISymbolType[]) => overMany(args, (nums) => Math.hypot(...nums), \"hypot\", 1),\n\n remainder: (a: ISymbolType, b: ISymbolType) =>\n overTwo(\n a,\n b,\n (aVal, bVal) => {\n if (bVal === 0)\n throw new InterpreterError(FunctionsErrorCode.DIVISION_BY_ZERO, {\n data: { functionName: \"remainder\" },\n });\n return aVal % bVal;\n },\n \"remainder\",\n ),\n\n // Trigonometric functions\n sin: (arg: ISymbolType) => over(arg, Math.sin, \"sin\"),\n cos: (arg: ISymbolType) => over(arg, Math.cos, \"cos\"),\n tan: (arg: ISymbolType) => over(arg, Math.tan, \"tan\"),\n atan: (arg: ISymbolType) => over(arg, Math.atan, \"atan\"),\n\n asin: (arg: ISymbolType) => {\n const value = extractNumber(arg, \"asin\");\n if (value < -1 || value > 1)\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: { functionName: \"asin\", constraint: \"between -1 and 1\" },\n });\n return over(arg, Math.asin, \"asin\");\n },\n\n acos: (arg: ISymbolType) => {\n const value = extractNumber(arg, \"acos\");\n if (value < -1 || value > 1)\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: { functionName: \"acos\", constraint: \"between -1 and 1\" },\n });\n return over(arg, Math.acos, \"acos\");\n },\n\n atan2: (y: ISymbolType, x: ISymbolType): NumberSymbol => {\n const yVal = extractNumber(y, \"atan2\");\n const xVal = extractNumber(x, \"atan2\");\n return new NumberSymbol(Math.atan2(yVal, xVal));\n },\n\n // Hyperbolic functions\n sinh: (arg: ISymbolType) => over(arg, Math.sinh, \"sinh\"),\n cosh: (arg: ISymbolType) => over(arg, Math.cosh, \"cosh\"),\n tanh: (arg: ISymbolType) => over(arg, Math.tanh, \"tanh\"),\n asinh: (arg: ISymbolType) => over(arg, Math.asinh, \"asinh\"),\n\n acosh: (arg: ISymbolType) => {\n const value = extractNumber(arg, \"acosh\");\n if (value < 1) {\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: {\n functionName: \"acosh\",\n constraint: \"greater than or equal to 1\",\n },\n });\n }\n return over(arg, Math.acosh, \"acosh\");\n },\n\n atanh: (arg: ISymbolType) => {\n const value = extractNumber(arg, \"atanh\");\n if (value <= -1 || value >= 1) {\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: {\n functionName: \"atanh\",\n constraint: \"between -1 and 1 (exclusive)\",\n },\n });\n }\n return over(arg, Math.atanh, \"atanh\");\n },\n\n // Logarithmic functions\n log: (arg: ISymbolType, base?: ISymbolType): NumberSymbol | NumberWithUnitSymbol => {\n const value = extractNumber(arg, \"log\");\n if (value <= 0)\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: { functionName: \"log\", constraint: \"positive\" },\n });\n if (base === undefined) {\n return over(arg, Math.log, \"log\");\n }\n const baseValue = extractNumber(base, \"log\");\n if (baseValue <= 0 || baseValue === 1)\n throw new InterpreterError(FunctionsErrorCode.INVALID_BASE, {\n data: {\n functionName: \"log\",\n constraint: \"positive and not equal to 1\",\n },\n });\n return over(arg, (v) => Math.log(v) / Math.log(baseValue), \"log\");\n },\n\n ln: (arg: ISymbolType) => {\n const value = extractNumber(arg, \"ln\");\n if (value <= 0) {\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: { functionName: \"ln\", constraint: \"positive\" },\n });\n }\n return over(arg, Math.log, \"ln\");\n },\n\n log10: (arg: ISymbolType) => {\n const value = extractNumber(arg, \"log10\");\n if (value <= 0) {\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: { functionName: \"log10\", constraint: \"positive\" },\n });\n }\n return over(arg, Math.log10, \"log10\");\n },\n\n log2: (arg: ISymbolType) => {\n const value = extractNumber(arg, \"log2\");\n if (value <= 0) {\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: { functionName: \"log2\", constraint: \"positive\" },\n });\n }\n return over(arg, Math.log2, \"log2\");\n },\n\n log1p: (arg: ISymbolType) => {\n const value = extractNumber(arg, \"log1p\");\n if (value < -1) {\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: {\n functionName: \"log1p\",\n constraint: \"greater than or equal to -1\",\n },\n });\n }\n return over(arg, Math.log1p, \"log1p\");\n },\n\n // Constants\n pi: (): NumberSymbol => new NumberSymbol(Math.PI),\n};\n","// Function-kind schema shim.\n//\n// Re-exports the typed shapes from @tokens-studio/schema-validation so\n// that the rest of the interpreter can continue importing from\n// \"@interpreter/config/managers/functions/schema\". The schema-validation\n// package is the cross-language source of truth for the schema language\n// (TS / Go / Ruby).\n//\n// The historical alias `FunctionSpecificationSchema` is preserved for\n// consumer code that still uses the callable form.\n\nimport { Fn, type z } from \"@tokens-studio/schema-validation\";\n\n// Types -----------------------------------------------------------------------\n\nexport type FunctionSpecification = Fn.FunctionSpecification;\n\n// Validation API --------------------------------------------------------------\n//\n// Explicit type annotations on these re-exports are required because\n// tsup's DTS bundling (rollup-plugin-dts) can't construct a public path\n// for the internal types that transitively appear in the inferred\n// return types of `Fn.parseFunctionSpec` etc. Without the annotation\n// the DTS emit fails with TS4023 / TS2742.\n\n/**\n * Validate and parse a JSON value as a function specification. Throws a\n * `ZodError` with a structured field-by-field error report on failure.\n *\n * Strictness:\n * - Top level: unknown fields are tolerated (silently stripped).\n * - Nested shapes (FunctionInput, FunctionScriptBlock): unknown\n * fields are rejected.\n */\nexport const parseFunctionSpec: (json: unknown) => FunctionSpecification = Fn.parseFunctionSpec;\n\n/**\n * Like `parseFunctionSpec` but returns a `{ success, data | error }`\n * discriminated union instead of throwing.\n */\nexport const safeParseFunctionSpec: (json: unknown) => z.ZodSafeParseResult<FunctionSpecification> =\n Fn.safeParseFunctionSpec;\n\n/**\n * Historical compatibility alias for `parseFunctionSpec`. Wrap a call in\n * a `try { ... } catch (err) { ... }` to handle validation failures.\n *\n * @deprecated Prefer `parseFunctionSpec` / `safeParseFunctionSpec`.\n */\nexport const FunctionSpecificationSchema: (json: unknown) => FunctionSpecification =\n Fn.parseFunctionSpec;\n\n// Helpers ---------------------------------------------------------------------\n\n/** Lowercased lookup name for a function spec. */\nexport const specName: (spec: FunctionSpecification) => string = Fn.specName;\n","import {\n FunctionsErrorCode,\n InterpreterError,\n isLanguageError,\n serializeError,\n} from \"@interpreter/errors\";\nimport { Interpreter } from \"@interpreter/interpreter\";\nimport { Lexer } from \"@interpreter/lexer\";\nimport { Parser } from \"@interpreter/parser\";\nimport { BooleanSymbol, ListSymbol, NumberSymbol, StringSymbol } from \"@interpreter/symbols\";\nimport type { ISymbolType, Token } from \"@src/types\";\nimport { ZodError } from \"@tokens-studio/schema-validation\";\nimport { BaseManager } from \"../base-manager\";\n\nimport { createSumFunction, mathFunctions } from \"./builtin/math\";\n\nimport { type FunctionSpecification, parseFunctionSpec } from \"./schema\";\n\ntype functionName = string;\ntype FunctionImpl = (...args: ISymbolType[]) => ISymbolType;\n\nexport class FunctionsManager extends BaseManager<\n FunctionSpecification,\n ISymbolType[],\n ISymbolType\n> {\n private functionMap: Map<functionName, FunctionImpl> = new Map();\n\n constructor() {\n super();\n this.setupBuiltinFunctions();\n }\n\n protected getSpecName(spec: FunctionSpecification): string {\n return spec.keyword;\n }\n\n public clone(): this {\n const functionsManager = new FunctionsManager();\n functionsManager.specs = this.specs;\n functionsManager.specTypes = this.specTypes;\n functionsManager.functionMap = this.functionMap;\n functionsManager.conversions = this.conversions;\n return functionsManager as this;\n }\n\n public register(name: functionName, spec: FunctionSpecification | string): FunctionSpecification {\n let parsedSpec: FunctionSpecification;\n\n try {\n const input = typeof spec === \"string\" ? JSON.parse(spec) : spec;\n parsedSpec = parseFunctionSpec(input);\n } catch (err) {\n const summary =\n err instanceof ZodError\n ? err.issues.map((i) => `${i.path.join(\".\") || \"<root>\"}: ${i.message}`).join(\"; \")\n : err instanceof Error\n ? err.message\n : String(err);\n throw new Error(`Invalid function specification for ${name}: ${summary}`);\n }\n\n const functionName = parsedSpec.keyword.toLowerCase();\n this.specs.set(functionName, parsedSpec);\n this.specTypes.set(parsedSpec.name.toLowerCase(), functionName);\n\n // Register the dynamic function implementation\n this.registerDynamicFunction(parsedSpec);\n\n return parsedSpec;\n }\n\n private setupBuiltinFunctions(): void {\n // Register all math functions\n for (const [name, impl] of Object.entries(mathFunctions)) {\n this.registerFunction(name, impl);\n }\n\n // Register sum with unit manager access (lazy getter for deferred resolution)\n this.registerFunction(\n \"sum\",\n createSumFunction(() => this.parentConfig?.unitManager),\n );\n\n // Utility functions\n this.registerFunction(\n \"parse_int\",\n (strSymbol: ISymbolType, baseSymbol?: ISymbolType): NumberSymbol => {\n if (!(strSymbol instanceof StringSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"parse_int\", expectedType: \"string\", argumentPosition: \"first\" },\n });\n const base = baseSymbol instanceof NumberSymbol ? (baseSymbol.value as number) : 10;\n const parsed = Number.parseInt(strSymbol.value as string, base);\n if (Number.isNaN(parsed))\n throw new InterpreterError(FunctionsErrorCode.PARSE_ERROR, {\n data: { functionName: \"parse_int\", value: String(strSymbol.value), base },\n });\n return new NumberSymbol(parsed);\n },\n );\n\n this.registerFunction(\"linear-gradient\", (...args: ISymbolType[]): StringSymbol => {\n const stringArgs = args.map((arg) => arg.toString()).join(\", \");\n return new StringSymbol(`linear-gradient(${stringArgs})`);\n });\n\n this.registerFunction(\"type\", (arg: ISymbolType): StringSymbol => {\n const typeName = arg.getTypeName();\n\n if (typeName.includes(\".\")) {\n const parts = typeName.split(\".\");\n return new StringSymbol(parts[parts.length - 1].toLowerCase());\n }\n\n return new StringSymbol(typeName.toLowerCase());\n });\n\n // Type predicate functions\n this.registerFunction(\"is_null\", (arg: ISymbolType): BooleanSymbol => {\n return new BooleanSymbol(arg.type === \"Null\");\n });\n\n this.registerFunction(\"is_number\", (arg: ISymbolType): BooleanSymbol => {\n return new BooleanSymbol(arg.type === \"Number\");\n });\n\n this.registerFunction(\"is_string\", (arg: ISymbolType): BooleanSymbol => {\n return new BooleanSymbol(arg.type === \"String\");\n });\n\n this.registerFunction(\"is_boolean\", (arg: ISymbolType): BooleanSymbol => {\n return new BooleanSymbol(arg.type === \"Boolean\");\n });\n\n this.registerFunction(\"is_list\", (arg: ISymbolType): BooleanSymbol => {\n return new BooleanSymbol(arg.type === \"List\");\n });\n\n this.registerFunction(\"is_number_with_unit\", (arg: ISymbolType): BooleanSymbol => {\n return new BooleanSymbol(arg.type === \"NumberWithUnit\");\n });\n\n this.registerFunction(\"is_dictionary\", (arg: ISymbolType): BooleanSymbol => {\n return new BooleanSymbol(arg.type === \"Dictionary\");\n });\n\n this.registerFunction(\"is_token\", (arg: ISymbolType): BooleanSymbol => {\n return new BooleanSymbol(arg.type === \"Token\");\n });\n\n this.registerFunction(\"is_color\", (arg: ISymbolType): BooleanSymbol => {\n return new BooleanSymbol(arg.type === \"Color\");\n });\n\n // range(count) or range(start, end) — generate list of integers\n this.registerFunction(\"range\", (...args: ISymbolType[]): ListSymbol => {\n if (args.length < 1 || args.length > 2) {\n throw new InterpreterError(FunctionsErrorCode.REQUIRES_MIN_ARGUMENTS, {\n data: { functionName: \"range\", minArgs: 1 },\n });\n }\n\n let start: number;\n let end: number;\n\n if (args.length === 1) {\n // range(count) → [0, 1, ..., count-1]\n if (!(args[0] instanceof NumberSymbol)) {\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"range\", expectedType: \"Number\", argumentPosition: \"first\" },\n });\n }\n const v = args[0].value as number;\n if (v !== Math.trunc(v) || Number.isNaN(v) || !Number.isFinite(v) || v < 0 || v > 1e6) {\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: {\n functionName: \"range\",\n constraint: `count must be a non-negative integer <= 1000000, got ${v}`,\n },\n });\n }\n start = 0;\n end = v;\n } else {\n // range(start, end) → [start, start+1, ..., end-1]\n if (!(args[0] instanceof NumberSymbol)) {\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"range\", expectedType: \"Number\", argumentPosition: \"first\" },\n });\n }\n if (!(args[1] instanceof NumberSymbol)) {\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"range\", expectedType: \"Number\", argumentPosition: \"second\" },\n });\n }\n const sv = args[0].value as number;\n const ev = args[1].value as number;\n if (\n sv !== Math.trunc(sv) ||\n ev !== Math.trunc(ev) ||\n Number.isNaN(sv) ||\n Number.isNaN(ev) ||\n !Number.isFinite(sv) ||\n !Number.isFinite(ev)\n ) {\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: {\n functionName: \"range\",\n constraint: `arguments must be integers, got ${sv} and ${ev}`,\n },\n });\n }\n if (ev - sv > 1e6) {\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: {\n functionName: \"range\",\n constraint: `size exceeds limit (1000000), got ${ev - sv}`,\n },\n });\n }\n start = sv;\n end = ev;\n }\n\n if (end < start) {\n return new ListSymbol([], false);\n }\n\n const elements: NumberSymbol[] = [];\n for (let i = start; i < end; i++) {\n elements.push(new NumberSymbol(i));\n }\n return new ListSymbol(elements, false);\n });\n }\n\n private registerFunction(name: string, impl: FunctionImpl): void {\n this.functionMap.set(name.toLowerCase(), impl);\n }\n\n private registerDynamicFunction(spec: FunctionSpecification): void {\n const functionName = spec.keyword.toLowerCase();\n const script = spec.script.script;\n\n const impl: FunctionImpl = (...args: ISymbolType[]): ISymbolType => {\n try {\n // Create a config instance for the dynamic function execution\n const config = this.parentConfig?.clone();\n if (!config) {\n throw new InterpreterError(FunctionsErrorCode.NO_CONFIG_AVAILABLE, {\n data: { functionName },\n });\n }\n\n // Parse and execute the script\n const lexer = new Lexer(script);\n const ast = new Parser(lexer).parse();\n const interpreter = new Interpreter(ast, {\n references: { input: args },\n config,\n });\n\n const result = interpreter.interpret();\n if (result === null) {\n throw new InterpreterError(FunctionsErrorCode.FUNCTION_RETURNED_NULL, {\n data: { functionName },\n });\n }\n\n // Handle string results by converting them to StringSymbol\n if (typeof result === \"string\") {\n return new StringSymbol(result);\n }\n\n return result;\n } catch (error) {\n throw new InterpreterError(FunctionsErrorCode.EXECUTION_ERROR, {\n data: {\n functionName,\n error: isLanguageError(error) ? error : serializeError(error),\n },\n });\n }\n };\n\n this.functionMap.set(functionName, impl);\n }\n\n public getFunction(name: string): FunctionImpl | undefined {\n return this.functionMap.get(name.toLowerCase());\n }\n\n public hasFunction(name: string): boolean {\n return this.functionMap.has(name.toLowerCase());\n }\n\n public getFunctionNames(): string[] {\n return Array.from(this.functionMap.keys());\n }\n\n public getFunctionSchemas(): Map<string, FunctionSpecification> {\n return this.specs;\n }\n\n /**\n * Validate that a function call has the correct number of arguments\n * based on its schema spec. Only validates schema-registered functions\n * (not builtins which handle their own argument validation).\n */\n public validateFunctionArgs(name: string, args: ISymbolType[], token?: Token): void {\n const fnName = name.toLowerCase();\n const spec = this.specs.get(fnName);\n\n if (!spec?.input?.properties) return;\n\n const requiredCount = Object.values(spec.input.properties).filter(\n (prop: any) => !prop?.optional,\n ).length;\n if (args.length < requiredCount) {\n throw new InterpreterError(FunctionsErrorCode.REQUIRES_MIN_ARGUMENTS, {\n token,\n data: { functionName: name, minArgs: requiredCount },\n });\n }\n }\n}\n","// Unit-kind schema shim.\n//\n// Re-exports the typed shapes from @tokens-studio/schema-validation so\n// that the rest of the interpreter can continue importing from\n// \"@interpreter/config/managers/unit/schema\". The schema-validation\n// package is the cross-language source of truth for the schema language\n// (TS / Go / Ruby).\n//\n// Aliases preserve the historical interpreter names (`ScriptBlock`,\n// `Conversion`, `UnitSpecificationSchema`, `validUnitTypes`) so consumer\n// code does not have to change.\n\nimport { Unit, type z } from \"@tokens-studio/schema-validation\";\n\n// Types -----------------------------------------------------------------------\n\nexport type UnitSpecification = Unit.UnitSpecification;\nexport type Conversion = Unit.Conversion;\nexport type ScriptBlock = Unit.UnitScriptBlock;\n\n// Validation API --------------------------------------------------------------\n//\n// Explicit type annotations on these re-exports are required because\n// tsup's DTS bundling (rollup-plugin-dts) can't construct a public path\n// for the internal types that transitively appear in the inferred\n// return types of `Unit.parseUnitSpec` etc. Without the annotation\n// the DTS emit fails with TS4023 / TS2742.\n\n/**\n * Validate and parse a JSON value as a unit specification. Throws a\n * `ZodError` with a structured field-by-field error report on failure.\n *\n * Strictness:\n * - Top level: unknown fields are tolerated (silently stripped).\n * - Nested shapes (Conversion, UnitScriptBlock): unknown fields are\n * rejected.\n *\n * Note: unit Conversions have NO `lossless` field — unit conversions\n * are mathematical and treated as information-preserving. This is a\n * deliberate cross-kind asymmetry with color Conversions.\n */\nexport const parseUnitSpec: (json: unknown) => UnitSpecification = Unit.parseUnitSpec;\n\n/**\n * Like `parseUnitSpec` but returns a `{ success, data | error }`\n * discriminated union instead of throwing.\n */\nexport const safeParseUnitSpec: (json: unknown) => z.ZodSafeParseResult<UnitSpecification> =\n Unit.safeParseUnitSpec;\n\n/**\n * Historical compatibility alias for `parseUnitSpec`. Wrap a call in a\n * `try { ... } catch (err) { ... }` to handle validation failures.\n *\n * @deprecated Prefer `parseUnitSpec` / `safeParseUnitSpec`.\n */\nexport const UnitSpecificationSchema: (json: unknown) => UnitSpecification = Unit.parseUnitSpec;\n\n// Constants -------------------------------------------------------------------\n\n/**\n * The set of valid `type` values for a unit specification.\n *\n * Hand-spelled because tsup's DTS bundling drops the value side of\n * namespaced re-exports — `Unit.UnitType` is reachable as a TYPE but\n * not as the underlying zod enum value.\n */\nexport const validUnitTypes = [\"absolute\", \"relative\"] as const;\n\n// Helpers ---------------------------------------------------------------------\n\n/** Lowercased lookup name for a unit spec. */\nexport const specName: (spec: UnitSpecification) => string = Unit.specName;\n","import {\n InterpreterError,\n isLanguageError,\n serializeError,\n UnitErrorCode,\n} from \"@interpreter/errors\";\nimport { parseExpression } from \"@interpreter/parser\";\nimport { NumberSymbol, NumberWithUnitSymbol } from \"@interpreter/symbols\";\nimport { Interpreter } from \"@src/lib\";\nimport { buildSchemaUri, parseVersionString } from \"@src/utils/schema-uri\";\nimport { ZodError } from \"@tokens-studio/schema-validation\";\nimport { BaseManager } from \"../base-manager\";\nimport { parseUnitSpec, specName, type UnitSpecification } from \"./schema\";\n\n// Types -----------------------------------------------------------------------\n\ntype uriType = string;\ntype unitKey = string;\ntype Specs = Map<uriType, UnitSpecification>;\n\n// Default Units ---------------------------------------------------------------\n\nconst PIXEL_UNIT = buildSchemaUri({\n category: \"core\",\n name: \"px-unit\",\n version: parseVersionString(\"0\"),\n});\n\nconst defaultUnitSpecs: Specs = new Map([\n [\n buildSchemaUri({ category: \"core\", name: \"seconds-unit\", version: parseVersionString(\"0\") }),\n {\n name: \"seconds\",\n type: \"absolute\",\n keyword: \"s\",\n description: \"A unit of time equal to one second.\",\n conversions: [],\n },\n ],\n [\n PIXEL_UNIT,\n {\n name: \"pixel\",\n type: \"absolute\",\n keyword: \"px\",\n description: \"A pixel unit, typically used in digital displays.\",\n conversions: [],\n },\n ],\n [\n buildSchemaUri({ category: \"core\", name: \"rem-unit\", version: parseVersionString(\"0\") }),\n {\n name: \"root em\",\n type: \"absolute\",\n keyword: \"rem\",\n description: \"A root em unit, relative to the root font size.\",\n conversions: [\n {\n source: \"$self\",\n target: PIXEL_UNIT,\n script: {\n script: \"return ({input} * 16)px;\",\n },\n description: \"Convert rem to pixel based on a root font size of 16px.\",\n },\n {\n source: PIXEL_UNIT,\n target: \"$self\",\n script: {\n script: \"return ({input} / 16)rem;\",\n },\n description: \"Convert pixel to rem based on a root font size of 16px.\",\n },\n ],\n },\n ],\n [\n \"https://schema.tokenscript.dev.gcp.tokens.studio/api/v1/core/percent-unit/0/\",\n {\n name: \"percent\",\n type: \"relative\",\n keyword: \"%\",\n description: \"A percentage unit, representing a fraction of 100.\",\n to_absolute: {\n script: \"return {other_value} * ({relative_value} / 100);\",\n },\n conversions: [],\n },\n ],\n]);\n\n// Unit Manager ----------------------------------------------------------------\n\nexport class UnitManager extends BaseManager<\n UnitSpecification,\n NumberWithUnitSymbol,\n NumberWithUnitSymbol\n> {\n private unitKeywords: Map<unitKey, uriType> = new Map();\n\n constructor(defaultSpecs = defaultUnitSpecs) {\n super();\n for (const [uri, spec] of defaultSpecs) {\n this.register(uri, spec);\n }\n }\n\n protected getSpecName(spec: UnitSpecification): string {\n return specName(spec);\n }\n\n /**\n * Creates a clone of this class to be passed down to initializers and conversion functions\n * Links properties to the parent config.\n */\n public clone(): this {\n const unitManager = new UnitManager(new Map());\n unitManager.specs = this.specs;\n unitManager.specTypes = this.specTypes;\n unitManager.conversions = this.conversions;\n unitManager.unitKeywords = this.unitKeywords;\n return unitManager as this;\n }\n\n public registerConversions(uri: uriType, spec: UnitSpecification) {\n spec.conversions?.forEach((conversion) => {\n // $self replacement\n const sourceUri = conversion.source === \"$self\" ? uri : conversion.source;\n const targetUri = conversion.target === \"$self\" ? uri : conversion.target;\n\n const { ast } = parseExpression(conversion.script.script);\n const fn = (unit: NumberWithUnitSymbol): NumberWithUnitSymbol => {\n const config = this.createInterpreterConfig({ input: unit });\n const result = new Interpreter(ast, config).interpret();\n if (!(result instanceof NumberWithUnitSymbol)) {\n throw new InterpreterError(UnitErrorCode.CONVERSION_CRASHED, {\n data: { error: \"Unit conversion function must return a NumberWithUnitSymbol\" },\n });\n }\n return result as NumberWithUnitSymbol;\n };\n\n this.registerConversionFunction(sourceUri, targetUri, fn);\n });\n }\n\n public register(uri: uriType, spec: UnitSpecification | string): UnitSpecification {\n let parsedSpec: UnitSpecification;\n\n try {\n const input = typeof spec === \"string\" ? JSON.parse(spec) : spec;\n parsedSpec = parseUnitSpec(input);\n } catch (err) {\n const summary =\n err instanceof ZodError\n ? err.issues.map((i) => `${i.path.join(\".\") || \"<root>\"}: ${i.message}`).join(\"; \")\n : err instanceof Error\n ? err.message\n : String(err);\n const jsonSuffix = typeof spec === \"string\" ? `\\n\\nJson:\\n${spec}` : \"\";\n throw new Error(`Invalid unit specification for URI ${uri}: ${summary}${jsonSuffix}`);\n }\n\n this.specs.set(uri, parsedSpec);\n this.specTypes.set(specName(parsedSpec), uri);\n this.unitKeywords.set(parsedSpec.keyword.toUpperCase(), uri);\n\n this.registerConversions(uri, parsedSpec);\n\n return parsedSpec;\n }\n\n public getSpecByKeyword(keyword: unitKey): UnitSpecification | undefined {\n const uri = this.unitKeywords.get(keyword.toUpperCase());\n if (!uri) return;\n return this.getSpec(uri);\n }\n\n public getUriByKeyword(keyword: unitKey): string | undefined {\n return this.unitKeywords.get(keyword.toUpperCase());\n }\n\n public convertTo(unit: NumberWithUnitSymbol, targetUri: uriType): NumberWithUnitSymbol {\n const sourceUri = this.getUriByKeyword(unit.unit);\n if (!sourceUri) {\n throw new InterpreterError(UnitErrorCode.SOURCE_URI_NOT_FOUND, {\n data: { unit: unit.unit },\n });\n }\n\n try {\n return this.convertThroughPath(unit, sourceUri, targetUri);\n } catch (error) {\n throw new InterpreterError(UnitErrorCode.CONVERSION_CRASHED, {\n data: {\n error: isLanguageError(error) ? error : serializeError(error),\n },\n });\n }\n }\n\n private isOneNumberRelative(inputs: Array<NumberSymbol | NumberWithUnitSymbol>): boolean {\n let relativeCount = 0;\n for (const input of inputs) {\n if (input instanceof NumberWithUnitSymbol) {\n const spec = this.getSpecByKeyword(input.unit);\n if (spec?.type === \"relative\") {\n relativeCount++;\n }\n }\n }\n return relativeCount === 1;\n }\n\n private convertRelative(\n numbers: Array<NumberSymbol | NumberWithUnitSymbol>,\n ): Array<NumberSymbol | NumberWithUnitSymbol> {\n if (numbers.length !== 2) {\n throw new InterpreterError(UnitErrorCode.RELATIVE_REQUIRES_TWO_NUMBERS);\n }\n\n let relativeNum: NumberWithUnitSymbol | null = null;\n let baseNum: NumberSymbol | NumberWithUnitSymbol | null = null;\n let relativeIndex = -1;\n\n for (let i = 0; i < numbers.length; i++) {\n const num = numbers[i];\n if (num instanceof NumberWithUnitSymbol) {\n const spec = this.getSpecByKeyword(num.unit);\n if (spec?.type === \"relative\") {\n if (relativeNum !== null) {\n // Multiple relative numbers - return as is\n return numbers;\n }\n relativeNum = num;\n relativeIndex = i;\n } else {\n baseNum = num;\n }\n } else {\n baseNum = num;\n }\n }\n\n if (!relativeNum || !baseNum) {\n return numbers;\n }\n\n const spec = this.getSpecByKeyword(relativeNum.unit);\n if (!spec?.to_absolute) {\n throw new InterpreterError(UnitErrorCode.NO_TO_ABSOLUTE_SCRIPT, {\n data: { unit: relativeNum.unit },\n });\n }\n\n const { ast } = parseExpression(spec.to_absolute.script);\n const relativeValueSymbol = new NumberSymbol(relativeNum.value as number);\n const otherValueSymbol = new NumberSymbol(baseNum.value as number);\n const result = new Interpreter(ast, {\n references: {\n relative_value: relativeValueSymbol,\n other_value: otherValueSymbol,\n },\n }).interpret();\n\n let convertedValue: number;\n if (result instanceof NumberSymbol) {\n convertedValue = result.value as number;\n } else if (typeof result === \"number\") {\n convertedValue = result;\n } else {\n throw new InterpreterError(UnitErrorCode.TO_ABSOLUTE_MUST_RETURN_NUMBER);\n }\n\n // Convert to int if it's a whole number\n if (Number.isInteger(convertedValue)) {\n convertedValue = Math.trunc(convertedValue);\n }\n\n let convertedNum: NumberSymbol | NumberWithUnitSymbol;\n if (baseNum instanceof NumberWithUnitSymbol) {\n convertedNum = new NumberWithUnitSymbol(convertedValue, baseNum.unit);\n } else {\n convertedNum = new NumberSymbol(convertedValue);\n }\n\n const resultNumbers = [...numbers];\n resultNumbers[relativeIndex] = convertedNum;\n return resultNumbers;\n }\n\n public convertToCommonFormat(\n inputs: Array<NumberSymbol | NumberWithUnitSymbol>,\n ): Array<NumberSymbol | NumberWithUnitSymbol> {\n if (inputs.length === 0) {\n return [];\n }\n\n const numberWithUnits = inputs.filter(\n (inp) => inp instanceof NumberWithUnitSymbol,\n ) as NumberWithUnitSymbol[];\n\n if (numberWithUnits.length < 1) {\n return inputs;\n }\n\n const isRelative = this.isOneNumberRelative(inputs);\n if (isRelative) {\n if (inputs.length > 2) {\n throw new InterpreterError(UnitErrorCode.CANNOT_CONVERT_MULTIPLE_RELATIVE);\n }\n return this.convertRelative(inputs);\n }\n\n // Find unique units from the inputs\n const uniqueUnits = Array.from(new Set(numberWithUnits.map((inp) => inp.unit.toUpperCase())));\n\n const conversionResults: Record<string, Array<NumberSymbol | NumberWithUnitSymbol>> = {};\n\n for (const unit of uniqueUnits) {\n const unitUri = this.getUriByKeyword(unit);\n if (!unitUri) continue;\n\n conversionResults[unitUri] = [];\n let canConvert = true;\n\n for (const inp of inputs) {\n if (!(inp instanceof NumberWithUnitSymbol)) {\n conversionResults[unitUri].push(inp);\n continue;\n }\n\n const inputUri = this.getUriByKeyword(inp.unit);\n if (!inputUri) {\n canConvert = false;\n break;\n }\n\n if (inputUri === unitUri) {\n conversionResults[unitUri].push(inp);\n continue;\n }\n\n try {\n const result = this.convertThroughPath(inp, inputUri, unitUri);\n conversionResults[unitUri].push(result);\n } catch {\n canConvert = false;\n break;\n }\n }\n\n if (!canConvert) {\n delete conversionResults[unitUri];\n }\n }\n\n // Find the unit with the maximum absolute value\n const maxPerUri: Record<string, number> = {};\n for (const [uri, results] of Object.entries(conversionResults)) {\n if (results.length === 0) continue;\n const maxValue = Math.max(\n ...results.map((result) => Math.abs((result.value as number) || 0)),\n );\n maxPerUri[uri] = maxValue;\n }\n\n if (Object.keys(maxPerUri).length === 0) {\n throw new InterpreterError(UnitErrorCode.NO_VALID_CONVERSION_PATH);\n }\n\n const commonUnitUri = Object.keys(maxPerUri).reduce((a, b) =>\n maxPerUri[a] > maxPerUri[b] ? a : b,\n );\n\n return conversionResults[commonUnitUri] || [];\n }\n}\n","import { attributesToString, type ReassignNode } from \"@interpreter/ast\";\nimport {\n ColorErrorCode,\n InterpreterError,\n isLanguageError,\n serializeError,\n} from \"@interpreter/errors\";\nimport { parseExpression } from \"@interpreter/parser\";\nimport { ColorSymbol, type dynamicColorValue, typeEquals } from \"@interpreter/symbols\";\nimport { ensureValidAlpha, formatHex8, isTransparent } from \"@interpreter/utils/color\";\nimport { Interpreter } from \"@src/lib\";\nimport type { ISymbolType } from \"@src/types\";\nimport { buildSchemaUri, parseVersionString } from \"@src/utils/schema-uri\";\nimport { ZodError } from \"@tokens-studio/schema-validation\";\nimport { BaseManager } from \"../base-manager\";\nimport { type ColorSpecification, parseColorSpec, specName, validSchemaTypes } from \"./schema\";\n\n// Types -----------------------------------------------------------------------\n\ntype uriType = string;\n\ntype colorName = string;\n\ntype Specs = Map<uriType, ColorSpecification>;\n\ninterface FormatColorOptions {\n decimalPlaces?: number;\n removeTrailingZeros?: boolean;\n}\n\n// Defaults --------------------------------------------------------------------\n\nexport const defaultTypeSpecs: Specs = new Map([\n [\n buildSchemaUri({ category: \"core\", name: \"hex-color\", version: parseVersionString(\"0\") }),\n {\n name: \"Hex\",\n type: \"color\",\n description: \"A color in hex format, e.g. #ff0000\",\n schema: {\n type: \"object\",\n properties: {\n value: {\n type: \"string\",\n },\n },\n },\n initializers: [\n {\n title: \"Hex Color Initializer\",\n keyword: \"hex\",\n script: {\n type: \"https://schema.tokenscript.dev.gcp.tokens.studio/api/v1/core/tokenscript/0/initializer\",\n script: \"variable c: Color.Hex;\\n c.value = {input};\\nreturn c;\",\n },\n },\n ],\n conversions: [],\n },\n ],\n]);\n\n// ColorManager ----------------------------------------------------------------\n\nexport class ColorManager extends BaseManager<ColorSpecification, ColorSymbol, ColorSymbol> {\n private initializers: Map<colorName, (args: Array<ISymbolType>) => ColorSymbol> = new Map();\n\n constructor(defaultSpecs = defaultTypeSpecs) {\n super();\n for (const [uri, spec] of defaultSpecs) {\n this.register(uri, spec);\n }\n }\n\n protected getSpecName(spec: ColorSpecification): string {\n return specName(spec);\n }\n\n /**\n * Creates a clone of this class to be passed down to initializers and conversion functions\n * Links properties to the parent config.\n */\n public clone(): this {\n const colorManager = new ColorManager(new Map());\n colorManager.specs = this.specs;\n colorManager.specTypes = this.specTypes;\n colorManager.initializers = this.initializers;\n colorManager.conversions = this.conversions;\n return colorManager as this;\n }\n\n public registerRootInitializers(_uri: uriType, spec: ColorSpecification) {\n spec.initializers.forEach((spec) => {\n try {\n const { ast } = parseExpression(spec.script.script);\n const fn = (args: Array<ISymbolType>): ColorSymbol => {\n const config = this.createInterpreterConfig({ input: args });\n const result = new Interpreter(ast, config).interpret();\n if (!(result instanceof ColorSymbol)) {\n throw new InterpreterError(ColorErrorCode.INITIALIZER_CRASHED);\n }\n return result as ColorSymbol;\n };\n this.initializers.set(spec.keyword.toLowerCase(), fn);\n } catch (error) {\n throw new InterpreterError(ColorErrorCode.INITIALIZER_CONSTRUCT_FAILED, {\n data: {\n error: isLanguageError(error) ? error : serializeError(error),\n },\n });\n }\n });\n }\n\n public registerConversions(uri: uriType, spec: ColorSpecification) {\n spec.conversions.forEach((conversion) => {\n // $self replacement\n const sourceUri = conversion.source === \"$self\" ? uri : conversion.source;\n const targetUri = conversion.target === \"$self\" ? uri : conversion.target;\n\n const { ast } = parseExpression(conversion.script.script);\n const fn = (color: ColorSymbol): ColorSymbol => {\n const interpreterConfig = this.createInterpreterConfig({ input: color });\n const result = new Interpreter(ast, interpreterConfig).interpret();\n if (!(result instanceof ColorSymbol)) {\n // If the result is not a ColorSymbol, wrap it in one with the target type\n const targetSpec = this.getSpec(targetUri);\n if (!targetSpec) {\n throw new InterpreterError(ColorErrorCode.CONVERSION_TARGET_NOT_FOUND, {\n data: { targetUri },\n });\n }\n const value = typeof result === \"string\" ? result : (result?.value ?? null);\n return new ColorSymbol(value, targetSpec.name, null, this.parentConfig);\n }\n return result as ColorSymbol;\n };\n\n // Set the conversion function\n this.registerConversionFunction(sourceUri, targetUri, fn);\n });\n }\n\n public register(uri: uriType, spec: ColorSpecification | string): ColorSpecification {\n let parsedSpec: ColorSpecification;\n\n try {\n const input = typeof spec === \"string\" ? JSON.parse(spec) : spec;\n parsedSpec = parseColorSpec(input);\n } catch (err) {\n const summary =\n err instanceof ZodError\n ? err.issues.map((i) => `${i.path.join(\".\") || \"<root>\"}: ${i.message}`).join(\"; \")\n : err instanceof Error\n ? err.message\n : String(err);\n const jsonSuffix = typeof spec === \"string\" ? `\\n\\nJson:\\n${spec}` : \"\";\n throw new Error(`Invalid color specification for URI ${uri}: ${summary}${jsonSuffix}`);\n }\n\n this.specs.set(uri, parsedSpec);\n this.specTypes.set(specName(parsedSpec), uri);\n\n this.registerRootInitializers(uri, parsedSpec);\n this.registerConversions(uri, parsedSpec);\n\n return parsedSpec;\n }\n\n public getSpecByType(type: string): ColorSpecification | undefined {\n const uri = this.specTypes.get(type.toLowerCase());\n if (!uri) return;\n return this.getSpec(uri);\n }\n\n public getSpecFromColor(color: ColorSymbol): ColorSpecification | undefined {\n const key = color.subType?.toLowerCase();\n if (key) {\n return this.getSpecByType(key);\n }\n }\n\n public hasInitializer(keyword: string): boolean {\n return this.initializers.has(keyword.toLowerCase());\n }\n\n public executeInitializer(keyword: string, args: Array<ISymbolType>): ColorSymbol {\n const initFn = this.initializers.get(keyword.toLowerCase());\n if (!initFn) {\n throw new InterpreterError(ColorErrorCode.INITIALIZER_NOT_FOUND, {\n data: { keyword },\n });\n }\n return initFn(args);\n }\n\n public hasConversionByType(sourceType: string, targetType: string): boolean {\n const sourceUri = this.specTypes.get(sourceType.toLowerCase());\n const targetUri = this.specTypes.get(targetType.toLowerCase());\n\n if (!sourceUri || !targetUri) {\n return false;\n }\n\n return this.hasConversion(sourceUri, targetUri);\n }\n\n public convertTo(color: ColorSymbol, targetUri: string): ColorSymbol {\n const sourceUri = this.specTypes.get(color.subType?.toLowerCase() || \"\");\n\n if (!sourceUri) {\n throw new InterpreterError(ColorErrorCode.SOURCE_URI_NOT_FOUND, {\n data: { colorType: color.subType || \"unknown\" },\n });\n }\n\n try {\n const result = this.convertThroughPath(color, sourceUri, targetUri);\n result.alpha = color.alpha;\n return result;\n } catch (error) {\n throw new InterpreterError(ColorErrorCode.CONVERSION_ERROR, {\n data: {\n error: isLanguageError(error) ? error : serializeError(error),\n },\n });\n }\n }\n\n public convertToByType(color: ColorSymbol, targetType: string): ColorSymbol {\n // Identity conversion - return original instance without cloning\n if (color.subType?.toLowerCase() === targetType.toLowerCase()) {\n return color;\n }\n\n const targetUri = this.specTypes.get(targetType.toLowerCase());\n\n if (!targetUri) {\n throw new InterpreterError(ColorErrorCode.TARGET_URI_NOT_FOUND, {\n data: { colorType: targetType },\n });\n }\n\n return this.convertTo(color, targetUri);\n }\n\n setAttribute(color: ColorSymbol, node: ReassignNode, attributeValue: ISymbolType): ColorSymbol {\n const attributes = node.attributesStringChain();\n\n if (attributes.length !== 1) {\n throw new InterpreterError(ColorErrorCode.ATTRIBUTE_CHAIN_TOO_LONG, {\n token: node.token,\n data: {\n attributes: attributesToString(attributes),\n identifier: node.identifierToString(),\n colorType: color.subType || \"unknown\",\n },\n });\n }\n const attr = attributes[0];\n\n // alpha attribute\n if (attr === \"alpha\") {\n if (attributeValue.type !== \"Number\" && attributeValue.type !== \"Null\") {\n throw new InterpreterError(ColorErrorCode.INVALID_ATTRIBUTE_TYPE, {\n token: node.token,\n data: {\n attributeType: attributeValue.type,\n validTypes: \"Number or Null\",\n },\n });\n }\n const alphaValue = attributeValue.value as number | null;\n ensureValidAlpha(alphaValue);\n color.alpha = alphaValue;\n return color;\n }\n\n if (typeof color.value === \"string\") {\n throw new InterpreterError(ColorErrorCode.STRING_VALUE_ASSIGNMENT, {\n token: node.token,\n data: {\n attributes: attributesToString(attributes),\n identifier: node.identifierToString(),\n colorType: color.subType || \"unknown\",\n },\n });\n }\n\n const spec = this.getSpecFromColor(color);\n if (!spec) {\n throw new InterpreterError(ColorErrorCode.MISSING_SPEC, {\n token: node.token,\n data: {\n identifier: node.identifierToString(),\n colorType: color.subType || \"unknown\",\n },\n });\n }\n\n if (!spec.schema) {\n throw new InterpreterError(ColorErrorCode.MISSING_SCHEMA, {\n token: node.token,\n data: { colorType: color.subType || \"unknown\" },\n });\n }\n\n const attrSchema = spec.schema.properties[attr];\n if (!attrSchema) {\n throw new InterpreterError(ColorErrorCode.MISSING_ATTRIBUTE_SCHEMA, {\n token: node.token,\n data: {\n attribute: attr,\n identifier: node.identifierToString(),\n colorType: color.subType || \"unknown\",\n },\n });\n }\n\n if (!typeEquals(attrSchema.type, attributeValue.type)) {\n throw new InterpreterError(ColorErrorCode.INVALID_ATTRIBUTE_TYPE, {\n token: node.token,\n data: {\n attributeType: attributeValue.type,\n validTypes: validSchemaTypes.join(\", \"),\n },\n });\n }\n\n // Update the value by mutation\n const value = (color.value || {}) as dynamicColorValue;\n value[attr] = attributeValue;\n color.value = value;\n\n return color;\n }\n\n /**\n * Formats a number value, rounding to specified decimal places and optionally removing trailing zeros.\n *\n * @param value - The numeric value to format\n * @param decimalPlaces - Number of decimal places to round to\n * @param removeTrailingZeros - Whether to remove trailing zeros\n * @returns Formatted number string\n */\n private formatNumber(value: number, decimalPlaces: number, removeTrailingZeros: boolean): string {\n const rounded = Number(value.toFixed(decimalPlaces));\n const formatted = rounded.toFixed(decimalPlaces);\n\n if (removeTrailingZeros) {\n // Remove trailing zeros and decimal point if not needed\n return formatted.replace(/\\.?0+$/, \"\");\n }\n\n return formatted;\n }\n\n /**\n * Formats a ColorSymbol as a string representation using the appropriate schema-defined format.\n *\n * For hex colors (string values), returns the hex string as-is.\n * For dynamic colors (object values), uses the schema's `order` property to determine\n * parameter order and formats as a function call (e.g., \"hsl(0, 100, 50.0)\").\n * If alpha is set and less than 1, it is included as the fourth parameter.\n *\n * @param color - The ColorSymbol to format\n * @param opts - Formatting options for numeric values\n * @returns Formatted string representation of the color, or empty string if formatting fails\n *\n * @example\n * ```typescript\n * // Hex color\n * const hexColor = new ColorSymbol(\"#ff0000\", \"Hex\");\n * manager.formatColorMethod(hexColor); // \"#ff0000\"\n *\n * // HSL color with schema order [\"h\", \"s\", \"l\"]\n * const hslColor = new ColorSymbol({ h: 0, s: 100, l: 50.123456 }, \"HSL\");\n * manager.formatColorMethod(hslColor); // \"hsl(0, 100, 50.12)\"\n *\n * // RGB color with alpha\n * const rgbColor = new ColorSymbol({ r: 255, g: 0, b: 0 }, \"RGB\", undefined, 0.5);\n * manager.formatColorMethod(rgbColor); // \"rgb(255, 0, 0, 0.5)\"\n * ```\n */\n formatColorMethod(color: ColorSymbol, opts: FormatColorOptions = {}): string {\n const { decimalPlaces = 2, removeTrailingZeros = true } = opts;\n\n if (typeof color.value === \"string\") {\n // For hex colors with alpha, output hex8 format\n if (color.alpha !== null) {\n return formatHex8(color.value, color.alpha);\n }\n return color.value;\n }\n\n if (typeof color.value === \"object\" && color.value !== null && color.subType) {\n const spec = this.getSpecFromColor(color);\n if (!spec) {\n return \"\";\n }\n\n // Use schema order if available, otherwise fall back to object keys order\n const order =\n spec.schema?.order && spec.schema.order.length > 0\n ? spec.schema.order\n : Object.keys(color.value as Record<string, any>);\n\n // Extract values in the specified order\n const values = order.map((key) => {\n const valObj = (color.value as Record<string, any>)[key];\n const value = valObj?.value;\n if (typeof value === \"number\") {\n return this.formatNumber(value, decimalPlaces, removeTrailingZeros);\n }\n return value?.toString() || \"0\";\n });\n\n // Include alpha only when set and not fully opaque (< 1)\n // This follows CSS convention where alpha=1 (fully opaque) is omitted\n // Alpha=0 (fully transparent) is included to distinguish from no alpha\n if (isTransparent(color.alpha)) {\n values.push(this.formatNumber(color.alpha, decimalPlaces, removeTrailingZeros));\n }\n\n // Format as function call with the subtype name\n const functionName = color.subType.toLowerCase();\n return `${functionName}(${values.join(\", \")})`;\n }\n\n return \"\";\n }\n\n public getColorSchemas(): Map<string, ColorSpecification> {\n return this.specs;\n }\n}\n","// Token-kind schema shim.\n//\n// Re-exports the typed shapes from @tokens-studio/schema-validation so that\n// the rest of the interpreter can continue importing from\n// \"@interpreter/config/managers/token/schema\". The schema-validation\n// package is the cross-language source of truth for the schema language\n// (TS / Go / Ruby).\n//\n// Aliases preserve the historical interpreter names (`SpecProperty`,\n// `SpecItemsType`, `TokenSpecificationSchema`) so consumer code does not\n// have to change.\n\nimport { Token, type z } from \"@tokens-studio/schema-validation\";\n\n// Types -----------------------------------------------------------------------\n\nexport type TokenSpecification = Token.TokenSpecification;\n\n/**\n * A property of a token's structural schema. Historical alias for the\n * recursive `Property` type from the schema-validation library; the\n * `z.infer` form is needed because tsup's DTS bundling drops the\n * type side of the value+type merged export through `* as Token`.\n */\nexport type SpecProperty = z.infer<typeof Token.Property>;\n\n/**\n * The shape of items inside a list-typed property/schema. Historical\n * alias for the `ItemsSpec` type from the schema-validation library;\n * see {@link SpecProperty} for why `z.infer` is needed.\n */\nexport type SpecItemsType = z.infer<typeof Token.ItemsSpec>;\n\n// Validation API --------------------------------------------------------------\n//\n// Explicit type annotations on these re-exports are required because\n// tsup's DTS bundling (rollup-plugin-dts) can't construct a public path\n// for the internal `Property` / `ItemsSpec` / zod types that transitively\n// appear in the inferred return types of `Token.parseTokenSpec` etc.\n// Without the annotation the DTS emit fails with TS4023 / TS2742.\n\n/**\n * Validate and parse a JSON value as a token specification. Throws a\n * `ZodError` with a structured field-by-field error report on failure.\n *\n * Strictness:\n * - Top level: unknown fields are tolerated (silently stripped).\n * - Nested shapes (Schema, Property, ItemsSpec, ScriptBlock):\n * unknown fields and unsupported enum values fail.\n */\nexport const parseTokenSpec: (json: unknown) => TokenSpecification = Token.parseTokenSpec;\n\n/**\n * Like `parseTokenSpec` but returns a `{ success, data | error }`\n * discriminated union instead of throwing.\n */\nexport const safeParseTokenSpec: (json: unknown) => z.ZodSafeParseResult<TokenSpecification> =\n Token.safeParseTokenSpec;\n\n/**\n * Historical compatibility alias for `parseTokenSpec`. Wrap a call in a\n * `try { ... } catch (err) { ... }` to handle validation failures.\n *\n * @deprecated Prefer `parseTokenSpec` / `safeParseTokenSpec`.\n */\nexport const TokenSpecificationSchema: (json: unknown) => TokenSpecification = Token.parseTokenSpec;\n\n// Constants -------------------------------------------------------------------\n\n/**\n * The set of valid `type` values for a token schema.\n *\n * Mirrored as a plain array for use in error messages and for backwards\n * compatibility with the previous arktype declaration. Hand-spelled\n * (rather than reading `.options` off the zod enum) because tsup's DTS\n * bundling drops the value side of namespaced re-exports — see\n * {@link SpecProperty} for the same workaround.\n */\nexport const validSchemaTypes = [\"number\", \"string\", \"token\", \"object\", \"list\"] as const;\n\n// Helpers ---------------------------------------------------------------------\n\n/** Lowercased lookup name for a token spec. */\nexport const specName: (spec: TokenSpecification) => string = Token.specName;\n","import { filterAST, ReturnNode, StringNode } from \"@interpreter/ast\";\nimport { Interpreter } from \"@interpreter/interpreter\";\nimport { Lexer } from \"@interpreter/lexer\";\nimport { Parser } from \"@interpreter/parser\";\nimport {\n BooleanSymbol,\n DictionarySymbol,\n ListSymbol,\n StringSymbol,\n TokenSymbol,\n} from \"@interpreter/symbols\";\nimport type { ASTNode, ISymbolType } from \"@src/types\";\nimport { ZodError } from \"@tokens-studio/schema-validation\";\nimport { BaseManager } from \"../base-manager\";\nimport {\n parseTokenSpec,\n type SpecItemsType,\n type SpecProperty,\n specName,\n type TokenSpecification,\n} from \"./schema\";\n\ntype uriType = string;\n\n/**\n * Result of validating a token value.\n * For nested validation failures, path indicates where the error occurred.\n */\nexport interface ValidationResult {\n valid: boolean;\n error?: string;\n tokenType?: string;\n path?: (string | number)[]; // Path for nested errors, e.g., [\"fontSize\"] or [\"shadows\", 0, \"blur\"]\n}\n\n/** Maximum depth for nested token validation to prevent stack overflow */\nconst MAX_VALIDATION_DEPTH = 10;\n\nexport class TokenManager extends BaseManager<TokenSpecification, TokenSymbol, TokenSymbol> {\n /**\n * TokenScript validation scripts by token type.\n * The script receives {input} as the value to validate.\n * Should return true if valid, or a string error code if invalid.\n */\n private validationScripts: Map<string, string> = new Map();\n\n /**\n * Cached parsed ASTs for validation scripts.\n * Avoids re-parsing the same script on every validation call.\n */\n private validationAstCache = new Map<string, ASTNode | null>();\n\n /**\n * Cached Interpreter instances for validation scripts.\n * Reusing interpreters avoids recreating Config, SymbolTable, etc.\n */\n private validationInterpreterCache = new Map<string, Interpreter>();\n\n protected getSpecName(spec: TokenSpecification): string {\n return specName(spec);\n }\n\n public getSpecByType(type: string): TokenSpecification | undefined {\n const uri = this.specTypes.get(type.toLowerCase());\n if (!uri) return;\n return this.getSpec(uri);\n }\n\n public clone(): this {\n const tokenManager = new TokenManager();\n tokenManager.specs = new Map(this.specs);\n tokenManager.specTypes = new Map(this.specTypes);\n tokenManager.conversions = new Map(this.conversions);\n tokenManager.validationScripts = new Map(this.validationScripts);\n tokenManager.validationAstCache = new Map(this.validationAstCache);\n tokenManager.validationInterpreterCache = new Map(this.validationInterpreterCache);\n return tokenManager as this;\n }\n\n public register(uri: uriType, spec: TokenSpecification | string): TokenSpecification {\n let parsedSpec: TokenSpecification;\n\n try {\n const input = typeof spec === \"string\" ? JSON.parse(spec) : spec;\n parsedSpec = parseTokenSpec(input);\n } catch (err) {\n const summary =\n err instanceof ZodError\n ? err.issues.map((i) => `${i.path.join(\".\") || \"<root>\"}: ${i.message}`).join(\"; \")\n : err instanceof Error\n ? err.message\n : String(err);\n const jsonSuffix = typeof spec === \"string\" ? `\\nJson:\\n${spec}` : \"\";\n throw new Error(`Invalid token specification for URI ${uri}: ${summary}${jsonSuffix}`);\n }\n\n this.specs.set(uri, parsedSpec);\n this.specTypes.set(specName(parsedSpec), uri);\n\n // Auto-register validation script if present in spec\n if (parsedSpec.validation) {\n this.registerValidation(parsedSpec.name, parsedSpec.validation);\n }\n\n return parsedSpec;\n }\n\n /**\n * Register a TokenScript validation script for a token type.\n * The script receives {input} as the value to validate.\n * Accepts either a string (direct script) or an object with type and script properties (built schema).\n */\n public registerValidation(\n tokenType: string,\n validation: string | { type: string; script: string },\n ): void {\n const normalizedType = tokenType.toLowerCase();\n // If validation is an object with script property (from built schema), extract the script\n const script = typeof validation === \"string\" ? validation : validation.script;\n this.validationScripts.set(normalizedType, script);\n // Invalidate caches when script changes\n this.validationAstCache.delete(normalizedType);\n this.validationInterpreterCache.delete(normalizedType);\n }\n\n /**\n * Get validation script for a token type.\n */\n public getValidation(tokenType: string): string | undefined {\n return this.validationScripts.get(tokenType.toLowerCase());\n }\n\n /**\n * Get possible error codes from validation scripts by walking the AST.\n * Finds all return statements that return string literals (error codes).\n *\n * @param tokenType - Optional token type to get errors for. If omitted, returns all error types.\n * @returns Array of error code strings\n */\n public validationErrorTypes(tokenType?: string): string[] {\n if (tokenType) {\n return this.extractErrorTypesFromAST(tokenType);\n }\n\n // Get all error types from all registered validation scripts\n const allErrors = new Set<string>();\n for (const type of this.validationScripts.keys()) {\n for (const error of this.extractErrorTypesFromAST(type)) {\n allErrors.add(error);\n }\n }\n return Array.from(allErrors);\n }\n\n /**\n * Extract error codes from a validation script's AST.\n * Walks the tree and returns string values from return statements.\n */\n private extractErrorTypesFromAST(tokenType: string): string[] {\n const normalizedType = tokenType.toLowerCase();\n const script = this.validationScripts.get(normalizedType);\n if (!script) {\n return [];\n }\n\n // Use cached AST if available, otherwise parse and cache\n let ast = this.validationAstCache.get(normalizedType);\n if (ast === undefined) {\n try {\n ast = new Parser(new Lexer(script)).parse();\n this.validationAstCache.set(normalizedType, ast);\n } catch {\n return [];\n }\n }\n\n if (!ast) {\n return [];\n }\n\n // Find all return statements and extract string literals\n const returnNodes = filterAST<ReturnNode>(ast, (node) => node instanceof ReturnNode);\n const errorTypes: string[] = [];\n\n for (const returnNode of returnNodes) {\n if (returnNode.expr instanceof StringNode) {\n errorTypes.push(returnNode.expr.value);\n }\n }\n\n return errorTypes;\n }\n\n /**\n * Validate a token value against its type using TokenScript.\n * Automatically performs deep validation for nested token properties.\n * Returns an array of validation results (empty or single valid result if all pass).\n *\n * @param tokenType - The token type name (e.g., \"typography\", \"color\")\n * @param value - The symbol value to validate\n * @param visitedUrls - Set of URLs already visited (for circular reference detection)\n * @param basePath - Path prefix for nested validation errors\n * @param depth - Current nesting depth (for max depth protection)\n */\n public validate(\n tokenType: string,\n value: ISymbolType,\n visitedUrls: Set<string> = new Set(),\n basePath: (string | number)[] = [],\n depth: number = 0,\n ): ValidationResult[] {\n // Check max depth to prevent stack overflow\n if (depth > MAX_VALIDATION_DEPTH) {\n return [\n {\n valid: false,\n error: \"MAX_VALIDATION_DEPTH_EXCEEDED\",\n tokenType,\n path: basePath.length > 0 ? basePath : undefined,\n },\n ];\n }\n\n const results: ValidationResult[] = [];\n\n // 1. Run top-level validation script\n const topLevelResult = this.runValidationScript(tokenType, value, basePath);\n if (!topLevelResult.valid) {\n results.push(topLevelResult);\n return results; // Early return on top-level failure\n }\n\n // 2. Get the spec for this token type to check for nested properties\n const spec = this.getSpecByType(tokenType);\n if (!spec?.schema) {\n return [{ valid: true, tokenType }]; // No schema\n }\n\n // 3. Handle list types with items\n if (spec.schema.type === \"list\" && spec.schema.items) {\n const listResults = this.validateListItems(\n value,\n spec.schema.items,\n visitedUrls,\n basePath,\n depth,\n );\n results.push(...listResults);\n\n if (results.length > 0) {\n return results;\n }\n return [{ valid: true, tokenType }];\n }\n\n // 4. Handle object types with properties\n if (!spec.schema.properties) {\n return [{ valid: true, tokenType }]; // No nested properties\n }\n\n // 5. Get the value map for nested property access\n const valueMap = this.getValueMap(value);\n if (!valueMap) {\n return [{ valid: true, tokenType }];\n }\n\n // 6. Validate nested token properties\n const propResults = this.validateObjectProperties(\n valueMap,\n spec.schema.properties,\n visitedUrls,\n basePath,\n depth,\n );\n results.push(...propResults);\n\n // Return failures or single valid result\n if (results.length > 0) {\n return results;\n }\n return [{ valid: true, tokenType }];\n }\n\n /**\n * Validate items in a list against an items schema.\n * Each item is validated and errors include the index in the path.\n */\n private validateListItems(\n value: ISymbolType,\n itemsSpec: SpecItemsType,\n visitedUrls: Set<string>,\n basePath: (string | number)[],\n depth: number,\n ): ValidationResult[] {\n const results: ValidationResult[] = [];\n\n // Get the list\n if (!(value instanceof ListSymbol)) {\n return results; // Not a list, validation script should have caught this\n }\n\n const items = value.value;\n\n // Validate each item\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const itemPath = [...basePath, i];\n\n // Handle object items with properties\n if (itemsSpec.type === \"object\" && itemsSpec.properties) {\n const itemMap = this.getValueMap(item);\n if (itemMap) {\n const propResults = this.validateObjectProperties(\n itemMap,\n itemsSpec.properties,\n visitedUrls,\n itemPath,\n depth + 1,\n );\n results.push(...propResults);\n }\n }\n\n // Handle token items (direct reference to another token type)\n if (itemsSpec.type === \"token\" && itemsSpec.url) {\n const referencedSpec = this.getSpec(itemsSpec.url);\n if (referencedSpec) {\n const newVisited = new Set(visitedUrls);\n newVisited.add(itemsSpec.url);\n\n const nestedResults = this.validate(\n referencedSpec.name,\n item,\n newVisited,\n itemPath,\n depth + 1,\n );\n\n for (const result of nestedResults) {\n if (!result.valid) {\n results.push(result);\n }\n }\n }\n }\n }\n\n return results;\n }\n\n /**\n * Validate properties of an object against a properties schema.\n */\n private validateObjectProperties(\n valueMap: Map<string, ISymbolType>,\n properties: Record<string, SpecProperty>,\n visitedUrls: Set<string>,\n basePath: (string | number)[],\n depth: number,\n ): ValidationResult[] {\n const results: ValidationResult[] = [];\n\n for (const [propName, propSpec] of Object.entries(properties)) {\n const typedPropSpec = propSpec as SpecProperty;\n if (typedPropSpec.type !== \"token\" || !typedPropSpec.url) {\n continue;\n }\n\n // Circular reference detection\n if (visitedUrls.has(typedPropSpec.url)) {\n results.push({\n valid: false,\n error: \"CIRCULAR_REFERENCE\",\n tokenType: typedPropSpec.url,\n path: [...basePath, propName],\n });\n continue;\n }\n\n // Get the property value\n const propValue = valueMap.get(propName);\n if (!propValue) {\n continue; // Property not present, skip\n }\n\n // Look up referenced spec\n const referencedSpec = this.getSpec(typedPropSpec.url);\n if (!referencedSpec) {\n continue; // Spec not registered, skip\n }\n\n // Recursively validate with updated visited set, path, and depth\n const newVisited = new Set(visitedUrls);\n newVisited.add(typedPropSpec.url);\n\n const nestedResults = this.validate(\n referencedSpec.name,\n propValue,\n newVisited,\n [...basePath, propName],\n depth + 1,\n );\n\n // Collect any failures\n for (const result of nestedResults) {\n if (!result.valid) {\n results.push(result);\n }\n }\n }\n\n return results;\n }\n\n /**\n * Run the validation script for a token type.\n * Internal method used by validate().\n * Uses cached Interpreter when available to avoid recreation overhead.\n */\n private runValidationScript(\n tokenType: string,\n value: ISymbolType,\n path: (string | number)[] = [],\n ): ValidationResult {\n const normalizedType = tokenType.toLowerCase();\n const script = this.getValidation(tokenType);\n if (!script) {\n return { valid: true, tokenType };\n }\n\n try {\n // Get or create cached interpreter for this token type\n let interpreter = this.validationInterpreterCache.get(normalizedType);\n\n if (!interpreter) {\n // Parse AST (use cached if available)\n let ast = this.validationAstCache.get(normalizedType);\n if (ast === undefined) {\n ast = new Parser(new Lexer(script)).parse();\n this.validationAstCache.set(normalizedType, ast);\n }\n\n // Create and cache interpreter\n interpreter = new Interpreter(ast, {\n config: this.parentConfig ?? undefined,\n });\n this.validationInterpreterCache.set(normalizedType, interpreter);\n }\n\n // Reset state and set new input reference\n interpreter.resetSymbolTable();\n interpreter.setReference(\"input\", value);\n\n const result = interpreter.interpret();\n\n if (result instanceof BooleanSymbol && result.value === true) {\n return { valid: true, tokenType };\n }\n if (result instanceof StringSymbol) {\n return {\n valid: false,\n error: result.value as string,\n tokenType,\n path: path.length > 0 ? path : undefined,\n };\n }\n return {\n valid: false,\n error: \"VALIDATION_INVALID_RESULT\",\n tokenType,\n path: path.length > 0 ? path : undefined,\n };\n } catch (error) {\n return {\n valid: false,\n error: `VALIDATION_ERROR: ${error instanceof Error ? error.message : String(error)}`,\n tokenType,\n path: path.length > 0 ? path : undefined,\n };\n }\n }\n\n /**\n * Extract a Map from various symbol types that can contain key-value pairs.\n */\n private getValueMap(value: ISymbolType): Map<string, ISymbolType> | null {\n if (value instanceof DictionarySymbol) {\n return value.value;\n }\n if (value instanceof TokenSymbol && value.value instanceof Map) {\n return value.value;\n }\n return null;\n }\n}\n","import type { ISymbolType } from \"@src/types\";\nimport { ConfigErrorCode, InterpreterError } from \"../errors\";\nimport { basicSymbolTypes, ColorSymbol } from \"../symbols\";\nimport { ColorManager } from \"./managers/color/manager\";\nimport type { ColorSpecification } from \"./managers/color/schema\";\nimport type { ConstantsSpecification } from \"./managers/constants/schema\";\nimport { FunctionsManager } from \"./managers/functions/manager\";\nimport type { FunctionSpecification } from \"./managers/functions/schema\";\nimport { TokenManager } from \"./managers/token/manager\";\nimport type { TokenSpecification } from \"./managers/token/schema\";\nimport { UnitManager } from \"./managers/unit/manager\";\n\nexport interface LanguageOptions {\n MAX_ITERATIONS: number;\n}\n\nexport interface ConfigOptions {\n languageOptions?: LanguageOptions;\n colorManager?: ColorManager;\n unitManager?: UnitManager;\n functionsManager?: FunctionsManager;\n tokenManager?: TokenManager;\n}\n\nexport const DEFAULT_LANGUAGE_OPTIONS: LanguageOptions = {\n MAX_ITERATIONS: 1000,\n};\n\nexport class Config {\n public languageOptions: LanguageOptions;\n public colorManager: ColorManager;\n public unitManager: UnitManager;\n public functionsManager: FunctionsManager;\n public tokenManager: TokenManager;\n private _inlineConstants: Map<string, string | number | boolean> = new Map();\n\n constructor(options?: ConfigOptions) {\n this.languageOptions = {\n ...DEFAULT_LANGUAGE_OPTIONS,\n ...options?.languageOptions,\n };\n this.colorManager = options?.colorManager || new ColorManager();\n this.unitManager = options?.unitManager || new UnitManager();\n this.functionsManager = options?.functionsManager || new FunctionsManager();\n this.tokenManager = options?.tokenManager || new TokenManager();\n\n // Set parent config reference to avoid recursion issues\n // Only set if not already set to prevent overriding existing parent references\n if (!this.colorManager.getParentConfig()) {\n this.colorManager.setParentConfig(this);\n }\n if (!this.unitManager.getParentConfig()) {\n this.unitManager.setParentConfig(this);\n }\n if (!this.functionsManager.getParentConfig()) {\n this.functionsManager.setParentConfig(this);\n }\n if (!this.tokenManager.getParentConfig()) {\n this.tokenManager.setParentConfig(this);\n }\n }\n\n getType(baseType: string, subType?: string): ISymbolType {\n const lowerBaseType = baseType.toLowerCase();\n\n if (lowerBaseType === \"color\") {\n if (subType) {\n if (!this.colorManager.getSpecByType(subType)) {\n throw new InterpreterError(ConfigErrorCode.NO_SPEC_FOUND, {\n data: { specName: subType },\n });\n }\n return new ColorSymbol(null, subType, null, this);\n }\n return new ColorSymbol(null, undefined, null, this);\n }\n\n const basicSymbolConstructor = basicSymbolTypes[baseType.toLowerCase()];\n if (!basicSymbolConstructor) {\n throw new InterpreterError(ConfigErrorCode.NO_TYPE_FOUND, {\n data: { typeName: baseType },\n });\n }\n\n return basicSymbolConstructor.empty();\n }\n\n isTypeDefined(baseType: string, subType?: string): boolean {\n const lowerBaseType = baseType.toLowerCase();\n if (lowerBaseType === \"color\") {\n if (subType) return !!this.colorManager.getSpecByType(subType);\n // Color may be defined without subType\n return true;\n }\n // Nothing else implements subType other than color\n if (subType) return false;\n\n return !!basicSymbolTypes[lowerBaseType];\n }\n\n get inlineConstants(): Map<string, string | number | boolean> {\n return this._inlineConstants;\n }\n\n clone(): Config {\n return new Config({\n languageOptions: { ...this.languageOptions },\n colorManager: this.colorManager.clone(),\n unitManager: this.unitManager.clone(),\n functionsManager: this.functionsManager.clone(),\n tokenManager: this.tokenManager.clone(),\n });\n }\n\n registerSchemas(\n schemas: Array<{\n uri: string;\n schema:\n | ColorSpecification\n | FunctionSpecification\n | TokenSpecification\n | ConstantsSpecification;\n }>,\n ): Config {\n for (const { uri, schema } of schemas) {\n switch (schema.type) {\n case \"color\":\n this.colorManager.register(uri, schema as ColorSpecification);\n break;\n case \"function\":\n this.functionsManager.register(\n (schema as FunctionSpecification).keyword,\n schema as FunctionSpecification,\n );\n break;\n case \"token\":\n this.tokenManager.register(uri, schema as TokenSpecification);\n break;\n case \"constants\": {\n const spec = schema as ConstantsSpecification;\n if (!spec.inline) break;\n for (const [key, value] of Object.entries(spec.values)) {\n this._inlineConstants.set(key, value);\n }\n break;\n }\n }\n }\n return this;\n }\n}\n","import { type ISymbolType, Operations, type SupportedFormats } from \"@src/types\";\nimport type { Config } from \"./config/config\";\nimport { InterpreterError, OperationsErrorCode } from \"./errors\";\nimport {\n type BaseSymbolType,\n BooleanSymbol,\n NullSymbol,\n NumberSymbol,\n NumberWithUnitSymbol,\n StringSymbol,\n} from \"./symbols\";\nimport { isNull } from \"./utils/type\";\n\ntype MathOperand = NumberSymbol | NumberWithUnitSymbol;\ntype OperationFunction = (a: MathOperand, b: MathOperand, config?: Config) => MathOperand;\ntype BooleanOperationFunction = (a: ISymbolType, b: ISymbolType) => BooleanSymbol;\n\nfunction decomposeUnit(operand: MathOperand): {\n value: number;\n unit: SupportedFormats | null;\n} {\n if (operand instanceof NumberWithUnitSymbol) {\n return { value: operand.value as number, unit: operand.unit };\n }\n if (operand instanceof NumberSymbol) {\n return { value: operand.value as number, unit: null };\n }\n throw new InterpreterError(OperationsErrorCode.UNSUPPORTED_OPERAND_TYPE, {\n data: { type: (operand as BaseSymbolType).type },\n });\n}\n\nfunction recomposeUnit(\n value: number,\n units: (SupportedFormats | null)[],\n _config?: Config,\n): MathOperand {\n const validUnits = units.filter((u) => u !== null) as SupportedFormats[];\n if (validUnits.length === 0) {\n return new NumberSymbol(value);\n }\n if (new Set(validUnits).size > 1) {\n throw new InterpreterError(OperationsErrorCode.CANNOT_MIX_UNITS, {\n data: { units: validUnits },\n });\n }\n return new NumberWithUnitSymbol(value, validUnits[0]);\n}\n\nfunction mathWrapper(func: (a: number, b: number) => number): OperationFunction {\n return (a: MathOperand, b: MathOperand, config?: Config): MathOperand => {\n // If we have a config with unit manager, try to convert to common format\n if (config?.unitManager) {\n try {\n const converted = config.unitManager.convertToCommonFormat([a, b]);\n if (converted.length === 2) {\n const convertedA = converted[0] as MathOperand;\n const convertedB = converted[1] as MathOperand;\n\n const opA = decomposeUnit(convertedA);\n const opB = decomposeUnit(convertedB);\n\n const resultValue = func(opA.value, opB.value);\n return recomposeUnit(resultValue, [opA.unit, opB.unit], config);\n }\n } catch (_error) {\n // Fall back to original behavior if unit conversion fails\n }\n }\n\n const opA = decomposeUnit(a);\n const opB = decomposeUnit(b);\n\n const resultValue = func(opA.value, opB.value);\n return recomposeUnit(resultValue, [opA.unit, opB.unit], config);\n };\n}\n\nfunction equalityComparisonWrapper(fn: (a: any, b: any) => boolean): BooleanOperationFunction {\n return (a: ISymbolType, b: ISymbolType): BooleanSymbol => {\n const isNullComparison = a instanceof NullSymbol || b instanceof NullSymbol;\n\n if (!isNullComparison) {\n const isNumericA = a instanceof NumberSymbol || a instanceof NumberWithUnitSymbol;\n const isNumericB = b instanceof NumberSymbol || b instanceof NumberWithUnitSymbol;\n if (isNumericA && !isNumericB) {\n throw new InterpreterError(OperationsErrorCode.INCOMPATIBLE_TYPES, {\n data: { typeA: a.type, typeB: b.type },\n });\n }\n\n const isStringA = a instanceof StringSymbol;\n const isStringB = b instanceof StringSymbol;\n if (isStringA && !isStringB) {\n throw new InterpreterError(OperationsErrorCode.INCOMPATIBLE_TYPES, {\n data: { typeA: a.type, typeB: b.type },\n });\n }\n\n const isBooleanA = a instanceof BooleanSymbol;\n const isBooleanB = b instanceof BooleanSymbol;\n if (isBooleanA && !isBooleanB) {\n throw new InterpreterError(OperationsErrorCode.INCOMPATIBLE_TYPES, {\n data: { typeA: a.type, typeB: b.type },\n });\n }\n\n if (\n a instanceof NumberWithUnitSymbol &&\n b instanceof NumberWithUnitSymbol &&\n a.unit !== b.unit\n ) {\n throw new InterpreterError(OperationsErrorCode.CANNOT_COMPARE_UNITS, {\n data: { unitA: a.unit, unitB: b.unit },\n });\n }\n }\n\n return new BooleanSymbol(fn(a.value, b.value));\n };\n}\n\nfunction orderingComparisonWrapper(fn: (a: any, b: any) => boolean): BooleanOperationFunction {\n return (a: ISymbolType, b: ISymbolType): BooleanSymbol => {\n if (a instanceof NullSymbol || b instanceof NullSymbol || isNull(a.value) || isNull(b.value)) {\n throw new InterpreterError(OperationsErrorCode.ORDERING_WITH_NULL);\n }\n\n const isNumericA = a instanceof NumberSymbol || a instanceof NumberWithUnitSymbol;\n const isNumericB = b instanceof NumberSymbol || b instanceof NumberWithUnitSymbol;\n if (isNumericA && !isNumericB) {\n throw new InterpreterError(OperationsErrorCode.INCOMPATIBLE_TYPES, {\n data: { typeA: a.type, typeB: b.type },\n });\n }\n\n const isStringA = a instanceof StringSymbol;\n const isStringB = b instanceof StringSymbol;\n if (isStringA && !isStringB) {\n throw new InterpreterError(OperationsErrorCode.INCOMPATIBLE_TYPES, {\n data: { typeA: a.type, typeB: b.type },\n });\n }\n\n const isBooleanA = a instanceof BooleanSymbol;\n const isBooleanB = b instanceof BooleanSymbol;\n if (isBooleanA && !isBooleanB) {\n throw new InterpreterError(OperationsErrorCode.INCOMPATIBLE_TYPES, {\n data: { typeA: a.type, typeB: b.type },\n });\n }\n\n if (\n a instanceof NumberWithUnitSymbol &&\n b instanceof NumberWithUnitSymbol &&\n a.unit !== b.unit\n ) {\n throw new InterpreterError(OperationsErrorCode.CANNOT_COMPARE_UNITS, {\n data: { unitA: a.unit, unitB: b.unit },\n });\n }\n\n return new BooleanSymbol(fn(a.value, b.value));\n };\n}\n\nexport const LOGICAL_BOOLEAN_IMPLEMENTATIONS: Record<string, BooleanOperationFunction> = {\n [Operations.LOGIC_AND]: (a: ISymbolType, b: ISymbolType) => {\n if (!(a instanceof BooleanSymbol) || !(b instanceof BooleanSymbol))\n throw new InterpreterError(OperationsErrorCode.LOGICAL_REQUIRES_BOOLEAN, {\n data: { operator: \"&&\" },\n });\n return new BooleanSymbol(a.value && b.value);\n },\n [Operations.LOGIC_OR]: (a: ISymbolType, b: ISymbolType) => {\n if (!(a instanceof BooleanSymbol) || !(b instanceof BooleanSymbol))\n throw new InterpreterError(OperationsErrorCode.LOGICAL_REQUIRES_BOOLEAN, {\n data: { operator: \"||\" },\n });\n return new BooleanSymbol(a.value || b.value);\n },\n};\n\nfunction powerWrapper(func: (a: number, b: number) => number): OperationFunction {\n return (a: MathOperand, b: MathOperand, config?: Config): MathOperand => {\n // Power operations should not allow unit conversion as it doesn't make dimensional sense\n const opA = decomposeUnit(a);\n const opB = decomposeUnit(b);\n\n // Reject if both operands have units\n if (opA.unit && opB.unit) {\n throw new InterpreterError(OperationsErrorCode.UNIT_EXPONENT_NOT_SUPPORTED, {\n data: { unitA: opA.unit, unitB: opB.unit },\n });\n }\n\n const resultValue = func(opA.value, opB.value);\n return recomposeUnit(resultValue, [opA.unit, opB.unit], config);\n };\n}\n\nfunction multiplyDivideWrapper(func: (a: number, b: number) => number): OperationFunction {\n return (a: MathOperand, b: MathOperand, config?: Config): MathOperand => {\n // For multiplication/division, handle percentages specially\n if (config?.unitManager) {\n // Check if one operand is a percentage\n const aIsPercent =\n a instanceof NumberWithUnitSymbol &&\n config.unitManager.getSpecByKeyword(a.unit)?.type === \"relative\";\n const bIsPercent =\n b instanceof NumberWithUnitSymbol &&\n config.unitManager.getSpecByKeyword(b.unit)?.type === \"relative\";\n\n if (aIsPercent && !bIsPercent) {\n // a% * b = (a/100) * b with b's unit (if any)\n const resultValue = func((a.value as number) / 100, b.value as number);\n return b instanceof NumberWithUnitSymbol\n ? new NumberWithUnitSymbol(resultValue, b.unit)\n : new NumberSymbol(resultValue);\n } else if (bIsPercent && !aIsPercent) {\n // a * b% = a * (b/100) with a's unit (if any)\n const resultValue = func(a.value as number, (b.value as number) / 100);\n return a instanceof NumberWithUnitSymbol\n ? new NumberWithUnitSymbol(resultValue, a.unit)\n : new NumberSymbol(resultValue);\n }\n }\n\n // Fall back to standard unit conversion for non-percentage cases\n return mathWrapper(func)(a, b, config);\n };\n}\n\nexport const MATH_IMPLEMENTATIONS: Record<string, OperationFunction> = {\n [Operations.ADD]: mathWrapper((a, b) => a + b),\n [Operations.SUBTRACT]: mathWrapper((a, b) => a - b),\n [Operations.MULTIPLY]: multiplyDivideWrapper((a, b) => a * b),\n [Operations.DIVIDE]: multiplyDivideWrapper((a, b) => {\n if (b === 0) throw new InterpreterError(OperationsErrorCode.DIVISION_BY_ZERO);\n return a / b;\n }),\n [Operations.POWER]: powerWrapper((a, b) => a ** b),\n};\n\n// Comparison operations map to TokenType values directly\nexport const COMPARISON_IMPLEMENTATIONS: Record<string, BooleanOperationFunction> = {\n IS_EQ: equalityComparisonWrapper((a, b) => a === b),\n IS_NOT_EQ: equalityComparisonWrapper((a, b) => a !== b),\n GT: orderingComparisonWrapper((a, b) => a > b),\n LT: orderingComparisonWrapper((a, b) => a < b),\n IS_GT_EQ: orderingComparisonWrapper((a, b) => a >= b),\n IS_LT_EQ: orderingComparisonWrapper((a, b) => a <= b),\n};\n","import type { ISymbolType } from \"@src/types\";\nexport class SymbolTable {\n private symbols: Record<string, ISymbolType | null>;\n\n constructor() {\n this.symbols = {};\n }\n\n get(name: string): ISymbolType | null {\n return this.symbols[name.toLowerCase()] || null;\n }\n\n set(name: string, value: ISymbolType | null): void {\n this.symbols[name.toLowerCase()] = value;\n }\n\n isDefined(name: string): boolean {\n return !!this.symbols[name.toLowerCase()];\n }\n\n delete(name: string): void {\n delete this.symbols[name.toLowerCase()];\n }\n\n reset(): void {\n this.symbols = {};\n }\n}\n","import {\n type ASTNode,\n type ISymbolType,\n Operations,\n type ReferenceRecord,\n UNINTERPRETED_KEYWORDS,\n} from \"@src/types\";\nimport {\n type AssignNode,\n type AttributeAccessNode,\n type BinOpNode,\n type BooleanNode,\n type ElementWithUnitNode,\n type ForEachNode,\n FunctionCallNode,\n type HexColorNode,\n IdentifierNode,\n type IfNode,\n ImplicitListNode,\n type ListNode,\n type NullNode,\n type NumNode,\n type ReassignNode,\n type ReferenceNode,\n type ReturnNode,\n type StatementListNode,\n type StringNode,\n type TemplateStringNode,\n type UnaryOpNode,\n type WhileNode,\n} from \"./ast\";\nimport { Config } from \"./config/config\";\nimport { InterpreterError, InterpreterErrorCode } from \"./errors\";\nimport * as operations from \"./operations\";\nimport { Parser } from \"./parser\";\n\nimport {\n BooleanSymbol,\n basicSymbolTypes,\n ColorSymbol,\n DictionarySymbol,\n jsValueToSymbolType,\n ListSymbol,\n NullSymbol,\n NumberSymbol,\n NumberWithUnitSymbol,\n StringSymbol,\n typeEquals,\n typeName,\n} from \"./symbols\";\nimport { SymbolTable } from \"./symbolTable\";\nimport { parseHexWithAlpha } from \"./utils/color\";\n\nclass ReturnSignal {\n constructor(public value: ISymbolType | null) {}\n}\n\nexport type InterpreterResult = ISymbolType | string | null;\n\nexport class Interpreter {\n private parser: Parser | null = null; // Null if created with pre-parsed AST\n private symbolTable: SymbolTable;\n private references: Map<string, ISymbolType> = new Map();\n private ast: ASTNode | null = null;\n public config: Config;\n\n constructor(\n input: Parser | ASTNode | null,\n options?: {\n references?: ReferenceRecord | Map<string, any>;\n symbolTable?: SymbolTable;\n config?: Config;\n },\n ) {\n if (input instanceof Parser) {\n this.parser = input;\n } else {\n this.setAst(input);\n }\n\n this.symbolTable = options?.symbolTable || new SymbolTable();\n this.config = options?.config || new Config();\n\n if (options?.references) {\n this.importReferences(options.references);\n }\n }\n\n // References ------------------------------------------------------------------\n\n public importReferences(references?: ReferenceRecord | Map<string, any>): void {\n if (references instanceof Map) {\n this.references = references;\n } else if (references) {\n for (const key in references) {\n this.references.set(key, jsValueToSymbolType(references[key], this.config));\n }\n } else {\n this.references = new Map<string, ISymbolType>();\n }\n }\n\n public getReference(key: string): ISymbolType | undefined {\n return this.references.get(key);\n }\n\n public setReference(key: string, value: ISymbolType): void {\n this.references.set(key, value);\n }\n\n // Utilities -------------------------------------------------------------------\n\n public setAst(ast: ASTNode | null): void {\n this.ast = ast;\n this.parser = null; // Clear parser since we're using pre-parsed AST\n }\n\n public resetSymbolTable(): void {\n this.symbolTable.reset();\n }\n\n public getSymbol(name: string): ISymbolType | null {\n return this.symbolTable.get(name);\n }\n\n public setSymbol(name: string, value: ISymbolType): void {\n this.symbolTable.set(name, value);\n }\n\n public coerceValue(\n constructorSymbol: ISymbolType,\n valueSymbol: ISymbolType,\n ): ISymbolType | undefined {\n if (valueSymbol instanceof NullSymbol) return constructorSymbol;\n if (constructorSymbol.typeEquals(valueSymbol)) return valueSymbol;\n }\n\n // Visit Functions -------------------------------------------------------------\n\n private visit(node: ASTNode | null): ISymbolType | null {\n if (!node) return null;\n\n const visitorMethodName = `visit${node.nodeType}` as keyof this;\n if (typeof (this as any)[visitorMethodName] === \"function\") {\n return (this as any)[visitorMethodName](node);\n }\n\n throw new InterpreterError(InterpreterErrorCode.UNKNOWN_NODE_TYPE, {\n token: node.token,\n data: { nodeType: node.nodeType },\n });\n }\n\n private visitBinOpNode(node: BinOpNode): ISymbolType {\n const left = this.visit(node.left) as ISymbolType;\n const right = this.visit(node.right) as ISymbolType;\n\n const opVal = node.opToken.value as string;\n const opType = node.opToken.type;\n\n const logicalBooleanImpl = operations.LOGICAL_BOOLEAN_IMPLEMENTATIONS[opVal];\n if (logicalBooleanImpl) {\n return logicalBooleanImpl(left, right);\n }\n\n const mathImpl = operations.MATH_IMPLEMENTATIONS[opVal];\n if (mathImpl) {\n if (\n !(\n (left instanceof NumberSymbol || left instanceof NumberWithUnitSymbol) &&\n (right instanceof NumberSymbol || right instanceof NumberWithUnitSymbol)\n )\n ) {\n throw new InterpreterError(InterpreterErrorCode.ARITHMETIC_REQUIRES_NUMBER, {\n token: node.opToken,\n data: { operator: opVal, leftType: left.type, rightType: right.type },\n });\n }\n\n return mathImpl(left, right, this.config);\n }\n\n const comparisonImpl = operations.COMPARISON_IMPLEMENTATIONS[opType];\n if (comparisonImpl) {\n return comparisonImpl(left, right);\n }\n\n throw new InterpreterError(InterpreterErrorCode.UNKNOWN_BINARY_OPERATOR, {\n token: node.opToken,\n data: { operator: opVal, tokenType: opType },\n });\n }\n\n private visitNumNode(node: NumNode): NumberSymbol {\n return new NumberSymbol(node.value, this.config);\n }\n\n private visitStringNode(node: StringNode): StringSymbol {\n return new StringSymbol(node.value, this.config);\n }\n\n private visitTemplateStringNode(node: TemplateStringNode): ISymbolType {\n if (node.parts.length === 0) {\n return new StringSymbol(\"\", this.config);\n }\n\n // Single non-string part: evaluate, validate, and return as-is (preserves type)\n if (node.parts.length === 1) {\n const val = this.visit(node.parts[0]) as ISymbolType;\n this.validateTemplateValue(val, node);\n return val;\n }\n\n // Multiple parts: evaluate each, validate, and concatenate as strings\n let result = \"\";\n for (const part of node.parts) {\n const val = this.visit(part) as ISymbolType;\n this.validateTemplateValue(val, node);\n result += val.toString();\n }\n return new StringSymbol(result, this.config);\n }\n\n /**\n * Validate that a value is a primitive type allowed in template string interpolation.\n * Lists, Dictionaries, and non-hex Colors are rejected.\n */\n private validateTemplateValue(val: ISymbolType, node: TemplateStringNode): void {\n if (val instanceof ListSymbol) {\n throw new InterpreterError(InterpreterErrorCode.TEMPLATE_INVALID_TYPE, {\n token: node.token,\n data: { valueType: \"List\" },\n });\n }\n if (val instanceof DictionarySymbol) {\n throw new InterpreterError(InterpreterErrorCode.TEMPLATE_INVALID_TYPE, {\n token: node.token,\n data: { valueType: \"Dictionary\" },\n });\n }\n if (val instanceof ColorSymbol && !val.isHex()) {\n throw new InterpreterError(InterpreterErrorCode.TEMPLATE_INVALID_TYPE, {\n token: node.token,\n data: { valueType: `Color.${val.subType}` },\n });\n }\n }\n\n /**\n * Bare identifiers are treated as string literals if not found as variables\n * Check symbol table first (variables override references), then references\n */\n private visitIdentifierNode(node: IdentifierNode): ISymbolType {\n return (\n this.symbolTable.get(node.name) ||\n this.getReference(node.name) ||\n new StringSymbol(node.name, this.config)\n );\n }\n\n private visitUnaryOpNode(node: UnaryOpNode): ISymbolType {\n const result = this.visit(node.expr) as ISymbolType;\n\n if (node.op === Operations.SUBTRACT) {\n if (result instanceof NumberSymbol) {\n if (result.value === null) {\n throw new InterpreterError(InterpreterErrorCode.UNARY_MINUS_NULL, {\n token: node.opToken,\n data: { symbolType: \"NumberSymbol\" },\n });\n }\n return new NumberSymbol(-result.value, this.config);\n }\n\n if (result instanceof NumberWithUnitSymbol) {\n if (result.value === null) {\n throw new InterpreterError(InterpreterErrorCode.UNARY_MINUS_NULL, {\n token: node.opToken,\n data: { symbolType: \"NumberWithUnitSymbol\" },\n });\n }\n return new NumberWithUnitSymbol(-result.value, result.unit, this.config);\n }\n\n throw new InterpreterError(InterpreterErrorCode.UNARY_PLUS_NON_NUMBER, {\n token: node.opToken,\n data: { value: String(result.value) },\n });\n }\n\n if (node.op === Operations.ADD) {\n if (result instanceof NumberSymbol || result instanceof NumberWithUnitSymbol) {\n return result;\n }\n\n throw new InterpreterError(InterpreterErrorCode.UNARY_PLUS_NON_NUMBER, {\n token: node.opToken,\n data: { value: String(result.value) },\n });\n }\n\n if (node.op === Operations.LOGIC_NOT) {\n if (result instanceof BooleanSymbol) {\n return new BooleanSymbol(!result.value, this.config);\n }\n\n throw new InterpreterError(InterpreterErrorCode.UNARY_NOT_NON_BOOLEAN, {\n token: node.opToken,\n data: { value: String(result.value) },\n });\n }\n\n throw new InterpreterError(InterpreterErrorCode.UNKNOWN_UNARY_OPERATOR, {\n token: node.opToken,\n data: { operator: node.op },\n });\n }\n\n private visitListNode(node: ListNode): ListSymbol {\n return new ListSymbol(\n node.elements.map((el) => this.visit(el) as ISymbolType),\n node instanceof ImplicitListNode,\n this.config,\n );\n }\n\n private visitImplicitListNode(node: ImplicitListNode): ListSymbol {\n return this.visitListNode(node);\n }\n\n private visitReferenceNode(node: ReferenceNode): ISymbolType {\n const value = this.getReference(node.value);\n\n if (!value) {\n throw new InterpreterError(InterpreterErrorCode.UNKNOWN_REFERENCE, {\n token: node.token,\n data: { reference: node.value },\n });\n }\n\n return value as ISymbolType;\n }\n\n private visitHexColorNode(node: HexColorNode): ColorSymbol {\n const { color, alpha } = parseHexWithAlpha(node.value);\n return new ColorSymbol(color, \"Hex\", alpha, this.config);\n }\n\n private visitBooleanNode(node: BooleanNode): BooleanSymbol {\n return new BooleanSymbol(node.value, this.config);\n }\n\n private visitNullNode(_node: NullNode): NullSymbol {\n return new NullSymbol(this.config);\n }\n\n private visitElementWithUnitNode(node: ElementWithUnitNode): NumberWithUnitSymbol {\n const valNodeVisit = this.visit(node.astNode);\n return new NumberWithUnitSymbol(valNodeVisit?.value, node.unit, this.config);\n }\n\n private visitFunctionCallNode(node: FunctionCallNode): ISymbolType {\n const fnName = node.name.toLowerCase();\n const args = node.args.map((arg) => this.visit(arg) as ISymbolType);\n\n if (this.config.functionsManager.hasFunction(fnName)) {\n this.config.functionsManager.validateFunctionArgs(fnName, args, node.token);\n const fn = this.config.functionsManager.getFunction(fnName);\n if (fn) {\n return fn(...args);\n }\n }\n\n if (this.config.colorManager.hasInitializer(fnName)) {\n return this.config.colorManager.executeInitializer(fnName, args);\n }\n\n if (UNINTERPRETED_KEYWORDS.includes(fnName)) {\n const argStrings = args.map((arg) => arg.toString());\n return new StringSymbol(`${fnName}(${argStrings.join(\", \")})`, this.config);\n }\n\n throw new InterpreterError(InterpreterErrorCode.UNKNOWN_FUNCTION, {\n token: node.token,\n data: { functionName: node.name },\n });\n }\n\n private visitAssignNode(node: AssignNode): void {\n const name = node.varName.name;\n\n // Variable name validation\n if ([\".\", \"[\", \"-\"].some((c) => name.includes(c))) {\n throw new InterpreterError(InterpreterErrorCode.INVALID_VARIABLE_NAME, {\n token: node.varName.token,\n data: { name },\n });\n }\n\n if (this.symbolTable.isDefined(name)) {\n throw new InterpreterError(InterpreterErrorCode.VARIABLE_ALREADY_DEFINED, {\n token: node.varName.token,\n data: { name },\n });\n }\n\n const baseType = node.typeDecl.baseType.name;\n const subType = node.typeDecl.subTypes[0]?.name;\n\n if (!this.config.isTypeDefined(baseType, subType)) {\n throw new InterpreterError(InterpreterErrorCode.INVALID_VARIABLE_TYPE, {\n token: node.varName.token,\n data: {\n typeName: typeName(baseType, subType),\n validTypes: Object.keys(basicSymbolTypes).join(\", \"),\n },\n });\n }\n\n const constructorSymbol = this.config.getType(baseType, subType);\n\n const valueSymbol: ISymbolType = node.assignmentExpr\n ? (this.visit(node.assignmentExpr) as ISymbolType)\n : constructorSymbol;\n\n const coercedValueSymbol = this.coerceValue(constructorSymbol, valueSymbol);\n if (!coercedValueSymbol) {\n throw new InterpreterError(InterpreterErrorCode.INVALID_VALUE_FOR_VARIABLE, {\n token: node.varName.token,\n data: { value: String(valueSymbol.value), type: baseType, name },\n });\n }\n\n this.symbolTable.set(name, coercedValueSymbol);\n }\n\n private visitReassignNode(node: ReassignNode): void {\n const baseIdentifier = node.baseIdentifier();\n\n const existingVar = this.symbolTable.get(baseIdentifier.name);\n if (existingVar === null) {\n throw new InterpreterError(InterpreterErrorCode.VARIABLE_NOT_FOUND, {\n token: baseIdentifier.token,\n data: { name: baseIdentifier.name },\n });\n }\n\n const value = this.visit(node.value);\n\n if (value === null) {\n throw new InterpreterError(InterpreterErrorCode.ASSIGNMENT_VALUE_NULL, {\n token: (node.value as any).token,\n data: { identifier: node.identifierToString() },\n });\n }\n\n if (node.isAttributeAssignment()) {\n if (existingVar instanceof ColorSymbol) {\n this.config.colorManager.setAttribute(existingVar, node, value);\n }\n } else {\n if (typeEquals(value.type, \"list\")) {\n // TODO Implement list type-checking\n } else if (!typeEquals(existingVar.type, value.type)) {\n throw new InterpreterError(InterpreterErrorCode.TYPE_MISMATCH, {\n token: baseIdentifier.token,\n data: {\n value: String(value),\n foundType: value.type,\n expectedType: existingVar.type,\n identifier: node.identifierToString(),\n },\n });\n }\n\n if (!existingVar.validValue(value)) {\n throw new InterpreterError(InterpreterErrorCode.CANNOT_ASSIGN_TYPE, {\n token: (node.value as any).token,\n data: {\n valueType: value.type,\n identifier: node.identifierToString(),\n variableType: existingVar.type,\n },\n });\n }\n\n this.symbolTable.set(baseIdentifier.name, value);\n }\n }\n\n private visitAttributeAccessNode(node: AttributeAccessNode): ISymbolType {\n const left = this.visit(node.left) as ISymbolType;\n const right = node.right;\n\n if (typeof left.hasMethod === \"function\" && typeof left.hasAttribute === \"function\") {\n if (right instanceof FunctionCallNode) {\n // Handle method calls (e.g., str.lower(), color.hex())\n const args = right.args.map((arg) => this.visit(arg) as ISymbolType);\n if (left.hasMethod(right.name, args)) {\n const result = left.callMethod?.(right.name, args);\n if (result === null || result === undefined) {\n throw new InterpreterError(InterpreterErrorCode.METHOD_RETURNED_NULL, {\n token: node.token,\n data: { methodName: right.name },\n });\n }\n return result;\n }\n throw new InterpreterError(InterpreterErrorCode.METHOD_NOT_FOUND, {\n token: node.token,\n data: { methodName: right.name, value: String(left), type: left.type },\n });\n }\n if (right instanceof IdentifierNode) {\n // Handle property access (e.g., str.length, color.to)\n if (left.hasAttribute(right.name)) {\n const result = left.getAttribute?.(right.name);\n if (result === null || result === undefined) {\n throw new InterpreterError(InterpreterErrorCode.ATTRIBUTE_RETURNED_NULL, {\n token: node.token,\n data: { attributeName: right.name },\n });\n }\n return result;\n }\n throw new InterpreterError(InterpreterErrorCode.ATTRIBUTE_NOT_FOUND, {\n token: node.token,\n data: {\n attributeName: right.name,\n value: left instanceof ColorSymbol ? \"Color\" : String(left),\n type: left.type,\n },\n });\n }\n }\n\n throw new InterpreterError(InterpreterErrorCode.CANNOT_ACCESS_ATTRIBUTES, {\n token: node.token,\n data: { type: left.type },\n });\n }\n\n private visitStatementListNode(node: StatementListNode): ISymbolType | null {\n let result: ISymbolType | null = null;\n\n for (const statement of node.statements) {\n const statementResult = this.visit(statement);\n if (statementResult) {\n result = statementResult;\n }\n }\n\n return result;\n }\n\n private visitReturnNode(node: ReturnNode): void {\n throw new ReturnSignal(this.visit(node.expr));\n }\n\n private visitWhileNode(node: WhileNode): void {\n let iterations = 0;\n while (true) {\n iterations++;\n if (iterations > this.config.languageOptions.MAX_ITERATIONS) {\n throw new InterpreterError(InterpreterErrorCode.MAX_ITERATIONS_EXCEEDED, {\n token: node.token,\n });\n }\n const conditionNode = this.visit(node.condition);\n if (!(conditionNode instanceof BooleanSymbol)) {\n throw new InterpreterError(InterpreterErrorCode.WHILE_CONDITION_NOT_BOOLEAN, {\n token: node.condition?.token,\n });\n }\n if (!conditionNode.value) break;\n\n this.visit(node.body);\n }\n }\n\n private visitForEachNode(node: ForEachNode): ISymbolType {\n // ADR-005: check for shadowing — loop variables must not shadow existing variables\n if (this.symbolTable.isDefined(node.itemVar)) {\n throw new InterpreterError(InterpreterErrorCode.FOR_EACH_VARIABLE_SHADOW, {\n token: node.token,\n data: { name: node.itemVar },\n });\n }\n if (node.indexVar !== null) {\n if (node.indexVar === node.itemVar) {\n throw new InterpreterError(InterpreterErrorCode.FOR_EACH_DUPLICATE_VARS, {\n token: node.token,\n data: { name: node.itemVar },\n });\n }\n if (this.symbolTable.isDefined(node.indexVar)) {\n throw new InterpreterError(InterpreterErrorCode.FOR_EACH_VARIABLE_SHADOW, {\n token: node.token,\n data: { name: node.indexVar },\n });\n }\n }\n\n // Evaluate collection\n const collectionVal = this.visit(node.collection);\n if (!(collectionVal instanceof ListSymbol)) {\n throw new InterpreterError(InterpreterErrorCode.FOR_EACH_NOT_LIST, {\n token: node.token,\n data: { actualType: collectionVal?.type ?? \"null\" },\n });\n }\n\n const elements = collectionVal.value as ISymbolType[];\n const results: ISymbolType[] = [];\n\n for (let idx = 0; idx < elements.length; idx++) {\n const item = elements[idx];\n\n // Bind loop variables\n this.symbolTable.set(node.itemVar, item);\n if (node.indexVar !== null) {\n this.symbolTable.set(node.indexVar, new NumberSymbol(idx, this.config));\n }\n\n // Execute body\n let bodyResult: ISymbolType | null = null;\n try {\n bodyResult = this.visit(node.body);\n } catch (e) {\n // Catch ReturnSignal — propagate it out after cleanup\n if (e instanceof ReturnSignal) {\n // Clean up loop variables\n this.symbolTable.delete(node.itemVar);\n if (node.indexVar !== null) {\n this.symbolTable.delete(node.indexVar);\n }\n throw e;\n }\n throw e;\n }\n\n results.push(bodyResult ?? new NullSymbol(this.config));\n }\n\n // Clean up loop variables — they should not leak to outer scope\n this.symbolTable.delete(node.itemVar);\n if (node.indexVar !== null) {\n this.symbolTable.delete(node.indexVar);\n }\n\n return new ListSymbol(results, false, this.config);\n }\n\n private visitIfNode(node: IfNode): ISymbolType | null {\n // Process each condition in order (if, elif, elif, ...)\n for (const conditionNode of node.conditions) {\n const condition = this.visit(conditionNode.condition);\n if (!(condition instanceof BooleanSymbol)) {\n throw new InterpreterError(InterpreterErrorCode.IF_CONDITION_NOT_BOOLEAN, {\n token: (conditionNode.condition as any).token,\n });\n }\n\n if (condition.value) {\n return this.visit(conditionNode.body);\n }\n }\n\n // If no conditions were true, execute else body if it exists\n if (node.elseBody) {\n return this.visit(node.elseBody);\n }\n\n return null;\n }\n\n public interpret(): InterpreterResult {\n const tree = this.ast || (this.parser ? this.parser.parse() : null);\n if (!tree) return \"\";\n\n let result: ISymbolType | null;\n try {\n result = this.visit(tree);\n } catch (e) {\n if (e instanceof ReturnSignal) {\n result = e.value;\n } else if (e instanceof Error) {\n throw e;\n } else {\n throw new InterpreterError(InterpreterErrorCode.UNKNOWN_ERROR);\n }\n }\n\n return result;\n }\n}\n"]}
|