@bilig/formula 0.1.2 → 0.1.4

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,156 @@
1
+ import { ErrorCode, ValueTag } from "@bilig/protocol";
2
+ export function evaluateContextSpecialCall(callee, rawArgs, context, argRefs, deps) {
3
+ switch (callee) {
4
+ case "ROW": {
5
+ if (rawArgs.length > 1) {
6
+ return deps.stackScalar(deps.error(ErrorCode.Value));
7
+ }
8
+ const row = deps.referenceRowNumber(argRefs[0], context);
9
+ return deps.stackScalar(row === undefined ? deps.error(ErrorCode.Value) : deps.numberValue(row));
10
+ }
11
+ case "COLUMN": {
12
+ if (rawArgs.length > 1) {
13
+ return deps.stackScalar(deps.error(ErrorCode.Value));
14
+ }
15
+ const column = deps.referenceColumnNumber(argRefs[0], context);
16
+ return deps.stackScalar(column === undefined ? deps.error(ErrorCode.Value) : deps.numberValue(column));
17
+ }
18
+ case "ISOMITTED": {
19
+ if (rawArgs.length !== 1) {
20
+ return deps.stackScalar(deps.error(ErrorCode.Value));
21
+ }
22
+ return deps.stackScalar({ tag: ValueTag.Boolean, value: rawArgs[0]?.kind === "omitted" });
23
+ }
24
+ case "FORMULATEXT":
25
+ case "FORMULA": {
26
+ if (rawArgs.length !== 1) {
27
+ return deps.stackScalar(deps.error(ErrorCode.Value));
28
+ }
29
+ const address = deps.referenceTopLeftAddress(argRefs[0]);
30
+ const sheetName = deps.referenceSheetName(argRefs[0], context);
31
+ if (!address || !sheetName) {
32
+ return deps.stackScalar(deps.error(ErrorCode.Ref));
33
+ }
34
+ const formula = context.resolveFormula?.(sheetName, address);
35
+ return deps.stackScalar(formula
36
+ ? deps.stringValue(formula.startsWith("=") ? formula : `=${formula}`)
37
+ : deps.error(ErrorCode.NA));
38
+ }
39
+ case "PHONETIC": {
40
+ if (rawArgs.length !== 1) {
41
+ return deps.stackScalar(deps.error(ErrorCode.Value));
42
+ }
43
+ const target = rawArgs[0];
44
+ if (target.kind === "scalar") {
45
+ return deps.stackScalar(deps.stringValue(deps.toStringValue(target.value)));
46
+ }
47
+ if (target.kind === "range") {
48
+ return deps.stackScalar(deps.stringValue(deps.toStringValue(target.values[0] ?? deps.emptyValue())));
49
+ }
50
+ return deps.stackScalar(deps.error(ErrorCode.Value));
51
+ }
52
+ case "CHOOSE": {
53
+ if (rawArgs.length < 2) {
54
+ return deps.stackScalar(deps.error(ErrorCode.Value));
55
+ }
56
+ const indexValue = deps.isSingleCellValue(rawArgs[0]);
57
+ const choice = indexValue ? deps.toNumber(indexValue) : undefined;
58
+ if (choice === undefined || !Number.isFinite(choice)) {
59
+ return deps.stackScalar(deps.error(ErrorCode.Value));
60
+ }
61
+ const truncated = Math.trunc(choice);
62
+ if (truncated < 1 || truncated >= rawArgs.length) {
63
+ return deps.stackScalar(deps.error(ErrorCode.Value));
64
+ }
65
+ return deps.cloneStackValue(rawArgs[truncated]);
66
+ }
67
+ case "SHEET": {
68
+ if (rawArgs.length > 1) {
69
+ return deps.stackScalar(deps.error(ErrorCode.Value));
70
+ }
71
+ if (rawArgs.length === 0) {
72
+ const index = deps.sheetIndexByName(context.sheetName, context);
73
+ return deps.stackScalar(index === undefined ? deps.error(ErrorCode.NA) : deps.numberValue(index));
74
+ }
75
+ if (argRefs[0]) {
76
+ const index = deps.sheetIndexByName(deps.referenceSheetName(argRefs[0], context) ?? context.sheetName, context);
77
+ return deps.stackScalar(index === undefined ? deps.error(ErrorCode.NA) : deps.numberValue(index));
78
+ }
79
+ const scalar = deps.isSingleCellValue(rawArgs[0]);
80
+ if (scalar?.tag !== ValueTag.String) {
81
+ return deps.stackScalar(deps.error(ErrorCode.NA));
82
+ }
83
+ const index = deps.sheetIndexByName(scalar.value, context);
84
+ return deps.stackScalar(index === undefined ? deps.error(ErrorCode.NA) : deps.numberValue(index));
85
+ }
86
+ case "SHEETS": {
87
+ if (rawArgs.length > 1) {
88
+ return deps.stackScalar(deps.error(ErrorCode.Value));
89
+ }
90
+ if (rawArgs.length === 0) {
91
+ return deps.stackScalar(deps.numberValue(deps.sheetNames(context).length));
92
+ }
93
+ if (argRefs[0]) {
94
+ return deps.stackScalar(deps.numberValue(1));
95
+ }
96
+ const scalar = deps.isSingleCellValue(rawArgs[0]);
97
+ if (scalar?.tag !== ValueTag.String) {
98
+ return deps.stackScalar(deps.error(ErrorCode.NA));
99
+ }
100
+ return deps.stackScalar(deps.sheetIndexByName(scalar.value, context) === undefined
101
+ ? deps.error(ErrorCode.NA)
102
+ : deps.numberValue(1));
103
+ }
104
+ case "CELL": {
105
+ if (rawArgs.length < 1 || rawArgs.length > 2) {
106
+ return deps.stackScalar(deps.error(ErrorCode.Value));
107
+ }
108
+ const infoType = deps.isSingleCellValue(rawArgs[0]);
109
+ if (infoType?.tag !== ValueTag.String) {
110
+ return deps.stackScalar(deps.error(ErrorCode.Value));
111
+ }
112
+ const ref = rawArgs.length === 2 ? argRefs[1] : deps.currentCellReference(context);
113
+ if (!ref) {
114
+ return deps.stackScalar(deps.error(ErrorCode.Value));
115
+ }
116
+ const normalizedInfoType = infoType.value.trim().toLowerCase();
117
+ switch (normalizedInfoType) {
118
+ case "address": {
119
+ const address = deps.absoluteAddress(ref, context);
120
+ return deps.stackScalar(address ? deps.stringValue(address) : deps.error(ErrorCode.Value));
121
+ }
122
+ case "row": {
123
+ const row = deps.referenceRowNumber(ref, context);
124
+ return deps.stackScalar(row === undefined ? deps.error(ErrorCode.Value) : deps.numberValue(row));
125
+ }
126
+ case "col": {
127
+ const column = deps.referenceColumnNumber(ref, context);
128
+ return deps.stackScalar(column === undefined ? deps.error(ErrorCode.Value) : deps.numberValue(column));
129
+ }
130
+ case "contents": {
131
+ const address = deps.referenceTopLeftAddress(ref);
132
+ const sheetName = deps.referenceSheetName(ref, context);
133
+ if (!address || !sheetName) {
134
+ return deps.stackScalar(deps.error(ErrorCode.Value));
135
+ }
136
+ return deps.stackScalar(context.resolveCell(sheetName, address));
137
+ }
138
+ case "type": {
139
+ const address = deps.referenceTopLeftAddress(ref);
140
+ const sheetName = deps.referenceSheetName(ref, context);
141
+ if (!address || !sheetName) {
142
+ return deps.stackScalar(deps.error(ErrorCode.Value));
143
+ }
144
+ return deps.stackScalar(deps.stringValue(deps.cellTypeCode(context.resolveCell(sheetName, address))));
145
+ }
146
+ case "filename":
147
+ return deps.stackScalar(deps.stringValue(""));
148
+ default:
149
+ return deps.stackScalar(deps.error(ErrorCode.Value));
150
+ }
151
+ }
152
+ default:
153
+ return undefined;
154
+ }
155
+ }
156
+ //# sourceMappingURL=js-evaluator-context-special-calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js-evaluator-context-special-calls.js","sourceRoot":"","sources":["../src/js-evaluator-context-special-calls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import type { ErrorCode, CellValue } from "@bilig/protocol";
2
+ import type { ArrayValue, EvaluationResult } from "./runtime-values.js";
3
+ export interface EvaluationContext {
4
+ sheetName: string;
5
+ currentAddress?: string;
6
+ resolveCell: (sheetName: string, address: string) => CellValue;
7
+ resolveRange: (sheetName: string, start: string, end: string, refKind: "cells" | "rows" | "cols") => CellValue[];
8
+ resolveName?: (name: string) => CellValue;
9
+ resolveFormula?: (sheetName: string, address: string) => string | undefined;
10
+ resolvePivotData?: (request: {
11
+ dataField: string;
12
+ sheetName: string;
13
+ address: string;
14
+ filters: ReadonlyArray<{
15
+ field: string;
16
+ item: CellValue;
17
+ }>;
18
+ }) => CellValue | undefined;
19
+ resolveMultipleOperations?: (request: {
20
+ formulaSheetName: string;
21
+ formulaAddress: string;
22
+ rowCellSheetName: string;
23
+ rowCellAddress: string;
24
+ rowReplacementSheetName: string;
25
+ rowReplacementAddress: string;
26
+ columnCellSheetName?: string;
27
+ columnCellAddress?: string;
28
+ columnReplacementSheetName?: string;
29
+ columnReplacementAddress?: string;
30
+ }) => CellValue | undefined;
31
+ listSheetNames?: () => string[];
32
+ resolveBuiltin?: (name: string) => ((...args: CellValue[]) => EvaluationResult) | undefined;
33
+ }
34
+ export interface ReferenceOperand {
35
+ kind: "cell" | "range" | "row" | "col";
36
+ sheetName?: string;
37
+ address?: string;
38
+ start?: string;
39
+ end?: string;
40
+ refKind?: "cells" | "rows" | "cols";
41
+ }
42
+ export type JsPlanInstruction = {
43
+ opcode: "push-number";
44
+ value: number;
45
+ } | {
46
+ opcode: "push-boolean";
47
+ value: boolean;
48
+ } | {
49
+ opcode: "push-string";
50
+ value: string;
51
+ } | {
52
+ opcode: "push-error";
53
+ code: ErrorCode;
54
+ } | {
55
+ opcode: "push-name";
56
+ name: string;
57
+ } | {
58
+ opcode: "push-cell";
59
+ sheetName?: string;
60
+ address: string;
61
+ } | {
62
+ opcode: "push-range";
63
+ sheetName?: string;
64
+ start: string;
65
+ end: string;
66
+ refKind: "cells" | "rows" | "cols";
67
+ } | {
68
+ opcode: "push-lambda";
69
+ params: string[];
70
+ body: JsPlanInstruction[];
71
+ } | {
72
+ opcode: "unary";
73
+ operator: "+" | "-";
74
+ } | {
75
+ opcode: "binary";
76
+ operator: "+" | "-" | "*" | "/" | "^" | "&" | "=" | "<>" | ">" | ">=" | "<" | "<=";
77
+ } | {
78
+ opcode: "call";
79
+ callee: string;
80
+ argc: number;
81
+ argRefs?: Array<ReferenceOperand | undefined>;
82
+ } | {
83
+ opcode: "invoke";
84
+ argc: number;
85
+ } | {
86
+ opcode: "begin-scope";
87
+ } | {
88
+ opcode: "bind-name";
89
+ name: string;
90
+ } | {
91
+ opcode: "end-scope";
92
+ } | {
93
+ opcode: "jump-if-false";
94
+ target: number;
95
+ } | {
96
+ opcode: "jump";
97
+ target: number;
98
+ } | {
99
+ opcode: "return";
100
+ };
101
+ export type StackValue = {
102
+ kind: "scalar";
103
+ value: CellValue;
104
+ } | {
105
+ kind: "omitted";
106
+ } | {
107
+ kind: "range";
108
+ values: CellValue[];
109
+ refKind: "cells" | "rows" | "cols";
110
+ rows: number;
111
+ cols: number;
112
+ } | {
113
+ kind: "lambda";
114
+ params: string[];
115
+ body: JsPlanInstruction[];
116
+ scopes: Array<Map<string, StackValue>>;
117
+ } | ArrayValue;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=js-evaluator-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js-evaluator-types.js","sourceRoot":"","sources":["../src/js-evaluator-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { ErrorCode, type CellValue } from "@bilig/protocol";
2
+ import type { EvaluationContext, ReferenceOperand, StackValue } from "./js-evaluator-types.js";
3
+ interface MatrixLikeValue {
4
+ rows: number;
5
+ cols: number;
6
+ values: readonly CellValue[];
7
+ }
8
+ interface WorkbookSpecialCallDeps {
9
+ error: (code: ErrorCode) => CellValue;
10
+ stackScalar: (value: CellValue) => StackValue;
11
+ toStringValue: (value: CellValue) => string;
12
+ isSingleCellValue: (value: StackValue) => CellValue | undefined;
13
+ matrixFromStackValue: (value: StackValue) => MatrixLikeValue | undefined;
14
+ scalarIntegerArgument: (value: StackValue | undefined) => number | undefined;
15
+ vectorIntegerArgument: (value: StackValue | undefined) => number[] | undefined;
16
+ aggregateRangeSubset: (functionArg: StackValue, subset: readonly CellValue[], context: EvaluationContext, totalSet?: readonly CellValue[]) => CellValue;
17
+ referenceTopLeftAddress: (ref: ReferenceOperand | undefined) => string | undefined;
18
+ referenceSheetName: (ref: ReferenceOperand | undefined, context: EvaluationContext) => string | undefined;
19
+ coerceScalarTextArgument: (value: StackValue | undefined) => string | CellValue;
20
+ coerceOptionalBooleanArgument: (value: StackValue | undefined, fallback: boolean) => boolean | CellValue;
21
+ isCellValueError: (value: number | boolean | string | CellValue) => value is CellValue;
22
+ }
23
+ export declare function evaluateWorkbookSpecialCall(callee: string, rawArgs: StackValue[], context: EvaluationContext, argRefs: readonly (ReferenceOperand | undefined)[], deps: WorkbookSpecialCallDeps): StackValue | undefined;
24
+ export {};
@@ -0,0 +1,185 @@
1
+ import { ErrorCode } from "@bilig/protocol";
2
+ import { parseCellAddress, parseRangeAddress } from "./addressing.js";
3
+ import { evaluateGroupBy, evaluatePivotBy } from "./group-pivot-evaluator.js";
4
+ import { isArrayValue } from "./runtime-values.js";
5
+ export function evaluateWorkbookSpecialCall(callee, rawArgs, context, argRefs, deps) {
6
+ switch (callee) {
7
+ case "GETPIVOTDATA": {
8
+ if (rawArgs.length < 2 || (rawArgs.length - 2) % 2 !== 0) {
9
+ return deps.stackScalar(deps.error(ErrorCode.Value));
10
+ }
11
+ const dataFieldValue = deps.isSingleCellValue(rawArgs[0]);
12
+ const address = deps.referenceTopLeftAddress(argRefs[1]);
13
+ const sheetName = deps.referenceSheetName(argRefs[1], context);
14
+ if (!dataFieldValue) {
15
+ return deps.stackScalar(deps.error(ErrorCode.Value));
16
+ }
17
+ if (!address || !sheetName) {
18
+ return deps.stackScalar(deps.error(ErrorCode.Ref));
19
+ }
20
+ const filters = [];
21
+ for (let index = 2; index < rawArgs.length; index += 2) {
22
+ const fieldValue = deps.isSingleCellValue(rawArgs[index]);
23
+ const itemValue = deps.isSingleCellValue(rawArgs[index + 1]);
24
+ if (!fieldValue || !itemValue) {
25
+ return deps.stackScalar(deps.error(ErrorCode.Value));
26
+ }
27
+ filters.push({ field: deps.toStringValue(fieldValue), item: itemValue });
28
+ }
29
+ return deps.stackScalar(context.resolvePivotData?.({
30
+ dataField: deps.toStringValue(dataFieldValue),
31
+ sheetName,
32
+ address,
33
+ filters,
34
+ }) ?? deps.error(ErrorCode.Ref));
35
+ }
36
+ case "GROUPBY": {
37
+ if (rawArgs.length < 3 || rawArgs.length > 8) {
38
+ return deps.stackScalar(deps.error(ErrorCode.Value));
39
+ }
40
+ const rowFields = deps.matrixFromStackValue(rawArgs[0]);
41
+ const values = deps.matrixFromStackValue(rawArgs[1]);
42
+ if (!rowFields || !values) {
43
+ return deps.stackScalar(deps.error(ErrorCode.Value));
44
+ }
45
+ const sortOrder = deps.vectorIntegerArgument(rawArgs[5]) ??
46
+ (rawArgs[5] ? [deps.scalarIntegerArgument(rawArgs[5]) ?? Number.NaN] : undefined);
47
+ const fieldHeadersMode = deps.scalarIntegerArgument(rawArgs[3]);
48
+ const totalDepth = deps.scalarIntegerArgument(rawArgs[4]);
49
+ const filterArray = rawArgs[6] ? deps.matrixFromStackValue(rawArgs[6]) : undefined;
50
+ const fieldRelationship = deps.scalarIntegerArgument(rawArgs[7]);
51
+ const result = evaluateGroupBy(rowFields, values, {
52
+ aggregate: (subset, totalSet) => deps.aggregateRangeSubset(rawArgs[2], subset, context, totalSet),
53
+ ...(fieldHeadersMode !== undefined ? { fieldHeadersMode } : {}),
54
+ ...(totalDepth !== undefined ? { totalDepth } : {}),
55
+ ...(sortOrder?.every(Number.isFinite) ? { sortOrder } : {}),
56
+ ...(filterArray !== undefined ? { filterArray } : {}),
57
+ ...(fieldRelationship !== undefined ? { fieldRelationship } : {}),
58
+ });
59
+ return isArrayValue(result) ? result : deps.stackScalar(result);
60
+ }
61
+ case "PIVOTBY": {
62
+ if (rawArgs.length < 4 || rawArgs.length > 11) {
63
+ return deps.stackScalar(deps.error(ErrorCode.Value));
64
+ }
65
+ const rowFields = deps.matrixFromStackValue(rawArgs[0]);
66
+ const colFields = deps.matrixFromStackValue(rawArgs[1]);
67
+ const values = deps.matrixFromStackValue(rawArgs[2]);
68
+ if (!rowFields || !colFields || !values) {
69
+ return deps.stackScalar(deps.error(ErrorCode.Value));
70
+ }
71
+ const rowSortOrder = deps.vectorIntegerArgument(rawArgs[6]) ??
72
+ (rawArgs[6] ? [deps.scalarIntegerArgument(rawArgs[6]) ?? Number.NaN] : undefined);
73
+ const colSortOrder = deps.vectorIntegerArgument(rawArgs[8]) ??
74
+ (rawArgs[8] ? [deps.scalarIntegerArgument(rawArgs[8]) ?? Number.NaN] : undefined);
75
+ const fieldHeadersMode = deps.scalarIntegerArgument(rawArgs[4]);
76
+ const rowTotalDepth = deps.scalarIntegerArgument(rawArgs[5]);
77
+ const colTotalDepth = deps.scalarIntegerArgument(rawArgs[7]);
78
+ const filterArray = rawArgs[9] ? deps.matrixFromStackValue(rawArgs[9]) : undefined;
79
+ const relativeTo = deps.scalarIntegerArgument(rawArgs[10]);
80
+ const result = evaluatePivotBy(rowFields, colFields, values, {
81
+ aggregate: (subset, totalSet) => deps.aggregateRangeSubset(rawArgs[3], subset, context, totalSet),
82
+ ...(fieldHeadersMode !== undefined ? { fieldHeadersMode } : {}),
83
+ ...(rowTotalDepth !== undefined ? { rowTotalDepth } : {}),
84
+ ...(rowSortOrder?.every(Number.isFinite) ? { rowSortOrder } : {}),
85
+ ...(colTotalDepth !== undefined ? { colTotalDepth } : {}),
86
+ ...(colSortOrder?.every(Number.isFinite) ? { colSortOrder } : {}),
87
+ ...(filterArray !== undefined ? { filterArray } : {}),
88
+ ...(relativeTo !== undefined ? { relativeTo } : {}),
89
+ });
90
+ return isArrayValue(result) ? result : deps.stackScalar(result);
91
+ }
92
+ case "MULTIPLE.OPERATIONS": {
93
+ if (rawArgs.length !== 3 && rawArgs.length !== 5) {
94
+ return deps.stackScalar(deps.error(ErrorCode.Value));
95
+ }
96
+ const formulaAddress = deps.referenceTopLeftAddress(argRefs[0]);
97
+ const formulaSheetName = deps.referenceSheetName(argRefs[0], context);
98
+ const rowCellAddress = deps.referenceTopLeftAddress(argRefs[1]);
99
+ const rowCellSheetName = deps.referenceSheetName(argRefs[1], context);
100
+ const rowReplacementAddress = deps.referenceTopLeftAddress(argRefs[2]);
101
+ const rowReplacementSheetName = deps.referenceSheetName(argRefs[2], context);
102
+ if (!formulaAddress ||
103
+ !formulaSheetName ||
104
+ !rowCellAddress ||
105
+ !rowCellSheetName ||
106
+ !rowReplacementAddress ||
107
+ !rowReplacementSheetName) {
108
+ return deps.stackScalar(deps.error(ErrorCode.Ref));
109
+ }
110
+ const columnCellAddress = rawArgs.length === 5 ? deps.referenceTopLeftAddress(argRefs[3]) : undefined;
111
+ const columnCellSheetName = rawArgs.length === 5 ? deps.referenceSheetName(argRefs[3], context) : undefined;
112
+ const columnReplacementAddress = rawArgs.length === 5 ? deps.referenceTopLeftAddress(argRefs[4]) : undefined;
113
+ const columnReplacementSheetName = rawArgs.length === 5 ? deps.referenceSheetName(argRefs[4], context) : undefined;
114
+ if (rawArgs.length === 5 &&
115
+ (!columnCellAddress ||
116
+ !columnCellSheetName ||
117
+ !columnReplacementAddress ||
118
+ !columnReplacementSheetName)) {
119
+ return deps.stackScalar(deps.error(ErrorCode.Ref));
120
+ }
121
+ return deps.stackScalar(context.resolveMultipleOperations?.({
122
+ formulaSheetName,
123
+ formulaAddress,
124
+ rowCellSheetName,
125
+ rowCellAddress,
126
+ rowReplacementSheetName,
127
+ rowReplacementAddress,
128
+ ...(columnCellSheetName ? { columnCellSheetName } : {}),
129
+ ...(columnCellAddress ? { columnCellAddress } : {}),
130
+ ...(columnReplacementSheetName ? { columnReplacementSheetName } : {}),
131
+ ...(columnReplacementAddress ? { columnReplacementAddress } : {}),
132
+ }) ?? deps.error(ErrorCode.Ref));
133
+ }
134
+ case "INDIRECT": {
135
+ if (rawArgs.length < 1 || rawArgs.length > 2) {
136
+ return deps.stackScalar(deps.error(ErrorCode.Value));
137
+ }
138
+ const refText = deps.coerceScalarTextArgument(rawArgs[0]);
139
+ if (deps.isCellValueError(refText)) {
140
+ return deps.stackScalar(refText);
141
+ }
142
+ const a1Mode = deps.coerceOptionalBooleanArgument(rawArgs[1], true);
143
+ if (deps.isCellValueError(a1Mode)) {
144
+ return deps.stackScalar(a1Mode);
145
+ }
146
+ if (!a1Mode) {
147
+ return deps.stackScalar(deps.error(ErrorCode.Value));
148
+ }
149
+ const normalizedRefText = refText.trim();
150
+ if (normalizedRefText === "") {
151
+ return deps.stackScalar(deps.error(ErrorCode.Ref));
152
+ }
153
+ try {
154
+ const cell = parseCellAddress(normalizedRefText, context.sheetName);
155
+ return deps.stackScalar(context.resolveCell(cell.sheetName ?? context.sheetName, cell.text));
156
+ }
157
+ catch {
158
+ // fall through
159
+ }
160
+ try {
161
+ const range = parseRangeAddress(normalizedRefText, context.sheetName);
162
+ if (range.kind !== "cells") {
163
+ return deps.stackScalar(deps.error(ErrorCode.Ref));
164
+ }
165
+ const targetSheetName = range.sheetName ?? context.sheetName;
166
+ const values = context.resolveRange(targetSheetName, range.start.text, range.end.text, "cells");
167
+ return {
168
+ kind: "range",
169
+ values,
170
+ refKind: "cells",
171
+ rows: range.end.row - range.start.row + 1,
172
+ cols: range.end.col - range.start.col + 1,
173
+ };
174
+ }
175
+ catch {
176
+ // fall through
177
+ }
178
+ const resolvedName = context.resolveName?.(normalizedRefText);
179
+ return deps.stackScalar(resolvedName ?? deps.error(ErrorCode.Ref));
180
+ }
181
+ default:
182
+ return undefined;
183
+ }
184
+ }
185
+ //# sourceMappingURL=js-evaluator-workbook-special-calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js-evaluator-workbook-special-calls.js","sourceRoot":"","sources":["../src/js-evaluator-workbook-special-calls.ts"],"names":[],"mappings":"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"}
@@ -1,107 +1,10 @@
1
- import { ErrorCode, type CellValue } from "@bilig/protocol";
1
+ import { type CellValue } from "@bilig/protocol";
2
2
  import type { FormulaNode } from "./ast.js";
