@bilig/headless 0.9.1 → 0.9.3
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 +27 -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 +5 -5
package/README.md
CHANGED
|
@@ -74,6 +74,7 @@ pnpm add @bilig/headless
|
|
|
74
74
|
|
|
75
75
|
Repository:
|
|
76
76
|
|
|
77
|
+
- Website: <https://proompteng.github.io/bilig/>
|
|
77
78
|
- GitHub: <https://github.com/proompteng/bilig>
|
|
78
79
|
- npm: <https://www.npmjs.com/package/@bilig/headless>
|
|
79
80
|
- runnable example:
|
|
@@ -172,6 +173,11 @@ links, shareable copy, and overclaim guardrails, use the root
|
|
|
172
173
|
- A string beginning with `=` is a formula. Other strings are literal text.
|
|
173
174
|
`null` clears a cell.
|
|
174
175
|
- `getCellValue()` returns a computed `CellValue`.
|
|
176
|
+
- `getCellDisplayValue()` returns the formatted user-facing text for a cell,
|
|
177
|
+
including workbook error text such as `#VALUE!`.
|
|
178
|
+
- `getCellFormulaDiagnostics()` returns structured formula diagnostics for
|
|
179
|
+
supported error families, including financial cash-flow/date validation for
|
|
180
|
+
`XIRR()` and `XNPV()`.
|
|
175
181
|
- `getCellFormula()` returns the formula text when the cell is a formula.
|
|
176
182
|
- `getCellSerialized()` returns the persisted cell input shape.
|
|
177
183
|
- Mutation methods return WorkPaper change arrays. Empty arrays are valid when
|
|
@@ -209,6 +215,27 @@ workbook.getSheetValues(sheet)
|
|
|
209
215
|
workbook.getSheetSerialized(sheet)
|
|
210
216
|
```
|
|
211
217
|
|
|
218
|
+
Inspect a formula error:
|
|
219
|
+
|
|
220
|
+
```ts
|
|
221
|
+
const value = workbook.getCellValue(at(7, 1))
|
|
222
|
+
const display = workbook.getCellDisplayValue(at(7, 1))
|
|
223
|
+
const diagnostics = workbook.getCellFormulaDiagnostics(at(7, 1))
|
|
224
|
+
|
|
225
|
+
console.log(value) // Raw CellValue protocol object
|
|
226
|
+
console.log(display) // "#VALUE!"
|
|
227
|
+
console.log(diagnostics[0]?.code) // e.g. "financial-unsupported-date-coercion"
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Finance date inputs:
|
|
231
|
+
|
|
232
|
+
`XIRR(values, dates, [guess])` and `XNPV(rate, values, dates)` accept numeric
|
|
233
|
+
Excel serial dates in `dates`. Text labels and text date strings are not
|
|
234
|
+
coerced in headless formulas; they evaluate to `#VALUE!`. Use
|
|
235
|
+
`getCellFormulaDiagnostics()` to distinguish invalid date ranges, mismatched
|
|
236
|
+
range dimensions, invalid cash-flow values, missing positive or negative cash
|
|
237
|
+
flows, invalid rates/guesses, and solver non-convergence.
|
|
238
|
+
|
|
212
239
|
Batch related edits:
|
|
213
240
|
|
|
214
241
|
```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.3",
|
|
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",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"spreadsheet-engine",
|
|
18
18
|
"workbook"
|
|
19
19
|
],
|
|
20
|
-
"homepage": "https://github.
|
|
20
|
+
"homepage": "https://proompteng.github.io/bilig/",
|
|
21
21
|
"bugs": {
|
|
22
22
|
"url": "https://github.com/proompteng/bilig/issues"
|
|
23
23
|
},
|
|
@@ -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.3",
|
|
53
|
+
"@bilig/formula": "0.9.3",
|
|
54
|
+
"@bilig/protocol": "0.9.3"
|
|
55
55
|
},
|
|
56
56
|
"engines": {
|
|
57
57
|
"node": ">=24.0.0"
|