@bilig/workbook 0.62.0 → 0.66.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/features.js CHANGED
@@ -1,6 +1,41 @@
1
1
  import { isCellRangeRef } from '@bilig/protocol';
2
2
  import { isWorkbookOp } from './guards.js';
3
- import { isWorkbookActionInput, isWorkbookActionInputDescription, normalizeWorkbookActionInput, } from './input.js';
3
+ import { isWorkbookActionInput, normalizeWorkbookActionInput } from './input.js';
4
+ export const workbookCommandCategories = Object.freeze([
5
+ 'command',
6
+ 'operation',
7
+ 'mutation',
8
+ ]);
9
+ const WORKBOOK_COMMAND_CATEGORY_SET = new Set(workbookCommandCategories);
10
+ export const workbookCommandExecutionModes = Object.freeze([
11
+ 'preview',
12
+ 'apply',
13
+ 'applyAndVerify',
14
+ ]);
15
+ const WORKBOOK_COMMAND_EXECUTION_MODE_SET = new Set(workbookCommandExecutionModes);
16
+ export const workbookCommandReceiptStatuses = Object.freeze([
17
+ 'previewed',
18
+ 'applied',
19
+ 'rejected',
20
+ 'noop',
21
+ ]);
22
+ const WORKBOOK_COMMAND_RECEIPT_STATUS_SET = new Set(workbookCommandReceiptStatuses);
23
+ export const workbookProjectionInterceptorPoints = Object.freeze([
24
+ 'cellDisplay',
25
+ 'cellStyle',
26
+ 'rangeChrome',
27
+ 'rowVisibility',
28
+ 'beforeCommand',
29
+ 'commandMetadata',
30
+ ]);
31
+ const WORKBOOK_PROJECTION_INTERCEPTOR_POINT_SET = new Set(workbookProjectionInterceptorPoints);
32
+ export const workbookUiContributionSlots = Object.freeze([
33
+ 'toolbar',
34
+ 'sidePanel',
35
+ 'floatingOverlay',
36
+ 'status',
37
+ ]);
38
+ const WORKBOOK_UI_CONTRIBUTION_SLOT_SET = new Set(workbookUiContributionSlots);
4
39
  export function normalizeWorkbookFeatureId(value, label = 'Workbook feature id') {
5
40
  const normalized = value.trim();
6
41
  if (normalized === '') {
@@ -11,143 +46,333 @@ export function normalizeWorkbookFeatureId(value, label = 'Workbook feature id')
11
46
  }
12
47
  return normalized;
13
48
  }
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));
49
+ export function isWorkbookCommandCategory(value) {
50
+ return typeof value === 'string' && WORKBOOK_COMMAND_CATEGORY_SET.has(value);
51
+ }
52
+ export function isWorkbookCommandExecutionMode(value) {
53
+ return typeof value === 'string' && WORKBOOK_COMMAND_EXECUTION_MODE_SET.has(value);
54
+ }
55
+ export function isWorkbookCommandReceiptStatus(value) {
56
+ return typeof value === 'string' && WORKBOOK_COMMAND_RECEIPT_STATUS_SET.has(value);
57
+ }
58
+ export function isWorkbookProjectionInterceptorPoint(value) {
59
+ return typeof value === 'string' && WORKBOOK_PROJECTION_INTERCEPTOR_POINT_SET.has(value);
60
+ }
61
+ export function isWorkbookUiContributionSlot(value) {
62
+ return typeof value === 'string' && WORKBOOK_UI_CONTRIBUTION_SLOT_SET.has(value);
63
+ }
64
+ function commandRequestIssue(path, message) {
21
65
  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 } : {}),
66
+ code: 'invalid_command_request',
67
+ path,
68
+ message,
31
69
  });
32
70
  }
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}`);
71
+ function pushRequiredCommandRequestStringIssue(issues, value, key, label) {
72
+ const entry = value[key];
73
+ if (typeof entry !== 'string') {
74
+ issues.push(commandRequestIssue(key, `Workbook command request ${label} must be a string`));
75
+ return;
37
76
  }
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`);
77
+ const normalized = entry.trim();
78
+ if (normalized === '') {
79
+ issues.push(commandRequestIssue(key, `Workbook command request ${label} cannot be empty`));
80
+ return;
43
81
  }