3
+ import type { EvaluationContext, JsPlanInstruction } from "./js-evaluator-types.js";
3
4
  import { type EvaluationResult } from "./runtime-values.js";
4
- export interface EvaluationContext {
5
- sheetName: string;
6
- currentAddress?: string;
7
- resolveCell: (sheetName: string, address: string) => CellValue;
8
- resolveRange: (sheetName: string, start: string, end: string, refKind: "cells" | "rows" | "cols") => CellValue[];
9
- resolveName?: (name: string) => CellValue;
10
- resolveFormula?: (sheetName: string, address: string) => string | undefined;
11
- resolvePivotData?: (request: {
12
- dataField: string;
13
- sheetName: string;
14
- address: string;
15
- filters: ReadonlyArray<{
16
- field: string;
17
- item: CellValue;
18
- }>;
19
- }) => CellValue | undefined;
20
- resolveMultipleOperations?: (request: {
21
- formulaSheetName: string;
22
- formulaAddress: string;
23
- rowCellSheetName: string;
24
- rowCellAddress: string;
25
- rowReplacementSheetName: string;
26
- rowReplacementAddress: string;
27
- columnCellSheetName?: string;
28
- columnCellAddress?: string;
29
- columnReplacementSheetName?: string;
30
- columnReplacementAddress?: string;
31
- }) => CellValue | undefined;
32
- listSheetNames?: () => string[];
33
- resolveBuiltin?: (name: string) => ((...args: CellValue[]) => EvaluationResult) | undefined;
34
- }
35
- interface ReferenceOperand {
36
- kind: "cell" | "range" | "row" | "col";
37
- sheetName?: string;
38
- address?: string;
39
- start?: string;
40
- end?: string;
41
- refKind?: "cells" | "rows" | "cols";
42
- }
43
- export type JsPlanInstruction = {
44
- opcode: "push-number";
45
- value: number;
46
- } | {
47
- opcode: "push-boolean";
48
- value: boolean;
49
- } | {
50
- opcode: "push-string";
51
- value: string;
52
- } | {
53
- opcode: "push-error";
54
- code: ErrorCode;
55
- } | {
56
- opcode: "push-name";
57
- name: string;
58
- } | {
59
- opcode: "push-cell";
60
- sheetName?: string;
61
- address: string;
62
- } | {
63
- opcode: "push-range";
64
- sheetName?: string;
65
- start: string;
66
- end: string;
67
- refKind: "cells" | "rows" | "cols";
68
- } | {
69
- opcode: "push-lambda";
70
- params: string[];
71
- body: JsPlanInstruction[];
72
- } | {
73
- opcode: "unary";
74
- operator: "+" | "-";
75
- } | {
76
- opcode: "binary";
77
- operator: "+" | "-" | "*" | "/" | "^" | "&" | "=" | "<>" | ">" | ">=" | "<" | "<=";
78
- } | {
79
- opcode: "call";
80
- callee: string;
81
- argc: number;
82
- argRefs?: Array<ReferenceOperand | undefined>;
83
- } | {
84
- opcode: "invoke";
85
- argc: number;
86
- } | {
87
- opcode: "begin-scope";
88
- } | {
89
- opcode: "bind-name";
90
- name: string;
91
- } | {
92
- opcode: "end-scope";
93
- } | {
94
- opcode: "jump-if-false";
95
- target: number;
96
- } | {
97
- opcode: "jump";
98
- target: number;
99
- } | {
100
- opcode: "return";
101
- };
5
+ export type { EvaluationContext, JsPlanInstruction } from "./js-evaluator-types.js";
102
6
  export declare function lowerToPlan(node: FormulaNode): JsPlanInstruction[];
103
7
  export declare function evaluatePlanResult(plan: readonly JsPlanInstruction[], context: EvaluationContext): EvaluationResult;
104
8
  export declare function evaluatePlan(plan: readonly JsPlanInstruction[], context: EvaluationContext): CellValue;
105
9
  export declare function evaluateAst(node: FormulaNode, context: EvaluationContext): CellValue;
106
10
  export declare function evaluateAstResult(node: FormulaNode, context: EvaluationContext): EvaluationResult;
107
- export {};