@bilig/headless 0.9.1 → 0.9.2
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/README.md +26 -0
- package/dist/work-paper-formula-diagnostics.d.ts +18 -0
- package/dist/work-paper-formula-diagnostics.js +301 -0
- package/dist/work-paper-formula-diagnostics.js.map +1 -0
- package/dist/work-paper-public-surface.d.ts +3 -1
- package/dist/work-paper-public-surface.js +17 -0
- package/dist/work-paper-public-surface.js.map +1 -1
- package/dist/work-paper-types.d.ts +16 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -172,6 +172,11 @@ links, shareable copy, and overclaim guardrails, use the root
|
|
|
172
172
|
- A string beginning with `=` is a formula. Other strings are literal text.
|
|
173
173
|
`null` clears a cell.
|
|
174
174
|
- `getCellValue()` returns a computed `CellValue`.
|
|
175
|
+
- `getCellDisplayValue()` returns the formatted user-facing text for a cell,
|
|
176
|
+
including workbook error text such as `#VALUE!`.
|
|
177
|
+
- `getCellFormulaDiagnostics()` returns structured formula diagnostics for
|
|
178
|
+
supported error families, including financial cash-flow/date validation for
|
|
179
|
+
`XIRR()` and `XNPV()`.
|
|
175
180
|
- `getCellFormula()` returns the formula text when the cell is a formula.
|
|
176
181
|
- `getCellSerialized()` returns the persisted cell input shape.
|
|
177
182
|
- Mutation methods return WorkPaper change arrays. Empty arrays are valid when
|
|
@@ -209,6 +214,27 @@ workbook.getSheetValues(sheet)
|
|
|
209
214
|
workbook.getSheetSerialized(sheet)
|
|
210
215
|
```
|
|
211
216
|
|
|
217
|
+
Inspect a formula error:
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
const value = workbook.getCellValue(at(7, 1))
|
|
221
|
+
const display = workbook.getCellDisplayValue(at(7, 1))
|
|
222
|
+
const diagnostics = workbook.getCellFormulaDiagnostics(at(7, 1))
|
|
223
|
+
|
|
224
|
+
console.log(value) // Raw CellValue protocol object
|
|
225
|
+
console.log(display) // "#VALUE!"
|
|
226
|
+
console.log(diagnostics[0]?.code) // e.g. "financial-unsupported-date-coercion"
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Finance date inputs:
|
|
230
|
+
|
|
231
|
+
`XIRR(values, dates, [guess])` and `XNPV(rate, values, dates)` accept numeric
|
|
232
|
+
Excel serial dates in `dates`. Text labels and text date strings are not
|
|
233
|
+
coerced in headless formulas; they evaluate to `#VALUE!`. Use
|
|
234
|
+
`getCellFormulaDiagnostics()` to distinguish invalid date ranges, mismatched
|
|
235
|
+
range dimensions, invalid cash-flow values, missing positive or negative cash
|
|
236
|
+
flows, invalid rates/guesses, and solver non-convergence.
|
|
237
|
+
|
|
212
238
|
Batch related edits:
|
|
213
239
|
|
|
214
240
|
```ts
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CellValue } from '@bilig/protocol';
|
|
2
|
+
import type { WorkPaperCellAddress, WorkPaperCellRange, WorkPaperFormulaDiagnostic } from './work-paper-types.js';
|
|
3
|
+
interface WorkPaperFormulaDiagnosticHooks {
|
|
4
|
+
readonly getCellValue: (address: WorkPaperCellAddress) => CellValue;
|
|
5
|
+
readonly getCellValueFormat: (address: WorkPaperCellAddress) => string | undefined;
|
|
6
|
+
readonly getCellFormula: (address: WorkPaperCellAddress) => string | undefined;
|
|
7
|
+
readonly getRangeValues: (range: WorkPaperCellRange) => CellValue[][];
|
|
8
|
+
readonly getSheetId: (sheetName: string) => number | undefined;
|
|
9
|
+
readonly getSheetName: (sheetId: number) => string | undefined;
|
|
10
|
+
readonly simpleCellAddressToString: (address: WorkPaperCellAddress, options?: {
|
|
11
|
+
includeSheetName?: boolean;
|
|
12
|
+
}) => string;
|
|
13
|
+
readonly simpleCellRangeToString: (range: WorkPaperCellRange, options?: {
|
|
14
|
+
includeSheetName?: boolean;
|
|
15
|
+
}) => string;
|
|
16
|
+
}
|
|
17
|
+
export declare function collectWorkPaperFormulaDiagnostics(address: WorkPaperCellAddress, hooks: WorkPaperFormulaDiagnosticHooks): WorkPaperFormulaDiagnostic[];
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { ValueTag, formatCellDisplayValue, formatErrorCode } from '@bilig/protocol';
|
|
2
|
+
import { excelSerialToDateParts, parseCellAddress, parseFormula, parseRangeAddress } from '@bilig/formula';
|
|
3
|
+
function readFinanceFunctionName(callee) {
|
|
4
|
+
const normalized = callee.toUpperCase();
|
|
5
|
+
if (normalized === 'XIRR' || normalized === 'XNPV') {
|
|
6
|
+
return normalized;
|
|
7
|
+
}
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
function isFinanceCall(node) {
|
|
11
|
+
return node.kind === 'CallExpr' && readFinanceFunctionName(node.callee) !== undefined;
|
|
12
|
+
}
|
|
13
|
+
function buildDiagnostic(base, diagnostic) {
|
|
14
|
+
return {
|
|
15
|
+
severity: 'error',
|
|
16
|
+
address: base.address,
|
|
17
|
+
sheetName: base.sheetName,
|
|
18
|
+
a1: base.a1,
|
|
19
|
+
...(base.formula !== undefined ? { formula: base.formula } : {}),
|
|
20
|
+
...(base.functionName !== undefined ? { functionName: base.functionName } : {}),
|
|
21
|
+
...(base.errorCode !== undefined ? { errorCode: base.errorCode } : {}),
|
|
22
|
+
...(base.errorText !== undefined ? { errorText: base.errorText } : {}),
|
|
23
|
+
...diagnostic,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function displayValue(value, format) {
|
|
27
|
+
const rendered = formatCellDisplayValue(value, format);
|
|
28
|
+
return rendered === '' ? '<blank>' : rendered;
|
|
29
|
+
}
|
|
30
|
+
function describeCellValue(value, format) {
|
|
31
|
+
switch (value.tag) {
|
|
32
|
+
case ValueTag.Empty:
|
|
33
|
+
return 'blank';
|
|
34
|
+
case ValueTag.Boolean:
|
|
35
|
+
return `boolean ${value.value ? 'TRUE' : 'FALSE'}`;
|
|
36
|
+
case ValueTag.String:
|
|
37
|
+
return `text "${value.value}"`;
|
|
38
|
+
case ValueTag.Error:
|
|
39
|
+
return `error ${formatErrorCode(value.code)}`;
|
|
40
|
+
case ValueTag.Number:
|
|
41
|
+
return `number ${displayValue(value, format)}`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function resolveRangeNode(node, ownerSheetName, hooks) {
|
|
45
|
+
if (node.refKind !== 'cells') {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const parsed = parseRangeAddress(`${node.start}:${node.end}`, node.sheetName ?? ownerSheetName);
|
|
49
|
+
if (parsed.kind !== 'cells') {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const sheetName = parsed.sheetName ?? ownerSheetName;
|
|
53
|
+
const sheet = hooks.getSheetId(sheetName);
|
|
54
|
+
if (sheet === undefined) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const range = {
|
|
58
|
+
start: { sheet, row: parsed.start.row, col: parsed.start.col },
|
|
59
|
+
end: { sheet, row: parsed.end.row, col: parsed.end.col },
|
|
60
|
+
};
|
|
61
|
+
const matrix = hooks.getRangeValues(range);
|
|
62
|
+
const values = [];
|
|
63
|
+
const addresses = [];
|
|
64
|
+
for (let rowOffset = 0; rowOffset < matrix.length; rowOffset += 1) {
|
|
65
|
+
const row = matrix[rowOffset] ?? [];
|
|
66
|
+
for (let colOffset = 0; colOffset < (row.length || range.end.col - range.start.col + 1); colOffset += 1) {
|
|
67
|
+
values.push(row[colOffset] ?? { tag: ValueTag.Empty });
|
|
68
|
+
addresses.push({ sheet, row: range.start.row + rowOffset, col: range.start.col + colOffset });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
rows: range.end.row - range.start.row + 1,
|
|
73
|
+
cols: range.end.col - range.start.col + 1,
|
|
74
|
+
values,
|
|
75
|
+
addresses,
|
|
76
|
+
reference: hooks.simpleCellRangeToString(range, { includeSheetName: true }),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function resolveCellNode(node, ownerSheetName, hooks) {
|
|
80
|
+
const parsed = parseCellAddress(node.ref, node.sheetName ?? ownerSheetName);
|
|
81
|
+
const sheetName = parsed.sheetName ?? ownerSheetName;
|
|
82
|
+
const sheet = hooks.getSheetId(sheetName);
|
|
83
|
+
if (sheet === undefined) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
const address = { sheet, row: parsed.row, col: parsed.col };
|
|
87
|
+
return {
|
|
88
|
+
rows: 1,
|
|
89
|
+
cols: 1,
|
|
90
|
+
values: [hooks.getCellValue(address)],
|
|
91
|
+
addresses: [address],
|
|
92
|
+
reference: hooks.simpleCellAddressToString(address, { includeSheetName: true }),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function resolveCellArgument(node, ownerSheetName, hooks) {
|
|
96
|
+
if (node?.kind === 'RangeRef') {
|
|
97
|
+
return resolveRangeNode(node, ownerSheetName, hooks);
|
|
98
|
+
}
|
|
99
|
+
if (node?.kind === 'CellRef') {
|
|
100
|
+
return resolveCellNode(node, ownerSheetName, hooks);
|
|
101
|
+
}
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
function resolveScalarNumber(node, ownerSheetName, hooks) {
|
|
105
|
+
if (node === undefined) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
if (node.kind === 'NumberLiteral') {
|
|
109
|
+
return Number.isFinite(node.value) ? node.value : undefined;
|
|
110
|
+
}
|
|
111
|
+
if (node.kind !== 'CellRef') {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
const resolved = resolveCellNode(node, ownerSheetName, hooks);
|
|
115
|
+
const value = resolved?.values[0];
|
|
116
|
+
return value?.tag === ValueTag.Number && Number.isFinite(value.value) ? value.value : undefined;
|
|
117
|
+
}
|
|
118
|
+
function firstInvalidNumber(cells) {
|
|
119
|
+
for (let index = 0; index < cells.values.length; index += 1) {
|
|
120
|
+
const value = cells.values[index];
|
|
121
|
+
if (value.tag !== ValueTag.Number || !Number.isFinite(value.value)) {
|
|
122
|
+
return { value, address: cells.addresses[index] };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
function firstInvalidDateSerial(cells) {
|
|
128
|
+
for (let index = 0; index < cells.values.length; index += 1) {
|
|
129
|
+
const value = cells.values[index];
|
|
130
|
+
if (value.tag !== ValueTag.Number) {
|
|
131
|
+
return { value, address: cells.addresses[index], unsupportedCoercion: value.tag === ValueTag.String };
|
|
132
|
+
}
|
|
133
|
+
if (!Number.isFinite(value.value) || excelSerialToDateParts(value.value) === undefined) {
|
|
134
|
+
return { value, address: cells.addresses[index], unsupportedCoercion: false };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
function numericValues(cells) {
|
|
140
|
+
return cells.values.map((value) => (value.tag === ValueTag.Number ? value.value : Number.NaN));
|
|
141
|
+
}
|
|
142
|
+
function dateSerialValues(cells) {
|
|
143
|
+
return cells.values.map((value) => (value.tag === ValueTag.Number ? Math.trunc(value.value) : Number.NaN));
|
|
144
|
+
}
|
|
145
|
+
function diagnoseFinanceCall(call, base, ownerSheetName, hooks) {
|
|
146
|
+
const functionName = readFinanceFunctionName(call.callee);
|
|
147
|
+
if (functionName === undefined) {
|
|
148
|
+
return [
|
|
149
|
+
buildDiagnostic(base, {
|
|
150
|
+
code: 'formula-error',
|
|
151
|
+
message: `Formula evaluated to ${base.errorText ?? 'an error'}.`,
|
|
152
|
+
}),
|
|
153
|
+
];
|
|
154
|
+
}
|
|
155
|
+
const valuesArg = functionName === 'XNPV' ? call.args[1] : call.args[0];
|
|
156
|
+
const datesArg = functionName === 'XNPV' ? call.args[2] : call.args[1];
|
|
157
|
+
const values = resolveCellArgument(valuesArg, ownerSheetName, hooks);
|
|
158
|
+
const dates = resolveCellArgument(datesArg, ownerSheetName, hooks);
|
|
159
|
+
const financeBase = { ...base, functionName };
|
|
160
|
+
if (!values || !dates) {
|
|
161
|
+
return [
|
|
162
|
+
buildDiagnostic(financeBase, {
|
|
163
|
+
code: 'financial-invalid-argument',
|
|
164
|
+
message: `${functionName} diagnostics require direct cell or cell-range cash-flow and date arguments.`,
|
|
165
|
+
}),
|
|
166
|
+
];
|
|
167
|
+
}
|
|
168
|
+
if (values.rows !== dates.rows || values.cols !== dates.cols) {
|
|
169
|
+
return [
|
|
170
|
+
buildDiagnostic(financeBase, {
|
|
171
|
+
code: 'financial-mismatched-dimensions',
|
|
172
|
+
message: `${functionName} values range ${values.reference} is ${values.rows}x${values.cols}, but dates range ${dates.reference} is ${dates.rows}x${dates.cols}.`,
|
|
173
|
+
references: [values.reference, dates.reference],
|
|
174
|
+
}),
|
|
175
|
+
];
|
|
176
|
+
}
|
|
177
|
+
const invalidCashFlow = firstInvalidNumber(values);
|
|
178
|
+
if (invalidCashFlow) {
|
|
179
|
+
const cell = hooks.simpleCellAddressToString(invalidCashFlow.address, { includeSheetName: true });
|
|
180
|
+
return [
|
|
181
|
+
buildDiagnostic(financeBase, {
|
|
182
|
+
code: 'financial-invalid-cash-flow',
|
|
183
|
+
message: `${functionName} cash-flow range ${values.reference} contains ${describeCellValue(invalidCashFlow.value, hooks.getCellValueFormat(invalidCashFlow.address))} at ${cell}; every cash-flow cell must be numeric.`,
|
|
184
|
+
references: [values.reference, cell],
|
|
185
|
+
}),
|
|
186
|
+
];
|
|
187
|
+
}
|
|
188
|
+
const invalidDate = firstInvalidDateSerial(dates);
|
|
189
|
+
if (invalidDate) {
|
|
190
|
+
const cell = hooks.simpleCellAddressToString(invalidDate.address, { includeSheetName: true });
|
|
191
|
+
const code = invalidDate.unsupportedCoercion ? 'financial-unsupported-date-coercion' : 'financial-invalid-date-range';
|
|
192
|
+
const text = invalidDate.unsupportedCoercion
|
|
193
|
+
? `${functionName} date range ${dates.reference} contains ${describeCellValue(invalidDate.value, hooks.getCellValueFormat(invalidDate.address))} at ${cell}. Use numeric Excel serial dates; text date coercion is not supported for headless ${functionName}.`
|
|
194
|
+
: `${functionName} date range ${dates.reference} contains ${describeCellValue(invalidDate.value, hooks.getCellValueFormat(invalidDate.address))} at ${cell}; dates must be valid numeric Excel serial dates.`;
|
|
195
|
+
return [
|
|
196
|
+
buildDiagnostic(financeBase, {
|
|
197
|
+
code,
|
|
198
|
+
message: text,
|
|
199
|
+
references: [dates.reference, cell],
|
|
200
|
+
}),
|
|
201
|
+
];
|
|
202
|
+
}
|
|
203
|
+
const cashFlows = numericValues(values);
|
|
204
|
+
if (!cashFlows.some((value) => value > 0)) {
|
|
205
|
+
return [
|
|
206
|
+
buildDiagnostic(financeBase, {
|
|
207
|
+
code: 'financial-missing-positive-cash-flow',
|
|
208
|
+
message: `${functionName} cash-flow range ${values.reference} must contain at least one positive value.`,
|
|
209
|
+
references: [values.reference],
|
|
210
|
+
}),
|
|
211
|
+
];
|
|
212
|
+
}
|
|
213
|
+
if (!cashFlows.some((value) => value < 0)) {
|
|
214
|
+
return [
|
|
215
|
+
buildDiagnostic(financeBase, {
|
|
216
|
+
code: 'financial-missing-negative-cash-flow',
|
|
217
|
+
message: `${functionName} cash-flow range ${values.reference} must contain at least one negative value.`,
|
|
218
|
+
references: [values.reference],
|
|
219
|
+
}),
|
|
220
|
+
];
|
|
221
|
+
}
|
|
222
|
+
const dateSerials = dateSerialValues(dates);
|
|
223
|
+
const firstDate = dateSerials[0];
|
|
224
|
+
if (firstDate !== undefined && dateSerials.some((date) => date < firstDate)) {
|
|
225
|
+
return [
|
|
226
|
+
buildDiagnostic(financeBase, {
|
|
227
|
+
code: 'financial-invalid-date-range',
|
|
228
|
+
message: `${functionName} date range ${dates.reference} contains a date before the first date; XIRR/XNPV require later cash-flow dates to be on or after the first date.`,
|
|
229
|
+
references: [dates.reference],
|
|
230
|
+
}),
|
|
231
|
+
];
|
|
232
|
+
}
|
|
233
|
+
if (functionName === 'XNPV') {
|
|
234
|
+
const rate = resolveScalarNumber(call.args[0], ownerSheetName, hooks);
|
|
235
|
+
if (rate === undefined || rate <= -0.999999999) {
|
|
236
|
+
return [
|
|
237
|
+
buildDiagnostic(financeBase, {
|
|
238
|
+
code: 'financial-invalid-rate',
|
|
239
|
+
message: 'XNPV discount rate must be a finite numeric value greater than -100%.',
|
|
240
|
+
}),
|
|
241
|
+
];
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (functionName === 'XIRR' && call.args[2] !== undefined) {
|
|
245
|
+
const guess = resolveScalarNumber(call.args[2], ownerSheetName, hooks);
|
|
246
|
+
if (guess === undefined) {
|
|
247
|
+
return [
|
|
248
|
+
buildDiagnostic(financeBase, {
|
|
249
|
+
code: 'financial-invalid-rate',
|
|
250
|
+
message: 'XIRR optional guess must be a finite numeric value.',
|
|
251
|
+
}),
|
|
252
|
+
];
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return [
|
|
256
|
+
buildDiagnostic(financeBase, {
|
|
257
|
+
code: 'financial-nonconvergence',
|
|
258
|
+
message: `${functionName} inputs are structurally valid, but the solver did not find a valid rate for the supplied cash flows and dates.`,
|
|
259
|
+
references: [values.reference, dates.reference],
|
|
260
|
+
}),
|
|
261
|
+
];
|
|
262
|
+
}
|
|
263
|
+
export function collectWorkPaperFormulaDiagnostics(address, hooks) {
|
|
264
|
+
const value = hooks.getCellValue(address);
|
|
265
|
+
const formula = hooks.getCellFormula(address);
|
|
266
|
+
if (value.tag !== ValueTag.Error || formula === undefined) {
|
|
267
|
+
return [];
|
|
268
|
+
}
|
|
269
|
+
const sheetName = hooks.getSheetName(address.sheet) ?? String(address.sheet);
|
|
270
|
+
const a1 = hooks.simpleCellAddressToString(address, { includeSheetName: false });
|
|
271
|
+
const base = {
|
|
272
|
+
address,
|
|
273
|
+
sheetName,
|
|
274
|
+
a1,
|
|
275
|
+
formula,
|
|
276
|
+
errorCode: value.code,
|
|
277
|
+
errorText: formatErrorCode(value.code),
|
|
278
|
+
};
|
|
279
|
+
let parsed;
|
|
280
|
+
try {
|
|
281
|
+
parsed = parseFormula(formula);
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
return [
|
|
285
|
+
buildDiagnostic(base, {
|
|
286
|
+
code: 'formula-error',
|
|
287
|
+
message: `Formula evaluated to ${formatErrorCode(value.code)}.`,
|
|
288
|
+
}),
|
|
289
|
+
];
|
|
290
|
+
}
|
|
291
|
+
if (isFinanceCall(parsed)) {
|
|
292
|
+
return diagnoseFinanceCall(parsed, base, sheetName, hooks);
|
|
293
|
+
}
|
|
294
|
+
return [
|
|
295
|
+
buildDiagnostic(base, {
|
|
296
|
+
code: 'formula-error',
|
|
297
|
+
message: `Formula evaluated to ${formatErrorCode(value.code)}.`,
|
|
298
|
+
}),
|
|
299
|
+
];
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=work-paper-formula-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-formula-diagnostics.js","sourceRoot":"","sources":["../src/work-paper-formula-diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { SpreadsheetEngine } from '@bilig/core';
|
|
|
2
2
|
import type { CellValue } from '@bilig/protocol';
|
|
3
3
|
import type { WorkPaperEmitter } from './work-paper-emitter.js';
|
|
4
4
|
import { type InternalFunctionBinding } from './work-paper-function-registry.js';
|
|
5
|
-
import type { RawCellContent, SerializedWorkPaperNamedExpression, WorkPaperAddressMappingAdapter, WorkPaperArrayMappingAdapter, WorkPaperCellAddress, WorkPaperCellRange, WorkPaperColumnSearchAdapter, WorkPaperConfig, WorkPaperDateTime, WorkPaperDependencyGraphAdapter, WorkPaperEvaluatorAdapter, WorkPaperFunctionPluginDefinition, WorkPaperFunctionTranslationsPackage, WorkPaperGraphAdapter, WorkPaperLanguagePackage, WorkPaperLazilyTransformingAstServiceAdapter, WorkPaperLicenseKeyValidityState, WorkPaperRangeMappingAdapter, WorkPaperSheet, WorkPaperSheetMappingAdapter, WorkPaperEngineCounters, WorkPaperDetailedListener, WorkPaperEventName, WorkPaperInternals, WorkPaperListener } from './work-paper-types.js';
|
|
5
|
+
import type { RawCellContent, SerializedWorkPaperNamedExpression, WorkPaperAddressMappingAdapter, WorkPaperArrayMappingAdapter, WorkPaperCellAddress, WorkPaperCellRange, WorkPaperFormulaDiagnostic, WorkPaperColumnSearchAdapter, WorkPaperConfig, WorkPaperDateTime, WorkPaperDependencyGraphAdapter, WorkPaperEvaluatorAdapter, WorkPaperFunctionPluginDefinition, WorkPaperFunctionTranslationsPackage, WorkPaperGraphAdapter, WorkPaperLanguagePackage, WorkPaperLazilyTransformingAstServiceAdapter, WorkPaperLicenseKeyValidityState, WorkPaperRangeMappingAdapter, WorkPaperSheet, WorkPaperSheetMappingAdapter, WorkPaperEngineCounters, WorkPaperDetailedListener, WorkPaperEventName, WorkPaperInternals, WorkPaperListener } from './work-paper-types.js';
|
|
6
6
|
import { WorkPaperCapabilitySurface } from './work-paper-capability-surface.js';
|
|
7
7
|
export declare abstract class WorkPaperPublicSurface extends WorkPaperCapabilitySurface {
|
|
8
8
|
static version: string;
|
|
@@ -62,6 +62,8 @@ export declare abstract class WorkPaperPublicSurface extends WorkPaperCapability
|
|
|
62
62
|
resetPerformanceCounters(): void;
|
|
63
63
|
normalizeFormula(formula: string): string;
|
|
64
64
|
calculateFormula(formula: string, scope?: number): CellValue | CellValue[][];
|
|
65
|
+
getCellDisplayValue(address: WorkPaperCellAddress): string;
|
|
66
|
+
getCellFormulaDiagnostics(address: WorkPaperCellAddress): WorkPaperFormulaDiagnostic[];
|
|
65
67
|
getNamedExpressionsFromFormula(formula: string): string[];
|
|
66
68
|
validateFormula(formula: string): boolean;
|
|
67
69
|
getRegisteredFunctionNames(languageCode?: string): string[];
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { formatCellDisplayValue } from '@bilig/protocol';
|
|
1
2
|
import { checkWorkPaperLicenseKeyValidity, cloneConfig, DEFAULT_CONFIG } from './work-paper-config.js';
|
|
2
3
|
import { numberToWorkPaperDate, numberToWorkPaperDateTime, numberToWorkPaperTime } from './work-paper-date-time.js';
|
|
3
4
|
import { calculateWorkPaperFormula, getWorkPaperNamedExpressionsFromFormula, normalizeWorkPaperFormula, validateWorkPaperFormula, } from './work-paper-formula-analysis.js';
|
|
5
|
+
import { collectWorkPaperFormulaDiagnostics } from './work-paper-formula-diagnostics.js';
|
|
4
6
|
import { getCapturedWorkPaperFunctionPlugin, getCapturedWorkPaperFunctionPlugins, listCapturedWorkPaperFunctionNames, } from './work-paper-function-registry.js';
|
|
5
7
|
import { getRegisteredWorkPaperFunctionPluginById, getRegisteredWorkPaperFunctionPluginsById, readRegisteredWorkPaperLanguage, } from './work-paper-static-registry.js';
|
|
6
8
|
import { DEFAULT_WORKPAPER_CONFIG, getAllWorkPaperStaticFunctionPlugins, getRegisteredWorkPaperStaticFunctionNames, getRegisteredWorkPaperStaticLanguageCodes, getWorkPaperStaticFunctionPlugin, getWorkPaperStaticLanguage, registerWorkPaperStaticFunction, registerWorkPaperStaticFunctionPlugin, registerWorkPaperStaticLanguage, unregisterAllWorkPaperStaticFunctions, unregisterWorkPaperStaticFunction, unregisterWorkPaperStaticFunctionPlugin, unregisterWorkPaperStaticLanguage, workPaperLanguages, WORKPAPER_BUILD_DATE, WORKPAPER_RELEASE_DATE, WORKPAPER_VERSION, } from './work-paper-static-api.js';
|
|
@@ -126,6 +128,21 @@ export class WorkPaperPublicSurface extends WorkPaperCapabilitySurface {
|
|
|
126
128
|
messageOf: (error, fallback) => this.messageOf(error, fallback),
|
|
127
129
|
});
|
|
128
130
|
}
|
|
131
|
+
getCellDisplayValue(address) {
|
|
132
|
+
return formatCellDisplayValue(this.getCellValue(address), this.getCellValueFormat(address));
|
|
133
|
+
}
|
|
134
|
+
getCellFormulaDiagnostics(address) {
|
|
135
|
+
return collectWorkPaperFormulaDiagnostics(address, {
|
|
136
|
+
getCellValue: (target) => this.getCellValue(target),
|
|
137
|
+
getCellValueFormat: (target) => this.getCellValueFormat(target),
|
|
138
|
+
getCellFormula: (target) => this.getCellFormula(target),
|
|
139
|
+
getRangeValues: (range) => this.getRangeValues(range),
|
|
140
|
+
getSheetId: (sheetName) => this.sheetMapping.getSheetId(sheetName),
|
|
141
|
+
getSheetName: (sheetId) => this.sheetMapping.getSheetName(sheetId),
|
|
142
|
+
simpleCellAddressToString: (target, options) => this.simpleCellAddressToString(target, options),
|
|
143
|
+
simpleCellRangeToString: (range, options) => this.simpleCellRangeToString(range, options),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
129
146
|
getNamedExpressionsFromFormula(formula) {
|
|
130
147
|
return getWorkPaperNamedExpressionsFromFormula(formula, { messageOf: (error, fallback) => this.messageOf(error, fallback) });
|
|
131
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-paper-public-surface.js","sourceRoot":"","sources":["../src/work-paper-public-surface.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"work-paper-public-surface.js","sourceRoot":"","sources":["../src/work-paper-public-surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CellValue, LiteralInput, RecalcMetrics } from '@bilig/protocol';
|
|
1
|
+
import type { CellValue, ErrorCode, LiteralInput, RecalcMetrics } from '@bilig/protocol';
|
|
2
2
|
import type { EvaluationResult } from '@bilig/formula';
|
|
3
3
|
import type { EngineCounters } from '@bilig/core';
|
|
4
4
|
export type RawCellContent = LiteralInput | string;
|
|
@@ -202,6 +202,21 @@ export type WorkPaperDetailedListener<EventName extends WorkPaperEventName> = (p
|
|
|
202
202
|
export type WorkPaperCellType = 'EMPTY' | 'VALUE' | 'FORMULA' | 'ARRAY';
|
|
203
203
|
export type WorkPaperCellValueType = 'EMPTY' | 'NUMBER' | 'STRING' | 'BOOLEAN' | 'ERROR';
|
|
204
204
|
export type WorkPaperCellValueDetailedType = WorkPaperCellValueType | 'DATE' | 'TIME' | 'DATETIME';
|
|
205
|
+
export type WorkPaperFormulaDiagnosticSeverity = 'error' | 'warning' | 'info';
|
|
206
|
+
export type WorkPaperFormulaDiagnosticCode = 'formula-error' | 'financial-invalid-argument' | 'financial-invalid-cash-flow' | 'financial-unsupported-date-coercion' | 'financial-invalid-date-range' | 'financial-mismatched-dimensions' | 'financial-missing-positive-cash-flow' | 'financial-missing-negative-cash-flow' | 'financial-invalid-rate' | 'financial-nonconvergence';
|
|
207
|
+
export interface WorkPaperFormulaDiagnostic {
|
|
208
|
+
severity: WorkPaperFormulaDiagnosticSeverity;
|
|
209
|
+
code: WorkPaperFormulaDiagnosticCode;
|
|
210
|
+
message: string;
|
|
211
|
+
address: WorkPaperCellAddress;
|
|
212
|
+
sheetName: string;
|
|
213
|
+
a1: string;
|
|
214
|
+
formula?: string;
|
|
215
|
+
functionName?: string;
|
|
216
|
+
errorCode?: ErrorCode;
|
|
217
|
+
errorText?: string;
|
|
218
|
+
references?: string[];
|
|
219
|
+
}
|
|
205
220
|
export type WorkPaperDependencyRef = {
|
|
206
221
|
kind: 'cell';
|
|
207
222
|
address: WorkPaperCellAddress;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bilig/headless",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "Headless spreadsheet engine and WorkPaper workbook facade for Node services, coding agents, and HyperFormula-style workflows.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
"build": "rm -rf dist tsconfig.tsbuildinfo && tsc -p tsconfig.json"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@bilig/core": "0.9.
|
|
53
|
-
"@bilig/formula": "0.9.
|
|
54
|
-
"@bilig/protocol": "0.9.
|
|
52
|
+
"@bilig/core": "0.9.2",
|
|
53
|
+
"@bilig/formula": "0.9.2",
|
|
54
|
+
"@bilig/protocol": "0.9.2"
|
|
55
55
|
},
|
|
56
56
|
"engines": {
|
|
57
57
|
"node": ">=24.0.0"
|