44
- if (descriptor.input !== undefined && !isWorkbookActionInputDescription(descriptor.input)) {
45
- throw new Error(`Workbook command ${id} input description is invalid`);
82
+ if (normalized !== entry) {
83
+ issues.push(commandRequestIssue(key, `Workbook command request ${label} must not have leading or trailing whitespace`));
84
+ }
85
+ }
86
+ function normalizedCommandRequest(value) {
87
+ if (!isRecord(value) || typeof value['featureId'] !== 'string' || typeof value['commandId'] !== 'string') {
88
+ return null;
89
+ }
90
+ const category = value['category'];
91
+ const mode = value['mode'];
92
+ const input = value['input'];
93
+ if ((category !== undefined && !isWorkbookCommandCategory(category)) ||
94
+ (mode !== undefined && !isWorkbookCommandExecutionMode(mode)) ||
95
+ (input !== undefined && !isWorkbookActionInput(input))) {
96
+ return null;
46
97
  }
47
98
  return Object.freeze({
48
- id,
49
- featureId,
50
- category: descriptor.category,
51
- label,
52
- ...(description !== undefined ? { description } : {}),
53
- ...(descriptor.input !== undefined ? { input: descriptor.input } : {}),
99
+ featureId: normalizeWorkbookFeatureId(value['featureId'], 'Workbook command request feature id'),
100
+ commandId: normalizeRequiredString(value['commandId'], 'Workbook command request command id'),
101
+ ...(category !== undefined ? { category } : {}),
102
+ ...(mode !== undefined ? { mode } : {}),
103
+ ...(input !== undefined ? { input: normalizeWorkbookActionInput(input) } : {}),
54
104
  });
55
105
  }
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`));
106
+ export function checkWorkbookCommandRequest(value) {
107
+ if (!isRecord(value)) {
108
+ return {
109
+ status: 'invalid',
110
+ issues: Object.freeze([commandRequestIssue('request', 'Workbook command request must be an object')]),
111
+ };
112
+ }
113
+ const issues = [];
114
+ pushRequiredCommandRequestStringIssue(issues, value, 'featureId', 'feature id');
115
+ pushRequiredCommandRequestStringIssue(issues, value, 'commandId', 'command id');
116
+ if (value['category'] !== undefined && !isWorkbookCommandCategory(value['category'])) {
117
+ issues.push(commandRequestIssue('category', 'Workbook command request category is invalid'));
118
+ }
119
+ if (value['mode'] !== undefined && !isWorkbookCommandExecutionMode(value['mode'])) {
120
+ issues.push(commandRequestIssue('mode', 'Workbook command request mode is invalid'));
121
+ }
122
+ if (value['input'] !== undefined && !isWorkbookActionInput(value['input'])) {
123
+ issues.push(commandRequestIssue('input', 'Workbook command request input must be JSON-safe'));
124
+ }
125
+ if (issues.length > 0) {
126
+ return {
127
+ status: 'invalid',
128
+ issues: Object.freeze(issues),
129
+ };
130
+ }
131
+ const request = normalizedCommandRequest(value);
132
+ if (request === null) {
133
+ return {
134
+ status: 'invalid',
135
+ issues: Object.freeze([commandRequestIssue('request', 'Workbook command request is invalid')]),
136
+ };
137
+ }
138
+ return {
139
+ status: 'valid',
140
+ request,
141
+ issues: Object.freeze([]),
142
+ };
143
+ }
144
+ export function normalizeWorkbookCommandRequest(value) {
145
+ const check = checkWorkbookCommandRequest(value);
146
+ if (check.status === 'invalid') {
147
+ const [firstIssue] = check.issues;
148
+ throw new Error(firstIssue === undefined ? 'Workbook command request is invalid' : `Workbook command request is invalid: ${firstIssue.message}`);
149
+ }
150
+ return check.request;
151
+ }
152
+ export function isWorkbookCommandRequest(value) {
153
+ return checkWorkbookCommandRequest(value).status === 'valid';
154
+ }
155
+ function commandReceiptIssue(path, message) {
72
156
  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) } : {}),
157
+ code: 'invalid_command_receipt',
158
+ path,
159
+ message,
85
160
  });
86
161
  }
87
- export function isWorkbookCommandReceipt(value) {
88
- if (!isWorkbookCommandReceiptCandidate(value)) {
89
- return false;
162
+ function pushRequiredCommandReceiptStringIssue(issues, value, key, label) {
163
+ const entry = value[key];
164
+ if (typeof entry !== 'string') {
165
+ issues.push(commandReceiptIssue(key, `Workbook command receipt ${label} must be a string`));
166
+ return;
90
167
  }
91
- try {
92
- normalizeWorkbookCommandReceipt(value);
93
- return true;
168
+ const normalized = entry.trim();
169
+ if (normalized === '') {
170
+ issues.push(commandReceiptIssue(key, `Workbook command receipt ${label} cannot be empty`));
171
+ return;
94
172
  }
95
- catch {
96
- return false;
173
+ if (normalized !== entry) {
174
+ issues.push(commandReceiptIssue(key, `Workbook command receipt ${label} must not have leading or trailing whitespace`));
97
175
  }
98
176
  }
99
- export function workbookCommandReceiptOpsMatch(receipt) {
100
- if (receipt.previewOps === undefined || receipt.appliedOps === undefined) {
101
- return null;
177
+ function pushOptionalCommandReceiptStringIssue(issues, value, path, label) {
178
+ if (value === undefined) {
179
+ return;
180
+ }
181
+ if (typeof value !== 'string') {
182
+ issues.push(commandReceiptIssue(path, `Workbook command receipt ${label} must be a string`));
183
+ return;
184
+ }
185
+ const normalized = value.trim();
186
+ if (normalized === '') {
187
+ issues.push(commandReceiptIssue(path, `Workbook command receipt ${label} cannot be empty`));
188
+ return;
189
+ }
190
+ if (normalized !== value) {
191
+ issues.push(commandReceiptIssue(path, `Workbook command receipt ${label} must not have leading or trailing whitespace`));
102
192
  }
103
- return JSON.stringify(receipt.previewOps) === JSON.stringify(receipt.appliedOps);
104
193
  }
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}`);
194
+ function pushCommandReceiptOpsIssues(issues, value, path, label) {
195
+ if (value === undefined) {
196
+ return;
109
197
  }
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`);
198
+ if (!Array.isArray(value)) {
199
+ issues.push(commandReceiptIssue(path, `Workbook command receipt ${label} ops must be an array`));
200
+ return;
113
201
  }
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`);
202
+ value.forEach((op, index) => {
203
+ if (!isWorkbookOp(op)) {
204
+ issues.push(commandReceiptIssue(`${path}[${index}]`, `Workbook command receipt ${label} op is invalid`));
205
+ }
206
+ });
207
+ }
208
+ function pushCommandReceiptChangedRangesIssues(issues, value) {
209
+ if (value === undefined) {
210
+ return;
117
211
  }
118
- return Object.freeze({
119
- id,
120
- featureId,
121
- point: interceptor.point,
122
- ...(interceptor.priority !== undefined ? { priority: interceptor.priority } : {}),
123
- ...(label !== undefined ? { label } : {}),
212
+ if (!Array.isArray(value)) {
213
+ issues.push(commandReceiptIssue('changedRanges', 'Workbook command receipt changed ranges must be an array'));
214
+ return;
215
+ }
216
+ value.forEach((range, index) => {
217
+ if (!isCellRangeRef(range)) {
218
+ issues.push(commandReceiptIssue(`changedRanges[${index}]`, 'Workbook command receipt changed range is invalid'));
219
+ }
124
220
  });
125
221
  }
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}`);
222
+ function pushCommandReceiptUndoIssues(issues, value) {
223
+ if (value === undefined) {
224
+ return;
130
225
  }
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`);
226
+ if (!isRecord(value)) {
227
+ issues.push(commandReceiptIssue('undo', 'Workbook command receipt undo must be an object'));
228
+ return;
135
229
  }
