@bilig/headless 0.8.0 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/persistence.d.ts +1 -1
- package/dist/persistence.js +13 -11
- package/dist/persistence.js.map +1 -1
- package/dist/tracked-cell-index-changes.d.ts +1 -7
- package/dist/tracked-cell-index-changes.js +20 -434
- package/dist/tracked-cell-index-changes.js.map +1 -1
- package/dist/tracked-cell-lazy-physical-changes.d.ts +21 -0
- package/dist/tracked-cell-lazy-physical-changes.js +333 -0
- package/dist/tracked-cell-lazy-physical-changes.js.map +1 -0
- package/dist/tracked-cell-value-read.d.ts +18 -0
- package/dist/tracked-cell-value-read.js +46 -0
- package/dist/tracked-cell-value-read.js.map +1 -0
- package/dist/tracked-engine-event-refs.d.ts +1 -1
- package/dist/tracked-engine-event-refs.js +14 -4
- package/dist/tracked-engine-event-refs.js.map +1 -1
- package/dist/tracked-index-source-order.d.ts +5 -0
- package/dist/tracked-index-source-order.js +15 -0
- package/dist/tracked-index-source-order.js.map +1 -0
- package/dist/work-paper-address-format.d.ts +33 -0
- package/dist/work-paper-address-format.js +116 -0
- package/dist/work-paper-address-format.js.map +1 -0
- package/dist/work-paper-axis-helpers.d.ts +26 -0
- package/dist/work-paper-axis-helpers.js +104 -0
- package/dist/work-paper-axis-helpers.js.map +1 -0
- package/dist/work-paper-capability-checks.d.ts +17 -0
- package/dist/work-paper-capability-checks.js +101 -0
- package/dist/work-paper-capability-checks.js.map +1 -0
- package/dist/work-paper-capability-operations.d.ts +34 -0
- package/dist/work-paper-capability-operations.js +70 -0
- package/dist/work-paper-capability-operations.js.map +1 -0
- package/dist/work-paper-capability-surface.d.ts +97 -0
- package/dist/work-paper-capability-surface.js +236 -0
- package/dist/work-paper-capability-surface.js.map +1 -0
- package/dist/work-paper-cell-content-setter.d.ts +37 -0
- package/dist/work-paper-cell-content-setter.js +87 -0
- package/dist/work-paper-cell-content-setter.js.map +1 -0
- package/dist/work-paper-cell-mutation-refs.d.ts +23 -0
- package/dist/work-paper-cell-mutation-refs.js +50 -0
- package/dist/work-paper-cell-mutation-refs.js.map +1 -0
- package/dist/work-paper-cell-read.d.ts +41 -0
- package/dist/work-paper-cell-read.js +54 -0
- package/dist/work-paper-cell-read.js.map +1 -0
- package/dist/work-paper-clipboard-operations.d.ts +24 -0
- package/dist/work-paper-clipboard-operations.js +56 -0
- package/dist/work-paper-clipboard-operations.js.map +1 -0
- package/dist/work-paper-clipboard.d.ts +13 -0
- package/dist/work-paper-clipboard.js +19 -0
- package/dist/work-paper-clipboard.js.map +1 -0
- package/dist/work-paper-config.d.ts +11 -0
- package/dist/work-paper-config.js +247 -0
- package/dist/work-paper-config.js.map +1 -0
- package/dist/work-paper-date-time.d.ts +4 -0
- package/dist/work-paper-date-time.js +38 -0
- package/dist/work-paper-date-time.js.map +1 -0
- package/dist/work-paper-dependency-refs.d.ts +11 -0
- package/dist/work-paper-dependency-refs.js +74 -0
- package/dist/work-paper-dependency-refs.js.map +1 -0
- package/dist/work-paper-emitter.d.ts +22 -0
- package/dist/work-paper-emitter.js +130 -0
- package/dist/work-paper-emitter.js.map +1 -0
- package/dist/work-paper-engine-event-tracker.d.ts +24 -0
- package/dist/work-paper-engine-event-tracker.js +92 -0
- package/dist/work-paper-engine-event-tracker.js.map +1 -0
- 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-existing-numeric-fast-path.d.ts +31 -0
- package/dist/work-paper-existing-numeric-fast-path.js +120 -0
- package/dist/work-paper-existing-numeric-fast-path.js.map +1 -0
- package/dist/work-paper-fill-helpers.d.ts +8 -0
- package/dist/work-paper-fill-helpers.js +34 -0
- package/dist/work-paper-fill-helpers.js.map +1 -0
- package/dist/work-paper-formula-analysis.d.ts +18 -0
- package/dist/work-paper-formula-analysis.js +54 -0
- package/dist/work-paper-formula-analysis.js.map +1 -0
- package/dist/work-paper-formula-rewrite.d.ts +22 -0
- package/dist/work-paper-formula-rewrite.js +71 -0
- package/dist/work-paper-formula-rewrite.js.map +1 -0
- package/dist/work-paper-function-registry.d.ts +39 -0
- package/dist/work-paper-function-registry.js +66 -0
- package/dist/work-paper-function-registry.js.map +1 -0
- package/dist/work-paper-history-operations.d.ts +15 -0
- package/dist/work-paper-history-operations.js +14 -0
- package/dist/work-paper-history-operations.js.map +1 -0
- package/dist/work-paper-history.d.ts +50 -0
- package/dist/work-paper-history.js +136 -0
- package/dist/work-paper-history.js.map +1 -0
- package/dist/work-paper-internals.d.ts +24 -0
- package/dist/work-paper-internals.js +59 -0
- package/dist/work-paper-internals.js.map +1 -0
- package/dist/work-paper-literal-mutation-queue.d.ts +18 -0
- package/dist/work-paper-literal-mutation-queue.js +40 -0
- package/dist/work-paper-literal-mutation-queue.js.map +1 -0
- package/dist/work-paper-matrix-application.d.ts +31 -0
- package/dist/work-paper-matrix-application.js +85 -0
- package/dist/work-paper-matrix-application.js.map +1 -0
- package/dist/work-paper-mutation-queues.d.ts +29 -0
- package/dist/work-paper-mutation-queues.js +72 -0
- package/dist/work-paper-mutation-queues.js.map +1 -0
- package/dist/work-paper-named-expression-fast-path.d.ts +37 -0
- package/dist/work-paper-named-expression-fast-path.js +100 -0
- package/dist/work-paper-named-expression-fast-path.js.map +1 -0
- package/dist/work-paper-named-expression-helpers.d.ts +54 -0
- package/dist/work-paper-named-expression-helpers.js +179 -0
- package/dist/work-paper-named-expression-helpers.js.map +1 -0
- package/dist/work-paper-named-expression-operations.d.ts +39 -0
- package/dist/work-paper-named-expression-operations.js +82 -0
- package/dist/work-paper-named-expression-operations.js.map +1 -0
- package/dist/work-paper-public-surface.d.ts +73 -0
- package/dist/work-paper-public-surface.js +165 -0
- package/dist/work-paper-public-surface.js.map +1 -0
- package/dist/work-paper-read-operations.d.ts +52 -0
- package/dist/work-paper-read-operations.js +185 -0
- package/dist/work-paper-read-operations.js.map +1 -0
- package/dist/work-paper-runtime-adapters.d.ts +144 -0
- package/dist/work-paper-runtime-adapters.js +256 -0
- package/dist/work-paper-runtime-adapters.js.map +1 -0
- package/dist/work-paper-runtime-helpers.d.ts +27 -0
- package/dist/work-paper-runtime-helpers.js +305 -0
- package/dist/work-paper-runtime-helpers.js.map +1 -0
- package/dist/work-paper-runtime-surface.d.ts +137 -0
- package/dist/work-paper-runtime-surface.js +702 -0
- package/dist/work-paper-runtime-surface.js.map +1 -0
- package/dist/work-paper-runtime.d.ts +56 -285
- package/dist/work-paper-runtime.js +403 -4809
- package/dist/work-paper-runtime.js.map +1 -1
- package/dist/work-paper-scratch-evaluator.js +29 -26
- package/dist/work-paper-scratch-evaluator.js.map +1 -1
- package/dist/work-paper-sheet-dimension-cache.d.ts +36 -0
- package/dist/work-paper-sheet-dimension-cache.js +158 -0
- package/dist/work-paper-sheet-dimension-cache.js.map +1 -0
- package/dist/work-paper-sheet-initialization.d.ts +19 -0
- package/dist/work-paper-sheet-initialization.js +93 -0
- package/dist/work-paper-sheet-initialization.js.map +1 -0
- package/dist/work-paper-sheet-inspection.d.ts +66 -0
- package/dist/work-paper-sheet-inspection.js +204 -0
- package/dist/work-paper-sheet-inspection.js.map +1 -0
- package/dist/work-paper-sheet-operations.d.ts +59 -0
- package/dist/work-paper-sheet-operations.js +104 -0
- package/dist/work-paper-sheet-operations.js.map +1 -0
- package/dist/work-paper-sheet-read.d.ts +21 -0
- package/dist/work-paper-sheet-read.js +32 -0
- package/dist/work-paper-sheet-read.js.map +1 -0
- package/dist/work-paper-sheet-rename-fast-path.d.ts +18 -0
- package/dist/work-paper-sheet-rename-fast-path.js +43 -0
- package/dist/work-paper-sheet-rename-fast-path.js.map +1 -0
- package/dist/work-paper-static-api.d.ts +18 -0
- package/dist/work-paper-static-api.js +44 -0
- package/dist/work-paper-static-api.js.map +1 -0
- package/dist/work-paper-static-registry.d.ts +21 -0
- package/dist/work-paper-static-registry.js +150 -0
- package/dist/work-paper-static-registry.js.map +1 -0
- package/dist/work-paper-tracked-change-reducer.d.ts +41 -0
- package/dist/work-paper-tracked-change-reducer.js +281 -0
- package/dist/work-paper-tracked-change-reducer.js.map +1 -0
- package/dist/work-paper-tracked-event-helpers.d.ts +89 -0
- package/dist/work-paper-tracked-event-helpers.js +366 -0
- package/dist/work-paper-tracked-event-helpers.js.map +1 -0
- package/dist/work-paper-types.d.ts +6 -5
- package/dist/work-paper-visibility-snapshot.d.ts +36 -0
- package/dist/work-paper-visibility-snapshot.js +62 -0
- package/dist/work-paper-visibility-snapshot.js.map +1 -0
- package/package.json +13 -5
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { EngineCellMutationRef } from '@bilig/core';
|
|
2
|
+
import type { WorkPaperSheetDimensions } from './work-paper-types.js';
|
|
3
|
+
import type { WorkPaperAxisIntervalEditMode, WorkPaperAxisKind } from './work-paper-axis-helpers.js';
|
|
4
|
+
export interface WorkPaperSheetDimensionEngine {
|
|
5
|
+
readonly workbook: {
|
|
6
|
+
listSpills(): readonly {
|
|
7
|
+
readonly sheetName: string;
|
|
8
|
+
}[];
|
|
9
|
+
getSheet(sheetName: string): {
|
|
10
|
+
readonly id: number;
|
|
11
|
+
} | undefined;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface WorkPaperSheetDimensionRecord {
|
|
15
|
+
readonly grid: {
|
|
16
|
+
forEachCellEntry(callback: (cellIndex: number, row: number, col: number) => void): void;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export declare class WorkPaperSheetDimensionCache {
|
|
20
|
+
private readonly engine;
|
|
21
|
+
private readonly dimensions;
|
|
22
|
+
private spillSheetIds;
|
|
23
|
+
constructor(engine: WorkPaperSheetDimensionEngine);
|
|
24
|
+
get(sheetId: number): WorkPaperSheetDimensions | undefined;
|
|
25
|
+
cache(sheetId: number, dimensions: WorkPaperSheetDimensions): void;
|
|
26
|
+
cacheInitialized(sheetId: number, dimensions: WorkPaperSheetDimensions): void;
|
|
27
|
+
scan(sheet: WorkPaperSheetDimensionRecord): WorkPaperSheetDimensions;
|
|
28
|
+
invalidate(sheetId: number): void;
|
|
29
|
+
invalidateAll(): void;
|
|
30
|
+
updateAfterCellMutationRefs(refs: readonly EngineCellMutationRef[]): void;
|
|
31
|
+
updateAfterAxisIntervalEdit(axis: WorkPaperAxisKind, mode: WorkPaperAxisIntervalEditMode, sheetId: number, start: number, amount: number): void;
|
|
32
|
+
updateAfterAxisMove(axis: WorkPaperAxisKind, sheetId: number, start: number, count: number, target: number): void;
|
|
33
|
+
private expand;
|
|
34
|
+
private invalidateIfEdge;
|
|
35
|
+
private sheetHasSpills;
|
|
36
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
export class WorkPaperSheetDimensionCache {
|
|
2
|
+
engine;
|
|
3
|
+
dimensions = new Map();
|
|
4
|
+
spillSheetIds = null;
|
|
5
|
+
constructor(engine) {
|
|
6
|
+
this.engine = engine;
|
|
7
|
+
}
|
|
8
|
+
get(sheetId) {
|
|
9
|
+
return this.dimensions.get(sheetId);
|
|
10
|
+
}
|
|
11
|
+
cache(sheetId, dimensions) {
|
|
12
|
+
this.dimensions.set(sheetId, { width: dimensions.width, height: dimensions.height });
|
|
13
|
+
}
|
|
14
|
+
cacheInitialized(sheetId, dimensions) {
|
|
15
|
+
if (this.sheetHasSpills(sheetId)) {
|
|
16
|
+
this.invalidate(sheetId);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
this.cache(sheetId, dimensions);
|
|
20
|
+
}
|
|
21
|
+
scan(sheet) {
|
|
22
|
+
let width = 0;
|
|
23
|
+
let height = 0;
|
|
24
|
+
sheet.grid.forEachCellEntry((_cellIndex, row, col) => {
|
|
25
|
+
height = Math.max(height, row + 1);
|
|
26
|
+
width = Math.max(width, col + 1);
|
|
27
|
+
});
|
|
28
|
+
return { width, height };
|
|
29
|
+
}
|
|
30
|
+
invalidate(sheetId) {
|
|
31
|
+
this.dimensions.delete(sheetId);
|
|
32
|
+
}
|
|
33
|
+
invalidateAll() {
|
|
34
|
+
this.dimensions.clear();
|
|
35
|
+
this.spillSheetIds = null;
|
|
36
|
+
}
|
|
37
|
+
updateAfterCellMutationRefs(refs) {
|
|
38
|
+
if (this.dimensions.size === 0) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (refs.length === 1) {
|
|
42
|
+
const ref = refs[0];
|
|
43
|
+
const mutation = ref?.mutation;
|
|
44
|
+
if (ref && mutation && mutation.kind !== 'setCellFormula') {
|
|
45
|
+
const cached = this.dimensions.get(ref.sheetId);
|
|
46
|
+
if (!cached) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const noKnownSpills = this.spillSheetIds !== null && !this.spillSheetIds.has(ref.sheetId);
|
|
50
|
+
if (noKnownSpills &&
|
|
51
|
+
(mutation.kind === 'setCellValue'
|
|
52
|
+
? mutation.row + 1 <= cached.height && mutation.col + 1 <= cached.width
|
|
53
|
+
: mutation.row + 1 < cached.height && mutation.col + 1 < cached.width)) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (let index = 0; index < refs.length; index += 1) {
|
|
59
|
+
const ref = refs[index];
|
|
60
|
+
if (!ref) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const mutation = ref.mutation;
|
|
64
|
+
if (mutation.kind === 'setCellFormula') {
|
|
65
|
+
this.spillSheetIds = null;
|
|
66
|
+
this.invalidate(ref.sheetId);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (this.sheetHasSpills(ref.sheetId)) {
|
|
70
|
+
this.invalidate(ref.sheetId);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (mutation.kind === 'clearCell') {
|
|
74
|
+
this.invalidateIfEdge(ref.sheetId, mutation.row, mutation.col);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
this.expand(ref.sheetId, mutation.row, mutation.col);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
updateAfterAxisIntervalEdit(axis, mode, sheetId, start, amount) {
|
|
81
|
+
const cached = this.dimensions.get(sheetId);
|
|
82
|
+
if (!cached) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (this.sheetHasSpills(sheetId)) {
|
|
86
|
+
this.invalidate(sheetId);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const dimension = axis === 'row' ? 'height' : 'width';
|
|
90
|
+
const current = cached[dimension];
|
|
91
|
+
if (mode === 'add') {
|
|
92
|
+
if (start < current) {
|
|
93
|
+
cached[dimension] = current + amount;
|
|
94
|
+
}
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (start >= current) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (start + amount < current) {
|
|
101
|
+
cached[dimension] = current - amount;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.invalidate(sheetId);
|
|
105
|
+
}
|
|
106
|
+
updateAfterAxisMove(axis, sheetId, start, count, target) {
|
|
107
|
+
const cached = this.dimensions.get(sheetId);
|
|
108
|
+
if (!cached) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (this.sheetHasSpills(sheetId)) {
|
|
112
|
+
this.invalidate(sheetId);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const current = axis === 'row' ? cached.height : cached.width;
|
|
116
|
+
const sourceInsideBounds = start < current;
|
|
117
|
+
const targetInsideOrAtBounds = target <= current;
|
|
118
|
+
const sourceEndsInsideBounds = start + count <= current;
|
|
119
|
+
if (!sourceInsideBounds && target >= current) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (sourceInsideBounds && sourceEndsInsideBounds && targetInsideOrAtBounds) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.invalidate(sheetId);
|
|
126
|
+
}
|
|
127
|
+
expand(sheetId, row, col) {
|
|
128
|
+
const cached = this.dimensions.get(sheetId);
|
|
129
|
+
if (!cached) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
cached.height = Math.max(cached.height, row + 1);
|
|
133
|
+
cached.width = Math.max(cached.width, col + 1);
|
|
134
|
+
}
|
|
135
|
+
invalidateIfEdge(sheetId, row, col) {
|
|
136
|
+
const cached = this.dimensions.get(sheetId);
|
|
137
|
+
if (!cached) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (row + 1 >= cached.height || col + 1 >= cached.width) {
|
|
141
|
+
this.invalidate(sheetId);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
sheetHasSpills(sheetId) {
|
|
145
|
+
if (this.spillSheetIds === null) {
|
|
146
|
+
const spillSheetIds = new Set();
|
|
147
|
+
this.engine.workbook.listSpills().forEach((spill) => {
|
|
148
|
+
const spillSheet = this.engine.workbook.getSheet(spill.sheetName);
|
|
149
|
+
if (spillSheet) {
|
|
150
|
+
spillSheetIds.add(spillSheet.id);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
this.spillSheetIds = spillSheetIds;
|
|
154
|
+
}
|
|
155
|
+
return this.spillSheetIds.has(sheetId);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=work-paper-sheet-dimension-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-sheet-dimension-cache.js","sourceRoot":"","sources":["../src/work-paper-sheet-dimension-cache.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,4BAA4B;IAIV;IAHZ,UAAU,GAAG,IAAI,GAAG,EAAoC,CAAA;IACjE,aAAa,GAAuB,IAAI,CAAA;IAEhD,YAA6B,MAAqC;QAArC,WAAM,GAAN,MAAM,CAA+B;IAAG,CAAC;IAEtE,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,UAAoC;QACzD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,gBAAgB,CAAC,OAAe,EAAE,UAAoC;QACpE,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YACxB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,CAAC,KAAoC;QACvC,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,UAAkB,EAAE,GAAW,EAAE,GAAW,EAAE,EAAE;YAC3E,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;YAClC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IAC1B,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAED,aAAa;QACX,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;IAC3B,CAAC;IAED,2BAA2B,CAAC,IAAsC;QAChE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ,CAAA;YAC9B,IAAI,GAAG,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAM;gBACR,CAAC;gBACD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACzF,IACE,aAAa;oBACb,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc;wBAC/B,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK;wBACvE,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EACxE,CAAC;oBACD,OAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YACvB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,SAAQ;YACV,CAAC;YACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAA;YAC7B,IAAI,QAAQ,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;gBACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC5B,SAAQ;YACV,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC5B,SAAQ;YACV,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAC9D,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED,2BAA2B,CACzB,IAAuB,EACvB,IAAmC,EACnC,OAAe,EACf,KAAa,EACb,MAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YACxB,OAAM;QACR,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAA;QACrD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;QACjC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,GAAG,MAAM,CAAA;YACtC,CAAC;YACD,OAAM;QACR,CAAC;QACD,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;YACrB,OAAM;QACR,CAAC;QACD,IAAI,KAAK,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,GAAG,MAAM,CAAA;YACpC,OAAM;QACR,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IAED,mBAAmB,CAAC,IAAuB,EAAE,OAAe,EAAE,KAAa,EAAE,KAAa,EAAE,MAAc;QACxG,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YACxB,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;QAC7D,MAAM,kBAAkB,GAAG,KAAK,GAAG,OAAO,CAAA;QAC1C,MAAM,sBAAsB,GAAG,MAAM,IAAI,OAAO,CAAA;QAChD,MAAM,sBAAsB,GAAG,KAAK,GAAG,KAAK,IAAI,OAAO,CAAA;QACvD,IAAI,CAAC,kBAAkB,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7C,OAAM;QACR,CAAC;QACD,IAAI,kBAAkB,IAAI,sBAAsB,IAAI,sBAAsB,EAAE,CAAC;YAC3E,OAAM;QACR,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IAEO,MAAM,CAAC,OAAe,EAAE,GAAW,EAAE,GAAW;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QAChD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;IAChD,CAAC;IAEO,gBAAgB,CAAC,OAAe,EAAE,GAAW,EAAE,GAAW;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,IAAI,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACxD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,OAAe;QACpC,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;YACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAClD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;gBACjE,IAAI,UAAU,EAAE,CAAC;oBACf,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type SpreadsheetEngine } from '@bilig/core';
|
|
2
|
+
import type { SerializedWorkPaperNamedExpression, WorkPaperConfig, WorkPaperSheetDimensions, WorkPaperSheets } from './work-paper-types.js';
|
|
3
|
+
export declare function initializeWorkPaperFromSheets(args: {
|
|
4
|
+
readonly engine: SpreadsheetEngine;
|
|
5
|
+
readonly config: WorkPaperConfig;
|
|
6
|
+
readonly sheets: WorkPaperSheets;
|
|
7
|
+
readonly namedExpressions: readonly SerializedWorkPaperNamedExpression[];
|
|
8
|
+
readonly hasNamedExpressions: () => boolean;
|
|
9
|
+
readonly hasFunctionAliases: () => boolean;
|
|
10
|
+
readonly withEngineEventCaptureDisabled: (callback: () => void) => void;
|
|
11
|
+
readonly upsertNamedExpression: (expression: SerializedWorkPaperNamedExpression, options: {
|
|
12
|
+
duringInitialization: boolean;
|
|
13
|
+
}) => void;
|
|
14
|
+
readonly rewriteFormulaForStorage: (formula: string, sheetId: number) => string;
|
|
15
|
+
readonly requireSheetId: (name: string) => number;
|
|
16
|
+
readonly cacheInitializedSheetDimensions: (sheetId: number, dimensions: WorkPaperSheetDimensions) => void;
|
|
17
|
+
readonly clearHistoryStacks: () => void;
|
|
18
|
+
readonly resetChangeTrackingCaches: () => void;
|
|
19
|
+
}): void;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { readRuntimeImage, readRuntimeSnapshot } from '@bilig/core';
|
|
2
|
+
import { loadInitialLiteralSheet, prepareInitialMixedSheetLoad } from './initial-sheet-load.js';
|
|
3
|
+
import { inspectRuntimeSnapshotSheetDimensionsWithinLimits, inspectSheetWithinLimits, runtimeSnapshotMatchesSheetEntries, } from './work-paper-sheet-inspection.js';
|
|
4
|
+
export function initializeWorkPaperFromSheets(args) {
|
|
5
|
+
const sheetEntries = Object.entries(args.sheets);
|
|
6
|
+
const runtimeSnapshot = args.namedExpressions.length === 0 && !args.hasFunctionAliases() ? readRuntimeSnapshot(args.sheets) : undefined;
|
|
7
|
+
const runtimeSnapshotMatchesSheets = runtimeSnapshot !== undefined && runtimeSnapshotMatchesSheetEntries(sheetEntries, runtimeSnapshot);
|
|
8
|
+
const runtimeSnapshotSheetsByName = runtimeSnapshotMatchesSheets
|
|
9
|
+
? new Map(runtimeSnapshot.sheets.map((sheet) => [sheet.name, sheet]))
|
|
10
|
+
: undefined;
|
|
11
|
+
const runtimeImageSheetCellsByName = runtimeSnapshotMatchesSheets && runtimeSnapshot
|
|
12
|
+
? new Map((readRuntimeImage(runtimeSnapshot)?.sheetCells ?? []).map((sheet) => [sheet.sheetName, sheet]))
|
|
13
|
+
: undefined;
|
|
14
|
+
const inspectedSheets = inspectWorkPaperInitialSheets({
|
|
15
|
+
sheetEntries,
|
|
16
|
+
config: args.config,
|
|
17
|
+
runtimeSnapshotSheetsByName,
|
|
18
|
+
runtimeImageSheetCellsByName,
|
|
19
|
+
});
|
|
20
|
+
args.withEngineEventCaptureDisabled(() => {
|
|
21
|
+
if (runtimeSnapshot && runtimeSnapshotMatchesSheets) {
|
|
22
|
+
args.engine.importSnapshot(runtimeSnapshot);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const sheetIds = sheetEntries.map(([sheetName]) => args.engine.createSheetForInitialization(sheetName));
|
|
26
|
+
args.namedExpressions.forEach((expression) => {
|
|
27
|
+
args.upsertNamedExpression(expression, { duringInitialization: true });
|
|
28
|
+
});
|
|
29
|
+
const initialFormulaRefs = [];
|
|
30
|
+
let initialFormulaPotentialNewCells = 0;
|
|
31
|
+
for (let index = 0; index < sheetEntries.length; index += 1) {
|
|
32
|
+
const [, sheet] = sheetEntries[index];
|
|
33
|
+
const sheetId = sheetIds[index];
|
|
34
|
+
const inspected = inspectedSheets[index];
|
|
35
|
+
if (!inspected.hasFormula) {
|
|
36
|
+
loadInitialLiteralSheet(args.engine, sheetId, sheet, inspected);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const rewriteInitialFormula = !args.hasNamedExpressions() && !args.hasFunctionAliases()
|
|
40
|
+
? (formula) => formula
|
|
41
|
+
: (formula) => args.rewriteFormulaForStorage(formula, sheetId);
|
|
42
|
+
const prepared = prepareInitialMixedSheetLoad({
|
|
43
|
+
engine: args.engine,
|
|
44
|
+
sheetId,
|
|
45
|
+
content: sheet,
|
|
46
|
+
rewriteFormula: rewriteInitialFormula,
|
|
47
|
+
inspection: inspected,
|
|
48
|
+
});
|
|
49
|
+
initialFormulaRefs.push(...prepared.formulaRefs);
|
|
50
|
+
initialFormulaPotentialNewCells += prepared.potentialNewCells;
|
|
51
|
+
}
|
|
52
|
+
if (initialFormulaRefs.length > 0) {
|
|
53
|
+
args.engine.initializeFormulaSourcesAtNow(initialFormulaRefs, initialFormulaPotentialNewCells);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
for (let index = 0; index < sheetEntries.length; index += 1) {
|
|
57
|
+
const sheetId = args.requireSheetId(sheetEntries[index][0]);
|
|
58
|
+
const inspected = inspectedSheets[index];
|
|
59
|
+
if (inspected !== undefined) {
|
|
60
|
+
args.cacheInitializedSheetDimensions(sheetId, inspected.dimensions);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
args.clearHistoryStacks();
|
|
65
|
+
args.resetChangeTrackingCaches();
|
|
66
|
+
}
|
|
67
|
+
function inspectWorkPaperInitialSheets(args) {
|
|
68
|
+
const inspectedSheets = [];
|
|
69
|
+
for (let index = 0; index < args.sheetEntries.length; index += 1) {
|
|
70
|
+
const [sheetName, sheet] = args.sheetEntries[index];
|
|
71
|
+
const snapshotSheet = args.runtimeSnapshotSheetsByName?.get(sheetName);
|
|
72
|
+
inspectedSheets[index] = snapshotSheet
|
|
73
|
+
? (() => {
|
|
74
|
+
const runtimeSheetCells = args.runtimeImageSheetCellsByName?.get(sheetName);
|
|
75
|
+
const dimensions = inspectRuntimeSnapshotSheetDimensionsWithinLimits({
|
|
76
|
+
sheetName,
|
|
77
|
+
snapshotSheet,
|
|
78
|
+
...(runtimeSheetCells !== undefined ? { runtimeSheetCells } : {}),
|
|
79
|
+
config: args.config,
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
hasFormula: false,
|
|
83
|
+
dimensions,
|
|
84
|
+
materializedCellCount: runtimeSheetCells?.cellCount ?? 0,
|
|
85
|
+
maxColumnCount: dimensions.width,
|
|
86
|
+
formulaCellCount: 0,
|
|
87
|
+
};
|
|
88
|
+
})()
|
|
89
|
+
: inspectSheetWithinLimits(sheetName, sheet, args.config);
|
|
90
|
+
}
|
|
91
|
+
return inspectedSheets;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=work-paper-sheet-initialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-sheet-initialization.js","sourceRoot":"","sources":["../src/work-paper-sheet-initialization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type CellValue, type WorkbookSnapshot } from '@bilig/protocol';
|
|
2
|
+
import type { WorkPaperCellAddress, WorkPaperCellType, WorkPaperCellValueDetailedType, WorkPaperCellValueType, WorkPaperConfig, WorkPaperSheet, WorkPaperSheetDimensions } from './work-paper-types.js';
|
|
3
|
+
export interface WorkPaperSheetInspection {
|
|
4
|
+
readonly hasFormula: boolean;
|
|
5
|
+
readonly dimensions: WorkPaperSheetDimensions;
|
|
6
|
+
readonly materializedCellCount: number;
|
|
7
|
+
readonly maxColumnCount: number;
|
|
8
|
+
readonly formulaCellCount: number;
|
|
9
|
+
}
|
|
10
|
+
export interface WorkPaperRuntimeSnapshotSheetList {
|
|
11
|
+
readonly sheets: readonly {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
15
|
+
export declare function compareSheetNames(left: string, right: string): number;
|
|
16
|
+
export declare function inspectSheetDimensionsWithinLimits(sheetName: string, sheet: WorkPaperSheet, config: WorkPaperConfig): WorkPaperSheetDimensions;
|
|
17
|
+
export declare function inspectRuntimeSnapshotSheetDimensionsWithinLimits(args: {
|
|
18
|
+
readonly sheetName: string;
|
|
19
|
+
readonly snapshotSheet: WorkbookSnapshot['sheets'][number];
|
|
20
|
+
readonly runtimeSheetCells?: {
|
|
21
|
+
readonly coords?: readonly {
|
|
22
|
+
readonly row: number;
|
|
23
|
+
readonly col: number;
|
|
24
|
+
}[];
|
|
25
|
+
readonly dimensions?: {
|
|
26
|
+
readonly width: number;
|
|
27
|
+
readonly height: number;
|
|
28
|
+
};
|
|
29
|
+
readonly cellCount?: number;
|
|
30
|
+
};
|
|
31
|
+
readonly config: WorkPaperConfig;
|
|
32
|
+
}): WorkPaperSheetDimensions;
|
|
33
|
+
export declare function inspectSheetWithinLimits(sheetName: string, sheet: WorkPaperSheet, config: WorkPaperConfig): WorkPaperSheetInspection;
|
|
34
|
+
export declare function cellHasFormulaPrefix(value: string): boolean;
|
|
35
|
+
export declare function classifyWorkPaperCell(input: {
|
|
36
|
+
readonly hasFormula: boolean;
|
|
37
|
+
readonly isEmpty: boolean;
|
|
38
|
+
readonly isPartOfArray: boolean;
|
|
39
|
+
}): WorkPaperCellType;
|
|
40
|
+
export declare function doesWorkPaperCellHaveSimpleValue(input: {
|
|
41
|
+
readonly hasFormula: boolean;
|
|
42
|
+
readonly isEmpty: boolean;
|
|
43
|
+
}): boolean;
|
|
44
|
+
export declare function workPaperCellValueType(value: CellValue): WorkPaperCellValueType;
|
|
45
|
+
export declare function workPaperCellValueDetailedType(input: {
|
|
46
|
+
readonly value: CellValue;
|
|
47
|
+
readonly format?: string | undefined;
|
|
48
|
+
}): WorkPaperCellValueDetailedType;
|
|
49
|
+
export interface WorkPaperSpillRangeLike {
|
|
50
|
+
readonly sheetName: string;
|
|
51
|
+
readonly address: string;
|
|
52
|
+
readonly rows: number;
|
|
53
|
+
readonly cols: number;
|
|
54
|
+
}
|
|
55
|
+
export declare function workPaperCellIsInsideSpillRange(input: {
|
|
56
|
+
readonly address: WorkPaperCellAddress;
|
|
57
|
+
readonly spill: WorkPaperSpillRangeLike;
|
|
58
|
+
readonly requireSheetId: (sheetName: string) => number;
|
|
59
|
+
}): boolean;
|
|
60
|
+
export declare function isWorkPaperCellPartOfArray(input: {
|
|
61
|
+
readonly address: WorkPaperCellAddress;
|
|
62
|
+
readonly spillRanges: readonly WorkPaperSpillRangeLike[];
|
|
63
|
+
readonly requireSheetId: (sheetName: string) => number;
|
|
64
|
+
}): boolean;
|
|
65
|
+
export declare function runtimeSnapshotMatchesSheetEntries(sheetEntries: readonly (readonly [string, WorkPaperSheet])[], runtimeSnapshot: WorkPaperRuntimeSnapshotSheetList): boolean;
|
|
66
|
+
export declare function validateSheetWithinLimits(sheetName: string, sheet: WorkPaperSheet, config: WorkPaperConfig): void;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { MAX_COLS, MAX_ROWS, ValueTag } from '@bilig/protocol';
|
|
2
|
+
import { parseCellAddress } from '@bilig/formula';
|
|
3
|
+
import { WorkPaperSheetSizeLimitExceededError, WorkPaperUnableToParseError } from './work-paper-errors.js';
|
|
4
|
+
export function compareSheetNames(left, right) {
|
|
5
|
+
return left.localeCompare(right);
|
|
6
|
+
}
|
|
7
|
+
export function inspectSheetDimensionsWithinLimits(sheetName, sheet, config) {
|
|
8
|
+
const height = sheet.length;
|
|
9
|
+
let width = 0;
|
|
10
|
+
let materializedHeight = 0;
|
|
11
|
+
let materializedWidth = 0;
|
|
12
|
+
for (let rowIndex = 0; rowIndex < sheet.length; rowIndex += 1) {
|
|
13
|
+
const row = sheet[rowIndex];
|
|
14
|
+
if (!Array.isArray(row)) {
|
|
15
|
+
throw new WorkPaperUnableToParseError({ sheetName, reason: 'Rows must be arrays' });
|
|
16
|
+
}
|
|
17
|
+
width = Math.max(width, row.length);
|
|
18
|
+
let rowHasMaterializedCell = false;
|
|
19
|
+
let lastMaterializedCol = -1;
|
|
20
|
+
for (let colIndex = 0; colIndex < row.length; colIndex += 1) {
|
|
21
|
+
if (row[colIndex] !== null) {
|
|
22
|
+
rowHasMaterializedCell = true;
|
|
23
|
+
lastMaterializedCol = colIndex;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (rowHasMaterializedCell) {
|
|
27
|
+
materializedHeight = rowIndex + 1;
|
|
28
|
+
if (lastMaterializedCol + 1 > materializedWidth) {
|
|
29
|
+
materializedWidth = lastMaterializedCol + 1;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (height > (config.maxRows ?? MAX_ROWS) || width > (config.maxColumns ?? MAX_COLS)) {
|
|
34
|
+
throw new WorkPaperSheetSizeLimitExceededError();
|
|
35
|
+
}
|
|
36
|
+
return { width: materializedWidth, height: materializedHeight };
|
|
37
|
+
}
|
|
38
|
+
export function inspectRuntimeSnapshotSheetDimensionsWithinLimits(args) {
|
|
39
|
+
let materializedHeight = 0;
|
|
40
|
+
let materializedWidth = 0;
|
|
41
|
+
const dimensions = args.runtimeSheetCells?.dimensions;
|
|
42
|
+
if (dimensions &&
|
|
43
|
+
Number.isInteger(dimensions.width) &&
|
|
44
|
+
Number.isInteger(dimensions.height) &&
|
|
45
|
+
dimensions.width >= 0 &&
|
|
46
|
+
dimensions.height >= 0) {
|
|
47
|
+
materializedWidth = dimensions.width;
|
|
48
|
+
materializedHeight = dimensions.height;
|
|
49
|
+
}
|
|
50
|
+
else if (args.runtimeSheetCells?.coords) {
|
|
51
|
+
for (const coords of args.runtimeSheetCells.coords) {
|
|
52
|
+
materializedHeight = Math.max(materializedHeight, coords.row + 1);
|
|
53
|
+
materializedWidth = Math.max(materializedWidth, coords.col + 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
for (const cell of args.snapshotSheet.cells) {
|
|
58
|
+
const parsed = parseCellAddress(cell.address, args.sheetName);
|
|
59
|
+
materializedHeight = Math.max(materializedHeight, parsed.row + 1);
|
|
60
|
+
materializedWidth = Math.max(materializedWidth, parsed.col + 1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (materializedHeight > (args.config.maxRows ?? MAX_ROWS) || materializedWidth > (args.config.maxColumns ?? MAX_COLS)) {
|
|
64
|
+
throw new WorkPaperSheetSizeLimitExceededError();
|
|
65
|
+
}
|
|
66
|
+
return { width: materializedWidth, height: materializedHeight };
|
|
67
|
+
}
|
|
68
|
+
export function inspectSheetWithinLimits(sheetName, sheet, config) {
|
|
69
|
+
const height = sheet.length;
|
|
70
|
+
let width = 0;
|
|
71
|
+
let materializedHeight = 0;
|
|
72
|
+
let materializedWidth = 0;
|
|
73
|
+
let materializedCellCount = 0;
|
|
74
|
+
let maxColumnCount = 0;
|
|
75
|
+
let formulaCellCount = 0;
|
|
76
|
+
let hasFormula = false;
|
|
77
|
+
for (let rowIndex = 0; rowIndex < sheet.length; rowIndex += 1) {
|
|
78
|
+
const row = sheet[rowIndex];
|
|
79
|
+
if (!Array.isArray(row)) {
|
|
80
|
+
throw new WorkPaperUnableToParseError({ sheetName, reason: 'Rows must be arrays' });
|
|
81
|
+
}
|
|
82
|
+
width = Math.max(width, row.length);
|
|
83
|
+
let rowHasMaterializedCell = false;
|
|
84
|
+
let lastMaterializedCol = -1;
|
|
85
|
+
for (let colIndex = 0; colIndex < row.length; colIndex += 1) {
|
|
86
|
+
const cell = row[colIndex];
|
|
87
|
+
if (cell !== null) {
|
|
88
|
+
materializedCellCount += 1;
|
|
89
|
+
rowHasMaterializedCell = true;
|
|
90
|
+
lastMaterializedCol = colIndex;
|
|
91
|
+
}
|
|
92
|
+
if (typeof cell === 'string' && cellHasFormulaPrefix(cell)) {
|
|
93
|
+
formulaCellCount += 1;
|
|
94
|
+
hasFormula = true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (rowHasMaterializedCell) {
|
|
98
|
+
materializedHeight = rowIndex + 1;
|
|
99
|
+
if (lastMaterializedCol + 1 > materializedWidth) {
|
|
100
|
+
materializedWidth = lastMaterializedCol + 1;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
maxColumnCount = Math.max(maxColumnCount, width);
|
|
104
|
+
}
|
|
105
|
+
if (height > (config.maxRows ?? MAX_ROWS) || width > (config.maxColumns ?? MAX_COLS)) {
|
|
106
|
+
throw new WorkPaperSheetSizeLimitExceededError();
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
hasFormula,
|
|
110
|
+
dimensions: { width: materializedWidth, height: materializedHeight },
|
|
111
|
+
materializedCellCount,
|
|
112
|
+
maxColumnCount,
|
|
113
|
+
formulaCellCount,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export function cellHasFormulaPrefix(value) {
|
|
117
|
+
const first = value.charCodeAt(0);
|
|
118
|
+
if (first === 61) {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
if (first !== 32 && first !== 9 && first !== 10 && first !== 13) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
return value.trimStart().charCodeAt(0) === 61;
|
|
125
|
+
}
|
|
126
|
+
export function classifyWorkPaperCell(input) {
|
|
127
|
+
if (input.isEmpty) {
|
|
128
|
+
return 'EMPTY';
|
|
129
|
+
}
|
|
130
|
+
if (input.isPartOfArray) {
|
|
131
|
+
return 'ARRAY';
|
|
132
|
+
}
|
|
133
|
+
return input.hasFormula ? 'FORMULA' : 'VALUE';
|
|
134
|
+
}
|
|
135
|
+
export function doesWorkPaperCellHaveSimpleValue(input) {
|
|
136
|
+
return !input.hasFormula && !input.isEmpty;
|
|
137
|
+
}
|
|
138
|
+
export function workPaperCellValueType(value) {
|
|
139
|
+
switch (value.tag) {
|
|
140
|
+
case ValueTag.Number:
|
|
141
|
+
return 'NUMBER';
|
|
142
|
+
case ValueTag.String:
|
|
143
|
+
return 'STRING';
|
|
144
|
+
case ValueTag.Boolean:
|
|
145
|
+
return 'BOOLEAN';
|
|
146
|
+
case ValueTag.Error:
|
|
147
|
+
return 'ERROR';
|
|
148
|
+
case ValueTag.Empty:
|
|
149
|
+
default:
|
|
150
|
+
return 'EMPTY';
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export function workPaperCellValueDetailedType(input) {
|
|
154
|
+
const type = workPaperCellValueType(input.value);
|
|
155
|
+
if (type !== 'NUMBER') {
|
|
156
|
+
return type;
|
|
157
|
+
}
|
|
158
|
+
const format = input.format?.toLowerCase() ?? '';
|
|
159
|
+
if (format.includes('yy') || format.includes('dd')) {
|
|
160
|
+
if (format.includes('h') || format.includes('s')) {
|
|
161
|
+
return 'DATETIME';
|
|
162
|
+
}
|
|
163
|
+
return 'DATE';
|
|
164
|
+
}
|
|
165
|
+
if (format.includes('h') || format.includes('s')) {
|
|
166
|
+
return 'TIME';
|
|
167
|
+
}
|
|
168
|
+
return type;
|
|
169
|
+
}
|
|
170
|
+
export function workPaperCellIsInsideSpillRange(input) {
|
|
171
|
+
if (input.requireSheetId(input.spill.sheetName) !== input.address.sheet) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
const owner = parseCellAddress(input.spill.address, input.spill.sheetName);
|
|
175
|
+
return (input.address.row >= owner.row &&
|
|
176
|
+
input.address.row < owner.row + input.spill.rows &&
|
|
177
|
+
input.address.col >= owner.col &&
|
|
178
|
+
input.address.col < owner.col + input.spill.cols);
|
|
179
|
+
}
|
|
180
|
+
export function isWorkPaperCellPartOfArray(input) {
|
|
181
|
+
return input.spillRanges.some((spill) => workPaperCellIsInsideSpillRange({
|
|
182
|
+
address: input.address,
|
|
183
|
+
spill,
|
|
184
|
+
requireSheetId: input.requireSheetId,
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
export function runtimeSnapshotMatchesSheetEntries(sheetEntries, runtimeSnapshot) {
|
|
188
|
+
if (runtimeSnapshot.sheets.length !== sheetEntries.length) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
const matchedNames = new Set();
|
|
192
|
+
const sheetNames = new Set(sheetEntries.map(([sheetName]) => sheetName));
|
|
193
|
+
for (const snapshotSheet of runtimeSnapshot.sheets) {
|
|
194
|
+
if (!sheetNames.has(snapshotSheet.name) || matchedNames.has(snapshotSheet.name)) {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
matchedNames.add(snapshotSheet.name);
|
|
198
|
+
}
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
export function validateSheetWithinLimits(sheetName, sheet, config) {
|
|
202
|
+
inspectSheetWithinLimits(sheetName, sheet, config);
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=work-paper-sheet-inspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-sheet-inspection.js","sourceRoot":"","sources":["../src/work-paper-sheet-inspection.ts"],"names":[],"mappings":"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"}
|