@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 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":"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"}
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.1",
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.com/proompteng/bilig/tree/main/packages/headless#readme",
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.1",
53
- "@bilig/formula": "0.9.1",
54
- "@bilig/protocol": "0.9.1"
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"