exprify 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"exprify.js","sources":["../src/parser/tokenizer.js","../src/parser/infixToPostfix.js","../src/parser/evaluator.js","../src/math/operations.js","../src/functions/internalFunctions.js","../src/functions/externalFunctions.js","../src/variables/variables.js","../src/utils/typeConverter.js","../src/core/Exprify.js"],"sourcesContent":["export function tokenize(expr, context) {\r\n let tokens = [];\r\n let current = \"\";\r\n let quote = \"\";\r\n\r\n for (let i = 0; i < expr.length; i++) {\r\n\r\n let char = expr[i];\r\n\r\n const isOperator =\r\n char === '(' || char === ')' ||\r\n char === '^' || char === '*' ||\r\n char === '/' || char === '%' ||\r\n char === '+' || char === '-';\r\n\r\n const isQuote = char === '\"' || char === \"'\" || char === \"`\";\r\n\r\n if (isQuote) {\r\n if (quote === \"\") {\r\n quote = char;\r\n current += char;\r\n } else if (quote === char) {\r\n current += char;\r\n quote = \"\";\r\n\r\n tokens.push(context.stringToJS(current, context.variablesDB));\r\n current = \"\";\r\n } else {\r\n current += char;\r\n }\r\n continue;\r\n }\r\n\r\n if (quote !== \"\") {\r\n current += char;\r\n continue;\r\n }\r\n\r\n if (char === \"#\") {\r\n\r\n let bracket = 0;\r\n let funcName = \"\";\r\n let arg = \"\";\r\n let args = [];\r\n let quoteFunc = \"\";\r\n\r\n while (i < expr.length - 1) {\r\n i++;\r\n char = expr[i];\r\n\r\n if (bracket === 0) {\r\n if (char === \"(\") {\r\n bracket++;\r\n continue;\r\n }\r\n\r\n if (char === \" \")\r\n throw new Error(\"Function name cannot contain space\");\r\n\r\n if (isQuote)\r\n throw new Error(\"Function name cannot contain quotes\");\r\n\r\n if (funcName === \"\" && /[0-9.]/.test(char))\r\n throw new Error(\"Function name cannot start with number\");\r\n\r\n funcName += char;\r\n continue;\r\n }\r\n\r\n if (isQuote) {\r\n if (quoteFunc === \"\") quoteFunc = char;\r\n else if (quoteFunc === char) quoteFunc = \"\";\r\n }\r\n\r\n if (quoteFunc === \"\") {\r\n\r\n if (char === \"(\") bracket++;\r\n else if (char === \")\") {\r\n bracket--;\r\n\r\n if (bracket === 0) {\r\n if (arg !== \"\") args.push(arg);\r\n break;\r\n }\r\n }\r\n\r\n if (char === \",\" && bracket === 1) {\r\n if (arg === \"\")\r\n throw new Error(`Missing argument in #${funcName}()`);\r\n\r\n args.push(arg);\r\n arg = \"\";\r\n continue;\r\n }\r\n }\r\n\r\n arg += char;\r\n }\r\n\r\n args = args.map(a => context.evaluate(a));\r\n\r\n let fn =\r\n context.func_DB_intrnl[funcName] ||\r\n context.func_DB_extrnl[funcName];\r\n\r\n if (!fn) {\r\n throw new Error(`#${funcName}() not defined`);\r\n }\r\n\r\n tokens.push(fn(...args));\r\n continue;\r\n }\r\n\r\n if (isOperator) {\r\n\r\n if (current !== \"\") {\r\n tokens.push(context.stringToJS(current, context.variablesDB));\r\n current = \"\";\r\n }\r\n\r\n tokens.push(char);\r\n continue;\r\n }\r\n\r\n if (char === \" \") {\r\n if (current !== \"\") {\r\n tokens.push(context.stringToJS(current, context.variablesDB));\r\n current = \"\";\r\n }\r\n continue;\r\n }\r\n\r\n current += char;\r\n\r\n if (i === expr.length - 1 && current !== \"\") {\r\n tokens.push(context.stringToJS(current, context.variablesDB));\r\n }\r\n }\r\n\r\n if (quote !== \"\") {\r\n throw new Error(\"Unclosed string literal\");\r\n }\r\n\r\n return tokens;\r\n}","export function infixToPostfix(tokens, operator_precedence) {\r\n let output = [];\r\n let stack = [];\r\n\r\n for (let i = 0; i < tokens.length; i++) {\r\n\r\n let token = tokens[i];\r\n\r\n const isOperator =\r\n token === '^' || token === '*' ||\r\n token === '/' || token === '%' ||\r\n token === '+' || token === '-';\r\n\r\n const isLeftParen = token === \"(\";\r\n const isRightParen = token === \")\";\r\n\r\n const isOperand = !isOperator && !isLeftParen && !isRightParen;\r\n\r\n if (isOperand) {\r\n output.push(token);\r\n }\r\n\r\n else if (isOperator) {\r\n\r\n while (stack.length > 0) {\r\n\r\n let top = stack[stack.length - 1];\r\n\r\n if (top === \"(\") break;\r\n\r\n let topPrec = operator_precedence[top] || 0;\r\n let currPrec = operator_precedence[token];\r\n\r\n // Right associativity for ^\r\n if (\r\n (token === '^' && currPrec < topPrec) ||\r\n (token !== '^' && currPrec <= topPrec)\r\n ) {\r\n output.push(stack.pop());\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n stack.push(token);\r\n }\r\n\r\n else if (isLeftParen) {\r\n stack.push(token);\r\n }\r\n\r\n else if (isRightParen) {\r\n\r\n while (stack.length > 0 && stack[stack.length - 1] !== \"(\") {\r\n output.push(stack.pop());\r\n }\r\n\r\n if (stack.length === 0) {\r\n throw new Error(\"Mismatched parentheses: missing '('\");\r\n }\r\n\r\n stack.pop();\r\n }\r\n }\r\n\r\n while (stack.length > 0) {\r\n\r\n let top = stack.pop();\r\n\r\n if (top === \"(\" || top === \")\") {\r\n throw new Error(\"Mismatched parentheses\");\r\n }\r\n\r\n output.push(top);\r\n }\r\n\r\n return output;\r\n}","export function evaluatePostfix(postfix, mathOperations) {\r\n\r\n let stack = [];\r\n\r\n const isOperator = (val) =>\r\n val === '^' || val === '*' ||\r\n val === '/' || val === '%' ||\r\n val === '+' || val === '-';\r\n\r\n for (let i = 0; i < postfix.length; i++) {\r\n\r\n let token = postfix[i];\r\n\r\n if (!isOperator(token)) {\r\n stack.push(token);\r\n continue;\r\n }\r\n\r\n if (stack.length < 2) {\r\n throw new Error(\"Invalid expression: insufficient operands\");\r\n }\r\n\r\n let b = stack.pop(); // second\r\n let a = stack.pop(); // first\r\n\r\n let result;\r\n\r\n switch (token) {\r\n case '^':\r\n result = mathOperations.power(a, b);\r\n break;\r\n case '*':\r\n result = mathOperations.multiply(a, b);\r\n break;\r\n case '/':\r\n result = mathOperations.divide(a, b);\r\n break;\r\n case '%':\r\n result = mathOperations.modulus(a, b);\r\n break;\r\n case '+':\r\n result = mathOperations.add(a, b);\r\n break;\r\n case '-':\r\n result = mathOperations.subtract(a, b);\r\n break;\r\n }\r\n\r\n stack.push(result);\r\n }\r\n\r\n if (stack.length !== 1) {\r\n throw new Error(\"Invalid expression: leftover values in stack\");\r\n }\r\n\r\n return stack[0];\r\n}","const isValidNumberPair = (a, b) =>\r\n (typeof a === typeof b) &&\r\n (typeof a === 'number' || typeof a === 'bigint');\r\n\r\nexport const mathOperations = Object.freeze({\r\n\r\n operator_precedence: {\r\n '^': 4,\r\n '*': 3,\r\n '/': 3,\r\n '%': 3,\r\n '+': 1,\r\n '-': 1,\r\n },\r\n\r\n power: function(a, b) {\r\n if (isValidNumberPair(a, b)) return a ** b;\r\n throw new Error(\"Invalid types for ^\");\r\n },\r\n\r\n multiply: function(a, b) {\r\n if (isValidNumberPair(a, b)) return a * b;\r\n throw new Error(\"Invalid types for *\");\r\n },\r\n\r\n divide: function(a, b) {\r\n if (isValidNumberPair(a, b)) {\r\n if (b === 0) throw new Error(\"Division by zero\");\r\n return a / b;\r\n }\r\n throw new Error(\"Invalid types for /\");\r\n },\r\n\r\n add: function(a, b) {\r\n if (isValidNumberPair(a, b)) return a + b;\r\n if (typeof a === 'string' && typeof b === 'string') return a + b;\r\n throw new Error(\"Invalid types for +\");\r\n },\r\n subtract: function(a, b) {\r\n if (isValidNumberPair(a, b)) return a - b;\r\n throw new Error(\"Invalid types for -\");\r\n },\r\n\r\n modulus: function(a, b) {\r\n if (isValidNumberPair(a, b)) return a % b;\r\n throw new Error(\"Invalid types for %\");\r\n }\r\n});","const and = (...args) => args.every(Boolean);\r\nconst or = (...args) => args.some(Boolean);\r\nconst not = (val) => !val;\r\n\r\nconst gt = (a, b) => a > b;\r\nconst lt = (a, b) => a < b;\r\nconst eq = (a, b) => a === b;\r\nconst gte = (a, b) => a >= b;\r\nconst lte = (a, b) => a <= b;\r\n\r\nexport const internalFunctions = Object.freeze({\r\n\r\n max: (...args) => {\r\n if (!args.every(v => typeof v === 'number')) {\r\n throw new Error(\"max() expects numbers only\");\r\n }\r\n return Math.max(...args);\r\n },\r\n\r\n min: (...args) => {\r\n if (!args.every(v => typeof v === 'number')) {\r\n throw new Error(\"min() expects numbers only\");\r\n }\r\n return Math.min(...args);\r\n },\r\n\r\n and,\r\n \"&&\": and,\r\n\r\n or,\r\n \"||\": or,\r\n\r\n not,\r\n \"!\": not,\r\n\r\n greaterThan: gt,\r\n \">\": gt,\r\n\r\n lessThan: lt,\r\n \"<\": lt,\r\n\r\n isEqual: eq,\r\n \"==\": eq,\r\n\r\n greaterThanOrEqual: gte,\r\n \">=\": gte,\r\n\r\n lessThanOrEqual: lte,\r\n \"<=\": lte,\r\n\r\n if: (cond, t, f = false) => cond ? t : f\r\n\r\n});","export const externalFunctions = {};\r\n\r\n// Add user-defined function\r\nexport function addFunction(name, fn) {\r\n\r\n if (typeof name !== \"string\" || name.trim() === \"\") {\r\n throw new Error(\"Function name must be a non-empty string\");\r\n }\r\n\r\n if (typeof fn !== \"function\") {\r\n throw new Error(\"Function must be a valid function\");\r\n }\r\n\r\n if (name in externalFunctions) {\r\n throw new Error(`Function '${name}' already exists`);\r\n }\r\n\r\n externalFunctions[name] = fn;\r\n}\r\n","export const variablesDB = {};\r\n\r\n// Valid JS variable name (full check)\r\nconst validVarName = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\r\n\r\nexport function setVariable(name, value, { override = true } = {}) {\r\n\r\n // Name validation\r\n if (typeof name !== \"string\" || name.trim() === \"\") {\r\n throw new Error(\"Variable Name Error: Name must be a non-empty string\");\r\n }\r\n\r\n if (!validVarName.test(name)) {\r\n throw new Error(`Variable Name Error: '${name}' is not a valid variable name`);\r\n }\r\n\r\n // Value validation\r\n if (value === undefined) {\r\n throw new Error(`Variable Value Error: '${name}' cannot be undefined`);\r\n }\r\n\r\n // Prevent overwrite (optional)\r\n if (!override && name in variablesDB) {\r\n throw new Error(`Variable '${name}' already exists`);\r\n }\r\n\r\n variablesDB[name] = value;\r\n}","export function stringToJS(str, variablesDB) {\r\n if (typeof str !== \"string\" || str.length === 0) {\r\n throw new Error(\"Invalid input: expected a non-empty string.\");\r\n }\r\n\r\n const firstChar = str[0];\r\n const lastChar = str[str.length - 1];\r\n\r\n // HEX (0x...)\r\n if (/^0x[0-9a-fA-F]+n?$/.test(str)) {\r\n\r\n // BigInt hex (0xFFn)\r\n if (lastChar === 'n') {\r\n return BigInt(str.slice(0, -1));\r\n }\r\n\r\n return Number(str);\r\n }\r\n\r\n if (/^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)(e[+-]?\\d+)?n?$/i.test(str)) {\r\n\r\n // BigInt\r\n if (lastChar === 'n') {\r\n const numPart = str.slice(0, -1);\r\n\r\n if (numPart.includes('.') || /e/i.test(numPart)) {\r\n throw new Error(`Invalid BigInt: ${str}`);\r\n }\r\n\r\n return BigInt(numPart);\r\n }\r\n\r\n return Number(str);\r\n }\r\n\r\n if (\r\n (firstChar === '\"' && lastChar === '\"') ||\r\n (firstChar === \"'\" && lastChar === \"'\") ||\r\n (firstChar === '`' && lastChar === '`')\r\n ) {\r\n return str.slice(1, -1);\r\n }\r\n\r\n if (\r\n firstChar === '\"' ||\r\n firstChar === \"'\" ||\r\n firstChar === '`'\r\n ) {\r\n throw new Error(`Unmatched or missing quotes: ${str}`);\r\n }\r\n\r\n if (str === \"true\") return true;\r\n if (str === \"false\") return false;\r\n\r\n if (str in variablesDB) {\r\n return variablesDB[str];\r\n }\r\n\r\n throw new Error(\r\n `${str} is not defined. Use setVariable(\"${str}\", value) first.`\r\n );\r\n}\r\nexport default stringToJS;","import { tokenize } from \"../parser/tokenizer.js\";\r\nimport { infixToPostfix } from \"../parser/infixToPostfix.js\";\r\nimport { evaluatePostfix } from \"../parser/evaluator.js\";\r\n\r\nimport { mathOperations } from \"../math/operations.js\";\r\n\r\nimport { internalFunctions } from \"../functions/internalFunctions.js\";\r\nimport { externalFunctions } from \"../functions/externalFunctions.js\";\r\n\r\nimport { variablesDB } from \"../variables/variables.js\";\r\n\r\nimport { stringToJS } from \"../utils/typeConverter.js\";\r\n\r\nclass ViewPoint {\r\n\r\n constructor() {\r\n // Shared state\r\n this.variablesDB = variablesDB;\r\n this.func_DB_intrnl = internalFunctions;\r\n this.func_DB_extrnl = externalFunctions;\r\n\r\n this.operator_precedence = mathOperations.operator_precedence;\r\n }\r\n\r\n setVariable(name, value) {\r\n this.variablesDB[name] = value;\r\n }\r\n\r\n addFunction(name, fn) {\r\n this.func_DB_extrnl[name] = fn;\r\n }\r\n\r\n stringToJS(str) {\r\n return stringToJS.call(this, str, this.variablesDB);\r\n }\r\n\r\n evaluate(expr) {\r\n\r\n if (typeof expr !== \"string\") {\r\n throw new Error(\"Expression must be a string\");\r\n }\r\n\r\n const context = {\r\n variablesDB: this.variablesDB,\r\n func_DB_intrnl: this.func_DB_intrnl,\r\n func_DB_extrnl: this.func_DB_extrnl,\r\n stringToJS: this.stringToJS.bind(this),\r\n evaluate: this.evaluate.bind(this)\r\n };\r\n\r\n // Step 1: Tokenize\r\n const tokens = tokenize(expr, context);\r\n\r\n // Step 2: Infix → Postfix\r\n const postfix = infixToPostfix(\r\n tokens,\r\n this.operator_precedence\r\n );\r\n\r\n // Step 3: Evaluate Postfix\r\n const result = evaluatePostfix(\r\n postfix,\r\n mathOperations\r\n );\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default ViewPoint;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exprify.js","sources":["../src/parser/tokenizer.js","../src/parser/evaluator.js","../src/core/context.js","../src/math/operations.js","../src/utils/store.js","../src/utils/globalUnits.js","../src/variables/store.js","../src/function/registry.js","../src/function/internal.js","../src/parser/astBuild.js","../src/core/Exprify.js"],"sourcesContent":["export function tokenize(expr, context = {}) {\n const tokens = [];\n let current = \"\";\n let quote = \"\";\n\n const operators = [\"+\", \"-\", \"*\", \"/\", \"%\", \"^\", \"=\", \">\", \"<\", \"!\", \"&\", \"|\"];\n const multiOps = [\n \"==\", \">=\", \"<=\", \"&&\", \"||\",\n \"+=\", \"-=\", \"*=\", \"/=\", \"%=\",\n \"?.\", \"??\", \"|>\"\n ];\n\n const parentheses = \"()\";\n const comma = \",\";\n const semicolon = \";\";\n const keywords = [\"to\", \"in\"];\n // const functions = context.functions?.getAllFunctionsName?.() || [];\n const units = context.units?.getAllUnitsFlat?.() || [];\n\n const isIdentifier = (s) => /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s);\n\n function getContext(str, charIndex) {\n // 1. Extract all alphanumeric words into an array\n const words = str.match(/[a-z0-9]+/gi) || [];\n \n // 2. Identify the current character and the one immediately before it\n const currentChar = str[charIndex] || null;\n const prevChar = charIndex > 0 ? str[charIndex - 1] : null;\n \n // 3. Find the word that contains the current charIndex\n let start = charIndex;\n // Move pointer back to the start of the current word\n while (start > 0 && /[a-z0-9]/i.test(str[start - 1])) start--;\n \n let end = charIndex;\n // Move pointer forward to the end of the current word\n while (end < str.length && /[a-z0-9]/i.test(str[end])) end++;\n \n const currentWord = str.substring(start, end);\n\n // 4. Find the word that appears before the currentWord in the sequence\n const currentWordIdx = words.indexOf(currentWord);\n const prevWord = currentWordIdx > 0 ? words[currentWordIdx - 1] : null;\n\n // 5. Find the word that appears after the currentWord\n const nextWord = (currentWordIdx !== -1 && currentWordIdx < words.length - 1) \n ? words[currentWordIdx + 1] \n : null;\n\n return {\n prevWord: prevWord,\n prevChar: prevChar,\n currentWord: currentWord,\n currentChar: currentChar,\n nextWord: nextWord\n };\n }\n\n const isUnaryContext = (prev) =>\n !prev ||\n prev.type === \"Operator\" ||\n prev.type === \"UnaryOperator\" ||\n (prev.type === \"Parenthesis\" && prev.value !== \")\") ||\n prev.type === \"ArrayStart\" ||\n prev.type === \"Semicolon\" ||\n prev.type === \"Comma\" ||\n prev.type === \"Ternary\";\n\n const flushCurrent = (nextChar, index) => {\n if (!current) return;\n\n // BOOLEAN\n if (/^(true|false)$/i.test(current)) {\n tokens.push({ type: \"Boolean\", value: current.toLowerCase() === \"true\" });\n current = \"\";\n return;\n }\n\n // KEYWORD\n if (keywords.includes(current)) {\n tokens.push({ type: \"Keyword\", value: current, pos: index });\n current = \"\";\n return;\n }\n\n // BIGINT\n if (/^\\d+n$/.test(current)) {\n tokens.push({ type: \"BigInt\", value: BigInt(current.slice(0, -1)), pos: index });\n current = \"\";\n return;\n }\n\n // HEX\n if (/^0x[0-9a-fA-F]+$/.test(current)) {\n tokens.push({ type: \"Number\", value: parseInt(current, 16), pos: index });\n current = \"\";\n return;\n }\n\n // BINARY\n if (/^0b[01]+$/.test(current)) {\n tokens.push({ type: \"Number\", value: parseInt(current, 2), pos: index });\n current = \"\";\n return;\n }\n\n // NUMBER (including scientific)\n if (/^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)(e[+-]?\\d+)?$/i.test(current)) {\n tokens.push({ type: \"Number\", value: parseFloat(current), pos: index });\n current = \"\";\n return;\n }\n\n // IMAGINARY NUMBER\n if (/^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)(e[+-]?\\d+)?i$/i.test(current)) {\n tokens.push({\n type: \"ImaginaryLiteral\",\n value: parseFloat(current.slice(0, -1)),\n pos: index\n });\n current = \"\";\n return;\n }\n\n // IMAGINARY UNIT\n if (/^[+-]?i$/i.test(current)) {\n const sign = current[0] === \"-\" ? -1 : 1;\n tokens.push({\n type: \"ImaginaryLiteral\",\n value: sign,\n pos: index\n });\n current = \"\";\n return;\n }\n\n // NUMBER + UNIT\n const numUnit = current.match(/^([+-]?\\d+(\\.\\d+)?)([a-zA-Z]+)$/);\n if (numUnit) {\n const value = parseFloat(numUnit[1]);\n const unit = numUnit[3];\n\n tokens.push({\n type: units.includes(unit) ? \"NumberWithUnit\" : \"UnknownUnit\",\n value,\n unit,\n pos: index\n });\n\n current = \"\";\n return;\n }\n\n // UNIT\n if (units.includes(current)) {\n const {prevWord} = getContext(expr, index);\n if (nextChar !== \"(\") {\n if (prevWord){\n if (!isNaN(parseFloat(prevWord)) || prevWord === \"to\" || prevWord === \"in\") {\n // console.log(\"Context for unit detection:\", {current, prevWord, nextChar});\n\n tokens.push({ type: \"Unit\", value: current, pos: index });\n current = \"\";\n return;\n }\n }\n }\n }\n\n // IDENTIFIER\n if (isIdentifier(current)) {\n if (nextChar === \"(\") {\n tokens.push({\n type: \"Function\",\n name: current,\n pos: index\n });\n } else {\n tokens.push({\n type: \"Identifier\",\n name: current,\n pos: index\n });\n }\n\n current = \"\";\n return;\n }\n\n throw new Error(`Invalid token \"${current}\" at index ${index}`);\n };\n \n\n for (let i = 0; i < expr.length; i++) {\n let char = expr[i];\n let next = expr[i + 1];\n\n // comments\n if (char === \"/\" && next === \"/\") {\n while (i < expr.length && expr[i] !== \"\\n\") i++;\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n i += 2;\n while (i < expr.length && !(expr[i] === \"*\" && expr[i + 1] === \"/\")) i++;\n i++;\n continue;\n }\n\n // string\n if (`\"'`.includes(char)) {\n if (!quote) {\n quote = char;\n current += char;\n } else if (quote === char) {\n current += char;\n tokens.push({\n type: \"String\",\n value: current.slice(1, -1),\n pos: i\n });\n current = \"\";\n quote = \"\";\n } else {\n current += char;\n }\n continue;\n }\n\n if (quote) {\n if (char === \"\\\\\") {\n current += char + expr[++i];\n } else {\n current += char;\n }\n continue;\n }\n\n // multi operators\n const twoChar = char + next;\n if (multiOps.includes(twoChar)) {\n flushCurrent(char, i);\n tokens.push({ type: \"Operator\", value: twoChar, pos: i });\n i++;\n continue;\n }\n\n if (char === \"?\") {\n tokens.push({ type: \"Ternary\", value: \"?\" });\n continue;\n }\n\n // only treat ':' as ternary IF previous token was '?'\n if (char === \":\") {\n flushCurrent(char, i);\n const prev = tokens[tokens.length - 1];\n\n if (prev && prev.type === \"Ternary\") {\n tokens.push({ type: \"Ternary\", value: \":\" });\n } else {\n tokens.push({ type: \"Colon\" });\n }\n continue;\n }\n\n // dot\n if (char === \".\" && /\\d/.test(current) && /\\d/.test(next)) {\n current += char;\n continue;\n }\n\n if (char === \".\") {\n flushCurrent(char, i);\n tokens.push({ type: \"Dot\", pos: i });\n continue;\n }\n\n // operators\n if (operators.includes(char)) {\n flushCurrent(char, i);\n\n const prev = tokens[tokens.length - 1];\n if ((char === \"-\" || char === \"!\") && isUnaryContext(prev)) {\n tokens.push({ type: \"UnaryOperator\", value: char, pos: i });\n } else {\n tokens.push({ type: \"Operator\", value: char, pos: i });\n }\n continue;\n }\n\n // parenthesis\n if (parentheses.includes(char)) {\n flushCurrent(char, i);\n tokens.push({ type: \"Parenthesis\", value: char, pos: i });\n continue;\n }\n\n // array\n if (char === \"[\") {\n flushCurrent(char, i);\n tokens.push({ type: \"ArrayStart\", pos: i });\n continue;\n }\n\n if (char === \"]\") {\n flushCurrent(char, i);\n tokens.push({ type: \"ArrayEnd\", pos: i });\n continue;\n }\n\n // OBJECT START\n if (char === \"{\") {\n flushCurrent(char, i);\n tokens.push({ type: \"BlockStart\", pos: i });\n continue;\n }\n\n // OBJECT END\n if (char === \"}\") {\n flushCurrent(char, i);\n tokens.push({ type: \"BlockEnd\", pos: i });\n continue;\n }\n\n // comma\n if (char === comma) {\n flushCurrent(char, i);\n tokens.push({ type: \"Comma\", pos: i });\n continue;\n }\n\n // semicolon\n if (char === semicolon) {\n flushCurrent(char, i);\n tokens.push({ type: \"Semicolon\", pos: i });\n continue;\n }\n\n // space\n if (char === \" \") {\n flushCurrent(next, i);\n continue;\n }\n\n // build token\n current += char;\n\n if (i === expr.length - 1) {\n flushCurrent(null, i);\n }\n }\n\n if (quote) throw new Error(\"Unclosed string literal\");\n\n // merge number + unit\n const merged = [];\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n const next = tokens[i + 1];\n\n if (t?.type === \"Number\" && next?.type === \"Unit\") {\n merged.push({\n type: \"NumberWithUnit\",\n value: t.value,\n unit: next.value,\n pos: t.pos\n });\n i++;\n continue;\n }\n\n merged.push(t);\n }\n\n // implicit multiplication\n const final = [];\n for (let i = 0; i < merged.length; i++) {\n const a = merged[i];\n const b = merged[i + 1];\n\n final.push(a);\n\n if (\n a && b &&\n (\n ([\"Number\", \"Identifier\"].includes(a.type) ||\n (a.type === \"Parenthesis\" && a.value === \")\") ||\n a.type === \"ArrayEnd\") &&\n ([\"Identifier\", \"Function\"].includes(b.type) ||\n (b.type === \"Parenthesis\" && b.value === \"(\"))\n )\n ) {\n final.push({ type: \"Operator\", value: \"*\", implicit: true });\n }\n }\n\n return final;\n}\n","export function evaluateAST(node, context = {}) {\n\n const vars = context.variables;\n const fns = context.functions;\n const units = context.units;\n\n\n const isUnitObj = (v) =>\n v && typeof v === \"object\" && \"value\" in v && \"unit\" in v;\n\n const isComplex = (v) =>\n v && typeof v === \"object\" && \"re\" in v && \"im\" in v;\n\n const isSliceNode = (v) =>\n v && typeof v === \"object\" && v.type === \"SliceExpression\";\n\n const isMatrix = (v) =>\n Array.isArray(v) && v.length > 0 && v.every(Array.isArray);\n\n const cloneValue = (value) => {\n if (Array.isArray(value)) {\n return value.map(cloneValue);\n }\n\n if (value && typeof value === \"object\") {\n return { ...value };\n }\n\n return value;\n };\n\n const normalizeMatrix = (value) => {\n if (isMatrix(value)) return value.map((row) => [...row]);\n if (Array.isArray(value)) return [value];\n throw new Error(\"Expected matrix-compatible value\");\n };\n\n const toOneBasedIndex = (value) => {\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 1) {\n throw new Error(\"Matrix indices must be positive integers\");\n }\n\n return value - 1;\n };\n\n const resolveSelector = (selector, contextLength) => {\n if (isSliceNode(selector)) {\n const startValue = selector.start == null ? 1 : evaluateAST(selector.start, context);\n const endValue = selector.end == null ? contextLength : evaluateAST(selector.end, context);\n const start = toOneBasedIndex(startValue);\n const end = toOneBasedIndex(endValue);\n\n if (end < start) {\n return [];\n }\n\n const result = [];\n for (let index = start; index <= end; index++) {\n result.push(index);\n }\n return result;\n }\n\n return [toOneBasedIndex(evaluateAST(selector, context))];\n };\n\n const indexMatrix = (matrix, selectors) => {\n const target = normalizeMatrix(matrix);\n\n if (selectors.length === 1) {\n const rowIndexes = resolveSelector(selectors[0], target.length);\n const rows = rowIndexes.map((rowIndex) => {\n if (rowIndex >= target.length) {\n throw new Error(\"Row index out of range\");\n }\n return [...target[rowIndex]];\n });\n\n return rows.length === 1 ? rows[0] : rows;\n }\n\n const rowIndexes = resolveSelector(selectors[0], target.length);\n const colIndexes = resolveSelector(selectors[1], target[0]?.length || 0);\n\n const values = rowIndexes.map((rowIndex) => {\n if (rowIndex >= target.length) {\n throw new Error(\"Row index out of range\");\n }\n\n return colIndexes.map((colIndex) => {\n if (colIndex >= target[rowIndex].length) {\n throw new Error(\"Column index out of range\");\n }\n return target[rowIndex][colIndex];\n });\n });\n\n if (rowIndexes.length === 1 && colIndexes.length === 1) {\n return values[0][0];\n }\n\n if (rowIndexes.length === 1) {\n return values[0];\n }\n\n if (colIndexes.length === 1) {\n return values.map((row) => [row[0]]);\n }\n\n return values;\n };\n\n const assignMatrixIndex = (matrix, selectors, value) => {\n const target = isMatrix(matrix)\n ? matrix.map((row) => [...row])\n : Array.isArray(matrix)\n ? [matrix.slice()]\n : [];\n\n const rowSelector = selectors[0];\n const colSelector = selectors[1];\n\n if (!rowSelector) {\n throw new Error(\"Matrix assignment requires at least one index\");\n }\n\n const rowContextLength = Math.max(target.length, 1);\n const rowIndexes = resolveSelector(rowSelector, rowContextLength);\n\n if (selectors.length === 1) {\n const rowsValue = isMatrix(value) ? value : normalizeMatrix(value);\n\n if (rowsValue.length !== rowIndexes.length) {\n throw new Error(\"Assigned row count does not match slice\");\n }\n\n rowIndexes.forEach((rowIndex, index) => {\n target[rowIndex] = [...rowsValue[index]];\n });\n\n return {\n updatedMatrix: target,\n selectionResult: rowIndexes.length === 1 ? [target[rowIndexes[0]]] : rowIndexes.map((rowIndex) => [target[rowIndex]])\n };\n }\n\n const maxCols = Math.max(...target.map((row) => row.length), 0, 1);\n const colIndexes = resolveSelector(colSelector, maxCols);\n const normalizedValue = normalizeMatrix(value);\n\n if (normalizedValue.length !== rowIndexes.length) {\n throw new Error(\"Assigned row count does not match matrix slice\");\n }\n\n normalizedValue.forEach((row, rowOffset) => {\n if (row.length !== colIndexes.length) {\n throw new Error(\"Assigned column count does not match matrix slice\");\n }\n });\n\n rowIndexes.forEach((rowIndex, rowOffset) => {\n if (!target[rowIndex]) {\n target[rowIndex] = [];\n }\n\n colIndexes.forEach((colIndex, colOffset) => {\n target[rowIndex][colIndex] = normalizedValue[rowOffset][colOffset];\n });\n });\n\n return {\n updatedMatrix: target,\n selectionResult: rowIndexes.length === 1\n ? [colIndexes.map((colIndex) => target[rowIndexes[0]][colIndex])]\n : rowIndexes.map((rowIndex) => colIndexes.map((colIndex) => target[rowIndex][colIndex]))\n };\n };\n\n const multiplyMatrices = (left, right) => {\n const a = normalizeMatrix(left);\n const b = normalizeMatrix(right);\n\n if (a[0].length !== b.length) {\n throw new Error(\"Matrix dimensions do not allow multiplication\");\n }\n\n return a.map((row) =>\n b[0].map((_, colIndex) =>\n row.reduce((sum, value, rowIndex) => sum + (value * b[rowIndex][colIndex]), 0)\n )\n );\n };\n\n const toComplex = (value) => {\n if (isComplex(value)) return value;\n if (typeof value === \"number\") return { re: value, im: 0 };\n throw new Error(\"Complex arithmetic only supports numbers\");\n };\n\n const fromImaginary = (value) => ({ re: 0, im: value });\n\n const simplifyComplex = (value) =>\n value.im === 0 ? value.re : value;\n\n const evalComplexBinary = (operator, left, right) => {\n const a = toComplex(left);\n const b = toComplex(right);\n\n switch (operator) {\n case \"+\":\n return simplifyComplex({ re: a.re + b.re, im: a.im + b.im });\n case \"-\":\n return simplifyComplex({ re: a.re - b.re, im: a.im - b.im });\n case \"*\":\n return simplifyComplex({\n re: (a.re * b.re) - (a.im * b.im),\n im: (a.re * b.im) + (a.im * b.re)\n });\n case \"/\": {\n const denominator = (b.re ** 2) + (b.im ** 2);\n\n if (denominator === 0) {\n throw new Error(\"Division by zero\");\n }\n\n return simplifyComplex({\n re: ((a.re * b.re) + (a.im * b.im)) / denominator,\n im: ((a.im * b.re) - (a.re * b.im)) / denominator\n });\n }\n default:\n throw new Error(`Operator ${operator} is not supported for complex numbers`);\n }\n };\n\n /* ================= EVALUATOR ================= */\n\n switch (node.type) {\n\n /* ===== LITERAL ===== */\n case \"Literal\":\n return node.value;\n\n case \"ImaginaryLiteral\":\n return fromImaginary(node.value);\n\n case \"UnitLiteral\":\n return { value: node.value, unit: node.unit };\n\n /* ===== VARIABLE ===== */\n case \"Identifier\":\n return vars.get(node.name);\n\n /* ===== ASSIGNMENT ===== */\n case \"AssignmentExpression\": {\n const value = evaluateAST(node.right, context);\n\n if (node.left.type === \"Identifier\") {\n vars.set(node.left.name, value);\n return value;\n }\n\n if (node.left.type === \"IndexExpression\" && node.left.object.type === \"Identifier\") {\n const currentValue = vars.get(node.left.object.name);\n const assigned = assignMatrixIndex(currentValue, node.left.selectors, value);\n vars.set(node.left.object.name, assigned.updatedMatrix);\n return assigned.selectionResult;\n }\n\n throw new Error(\"Invalid assignment target\");\n }\n\n /* ===== UNARY ===== */\n case \"UnaryExpression\": {\n const val = evaluateAST(node.argument, context);\n\n switch (node.operator) {\n case \"-\":\n return isComplex(val)\n ? simplifyComplex({ re: -val.re, im: -val.im })\n : -val;\n case \"!\": return !val;\n }\n\n throw new Error(`Unknown unary operator ${node.operator}`);\n }\n\n /* ===== BINARY ===== */\n case \"BinaryExpression\": {\n let left = evaluateAST(node.left, context);\n let right = evaluateAST(node.right, context);\n\n // 🔥 UNIT handling\n if (isUnitObj(left) || isUnitObj(right)) {\n\n if (!units) throw new Error(\"Unit system not available\");\n\n return units.compute(node.operator, left, right);\n }\n\n if (node.operator === \"*\" && (Array.isArray(left) || Array.isArray(right))) {\n return multiplyMatrices(left, right);\n }\n\n if (isComplex(left) || isComplex(right)) {\n return evalComplexBinary(node.operator, left, right);\n }\n\n switch (node.operator) {\n case \"+\": return left + right;\n case \"-\": return left - right;\n case \"*\": return left * right;\n case \"/\": return left / right;\n case \"%\": return left % right;\n case \"^\": return left ** right;\n\n case \">\": return left > right;\n case \"<\": return left < right;\n case \">=\": return left >= right;\n case \"<=\": return left <= right;\n case \"==\": return left === right;\n }\n\n throw new Error(`Unknown operator ${node.operator}`);\n }\n\n /* ===== LOGICAL ===== */\n case \"LogicalExpression\": {\n const left = evaluateAST(node.left, context);\n\n if (node.operator === \"&&\") {\n return left && evaluateAST(node.right, context);\n }\n\n if (node.operator === \"||\") {\n return left || evaluateAST(node.right, context);\n }\n\n if (node.operator === \"??\") {\n return left ?? evaluateAST(node.right, context);\n }\n\n throw new Error(`Unknown logical operator ${node.operator}`);\n }\n\n /* ===== FUNCTION CALL ===== */\n case \"CallExpression\": {\n const fnName = node.callee.name;\n const fn = fns.get(fnName);\n\n const args = node.arguments.map(arg =>\n evaluateAST(arg, context)\n );\n\n return fn(...args);\n }\n\n /* ===== PIPELINE ===== */\n case \"PipelineExpression\": {\n const leftVal = evaluateAST(node.left, context);\n\n // right must be function\n if (node.right.type === \"CallExpression\") {\n const fnName = node.right.callee.name;\n const fn = fns.get(fnName);\n\n const args = [\n leftVal,\n ...node.right.arguments.map(arg =>\n evaluateAST(arg, context)\n )\n ];\n\n return fn(...args);\n }\n\n if (node.right.type === \"Identifier\") {\n const fn = fns.get(node.right.name);\n return fn(leftVal);\n }\n\n throw new Error(\"Invalid pipeline target\");\n }\n\n /* ===== UNIT CONVERSION ===== */\n case \"UnitConversion\": {\n const from = evaluateAST(node.from, context);\n\n if (!isUnitObj(from)) {\n throw new Error(\"Left side must be a unit value\");\n }\n\n if (!units) {\n throw new Error(\"Unit system not available\");\n }\n\n return units.convert(from.value, from.unit, node.to);\n }\n\n /* ===== ARRAY ===== */\n case \"ArrayExpression\":\n return node.elements.map(el => evaluateAST(el, context));\n\n case \"IndexExpression\": {\n const target = evaluateAST(node.object, context);\n return indexMatrix(target, node.selectors);\n }\n\n /* ===== OBJECT ===== */\n case \"ObjectExpression\": {\n const obj = {};\n for (let p of node.properties) {\n obj[p.key] = evaluateAST(p.value, context);\n }\n return obj;\n }\n\n /* ===== MEMBER ===== */\n case \"MemberExpression\": {\n const obj = evaluateAST(node.object, context);\n\n if (node.optional && obj == null) return undefined;\n\n return obj[node.property.name];\n }\n\n default:\n throw new Error(`Unknown AST node type: ${node.type}`);\n }\n}\n","export function createContext({ variables, functions, units, evaluate}) {\n if (!variables) throw new Error(\"Variable store missing\");\n if (!functions) throw new Error(\"Function registry missing\");\n if (!units) throw new Error(\"Units list missing\");\n if (!evaluate) throw new Error(\"evaluate function missing\");\n\n return {\n variables: variables,\n functions: functions,\n units: units,\n evaluate,\n withScope(scope = {}) {\n const tempVars = {\n ...variables.all?.(),\n ...scope\n };\n return createContext({\n functions: functions,\n evaluate,\n units,\n variables: {\n get: (k) => tempVars[k],\n set: (k, v) => (tempVars[k] = v),\n all: () => tempVars\n }\n });\n\n }\n };\n}","const isValidNumberPair = (a, b) =>\n (typeof a === typeof b) &&\n (typeof a === 'number' || typeof a === 'bigint');\n\nexport const mathOperations = Object.freeze({\n power: function(a, b) {\n if (isValidNumberPair(a, b)) return a ** b;\n throw new Error(\"Invalid types for ^\");\n },\n\n multiply: function(a, b) {\n if (isValidNumberPair(a, b)) return a * b;\n throw new Error(\"Invalid types for *\");\n },\n\n divide: function(a, b) {\n if (isValidNumberPair(a, b)) {\n if (b === 0) throw new Error(\"Division by zero\");\n return a / b;\n }\n throw new Error(\"Invalid types for /\");\n },\n\n add: function(a, b) {\n if (isValidNumberPair(a, b)) return a + b;\n if (typeof a === 'string' && typeof b === 'string') return a + b;\n throw new Error(\"Invalid types for +\");\n },\n subtract: function(a, b) {\n if (isValidNumberPair(a, b)) return a - b;\n throw new Error(\"Invalid types for -\");\n },\n\n modulus: function(a, b) {\n if (isValidNumberPair(a, b)) return a % b;\n throw new Error(\"Invalid types for %\");\n }\n});","export function createUnitsStore(initial = {}) {\n let units = { ...initial};\n\n // ---------- Helpers ----------\n\n function getAllUnitsFlat() {\n const result = new Set();\n\n for (const type in units) {\n for (const key in units[type]) {\n const u = units[type][key];\n\n const keyLower = key.toLowerCase();\n result.add(keyLower);\n\n // Unit name\n if (u.unit) {\n const unitLower = u.unit.toLowerCase();\n\n // Avoid duplicate like \"m\" vs \"meter\"\n if (unitLower !== keyLower) {\n // Optional: only single-word units\n if (unitLower.split(/\\s+/).length === 1) {\n result.add(unitLower);\n }\n }\n }\n\n // Symbol\n if (u.symbol) {\n const symbolLower = u.symbol.toLowerCase();\n\n // Avoid duplicate with unit name\n if (!u.unit || symbolLower !== u.unit.toLowerCase()) {\n result.add(symbolLower);\n }\n }\n }\n }\n\n return Array.from(result);\n }\n\n function findUnit(input) {\n input = input.toLowerCase();\n\n for (const type in units) {\n for (const key in units[type]) {\n const u = units[type][key];\n\n if (\n key.toLowerCase() === input ||\n u.unit?.toLowerCase() === input ||\n u.symbol?.toLowerCase() === input\n ) {\n return { type, key , data: u};\n }\n }\n }\n\n return null;\n }\n\n // ---------- Core Convert ----------\n\n function convert(value, fromUnit, toUnit) {\n const from = findUnit(fromUnit);\n const to = findUnit(toUnit);\n\n if (!from) throw new Error(`Unknown unit: ${fromUnit}`);\n if (!to) throw new Error(`Unknown unit: ${toUnit}`);\n\n if (from.type !== to.type) {\n throw new Error(`Cannot convert ${fromUnit} to ${toUnit} (${to.data.unit || to.key}). ${from.data.unit || from.key} conversion units like ${Object.keys(units[from.type]).join(\", \")}`);\n }\n\n const result = value * (from.data.value / to.data.value);\n\n return { value: result, unit: to.key };\n }\n\n // ---------- Public API ----------\n\n return {\n // Get all units\n getUnits: () => units,\n\n // Replace all units\n setUnits: (newUnits) => {\n units = { ...newUnits };\n },\n\n // Update single type\n updateType: (type, data) => {\n units[type] = { ...units[type], ...data };\n },\n\n // Add new unit\n addUnit: (type, key, unitObj) => {\n if (!units[type]) units[type] = {};\n units[type][key] = unitObj;\n },\n compute(op, left, right) {\n\n const isUnit = (v) =>\n v && typeof v === \"object\" && \"value\" in v && \"unit\" in v;\n\n const apply = (a, b) => {\n switch (op) {\n case \"+\": return a + b;\n case \"-\": return a - b;\n case \"*\": return a * b;\n case \"/\": return a / b;\n case \"%\": return a % b;\n case \"^\": return Math.pow(a, b);\n }\n };\n\n // BOTH UNIT\n if (isUnit(left) && isUnit(right)) {\n\n const from = this.findUnit(right.unit);\n const to = this.findUnit(left.unit);\n\n if (from.type !== to.type) {\n throw new Error(`Cannot operate on different unit types`);\n }\n\n // convert right → left unit\n const r = right.value * (from.data.value / to.data.value);\n\n const result = apply(left.value, r);\n\n // multiplication/division produce compound units\n if (op === \"*\") {\n return { value: result, unit: left.unit };\n }\n\n if (op === \"/\") {\n return { value: result, unit: left.unit };\n }\n\n if (op === \"^\") {\n return { value: result, unit: left.unit };\n }\n\n return { value: result, unit: left.unit };\n }\n\n // ================= LEFT UNIT =================\n if (isUnit(left) && !isUnit(right)) {\n const result = apply(left.value, right);\n\n return { value: result, unit: left.unit };\n }\n\n // ================= RIGHT UNIT =================\n if (!isUnit(left) && isUnit(right)) {\n const result = apply(left, right.value);\n\n if (op === \"/\") {\n return { value: result, unit: right.unit };\n }\n\n return { value: result, unit: right.unit };\n }\n\n // ================= NORMAL =================\n return apply(left, right);\n },\n // Convert\n convert,\n\n // Search helpers\n getAllUnitsFlat,\n findUnit\n };\n}\n","export const globalUnits = {\n // Length\n length: {\n m: { value: 1, unit: 'meter', symbol: 'm' },\n cm: { value: 0.01, unit: 'centimeter', symbol: 'cm' },\n mm: { value: 0.001, unit: 'millimeter', symbol: 'mm' },\n km: { value: 1000, unit: 'kilometer', symbol: 'km' },\n um: { value: 0.000001, unit: 'micrometer', symbol: 'um', note: 'also called micron' },\n nm: { value: 0.000000001, unit: 'nanometer', symbol: 'nm' },\n px: { value: 0.000264583, unit: 'pixel', symbol: 'px', note: '96dpi standard' },\n em: { value: 0.000264583 * 16, unit: 'em', symbol: 'em', note: '1em = 16px by default' },\n rem: { value: 0.000264583 * 16, unit: 'rem', symbol: 'rem', note: 'root em = 16px by default' },\n pt: { value: 0.000352778, unit: 'point', symbol: 'pt', note: '1pt = 1/72 inch' },\n pc: { value: 0.00423333, unit: 'pica', symbol: 'pc', note: '1pc = 12pt' },\n inch: { value: 0.0254, unit: 'inch', symbol: 'in' },\n ft: { value: 0.3048, unit: 'foot', symbol: 'ft' },\n yd: { value: 0.9144, unit: 'yard', symbol: 'yd' },\n mi: { value: 1609.344, unit: 'mile', symbol: 'mi' },\n thou: { value: 0.0000254, unit: 'mil', symbol: 'thou', note: 'thousandth of an inch' },\n furlong: { value: 201.168, unit: 'furlong', symbol: 'fur', note: '220 yards' },\n nmi: { value: 1852, unit: 'nautical mile', symbol: 'nmi' },\n fathom: { value: 1.8288, unit: 'fathom', symbol: 'fathom' },\n au: { value: 1.496e11, unit: 'astronomical unit', symbol: 'AU' },\n ly: { value: 9.4607e15, unit: 'light year', symbol: 'ly' },\n pc: { value: 3.0857e16, unit: 'parsec', symbol: 'pc' }\n },\n\n // Weight / Mass\n weight: {\n mg: { value: 1e-6, unit: 'milligram', symbol: 'mg' },\n g: { value: 0.001, unit: 'gram', symbol: 'g' },\n kg: { value: 1, unit: 'kilogram', symbol: 'kg' },\n t: { value: 1000, unit: 'tonne', symbol: 't', note: 'metric ton' },\n lb: { value: 0.453592, unit: 'pound', symbol: 'lb' },\n oz: { value: 0.0283495, unit: 'ounce', symbol: 'oz' },\n stone: { value: 6.35029, unit: 'stone', symbol: 'st', note: '1 stone = 14 lb' }\n },\n\n // Time\n time: {\n s: { value: 1, unit: 'second', symbol: 's' },\n min: { value: 60, unit: 'minute', symbol: 'min' },\n h: { value: 3600, unit: 'hour', symbol: 'h' },\n day: { value: 86400, unit: 'day', symbol: 'd' },\n week: { value: 604800, unit: 'week', symbol: 'wk' },\n month: { value: 2629800, unit: 'month', symbol: 'mo', note: 'average month = 30.44 days' },\n year: { value: 31557600, unit: 'year', symbol: 'yr', note: 'average year = 365.25 days' }\n },\n\n // Voltage\n voltage: {\n V: { value: 1, unit: 'volt', symbol: 'V' },\n mV: { value: 0.001, unit: 'millivolt', symbol: 'mV' },\n kV: { value: 1000, unit: 'kilovolt', symbol: 'kV' },\n MV: { value: 1e6, unit: 'megavolt', symbol: 'MV' },\n GV: { value: 1e9, unit: 'gigavolt', symbol: 'GV' },\n statV: { value: 299.792458, unit: 'statvolt', symbol: 'statV', note: 'CGS unit' },\n abV: { value: 1e-8, unit: 'abvolt', symbol: 'abV', note: 'CGS electromagnetic unit' }\n },\n\n // Frequency\n frequency: {\n Hz: { value: 1, unit: 'hertz', symbol: 'Hz', note: '1 cycle per second' },\n kHz: { value: 1e3, unit: 'kilohertz', symbol: 'kHz' },\n MHz: { value: 1e6, unit: 'megahertz', symbol: 'MHz' },\n GHz: { value: 1e9, unit: 'gigahertz', symbol: 'GHz' },\n THz: { value: 1e12, unit: 'terahertz', symbol: 'THz' }\n },\n\n // Power\n power: {\n W: { value: 1, unit: 'watt', symbol: 'W', note: '1 joule per second' },\n mW: { value: 0.001, unit: 'milliwatt', symbol: 'mW' },\n kW: { value: 1000, unit: 'kilowatt', symbol: 'kW' },\n MW: { value: 1e6, unit: 'megawatt', symbol: 'MW' },\n GW: { value: 1e9, unit: 'gigawatt', symbol: 'GW' },\n HP: { value: 745.7, unit: 'horsepower', symbol: 'HP', note: 'mechanical HP = 745.7 W' },\n kcal_per_h: { value: 1.163, unit: 'kilocalorie per hour', symbol: 'kcal/h', note: '= 1.163 W' },\n BTU_per_h: { value: 0.29307107, unit: 'BTU per hour', symbol: 'BTU/h', note: '= 0.293 W' }\n },\n\n // Sound\n sound: {\n dB: { value: 1, unit: 'decibel', symbol: 'dB', note: 'logarithmic unit of sound intensity' },\n dBA: { value: 1, unit: 'A-weighted decibel', symbol: 'dBA', note: 'Adjusted for human hearing' },\n dBC: { value: 1, unit: 'C-weighted decibel', symbol: 'dBC', note: 'Flat weighting for high-level sounds' }\n },\n\n // Temperature\n temperature: {\n K: { value: 1, unit: 'kelvin', symbol: 'K' },\n C: { value: 1, unit: 'Celsius', symbol: '°C', note: '°C → K: add 273.15' },\n F: { value: 1, unit: 'Fahrenheit', symbol: '°F', note: '°F → K: (°F - 32) * 5/9 + 273.15' }\n },\n\n // Pressure\n pressure: {\n Pa: { value: 1, unit: 'pascal', symbol: 'Pa' },\n kPa: { value: 1000, unit: 'kilopascal', symbol: 'kPa' },\n MPa: { value: 1e6, unit: 'megapascal', symbol: 'MPa' },\n bar: { value: 1e5, unit: 'bar', symbol: 'bar' },\n atm: { value: 101325, unit: 'atmosphere', symbol: 'atm' },\n psi: { value: 6894.757, unit: 'pound per square inch', symbol: 'psi' },\n mmHg:{ value: 133.322, unit: 'millimeter of mercury', symbol: 'mmHg' }\n },\n\n // Energy\n energy: {\n J: { value: 1, unit: 'joule', symbol: 'J' },\n kJ: { value: 1000, unit: 'kilojoule', symbol: 'kJ' },\n cal: { value: 4.184, unit: 'calorie', symbol: 'cal' },\n kcal:{ value: 4184, unit: 'kilocalorie', symbol: 'kcal' },\n eV: { value: 1.60218e-19, unit: 'electronvolt', symbol: 'eV' },\n BTU: { value: 1055.06, unit: 'BTU', symbol: 'BTU' }\n },\n\n // Force\n force: {\n N: { value: 1, unit: 'newton', symbol: 'N' },\n kN: { value: 1000, unit: 'kilonewton', symbol: 'kN' },\n lbf: { value: 4.44822, unit: 'pound-force', symbol: 'lbf' },\n kgf: { value: 9.80665, unit: 'kilogram-force', symbol: 'kgf' },\n dyne:{ value: 1e-5, unit: 'dyne', symbol: 'dyn' }\n },\n\n // Area\n area: {\n m2: { value: 1, unit: 'square meter', symbol: 'm²' },\n cm2: { value: 0.0001, unit: 'square centimeter', symbol: 'cm²' },\n km2: { value: 1e6, unit: 'square kilometer', symbol: 'km²' },\n acre: { value: 4046.856, unit: 'acre', symbol: 'acre' },\n hectare:{ value: 10000, unit: 'hectare', symbol: 'ha' },\n ft2: { value: 0.092903, unit: 'square foot', symbol: 'ft²' },\n yd2: { value: 0.836127, unit: 'square yard', symbol: 'yd²' }\n },\n\n // Volume\n volume: {\n m3: { value: 1, unit: 'cubic meter', symbol: 'm³' },\n L: { value: 0.001, unit: 'liter', symbol: 'L' },\n mL: { value: 1e-6, unit: 'milliliter', symbol: 'mL' },\n gallon:{ value: 0.00378541, unit: 'US gallon', symbol: 'gal' },\n pint: { value: 0.000473176, unit: 'US pint', symbol: 'pt' },\n floz: { value: 2.9574e-5, unit: 'US fluid ounce', symbol: 'fl oz' }\n },\n\n // Electrical Current\n current: {\n A: { value: 1, unit: 'ampere', symbol: 'A' },\n mA: { value: 0.001, unit: 'milliampere', symbol: 'mA' },\n uA: { value: 0.000001, unit: 'microampere', symbol: 'uA' },\n kA: { value: 1000, unit: 'kiloampere', symbol: 'kA' }\n },\n\n // Resistance / Conductance\n resistance: {\n ohm: { value: 1, unit: 'ohm' },\n kohm: { value: 1000, unit: 'kiloohm'},\n megaohm: { value: 1e6, unit: 'megaohm'},\n S: { value: 1, unit: 'siemens', symbol: 'S', note: 'conductance' }\n },\n\n // Capacitance / Inductance\n capacitance: {\n F: { value: 1, unit: 'farad', symbol: 'F' },\n mF: { value: 0.001, unit: 'millifarad'},\n uF: { value: 0.000001, unit: 'microfarad' }\n },\n inductance: {\n H: { value: 1, unit: 'henry', symbol: 'H' },\n mH: { value: 0.001, unit: 'millihenry', symbol: 'mH' },\n uH: { value: 0.000001, unit: 'microhenry', symbol: 'uH' }\n },\n\n // Luminous Intensity / Illuminance\n light: {\n cd: { value: 1, unit: 'candela', symbol: 'cd' },\n lm: { value: 1, unit: 'lumen', symbol: 'lm' },\n lx: { value: 1, unit: 'lux', symbol: 'lx' }\n },\n\n // Data / Digital Storage\n data: {\n bit: { value: 1, unit: 'bit', symbol: 'bit' },\n B: { value: 8, unit: 'byte', symbol: 'B' },\n KB: { value: 8e3, unit: 'kilobyte', symbol: 'KB' },\n MB: { value: 8e6, unit: 'megabyte', symbol: 'MB' },\n GB: { value: 8e9, unit: 'gigabyte', symbol: 'GB' },\n TB: { value: 8e12, unit: 'terabyte', symbol: 'TB' }\n },\n\n // Angle\n angle: {\n deg: { value: 1, unit: 'degree', symbol: '°' },\n rad: { value: 57.2958, unit: 'radian', symbol: 'rad', note: '1 rad = 57.2958°' },\n grad:{ value: 0.9, unit: 'grad', symbol: 'grad', note: '1 grad = 0.9°' }\n },\n radiation: {\n // Absorbed Dose\n Gy: { value: 1, unit: 'gray', symbol: 'Gy', note: 'Absorbed dose: 1 Gy = 1 J/kg' },\n mGy: { value: 0.001, unit: 'milligray', symbol: 'mGy' },\n rad: { value: 0.01, unit: 'rad', symbol: 'rad', note: '1 rad = 0.01 Gy' },\n\n // Dose Equivalent\n Sv: { value: 1, unit: 'sievert', symbol: 'Sv', note: 'Biological effect dose equivalent' },\n mSv: { value: 0.001, unit: 'millisievert', symbol: 'mSv' },\n rem: { value: 0.01, unit: 'rem', symbol: 'rem', note: '1 rem = 0.01 Sv' },\n\n // Radioactivity\n Bq: { value: 1, unit: 'becquerel', symbol: 'Bq', note: '1 decay per second' },\n kBq: { value: 1e3, unit: 'kilobecquerel', symbol: 'kBq' },\n MBq: { value: 1e6, unit: 'megabecquerel', symbol: 'MBq' },\n GBq: { value: 1e9, unit: 'gigabecquerel', symbol: 'GBq' },\n Ci: { value: 3.7e10, unit: 'curie', symbol: 'Ci', note: '1 Ci = 3.7 x 10¹⁰ decays per second' },\n mCi: { value: 3.7e7, unit: 'millicurie', symbol: 'mCi' }\n }\n};","const validVarName = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\nexport function createVarStore(initial = {}) {\n let store = Object.create(null);\n \n\n for (const key in initial) {\n store[key] = initial[key];\n }\n\n return {\n set(name, value, { override = true } = {}) {\n\n // Name validation\n if (typeof name !== \"string\" || !name) {\n throw new Error(\"Variable name must be a non-empty string\");\n }\n\n if (!validVarName.test(name)) {\n throw new Error(`Variable Name Error: '${name}' is not a valid variable name`);\n }\n\n // Value validation\n if (value === undefined) {\n throw new Error(`Variable Value Error: '${name}' cannot be undefined`);\n }\n\n // Prevent overwrite (optional)\n if (!override && name in variablesDB) {\n throw new Error(`Variable '${name}' already exists`);\n }\n\n store[name] = value;\n },\n\n //get variable\n get(name) {\n return store[name];\n },\n\n // check existence\n has(name) {\n return Object.prototype.hasOwnProperty.call(store, name);\n },\n\n // remove variable\n remove(name) {\n delete store[name];\n },\n\n // get all variables (snapshot)\n all() {\n return { ...store };\n },\n\n // clear all\n clear() {\n store = Object.create(null);\n },\n\n // merge multiple variables\n merge(obj = {}) {\n for (const key in obj) {\n store[key] = obj[key];\n }\n },\n\n // clone store (for scoped instances) \n clone() {\n return createVarStore(store);\n }\n };\n}\n\nexport default { createVarStore };","export function createFunctionRegistry(initial = {}) {\n const store = Object.create(null);\n\n for (const key in initial) {\n if (typeof initial[key] === \"function\") {\n store[key] = initial[key];\n }\n }\n\n return {\n getAllFunctionsName() {\n return Object.keys(store);\n },\n // register new formula\n register(name, fn) {\n if (typeof name !== \"string\" || !name) {\n throw new Error(\"Formula name must be a non-empty string\");\n }\n\n if (typeof fn !== \"function\") {\n throw new Error(`Formula \"${name}\" must be callable`);\n }\n\n store[name] = fn;\n },\n\n // get formula\n get(name) {\n return store[name];\n },\n\n // check existence\n has(name) {\n return Object.prototype.hasOwnProperty.call(store, name);\n },\n\n // remove formula\n remove(name) {\n delete store[name];\n },\n\n // list all\n all() {\n return { ...store };\n },\n\n // clear registry\n clear() {\n for (const key in store) {\n delete store[key];\n }\n },\n\n // extend multiple\n extend(formulas = {}) {\n for (const name in formulas) {\n if (typeof formulas[name] === \"function\") {\n store[name] = formulas[name];\n }\n }\n },\n\n // clone (for scoped instances)\n clone() {\n return createFormulaRegistry(store);\n }\n };\n}","function validateSquareMatrix(matrix) {\n if (!Array.isArray(matrix) || matrix.length === 0) {\n throw new Error(\"det() expects a non-empty matrix\");\n }\n\n if (!matrix.every(Array.isArray)) {\n throw new Error(\"det() expects a 2D matrix\");\n }\n\n const size = matrix.length;\n if (!matrix.every((row) => row.length === size)) {\n throw new Error(\"det() expects a square matrix\");\n }\n\n for (const row of matrix) {\n for (const value of row) {\n if (typeof value !== \"number\" && typeof value !== \"bigint\") {\n throw new Error(\"det() matrix values must be numeric\");\n }\n }\n }\n}\n\nfunction determinant(matrix) {\n validateSquareMatrix(matrix);\n\n if (matrix.length === 1) {\n return matrix[0][0];\n }\n\n if (matrix.length === 2) {\n return (matrix[0][0] * matrix[1][1]) - (matrix[0][1] * matrix[1][0]);\n }\n\n return matrix[0].reduce((sum, value, columnIndex) => {\n const minor = matrix.slice(1).map((row) =>\n row.filter((_, index) => index !== columnIndex)\n );\n const cofactor = columnIndex % 2 === 0 ? value : -value;\n return sum + (cofactor * determinant(minor));\n }, 0);\n}\n\nfunction splitTerms(expression) {\n const normalized = expression.replace(/\\s+/g, \"\");\n if (!normalized) {\n return [];\n }\n\n return normalized\n .replace(/-/g, \"+-\")\n .split(\"+\")\n .filter(Boolean);\n}\n\nfunction parsePolynomial(expression, variable) {\n const terms = splitTerms(expression);\n const coefficients = new Map();\n\n for (const term of terms) {\n if (term.includes(variable)) {\n const [rawCoeff, rawPower] = term.split(variable);\n let coefficient;\n\n if (rawCoeff === \"\" || rawCoeff === \"+\") coefficient = 1;\n else if (rawCoeff === \"-\") coefficient = -1;\n else {\n const cleaned = rawCoeff.endsWith(\"*\") ? rawCoeff.slice(0, -1) : rawCoeff;\n coefficient = Number(cleaned);\n }\n\n if (!Number.isFinite(coefficient)) {\n throw new Error(\"Unsupported algebra term\");\n }\n\n let power = 1;\n if (rawPower) {\n if (!rawPower.startsWith(\"^\")) {\n throw new Error(\"Unsupported algebra term\");\n }\n\n power = Number(rawPower.slice(1));\n }\n\n if (!Number.isInteger(power) || power < 0) {\n throw new Error(\"Only non-negative integer powers are supported\");\n }\n\n coefficients.set(power, (coefficients.get(power) || 0) + coefficient);\n } else {\n const constant = Number(term);\n if (!Number.isFinite(constant)) {\n throw new Error(\"Unsupported algebra term\");\n }\n coefficients.set(0, (coefficients.get(0) || 0) + constant);\n }\n }\n\n return coefficients;\n}\n\nfunction formatPolynomial(coefficients, variable) {\n const ordered = [...coefficients.entries()]\n .filter(([, coefficient]) => coefficient !== 0)\n .sort((a, b) => b[0] - a[0]);\n\n if (!ordered.length) {\n return \"0\";\n }\n\n return ordered.map(([power, coefficient], index) => {\n const negative = coefficient < 0;\n const absCoeff = Math.abs(coefficient);\n let body;\n\n if (power === 0) {\n body = `${absCoeff}`;\n } else if (power === 1) {\n body = absCoeff === 1 ? variable : `${absCoeff} * ${variable}`;\n } else {\n body = absCoeff === 1\n ? `${variable}^${power}`\n : `${absCoeff} * ${variable}^${power}`;\n }\n\n if (index === 0) {\n return negative ? `-${body}` : body;\n }\n\n return negative ? `- ${body}` : `+ ${body}`;\n }).join(\" \");\n}\n\nfunction simplifyExpression(expression) {\n const compact = expression.replace(/\\s+/g, \"\");\n const variableMatch = compact.match(/[a-zA-Z]+/);\n const variable = variableMatch?.[0] || \"x\";\n const coefficients = parsePolynomial(expression, variable);\n return formatPolynomial(coefficients, variable);\n}\n\nfunction derivativeExpression(expression, variable) {\n const coefficients = parsePolynomial(expression, variable);\n const derived = new Map();\n\n for (const [power, coefficient] of coefficients.entries()) {\n if (power === 0) continue;\n derived.set(power - 1, (derived.get(power - 1) || 0) + (coefficient * power));\n }\n\n return formatPolynomial(derived, variable);\n}\n\nexport const internalFunctions = {\n max: (...args) => {\n if (!args.length) throw new Error(\"max() requires arguments\");\n return Math.max(...args);\n },\n\n min: (...args) => {\n if (!args.length) throw new Error(\"min() requires arguments\");\n return Math.min(...args);\n },\n\n abs: (x) => Math.abs(x),\n\n round: (x) => Math.round(x),\n\n floor: (x) => Math.floor(x),\n\n ceil: (x) => Math.ceil(x),\n\n sqrt: (x) => {\n if (x < 0) throw new Error(\"sqrt() domain error\");\n return Math.sqrt(x);\n },\n\n pow: (a, b) => a ** b,\n det: (matrix) => determinant(matrix),\n simplify: (expression) => {\n if (typeof expression !== \"string\") {\n throw new Error(\"simplify() expects an expression string\");\n }\n return simplifyExpression(expression);\n },\n derivative: (expression, variable = \"x\") => {\n if (typeof expression !== \"string\" || typeof variable !== \"string\") {\n throw new Error(\"derivative() expects expression and variable strings\");\n }\n return derivativeExpression(expression, variable);\n },\n\n /* ================= TRIGONOMETRY ================= */\n\n sin: (x) => Math.sin(x),\n cos: (x) => Math.cos(x),\n tan: (x) => Math.tan(x),\n\n asin: (x) => Math.asin(x),\n acos: (x) => Math.acos(x),\n atan: (x) => Math.atan(x),\n\n /* ================= LOG / EXP ================= */\n\n log: (x) => {\n if (x <= 0) throw new Error(\"log() domain error\");\n return Math.log(x);\n },\n\n log10: (x) => {\n if (x <= 0) throw new Error(\"log10() domain error\");\n return Math.log10(x);\n },\n\n exp: (x) => Math.exp(x),\n\n /* ================= RANDOM ================= */\n\n random: () => Math.random(),\n\n /* ================= BOOLEAN / LOGIC ================= */\n\n and: (a, b) => Boolean(a && b),\n\n or: (a, b) => Boolean(a || b),\n\n not: (a) => !a,\n \"!\": (a) => !a,\n\n /* ================= COMPARISON ================= */\n\n eq: (a, b) => a === b,\n\n neq: (a, b) => a !== b,\n \"notEqual\": (a, b) => a !== b,\n\n gt: (a, b) => a > b,\n \"greaterThan\": (a, b) => a > b,\n\n lt: (a, b) => a < b,\n \"lessThan\": (a, b) => a < b,\n\n gte: (a, b) => a >= b,\n \"greaterThanOrEqual\": (a, b) => a >= b,\n\n lte: (a, b) => a <= b,\n \"lessThanOrEqual\": (a, b) => a <= b,\n\n /* ================= UTILITY ================= */\n\n clamp: (x, min, max) => {\n if (min > max) throw new Error(\"clamp(): min > max\");\n return Math.min(Math.max(x, min), max);\n },\n\n if: (condition, a, b) => (condition ? a : b),\n\n /* ================= TYPE ================= */\n\n typeof: (x) => typeof x,\n\n /* ================= STRING ================= */\n\n length: (x) => {\n if (typeof x === \"string\" || Array.isArray(x)) {\n return x.length;\n }\n throw new Error(\"length() expects string or array\");\n }\n};\n","export function buildAST(tokens) {\n let current = 0;\n\n const peek = () => tokens[current];\n const consume = () => tokens[current++];\n\n const match = (type, value) => {\n const t = peek();\n if (!t) return false;\n\n if (t.type !== type) return false;\n\n if (value !== undefined && t.value !== value) return false;\n\n current++;\n return true;\n };\n\n const parseSliceOrIndex = () => {\n let start = null;\n\n if (!(peek()?.type === \"Colon\" || peek()?.type === \"Comma\" || peek()?.type === \"ArrayEnd\")) {\n start = parseExpression();\n }\n\n if (match(\"Colon\")) {\n let end = null;\n\n if (!(peek()?.type === \"Comma\" || peek()?.type === \"ArrayEnd\")) {\n end = parseExpression();\n }\n\n return {\n type: \"SliceExpression\",\n start,\n end\n };\n }\n\n return start;\n };\n\n /* ================= PRIMARY ================= */\n function parsePrimary() {\n const token = consume();\n if (!token) throw new Error(\"Unexpected end of input\");\n\n switch (token.type) {\n case \"Number\":\n case \"BigInt\":\n case \"Boolean\":\n case \"String\":\n return { type: \"Literal\", value: token.value };\n\n case \"ImaginaryLiteral\":\n return { type: \"ImaginaryLiteral\", value: token.value };\n\n case \"NumberWithUnit\":\n return {\n type: \"UnitLiteral\",\n value: token.value,\n unit: token.unit\n };\n\n case \"Identifier\":\n return { type: \"Identifier\", name: token.name };\n \n case \"Function\": // 🔥 ADD THIS\n return {\n type: \"Identifier\",\n name: token.name\n };\n\n case \"Parenthesis\":\n if (token.value === \"(\") {\n const expr = parseExpression();\n\n if (!match(\"Parenthesis\", \")\")) {\n throw new Error(`Expected ')'`);\n }\n\n return expr;\n }\n \n case \"ArrayStart\": {\n const rows = [];\n let currentRow = [];\n\n if (!match(\"ArrayEnd\")) {\n while (true) {\n currentRow.push(parseExpression());\n\n if (match(\"Comma\")) {\n continue;\n }\n\n if (match(\"Semicolon\")) {\n rows.push(currentRow);\n currentRow = [];\n continue;\n }\n\n if (match(\"ArrayEnd\")) {\n rows.push(currentRow);\n break;\n }\n\n throw new Error(`Expected ',', ';', or ']' at ${current}`);\n }\n }\n\n if (!rows.length) {\n return { type: \"ArrayExpression\", elements: [] };\n }\n\n if (rows.length === 1) {\n return { type: \"ArrayExpression\", elements: rows[0] };\n }\n\n return {\n type: \"ArrayExpression\",\n elements: rows.map((elements) => ({\n type: \"ArrayExpression\",\n elements\n }))\n };\n }\n\n case \"BlockStart\": {\n const properties = [];\n\n if (!match(\"BlockEnd\")) {\n do {\n const keyToken = consume();\n\n if (\n keyToken.type !== \"Identifier\" &&\n keyToken.type !== \"String\"\n ) {\n throw new Error(\"Invalid object key\");\n }\n\n if (!match(\"Colon\")) {\n throw new Error(\"Expected ':' after key\");\n }\n\n const value = parseExpression();\n\n properties.push({\n key: keyToken.value,\n value\n });\n\n } while (match(\"Comma\"));\n\n if (!match(\"BlockEnd\")) {\n throw new Error(`Expected '}' at ${current}`);\n }\n }\n\n return { type: \"ObjectExpression\", properties };\n }\n }\n\n throw new Error(`Unexpected token: ${JSON.stringify(token)}`);\n }\n\n /* ================= MEMBER ================= */\n function parseMember() {\n let object = parsePrimary();\n\n while (true) {\n if (match(\"ArrayStart\")) {\n const selectors = [];\n\n if (!match(\"ArrayEnd\")) {\n do {\n selectors.push(parseSliceOrIndex());\n } while (match(\"Comma\"));\n\n if (!match(\"ArrayEnd\")) {\n throw new Error(`Expected ']' at ${current}`);\n }\n }\n\n object = {\n type: \"IndexExpression\",\n object,\n selectors\n };\n continue;\n }\n\n if (match(\"Dot\")) {\n const property = consume();\n\n if (property.type !== \"Identifier\") {\n throw new Error(\"Expected property after '.'\");\n }\n\n object = {\n type: \"MemberExpression\",\n object,\n property: { type: \"Identifier\", name: property.value },\n optional: false\n };\n continue;\n }\n\n if (match(\"Operator\", \"?.\")) {\n const property = consume();\n\n object = {\n type: \"MemberExpression\",\n object,\n property: { type: \"Identifier\", name: property.value },\n optional: true\n };\n continue;\n }\n\n break;\n }\n\n return object;\n }\n\n /* ================= CALL ================= */\n function parseCallChain() {\n let expr = parseMember();\n\n while (peek()?.type === \"Parenthesis\" && peek()?.value === \"(\") {\n consume(); // '('\n\n const args = [];\n\n if (!(peek()?.type === \"Parenthesis\" && peek()?.value === \")\")) {\n do {\n args.push(parseExpression());\n } while (match(\"Comma\"));\n }\n\n if (!match(\"Parenthesis\", \")\")) {\n throw new Error(`Expected ')' at ${current}`);\n }\n\n expr = {\n type: \"CallExpression\",\n callee: expr,\n arguments: args\n };\n }\n\n return expr;\n }\n\n /* ================= UNARY ================= */\n function parseUnary() {\n if (match(\"UnaryOperator\")) {\n const operator = tokens[current - 1].value;\n\n return {\n type: \"UnaryExpression\",\n operator,\n argument: parseUnary()\n };\n }\n\n return parseCallChain();\n }\n\n /* ================= POWER ================= */\n function parsePower() {\n let left = parseUnary();\n\n if (match(\"Operator\", \"^\")) {\n const right = parsePower();\n return {\n type: \"BinaryExpression\",\n operator: \"^\",\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= MULT ================= */\n function parseMultiplication() {\n let left = parsePower();\n\n while (\n match(\"Operator\", \"*\") ||\n match(\"Operator\", \"/\") ||\n match(\"Operator\", \"%\")\n ) {\n const operator = tokens[current - 1].value;\n const right = parsePower();\n\n left = {\n type: \"BinaryExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= ADD ================= */\n function parseAddition() {\n let left = parseMultiplication();\n\n while (match(\"Operator\", \"+\") || match(\"Operator\", \"-\")) {\n const operator = tokens[current - 1].value;\n const right = parseMultiplication();\n\n left = {\n type: \"BinaryExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= UNIT CONVERSION ================= */\n function parseUnitConversion() {\n let left = parseAddition();\n\n const nextKeyword = peek();\n if (nextKeyword?.type === \"Keyword\" && [\"to\", \"in\"].includes(nextKeyword.value)) {\n consume();\n const next = consume();\n\n if (!next || next.type !== \"Unit\") {\n throw new Error(`Expected unit after '${nextKeyword.value}'`);\n }\n\n return {\n type: \"UnitConversion\",\n from: left,\n to: next.value\n };\n }\n\n return left;\n }\n\n /* ================= COMPARISON ================= */\n function parseComparison() {\n let left = parseUnitConversion();\n\n while (\n match(\"Operator\", \">\") ||\n match(\"Operator\", \"<\") ||\n match(\"Operator\", \">=\") ||\n match(\"Operator\", \"<=\") ||\n match(\"Operator\", \"==\")\n ) {\n const operator = tokens[current - 1].value;\n const right = parseUnitConversion();\n\n left = {\n type: \"BinaryExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= LOGICAL ================= */\n function parseLogical() {\n let left = parseComparison();\n\n while (\n match(\"Operator\", \"&&\") ||\n match(\"Operator\", \"||\")\n ) {\n const operator = tokens[current - 1].value;\n const right = parseComparison();\n\n left = {\n type: \"LogicalExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= NULLISH ================= */\n function parseNullish() {\n let left = parseLogical();\n\n while (match(\"Operator\", \"??\")) {\n const right = parseLogical();\n\n left = {\n type: \"LogicalExpression\",\n operator: \"??\",\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= TERNARY ================= */\n function parseTernary() {\n let test = parseNullish();\n\n if (match(\"Ternary\", \"?\")) {\n const consequent = parseExpression();\n\n if (!match(\"Ternary\", \":\")) {\n throw new Error(\"Expected ':' in ternary\");\n }\n\n const alternate = parseExpression();\n\n return {\n type: \"ConditionalExpression\",\n test,\n consequent,\n alternate\n };\n }\n\n return test;\n }\n\n /* ================= PIPELINE ================= */\n function parsePipeline() {\n let left = parseTernary();\n\n while (match(\"Operator\", \"|>\")) {\n const right = parseTernary();\n\n left = {\n type: \"PipelineExpression\",\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= ASSIGNMENT ================= */\n function parseAssignment() {\n let left = parsePipeline();\n\n if (\n match(\"Operator\", \"=\") ||\n match(\"Operator\", \"+=\") ||\n match(\"Operator\", \"-=\") ||\n match(\"Operator\", \"*=\") ||\n match(\"Operator\", \"/=\")\n ) {\n const operator = tokens[current - 1].value;\n\n if (\n left.type !== \"Identifier\" &&\n left.type !== \"MemberExpression\" &&\n left.type !== \"IndexExpression\"\n ) {\n throw new Error(\"Invalid assignment target\");\n }\n\n const right = parseAssignment();\n\n return {\n type: \"AssignmentExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= ENTRY ================= */\n function parseExpression() {\n return parseAssignment();\n }\n\n const ast = parseExpression();\n\n if (current < tokens.length) {\n throw new Error(\n `Unexpected token at end: ${JSON.stringify(peek())}`\n );\n }\n\n return ast;\n}\n","import { tokenize } from \"../parser/tokenizer.js\";\n// import { infixToPostfix } from \"../parser/infixToPostfix.js\";\nimport { evaluateAST } from \"../parser/evaluator.js\";\nimport { createContext } from \"./context.js\";\nimport { mathOperations } from \"../math/operations.js\";\n\nimport { createUnitsStore } from \"../utils/store.js\";\nimport { globalUnits } from \"../utils/globalUnits.js\";\n\nimport { createVarStore } from \"../variables/store.js\";\nimport { createFunctionRegistry } from \"../function/registry.js\";\nimport { internalFunctions } from \"../function/internal.js\";\n\nimport { buildAST } from \"../parser/astBuild.js\";\n\n\n//\n\nconst isComplex = (value) =>\n value && typeof value === \"object\" && \"re\" in value && \"im\" in value;\n\nconst isUnitValue = (value) =>\n value && typeof value === \"object\" && \"value\" in value && \"unit\" in value;\n\nconst isMatrix = (value) =>\n Array.isArray(value) && value.length > 0 && value.every(Array.isArray);\n\nconst formatComplex = (value) => {\n if (!isComplex(value)) return value;\n\n const real = value.re;\n const imaginary = Math.abs(value.im);\n const sign = value.im < 0 ? \"-\" : \"+\";\n\n if (real === 0) {\n if (value.im === 1) return \"i\";\n if (value.im === -1) return \"-i\";\n return `${value.im}i`;\n }\n\n const imagPart = imaginary === 1 ? \"i\" : `${imaginary}i`;\n return `${real} ${sign} ${imagPart}`;\n};\n\nconst formatResult = (value) => {\n if (isComplex(value)) {\n return formatComplex(value);\n }\n\n if (isUnitValue(value)) {\n return `${value.value} ${value.unit}`;\n }\n\n if (isMatrix(value)) {\n return value.map((row) => row.join(\"\\t\")).join(\"\\n\");\n }\n\n if (Array.isArray(value)) {\n return value.join(\"\\n\");\n }\n\n return value;\n};\n\nclass exprify {\n constructor() {\n // Shared state\n this.math = mathOperations;\n this.units = createUnitsStore(globalUnits);\n this.functions = createFunctionRegistry(internalFunctions);\n this.variables = createVarStore();\n this._cache = new Map();\n }\n\n setVariable(name, value) {\n this.variables.set(name, value);\n }\n\n getVariable(name) {\n return this.variables.get(name);\n }\n\n addFunction(name, fn) {\n this.functions.register(name, fn);\n }\n\n _createContext() {\n return createContext({\n functions: this.functions,\n variables: this.variables,\n units: this.units,\n evaluate: this.evaluate.bind(this)\n });\n }\n\n tokenize(expr) {\n if (typeof expr !== \"string\") {\n throw new Error(\"Expression must be a string\");\n }\n return tokenize(expr, this._createContext());\n }\n\n parse(expr) {\n const tokens = this.tokenize(expr);\n const ast = buildAST(tokens);\n return { tokens, ast };\n }\n\n evaluate(expr) {\n const { ast } = this.parse(expr);\n return formatResult(evaluateAST(\n ast,\n this._createContext()\n ));\n }\n\n compile(expr) {\n if (this._cache.has(expr)) {\n return this._cache.get(expr);\n }\n\n const { ast } = this.parse(expr);\n\n const compiledFn = (scope = {}) => {\n const baseContext = this._createContext();\n const scopedContext = baseContext.withScope(scope);\n return formatResult(evaluateAST(ast, scopedContext));\n };\n\n this._cache.set(expr, compiledFn);\n return compiledFn;\n }\n\n clearCache() {\n this._cache.clear();\n }\n\n}\n\nexport default exprify;\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- /*! exprify v1.0.0 | * (c) 2026 Nirmal Paul and contributors | GPL-3.0 License*/
2
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).Exprify={})}(this,function(e){"use strict";const r=(e,r)=>typeof e==typeof r&&("number"==typeof e||"bigint"==typeof e),t=Object.freeze({operator_precedence:{"^":4,"*":3,"/":3,"%":3,"+":1,"-":1},power:function(e,t){if(r(e,t))return e**t;throw new Error("Invalid types for ^")},multiply:function(e,t){if(r(e,t))return e*t;throw new Error("Invalid types for *")},divide:function(e,t){if(r(e,t)){if(0===t)throw new Error("Division by zero");return e/t}throw new Error("Invalid types for /")},add:function(e,t){if(r(e,t))return e+t;if("string"==typeof e&&"string"==typeof t)return e+t;throw new Error("Invalid types for +")},subtract:function(e,t){if(r(e,t))return e-t;throw new Error("Invalid types for -")},modulus:function(e,t){if(r(e,t))return e%t;throw new Error("Invalid types for %")}}),n=(...e)=>e.every(Boolean),i=(...e)=>e.some(Boolean),o=e=>!e,s=(e,r)=>e>r,a=(e,r)=>e<r,f=(e,r)=>e===r,l=(e,r)=>e>=r,u=(e,r)=>e<=r,h=Object.freeze({max:(...e)=>{if(!e.every(e=>"number"==typeof e))throw new Error("max() expects numbers only");return Math.max(...e)},min:(...e)=>{if(!e.every(e=>"number"==typeof e))throw new Error("min() expects numbers only");return Math.min(...e)},and:n,"&&":n,or:i,"||":i,not:o,"!":o,greaterThan:s,">":s,lessThan:a,"<":a,isEqual:f,"==":f,greaterThanOrEqual:l,">=":l,lessThanOrEqual:u,"<=":u,if:(e,r,t=!1)=>e?r:t}),c={},p={};function d(e,r){if("string"!=typeof e||0===e.length)throw new Error("Invalid input: expected a non-empty string.");const t=e[0],n=e[e.length-1];if(/^0x[0-9a-fA-F]+n?$/.test(e))return"n"===n?BigInt(e.slice(0,-1)):Number(e);if(/^[+-]?(\d+(\.\d+)?|\.\d+)(e[+-]?\d+)?n?$/i.test(e)){if("n"===n){const r=e.slice(0,-1);if(r.includes(".")||/e/i.test(r))throw new Error(`Invalid BigInt: ${e}`);return BigInt(r)}return Number(e)}if('"'===t&&'"'===n||"'"===t&&"'"===n||"`"===t&&"`"===n)return e.slice(1,-1);if('"'===t||"'"===t||"`"===t)throw new Error(`Unmatched or missing quotes: ${e}`);if("true"===e)return!0;if("false"===e)return!1;if(e in r)return r[e];throw new Error(`${e} is not defined. Use setVariable("${e}", value) first.`)}e.Exprify=class{constructor(){this.variablesDB=p,this.func_DB_intrnl=h,this.func_DB_extrnl=c,this.operator_precedence=t.operator_precedence}setVariable(e,r){this.variablesDB[e]=r}addFunction(e,r){this.func_DB_extrnl[e]=r}stringToJS(e){return d.call(this,e,this.variablesDB)}evaluate(e){if("string"!=typeof e)throw new Error("Expression must be a string");const r=function(e,r){let t=[],n="",i="";for(let o=0;o<e.length;o++){let s=e[o];const a="("===s||")"===s||"^"===s||"*"===s||"/"===s||"%"===s||"+"===s||"-"===s,f='"'===s||"'"===s||"`"===s;if(f)""===i?(i=s,n+=s):i===s?(n+=s,i="",t.push(r.stringToJS(n,r.variablesDB)),n=""):n+=s;else if(""===i){if("#"===s){let n=0,i="",a="",l=[],u="";for(;o<e.length-1;)if(o++,s=e[o],0!==n){if(f&&(""===u?u=s:u===s&&(u="")),""===u){if("("===s)n++;else if(")"===s&&(n--,0===n)){""!==a&&l.push(a);break}if(","===s&&1===n){if(""===a)throw new Error(`Missing argument in #${i}()`);l.push(a),a="";continue}}a+=s}else{if("("===s){n++;continue}if(" "===s)throw new Error("Function name cannot contain space");if(f)throw new Error("Function name cannot contain quotes");if(""===i&&/[0-9.]/.test(s))throw new Error("Function name cannot start with number");i+=s}l=l.map(e=>r.evaluate(e));let h=r.func_DB_intrnl[i]||r.func_DB_extrnl[i];if(!h)throw new Error(`#${i}() not defined`);t.push(h(...l));continue}a?(""!==n&&(t.push(r.stringToJS(n,r.variablesDB)),n=""),t.push(s)):" "!==s?(n+=s,o===e.length-1&&""!==n&&t.push(r.stringToJS(n,r.variablesDB))):""!==n&&(t.push(r.stringToJS(n,r.variablesDB)),n="")}else n+=s}if(""!==i)throw new Error("Unclosed string literal");return t}(e,{variablesDB:this.variablesDB,func_DB_intrnl:this.func_DB_intrnl,func_DB_extrnl:this.func_DB_extrnl,stringToJS:this.stringToJS.bind(this),evaluate:this.evaluate.bind(this)}),n=function(e,r){let t=[],n=[];for(let i=0;i<e.length;i++){let o=e[i];const s="^"===o||"*"===o||"/"===o||"%"===o||"+"===o||"-"===o,a="("===o,f=")"===o;if(s||a||f){if(s){for(;n.length>0;){let e=n[n.length-1];if("("===e)break;let i=r[e]||0,s=r[o];if(!("^"===o&&s<i||"^"!==o&&s<=i))break;t.push(n.pop())}n.push(o)}else if(a)n.push(o);else if(f){for(;n.length>0&&"("!==n[n.length-1];)t.push(n.pop());if(0===n.length)throw new Error("Mismatched parentheses: missing '('");n.pop()}}else t.push(o)}for(;n.length>0;){let e=n.pop();if("("===e||")"===e)throw new Error("Mismatched parentheses");t.push(e)}return t}(r,this.operator_precedence),i=function(e,r){let t=[];const n=e=>"^"===e||"*"===e||"/"===e||"%"===e||"+"===e||"-"===e;for(let i=0;i<e.length;i++){let o=e[i];if(!n(o)){t.push(o);continue}if(t.length<2)throw new Error("Invalid expression: insufficient operands");let s,a=t.pop(),f=t.pop();switch(o){case"^":s=r.power(f,a);break;case"*":s=r.multiply(f,a);break;case"/":s=r.divide(f,a);break;case"%":s=r.modulus(f,a);break;case"+":s=r.add(f,a);break;case"-":s=r.subtract(f,a)}t.push(s)}if(1!==t.length)throw new Error("Invalid expression: leftover values in stack");return t[0]}(n,t);return i}},e.externalFunctions=c,e.internalFunctions=h,e.mathOperations=t,e.variablesDB=p,Object.defineProperty(e,"__esModule",{value:!0})});
1
+ /*! exprify v1.0.1 | * (c) 2026 Nirmal Paul and contributors | GPL-3.0 License*/
2
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Exprify=t()}(this,function(){"use strict";function e(t,r={}){const n=r.variables,o=r.functions,i=r.units,a=e=>e&&"object"==typeof e&&"value"in e&&"unit"in e,s=e=>e&&"object"==typeof e&&"re"in e&&"im"in e,l=e=>Array.isArray(e)&&e.length>0&&e.every(Array.isArray),u=e=>{if(l(e))return e.map(e=>[...e]);if(Array.isArray(e))return[e];throw new Error("Expected matrix-compatible value")},m=e=>{if("number"!=typeof e||!Number.isInteger(e)||e<1)throw new Error("Matrix indices must be positive integers");return e-1},c=(t,n)=>{if((o=t)&&"object"==typeof o&&"SliceExpression"===o.type){const o=null==t.start?1:e(t.start,r),i=null==t.end?n:e(t.end,r),a=m(o),s=m(i);if(s<a)return[];const l=[];for(let e=a;e<=s;e++)l.push(e);return l}var o;return[m(e(t,r))]},p=e=>{if(s(e))return e;if("number"==typeof e)return{re:e,im:0};throw new Error("Complex arithmetic only supports numbers")},y=e=>0===e.im?e.re:e;switch(t.type){case"Literal":return t.value;case"ImaginaryLiteral":return{re:0,im:t.value};case"UnitLiteral":return{value:t.value,unit:t.unit};case"Identifier":return n.get(t.name);case"AssignmentExpression":{const o=e(t.right,r);if("Identifier"===t.left.type)return n.set(t.left.name,o),o;if("IndexExpression"===t.left.type&&"Identifier"===t.left.object.type){const e=((e,t,r)=>{const n=l(e)?e.map(e=>[...e]):Array.isArray(e)?[e.slice()]:[],o=t[0],i=t[1];if(!o)throw new Error("Matrix assignment requires at least one index");const a=Math.max(n.length,1),s=c(o,a);if(1===t.length){const e=l(r)?r:u(r);if(e.length!==s.length)throw new Error("Assigned row count does not match slice");return s.forEach((t,r)=>{n[t]=[...e[r]]}),{updatedMatrix:n,selectionResult:1===s.length?[n[s[0]]]:s.map(e=>[n[e]])}}const m=Math.max(...n.map(e=>e.length),0,1),p=c(i,m),y=u(r);if(y.length!==s.length)throw new Error("Assigned row count does not match matrix slice");return y.forEach((e,t)=>{if(e.length!==p.length)throw new Error("Assigned column count does not match matrix slice")}),s.forEach((e,t)=>{n[e]||(n[e]=[]),p.forEach((r,o)=>{n[e][r]=y[t][o]})}),{updatedMatrix:n,selectionResult:1===s.length?[p.map(e=>n[s[0]][e])]:s.map(e=>p.map(t=>n[e][t]))}})(n.get(t.left.object.name),t.left.selectors,o);return n.set(t.left.object.name,e.updatedMatrix),e.selectionResult}throw new Error("Invalid assignment target")}case"UnaryExpression":{const n=e(t.argument,r);switch(t.operator){case"-":return s(n)?y({re:-n.re,im:-n.im}):-n;case"!":return!n}throw new Error(`Unknown unary operator ${t.operator}`)}case"BinaryExpression":{let n=e(t.left,r),o=e(t.right,r);if(a(n)||a(o)){if(!i)throw new Error("Unit system not available");return i.compute(t.operator,n,o)}if("*"===t.operator&&(Array.isArray(n)||Array.isArray(o)))return((e,t)=>{const r=u(e),n=u(t);if(r[0].length!==n.length)throw new Error("Matrix dimensions do not allow multiplication");return r.map(e=>n[0].map((t,r)=>e.reduce((e,t,o)=>e+t*n[o][r],0)))})(n,o);if(s(n)||s(o))return((e,t,r)=>{const n=p(t),o=p(r);switch(e){case"+":return y({re:n.re+o.re,im:n.im+o.im});case"-":return y({re:n.re-o.re,im:n.im-o.im});case"*":return y({re:n.re*o.re-n.im*o.im,im:n.re*o.im+n.im*o.re});case"/":{const e=o.re**2+o.im**2;if(0===e)throw new Error("Division by zero");return y({re:(n.re*o.re+n.im*o.im)/e,im:(n.im*o.re-n.re*o.im)/e})}default:throw new Error(`Operator ${e} is not supported for complex numbers`)}})(t.operator,n,o);switch(t.operator){case"+":return n+o;case"-":return n-o;case"*":return n*o;case"/":return n/o;case"%":return n%o;case"^":return n**o;case">":return n>o;case"<":return n<o;case">=":return n>=o;case"<=":return n<=o;case"==":return n===o}throw new Error(`Unknown operator ${t.operator}`)}case"LogicalExpression":{const n=e(t.left,r);if("&&"===t.operator)return n&&e(t.right,r);if("||"===t.operator)return n||e(t.right,r);if("??"===t.operator)return n??e(t.right,r);throw new Error(`Unknown logical operator ${t.operator}`)}case"CallExpression":{const n=t.callee.name;return o.get(n)(...t.arguments.map(t=>e(t,r)))}case"PipelineExpression":{const n=e(t.left,r);if("CallExpression"===t.right.type){const i=t.right.callee.name;return o.get(i)(...[n,...t.right.arguments.map(t=>e(t,r))])}if("Identifier"===t.right.type){return o.get(t.right.name)(n)}throw new Error("Invalid pipeline target")}case"UnitConversion":{const n=e(t.from,r);if(!a(n))throw new Error("Left side must be a unit value");if(!i)throw new Error("Unit system not available");return i.convert(n.value,n.unit,t.to)}case"ArrayExpression":return t.elements.map(t=>e(t,r));case"IndexExpression":return((e,t)=>{const r=u(e);if(1===t.length){const e=c(t[0],r.length).map(e=>{if(e>=r.length)throw new Error("Row index out of range");return[...r[e]]});return 1===e.length?e[0]:e}const n=c(t[0],r.length),o=c(t[1],r[0]?.length||0),i=n.map(e=>{if(e>=r.length)throw new Error("Row index out of range");return o.map(t=>{if(t>=r[e].length)throw new Error("Column index out of range");return r[e][t]})});return 1===n.length&&1===o.length?i[0][0]:1===n.length?i[0]:1===o.length?i.map(e=>[e[0]]):i})(e(t.object,r),t.selectors);case"ObjectExpression":{const n={};for(let o of t.properties)n[o.key]=e(o.value,r);return n}case"MemberExpression":{const n=e(t.object,r);if(t.optional&&null==n)return;return n[t.property.name]}default:throw new Error(`Unknown AST node type: ${t.type}`)}}function t({variables:e,functions:r,units:n,evaluate:o}){if(!e)throw new Error("Variable store missing");if(!r)throw new Error("Function registry missing");if(!n)throw new Error("Units list missing");if(!o)throw new Error("evaluate function missing");return{variables:e,functions:r,units:n,evaluate:o,withScope(i={}){const a={...e.all?.(),...i};return t({functions:r,evaluate:o,units:n,variables:{get:e=>a[e],set:(e,t)=>a[e]=t,all:()=>a}})}}}const r=(e,t)=>typeof e==typeof t&&("number"==typeof e||"bigint"==typeof e),n=Object.freeze({power:function(e,t){if(r(e,t))return e**t;throw new Error("Invalid types for ^")},multiply:function(e,t){if(r(e,t))return e*t;throw new Error("Invalid types for *")},divide:function(e,t){if(r(e,t)){if(0===t)throw new Error("Division by zero");return e/t}throw new Error("Invalid types for /")},add:function(e,t){if(r(e,t))return e+t;if("string"==typeof e&&"string"==typeof t)return e+t;throw new Error("Invalid types for +")},subtract:function(e,t){if(r(e,t))return e-t;throw new Error("Invalid types for -")},modulus:function(e,t){if(r(e,t))return e%t;throw new Error("Invalid types for %")}});const o={length:{m:{value:1,unit:"meter",symbol:"m"},cm:{value:.01,unit:"centimeter",symbol:"cm"},mm:{value:.001,unit:"millimeter",symbol:"mm"},km:{value:1e3,unit:"kilometer",symbol:"km"},um:{value:1e-6,unit:"micrometer",symbol:"um",note:"also called micron"},nm:{value:1e-9,unit:"nanometer",symbol:"nm"},px:{value:264583e-9,unit:"pixel",symbol:"px",note:"96dpi standard"},em:{value:.004233328,unit:"em",symbol:"em",note:"1em = 16px by default"},rem:{value:.004233328,unit:"rem",symbol:"rem",note:"root em = 16px by default"},pt:{value:352778e-9,unit:"point",symbol:"pt",note:"1pt = 1/72 inch"},pc:{value:.00423333,unit:"pica",symbol:"pc",note:"1pc = 12pt"},inch:{value:.0254,unit:"inch",symbol:"in"},ft:{value:.3048,unit:"foot",symbol:"ft"},yd:{value:.9144,unit:"yard",symbol:"yd"},mi:{value:1609.344,unit:"mile",symbol:"mi"},thou:{value:254e-7,unit:"mil",symbol:"thou",note:"thousandth of an inch"},furlong:{value:201.168,unit:"furlong",symbol:"fur",note:"220 yards"},nmi:{value:1852,unit:"nautical mile",symbol:"nmi"},fathom:{value:1.8288,unit:"fathom",symbol:"fathom"},au:{value:1496e8,unit:"astronomical unit",symbol:"AU"},ly:{value:94607e11,unit:"light year",symbol:"ly"},pc:{value:30857e12,unit:"parsec",symbol:"pc"}},weight:{mg:{value:1e-6,unit:"milligram",symbol:"mg"},g:{value:.001,unit:"gram",symbol:"g"},kg:{value:1,unit:"kilogram",symbol:"kg"},t:{value:1e3,unit:"tonne",symbol:"t",note:"metric ton"},lb:{value:.453592,unit:"pound",symbol:"lb"},oz:{value:.0283495,unit:"ounce",symbol:"oz"},stone:{value:6.35029,unit:"stone",symbol:"st",note:"1 stone = 14 lb"}},time:{s:{value:1,unit:"second",symbol:"s"},min:{value:60,unit:"minute",symbol:"min"},h:{value:3600,unit:"hour",symbol:"h"},day:{value:86400,unit:"day",symbol:"d"},week:{value:604800,unit:"week",symbol:"wk"},month:{value:2629800,unit:"month",symbol:"mo",note:"average month = 30.44 days"},year:{value:31557600,unit:"year",symbol:"yr",note:"average year = 365.25 days"}},voltage:{V:{value:1,unit:"volt",symbol:"V"},mV:{value:.001,unit:"millivolt",symbol:"mV"},kV:{value:1e3,unit:"kilovolt",symbol:"kV"},MV:{value:1e6,unit:"megavolt",symbol:"MV"},GV:{value:1e9,unit:"gigavolt",symbol:"GV"},statV:{value:299.792458,unit:"statvolt",symbol:"statV",note:"CGS unit"},abV:{value:1e-8,unit:"abvolt",symbol:"abV",note:"CGS electromagnetic unit"}},frequency:{Hz:{value:1,unit:"hertz",symbol:"Hz",note:"1 cycle per second"},kHz:{value:1e3,unit:"kilohertz",symbol:"kHz"},MHz:{value:1e6,unit:"megahertz",symbol:"MHz"},GHz:{value:1e9,unit:"gigahertz",symbol:"GHz"},THz:{value:1e12,unit:"terahertz",symbol:"THz"}},power:{W:{value:1,unit:"watt",symbol:"W",note:"1 joule per second"},mW:{value:.001,unit:"milliwatt",symbol:"mW"},kW:{value:1e3,unit:"kilowatt",symbol:"kW"},MW:{value:1e6,unit:"megawatt",symbol:"MW"},GW:{value:1e9,unit:"gigawatt",symbol:"GW"},HP:{value:745.7,unit:"horsepower",symbol:"HP",note:"mechanical HP = 745.7 W"},kcal_per_h:{value:1.163,unit:"kilocalorie per hour",symbol:"kcal/h",note:"= 1.163 W"},BTU_per_h:{value:.29307107,unit:"BTU per hour",symbol:"BTU/h",note:"= 0.293 W"}},sound:{dB:{value:1,unit:"decibel",symbol:"dB",note:"logarithmic unit of sound intensity"},dBA:{value:1,unit:"A-weighted decibel",symbol:"dBA",note:"Adjusted for human hearing"},dBC:{value:1,unit:"C-weighted decibel",symbol:"dBC",note:"Flat weighting for high-level sounds"}},temperature:{K:{value:1,unit:"kelvin",symbol:"K"},C:{value:1,unit:"Celsius",symbol:"°C",note:"°C → K: add 273.15"},F:{value:1,unit:"Fahrenheit",symbol:"°F",note:"°F → K: (°F - 32) * 5/9 + 273.15"}},pressure:{Pa:{value:1,unit:"pascal",symbol:"Pa"},kPa:{value:1e3,unit:"kilopascal",symbol:"kPa"},MPa:{value:1e6,unit:"megapascal",symbol:"MPa"},bar:{value:1e5,unit:"bar",symbol:"bar"},atm:{value:101325,unit:"atmosphere",symbol:"atm"},psi:{value:6894.757,unit:"pound per square inch",symbol:"psi"},mmHg:{value:133.322,unit:"millimeter of mercury",symbol:"mmHg"}},energy:{J:{value:1,unit:"joule",symbol:"J"},kJ:{value:1e3,unit:"kilojoule",symbol:"kJ"},cal:{value:4.184,unit:"calorie",symbol:"cal"},kcal:{value:4184,unit:"kilocalorie",symbol:"kcal"},eV:{value:160218e-24,unit:"electronvolt",symbol:"eV"},BTU:{value:1055.06,unit:"BTU",symbol:"BTU"}},force:{N:{value:1,unit:"newton",symbol:"N"},kN:{value:1e3,unit:"kilonewton",symbol:"kN"},lbf:{value:4.44822,unit:"pound-force",symbol:"lbf"},kgf:{value:9.80665,unit:"kilogram-force",symbol:"kgf"},dyne:{value:1e-5,unit:"dyne",symbol:"dyn"}},area:{m2:{value:1,unit:"square meter",symbol:"m²"},cm2:{value:1e-4,unit:"square centimeter",symbol:"cm²"},km2:{value:1e6,unit:"square kilometer",symbol:"km²"},acre:{value:4046.856,unit:"acre",symbol:"acre"},hectare:{value:1e4,unit:"hectare",symbol:"ha"},ft2:{value:.092903,unit:"square foot",symbol:"ft²"},yd2:{value:.836127,unit:"square yard",symbol:"yd²"}},volume:{m3:{value:1,unit:"cubic meter",symbol:"m³"},L:{value:.001,unit:"liter",symbol:"L"},mL:{value:1e-6,unit:"milliliter",symbol:"mL"},gallon:{value:.00378541,unit:"US gallon",symbol:"gal"},pint:{value:473176e-9,unit:"US pint",symbol:"pt"},floz:{value:29574e-9,unit:"US fluid ounce",symbol:"fl oz"}},current:{A:{value:1,unit:"ampere",symbol:"A"},mA:{value:.001,unit:"milliampere",symbol:"mA"},uA:{value:1e-6,unit:"microampere",symbol:"uA"},kA:{value:1e3,unit:"kiloampere",symbol:"kA"}},resistance:{ohm:{value:1,unit:"ohm"},kohm:{value:1e3,unit:"kiloohm"},megaohm:{value:1e6,unit:"megaohm"},S:{value:1,unit:"siemens",symbol:"S",note:"conductance"}},capacitance:{F:{value:1,unit:"farad",symbol:"F"},mF:{value:.001,unit:"millifarad"},uF:{value:1e-6,unit:"microfarad"}},inductance:{H:{value:1,unit:"henry",symbol:"H"},mH:{value:.001,unit:"millihenry",symbol:"mH"},uH:{value:1e-6,unit:"microhenry",symbol:"uH"}},light:{cd:{value:1,unit:"candela",symbol:"cd"},lm:{value:1,unit:"lumen",symbol:"lm"},lx:{value:1,unit:"lux",symbol:"lx"}},data:{bit:{value:1,unit:"bit",symbol:"bit"},B:{value:8,unit:"byte",symbol:"B"},KB:{value:8e3,unit:"kilobyte",symbol:"KB"},MB:{value:8e6,unit:"megabyte",symbol:"MB"},GB:{value:8e9,unit:"gigabyte",symbol:"GB"},TB:{value:8e12,unit:"terabyte",symbol:"TB"}},angle:{deg:{value:1,unit:"degree",symbol:"°"},rad:{value:57.2958,unit:"radian",symbol:"rad",note:"1 rad = 57.2958°"},grad:{value:.9,unit:"grad",symbol:"grad",note:"1 grad = 0.9°"}},radiation:{Gy:{value:1,unit:"gray",symbol:"Gy",note:"Absorbed dose: 1 Gy = 1 J/kg"},mGy:{value:.001,unit:"milligray",symbol:"mGy"},rad:{value:.01,unit:"rad",symbol:"rad",note:"1 rad = 0.01 Gy"},Sv:{value:1,unit:"sievert",symbol:"Sv",note:"Biological effect dose equivalent"},mSv:{value:.001,unit:"millisievert",symbol:"mSv"},rem:{value:.01,unit:"rem",symbol:"rem",note:"1 rem = 0.01 Sv"},Bq:{value:1,unit:"becquerel",symbol:"Bq",note:"1 decay per second"},kBq:{value:1e3,unit:"kilobecquerel",symbol:"kBq"},MBq:{value:1e6,unit:"megabecquerel",symbol:"MBq"},GBq:{value:1e9,unit:"gigabecquerel",symbol:"GBq"},Ci:{value:37e9,unit:"curie",symbol:"Ci",note:"1 Ci = 3.7 x 10¹⁰ decays per second"},mCi:{value:37e6,unit:"millicurie",symbol:"mCi"}}},i=/^[a-zA-Z_$][a-zA-Z0-9_$]*$/;function a(e={}){let t=Object.create(null);for(const r in e)t[r]=e[r];return{set(e,r,{override:n=!0}={}){if("string"!=typeof e||!e)throw new Error("Variable name must be a non-empty string");if(!i.test(e))throw new Error(`Variable Name Error: '${e}' is not a valid variable name`);if(void 0===r)throw new Error(`Variable Value Error: '${e}' cannot be undefined`);if(!n&&e in variablesDB)throw new Error(`Variable '${e}' already exists`);t[e]=r},get:e=>t[e],has:e=>Object.prototype.hasOwnProperty.call(t,e),remove(e){delete t[e]},all:()=>({...t}),clear(){t=Object.create(null)},merge(e={}){for(const r in e)t[r]=e[r]},clone:()=>a(t)}}function s(e){return function(e){if(!Array.isArray(e)||0===e.length)throw new Error("det() expects a non-empty matrix");if(!e.every(Array.isArray))throw new Error("det() expects a 2D matrix");const t=e.length;if(!e.every(e=>e.length===t))throw new Error("det() expects a square matrix");for(const t of e)for(const e of t)if("number"!=typeof e&&"bigint"!=typeof e)throw new Error("det() matrix values must be numeric")}(e),1===e.length?e[0][0]:2===e.length?e[0][0]*e[1][1]-e[0][1]*e[1][0]:e[0].reduce((t,r,n)=>{const o=e.slice(1).map(e=>e.filter((e,t)=>t!==n));return t+(n%2==0?r:-r)*s(o)},0)}function l(e,t){const r=function(e){const t=e.replace(/\s+/g,"");return t?t.replace(/-/g,"+-").split("+").filter(Boolean):[]}(e),n=new Map;for(const e of r)if(e.includes(t)){const[r,o]=e.split(t);let i;if(""===r||"+"===r)i=1;else if("-"===r)i=-1;else{const e=r.endsWith("*")?r.slice(0,-1):r;i=Number(e)}if(!Number.isFinite(i))throw new Error("Unsupported algebra term");let a=1;if(o){if(!o.startsWith("^"))throw new Error("Unsupported algebra term");a=Number(o.slice(1))}if(!Number.isInteger(a)||a<0)throw new Error("Only non-negative integer powers are supported");n.set(a,(n.get(a)||0)+i)}else{const t=Number(e);if(!Number.isFinite(t))throw new Error("Unsupported algebra term");n.set(0,(n.get(0)||0)+t)}return n}function u(e,t){const r=[...e.entries()].filter(([,e])=>0!==e).sort((e,t)=>t[0]-e[0]);return r.length?r.map(([e,r],n)=>{const o=r<0,i=Math.abs(r);let a;return a=0===e?`${i}`:1===e?1===i?t:`${i} * ${t}`:1===i?`${t}^${e}`:`${i} * ${t}^${e}`,0===n?o?`-${a}`:a:o?`- ${a}`:`+ ${a}`}).join(" "):"0"}const m={max:(...e)=>{if(!e.length)throw new Error("max() requires arguments");return Math.max(...e)},min:(...e)=>{if(!e.length)throw new Error("min() requires arguments");return Math.min(...e)},abs:e=>Math.abs(e),round:e=>Math.round(e),floor:e=>Math.floor(e),ceil:e=>Math.ceil(e),sqrt:e=>{if(e<0)throw new Error("sqrt() domain error");return Math.sqrt(e)},pow:(e,t)=>e**t,det:e=>s(e),simplify:e=>{if("string"!=typeof e)throw new Error("simplify() expects an expression string");return function(e){const t=e.replace(/\s+/g,"").match(/[a-zA-Z]+/),r=t?.[0]||"x";return u(l(e,r),r)}(e)},derivative:(e,t="x")=>{if("string"!=typeof e||"string"!=typeof t)throw new Error("derivative() expects expression and variable strings");return function(e,t){const r=l(e,t),n=new Map;for(const[e,t]of r.entries())0!==e&&n.set(e-1,(n.get(e-1)||0)+t*e);return u(n,t)}(e,t)},sin:e=>Math.sin(e),cos:e=>Math.cos(e),tan:e=>Math.tan(e),asin:e=>Math.asin(e),acos:e=>Math.acos(e),atan:e=>Math.atan(e),log:e=>{if(e<=0)throw new Error("log() domain error");return Math.log(e)},log10:e=>{if(e<=0)throw new Error("log10() domain error");return Math.log10(e)},exp:e=>Math.exp(e),random:()=>Math.random(),and:(e,t)=>Boolean(e&&t),or:(e,t)=>Boolean(e||t),not:e=>!e,"!":e=>!e,eq:(e,t)=>e===t,neq:(e,t)=>e!==t,notEqual:(e,t)=>e!==t,gt:(e,t)=>e>t,greaterThan:(e,t)=>e>t,lt:(e,t)=>e<t,lessThan:(e,t)=>e<t,gte:(e,t)=>e>=t,greaterThanOrEqual:(e,t)=>e>=t,lte:(e,t)=>e<=t,lessThanOrEqual:(e,t)=>e<=t,clamp:(e,t,r)=>{if(t>r)throw new Error("clamp(): min > max");return Math.min(Math.max(e,t),r)},if:(e,t,r)=>e?t:r,typeof:e=>typeof e,length:e=>{if("string"==typeof e||Array.isArray(e))return e.length;throw new Error("length() expects string or array")}};function c(e){let t=0;const r=()=>e[t],n=()=>e[t++],o=(e,n)=>{const o=r();return!!o&&(o.type===e&&((void 0===n||o.value===n)&&(t++,!0)))},i=()=>{let e=null;if("Colon"!==r()?.type&&"Comma"!==r()?.type&&"ArrayEnd"!==r()?.type&&(e=h()),o("Colon")){let t=null;return"Comma"!==r()?.type&&"ArrayEnd"!==r()?.type&&(t=h()),{type:"SliceExpression",start:e,end:t}}return e};function a(){let e=function(){const e=n();if(!e)throw new Error("Unexpected end of input");switch(e.type){case"Number":case"BigInt":case"Boolean":case"String":return{type:"Literal",value:e.value};case"ImaginaryLiteral":return{type:"ImaginaryLiteral",value:e.value};case"NumberWithUnit":return{type:"UnitLiteral",value:e.value,unit:e.unit};case"Identifier":case"Function":return{type:"Identifier",name:e.name};case"Parenthesis":if("("===e.value){const e=h();if(!o("Parenthesis",")"))throw new Error("Expected ')'");return e}case"ArrayStart":{const e=[];let r=[];if(!o("ArrayEnd"))for(;;)if(r.push(h()),!o("Comma")){if(!o("Semicolon")){if(o("ArrayEnd")){e.push(r);break}throw new Error(`Expected ',', ';', or ']' at ${t}`)}e.push(r),r=[]}return e.length?1===e.length?{type:"ArrayExpression",elements:e[0]}:{type:"ArrayExpression",elements:e.map(e=>({type:"ArrayExpression",elements:e}))}:{type:"ArrayExpression",elements:[]}}case"BlockStart":{const e=[];if(!o("BlockEnd")){do{const t=n();if("Identifier"!==t.type&&"String"!==t.type)throw new Error("Invalid object key");if(!o("Colon"))throw new Error("Expected ':' after key");const r=h();e.push({key:t.value,value:r})}while(o("Comma"));if(!o("BlockEnd"))throw new Error(`Expected '}' at ${t}`)}return{type:"ObjectExpression",properties:e}}}throw new Error(`Unexpected token: ${JSON.stringify(e)}`)}();for(;;){if(o("ArrayStart")){const r=[];if(!o("ArrayEnd")){do{r.push(i())}while(o("Comma"));if(!o("ArrayEnd"))throw new Error(`Expected ']' at ${t}`)}e={type:"IndexExpression",object:e,selectors:r};continue}if(o("Dot")){const t=n();if("Identifier"!==t.type)throw new Error("Expected property after '.'");e={type:"MemberExpression",object:e,property:{type:"Identifier",name:t.value},optional:!1};continue}if(o("Operator","?.")){e={type:"MemberExpression",object:e,property:{type:"Identifier",name:n().value},optional:!0};continue}break}return e}function s(){if(o("UnaryOperator")){return{type:"UnaryExpression",operator:e[t-1].value,argument:s()}}return function(){let e=a();for(;"Parenthesis"===r()?.type&&"("===r()?.value;){n();const i=[];if("Parenthesis"!==r()?.type||")"!==r()?.value)do{i.push(h())}while(o("Comma"));if(!o("Parenthesis",")"))throw new Error(`Expected ')' at ${t}`);e={type:"CallExpression",callee:e,arguments:i}}return e}()}function l(){let e=s();if(o("Operator","^")){return{type:"BinaryExpression",operator:"^",left:e,right:l()}}return e}function u(){let r=l();for(;o("Operator","*")||o("Operator","/")||o("Operator","%");){r={type:"BinaryExpression",operator:e[t-1].value,left:r,right:l()}}return r}function m(){let i=function(){let r=u();for(;o("Operator","+")||o("Operator","-");)r={type:"BinaryExpression",operator:e[t-1].value,left:r,right:u()};return r}();const a=r();if("Keyword"===a?.type&&["to","in"].includes(a.value)){n();const e=n();if(!e||"Unit"!==e.type)throw new Error(`Expected unit after '${a.value}'`);return{type:"UnitConversion",from:i,to:e.value}}return i}function c(){let r=m();for(;o("Operator",">")||o("Operator","<")||o("Operator",">=")||o("Operator","<=")||o("Operator","==");){r={type:"BinaryExpression",operator:e[t-1].value,left:r,right:m()}}return r}function p(){let r=c();for(;o("Operator","&&")||o("Operator","||");){r={type:"LogicalExpression",operator:e[t-1].value,left:r,right:c()}}return r}function y(){let e=function(){let e=p();for(;o("Operator","??");)e={type:"LogicalExpression",operator:"??",left:e,right:p()};return e}();if(o("Ternary","?")){const t=h();if(!o("Ternary",":"))throw new Error("Expected ':' in ternary");return{type:"ConditionalExpression",test:e,consequent:t,alternate:h()}}return e}function f(){let r=function(){let e=y();for(;o("Operator","|>");)e={type:"PipelineExpression",left:e,right:y()};return e}();if(o("Operator","=")||o("Operator","+=")||o("Operator","-=")||o("Operator","*=")||o("Operator","/=")){const n=e[t-1].value;if("Identifier"!==r.type&&"MemberExpression"!==r.type&&"IndexExpression"!==r.type)throw new Error("Invalid assignment target");return{type:"AssignmentExpression",operator:n,left:r,right:f()}}return r}function h(){return f()}const v=h();if(t<e.length)throw new Error(`Unexpected token at end: ${JSON.stringify(r())}`);return v}const p=e=>e&&"object"==typeof e&&"re"in e&&"im"in e,y=e=>p(e)?(e=>{if(!p(e))return e;const t=e.re,r=Math.abs(e.im),n=e.im<0?"-":"+";return 0===t?1===e.im?"i":-1===e.im?"-i":`${e.im}i`:`${t} ${n} ${1===r?"i":`${r}i`}`})(e):(e=>e&&"object"==typeof e&&"value"in e&&"unit"in e)(e)?`${e.value} ${e.unit}`:(e=>Array.isArray(e)&&e.length>0&&e.every(Array.isArray))(e)?e.map(e=>e.join("\t")).join("\n"):Array.isArray(e)?e.join("\n"):e;return class{constructor(){this.math=n,this.units=function(e={}){let t={...e};function r(e){e=e.toLowerCase();for(const r in t)for(const n in t[r]){const o=t[r][n];if(n.toLowerCase()===e||o.unit?.toLowerCase()===e||o.symbol?.toLowerCase()===e)return{type:r,key:n,data:o}}return null}return{getUnits:()=>t,setUnits:e=>{t={...e}},updateType:(e,r)=>{t[e]={...t[e],...r}},addUnit:(e,r,n)=>{t[e]||(t[e]={}),t[e][r]=n},compute(e,t,r){const n=e=>e&&"object"==typeof e&&"value"in e&&"unit"in e,o=(t,r)=>{switch(e){case"+":return t+r;case"-":return t-r;case"*":return t*r;case"/":return t/r;case"%":return t%r;case"^":return Math.pow(t,r)}};if(n(t)&&n(r)){const e=this.findUnit(r.unit),n=this.findUnit(t.unit);if(e.type!==n.type)throw new Error("Cannot operate on different unit types");const i=r.value*(e.data.value/n.data.value);return{value:o(t.value,i),unit:t.unit}}if(n(t)&&!n(r))return{value:o(t.value,r),unit:t.unit};if(!n(t)&&n(r)){return{value:o(t,r.value),unit:r.unit}}return o(t,r)},convert:function(e,n,o){const i=r(n),a=r(o);if(!i)throw new Error(`Unknown unit: ${n}`);if(!a)throw new Error(`Unknown unit: ${o}`);if(i.type!==a.type)throw new Error(`Cannot convert ${n} to ${o} (${a.data.unit||a.key}). ${i.data.unit||i.key} conversion units like ${Object.keys(t[i.type]).join(", ")}`);return{value:e*(i.data.value/a.data.value),unit:a.key}},getAllUnitsFlat:function(){const e=new Set;for(const r in t)for(const n in t[r]){const o=t[r][n],i=n.toLowerCase();if(e.add(i),o.unit){const t=o.unit.toLowerCase();t!==i&&1===t.split(/\s+/).length&&e.add(t)}if(o.symbol){const t=o.symbol.toLowerCase();o.unit&&t===o.unit.toLowerCase()||e.add(t)}}return Array.from(e)},findUnit:r}}(o),this.functions=function(e={}){const t=Object.create(null);for(const r in e)"function"==typeof e[r]&&(t[r]=e[r]);return{getAllFunctionsName:()=>Object.keys(t),register(e,r){if("string"!=typeof e||!e)throw new Error("Formula name must be a non-empty string");if("function"!=typeof r)throw new Error(`Formula "${e}" must be callable`);t[e]=r},get:e=>t[e],has:e=>Object.prototype.hasOwnProperty.call(t,e),remove(e){delete t[e]},all:()=>({...t}),clear(){for(const e in t)delete t[e]},extend(e={}){for(const r in e)"function"==typeof e[r]&&(t[r]=e[r])},clone:()=>createFormulaRegistry(t)}}(m),this.variables=a(),this._cache=new Map}setVariable(e,t){this.variables.set(e,t)}getVariable(e){return this.variables.get(e)}addFunction(e,t){this.functions.register(e,t)}_createContext(){return t({functions:this.functions,variables:this.variables,units:this.units,evaluate:this.evaluate.bind(this)})}tokenize(e){if("string"!=typeof e)throw new Error("Expression must be a string");return function(e,t={}){const r=[];let n="",o="";const i=["+","-","*","/","%","^","=",">","<","!","&","|"],a=["==",">=","<=","&&","||","+=","-=","*=","/=","%=","?.","??","|>"],s=["to","in"],l=t.units?.getAllUnitsFlat?.()||[],u=e=>!e||"Operator"===e.type||"UnaryOperator"===e.type||"Parenthesis"===e.type&&")"!==e.value||"ArrayStart"===e.type||"Semicolon"===e.type||"Comma"===e.type||"Ternary"===e.type,m=(t,o)=>{if(!n)return;if(/^(true|false)$/i.test(n))return r.push({type:"Boolean",value:"true"===n.toLowerCase()}),void(n="");if(s.includes(n))return r.push({type:"Keyword",value:n,pos:o}),void(n="");if(/^\d+n$/.test(n))return r.push({type:"BigInt",value:BigInt(n.slice(0,-1)),pos:o}),void(n="");if(/^0x[0-9a-fA-F]+$/.test(n))return r.push({type:"Number",value:parseInt(n,16),pos:o}),void(n="");if(/^0b[01]+$/.test(n))return r.push({type:"Number",value:parseInt(n,2),pos:o}),void(n="");if(/^[+-]?(\d+(\.\d+)?|\.\d+)(e[+-]?\d+)?$/i.test(n))return r.push({type:"Number",value:parseFloat(n),pos:o}),void(n="");if(/^[+-]?(\d+(\.\d+)?|\.\d+)(e[+-]?\d+)?i$/i.test(n))return r.push({type:"ImaginaryLiteral",value:parseFloat(n.slice(0,-1)),pos:o}),void(n="");if(/^[+-]?i$/i.test(n)){const e="-"===n[0]?-1:1;return r.push({type:"ImaginaryLiteral",value:e,pos:o}),void(n="")}const i=n.match(/^([+-]?\d+(\.\d+)?)([a-zA-Z]+)$/);if(i){const e=parseFloat(i[1]),t=i[3];return r.push({type:l.includes(t)?"NumberWithUnit":"UnknownUnit",value:e,unit:t,pos:o}),void(n="")}if(l.includes(n)){const{prevWord:i}=function(e,t){const r=e.match(/[a-z0-9]+/gi)||[],n=e[t]||null,o=t>0?e[t-1]:null;let i=t;for(;i>0&&/[a-z0-9]/i.test(e[i-1]);)i--;let a=t;for(;a<e.length&&/[a-z0-9]/i.test(e[a]);)a++;const s=e.substring(i,a),l=r.indexOf(s);return{prevWord:l>0?r[l-1]:null,prevChar:o,currentWord:s,currentChar:n,nextWord:-1!==l&&l<r.length-1?r[l+1]:null}}(e,o);if("("!==t&&i&&(!isNaN(parseFloat(i))||"to"===i||"in"===i))return r.push({type:"Unit",value:n,pos:o}),void(n="")}if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(n))return"("===t?r.push({type:"Function",name:n,pos:o}):r.push({type:"Identifier",name:n,pos:o}),void(n="");throw new Error(`Invalid token "${n}" at index ${o}`)};for(let t=0;t<e.length;t++){let s=e[t],l=e[t+1];if("/"===s&&"/"===l){for(;t<e.length&&"\n"!==e[t];)t++;continue}if("/"===s&&"*"===l){for(t+=2;t<e.length&&("*"!==e[t]||"/"!==e[t+1]);)t++;t++;continue}if("\"'".includes(s)){o?o===s?(n+=s,r.push({type:"String",value:n.slice(1,-1),pos:t}),n="",o=""):n+=s:(o=s,n+=s);continue}if(o){n+="\\"===s?s+e[++t]:s;continue}const c=s+l;if(a.includes(c))m(s,t),r.push({type:"Operator",value:c,pos:t}),t++;else if("?"!==s){if(":"===s){m(s,t);const e=r[r.length-1];e&&"Ternary"===e.type?r.push({type:"Ternary",value:":"}):r.push({type:"Colon"});continue}if("."===s&&/\d/.test(n)&&/\d/.test(l))n+=s;else if("."!==s){if(i.includes(s)){m(s,t);const e=r[r.length-1];"-"!==s&&"!"!==s||!u(e)?r.push({type:"Operator",value:s,pos:t}):r.push({type:"UnaryOperator",value:s,pos:t});continue}"()".includes(s)?(m(s,t),r.push({type:"Parenthesis",value:s,pos:t})):"["!==s?"]"!==s?"{"!==s?"}"!==s?","!==s?";"!==s?" "!==s?(n+=s,t===e.length-1&&m(null,t)):m(l,t):(m(s,t),r.push({type:"Semicolon",pos:t})):(m(s,t),r.push({type:"Comma",pos:t})):(m(s,t),r.push({type:"BlockEnd",pos:t})):(m(s,t),r.push({type:"BlockStart",pos:t})):(m(s,t),r.push({type:"ArrayEnd",pos:t})):(m(s,t),r.push({type:"ArrayStart",pos:t}))}else m(s,t),r.push({type:"Dot",pos:t})}else r.push({type:"Ternary",value:"?"})}if(o)throw new Error("Unclosed string literal");const c=[];for(let e=0;e<r.length;e++){const t=r[e],n=r[e+1];"Number"!==t?.type||"Unit"!==n?.type?c.push(t):(c.push({type:"NumberWithUnit",value:t.value,unit:n.value,pos:t.pos}),e++)}const p=[];for(let e=0;e<c.length;e++){const t=c[e],r=c[e+1];p.push(t),t&&r&&(["Number","Identifier"].includes(t.type)||"Parenthesis"===t.type&&")"===t.value||"ArrayEnd"===t.type)&&(["Identifier","Function"].includes(r.type)||"Parenthesis"===r.type&&"("===r.value)&&p.push({type:"Operator",value:"*",implicit:!0})}return p}(e,this._createContext())}parse(e){const t=this.tokenize(e);return{tokens:t,ast:c(t)}}evaluate(t){const{ast:r}=this.parse(t);return y(e(r,this._createContext()))}compile(t){if(this._cache.has(t))return this._cache.get(t);const{ast:r}=this.parse(t),n=(t={})=>{const n=this._createContext().withScope(t);return y(e(r,n))};return this._cache.set(t,n),n}clearCache(){this._cache.clear()}}});
3
3