136
- if (contribution.order !== undefined && (!Number.isSafeInteger(contribution.order) || !Number.isFinite(contribution.order))) {
137
- throw new Error(`Workbook UI contribution ${id} order is invalid`);
230
+ pushOptionalCommandReceiptStringIssue(issues, value['id'], 'undo.id', 'undo id');
231
+ if (value['id'] === undefined) {
232
+ issues.push(commandReceiptIssue('undo.id', 'Workbook command receipt undo id must be a string'));
138
233
  }
139
- if (contribution.metadata !== undefined && !isWorkbookActionInput(contribution.metadata)) {
140
- throw new Error(`Workbook UI contribution ${id} metadata is invalid`);
234
+ pushCommandReceiptOpsIssues(issues, value['ops'], 'undo.ops', 'undo');
235
+ }
236
+ function pushCommandReceiptErrorsIssues(issues, value) {
237
+ if (value === undefined) {
238
+ return;
239
+ }
240
+ if (!Array.isArray(value)) {
241
+ issues.push(commandReceiptIssue('errors', 'Workbook command receipt errors must be an array'));
242
+ return;
243
+ }
244
+ value.forEach((error, index) => {
245
+ pushOptionalCommandReceiptStringIssue(issues, error, `errors[${index}]`, 'error');
246
+ });
247
+ }
248
+ function normalizeReceiptUndo(value) {
249
+ if (!isRecord(value) || typeof value['id'] !== 'string') {
250
+ return undefined;
141
251
  }
252
+ const id = value['id'];
253
+ const ops = Array.isArray(value['ops']) ? value['ops'].map((op) => normalizeReceiptOp(id, op, 'undo')) : undefined;
142
254
  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) } : {}),
