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.
- package/.gitattributes +2 -0
- package/.github/workflows/ci.yml +40 -0
- package/.github/workflows/npm-publish.yml +38 -0
- package/.github/workflows/security-audit.yml +34 -0
- package/CHANGELOG.md +11 -0
- package/LICENSE +673 -673
- package/README.md +203 -135
- package/dist/exprify.cjs.js +2320 -503
- package/dist/exprify.cjs.js.map +1 -1
- package/dist/exprify.esm.js +2320 -497
- package/dist/exprify.esm.js.map +1 -1
- package/dist/exprify.js +2340 -523
- package/dist/exprify.js.map +1 -1
- package/dist/exprify.min.js +2 -2
- package/dist/exprify.min.js.map +1 -1
- package/doc/tokenType.txt +48 -0
- package/package.json +7 -3
- package/rollup.config.js +80 -0
- package/src/assets/capture.jpg +0 -0
- package/src/core/Exprify.js +140 -70
- package/src/core/context.js +30 -0
- package/src/function/executor.js +64 -0
- package/src/function/internal.js +270 -0
- package/src/function/registry.js +68 -0
- package/src/index.js +2 -38
- package/src/math/operations.js +37 -47
- package/src/parser/astBuild.js +508 -0
- package/src/parser/evaluator.js +430 -57
- package/src/parser/tokenizer.js +399 -145
- package/src/utils/globalUnits.js +217 -0
- package/src/utils/store.js +178 -0
- package/src/variables/store.js +75 -0
- package/test/browser.html +23 -0
- package/test/exprify.test.js +140 -0
- package/src/functions/externalFunctions.js +0 -19
- package/src/functions/internalFunctions.js +0 -53
- package/src/parser/infixToPostfix.js +0 -78
- package/src/utils/typeConverter.js +0 -63
- package/src/variables/variables.js +0 -28
package/dist/exprify.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exprify.cjs.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.cjs.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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"}
|