@devmm/puredocs-excel-formula 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/formula-value.ts","../src/formula-token.ts","../src/formula-lexer.ts","../src/formula-node.ts","../src/formula-parser.ts","../src/functions/math-functions.ts","../src/functions/text-functions.ts","../src/functions/logical-functions.ts","../src/functions/date-functions.ts","../src/functions/lookup-functions.ts","../src/functions/statistical-functions.ts","../src/functions/info-functions.ts","../src/function-registry.ts","../src/formula-context.ts","../src/lru-cache.ts","../src/formula-evaluator.ts"],"names":["FormulaError","num","value","toOADate","rows","columns","row","offset","TokenType","upper","BinaryOperator","UnaryOperator","left","right","ln","_pos","FormulaHelper","len","count","fromOADate","code","best","parseCellRef","cellRefFromRowCol","a","mid","mode","_functions"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Discriminated union for formula values.\n * Port of TVE.PureDocs.Excel.Formulas.FormulaValue (C# readonly struct)\n *\n * C# used a value-type struct with LayoutKind.Auto for zero-GC scalar values.\n * TypeScript/JS uses a class with static factory methods and cached singletons.\n * The tradeoff: objects vs structs — acceptable for JS runtimes.\n */\nimport { toOADate } from '@devmm/puredocs-excel';\n\nexport const enum FormulaError {\n None = 0,\n Null = 1,\n Div0 = 2,\n Value = 3,\n Ref = 4,\n Name = 5,\n Num = 6,\n NA = 7,\n Calc = 8,\n Spill = 9,\n}\n\nexport type FormulaValueKind = 'blank' | 'number' | 'text' | 'boolean' | 'error' | 'array';\n\nexport class FormulaValue {\n readonly kind: FormulaValueKind;\n /** Numeric payload (also used for boolean: 1=true, 0=false). */\n readonly #num: number;\n /** String or ArrayValue payload. */\n readonly #obj: string | ArrayValue | undefined;\n readonly errorCode: FormulaError;\n\n private constructor(\n kind: FormulaValueKind,\n num = 0,\n obj?: string | ArrayValue,\n errorCode: FormulaError = FormulaError.None,\n ) {\n this.kind = kind;\n this.#num = num;\n this.#obj = obj;\n this.errorCode = errorCode;\n }\n\n // ── Cached singletons ────────────────────────────────────────────────────\n\n static readonly blank = new FormulaValue('blank');\n static readonly zero = new FormulaValue('number', 0);\n static readonly one = new FormulaValue('number', 1);\n static readonly true_ = new FormulaValue('boolean', 1);\n static readonly false_ = new FormulaValue('boolean', 0);\n static readonly emptyString = new FormulaValue('text', 0, '');\n static readonly errorDiv0 = new FormulaValue('error', 0, undefined, FormulaError.Div0);\n static readonly errorValue = new FormulaValue('error', 0, undefined, FormulaError.Value);\n static readonly errorRef = new FormulaValue('error', 0, undefined, FormulaError.Ref);\n static readonly errorName = new FormulaValue('error', 0, undefined, FormulaError.Name);\n static readonly errorNA = new FormulaValue('error', 0, undefined, FormulaError.NA);\n static readonly errorNum = new FormulaValue('error', 0, undefined, FormulaError.Num);\n static readonly errorNull = new FormulaValue('error', 0, undefined, FormulaError.Null);\n\n // ── Static factories ─────────────────────────────────────────────────────\n\n static number(v: number): FormulaValue {\n if (v === 0) return FormulaValue.zero;\n if (v === 1) return FormulaValue.one;\n return new FormulaValue('number', v);\n }\n\n static text(v: string): FormulaValue {\n if (v === '') return FormulaValue.emptyString;\n return new FormulaValue('text', 0, v);\n }\n\n static boolean(v: boolean): FormulaValue {\n return v ? FormulaValue.true_ : FormulaValue.false_;\n }\n\n static error(e: FormulaError): FormulaValue {\n switch (e) {\n case FormulaError.Div0: return FormulaValue.errorDiv0;\n case FormulaError.Value: return FormulaValue.errorValue;\n case FormulaError.Ref: return FormulaValue.errorRef;\n case FormulaError.Name: return FormulaValue.errorName;\n case FormulaError.NA: return FormulaValue.errorNA;\n case FormulaError.Num: return FormulaValue.errorNum;\n case FormulaError.Null: return FormulaValue.errorNull;\n default: return new FormulaValue('error', 0, undefined, e);\n }\n }\n\n static array(a: ArrayValue): FormulaValue {\n return new FormulaValue('array', 0, a);\n }\n\n // ── Type checks ──────────────────────────────────────────────────────────\n\n get isBlank(): boolean { return this.kind === 'blank'; }\n get isNumber(): boolean { return this.kind === 'number'; }\n get isText(): boolean { return this.kind === 'text'; }\n get isBoolean(): boolean { return this.kind === 'boolean'; }\n get isError(): boolean { return this.kind === 'error'; }\n get isArray(): boolean { return this.kind === 'array'; }\n get isNumeric(): boolean { return this.kind === 'number' || this.kind === 'boolean' || this.kind === 'blank'; }\n\n // ── Value accessors ──────────────────────────────────────────────────────\n\n get numberValue(): number { return this.#num; }\n get textValue(): string { return (this.#obj as string) ?? ''; }\n get booleanValue(): boolean { return this.#num !== 0; }\n get arrayVal(): ArrayValue { return (this.#obj as ArrayValue) ?? ArrayValue.empty; }\n\n // ── Coercion (Excel semantics, no exceptions) ─────────────────────────────\n\n coerceToNumber(): FormulaValue {\n switch (this.kind) {\n case 'number': return this;\n case 'blank': return FormulaValue.zero;\n case 'boolean': return FormulaValue.number(this.#num);\n case 'error': return this;\n case 'text': {\n const n = parseFloat(this.textValue);\n return isNaN(n) ? FormulaValue.errorValue : FormulaValue.number(n);\n }\n default: return FormulaValue.errorValue;\n }\n }\n\n tryAsDouble(): { ok: true; value: number } | { ok: false } {\n switch (this.kind) {\n case 'number': return { ok: true, value: this.#num };\n case 'blank': return { ok: true, value: 0 };\n case 'boolean': return { ok: true, value: this.#num };\n case 'text': {\n const n = parseFloat(this.textValue);\n return isNaN(n) ? { ok: false } : { ok: true, value: n };\n }\n default: return { ok: false };\n }\n }\n\n coerceToBool(): FormulaValue {\n switch (this.kind) {\n case 'boolean': return this;\n case 'number': return FormulaValue.boolean(this.#num !== 0);\n case 'blank': return FormulaValue.false_;\n case 'error': return this;\n case 'text': {\n const u = this.textValue.toUpperCase();\n if (u === 'TRUE') return FormulaValue.true_;\n if (u === 'FALSE') return FormulaValue.false_;\n return FormulaValue.errorValue;\n }\n default: return FormulaValue.errorValue;\n }\n }\n\n asText(): string {\n switch (this.kind) {\n case 'text': return this.textValue;\n case 'number': return String(this.#num);\n case 'boolean': return this.#num !== 0 ? 'TRUE' : 'FALSE';\n case 'blank': return '';\n case 'error': return FormulaValue.errorToString(this.errorCode);\n default: return '';\n }\n }\n\n // ── Comparison (Excel semantics) ─────────────────────────────────────────\n\n static areEqual(a: FormulaValue, b: FormulaValue): boolean {\n if (a.isBlank && b.isBlank) return true;\n if (a.isBlank) {\n if (b.isNumber) return Math.abs(b.numberValue) < 1e-10;\n if (b.isText) return b.textValue === '';\n if (b.isBoolean) return !b.booleanValue;\n return false;\n }\n if (b.isBlank) return FormulaValue.areEqual(b, a);\n if (a.kind !== b.kind) return false;\n switch (a.kind) {\n case 'number': return Math.abs(a.#num - b.#num) < 1e-10;\n case 'boolean': return a.#num === b.#num;\n case 'text': return a.textValue.toUpperCase() === b.textValue.toUpperCase();\n default: return false;\n }\n }\n\n /** Excel-compatible sort order: Number/Blank < Text < Boolean. */\n static compare(a: FormulaValue, b: FormulaValue): number {\n const order = (v: FormulaValue) => v.kind === 'boolean' ? 2 : v.isText ? 1 : 0;\n const oa = order(a), ob = order(b);\n if (oa !== ob) return oa - ob;\n switch (oa) {\n case 0: return (a.isBlank ? 0 : a.numberValue) - (b.isBlank ? 0 : b.numberValue);\n case 1: return a.textValue.toUpperCase() < b.textValue.toUpperCase() ? -1 : a.textValue.toUpperCase() > b.textValue.toUpperCase() ? 1 : 0;\n case 2: return a.#num - b.#num;\n default: return 0;\n }\n }\n\n // ── Error helpers ─────────────────────────────────────────────────────────\n\n static errorToString(e: FormulaError): string {\n const map: Record<FormulaError, string> = {\n [FormulaError.None]: '',\n [FormulaError.Null]: '#NULL!',\n [FormulaError.Div0]: '#DIV/0!',\n [FormulaError.Value]: '#VALUE!',\n [FormulaError.Ref]: '#REF!',\n [FormulaError.Name]: '#NAME?',\n [FormulaError.Num]: '#NUM!',\n [FormulaError.NA]: '#N/A',\n [FormulaError.Calc]: '#CALC!',\n [FormulaError.Spill]: '#SPILL!',\n };\n return map[e] ?? '#ERROR!';\n }\n\n static errorFromString(s: string): FormulaError {\n const map: Record<string, FormulaError> = {\n '#NULL!': FormulaError.Null,\n '#DIV/0!': FormulaError.Div0,\n '#VALUE!': FormulaError.Value,\n '#REF!': FormulaError.Ref,\n '#NAME?': FormulaError.Name,\n '#NUM!': FormulaError.Num,\n '#N/A': FormulaError.NA,\n '#CALC!': FormulaError.Calc,\n '#SPILL!': FormulaError.Spill,\n };\n return map[s] ?? FormulaError.Value;\n }\n\n // ── JS interop ────────────────────────────────────────────────────────────\n\n static fromObjectSync(value: unknown): FormulaValue {\n if (value === null || value === undefined) return FormulaValue.blank;\n if (typeof value === 'number') return isNaN(value) ? FormulaValue.errorValue : FormulaValue.number(value);\n if (typeof value === 'boolean') return FormulaValue.boolean(value);\n if (typeof value === 'string') return value === '' ? FormulaValue.blank : FormulaValue.text(value);\n if (value instanceof Date) {\n return FormulaValue.number(toOADate(value));\n }\n return FormulaValue.text(String(value));\n }\n\n toObject(): unknown {\n switch (this.kind) {\n case 'number': return this.#num;\n case 'text': return this.textValue;\n case 'boolean': return this.booleanValue;\n case 'blank': return null;\n case 'error': return FormulaValue.errorToString(this.errorCode);\n case 'array': return this.arrayVal.toObjectArray();\n default: return null;\n }\n }\n\n toString(): string { return this.asText(); }\n}\n\n// ── ArrayValue ────────────────────────────────────────────────────────────────\n\n/**\n * 2D array value for formula results and range data.\n * Port of TVE.PureDocs.Excel.Formulas.ArrayValue (C#)\n */\nexport class ArrayValue {\n static readonly empty = new ArrayValue(0, 0);\n\n readonly #data: FormulaValue[];\n readonly rows: number;\n readonly columns: number;\n\n constructor(rows: number, columns: number) {\n this.rows = rows;\n this.columns = columns;\n this.#data = new Array<FormulaValue>(rows * columns).fill(FormulaValue.blank);\n }\n\n get length(): number { return this.#data.length; }\n\n get(row: number, col: number): FormulaValue {\n if (row < 0 || row >= this.rows || col < 0 || col >= this.columns) {\n return FormulaValue.errorRef;\n }\n return this.#data[row * this.columns + col]!;\n }\n\n set(row: number, col: number, value: FormulaValue): void {\n if (row >= 0 && row < this.rows && col >= 0 && col < this.columns) {\n this.#data[row * this.columns + col] = value;\n }\n }\n\n getFlat(index: number): FormulaValue {\n return index >= 0 && index < this.#data.length\n ? this.#data[index]!\n : FormulaValue.errorRef;\n }\n\n setFlat(index: number, value: FormulaValue): void {\n if (index >= 0 && index < this.#data.length) {\n this.#data[index] = value;\n }\n }\n\n /** Iterate all values in row-major order. */\n values(): Iterable<FormulaValue> { return this.#data; }\n\n toObjectArray(): unknown[] {\n return this.#data.map(v => v.toObject());\n }\n\n /** Create from a flat array (single column). */\n static fromFlat(values: FormulaValue[]): ArrayValue {\n const arr = new ArrayValue(values.length, 1);\n values.forEach((v, i) => arr.setFlat(i, v));\n return arr;\n }\n\n /** Create a 1×1 array wrapping a scalar value (for broadcasting). */\n static fromScalar(value: FormulaValue): ArrayValue {\n const arr = new ArrayValue(1, 1);\n arr.setFlat(0, value);\n return arr;\n }\n\n /** Element-wise broadcasting operation (mirrors ArrayValue.Broadcast in C#). */\n static broadcast(\n a: ArrayValue,\n b: ArrayValue,\n op: (av: FormulaValue, bv: FormulaValue) => FormulaValue,\n ): ArrayValue {\n const rows = Math.max(a.rows, b.rows);\n const cols = Math.max(a.columns, b.columns);\n\n // Validate compatibility\n if ((a.rows !== 1 && b.rows !== 1 && a.rows !== b.rows) ||\n (a.columns !== 1 && b.columns !== 1 && a.columns !== b.columns)) {\n const err = new ArrayValue(rows, cols);\n for (let i = 0; i < err.length; i++) err.setFlat(i, FormulaValue.errorValue);\n return err;\n }\n\n const result = new ArrayValue(rows, cols);\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n const av = a.get(r < a.rows ? r : 0, c < a.columns ? c : 0);\n const bv = b.get(r < b.rows ? r : 0, c < b.columns ? c : 0);\n result.set(r, c, op(av, bv));\n }\n }\n return result;\n }\n\n /** Implicit intersection: reduce array to scalar based on formula position. */\n implicitIntersect(formulaRow: number, formulaCol: number, rangeStartRow: number, rangeStartCol: number): FormulaValue {\n if (this.rows === 1 && this.columns === 1) return this.get(0, 0);\n if (this.columns === 1) {\n const offset = formulaRow - rangeStartRow;\n return offset >= 0 && offset < this.rows ? this.get(offset, 0) : FormulaValue.errorValue;\n }\n if (this.rows === 1) {\n const offset = formulaCol - rangeStartCol;\n return offset >= 0 && offset < this.columns ? this.get(0, offset) : FormulaValue.errorValue;\n }\n const ro = formulaRow - rangeStartRow;\n const co = formulaCol - rangeStartCol;\n return ro >= 0 && ro < this.rows && co >= 0 && co < this.columns\n ? this.get(ro, co)\n : FormulaValue.errorValue;\n }\n\n transpose(): ArrayValue {\n const result = new ArrayValue(this.columns, this.rows);\n for (let r = 0; r < this.rows; r++) {\n for (let c = 0; c < this.columns; c++) {\n result.set(c, r, this.get(r, c));\n }\n }\n return result;\n }\n}\n","/**\n * Tokens produced by the formula lexer.\n * Port of TVE.PureDocs.Excel.Formulas.FormulaToken + FormulaTokenType (C#)\n */\n\nexport const enum TokenType {\n Number,\n String,\n Boolean,\n CellReference,\n Colon,\n Function,\n LeftParen,\n RightParen,\n Comma,\n Plus,\n Minus,\n Multiply,\n Divide,\n Power,\n Percent,\n Ampersand,\n Equal,\n NotEqual,\n LessThan,\n LessThanOrEqual,\n GreaterThan,\n GreaterThanOrEqual,\n SheetReference,\n NamedRange,\n Exclamation,\n AtSign,\n ErrorLiteral,\n EOF,\n}\n\nexport interface Token {\n readonly type: TokenType;\n readonly value: string;\n readonly position: number;\n}\n\nexport function makeToken(type: TokenType, value: string, position: number): Token {\n return { type, value, position };\n}\n","/**\n * Tokenises an Excel formula string into a sequence of tokens.\n * Full port of TVE.PureDocs.Excel.Formulas.FormulaLexer (C#)\n *\n * Supports:\n * - String literals (\"hello\")\n * - Error literals (#N/A, #REF!, #VALUE!, etc.)\n * - Quoted sheet references ('My Sheet'!A1)\n * - Unquoted sheet references (Sheet1!A1)\n * - _xlfn. prefix stripping\n * - Cell references ($A$1, A1, AA123)\n * - Named ranges\n * - @ implicit intersection operator\n * - All standard operators\n */\nimport { Token, TokenType, makeToken } from './formula-token.js';\n\nexport class FormulaException extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'FormulaException';\n }\n}\n\nconst KNOWN_ERRORS = new Set([\n '#NULL!', '#DIV/0!', '#VALUE!', '#REF!', '#NAME?', '#NUM!', '#N/A', '#CALC!', '#SPILL!',\n]);\n\nexport class FormulaLexer {\n readonly #formula: string;\n #pos = 0;\n\n constructor(formula: string) {\n if (!formula) throw new FormulaException('Formula cannot be empty.');\n this.#formula = formula;\n }\n\n tokenize(): Token[] {\n this.#pos = 0;\n const tokens: Token[] = [];\n\n while (this.#pos < this.#formula.length) {\n this.#skipWhitespace();\n if (this.#pos >= this.#formula.length) break;\n\n const token = this.#readNextToken();\n if (token) tokens.push(token);\n }\n\n tokens.push(makeToken(TokenType.EOF, '', this.#pos));\n return tokens;\n }\n\n // ── Private tokenisers ─────────────────────────────────────────────────────\n\n #readNextToken(): Token | null {\n const c = this.#formula[this.#pos]!;\n\n if (c === '\"') return this.#readString();\n if (c === '#') return this.#readErrorLiteral();\n if (c === \"'\") return this.#readQuotedSheetRef();\n\n if (c === '.' && this.#pos + 1 < this.#formula.length && /\\d/.test(this.#formula[this.#pos + 1]!)) {\n return this.#readNumber();\n }\n if (/\\d/.test(c)) return this.#readNumber();\n if (/[a-zA-Z_$]/.test(c)) return this.#readIdentifier();\n\n return this.#readOperator();\n }\n\n #readString(): Token {\n const start = this.#pos++;\n let value = '';\n\n while (this.#pos < this.#formula.length) {\n const ch = this.#formula[this.#pos];\n if (ch === '\"') {\n this.#pos++;\n if (this.#formula[this.#pos] === '\"') { value += '\"'; this.#pos++; }\n else return makeToken(TokenType.String, value, start);\n } else {\n value += ch;\n this.#pos++;\n }\n }\n throw new FormulaException(`Unterminated string at position ${start}.`);\n }\n\n #readErrorLiteral(): Token {\n const start = this.#pos;\n let raw = '#';\n this.#pos++;\n\n while (this.#pos < this.#formula.length) {\n const ch = this.#formula[this.#pos]!;\n if (/[a-zA-Z0-9/]/.test(ch) || ch === '!' || ch === '?') {\n raw += ch;\n this.#pos++;\n if (ch === '!' || ch === '?') break;\n } else break;\n }\n\n const upper = raw.toUpperCase();\n if (!KNOWN_ERRORS.has(upper)) {\n throw new FormulaException(`Unknown error literal \"${raw}\" at position ${start}.`);\n }\n return makeToken(TokenType.ErrorLiteral, upper, start);\n }\n\n #readQuotedSheetRef(): Token {\n const start = this.#pos++;\n let sheetName = '';\n\n while (this.#pos < this.#formula.length) {\n const ch = this.#formula[this.#pos]!;\n if (ch === \"'\") {\n this.#pos++;\n if (this.#formula[this.#pos] === \"'\") { sheetName += \"'\"; this.#pos++; }\n else {\n if (this.#formula[this.#pos] !== '!') {\n throw new FormulaException(`Expected '!' after quoted sheet name at position ${start}.`);\n }\n this.#pos++; // skip !\n const cellRef = this.#readCellRefChars();\n return makeToken(TokenType.SheetReference, `${sheetName}!${cellRef}`, start);\n }\n } else {\n sheetName += ch;\n this.#pos++;\n }\n }\n throw new FormulaException(`Unterminated quoted sheet name at position ${start}.`);\n }\n\n #readNumber(): Token {\n const start = this.#pos;\n let raw = '';\n let hasDot = false;\n let hasE = false;\n\n while (this.#pos < this.#formula.length) {\n const ch = this.#formula[this.#pos]!;\n if (/\\d/.test(ch)) { raw += ch; this.#pos++; }\n else if (ch === '.' && !hasDot && !hasE) { hasDot = true; raw += ch; this.#pos++; }\n else if ((ch === 'e' || ch === 'E') && !hasE && raw.length > 0) {\n hasE = true; raw += ch; this.#pos++;\n if (this.#formula[this.#pos] === '+' || this.#formula[this.#pos] === '-') {\n raw += this.#formula[this.#pos++];\n }\n } else break;\n }\n\n return makeToken(TokenType.Number, raw, start);\n }\n\n #readIdentifier(): Token {\n const start = this.#pos;\n let raw = '';\n\n while (this.#pos < this.#formula.length) {\n const ch = this.#formula[this.#pos]!;\n if (/[a-zA-Z0-9_$.]/.test(ch)) { raw += ch; this.#pos++; }\n else break;\n }\n\n // Strip _xlfn. prefix\n let upper = raw.toUpperCase();\n if (upper.startsWith('_XLFN.')) { raw = raw.slice(6); upper = upper.slice(6); }\n\n if (upper === 'TRUE') return makeToken(TokenType.Boolean, 'TRUE', start);\n if (upper === 'FALSE') return makeToken(TokenType.Boolean, 'FALSE', start);\n\n // Sheet reference: Identifier!CellRef\n if (this.#formula[this.#pos] === '!') {\n this.#pos++; // skip !\n const cellRef = this.#readCellRefChars();\n return makeToken(TokenType.SheetReference, `${raw}!${cellRef}`, start);\n }\n\n // Function: Identifier followed by (\n this.#skipWhitespace();\n if (this.#formula[this.#pos] === '(') {\n return makeToken(TokenType.Function, upper, start);\n }\n\n // Cell reference or named range\n const stripped = raw.replace(/\\$/g, '');\n if (isCellRef(stripped)) return makeToken(TokenType.CellReference, stripped, start);\n return makeToken(TokenType.NamedRange, raw, start);\n }\n\n #readCellRefChars(): string {\n let ref = '';\n while (this.#pos < this.#formula.length) {\n const ch = this.#formula[this.#pos]!;\n if (/[a-zA-Z0-9$]/.test(ch)) { ref += ch; this.#pos++; }\n else break;\n }\n return ref.replace(/\\$/g, '');\n }\n\n #readOperator(): Token {\n const start = this.#pos;\n const ch = this.#formula[this.#pos++]!;\n\n switch (ch) {\n case '(': return makeToken(TokenType.LeftParen, '(', start);\n case ')': return makeToken(TokenType.RightParen, ')', start);\n case ',': return makeToken(TokenType.Comma, ',', start);\n case ':': return makeToken(TokenType.Colon, ':', start);\n case '+': return makeToken(TokenType.Plus, '+', start);\n case '-': return makeToken(TokenType.Minus, '-', start);\n case '*': return makeToken(TokenType.Multiply, '*', start);\n case '/': return makeToken(TokenType.Divide, '/', start);\n case '^': return makeToken(TokenType.Power, '^', start);\n case '%': return makeToken(TokenType.Percent, '%', start);\n case '&': return makeToken(TokenType.Ampersand, '&', start);\n case '=': return makeToken(TokenType.Equal, '=', start);\n case '@': return makeToken(TokenType.AtSign, '@', start);\n case '!': return makeToken(TokenType.Exclamation,'!', start);\n case '<':\n if (this.#formula[this.#pos] === '>') { this.#pos++; return makeToken(TokenType.NotEqual, '<>', start); }\n if (this.#formula[this.#pos] === '=') { this.#pos++; return makeToken(TokenType.LessThanOrEqual, '<=', start); }\n return makeToken(TokenType.LessThan, '<', start);\n case '>':\n if (this.#formula[this.#pos] === '=') { this.#pos++; return makeToken(TokenType.GreaterThanOrEqual, '>=', start); }\n return makeToken(TokenType.GreaterThan, '>', start);\n default:\n throw new FormulaException(`Unexpected character '${ch}' at position ${start}.`);\n }\n }\n\n #skipWhitespace(): void {\n while (this.#pos < this.#formula.length && /\\s/.test(this.#formula[this.#pos]!)) {\n this.#pos++;\n }\n }\n}\n\nfunction isCellRef(s: string): boolean {\n if (s.length < 2) return false;\n let i = 0;\n while (i < s.length && /[a-zA-Z]/.test(s[i]!)) i++;\n if (i === 0 || i >= s.length) return false;\n while (i < s.length && /\\d/.test(s[i]!)) i++;\n return i === s.length;\n}\n","/**\n * AST node types for formula expressions.\n * Port of TVE.PureDocs.Excel.Formulas.FormulaNode (C#)\n */\nimport { FormulaValue, ArrayValue } from './formula-value.js';\nimport type { FormulaContext } from './formula-context.js';\n\n// ── Base ───────────────────────────────────────────────────────────────────\n\nexport abstract class FormulaNode {\n abstract evaluate(ctx: FormulaContext): FormulaValue;\n}\n\n// ── Literals ───────────────────────────────────────────────────────────────\n\nexport class NumberNode extends FormulaNode {\n constructor(readonly value: number) { super(); }\n evaluate(): FormulaValue { return FormulaValue.number(this.value); }\n}\n\nexport class StringNode extends FormulaNode {\n constructor(readonly value: string) { super(); }\n evaluate(): FormulaValue { return FormulaValue.text(this.value); }\n}\n\nexport class BooleanNode extends FormulaNode {\n constructor(readonly value: boolean) { super(); }\n evaluate(): FormulaValue { return FormulaValue.boolean(this.value); }\n}\n\nexport class ErrorNode extends FormulaNode {\n constructor(readonly errorValue: FormulaValue) { super(); }\n evaluate(): FormulaValue { return this.errorValue; }\n}\n\n/** Represents an empty/omitted argument in a function call (e.g. IF(A1,,0)). */\nexport class BlankNode extends FormulaNode {\n evaluate(): FormulaValue { return FormulaValue.blank; }\n}\n\n// ── References ────────────────────────────────────────────────────────────\n\nexport class CellReferenceNode extends FormulaNode {\n constructor(readonly reference: string) { super(); }\n evaluate(ctx: FormulaContext): FormulaValue {\n return ctx.getCellValue(this.reference);\n }\n}\n\nexport class RangeReferenceNode extends FormulaNode {\n constructor(readonly startRef: string, readonly endRef: string) { super(); }\n evaluate(ctx: FormulaContext): FormulaValue {\n return ctx.getRangeValues(this.startRef, this.endRef);\n }\n}\n\nexport class SheetCellReferenceNode extends FormulaNode {\n constructor(readonly sheetName: string, readonly cellReference: string) { super(); }\n evaluate(ctx: FormulaContext): FormulaValue {\n return ctx.getSheetCellValue(this.sheetName, this.cellReference);\n }\n}\n\nexport class SheetRangeReferenceNode extends FormulaNode {\n constructor(\n readonly sheetName: string,\n readonly startRef: string,\n readonly endRef: string,\n ) { super(); }\n evaluate(ctx: FormulaContext): FormulaValue {\n return ctx.getSheetRangeValues(this.sheetName, this.startRef, this.endRef);\n }\n}\n\nexport class NamedRangeNode extends FormulaNode {\n constructor(readonly name: string) { super(); }\n evaluate(ctx: FormulaContext): FormulaValue {\n return ctx.resolveNamedRange(this.name);\n }\n}\n\n// ── Operators ─────────────────────────────────────────────────────────────\n\nexport const enum BinaryOperator {\n Add, Subtract, Multiply, Divide, Power,\n Concatenate,\n Equal, NotEqual, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual,\n}\n\nexport const enum UnaryOperator {\n Negate, Plus, Percent,\n}\n\nexport class BinaryOpNode extends FormulaNode {\n constructor(\n readonly left: FormulaNode,\n readonly op: BinaryOperator,\n readonly right: FormulaNode,\n ) { super(); }\n\n evaluate(ctx: FormulaContext): FormulaValue {\n const l = this.left.evaluate(ctx);\n const r = this.right.evaluate(ctx);\n\n // Array broadcasting\n if (l.isArray || r.isArray) {\n const la = l.isArray ? l.arrayVal : ArrayValue.fromScalar(l);\n const ra = r.isArray ? r.arrayVal : ArrayValue.fromScalar(r);\n return FormulaValue.array(\n ArrayValue.broadcast(la, ra, (a, b) => this.#evalScalar(a, b)),\n );\n }\n\n return this.#evalScalar(l, r);\n }\n\n #evalScalar(l: FormulaValue, r: FormulaValue): FormulaValue {\n const op = this.op;\n\n // Comparisons\n if (op === BinaryOperator.Equal) return FormulaValue.boolean(FormulaValue.areEqual(l, r));\n if (op === BinaryOperator.NotEqual) return FormulaValue.boolean(!FormulaValue.areEqual(l, r));\n if (op === BinaryOperator.LessThan) return FormulaValue.boolean(FormulaValue.compare(l, r) < 0);\n if (op === BinaryOperator.LessThanOrEqual) return FormulaValue.boolean(FormulaValue.compare(l, r) <= 0);\n if (op === BinaryOperator.GreaterThan) return FormulaValue.boolean(FormulaValue.compare(l, r) > 0);\n if (op === BinaryOperator.GreaterThanOrEqual) return FormulaValue.boolean(FormulaValue.compare(l, r) >= 0);\n\n // Concatenation\n if (op === BinaryOperator.Concatenate) {\n if (l.isError) return l;\n if (r.isError) return r;\n return FormulaValue.text(l.asText() + r.asText());\n }\n\n // Arithmetic — coerce to numbers\n const ln = l.coerceToNumber();\n if (ln.isError) return ln;\n const rn = r.coerceToNumber();\n if (rn.isError) return rn;\n\n const lv = ln.numberValue;\n const rv = rn.numberValue;\n\n switch (op) {\n case BinaryOperator.Add: return FormulaValue.number(lv + rv);\n case BinaryOperator.Subtract: return FormulaValue.number(lv - rv);\n case BinaryOperator.Multiply: return FormulaValue.number(lv * rv);\n case BinaryOperator.Divide:\n if (rv === 0) return FormulaValue.errorDiv0;\n return FormulaValue.number(lv / rv);\n case BinaryOperator.Power:\n return FormulaValue.number(Math.pow(lv, rv));\n default:\n return FormulaValue.errorValue;\n }\n }\n}\n\nexport class UnaryOpNode extends FormulaNode {\n constructor(readonly op: UnaryOperator, readonly operand: FormulaNode) { super(); }\n\n evaluate(ctx: FormulaContext): FormulaValue {\n const val = this.operand.evaluate(ctx);\n\n if (this.op === UnaryOperator.Plus) {\n return val.coerceToNumber();\n }\n if (this.op === UnaryOperator.Negate) {\n const n = val.coerceToNumber();\n if (n.isError) return n;\n return FormulaValue.number(-n.numberValue);\n }\n if (this.op === UnaryOperator.Percent) {\n const n = val.coerceToNumber();\n if (n.isError) return n;\n return FormulaValue.number(n.numberValue / 100);\n }\n return FormulaValue.errorValue;\n }\n}\n\n/** @ implicit intersection operator (Excel 365). */\nexport class ImplicitIntersectionNode extends FormulaNode {\n constructor(readonly inner: FormulaNode) { super(); }\n\n evaluate(ctx: FormulaContext): FormulaValue {\n const val = this.inner.evaluate(ctx);\n if (!val.isArray) return val;\n return val.arrayVal.implicitIntersect(ctx.formulaRow, ctx.formulaCol, 0, 0);\n }\n}\n\n// ── Function call ─────────────────────────────────────────────────────────\n\nexport class FunctionCallNode extends FormulaNode {\n constructor(\n readonly functionName: string,\n readonly args: FormulaNode[],\n ) { super(); }\n\n evaluate(ctx: FormulaContext): FormulaValue {\n return ctx.evaluateFunction(this.functionName, this.args);\n }\n}\n","/**\n * Recursive descent parser converting formula tokens into an AST.\n * Port of TVE.PureDocs.Excel.Formulas.FormulaParser (C#)\n *\n * Operator precedence (low → high):\n * Comparison: =, <>, <, <=, >, >=\n * Concatenation: &\n * Addition/Subtraction: +, -\n * Multiplication/Division: *, /\n * Unary: +, -, @ (prefix)\n * Power: ^ (right-associative)\n * Percent: % (postfix)\n * Primary: literals, refs, functions, parentheses\n */\nimport { Token, TokenType } from './formula-token.js';\nimport { FormulaException } from './formula-lexer.js';\nimport {\n FormulaNode, NumberNode, StringNode, BooleanNode, ErrorNode, BlankNode,\n CellReferenceNode, RangeReferenceNode, SheetCellReferenceNode, SheetRangeReferenceNode,\n NamedRangeNode, FunctionCallNode,\n BinaryOpNode, BinaryOperator, UnaryOpNode, UnaryOperator,\n ImplicitIntersectionNode,\n} from './formula-node.js';\nimport { FormulaValue } from './formula-value.js';\n\nexport class FormulaParser {\n readonly #tokens: Token[];\n #pos = 0;\n\n constructor(tokens: Token[]) {\n this.#tokens = tokens;\n }\n\n parse(): FormulaNode {\n this.#pos = 0;\n const node = this.#parseComparison();\n if (this.#current.type !== TokenType.EOF) {\n throw new FormulaException(\n `Unexpected token '${this.#current.value}' at position ${this.#current.position}.`,\n );\n }\n return node;\n }\n\n // ── Token helpers ──────────────────────────────────────────────────────────\n\n get #current(): Token {\n return this.#tokens[this.#pos] ?? { type: TokenType.EOF, value: '', position: -1 };\n }\n\n #advance(): Token {\n const t = this.#current;\n this.#pos++;\n return t;\n }\n\n #expect(type: TokenType): Token {\n if (this.#current.type !== type) {\n throw new FormulaException(\n `Expected token type ${type} but got ${this.#current.type} ('${this.#current.value}') at position ${this.#current.position}.`,\n );\n }\n return this.#advance();\n }\n\n // ── Precedence levels ──────────────────────────────────────────────────────\n\n #parseComparison(): FormulaNode {\n let left = this.#parseConcatenation();\n while (true) {\n const op = comparisonOp(this.#current.type);\n if (op === null) break;\n this.#advance();\n left = new BinaryOpNode(left, op, this.#parseConcatenation());\n }\n return left;\n }\n\n #parseConcatenation(): FormulaNode {\n let left = this.#parseAddSub();\n while (this.#current.type === TokenType.Ampersand) {\n this.#advance();\n left = new BinaryOpNode(left, BinaryOperator.Concatenate, this.#parseAddSub());\n }\n return left;\n }\n\n #parseAddSub(): FormulaNode {\n let left = this.#parseMulDiv();\n while (true) {\n const t = this.#current.type;\n if (t !== TokenType.Plus && t !== TokenType.Minus) break;\n this.#advance();\n const op = t === TokenType.Plus ? BinaryOperator.Add : BinaryOperator.Subtract;\n left = new BinaryOpNode(left, op, this.#parseMulDiv());\n }\n return left;\n }\n\n #parseMulDiv(): FormulaNode {\n let left = this.#parseUnary();\n while (true) {\n const t = this.#current.type;\n if (t !== TokenType.Multiply && t !== TokenType.Divide) break;\n this.#advance();\n const op = t === TokenType.Multiply ? BinaryOperator.Multiply : BinaryOperator.Divide;\n left = new BinaryOpNode(left, op, this.#parseUnary());\n }\n return left;\n }\n\n #parseUnary(): FormulaNode {\n if (this.#current.type === TokenType.Minus) {\n this.#advance();\n return new UnaryOpNode(UnaryOperator.Negate, this.#parsePower());\n }\n if (this.#current.type === TokenType.Plus) {\n this.#advance();\n return new UnaryOpNode(UnaryOperator.Plus, this.#parsePower());\n }\n if (this.#current.type === TokenType.AtSign) {\n this.#advance();\n return new ImplicitIntersectionNode(this.#parsePower());\n }\n return this.#parsePower();\n }\n\n #parsePower(): FormulaNode {\n const left = this.#parsePercent();\n if (this.#current.type === TokenType.Power) {\n this.#advance();\n // Right-associative\n return new BinaryOpNode(left, BinaryOperator.Power, this.#parseUnary());\n }\n return left;\n }\n\n #parsePercent(): FormulaNode {\n let node = this.#parsePrimary();\n while (this.#current.type === TokenType.Percent) {\n this.#advance();\n node = new UnaryOpNode(UnaryOperator.Percent, node);\n }\n return node;\n }\n\n #parsePrimary(): FormulaNode {\n const token = this.#current;\n\n switch (token.type) {\n case TokenType.Number: {\n this.#advance();\n const n = parseFloat(token.value);\n if (isNaN(n)) throw new FormulaException(`Invalid number: ${token.value}`);\n return new NumberNode(n);\n }\n\n case TokenType.String:\n this.#advance();\n return new StringNode(token.value);\n\n case TokenType.Boolean:\n this.#advance();\n return new BooleanNode(token.value === 'TRUE');\n\n case TokenType.ErrorLiteral:\n this.#advance();\n return new ErrorNode(FormulaValue.error(FormulaValue.errorFromString(token.value)));\n\n case TokenType.CellReference: {\n this.#advance();\n // Check for range A1:B5\n if (this.#current.type === TokenType.Colon) {\n this.#advance();\n const end = this.#expect(TokenType.CellReference);\n return new RangeReferenceNode(token.value, end.value);\n }\n return new CellReferenceNode(token.value);\n }\n\n case TokenType.SheetReference: {\n this.#advance();\n const parts = token.value.split('!');\n const sheetName = parts[0]!;\n const cellRef = parts[1] ?? '';\n // Check for range Sheet1!A1:B5\n if (this.#current.type === TokenType.Colon) {\n this.#advance();\n const end = this.#expect(TokenType.CellReference);\n return new SheetRangeReferenceNode(sheetName, cellRef, end.value);\n }\n return new SheetCellReferenceNode(sheetName, cellRef);\n }\n\n case TokenType.NamedRange:\n this.#advance();\n return new NamedRangeNode(token.value);\n\n case TokenType.Function:\n return this.#parseFunction();\n\n case TokenType.LeftParen: {\n this.#advance();\n const expr = this.#parseComparison();\n this.#expect(TokenType.RightParen);\n return expr;\n }\n\n default:\n throw new FormulaException(\n `Unexpected token '${token.value}' (type ${token.type}) at position ${token.position}.`,\n );\n }\n }\n\n #parseFunction(): FormulaNode {\n const nameToken = this.#advance();\n this.#expect(TokenType.LeftParen);\n\n const args: FormulaNode[] = [];\n\n if (this.#current.type !== TokenType.RightParen) {\n // First arg — may be blank if leading comma\n if (this.#current.type === TokenType.Comma) {\n args.push(new BlankNode());\n } else {\n args.push(this.#parseComparison());\n }\n\n while (this.#current.type === TokenType.Comma) {\n this.#advance(); // consume comma\n if (\n this.#current.type === TokenType.Comma ||\n this.#current.type === TokenType.RightParen\n ) {\n args.push(new BlankNode());\n } else {\n args.push(this.#parseComparison());\n }\n }\n }\n\n this.#expect(TokenType.RightParen);\n return new FunctionCallNode(nameToken.value.toUpperCase(), args);\n }\n}\n\nfunction comparisonOp(type: TokenType): BinaryOperator | null {\n switch (type) {\n case TokenType.Equal: return BinaryOperator.Equal;\n case TokenType.NotEqual: return BinaryOperator.NotEqual;\n case TokenType.LessThan: return BinaryOperator.LessThan;\n case TokenType.LessThanOrEqual: return BinaryOperator.LessThanOrEqual;\n case TokenType.GreaterThan: return BinaryOperator.GreaterThan;\n case TokenType.GreaterThanOrEqual: return BinaryOperator.GreaterThanOrEqual;\n default: return null;\n }\n}\n","/**\n * Mathematical and aggregate Excel functions.\n * Port of TVE.PureDocs.Excel.Formulas.MathFunctions (C#)\n */\nimport { FormulaValue } from '../formula-value.js';\nimport { FormulaHelper, type FunctionRegistry } from '../function-registry.js';\nimport type { FormulaNode } from '../formula-node.js';\nimport type { FormulaContext } from '../formula-context.js';\n\ntype Args = FormulaNode[];\ntype Ctx = FormulaContext;\n\nexport function registerMath(r: FunctionRegistry): void {\n r.register('SUM', sum, 1);\n r.register('AVERAGE', average, 1);\n r.register('MIN', min, 1);\n r.register('MAX', max, 1);\n r.register('COUNT', count, 1);\n r.register('COUNTA', countA, 1);\n r.register('COUNTBLANK', countBlank, 1, 1);\n r.register('COUNTIF', countIf, 2, 2);\n r.register('SUMIF', sumIf, 2, 3);\n r.register('AVERAGEIF', averageIf, 2, 3);\n r.register('PRODUCT', product, 1);\n r.register('SUMPRODUCT', sumProduct, 1);\n r.register('ABS', abs, 1, 1);\n r.register('ROUND', round, 2, 2);\n r.register('ROUNDUP', roundUp, 2, 2);\n r.register('ROUNDDOWN', roundDown, 2, 2);\n r.register('CEILING', ceiling, 2, 2);\n r.register('CEILING.MATH', ceiling, 2, 2);\n r.register('FLOOR', floor, 2, 2);\n r.register('FLOOR.MATH', floor, 2, 2);\n r.register('INT', int_, 1, 1);\n r.register('TRUNC', trunc, 1, 2);\n r.register('MOD', mod, 2, 2);\n r.register('QUOTIENT', quotient, 2, 2);\n r.register('POWER', power, 2, 2);\n r.register('SQRT', sqrt, 1, 1);\n r.register('SIGN', sign, 1, 1);\n r.register('PI', pi, 0, 0);\n r.register('RAND', rand, 0, 0, true);\n r.register('RANDBETWEEN', randBetween, 2, 2, true);\n r.register('LOG', log, 1, 2);\n r.register('LOG10', log10, 1, 1);\n r.register('LN', ln, 1, 1);\n r.register('EXP', exp, 1, 1);\n r.register('FACT', fact, 1, 1);\n r.register('COMBIN', combin, 2, 2);\n}\n\n// ── Aggregates ─────────────────────────────────────────────────────────────\n\nfunction sum(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n return FormulaValue.number(r.values.reduce((s, n) => s + n, 0));\n}\n\nfunction average(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n if (r.values.length === 0) return FormulaValue.errorDiv0;\n return FormulaValue.number(r.values.reduce((s, n) => s + n, 0) / r.values.length);\n}\n\nfunction min(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n return r.values.length === 0 ? FormulaValue.zero : FormulaValue.number(Math.min(...r.values));\n}\n\nfunction max(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n return r.values.length === 0 ? FormulaValue.zero : FormulaValue.number(Math.max(...r.values));\n}\n\nfunction count(a: Args, c: Ctx): FormulaValue {\n const flat = FormulaHelper.flattenArgs(a, c);\n let n = 0;\n for (const v of flat) {\n if (v.isNumber || (v.isText && !isNaN(parseFloat(v.textValue)))) n++;\n }\n return FormulaValue.number(n);\n}\n\nfunction countA(a: Args, c: Ctx): FormulaValue {\n return FormulaValue.number(FormulaHelper.flattenArgs(a, c).filter(v => !v.isBlank).length);\n}\n\nfunction countBlank(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n if (!v.isArray) return FormulaValue.number(v.isBlank ? 1 : 0);\n let n = 0;\n for (const item of v.arrayVal.values()) if (item.isBlank) n++;\n return FormulaValue.number(n);\n}\n\nfunction countIf(a: Args, c: Ctx): FormulaValue {\n const range = a[0]!.evaluate(c);\n if (range.isError) return range;\n const crit = a[1]!.evaluate(c);\n if (crit.isError) return crit;\n const criteria = crit.asText();\n\n if (!range.isArray) return FormulaValue.number(FormulaHelper.matchesCriteria(range, criteria) ? 1 : 0);\n let n = 0;\n for (const item of range.arrayVal.values()) {\n if (!item.isBlank && FormulaHelper.matchesCriteria(item, criteria)) n++;\n }\n return FormulaValue.number(n);\n}\n\nfunction sumIf(a: Args, c: Ctx): FormulaValue {\n const range = a[0]!.evaluate(c);\n if (range.isError) return range;\n const crit = a[1]!.evaluate(c);\n if (crit.isError) return crit;\n const criteria = crit.asText();\n\n const sumRange = a.length > 2 ? a[2]!.evaluate(c) : range;\n if (sumRange.isError) return sumRange;\n\n if (!range.isArray) {\n if (FormulaHelper.matchesCriteria(range, criteria)) {\n const r = sumRange.tryAsDouble();\n return r.ok ? FormulaValue.number(r.value) : FormulaValue.zero;\n }\n return FormulaValue.zero;\n }\n\n const rangeArr = range.arrayVal;\n const sumArr = sumRange.isArray ? sumRange.arrayVal : null;\n let total = 0;\n\n for (let i = 0; i < rangeArr.length; i++) {\n const rv = rangeArr.getFlat(i);\n if (rv.isBlank) continue;\n if (FormulaHelper.matchesCriteria(rv, criteria)) {\n const sv = sumArr ? sumArr.getFlat(i) : rangeArr.getFlat(i);\n const r = sv.tryAsDouble();\n if (r.ok) total += r.value;\n }\n }\n return FormulaValue.number(total);\n}\n\nfunction averageIf(a: Args, c: Ctx): FormulaValue {\n const range = a[0]!.evaluate(c);\n if (range.isError) return range;\n const crit = a[1]!.evaluate(c);\n if (crit.isError) return crit;\n const criteria = crit.asText();\n const avgRange = a.length > 2 ? a[2]!.evaluate(c) : range;\n if (avgRange.isError) return avgRange;\n\n if (!range.isArray) {\n if (!FormulaHelper.matchesCriteria(range, criteria)) return FormulaValue.errorDiv0;\n const r = avgRange.tryAsDouble();\n return r.ok ? FormulaValue.number(r.value) : FormulaValue.errorDiv0;\n }\n\n const rangeArr = range.arrayVal;\n const avgArr = avgRange.isArray ? avgRange.arrayVal : null;\n let total = 0, cnt = 0;\n\n for (let i = 0; i < rangeArr.length; i++) {\n const rv = rangeArr.getFlat(i);\n if (rv.isBlank) continue;\n if (FormulaHelper.matchesCriteria(rv, criteria)) {\n const sv = avgArr ? avgArr.getFlat(i) : rangeArr.getFlat(i);\n const r = sv.tryAsDouble();\n if (r.ok) { total += r.value; cnt++; }\n }\n }\n return cnt === 0 ? FormulaValue.errorDiv0 : FormulaValue.number(total / cnt);\n}\n\nfunction product(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n return FormulaValue.number(r.values.reduce((p, n) => p * n, 1));\n}\n\nfunction sumProduct(a: Args, c: Ctx): FormulaValue {\n const arrays = a.map(arg => arg.evaluate(c));\n for (const v of arrays) if (v.isError) return v;\n\n const first = arrays[0]!;\n const len = first.isArray ? first.arrayVal.length : 1;\n let total = 0;\n\n for (let i = 0; i < len; i++) {\n let prod = 1;\n for (const v of arrays) {\n const item = v.isArray ? v.arrayVal.getFlat(i) : v;\n const r = item.tryAsDouble();\n if (!r.ok) { prod = 0; break; }\n prod *= r.value;\n }\n total += prod;\n }\n return FormulaValue.number(total);\n}\n\n// ── Single-arg math ────────────────────────────────────────────────────────\n\nfunction abs(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c);\n return r.ok ? FormulaValue.number(Math.abs(r.value)) : r.error;\n}\n\nfunction round(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n const d = FormulaHelper.evalDouble(a[1]!, c);\n if (!d.ok) return d.error;\n const factor = Math.pow(10, Math.round(d.value));\n return FormulaValue.number(Math.round(n.value * factor) / factor);\n}\n\nfunction roundUp(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n const d = FormulaHelper.evalDouble(a[1]!, c);\n if (!d.ok) return d.error;\n const factor = Math.pow(10, Math.round(d.value));\n return FormulaValue.number(Math.ceil(n.value * factor) / factor);\n}\n\nfunction roundDown(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n const d = FormulaHelper.evalDouble(a[1]!, c);\n if (!d.ok) return d.error;\n const factor = Math.pow(10, Math.round(d.value));\n return FormulaValue.number(Math.floor(n.value * factor) / factor);\n}\n\nfunction ceiling(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n const s = FormulaHelper.evalDouble(a[1]!, c);\n if (!s.ok) return s.error;\n if (s.value === 0) return FormulaValue.zero;\n return FormulaValue.number(Math.ceil(n.value / s.value) * s.value);\n}\n\nfunction floor(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n const s = FormulaHelper.evalDouble(a[1]!, c);\n if (!s.ok) return s.error;\n if (s.value === 0) return FormulaValue.zero;\n return FormulaValue.number(Math.floor(n.value / s.value) * s.value);\n}\n\nfunction int_(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c);\n return r.ok ? FormulaValue.number(Math.floor(r.value)) : r.error;\n}\n\nfunction trunc(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n let digits = 0;\n if (a.length > 1) {\n const d = FormulaHelper.evalDouble(a[1]!, c);\n if (!d.ok) return d.error;\n digits = Math.round(d.value);\n }\n const factor = Math.pow(10, digits);\n return FormulaValue.number(Math.trunc(n.value * factor) / factor);\n}\n\nfunction mod(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n const d = FormulaHelper.evalDouble(a[1]!, c);\n if (!d.ok) return d.error;\n if (d.value === 0) return FormulaValue.errorDiv0;\n return FormulaValue.number(n.value - d.value * Math.floor(n.value / d.value));\n}\n\nfunction quotient(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n const d = FormulaHelper.evalDouble(a[1]!, c);\n if (!d.ok) return d.error;\n if (d.value === 0) return FormulaValue.errorDiv0;\n return FormulaValue.number(Math.trunc(n.value / d.value));\n}\n\nfunction power(a: Args, c: Ctx): FormulaValue {\n const b = FormulaHelper.evalDouble(a[0]!, c);\n if (!b.ok) return b.error;\n const e = FormulaHelper.evalDouble(a[1]!, c);\n if (!e.ok) return e.error;\n return FormulaValue.number(Math.pow(b.value, e.value));\n}\n\nfunction sqrt(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c);\n if (!r.ok) return r.error;\n if (r.value < 0) return FormulaValue.errorNum;\n return FormulaValue.number(Math.sqrt(r.value));\n}\n\nfunction sign(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c);\n return r.ok ? FormulaValue.number(Math.sign(r.value)) : r.error;\n}\n\nfunction pi(): FormulaValue { return FormulaValue.number(Math.PI); }\nfunction rand(): FormulaValue { return FormulaValue.number(Math.random()); }\n\nfunction randBetween(a: Args, c: Ctx): FormulaValue {\n const lo = FormulaHelper.evalDouble(a[0]!, c);\n if (!lo.ok) return lo.error;\n const hi = FormulaHelper.evalDouble(a[1]!, c);\n if (!hi.ok) return hi.error;\n return FormulaValue.number(Math.floor(lo.value + Math.random() * (hi.value - lo.value + 1)));\n}\n\nfunction log(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n if (n.value <= 0) return FormulaValue.errorNum;\n let base = 10;\n if (a.length > 1) {\n const b = FormulaHelper.evalDouble(a[1]!, c);\n if (!b.ok) return b.error;\n base = b.value;\n }\n if (base <= 0 || base === 1) return FormulaValue.errorNum;\n return FormulaValue.number(Math.log(n.value) / Math.log(base));\n}\n\nfunction log10(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c);\n if (!r.ok) return r.error;\n if (r.value <= 0) return FormulaValue.errorNum;\n return FormulaValue.number(Math.log10(r.value));\n}\n\nfunction ln(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c);\n if (!r.ok) return r.error;\n if (r.value <= 0) return FormulaValue.errorNum;\n return FormulaValue.number(Math.log(r.value));\n}\n\nfunction exp(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c);\n return r.ok ? FormulaValue.number(Math.exp(r.value)) : r.error;\n}\n\nfunction fact(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c);\n if (!r.ok) return r.error;\n const n = Math.round(r.value);\n if (n < 0) return FormulaValue.errorNum;\n if (n > 170) return FormulaValue.errorNum;\n let f = 1;\n for (let i = 2; i <= n; i++) f *= i;\n return FormulaValue.number(f);\n}\n\nfunction combin(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n const k = FormulaHelper.evalDouble(a[1]!, c);\n if (!k.ok) return k.error;\n const N = Math.round(n.value);\n const K = Math.round(k.value);\n if (N < 0 || K < 0 || K > N) return FormulaValue.errorNum;\n // C(N,K) = N! / (K! * (N-K)!)\n let result = 1;\n for (let i = 0; i < K; i++) result = result * (N - i) / (i + 1);\n return FormulaValue.number(Math.round(result));\n}\n","/**\n * Text/string Excel functions.\n * Port of TVE.PureDocs.Excel.Formulas.TextFunctions (C#)\n */\nimport { fromOADate } from '@devmm/puredocs-excel';\nimport { FormulaValue } from '../formula-value.js';\nimport { FormulaHelper, type FunctionRegistry } from '../function-registry.js';\nimport type { FormulaNode } from '../formula-node.js';\nimport type { FormulaContext } from '../formula-context.js';\n\ntype Args = FormulaNode[];\ntype Ctx = FormulaContext;\n\nexport function registerText(r: FunctionRegistry): void {\n r.register('LEFT', left, 1, 2);\n r.register('RIGHT', right, 1, 2);\n r.register('MID', mid, 3, 3);\n r.register('LEN', len, 1, 1);\n r.register('UPPER', upper, 1, 1);\n r.register('LOWER', lower, 1, 1);\n r.register('PROPER', proper, 1, 1);\n r.register('TRIM', trim, 1, 1);\n r.register('CLEAN', clean, 1, 1);\n r.register('SUBSTITUTE', substitute, 3, 4);\n r.register('REPLACE', replace, 4, 4);\n r.register('CONCATENATE', concatenate, 1);\n r.register('CONCAT', concatenate, 1);\n r.register('TEXTJOIN', textJoin, 3);\n r.register('TEXT', text_, 2, 2);\n r.register('VALUE', value, 1, 1);\n r.register('FIND', find, 2, 3);\n r.register('SEARCH', search, 2, 3);\n r.register('REPT', rept, 2, 2);\n r.register('EXACT', exact, 2, 2);\n r.register('CHAR', char_, 1, 1);\n r.register('CODE', code, 1, 1);\n r.register('T', t_, 1, 1);\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction str(a: Args, c: Ctx, idx: number): { ok: true; s: string } | { ok: false; e: FormulaValue } {\n const r = FormulaHelper.evalString(a[idx]!, c);\n return r.ok ? { ok: true, s: r.value } : { ok: false, e: r.error };\n}\n\nfunction num(a: Args, c: Ctx, idx: number): { ok: true; n: number } | { ok: false; e: FormulaValue } {\n const r = FormulaHelper.evalDouble(a[idx]!, c);\n return r.ok ? { ok: true, n: r.value } : { ok: false, e: r.error };\n}\n\n// ── Implementations ──────────────────────────────────────────────────────────\n\nfunction left(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n let n = 1;\n if (a.length > 1) { const r = num(a, c, 1); if (!r.ok) return r.e; n = Math.round(r.n); }\n if (n < 0) return FormulaValue.errorValue;\n return FormulaValue.text(s.s.slice(0, n));\n}\n\nfunction right(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n let n = 1;\n if (a.length > 1) { const r = num(a, c, 1); if (!r.ok) return r.e; n = Math.round(r.n); }\n if (n < 0) return FormulaValue.errorValue;\n return FormulaValue.text(n >= s.s.length ? s.s : s.s.slice(-n));\n}\n\nfunction mid(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n const sv = num(a, c, 1); if (!sv.ok) return sv.e;\n const nv = num(a, c, 2); if (!nv.ok) return nv.e;\n const start = Math.round(sv.n) - 1;\n const count = Math.round(nv.n);\n if (start < 0 || count < 0) return FormulaValue.errorValue;\n return FormulaValue.text(s.s.slice(start, start + count));\n}\n\nfunction len(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n return FormulaValue.number(s.s.length);\n}\n\nfunction upper(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n return FormulaValue.text(s.s.toUpperCase());\n}\n\nfunction lower(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n return FormulaValue.text(s.s.toLowerCase());\n}\n\nfunction proper(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n let capitalise = true;\n let result = '';\n for (const ch of s.s) {\n result += capitalise ? ch.toUpperCase() : ch.toLowerCase();\n capitalise = !/[a-zA-Z]/.test(ch);\n }\n return FormulaValue.text(result);\n}\n\nfunction trim(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n // Excel TRIM removes leading/trailing spaces AND collapses internal spaces to one\n return FormulaValue.text(s.s.trim().replace(/\\s+/g, ' '));\n}\n\nfunction clean(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n return FormulaValue.text([...s.s].filter(ch => ch.charCodeAt(0) >= 32).join(''));\n}\n\nfunction substitute(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n const old = str(a, c, 1); if (!old.ok) return old.e;\n const nw = str(a, c, 2); if (!nw.ok) return nw.e;\n\n if (a.length > 3) {\n const iv = num(a, c, 3); if (!iv.ok) return iv.e;\n const inst = Math.round(iv.n);\n let count = 0, pos = 0, result = '';\n while (pos < s.s.length) {\n const idx = s.s.indexOf(old.s, pos);\n if (idx < 0) { result += s.s.slice(pos); break; }\n count++;\n if (count === inst) {\n result += s.s.slice(pos, idx) + nw.s;\n pos = idx + old.s.length;\n result += s.s.slice(pos);\n break;\n }\n result += s.s.slice(pos, idx + old.s.length);\n pos = idx + old.s.length;\n }\n return FormulaValue.text(result);\n }\n\n return FormulaValue.text(s.s.split(old.s).join(nw.s));\n}\n\nfunction replace(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n const sv = num(a, c, 1); if (!sv.ok) return sv.e;\n const nv = num(a, c, 2); if (!nv.ok) return nv.e;\n const nw = str(a, c, 3); if (!nw.ok) return nw.e;\n const start = Math.max(0, Math.round(sv.n) - 1);\n const count = Math.max(0, Math.round(nv.n));\n return FormulaValue.text(s.s.slice(0, start) + nw.s + s.s.slice(start + count));\n}\n\nfunction concatenate(a: Args, c: Ctx): FormulaValue {\n let result = '';\n for (const arg of a) {\n const v = arg.evaluate(c);\n if (v.isError) return v;\n result += v.asText();\n }\n return FormulaValue.text(result);\n}\n\nfunction textJoin(a: Args, c: Ctx): FormulaValue {\n const delim = str(a, c, 0); if (!delim.ok) return delim.e;\n const ignV = a[1]!.evaluate(c);\n if (ignV.isError) return ignV;\n const ignoreEmpty = ignV.coerceToBool().booleanValue;\n const parts: string[] = [];\n\n for (let i = 2; i < a.length; i++) {\n const v = a[i]!.evaluate(c);\n if (v.isError) return v;\n if (v.isArray) {\n for (const item of v.arrayVal.values()) {\n const t = item.asText();\n if (!ignoreEmpty || t !== '') parts.push(t);\n }\n } else {\n const t = v.asText();\n if (!ignoreEmpty || t !== '') parts.push(t);\n }\n }\n\n const result = parts.join(delim.s);\n if (result.length > 32767) return FormulaValue.errorValue;\n return FormulaValue.text(result);\n}\n\nfunction text_(a: Args, c: Ctx): FormulaValue {\n const n = FormulaHelper.evalDouble(a[0]!, c);\n if (!n.ok) return n.error;\n const f = str(a, c, 1); if (!f.ok) return f.e;\n // Map common Excel format codes to JS toLocaleString / toFixed patterns\n try {\n return FormulaValue.text(formatNumber(n.value, f.s));\n } catch {\n return FormulaValue.errorValue;\n }\n}\n\nfunction formatNumber(value: number, fmt: string): string {\n // Minimal Excel format code interpreter\n if (fmt === '0') return String(Math.round(value));\n if (fmt === '0.00') return value.toFixed(2);\n if (fmt === '#,##0') return Math.round(value).toLocaleString('en-US');\n if (fmt === '#,##0.00') return value.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n if (fmt === '0%') return `${Math.round(value * 100)}%`;\n if (fmt === '0.00%') return `${(value * 100).toFixed(2)}%`;\n // Date patterns — convert OADate back if it looks like a date format\n if (/[yYmMdD]/.test(fmt)) {\n try {\n const date = fromOADate(value);\n return date.toLocaleDateString();\n } catch { /* fall through */ }\n }\n return String(value);\n}\n\nfunction value(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n const n = parseFloat(s.s.replace(/,/g, '').replace(/%$/, (m) => { return m ? String(parseFloat(s.s) / 100) : ''; }));\n if (isNaN(n)) return FormulaValue.errorValue;\n return FormulaValue.number(n);\n}\n\nfunction find(a: Args, c: Ctx): FormulaValue {\n const needle = str(a, c, 0); if (!needle.ok) return needle.e;\n const haystack = str(a, c, 1); if (!haystack.ok) return haystack.e;\n let start = 0;\n if (a.length > 2) { const r = num(a, c, 2); if (!r.ok) return r.e; start = Math.round(r.n) - 1; }\n const idx = haystack.s.indexOf(needle.s, start);\n return idx < 0 ? FormulaValue.errorValue : FormulaValue.number(idx + 1);\n}\n\nfunction search(a: Args, c: Ctx): FormulaValue {\n const needle = str(a, c, 0); if (!needle.ok) return needle.e;\n const haystack = str(a, c, 1); if (!haystack.ok) return haystack.e;\n let start = 0;\n if (a.length > 2) { const r = num(a, c, 2); if (!r.ok) return r.e; start = Math.round(r.n) - 1; }\n const idx = haystack.s.toLowerCase().indexOf(needle.s.toLowerCase(), start);\n return idx < 0 ? FormulaValue.errorValue : FormulaValue.number(idx + 1);\n}\n\nfunction rept(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n const n = num(a, c, 1); if (!n.ok) return n.e;\n const count = Math.round(n.n);\n if (count < 0) return FormulaValue.errorValue;\n return FormulaValue.text(s.s.repeat(count));\n}\n\nfunction exact(a: Args, c: Ctx): FormulaValue {\n const s1 = str(a, c, 0); if (!s1.ok) return s1.e;\n const s2 = str(a, c, 1); if (!s2.ok) return s2.e;\n return FormulaValue.boolean(s1.s === s2.s);\n}\n\nfunction char_(a: Args, c: Ctx): FormulaValue {\n const r = num(a, c, 0); if (!r.ok) return r.e;\n const code = Math.round(r.n);\n if (code < 1 || code > 255) return FormulaValue.errorValue;\n return FormulaValue.text(String.fromCharCode(code));\n}\n\nfunction code(a: Args, c: Ctx): FormulaValue {\n const s = str(a, c, 0); if (!s.ok) return s.e;\n if (s.s.length === 0) return FormulaValue.errorValue;\n return FormulaValue.number(s.s.charCodeAt(0));\n}\n\nfunction t_(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n return v.isText ? v : FormulaValue.emptyString;\n}\n","/**\n * Logical Excel functions.\n * Port of TVE.PureDocs.Excel.Formulas.LogicalFunctions (C#)\n */\nimport { FormulaValue, FormulaError } from '../formula-value.js';\nimport type { FunctionRegistry } from '../function-registry.js';\nimport type { FormulaNode } from '../formula-node.js';\nimport type { FormulaContext } from '../formula-context.js';\n\ntype Args = FormulaNode[];\ntype Ctx = FormulaContext;\n\nexport function registerLogical(r: FunctionRegistry): void {\n r.register('IF', if_, 2, 3);\n r.register('AND', and, 1);\n r.register('OR', or, 1);\n r.register('NOT', not, 1, 1);\n r.register('XOR', xor, 1);\n r.register('IFERROR', ifError, 2, 2);\n r.register('IFNA', ifNa, 2, 2);\n r.register('IFS', ifs, 2);\n r.register('SWITCH', switch_, 3);\n r.register('TRUE', trueFn, 0, 0);\n r.register('FALSE', falseFn, 0, 0);\n}\n\nfunction if_(a: Args, c: Ctx): FormulaValue {\n const cond = a[0]!.evaluate(c);\n if (cond.isError) return cond;\n const b = cond.coerceToBool();\n if (b.isError) return b;\n return b.booleanValue\n ? a[1]!.evaluate(c)\n : a.length > 2 ? a[2]!.evaluate(c) : FormulaValue.false_;\n}\n\nfunction and(a: Args, c: Ctx): FormulaValue {\n let hasValue = false;\n for (const arg of a) {\n const v = arg.evaluate(c);\n if (v.isError) return v;\n if (v.isArray) {\n for (const item of v.arrayVal.values()) {\n if (item.isBlank) continue;\n if (item.isError) return item;\n hasValue = true;\n const bv = item.coerceToBool();\n if (bv.isError) return bv;\n if (!bv.booleanValue) return FormulaValue.false_;\n }\n } else {\n if (v.isBlank) { hasValue = true; continue; }\n hasValue = true;\n const bv = v.coerceToBool();\n if (bv.isError) return bv;\n if (!bv.booleanValue) return FormulaValue.false_;\n }\n }\n return hasValue ? FormulaValue.true_ : FormulaValue.errorValue;\n}\n\nfunction or(a: Args, c: Ctx): FormulaValue {\n let hasValue = false;\n for (const arg of a) {\n const v = arg.evaluate(c);\n if (v.isError) return v;\n if (v.isArray) {\n for (const item of v.arrayVal.values()) {\n if (item.isBlank) continue;\n if (item.isError) return item;\n hasValue = true;\n const bv = item.coerceToBool();\n if (bv.isError) return bv;\n if (bv.booleanValue) return FormulaValue.true_;\n }\n } else {\n if (v.isBlank) { hasValue = true; continue; }\n hasValue = true;\n const bv = v.coerceToBool();\n if (bv.isError) return bv;\n if (bv.booleanValue) return FormulaValue.true_;\n }\n }\n return hasValue ? FormulaValue.false_ : FormulaValue.errorValue;\n}\n\nfunction not(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n if (v.isError) return v;\n const bv = v.coerceToBool();\n if (bv.isError) return bv;\n return FormulaValue.boolean(!bv.booleanValue);\n}\n\nfunction xor(a: Args, c: Ctx): FormulaValue {\n let trueCount = 0;\n for (const arg of a) {\n const v = arg.evaluate(c);\n if (v.isError) return v;\n const bv = v.coerceToBool();\n if (bv.isError) return bv;\n if (bv.booleanValue) trueCount++;\n }\n return FormulaValue.boolean(trueCount % 2 === 1);\n}\n\nfunction ifError(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n return v.isError ? a[1]!.evaluate(c) : v;\n}\n\nfunction ifNa(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n return v.isError && v.errorCode === FormulaError.NA ? a[1]!.evaluate(c) : v;\n}\n\nfunction ifs(a: Args, c: Ctx): FormulaValue {\n for (let i = 0; i + 1 < a.length; i += 2) {\n const cond = a[i]!.evaluate(c);\n if (cond.isError) return cond;\n const bv = cond.coerceToBool();\n if (bv.isError) return bv;\n if (bv.booleanValue) return a[i + 1]!.evaluate(c);\n }\n return FormulaValue.errorNA;\n}\n\nfunction switch_(a: Args, c: Ctx): FormulaValue {\n const expr = a[0]!.evaluate(c);\n if (expr.isError) return expr;\n for (let i = 1; i + 1 < a.length; i += 2) {\n const cv = a[i]!.evaluate(c);\n if (cv.isError) return cv;\n if (FormulaValue.areEqual(expr, cv)) return a[i + 1]!.evaluate(c);\n }\n // Default value: last arg when even count\n return a.length % 2 === 0 ? a[a.length - 1]!.evaluate(c) : FormulaValue.errorNA;\n}\n\nfunction trueFn(): FormulaValue { return FormulaValue.true_; }\nfunction falseFn(): FormulaValue { return FormulaValue.false_; }\n","/**\n * Date and time Excel functions.\n * Port of TVE.PureDocs.Excel.Formulas.DateFunctions (C#)\n */\nimport { FormulaValue } from '../formula-value.js';\nimport { FormulaHelper, type FunctionRegistry } from '../function-registry.js';\nimport type { FormulaNode } from '../formula-node.js';\nimport type { FormulaContext } from '../formula-context.js';\n\ntype Args = FormulaNode[];\ntype Ctx = FormulaContext;\n\n// OADate helpers (same logic as core package, duplicated to avoid circular dep)\nconst OA_EPOCH_MS = Date.UTC(1899, 11, 30, 0, 0, 0, 0);\nconst MS_PER_DAY = 86_400_000;\n\nfunction toOA(date: Date): number {\n return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(),\n date.getHours(), date.getMinutes(), date.getSeconds()) - OA_EPOCH_MS) / MS_PER_DAY;\n}\n\nfunction fromOA(oa: number): Date {\n const ms = OA_EPOCH_MS + oa * MS_PER_DAY;\n const d = new Date(ms);\n return new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(),\n d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds());\n}\n\nexport function registerDate(r: FunctionRegistry): void {\n r.register('NOW', now, 0, 0, true);\n r.register('TODAY', today, 0, 0, true);\n r.register('DATE', date_, 3, 3);\n r.register('YEAR', year, 1, 1);\n r.register('MONTH', month, 1, 1);\n r.register('DAY', day, 1, 1);\n r.register('HOUR', hour, 1, 1);\n r.register('MINUTE', minute, 1, 1);\n r.register('SECOND', second, 1, 1);\n r.register('DATEVALUE', dateValue, 1, 1);\n r.register('DAYS', days, 2, 2);\n r.register('EDATE', edate, 2, 2);\n r.register('EOMONTH', eomonth, 2, 2);\n r.register('WEEKDAY', weekday, 1, 2);\n r.register('WEEKNUM', weeknum, 1, 2);\n r.register('NETWORKDAYS', networkdays, 2, 3);\n r.register('DATEDIF', datedif, 3, 3);\n}\n\nfunction evalDate(a: Args, c: Ctx, idx: number): { ok: true; date: Date } | { ok: false; error: FormulaValue } {\n const r = FormulaHelper.evalDouble(a[idx]!, c);\n if (!r.ok) return r;\n try {\n return { ok: true, date: fromOA(r.value) };\n } catch {\n return { ok: false, error: FormulaValue.errorValue };\n }\n}\n\nfunction now(): FormulaValue { return FormulaValue.number(toOA(new Date())); }\nfunction today(): FormulaValue { const d = new Date(); return FormulaValue.number(toOA(new Date(d.getFullYear(), d.getMonth(), d.getDate()))); }\n\nfunction date_(a: Args, c: Ctx): FormulaValue {\n const y = FormulaHelper.evalDouble(a[0]!, c); if (!y.ok) return y.error;\n const m = FormulaHelper.evalDouble(a[1]!, c); if (!m.ok) return m.error;\n const d = FormulaHelper.evalDouble(a[2]!, c); if (!d.ok) return d.error;\n try { return FormulaValue.number(toOA(new Date(Math.round(y.value), Math.round(m.value) - 1, Math.round(d.value)))); }\n catch { return FormulaValue.errorValue; }\n}\n\nfunction year(a: Args, c: Ctx): FormulaValue {\n const r = evalDate(a, c, 0); return r.ok ? FormulaValue.number(r.date.getFullYear()) : r.error;\n}\nfunction month(a: Args, c: Ctx): FormulaValue {\n const r = evalDate(a, c, 0); return r.ok ? FormulaValue.number(r.date.getMonth() + 1) : r.error;\n}\nfunction day(a: Args, c: Ctx): FormulaValue {\n const r = evalDate(a, c, 0); return r.ok ? FormulaValue.number(r.date.getDate()) : r.error;\n}\nfunction hour(a: Args, c: Ctx): FormulaValue {\n const r = evalDate(a, c, 0); return r.ok ? FormulaValue.number(r.date.getHours()) : r.error;\n}\nfunction minute(a: Args, c: Ctx): FormulaValue {\n const r = evalDate(a, c, 0); return r.ok ? FormulaValue.number(r.date.getMinutes()) : r.error;\n}\nfunction second(a: Args, c: Ctx): FormulaValue {\n const r = evalDate(a, c, 0); return r.ok ? FormulaValue.number(r.date.getSeconds()) : r.error;\n}\n\nfunction dateValue(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalString(a[0]!, c); if (!r.ok) return r.error;\n const d = new Date(r.value);\n if (isNaN(d.getTime())) return FormulaValue.errorValue;\n return FormulaValue.number(toOA(d));\n}\n\nfunction days(a: Args, c: Ctx): FormulaValue {\n const d1 = evalDate(a, c, 0); if (!d1.ok) return d1.error;\n const d2 = evalDate(a, c, 1); if (!d2.ok) return d2.error;\n return FormulaValue.number(Math.round((d1.date.getTime() - d2.date.getTime()) / MS_PER_DAY));\n}\n\nfunction edate(a: Args, c: Ctx): FormulaValue {\n const d = evalDate(a, c, 0); if (!d.ok) return d.error;\n const m = FormulaHelper.evalDouble(a[1]!, c); if (!m.ok) return m.error;\n const result = new Date(d.date.getFullYear(), d.date.getMonth() + Math.round(m.value), d.date.getDate());\n return isNaN(result.getTime()) ? FormulaValue.errorNum : FormulaValue.number(toOA(result));\n}\n\nfunction eomonth(a: Args, c: Ctx): FormulaValue {\n const d = evalDate(a, c, 0); if (!d.ok) return d.error;\n const m = FormulaHelper.evalDouble(a[1]!, c); if (!m.ok) return m.error;\n const target = new Date(d.date.getFullYear(), d.date.getMonth() + Math.round(m.value) + 1, 0);\n return isNaN(target.getTime()) ? FormulaValue.errorNum : FormulaValue.number(toOA(target));\n}\n\nfunction weekday(a: Args, c: Ctx): FormulaValue {\n const d = evalDate(a, c, 0); if (!d.ok) return d.error;\n let type = 1;\n if (a.length > 1) { const r = FormulaHelper.evalDouble(a[1]!, c); if (!r.ok) return r.error; type = Math.round(r.value); }\n const dow = d.date.getDay(); // 0 = Sunday\n switch (type) {\n case 1: return FormulaValue.number(dow === 0 ? 1 : dow + 1); // Sun=1\n case 2: return FormulaValue.number(dow === 0 ? 7 : dow); // Mon=1\n case 3: return FormulaValue.number(dow === 0 ? 6 : dow - 1); // Mon=0\n default: return FormulaValue.errorNum;\n }\n}\n\nfunction weeknum(a: Args, c: Ctx): FormulaValue {\n const d = evalDate(a, c, 0); if (!d.ok) return d.error;\n const jan1 = new Date(d.date.getFullYear(), 0, 1);\n const days_ = Math.floor((d.date.getTime() - jan1.getTime()) / MS_PER_DAY);\n return FormulaValue.number(Math.ceil((days_ + jan1.getDay() + 1) / 7));\n}\n\nfunction networkdays(a: Args, c: Ctx): FormulaValue {\n const start = evalDate(a, c, 0); if (!start.ok) return start.error;\n const end = evalDate(a, c, 1); if (!end.ok) return end.error;\n\n const holidays = new Set<number>();\n if (a.length > 2) {\n const hv = a[2]!.evaluate(c);\n if (hv.isError) return hv;\n const items = hv.isArray ? [...hv.arrayVal.values()] : [hv];\n for (const item of items) {\n if (item.isBlank) continue;\n const r = item.tryAsDouble();\n if (!r.ok) return FormulaValue.errorValue;\n holidays.add(Math.floor(r.value));\n }\n }\n\n const dir = start.date <= end.date ? 1 : -1;\n let count = 0;\n const cur = new Date(start.date);\n\n while (dir > 0 ? cur <= end.date : cur >= end.date) {\n const dow = cur.getDay();\n const oa = Math.floor(toOA(cur));\n if (dow !== 0 && dow !== 6 && !holidays.has(oa)) count++;\n cur.setDate(cur.getDate() + dir);\n }\n\n return FormulaValue.number(count * dir);\n}\n\nfunction datedif(a: Args, c: Ctx): FormulaValue {\n const start = evalDate(a, c, 0); if (!start.ok) return start.error;\n const end = evalDate(a, c, 1); if (!end.ok) return end.error;\n const unit = FormulaHelper.evalString(a[2]!, c); if (!unit.ok) return unit.error;\n\n const s = start.date, e = end.date;\n if (s > e) return FormulaValue.errorNum;\n\n switch (unit.value.toUpperCase()) {\n case 'Y':\n return FormulaValue.number(e.getFullYear() - s.getFullYear() -\n (e.getMonth() < s.getMonth() || (e.getMonth() === s.getMonth() && e.getDate() < s.getDate()) ? 1 : 0));\n case 'M':\n return FormulaValue.number((e.getFullYear() - s.getFullYear()) * 12 + e.getMonth() - s.getMonth() -\n (e.getDate() < s.getDate() ? 1 : 0));\n case 'D':\n return FormulaValue.number(Math.round((e.getTime() - s.getTime()) / MS_PER_DAY));\n case 'MD':\n return FormulaValue.number(e.getDate() >= s.getDate()\n ? e.getDate() - s.getDate()\n : new Date(s.getFullYear(), s.getMonth() + 1, 0).getDate() - s.getDate() + e.getDate());\n case 'YM':\n return FormulaValue.number((e.getMonth() - s.getMonth() + 12) % 12 - (e.getDate() < s.getDate() ? 1 : 0));\n case 'YD': {\n const sameYearEnd = new Date(e.getFullYear(), s.getMonth(), s.getDate());\n return FormulaValue.number(Math.round((e.getTime() - sameYearEnd.getTime()) / MS_PER_DAY));\n }\n default: return FormulaValue.errorNum;\n }\n}\n","/**\n * Lookup and reference Excel functions.\n * Port of TVE.PureDocs.Excel.Formulas.LookupFunctions (C#)\n */\nimport { parseCellRef, cellRefFromRowCol } from '@devmm/puredocs-excel';\nimport { FormulaValue, ArrayValue } from '../formula-value.js';\nimport { FormulaHelper, type FunctionRegistry } from '../function-registry.js';\nimport { CellReferenceNode, RangeReferenceNode } from '../formula-node.js';\nimport type { FormulaNode } from '../formula-node.js';\nimport type { FormulaContext } from '../formula-context.js';\n\ntype Args = FormulaNode[];\ntype Ctx = FormulaContext;\n\nexport function registerLookup(r: FunctionRegistry): void {\n r.register('VLOOKUP', vlookup, 3, 4);\n r.register('HLOOKUP', hlookup, 3, 4);\n r.register('INDEX', index_, 2, 3);\n r.register('MATCH', match, 2, 3);\n r.register('CHOOSE', choose, 2);\n r.register('ROW', row, 0, 1);\n r.register('COLUMN', column, 0, 1);\n r.register('ROWS', rows, 1, 1);\n r.register('COLUMNS', columns, 1, 1);\n r.register('OFFSET', offset, 3, 5, true);\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction num(a: Args, c: Ctx, i: number): { ok: true; n: number } | { ok: false; e: FormulaValue } {\n const r = FormulaHelper.evalDouble(a[i]!, c);\n return r.ok ? { ok: true, n: r.value } : { ok: false, e: r.error };\n}\n\n// ── Implementations ──────────────────────────────────────────────────────────\n\nfunction vlookup(a: Args, c: Ctx): FormulaValue {\n const lookupVal = a[0]!.evaluate(c); if (lookupVal.isError) return lookupVal;\n const tableVal = a[1]!.evaluate(c); if (tableVal.isError) return tableVal;\n if (!tableVal.isArray) return FormulaValue.errorRef;\n const ci = num(a, c, 2); if (!ci.ok) return ci.e;\n const colIdx = Math.round(ci.n) - 1;\n\n let exactMatch = true;\n if (a.length > 3) {\n const mv = a[3]!.evaluate(c);\n if (mv.isError) return mv;\n exactMatch = !mv.coerceToBool().booleanValue;\n }\n\n const tbl = tableVal.arrayVal;\n if (colIdx < 0 || colIdx >= tbl.columns) return FormulaValue.errorRef;\n\n if (exactMatch) {\n for (let r = 0; r < tbl.rows; r++) {\n if (FormulaValue.areEqual(tbl.get(r, 0), lookupVal)) return tbl.get(r, colIdx);\n }\n return FormulaValue.errorNA;\n }\n\n // Approximate match — first column must be sorted ascending\n let best = -1;\n for (let r = 0; r < tbl.rows; r++) {\n if (FormulaValue.compare(tbl.get(r, 0), lookupVal) <= 0) best = r; else break;\n }\n return best >= 0 ? tbl.get(best, colIdx) : FormulaValue.errorNA;\n}\n\nfunction hlookup(a: Args, c: Ctx): FormulaValue {\n const lookupVal = a[0]!.evaluate(c); if (lookupVal.isError) return lookupVal;\n const tableVal = a[1]!.evaluate(c); if (tableVal.isError) return tableVal;\n if (!tableVal.isArray) return FormulaValue.errorRef;\n const ri = num(a, c, 2); if (!ri.ok) return ri.e;\n const rowIdx = Math.round(ri.n) - 1;\n\n let exactMatch = true;\n if (a.length > 3) {\n const mv = a[3]!.evaluate(c);\n if (mv.isError) return mv;\n exactMatch = !mv.coerceToBool().booleanValue;\n }\n\n const tbl = tableVal.arrayVal;\n if (rowIdx < 0 || rowIdx >= tbl.rows) return FormulaValue.errorRef;\n\n if (exactMatch) {\n for (let col = 0; col < tbl.columns; col++) {\n if (FormulaValue.areEqual(tbl.get(0, col), lookupVal)) return tbl.get(rowIdx, col);\n }\n return FormulaValue.errorNA;\n }\n\n let best = -1;\n for (let col = 0; col < tbl.columns; col++) {\n if (FormulaValue.compare(tbl.get(0, col), lookupVal) <= 0) best = col; else break;\n }\n return best >= 0 ? tbl.get(rowIdx, best) : FormulaValue.errorNA;\n}\n\nfunction index_(a: Args, c: Ctx): FormulaValue {\n const arrVal = a[0]!.evaluate(c); if (arrVal.isError) return arrVal;\n const rv = num(a, c, 1); if (!rv.ok) return rv.e;\n const rowIdx = Math.round(rv.n) - 1;\n let colIdx = 0;\n if (a.length > 2) { const cv = num(a, c, 2); if (!cv.ok) return cv.e; colIdx = Math.round(cv.n) - 1; }\n\n if (!arrVal.isArray) return rowIdx === 0 && colIdx === 0 ? arrVal : FormulaValue.errorRef;\n\n const arr = arrVal.arrayVal;\n if (rowIdx < 0 || rowIdx >= arr.rows || colIdx < 0 || colIdx >= arr.columns) {\n return FormulaValue.errorRef;\n }\n return arr.get(rowIdx, colIdx);\n}\n\nfunction match(a: Args, c: Ctx): FormulaValue {\n const lookupVal = a[0]!.evaluate(c); if (lookupVal.isError) return lookupVal;\n const arrVal = a[1]!.evaluate(c); if (arrVal.isError) return arrVal;\n let matchType = 1;\n if (a.length > 2) { const r = num(a, c, 2); if (!r.ok) return r.e; matchType = Math.round(r.n); }\n\n if (!arrVal.isArray) {\n return FormulaValue.areEqual(arrVal, lookupVal) ? FormulaValue.one : FormulaValue.errorNA;\n }\n\n const arr = arrVal.arrayVal;\n const len = arr.length;\n\n if (matchType === 0) {\n for (let i = 0; i < len; i++) {\n if (FormulaValue.areEqual(arr.getFlat(i), lookupVal)) return FormulaValue.number(i + 1);\n }\n return FormulaValue.errorNA;\n }\n\n if (matchType === 1) {\n let best = -1;\n for (let i = 0; i < len; i++) {\n if (FormulaValue.compare(arr.getFlat(i), lookupVal) <= 0) best = i; else break;\n }\n return best >= 0 ? FormulaValue.number(best + 1) : FormulaValue.errorNA;\n }\n\n // matchType === -1\n let best = -1;\n for (let i = 0; i < len; i++) {\n if (FormulaValue.compare(arr.getFlat(i), lookupVal) >= 0) best = i; else break;\n }\n return best >= 0 ? FormulaValue.number(best + 1) : FormulaValue.errorNA;\n}\n\nfunction choose(a: Args, c: Ctx): FormulaValue {\n const iv = num(a, c, 0); if (!iv.ok) return iv.e;\n const idx = Math.round(iv.n);\n if (idx < 1 || idx >= a.length) return FormulaValue.errorValue;\n return a[idx]!.evaluate(c);\n}\n\nfunction row(a: Args, c: Ctx): FormulaValue {\n if (a.length === 0) return FormulaValue.number(c.formulaRow || 1);\n const node = a[0]!;\n if (node instanceof CellReferenceNode) {\n return FormulaValue.number(parseCellRef(node.reference).row);\n }\n if (node instanceof RangeReferenceNode) {\n return FormulaValue.number(parseCellRef(node.startRef).row);\n }\n return FormulaValue.errorValue;\n}\n\nfunction column(a: Args, c: Ctx): FormulaValue {\n if (a.length === 0) return FormulaValue.number(c.formulaCol || 1);\n const node = a[0]!;\n if (node instanceof CellReferenceNode) {\n return FormulaValue.number(parseCellRef(node.reference).column);\n }\n if (node instanceof RangeReferenceNode) {\n return FormulaValue.number(parseCellRef(node.startRef).column);\n }\n return FormulaValue.errorValue;\n}\n\nfunction rows(a: Args, c: Ctx): FormulaValue {\n if (a[0] instanceof RangeReferenceNode) {\n const b = c.getRangeBounds(a[0].startRef, a[0].endRef);\n return FormulaValue.number(b.endRow - b.startRow + 1);\n }\n const v = a[0]!.evaluate(c);\n return v.isArray ? FormulaValue.number(v.arrayVal.rows) : FormulaValue.one;\n}\n\nfunction columns(a: Args, c: Ctx): FormulaValue {\n if (a[0] instanceof RangeReferenceNode) {\n const b = c.getRangeBounds(a[0].startRef, a[0].endRef);\n return FormulaValue.number(b.endCol - b.startCol + 1);\n }\n const v = a[0]!.evaluate(c);\n return v.isArray ? FormulaValue.number(v.arrayVal.columns) : FormulaValue.one;\n}\n\nfunction offset(a: Args, c: Ctx): FormulaValue {\n const baseNode = a[0]!;\n let baseRef: string;\n if (baseNode instanceof CellReferenceNode) baseRef = baseNode.reference;\n else if (baseNode instanceof RangeReferenceNode) baseRef = baseNode.startRef;\n else return FormulaValue.errorValue;\n\n const base = parseCellRef(baseRef);\n\n const ro = FormulaHelper.evalDouble(a[1]!, c); if (!ro.ok) return ro.error;\n const co = FormulaHelper.evalDouble(a[2]!, c); if (!co.ok) return co.error;\n\n const newRow = base.row + Math.round(ro.value);\n const newCol = base.column + Math.round(co.value);\n if (newRow < 1 || newCol < 1) return FormulaValue.errorRef;\n\n let height = 1, width = 1;\n if (a.length > 3) { const h = FormulaHelper.evalDouble(a[3]!, c); if (!h.ok) return h.error; height = Math.round(h.value); }\n if (a.length > 4) { const w = FormulaHelper.evalDouble(a[4]!, c); if (!w.ok) return w.error; width = Math.round(w.value); }\n\n if (height === 1 && width === 1) return c.getCellValue(cellRefFromRowCol(newRow, newCol));\n\n return c.getRangeValues(\n cellRefFromRowCol(newRow, newCol),\n cellRefFromRowCol(newRow + height - 1, newCol + width - 1),\n );\n}\n","/**\n * Statistical Excel functions.\n * Port of TVE.PureDocs.Excel.Formulas.StatisticalFunctions (C#)\n */\nimport { FormulaValue } from '../formula-value.js';\nimport { FormulaHelper, type FunctionRegistry } from '../function-registry.js';\nimport type { FormulaNode } from '../formula-node.js';\nimport type { FormulaContext } from '../formula-context.js';\n\ntype Args = FormulaNode[];\ntype Ctx = FormulaContext;\n\nexport function registerStatistical(r: FunctionRegistry): void {\n r.register('MEDIAN', median, 1);\n r.register('MODE', mode, 1);\n r.register('MODE.SNGL', mode, 1);\n r.register('STDEV', stdev, 1);\n r.register('STDEV.S', stdev, 1);\n r.register('STDEVP', stdevp, 1);\n r.register('STDEV.P', stdevp, 1);\n r.register('VAR', var_, 1);\n r.register('VAR.S', var_, 1);\n r.register('VARP', varp, 1);\n r.register('VAR.P', varp, 1);\n r.register('LARGE', large, 2, 2);\n r.register('SMALL', small, 2, 2);\n r.register('RANK', rank, 2, 3);\n r.register('RANK.EQ', rank, 2, 3);\n r.register('PERCENTILE', percentile, 2, 2);\n r.register('PERCENTILE.INC', percentile, 2, 2);\n r.register('MAXIFS', maxIfs, 3);\n r.register('MINIFS', minIfs, 3);\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction variance(nums: number[], population: boolean): number {\n const mean = nums.reduce((s, n) => s + n, 0) / nums.length;\n const sumSq = nums.reduce((s, n) => s + (n - mean) ** 2, 0);\n return sumSq / (population ? nums.length : nums.length - 1);\n}\n\nfunction numsFromArray(v: FormulaValue): number[] {\n if (v.isArray) {\n return [...v.arrayVal.values()]\n .filter(i => i.isNumber)\n .map(i => i.numberValue);\n }\n return v.isNumber ? [v.numberValue] : [];\n}\n\nfunction num(a: Args, c: Ctx, i: number): { ok: true; n: number } | { ok: false; e: FormulaValue } {\n const r = FormulaHelper.evalDouble(a[i]!, c);\n return r.ok ? { ok: true, n: r.value } : { ok: false, e: r.error };\n}\n\n// ── Implementations ──────────────────────────────────────────────────────────\n\nfunction median(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n if (r.values.length === 0) return FormulaValue.errorNum;\n const sorted = [...r.values].sort((a, b) => a - b);\n const mid = sorted.length >> 1;\n return FormulaValue.number(\n sorted.length % 2 === 0 ? (sorted[mid - 1]! + sorted[mid]!) / 2 : sorted[mid]!,\n );\n}\n\nfunction mode(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n if (r.values.length === 0) return FormulaValue.errorNA;\n const freq = new Map<number, number>();\n let maxCnt = 0;\n for (const n of r.values) {\n const cnt = (freq.get(n) ?? 0) + 1;\n freq.set(n, cnt);\n if (cnt > maxCnt) maxCnt = cnt;\n }\n if (maxCnt === 1) return FormulaValue.errorNA;\n for (const n of r.values) {\n if ((freq.get(n) ?? 0) === maxCnt) return FormulaValue.number(n);\n }\n return FormulaValue.errorNA;\n}\n\nfunction stdev(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n if (r.values.length < 2) return FormulaValue.errorDiv0;\n return FormulaValue.number(Math.sqrt(variance(r.values, false)));\n}\n\nfunction stdevp(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n if (r.values.length === 0) return FormulaValue.errorDiv0;\n return FormulaValue.number(Math.sqrt(variance(r.values, true)));\n}\n\nfunction var_(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n if (r.values.length < 2) return FormulaValue.errorDiv0;\n return FormulaValue.number(variance(r.values, false));\n}\n\nfunction varp(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.collectNumbers(a, c);\n if (!r.ok) return r.error;\n if (r.values.length === 0) return FormulaValue.errorDiv0;\n return FormulaValue.number(variance(r.values, true));\n}\n\nfunction large(a: Args, c: Ctx): FormulaValue {\n const arrV = a[0]!.evaluate(c); if (arrV.isError) return arrV;\n const kv = num(a, c, 1); if (!kv.ok) return kv.e;\n const nums = numsFromArray(arrV).sort((a, b) => b - a);\n const k = Math.round(kv.n);\n if (k < 1 || k > nums.length) return FormulaValue.errorNum;\n return FormulaValue.number(nums[k - 1]!);\n}\n\nfunction small(a: Args, c: Ctx): FormulaValue {\n const arrV = a[0]!.evaluate(c); if (arrV.isError) return arrV;\n const kv = num(a, c, 1); if (!kv.ok) return kv.e;\n const nums = numsFromArray(arrV).sort((a, b) => a - b);\n const k = Math.round(kv.n);\n if (k < 1 || k > nums.length) return FormulaValue.errorNum;\n return FormulaValue.number(nums[k - 1]!);\n}\n\nfunction rank(a: Args, c: Ctx): FormulaValue {\n const nv = FormulaHelper.evalDouble(a[0]!, c); if (!nv.ok) return nv.error;\n const arrV = a[1]!.evaluate(c); if (arrV.isError) return arrV;\n let order = 0;\n if (a.length > 2) { const ov = num(a, c, 2); if (!ov.ok) return ov.e; order = Math.round(ov.n); }\n const nums = numsFromArray(arrV).sort((a, b) => order === 0 ? b - a : a - b);\n const idx = nums.indexOf(nv.value);\n return idx < 0 ? FormulaValue.errorNA : FormulaValue.number(idx + 1);\n}\n\nfunction percentile(a: Args, c: Ctx): FormulaValue {\n const arrV = a[0]!.evaluate(c); if (arrV.isError) return arrV;\n const kv = FormulaHelper.evalDouble(a[1]!, c); if (!kv.ok) return kv.error;\n if (kv.value < 0 || kv.value > 1) return FormulaValue.errorNum;\n const nums = numsFromArray(arrV).sort((a, b) => a - b);\n if (nums.length === 0) return FormulaValue.errorNum;\n const n = (nums.length - 1) * kv.value;\n const lo = Math.floor(n), hi = Math.ceil(n);\n if (lo === hi) return FormulaValue.number(nums[lo]!);\n return FormulaValue.number(nums[lo]! + (nums[hi]! - nums[lo]!) * (n - lo));\n}\n\nfunction maxIfs(a: Args, c: Ctx): FormulaValue {\n return ifsAggregate(a, c, 'max');\n}\n\nfunction minIfs(a: Args, c: Ctx): FormulaValue {\n return ifsAggregate(a, c, 'min');\n}\n\nfunction ifsAggregate(a: Args, c: Ctx, mode: 'max' | 'min'): FormulaValue {\n if (a.length < 3 || (a.length - 1) % 2 !== 0) return FormulaValue.errorValue;\n const mainRange = a[0]!.evaluate(c); if (mainRange.isError) return mainRange;\n if (!mainRange.isArray) return FormulaValue.errorValue;\n\n const arr = mainRange.arrayVal;\n const len = arr.length;\n const mask = new Uint8Array(len).fill(1);\n\n for (let p = 1; p + 1 < a.length; p += 2) {\n const cr = a[p]!.evaluate(c); if (cr.isError) return cr;\n const criteria = a[p + 1]!.evaluate(c).asText();\n const crArr = cr.isArray ? cr.arrayVal : null;\n for (let i = 0; i < len; i++) {\n if (!mask[i]) continue;\n const cv = crArr ? crArr.getFlat(i) : cr;\n if (!FormulaHelper.matchesCriteria(cv, criteria)) mask[i] = 0;\n }\n }\n\n let result = mode === 'max' ? -Infinity : Infinity;\n let found = false;\n for (let i = 0; i < len; i++) {\n if (!mask[i]) continue;\n const r = arr.getFlat(i).tryAsDouble();\n if (!r.ok) continue;\n if (mode === 'max' ? r.value > result : r.value < result) { result = r.value; found = true; }\n }\n return found ? FormulaValue.number(result) : FormulaValue.zero;\n}\n","/**\n * Information Excel functions (IS*, TYPE, N, ERROR.TYPE, etc.).\n * Port of TVE.PureDocs.Excel.Formulas.InfoFunctions (C#)\n */\nimport { FormulaValue, FormulaError } from '../formula-value.js';\nimport { FormulaHelper, type FunctionRegistry } from '../function-registry.js';\nimport type { FormulaNode } from '../formula-node.js';\nimport type { FormulaContext } from '../formula-context.js';\n\ntype Args = FormulaNode[];\ntype Ctx = FormulaContext;\n\nexport function registerInfo(r: FunctionRegistry): void {\n r.register('ISBLANK', isBlank, 1, 1);\n r.register('ISNUMBER', isNumber, 1, 1);\n r.register('ISTEXT', isText, 1, 1);\n r.register('ISERROR', isError, 1, 1);\n r.register('ISERR', isErr, 1, 1);\n r.register('ISLOGICAL', isLogical, 1, 1);\n r.register('ISNA', isNa, 1, 1);\n r.register('ISNONTEXT', isNonText, 1, 1);\n r.register('NA', na, 0, 0);\n r.register('TYPE', type_, 1, 1);\n r.register('N', n_, 1, 1);\n r.register('ISODD', isOdd, 1, 1);\n r.register('ISEVEN', isEven, 1, 1);\n r.register('ERROR.TYPE', errorType, 1, 1);\n}\n\nfunction isBlank(a: Args, c: Ctx): FormulaValue { return FormulaValue.boolean(a[0]!.evaluate(c).isBlank); }\nfunction isNumber(a: Args, c: Ctx): FormulaValue { return FormulaValue.boolean(a[0]!.evaluate(c).isNumber); }\nfunction isText(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n return FormulaValue.boolean(v.isText && v.textValue.length > 0);\n}\nfunction isError(a: Args, c: Ctx): FormulaValue { return FormulaValue.boolean(a[0]!.evaluate(c).isError); }\nfunction isErr(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n return FormulaValue.boolean(v.isError && v.errorCode !== FormulaError.NA);\n}\nfunction isLogical(a: Args, c: Ctx): FormulaValue { return FormulaValue.boolean(a[0]!.evaluate(c).isBoolean); }\nfunction isNa(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n return FormulaValue.boolean(v.isError && v.errorCode === FormulaError.NA);\n}\nfunction isNonText(a: Args, c: Ctx): FormulaValue { return FormulaValue.boolean(!a[0]!.evaluate(c).isText); }\nfunction na(): FormulaValue { return FormulaValue.errorNA; }\n\nfunction type_(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n const t = v.isNumber || v.isBlank ? 1\n : v.isText ? 2\n : v.isBoolean ? 4\n : v.isError ? 16\n : v.isArray ? 64 : 1;\n return FormulaValue.number(t);\n}\n\nfunction n_(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n if (v.isNumber) return v;\n if (v.isBoolean) return FormulaValue.number(v.booleanValue ? 1 : 0);\n return FormulaValue.zero;\n}\n\nfunction isOdd(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c); if (!r.ok) return r.error;\n return FormulaValue.boolean(Math.abs(Math.trunc(r.value)) % 2 === 1);\n}\n\nfunction isEven(a: Args, c: Ctx): FormulaValue {\n const r = FormulaHelper.evalDouble(a[0]!, c); if (!r.ok) return r.error;\n return FormulaValue.boolean(Math.trunc(r.value) % 2 === 0);\n}\n\nfunction errorType(a: Args, c: Ctx): FormulaValue {\n const v = a[0]!.evaluate(c);\n if (!v.isError) return FormulaValue.errorNA;\n const map: Partial<Record<FormulaError, number>> = {\n [FormulaError.Null]: 1,\n [FormulaError.Div0]: 2,\n [FormulaError.Value]: 3,\n [FormulaError.Ref]: 4,\n [FormulaError.Name]: 5,\n [FormulaError.Num]: 6,\n [FormulaError.NA]: 7,\n };\n return FormulaValue.number(map[v.errorCode] ?? 7);\n}\n","/**\n * Central registry of all supported Excel functions.\n * Port of TVE.PureDocs.Excel.Formulas.FunctionRegistry (C#)\n */\nimport { FormulaValue } from './formula-value.js';\nimport type { FormulaNode } from './formula-node.js';\nimport type { FormulaContext } from './formula-context.js';\nimport { registerMath } from './functions/math-functions.js';\nimport { registerText } from './functions/text-functions.js';\nimport { registerLogical } from './functions/logical-functions.js';\nimport { registerDate } from './functions/date-functions.js';\nimport { registerLookup } from './functions/lookup-functions.js';\nimport { registerStatistical } from './functions/statistical-functions.js';\nimport { registerInfo } from './functions/info-functions.js';\n\nexport type FormulaFunction = (args: FormulaNode[], ctx: FormulaContext) => FormulaValue;\n\nexport interface FunctionDef {\n readonly name: string;\n readonly minArgs: number;\n readonly maxArgs: number; // -1 = unlimited\n readonly isVolatile: boolean;\n readonly handler: FormulaFunction;\n}\n\nexport class FunctionRegistry {\n static #default: FunctionRegistry | undefined;\n\n /** Lazily-created default registry with all built-in functions registered. */\n static get default(): FunctionRegistry {\n if (!FunctionRegistry.#default) {\n FunctionRegistry.#default = new FunctionRegistry();\n FunctionRegistry.#default.#registerBuiltIns();\n }\n return FunctionRegistry.#default;\n }\n\n readonly #functions = new Map<string, FunctionDef>();\n\n /** Registers a function. Name is normalised to UPPERCASE. */\n register(\n name: string,\n handler: FormulaFunction,\n minArgs = 0,\n maxArgs = -1,\n isVolatile = false,\n ): void {\n this.#functions.set(name.toUpperCase(), {\n name: name.toUpperCase(), minArgs, maxArgs, isVolatile, handler,\n });\n }\n\n /** Executes a function by name with argument validation. */\n execute(name: string, args: FormulaNode[], ctx: FormulaContext): FormulaValue {\n const def = this.#functions.get(name.toUpperCase());\n if (!def) return FormulaValue.errorName;\n\n if (args.length < def.minArgs) return FormulaValue.errorValue;\n if (def.maxArgs >= 0 && args.length > def.maxArgs) return FormulaValue.errorValue;\n\n try {\n return def.handler(args, ctx);\n } catch {\n return FormulaValue.errorValue;\n }\n }\n\n /** Returns true if the named function is volatile (NOW, RAND, etc.). */\n isVolatile(name: string): boolean {\n return this.#functions.get(name.toUpperCase())?.isVolatile ?? false;\n }\n\n /** Returns true if the function is registered. */\n has(name: string): boolean {\n return this.#functions.has(name.toUpperCase());\n }\n\n #registerBuiltIns(): void {\n // Static imports keep registration synchronous and deterministic.\n // The circular import (registry ↔ function modules) is safe because the\n // register* bindings are only invoked here at call time, never during\n // module evaluation.\n registerMath(this);\n registerText(this);\n registerLogical(this);\n registerDate(this);\n registerLookup(this);\n registerStatistical(this);\n registerInfo(this);\n }\n}\n\n// ── FormulaHelper — shared utilities used by function implementations ─────────\n\nexport namespace FormulaHelper {\n /** Evaluates a node and coerces to number, propagating errors. */\n export function evalDouble(\n node: FormulaNode,\n ctx: FormulaContext,\n ): { ok: true; value: number } | { ok: false; error: FormulaValue } {\n const v = node.evaluate(ctx);\n if (v.isError) return { ok: false, error: v };\n const r = v.tryAsDouble();\n if (!r.ok) return { ok: false, error: FormulaValue.errorValue };\n return { ok: true, value: r.value };\n }\n\n /** Evaluates a node and coerces to string, propagating errors. */\n export function evalString(\n node: FormulaNode,\n ctx: FormulaContext,\n ): { ok: true; value: string } | { ok: false; error: FormulaValue } {\n const v = node.evaluate(ctx);\n if (v.isError) return { ok: false, error: v };\n return { ok: true, value: v.asText() };\n }\n\n /**\n * Collects numbers from all args (expanding arrays, skipping blanks/text).\n * Returns false + error value if any arg is an error.\n */\n export function collectNumbers(\n args: FormulaNode[],\n ctx: FormulaContext,\n ): { ok: true; values: number[] } | { ok: false; error: FormulaValue } {\n const nums: number[] = [];\n for (const arg of args) {\n const v = arg.evaluate(ctx);\n if (v.isError) return { ok: false, error: v };\n if (v.isArray) {\n for (const item of v.arrayVal.values()) {\n if (item.isBlank || item.isText) continue;\n if (item.isError) return { ok: false, error: item };\n const r = item.tryAsDouble();\n if (r.ok) nums.push(r.value);\n }\n } else if (!v.isBlank && !v.isText) {\n const r = v.tryAsDouble();\n if (!r.ok) return { ok: false, error: FormulaValue.errorValue };\n nums.push(r.value);\n }\n }\n return { ok: true, values: nums };\n }\n\n /** Flattens all args into FormulaValue array (expanding arrays). */\n export function flattenArgs(\n args: FormulaNode[],\n ctx: FormulaContext,\n ): FormulaValue[] {\n const result: FormulaValue[] = [];\n for (const arg of args) {\n const v = arg.evaluate(ctx);\n if (v.isArray) {\n for (const item of v.arrayVal.values()) result.push(item);\n } else {\n result.push(v);\n }\n }\n return result;\n }\n\n /** Matches a criteria string (e.g. \">5\", \"=hello\", \"*partial*\") against a value. */\n export function matchesCriteria(value: FormulaValue, criteria: string): boolean {\n criteria = criteria.trim();\n\n // Comparison operator prefix\n const opMatch = /^(>=|<=|<>|>|<|=)(.*)$/.exec(criteria);\n if (opMatch) {\n const op = opMatch[1]!;\n const rhs = opMatch[2]!;\n const rhsVal = parseFloat(rhs);\n const rhsNum = isNaN(rhsVal) ? null : rhsVal;\n\n const cmp = rhsNum !== null\n ? FormulaValue.compare(value, FormulaValue.number(rhsNum))\n : FormulaValue.compare(value, FormulaValue.text(rhs));\n\n switch (op) {\n case '>': return cmp > 0;\n case '>=': return cmp >= 0;\n case '<': return cmp < 0;\n case '<=': return cmp <= 0;\n case '<>': return !FormulaValue.areEqual(value, rhsNum !== null ? FormulaValue.number(rhsNum) : FormulaValue.text(rhs));\n case '=': return FormulaValue.areEqual(value, rhsNum !== null ? FormulaValue.number(rhsNum) : FormulaValue.text(rhs));\n }\n }\n\n // Wildcard string matching\n if (criteria.includes('*') || criteria.includes('?')) {\n const pattern = wildcardToRegex(criteria);\n return pattern.test(value.asText());\n }\n\n // Exact match (case-insensitive for text)\n const num = parseFloat(criteria);\n if (!isNaN(num)) {\n return FormulaValue.areEqual(value, FormulaValue.number(num));\n }\n return value.asText().toUpperCase() === criteria.toUpperCase();\n }\n\n function wildcardToRegex(pattern: string): RegExp {\n const escaped = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.');\n return new RegExp(`^${escaped}$`, 'i');\n }\n}\n","/**\n * Evaluation context — resolves cell/range values, dispatches functions.\n * Port of TVE.PureDocs.Excel.Formulas.FormulaContext (C#)\n */\nimport { parseCellRef, cellRefFromRowCol } from '@devmm/puredocs-excel';\nimport { FormulaValue, ArrayValue } from './formula-value.js';\nimport { FunctionRegistry } from './function-registry.js';\nimport type { FormulaNode } from './formula-node.js';\n\n// Forward declaration to avoid circular import\nexport interface WorksheetLike {\n getCellValue(reference: string): unknown;\n name: string;\n}\n\nexport interface WorkbookLike {\n worksheets: readonly WorksheetLike[];\n getWorksheet(name: string): WorksheetLike;\n}\n\nexport class FormulaContext {\n readonly #sheet: WorksheetLike;\n readonly #functions: FunctionRegistry;\n readonly #evaluating: Set<string>;\n\n /** Row of the formula cell (for @ implicit intersection). */\n formulaRow: number;\n /** Column of the formula cell (for @ implicit intersection). */\n formulaCol: number;\n\n /** Optional workbook reference for cross-sheet references. */\n workbook?: WorkbookLike;\n\n constructor(\n sheet: WorksheetLike,\n formulaRow = 0,\n formulaCol = 0,\n evaluating?: Set<string>,\n registry?: FunctionRegistry,\n ) {\n this.#sheet = sheet;\n this.formulaRow = formulaRow;\n this.formulaCol = formulaCol;\n this.#evaluating = evaluating ?? new Set<string>();\n this.#functions = registry ?? FunctionRegistry.default;\n }\n\n get worksheet(): WorksheetLike { return this.#sheet; }\n\n // ── Cell/Range resolution ─────────────────────────────────────────────────\n\n getCellValue(cellReference: string): FormulaValue {\n const norm = cellReference.replace(/\\$/g, '').toUpperCase();\n\n // Circular reference detection\n if (this.#evaluating.has(norm)) return FormulaValue.errorRef;\n this.#evaluating.add(norm);\n\n try {\n const raw = this.#sheet.getCellValue(cellReference);\n return FormulaValue.fromObjectSync(raw);\n } finally {\n this.#evaluating.delete(norm);\n }\n }\n\n getRangeValues(startRef: string, endRef: string): FormulaValue {\n const s = parseCellRef(startRef);\n const e = parseCellRef(endRef);\n const rows = e.row - s.row + 1;\n const cols = e.column - s.column + 1;\n const arr = new ArrayValue(rows, cols);\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n const ref = cellRefFromRowCol(s.row + r, s.column + c);\n arr.set(r, c, this.getCellValue(ref));\n }\n }\n return FormulaValue.array(arr);\n }\n\n getSheetCellValue(sheetName: string, cellReference: string): FormulaValue {\n if (!this.workbook) return FormulaValue.errorRef;\n try {\n const sheet = this.workbook.getWorksheet(sheetName);\n const ctx = new FormulaContext(sheet, this.formulaRow, this.formulaCol, this.#evaluating, this.#functions);\n ctx.workbook = this.workbook;\n return ctx.getCellValue(cellReference);\n } catch {\n return FormulaValue.errorRef;\n }\n }\n\n getSheetRangeValues(sheetName: string, startRef: string, endRef: string): FormulaValue {\n if (!this.workbook) return FormulaValue.errorRef;\n try {\n const sheet = this.workbook.getWorksheet(sheetName);\n const ctx = new FormulaContext(sheet, this.formulaRow, this.formulaCol, this.#evaluating, this.#functions);\n ctx.workbook = this.workbook;\n return ctx.getRangeValues(startRef, endRef);\n } catch {\n return FormulaValue.errorRef;\n }\n }\n\n resolveNamedRange(_name: string): FormulaValue {\n // Named range support requires workbook-level management\n // TODO: implement NamedRangeManager\n return FormulaValue.errorName;\n }\n\n getRangeBounds(startRef: string, endRef: string): { startRow: number; startCol: number; endRow: number; endCol: number } {\n const s = parseCellRef(startRef);\n const e = parseCellRef(endRef);\n return { startRow: s.row, startCol: s.column, endRow: e.row, endCol: e.column };\n }\n\n // ── Function dispatch ─────────────────────────────────────────────────────\n\n evaluateFunction(name: string, args: FormulaNode[]): FormulaValue {\n return this.#functions.execute(name, args, this);\n }\n}\n","/**\n * Least-Recently-Used cache using JavaScript Map insertion-order semantics.\n * Port of TVE.PureDocs.Excel.Formulas.LruCache<TKey, TValue> (C#)\n *\n * JS Map maintains insertion order, so LRU eviction is simply:\n * delete oldest key = map.keys().next().value\n * move to end = delete + re-insert\n *\n * This is simpler and faster than the C# LinkedList + Dictionary approach.\n */\nexport class LruCache<K, V> {\n readonly #map: Map<K, V>;\n #capacity: number;\n\n #hits = 0;\n #misses = 0;\n #evictions = 0;\n\n constructor(capacity: number) {\n if (capacity <= 0) throw new RangeError('LruCache capacity must be > 0.');\n this.#capacity = capacity;\n this.#map = new Map();\n }\n\n get capacity(): number { return this.#capacity; }\n get size(): number { return this.#map.size; }\n get hits(): number { return this.#hits; }\n get misses(): number { return this.#misses; }\n get evictions():number { return this.#evictions; }\n get hitRate(): number {\n const total = this.#hits + this.#misses;\n return total === 0 ? 0 : this.#hits / total;\n }\n\n /**\n * Returns the value for key, or undefined if not present.\n * Moves the accessed key to the \"most recently used\" end.\n */\n get(key: K): V | undefined {\n const value = this.#map.get(key);\n if (value === undefined) {\n this.#misses++;\n return undefined;\n }\n // Move to end (most recently used)\n this.#map.delete(key);\n this.#map.set(key, value);\n this.#hits++;\n return value;\n }\n\n /**\n * Inserts or updates a key-value pair.\n * Evicts the least-recently-used entry if over capacity.\n */\n set(key: K, value: V): void {\n if (this.#map.has(key)) {\n // Update: remove and re-insert to move to end\n this.#map.delete(key);\n } else if (this.#map.size >= this.#capacity) {\n // Evict oldest (first key in Map)\n const oldest = this.#map.keys().next().value as K;\n this.#map.delete(oldest);\n this.#evictions++;\n }\n this.#map.set(key, value);\n }\n\n /** Removes a key from the cache. Returns true if it existed. */\n delete(key: K): boolean {\n return this.#map.delete(key);\n }\n\n /** Returns true if the key is present (does NOT update LRU order). */\n has(key: K): boolean {\n return this.#map.has(key);\n }\n\n /** Removes all entries and resets statistics. */\n clear(): void {\n this.#map.clear();\n this.#hits = this.#misses = this.#evictions = 0;\n }\n\n /** Resizes the cache, evicting oldest entries if necessary. */\n resize(newCapacity: number): void {\n if (newCapacity <= 0) throw new RangeError('Capacity must be > 0.');\n this.#capacity = newCapacity;\n while (this.#map.size > newCapacity) {\n const oldest = this.#map.keys().next().value as K;\n this.#map.delete(oldest);\n this.#evictions++;\n }\n }\n}\n","/**\n * Main entry point for formula evaluation.\n * Port of TVE.PureDocs.Excel.Formulas.FormulaEvaluator (C#)\n *\n * Includes LRU cache for parsed ASTs to avoid re-parsing identical formulas.\n */\nimport { FormulaLexer } from './formula-lexer.js';\nimport { FormulaParser } from './formula-parser.js';\nimport { FormulaContext, type WorksheetLike, type WorkbookLike } from './formula-context.js';\nimport { FormulaValue } from './formula-value.js';\nimport { LruCache } from './lru-cache.js';\nimport type { FormulaNode } from './formula-node.js';\n\nconst DEFAULT_CACHE_CAPACITY = 10_000;\n\n// Global AST cache shared across all evaluations (formula text → AST)\nconst astCache = new LruCache<string, FormulaNode>(DEFAULT_CACHE_CAPACITY);\n\n/**\n * Parses a formula string to an AST, with LRU caching.\n */\nexport function parseFormula(formula: string): FormulaNode {\n const stripped = formula.startsWith('=') ? formula.slice(1) : formula;\n const cached = astCache.get(stripped);\n if (cached !== undefined) return cached;\n\n const lexer = new FormulaLexer(stripped);\n const tokens = lexer.tokenize();\n const ast = new FormulaParser(tokens).parse();\n\n astCache.set(stripped, ast);\n return ast;\n}\n\n/**\n * Evaluates a formula string against a worksheet.\n * Mirrors FormulaEvaluator.Evaluate() in C#.\n */\nexport function evaluateFormula(\n formula: string,\n sheet: WorksheetLike,\n options?: {\n workbook?: WorkbookLike;\n formulaRow?: number;\n formulaCol?: number;\n },\n): FormulaValue {\n if (!formula) return FormulaValue.blank;\n\n try {\n const ast = parseFormula(formula);\n const ctx = new FormulaContext(\n sheet,\n options?.formulaRow ?? 0,\n options?.formulaCol ?? 0,\n );\n if (options?.workbook) ctx.workbook = options.workbook;\n return ast.evaluate(ctx);\n } catch {\n return FormulaValue.errorValue;\n }\n}\n\n// ── Cache management ──────────────────────────────────────────────────────────\n\nexport function clearAstCache(): void {\n astCache.clear();\n}\n\nexport function getAstCacheStats(): { size: number; hits: number; misses: number; hitRate: number } {\n return {\n size: astCache.size,\n hits: astCache.hits,\n misses: astCache.misses,\n hitRate: astCache.hitRate,\n };\n}\n\nexport function setAstCacheCapacity(capacity: number): void {\n astCache.resize(capacity);\n}\n"]}