255
+ id: normalizeRequiredString(id, 'Workbook command receipt undo id'),
256
+ ...(ops !== undefined ? { ops: Object.freeze(ops) } : {}),
149
257
  });
150
258
  }
259
+ function normalizedCommandReceipt(value) {
260
+ if (!isRecord(value) ||
261
+ typeof value['featureId'] !== 'string' ||
262
+ typeof value['commandId'] !== 'string' ||
263
+ !isWorkbookCommandReceiptStatus(value['status']) ||
264
+ !isWorkbookCommandCategory(value['category'])) {
265
+ return null;
266
+ }
267
+ const previewOps = value['previewOps'];
268
+ const appliedOps = value['appliedOps'];
269
+ const undo = value['undo'];
270
+ const changedRanges = value['changedRanges'];
271
+ const proof = value['proof'];
272
+ const message = value['message'];
273
+ const metadata = value['metadata'];
274
+ const errors = value['errors'];
275
+ if ((previewOps !== undefined && (!Array.isArray(previewOps) || !previewOps.every((op) => isWorkbookOp(op)))) ||
276
+ (appliedOps !== undefined && (!Array.isArray(appliedOps) || !appliedOps.every((op) => isWorkbookOp(op)))) ||
277
+ (changedRanges !== undefined && (!Array.isArray(changedRanges) || !changedRanges.every((range) => isCellRangeRef(range)))) ||
278
+ (proof !== undefined && !isWorkbookActionInput(proof)) ||
279
+ (metadata !== undefined && !isWorkbookActionInput(metadata)) ||
280
+ (message !== undefined && typeof message !== 'string') ||
281
+ (errors !== undefined && (!Array.isArray(errors) || !errors.every((error) => typeof error === 'string')))) {
282
+ return null;
283
+ }
284
+ const normalizedUndo = normalizeReceiptUndo(undo);
285
+ if (undo !== undefined && normalizedUndo === undefined) {
286
+ return null;
287
+ }
288
+ const commandId = value['commandId'];
289
+ return Object.freeze({
290
+ status: value['status'],
291
+ featureId: normalizeWorkbookFeatureId(value['featureId'], 'Workbook command receipt feature id'),
292
+ commandId: normalizeRequiredString(commandId, 'Workbook command receipt command id'),
293
+ category: value['category'],
294
+ ...(previewOps !== undefined
295
+ ? { previewOps: Object.freeze(previewOps.map((op) => normalizeReceiptOp(commandId, op, 'preview'))) }
296
+ : {}),
297
+ ...(appliedOps !== undefined
298
+ ? { appliedOps: Object.freeze(appliedOps.map((op) => normalizeReceiptOp(commandId, op, 'applied'))) }
299
+ : {}),
300
+ ...(normalizedUndo !== undefined ? { undo: normalizedUndo } : {}),
301
+ ...(changedRanges !== undefined
302
+ ? { changedRanges: Object.freeze(changedRanges.map((range) => normalizeReceiptRange(commandId, range))) }
303
+ : {}),
304
+ ...(proof !== undefined ? { proof: normalizeWorkbookActionInput(proof) } : {}),
305
+ ...(message !== undefined ? { message: normalizeRequiredString(message, `Workbook command receipt ${commandId} message`) } : {}),
306
+ ...(metadata !== undefined ? { metadata: normalizeWorkbookActionInput(metadata) } : {}),
307
+ ...(errors !== undefined
308
+ ? { errors: Object.freeze(errors.map((error) => normalizeRequiredString(error, `Workbook command receipt ${commandId} error`))) }
309
+ : {}),
310
+ });
311
+ }
312
+ export function checkWorkbookCommandReceipt(value) {
313
+ if (!isRecord(value)) {
314
+ return {
315
+ status: 'invalid',
316
+ issues: Object.freeze([commandReceiptIssue('receipt', 'Workbook command receipt must be an object')]),
317
+ };
318
+ }
319
+ const issues = [];
320
+ if (!isWorkbookCommandReceiptStatus(value['status'])) {
321
+ issues.push(commandReceiptIssue('status', 'Workbook command receipt status is invalid'));
322
+ }
323
+ pushRequiredCommandReceiptStringIssue(issues, value, 'featureId', 'feature id');
324
+ pushRequiredCommandReceiptStringIssue(issues, value, 'commandId', 'command id');
325
+ if (!isWorkbookCommandCategory(value['category'])) {
326
+ issues.push(commandReceiptIssue('category', 'Workbook command receipt category is invalid'));
327
+ }
328
+ pushCommandReceiptOpsIssues(issues, value['previewOps'], 'previewOps', 'preview');
329
+ pushCommandReceiptOpsIssues(issues, value['appliedOps'], 'appliedOps', 'applied');
330
+ pushCommandReceiptUndoIssues(issues, value['undo']);
331
+ pushCommandReceiptChangedRangesIssues(issues, value['changedRanges']);
332
+ if (value['proof'] !== undefined && !isWorkbookActionInput(value['proof'])) {
333
+ issues.push(commandReceiptIssue('proof', 'Workbook command receipt proof must be JSON-safe'));
334
+ }
335
+ pushOptionalCommandReceiptStringIssue(issues, value['message'], 'message', 'message');
336
+ if (value['metadata'] !== undefined && !isWorkbookActionInput(value['metadata'])) {
337
+ issues.push(commandReceiptIssue('metadata', 'Workbook command receipt metadata must be JSON-safe'));
338
+ }
339
+ pushCommandReceiptErrorsIssues(issues, value['errors']);
340
+ if (issues.length > 0) {
341
+ return {
342
+ status: 'invalid',
343
+ issues: Object.freeze(issues),
344
+ };
345
+ }
346
+ const receipt = normalizedCommandReceipt(value);
347
+ if (receipt === null) {
348
+ return {
349
+ status: 'invalid',
350
+ issues: Object.freeze([commandReceiptIssue('receipt', 'Workbook command receipt is invalid')]),
351
+ };
352
+ }
353
+ return {
354
+ status: 'valid',
355
+ receipt,
356
+ issues: Object.freeze([]),
357
+ };
358
+ }
359
+ export function normalizeWorkbookCommandReceipt(receipt) {
360
+ const check = checkWorkbookCommandReceipt(receipt);
361
+ if (check.status === 'invalid') {
362
+ const [firstIssue] = check.issues;
363
+ throw new Error(firstIssue === undefined ? 'Workbook command receipt is invalid' : `Workbook command receipt is invalid: ${firstIssue.message}`);
364
+ }
365
+ return check.receipt;
366
+ }
367
+ export function isWorkbookCommandReceipt(value) {
368
+ return checkWorkbookCommandReceipt(value).status === 'valid';
369
+ }
370
+ export function workbookCommandReceiptOpsMatch(receipt) {
371
+ if (receipt.previewOps === undefined || receipt.appliedOps === undefined) {
372
+ return null;
373
+ }
374
+ return JSON.stringify(receipt.previewOps) === JSON.stringify(receipt.appliedOps);
375
+ }
151
376
  function normalizeReceiptOp(commandId, op, label) {
152
377
  if (!isWorkbookOp(op)) {
153
378
  throw new Error(`Workbook command receipt ${commandId} ${label} op is invalid`);
@@ -160,21 +385,6 @@ function normalizeReceiptRange(commandId, range) {
160
385
  }
161
386
  return structuredClone(range);
162
387
  }
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
388
  function isRecord(value) {
179
389
  return typeof value === 'object' && value !== null && !Array.isArray(value);
180
390
  }
@@ -188,21 +398,4 @@ function normalizeRequiredString(value, label) {
188
398
  }
189
399
  return normalized;
190
400
  }
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
401
  //# sourceMappingURL=features.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,5 +12,6 @@ export * from './run.js';
