@bilig/formula 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/binder-wasm-arity.d.ts +1 -0
- package/dist/binder-wasm-arity.js +541 -0
- package/dist/binder-wasm-arity.js.map +1 -0
- package/dist/binder-wasm-rules.d.ts +1 -2
- package/dist/binder-wasm-rules.js +2 -540
- package/dist/binder-wasm-rules.js.map +1 -1
- package/dist/builtins/cell-value-utils.d.ts +9 -0
- package/dist/builtins/cell-value-utils.js +63 -0
- package/dist/builtins/cell-value-utils.js.map +1 -0
- package/dist/builtins/datetime.d.ts +2 -10
- package/dist/builtins/datetime.js +5 -261
- package/dist/builtins/datetime.js.map +1 -1
- package/dist/builtins/excel-date.d.ts +16 -0
- package/dist/builtins/excel-date.js +199 -0
- package/dist/builtins/excel-date.js.map +1 -0
- package/dist/builtins/lookup-core-helpers.d.ts +50 -0
- package/dist/builtins/lookup-core-helpers.js +342 -0
- package/dist/builtins/lookup-core-helpers.js.map +1 -0
- package/dist/builtins/lookup.d.ts +3 -25
- package/dist/builtins/lookup.js +3 -341
- package/dist/builtins/lookup.js.map +1 -1
- package/dist/formula-reference-translation.d.ts +20 -0
- package/dist/formula-reference-translation.js +273 -0
- package/dist/formula-reference-translation.js.map +1 -0
- package/dist/formula-serializer.d.ts +2 -0
- package/dist/formula-serializer.js +74 -0
- package/dist/formula-serializer.js.map +1 -0
- package/dist/formula-sheet-rename.d.ts +14 -0
- package/dist/formula-sheet-rename.js +243 -0
- package/dist/formula-sheet-rename.js.map +1 -0
- package/dist/formula-structural-rewrite.d.ts +14 -0
- package/dist/formula-structural-rewrite.js +511 -0
- package/dist/formula-structural-rewrite.js.map +1 -0
- package/dist/formula-template-key.d.ts +2 -0
- package/dist/formula-template-key.js +58 -0
- package/dist/formula-template-key.js.map +1 -1
- package/dist/js-evaluator-cell-values.d.ts +5 -0
- package/dist/js-evaluator-cell-values.js +14 -0
- package/dist/js-evaluator-cell-values.js.map +1 -0
- package/dist/js-evaluator-runtime-helpers.d.ts +39 -0
- package/dist/js-evaluator-runtime-helpers.js +453 -0
- package/dist/js-evaluator-runtime-helpers.js.map +1 -0
- package/dist/js-evaluator-types.d.ts +178 -0
- package/dist/js-evaluator-types.js +2 -0
- package/dist/js-evaluator-types.js.map +1 -0
- package/dist/js-evaluator.d.ts +4 -178
- package/dist/js-evaluator.js +3 -463
- package/dist/js-evaluator.js.map +1 -1
- package/dist/translation-reference-utils.d.ts +42 -0
- package/dist/translation-reference-utils.js +178 -0
- package/dist/translation-reference-utils.js.map +1 -0
- package/dist/translation.d.ts +6 -32
- package/dist/translation.js +14 -1300
- package/dist/translation.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { formatRangeAddress, parseCellAddress, parseRangeAddress } from './addressing.js';
|
|
2
|
+
import { formatAxisReference, formatCellReference, parseAxisReferenceParts, parseCellReferenceParts, quoteSheetNameIfNeeded, } from './translation-reference-utils.js';
|
|
3
|
+
export function translateParsedCellReference(reference, rowDelta, colDelta) {
|
|
4
|
+
const parts = reference.rowAbsolute !== undefined && reference.colAbsolute !== undefined && reference.row !== undefined && reference.col !== undefined
|
|
5
|
+
? {
|
|
6
|
+
row: reference.row,
|
|
7
|
+
col: reference.col,
|
|
8
|
+
rowAbsolute: reference.rowAbsolute,
|
|
9
|
+
colAbsolute: reference.colAbsolute,
|
|
10
|
+
}
|
|
11
|
+
: parseCellReferenceParts(reference.address);
|
|
12
|
+
if (!parts) {
|
|
13
|
+
return reference;
|
|
14
|
+
}
|
|
15
|
+
const nextRow = parts.rowAbsolute ? parts.row : parts.row + rowDelta;
|
|
16
|
+
const nextCol = parts.colAbsolute ? parts.col : parts.col + colDelta;
|
|
17
|
+
const nextLocalAddress = formatCellReference(parts, nextRow, nextCol);
|
|
18
|
+
const nextAddress = reference.explicitSheet || reference.sheetName !== undefined
|
|
19
|
+
? formatQualifiedCellReference(reference.sheetName, nextLocalAddress)
|
|
20
|
+
: nextLocalAddress;
|
|
21
|
+
return {
|
|
22
|
+
...reference,
|
|
23
|
+
address: nextAddress,
|
|
24
|
+
...(reference.sheetName !== undefined ? { sheetName: reference.sheetName } : {}),
|
|
25
|
+
...(reference.explicitSheet !== undefined ? { explicitSheet: reference.explicitSheet } : {}),
|
|
26
|
+
...(reference.row !== undefined ? { row: nextRow } : {}),
|
|
27
|
+
...(reference.col !== undefined ? { col: nextCol } : {}),
|
|
28
|
+
...(reference.rowAbsolute !== undefined ? { rowAbsolute: parts.rowAbsolute } : {}),
|
|
29
|
+
...(reference.colAbsolute !== undefined ? { colAbsolute: parts.colAbsolute } : {}),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function translateParsedRangeReference(reference, rowDelta, colDelta) {
|
|
33
|
+
const nextRange = translateParsedRangeReferenceInfo(reference, rowDelta, colDelta);
|
|
34
|
+
const bounds = nextRange.refKind === 'cells'
|
|
35
|
+
? {
|
|
36
|
+
startRow: nextRange.startRow,
|
|
37
|
+
endRow: nextRange.endRow,
|
|
38
|
+
startCol: nextRange.startCol,
|
|
39
|
+
endCol: nextRange.endCol,
|
|
40
|
+
}
|
|
41
|
+
: nextRange.refKind === 'rows'
|
|
42
|
+
? {
|
|
43
|
+
startRow: nextRange.startRow,
|
|
44
|
+
endRow: nextRange.endRow,
|
|
45
|
+
startCol: 0,
|
|
46
|
+
endCol: 0,
|
|
47
|
+
}
|
|
48
|
+
: {
|
|
49
|
+
startRow: 0,
|
|
50
|
+
endRow: 0,
|
|
51
|
+
startCol: nextRange.startCol,
|
|
52
|
+
endCol: nextRange.endCol,
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
...reference,
|
|
56
|
+
address: formatParsedRangeReference(nextRange),
|
|
57
|
+
refKind: nextRange.refKind,
|
|
58
|
+
startAddress: nextRange.startAddress,
|
|
59
|
+
endAddress: nextRange.endAddress,
|
|
60
|
+
...bounds,
|
|
61
|
+
...(reference.explicitSheet !== undefined ? { explicitSheet: reference.explicitSheet } : {}),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export function translateParsedDependencyReference(reference, rowDelta, colDelta) {
|
|
65
|
+
return reference.kind === 'cell'
|
|
66
|
+
? translateParsedCellReference(reference, rowDelta, colDelta)
|
|
67
|
+
: translateParsedRangeReference(reference, rowDelta, colDelta);
|
|
68
|
+
}
|
|
69
|
+
export function translateQualifiedCellReference(raw, rowDelta, colDelta) {
|
|
70
|
+
const explicitlyQualified = raw.includes('!');
|
|
71
|
+
const parsed = parseCellAddress(raw);
|
|
72
|
+
const nextAddress = translateCellReference(parsed.text, rowDelta, colDelta);
|
|
73
|
+
return explicitlyQualified ? formatQualifiedCellReference(parsed.sheetName, nextAddress) : nextAddress;
|
|
74
|
+
}
|
|
75
|
+
export function formatParsedCellReference(reference) {
|
|
76
|
+
const localAddress = formatParsedLocalCellReference(reference);
|
|
77
|
+
return reference.explicitSheet || reference.sheetName !== undefined
|
|
78
|
+
? formatQualifiedCellReference(reference.sheetName, localAddress)
|
|
79
|
+
: localAddress;
|
|
80
|
+
}
|
|
81
|
+
export function formatParsedLocalCellReference(reference) {
|
|
82
|
+
const parts = reference.row !== undefined && reference.col !== undefined && reference.rowAbsolute !== undefined && reference.colAbsolute !== undefined
|
|
83
|
+
? {
|
|
84
|
+
row: reference.row,
|
|
85
|
+
col: reference.col,
|
|
86
|
+
rowAbsolute: reference.rowAbsolute,
|
|
87
|
+
colAbsolute: reference.colAbsolute,
|
|
88
|
+
}
|
|
89
|
+
: parseCellReferenceParts(reference.address);
|
|
90
|
+
if (!parts) {
|
|
91
|
+
return stripSheetQualifier(reference.address);
|
|
92
|
+
}
|
|
93
|
+
return formatCellReference(parts, parts.row, parts.col);
|
|
94
|
+
}
|
|
95
|
+
export function formatParsedRangeReference(reference) {
|
|
96
|
+
return formatQualifiedRangeReference(reference.explicitSheet ? reference.sheetName : undefined, reference.startAddress, reference.endAddress);
|
|
97
|
+
}
|
|
98
|
+
export function translatedCellInstructionKey(sheetName, address) {
|
|
99
|
+
return `${sheetName ?? ''}\t${address}`;
|
|
100
|
+
}
|
|
101
|
+
export function translatedRangeInstructionKey(sheetName, refKind, start, end) {
|
|
102
|
+
return `${sheetName ?? ''}\t${refKind}\t${start}\t${end}`;
|
|
103
|
+
}
|
|
104
|
+
export function buildTranslatedCellReferenceMap(original, translated) {
|
|
105
|
+
const output = new Map();
|
|
106
|
+
if (!original || !translated || original.length !== translated.length) {
|
|
107
|
+
return output;
|
|
108
|
+
}
|
|
109
|
+
for (let index = 0; index < original.length; index += 1) {
|
|
110
|
+
const source = original[index];
|
|
111
|
+
const target = translated[index];
|
|
112
|
+
if (!source || !target) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
output.set(translatedCellInstructionKey(source.sheetName, formatParsedLocalCellReference(source)), target);
|
|
116
|
+
}
|
|
117
|
+
return output;
|
|
118
|
+
}
|
|
119
|
+
export function buildTranslatedRangeReferenceMap(original, translated) {
|
|
120
|
+
const output = new Map();
|
|
121
|
+
if (!original || !translated || original.length !== translated.length) {
|
|
122
|
+
return output;
|
|
123
|
+
}
|
|
124
|
+
for (let index = 0; index < original.length; index += 1) {
|
|
125
|
+
const source = original[index];
|
|
126
|
+
const target = translated[index];
|
|
127
|
+
if (!source || !target) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
output.set(translatedRangeInstructionKey(source.sheetName, source.refKind, source.startAddress, source.endAddress), target);
|
|
131
|
+
}
|
|
132
|
+
return output;
|
|
133
|
+
}
|
|
134
|
+
export function formatParsedDependencyReference(reference) {
|
|
135
|
+
return reference.kind === 'cell' ? formatParsedCellReference(reference) : formatParsedRangeReference(reference);
|
|
136
|
+
}
|
|
137
|
+
export function translateQualifiedDependencyReference(raw, rowDelta, colDelta) {
|
|
138
|
+
if (!raw.includes(':')) {
|
|
139
|
+
return translateQualifiedCellReference(raw, rowDelta, colDelta);
|
|
140
|
+
}
|
|
141
|
+
return translateQualifiedRangeReference(raw, rowDelta, colDelta);
|
|
142
|
+
}
|
|
143
|
+
export function translateQualifiedRangeReference(raw, rowDelta, colDelta) {
|
|
144
|
+
const explicitlyQualified = raw.includes('!');
|
|
145
|
+
const parsed = parseRangeAddress(raw);
|
|
146
|
+
const nextRange = translateRangeAddress(parsed, rowDelta, colDelta);
|
|
147
|
+
if (explicitlyQualified) {
|
|
148
|
+
return formatRangeAddress(nextRange);
|
|
149
|
+
}
|
|
150
|
+
return `${nextRange.start.text}:${nextRange.end.text}`;
|
|
151
|
+
}
|
|
152
|
+
export function translateRangeAddress(range, rowDelta, colDelta) {
|
|
153
|
+
switch (range.kind) {
|
|
154
|
+
case 'cells': {
|
|
155
|
+
const startAddress = translateCellReference(range.start.text, rowDelta, colDelta);
|
|
156
|
+
const endAddress = translateCellReference(range.end.text, rowDelta, colDelta);
|
|
157
|
+
return parseRangeAddress(formatQualifiedRangeReference(range.sheetName, startAddress, endAddress));
|
|
158
|
+
}
|
|
159
|
+
case 'rows': {
|
|
160
|
+
const start = translateRowReference(range.start.text, rowDelta);
|
|
161
|
+
const end = translateRowReference(range.end.text, rowDelta);
|
|
162
|
+
return parseRangeAddress(formatQualifiedRangeReference(range.sheetName, start, end));
|
|
163
|
+
}
|
|
164
|
+
case 'cols': {
|
|
165
|
+
const start = translateColumnReference(range.start.text, colDelta);
|
|
166
|
+
const end = translateColumnReference(range.end.text, colDelta);
|
|
167
|
+
return parseRangeAddress(formatQualifiedRangeReference(range.sheetName, start, end));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export function translateCellReference(ref, rowDelta, colDelta) {
|
|
172
|
+
const parsed = parseCellReferenceParts(ref);
|
|
173
|
+
if (!parsed) {
|
|
174
|
+
throw new Error(`Invalid cell reference '${ref}'`);
|
|
175
|
+
}
|
|
176
|
+
const nextCol = parsed.colAbsolute ? parsed.col : parsed.col + colDelta;
|
|
177
|
+
const nextRow = parsed.rowAbsolute ? parsed.row : parsed.row + rowDelta;
|
|
178
|
+
if (nextCol < 0 || nextRow < 0) {
|
|
179
|
+
throw new Error(`Translated reference moved outside worksheet bounds: ${ref}`);
|
|
180
|
+
}
|
|
181
|
+
return formatCellReference(parsed, nextRow, nextCol);
|
|
182
|
+
}
|
|
183
|
+
export function translateColumnReference(ref, colDelta) {
|
|
184
|
+
const parsed = parseAxisReferenceParts(ref, 'column');
|
|
185
|
+
if (!parsed) {
|
|
186
|
+
throw new Error(`Invalid column reference '${ref}'`);
|
|
187
|
+
}
|
|
188
|
+
const nextCol = parsed.absolute ? parsed.index : parsed.index + colDelta;
|
|
189
|
+
if (nextCol < 0) {
|
|
190
|
+
throw new Error(`Translated reference moved outside worksheet bounds: ${ref}`);
|
|
191
|
+
}
|
|
192
|
+
return formatAxisReference(parsed.absolute, nextCol, 'column');
|
|
193
|
+
}
|
|
194
|
+
export function translateRowReference(ref, rowDelta) {
|
|
195
|
+
const parsed = parseAxisReferenceParts(ref, 'row');
|
|
196
|
+
if (!parsed) {
|
|
197
|
+
throw new Error(`Invalid row reference '${ref}'`);
|
|
198
|
+
}
|
|
199
|
+
const nextRow = parsed.absolute ? parsed.index : parsed.index + rowDelta;
|
|
200
|
+
if (nextRow < 0) {
|
|
201
|
+
throw new Error(`Translated reference moved outside worksheet bounds: ${ref}`);
|
|
202
|
+
}
|
|
203
|
+
return formatAxisReference(parsed.absolute, nextRow, 'row');
|
|
204
|
+
}
|
|
205
|
+
function translateParsedRangeReferenceInfo(reference, rowDelta, colDelta) {
|
|
206
|
+
if (reference.refKind === 'cells') {
|
|
207
|
+
const startRow = (reference.startRowAbsolute ?? false) ? reference.startRow : reference.startRow + rowDelta;
|
|
208
|
+
const endRow = (reference.endRowAbsolute ?? false) ? reference.endRow : reference.endRow + rowDelta;
|
|
209
|
+
const startCol = (reference.startColAbsolute ?? false) ? reference.startCol : reference.startCol + colDelta;
|
|
210
|
+
const endCol = (reference.endColAbsolute ?? false) ? reference.endCol : reference.endCol + colDelta;
|
|
211
|
+
const startAddress = formatCellReference({
|
|
212
|
+
row: reference.startRow,
|
|
213
|
+
col: reference.startCol,
|
|
214
|
+
rowAbsolute: reference.startRowAbsolute ?? false,
|
|
215
|
+
colAbsolute: reference.startColAbsolute ?? false,
|
|
216
|
+
}, startRow, startCol);
|
|
217
|
+
const endAddress = formatCellReference({
|
|
218
|
+
row: reference.endRow,
|
|
219
|
+
col: reference.endCol,
|
|
220
|
+
rowAbsolute: reference.endRowAbsolute ?? false,
|
|
221
|
+
colAbsolute: reference.endColAbsolute ?? false,
|
|
222
|
+
}, endRow, endCol);
|
|
223
|
+
return {
|
|
224
|
+
...reference,
|
|
225
|
+
startAddress,
|
|
226
|
+
endAddress,
|
|
227
|
+
startRow,
|
|
228
|
+
endRow,
|
|
229
|
+
startCol,
|
|
230
|
+
endCol,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
if (reference.refKind === 'rows') {
|
|
234
|
+
const startRow = (reference.startRowAbsolute ?? false) ? reference.startRow : reference.startRow + rowDelta;
|
|
235
|
+
const endRow = (reference.endRowAbsolute ?? false) ? reference.endRow : reference.endRow + rowDelta;
|
|
236
|
+
return {
|
|
237
|
+
...reference,
|
|
238
|
+
startAddress: formatAxisReference(reference.startRowAbsolute ?? false, startRow, 'row'),
|
|
239
|
+
endAddress: formatAxisReference(reference.endRowAbsolute ?? false, endRow, 'row'),
|
|
240
|
+
startRow,
|
|
241
|
+
endRow,
|
|
242
|
+
startCol: 0,
|
|
243
|
+
endCol: 0,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
const startCol = (reference.startColAbsolute ?? false) ? reference.startCol : reference.startCol + colDelta;
|
|
247
|
+
const endCol = (reference.endColAbsolute ?? false) ? reference.endCol : reference.endCol + colDelta;
|
|
248
|
+
return {
|
|
249
|
+
...reference,
|
|
250
|
+
startAddress: formatAxisReference(reference.startColAbsolute ?? false, startCol, 'column'),
|
|
251
|
+
endAddress: formatAxisReference(reference.endColAbsolute ?? false, endCol, 'column'),
|
|
252
|
+
startRow: 0,
|
|
253
|
+
endRow: 0,
|
|
254
|
+
startCol,
|
|
255
|
+
endCol,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function stripSheetQualifier(reference) {
|
|
259
|
+
const bang = reference.lastIndexOf('!');
|
|
260
|
+
return bang === -1 ? reference : reference.slice(bang + 1);
|
|
261
|
+
}
|
|
262
|
+
function formatQualifiedCellReference(sheetName, address) {
|
|
263
|
+
if (!sheetName) {
|
|
264
|
+
return address;
|
|
265
|
+
}
|
|
266
|
+
const parsed = parseCellAddress(address, sheetName);
|
|
267
|
+
return `${quoteSheetNameIfNeeded(sheetName)}!${parsed.text}`;
|
|
268
|
+
}
|
|
269
|
+
function formatQualifiedRangeReference(sheetName, start, end) {
|
|
270
|
+
const prefix = sheetName ? `${quoteSheetNameIfNeeded(sheetName)}!` : '';
|
|
271
|
+
return `${prefix}${start}:${end}`;
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=formula-reference-translation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula-reference-translation.js","sourceRoot":"","sources":["../src/formula-reference-translation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ErrorCode } from '@bilig/protocol';
|
|
2
|
+
import { formatSheetPrefix } from './translation-reference-utils.js';
|
|
3
|
+
const BINARY_PRECEDENCE = {
|
|
4
|
+
'=': 1,
|
|
5
|
+
'<>': 1,
|
|
6
|
+
'>': 1,
|
|
7
|
+
'>=': 1,
|
|
8
|
+
'<': 1,
|
|
9
|
+
'<=': 1,
|
|
10
|
+
'&': 2,
|
|
11
|
+
'+': 3,
|
|
12
|
+
'-': 3,
|
|
13
|
+
'*': 4,
|
|
14
|
+
'/': 4,
|
|
15
|
+
'^': 5,
|
|
16
|
+
};
|
|
17
|
+
const ERROR_LITERAL_TEXT = {
|
|
18
|
+
[ErrorCode.Ref]: '#REF!',
|
|
19
|
+
[ErrorCode.Name]: '#NAME?',
|
|
20
|
+
[ErrorCode.Div0]: '#DIV/0!',
|
|
21
|
+
[ErrorCode.NA]: '#N/A',
|
|
22
|
+
[ErrorCode.Value]: '#VALUE!',
|
|
23
|
+
[ErrorCode.Cycle]: '#CYCLE!',
|
|
24
|
+
[ErrorCode.Spill]: '#SPILL!',
|
|
25
|
+
[ErrorCode.Blocked]: '#BLOCKED!',
|
|
26
|
+
};
|
|
27
|
+
export function serializeFormula(node, parentPrecedence = 0, parentAssociativity = null) {
|
|
28
|
+
switch (node.kind) {
|
|
29
|
+
case 'NumberLiteral':
|
|
30
|
+
return String(node.value);
|
|
31
|
+
case 'BooleanLiteral':
|
|
32
|
+
return node.value ? 'TRUE' : 'FALSE';
|
|
33
|
+
case 'StringLiteral':
|
|
34
|
+
return `"${node.value.replaceAll('"', '""')}"`;
|
|
35
|
+
case 'ErrorLiteral':
|
|
36
|
+
return ERROR_LITERAL_TEXT[node.code] ?? '#ERROR!';
|
|
37
|
+
case 'NameRef':
|
|
38
|
+
return node.name;
|
|
39
|
+
case 'StructuredRef':
|
|
40
|
+
return `${node.tableName}[${node.columnName}]`;
|
|
41
|
+
case 'CellRef':
|
|
42
|
+
return `${formatSheetPrefix(node.sheetName)}${node.ref}`;
|
|
43
|
+
case 'SpillRef':
|
|
44
|
+
return `${formatSheetPrefix(node.sheetName)}${node.ref}#`;
|
|
45
|
+
case 'ColumnRef':
|
|
46
|
+
return `${formatSheetPrefix(node.sheetName)}${node.ref}`;
|
|
47
|
+
case 'RowRef':
|
|
48
|
+
return `${formatSheetPrefix(node.sheetName)}${node.ref}`;
|
|
49
|
+
case 'RangeRef':
|
|
50
|
+
return `${formatSheetPrefix(node.sheetName)}${node.start}:${node.end}`;
|
|
51
|
+
case 'UnaryExpr':
|
|
52
|
+
return `${node.operator}${serializeFormula(node.argument, 6)}`;
|
|
53
|
+
case 'CallExpr':
|
|
54
|
+
return `${node.callee}(${node.args.map((arg) => serializeFormula(arg)).join(',')})`;
|
|
55
|
+
case 'InvokeExpr': {
|
|
56
|
+
const callee = node.callee.kind === 'CallExpr' || node.callee.kind === 'InvokeExpr'
|
|
57
|
+
? serializeFormula(node.callee)
|
|
58
|
+
: `(${serializeFormula(node.callee)})`;
|
|
59
|
+
return `${callee}(${node.args.map((arg) => serializeFormula(arg)).join(',')})`;
|
|
60
|
+
}
|
|
61
|
+
case 'BinaryExpr': {
|
|
62
|
+
const precedence = BINARY_PRECEDENCE[node.operator];
|
|
63
|
+
const isRightAssociative = node.operator === '^';
|
|
64
|
+
const left = serializeFormula(node.left, precedence, 'left');
|
|
65
|
+
const right = serializeFormula(node.right, precedence, 'right');
|
|
66
|
+
const output = `${left}${node.operator}${right}`;
|
|
67
|
+
const needsParens = precedence < parentPrecedence ||
|
|
68
|
+
(precedence === parentPrecedence &&
|
|
69
|
+
((parentAssociativity === 'left' && isRightAssociative) || (parentAssociativity === 'right' && !isRightAssociative)));
|
|
70
|
+
return needsParens ? `(${output})` : output;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=formula-serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula-serializer.js","sourceRoot":"","sources":["../src/formula-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AAEpE,MAAM,iBAAiB,GAA+C;IACpE,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;CACP,CAAA;AAED,MAAM,kBAAkB,GAA2B;IACjD,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO;IACxB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ;IAC1B,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS;IAC3B,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM;IACtB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS;IAC5B,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS;IAC5B,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS;IAC5B,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,WAAW;CACjC,CAAA;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAiB,EAAE,gBAAgB,GAAG,CAAC,EAAE,sBAA+C,IAAI;IAC3H,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3B,KAAK,gBAAgB;YACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;QACtC,KAAK,eAAe;YAClB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAA;QAChD,KAAK,cAAc;YACjB,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA;QACnD,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,KAAK,eAAe;YAClB,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,GAAG,CAAA;QAChD,KAAK,SAAS;YACZ,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1D,KAAK,UAAU;YACb,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAA;QAC3D,KAAK,WAAW;YACd,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1D,KAAK,QAAQ;YACX,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1D,KAAK,UAAU;YACb,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;QACxE,KAAK,WAAW;YACd,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAA;QAChE,KAAK,UAAU;YACb,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;QACrF,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;gBAClE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/B,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAA;YAC1C,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;QAChF,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACnD,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAA;YAChD,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;YAC5D,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAC/D,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAA;YAChD,MAAM,WAAW,GACf,UAAU,GAAG,gBAAgB;gBAC7B,CAAC,UAAU,KAAK,gBAAgB;oBAC9B,CAAC,CAAC,mBAAmB,KAAK,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;YACzH,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;QAC7C,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CompiledFormula } from './compiler.js';
|
|
2
|
+
export interface RenamedCompiledFormula {
|
|
3
|
+
source: string;
|
|
4
|
+
compiled: CompiledFormula;
|
|
5
|
+
reusedProgram: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface CompiledFormulaSheetRenameMetadataResult {
|
|
8
|
+
compiled: CompiledFormula;
|
|
9
|
+
sourceChanged: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function renameFormulaSheetReferences(source: string, oldSheetName: string, newSheetName: string): string;
|
|
12
|
+
export declare function renameCompiledFormulaSheetReferences(compiled: CompiledFormula, oldSheetName: string, newSheetName: string): RenamedCompiledFormula;
|
|
13
|
+
export declare function renameCompiledFormulaSheetReferenceMetadata(compiled: CompiledFormula, oldSheetName: string, newSheetName: string): CompiledFormulaSheetRenameMetadataResult;
|
|
14
|
+
export declare function renameCompiledFormulaSheetReferenceMetadataInPlace(compiled: CompiledFormula, oldSheetName: string, newSheetName: string): boolean;
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { parseFormula } from './parser.js';
|
|
2
|
+
import { serializeFormula } from './formula-serializer.js';
|
|
3
|
+
import { quoteSheetNameIfNeeded } from './translation-reference-utils.js';
|
|
4
|
+
export function renameFormulaSheetReferences(source, oldSheetName, newSheetName) {
|
|
5
|
+
const ast = parseFormula(source);
|
|
6
|
+
return serializeFormula(renameNodeSheetReferences(ast, oldSheetName, newSheetName));
|
|
7
|
+
}
|
|
8
|
+
export function renameCompiledFormulaSheetReferences(compiled, oldSheetName, newSheetName) {
|
|
9
|
+
const currentAst = compiled.astMatchesSource === false ? parseFormula(compiled.source) : compiled.ast;
|
|
10
|
+
const currentOptimizedAst = compiled.astMatchesSource === false ? currentAst : compiled.optimizedAst === compiled.ast ? currentAst : compiled.optimizedAst;
|
|
11
|
+
const renamedAst = renameNodeSheetReferences(currentAst, oldSheetName, newSheetName);
|
|
12
|
+
const renamedOptimizedAst = currentOptimizedAst === currentAst ? renamedAst : renameNodeSheetReferences(currentOptimizedAst, oldSheetName, newSheetName);
|
|
13
|
+
const source = serializeFormula(renamedAst);
|
|
14
|
+
return {
|
|
15
|
+
source,
|
|
16
|
+
compiled: {
|
|
17
|
+
...compiled,
|
|
18
|
+
source,
|
|
19
|
+
ast: renamedAst,
|
|
20
|
+
optimizedAst: renamedOptimizedAst,
|
|
21
|
+
astMatchesSource: true,
|
|
22
|
+
deps: compiled.deps.map((dependency) => renameQualifiedReferenceSheet(dependency, oldSheetName, newSheetName)),
|
|
23
|
+
...(compiled.parsedDeps
|
|
24
|
+
? {
|
|
25
|
+
parsedDeps: compiled.parsedDeps.map((dependency) => renameParsedDependencySheet(dependency, oldSheetName, newSheetName)),
|
|
26
|
+
}
|
|
27
|
+
: {}),
|
|
28
|
+
jsPlan: renameJsPlanSheetReferences(compiled.jsPlan, oldSheetName, newSheetName),
|
|
29
|
+
symbolicRefs: compiled.symbolicRefs.map((reference) => renameQualifiedReferenceSheet(reference, oldSheetName, newSheetName)),
|
|
30
|
+
...(compiled.parsedSymbolicRefs
|
|
31
|
+
? {
|
|
32
|
+
parsedSymbolicRefs: compiled.parsedSymbolicRefs.map((reference) => renameParsedCellReferenceSheet(reference, oldSheetName, newSheetName)),
|
|
33
|
+
}
|
|
34
|
+
: {}),
|
|
35
|
+
symbolicRanges: compiled.symbolicRanges.map((reference) => renameQualifiedReferenceSheet(reference, oldSheetName, newSheetName)),
|
|
36
|
+
...(compiled.parsedSymbolicRanges
|
|
37
|
+
? {
|
|
38
|
+
parsedSymbolicRanges: compiled.parsedSymbolicRanges.map((reference) => renameParsedRangeReferenceSheet(reference, oldSheetName, newSheetName)),
|
|
39
|
+
}
|
|
40
|
+
: {}),
|
|
41
|
+
},
|
|
42
|
+
reusedProgram: true,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function renameArraySheetReferences(values, rename) {
|
|
46
|
+
let changed = false;
|
|
47
|
+
const next = values.map((value) => {
|
|
48
|
+
const renamed = rename(value);
|
|
49
|
+
if (renamed !== value) {
|
|
50
|
+
changed = true;
|
|
51
|
+
}
|
|
52
|
+
return renamed;
|
|
53
|
+
});
|
|
54
|
+
return { values: next, changed };
|
|
55
|
+
}
|
|
56
|
+
export function renameCompiledFormulaSheetReferenceMetadata(compiled, oldSheetName, newSheetName) {
|
|
57
|
+
const deps = renameArraySheetReferences(compiled.deps, (dependency) => renameQualifiedReferenceSheet(dependency, oldSheetName, newSheetName));
|
|
58
|
+
const symbolicRefs = renameArraySheetReferences(compiled.symbolicRefs, (reference) => renameQualifiedReferenceSheet(reference, oldSheetName, newSheetName));
|
|
59
|
+
const symbolicRanges = renameArraySheetReferences(compiled.symbolicRanges, (reference) => renameQualifiedReferenceSheet(reference, oldSheetName, newSheetName));
|
|
60
|
+
const parsedDeps = compiled.parsedDeps
|
|
61
|
+
? renameArraySheetReferences(compiled.parsedDeps, (dependency) => renameParsedDependencySheet(dependency, oldSheetName, newSheetName))
|
|
62
|
+
: undefined;
|
|
63
|
+
const parsedSymbolicRefs = compiled.parsedSymbolicRefs
|
|
64
|
+
? renameArraySheetReferences(compiled.parsedSymbolicRefs, (reference) => renameParsedCellReferenceSheet(reference, oldSheetName, newSheetName))
|
|
65
|
+
: undefined;
|
|
66
|
+
const parsedSymbolicRanges = compiled.parsedSymbolicRanges
|
|
67
|
+
? renameArraySheetReferences(compiled.parsedSymbolicRanges, (reference) => renameParsedRangeReferenceSheet(reference, oldSheetName, newSheetName))
|
|
68
|
+
: undefined;
|
|
69
|
+
const jsPlan = renameJsPlanSheetReferences(compiled.jsPlan, oldSheetName, newSheetName);
|
|
70
|
+
return {
|
|
71
|
+
compiled: {
|
|
72
|
+
...compiled,
|
|
73
|
+
astMatchesSource: false,
|
|
74
|
+
deps: deps.values,
|
|
75
|
+
...(parsedDeps ? { parsedDeps: parsedDeps.values } : {}),
|
|
76
|
+
jsPlan,
|
|
77
|
+
symbolicRefs: symbolicRefs.values,
|
|
78
|
+
...(parsedSymbolicRefs ? { parsedSymbolicRefs: parsedSymbolicRefs.values } : {}),
|
|
79
|
+
symbolicRanges: symbolicRanges.values,
|
|
80
|
+
...(parsedSymbolicRanges ? { parsedSymbolicRanges: parsedSymbolicRanges.values } : {}),
|
|
81
|
+
},
|
|
82
|
+
sourceChanged: deps.changed ||
|
|
83
|
+
symbolicRefs.changed ||
|
|
84
|
+
symbolicRanges.changed ||
|
|
85
|
+
(parsedDeps?.changed ?? false) ||
|
|
86
|
+
(parsedSymbolicRefs?.changed ?? false) ||
|
|
87
|
+
(parsedSymbolicRanges?.changed ?? false),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function renameCompiledFormulaSheetReferenceMetadataInPlace(compiled, oldSheetName, newSheetName) {
|
|
91
|
+
let sourceChanged = false;
|
|
92
|
+
const renameStringArrayInPlace = (values) => {
|
|
93
|
+
for (let index = 0; index < values.length; index += 1) {
|
|
94
|
+
const value = values[index];
|
|
95
|
+
const renamed = renameQualifiedReferenceSheet(value, oldSheetName, newSheetName);
|
|
96
|
+
if (renamed !== value) {
|
|
97
|
+
values[index] = renamed;
|
|
98
|
+
sourceChanged = true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
renameStringArrayInPlace(compiled.deps);
|
|
103
|
+
renameStringArrayInPlace(compiled.symbolicRefs);
|
|
104
|
+
renameStringArrayInPlace(compiled.symbolicRanges);
|
|
105
|
+
compiled.parsedDeps?.forEach((dependency) => {
|
|
106
|
+
const previousSheetName = dependency.sheetName;
|
|
107
|
+
if (previousSheetName === oldSheetName) {
|
|
108
|
+
dependency.sheetName = newSheetName;
|
|
109
|
+
sourceChanged = true;
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
compiled.parsedSymbolicRefs?.forEach((reference) => {
|
|
113
|
+
if (reference.sheetName === oldSheetName) {
|
|
114
|
+
reference.sheetName = newSheetName;
|
|
115
|
+
sourceChanged = true;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
compiled.parsedSymbolicRanges?.forEach((reference) => {
|
|
119
|
+
if (reference.sheetName === oldSheetName) {
|
|
120
|
+
reference.sheetName = newSheetName;
|
|
121
|
+
sourceChanged = true;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
if (compiled.jsPlan.length > 0) {
|
|
125
|
+
compiled.jsPlan = renameJsPlanSheetReferences(compiled.jsPlan, oldSheetName, newSheetName);
|
|
126
|
+
}
|
|
127
|
+
if (sourceChanged) {
|
|
128
|
+
compiled.astMatchesSource = false;
|
|
129
|
+
}
|
|
130
|
+
return sourceChanged;
|
|
131
|
+
}
|
|
132
|
+
function renameNodeSheetReferences(node, oldSheetName, newSheetName) {
|
|
133
|
+
switch (node.kind) {
|
|
134
|
+
case 'NumberLiteral':
|
|
135
|
+
case 'BooleanLiteral':
|
|
136
|
+
case 'StringLiteral':
|
|
137
|
+
case 'ErrorLiteral':
|
|
138
|
+
case 'NameRef':
|
|
139
|
+
case 'StructuredRef':
|
|
140
|
+
return node;
|
|
141
|
+
case 'CellRef':
|
|
142
|
+
case 'SpillRef':
|
|
143
|
+
case 'RowRef':
|
|
144
|
+
case 'ColumnRef':
|
|
145
|
+
case 'RangeRef':
|
|
146
|
+
return {
|
|
147
|
+
...node,
|
|
148
|
+
...(node.sheetName === oldSheetName ? { sheetName: newSheetName } : {}),
|
|
149
|
+
};
|
|
150
|
+
case 'UnaryExpr':
|
|
151
|
+
return {
|
|
152
|
+
...node,
|
|
153
|
+
argument: renameNodeSheetReferences(node.argument, oldSheetName, newSheetName),
|
|
154
|
+
};
|
|
155
|
+
case 'BinaryExpr':
|
|
156
|
+
return {
|
|
157
|
+
...node,
|
|
158
|
+
left: renameNodeSheetReferences(node.left, oldSheetName, newSheetName),
|
|
159
|
+
right: renameNodeSheetReferences(node.right, oldSheetName, newSheetName),
|
|
160
|
+
};
|
|
161
|
+
case 'CallExpr':
|
|
162
|
+
return {
|
|
163
|
+
...node,
|
|
164
|
+
args: node.args.map((arg) => renameNodeSheetReferences(arg, oldSheetName, newSheetName)),
|
|
165
|
+
};
|
|
166
|
+
case 'InvokeExpr':
|
|
167
|
+
return {
|
|
168
|
+
...node,
|
|
169
|
+
callee: renameNodeSheetReferences(node.callee, oldSheetName, newSheetName),
|
|
170
|
+
args: node.args.map((arg) => renameNodeSheetReferences(arg, oldSheetName, newSheetName)),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function renameQualifiedReferenceSheet(reference, oldSheetName, newSheetName) {
|
|
175
|
+
const quotedOldPrefix = `${quoteSheetNameIfNeeded(oldSheetName)}!`;
|
|
176
|
+
if (reference.startsWith(quotedOldPrefix)) {
|
|
177
|
+
return `${quoteSheetNameIfNeeded(newSheetName)}!${reference.slice(quotedOldPrefix.length)}`;
|
|
178
|
+
}
|
|
179
|
+
const rawOldPrefix = `${oldSheetName}!`;
|
|
180
|
+
return reference.startsWith(rawOldPrefix) ? `${quoteSheetNameIfNeeded(newSheetName)}!${reference.slice(rawOldPrefix.length)}` : reference;
|
|
181
|
+
}
|
|
182
|
+
function renameParsedCellReferenceSheet(reference, oldSheetName, newSheetName) {
|
|
183
|
+
return reference.sheetName === oldSheetName ? { ...reference, sheetName: newSheetName } : reference;
|
|
184
|
+
}
|
|
185
|
+
function renameParsedRangeReferenceSheet(reference, oldSheetName, newSheetName) {
|
|
186
|
+
return reference.sheetName === oldSheetName
|
|
187
|
+
? {
|
|
188
|
+
...reference,
|
|
189
|
+
sheetName: newSheetName,
|
|
190
|
+
address: formatQualifiedRangeReference(newSheetName, reference.startAddress, reference.endAddress),
|
|
191
|
+
}
|
|
192
|
+
: reference;
|
|
193
|
+
}
|
|
194
|
+
function renameParsedDependencySheet(dependency, oldSheetName, newSheetName) {
|
|
195
|
+
return dependency.kind === 'cell'
|
|
196
|
+
? renameParsedCellReferenceSheet(dependency, oldSheetName, newSheetName)
|
|
197
|
+
: renameParsedRangeReferenceSheet(dependency, oldSheetName, newSheetName);
|
|
198
|
+
}
|
|
199
|
+
function renameReferenceOperandSheet(operand, oldSheetName, newSheetName) {
|
|
200
|
+
return operand?.sheetName === oldSheetName ? { ...operand, sheetName: newSheetName } : operand;
|
|
201
|
+
}
|
|
202
|
+
function renameJsPlanSheetReferences(plan, oldSheetName, newSheetName) {
|
|
203
|
+
return plan.map((instruction) => {
|
|
204
|
+
switch (instruction.opcode) {
|
|
205
|
+
case 'push-cell':
|
|
206
|
+
case 'push-range':
|
|
207
|
+
case 'lookup-exact-match':
|
|
208
|
+
case 'lookup-approximate-match':
|
|
209
|
+
return instruction.sheetName === oldSheetName ? { ...instruction, sheetName: newSheetName } : instruction;
|
|
210
|
+
case 'push-lambda':
|
|
211
|
+
return { ...instruction, body: renameJsPlanSheetReferences(instruction.body, oldSheetName, newSheetName) };
|
|
212
|
+
case 'call':
|
|
213
|
+
return instruction.argRefs
|
|
214
|
+
? {
|
|
215
|
+
...instruction,
|
|
216
|
+
argRefs: instruction.argRefs.map((operand) => renameReferenceOperandSheet(operand, oldSheetName, newSheetName)),
|
|
217
|
+
}
|
|
218
|
+
: instruction;
|
|
219
|
+
case 'begin-scope':
|
|
220
|
+
case 'binary':
|
|
221
|
+
case 'bind-name':
|
|
222
|
+
case 'end-scope':
|
|
223
|
+
case 'invoke':
|
|
224
|
+
case 'jump':
|
|
225
|
+
case 'jump-if-false':
|
|
226
|
+
case 'push-boolean':
|
|
227
|
+
case 'push-error':
|
|
228
|
+
case 'push-name':
|
|
229
|
+
case 'push-number':
|
|
230
|
+
case 'push-string':
|
|
231
|
+
case 'return':
|
|
232
|
+
case 'unary':
|
|
233
|
+
return instruction;
|
|
234
|
+
default:
|
|
235
|
+
return instruction;
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
function formatQualifiedRangeReference(sheetName, start, end) {
|
|
240
|
+
const prefix = sheetName ? `${quoteSheetNameIfNeeded(sheetName)}!` : '';
|
|
241
|
+
return `${prefix}${start}:${end}`;
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=formula-sheet-rename.js.map
|