@bilig/workbook 0.67.15 → 0.70.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 +24 -2
- package/dist/command-bundle.d.ts +49 -0
- package/dist/command-bundle.js +426 -0
- package/dist/command-bundle.js.map +1 -0
- package/dist/command-result.d.ts +51 -0
- package/dist/command-result.js +550 -0
- package/dist/command-result.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -102,7 +102,7 @@ The main API is intentionally small:
|
|
|
102
102
|
- descriptions: `describeModel`, `describeRef`, `describePlan`, `describePlanResult`, `describeRuntimeRequirements`, `checkRuntimeRequirements`, `checkRuntimeAdapter`, `describeRunResult`
|
|
103
103
|
- transport data: `isWorkbookRefData`, `toWorkbookRefData`, `collectWorkbookRefData`, `hydrateWorkbookRef`, `hydrateWorkbookRefs`, `toPlanData`, `isPlanData`, `checkPlanData`, `hydratePlanData`, `verifyPlanData`
|
|
104
104
|
- runtime handoff: `runWorkbookPlan`, `runWorkbookAction`, `WorkbookRunAdapter`
|
|
105
|
-
- feature handoff: `defineWorkbookFeaturePlugin`, `checkWorkbookFeaturePlugin`, `checkWorkbookCommandRequest`, `normalizeWorkbookCommandRequest`, `checkWorkbookCommandReceipt`, `normalizeWorkbookCommandReceipt`, `workbookCommandReceiptOpsMatch`
|
|
105
|
+
- feature handoff: `defineWorkbookFeaturePlugin`, `checkWorkbookFeaturePlugin`, `checkWorkbookCommandRequest`, `normalizeWorkbookCommandRequest`, `checkWorkbookCommandBundle`, `normalizeWorkbookCommandBundle`, `workbookCommandResultFor`, `workbookCommandResultForReceipts`, `checkWorkbookCommandResult`, `normalizeWorkbookCommandResult`, `checkWorkbookCommandReceipt`, `normalizeWorkbookCommandReceipt`, `workbookCommandReceiptOpsMatch`
|
|
106
106
|
- low-level language: `WorkbookOp`, `WorkbookTxn`, `EngineOp`, `EngineOpBatch`, `isEngineOpBatch`
|
|
107
107
|
|
|
108
108
|
Stable data helpers are exported for generic tool builders:
|
|
@@ -114,8 +114,9 @@ Stable data helpers are exported for generic tool builders:
|
|
|
114
114
|
- `builtInWorkbookCheckKinds`, `isBuiltInWorkbookCheckKind`
|
|
115
115
|
- `workbookActionInputDescriptionKinds`, `isWorkbookActionInputDescriptionKind`, `isWorkbookActionInputDescription`, `isWorkbookActionInput`, `checkInput`
|
|
116
116
|
- `workbookRuntimeRequirementKinds`, `isWorkbookRuntimeRequirementKind`, `workbookRuntimeCapabilities`, `isWorkbookRuntimeCapability`, `checkRuntimeRequirements`
|
|
117
|
-
- `workbookCommandCategories`, `isWorkbookCommandCategory`, `workbookCommandExecutionModes`, `isWorkbookCommandExecutionMode`, `workbookCommandReceiptStatuses`, `isWorkbookCommandReceiptStatus`
|
|
117
|
+
- `workbookCommandCategories`, `isWorkbookCommandCategory`, `workbookCommandExecutionModes`, `isWorkbookCommandExecutionMode`, `workbookCommandReceiptStatuses`, `isWorkbookCommandReceiptStatus`, `workbookCommandResultStatuses`, `isWorkbookCommandResultStatus`
|
|
118
118
|
- `workbookProjectionInterceptorPoints`, `isWorkbookProjectionInterceptorPoint`, `workbookUiContributionSlots`, `isWorkbookUiContributionSlot`, `checkWorkbookCommandRequest`
|
|
119
|
+
- `workbookCommandBundleCommandKinds`, `isWorkbookCommandBundleCommandKind`, `checkWorkbookCommandBundle`, `isWorkbookCommandBundle`, `workbookCommandResultFor`, `workbookCommandResultForReceipts`, `checkWorkbookCommandResult`, `isWorkbookCommandResult`
|
|
119
120
|
- `workbookRunErrorCodes`, `isWorkbookRunErrorCode`
|
|
120
121
|
|
|
121
122
|
Model action manifests are frozen null-prototype maps. Consumers can use normal
|
|
@@ -319,6 +320,27 @@ runtime. The exported command category, execution-mode, receipt-status,
|
|
|
319
320
|
projection-point, and UI-slot lists let tool builders present and validate
|
|
320
321
|
command contracts without importing a schema framework.
|
|
321
322
|
|
|
323
|
+
Use `checkWorkbookCommandBundle(data)` when an agent wants to hand a runtime a
|
|
324
|
+
single ordered set of command requests and low-level ops. A bundle must include
|
|
325
|
+
`targetRevision`, `idempotencyKey`, and non-empty `commands`. Each command uses
|
|
326
|
+
plain `kind: "request"` or `kind: "op"` data, keeps declared `touchedRanges`
|
|
327
|
+
canonical, and preserves command order after normalization. Mutation requests
|
|
328
|
+
and ops must say `destructive: true`, so broad edits are never implied by a
|
|
329
|
+
generic payload. `scope.maxTouchedCells` lets a caller reject oversized edits
|
|
330
|
+
before execution. The validator returns a `WorkbookCommandResult` with normalized
|
|
331
|
+
touched ranges and touched-cell count without importing `@bilig/core`.
|
|
332
|
+
`@bilig/agent-api` uses this same public handoff to validate its richer
|
|
333
|
+
app-owned `WorkbookAgentCommandBundle` before preview and authoritative apply,
|
|
334
|
+
without making `@bilig/workbook` depend on agent runtime code.
|
|
335
|
+
|
|
336
|
+
After a runtime has previewed or applied a bundle, call
|
|
337
|
+
`workbookCommandResultForReceipts(bundle, receipts, { revision, undo })` to turn
|
|
338
|
+
receipt evidence into the same boring public result shape. The helper validates
|
|
339
|
+
receipt count and request identity, aggregates changed ranges, reports
|
|
340
|
+
preview/apply `matched` proof when ops are present, and carries undo metadata
|
|
341
|
+
without requiring `@bilig/core`. Use `checkWorkbookCommandResult(data)` or
|
|
342
|
+
`normalizeWorkbookCommandResult(data)` before trusting a transported result.
|
|
343
|
+
|
|
322
344
|
Use `checkWorkbookCommandReceipt(data)` before trusting runtime command evidence.
|
|
323
345
|
It returns the same boring `{ status, issues }` shape for receipt fields such as
|
|
324
346
|
`status`, `featureId`, `commandId`, `previewOps`, `appliedOps`, `undo`,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { CellRangeRef } from '@bilig/protocol';
|
|
2
|
+
import { type WorkbookCommandResult } from './command-result.js';
|
|
3
|
+
import type { EngineOp } from './ops.js';
|
|
4
|
+
import { type WorkbookCommandRequest } from './features.js';
|
|
5
|
+
export type WorkbookCommandBundleCommandKind = 'request' | 'op';
|
|
6
|
+
export declare const workbookCommandBundleCommandKinds: readonly ["request", "op"];
|
|
7
|
+
export interface WorkbookCommandBundleScope {
|
|
8
|
+
readonly maxTouchedCells?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface WorkbookCommandBundleCommandBase {
|
|
11
|
+
readonly id?: string;
|
|
12
|
+
readonly touchedRanges?: readonly CellRangeRef[];
|
|
13
|
+
readonly destructive?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface WorkbookCommandBundleRequestCommand extends WorkbookCommandBundleCommandBase {
|
|
16
|
+
readonly kind: 'request';
|
|
17
|
+
readonly request: WorkbookCommandRequest;
|
|
18
|
+
}
|
|
19
|
+
export interface WorkbookCommandBundleOpCommand extends WorkbookCommandBundleCommandBase {
|
|
20
|
+
readonly kind: 'op';
|
|
21
|
+
readonly op: EngineOp;
|
|
22
|
+
}
|
|
23
|
+
export type WorkbookCommandBundleCommand = WorkbookCommandBundleRequestCommand | WorkbookCommandBundleOpCommand;
|
|
24
|
+
export interface WorkbookCommandBundle {
|
|
25
|
+
readonly id?: string;
|
|
26
|
+
readonly targetRevision: number;
|
|
27
|
+
readonly idempotencyKey: string;
|
|
28
|
+
readonly scope?: WorkbookCommandBundleScope;
|
|
29
|
+
readonly commands: readonly WorkbookCommandBundleCommand[];
|
|
30
|
+
}
|
|
31
|
+
export type WorkbookCommandBundleIssueCode = 'invalid_bundle' | 'missing_target_revision' | 'invalid_target_revision' | 'missing_idempotency_key' | 'invalid_idempotency_key' | 'missing_commands' | 'unknown_command_kind' | 'invalid_command' | 'invalid_range' | 'destructive_not_confirmed' | 'too_many_touched_cells';
|
|
32
|
+
export interface WorkbookCommandBundleIssue {
|
|
33
|
+
readonly code: WorkbookCommandBundleIssueCode;
|
|
34
|
+
readonly path: string;
|
|
35
|
+
readonly message: string;
|
|
36
|
+
}
|
|
37
|
+
export type WorkbookCommandBundleCheckResult = {
|
|
38
|
+
readonly status: 'valid';
|
|
39
|
+
readonly bundle: WorkbookCommandBundle;
|
|
40
|
+
readonly result: WorkbookCommandResult;
|
|
41
|
+
readonly issues: readonly [];
|
|
42
|
+
} | {
|
|
43
|
+
readonly status: 'invalid';
|
|
44
|
+
readonly issues: readonly WorkbookCommandBundleIssue[];
|
|
45
|
+
};
|
|
46
|
+
export declare function isWorkbookCommandBundleCommandKind(value: unknown): value is WorkbookCommandBundleCommandKind;
|
|
47
|
+
export declare function checkWorkbookCommandBundle(value: unknown): WorkbookCommandBundleCheckResult;
|
|
48
|
+
export declare function normalizeWorkbookCommandBundle(value: unknown): WorkbookCommandBundle;
|
|
49
|
+
export declare function isWorkbookCommandBundle(value: unknown): value is WorkbookCommandBundle;
|
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
import { formatAddress, parseCellAddress } from '@bilig/formula';
|
|
2
|
+
import { workbookCommandResultFor } from './command-result.js';
|
|
3
|
+
import { isWorkbookOp } from './guards.js';
|
|
4
|
+
import { checkWorkbookCommandRequest, normalizeWorkbookCommandRequest } from './features.js';
|
|
5
|
+
export const workbookCommandBundleCommandKinds = Object.freeze([
|
|
6
|
+
'request',
|
|
7
|
+
'op',
|
|
8
|
+
]);
|
|
9
|
+
const WORKBOOK_COMMAND_BUNDLE_COMMAND_KIND_SET = new Set(workbookCommandBundleCommandKinds);
|
|
10
|
+
export function isWorkbookCommandBundleCommandKind(value) {
|
|
11
|
+
return typeof value === 'string' && WORKBOOK_COMMAND_BUNDLE_COMMAND_KIND_SET.has(value);
|
|
12
|
+
}
|
|
13
|
+
export function checkWorkbookCommandBundle(value) {
|
|
14
|
+
if (!isRecord(value)) {
|
|
15
|
+
return {
|
|
16
|
+
status: 'invalid',
|
|
17
|
+
issues: Object.freeze([commandBundleIssue('invalid_bundle', 'bundle', 'Workbook command bundle must be an object')]),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const accessorPath = firstAccessorPath(value, 'bundle');
|
|
21
|
+
if (accessorPath !== null) {
|
|
22
|
+
return {
|
|
23
|
+
status: 'invalid',
|
|
24
|
+
issues: Object.freeze([
|
|
25
|
+
commandBundleIssue('invalid_bundle', accessorPath, 'Workbook command bundle must contain only data properties'),
|
|
26
|
+
]),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const issues = [];
|
|
30
|
+
pushOptionalStringIssue(issues, ownValue(value, 'id'), 'id', 'bundle id');
|
|
31
|
+
pushTargetRevisionIssue(issues, ownValue(value, 'targetRevision'));
|
|
32
|
+
pushIdempotencyKeyIssue(issues, ownValue(value, 'idempotencyKey'));
|
|
33
|
+
pushScopeIssues(issues, ownValue(value, 'scope'));
|
|
34
|
+
const commands = ownValue(value, 'commands');
|
|
35
|
+
if (!Array.isArray(commands) || commands.length === 0) {
|
|
36
|
+
issues.push(commandBundleIssue('missing_commands', 'commands', 'Workbook command bundle commands must be a non-empty array'));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
pushArrayDataIssues(issues, commands, 'commands', 'Workbook command bundle commands');
|
|
40
|
+
for (let index = 0; index < commands.length; index += 1) {
|
|
41
|
+
const command = arrayDataValue(commands, index);
|
|
42
|
+
if (command === undefined) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
pushCommandIssues(issues, command, `commands[${index}]`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (issues.length > 0) {
|
|
49
|
+
return {
|
|
50
|
+
status: 'invalid',
|
|
51
|
+
issues: Object.freeze(issues),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const normalized = normalizeWorkbookCommandBundleData(value);
|
|
55
|
+
const result = workbookCommandResultFor(normalized);
|
|
56
|
+
const maxTouchedCells = normalized.scope?.maxTouchedCells;
|
|
57
|
+
if (maxTouchedCells !== undefined && result.touchedCellCount > maxTouchedCells) {
|
|
58
|
+
return {
|
|
59
|
+
status: 'invalid',
|
|
60
|
+
issues: Object.freeze([
|
|
61
|
+
commandBundleIssue('too_many_touched_cells', 'scope.maxTouchedCells', `Workbook command bundle touches ${result.touchedCellCount} cells, exceeding scope.maxTouchedCells ${maxTouchedCells}`),
|
|
62
|
+
]),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
status: 'valid',
|
|
67
|
+
bundle: normalized,
|
|
68
|
+
result,
|
|
69
|
+
issues: Object.freeze([]),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export function normalizeWorkbookCommandBundle(value) {
|
|
73
|
+
const check = checkWorkbookCommandBundle(value);
|
|
74
|
+
if (check.status === 'invalid') {
|
|
75
|
+
const [firstIssue] = check.issues;
|
|
76
|
+
throw new Error(firstIssue === undefined ? 'Workbook command bundle is invalid' : `Workbook command bundle is invalid: ${firstIssue.message}`);
|
|
77
|
+
}
|
|
78
|
+
return check.bundle;
|
|
79
|
+
}
|
|
80
|
+
export function isWorkbookCommandBundle(value) {
|
|
81
|
+
return checkWorkbookCommandBundle(value).status === 'valid';
|
|
82
|
+
}
|
|
83
|
+
function pushCommandIssues(issues, value, path) {
|
|
84
|
+
if (!isRecord(value)) {
|
|
85
|
+
issues.push(commandBundleIssue('invalid_command', path, 'Workbook command bundle command must be an object'));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
pushOptionalStringIssue(issues, ownValue(value, 'id'), `${path}.id`, 'command id');
|
|
89
|
+
const kind = ownValue(value, 'kind');
|
|
90
|
+
if (!isWorkbookCommandBundleCommandKind(kind)) {
|
|
91
|
+
issues.push(commandBundleIssue('unknown_command_kind', `${path}.kind`, 'Workbook command bundle command kind is unknown'));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const touchedRanges = ownValue(value, 'touchedRanges');
|
|
95
|
+
pushTouchedRangesIssues(issues, touchedRanges, `${path}.touchedRanges`);
|
|
96
|
+
const destructive = ownValue(value, 'destructive');
|
|
97
|
+
if (destructive !== undefined && typeof destructive !== 'boolean') {
|
|
98
|
+
issues.push(commandBundleIssue('invalid_command', `${path}.destructive`, 'Workbook command bundle command destructive flag must be boolean'));
|
|
99
|
+
}
|
|
100
|
+
if (kind === 'request') {
|
|
101
|
+
pushRequestCommandIssues(issues, value, path);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
pushOpCommandIssues(issues, value, path);
|
|
105
|
+
}
|
|
106
|
+
function pushRequestCommandIssues(issues, value, path) {
|
|
107
|
+
const request = ownValue(value, 'request');
|
|
108
|
+
const requestCheck = checkWorkbookCommandRequest(request);
|
|
109
|
+
if (requestCheck.status === 'invalid') {
|
|
110
|
+
requestCheck.issues.forEach((issue) => {
|
|
111
|
+
issues.push(commandBundleIssue('invalid_command', `${path}.request.${issue.path}`, issue.message));
|
|
112
|
+
});
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (commandNeedsDestructiveConfirmation(requestCheck.request) && ownValue(value, 'destructive') !== true) {
|
|
116
|
+
issues.push(commandBundleIssue('destructive_not_confirmed', `${path}.destructive`, 'Workbook command bundle request mutates the workbook and must set destructive: true'));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function pushOpCommandIssues(issues, value, path) {
|
|
120
|
+
if (!isWorkbookOp(ownValue(value, 'op'))) {
|
|
121
|
+
issues.push(commandBundleIssue('invalid_command', `${path}.op`, 'Workbook command bundle op is invalid'));
|
|
122
|
+
}
|
|
123
|
+
if (ownValue(value, 'destructive') !== true) {
|
|
124
|
+
issues.push(commandBundleIssue('destructive_not_confirmed', `${path}.destructive`, 'Workbook command bundle op mutates the workbook and must set destructive: true'));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function commandNeedsDestructiveConfirmation(request) {
|
|
128
|
+
return request.category === 'mutation' || request.mode === 'apply' || request.mode === 'applyAndVerify';
|
|
129
|
+
}
|
|
130
|
+
function pushTouchedRangesIssues(issues, value, path) {
|
|
131
|
+
if (value === undefined) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (!Array.isArray(value)) {
|
|
135
|
+
issues.push(commandBundleIssue('invalid_range', path, 'Workbook command bundle touched ranges must be an array'));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
pushArrayDataIssues(issues, value, path, 'Workbook command bundle touched ranges');
|
|
139
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
140
|
+
const range = arrayDataValue(value, index);
|
|
141
|
+
if (range === undefined) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
normalizeRange(range, `${path}[${index}]`);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
issues.push(commandBundleIssue('invalid_range', `${path}[${index}]`, errorMessage(error)));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function pushScopeIssues(issues, value) {
|
|
153
|
+
if (value === undefined) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (!isRecord(value)) {
|
|
157
|
+
issues.push(commandBundleIssue('invalid_bundle', 'scope', 'Workbook command bundle scope must be an object'));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const maxTouchedCells = ownValue(value, 'maxTouchedCells');
|
|
161
|
+
if (maxTouchedCells !== undefined && !isSafeNonNegativeInteger(maxTouchedCells)) {
|
|
162
|
+
issues.push(commandBundleIssue('invalid_bundle', 'scope.maxTouchedCells', 'Workbook command bundle maxTouchedCells must be a safe non-negative integer'));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function pushTargetRevisionIssue(issues, value) {
|
|
166
|
+
if (value === undefined) {
|
|
167
|
+
issues.push(commandBundleIssue('missing_target_revision', 'targetRevision', 'Workbook command bundle targetRevision is required'));
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (!isSafeNonNegativeInteger(value)) {
|
|
171
|
+
issues.push(commandBundleIssue('invalid_target_revision', 'targetRevision', 'Workbook command bundle targetRevision must be a safe non-negative integer'));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function pushIdempotencyKeyIssue(issues, value) {
|
|
175
|
+
if (value === undefined) {
|
|
176
|
+
issues.push(commandBundleIssue('missing_idempotency_key', 'idempotencyKey', 'Workbook command bundle idempotencyKey is required'));
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (typeof value !== 'string') {
|
|
180
|
+
issues.push(commandBundleIssue('invalid_idempotency_key', 'idempotencyKey', 'Workbook command bundle idempotencyKey must be a string'));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
pushNonEmptyExactStringIssue(issues, value, 'idempotencyKey', 'idempotencyKey', 'invalid_idempotency_key');
|
|
184
|
+
}
|
|
185
|
+
function pushOptionalStringIssue(issues, value, path, label) {
|
|
186
|
+
if (value === undefined) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (typeof value !== 'string') {
|
|
190
|
+
issues.push(commandBundleIssue('invalid_bundle', path, `Workbook command bundle ${label} must be a string`));
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
pushNonEmptyExactStringIssue(issues, value, path, label, 'invalid_bundle');
|
|
194
|
+
}
|
|
195
|
+
function pushNonEmptyExactStringIssue(issues, value, path, label, code) {
|
|
196
|
+
const normalized = value.trim();
|
|
197
|
+
if (normalized === '') {
|
|
198
|
+
issues.push(commandBundleIssue(code, path, `Workbook command bundle ${label} cannot be empty`));
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (normalized !== value) {
|
|
202
|
+
issues.push(commandBundleIssue(code, path, `Workbook command bundle ${label} must not have leading or trailing whitespace`));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function pushArrayDataIssues(issues, value, path, label) {
|
|
206
|
+
const accessorPath = firstAccessorPath(value, path);
|
|
207
|
+
if (accessorPath !== null) {
|
|
208
|
+
issues.push(commandBundleIssue('invalid_bundle', accessorPath, `${label} must contain only data properties`));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
212
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
213
|
+
if (descriptor === undefined || !descriptor.enumerable || !('value' in descriptor)) {
|
|
214
|
+
issues.push(commandBundleIssue('invalid_bundle', `${path}[${index}]`, `${label} must contain only data properties`));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function normalizeWorkbookCommandBundleData(value) {
|
|
219
|
+
const id = ownValue(value, 'id');
|
|
220
|
+
const targetRevision = ownValue(value, 'targetRevision');
|
|
221
|
+
const idempotencyKey = ownValue(value, 'idempotencyKey');
|
|
222
|
+
const scope = ownValue(value, 'scope');
|
|
223
|
+
const maxTouchedCells = isRecord(scope) ? ownValue(scope, 'maxTouchedCells') : undefined;
|
|
224
|
+
const commands = ownValue(value, 'commands');
|
|
225
|
+
if (!isSafeNonNegativeInteger(targetRevision)) {
|
|
226
|
+
throw new Error('Workbook command bundle targetRevision is invalid');
|
|
227
|
+
}
|
|
228
|
+
if (typeof idempotencyKey !== 'string') {
|
|
229
|
+
throw new Error('Workbook command bundle idempotencyKey is invalid');
|
|
230
|
+
}
|
|
231
|
+
if (!Array.isArray(commands)) {
|
|
232
|
+
throw new Error('Workbook command bundle commands are invalid');
|
|
233
|
+
}
|
|
234
|
+
return Object.freeze({
|
|
235
|
+
...(typeof id === 'string' ? { id } : {}),
|
|
236
|
+
targetRevision,
|
|
237
|
+
idempotencyKey,
|
|
238
|
+
...(isSafeNonNegativeInteger(maxTouchedCells) ? { scope: Object.freeze({ maxTouchedCells }) } : {}),
|
|
239
|
+
commands: Object.freeze(commands.map((command, index) => normalizeCommand(command, index))),
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
function normalizeCommand(value, index) {
|
|
243
|
+
if (!isRecord(value)) {
|
|
244
|
+
throw new Error(`Workbook command bundle command ${index} is invalid`);
|
|
245
|
+
}
|
|
246
|
+
const id = ownValue(value, 'id');
|
|
247
|
+
const kind = ownValue(value, 'kind');
|
|
248
|
+
const touchedRanges = normalizeTouchedRanges(ownValue(value, 'touchedRanges'));
|
|
249
|
+
const destructive = ownValue(value, 'destructive');
|
|
250
|
+
const common = Object.freeze({
|
|
251
|
+
...(typeof id === 'string' ? { id } : {}),
|
|
252
|
+
...(touchedRanges.length > 0 ? { touchedRanges } : {}),
|
|
253
|
+
...(destructive !== undefined ? { destructive: destructive === true } : {}),
|
|
254
|
+
});
|
|
255
|
+
if (kind === 'request') {
|
|
256
|
+
return Object.freeze({
|
|
257
|
+
...common,
|
|
258
|
+
kind,
|
|
259
|
+
request: normalizeWorkbookCommandRequest(ownValue(value, 'request')),
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
return Object.freeze({
|
|
263
|
+
...common,
|
|
264
|
+
kind: 'op',
|
|
265
|
+
op: normalizeOp(ownValue(value, 'op')),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
function normalizeOp(value) {
|
|
269
|
+
if (!isWorkbookOp(value)) {
|
|
270
|
+
throw new Error('Workbook command bundle op is invalid');
|
|
271
|
+
}
|
|
272
|
+
const cloned = cloneData(value);
|
|
273
|
+
if (!isWorkbookOp(cloned)) {
|
|
274
|
+
throw new Error('Workbook command bundle op clone is invalid');
|
|
275
|
+
}
|
|
276
|
+
return freezeData(cloned);
|
|
277
|
+
}
|
|
278
|
+
function normalizeTouchedRanges(value) {
|
|
279
|
+
if (!Array.isArray(value)) {
|
|
280
|
+
return Object.freeze([]);
|
|
281
|
+
}
|
|
282
|
+
return Object.freeze(value.map((range, index) => normalizeRange(range, `touchedRanges[${index}]`).range));
|
|
283
|
+
}
|
|
284
|
+
function normalizeRange(value, path, label = 'Workbook command bundle') {
|
|
285
|
+
if (!isRecord(value)) {
|
|
286
|
+
throw new Error(`${label} ${path} must be an object`);
|
|
287
|
+
}
|
|
288
|
+
const sheetName = ownValue(value, 'sheetName');
|
|
289
|
+
const startAddress = ownValue(value, 'startAddress');
|
|
290
|
+
const endAddress = ownValue(value, 'endAddress');
|
|
291
|
+
if (typeof sheetName !== 'string' || typeof startAddress !== 'string' || typeof endAddress !== 'string') {
|
|
292
|
+
throw new Error(`${label} ${path} must include sheetName, startAddress, and endAddress strings`);
|
|
293
|
+
}
|
|
294
|
+
const normalizedSheetName = normalizeExactString(sheetName, `${path}.sheetName`);
|
|
295
|
+
const start = normalizeCellAddress(startAddress, `${path}.startAddress`, label);
|
|
296
|
+
const end = normalizeCellAddress(endAddress, `${path}.endAddress`, label);
|
|
297
|
+
if (end.row < start.row || end.col < start.col) {
|
|
298
|
+
throw new Error(`${label} ${path} endAddress must not be before startAddress`);
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
range: Object.freeze({
|
|
302
|
+
sheetName: normalizedSheetName,
|
|
303
|
+
startAddress: start.text,
|
|
304
|
+
endAddress: end.text,
|
|
305
|
+
}),
|
|
306
|
+
cellCount: (end.row - start.row + 1) * (end.col - start.col + 1),
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
function normalizeCellAddress(value, path, label = 'Workbook command bundle') {
|
|
310
|
+
try {
|
|
311
|
+
const parsed = parseCellAddress(value);
|
|
312
|
+
if (parsed.sheetName !== undefined) {
|
|
313
|
+
throw new Error('qualified');
|
|
314
|
+
}
|
|
315
|
+
return {
|
|
316
|
+
row: parsed.row,
|
|
317
|
+
col: parsed.col,
|
|
318
|
+
text: formatAddress(parsed.row, parsed.col),
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
throw new Error(`${label} ${path} is invalid: ${value}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
function normalizeExactString(value, path) {
|
|
326
|
+
const normalized = value.trim();
|
|
327
|
+
if (normalized === '') {
|
|
328
|
+
throw new Error(`Workbook command bundle ${path} cannot be empty`);
|
|
329
|
+
}
|
|
330
|
+
if (normalized !== value) {
|
|
331
|
+
throw new Error(`Workbook command bundle ${path} must not have leading or trailing whitespace`);
|
|
332
|
+
}
|
|
333
|
+
return normalized;
|
|
334
|
+
}
|
|
335
|
+
function commandBundleIssue(code, path, message) {
|
|
336
|
+
return Object.freeze({
|
|
337
|
+
code,
|
|
338
|
+
path,
|
|
339
|
+
message,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
function arrayDataValue(value, index) {
|
|
343
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
344
|
+
return descriptor !== undefined && descriptor.enumerable && 'value' in descriptor ? descriptor.value : undefined;
|
|
345
|
+
}
|
|
346
|
+
function ownValue(value, key) {
|
|
347
|
+
return Object.getOwnPropertyDescriptor(value, key)?.value;
|
|
348
|
+
}
|
|
349
|
+
function isRecord(value) {
|
|
350
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
351
|
+
}
|
|
352
|
+
function isSafeNonNegativeInteger(value) {
|
|
353
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
354
|
+
}
|
|
355
|
+
function errorMessage(error) {
|
|
356
|
+
return error instanceof Error ? error.message : String(error);
|
|
357
|
+
}
|
|
358
|
+
function firstAccessorPath(value, path, seen = new WeakSet()) {
|
|
359
|
+
if (typeof value !== 'object' || value === null) {
|
|
360
|
+
return null;
|
|
361
|
+
}
|
|
362
|
+
if (seen.has(value)) {
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
seen.add(value);
|
|
366
|
+
for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {
|
|
367
|
+
const childPath = Array.isArray(value) && /^\d+$/.test(key) ? `${path}[${key}]` : `${path}.${key}`;
|
|
368
|
+
if (!('value' in descriptor)) {
|
|
369
|
+
return childPath;
|
|
370
|
+
}
|
|
371
|
+
const nestedPath = firstAccessorPath(descriptor.value, childPath, seen);
|
|
372
|
+
if (nestedPath !== null) {
|
|
373
|
+
return nestedPath;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return null;
|
|
377
|
+
}
|
|
378
|
+
function freezeData(value, seen = new WeakSet()) {
|
|
379
|
+
if (typeof value !== 'object' || value === null) {
|
|
380
|
+
return value;
|
|
381
|
+
}
|
|
382
|
+
if (seen.has(value)) {
|
|
383
|
+
return value;
|
|
384
|
+
}
|
|
385
|
+
seen.add(value);
|
|
386
|
+
Object.values(Object.getOwnPropertyDescriptors(value)).forEach((descriptor) => {
|
|
387
|
+
if ('value' in descriptor) {
|
|
388
|
+
freezeData(descriptor.value, seen);
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
return Object.freeze(value);
|
|
392
|
+
}
|
|
393
|
+
function cloneData(value, seen = new WeakMap()) {
|
|
394
|
+
if (typeof value !== 'object' || value === null) {
|
|
395
|
+
return value;
|
|
396
|
+
}
|
|
397
|
+
const existing = seen.get(value);
|
|
398
|
+
if (existing !== undefined) {
|
|
399
|
+
return existing;
|
|
400
|
+
}
|
|
401
|
+
if (Array.isArray(value)) {
|
|
402
|
+
const cloned = [];
|
|
403
|
+
seen.set(value, cloned);
|
|
404
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
405
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
406
|
+
if (descriptor !== undefined && descriptor.enumerable && 'value' in descriptor) {
|
|
407
|
+
cloned[index] = cloneData(descriptor.value, seen);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return cloned;
|
|
411
|
+
}
|
|
412
|
+
const cloned = Object.create(Object.getPrototypeOf(value));
|
|
413
|
+
seen.set(value, cloned);
|
|
414
|
+
Object.entries(Object.getOwnPropertyDescriptors(value)).forEach(([key, descriptor]) => {
|
|
415
|
+
if (descriptor.enumerable && 'value' in descriptor) {
|
|
416
|
+
Object.defineProperty(cloned, key, {
|
|
417
|
+
configurable: true,
|
|
418
|
+
enumerable: true,
|
|
419
|
+
value: cloneData(descriptor.value, seen),
|
|
420
|
+
writable: true,
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
return cloned;
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=command-bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-bundle.js","sourceRoot":"","sources":["../src/command-bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CellRangeRef } from '@bilig/protocol';
|
|
2
|
+
import { type WorkbookCommandReceipt, type WorkbookCommandReceiptStatus } from './features.js';
|
|
3
|
+
import type { WorkbookCommandBundle } from './command-bundle.js';
|
|
4
|
+
import type { WorkbookUndoRef } from './result.js';
|
|
5
|
+
export type WorkbookCommandResultStatus = 'accepted' | WorkbookCommandReceiptStatus;
|
|
6
|
+
export declare const workbookCommandResultStatuses: readonly ["accepted", "previewed", "applied", "rejected", "noop"];
|
|
7
|
+
export interface WorkbookCommandResultBase {
|
|
8
|
+
readonly bundleId?: string;
|
|
9
|
+
readonly targetRevision: number;
|
|
10
|
+
readonly idempotencyKey: string;
|
|
11
|
+
readonly commandCount: number;
|
|
12
|
+
readonly touchedRanges: readonly CellRangeRef[];
|
|
13
|
+
readonly touchedCellCount: number;
|
|
14
|
+
}
|
|
15
|
+
export interface WorkbookCommandAcceptedResult extends WorkbookCommandResultBase {
|
|
16
|
+
readonly status: 'accepted';
|
|
17
|
+
}
|
|
18
|
+
export interface WorkbookCommandSettledResult extends WorkbookCommandResultBase {
|
|
19
|
+
readonly status: WorkbookCommandReceiptStatus;
|
|
20
|
+
readonly receipts: readonly WorkbookCommandReceipt[];
|
|
21
|
+
readonly matched: boolean | null;
|
|
22
|
+
readonly changedRanges: readonly CellRangeRef[];
|
|
23
|
+
readonly revision?: number;
|
|
24
|
+
readonly undo?: WorkbookUndoRef;
|
|
25
|
+
readonly errors?: readonly string[];
|
|
26
|
+
}
|
|
27
|
+
export type WorkbookCommandResult = WorkbookCommandAcceptedResult | WorkbookCommandSettledResult;
|
|
28
|
+
export interface WorkbookCommandResultForReceiptsOptions {
|
|
29
|
+
readonly revision?: number;
|
|
30
|
+
readonly undo?: WorkbookUndoRef;
|
|
31
|
+
}
|
|
32
|
+
export type WorkbookCommandResultIssueCode = 'invalid_command_result' | 'invalid_receipt' | 'receipt_count_mismatch' | 'receipt_command_mismatch' | 'invalid_undo';
|
|
33
|
+
export interface WorkbookCommandResultIssue {
|
|
34
|
+
readonly code: WorkbookCommandResultIssueCode;
|
|
35
|
+
readonly path: string;
|
|
36
|
+
readonly message: string;
|
|
37
|
+
}
|
|
38
|
+
export type WorkbookCommandResultCheckResult = {
|
|
39
|
+
readonly status: 'valid';
|
|
40
|
+
readonly result: WorkbookCommandResult;
|
|
41
|
+
readonly issues: readonly [];
|
|
42
|
+
} | {
|
|
43
|
+
readonly status: 'invalid';
|
|
44
|
+
readonly issues: readonly WorkbookCommandResultIssue[];
|
|
45
|
+
};
|
|
46
|
+
export declare function isWorkbookCommandResultStatus(value: unknown): value is WorkbookCommandResultStatus;
|
|
47
|
+
export declare function workbookCommandResultFor(bundle: WorkbookCommandBundle): WorkbookCommandResult;
|
|
48
|
+
export declare function workbookCommandResultForReceipts(bundle: WorkbookCommandBundle, receipts: readonly WorkbookCommandReceipt[], options?: WorkbookCommandResultForReceiptsOptions): WorkbookCommandResult;
|
|
49
|
+
export declare function checkWorkbookCommandResult(value: unknown): WorkbookCommandResultCheckResult;
|
|
50
|
+
export declare function normalizeWorkbookCommandResult(value: unknown): WorkbookCommandResult;
|
|
51
|
+
export declare function isWorkbookCommandResult(value: unknown): value is WorkbookCommandResult;
|
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
import { formatAddress, parseCellAddress } from '@bilig/formula';
|
|
2
|
+
import { checkWorkbookCommandReceipt, normalizeWorkbookCommandReceipt, workbookCommandReceiptOpsMatch, workbookCommandReceiptStatuses, } from './features.js';
|
|
3
|
+
import { isWorkbookOp } from './guards.js';
|
|
4
|
+
export const workbookCommandResultStatuses = Object.freeze([
|
|
5
|
+
'accepted',
|
|
6
|
+
...workbookCommandReceiptStatuses,
|
|
7
|
+
]);
|
|
8
|
+
const WORKBOOK_COMMAND_RESULT_STATUS_SET = new Set(workbookCommandResultStatuses);
|
|
9
|
+
export function isWorkbookCommandResultStatus(value) {
|
|
10
|
+
return typeof value === 'string' && WORKBOOK_COMMAND_RESULT_STATUS_SET.has(value);
|
|
11
|
+
}
|
|
12
|
+
export function workbookCommandResultFor(bundle) {
|
|
13
|
+
const touchedRanges = [];
|
|
14
|
+
let touchedCellCount = 0;
|
|
15
|
+
for (const command of bundle.commands) {
|
|
16
|
+
for (const range of command.touchedRanges ?? []) {
|
|
17
|
+
const normalized = normalizeRange(range, 'touchedRanges');
|
|
18
|
+
touchedRanges.push(normalized.range);
|
|
19
|
+
touchedCellCount += normalized.cellCount;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return Object.freeze({
|
|
23
|
+
status: 'accepted',
|
|
24
|
+
...(bundle.id !== undefined ? { bundleId: bundle.id } : {}),
|
|
25
|
+
targetRevision: bundle.targetRevision,
|
|
26
|
+
idempotencyKey: bundle.idempotencyKey,
|
|
27
|
+
commandCount: bundle.commands.length,
|
|
28
|
+
touchedRanges: Object.freeze(touchedRanges),
|
|
29
|
+
touchedCellCount,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export function workbookCommandResultForReceipts(bundle, receipts, options = {}) {
|
|
33
|
+
const normalizedReceipts = normalizeReceiptArrayForResult(receipts);
|
|
34
|
+
if (normalizedReceipts.length !== bundle.commands.length) {
|
|
35
|
+
throw new Error(`Workbook command result is invalid: expected ${String(bundle.commands.length)} receipts for ${String(bundle.commands.length)} commands, got ${String(normalizedReceipts.length)}`);
|
|
36
|
+
}
|
|
37
|
+
normalizedReceipts.forEach((receipt, index) => {
|
|
38
|
+
assertReceiptMatchesCommand(bundle.commands[index], receipt, index);
|
|
39
|
+
});
|
|
40
|
+
const revision = options.revision;
|
|
41
|
+
if (revision !== undefined && !isSafeNonNegativeInteger(revision)) {
|
|
42
|
+
throw new Error('Workbook command result is invalid: revision must be a safe non-negative integer');
|
|
43
|
+
}
|
|
44
|
+
const undo = options.undo === undefined ? undefined : normalizeUndoRef(options.undo, 'undo');
|
|
45
|
+
const changedRanges = normalizedReceipts.flatMap((receipt) => [...(receipt.changedRanges ?? [])]);
|
|
46
|
+
const errors = commandResultErrorsForReceipts(normalizedReceipts);
|
|
47
|
+
return normalizeWorkbookCommandResult({
|
|
48
|
+
...workbookCommandResultFor(bundle),
|
|
49
|
+
status: commandResultStatusForReceipts(normalizedReceipts),
|
|
50
|
+
...(revision !== undefined ? { revision } : {}),
|
|
51
|
+
receipts: normalizedReceipts,
|
|
52
|
+
matched: commandResultMatchedForReceipts(normalizedReceipts),
|
|
53
|
+
changedRanges,
|
|
54
|
+
...(undo !== undefined ? { undo } : {}),
|
|
55
|
+
...(errors.length > 0 ? { errors } : {}),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
export function checkWorkbookCommandResult(value) {
|
|
59
|
+
if (!isRecord(value)) {
|
|
60
|
+
return {
|
|
61
|
+
status: 'invalid',
|
|
62
|
+
issues: Object.freeze([commandResultIssue('invalid_command_result', 'result', 'Workbook command result must be an object')]),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const accessorPath = firstAccessorPath(value, 'result');
|
|
66
|
+
if (accessorPath !== null) {
|
|
67
|
+
return {
|
|
68
|
+
status: 'invalid',
|
|
69
|
+
issues: Object.freeze([
|
|
70
|
+
commandResultIssue('invalid_command_result', accessorPath, 'Workbook command result must contain only data properties'),
|
|
71
|
+
]),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const issues = [];
|
|
75
|
+
const status = ownValue(value, 'status');
|
|
76
|
+
if (!isWorkbookCommandResultStatus(status)) {
|
|
77
|
+
issues.push(commandResultIssue('invalid_command_result', 'status', 'Workbook command result status is invalid'));
|
|
78
|
+
}
|
|
79
|
+
pushResultOptionalStringIssue(issues, ownValue(value, 'bundleId'), 'bundleId', 'bundle id');
|
|
80
|
+
pushResultSafeIntegerIssue(issues, ownValue(value, 'targetRevision'), 'targetRevision', 'target revision', true);
|
|
81
|
+
pushResultRequiredStringIssue(issues, ownValue(value, 'idempotencyKey'), 'idempotencyKey', 'idempotency key');
|
|
82
|
+
pushResultSafeIntegerIssue(issues, ownValue(value, 'commandCount'), 'commandCount', 'command count', true);
|
|
83
|
+
pushResultRangesIssues(issues, ownValue(value, 'touchedRanges'), 'touchedRanges', 'touched ranges');
|
|
84
|
+
pushResultSafeIntegerIssue(issues, ownValue(value, 'touchedCellCount'), 'touchedCellCount', 'touched cell count', true);
|
|
85
|
+
if (isWorkbookCommandResultStatus(status) && status !== 'accepted') {
|
|
86
|
+
pushResultSafeIntegerIssue(issues, ownValue(value, 'revision'), 'revision', 'revision', false);
|
|
87
|
+
pushResultReceiptsIssues(issues, ownValue(value, 'receipts'));
|
|
88
|
+
const matched = ownValue(value, 'matched');
|
|
89
|
+
if (matched !== null && typeof matched !== 'boolean') {
|
|
90
|
+
issues.push(commandResultIssue('invalid_command_result', 'matched', 'Workbook command result matched must be boolean or null'));
|
|
91
|
+
}
|
|
92
|
+
pushResultRangesIssues(issues, ownValue(value, 'changedRanges'), 'changedRanges', 'changed ranges');
|
|
93
|
+
const undo = ownValue(value, 'undo');
|
|
94
|
+
if (undo !== undefined) {
|
|
95
|
+
try {
|
|
96
|
+
normalizeUndoRef(undo, 'undo');
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
issues.push(commandResultIssue('invalid_undo', 'undo', errorMessage(error)));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
pushResultErrorsIssues(issues, ownValue(value, 'errors'));
|
|
103
|
+
}
|
|
104
|
+
if (issues.length > 0) {
|
|
105
|
+
return {
|
|
106
|
+
status: 'invalid',
|
|
107
|
+
issues: Object.freeze(issues),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
status: 'valid',
|
|
112
|
+
result: normalizeWorkbookCommandResultData(value),
|
|
113
|
+
issues: Object.freeze([]),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export function normalizeWorkbookCommandResult(value) {
|
|
117
|
+
const check = checkWorkbookCommandResult(value);
|
|
118
|
+
if (check.status === 'invalid') {
|
|
119
|
+
const [firstIssue] = check.issues;
|
|
120
|
+
throw new Error(firstIssue === undefined ? 'Workbook command result is invalid' : `Workbook command result is invalid: ${firstIssue.message}`);
|
|
121
|
+
}
|
|
122
|
+
return check.result;
|
|
123
|
+
}
|
|
124
|
+
export function isWorkbookCommandResult(value) {
|
|
125
|
+
return checkWorkbookCommandResult(value).status === 'valid';
|
|
126
|
+
}
|
|
127
|
+
function normalizeReceiptArrayForResult(receipts) {
|
|
128
|
+
if (!Array.isArray(receipts)) {
|
|
129
|
+
throw new Error('Workbook command result is invalid: receipts must be an array');
|
|
130
|
+
}
|
|
131
|
+
const accessorPath = firstAccessorPath(receipts, 'receipts');
|
|
132
|
+
if (accessorPath !== null) {
|
|
133
|
+
throw new Error(`Workbook command result is invalid: ${accessorPath} must contain only data properties`);
|
|
134
|
+
}
|
|
135
|
+
const normalizedReceipts = [];
|
|
136
|
+
for (let index = 0; index < receipts.length; index += 1) {
|
|
137
|
+
const receipt = arrayDataValue(receipts, index);
|
|
138
|
+
if (receipt === undefined) {
|
|
139
|
+
throw new Error(`Workbook command result is invalid: receipts[${String(index)}] must contain only data properties`);
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
normalizedReceipts.push(normalizeWorkbookCommandReceipt(receipt));
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
throw new Error(`Workbook command result is invalid: receipts[${String(index)}] ${errorMessage(error)}`, { cause: error });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return Object.freeze(normalizedReceipts);
|
|
149
|
+
}
|
|
150
|
+
function assertReceiptMatchesCommand(command, receipt, index) {
|
|
151
|
+
if (command.kind !== 'request') {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (receipt.featureId !== command.request.featureId || receipt.commandId !== command.request.commandId) {
|
|
155
|
+
throw new Error(`Workbook command result is invalid: receipts[${String(index)}] does not match commands[${String(index)}].request`);
|
|
156
|
+
}
|
|
157
|
+
if (command.request.category !== undefined && receipt.category !== command.request.category) {
|
|
158
|
+
throw new Error(`Workbook command result is invalid: receipts[${String(index)}].category does not match commands[${String(index)}].request.category`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function commandResultStatusForReceipts(receipts) {
|
|
162
|
+
if (receipts.some((receipt) => receipt.status === 'rejected')) {
|
|
163
|
+
return 'rejected';
|
|
164
|
+
}
|
|
165
|
+
if (receipts.some((receipt) => receipt.status === 'applied')) {
|
|
166
|
+
return 'applied';
|
|
167
|
+
}
|
|
168
|
+
if (receipts.some((receipt) => receipt.status === 'previewed')) {
|
|
169
|
+
return 'previewed';
|
|
170
|
+
}
|
|
171
|
+
return 'noop';
|
|
172
|
+
}
|
|
173
|
+
function commandResultMatchedForReceipts(receipts) {
|
|
174
|
+
let matched = null;
|
|
175
|
+
for (const receipt of receipts) {
|
|
176
|
+
const receiptMatched = workbookCommandReceiptOpsMatch(receipt);
|
|
177
|
+
if (receiptMatched === false) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
if (receiptMatched === true) {
|
|
181
|
+
matched = true;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return matched;
|
|
185
|
+
}
|
|
186
|
+
function commandResultErrorsForReceipts(receipts) {
|
|
187
|
+
const errors = [];
|
|
188
|
+
for (const receipt of receipts) {
|
|
189
|
+
errors.push(...(receipt.errors ?? []));
|
|
190
|
+
if (receipt.status === 'rejected' && receipt.errors === undefined) {
|
|
191
|
+
errors.push(receipt.message ?? `${receipt.featureId}.${receipt.commandId} rejected`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return Object.freeze(errors);
|
|
195
|
+
}
|
|
196
|
+
function commandResultIssue(code, path, message) {
|
|
197
|
+
return Object.freeze({
|
|
198
|
+
code,
|
|
199
|
+
path,
|
|
200
|
+
message,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
function pushResultReceiptsIssues(issues, value) {
|
|
204
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
205
|
+
issues.push(commandResultIssue('invalid_command_result', 'receipts', 'Workbook command result receipts must be a non-empty array'));
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
pushResultArrayDataIssues(issues, value, 'receipts', 'Workbook command result receipts');
|
|
209
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
210
|
+
const receipt = arrayDataValue(value, index);
|
|
211
|
+
if (receipt === undefined) {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
const receiptCheck = checkWorkbookCommandReceipt(receipt);
|
|
215
|
+
if (receiptCheck.status === 'invalid') {
|
|
216
|
+
receiptCheck.issues.forEach((issue) => {
|
|
217
|
+
issues.push(commandResultIssue('invalid_receipt', `receipts[${String(index)}].${issue.path}`, issue.message));
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function pushResultRangesIssues(issues, value, path, label) {
|
|
223
|
+
if (!Array.isArray(value)) {
|
|
224
|
+
issues.push(commandResultIssue('invalid_command_result', path, `Workbook command result ${label} must be an array`));
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
pushResultArrayDataIssues(issues, value, path, `Workbook command result ${label}`);
|
|
228
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
229
|
+
const range = arrayDataValue(value, index);
|
|
230
|
+
if (range === undefined) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
normalizeRange(range, `${path}[${String(index)}]`, 'Workbook command result');
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
issues.push(commandResultIssue('invalid_command_result', `${path}[${String(index)}]`, errorMessage(error)));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
function pushResultErrorsIssues(issues, value) {
|
|
242
|
+
if (value === undefined) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (!Array.isArray(value)) {
|
|
246
|
+
issues.push(commandResultIssue('invalid_command_result', 'errors', 'Workbook command result errors must be an array'));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
pushResultArrayDataIssues(issues, value, 'errors', 'Workbook command result errors');
|
|
250
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
251
|
+
const error = arrayDataValue(value, index);
|
|
252
|
+
if (error === undefined) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
pushResultOptionalStringIssue(issues, error, `errors[${String(index)}]`, 'error');
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
function pushResultArrayDataIssues(issues, value, path, label) {
|
|
259
|
+
const accessorPath = firstAccessorPath(value, path);
|
|
260
|
+
if (accessorPath !== null) {
|
|
261
|
+
issues.push(commandResultIssue('invalid_command_result', accessorPath, `${label} must contain only data properties`));
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
265
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
266
|
+
if (descriptor === undefined || !descriptor.enumerable || !('value' in descriptor)) {
|
|
267
|
+
issues.push(commandResultIssue('invalid_command_result', `${path}[${String(index)}]`, `${label} must contain only data properties`));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
function pushResultSafeIntegerIssue(issues, value, path, label, required) {
|
|
272
|
+
if (value === undefined) {
|
|
273
|
+
if (required) {
|
|
274
|
+
issues.push(commandResultIssue('invalid_command_result', path, `Workbook command result ${label} is required`));
|
|
275
|
+
}
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
if (!isSafeNonNegativeInteger(value)) {
|
|
279
|
+
issues.push(commandResultIssue('invalid_command_result', path, `Workbook command result ${label} must be a safe non-negative integer`));
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function pushResultRequiredStringIssue(issues, value, path, label) {
|
|
283
|
+
if (typeof value !== 'string') {
|
|
284
|
+
issues.push(commandResultIssue('invalid_command_result', path, `Workbook command result ${label} must be a string`));
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
pushResultOptionalStringIssue(issues, value, path, label);
|
|
288
|
+
}
|
|
289
|
+
function pushResultOptionalStringIssue(issues, value, path, label) {
|
|
290
|
+
if (value === undefined) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
if (typeof value !== 'string') {
|
|
294
|
+
issues.push(commandResultIssue('invalid_command_result', path, `Workbook command result ${label} must be a string`));
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
const normalized = value.trim();
|
|
298
|
+
if (normalized === '') {
|
|
299
|
+
issues.push(commandResultIssue('invalid_command_result', path, `Workbook command result ${label} cannot be empty`));
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
if (normalized !== value) {
|
|
303
|
+
issues.push(commandResultIssue('invalid_command_result', path, `Workbook command result ${label} must not have leading or trailing whitespace`));
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function normalizeWorkbookCommandResultData(value) {
|
|
307
|
+
const status = ownValue(value, 'status');
|
|
308
|
+
if (!isWorkbookCommandResultStatus(status)) {
|
|
309
|
+
throw new Error('Workbook command result status is invalid');
|
|
310
|
+
}
|
|
311
|
+
const bundleId = ownValue(value, 'bundleId');
|
|
312
|
+
const targetRevision = ownValue(value, 'targetRevision');
|
|
313
|
+
const idempotencyKey = ownValue(value, 'idempotencyKey');
|
|
314
|
+
const commandCount = ownValue(value, 'commandCount');
|
|
315
|
+
const touchedCellCount = ownValue(value, 'touchedCellCount');
|
|
316
|
+
if (!isSafeNonNegativeInteger(targetRevision) ||
|
|
317
|
+
typeof idempotencyKey !== 'string' ||
|
|
318
|
+
!isSafeNonNegativeInteger(commandCount) ||
|
|
319
|
+
!isSafeNonNegativeInteger(touchedCellCount)) {
|
|
320
|
+
throw new Error('Workbook command result base is invalid');
|
|
321
|
+
}
|
|
322
|
+
const base = {
|
|
323
|
+
...(typeof bundleId === 'string' ? { bundleId: normalizeExactString(bundleId, 'bundleId') } : {}),
|
|
324
|
+
targetRevision,
|
|
325
|
+
idempotencyKey: normalizeExactString(idempotencyKey, 'idempotencyKey'),
|
|
326
|
+
commandCount,
|
|
327
|
+
touchedRanges: Object.freeze(normalizeResultRanges(ownValue(value, 'touchedRanges'), 'touchedRanges')),
|
|
328
|
+
touchedCellCount,
|
|
329
|
+
};
|
|
330
|
+
if (status === 'accepted') {
|
|
331
|
+
return Object.freeze({
|
|
332
|
+
status,
|
|
333
|
+
...base,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
const matched = ownValue(value, 'matched');
|
|
337
|
+
const revision = ownValue(value, 'revision');
|
|
338
|
+
const undo = ownValue(value, 'undo');
|
|
339
|
+
const errors = ownValue(value, 'errors');
|
|
340
|
+
return Object.freeze({
|
|
341
|
+
status,
|
|
342
|
+
...base,
|
|
343
|
+
...(isSafeNonNegativeInteger(revision) ? { revision } : {}),
|
|
344
|
+
receipts: Object.freeze(normalizeResultReceipts(ownValue(value, 'receipts'))),
|
|
345
|
+
matched: matched === true ? true : matched === false ? false : null,
|
|
346
|
+
changedRanges: Object.freeze(normalizeResultRanges(ownValue(value, 'changedRanges'), 'changedRanges')),
|
|
347
|
+
...(undo !== undefined ? { undo: normalizeUndoRef(undo, 'undo') } : {}),
|
|
348
|
+
...(Array.isArray(errors) ? { errors: Object.freeze(normalizeResultErrors(errors)) } : {}),
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
function normalizeResultReceipts(value) {
|
|
352
|
+
if (!Array.isArray(value)) {
|
|
353
|
+
throw new Error('Workbook command result receipts are invalid');
|
|
354
|
+
}
|
|
355
|
+
return value.map((receipt) => normalizeWorkbookCommandReceipt(receipt));
|
|
356
|
+
}
|
|
357
|
+
function normalizeResultRanges(value, path) {
|
|
358
|
+
if (!Array.isArray(value)) {
|
|
359
|
+
throw new Error(`Workbook command result ${path} is invalid`);
|
|
360
|
+
}
|
|
361
|
+
return value.map((range, index) => normalizeRange(range, `${path}[${String(index)}]`, 'Workbook command result').range);
|
|
362
|
+
}
|
|
363
|
+
function normalizeResultErrors(errors) {
|
|
364
|
+
return errors.map((entry, index) => {
|
|
365
|
+
if (typeof entry !== 'string') {
|
|
366
|
+
throw new Error(`Workbook command result errors[${String(index)}] must be a string`);
|
|
367
|
+
}
|
|
368
|
+
return normalizeExactString(entry, `errors[${String(index)}]`);
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
function normalizeUndoRef(value, path) {
|
|
372
|
+
if (!isRecord(value)) {
|
|
373
|
+
throw new Error(`Workbook command result ${path} must be an object`);
|
|
374
|
+
}
|
|
375
|
+
const id = ownValue(value, 'id');
|
|
376
|
+
if (typeof id !== 'string') {
|
|
377
|
+
throw new Error(`Workbook command result ${path}.id must be a string`);
|
|
378
|
+
}
|
|
379
|
+
const ops = ownValue(value, 'ops');
|
|
380
|
+
if (ops !== undefined && !Array.isArray(ops)) {
|
|
381
|
+
throw new Error(`Workbook command result ${path}.ops must be an array`);
|
|
382
|
+
}
|
|
383
|
+
if (Array.isArray(ops)) {
|
|
384
|
+
const accessorPath = firstAccessorPath(ops, `${path}.ops`);
|
|
385
|
+
if (accessorPath !== null) {
|
|
386
|
+
throw new Error(`Workbook command result ${accessorPath} must contain only data properties`);
|
|
387
|
+
}
|
|
388
|
+
const normalizedOps = [];
|
|
389
|
+
for (let index = 0; index < ops.length; index += 1) {
|
|
390
|
+
const op = arrayDataValue(ops, index);
|
|
391
|
+
if (op === undefined) {
|
|
392
|
+
throw new Error(`Workbook command result ${path}.ops[${String(index)}] must contain only data properties`);
|
|
393
|
+
}
|
|
394
|
+
normalizedOps.push(normalizeOp(op));
|
|
395
|
+
}
|
|
396
|
+
return Object.freeze({
|
|
397
|
+
id: normalizeExactString(id, `${path}.id`),
|
|
398
|
+
ops: Object.freeze(normalizedOps),
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
return Object.freeze({
|
|
402
|
+
id: normalizeExactString(id, `${path}.id`),
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
function normalizeRange(value, path, label = 'Workbook command bundle') {
|
|
406
|
+
if (!isRecord(value)) {
|
|
407
|
+
throw new Error(`${label} ${path} must be an object`);
|
|
408
|
+
}
|
|
409
|
+
const sheetName = ownValue(value, 'sheetName');
|
|
410
|
+
const startAddress = ownValue(value, 'startAddress');
|
|
411
|
+
const endAddress = ownValue(value, 'endAddress');
|
|
412
|
+
if (typeof sheetName !== 'string' || typeof startAddress !== 'string' || typeof endAddress !== 'string') {
|
|
413
|
+
throw new Error(`${label} ${path} must include sheetName, startAddress, and endAddress strings`);
|
|
414
|
+
}
|
|
415
|
+
const normalizedSheetName = normalizeExactString(sheetName, `${path}.sheetName`);
|
|
416
|
+
const start = normalizeCellAddress(startAddress, `${path}.startAddress`, label);
|
|
417
|
+
const end = normalizeCellAddress(endAddress, `${path}.endAddress`, label);
|
|
418
|
+
if (end.row < start.row || end.col < start.col) {
|
|
419
|
+
throw new Error(`${label} ${path} endAddress must not be before startAddress`);
|
|
420
|
+
}
|
|
421
|
+
return {
|
|
422
|
+
range: Object.freeze({
|
|
423
|
+
sheetName: normalizedSheetName,
|
|
424
|
+
startAddress: start.text,
|
|
425
|
+
endAddress: end.text,
|
|
426
|
+
}),
|
|
427
|
+
cellCount: (end.row - start.row + 1) * (end.col - start.col + 1),
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
function normalizeCellAddress(value, path, label = 'Workbook command bundle') {
|
|
431
|
+
try {
|
|
432
|
+
const parsed = parseCellAddress(value);
|
|
433
|
+
if (parsed.sheetName !== undefined) {
|
|
434
|
+
throw new Error('qualified');
|
|
435
|
+
}
|
|
436
|
+
return {
|
|
437
|
+
row: parsed.row,
|
|
438
|
+
col: parsed.col,
|
|
439
|
+
text: formatAddress(parsed.row, parsed.col),
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
catch {
|
|
443
|
+
throw new Error(`${label} ${path} is invalid: ${value}`);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
function normalizeOp(value) {
|
|
447
|
+
if (!isWorkbookOp(value)) {
|
|
448
|
+
throw new Error('Workbook command result op is invalid');
|
|
449
|
+
}
|
|
450
|
+
const cloned = cloneData(value);
|
|
451
|
+
if (!isWorkbookOp(cloned)) {
|
|
452
|
+
throw new Error('Workbook command result op clone is invalid');
|
|
453
|
+
}
|
|
454
|
+
return freezeData(cloned);
|
|
455
|
+
}
|
|
456
|
+
function normalizeExactString(value, path) {
|
|
457
|
+
const normalized = value.trim();
|
|
458
|
+
if (normalized === '') {
|
|
459
|
+
throw new Error(`Workbook command result ${path} cannot be empty`);
|
|
460
|
+
}
|
|
461
|
+
if (normalized !== value) {
|
|
462
|
+
throw new Error(`Workbook command result ${path} must not have leading or trailing whitespace`);
|
|
463
|
+
}
|
|
464
|
+
return normalized;
|
|
465
|
+
}
|
|
466
|
+
function arrayDataValue(value, index) {
|
|
467
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
468
|
+
return descriptor !== undefined && descriptor.enumerable && 'value' in descriptor ? descriptor.value : undefined;
|
|
469
|
+
}
|
|
470
|
+
function ownValue(value, key) {
|
|
471
|
+
return Object.getOwnPropertyDescriptor(value, key)?.value;
|
|
472
|
+
}
|
|
473
|
+
function isRecord(value) {
|
|
474
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
475
|
+
}
|
|
476
|
+
function isSafeNonNegativeInteger(value) {
|
|
477
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
478
|
+
}
|
|
479
|
+
function errorMessage(error) {
|
|
480
|
+
return error instanceof Error ? error.message : String(error);
|
|
481
|
+
}
|
|
482
|
+
function firstAccessorPath(value, path, seen = new WeakSet()) {
|
|
483
|
+
if (typeof value !== 'object' || value === null) {
|
|
484
|
+
return null;
|
|
485
|
+
}
|
|
486
|
+
if (seen.has(value)) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
seen.add(value);
|
|
490
|
+
for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {
|
|
491
|
+
const childPath = Array.isArray(value) && /^\d+$/.test(key) ? `${path}[${key}]` : `${path}.${key}`;
|
|
492
|
+
if (!('value' in descriptor)) {
|
|
493
|
+
return childPath;
|
|
494
|
+
}
|
|
495
|
+
const nestedPath = firstAccessorPath(descriptor.value, childPath, seen);
|
|
496
|
+
if (nestedPath !== null) {
|
|
497
|
+
return nestedPath;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return null;
|
|
501
|
+
}
|
|
502
|
+
function freezeData(value, seen = new WeakSet()) {
|
|
503
|
+
if (typeof value !== 'object' || value === null) {
|
|
504
|
+
return value;
|
|
505
|
+
}
|
|
506
|
+
if (seen.has(value)) {
|
|
507
|
+
return value;
|
|
508
|
+
}
|
|
509
|
+
seen.add(value);
|
|
510
|
+
Object.values(Object.getOwnPropertyDescriptors(value)).forEach((descriptor) => {
|
|
511
|
+
if ('value' in descriptor) {
|
|
512
|
+
freezeData(descriptor.value, seen);
|
|
513
|
+
}
|
|
514
|
+
});
|
|
515
|
+
return Object.freeze(value);
|
|
516
|
+
}
|
|
517
|
+
function cloneData(value, seen = new WeakMap()) {
|
|
518
|
+
if (typeof value !== 'object' || value === null) {
|
|
519
|
+
return value;
|
|
520
|
+
}
|
|
521
|
+
const existing = seen.get(value);
|
|
522
|
+
if (existing !== undefined) {
|
|
523
|
+
return existing;
|
|
524
|
+
}
|
|
525
|
+
if (Array.isArray(value)) {
|
|
526
|
+
const cloned = [];
|
|
527
|
+
seen.set(value, cloned);
|
|
528
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
529
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
530
|
+
if (descriptor !== undefined && descriptor.enumerable && 'value' in descriptor) {
|
|
531
|
+
cloned[index] = cloneData(descriptor.value, seen);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
return cloned;
|
|
535
|
+
}
|
|
536
|
+
const cloned = Object.create(Object.getPrototypeOf(value));
|
|
537
|
+
seen.set(value, cloned);
|
|
538
|
+
Object.entries(Object.getOwnPropertyDescriptors(value)).forEach(([key, descriptor]) => {
|
|
539
|
+
if (descriptor.enumerable && 'value' in descriptor) {
|
|
540
|
+
Object.defineProperty(cloned, key, {
|
|
541
|
+
configurable: true,
|
|
542
|
+
enumerable: true,
|
|
543
|
+
value: cloneData(descriptor.value, seen),
|
|
544
|
+
writable: true,
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
});
|
|
548
|
+
return cloned;
|
|
549
|
+
}
|
|
550
|
+
//# sourceMappingURL=command-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-result.js","sourceRoot":"","sources":["../src/command-result.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,5 +13,7 @@ export * from './result.js';
|
|
|
13
13
|
export * from './requirements.js';
|
|
14
14
|
export * from './features.js';
|
|
15
15
|
export * from './feature-plugin.js';
|
|
16
|
+
export * from './command-result.js';
|
|
17
|
+
export * from './command-bundle.js';
|
|
16
18
|
export { checkPlanData, hydratePlanData, isPlanData, toPlanData } from './plan-data.js';
|
|
17
19
|
export type { WorkbookExecutablePlan, WorkbookPlanData, WorkbookPlanDataCheckResult, WorkbookPlanDataIssue, WorkbookPlanDataIssueCode, WorkbookPlanDataRefs, } from './plan-data.js';
|
package/dist/index.js
CHANGED
|
@@ -13,5 +13,7 @@ export * from './result.js';
|
|
|
13
13
|
export * from './requirements.js';
|
|
14
14
|
export * from './features.js';
|
|
15
15
|
export * from './feature-plugin.js';
|
|
16
|
+
export * from './command-result.js';
|
|
17
|
+
export * from './command-bundle.js';
|
|
16
18
|
export { checkPlanData, hydratePlanData, isPlanData, toPlanData } from './plan-data.js';
|
|
17
19
|
//# 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,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,aAAa,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,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bilig/workbook",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.0",
|
|
4
4
|
"description": "Agent-first workbook model API and transport-neutral workbook operation language for bilig.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-first",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "tsc -b tsconfig.json",
|
|
43
|
-
"test": "cd ../.. && tsx scripts/run-vitest.ts --run packages/workbook/src/__tests__/guards.test.ts packages/workbook/src/__tests__/model-api.test.ts packages/workbook/src/__tests__/model-verification-api.test.ts packages/workbook/src/__tests__/transport-api.test.ts packages/workbook/src/__tests__/low-level-op-api.test.ts packages/workbook/src/__tests__/check-api.test.ts packages/workbook/src/__tests__/format-api.test.ts packages/workbook/src/__tests__/formula-api.test.ts packages/workbook/src/__tests__/action-input-api.test.ts packages/workbook/src/__tests__/action-metadata-api.test.ts packages/workbook/src/__tests__/features-api.test.ts packages/workbook/src/__tests__/run-api.test.ts packages/workbook/src/__tests__/run-proof-boundary.test.ts packages/workbook/src/__tests__/requirements-api.test.ts packages/workbook/src/__tests__/plan-refs-api.test.ts"
|
|
43
|
+
"test": "cd ../.. && tsx scripts/run-vitest.ts --run packages/workbook/src/__tests__/guards.test.ts packages/workbook/src/__tests__/model-api.test.ts packages/workbook/src/__tests__/model-verification-api.test.ts packages/workbook/src/__tests__/transport-api.test.ts packages/workbook/src/__tests__/low-level-op-api.test.ts packages/workbook/src/__tests__/check-api.test.ts packages/workbook/src/__tests__/format-api.test.ts packages/workbook/src/__tests__/formula-api.test.ts packages/workbook/src/__tests__/action-input-api.test.ts packages/workbook/src/__tests__/action-metadata-api.test.ts packages/workbook/src/__tests__/features-api.test.ts packages/workbook/src/__tests__/command-bundle-api.test.ts packages/workbook/src/__tests__/run-api.test.ts packages/workbook/src/__tests__/run-proof-boundary.test.ts packages/workbook/src/__tests__/requirements-api.test.ts packages/workbook/src/__tests__/plan-refs-api.test.ts"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@bilig/formula": "0.
|
|
47
|
-
"@bilig/protocol": "0.
|
|
46
|
+
"@bilig/formula": "0.70.0",
|
|
47
|
+
"@bilig/protocol": "0.70.0"
|
|
48
48
|
},
|
|
49
49
|
"engines": {
|
|
50
50
|
"node": ">=22.0.0"
|