@bilig/workbook 0.90.0 → 0.90.5
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 +38 -25
- package/dist/check.d.ts +1 -1
- package/dist/check.js +3 -3
- package/dist/check.js.map +1 -1
- package/dist/command-ranges.js +11 -4
- package/dist/command-ranges.js.map +1 -1
- package/dist/command-receipt-ranges.d.ts +7 -0
- package/dist/command-receipt-ranges.js +64 -0
- package/dist/command-receipt-ranges.js.map +1 -0
- package/dist/command-result-undo.d.ts +2 -0
- package/dist/command-result-undo.js +148 -0
- package/dist/command-result-undo.js.map +1 -0
- package/dist/command-result.js +76 -136
- package/dist/command-result.js.map +1 -1
- package/dist/data-properties.d.ts +1 -0
- package/dist/data-properties.js +7 -0
- package/dist/data-properties.js.map +1 -1
- package/dist/features.js +22 -60
- package/dist/features.js.map +1 -1
- package/dist/formula.js +3 -2
- package/dist/formula.js.map +1 -1
- package/dist/model-action-validation.js +3 -3
- package/dist/model-action-validation.js.map +1 -1
- package/dist/model.js +8 -8
- package/dist/model.js.map +1 -1
- package/dist/plan-data.js +1 -1
- package/dist/plan-data.js.map +1 -1
- package/dist/readback.js +1 -1
- package/dist/readback.js.map +1 -1
- package/dist/requirements.js +1 -1
- package/dist/requirements.js.map +1 -1
- package/dist/result.d.ts +1 -1
- package/dist/run.js +1 -1
- package/dist/run.js.map +1 -1
- package/dist/verify.js +11 -4
- package/dist/verify.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -130,12 +130,14 @@ Public helper namespaces are frozen as well: `find`, `check`, and `formula`
|
|
|
130
130
|
cannot be patched after import, and factory-created check/find helpers return
|
|
131
131
|
frozen API objects too.
|
|
132
132
|
Model config and action objects are read as data too: `defineModel` requires
|
|
133
|
-
own data properties for `actions` entries and
|
|
134
|
-
`description`, and `input`. Accessor-backed model
|
|
135
|
-
getter can run.
|
|
133
|
+
object-record model roots plus own data properties for `actions` entries and
|
|
134
|
+
for action-object `run`, `description`, and `input`. Accessor-backed model
|
|
135
|
+
metadata is rejected before any getter can run.
|
|
136
136
|
`inspectModel` and `describeModel` use the same manifest boundary, so model
|
|
137
137
|
names, descriptions, action maps, and action metadata can be inspected without
|
|
138
|
-
triggering hidden getters.
|
|
138
|
+
triggering hidden getters. Class/custom-prototype model roots are rejected, while
|
|
139
|
+
action maps and action objects keep their existing own-field-only prototype
|
|
140
|
+
behavior. `inspectModel` returns a frozen manifest snapshot.
|
|
139
141
|
The description layer is frozen too: `describeRef`, `describePlan`,
|
|
140
142
|
`describePlanResult`, and `describeRunResult` return JSON-safe objects whose
|
|
141
143
|
nested refs, commands, checks, apply proof, undo ops, and errors cannot be
|
|
@@ -156,24 +158,25 @@ failure instead of making the agent catch an accessor side effect. Planned and
|
|
|
156
158
|
failed action-plan result wrappers are frozen before they are returned.
|
|
157
159
|
Action helper calls fail closed during planning too: write, clear, format, and
|
|
158
160
|
low-level-op helpers reject malformed targets, non-literal values, invalid
|
|
159
|
-
format options, invalid add-op options,
|
|
160
|
-
plan is returned.
|
|
161
|
+
format options, invalid add-op options, class/custom-prototype option roots, and
|
|
162
|
+
accessor-backed op payloads before a plan is returned.
|
|
161
163
|
Check helper calls use the same boundary: malformed targets, readback options,
|
|
162
|
-
custom check options, sparse ref arrays, and
|
|
163
|
-
rejected before a check is recorded.
|
|
164
|
+
custom check options, class/custom-prototype option roots, sparse ref arrays, and
|
|
165
|
+
accessor-backed check payloads are rejected before a check is recorded.
|
|
164
166
|
Formula helpers also normalize as plain data: raw formula options, explicit
|
|
165
|
-
inputs, labels, and function argument arrays reject sparse
|
|
166
|
-
payloads before formula intent is returned.
|
|
167
|
+
inputs, labels, and function argument arrays reject sparse, accessor-backed, or
|
|
168
|
+
class/custom-prototype payloads before formula intent is returned.
|
|
167
169
|
Ref transport helpers return frozen plain data and frozen arrays, so a ref that
|
|
168
170
|
an agent inspected cannot be mutated behind the same handoff object.
|
|
169
171
|
`verifyPlan` also treats plans as data: malformed, sparse, or accessor-backed
|
|
170
172
|
handoff objects return an `invalid_plan` issue instead of executing hidden
|
|
171
173
|
properties or throwing at the caller.
|
|
172
|
-
`verifyModel` keeps the same behavior at whole-model scope: invalid
|
|
173
|
-
return an invalid verdict with an
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
174
|
+
`verifyModel` keeps the same behavior at whole-model scope: invalid,
|
|
175
|
+
array-backed, or accessor-backed manifests return an invalid verdict with an
|
|
176
|
+
`invalid_model` error and no actions.
|
|
177
|
+
Its `{ inputs }` option is data-only too: accessor-backed or
|
|
178
|
+
class/custom-prototype option payloads and per-action inputs produce structured
|
|
179
|
+
`invalid_action_input` results without running hidden consumer code.
|
|
177
180
|
|
|
178
181
|
## Selectors
|
|
179
182
|
|
|
@@ -220,7 +223,10 @@ proof keep nested JSON paths such as `input.rows[1]` and
|
|
|
220
223
|
hydration. Plan-data guards only trust own payload fields; inherited
|
|
221
224
|
prototype fields never satisfy the transport contract. Transported plan arrays
|
|
222
225
|
must contain own enumerable data entries too; holes, non-enumerable entries, or
|
|
223
|
-
accessor-backed entries are rejected without running getters. The
|
|
226
|
+
accessor-backed entries are rejected without running getters. The plan root and
|
|
227
|
+
nested plan entries such as commands, changes, checks, formula labels, and
|
|
228
|
+
expectations must be record-shaped payloads, not arrays with attached fields.
|
|
229
|
+
The hydrated plan
|
|
224
230
|
exposes `refs: { refsUsed }` instead of the consumer's private model-shaped
|
|
225
231
|
`refs` object, so transported execution stays generic. A valid
|
|
226
232
|
`checkPlanData(data)` result returns canonical plan data, stripping caller-owned
|
|
@@ -296,6 +302,8 @@ must be own enumerable data entries; holes, non-enumerable entries, or
|
|
|
296
302
|
accessor-backed entries are rejected without running getters. Use
|
|
297
303
|
`checkRuntimeAdapter(planOrRequirements, adapter)` when an agent wants to check
|
|
298
304
|
`apply`, `read`, and `verifyChecks` coverage before calling the runtime.
|
|
305
|
+
The requirements root object, every requirement entry, and runtime adapter
|
|
306
|
+
objects must be record-shaped payloads, not arrays with attached fields.
|
|
299
307
|
Runtime requirement descriptions are frozen normalized data too:
|
|
300
308
|
`describeRuntimeRequirements` and `checkRuntimeRequirements` strip
|
|
301
309
|
caller-owned extra fields and freeze the returned requirement tree, including
|
|
@@ -340,14 +348,18 @@ and the frozen run-result description, and roll back engine ops if post-apply
|
|
|
340
348
|
readback or check proof fails.
|
|
341
349
|
Runtime apply results, undo refs, apply errors, and check verifier output are
|
|
342
350
|
validated from own fields only; prototype-inherited fields are ignored before
|
|
343
|
-
they can become run proof.
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
non-enumerable
|
|
347
|
-
|
|
351
|
+
they can become run proof. Apply-result objects and verifier check objects must
|
|
352
|
+
be plain record-shaped payloads, not arrays with attached fields.
|
|
353
|
+
Adapter-returned ops and verifier proof must be data properties, including
|
|
354
|
+
non-enumerable guard fields such as `kind`. Runtime evidence arrays must contain
|
|
355
|
+
own enumerable data entries; holes, non-enumerable entries, and accessors are
|
|
356
|
+
rejected before any getter can run during validation, cloning, or preview/apply
|
|
357
|
+
comparison.
|
|
348
358
|
Readback checks attach proof to passed checks, such as
|
|
349
359
|
`{ source: "readback", value: 12 }` or
|
|
350
360
|
`{ source: "readback", formula: "Table[Quantity]*Table[Rate]" }`.
|
|
361
|
+
Readback proof objects, check objects, expectations, and formula labels must be
|
|
362
|
+
record-shaped payloads, not arrays with attached fields.
|
|
351
363
|
Formula readback proof is parsed with `@bilig/formula` and stored in canonical
|
|
352
364
|
no-leading-`=` form, so harmless runtime differences such as a leading equals
|
|
353
365
|
sign, whitespace, or redundant parentheses do not make proof fail.
|
|
@@ -455,10 +467,11 @@ It returns the same boring `{ status, issues }` shape for receipt fields such as
|
|
|
455
467
|
`changedRanges`, `proof`, `metadata`, and `errors`. Feature manifests, command
|
|
456
468
|
requests, and command receipts are validated from own payload fields only;
|
|
457
469
|
prototype-inherited fields are ignored. Receipt verdicts are frozen. Receipt ops are frozen after
|
|
458
|
-
normalization, changed ranges
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
470
|
+
normalization, changed ranges are canonicalized through the same workbook range
|
|
471
|
+
normalizer used by command scopes, and manifest or receipt arrays must contain
|
|
472
|
+
own enumerable data entries. Holes, non-enumerable entries, invalid range
|
|
473
|
+
addresses, and accessor-backed ops, undo ops, ranges, or errors are rejected
|
|
474
|
+
before any getter can run.
|
|
462
475
|
Receipt statuses are semantic: `previewed` cannot include applied proof,
|
|
463
476
|
`applied` cannot include errors and must carry applied evidence, `rejected`
|
|
464
477
|
cannot claim changed workbook proof, and `noop` cannot claim changed ranges or
|
package/dist/check.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface WorkbookCheckApi {
|
|
|
19
19
|
readonly custom: (options: WorkbookCustomCheckOptions) => WorkbookCheckResult;
|
|
20
20
|
}
|
|
21
21
|
export type WorkbookBuiltInCheckKind = 'exists' | 'noFormulaErrors' | 'valueEquals' | 'formulaEquals';
|
|
22
|
-
export declare const builtInWorkbookCheckKinds: readonly ("
|
|
22
|
+
export declare const builtInWorkbookCheckKinds: readonly ("exists" | "noFormulaErrors" | "valueEquals" | "formulaEquals")[];
|
|
23
23
|
export declare function isBuiltInWorkbookCheckKind(value: unknown): value is WorkbookBuiltInCheckKind;
|
|
24
24
|
export declare function createWorkbookCheckResult(kind: string, target: WorkbookRef, message: string): WorkbookCheckResult;
|
|
25
25
|
export declare function createWorkbookCustomCheck(options: WorkbookCustomCheckOptions): WorkbookCheckResult;
|
package/dist/check.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isLiteralInput } from '@bilig/protocol';
|
|
2
2
|
import { isWorkbookRef } from './find.js';
|
|
3
3
|
import { formula } from './formula.js';
|
|
4
|
-
import {
|
|
4
|
+
import { isObjectRecord, optionalDataProperty, requiredDataProperty } from './data-properties.js';
|
|
5
5
|
export const builtInWorkbookCheckKinds = Object.freeze([
|
|
6
6
|
'exists',
|
|
7
7
|
'noFormulaErrors',
|
|
@@ -98,7 +98,7 @@ function assertOnlyDataProperties(value, path, seen = new WeakSet()) {
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
function readbackOptions(kind, options) {
|
|
101
|
-
if (!
|
|
101
|
+
if (!isObjectRecord(options)) {
|
|
102
102
|
throw new Error(`Workbook check ${kind} options must be an object`);
|
|
103
103
|
}
|
|
104
104
|
assertOnlyDataProperties(options, `Workbook check ${kind} options`);
|
|
@@ -111,7 +111,7 @@ function readbackOptions(kind, options) {
|
|
|
111
111
|
});
|
|
112
112
|
}
|
|
113
113
|
function customOptions(options) {
|
|
114
|
-
if (!
|
|
114
|
+
if (!isObjectRecord(options)) {
|
|
115
115
|
throw new Error('Workbook custom check options must be an object');
|
|
116
116
|
}
|
|
117
117
|
assertOnlyDataProperties(options, 'Workbook custom check options');
|
package/dist/check.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAoB,MAAM,WAAW,CAAA;AAC3D,OAAO,EAAE,OAAO,EAA+B,MAAM,cAAc,CAAA;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
|
package/dist/command-ranges.js
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { formatAddress, parseCellAddress } from '@bilig/formula';
|
|
2
|
+
const commandRangeDataFields = Object.freeze(['sheetName', 'startAddress', 'endAddress']);
|
|
2
3
|
export function normalizeCommandRange(value, path, label = 'Workbook command bundle') {
|
|
3
4
|
if (!isRecord(value)) {
|
|
4
5
|
throw new Error(`${label} ${path} must be an object`);
|
|
5
6
|
}
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
for (const field of commandRangeDataFields) {
|
|
8
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, field);
|
|
9
|
+
if (descriptor !== undefined && !('value' in descriptor)) {
|
|
10
|
+
throw new Error(`${label} ${path}.${field} must be a data property`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const sheetName = ownDataValue(value, 'sheetName');
|
|
14
|
+
const startAddress = ownDataValue(value, 'startAddress');
|
|
15
|
+
const endAddress = ownDataValue(value, 'endAddress');
|
|
9
16
|
if (typeof sheetName !== 'string' || typeof startAddress !== 'string' || typeof endAddress !== 'string') {
|
|
10
17
|
throw new Error(`${label} ${path} must include sheetName, startAddress, and endAddress strings`);
|
|
11
18
|
}
|
|
@@ -76,7 +83,7 @@ function normalizeExactString(value, path, label) {
|
|
|
76
83
|
}
|
|
77
84
|
return normalized;
|
|
78
85
|
}
|
|
79
|
-
function
|
|
86
|
+
function ownDataValue(value, key) {
|
|
80
87
|
return Object.getOwnPropertyDescriptor(value, key)?.value;
|
|
81
88
|
}
|
|
82
89
|
function isRecord(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-ranges.js","sourceRoot":"","sources":["../src/command-ranges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAkBhE,MAAM,UAAU,qBAAqB,CAAC,KAAc,EAAE,IAAY,EAAE,KAAK,GAAG,yBAAyB;IACnG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,oBAAoB,CAAC,CAAA;IACvD,CAAC;IACD,MAAM,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"command-ranges.js","sourceRoot":"","sources":["../src/command-ranges.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CellRangeRef } from '@bilig/protocol';
|
|
2
|
+
export interface WorkbookCommandReceiptRangeIssue {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly message: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function commandReceiptChangedRangeIssues(value: unknown): readonly WorkbookCommandReceiptRangeIssue[];
|
|
7
|
+
export declare function normalizeCommandReceiptChangedRanges(value: unknown): readonly CellRangeRef[] | null;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { normalizeCommandRange } from './command-ranges.js';
|
|
2
|
+
const commandReceiptRangeDataFields = Object.freeze(['sheetName', 'startAddress', 'endAddress']);
|
|
3
|
+
export function commandReceiptChangedRangeIssues(value) {
|
|
4
|
+
if (!Array.isArray(value)) {
|
|
5
|
+
return Object.freeze([rangeIssue('changedRanges', 'Workbook command receipt changed ranges must be an array')]);
|
|
6
|
+
}
|
|
7
|
+
const issues = [];
|
|
8
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
9
|
+
const path = `changedRanges[${String(index)}]`;
|
|
10
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
11
|
+
if (descriptor === undefined || !descriptor.enumerable || !('value' in descriptor)) {
|
|
12
|
+
issues.push(rangeIssue(path, 'Workbook command receipt changed ranges must contain only data properties'));
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const dataFieldIssue = firstRangeDataFieldIssue(descriptor.value, path);
|
|
16
|
+
if (dataFieldIssue !== null) {
|
|
17
|
+
issues.push(dataFieldIssue);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
normalizeCommandRange(descriptor.value, path, 'Workbook command receipt');
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
issues.push(rangeIssue(path, errorMessage(error)));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return Object.freeze(issues);
|
|
28
|
+
}
|
|
29
|
+
function firstRangeDataFieldIssue(value, path) {
|
|
30
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
for (const field of commandReceiptRangeDataFields) {
|
|
34
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, field);
|
|
35
|
+
if (descriptor !== undefined && !('value' in descriptor)) {
|
|
36
|
+
return rangeIssue(`${path}.${field}`, `Workbook command receipt ${path}.${field} must be a data property`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
export function normalizeCommandReceiptChangedRanges(value) {
|
|
42
|
+
if (commandReceiptChangedRangeIssues(value).length > 0 || !Array.isArray(value)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const ranges = [];
|
|
46
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
47
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
48
|
+
if (descriptor === undefined || !descriptor.enumerable || !('value' in descriptor)) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
ranges.push(normalizeCommandRange(descriptor.value, `changedRanges[${String(index)}]`, 'Workbook command receipt').range);
|
|
52
|
+
}
|
|
53
|
+
return Object.freeze(ranges);
|
|
54
|
+
}
|
|
55
|
+
function rangeIssue(path, message) {
|
|
56
|
+
return Object.freeze({
|
|
57
|
+
path,
|
|
58
|
+
message,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function errorMessage(error) {
|
|
62
|
+
return error instanceof Error ? error.message : String(error);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=command-receipt-ranges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-receipt-ranges.js","sourceRoot":"","sources":["../src/command-receipt-ranges.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { isWorkbookOp } from './guards.js';
|
|
2
|
+
export function normalizeCommandResultUndoRef(value, path) {
|
|
3
|
+
if (!isRecord(value)) {
|
|
4
|
+
throw new Error(`Workbook command result ${path} must be an object`);
|
|
5
|
+
}
|
|
6
|
+
const accessorKeys = ownAccessorKeys(value, ['id', 'ops']);
|
|
7
|
+
if (accessorKeys.length > 0) {
|
|
8
|
+
throw new Error(`Workbook command result ${path}.${accessorKeys[0]} must be a data property`);
|
|
9
|
+
}
|
|
10
|
+
const id = ownValue(value, 'id');
|
|
11
|
+
if (typeof id !== 'string') {
|
|
12
|
+
throw new Error(`Workbook command result ${path}.id must be a string`);
|
|
13
|
+
}
|
|
14
|
+
const ops = ownValue(value, 'ops');
|
|
15
|
+
if (ops !== undefined && !Array.isArray(ops)) {
|
|
16
|
+
throw new Error(`Workbook command result ${path}.ops must be an array`);
|
|
17
|
+
}
|
|
18
|
+
if (Array.isArray(ops)) {
|
|
19
|
+
const accessorPath = firstAccessorPath(ops, `${path}.ops`);
|
|
20
|
+
if (accessorPath !== null) {
|
|
21
|
+
throw new Error(`Workbook command result ${accessorPath} must contain only data properties`);
|
|
22
|
+
}
|
|
23
|
+
const normalizedOps = [];
|
|
24
|
+
for (let index = 0; index < ops.length; index += 1) {
|
|
25
|
+
const op = arrayDataValue(ops, index);
|
|
26
|
+
if (op === undefined) {
|
|
27
|
+
throw new Error(`Workbook command result ${path}.ops[${String(index)}] must contain only data properties`);
|
|
28
|
+
}
|
|
29
|
+
normalizedOps.push(normalizeOp(op));
|
|
30
|
+
}
|
|
31
|
+
return Object.freeze({
|
|
32
|
+
id: normalizeExactString(id, `${path}.id`),
|
|
33
|
+
ops: Object.freeze(normalizedOps),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return Object.freeze({
|
|
37
|
+
id: normalizeExactString(id, `${path}.id`),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function normalizeOp(value) {
|
|
41
|
+
if (!isWorkbookOp(value)) {
|
|
42
|
+
throw new Error('Workbook command result op is invalid');
|
|
43
|
+
}
|
|
44
|
+
const cloned = cloneData(value);
|
|
45
|
+
if (!isWorkbookOp(cloned)) {
|
|
46
|
+
throw new Error('Workbook command result op clone is invalid');
|
|
47
|
+
}
|
|
48
|
+
return freezeData(cloned);
|
|
49
|
+
}
|
|
50
|
+
function normalizeExactString(value, path) {
|
|
51
|
+
const normalized = value.trim();
|
|
52
|
+
if (normalized === '') {
|
|
53
|
+
throw new Error(`Workbook command result ${path} cannot be empty`);
|
|
54
|
+
}
|
|
55
|
+
if (normalized !== value) {
|
|
56
|
+
throw new Error(`Workbook command result ${path} must not have leading or trailing whitespace`);
|
|
57
|
+
}
|
|
58
|
+
return normalized;
|
|
59
|
+
}
|
|
60
|
+
function arrayDataValue(value, index) {
|
|
61
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
62
|
+
return descriptor !== undefined && descriptor.enumerable && 'value' in descriptor ? descriptor.value : undefined;
|
|
63
|
+
}
|
|
64
|
+
function ownValue(value, key) {
|
|
65
|
+
return Object.getOwnPropertyDescriptor(value, key)?.value;
|
|
66
|
+
}
|
|
67
|
+
function ownAccessorKeys(value, keys) {
|
|
68
|
+
const accessors = [];
|
|
69
|
+
for (const key of keys) {
|
|
70
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
71
|
+
if (descriptor !== undefined && !('value' in descriptor)) {
|
|
72
|
+
accessors.push(key);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return accessors;
|
|
76
|
+
}
|
|
77
|
+
function isRecord(value) {
|
|
78
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
79
|
+
}
|
|
80
|
+
function firstAccessorPath(value, path, seen = new WeakSet()) {
|
|
81
|
+
if (typeof value !== 'object' || value === null) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
if (seen.has(value)) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
seen.add(value);
|
|
88
|
+
for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {
|
|
89
|
+
const childPath = Array.isArray(value) && /^\d+$/.test(key) ? `${path}[${key}]` : `${path}.${key}`;
|
|
90
|
+
if (!('value' in descriptor)) {
|
|
91
|
+
return childPath;
|
|
92
|
+
}
|
|
93
|
+
const nestedPath = firstAccessorPath(descriptor.value, childPath, seen);
|
|
94
|
+
if (nestedPath !== null) {
|
|
95
|
+
return nestedPath;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
function freezeData(value, seen = new WeakSet()) {
|
|
101
|
+
if (typeof value !== 'object' || value === null) {
|
|
102
|
+
return value;
|
|
103
|
+
}
|
|
104
|
+
if (seen.has(value)) {
|
|
105
|
+
return value;
|
|
106
|
+
}
|
|
107
|
+
seen.add(value);
|
|
108
|
+
Object.values(Object.getOwnPropertyDescriptors(value)).forEach((descriptor) => {
|
|
109
|
+
if ('value' in descriptor) {
|
|
110
|
+
freezeData(descriptor.value, seen);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
return Object.freeze(value);
|
|
114
|
+
}
|
|
115
|
+
function cloneData(value, seen = new WeakMap()) {
|
|
116
|
+
if (typeof value !== 'object' || value === null) {
|
|
117
|
+
return value;
|
|
118
|
+
}
|
|
119
|
+
const existing = seen.get(value);
|
|
120
|
+
if (existing !== undefined) {
|
|
121
|
+
return existing;
|
|
122
|
+
}
|
|
123
|
+
if (Array.isArray(value)) {
|
|
124
|
+
const cloned = [];
|
|
125
|
+
seen.set(value, cloned);
|
|
126
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
127
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
128
|
+
if (descriptor !== undefined && descriptor.enumerable && 'value' in descriptor) {
|
|
129
|
+
cloned[index] = cloneData(descriptor.value, seen);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return cloned;
|
|
133
|
+
}
|
|
134
|
+
const cloned = Object.create(Object.getPrototypeOf(value));
|
|
135
|
+
seen.set(value, cloned);
|
|
136
|
+
Object.entries(Object.getOwnPropertyDescriptors(value)).forEach(([key, descriptor]) => {
|
|
137
|
+
if (descriptor.enumerable && 'value' in descriptor) {
|
|
138
|
+
Object.defineProperty(cloned, key, {
|
|
139
|
+
configurable: true,
|
|
140
|
+
enumerable: true,
|
|
141
|
+
value: cloneData(descriptor.value, seen),
|
|
142
|
+
writable: true,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
return cloned;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=command-result-undo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-result-undo.js","sourceRoot":"","sources":["../src/command-result-undo.ts"],"names":[],"mappings":"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"}
|