12
12
  export * from './result.js';
13
13
  export * from './requirements.js';
14
14
  export * from './features.js';
15
- export { hydratePlanData, isPlanData, toPlanData } from './plan-data.js';
16
- export type { WorkbookExecutablePlan, WorkbookPlanData, WorkbookPlanDataRefs } from './plan-data.js';
15
+ export * from './feature-plugin.js';
16
+ export { checkPlanData, hydratePlanData, isPlanData, toPlanData } from './plan-data.js';
17
+ export type { WorkbookExecutablePlan, WorkbookPlanData, WorkbookPlanDataCheckResult, WorkbookPlanDataIssue, WorkbookPlanDataIssueCode, WorkbookPlanDataRefs, } from './plan-data.js';
package/dist/index.js CHANGED
@@ -12,5 +12,6 @@ export * from './run.js';
12
12
  export * from './result.js';
13
13
  export * from './requirements.js';
14
14
  export * from './features.js';
15
- export { hydratePlanData, isPlanData, toPlanData } from './plan-data.js';
15
+ export * from './feature-plugin.js';
16
+ export { checkPlanData, hydratePlanData, isPlanData, toPlanData } from './plan-data.js';
16
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/input.d.ts CHANGED
@@ -2,7 +2,7 @@ export type WorkbookActionInput = null | string | number | boolean | readonly Wo
2
2
  readonly [key: string]: WorkbookActionInput;
3
3
  };
4
4
  export type WorkbookActionInputDescriptionKind = 'json' | 'object' | 'array' | 'string' | 'number' | 'boolean' | 'null';
5
- export declare const workbookActionInputDescriptionKinds: readonly ("string" | "number" | "boolean" | "object" | "null" | "json" | "array")[];
5
+ export declare const workbookActionInputDescriptionKinds: readonly ("string" | "number" | "boolean" | "object" | "json" | "array" | "null")[];
6
6
  export interface WorkbookActionInputDescription {
7
7
  readonly kind: WorkbookActionInputDescriptionKind;
8
8
  readonly description?: string;
@@ -28,7 +28,8 @@ export type WorkbookActionInputCheckResult = {
28
28
  readonly issues: readonly WorkbookActionInputIssue[];
29
29
  };
30
30
  export declare class WorkbookActionInputError extends Error {
31
- constructor(message: string);
31
+ readonly path: string;
32
+ constructor(message: string, path?: string);
32
33
  }
33
34
  export declare function isWorkbookActionInputDescriptionKind(value: unknown): value is WorkbookActionInputDescriptionKind;
34
35
  export declare function normalizeWorkbookActionInputDescription(input: unknown): WorkbookActionInputDescription;