@bilig/workbook 0.42.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/dist/model.js ADDED
@@ -0,0 +1,331 @@
1
+ import { formula } from './formula.js';
2
+ import { collectWorkbookRefs, createWorkbookFindApi } from './find.js';
3
+ import { createWorkbookCheckApi } from './check.js';
4
+ import { normalizeOptionalWorkbookActionInput, normalizeWorkbookActionInputDescription, validateWorkbookActionInput, } from './input.js';
5
+ import { isWorkbookOp } from './guards.js';
6
+ export function defineModel(config) {
7
+ if (config.name.trim() === '') {
8
+ throw new Error('Workbook model name cannot be empty');
9
+ }
10
+ normalizeOptionalDescription(config.description, `Workbook model ${config.name} description`);
11
+ const actionNames = Object.keys(config.actions);
12
+ if (actionNames.length === 0) {
13
+ throw new Error(`Workbook model ${config.name} must define at least one action`);
14
+ }
15
+ const emptyActionName = actionNames.find((name) => name.trim() === '');
16
+ if (emptyActionName !== undefined) {
17
+ throw new Error(`Workbook model ${config.name} has an empty action name`);
18
+ }
19
+ actionNames.forEach((name) => {
20
+ validateActionDefinition(config.name, name, config.actions[name]);
21
+ });
22
+ return config;
23
+ }
24
+ export function inspectModel(model) {
25
+ const actions = Object.keys(model.actions).toSorted();
26
+ const description = normalizeOptionalDescription(model.description, `Workbook model ${model.name} description`);
27
+ return {
28
+ name: model.name,
29
+ ...(description !== undefined ? { description } : {}),
30
+ actions,
31
+ actionDetails: actions.map((actionName) => inspectAction(actionName, model.actions[actionName])),
32
+ hasChecks: model.checks !== undefined,
33
+ };
34
+ }
35
+ function normalizeOptionalDescription(value, label) {
36
+ if (value === undefined) {
37
+ return undefined;
38
+ }
39
+ const description = value.trim();
40
+ if (description === '') {
41
+ throw new Error(`${label} cannot be empty`);
42
+ }
43
+ return description;
44
+ }
45
+ function isActionConfig(definition) {
46
+ return typeof definition === 'object' && definition !== null;
47
+ }
48
+ function validateActionDefinition(modelName, actionName, definition) {
49
+ if (typeof definition === 'function') {
50
+ return;
51
+ }
52
+ if (!isActionConfig(definition) || typeof definition.run !== 'function') {
53
+ throw new Error(`Workbook model ${modelName} action ${actionName} must be a function or action object with run`);
54
+ }
55
+ normalizeOptionalDescription(definition.description, `Workbook model ${modelName} action ${actionName} description`);
56
+ if (definition.input !== undefined) {
57
+ normalizeWorkbookActionInputDescription(definition.input);
58
+ }
59
+ }
60
+ function actionRunner(definition) {
61
+ return typeof definition === 'function' ? definition : definition.run;
62
+ }
63
+ function inspectAction(name, definition) {
64
+ if (definition === undefined || typeof definition === 'function') {
65
+ return { name };
66
+ }
67
+ const description = normalizeOptionalDescription(definition.description, `Workbook action ${name} description`);
68
+ const input = definition.input === undefined ? undefined : normalizeWorkbookActionInputDescription(definition.input);
69
+ return {
70
+ name,
71
+ ...(description !== undefined ? { description } : {}),
72
+ ...(input !== undefined ? { input } : {}),
73
+ };
74
+ }
75
+ function concreteSingleCell(target) {
76
+ if (target.kind !== 'range') {
77
+ return null;
78
+ }
79
+ const range = target.range;
80
+ return range.startAddress === range.endAddress ? { sheetName: range.sheetName, address: range.startAddress } : null;
81
+ }
82
+ function commandMessage(command) {
83
+ switch (command.kind) {
84
+ case 'writeFormula':
85
+ return `Write formula to ${command.target.label}`;
86
+ case 'writeValue':
87
+ return `Write value to ${command.target.label}`;
88
+ case 'format':
89
+ return `Format ${command.target.label}`;
90
+ case 'clear':
91
+ return `Clear ${command.target.label}`;
92
+ case 'op':
93
+ return (command.message ??
94
+ (command.target === undefined
95
+ ? `Add workbook op ${command.op.kind}`
96
+ : `Add workbook op ${command.op.kind} for ${command.target.label}`));
97
+ }
98
+ }
99
+ function commandTarget(command) {
100
+ return command.target;
101
+ }
102
+ function cloneWorkbookOp(op) {
103
+ return structuredClone(op);
104
+ }
105
+ function createCheckWorkbook(input) {
106
+ return Object.freeze({
107
+ ...createWorkbookFindApi(),
108
+ check: createWorkbookCheckApi((entry) => input.checks.push(entry)),
109
+ });
110
+ }
111
+ function createActionWorkbook(input) {
112
+ const checkWorkbook = createCheckWorkbook({ checks: input.checks });
113
+ function pushCommand(command) {
114
+ if (command.kind === 'op') {
115
+ const commandOp = cloneWorkbookOp(command.op);
116
+ const planOp = cloneWorkbookOp(command.op);
117
+ input.commands.push({
118
+ kind: 'op',
119
+ op: commandOp,
120
+ ...(command.target !== undefined ? { target: command.target } : {}),
121
+ ...(command.message !== undefined ? { message: command.message } : {}),
122
+ });
123
+ input.ops.push(planOp);
124
+ return;
125
+ }
126
+ input.commands.push(command);
127
+ const target = concreteSingleCell(command.target);
128
+ if (target === null) {
129
+ return;
130
+ }
131
+ switch (command.kind) {
132
+ case 'writeFormula':
133
+ input.ops.push({
134
+ kind: 'setCellFormula',
135
+ sheetName: target.sheetName,
136
+ address: target.address,
137
+ formula: command.formula,
138
+ });
139
+ return;
140
+ case 'writeValue':
141
+ input.ops.push({
142
+ kind: 'setCellValue',
143
+ sheetName: target.sheetName,
144
+ address: target.address,
145
+ value: command.value,
146
+ });
147
+ return;
148
+ case 'clear':
149
+ input.ops.push({
150
+ kind: 'clearCell',
151
+ sheetName: target.sheetName,
152
+ address: target.address,
153
+ });
154
+ return;
155
+ case 'format':
156
+ if (command.numberFormat !== undefined) {
157
+ input.ops.push({
158
+ kind: 'setCellFormat',
159
+ sheetName: target.sheetName,
160
+ address: target.address,
161
+ format: command.numberFormat,
162
+ });
163
+ }
164
+ return;
165
+ }
166
+ }
167
+ const workbook = {
168
+ ...checkWorkbook,
169
+ writeFormula(target, value) {
170
+ pushCommand({
171
+ kind: 'writeFormula',
172
+ target,
173
+ formula: formula.source(value),
174
+ inputs: formula.inputs(value),
175
+ });
176
+ },
177
+ writeValue(target, value) {
178
+ pushCommand({
179
+ kind: 'writeValue',
180
+ target,
181
+ value,
182
+ });
183
+ },
184
+ format(target, options) {
185
+ pushCommand({
186
+ kind: 'format',
187
+ target,
188
+ ...(options.style !== undefined ? { style: options.style } : {}),
189
+ ...(options.numberFormat !== undefined ? { numberFormat: options.numberFormat } : {}),
190
+ });
191
+ },
192
+ clear(target) {
193
+ pushCommand({
194
+ kind: 'clear',
195
+ target,
196
+ });
197
+ },
198
+ addOp(op, options = {}) {
199
+ if (!isWorkbookOp(op)) {
200
+ throw new Error('Workbook op is not a valid WorkbookOp');
201
+ }
202
+ pushCommand({
203
+ kind: 'op',
204
+ op,
205
+ ...(options.target !== undefined ? { target: options.target } : {}),
206
+ ...(options.message !== undefined ? { message: options.message } : {}),
207
+ });
208
+ },
209
+ };
210
+ return Object.freeze(workbook);
211
+ }
212
+ function pushReturnedChecks(target, returned) {
213
+ returned?.forEach((entry) => {
214
+ if (!target.includes(entry)) {
215
+ target.push(entry);
216
+ }
217
+ });
218
+ }
219
+ function errorMessage(error) {
220
+ return error instanceof Error ? error.message : String(error);
221
+ }
222
+ function inputProperty(input) {
223
+ return input === undefined ? {} : { input };
224
+ }
225
+ function failedPlan(modelName, actionName, code, message, checks = [], input) {
226
+ return {
227
+ status: 'failed',
228
+ modelName,
229
+ actionName,
230
+ ...inputProperty(input),
231
+ checks,
232
+ errors: [{ code, message }],
233
+ };
234
+ }
235
+ function actionNotFound(modelName, actionName) {
236
+ return {
237
+ code: 'action_not_found',
238
+ message: `Workbook model ${modelName} does not define action ${actionName}`,
239
+ };
240
+ }
241
+ function createActionPlan(modelName, actionName, input, refs, commands, ops, checks) {
242
+ return {
243
+ modelName,
244
+ actionName,
245
+ ...inputProperty(input),
246
+ refs,
247
+ refsUsed: collectWorkbookRefs(refs),
248
+ commands,
249
+ ops,
250
+ changed: commands.map((command) => {
251
+ const target = commandTarget(command);
252
+ return {
253
+ kind: command.kind,
254
+ ...(target !== undefined ? { target } : {}),
255
+ message: commandMessage(command),
256
+ };
257
+ }),
258
+ checks,
259
+ };
260
+ }
261
+ export function planWorkbookAction(model, actionName, input) {
262
+ let normalizedInput;
263
+ try {
264
+ normalizedInput = normalizeOptionalWorkbookActionInput(input);
265
+ }
266
+ catch (error) {
267
+ return failedPlan(model.name, actionName, 'invalid_action_input', errorMessage(error));
268
+ }
269
+ const actionDefinition = model.actions[actionName];
270
+ if (actionDefinition === undefined) {
271
+ return {
272
+ status: 'failed',
273
+ modelName: model.name,
274
+ actionName,
275
+ ...inputProperty(normalizedInput),
276
+ checks: [],
277
+ errors: [actionNotFound(model.name, actionName)],
278
+ };
279
+ }
280
+ if (isActionConfig(actionDefinition) && actionDefinition.input !== undefined) {
281
+ try {
282
+ validateWorkbookActionInput(normalizeWorkbookActionInputDescription(actionDefinition.input), normalizedInput);
283
+ }
284
+ catch (error) {
285
+ return failedPlan(model.name, actionName, 'invalid_action_input', errorMessage(error), [], normalizedInput);
286
+ }
287
+ }
288
+ const action = actionRunner(actionDefinition);
289
+ const commands = [];
290
+ const ops = [];
291
+ const checks = [];
292
+ const findWorkbook = Object.freeze(createWorkbookFindApi());
293
+ let refs;
294
+ try {
295
+ refs = model.find(findWorkbook);
296
+ }
297
+ catch (error) {
298
+ return failedPlan(model.name, actionName, 'find_failed', errorMessage(error), checks, normalizedInput);
299
+ }
300
+ const checkContext = { refs, workbook: createCheckWorkbook({ checks }), ...inputProperty(normalizedInput) };
301
+ try {
302
+ pushReturnedChecks(checks, model.checks?.(checkContext));
303
+ }
304
+ catch (error) {
305
+ return failedPlan(model.name, actionName, 'checks_failed', errorMessage(error), checks, normalizedInput);
306
+ }
307
+ const actionContext = {
308
+ refs,
309
+ workbook: createActionWorkbook({ commands, ops, checks }),
310
+ ...inputProperty(normalizedInput),
311
+ };
312
+ try {
313
+ action(actionContext);
314
+ }
315
+ catch (error) {
316
+ return failedPlan(model.name, actionName, 'action_failed', errorMessage(error), checks, normalizedInput);
317
+ }
318
+ return {
319
+ status: 'planned',
320
+ plan: createActionPlan(model.name, actionName, normalizedInput, refs, commands, ops, checks),
321
+ };
322
+ }
323
+ export function buildWorkbookActionPlan(model, actionName, input) {
324
+ const result = planWorkbookAction(model, actionName, input);
325
+ if (result.status === 'failed') {
326
+ const [error] = result.errors;
327
+ throw new Error(error?.message ?? `Workbook model ${model.name} failed to plan action ${actionName}`);
328
+ }
329
+ return result.plan;
330
+ }
331
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
package/dist/ops.d.ts ADDED
@@ -0,0 +1,283 @@
1
+ import type { CellRangeRef, CellNumberFormatRecord, CellStyleRecord, CellStylePatch, LiteralInput, WorkbookAutoFilterSnapshot, WorkbookCommentThreadSnapshot, WorkbookChartSnapshot, WorkbookConditionalFormatSnapshot, WorkbookDataValidationSnapshot, WorkbookImageSnapshot, WorkbookMergeRangeSnapshot, WorkbookNoteSnapshot, WorkbookRangeProtectionSnapshot, WorkbookSheetProtectionSnapshot, WorkbookShapeSnapshot, WorkbookAxisEntrySnapshot, WorkbookCalculationSettingsSnapshot, WorkbookDefinedNameValueSnapshot, WorkbookPivotSnapshot, WorkbookTableSnapshot, WorkbookVolatileContextSnapshot } from '@bilig/protocol';
2
+ export type ReplicaId = string;
3
+ export type OpId = string;
4
+ export interface Clock {
5
+ counter: number;
6
+ }
7
+ export type WorkbookStructuralAxis = 'row' | 'column';
8
+ export type WorkbookSortDirection = 'asc' | 'desc';
9
+ export interface WorkbookTableOp extends WorkbookTableSnapshot {
10
+ }
11
+ export interface WorkbookSortKey {
12
+ keyAddress: string;
13
+ direction: WorkbookSortDirection;
14
+ }
15
+ export interface WorkbookAxisEntryOp extends WorkbookAxisEntrySnapshot {
16
+ }
17
+ export interface WorkbookCellStyleOp extends CellStyleRecord {
18
+ }
19
+ export interface WorkbookCellNumberFormatOp extends CellNumberFormatRecord {
20
+ }
21
+ export interface WorkbookDataValidationOp extends WorkbookDataValidationSnapshot {
22
+ }
23
+ export interface WorkbookConditionalFormatOp extends WorkbookConditionalFormatSnapshot {
24
+ style: CellStylePatch;
25
+ }
26
+ export interface WorkbookSheetProtectionOp extends WorkbookSheetProtectionSnapshot {
27
+ }
28
+ export interface WorkbookRangeProtectionOp extends WorkbookRangeProtectionSnapshot {
29
+ }
30
+ export interface WorkbookCommentThreadOp extends WorkbookCommentThreadSnapshot {
31
+ }
32
+ export interface WorkbookNoteOp extends WorkbookNoteSnapshot {
33
+ }
34
+ export interface WorkbookChartOp extends WorkbookChartSnapshot {
35
+ }
36
+ export interface WorkbookImageOp extends WorkbookImageSnapshot {
37
+ }
38
+ export interface WorkbookShapeOp extends WorkbookShapeSnapshot {
39
+ }
40
+ export interface WorkbookMergeRangeOp extends WorkbookMergeRangeSnapshot {
41
+ }
42
+ export interface WorkbookPivotOp extends WorkbookPivotSnapshot {
43
+ source: CellRangeRef;
44
+ }
45
+ export type WorkbookOp = {
46
+ kind: 'upsertWorkbook';
47
+ name: string;
48
+ } | {
49
+ kind: 'setWorkbookMetadata';
50
+ key: string;
51
+ value: LiteralInput;
52
+ } | {
53
+ kind: 'setCalculationSettings';
54
+ settings: WorkbookCalculationSettingsSnapshot;
55
+ } | {
56
+ kind: 'setVolatileContext';
57
+ context: WorkbookVolatileContextSnapshot;
58
+ } | {
59
+ kind: 'upsertSheet';
60
+ name: string;
61
+ order: number;
62
+ id?: number;
63
+ } | {
64
+ kind: 'renameSheet';
65
+ oldName: string;
66
+ newName: string;
67
+ } | {
68
+ kind: 'deleteSheet';
69
+ name: string;
70
+ } | {
71
+ kind: 'insertRows';
72
+ sheetName: string;
73
+ start: number;
74
+ count: number;
75
+ entries?: WorkbookAxisEntryOp[];
76
+ } | {
77
+ kind: 'deleteRows';
78
+ sheetName: string;
79
+ start: number;
80
+ count: number;
81
+ } | {
82
+ kind: 'moveRows';
83
+ sheetName: string;
84
+ start: number;
85
+ count: number;
86
+ target: number;
87
+ } | {
88
+ kind: 'insertColumns';
89
+ sheetName: string;
90
+ start: number;
91
+ count: number;
92
+ entries?: WorkbookAxisEntryOp[];
93
+ } | {
94
+ kind: 'deleteColumns';
95
+ sheetName: string;
96
+ start: number;
97
+ count: number;
98
+ } | {
99
+ kind: 'moveColumns';
100
+ sheetName: string;
101
+ start: number;
102
+ count: number;
103
+ target: number;
104
+ } | {
105
+ kind: 'updateRowMetadata';
106
+ sheetName: string;
107
+ start: number;
108
+ count: number;
109
+ size: number | null;
110
+ hidden: boolean | null;
111
+ } | {
112
+ kind: 'updateColumnMetadata';
113
+ sheetName: string;
114
+ start: number;
115
+ count: number;
116
+ size: number | null;
117
+ hidden: boolean | null;
118
+ } | {
119
+ kind: 'setFreezePane';
120
+ sheetName: string;
121
+ rows: number;
122
+ cols: number;
123
+ } | {
124
+ kind: 'clearFreezePane';
125
+ sheetName: string;
126
+ } | {
127
+ kind: 'mergeCells';
128
+ range: WorkbookMergeRangeOp;
129
+ } | {
130
+ kind: 'unmergeCells';
131
+ range: CellRangeRef;
132
+ } | {
133
+ kind: 'setSheetProtection';
134
+ protection: WorkbookSheetProtectionOp;
135
+ } | {
136
+ kind: 'clearSheetProtection';
137
+ sheetName: string;
138
+ } | {
139
+ kind: 'setFilter';
140
+ sheetName: string;
141
+ range: WorkbookAutoFilterSnapshot;
142
+ } | {
143
+ kind: 'clearFilter';
144
+ sheetName: string;
145
+ range: CellRangeRef;
146
+ } | {
147
+ kind: 'setSort';
148
+ sheetName: string;
149
+ range: CellRangeRef;
150
+ keys: WorkbookSortKey[];
151
+ } | {
152
+ kind: 'clearSort';
153
+ sheetName: string;
154
+ range: CellRangeRef;
155
+ } | {
156
+ kind: 'setDataValidation';
157
+ validation: WorkbookDataValidationOp;
158
+ } | {
159
+ kind: 'clearDataValidation';
160
+ sheetName: string;
161
+ range: CellRangeRef;
162
+ } | {
163
+ kind: 'upsertConditionalFormat';
164
+ format: WorkbookConditionalFormatOp;
165
+ } | {
166
+ kind: 'deleteConditionalFormat';
167
+ id: string;
168
+ sheetName: string;
169
+ } | {
170
+ kind: 'upsertRangeProtection';
171
+ protection: WorkbookRangeProtectionOp;
172
+ } | {
173
+ kind: 'deleteRangeProtection';
174
+ id: string;
175
+ sheetName: string;
176
+ } | {
177
+ kind: 'upsertCommentThread';
178
+ thread: WorkbookCommentThreadOp;
179
+ } | {
180
+ kind: 'deleteCommentThread';
181
+ sheetName: string;
182
+ address: string;
183
+ } | {
184
+ kind: 'upsertNote';
185
+ note: WorkbookNoteOp;
186
+ } | {
187
+ kind: 'deleteNote';
188
+ sheetName: string;
189
+ address: string;
190
+ } | {
191
+ kind: 'setCellValue';
192
+ sheetName: string;
193
+ address: string;
194
+ value: LiteralInput;
195
+ authoredBlank?: boolean;
196
+ } | {
197
+ kind: 'setCellFormula';
198
+ sheetName: string;
199
+ address: string;
200
+ formula: string;
201
+ } | {
202
+ kind: 'setCellFormat';
203
+ sheetName: string;
204
+ address: string;
205
+ format: string | null;
206
+ } | {
207
+ kind: 'upsertCellStyle';
208
+ style: WorkbookCellStyleOp;
209
+ } | {
210
+ kind: 'upsertCellNumberFormat';
211
+ format: WorkbookCellNumberFormatOp;
212
+ } | {
213
+ kind: 'setStyleRange';
214
+ range: CellRangeRef;
215
+ styleId: string;
216
+ } | {
217
+ kind: 'setFormatRange';
218
+ range: CellRangeRef;
219
+ formatId: string;
220
+ } | {
221
+ kind: 'clearCell';
222
+ sheetName: string;
223
+ address: string;
224
+ } | {
225
+ kind: 'upsertDefinedName';
226
+ name: string;
227
+ value: WorkbookDefinedNameValueSnapshot;
228
+ } | {
229
+ kind: 'deleteDefinedName';
230
+ name: string;
231
+ } | {
232
+ kind: 'upsertTable';
233
+ table: WorkbookTableOp;
234
+ } | {
235
+ kind: 'deleteTable';
236
+ name: string;
237
+ } | {
238
+ kind: 'upsertSpillRange';
239
+ sheetName: string;
240
+ address: string;
241
+ rows: number;
242
+ cols: number;
243
+ } | {
244
+ kind: 'deleteSpillRange';
245
+ sheetName: string;
246
+ address: string;
247
+ } | ({
248
+ kind: 'upsertPivotTable';
249
+ } & WorkbookPivotOp) | {
250
+ kind: 'deletePivotTable';
251
+ sheetName: string;
252
+ address: string;
253
+ } | {
254
+ kind: 'upsertChart';
255
+ chart: WorkbookChartOp;
256
+ } | {
257
+ kind: 'deleteChart';
258
+ id: string;
259
+ } | {
260
+ kind: 'upsertImage';
261
+ image: WorkbookImageOp;
262
+ } | {
263
+ kind: 'deleteImage';
264
+ id: string;
265
+ } | {
266
+ kind: 'upsertShape';
267
+ shape: WorkbookShapeOp;
268
+ } | {
269
+ kind: 'deleteShape';
270
+ id: string;
271
+ };
272
+ export type EngineOp = WorkbookOp;
273
+ export interface WorkbookOpBatch {
274
+ id: OpId;
275
+ replicaId: ReplicaId;
276
+ clock: Clock;
277
+ ops: WorkbookOp[];
278
+ }
279
+ export type EngineOpBatch = WorkbookOpBatch;
280
+ export interface WorkbookTxn {
281
+ ops: WorkbookOp[];
282
+ potentialNewCells?: number;
283
+ }
package/dist/ops.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import type { LiteralInput } from '@bilig/protocol';
2
+ import type { WorkbookRef } from './find.js';
3
+ import type { WorkbookCheckResult } from './result.js';
4
+ export interface WorkbookRunReadback {
5
+ readonly target: WorkbookRef;
6
+ readonly value?: LiteralInput;
7
+ readonly formula?: string | null;
8
+ readonly values?: readonly (readonly LiteralInput[])[];
9
+ readonly formulas?: readonly (readonly (string | null)[])[];
10
+ readonly cells?: readonly WorkbookCellReadback[];
11
+ }
12
+ export interface WorkbookCellReadback {
13
+ readonly sheetName: string;
14
+ readonly address: string;
15
+ readonly value?: LiteralInput;
16
+ readonly formula?: string | null;
17
+ }
18
+ export type WorkbookReadbackIssueCode = 'readback_missing' | 'duplicate_readback' | 'value_mismatch' | 'values_mismatch' | 'formula_mismatch' | 'formulas_mismatch';
19
+ export declare const workbookReadbackIssueCodes: readonly ("readback_missing" | "duplicate_readback" | "value_mismatch" | "values_mismatch" | "formula_mismatch" | "formulas_mismatch")[];
20
+ export declare function isWorkbookReadbackIssueCode(value: unknown): value is WorkbookReadbackIssueCode;
21
+ export interface WorkbookReadbackIssue {
22
+ readonly code: WorkbookReadbackIssueCode;
23
+ readonly message: string;
24
+ readonly path?: string;
25
+ readonly check: WorkbookCheckResult;
26
+ readonly target?: WorkbookRef;
27
+ readonly expected?: LiteralInput | readonly (readonly LiteralInput[])[] | readonly (readonly (string | null)[])[];
28
+ readonly actual?: LiteralInput | readonly (readonly LiteralInput[])[] | readonly (readonly (string | null)[])[];
29
+ }
30
+ export interface WorkbookReadbackVerification {
31
+ readonly status: 'passed' | 'failed';
32
+ readonly checks: readonly WorkbookCheckResult[];
33
+ readonly issues: readonly WorkbookReadbackIssue[];
34
+ }
35
+ export declare function verifyWorkbookReadbacks(checks: readonly WorkbookCheckResult[], readbacks: readonly WorkbookRunReadback[]): WorkbookReadbackVerification;