@tokens-studio/tokenscript-interpreter 0.36.4 → 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-OCQX3WYJ.js → chunk-GAE7SZLZ.js} +111 -8
- 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-AEOBCHBK.js → chunk-JL4UU4PY.js} +2 -9
- 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-LZTXD3LN.js → chunk-Z437BNC5.js} +10 -3
- package/dist/chunk-Z437BNC5.js.map +1 -0
- package/dist/cli.js +138 -16
- 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-Bsd6DPFy.d.ts → config-Mw_Iq324.d.ts} +3 -1
- package/dist/{config-DtbN3iyg.d.ts → config-P6Ivo_zY.d.ts} +105 -26
- package/dist/config-RCpZF46f.d.ts +960 -0
- package/dist/lib/{chunk-K65UI6KX.cjs → chunk-EMRAAGPR.cjs} +102 -100
- package/dist/lib/chunk-EMRAAGPR.cjs.map +1 -0
- package/dist/lib/{chunk-UF6I25ED.cjs → chunk-JQKYSUJJ.cjs} +685 -567
- package/dist/lib/chunk-JQKYSUJJ.cjs.map +1 -0
- package/dist/lib/{chunk-S7WGJBSX.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-2BDFE7U4.js → chunk-VXZQQBEA.js} +132 -15
- package/dist/lib/chunk-VXZQQBEA.js.map +1 -0
- package/dist/lib/{chunk-KHF2VXWO.cjs → chunk-ZMMIYWFF.cjs} +10 -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-DdF_Hj-J.d.ts → interpreter-ByrEtz7T.d.ts} +54 -4
- package/dist/lib/{interpreter-Cz_vWDDa.d.cts → 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-DRpZJjkx.d.ts → types-BZAWM2oN.d.ts} +2 -2
- package/dist/lib/{types-6QQt-XVS.d.cts → types-BhyJ6plH.d.cts} +2 -2
- package/dist/lib/{types-CxQPMHn1.d.ts → types-DA9_CC7p.d.cts} +3 -1
- package/dist/lib/{types-CxQPMHn1.d.cts → types-DA9_CC7p.d.ts} +3 -1
- 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 +0 -6460
- 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-LZTXD3LN.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-OCQX3WYJ.js.map +0 -1
- package/dist/chunk-QP7M6WUR.js.map +0 -1
- package/dist/lib/chunk-2BDFE7U4.js.map +0 -1
- package/dist/lib/chunk-AEOBCHBK.js.map +0 -1
- package/dist/lib/chunk-K65UI6KX.cjs.map +0 -1
- package/dist/lib/chunk-KHF2VXWO.cjs.map +0 -1
- package/dist/lib/chunk-S7WGJBSX.js.map +0 -1
- package/dist/lib/chunk-UF6I25ED.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
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/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/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/config.ts","../src/interpreter/operations.ts","../src/interpreter/symbolTable.ts","../src/interpreter/interpreter.ts"],"names":["isNumber","type","sum","firstUnitArg","typeName","ScriptBlockSchema","ConversionSchema","specName","spec","opA","opB","resultValue"],"mappings":"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","file":"chunk-4SLJE4IW.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 // 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 // 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.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 } 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 if (!(hexPart.length === 3 || hexPart.length === 6)) 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\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","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 } from \"@src/types\";\nimport type { Config } from \"./config/config\";\nimport { InterpreterError, SymbolsErrorCode } from \"./errors\";\nimport { ensureValidAlpha, 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 constructor(\n subType: string,\n value: TokenValue | Record<string, ISymbolType> | TokenSymbol | null,\n config?: Config,\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 }\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(this.subType, DictionaryImpl.deepCopy(this.value), this.config);\n }\n return new TokenSymbol(this.subType, ListImpl.deepCopy(this.value), this.config);\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 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, SupportedFormats, Token, TokenType } from \"@src/types\";\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 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 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 constructor(\n public left: ASTNode,\n public right: IdentifierNode | FunctionCallNode,\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 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 AttributeAccessNode) {\n walkAST(node.left, onVisit);\n if (node.right instanceof FunctionCallNode) {\n walkAST(node.right, onVisit);\n }\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\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 constructor(text: string) {\n this.text = text;\n this.currentChar = this.text[this.pos];\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];\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 // Prepend 0 to digits like \".5\"\n if (this.currentChar === \".\") {\n result += \"0\";\n }\n\n while (isNumber(this.currentChar) || this.currentChar === \".\") {\n result += this.currentChar;\n this.advance();\n }\n\n return {\n type: TokenType.NUMBER,\n value: result,\n line: this.line,\n pos: startPos,\n endPos: this.pos,\n };\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 const format = SUPPORTED_FORMAT_STRINGS[normalizedResult];\n if (format) {\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 const _startPos = this.pos;\n this.eat(\"{\");\n\n const refStartPos = this.pos;\n let result = \"\";\n while (this.currentChar !== null && this.currentChar !== \"}\") {\n if (this.currentChar === \"{\") {\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 this.error(LexerErrorCode.UNTERMINATED_REFERENCE, {});\n }\n\n if (result === \"\") {\n this.error(LexerErrorCode.EMPTY_VARIABLE_NAME, {});\n }\n\n const refEndPos = this.pos;\n this.eat(\"}\");\n return {\n type: TokenType.REFERENCE,\n value: result,\n line: this.line,\n pos: refStartPos,\n endPos: refEndPos,\n };\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 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 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 if (result.length !== 4 && result.length !== 7) {\n this.error(LexerErrorCode.INVALID_HEX_COLOR_FORMAT, {\n value: result,\n expectedLength: \"#RGB or #RRGGBB\",\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 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.number();\n }\n\n if (this.currentChar === \"'\" || this.currentChar === '\"') {\n return this.explicitString(this.currentChar);\n }\n\n if (this.isValidIdentifierStart(this.currentChar)) {\n return this.stringElement();\n }\n\n if (this.currentChar === \"{\") {\n return this.reference();\n }\n if (this.currentChar === \"[\") {\n const startPos = this.pos;\n this.eat(\"[\");\n return {\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 {\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 {\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 {\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 {\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 {\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 {\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 {\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 {\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 {\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 return {\n type: TokenType.RPAREN,\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 {\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.number();\n }\n const startPos = this.pos;\n this.eat(\".\");\n return {\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.hexColor();\n }\n if (this.currentChar === \"%\") {\n const startPos = this.pos;\n this.eat(\"%\");\n return {\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 {\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 {\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 {\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 {\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 {\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 {\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 {\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 {\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 {\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 {\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 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 return { type: TokenType.EOF, value: null, line: this.line, pos: this.pos, endPos: this.pos };\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\n const nextToken = this.nextToken();\n\n // Restore state\n this.pos = savedPos;\n this.currentChar = savedChar;\n this.line = savedLine;\n this.column = savedColumn;\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\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\n this.pos = savedPos;\n this.currentChar = savedChar;\n this.line = savedLine;\n this.column = savedColumn;\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 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 TypeDeclNode,\n UnaryOpNode,\n WhileNode,\n} from \"./ast\";\nimport { ParserError, ParserErrorCode } from \"./errors\";\nimport { Lexer } from \"./lexer\";\n\nexport class Parser {\n private lexer: Lexer;\n private currentToken: Token;\n public requiredReferences: Set<string> = new Set();\n\n constructor(lexer: Lexer) {\n this.lexer = lexer;\n this.currentToken = this.lexer.nextToken();\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 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.eat(TokenType.STRING);\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.eat(TokenType.STRING);\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.IF:\n return this.ifStatement();\n case ReservedKeyword.VARIABLE:\n return this.assignVariable();\n }\n } else if (this.currentToken.type === TokenType.STRING) {\n // Look ahead to check the token sequence\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 && nextTokens[i + 1].type === TokenType.STRING) {\n if (i + 2 < nextTokens.length && nextTokens[i + 2].type === TokenType.ASSIGN) {\n const name = this.currentToken;\n this.eat(TokenType.STRING);\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.eat(TokenType.STRING);\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.eat(TokenType.STRING);\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.eat(TokenType.STRING);\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 node = new ReferenceNode(this.currentToken);\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 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 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 // 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 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 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 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 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 const node = new NumNode(this.currentToken);\n this.eat(TokenType.NUMBER);\n if (this.currentToken.type === TokenType.FORMAT) {\n return this.format(node);\n }\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 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 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 return new BooleanNode(token.value === ReservedKeyword.TRUE, token);\n }\n\n if (token.type === TokenType.RESERVED_KEYWORD && token.value === ReservedKeyword.NULL) {\n this.eat(TokenType.RESERVED_KEYWORD);\n return new NullNode(token);\n }\n\n if (token.type === TokenType.NUMBER) {\n return this.number();\n }\n\n if (token.type === TokenType.LPAREN) {\n this.eat(TokenType.LPAREN);\n const node = this.expr();\n this.eat(TokenType.RPAREN);\n if (this.currentToken.type === TokenType.FORMAT) {\n return this.format(node);\n }\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 return new HexColorNode(token);\n }\n\n // Identifier or function call\n if (token.type === TokenType.STRING) {\n this.eat(TokenType.STRING);\n let node: ASTNode;\n // After `eat(STRING)`, 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.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 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 this.eat(TokenType.DOT);\n // @ts-expect-error - typescript bug with overlap?\n if (this.currentToken.type === TokenType.STRING) {\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(TokenType.STRING);\n node = new AttributeAccessNode(\n node,\n this.functionCall({ ...this.currentToken, value: methodName } as Token),\n );\n } else {\n // It's a property access\n const attrToken = this.currentToken;\n this.eat(TokenType.STRING);\n node = new AttributeAccessNode(node, new IdentifierNode(attrToken));\n }\n }\n }\n return node;\n }\n\n private functionCall(functionName: Token): FunctionCallNode {\n this.eat(TokenType.LPAREN);\n const args: ASTNode[] = [];\n while (this.currentToken.type !== TokenType.RPAREN) {\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 public parse(inlineMode = false): ASTNode | null {\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","import { type } from \"arktype\";\nimport { isObject } from \"@/src/interpreter/utils/type\";\n\n// Utility Schemas -------------------------------------------------------------\n\nconst ScriptBlockSchema = type({\n type: \"string\",\n script: \"string\",\n});\n\n// Schema ----------------------------------------------------------------------\n\nconst InitializerSchema = type({\n \"title?\": \"string\",\n keyword: \"string\",\n \"description?\": \"string\",\n // schema: type({ \"...\": \"unknown\" }),\n script: ScriptBlockSchema,\n});\n\nconst ConversionSchema = type({\n source: \"string\",\n target: \"string\",\n \"description?\": \"string\",\n lossless: \"boolean\",\n script: ScriptBlockSchema,\n});\n\nexport const validSchemaTypes = [\"number\", \"string\", \"color\"];\n\n// Property type for spec schema\nexport interface SpecProperty {\n type: \"number\" | \"string\" | \"color\";\n}\n\ninterface SpecSchemaType {\n type: \"object\";\n properties: Record<string, SpecProperty>;\n required?: string[];\n order?: string[];\n additionalProperties?: boolean;\n}\n\n// Main ------------------------------------------------------------------------\n\nexport interface ColorSpecification {\n name: string;\n type: \"color\";\n description?: string;\n schema?: SpecSchemaType;\n initializers: Array<{\n title?: string;\n keyword: string;\n description?: string;\n script: {\n type: string;\n script: string;\n };\n }>;\n conversions: Array<{\n source: string;\n target: string;\n description?: string;\n lossless: boolean;\n script: {\n type: string;\n script: string;\n };\n }>;\n}\n\nconst _SpecPropertySchema = type({\n type: \"'number' | 'string' | 'color'\",\n});\n\nconst SpecSchemaSchema = type({\n type: \"'object'\",\n properties: type(\"Record<string, unknown>\").narrow((v): v is Record<string, SpecProperty> => {\n if (!isObject(v)) return false;\n return Object.values(v).every((prop) =>\n [\"number\", \"string\", \"color\"].includes((prop as any)?.type),\n );\n }),\n \"required?\": \"string[]\",\n \"order?\": \"string[]\",\n \"additionalProperties?\": \"boolean\",\n});\n\nexport const ColorSpecificationSchema = type({\n name: \"string\",\n type: \"'color'\",\n \"description?\": \"string\",\n \"schema?\": SpecSchemaSchema,\n initializers: InitializerSchema.array(),\n conversions: ConversionSchema.array(),\n});\n\nexport const specName = (spec: ColorSpecification): string => spec.name.toLowerCase();\n\n// Minimal viable ColorSpecification for testing and defaults\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 { type } from \"arktype\";\n\nexport const FunctionSpecificationSchema = type({\n name: \"string\",\n type: \"'function'\",\n \"input?\": {\n type: \"'object'\",\n \"properties?\": \"Record<string, unknown>\",\n },\n script: {\n type: \"string\",\n script: \"string\",\n },\n keyword: \"string\",\n \"description?\": \"string\",\n \"requirements?\": \"string[]\",\n});\n\nexport interface FunctionSpecification {\n name: string;\n type: \"function\";\n input?: {\n type: \"object\";\n properties?: Record<string, unknown>;\n };\n script: {\n type: string;\n script: string;\n };\n keyword: string;\n description?: string;\n requirements?: string[];\n}\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 { NumberSymbol, NumberWithUnitSymbol, StringSymbol } from \"@interpreter/symbols\";\nimport type { ISymbolType } from \"@src/types\";\nimport { type } from \"arktype\";\nimport { BaseManager } from \"../base-manager\";\n\nimport { type FunctionSpecification, FunctionSpecificationSchema } 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 if (typeof spec === \"string\") {\n const parseResult = FunctionSpecificationSchema(JSON.parse(spec));\n if (parseResult instanceof type.errors) {\n throw new Error(`Invalid function specification for ${name}: ${parseResult.summary}`);\n }\n parsedSpec = parseResult as FunctionSpecification;\n } else {\n const parseResult = FunctionSpecificationSchema(spec);\n if (parseResult instanceof type.errors) {\n throw new Error(`Invalid function specification for ${name}: ${parseResult.summary}`);\n }\n parsedSpec = parseResult as FunctionSpecification;\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 // Math functions\n this.registerFunction(\"min\", (...args: ISymbolType[]): NumberSymbol => {\n const nums = args.map((arg) => {\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: \"min\" },\n });\n });\n return new NumberSymbol(Math.min(...nums));\n });\n\n this.registerFunction(\"max\", (...args: ISymbolType[]): NumberSymbol => {\n const nums = args.map((arg) => {\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: \"max\" },\n });\n });\n return new NumberSymbol(Math.max(...nums));\n });\n\n this.registerFunction(\"sum\", (...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 // Check if any arguments are NumberWithUnitSymbol\n const hasUnits = args.some((arg) => arg instanceof NumberWithUnitSymbol);\n\n if (!hasUnits) {\n // No units, just sum numbers\n const sum = args.reduce((acc, arg) => {\n if (arg instanceof NumberSymbol) return acc + (arg.value as number);\n if (typeof arg.value === \"number\") return acc + (arg.value as number);\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName: \"sum\" },\n });\n }, 0);\n return new NumberSymbol(sum);\n }\n\n // Has units, use unit manager for conversion\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_TYPE_ARGUMENT, {\n data: {\n functionName: \"sum\",\n expectedType: \"number or NumberWithUnit\",\n argumentPosition: \"all\",\n },\n });\n }\n\n if (this.parentConfig?.unitManager) {\n try {\n const converted = this.parentConfig.unitManager.convertToCommonFormat(numericArgs);\n const sum = converted.reduce((acc, arg) => {\n const value = (arg.value as number) || 0;\n return acc + value;\n }, 0);\n\n // Return with the unit of the first converted argument if it has one\n const firstUnitArg = converted.find(\n (arg) => arg instanceof NumberWithUnitSymbol,\n ) as NumberWithUnitSymbol;\n if (firstUnitArg) {\n return new NumberWithUnitSymbol(sum, firstUnitArg.unit);\n }\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 sum = args.reduce((acc, arg) => {\n if (arg instanceof NumberSymbol) return acc + (arg.value as number);\n if (arg instanceof NumberWithUnitSymbol) return acc + (arg.value as number);\n if (typeof arg.value === \"number\") return acc + (arg.value as number);\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName: \"sum\" },\n });\n }, 0);\n\n if (firstUnitArg) {\n return new NumberWithUnitSymbol(sum, firstUnitArg.unit);\n }\n\n return new NumberSymbol(sum);\n });\n\n this.registerFunction(\"mod\", (a: ISymbolType, b: ISymbolType): NumberSymbol => {\n let aVal: number, bVal: number;\n\n if (a instanceof NumberSymbol) aVal = a.value as number;\n else if (a instanceof NumberWithUnitSymbol) aVal = a.value as number;\n else if (typeof a.value === \"number\") aVal = a.value as number;\n else\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName: \"mod\" },\n });\n\n if (b instanceof NumberSymbol) bVal = b.value as number;\n else if (b instanceof NumberWithUnitSymbol) bVal = b.value as number;\n else if (typeof b.value === \"number\") bVal = b.value as number;\n else\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName: \"mod\" },\n });\n\n if (bVal === 0)\n throw new InterpreterError(FunctionsErrorCode.DIVISION_BY_ZERO, {\n data: { functionName: \"mod\" },\n });\n\n return new NumberSymbol(((aVal % bVal) + bVal) % bVal);\n });\n\n this.registerFunction(\"average\", (...args: ISymbolType[]): NumberSymbol => {\n if (args.length === 0)\n throw new InterpreterError(FunctionsErrorCode.REQUIRES_MIN_ARGUMENTS, {\n data: { functionName: \"average\", minArgs: 1 },\n });\n const sum = args.reduce((acc, arg) => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName: \"average\" },\n });\n return acc + (arg.value as number);\n }, 0);\n return new NumberSymbol(sum / args.length);\n });\n\n this.registerFunction(\"round\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"round\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n return new NumberSymbol(Math.round(arg.value as number));\n });\n\n this.registerFunction(\"abs\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"abs\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n return new NumberSymbol(Math.abs(arg.value as number));\n });\n\n this.registerFunction(\"sqrt\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"sqrt\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n return new NumberSymbol(Math.sqrt(arg.value as number));\n });\n\n this.registerFunction(\"pow\", (base: ISymbolType, exp: ISymbolType): NumberSymbol => {\n if (!(base instanceof NumberSymbol) || !(exp instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName: \"pow\" },\n });\n return new NumberSymbol((base.value as number) ** (exp.value as number));\n });\n\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 // Trigonometric functions\n this.registerFunction(\"sin\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"sin\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n return new NumberSymbol(Math.sin(arg.value as number));\n });\n\n this.registerFunction(\"cos\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"cos\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n return new NumberSymbol(Math.cos(arg.value as number));\n });\n\n this.registerFunction(\"tan\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"tan\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n return new NumberSymbol(Math.tan(arg.value as number));\n });\n\n // Inverse trigonometric functions\n this.registerFunction(\"asin\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"asin\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n const value = arg.value as number;\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 new NumberSymbol(Math.asin(value));\n });\n\n this.registerFunction(\"acos\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"acos\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n const value = arg.value as number;\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 new NumberSymbol(Math.acos(value));\n });\n\n this.registerFunction(\"atan\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"atan\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n return new NumberSymbol(Math.atan(arg.value as number));\n });\n\n this.registerFunction(\"atan2\", (y: ISymbolType, x: ISymbolType): NumberSymbol => {\n if (!(y instanceof NumberSymbol) || !(x instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_NUMBER_ARGUMENTS, {\n data: { functionName: \"atan2\" },\n });\n return new NumberSymbol(Math.atan2(y.value as number, x.value as number));\n });\n\n // Logarithmic functions\n this.registerFunction(\"log\", (arg: ISymbolType, base?: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"log\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n const value = arg.value as number;\n if (value <= 0)\n throw new InterpreterError(FunctionsErrorCode.ARGUMENT_OUT_OF_RANGE, {\n data: { functionName: \"log\", constraint: \"positive\" },\n });\n\n if (base === undefined) {\n return new NumberSymbol(Math.log(value));\n }\n\n if (!(base instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.INVALID_BASE, {\n data: { functionName: \"log\", constraint: \"a number\" },\n });\n const baseValue = base.value as number;\n if (baseValue <= 0 || baseValue === 1)\n throw new InterpreterError(FunctionsErrorCode.INVALID_BASE, {\n data: { functionName: \"log\", constraint: \"positive and not equal to 1\" },\n });\n\n return new NumberSymbol(Math.log(value) / Math.log(baseValue));\n });\n\n this.registerFunction(\"floor\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"floor\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n return new NumberSymbol(Math.floor(arg.value as number));\n });\n\n this.registerFunction(\"ceil\", (arg: ISymbolType): NumberSymbol => {\n if (!(arg instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"ceil\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n return new NumberSymbol(Math.ceil(arg.value as number));\n });\n\n this.registerFunction(\n \"round_to\",\n (value: ISymbolType, precision?: ISymbolType): NumberSymbol => {\n if (!(value instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: { functionName: \"round_to\", expectedType: \"number\", argumentPosition: \"first\" },\n });\n\n let precisionValue = 0;\n if (precision !== undefined) {\n if (!(precision instanceof NumberSymbol))\n throw new InterpreterError(FunctionsErrorCode.EXPECTS_TYPE_ARGUMENT, {\n data: {\n functionName: \"round_to\",\n expectedType: \"number\",\n argumentPosition: \"second\",\n },\n });\n precisionValue = precision.value as number;\n }\n\n const numValue = value.value as number;\n\n if (precisionValue === 0) {\n return new NumberSymbol(Math.round(numValue));\n }\n\n const factor = 10 ** precisionValue;\n return new NumberSymbol(Math.round(numValue * factor) / factor);\n },\n );\n\n // Utility functions\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(\"pi\", (): NumberSymbol => new NumberSymbol(Math.PI));\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\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","import { type } from \"arktype\";\n\n// Script Block Schema\nconst ScriptBlockSchema = type({\n \"type?\": \"string\",\n script: \"string\",\n});\n\nexport interface ScriptBlock {\n type?: string;\n script: string;\n}\n\n// Conversion Schema\nconst ConversionSchema = type({\n source: \"string\",\n target: \"string\",\n script: ScriptBlockSchema,\n \"description?\": \"string\",\n});\n\nexport interface Conversion {\n source: string;\n target: string;\n script: ScriptBlock;\n description?: string;\n}\n\n// Unit Specification Schema\nexport const UnitSpecificationSchema = type({\n name: \"string\",\n type: \"'absolute' | 'relative'\",\n keyword: \"string\",\n \"description?\": \"string\",\n \"conversions?\": ConversionSchema.array(),\n \"to_absolute?\": ScriptBlockSchema,\n});\n\nexport interface UnitSpecification {\n name: string;\n type: \"absolute\" | \"relative\";\n keyword: string;\n description?: string;\n conversions?: Conversion[];\n to_absolute?: ScriptBlock;\n}\n\nexport const specName = (spec: UnitSpecification): string => spec.name.toLowerCase();\n\nexport const validUnitTypes = [\"absolute\", \"relative\"] as const;\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 { type } from \"arktype\";\nimport { BaseManager } from \"../base-manager\";\nimport { specName, type UnitSpecification, UnitSpecificationSchema } 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 if (typeof spec === \"string\") {\n const parseResult = UnitSpecificationSchema(JSON.parse(spec));\n if (parseResult instanceof type.errors) {\n throw new Error(\n `Invalid unit specification for URI ${uri}: ${parseResult.summary}\\n\\nJson:\\n${spec}`,\n );\n }\n parsedSpec = parseResult as UnitSpecification;\n } else {\n const parseResult = UnitSpecificationSchema(spec);\n if (parseResult instanceof type.errors) {\n throw new Error(`Invalid unit specification for URI ${uri}: ${parseResult.summary}`);\n }\n parsedSpec = parseResult as UnitSpecification;\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, 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 { type } from \"arktype\";\nimport { BaseManager } from \"../base-manager\";\nimport {\n type ColorSpecification,\n ColorSpecificationSchema,\n specName,\n validSchemaTypes,\n} 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 if (typeof spec === \"string\") {\n const parseResult = ColorSpecificationSchema(JSON.parse(spec));\n if (parseResult instanceof type.errors) {\n throw new Error(\n `Invalid color specification for URI ${uri}: ${parseResult.summary}\n\nJson:\n${spec}`,\n );\n }\n parsedSpec = parseResult as ColorSpecification;\n } else {\n // Validate the object using the schema\n const parseResult = ColorSpecificationSchema(spec);\n if (parseResult instanceof type.errors) {\n throw new Error(`Invalid color specification for URI ${uri}: ${parseResult.summary}`);\n }\n parsedSpec = parseResult as ColorSpecification;\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, return the hex string (no alpha in output for now)\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","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 { FunctionsManager } from \"./managers/functions/manager\";\nimport type { FunctionSpecification } from \"./managers/functions/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}\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\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\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 }\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 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 });\n }\n\n registerSchemas(\n schemas: Array<{\n uri: string;\n schema: ColorSpecification | FunctionSpecification;\n }>,\n ): Config {\n for (const { uri, schema } of schemas) {\n if (schema.type === \"color\") {\n this.colorManager.register(uri, schema as ColorSpecification);\n } else if (schema.type === \"function\") {\n this.functionsManager.register(\n (schema as FunctionSpecification).keyword,\n schema as FunctionSpecification,\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 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 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 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 jsValueToSymbolType,\n ListSymbol,\n NullSymbol,\n NumberSymbol,\n NumberWithUnitSymbol,\n StringSymbol,\n typeEquals,\n typeName,\n} from \"./symbols\";\nimport { SymbolTable } from \"./symbolTable\";\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 // 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 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 /**\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 return new ColorSymbol(node.value, \"Hex\", null, 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 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 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"]}
|