@bilig/workbook 0.58.0 → 0.62.0
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 +99 -53
- package/dist/check.d.ts +1 -1
- package/dist/check.js +3 -0
- package/dist/check.js.map +1 -1
- package/dist/describe.d.ts +8 -0
- package/dist/describe.js +10 -0
- package/dist/describe.js.map +1 -1
- package/dist/features.d.ts +108 -0
- package/dist/features.js +208 -0
- package/dist/features.js.map +1 -0
- package/dist/find.d.ts +41 -0
- package/dist/find.js +250 -5
- package/dist/find.js.map +1 -1
- package/dist/formula.d.ts +7 -0
- package/dist/formula.js +49 -6
- package/dist/formula.js.map +1 -1
- package/dist/guards.js +32 -0
- package/dist/guards.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +16 -0
- package/dist/input.js +119 -0
- package/dist/input.js.map +1 -1
- package/dist/model.d.ts +2 -1
- package/dist/model.js +25 -1
- package/dist/model.js.map +1 -1
- package/dist/plan-data.d.ts +13 -0
- package/dist/plan-data.js +212 -0
- package/dist/plan-data.js.map +1 -0
- package/dist/requirements.d.ts +30 -2
- package/dist/requirements.js +80 -1
- package/dist/requirements.js.map +1 -1
- package/dist/result.d.ts +6 -2
- package/dist/result.js +7 -0
- package/dist/result.js.map +1 -1
- package/dist/run.d.ts +5 -3
- package/dist/run.js +118 -65
- package/dist/run.js.map +1 -1
- package/dist/verify.d.ts +3 -2
- package/dist/verify.js +74 -3
- package/dist/verify.js.map +1 -1
- package/package.json +4 -4
package/dist/features.js
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { isCellRangeRef } from '@bilig/protocol';
|
|
2
|
+
import { isWorkbookOp } from './guards.js';
|
|
3
|
+
import { isWorkbookActionInput, isWorkbookActionInputDescription, normalizeWorkbookActionInput, } from './input.js';
|
|
4
|
+
export function normalizeWorkbookFeatureId(value, label = 'Workbook feature id') {
|
|
5
|
+
const normalized = value.trim();
|
|
6
|
+
if (normalized === '') {
|
|
7
|
+
throw new Error(`${label} cannot be empty`);
|
|
8
|
+
}
|
|
9
|
+
if (normalized !== value) {
|
|
10
|
+
throw new Error(`${label} must not have leading or trailing whitespace`);
|
|
11
|
+
}
|
|
12
|
+
return normalized;
|
|
13
|
+
}
|
|
14
|
+
export function defineWorkbookFeaturePlugin(plugin) {
|
|
15
|
+
const id = normalizeWorkbookFeatureId(plugin.id);
|
|
16
|
+
const version = normalizeRequiredString(plugin.version, `Workbook feature ${id} version`);
|
|
17
|
+
const dependsOn = plugin.dependsOn?.map((dependency) => normalizeWorkbookFeatureId(dependency, `Workbook feature ${id} dependency`));
|
|
18
|
+
const commands = plugin.commands.map((command) => normalizeWorkbookCommandDescriptor(command, id));
|
|
19
|
+
const projectionInterceptors = plugin.projectionInterceptors.map((interceptor) => normalizeProjectionInterceptor(interceptor, id));
|
|
20
|
+
const uiContributions = plugin.uiContributions.map((contribution) => normalizeUiContribution(contribution, id));
|
|
21
|
+
return Object.freeze({
|
|
22
|
+
id,
|
|
23
|
+
version,
|
|
24
|
+
...(dependsOn !== undefined ? { dependsOn: Object.freeze([...dependsOn]) } : {}),
|
|
25
|
+
commands: Object.freeze(commands),
|
|
26
|
+
projectionInterceptors: Object.freeze(projectionInterceptors),
|
|
27
|
+
uiContributions: Object.freeze(uiContributions),
|
|
28
|
+
...(plugin.register !== undefined ? { register: plugin.register } : {}),
|
|
29
|
+
...(plugin.activate !== undefined ? { activate: plugin.activate } : {}),
|
|
30
|
+
...(plugin.dispose !== undefined ? { dispose: plugin.dispose } : {}),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export function normalizeWorkbookCommandDescriptor(descriptor, expectedFeatureId) {
|
|
34
|
+
const featureId = normalizeWorkbookFeatureId(descriptor.featureId, 'Workbook command feature id');
|
|
35
|
+
if (expectedFeatureId !== undefined && featureId !== expectedFeatureId) {
|
|
36
|
+
throw new Error(`Workbook command ${descriptor.id} feature id ${featureId} does not match plugin ${expectedFeatureId}`);
|
|
37
|
+
}
|
|
38
|
+
const id = normalizeRequiredString(descriptor.id, 'Workbook command id');
|
|
39
|
+
const label = normalizeRequiredString(descriptor.label, `Workbook command ${id} label`);
|
|
40
|
+
const description = descriptor.description === undefined ? undefined : normalizeRequiredString(descriptor.description, `Workbook command ${id} description`);
|
|
41
|
+
if (!isWorkbookCommandCategory(descriptor.category)) {
|
|
42
|
+
throw new Error(`Workbook command ${id} category is invalid`);
|
|
43
|
+
}
|
|
44
|
+
if (descriptor.input !== undefined && !isWorkbookActionInputDescription(descriptor.input)) {
|
|
45
|
+
throw new Error(`Workbook command ${id} input description is invalid`);
|
|
46
|
+
}
|
|
47
|
+
return Object.freeze({
|
|
48
|
+
id,
|
|
49
|
+
featureId,
|
|
50
|
+
category: descriptor.category,
|
|
51
|
+
label,
|
|
52
|
+
...(description !== undefined ? { description } : {}),
|
|
53
|
+
...(descriptor.input !== undefined ? { input: descriptor.input } : {}),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
export function normalizeWorkbookCommandReceipt(receipt) {
|
|
57
|
+
const featureId = normalizeWorkbookFeatureId(receipt.featureId, 'Workbook command receipt feature id');
|
|
58
|
+
const commandId = normalizeRequiredString(receipt.commandId, 'Workbook command receipt command id');
|
|
59
|
+
if (!isWorkbookCommandCategory(receipt.category)) {
|
|
60
|
+
throw new Error(`Workbook command receipt ${commandId} category is invalid`);
|
|
61
|
+
}
|
|
62
|
+
if (!isWorkbookCommandReceiptStatus(receipt.status)) {
|
|
63
|
+
throw new Error(`Workbook command receipt ${commandId} status is invalid`);
|
|
64
|
+
}
|
|
65
|
+
const previewOps = receipt.previewOps?.map((op) => normalizeReceiptOp(commandId, op, 'preview'));
|
|
66
|
+
const appliedOps = receipt.appliedOps?.map((op) => normalizeReceiptOp(commandId, op, 'applied'));
|
|
67
|
+
const changedRanges = receipt.changedRanges?.map((range) => normalizeReceiptRange(commandId, range));
|
|
68
|
+
const proof = receipt.proof === undefined ? undefined : normalizeWorkbookActionInput(receipt.proof);
|
|
69
|
+
const metadata = receipt.metadata === undefined ? undefined : normalizeWorkbookActionInput(receipt.metadata);
|
|
70
|
+
const message = receipt.message === undefined ? undefined : normalizeRequiredString(receipt.message, `Workbook command receipt ${commandId} message`);
|
|
71
|
+
const errors = receipt.errors?.map((error) => normalizeRequiredString(error, `Workbook command receipt ${commandId} error`));
|
|
72
|
+
return Object.freeze({
|
|
73
|
+
status: receipt.status,
|
|
74
|
+
featureId,
|
|
75
|
+
commandId,
|
|
76
|
+
category: receipt.category,
|
|
77
|
+
...(previewOps !== undefined ? { previewOps: Object.freeze(previewOps) } : {}),
|
|
78
|
+
...(appliedOps !== undefined ? { appliedOps: Object.freeze(appliedOps) } : {}),
|
|
79
|
+
...(receipt.undo !== undefined ? { undo: receipt.undo } : {}),
|
|
80
|
+
...(changedRanges !== undefined ? { changedRanges: Object.freeze(changedRanges) } : {}),
|
|
81
|
+
...(proof !== undefined ? { proof } : {}),
|
|
82
|
+
...(message !== undefined ? { message } : {}),
|
|
83
|
+
...(metadata !== undefined ? { metadata } : {}),
|
|
84
|
+
...(errors !== undefined ? { errors: Object.freeze(errors) } : {}),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export function isWorkbookCommandReceipt(value) {
|
|
88
|
+
if (!isWorkbookCommandReceiptCandidate(value)) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
normalizeWorkbookCommandReceipt(value);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export function workbookCommandReceiptOpsMatch(receipt) {
|
|
100
|
+
if (receipt.previewOps === undefined || receipt.appliedOps === undefined) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return JSON.stringify(receipt.previewOps) === JSON.stringify(receipt.appliedOps);
|
|
104
|
+
}
|
|
105
|
+
function normalizeProjectionInterceptor(interceptor, expectedFeatureId) {
|
|
106
|
+
const featureId = normalizeWorkbookFeatureId(interceptor.featureId, 'Workbook projection interceptor feature id');
|
|
107
|
+
if (featureId !== expectedFeatureId) {
|
|
108
|
+
throw new Error(`Workbook projection interceptor ${interceptor.id} feature id ${featureId} does not match plugin ${expectedFeatureId}`);
|
|
109
|
+
}
|
|
110
|
+
const id = normalizeRequiredString(interceptor.id, 'Workbook projection interceptor id');
|
|
111
|
+
if (!isWorkbookProjectionInterceptorPoint(interceptor.point)) {
|
|
112
|
+
throw new Error(`Workbook projection interceptor ${id} point is invalid`);
|
|
113
|
+
}
|
|
114
|
+
const label = interceptor.label === undefined ? undefined : normalizeRequiredString(interceptor.label, `Workbook projection interceptor ${id} label`);
|
|
115
|
+
if (interceptor.priority !== undefined && (!Number.isSafeInteger(interceptor.priority) || !Number.isFinite(interceptor.priority))) {
|
|
116
|
+
throw new Error(`Workbook projection interceptor ${id} priority is invalid`);
|
|
117
|
+
}
|
|
118
|
+
return Object.freeze({
|
|
119
|
+
id,
|
|
120
|
+
featureId,
|
|
121
|
+
point: interceptor.point,
|
|
122
|
+
...(interceptor.priority !== undefined ? { priority: interceptor.priority } : {}),
|
|
123
|
+
...(label !== undefined ? { label } : {}),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function normalizeUiContribution(contribution, expectedFeatureId) {
|
|
127
|
+
const featureId = normalizeWorkbookFeatureId(contribution.featureId, 'Workbook UI contribution feature id');
|
|
128
|
+
if (featureId !== expectedFeatureId) {
|
|
129
|
+
throw new Error(`Workbook UI contribution ${contribution.id} feature id ${featureId} does not match plugin ${expectedFeatureId}`);
|
|
130
|
+
}
|
|
131
|
+
const id = normalizeRequiredString(contribution.id, 'Workbook UI contribution id');
|
|
132
|
+
const label = normalizeRequiredString(contribution.label, `Workbook UI contribution ${id} label`);
|
|
133
|
+
if (!isWorkbookUiContributionSlot(contribution.slot)) {
|
|
134
|
+
throw new Error(`Workbook UI contribution ${id} slot is invalid`);
|
|
135
|
+
}
|
|
136
|
+
if (contribution.order !== undefined && (!Number.isSafeInteger(contribution.order) || !Number.isFinite(contribution.order))) {
|
|
137
|
+
throw new Error(`Workbook UI contribution ${id} order is invalid`);
|
|
138
|
+
}
|
|
139
|
+
if (contribution.metadata !== undefined && !isWorkbookActionInput(contribution.metadata)) {
|
|
140
|
+
throw new Error(`Workbook UI contribution ${id} metadata is invalid`);
|
|
141
|
+
}
|
|
142
|
+
return Object.freeze({
|
|
143
|
+
id,
|
|
144
|
+
featureId,
|
|
145
|
+
slot: contribution.slot,
|
|
146
|
+
label,
|
|
147
|
+
...(contribution.order !== undefined ? { order: contribution.order } : {}),
|
|
148
|
+
...(contribution.metadata !== undefined ? { metadata: normalizeWorkbookActionInput(contribution.metadata) } : {}),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function normalizeReceiptOp(commandId, op, label) {
|
|
152
|
+
if (!isWorkbookOp(op)) {
|
|
153
|
+
throw new Error(`Workbook command receipt ${commandId} ${label} op is invalid`);
|
|
154
|
+
}
|
|
155
|
+
return structuredClone(op);
|
|
156
|
+
}
|
|
157
|
+
function normalizeReceiptRange(commandId, range) {
|
|
158
|
+
if (!isCellRangeRef(range)) {
|
|
159
|
+
throw new Error(`Workbook command receipt ${commandId} changed range is invalid`);
|
|
160
|
+
}
|
|
161
|
+
return structuredClone(range);
|
|
162
|
+
}
|
|
163
|
+
function isWorkbookCommandReceiptCandidate(value) {
|
|
164
|
+
return (isRecord(value) &&
|
|
165
|
+
typeof value['featureId'] === 'string' &&
|
|
166
|
+
typeof value['commandId'] === 'string' &&
|
|
167
|
+
isWorkbookCommandCategory(value['category']) &&
|
|
168
|
+
isWorkbookCommandReceiptStatus(value['status']) &&
|
|
169
|
+
(value['previewOps'] === undefined || (Array.isArray(value['previewOps']) && value['previewOps'].every((op) => isWorkbookOp(op)))) &&
|
|
170
|
+
(value['appliedOps'] === undefined || (Array.isArray(value['appliedOps']) && value['appliedOps'].every((op) => isWorkbookOp(op)))) &&
|
|
171
|
+
(value['changedRanges'] === undefined ||
|
|
172
|
+
(Array.isArray(value['changedRanges']) && value['changedRanges'].every((range) => isCellRangeRef(range)))) &&
|
|
173
|
+
(value['proof'] === undefined || isWorkbookActionInput(value['proof'])) &&
|
|
174
|
+
(value['metadata'] === undefined || isWorkbookActionInput(value['metadata'])) &&
|
|
175
|
+
(value['message'] === undefined || typeof value['message'] === 'string') &&
|
|
176
|
+
(value['errors'] === undefined || (Array.isArray(value['errors']) && value['errors'].every((error) => typeof error === 'string'))));
|
|
177
|
+
}
|
|
178
|
+
function isRecord(value) {
|
|
179
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
180
|
+
}
|
|
181
|
+
function normalizeRequiredString(value, label) {
|
|
182
|
+
const normalized = value.trim();
|
|
183
|
+
if (normalized === '') {
|
|
184
|
+
throw new Error(`${label} cannot be empty`);
|
|
185
|
+
}
|
|
186
|
+
if (normalized !== value) {
|
|
187
|
+
throw new Error(`${label} must not have leading or trailing whitespace`);
|
|
188
|
+
}
|
|
189
|
+
return normalized;
|
|
190
|
+
}
|
|
191
|
+
function isWorkbookCommandCategory(value) {
|
|
192
|
+
return value === 'command' || value === 'operation' || value === 'mutation';
|
|
193
|
+
}
|
|
194
|
+
function isWorkbookCommandReceiptStatus(value) {
|
|
195
|
+
return value === 'previewed' || value === 'applied' || value === 'rejected' || value === 'noop';
|
|
196
|
+
}
|
|
197
|
+
function isWorkbookProjectionInterceptorPoint(value) {
|
|
198
|
+
return (value === 'cellDisplay' ||
|
|
199
|
+
value === 'cellStyle' ||
|
|
200
|
+
value === 'rangeChrome' ||
|
|
201
|
+
value === 'rowVisibility' ||
|
|
202
|
+
value === 'beforeCommand' ||
|
|
203
|
+
value === 'commandMetadata');
|
|
204
|
+
}
|
|
205
|
+
function isWorkbookUiContributionSlot(value) {
|
|
206
|
+
return value === 'toolbar' || value === 'sidePanel' || value === 'floatingOverlay' || value === 'status';
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"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"}
|
package/dist/find.d.ts
CHANGED
|
@@ -51,10 +51,49 @@ export interface WorkbookRowsRef extends WorkbookBaseRef {
|
|
|
51
51
|
readonly column: (name: string) => WorkbookColumnRef;
|
|
52
52
|
}
|
|
53
53
|
export type WorkbookRef = WorkbookRangeRef | WorkbookNameRef | WorkbookTableRef | WorkbookColumnRef | WorkbookRowsRef;
|
|
54
|
+
export interface WorkbookBaseRefData {
|
|
55
|
+
readonly kind: WorkbookRefKind;
|
|
56
|
+
readonly id: string;
|
|
57
|
+
readonly label: string;
|
|
58
|
+
}
|
|
59
|
+
export interface WorkbookRangeRefData extends WorkbookBaseRefData {
|
|
60
|
+
readonly kind: 'range';
|
|
61
|
+
readonly range: CellRangeRef;
|
|
62
|
+
}
|
|
63
|
+
export interface WorkbookNameRefData extends WorkbookBaseRefData {
|
|
64
|
+
readonly kind: 'name';
|
|
65
|
+
readonly name: string;
|
|
66
|
+
}
|
|
67
|
+
export interface WorkbookTableRefData extends WorkbookBaseRefData {
|
|
68
|
+
readonly kind: 'table';
|
|
69
|
+
readonly name?: string;
|
|
70
|
+
readonly sheetName?: string;
|
|
71
|
+
readonly headers?: readonly string[];
|
|
72
|
+
}
|
|
73
|
+
export interface WorkbookColumnRefData extends WorkbookBaseRefData {
|
|
74
|
+
readonly kind: 'column';
|
|
75
|
+
readonly table: WorkbookTableRefData;
|
|
76
|
+
readonly rows?: WorkbookRowsRefData;
|
|
77
|
+
readonly name: string;
|
|
78
|
+
}
|
|
79
|
+
export interface WorkbookRowsRefData extends WorkbookBaseRefData {
|
|
80
|
+
readonly kind: 'rows';
|
|
81
|
+
readonly sheetName?: string;
|
|
82
|
+
readonly table?: WorkbookTableRefData;
|
|
83
|
+
readonly where: {
|
|
84
|
+
readonly column: string;
|
|
85
|
+
readonly op: WorkbookRowOperator;
|
|
86
|
+
readonly value: LiteralInput;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export type WorkbookRefData = WorkbookRangeRefData | WorkbookNameRefData | WorkbookTableRefData | WorkbookColumnRefData | WorkbookRowsRefData;
|
|
54
90
|
export declare const workbookRefKinds: readonly ["range", "name", "table", "column", "rows"];
|
|
55
91
|
export declare function isWorkbookRefKind(value: unknown): value is WorkbookRefKind;
|
|
56
92
|
export declare function isWorkbookRef(value: unknown): value is WorkbookRef;
|
|
93
|
+
export declare function isWorkbookRefData(value: unknown): value is WorkbookRefData;
|
|
57
94
|
export declare function collectWorkbookRefs(value: unknown): readonly WorkbookRef[];
|
|
95
|
+
export declare function toWorkbookRefData(ref: WorkbookRef | WorkbookRefData): WorkbookRefData;
|
|
96
|
+
export declare function collectWorkbookRefData(value: unknown): readonly WorkbookRefData[];
|
|
58
97
|
export interface FindTableOptions {
|
|
59
98
|
readonly name?: string;
|
|
60
99
|
readonly sheetName?: string;
|
|
@@ -106,6 +145,8 @@ export declare function createWorkbookColumnRef(options: FindColumnOptions): Wor
|
|
|
106
145
|
export declare function createWorkbookRangeRef(input: FindRangeInput): WorkbookRangeRef;
|
|
107
146
|
export declare function createWorkbookNameRef(name: string): WorkbookNameRef;
|
|
108
147
|
export declare function createWorkbookRowsRef(options: FindRowsOptions): WorkbookRowsRef;
|
|
148
|
+
export declare function hydrateWorkbookRef(data: WorkbookRefData): WorkbookRef;
|
|
149
|
+
export declare function hydrateWorkbookRefs(value: unknown): unknown;
|
|
109
150
|
export declare function findTable(options: FindTableOptions): WorkbookTableRef;
|
|
110
151
|
export declare function findColumn(options: FindColumnOptions): WorkbookColumnRef;
|
|
111
152
|
export declare function findRange(input: FindRangeInput): WorkbookRangeRef;
|
package/dist/find.js
CHANGED
|
@@ -53,17 +53,22 @@ function isCellRangeRef(value) {
|
|
|
53
53
|
hasOwnString(value, 'endAddress'));
|
|
54
54
|
}
|
|
55
55
|
function isWorkbookTableRef(value) {
|
|
56
|
+
return isWorkbookTableRefData(value) && hasOwnFunction(value, 'column');
|
|
57
|
+
}
|
|
58
|
+
function isWorkbookTableRefData(value) {
|
|
56
59
|
return (typeof value === 'object' &&
|
|
57
60
|
value !== null &&
|
|
58
61
|
hasValidBaseRef(value) &&
|
|
59
62
|
value.kind === 'table' &&
|
|
60
63
|
hasOptionalString(value, 'name') &&
|
|
61
64
|
hasOptionalString(value, 'sheetName') &&
|
|
62
|
-
hasOptionalStringArray(value, 'headers')
|
|
63
|
-
hasOwnFunction(value, 'column'));
|
|
65
|
+
hasOptionalStringArray(value, 'headers'));
|
|
64
66
|
}
|
|
65
67
|
function isWorkbookRowsRef(value) {
|
|
66
|
-
|
|
68
|
+
return isWorkbookRowsRefData(value) && hasOwnFunction(value, 'column');
|
|
69
|
+
}
|
|
70
|
+
function isWorkbookRowsRefData(value) {
|
|
71
|
+
if (typeof value !== 'object' || value === null || !hasValidBaseRef(value) || value.kind !== 'rows') {
|
|
67
72
|
return false;
|
|
68
73
|
}
|
|
69
74
|
const where = Object.getOwnPropertyDescriptor(value, 'where')?.value;
|
|
@@ -75,16 +80,24 @@ function isWorkbookRowsRef(value) {
|
|
|
75
80
|
return false;
|
|
76
81
|
}
|
|
77
82
|
const table = Object.getOwnPropertyDescriptor(value, 'table')?.value;
|
|
78
|
-
return hasOptionalString(value, 'sheetName') && (table === undefined ||
|
|
83
|
+
return hasOptionalString(value, 'sheetName') && (table === undefined || isWorkbookTableRefData(table));
|
|
79
84
|
}
|
|
80
85
|
function isWorkbookColumnRef(value) {
|
|
81
|
-
if (
|
|
86
|
+
if (!isWorkbookColumnRefData(value)) {
|
|
82
87
|
return false;
|
|
83
88
|
}
|
|
84
89
|
const table = Object.getOwnPropertyDescriptor(value, 'table')?.value;
|
|
85
90
|
const rows = Object.getOwnPropertyDescriptor(value, 'rows')?.value;
|
|
86
91
|
return isWorkbookTableRef(table) && (rows === undefined || isWorkbookRowsRef(rows));
|
|
87
92
|
}
|
|
93
|
+
function isWorkbookColumnRefData(value) {
|
|
94
|
+
if (typeof value !== 'object' || value === null || !hasValidBaseRef(value) || value.kind !== 'column' || !hasOwnString(value, 'name')) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const table = Object.getOwnPropertyDescriptor(value, 'table')?.value;
|
|
98
|
+
const rows = Object.getOwnPropertyDescriptor(value, 'rows')?.value;
|
|
99
|
+
return isWorkbookTableRefData(table) && (rows === undefined || isWorkbookRowsRefData(rows));
|
|
100
|
+
}
|
|
88
101
|
export function isWorkbookRef(value) {
|
|
89
102
|
if (typeof value !== 'object' || value === null || !hasValidBaseRef(value)) {
|
|
90
103
|
return false;
|
|
@@ -102,6 +115,23 @@ export function isWorkbookRef(value) {
|
|
|
102
115
|
return isWorkbookRowsRef(value);
|
|
103
116
|
}
|
|
104
117
|
}
|
|
118
|
+
export function isWorkbookRefData(value) {
|
|
119
|
+
if (typeof value !== 'object' || value === null || !hasValidBaseRef(value)) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
switch (value.kind) {
|
|
123
|
+
case 'range':
|
|
124
|
+
return isCellRangeRef(Object.getOwnPropertyDescriptor(value, 'range')?.value);
|
|
125
|
+
case 'name':
|
|
126
|
+
return hasOwnString(value, 'name');
|
|
127
|
+
case 'table':
|
|
128
|
+
return isWorkbookTableRefData(value);
|
|
129
|
+
case 'column':
|
|
130
|
+
return isWorkbookColumnRefData(value);
|
|
131
|
+
case 'rows':
|
|
132
|
+
return isWorkbookRowsRefData(value);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
105
135
|
export function collectWorkbookRefs(value) {
|
|
106
136
|
const refs = [];
|
|
107
137
|
const seenRefs = new Set();
|
|
@@ -141,6 +171,108 @@ export function collectWorkbookRefs(value) {
|
|
|
141
171
|
visit(value);
|
|
142
172
|
return refs;
|
|
143
173
|
}
|
|
174
|
+
export function toWorkbookRefData(ref) {
|
|
175
|
+
if (!isWorkbookRefData(ref)) {
|
|
176
|
+
throw new Error('Workbook ref data is invalid');
|
|
177
|
+
}
|
|
178
|
+
switch (ref.kind) {
|
|
179
|
+
case 'range':
|
|
180
|
+
return {
|
|
181
|
+
kind: 'range',
|
|
182
|
+
id: ref.id,
|
|
183
|
+
label: ref.label,
|
|
184
|
+
range: { ...ref.range },
|
|
185
|
+
};
|
|
186
|
+
case 'name':
|
|
187
|
+
return {
|
|
188
|
+
kind: 'name',
|
|
189
|
+
id: ref.id,
|
|
190
|
+
label: ref.label,
|
|
191
|
+
name: ref.name,
|
|
192
|
+
};
|
|
193
|
+
case 'table':
|
|
194
|
+
return {
|
|
195
|
+
kind: 'table',
|
|
196
|
+
id: ref.id,
|
|
197
|
+
label: ref.label,
|
|
198
|
+
...(ref.name !== undefined ? { name: ref.name } : {}),
|
|
199
|
+
...(ref.sheetName !== undefined ? { sheetName: ref.sheetName } : {}),
|
|
200
|
+
...(ref.headers !== undefined ? { headers: [...ref.headers] } : {}),
|
|
201
|
+
};
|
|
202
|
+
case 'column':
|
|
203
|
+
return {
|
|
204
|
+
kind: 'column',
|
|
205
|
+
id: ref.id,
|
|
206
|
+
label: ref.label,
|
|
207
|
+
table: toWorkbookTableRefData(ref.table),
|
|
208
|
+
...(ref.rows !== undefined ? { rows: toWorkbookRowsRefData(ref.rows) } : {}),
|
|
209
|
+
name: ref.name,
|
|
210
|
+
};
|
|
211
|
+
case 'rows':
|
|
212
|
+
return {
|
|
213
|
+
kind: 'rows',
|
|
214
|
+
id: ref.id,
|
|
215
|
+
label: ref.label,
|
|
216
|
+
...(ref.sheetName !== undefined ? { sheetName: ref.sheetName } : {}),
|
|
217
|
+
...(ref.table !== undefined ? { table: toWorkbookTableRefData(ref.table) } : {}),
|
|
218
|
+
where: { ...ref.where },
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function toWorkbookTableRefData(ref) {
|
|
223
|
+
const data = toWorkbookRefData(ref);
|
|
224
|
+
if (data.kind !== 'table') {
|
|
225
|
+
throw new Error('Workbook table ref data is invalid');
|
|
226
|
+
}
|
|
227
|
+
return data;
|
|
228
|
+
}
|
|
229
|
+
function toWorkbookRowsRefData(ref) {
|
|
230
|
+
const data = toWorkbookRefData(ref);
|
|
231
|
+
if (data.kind !== 'rows') {
|
|
232
|
+
throw new Error('Workbook rows ref data is invalid');
|
|
233
|
+
}
|
|
234
|
+
return data;
|
|
235
|
+
}
|
|
236
|
+
export function collectWorkbookRefData(value) {
|
|
237
|
+
const refs = [];
|
|
238
|
+
const seenRefs = new Set();
|
|
239
|
+
const seenObjects = new WeakSet();
|
|
240
|
+
function pushRef(ref) {
|
|
241
|
+
const key = `${ref.kind}:${ref.id}`;
|
|
242
|
+
if (!seenRefs.has(key)) {
|
|
243
|
+
seenRefs.add(key);
|
|
244
|
+
refs.push(ref);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
function visit(current) {
|
|
248
|
+
if (current === null || current === undefined || typeof current !== 'object') {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (seenObjects.has(current)) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
seenObjects.add(current);
|
|
255
|
+
if (isWorkbookRefData(current)) {
|
|
256
|
+
const ref = toWorkbookRefData(current);
|
|
257
|
+
pushRef(ref);
|
|
258
|
+
if (ref.kind === 'column') {
|
|
259
|
+
visit(ref.rows);
|
|
260
|
+
visit(ref.table);
|
|
261
|
+
}
|
|
262
|
+
if (ref.kind === 'rows') {
|
|
263
|
+
visit(ref.table);
|
|
264
|
+
}
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
if (Array.isArray(current)) {
|
|
268
|
+
current.forEach(visit);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
Object.values(current).forEach(visit);
|
|
272
|
+
}
|
|
273
|
+
visit(value);
|
|
274
|
+
return refs;
|
|
275
|
+
}
|
|
144
276
|
function cleanIdPart(value) {
|
|
145
277
|
const cleaned = value
|
|
146
278
|
.trim()
|
|
@@ -379,6 +511,119 @@ export function createWorkbookRowsRef(options) {
|
|
|
379
511
|
hideHelper(rows, 'column');
|
|
380
512
|
return Object.freeze(rows);
|
|
381
513
|
}
|
|
514
|
+
function refDataKey(ref) {
|
|
515
|
+
return `${ref.kind}:${ref.id}`;
|
|
516
|
+
}
|
|
517
|
+
function sameRefData(left, right) {
|
|
518
|
+
return left !== undefined && right !== undefined && refDataKey(left) === refDataKey(right);
|
|
519
|
+
}
|
|
520
|
+
function hydrateTableRefData(data) {
|
|
521
|
+
const table = {
|
|
522
|
+
kind: 'table',
|
|
523
|
+
id: data.id,
|
|
524
|
+
label: data.label,
|
|
525
|
+
...(data.name !== undefined ? { name: data.name } : {}),
|
|
526
|
+
...(data.sheetName !== undefined ? { sheetName: data.sheetName } : {}),
|
|
527
|
+
...(data.headers !== undefined ? { headers: Object.freeze([...data.headers]) } : {}),
|
|
528
|
+
column(name) {
|
|
529
|
+
return createWorkbookColumnRef({ table, name });
|
|
530
|
+
},
|
|
531
|
+
};
|
|
532
|
+
hideHelper(table, 'column');
|
|
533
|
+
return Object.freeze(table);
|
|
534
|
+
}
|
|
535
|
+
function hydrateRowsRefData(data, sharedTable) {
|
|
536
|
+
const table = data.table === undefined ? undefined : sameRefData(data.table, sharedTable) ? sharedTable : hydrateTableRefData(data.table);
|
|
537
|
+
const rows = {
|
|
538
|
+
kind: 'rows',
|
|
539
|
+
id: data.id,
|
|
540
|
+
label: data.label,
|
|
541
|
+
...(data.sheetName !== undefined ? { sheetName: data.sheetName } : {}),
|
|
542
|
+
...(table !== undefined ? { table } : {}),
|
|
543
|
+
where: Object.freeze({ ...data.where }),
|
|
544
|
+
column(name) {
|
|
545
|
+
if (rows.table === undefined) {
|
|
546
|
+
throw new Error('Rows column selection requires a table-backed row selector');
|
|
547
|
+
}
|
|
548
|
+
return createWorkbookColumnRef({ table: rows.table, rows, name });
|
|
549
|
+
},
|
|
550
|
+
};
|
|
551
|
+
hideHelper(rows, 'column');
|
|
552
|
+
return Object.freeze(rows);
|
|
553
|
+
}
|
|
554
|
+
export function hydrateWorkbookRef(data) {
|
|
555
|
+
if (!isWorkbookRefData(data)) {
|
|
556
|
+
throw new Error('Workbook ref data is invalid');
|
|
557
|
+
}
|
|
558
|
+
switch (data.kind) {
|
|
559
|
+
case 'range':
|
|
560
|
+
return Object.freeze({
|
|
561
|
+
kind: 'range',
|
|
562
|
+
id: data.id,
|
|
563
|
+
label: data.label,
|
|
564
|
+
range: Object.freeze({ ...data.range }),
|
|
565
|
+
});
|
|
566
|
+
case 'name':
|
|
567
|
+
return Object.freeze({
|
|
568
|
+
kind: 'name',
|
|
569
|
+
id: data.id,
|
|
570
|
+
label: data.label,
|
|
571
|
+
name: data.name,
|
|
572
|
+
});
|
|
573
|
+
case 'table':
|
|
574
|
+
return hydrateTableRefData(data);
|
|
575
|
+
case 'column': {
|
|
576
|
+
const table = hydrateTableRefData(data.table);
|
|
577
|
+
const rows = data.rows === undefined ? undefined : hydrateRowsRefData(data.rows, table);
|
|
578
|
+
return Object.freeze({
|
|
579
|
+
kind: 'column',
|
|
580
|
+
id: data.id,
|
|
581
|
+
label: data.label,
|
|
582
|
+
table,
|
|
583
|
+
...(rows !== undefined ? { rows } : {}),
|
|
584
|
+
name: data.name,
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
case 'rows':
|
|
588
|
+
return hydrateRowsRefData(data);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
function isHydratableContainer(value) {
|
|
592
|
+
const prototype = Object.getPrototypeOf(value);
|
|
593
|
+
return Array.isArray(value) || prototype === Object.prototype || prototype === null;
|
|
594
|
+
}
|
|
595
|
+
function hydrateWorkbookRefsValue(value, seen) {
|
|
596
|
+
if (value === null || value === undefined || typeof value !== 'object') {
|
|
597
|
+
return value;
|
|
598
|
+
}
|
|
599
|
+
if (isWorkbookRefData(value)) {
|
|
600
|
+
return hydrateWorkbookRef(value);
|
|
601
|
+
}
|
|
602
|
+
if (!isHydratableContainer(value)) {
|
|
603
|
+
return value;
|
|
604
|
+
}
|
|
605
|
+
const cached = seen.get(value);
|
|
606
|
+
if (cached !== undefined) {
|
|
607
|
+
return cached;
|
|
608
|
+
}
|
|
609
|
+
if (Array.isArray(value)) {
|
|
610
|
+
const hydrated = [];
|
|
611
|
+
seen.set(value, hydrated);
|
|
612
|
+
value.forEach((entry) => {
|
|
613
|
+
hydrated.push(hydrateWorkbookRefsValue(entry, seen));
|
|
614
|
+
});
|
|
615
|
+
return Object.freeze(hydrated);
|
|
616
|
+
}
|
|
617
|
+
const hydrated = {};
|
|
618
|
+
seen.set(value, hydrated);
|
|
619
|
+
Object.entries(value).forEach(([key, entry]) => {
|
|
620
|
+
hydrated[key] = hydrateWorkbookRefsValue(entry, seen);
|
|
621
|
+
});
|
|
622
|
+
return Object.freeze(hydrated);
|
|
623
|
+
}
|
|
624
|
+
export function hydrateWorkbookRefs(value) {
|
|
625
|
+
return hydrateWorkbookRefsValue(value, new WeakMap());
|
|
626
|
+
}
|
|
382
627
|
export function findTable(options) {
|
|
383
628
|
return createWorkbookTableRef(options);
|
|
384
629
|
}
|