@bilig/headless 0.4.1 → 0.4.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 +279 -41
- package/dist/persistence.js +159 -38
- package/dist/persistence.js.map +1 -1
- package/dist/work-paper-errors.d.ts +4 -0
- package/dist/work-paper-errors.js +7 -0
- package/dist/work-paper-errors.js.map +1 -1
- package/dist/work-paper-runtime.js +16 -11
- package/dist/work-paper-runtime.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,67 +1,305 @@
|
|
|
1
1
|
# @bilig/headless
|
|
2
2
|
|
|
3
|
-
WorkPaper workbook facade for
|
|
3
|
+
`@bilig/headless` is the production-targeted WorkPaper workbook facade for
|
|
4
|
+
`bilig`. It runs the `@bilig/core` spreadsheet engine without the browser UI and
|
|
5
|
+
exposes HyperFormula-style workbook workflows for services, tests, agents, and
|
|
6
|
+
server-side spreadsheet automation.
|
|
4
7
|
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
## Production Status
|
|
9
|
+
|
|
10
|
+
Use this package in production for documented WorkPaper/headless API workflows:
|
|
11
|
+
programmatic workbook creation, formula evaluation, structural edits,
|
|
12
|
+
persistence round trips, service-side spreadsheet automation, and agent-driven
|
|
13
|
+
workbook operations.
|
|
14
|
+
|
|
15
|
+
Current release posture:
|
|
16
|
+
|
|
17
|
+
- Full local CI passed after the latest headless hardening work, including unit,
|
|
18
|
+
contract, fuzz, browser, clean-diff, release-budget, runtime-publish, and
|
|
19
|
+
WorkPaper competitive benchmark gates.
|
|
20
|
+
- The checked-in competitive artifact generated on `2026-05-05T19:00:09.455Z`
|
|
21
|
+
shows `46/46` comparable WorkPaper mean wins against HyperFormula-style
|
|
22
|
+
workloads: `38/38` public and `8/8` holdout.
|
|
23
|
+
- Recently fixed and hardened P1 risks are covered by regression tests:
|
|
24
|
+
- `updateConfig()` now applies `useColumnIndex` correctly when a rebuild-only
|
|
25
|
+
config key changes in the same update.
|
|
26
|
+
- `moveCells()` now respects `maxRows` and `maxColumns` and rejects target
|
|
27
|
+
ranges outside configured bounds.
|
|
28
|
+
- persisted WorkPaper documents reject sparse arrays, duplicate sheet names,
|
|
29
|
+
non-JSON numeric values, invalid scoped named expressions, and invalid
|
|
30
|
+
persisted config before restore.
|
|
31
|
+
|
|
32
|
+
Supported scope:
|
|
33
|
+
|
|
34
|
+
- The contract is the WorkPaper/headless API exported by this package.
|
|
35
|
+
- Excel-file ingestion belongs to import/export pipelines before data reaches
|
|
36
|
+
`WorkPaper`; this package executes the validated WorkPaper workbook model.
|
|
37
|
+
- Custom function plugins and callback hooks are runtime registrations. Persist
|
|
38
|
+
workbook data with the helpers below, then register custom behavior in
|
|
39
|
+
application code before restore.
|
|
40
|
+
|
|
41
|
+
## Requirements
|
|
42
|
+
|
|
43
|
+
- Node `24+`
|
|
44
|
+
- ESM imports
|
|
45
|
+
- `pnpm@10.32.1` for this monorepo
|
|
7
46
|
|
|
8
47
|
## Install
|
|
9
48
|
|
|
49
|
+
Published package:
|
|
50
|
+
|
|
10
51
|
```sh
|
|
11
52
|
pnpm add @bilig/headless
|
|
12
53
|
```
|
|
13
54
|
|
|
14
|
-
|
|
15
|
-
|
|
55
|
+
Inside this monorepo:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
pnpm install
|
|
59
|
+
pnpm --filter @bilig/headless build
|
|
60
|
+
```
|
|
16
61
|
|
|
17
|
-
##
|
|
62
|
+
## Quickstart
|
|
18
63
|
|
|
19
64
|
```ts
|
|
20
|
-
import {
|
|
65
|
+
import {
|
|
66
|
+
WorkPaper,
|
|
67
|
+
createWorkPaperFromDocument,
|
|
68
|
+
exportWorkPaperDocument,
|
|
69
|
+
parseWorkPaperDocument,
|
|
70
|
+
serializeWorkPaperDocument,
|
|
71
|
+
type WorkPaperCellAddress,
|
|
72
|
+
} from '@bilig/headless'
|
|
21
73
|
|
|
22
|
-
const workbook = WorkPaper.buildFromSheets(
|
|
23
|
-
|
|
74
|
+
const workbook = WorkPaper.buildFromSheets(
|
|
75
|
+
{
|
|
76
|
+
Sheet1: [
|
|
77
|
+
[10, 20, '=A1+B1'],
|
|
78
|
+
[7, '=A2*3', null],
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
maxRows: 1_000,
|
|
83
|
+
maxColumns: 100,
|
|
84
|
+
useColumnIndex: true,
|
|
85
|
+
},
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
const sheet = workbook.getSheetId('Sheet1')
|
|
89
|
+
if (sheet === undefined) {
|
|
90
|
+
throw new Error('Sheet1 was not created')
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const at = (row: number, col: number): WorkPaperCellAddress => ({
|
|
94
|
+
sheet,
|
|
95
|
+
row,
|
|
96
|
+
col,
|
|
24
97
|
})
|
|
25
98
|
|
|
26
|
-
|
|
27
|
-
|
|
99
|
+
console.log(workbook.getCellValue(at(0, 2))) // CellValue for 30
|
|
100
|
+
|
|
101
|
+
workbook.setCellContents(at(1, 2), '=A2+B2')
|
|
102
|
+
console.log(workbook.getCellFormula(at(1, 2))) // "=A2+B2"
|
|
103
|
+
console.log(workbook.getCellSerialized(at(1, 2))) // "=A2+B2"
|
|
104
|
+
|
|
105
|
+
const document = exportWorkPaperDocument(workbook)
|
|
106
|
+
const json = serializeWorkPaperDocument(document)
|
|
107
|
+
const restored = createWorkPaperFromDocument(parseWorkPaperDocument(json))
|
|
108
|
+
const restoredSheet = restored.getSheetId('Sheet1')
|
|
109
|
+
if (restoredSheet === undefined) {
|
|
110
|
+
throw new Error('Sheet1 was not restored')
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
console.log(restored.getCellValue({ sheet: restoredSheet, row: 1, col: 2 }))
|
|
28
114
|
```
|
|
29
115
|
|
|
30
|
-
##
|
|
116
|
+
## Core Concepts
|
|
31
117
|
|
|
32
|
-
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
- Subscribe with richer payload objects through `onDetailed()`, `onceDetailed()`, and `offDetailed()`.
|
|
45
|
-
- Use stable compatibility adapters through `graph`, `rangeMapping`, `arrayMapping`,
|
|
46
|
-
`sheetMapping`, `addressMapping`, `dependencyGraph`, `evaluator`,
|
|
47
|
-
`columnSearch`, and `lazilyTransformingAstService`.
|
|
118
|
+
- `WorkPaper` is the top-level workbook object. Create it with
|
|
119
|
+
`WorkPaper.buildEmpty()`, `WorkPaper.buildFromArray()`, or
|
|
120
|
+
`WorkPaper.buildFromSheets()`.
|
|
121
|
+
- Addresses are zero-based `{ sheet, row, col }` objects. Use `getSheetId(name)`
|
|
122
|
+
to resolve the numeric sheet id.
|
|
123
|
+
- A string beginning with `=` is a formula. Other strings are literal text.
|
|
124
|
+
`null` clears a cell.
|
|
125
|
+
- `getCellValue()` returns a computed `CellValue`.
|
|
126
|
+
- `getCellFormula()` returns the formula text when the cell is a formula.
|
|
127
|
+
- `getCellSerialized()` returns the persisted cell input shape.
|
|
128
|
+
- Mutation methods return WorkPaper change arrays. Empty arrays are valid when
|
|
129
|
+
evaluation is suspended or a batch defers change publication.
|
|
48
130
|
|
|
49
|
-
##
|
|
131
|
+
## Common API Recipes
|
|
50
132
|
|
|
51
|
-
|
|
133
|
+
Create an empty workbook:
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
const workbook = WorkPaper.buildEmpty({
|
|
137
|
+
maxRows: 10_000,
|
|
138
|
+
maxColumns: 256,
|
|
139
|
+
})
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Set values, formulas, and blanks:
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
workbook.setCellContents(at(0, 0), 42)
|
|
146
|
+
workbook.setCellContents(at(0, 1), 'label')
|
|
147
|
+
workbook.setCellContents(at(0, 2), '=A1*2')
|
|
148
|
+
workbook.setCellContents(at(0, 3), null)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Read ranges and whole sheets:
|
|
152
|
+
|
|
153
|
+
```ts
|
|
154
|
+
const range = { start: at(0, 0), end: at(9, 4) }
|
|
155
|
+
|
|
156
|
+
workbook.getRangeValues(range)
|
|
157
|
+
workbook.getRangeFormulas(range)
|
|
158
|
+
workbook.getRangeSerialized(range)
|
|
159
|
+
workbook.getSheetValues(sheet)
|
|
160
|
+
workbook.getSheetSerialized(sheet)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Batch related edits:
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
const changes = workbook.batch(() => {
|
|
167
|
+
workbook.setCellContents(at(0, 0), 10)
|
|
168
|
+
workbook.setCellContents(at(0, 1), '=A1*5')
|
|
169
|
+
})
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Move cells inside configured bounds:
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
const source = { start: at(0, 0), end: at(0, 1) }
|
|
176
|
+
|
|
177
|
+
workbook.moveCells(source, at(2, 0))
|
|
178
|
+
```
|
|
52
179
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
180
|
+
`moveCells()` throws when the source or target falls outside `maxRows` or
|
|
181
|
+
`maxColumns`.
|
|
182
|
+
|
|
183
|
+
Update runtime config:
|
|
184
|
+
|
|
185
|
+
```ts
|
|
186
|
+
workbook.updateConfig({
|
|
187
|
+
useColumnIndex: false,
|
|
188
|
+
maxRows: 2_000,
|
|
189
|
+
})
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`updateConfig()` preserves workbook state. Some config keys can trigger an
|
|
193
|
+
internal engine rebuild; callers should treat the returned workbook object as the
|
|
194
|
+
same public facade and read `getConfig()` after update when they need the active
|
|
195
|
+
configuration.
|
|
196
|
+
|
|
197
|
+
Persist and restore:
|
|
198
|
+
|
|
199
|
+
```ts
|
|
200
|
+
const saved = serializeWorkPaperDocument(exportWorkPaperDocument(workbook, { includeConfig: true }))
|
|
201
|
+
|
|
202
|
+
const restored = createWorkPaperFromDocument(parseWorkPaperDocument(saved))
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Persistence Contract
|
|
206
|
+
|
|
207
|
+
`@bilig/headless` persists:
|
|
208
|
+
|
|
209
|
+
- ordered sheet content arrays
|
|
210
|
+
- sheet names
|
|
211
|
+
- named expressions
|
|
212
|
+
- the JSON-safe subset of `WorkPaperConfig` when `includeConfig` is enabled
|
|
213
|
+
|
|
214
|
+
It does not persist custom function implementations, callback hooks, or process
|
|
215
|
+
state. Register those in code before creating or restoring workbooks.
|
|
216
|
+
|
|
217
|
+
## Validation Commands
|
|
218
|
+
|
|
219
|
+
For a headless-only change, start with focused tests:
|
|
220
|
+
|
|
221
|
+
```sh
|
|
222
|
+
pnpm exec vitest run \
|
|
223
|
+
packages/headless/src/__tests__/work-paper-runtime.test.ts \
|
|
224
|
+
packages/headless/src/__tests__/work-paper-parity.test.ts \
|
|
225
|
+
packages/headless/src/__tests__/persistence.test.ts \
|
|
226
|
+
packages/headless/src/__tests__/persistence.fuzz.test.ts
|
|
227
|
+
|
|
228
|
+
pnpm --filter @bilig/headless build
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Before publishing or claiming production readiness, run the full gates:
|
|
232
|
+
|
|
233
|
+
```sh
|
|
234
|
+
pnpm publish:runtime:check
|
|
235
|
+
pnpm workpaper:bench:competitive:check
|
|
236
|
+
pnpm run ci
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Regenerate the competitive artifact only when intentionally updating benchmark
|
|
240
|
+
evidence:
|
|
241
|
+
|
|
242
|
+
```sh
|
|
243
|
+
pnpm workpaper:bench:competitive:generate
|
|
244
|
+
pnpm workpaper:bench:competitive:check
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Do not change benchmark definitions, scoring, sampling, or workload sizes to hide
|
|
248
|
+
losses.
|
|
57
249
|
|
|
58
250
|
## Compatibility Notes
|
|
59
251
|
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
byte-for-byte drop-in replacement.
|
|
252
|
+
- The facade follows HyperFormula-style public workbook workflows, but it is not
|
|
253
|
+
byte-for-byte compatible with HyperFormula.
|
|
63
254
|
- Public lookup helpers such as `getSheetId()`, `getSheetName()`,
|
|
64
|
-
`simpleCellAddressFromString()`, `simpleCellRangeFromString()`, and
|
|
65
|
-
reads return `undefined` on misses
|
|
66
|
-
- `@bilig/headless` keeps `bilig`
|
|
67
|
-
|
|
255
|
+
`simpleCellAddressFromString()`, `simpleCellRangeFromString()`, and
|
|
256
|
+
named-expression reads return `undefined` on misses.
|
|
257
|
+
- `@bilig/headless` keeps `bilig` change arrays and also exposes richer detailed
|
|
258
|
+
event payloads through `onDetailed()`, `onceDetailed()`, and `offDetailed()`.
|
|
259
|
+
- Stable compatibility adapters are available through `graph`, `rangeMapping`,
|
|
260
|
+
`arrayMapping`, `sheetMapping`, `addressMapping`, `dependencyGraph`,
|
|
261
|
+
`evaluator`, `columnSearch`, and `lazilyTransformingAstService`.
|
|
262
|
+
|
|
263
|
+
## For Coding Agents
|
|
264
|
+
|
|
265
|
+
Use this checklist when Codex, Claude Code, or another agent starts work here:
|
|
266
|
+
|
|
267
|
+
1. Read this README and the root `README.md` first.
|
|
268
|
+
2. Use public exports from `@bilig/headless`; do not import from `src/`,
|
|
269
|
+
`dist/internal`, or `@bilig/core` unless the task explicitly requires engine
|
|
270
|
+
integration work.
|
|
271
|
+
3. Use zero-based `{ sheet, row, col }` addresses and resolve sheet ids with
|
|
272
|
+
`getSheetId()`.
|
|
273
|
+
4. Prefer `WorkPaper.buildFromSheets()` for fixtures and
|
|
274
|
+
`exportWorkPaperDocument()` / `createWorkPaperFromDocument()` for persistence
|
|
275
|
+
round trips.
|
|
276
|
+
5. Add or tighten regression tests before changing behavior around config
|
|
277
|
+
rebuilds, range bounds, formulas, persistence, events, row/column moves, or
|
|
278
|
+
sheet lifecycle.
|
|
279
|
+
6. Run the focused headless tests before broader gates.
|
|
280
|
+
7. Preserve benchmark definitions and workload sizes. Performance improvements
|
|
281
|
+
belong in production engine/headless code.
|
|
282
|
+
8. Document unsupported behavior honestly instead of implying full Excel
|
|
283
|
+
compatibility.
|
|
284
|
+
|
|
285
|
+
## Public Entry Points
|
|
286
|
+
|
|
287
|
+
The package root exports:
|
|
288
|
+
|
|
289
|
+
- `WorkPaper`
|
|
290
|
+
- WorkPaper address, range, config, sheet, change, event, and adapter types
|
|
291
|
+
- WorkPaper error classes
|
|
292
|
+
- persistence helpers:
|
|
293
|
+
- `exportWorkPaperDocument()`
|
|
294
|
+
- `createWorkPaperFromDocument()`
|
|
295
|
+
- `serializeWorkPaperDocument()`
|
|
296
|
+
- `parseWorkPaperDocument()`
|
|
297
|
+
- `isPersistedWorkPaperDocument()`
|
|
298
|
+
- `pickPersistableWorkPaperConfig()`
|
|
299
|
+
|
|
300
|
+
## Versioning
|
|
301
|
+
|
|
302
|
+
`@bilig/headless` ships as part of the aligned bilig runtime package set. Treat
|
|
303
|
+
documented public exports as the supported surface, keep integration tests around
|
|
304
|
+
your own workbook corpus, and rerun the validation gates before upgrading in
|
|
305
|
+
production.
|
package/dist/persistence.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { WorkPaper } from './work-paper.js';
|
|
2
|
+
import { WorkPaperPersistenceError } from './work-paper-errors.js';
|
|
2
3
|
export const WORK_PAPER_DOCUMENT_FORMAT = 'bilig.headless.work-paper.document.v1';
|
|
3
4
|
export const PERSISTABLE_WORK_PAPER_CONFIG_KEYS = [
|
|
4
5
|
'accentSensitive',
|
|
@@ -39,78 +40,192 @@ export const PERSISTABLE_WORK_PAPER_CONFIG_KEYS = [
|
|
|
39
40
|
function isRecord(value) {
|
|
40
41
|
return typeof value === 'object' && value !== null;
|
|
41
42
|
}
|
|
43
|
+
function isDenseArray(value) {
|
|
44
|
+
if (!Array.isArray(value)) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
48
|
+
if (!Object.hasOwn(value, index)) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
function isJsonNumber(value) {
|
|
55
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
56
|
+
}
|
|
57
|
+
function isJsonInteger(value) {
|
|
58
|
+
return typeof value === 'number' && Number.isInteger(value);
|
|
59
|
+
}
|
|
60
|
+
function isPositiveJsonInteger(value) {
|
|
61
|
+
return typeof value === 'number' && Number.isInteger(value) && value > 0;
|
|
62
|
+
}
|
|
63
|
+
function isNonNegativeJsonInteger(value) {
|
|
64
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= 0;
|
|
65
|
+
}
|
|
66
|
+
function isNonEmptyString(value) {
|
|
67
|
+
return typeof value === 'string' && value.length > 0;
|
|
68
|
+
}
|
|
42
69
|
function isLiteralInput(value) {
|
|
43
|
-
return value === null || typeof value === 'boolean' ||
|
|
70
|
+
return value === null || typeof value === 'boolean' || isJsonNumber(value) || typeof value === 'string';
|
|
44
71
|
}
|
|
45
72
|
function isRawCellContent(value) {
|
|
46
73
|
return isLiteralInput(value) || typeof value === 'string';
|
|
47
74
|
}
|
|
48
75
|
function isWorkPaperSheet(value) {
|
|
49
|
-
return
|
|
76
|
+
return isDenseArray(value) && value.every((row) => isDenseArray(row) && row.every((cell) => isRawCellContent(cell)));
|
|
50
77
|
}
|
|
51
78
|
function isNamedExpressionOptions(value) {
|
|
52
|
-
return (isRecord(value) &&
|
|
53
|
-
Object.values(value).every((entry) => typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean'));
|
|
79
|
+
return (isRecord(value) && Object.values(value).every((entry) => typeof entry === 'string' || isJsonNumber(entry) || typeof entry === 'boolean'));
|
|
54
80
|
}
|
|
55
81
|
function isWorkPaperContextValue(value) {
|
|
56
82
|
return (value === null ||
|
|
57
83
|
typeof value === 'string' ||
|
|
58
|
-
|
|
84
|
+
isJsonNumber(value) ||
|
|
59
85
|
typeof value === 'boolean' ||
|
|
60
|
-
(
|
|
86
|
+
(isDenseArray(value) && value.every((entry) => isWorkPaperContextValue(entry))) ||
|
|
61
87
|
(isRecord(value) && Object.values(value).every((entry) => isWorkPaperContextValue(entry))));
|
|
62
88
|
}
|
|
63
89
|
function isChooseAddressMappingPolicy(value) {
|
|
64
90
|
return isRecord(value) && (value['mode'] === 'dense' || value['mode'] === 'sparse');
|
|
65
91
|
}
|
|
92
|
+
function isStringArray(value) {
|
|
93
|
+
return isDenseArray(value) && value.every((item) => typeof item === 'string');
|
|
94
|
+
}
|
|
95
|
+
function isSimpleDate(value) {
|
|
96
|
+
return (isRecord(value) &&
|
|
97
|
+
isJsonInteger(value['year']) &&
|
|
98
|
+
isJsonInteger(value['month']) &&
|
|
99
|
+
value['month'] >= 1 &&
|
|
100
|
+
value['month'] <= 12 &&
|
|
101
|
+
isJsonInteger(value['day']) &&
|
|
102
|
+
value['day'] >= 1 &&
|
|
103
|
+
value['day'] <= 31);
|
|
104
|
+
}
|
|
105
|
+
function isPersistableConfigEntry(key, entry) {
|
|
106
|
+
switch (key) {
|
|
107
|
+
case 'accentSensitive':
|
|
108
|
+
case 'caseSensitive':
|
|
109
|
+
case 'evaluateNullToZero':
|
|
110
|
+
case 'ignorePunctuation':
|
|
111
|
+
case 'leapYear1900':
|
|
112
|
+
case 'matchWholeCell':
|
|
113
|
+
case 'smartRounding':
|
|
114
|
+
case 'useArrayArithmetic':
|
|
115
|
+
case 'useColumnIndex':
|
|
116
|
+
case 'useStats':
|
|
117
|
+
case 'useRegularExpressions':
|
|
118
|
+
case 'useWildcards':
|
|
119
|
+
return typeof entry === 'boolean';
|
|
120
|
+
case 'caseFirst':
|
|
121
|
+
return entry === 'upper' || entry === 'lower' || entry === 'false';
|
|
122
|
+
case 'chooseAddressMappingPolicy':
|
|
123
|
+
return isChooseAddressMappingPolicy(entry);
|
|
124
|
+
case 'context':
|
|
125
|
+
return isWorkPaperContextValue(entry);
|
|
126
|
+
case 'currencySymbol':
|
|
127
|
+
case 'dateFormats':
|
|
128
|
+
case 'timeFormats':
|
|
129
|
+
return isStringArray(entry);
|
|
130
|
+
case 'decimalSeparator':
|
|
131
|
+
return entry === '.' || entry === ',';
|
|
132
|
+
case 'functionArgSeparator':
|
|
133
|
+
case 'language':
|
|
134
|
+
case 'licenseKey':
|
|
135
|
+
case 'localeLang':
|
|
136
|
+
return typeof entry === 'string';
|
|
137
|
+
case 'ignoreWhiteSpace':
|
|
138
|
+
return entry === 'standard' || entry === 'any';
|
|
139
|
+
case 'arrayColumnSeparator':
|
|
140
|
+
return entry === ',' || entry === ';';
|
|
141
|
+
case 'arrayRowSeparator':
|
|
142
|
+
return entry === ';' || entry === '|';
|
|
143
|
+
case 'maxRows':
|
|
144
|
+
case 'maxColumns':
|
|
145
|
+
return isPositiveJsonInteger(entry);
|
|
146
|
+
case 'nullDate':
|
|
147
|
+
return isSimpleDate(entry);
|
|
148
|
+
case 'nullYear':
|
|
149
|
+
case 'precisionRounding':
|
|
150
|
+
return isJsonInteger(entry);
|
|
151
|
+
case 'precisionEpsilon':
|
|
152
|
+
return isJsonNumber(entry);
|
|
153
|
+
case 'thousandSeparator':
|
|
154
|
+
return entry === '' || entry === ',' || entry === '.';
|
|
155
|
+
case 'undoLimit':
|
|
156
|
+
return isNonNegativeJsonInteger(entry);
|
|
157
|
+
default:
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
66
161
|
function isPersistableWorkPaperConfig(value) {
|
|
67
162
|
if (!isRecord(value)) {
|
|
68
163
|
return false;
|
|
69
164
|
}
|
|
70
165
|
return Object.entries(value).every(([key, entry]) => {
|
|
71
|
-
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
if (key === 'chooseAddressMappingPolicy') {
|
|
75
|
-
return isChooseAddressMappingPolicy(entry);
|
|
76
|
-
}
|
|
77
|
-
if (key === 'currencySymbol' || key === 'dateFormats' || key === 'timeFormats') {
|
|
78
|
-
return Array.isArray(entry) && entry.every((item) => typeof item === 'string');
|
|
79
|
-
}
|
|
80
|
-
if (key === 'nullDate') {
|
|
81
|
-
return isRecord(entry) && typeof entry['year'] === 'number' && typeof entry['month'] === 'number' && typeof entry['day'] === 'number';
|
|
82
|
-
}
|
|
83
|
-
if (key === 'context') {
|
|
84
|
-
return isWorkPaperContextValue(entry);
|
|
85
|
-
}
|
|
86
|
-
return typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean';
|
|
166
|
+
return PERSISTABLE_WORK_PAPER_CONFIG_KEYS.includes(key) && isPersistableConfigEntry(key, entry);
|
|
87
167
|
});
|
|
88
168
|
}
|
|
89
169
|
function isPersistedWorkPaperNamedExpression(value) {
|
|
90
170
|
return (isRecord(value) &&
|
|
91
|
-
|
|
171
|
+
isNonEmptyString(value['name']) &&
|
|
92
172
|
isRawCellContent(value['expression']) &&
|
|
93
|
-
(value['scopeSheetName'] === undefined ||
|
|
173
|
+
(value['scopeSheetName'] === undefined || isNonEmptyString(value['scopeSheetName'])) &&
|
|
94
174
|
(value['options'] === undefined || isNamedExpressionOptions(value['options'])));
|
|
95
175
|
}
|
|
96
176
|
function isPersistedWorkPaperSheet(value) {
|
|
97
|
-
return isRecord(value) &&
|
|
177
|
+
return isRecord(value) && isNonEmptyString(value['name']) && isWorkPaperSheet(value['content']);
|
|
178
|
+
}
|
|
179
|
+
function hasUniqueSheetNames(sheets) {
|
|
180
|
+
const names = new Set();
|
|
181
|
+
for (const sheet of sheets) {
|
|
182
|
+
if (names.has(sheet.name)) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
names.add(sheet.name);
|
|
186
|
+
}
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
function namedExpressionKey(expression) {
|
|
190
|
+
return `${expression.scopeSheetName ?? '<global>'}\u0000${expression.name}`;
|
|
191
|
+
}
|
|
192
|
+
function hasValidNamedExpressionScopes(expressions, sheetNames) {
|
|
193
|
+
const namesByScope = new Set();
|
|
194
|
+
for (const expression of expressions) {
|
|
195
|
+
if (expression.scopeSheetName !== undefined && !sheetNames.has(expression.scopeSheetName)) {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
const key = namedExpressionKey(expression);
|
|
199
|
+
if (namesByScope.has(key)) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
namesByScope.add(key);
|
|
203
|
+
}
|
|
204
|
+
return true;
|
|
98
205
|
}
|
|
99
206
|
/**
|
|
100
207
|
* Checks whether a value matches the persisted WorkPaper document format.
|
|
101
208
|
*/
|
|
102
209
|
export function isPersistedWorkPaperDocument(value) {
|
|
103
|
-
|
|
104
|
-
value['format']
|
|
105
|
-
|
|
106
|
-
value['sheets'].every((sheet) => isPersistedWorkPaperSheet(sheet))
|
|
107
|
-
|
|
108
|
-
value['namedExpressions'].every((expression) => isPersistedWorkPaperNamedExpression(expression))
|
|
109
|
-
(value['config']
|
|
210
|
+
if (!isRecord(value) ||
|
|
211
|
+
value['format'] !== WORK_PAPER_DOCUMENT_FORMAT ||
|
|
212
|
+
!isDenseArray(value['sheets']) ||
|
|
213
|
+
!value['sheets'].every((sheet) => isPersistedWorkPaperSheet(sheet)) ||
|
|
214
|
+
!isDenseArray(value['namedExpressions']) ||
|
|
215
|
+
!value['namedExpressions'].every((expression) => isPersistedWorkPaperNamedExpression(expression)) ||
|
|
216
|
+
(value['config'] !== undefined && !isPersistableWorkPaperConfig(value['config']))) {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
const sheets = value['sheets'];
|
|
220
|
+
const namedExpressions = value['namedExpressions'];
|
|
221
|
+
if (!hasUniqueSheetNames(sheets)) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
return hasValidNamedExpressionScopes(namedExpressions, new Set(sheets.map((sheet) => sheet.name)));
|
|
110
225
|
}
|
|
111
226
|
function assertPersistedWorkPaperDocument(value) {
|
|
112
227
|
if (!isPersistedWorkPaperDocument(value)) {
|
|
113
|
-
throw new
|
|
228
|
+
throw new WorkPaperPersistenceError('Invalid persisted WorkPaper document');
|
|
114
229
|
}
|
|
115
230
|
}
|
|
116
231
|
function setPersistableWorkPaperConfigValue(target, key, value) {
|
|
@@ -137,7 +252,7 @@ export function exportWorkPaperDocument(workbook, options = {}) {
|
|
|
137
252
|
const sheets = workbook.getSheetNames().map((name) => {
|
|
138
253
|
const sheetId = workbook.getSheetId(name);
|
|
139
254
|
if (sheetId === undefined) {
|
|
140
|
-
throw new
|
|
255
|
+
throw new WorkPaperPersistenceError(`Missing sheet id for ${name}`);
|
|
141
256
|
}
|
|
142
257
|
return {
|
|
143
258
|
name,
|
|
@@ -167,14 +282,14 @@ export function createWorkPaperFromDocument(document) {
|
|
|
167
282
|
document.namedExpressions.forEach((expression) => {
|
|
168
283
|
const scope = expression.scopeSheetName ? workbook.getSheetId(expression.scopeSheetName) : undefined;
|
|
169
284
|
if (expression.scopeSheetName && scope === undefined) {
|
|
170
|
-
throw new
|
|
285
|
+
throw new WorkPaperPersistenceError(`Missing scoped sheet ${expression.scopeSheetName}`);
|
|
171
286
|
}
|
|
172
287
|
workbook.addNamedExpression(expression.name, expression.expression, scope, expression.options);
|
|
173
288
|
});
|
|
174
289
|
document.sheets.forEach((sheet) => {
|
|
175
290
|
const sheetId = workbook.getSheetId(sheet.name);
|
|
176
291
|
if (sheetId === undefined) {
|
|
177
|
-
throw new
|
|
292
|
+
throw new WorkPaperPersistenceError(`Missing restored sheet ${sheet.name}`);
|
|
178
293
|
}
|
|
179
294
|
workbook.setSheetContent(sheetId, sheet.content);
|
|
180
295
|
});
|
|
@@ -193,7 +308,13 @@ export function serializeWorkPaperDocument(document) {
|
|
|
193
308
|
* Parses and validates a WorkPaper document from JSON.
|
|
194
309
|
*/
|
|
195
310
|
export function parseWorkPaperDocument(json) {
|
|
196
|
-
|
|
311
|
+
let parsed;
|
|
312
|
+
try {
|
|
313
|
+
parsed = JSON.parse(json);
|
|
314
|
+
}
|
|
315
|
+
catch (error) {
|
|
316
|
+
throw new WorkPaperPersistenceError('Invalid WorkPaper document JSON', error);
|
|
317
|
+
}
|
|
197
318
|
assertPersistedWorkPaperDocument(parsed);
|
|
198
319
|
return parsed;
|
|
199
320
|
}
|
|
@@ -207,7 +328,7 @@ function serializeNamedExpression(workbook, expression) {
|
|
|
207
328
|
}
|
|
208
329
|
const scopeSheetName = workbook.getSheetName(expression.scope);
|
|
209
330
|
if (!scopeSheetName) {
|
|
210
|
-
throw new
|
|
331
|
+
throw new WorkPaperPersistenceError(`Missing scope sheet for named expression ${expression.name}`);
|
|
211
332
|
}
|
|
212
333
|
return {
|
|
213
334
|
name: expression.name,
|
package/dist/persistence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
|