@bilig/headless 0.1.82 → 0.1.84
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 +19 -5
- package/dist/change-order.d.ts +1 -1
- package/dist/change-order.js +2 -2
- package/dist/change-order.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/initial-sheet-load.d.ts +2 -2
- package/dist/initial-sheet-load.js +9 -9
- package/dist/initial-sheet-load.js.map +1 -1
- package/dist/matrix-mutation-plan.d.ts +2 -2
- package/dist/matrix-mutation-plan.js +6 -7
- package/dist/matrix-mutation-plan.js.map +1 -1
- package/dist/persistence.d.ts +49 -0
- package/dist/persistence.js +219 -0
- package/dist/persistence.js.map +1 -0
- package/dist/tracked-engine-event-refs.d.ts +2 -2
- package/dist/tracked-engine-event-refs.js +2 -4
- package/dist/tracked-engine-event-refs.js.map +1 -1
- package/dist/work-paper-errors.d.ts +1 -1
- package/dist/work-paper-errors.js +36 -38
- package/dist/work-paper-errors.js.map +1 -1
- package/dist/work-paper-runtime.d.ts +4 -4
- package/dist/work-paper-runtime.js +413 -495
- package/dist/work-paper-runtime.js.map +1 -1
- package/dist/work-paper-scratch-evaluator.d.ts +2 -2
- package/dist/work-paper-scratch-evaluator.js +3 -3
- package/dist/work-paper-scratch-evaluator.js.map +1 -1
- package/dist/work-paper-sheet-replacement.d.ts +1 -1
- package/dist/work-paper-sheet-replacement.js +2 -2
- package/dist/work-paper-sheet-replacement.js.map +1 -1
- package/dist/work-paper-types.d.ts +19 -19
- package/dist/work-paper.d.ts +3 -3
- package/dist/work-paper.js +3 -3
- package/dist/work-paper.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -17,14 +17,14 @@ built from packed runtime tarballs.
|
|
|
17
17
|
## Usage
|
|
18
18
|
|
|
19
19
|
```ts
|
|
20
|
-
import { WorkPaper } from
|
|
20
|
+
import { WorkPaper } from '@bilig/headless'
|
|
21
21
|
|
|
22
22
|
const workbook = WorkPaper.buildFromSheets({
|
|
23
|
-
Sheet1: [[1,
|
|
24
|
-
})
|
|
23
|
+
Sheet1: [[1, '=A1*2']],
|
|
24
|
+
})
|
|
25
25
|
|
|
26
|
-
const sheetId = workbook.getSheetId(
|
|
27
|
-
const value = workbook.getCellValue({ sheet: sheetId, row: 0, col: 1 })
|
|
26
|
+
const sheetId = workbook.getSheetId('Sheet1')!
|
|
27
|
+
const value = workbook.getCellValue({ sheet: sheetId, row: 0, col: 1 })
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
## Supported Workflows
|
|
@@ -35,12 +35,26 @@ const value = workbook.getCellValue({ sheet: sheetId, row: 0, col: 1 });
|
|
|
35
35
|
- Use `batch()`, `undo()`, `redo()`, `suspendEvaluation()`, and `resumeEvaluation()`.
|
|
36
36
|
- Register custom functions and language translations before workbook construction.
|
|
37
37
|
- Use copy, cut, paste, fill-range translation, and formula normalization helpers.
|
|
38
|
+
- Persist and restore WorkPaper documents with:
|
|
39
|
+
- `exportWorkPaperDocument()`
|
|
40
|
+
- `createWorkPaperFromDocument()`
|
|
41
|
+
- `serializeWorkPaperDocument()`
|
|
42
|
+
- `parseWorkPaperDocument()`
|
|
38
43
|
- Subscribe with HyperFormula-style positional listeners through `on()`, `once()`, and `off()`.
|
|
39
44
|
- Subscribe with richer payload objects through `onDetailed()`, `onceDetailed()`, and `offDetailed()`.
|
|
40
45
|
- Use stable compatibility adapters through `graph`, `rangeMapping`, `arrayMapping`,
|
|
41
46
|
`sheetMapping`, `addressMapping`, `dependencyGraph`, `evaluator`,
|
|
42
47
|
`columnSearch`, and `lazilyTransformingAstService`.
|
|
43
48
|
|
|
49
|
+
## Persistence
|
|
50
|
+
|
|
51
|
+
`@bilig/headless` follows the HyperFormula-style persistence model:
|
|
52
|
+
|
|
53
|
+
- sheets are serialized as ordered sheet-content arrays
|
|
54
|
+
- named expressions are serialized separately
|
|
55
|
+
- only the JSON-safe subset of `WorkPaperConfig` is persisted automatically
|
|
56
|
+
- custom function plugins and callback hooks should be registered in code before restore
|
|
57
|
+
|
|
44
58
|
## Compatibility Notes
|
|
45
59
|
|
|
46
60
|
- `WorkPaper` is the canonical top-level interface.
|
package/dist/change-order.d.ts
CHANGED
package/dist/change-order.js
CHANGED
|
@@ -17,7 +17,7 @@ export function orderWorkPaperCellChanges(changes, sheets, explicitChangedCount)
|
|
|
17
17
|
return changes.toSorted(compare);
|
|
18
18
|
}
|
|
19
19
|
function compareSingleSheetCellChanges(left, right) {
|
|
20
|
-
if (left.kind !==
|
|
20
|
+
if (left.kind !== 'cell' || right.kind !== 'cell') {
|
|
21
21
|
return 0;
|
|
22
22
|
}
|
|
23
23
|
return left.address.row - right.address.row || left.address.col - right.address.col;
|
|
@@ -25,7 +25,7 @@ function compareSingleSheetCellChanges(left, right) {
|
|
|
25
25
|
function compareWorkPaperCellChanges(sheets) {
|
|
26
26
|
const orderBySheet = new Map(sheets.map((sheet) => [sheet.id, sheet.order]));
|
|
27
27
|
return (left, right) => {
|
|
28
|
-
if (left.kind !==
|
|
28
|
+
if (left.kind !== 'cell' || right.kind !== 'cell') {
|
|
29
29
|
return 0;
|
|
30
30
|
}
|
|
31
31
|
return ((orderBySheet.get(left.address.sheet) ?? 0) - (orderBySheet.get(right.address.sheet) ?? 0) ||
|
package/dist/change-order.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-order.js","sourceRoot":"","sources":["../src/change-order.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,yBAAyB,CACvC,OAA0B,EAC1B,MAAkB,EAClB,oBAA6B;IAE7B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,
|
|
1
|
+
{"version":3,"file":"change-order.js","sourceRoot":"","sources":["../src/change-order.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from './persistence.js';
|
|
2
|
+
export * from './work-paper.js';
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type SpreadsheetEngine, type EngineCellMutationRef } from
|
|
2
|
-
import type { WorkPaperCellAddress, WorkPaperSheet } from
|
|
1
|
+
import { type SpreadsheetEngine, type EngineCellMutationRef } from '@bilig/core';
|
|
2
|
+
import type { WorkPaperCellAddress, WorkPaperSheet } from './work-paper-types.js';
|
|
3
3
|
export declare function tryLoadInitialLiteralSheet(engine: SpreadsheetEngine, sheetId: number, content: WorkPaperSheet): boolean;
|
|
4
4
|
export interface PreparedInitialMixedSheetLoad {
|
|
5
5
|
formulaRefs: EngineCellMutationRef[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { loadLiteralSheetIntoEmptySheet, makeCellKey
|
|
2
|
-
import { ErrorCode, ValueTag } from
|
|
1
|
+
import { loadLiteralSheetIntoEmptySheet, makeCellKey } from '@bilig/core';
|
|
2
|
+
import { ErrorCode, ValueTag } from '@bilig/protocol';
|
|
3
3
|
export function tryLoadInitialLiteralSheet(engine, sheetId, content) {
|
|
4
4
|
if (sheetContainsFormulaContent(content)) {
|
|
5
5
|
return false;
|
|
@@ -8,7 +8,7 @@ export function tryLoadInitialLiteralSheet(engine, sheetId, content) {
|
|
|
8
8
|
return true;
|
|
9
9
|
}
|
|
10
10
|
function sheetContainsFormulaContent(content) {
|
|
11
|
-
return content.some((row) => row.some((value) => typeof value ===
|
|
11
|
+
return content.some((row) => row.some((value) => typeof value === 'string' && value.trim().startsWith('=')));
|
|
12
12
|
}
|
|
13
13
|
export function prepareInitialMixedSheetLoad(args) {
|
|
14
14
|
const sheet = args.engine.workbook.getSheetById(args.sheetId);
|
|
@@ -21,7 +21,7 @@ export function prepareInitialMixedSheetLoad(args) {
|
|
|
21
21
|
const row = args.content[rowIndex];
|
|
22
22
|
for (let colIndex = 0; colIndex < row.length; colIndex += 1) {
|
|
23
23
|
const raw = row[colIndex];
|
|
24
|
-
if (typeof raw ===
|
|
24
|
+
if (typeof raw === 'string' && raw.trim().startsWith('=')) {
|
|
25
25
|
formulaCount += 1;
|
|
26
26
|
continue;
|
|
27
27
|
}
|
|
@@ -43,13 +43,13 @@ export function prepareInitialMixedSheetLoad(args) {
|
|
|
43
43
|
const row = args.content[rowIndex];
|
|
44
44
|
for (let colIndex = 0; colIndex < row.length; colIndex += 1) {
|
|
45
45
|
const raw = row[colIndex];
|
|
46
|
-
if (typeof raw ===
|
|
46
|
+
if (typeof raw === 'string') {
|
|
47
47
|
const trimmed = raw.trim();
|
|
48
|
-
if (trimmed.startsWith(
|
|
48
|
+
if (trimmed.startsWith('=')) {
|
|
49
49
|
formulaRefs[formulaIndex] = {
|
|
50
50
|
sheetId: args.sheetId,
|
|
51
51
|
mutation: {
|
|
52
|
-
kind:
|
|
52
|
+
kind: 'setCellFormula',
|
|
53
53
|
row: rowIndex,
|
|
54
54
|
col: colIndex,
|
|
55
55
|
formula: args.rewriteFormula(trimmed.slice(1), {
|
|
@@ -75,12 +75,12 @@ export function prepareInitialMixedSheetLoad(args) {
|
|
|
75
75
|
cellStore.versions[cellIndex] = 1;
|
|
76
76
|
cellStore.topoRanks[cellIndex] = 0;
|
|
77
77
|
cellStore.cycleGroupIds[cellIndex] = -1;
|
|
78
|
-
if (typeof raw ===
|
|
78
|
+
if (typeof raw === 'number') {
|
|
79
79
|
cellStore.tags[cellIndex] = ValueTag.Number;
|
|
80
80
|
cellStore.numbers[cellIndex] = raw;
|
|
81
81
|
cellStore.stringIds[cellIndex] = 0;
|
|
82
82
|
}
|
|
83
|
-
else if (typeof raw ===
|
|
83
|
+
else if (typeof raw === 'boolean') {
|
|
84
84
|
cellStore.tags[cellIndex] = ValueTag.Boolean;
|
|
85
85
|
cellStore.numbers[cellIndex] = raw ? 1 : 0;
|
|
86
86
|
cellStore.stringIds[cellIndex] = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initial-sheet-load.js","sourceRoot":"","sources":["../src/initial-sheet-load.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"initial-sheet-load.js","sourceRoot":"","sources":["../src/initial-sheet-load.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { EngineCellMutationRef } from
|
|
2
|
-
import type { WorkPaperCellAddress, WorkPaperSheet } from
|
|
1
|
+
import type { EngineCellMutationRef } from '@bilig/core';
|
|
2
|
+
import type { WorkPaperCellAddress, WorkPaperSheet } from './work-paper-types.js';
|
|
3
3
|
export type MatrixMutationRef = EngineCellMutationRef;
|
|
4
4
|
export interface MatrixMutationPlan {
|
|
5
5
|
leadingRefs: MatrixMutationRef[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { formatAddress } from
|
|
1
|
+
import { formatAddress } from '@bilig/formula';
|
|
2
2
|
function isFormulaContent(content) {
|
|
3
|
-
return typeof content ===
|
|
3
|
+
return typeof content === 'string' && content.trim().startsWith('=');
|
|
4
4
|
}
|
|
5
5
|
export function buildMatrixMutationPlan(args) {
|
|
6
6
|
const leadingRefs = [];
|
|
@@ -21,8 +21,7 @@ export function buildMatrixMutationPlan(args) {
|
|
|
21
21
|
}
|
|
22
22
|
});
|
|
23
23
|
});
|
|
24
|
-
const shouldDeferLiteral = (address, row, col) => args.deferLiteralAddresses?.has(address) === true ||
|
|
25
|
-
row > (earliestFormulaRowByColumn.get(col) ?? Number.POSITIVE_INFINITY);
|
|
24
|
+
const shouldDeferLiteral = (address, row, col) => args.deferLiteralAddresses?.has(address) === true || row > (earliestFormulaRowByColumn.get(col) ?? Number.POSITIVE_INFINITY);
|
|
26
25
|
args.content.forEach((row, rowOffset) => {
|
|
27
26
|
row.forEach((raw, columnOffset) => {
|
|
28
27
|
const destination = {
|
|
@@ -35,7 +34,7 @@ export function buildMatrixMutationPlan(args) {
|
|
|
35
34
|
if (!args.skipNulls) {
|
|
36
35
|
const ref = {
|
|
37
36
|
sheetId: args.target.sheet,
|
|
38
|
-
mutation: { kind:
|
|
37
|
+
mutation: { kind: 'clearCell', row: destination.row, col: destination.col },
|
|
39
38
|
};
|
|
40
39
|
if (shouldDeferLiteral(address, destination.row, destination.col)) {
|
|
41
40
|
trailingLiteralRefs.push(ref);
|
|
@@ -51,7 +50,7 @@ export function buildMatrixMutationPlan(args) {
|
|
|
51
50
|
formulaRefs.push({
|
|
52
51
|
sheetId: args.target.sheet,
|
|
53
52
|
mutation: {
|
|
54
|
-
kind:
|
|
53
|
+
kind: 'setCellFormula',
|
|
55
54
|
row: destination.row,
|
|
56
55
|
col: destination.col,
|
|
57
56
|
formula: args.rewriteFormula(raw, destination, rowOffset, columnOffset),
|
|
@@ -62,7 +61,7 @@ export function buildMatrixMutationPlan(args) {
|
|
|
62
61
|
const ref = {
|
|
63
62
|
sheetId: args.target.sheet,
|
|
64
63
|
mutation: {
|
|
65
|
-
kind:
|
|
64
|
+
kind: 'setCellValue',
|
|
66
65
|
row: destination.row,
|
|
67
66
|
col: destination.col,
|
|
68
67
|
value: raw,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-mutation-plan.js","sourceRoot":"","sources":["../src/matrix-mutation-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"matrix-mutation-plan.js","sourceRoot":"","sources":["../src/matrix-mutation-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { WorkPaper } from './work-paper.js';
|
|
2
|
+
import type { RawCellContent, WorkPaperConfig, WorkPaperSheet } from './work-paper-types.js';
|
|
3
|
+
export declare const WORK_PAPER_DOCUMENT_FORMAT: "bilig.headless.work-paper.document.v1";
|
|
4
|
+
export declare const PERSISTABLE_WORK_PAPER_CONFIG_KEYS: readonly ["accentSensitive", "caseSensitive", "caseFirst", "chooseAddressMappingPolicy", "context", "currencySymbol", "dateFormats", "functionArgSeparator", "decimalSeparator", "evaluateNullToZero", "ignorePunctuation", "language", "ignoreWhiteSpace", "leapYear1900", "licenseKey", "localeLang", "matchWholeCell", "arrayColumnSeparator", "arrayRowSeparator", "maxRows", "maxColumns", "nullDate", "nullYear", "precisionEpsilon", "precisionRounding", "smartRounding", "thousandSeparator", "timeFormats", "useArrayArithmetic", "useColumnIndex", "useStats", "undoLimit", "useRegularExpressions", "useWildcards"];
|
|
5
|
+
type PersistableWorkPaperConfigKey = (typeof PERSISTABLE_WORK_PAPER_CONFIG_KEYS)[number];
|
|
6
|
+
export type PersistableWorkPaperConfig = Pick<WorkPaperConfig, PersistableWorkPaperConfigKey>;
|
|
7
|
+
export interface PersistedWorkPaperNamedExpression {
|
|
8
|
+
name: string;
|
|
9
|
+
expression: RawCellContent;
|
|
10
|
+
scopeSheetName?: string;
|
|
11
|
+
options?: Record<string, string | number | boolean>;
|
|
12
|
+
}
|
|
13
|
+
export interface PersistedWorkPaperSheet {
|
|
14
|
+
name: string;
|
|
15
|
+
content: WorkPaperSheet;
|
|
16
|
+
}
|
|
17
|
+
export interface PersistedWorkPaperDocument {
|
|
18
|
+
format: typeof WORK_PAPER_DOCUMENT_FORMAT;
|
|
19
|
+
sheets: PersistedWorkPaperSheet[];
|
|
20
|
+
namedExpressions: PersistedWorkPaperNamedExpression[];
|
|
21
|
+
config?: PersistableWorkPaperConfig;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Checks whether a value matches the persisted WorkPaper document format.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isPersistedWorkPaperDocument(value: unknown): value is PersistedWorkPaperDocument;
|
|
27
|
+
/**
|
|
28
|
+
* Clones the documented JSON-safe subset of WorkPaper configuration values.
|
|
29
|
+
*/
|
|
30
|
+
export declare function pickPersistableWorkPaperConfig(config: WorkPaperConfig): PersistableWorkPaperConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Exports sheets, named expressions, and optional config from a WorkPaper.
|
|
33
|
+
*/
|
|
34
|
+
export declare function exportWorkPaperDocument(workbook: WorkPaper, options?: {
|
|
35
|
+
includeConfig?: boolean;
|
|
36
|
+
}): PersistedWorkPaperDocument;
|
|
37
|
+
/**
|
|
38
|
+
* Creates a WorkPaper instance from a validated persisted document.
|
|
39
|
+
*/
|
|
40
|
+
export declare function createWorkPaperFromDocument(document: PersistedWorkPaperDocument): WorkPaper;
|
|
41
|
+
/**
|
|
42
|
+
* Serializes a validated WorkPaper document to JSON.
|
|
43
|
+
*/
|
|
44
|
+
export declare function serializeWorkPaperDocument(document: PersistedWorkPaperDocument): string;
|
|
45
|
+
/**
|
|
46
|
+
* Parses and validates a WorkPaper document from JSON.
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseWorkPaperDocument(json: string): PersistedWorkPaperDocument;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { WorkPaper } from './work-paper.js';
|
|
2
|
+
export const WORK_PAPER_DOCUMENT_FORMAT = 'bilig.headless.work-paper.document.v1';
|
|
3
|
+
export const PERSISTABLE_WORK_PAPER_CONFIG_KEYS = [
|
|
4
|
+
'accentSensitive',
|
|
5
|
+
'caseSensitive',
|
|
6
|
+
'caseFirst',
|
|
7
|
+
'chooseAddressMappingPolicy',
|
|
8
|
+
'context',
|
|
9
|
+
'currencySymbol',
|
|
10
|
+
'dateFormats',
|
|
11
|
+
'functionArgSeparator',
|
|
12
|
+
'decimalSeparator',
|
|
13
|
+
'evaluateNullToZero',
|
|
14
|
+
'ignorePunctuation',
|
|
15
|
+
'language',
|
|
16
|
+
'ignoreWhiteSpace',
|
|
17
|
+
'leapYear1900',
|
|
18
|
+
'licenseKey',
|
|
19
|
+
'localeLang',
|
|
20
|
+
'matchWholeCell',
|
|
21
|
+
'arrayColumnSeparator',
|
|
22
|
+
'arrayRowSeparator',
|
|
23
|
+
'maxRows',
|
|
24
|
+
'maxColumns',
|
|
25
|
+
'nullDate',
|
|
26
|
+
'nullYear',
|
|
27
|
+
'precisionEpsilon',
|
|
28
|
+
'precisionRounding',
|
|
29
|
+
'smartRounding',
|
|
30
|
+
'thousandSeparator',
|
|
31
|
+
'timeFormats',
|
|
32
|
+
'useArrayArithmetic',
|
|
33
|
+
'useColumnIndex',
|
|
34
|
+
'useStats',
|
|
35
|
+
'undoLimit',
|
|
36
|
+
'useRegularExpressions',
|
|
37
|
+
'useWildcards',
|
|
38
|
+
];
|
|
39
|
+
function isRecord(value) {
|
|
40
|
+
return typeof value === 'object' && value !== null;
|
|
41
|
+
}
|
|
42
|
+
function isLiteralInput(value) {
|
|
43
|
+
return value === null || typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string';
|
|
44
|
+
}
|
|
45
|
+
function isRawCellContent(value) {
|
|
46
|
+
return isLiteralInput(value) || typeof value === 'string';
|
|
47
|
+
}
|
|
48
|
+
function isWorkPaperSheet(value) {
|
|
49
|
+
return Array.isArray(value) && value.every((row) => Array.isArray(row) && row.every((cell) => isRawCellContent(cell)));
|
|
50
|
+
}
|
|
51
|
+
function isNamedExpressionOptions(value) {
|
|
52
|
+
return (isRecord(value) &&
|
|
53
|
+
Object.values(value).every((entry) => typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean'));
|
|
54
|
+
}
|
|
55
|
+
function isWorkPaperContextValue(value) {
|
|
56
|
+
return (value === null ||
|
|
57
|
+
typeof value === 'string' ||
|
|
58
|
+
typeof value === 'number' ||
|
|
59
|
+
typeof value === 'boolean' ||
|
|
60
|
+
(Array.isArray(value) && value.every((entry) => isWorkPaperContextValue(entry))) ||
|
|
61
|
+
(isRecord(value) && Object.values(value).every((entry) => isWorkPaperContextValue(entry))));
|
|
62
|
+
}
|
|
63
|
+
function isChooseAddressMappingPolicy(value) {
|
|
64
|
+
return isRecord(value) && (value['mode'] === 'dense' || value['mode'] === 'sparse');
|
|
65
|
+
}
|
|
66
|
+
function isPersistableWorkPaperConfig(value) {
|
|
67
|
+
if (!isRecord(value)) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return Object.entries(value).every(([key, entry]) => {
|
|
71
|
+
if (!PERSISTABLE_WORK_PAPER_CONFIG_KEYS.includes(key)) {
|
|
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';
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function isPersistedWorkPaperNamedExpression(value) {
|
|
90
|
+
return (isRecord(value) &&
|
|
91
|
+
typeof value['name'] === 'string' &&
|
|
92
|
+
isRawCellContent(value['expression']) &&
|
|
93
|
+
(value['scopeSheetName'] === undefined || typeof value['scopeSheetName'] === 'string') &&
|
|
94
|
+
(value['options'] === undefined || isNamedExpressionOptions(value['options'])));
|
|
95
|
+
}
|
|
96
|
+
function isPersistedWorkPaperSheet(value) {
|
|
97
|
+
return isRecord(value) && typeof value['name'] === 'string' && isWorkPaperSheet(value['content']);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Checks whether a value matches the persisted WorkPaper document format.
|
|
101
|
+
*/
|
|
102
|
+
export function isPersistedWorkPaperDocument(value) {
|
|
103
|
+
return (isRecord(value) &&
|
|
104
|
+
value['format'] === WORK_PAPER_DOCUMENT_FORMAT &&
|
|
105
|
+
Array.isArray(value['sheets']) &&
|
|
106
|
+
value['sheets'].every((sheet) => isPersistedWorkPaperSheet(sheet)) &&
|
|
107
|
+
Array.isArray(value['namedExpressions']) &&
|
|
108
|
+
value['namedExpressions'].every((expression) => isPersistedWorkPaperNamedExpression(expression)) &&
|
|
109
|
+
(value['config'] === undefined || isPersistableWorkPaperConfig(value['config'])));
|
|
110
|
+
}
|
|
111
|
+
function assertPersistedWorkPaperDocument(value) {
|
|
112
|
+
if (!isPersistedWorkPaperDocument(value)) {
|
|
113
|
+
throw new Error('Invalid persisted WorkPaper document');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function setPersistableWorkPaperConfigValue(target, key, value) {
|
|
117
|
+
target[key] = structuredClone(value);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Clones the documented JSON-safe subset of WorkPaper configuration values.
|
|
121
|
+
*/
|
|
122
|
+
export function pickPersistableWorkPaperConfig(config) {
|
|
123
|
+
const picked = {};
|
|
124
|
+
for (const key of PERSISTABLE_WORK_PAPER_CONFIG_KEYS) {
|
|
125
|
+
const value = config[key];
|
|
126
|
+
if (value !== undefined) {
|
|
127
|
+
setPersistableWorkPaperConfigValue(picked, key, value);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return picked;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Exports sheets, named expressions, and optional config from a WorkPaper.
|
|
134
|
+
*/
|
|
135
|
+
export function exportWorkPaperDocument(workbook, options = {}) {
|
|
136
|
+
const { includeConfig = true } = options;
|
|
137
|
+
const sheets = workbook.getSheetNames().map((name) => {
|
|
138
|
+
const sheetId = workbook.getSheetId(name);
|
|
139
|
+
if (sheetId === undefined) {
|
|
140
|
+
throw new Error(`Missing sheet id for ${name}`);
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
name,
|
|
144
|
+
content: workbook.getSheetSerialized(sheetId),
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
const namedExpressions = workbook.getAllNamedExpressionsSerialized().map((expression) => serializeNamedExpression(workbook, expression));
|
|
148
|
+
const document = {
|
|
149
|
+
format: WORK_PAPER_DOCUMENT_FORMAT,
|
|
150
|
+
sheets,
|
|
151
|
+
namedExpressions,
|
|
152
|
+
};
|
|
153
|
+
if (includeConfig) {
|
|
154
|
+
document.config = pickPersistableWorkPaperConfig(workbook.getConfig());
|
|
155
|
+
}
|
|
156
|
+
return document;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Creates a WorkPaper instance from a validated persisted document.
|
|
160
|
+
*/
|
|
161
|
+
export function createWorkPaperFromDocument(document) {
|
|
162
|
+
assertPersistedWorkPaperDocument(document);
|
|
163
|
+
const workbook = WorkPaper.buildEmpty(document.config ?? {});
|
|
164
|
+
document.sheets.forEach((sheet) => {
|
|
165
|
+
workbook.addSheet(sheet.name);
|
|
166
|
+
});
|
|
167
|
+
document.namedExpressions.forEach((expression) => {
|
|
168
|
+
const scope = expression.scopeSheetName ? workbook.getSheetId(expression.scopeSheetName) : undefined;
|
|
169
|
+
if (expression.scopeSheetName && scope === undefined) {
|
|
170
|
+
throw new Error(`Missing scoped sheet ${expression.scopeSheetName}`);
|
|
171
|
+
}
|
|
172
|
+
workbook.addNamedExpression(expression.name, expression.expression, scope, expression.options);
|
|
173
|
+
});
|
|
174
|
+
document.sheets.forEach((sheet) => {
|
|
175
|
+
const sheetId = workbook.getSheetId(sheet.name);
|
|
176
|
+
if (sheetId === undefined) {
|
|
177
|
+
throw new Error(`Missing restored sheet ${sheet.name}`);
|
|
178
|
+
}
|
|
179
|
+
workbook.setSheetContent(sheetId, sheet.content);
|
|
180
|
+
});
|
|
181
|
+
workbook.clearUndoStack();
|
|
182
|
+
workbook.clearRedoStack();
|
|
183
|
+
return workbook;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Serializes a validated WorkPaper document to JSON.
|
|
187
|
+
*/
|
|
188
|
+
export function serializeWorkPaperDocument(document) {
|
|
189
|
+
assertPersistedWorkPaperDocument(document);
|
|
190
|
+
return JSON.stringify(document);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Parses and validates a WorkPaper document from JSON.
|
|
194
|
+
*/
|
|
195
|
+
export function parseWorkPaperDocument(json) {
|
|
196
|
+
const parsed = JSON.parse(json);
|
|
197
|
+
assertPersistedWorkPaperDocument(parsed);
|
|
198
|
+
return parsed;
|
|
199
|
+
}
|
|
200
|
+
function serializeNamedExpression(workbook, expression) {
|
|
201
|
+
if (expression.scope === undefined) {
|
|
202
|
+
return {
|
|
203
|
+
name: expression.name,
|
|
204
|
+
expression: expression.expression,
|
|
205
|
+
options: expression.options ? structuredClone(expression.options) : undefined,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
const scopeSheetName = workbook.getSheetName(expression.scope);
|
|
209
|
+
if (!scopeSheetName) {
|
|
210
|
+
throw new Error(`Missing scope sheet for named expression ${expression.name}`);
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
name: expression.name,
|
|
214
|
+
expression: expression.expression,
|
|
215
|
+
scopeSheetName,
|
|
216
|
+
options: expression.options ? structuredClone(expression.options) : undefined,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { EngineChangedCell, EngineEvent } from
|
|
1
|
+
import type { EngineChangedCell, EngineEvent } from '@bilig/protocol';
|
|
2
2
|
export interface TrackedEngineEvent {
|
|
3
|
-
invalidation: EngineEvent[
|
|
3
|
+
invalidation: EngineEvent['invalidation'];
|
|
4
4
|
changedCells: readonly EngineChangedCell[];
|
|
5
5
|
changedInputCount: number;
|
|
6
6
|
explicitChangedCount?: number;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
function readExplicitChangedCount(event) {
|
|
2
|
-
const explicitChangedCount = Reflect.get(event,
|
|
3
|
-
return typeof explicitChangedCount ===
|
|
4
|
-
? explicitChangedCount
|
|
5
|
-
: undefined;
|
|
2
|
+
const explicitChangedCount = Reflect.get(event, 'explicitChangedCount');
|
|
3
|
+
return typeof explicitChangedCount === 'number' && explicitChangedCount >= 0 ? explicitChangedCount : undefined;
|
|
6
4
|
}
|
|
7
5
|
export function captureTrackedEngineEvent(event) {
|
|
8
6
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracked-engine-event-refs.js","sourceRoot":"","sources":["../src/tracked-engine-event-refs.ts"],"names":[],"mappings":"AAYA,SAAS,wBAAwB,CAAC,KAAkB;IAClD,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"tracked-engine-event-refs.js","sourceRoot":"","sources":["../src/tracked-engine-event-refs.ts"],"names":[],"mappings":"AAYA,SAAS,wBAAwB,CAAC,KAAkB;IAClD,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAA;IACvE,OAAO,OAAO,oBAAoB,KAAK,QAAQ,IAAI,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAA;AACjH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAkB;IAC1D,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB;QAClD,oBAAoB,EAAE,wBAAwB,CAAC,KAAK,CAAC;QACrD,oBAAoB,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACxD,kBAAkB,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QACpD,qBAAqB,EAAE,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;KAC3D,CAAA;AACH,CAAC"}
|