@arcmantle/chronicle 1.0.2 → 1.0.4
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 +26 -12
- package/dist/api-methods.d.ts +10 -2
- package/dist/api-methods.d.ts.map +1 -1
- package/dist/api-methods.js +42 -20
- package/dist/api-methods.js.map +1 -1
- package/dist/batch-transaction.d.ts +6 -10
- package/dist/batch-transaction.d.ts.map +1 -1
- package/dist/batch-transaction.js +36 -42
- package/dist/batch-transaction.js.map +1 -1
- package/dist/chronicle.d.ts +3 -35
- package/dist/chronicle.d.ts.map +1 -1
- package/dist/chronicle.js +6 -8
- package/dist/chronicle.js.map +1 -1
- package/dist/history-recorder.d.ts.map +1 -1
- package/dist/history-recorder.js +5 -4
- package/dist/history-recorder.js.map +1 -1
- package/dist/history.d.ts +64 -0
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +16 -1
- package/dist/history.js.map +1 -1
- package/dist/nameof.d.ts +1 -2
- package/dist/nameof.d.ts.map +1 -1
- package/dist/nameof.js +38 -12
- package/dist/nameof.js.map +1 -1
- package/dist/path.js.map +1 -1
- package/dist/three-way-merge.d.ts +13 -0
- package/dist/three-way-merge.d.ts.map +1 -0
- package/dist/three-way-merge.js +152 -0
- package/dist/three-way-merge.js.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api-methods.ts +86 -53
- package/src/batch-transaction.ts +56 -55
- package/src/chronicle.ts +31 -84
- package/src/history-recorder.ts +5 -4
- package/src/history.ts +82 -1
- package/src/nameof.ts +51 -13
- package/src/path.ts +1 -1
- package/src/three-way-merge.ts +196 -0
- package/src/types.ts +25 -0
package/README.md
CHANGED
|
@@ -283,22 +283,27 @@ console.log(chronicle.isPristine(state)); // true
|
|
|
283
283
|
|
|
284
284
|
### Configuration
|
|
285
285
|
|
|
286
|
+
Chronicle provides sensible defaults out of the box, but you can customize behavior:
|
|
287
|
+
|
|
286
288
|
```typescript
|
|
287
289
|
chronicle.configure(state, {
|
|
288
|
-
//
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
// Filter which changes to record
|
|
292
|
-
filter: (record) => !record.path.includes('_temp'),
|
|
293
|
-
|
|
294
|
-
// Merge ungrouped changes within time window
|
|
290
|
+
// Merge ungrouped changes within time window (default: true)
|
|
291
|
+
// Groups rapid consecutive changes for better undo/redo UX
|
|
295
292
|
mergeUngrouped: true,
|
|
296
|
-
mergeWindowMs:
|
|
293
|
+
mergeWindowMs: 300, // default: 300ms
|
|
297
294
|
|
|
298
|
-
// Compact consecutive sets to same path
|
|
295
|
+
// Compact consecutive sets to same path (default: true)
|
|
296
|
+
// Reduces memory without losing information
|
|
299
297
|
compactConsecutiveSamePath: true,
|
|
300
298
|
|
|
301
|
-
//
|
|
299
|
+
// Limit history size (default: 1000)
|
|
300
|
+
// Trims by whole groups to prevent unbounded growth
|
|
301
|
+
maxHistory: 1000,
|
|
302
|
+
|
|
303
|
+
// Filter which changes to record
|
|
304
|
+
filter: (record) => !record.path.includes('_temp'),
|
|
305
|
+
|
|
306
|
+
// Enable proxy caching for stable identity (default: true)
|
|
302
307
|
cacheProxies: true,
|
|
303
308
|
|
|
304
309
|
// Custom clone function (default: structuredClone)
|
|
@@ -316,6 +321,14 @@ chronicle.configure(state, {
|
|
|
316
321
|
});
|
|
317
322
|
```
|
|
318
323
|
|
|
324
|
+
**Default Configuration:**
|
|
325
|
+
|
|
326
|
+
- `mergeUngrouped: true` - Groups rapid changes for intuitive undo/redo
|
|
327
|
+
- `mergeWindowMs: 300` - 300ms window for grouping changes
|
|
328
|
+
- `compactConsecutiveSamePath: true` - Optimizes memory for rapid updates
|
|
329
|
+
- `maxHistory: 1000` - Prevents unbounded memory growth
|
|
330
|
+
- `cacheProxies: true` - Stable proxy identity for better UI framework integration
|
|
331
|
+
|
|
319
332
|
## Working with Collections
|
|
320
333
|
|
|
321
334
|
### Arrays
|
|
@@ -477,11 +490,12 @@ chronicle.listen(doc, 'content', (path, newVal) => {
|
|
|
477
490
|
## Performance Tips
|
|
478
491
|
|
|
479
492
|
1. **Use batching** for bulk operations to reduce listener overhead
|
|
480
|
-
2. **
|
|
493
|
+
2. **Proxy caching is enabled by default** for better performance
|
|
481
494
|
3. **Use debounce/throttle** for high-frequency updates
|
|
482
495
|
4. **Filter history** to exclude temporary/internal state
|
|
483
|
-
5. **
|
|
496
|
+
5. **maxHistory is set to 1000 by default** to prevent unbounded growth
|
|
484
497
|
6. **Use 'exact' mode** when possible (faster than 'down'/'up')
|
|
498
|
+
7. **Rapid changes are auto-grouped** for intuitive undo/redo
|
|
485
499
|
|
|
486
500
|
## Gotchas & Best Practices
|
|
487
501
|
|
package/dist/api-methods.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type ConfigureOptions } from './config.ts';
|
|
2
|
+
import type { ChangeListener, ChangeRecord, ConflictResolutions, DiffRecord, ListenerOptions, MergeResult, PathMode, PathSelector } from './types.ts';
|
|
2
3
|
export interface ApiDeps {
|
|
3
4
|
getRoot: (obj: object) => object;
|
|
4
5
|
}
|
|
5
6
|
export interface ChronicleApiMethods {
|
|
6
|
-
listen
|
|
7
|
+
listen<T extends object>(object: T, selector: PathSelector<T>, listener: ChangeListener): () => void;
|
|
8
|
+
listen<T extends object>(object: T, selector: PathSelector<T>, listener: ChangeListener, options: ListenerOptions): () => void;
|
|
9
|
+
listen<T extends object>(object: T, selector: PathSelector<T>, listener: ChangeListener, mode: PathMode): () => void;
|
|
10
|
+
listen<T extends object>(object: T, selector: PathSelector<T>, listener: ChangeListener, mode: PathMode, options: ListenerOptions): () => void;
|
|
7
11
|
onAny: (obj: object, listener: ChangeListener, options?: ListenerOptions) => () => void;
|
|
8
12
|
pause: (obj: object) => void;
|
|
9
13
|
resume: (obj: object) => void;
|
|
@@ -14,6 +18,9 @@ export interface ChronicleApiMethods {
|
|
|
14
18
|
markPristine: (obj: object) => void;
|
|
15
19
|
diff: (obj: object) => DiffRecord[];
|
|
16
20
|
isPristine: (obj: object) => boolean;
|
|
21
|
+
snapshot: <T extends object>(obj: T) => T;
|
|
22
|
+
unwrap: <T extends object>(obj: T) => T;
|
|
23
|
+
merge: (obj: object, incomingObject: object, resolutions?: ConflictResolutions) => MergeResult;
|
|
17
24
|
mark: (obj: object) => number;
|
|
18
25
|
undo: (obj: object, steps?: number) => void;
|
|
19
26
|
undoSince: (obj: object, historyLengthBefore: number) => void;
|
|
@@ -23,6 +30,7 @@ export interface ChronicleApiMethods {
|
|
|
23
30
|
clearRedo: (obj: object) => void;
|
|
24
31
|
redo: (obj: object, steps?: number) => void;
|
|
25
32
|
redoGroups: (obj: object, groups?: number) => void;
|
|
33
|
+
configure: (obj: object, options: ConfigureOptions) => void;
|
|
26
34
|
}
|
|
27
35
|
export declare const createApiMethods: (deps: ApiDeps) => ChronicleApiMethods;
|
|
28
36
|
//# sourceMappingURL=api-methods.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-methods.d.ts","sourceRoot":"","sources":["../src/api-methods.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api-methods.d.ts","sourceRoot":"","sources":["../src/api-methods.ts"],"names":[],"mappings":"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"}
|
package/dist/api-methods.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { configureRoot } from "./config.js";
|
|
1
2
|
import { clearLastUngrouped, historyDelete, historyGet } from "./history.js";
|
|
2
3
|
import { addListenerToTrie, cleanupListenerBucket, ensureListenerBucket, removeListenerFromTrie } from "./listener-trie.js";
|
|
3
4
|
import { nameofSegments } from "./nameof.js";
|
|
4
5
|
import { clearProxyCache as pfClearProxyCache } from "./proxy-factory.js";
|
|
5
6
|
import { buildEffectiveListener, flush as scheduleFlush, pause as schedulePause, resume as scheduleResume } from "./schedule-queue.js";
|
|
6
7
|
import { cloneWithOptions, diffValues, originalSnapshotCache } from "./snapshot-diff.js";
|
|
8
|
+
import { threeWayMerge } from "./three-way-merge.js";
|
|
7
9
|
import { canRedo as coreCanRedo, canUndo as coreCanUndo, clearRedoCache, redo as coreRedo, redoGroups as coreRedoGroups, resumeWrites, suspendWrites, undo as coreUndo, undoGroups as coreUndoGroups, undoSince as coreUndoSince } from "./undo-redo.js";
|
|
8
10
|
const isObject = (v) => typeof v === 'object' && v !== null;
|
|
9
11
|
export const createApiMethods = (deps) => {
|
|
@@ -138,6 +140,18 @@ export const createApiMethods = (deps) => {
|
|
|
138
140
|
const diffs = diff(obj);
|
|
139
141
|
return diffs.length === 0;
|
|
140
142
|
};
|
|
143
|
+
const snapshot = (obj) => {
|
|
144
|
+
const root = deps.getRoot(obj);
|
|
145
|
+
return cloneWithOptions(root, root);
|
|
146
|
+
};
|
|
147
|
+
const unwrap = (obj) => {
|
|
148
|
+
const root = deps.getRoot(obj);
|
|
149
|
+
return root;
|
|
150
|
+
};
|
|
151
|
+
const merge = (obj, incomingObject, resolutions) => {
|
|
152
|
+
const root = deps.getRoot(obj);
|
|
153
|
+
return threeWayMerge(root, obj, incomingObject, resolutions);
|
|
154
|
+
};
|
|
141
155
|
// marks/undo/redo -----------------------------------------------------------
|
|
142
156
|
const mark = (obj) => {
|
|
143
157
|
const root = deps.getRoot(obj);
|
|
@@ -180,27 +194,35 @@ export const createApiMethods = (deps) => {
|
|
|
180
194
|
coreRedoGroups(root, groups);
|
|
181
195
|
clearLastUngrouped(root);
|
|
182
196
|
};
|
|
197
|
+
const configure = (obj, options) => {
|
|
198
|
+
const root = deps.getRoot(obj);
|
|
199
|
+
configureRoot(root, options);
|
|
200
|
+
};
|
|
183
201
|
return {
|
|
184
|
-
listen
|
|
185
|
-
onAny
|
|
186
|
-
pause
|
|
187
|
-
resume
|
|
188
|
-
flush
|
|
189
|
-
getHistory
|
|
190
|
-
clearHistory
|
|
191
|
-
reset
|
|
192
|
-
markPristine
|
|
193
|
-
diff
|
|
194
|
-
isPristine
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
202
|
+
listen,
|
|
203
|
+
onAny,
|
|
204
|
+
pause,
|
|
205
|
+
resume,
|
|
206
|
+
flush,
|
|
207
|
+
getHistory,
|
|
208
|
+
clearHistory,
|
|
209
|
+
reset,
|
|
210
|
+
markPristine,
|
|
211
|
+
diff,
|
|
212
|
+
isPristine,
|
|
213
|
+
snapshot,
|
|
214
|
+
unwrap,
|
|
215
|
+
merge,
|
|
216
|
+
mark,
|
|
217
|
+
undo,
|
|
218
|
+
undoSince,
|
|
219
|
+
undoGroups,
|
|
220
|
+
canUndo,
|
|
221
|
+
canRedo,
|
|
222
|
+
clearRedo,
|
|
223
|
+
redo,
|
|
224
|
+
redoGroups,
|
|
225
|
+
configure,
|
|
204
226
|
};
|
|
205
227
|
};
|
|
206
228
|
//# sourceMappingURL=api-methods.js.map
|
package/dist/api-methods.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-methods.js","sourceRoot":"","sources":["../src/api-methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5H,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,KAAK,IAAI,aAAa,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACvI,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"api-methods.js","sourceRoot":"","sources":["../src/api-methods.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { ChronicleCore } from './api.ts';
|
|
2
2
|
export type BatchDeps = Pick<ChronicleCore, 'chronicle' | 'getRoot'>;
|
|
3
|
+
export interface TransactionResult<R> {
|
|
4
|
+
result: R;
|
|
5
|
+
marker: number;
|
|
6
|
+
undo: () => void;
|
|
7
|
+
}
|
|
3
8
|
export interface BatchFrame {
|
|
4
9
|
marker: number;
|
|
5
10
|
id: string;
|
|
@@ -10,16 +15,7 @@ export interface BatchAPI {
|
|
|
10
15
|
commitBatch: (obj: object) => void;
|
|
11
16
|
rollbackBatch: (obj: object) => void;
|
|
12
17
|
batch: <T extends object, R>(object: T, action: (observed: T) => R) => R;
|
|
13
|
-
transaction
|
|
14
|
-
result: R;
|
|
15
|
-
marker: number;
|
|
16
|
-
undo: () => void;
|
|
17
|
-
};
|
|
18
|
-
transactionAsync: <T extends object, R>(object: T, action: (observed: T) => Promise<R>) => Promise<{
|
|
19
|
-
result: R;
|
|
20
|
-
marker: number;
|
|
21
|
-
undo: () => void;
|
|
22
|
-
}>;
|
|
18
|
+
transaction<T extends object, R>(object: T, action: (observed: T) => R): R extends Promise<infer U> ? Promise<TransactionResult<U>> : TransactionResult<R>;
|
|
23
19
|
}
|
|
24
20
|
export declare const createBatchTransaction: (deps: BatchDeps) => BatchAPI;
|
|
25
21
|
//# sourceMappingURL=batch-transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-transaction.d.ts","sourceRoot":"","sources":["../src/batch-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQ9C,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;AAErE,MAAM,WAAW,UAAU;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE;AAE3D,MAAM,WAAW,QAAQ;IACxB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,EAAE,GAAG,SAAS,CAAC;IAC3D,UAAU,EAAM,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,EAAK,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,aAAa,EAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,KAAK,EAAW,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClF,WAAW,
|
|
1
|
+
{"version":3,"file":"batch-transaction.d.ts","sourceRoot":"","sources":["../src/batch-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQ9C,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;AAErE,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAAI,MAAM,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,IAAI,CAAC;CAAE;AAEtF,MAAM,WAAW,UAAU;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE;AAE3D,MAAM,WAAW,QAAQ;IACxB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,EAAE,GAAG,SAAS,CAAC;IAC3D,UAAU,EAAM,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,EAAK,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,aAAa,EAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,KAAK,EAAW,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClF,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAC9B,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GACnC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC7B,iBAAiB,CAAC,CAAC,CAAC,CAAC;CACxB;AAGD,eAAO,MAAM,sBAAsB,GAAI,MAAM,SAAS,KAAG,QA2JxD,CAAC"}
|
|
@@ -57,52 +57,47 @@ export const createBatchTransaction = (deps) => {
|
|
|
57
57
|
const observed = deps.chronicle(object);
|
|
58
58
|
let groupId;
|
|
59
59
|
try {
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
if
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
beginBatch(root);
|
|
96
|
-
const observed = deps.chronicle(object);
|
|
97
|
-
let groupId;
|
|
98
|
-
try {
|
|
99
|
-
const result = await action(observed);
|
|
60
|
+
const actionResult = action(observed);
|
|
61
|
+
const isObject = typeof actionResult === 'object' && actionResult !== null;
|
|
62
|
+
const isPromise = isObject && 'then' in actionResult && typeof actionResult.then === 'function';
|
|
63
|
+
// Check if result is a Promise
|
|
64
|
+
if (isPromise) {
|
|
65
|
+
const typedActionResult = actionResult;
|
|
66
|
+
return typedActionResult.then(resolvedResult => {
|
|
67
|
+
const frames = (batchStack.get(root) ?? []);
|
|
68
|
+
groupId = frames.length > 0 ? frames[frames.length - 1].id : undefined;
|
|
69
|
+
if (isTopLevel)
|
|
70
|
+
commitBatch(root);
|
|
71
|
+
return {
|
|
72
|
+
result: resolvedResult,
|
|
73
|
+
marker,
|
|
74
|
+
undo: () => {
|
|
75
|
+
const h = historyGet(root);
|
|
76
|
+
if (groupId && h && h.length > 0) {
|
|
77
|
+
const topGroup = h[h.length - 1].groupId ?? `__g#${h.length - 1}`;
|
|
78
|
+
if (topGroup === groupId) {
|
|
79
|
+
undoGroups(root, 1);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
undoSince(root, marker);
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}, err => {
|
|
87
|
+
if (isTopLevel)
|
|
88
|
+
rollbackBatch(root);
|
|
89
|
+
else
|
|
90
|
+
undoSince(root, marker);
|
|
91
|
+
throw err;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// Synchronous result
|
|
100
95
|
const frames = (batchStack.get(root) ?? []);
|
|
101
96
|
groupId = frames.length > 0 ? frames[frames.length - 1].id : undefined;
|
|
102
97
|
if (isTopLevel)
|
|
103
98
|
commitBatch(root);
|
|
104
99
|
return {
|
|
105
|
-
result,
|
|
100
|
+
result: actionResult,
|
|
106
101
|
marker,
|
|
107
102
|
undo: () => {
|
|
108
103
|
const h = historyGet(root);
|
|
@@ -132,7 +127,6 @@ export const createBatchTransaction = (deps) => {
|
|
|
132
127
|
rollbackBatch,
|
|
133
128
|
batch,
|
|
134
129
|
transaction,
|
|
135
|
-
transactionAsync,
|
|
136
130
|
};
|
|
137
131
|
};
|
|
138
132
|
//# sourceMappingURL=batch-transaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-transaction.js","sourceRoot":"","sources":["../src/batch-transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGvD,MAAM,UAAU,GAAkC,IAAI,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"batch-transaction.js","sourceRoot":"","sources":["../src/batch-transaction.ts"],"names":[],"mappings":"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"}
|
package/dist/chronicle.d.ts
CHANGED
|
@@ -1,39 +1,7 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import
|
|
3
|
-
interface Chronicle {
|
|
1
|
+
import { type ChronicleApiMethods } from './api-methods.ts';
|
|
2
|
+
import { type BatchAPI } from './batch-transaction.ts';
|
|
3
|
+
interface Chronicle extends Omit<BatchAPI, 'getBatchFrames'>, ChronicleApiMethods {
|
|
4
4
|
<T extends object>(object: T): T;
|
|
5
|
-
listen<T extends object>(object: T, selector: PathSelector<T>, listener: ChangeListener, modeOrOptions?: PathMode | ListenerOptions, maybeOptions?: ListenerOptions): () => void;
|
|
6
|
-
onAny(obj: object, listener: ChangeListener, options?: ListenerOptions): () => void;
|
|
7
|
-
pause(obj: object): void;
|
|
8
|
-
resume(obj: object): void;
|
|
9
|
-
flush(obj: object): void;
|
|
10
|
-
getHistory(obj: object): ChangeRecord[];
|
|
11
|
-
clearHistory(obj: object): void;
|
|
12
|
-
reset(obj: object): void;
|
|
13
|
-
markPristine(obj: object): void;
|
|
14
|
-
undo(obj: object, steps?: number): void;
|
|
15
|
-
undoSince(obj: object, historyLengthBefore: number): void;
|
|
16
|
-
diff(obj: object): DiffRecord[];
|
|
17
|
-
isPristine(obj: object): boolean;
|
|
18
|
-
mark(obj: object): number;
|
|
19
|
-
transaction<T extends object, R>(object: T, action: (observed: T) => R): TransactionResult<R>;
|
|
20
|
-
transactionAsync<T extends object, R>(object: T, action: (observed: T) => Promise<R>): Promise<TransactionResult<R>>;
|
|
21
|
-
beginBatch(obj: object): void;
|
|
22
|
-
commitBatch(obj: object): void;
|
|
23
|
-
rollbackBatch(obj: object): void;
|
|
24
|
-
batch<T extends object, R>(object: T, action: (observed: T) => R): R;
|
|
25
|
-
undoGroups(obj: object, groups?: number): void;
|
|
26
|
-
canUndo(obj: object): boolean;
|
|
27
|
-
canRedo(obj: object): boolean;
|
|
28
|
-
clearRedo(obj: object): void;
|
|
29
|
-
redo(obj: object, steps?: number): void;
|
|
30
|
-
redoGroups(obj: object, groups?: number): void;
|
|
31
|
-
configure(obj: object, options: ConfigureOptions): void;
|
|
32
|
-
}
|
|
33
|
-
interface TransactionResult<R> {
|
|
34
|
-
result: R;
|
|
35
|
-
marker: number;
|
|
36
|
-
undo: () => void;
|
|
37
5
|
}
|
|
38
6
|
declare const chronicle: Chronicle;
|
|
39
7
|
export { chronicle };
|
package/dist/chronicle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chronicle.d.ts","sourceRoot":"","sources":["../src/chronicle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chronicle.d.ts","sourceRoot":"","sources":["../src/chronicle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,KAAK,QAAQ,EAA0B,MAAM,wBAAwB,CAAC;AAG/E,UAAU,SAAU,SAAQ,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,mBAAmB;IAChF,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;CACjC;AAGD,QAAA,MAAM,SAAS,EAAqB,SAAS,CAAC;AAmC9C,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/chronicle.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { createChronicleCore } from "./api.js";
|
|
2
2
|
import { createApiMethods } from "./api-methods.js";
|
|
3
3
|
import { createBatchTransaction } from "./batch-transaction.js";
|
|
4
|
-
import { configureRoot } from "./config.js";
|
|
5
4
|
const core = createChronicleCore({ getBatchFrames: r => batchApi.getBatchFrames(r) });
|
|
6
5
|
const chronicle = core.chronicle;
|
|
7
6
|
const batchApi = createBatchTransaction(core);
|
|
@@ -19,6 +18,9 @@ chronicle.undo = api.undo;
|
|
|
19
18
|
chronicle.undoSince = api.undoSince;
|
|
20
19
|
chronicle.diff = api.diff;
|
|
21
20
|
chronicle.isPristine = api.isPristine;
|
|
21
|
+
chronicle.snapshot = api.snapshot;
|
|
22
|
+
chronicle.unwrap = api.unwrap;
|
|
23
|
+
chronicle.merge = api.merge;
|
|
22
24
|
chronicle.mark = api.mark;
|
|
23
25
|
chronicle.undoGroups = api.undoGroups;
|
|
24
26
|
chronicle.canUndo = api.canUndo;
|
|
@@ -26,15 +28,11 @@ chronicle.canRedo = api.canRedo;
|
|
|
26
28
|
chronicle.clearRedo = api.clearRedo;
|
|
27
29
|
chronicle.redo = api.redo;
|
|
28
30
|
chronicle.redoGroups = api.redoGroups;
|
|
29
|
-
chronicle.
|
|
30
|
-
chronicle.
|
|
31
|
+
chronicle.configure = api.configure;
|
|
32
|
+
chronicle.transaction = batchApi.transaction;
|
|
33
|
+
chronicle.batch = batchApi.batch;
|
|
31
34
|
chronicle.beginBatch = (obj) => batchApi.beginBatch(core.getRoot(obj));
|
|
32
35
|
chronicle.commitBatch = (obj) => batchApi.commitBatch(core.getRoot(obj));
|
|
33
36
|
chronicle.rollbackBatch = (obj) => batchApi.rollbackBatch(core.getRoot(obj));
|
|
34
|
-
chronicle.batch = (object, action) => batchApi.batch(object, action);
|
|
35
|
-
chronicle.configure = (obj, options) => {
|
|
36
|
-
const root = core.getRoot(obj);
|
|
37
|
-
configureRoot(root, options);
|
|
38
|
-
};
|
|
39
37
|
export { chronicle };
|
|
40
38
|
//# sourceMappingURL=chronicle.js.map
|
package/dist/chronicle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chronicle.js","sourceRoot":"","sources":["../src/chronicle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"chronicle.js","sourceRoot":"","sources":["../src/chronicle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAA4B,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAiB,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAO/E,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAsB,CAAC;AAE9C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC9C,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAExD,SAAS,CAAC,MAAM,GAAU,GAAG,CAAC,MAAM,CAAC;AACrC,SAAS,CAAC,KAAK,GAAW,GAAG,CAAC,KAAK,CAAC;AACpC,SAAS,CAAC,KAAK,GAAW,GAAG,CAAC,KAAK,CAAC;AACpC,SAAS,CAAC,MAAM,GAAU,GAAG,CAAC,MAAM,CAAC;AACrC,SAAS,CAAC,KAAK,GAAW,GAAG,CAAC,KAAK,CAAC;AACpC,SAAS,CAAC,UAAU,GAAM,GAAG,CAAC,UAAU,CAAC;AACzC,SAAS,CAAC,YAAY,GAAI,GAAG,CAAC,YAAY,CAAC;AAC3C,SAAS,CAAC,KAAK,GAAW,GAAG,CAAC,KAAK,CAAC;AACpC,SAAS,CAAC,YAAY,GAAI,GAAG,CAAC,YAAY,CAAC;AAC3C,SAAS,CAAC,IAAI,GAAY,GAAG,CAAC,IAAI,CAAC;AACnC,SAAS,CAAC,SAAS,GAAO,GAAG,CAAC,SAAS,CAAC;AACxC,SAAS,CAAC,IAAI,GAAY,GAAG,CAAC,IAAI,CAAC;AACnC,SAAS,CAAC,UAAU,GAAM,GAAG,CAAC,UAAU,CAAC;AACzC,SAAS,CAAC,QAAQ,GAAQ,GAAG,CAAC,QAAQ,CAAC;AACvC,SAAS,CAAC,MAAM,GAAU,GAAG,CAAC,MAAM,CAAC;AACrC,SAAS,CAAC,KAAK,GAAW,GAAG,CAAC,KAAK,CAAC;AACpC,SAAS,CAAC,IAAI,GAAY,GAAG,CAAC,IAAI,CAAC;AACnC,SAAS,CAAC,UAAU,GAAM,GAAG,CAAC,UAAU,CAAC;AACzC,SAAS,CAAC,OAAO,GAAS,GAAG,CAAC,OAAO,CAAC;AACtC,SAAS,CAAC,OAAO,GAAS,GAAG,CAAC,OAAO,CAAC;AACtC,SAAS,CAAC,SAAS,GAAO,GAAG,CAAC,SAAS,CAAC;AACxC,SAAS,CAAC,IAAI,GAAY,GAAG,CAAC,IAAI,CAAC;AACnC,SAAS,CAAC,UAAU,GAAM,GAAG,CAAC,UAAU,CAAC;AACzC,SAAS,CAAC,SAAS,GAAO,GAAG,CAAC,SAAS,CAAC;AACxC,SAAS,CAAC,WAAW,GAAK,QAAQ,CAAC,WAAW,CAAC;AAC/C,SAAS,CAAC,KAAK,GAAW,QAAQ,CAAC,KAAK,CAAC;AACzC,SAAS,CAAC,UAAU,GAAM,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,SAAS,CAAC,WAAW,GAAK,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,SAAS,CAAC,aAAa,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAE7E,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-recorder.d.ts","sourceRoot":"","sources":["../src/history-recorder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"history-recorder.d.ts","sourceRoot":"","sources":["../src/history-recorder.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS,GACrB,MAAM,MAAM,EACZ,MAAM,MAAM,EAAE,EACd,UAAU,GAAG,EACb,UAAU,GAAG,EACb,eAAe,OAAO,EACtB,SAAS,MAAM,KACb,IA2CF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GACxB,MAAM,MAAM,EACZ,MAAM,MAAM,EAAE,EACd,UAAU,GAAG,EACb,SAAS,MAAM,KACb,IAuBF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GACpC,MAAM,MAAM,EACZ,UAAU,MAAM,EAAE,EAClB,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC;CAAE,EAAE,EACzC,SAAS,MAAM,KACb,IAoBF,CAAC"}
|
package/dist/history-recorder.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ensureHistory, getOptions, trimHistoryByGroups } from "./history.js";
|
|
2
|
+
import { cloneWithOptions } from "./snapshot-diff.js";
|
|
2
3
|
import { clearRedoCache, isSuspended } from "./undo-redo.js";
|
|
3
4
|
/**
|
|
4
5
|
* Record a 'set' operation in history with filtering, compaction, and trimming.
|
|
@@ -22,8 +23,8 @@ export const recordSet = (root, path, oldValue, newValue, existedBefore, groupId
|
|
|
22
23
|
const rec = {
|
|
23
24
|
path: path.slice(),
|
|
24
25
|
type: 'set',
|
|
25
|
-
oldValue,
|
|
26
|
-
newValue,
|
|
26
|
+
oldValue: cloneWithOptions(root, oldValue),
|
|
27
|
+
newValue: cloneWithOptions(root, newValue),
|
|
27
28
|
timestamp: Date.now(),
|
|
28
29
|
existedBefore,
|
|
29
30
|
groupId,
|
|
@@ -69,7 +70,7 @@ export const recordDelete = (root, path, oldValue, groupId) => {
|
|
|
69
70
|
const rec = {
|
|
70
71
|
path: path.slice(),
|
|
71
72
|
type: 'delete',
|
|
72
|
-
oldValue,
|
|
73
|
+
oldValue: cloneWithOptions(root, oldValue),
|
|
73
74
|
newValue: undefined,
|
|
74
75
|
timestamp: Date.now(),
|
|
75
76
|
groupId,
|
|
@@ -100,7 +101,7 @@ export const recordArrayShrinkDeletes = (root, basePath, removed, groupId) => {
|
|
|
100
101
|
const rec = {
|
|
101
102
|
path: [...basePath, String(index)],
|
|
102
103
|
type: 'delete',
|
|
103
|
-
oldValue: oldVal,
|
|
104
|
+
oldValue: cloneWithOptions(root, oldVal),
|
|
104
105
|
newValue: undefined,
|
|
105
106
|
timestamp: Date.now(),
|
|
106
107
|
groupId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-recorder.js","sourceRoot":"","sources":["../src/history-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"history-recorder.js","sourceRoot":"","sources":["../src/history-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7D;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,IAAY,EACZ,IAAc,EACd,QAAa,EACb,QAAa,EACb,aAAsB,EACtB,OAAe,EACR,EAAE;IACT,IAAI,WAAW,CAAC,IAAI,CAAC;QACpB,OAAO;IAER,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,cAAc,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,GAAG,GAAiB;QACzB,IAAI,EAAO,IAAI,CAAC,KAAK,EAAE;QACvB,IAAI,EAAO,KAAK;QAChB,QAAQ,EAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC3C,QAAQ,EAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC3C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,aAAa;QACb,OAAO;KACP,CAAC;IAEF,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnB,qFAAqF;IACrF,IAAI,GAAG,IAAI,GAAG,CAAC,0BAA0B,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QACvC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QACvC,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,OAAQ,OAAO,CAAC,MAAM,GAAG,CAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,OAAQ,OAAO,CAAC,MAAM,GAAG,CAAE,EAAE,CAAC,CAAC;QAChH,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;QACtD,0DAA0D;QAC1D,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,OAAO,KAAK,QAAQ,CAAC;QAC1C,IAAI,SAAS,IAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;YACzE,+FAA+F;YAC/F,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;YACxB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;YAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;QACf,CAAC;IACF,CAAC;IAED,6DAA6D;IAC7D,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAC5C,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,IAAY,EACZ,IAAc,EACd,QAAa,EACb,OAAe,EACR,EAAE;IACT,IAAI,WAAW,CAAC,IAAI,CAAC;QACpB,OAAO;IAER,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,cAAc,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,GAAG,GAAiB;QACzB,IAAI,EAAO,IAAI,CAAC,KAAK,EAAE;QACvB,IAAI,EAAO,QAAQ;QACnB,QAAQ,EAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC3C,QAAQ,EAAG,SAAS;QACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,OAAO;KACP,CAAC;IAEF,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnB,6DAA6D;IAC7D,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAC5C,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACvC,IAAY,EACZ,QAAkB,EAClB,OAAyC,EACzC,OAAe,EACR,EAAE;IACT,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAC5C,OAAO;IAER,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE7B,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QAChD,MAAM,GAAG,GAAiB;YACzB,IAAI,EAAO,CAAE,GAAG,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAE;YACzC,IAAI,EAAO,QAAQ;YACnB,QAAQ,EAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC;YACzC,QAAQ,EAAG,SAAS;YACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO;SACP,CAAC;QAEF,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACF,CAAC,CAAC"}
|