lib0 0.2.112 → 0.2.115-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 +1 -1
- package/broadcastchannel.js +1 -1
- package/buffer.d.ts +3 -3
- package/buffer.d.ts.map +1 -1
- package/buffer.js +1 -1
- package/coverage/tmp/coverage-27667-1761218530660-0.json +1 -0
- package/coverage/tmp/{coverage-20055-1752683207886-0.json → coverage-27668-1761218485882-0.json} +1 -1
- package/crypto/aes-gcm.d.ts +4 -4
- package/crypto/aes-gcm.d.ts.map +1 -1
- package/crypto/aes-gcm.js +6 -6
- package/crypto/common.d.ts +1 -1
- package/crypto/common.d.ts.map +1 -1
- package/crypto/common.js +1 -1
- package/crypto/ecdsa.d.ts +2 -2
- package/crypto/ecdsa.d.ts.map +1 -1
- package/crypto/ecdsa.js +4 -4
- package/crypto/rsa-oaep.d.ts +2 -2
- package/crypto/rsa-oaep.d.ts.map +1 -1
- package/crypto/rsa-oaep.js +3 -3
- package/decoding.d.ts +27 -14
- package/decoding.d.ts.map +1 -1
- package/decoding.js +12 -8
- package/delta/abstract-array.d.ts +166 -0
- package/delta/abstract-array.d.ts.map +1 -0
- package/delta/abstract-array.js +421 -0
- package/delta/abstract.d.ts +69 -0
- package/delta/abstract.d.ts.map +1 -0
- package/delta/abstract.js +102 -0
- package/delta/array.d.ts +23 -0
- package/delta/array.d.ts.map +1 -0
- package/delta/array.js +45 -0
- package/delta/array.test.d.ts +2 -0
- package/delta/array.test.d.ts.map +1 -0
- package/delta/binding.d.ts +105 -0
- package/delta/binding.d.ts.map +1 -0
- package/delta/binding.js +369 -0
- package/delta/binding.test.d.ts +5 -0
- package/delta/binding.test.d.ts.map +1 -0
- package/delta/d2.d.ts +705 -0
- package/delta/d2.d.ts.map +1 -0
- package/delta/d2.js +1309 -0
- package/delta/d2.test.d.ts +15 -0
- package/delta/d2.test.d.ts.map +1 -0
- package/delta/index.d.ts +14 -0
- package/delta/index.d.ts.map +1 -0
- package/delta/index.js +79 -0
- package/delta/map.d.ts +230 -0
- package/delta/map.d.ts.map +1 -0
- package/delta/map.js +304 -0
- package/delta/node.d.ts +119 -0
- package/delta/node.d.ts.map +1 -0
- package/delta/node.js +183 -0
- package/delta/node.test.d.ts +4 -0
- package/delta/node.test.d.ts.map +1 -0
- package/delta/ops.d.ts +466 -0
- package/delta/ops.d.ts.map +1 -0
- package/delta/ops.js +544 -0
- package/delta/readme.md +129 -0
- package/delta/text.d.ts +43 -0
- package/delta/text.d.ts.map +1 -0
- package/delta/text.js +54 -0
- package/delta/text.test.d.ts +6 -0
- package/delta/text.test.d.ts.map +1 -0
- package/delta/transformer.d.ts +164 -0
- package/delta/transformer.d.ts.map +1 -0
- package/delta/transformer.js +888 -0
- package/delta/transformer.test.d.ts +13 -0
- package/delta/transformer.test.d.ts.map +1 -0
- package/delta/value.d.ts +84 -0
- package/delta/value.d.ts.map +1 -0
- package/delta/value.js +168 -0
- package/dist/abstract-array.cjs +433 -0
- package/dist/abstract-array.cjs.map +1 -0
- package/dist/abstract.cjs +122 -0
- package/dist/abstract.cjs.map +1 -0
- package/dist/aes-gcm.cjs +12 -12
- package/dist/aes-gcm.cjs.map +1 -1
- package/dist/array.cjs +60 -17
- package/dist/array.cjs.map +1 -1
- package/dist/array2.cjs +26 -0
- package/dist/array2.cjs.map +1 -0
- package/dist/binding.cjs +398 -0
- package/dist/binding.cjs.map +1 -0
- package/dist/{broadcastchannel-2c4b0a1c.cjs → broadcastchannel-b4eaea6e.cjs} +4 -4
- package/dist/broadcastchannel-b4eaea6e.cjs.map +1 -0
- package/dist/broadcastchannel.cjs +12 -12
- package/dist/{buffer-a74f7330.cjs → buffer-adc4e6ea.cjs} +7 -7
- package/dist/buffer-adc4e6ea.cjs.map +1 -0
- package/dist/buffer.cjs +11 -11
- package/dist/buffer.d.ts +3 -3
- package/dist/buffer.d.ts.map +1 -1
- package/dist/cache.cjs +6 -6
- package/dist/common.cjs +1 -1
- package/dist/common.cjs.map +1 -1
- package/dist/component.cjs +14 -9
- package/dist/component.cjs.map +1 -1
- package/dist/crypto/aes-gcm.d.ts +4 -4
- package/dist/crypto/aes-gcm.d.ts.map +1 -1
- package/dist/crypto/common.d.ts +1 -1
- package/dist/crypto/common.d.ts.map +1 -1
- package/dist/crypto/ecdsa.d.ts +2 -2
- package/dist/crypto/ecdsa.d.ts.map +1 -1
- package/dist/crypto/rsa-oaep.d.ts +2 -2
- package/dist/crypto/rsa-oaep.d.ts.map +1 -1
- package/dist/d2.cjs +1347 -0
- package/dist/d2.cjs.map +1 -0
- package/dist/{decoding-2b136346.cjs → decoding-50b9ce38.cjs} +18 -14
- package/dist/decoding-50b9ce38.cjs.map +1 -0
- package/dist/decoding.cjs +6 -6
- package/dist/decoding.d.ts +27 -14
- package/dist/decoding.d.ts.map +1 -1
- package/dist/delta/abstract-array.d.ts +166 -0
- package/dist/delta/abstract-array.d.ts.map +1 -0
- package/dist/delta/abstract.d.ts +69 -0
- package/dist/delta/abstract.d.ts.map +1 -0
- package/dist/delta/array.d.ts +23 -0
- package/dist/delta/array.d.ts.map +1 -0
- package/dist/delta/array.test.d.ts +2 -0
- package/dist/delta/array.test.d.ts.map +1 -0
- package/dist/delta/binding.d.ts +105 -0
- package/dist/delta/binding.d.ts.map +1 -0
- package/dist/delta/binding.test.d.ts +5 -0
- package/dist/delta/binding.test.d.ts.map +1 -0
- package/dist/delta/d2.d.ts +705 -0
- package/dist/delta/d2.d.ts.map +1 -0
- package/dist/delta/d2.test.d.ts +15 -0
- package/dist/delta/d2.test.d.ts.map +1 -0
- package/dist/delta/index.d.ts +14 -0
- package/dist/delta/index.d.ts.map +1 -0
- package/dist/delta/map.d.ts +230 -0
- package/dist/delta/map.d.ts.map +1 -0
- package/dist/delta/node.d.ts +119 -0
- package/dist/delta/node.d.ts.map +1 -0
- package/dist/delta/node.test.d.ts +4 -0
- package/dist/delta/node.test.d.ts.map +1 -0
- package/dist/delta/ops.d.ts +466 -0
- package/dist/delta/ops.d.ts.map +1 -0
- package/dist/delta/text.d.ts +43 -0
- package/dist/delta/text.d.ts.map +1 -0
- package/dist/delta/text.test.d.ts +6 -0
- package/dist/delta/text.test.d.ts.map +1 -0
- package/dist/delta/transformer.d.ts +164 -0
- package/dist/delta/transformer.d.ts.map +1 -0
- package/dist/delta/transformer.test.d.ts +13 -0
- package/dist/delta/transformer.test.d.ts.map +1 -0
- package/dist/delta/value.d.ts +84 -0
- package/dist/delta/value.d.ts.map +1 -0
- package/dist/{diff-77c4cf8e.cjs → diff-f0776c15.cjs} +2 -2
- package/dist/{diff-77c4cf8e.cjs.map → diff-f0776c15.cjs.map} +1 -1
- package/dist/diff.cjs +3 -3
- package/dist/{dom-16daf1a0.cjs → dom-2b123630.cjs} +31 -2
- package/dist/dom-2b123630.cjs.map +1 -0
- package/dist/dom.cjs +17 -2
- package/dist/dom.cjs.map +1 -1
- package/dist/dom.d.ts +17 -0
- package/dist/dom.d.ts.map +1 -1
- package/dist/ecdsa.cjs +4 -4
- package/dist/ecdsa.cjs.map +1 -1
- package/dist/{encoding-1acb59c4.cjs → encoding-7f85922c.cjs} +5 -5
- package/dist/encoding-7f85922c.cjs.map +1 -0
- package/dist/encoding.cjs +4 -4
- package/dist/encoding.d.ts +6 -6
- package/dist/encoding.d.ts.map +1 -1
- package/dist/{environment-2de08e0e.cjs → environment-90227ead.cjs} +4 -4
- package/dist/{environment-2de08e0e.cjs.map → environment-90227ead.cjs.map} +1 -1
- package/dist/environment.cjs +5 -5
- package/dist/{error-8582d695.cjs → error-0c1f634f.cjs} +10 -2
- package/dist/error-0c1f634f.cjs.map +1 -0
- package/dist/error.cjs +2 -1
- package/dist/error.cjs.map +1 -1
- package/dist/error.d.ts +1 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/{eventloop-b299a889.cjs → eventloop-a0168106.cjs} +2 -2
- package/dist/{eventloop-b299a889.cjs.map → eventloop-a0168106.cjs.map} +1 -1
- package/dist/eventloop.cjs +3 -3
- package/dist/{function-09b8292c.cjs → function-e7d18feb.cjs} +2 -2
- package/dist/{function-09b8292c.cjs.map → function-e7d18feb.cjs.map} +1 -1
- package/dist/function.cjs +2 -2
- package/dist/index.cjs +23 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index2.cjs +71 -0
- package/dist/index2.cjs.map +1 -0
- package/dist/{indexeddb-0cbb4d6f.cjs → indexeddb-46d1e737.cjs} +3 -3
- package/dist/{indexeddb-0cbb4d6f.cjs.map → indexeddb-46d1e737.cjs.map} +1 -1
- package/dist/indexeddb.cjs +5 -5
- package/dist/indexeddbV2.cjs +2 -1
- package/dist/indexeddbV2.cjs.map +1 -1
- package/dist/jwt.cjs +12 -12
- package/dist/list.cjs +39 -12
- package/dist/list.cjs.map +1 -1
- package/dist/list.d.ts +13 -3
- package/dist/list.d.ts.map +1 -1
- package/dist/logging.cjs +11 -9
- package/dist/logging.cjs.map +1 -1
- package/dist/logging.common.cjs +7 -7
- package/dist/logging.node.cjs +7 -7
- package/dist/{map-0dabcc55.cjs → map-24d263c0.cjs} +7 -1
- package/dist/map-24d263c0.cjs.map +1 -0
- package/dist/map.cjs +314 -7
- package/dist/map.cjs.map +1 -1
- package/dist/map.d.ts +1 -0
- package/dist/map.d.ts.map +1 -1
- package/dist/map2.cjs +15 -0
- package/dist/map2.cjs.map +1 -0
- package/dist/{math-08e068f9.cjs → math-96d5e8c4.cjs} +4 -2
- package/dist/math-96d5e8c4.cjs.map +1 -0
- package/dist/math.cjs +1 -1
- package/dist/math.d.ts.map +1 -1
- package/dist/metric.cjs +1 -1
- package/dist/node.cjs +206 -0
- package/dist/node.cjs.map +1 -0
- package/dist/{number-466d8922.cjs → number-1fb57bba.cjs} +2 -2
- package/dist/{number-466d8922.cjs.map → number-1fb57bba.cjs.map} +1 -1
- package/dist/number.cjs +2 -2
- package/dist/{object-491858d1.cjs → object-18980796.cjs} +12 -2
- package/dist/object-18980796.cjs.map +1 -0
- package/dist/object.cjs +3 -1
- package/dist/object.cjs.map +1 -1
- package/dist/object.d.ts +3 -0
- package/dist/object.d.ts.map +1 -1
- package/dist/observable.cjs +1 -1
- package/dist/ops.cjs +575 -0
- package/dist/ops.cjs.map +1 -0
- package/dist/patience.cjs +2 -2
- package/dist/performance.node.cjs +4 -4
- package/dist/pledge.cjs +2 -1
- package/dist/pledge.cjs.map +1 -1
- package/dist/{prng-24dfe0bf.cjs → prng-004c76e8.cjs} +5 -5
- package/dist/{prng-24dfe0bf.cjs.map → prng-004c76e8.cjs.map} +1 -1
- package/dist/prng.cjs +12 -12
- package/dist/prng.d.ts +1 -1
- package/dist/prng.d.ts.map +1 -1
- package/dist/{promise-7d13a97c.cjs → promise-cda7b9bb.cjs} +2 -2
- package/dist/{promise-7d13a97c.cjs.map → promise-cda7b9bb.cjs.map} +1 -1
- package/dist/promise.cjs +3 -3
- package/dist/rabin-gf2-polynomial.cjs +11 -11
- package/dist/rabin-uncached.cjs +11 -11
- package/dist/rabin.cjs +11 -11
- package/dist/random.cjs +1 -1
- package/dist/rsa-oaep.cjs +3 -3
- package/dist/rsa-oaep.cjs.map +1 -1
- package/dist/schema.cjs +572 -167
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.ts +326 -122
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.test.d.ts +5 -0
- package/dist/schema.test.d.ts.map +1 -1
- package/dist/{sort-b8702761.cjs → sort-812cc211.cjs} +2 -2
- package/dist/{sort-b8702761.cjs.map → sort-812cc211.cjs.map} +1 -1
- package/dist/sort.cjs +2 -2
- package/dist/{statistics-c2316dca.cjs → statistics-65f6114b.cjs} +2 -2
- package/dist/{statistics-c2316dca.cjs.map → statistics-65f6114b.cjs.map} +1 -1
- package/dist/statistics.cjs +2 -2
- package/dist/{string-b2827a90.cjs → string-fddc5f8b.cjs} +3 -3
- package/dist/string-fddc5f8b.cjs.map +1 -0
- package/dist/string.cjs +1 -1
- package/dist/string.d.ts +3 -3
- package/dist/string.d.ts.map +1 -1
- package/dist/testing.cjs +16 -16
- package/dist/text.cjs +79 -0
- package/dist/text.cjs.map +1 -0
- package/dist/{time-bc2081b9.cjs → time-d8438852.cjs} +2 -2
- package/dist/{time-bc2081b9.cjs.map → time-d8438852.cjs.map} +1 -1
- package/dist/time.cjs +2 -2
- package/dist/traits.cjs +22 -0
- package/dist/traits.cjs.map +1 -1
- package/dist/traits.d.ts +1 -0
- package/dist/traits.d.ts.map +1 -1
- package/dist/traits.test.d.ts.map +1 -1
- package/dist/transformer.cjs +930 -0
- package/dist/transformer.cjs.map +1 -0
- package/dist/url.cjs +2 -1
- package/dist/url.cjs.map +1 -1
- package/dist/value.cjs +187 -0
- package/dist/value.cjs.map +1 -0
- package/dist/webcrypto.d.ts +1 -1
- package/dist/webcrypto.d.ts.map +1 -1
- package/dist/{websocket-40a601d4.cjs → websocket-b073d0fc.cjs} +3 -3
- package/dist/{websocket-40a601d4.cjs.map → websocket-b073d0fc.cjs.map} +1 -1
- package/dist/websocket.cjs +4 -4
- package/dom.d.ts +17 -0
- package/dom.d.ts.map +1 -1
- package/dom.js +21 -0
- package/encoding.d.ts +6 -6
- package/encoding.d.ts.map +1 -1
- package/encoding.js +1 -1
- package/error.d.ts +1 -0
- package/error.d.ts.map +1 -1
- package/error.js +6 -0
- package/list.d.ts +13 -3
- package/list.d.ts.map +1 -1
- package/list.js +36 -8
- package/map.d.ts +1 -0
- package/map.d.ts.map +1 -1
- package/map.js +6 -0
- package/math.d.ts.map +1 -1
- package/math.js +3 -1
- package/object.d.ts +3 -0
- package/object.d.ts.map +1 -1
- package/object.js +9 -1
- package/package.json +9 -3
- package/prng.d.ts +1 -1
- package/prng.d.ts.map +1 -1
- package/prng.js +1 -1
- package/schema.d.ts +326 -122
- package/schema.d.ts.map +1 -1
- package/schema.js +513 -141
- package/schema.test.d.ts +5 -0
- package/schema.test.d.ts.map +1 -1
- package/string.d.ts +3 -3
- package/string.d.ts.map +1 -1
- package/string.js +2 -2
- package/test.html +1 -0
- package/test.js +13 -1
- package/traits.d.ts +1 -0
- package/traits.d.ts.map +1 -1
- package/traits.js +21 -0
- package/traits.test.d.ts.map +1 -1
- package/webcrypto.d.ts +1 -1
- package/webcrypto.d.ts.map +1 -1
- package/coverage/tmp/coverage-20054-1752683240888-0.json +0 -1
- package/dist/broadcastchannel-2c4b0a1c.cjs.map +0 -1
- package/dist/buffer-a74f7330.cjs.map +0 -1
- package/dist/decoding-2b136346.cjs.map +0 -1
- package/dist/dom-16daf1a0.cjs.map +0 -1
- package/dist/encoding-1acb59c4.cjs.map +0 -1
- package/dist/error-8582d695.cjs.map +0 -1
- package/dist/map-0dabcc55.cjs.map +0 -1
- package/dist/math-08e068f9.cjs.map +0 -1
- package/dist/object-491858d1.cjs.map +0 -1
- package/dist/string-b2827a90.cjs.map +0 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function testDeltaBasics(): void;
|
|
2
|
+
export function testText(): void;
|
|
3
|
+
export function testDelta(_tc: t.TestCase): void;
|
|
4
|
+
export function testDeltaMerging(_tc: t.TestCase): void;
|
|
5
|
+
export function testUseAttributes(_tc: t.TestCase): void;
|
|
6
|
+
export function testUseAttribution(_tc: t.TestCase): void;
|
|
7
|
+
export function testMapTyping(): void;
|
|
8
|
+
export function testMapDeltaBasics(_tc: t.TestCase): void;
|
|
9
|
+
export function testMapDeltaModify(_tc: t.TestCase): void;
|
|
10
|
+
export function testMapDelta(_tc: t.TestCase): void;
|
|
11
|
+
export function testRepeatRebaseMergeDeltas(tc: t.TestCase): void;
|
|
12
|
+
export function testNodeDelta(_tc: t.TestCase): void;
|
|
13
|
+
export function testRecursiveNode(): void;
|
|
14
|
+
import * as t from 'lib0/testing';
|
|
15
|
+
//# sourceMappingURL=d2.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"d2.test.d.ts","sourceRoot":"","sources":["d2.test.js"],"names":[],"mappings":"AAMO,wCA4BN;AAEM,iCAWN;AAKM,+BAFI,CAAC,CAAC,QAAQ,QAKpB;AAKM,sCAFI,CAAC,CAAC,QAAQ,QAYpB;AAKM,uCAFI,CAAC,CAAC,QAAQ,QAuBpB;AAKM,wCAFI,CAAC,CAAC,QAAQ,QAsBpB;AAEM,sCAaN;AAKM,wCAFI,CAAC,CAAC,QAAQ,QAgCpB;AAKM,wCAFI,CAAC,CAAC,QAAQ,QA2CpB;AAKM,kCAFI,CAAC,CAAC,QAAQ,QAoDpB;AAKM,gDAFI,CAAC,CAAC,QAAQ,QAoEpB;AAKM,mCAFI,CAAC,CAAC,QAAQ,QAwBpB;AAEM,0CAkBN;mBAtYkB,cAAc"}
|
package/delta/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type Text = import("./text.js").DeltaText<any>;
|
|
2
|
+
export type Delta = Array<any> | import("./node.js").DeltaNode<string, any, any, any>;
|
|
3
|
+
export type RecursiveNode<NodeName extends string, Attributes extends {
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
}, Children, WithText extends boolean> = import("./node.js").RecursiveDeltaNode<NodeName, Attributes, Children, WithText>;
|
|
6
|
+
export type ValueUnwrap<V> = V extends import("./value.js").DeltaValue<infer X> ? X : V;
|
|
7
|
+
export { TextOp, InsertOp, DeleteOp, ModifyOp, RetainOp, MapInsertOp, MapDeleteOp, MapModifyOp, $textOp, $insertOp, $insertOpWith, $deleteOp, $modifyOp, $modifyOpWith, $anyOp } from "./ops.js";
|
|
8
|
+
export { $delta, $$delta, AbstractDelta, mergeDeltas } from "./abstract.js";
|
|
9
|
+
export { array, $array, $arrayAny, DeltaArray as Array } from "./array.js";
|
|
10
|
+
export { node, $node, $nodeAny, DeltaNode as Node } from "./node.js";
|
|
11
|
+
export { map, $map, $mapAny, $mapJson, DeltaMap as Map } from "./map.js";
|
|
12
|
+
export { text, $text, $textAny, DeltaTextBuilder as TextBuilder } from "./text.js";
|
|
13
|
+
export { value, $value, $valueAny, DeltaValue as Value, DeltaValueBuilder as ValueBuilder } from "./value.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"mBAoDa,OAAO,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC;oBAIlC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,WAAW,EAAE,SAAS,CAAC,MAAM,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC;0BAIrD,QAAQ,SAAjB,MAAQ,EACgB,UAAU,SAAlC;IAAG,CAAC,GAAG,EAAC,MAAM,GAAG,GAAG,CAAA;CAAG,EACvB,QAAQ,EACE,QAAQ,SAAlB,OAAS,IACT,OAAO,WAAW,EAAE,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;wBAYhF,CAAC,IACD,CAAC,SAAS,OAAO,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC"}
|
package/delta/index.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export {
|
|
2
|
+
TextOp,
|
|
3
|
+
InsertOp,
|
|
4
|
+
DeleteOp,
|
|
5
|
+
ModifyOp,
|
|
6
|
+
RetainOp,
|
|
7
|
+
MapInsertOp,
|
|
8
|
+
MapDeleteOp,
|
|
9
|
+
MapModifyOp,
|
|
10
|
+
$textOp,
|
|
11
|
+
$insertOp,
|
|
12
|
+
$insertOpWith,
|
|
13
|
+
$deleteOp,
|
|
14
|
+
$modifyOp,
|
|
15
|
+
$modifyOpWith,
|
|
16
|
+
$anyOp
|
|
17
|
+
} from './ops.js'
|
|
18
|
+
|
|
19
|
+
export { $delta, $$delta, AbstractDelta, mergeDeltas } from './abstract.js'
|
|
20
|
+
|
|
21
|
+
// delta array
|
|
22
|
+
export {
|
|
23
|
+
array,
|
|
24
|
+
$array,
|
|
25
|
+
$arrayAny,
|
|
26
|
+
DeltaArray as Array
|
|
27
|
+
} from './array.js'
|
|
28
|
+
|
|
29
|
+
export {
|
|
30
|
+
node,
|
|
31
|
+
$node,
|
|
32
|
+
$nodeAny,
|
|
33
|
+
DeltaNode as Node
|
|
34
|
+
} from './node.js'
|
|
35
|
+
|
|
36
|
+
// delta map
|
|
37
|
+
export {
|
|
38
|
+
map,
|
|
39
|
+
$map,
|
|
40
|
+
$mapAny,
|
|
41
|
+
$mapJson,
|
|
42
|
+
DeltaMap as Map
|
|
43
|
+
} from './map.js'
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
text,
|
|
47
|
+
$text,
|
|
48
|
+
$textAny,
|
|
49
|
+
DeltaTextBuilder as TextBuilder
|
|
50
|
+
} from './text.js'
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @typedef {import('./text.js').DeltaText<any>} Text
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @typedef {Array<any> | import('./node.js').DeltaNode<string,any,any,any> } Delta
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @template {string} NodeName
|
|
62
|
+
* @template {{ [key:string]: any }} Attributes
|
|
63
|
+
* @template Children
|
|
64
|
+
* @template {boolean} WithText
|
|
65
|
+
* @typedef {import('./node.js').RecursiveDeltaNode<NodeName, Attributes, Children, WithText>} RecursiveNode
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
export {
|
|
69
|
+
value,
|
|
70
|
+
$value,
|
|
71
|
+
$valueAny,
|
|
72
|
+
DeltaValue as Value,
|
|
73
|
+
DeltaValueBuilder as ValueBuilder
|
|
74
|
+
} from './value.js'
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @template V
|
|
78
|
+
* @typedef {V extends import('./value.js').DeltaValue<infer X> ? X : V} ValueUnwrap
|
|
79
|
+
*/
|
package/delta/map.d.ts
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
export const $mapJson: s.Schema<{
|
|
2
|
+
[x: string]: ({
|
|
3
|
+
attribution?: ({
|
|
4
|
+
insert?: string[] | undefined;
|
|
5
|
+
insertAt?: number | undefined;
|
|
6
|
+
delete?: string[] | undefined;
|
|
7
|
+
deleteAt?: number | undefined;
|
|
8
|
+
attributes?: {
|
|
9
|
+
[x: string]: string[];
|
|
10
|
+
} | undefined;
|
|
11
|
+
attributesAt?: number | undefined;
|
|
12
|
+
} & {}) | null | undefined;
|
|
13
|
+
} & {
|
|
14
|
+
type: "insert";
|
|
15
|
+
value: any;
|
|
16
|
+
}) | ({} & {
|
|
17
|
+
type: "modify";
|
|
18
|
+
value: any;
|
|
19
|
+
}) | ({
|
|
20
|
+
attribution?: ({
|
|
21
|
+
insert?: string[] | undefined;
|
|
22
|
+
insertAt?: number | undefined;
|
|
23
|
+
delete?: string[] | undefined;
|
|
24
|
+
deleteAt?: number | undefined;
|
|
25
|
+
attributes?: {
|
|
26
|
+
[x: string]: string[];
|
|
27
|
+
} | undefined;
|
|
28
|
+
attributesAt?: number | undefined;
|
|
29
|
+
} & {}) | null | undefined;
|
|
30
|
+
} & {
|
|
31
|
+
type: "delete";
|
|
32
|
+
});
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* @template {{ [key:string]: ops.DeltaMapOps }} OPS
|
|
36
|
+
* @typedef {{ [K in keyof OPS]: (Extract<OPS[K],ops.MapInsertOp<any>> extends ops.MapInsertOp<infer V,any> ? ops.MapInsertOp<V, K> : never) | (Extract<OPS[K],ops.MapDeleteOp<any>> extends ops.MapDeleteOp<infer V,any> ? ops.MapDeleteOp<V,K> : never) | (Extract<OPS[K],ops.MapModifyOp<any>> extends ops.MapModifyOp<infer V,any> ? (ops.MapModifyOp<V,K>&OPS[K]) : never) }[keyof OPS]} KeyedOps */
|
|
37
|
+
/**
|
|
38
|
+
* @template {{ [key: string]: any }} [Vals={[key:string]:any}]
|
|
39
|
+
* @extends AbstractDelta
|
|
40
|
+
*/
|
|
41
|
+
export class DeltaMap<Vals extends {
|
|
42
|
+
[key: string]: any;
|
|
43
|
+
} = {
|
|
44
|
+
[key: string]: any;
|
|
45
|
+
}> extends AbstractDelta {
|
|
46
|
+
/**
|
|
47
|
+
* @param {s.Schema<Vals>} $vals
|
|
48
|
+
*/
|
|
49
|
+
constructor($vals: s.Schema<Vals>);
|
|
50
|
+
$vals: s.Schema<Partial<s.$ObjectToType<{
|
|
51
|
+
[key: string]: s.Schema<any>;
|
|
52
|
+
[key: number]: s.Schema<any>;
|
|
53
|
+
[key: symbol]: s.Schema<any>;
|
|
54
|
+
}>>> | s.Schema<Vals>;
|
|
55
|
+
/**
|
|
56
|
+
* @type {gmap.GlobalMap<any,ops.DeltaMapOps>}
|
|
57
|
+
*/
|
|
58
|
+
_changes: gmap.GlobalMap<any, ops.DeltaMapOps>;
|
|
59
|
+
/**
|
|
60
|
+
* @type {import('./abstract.js').Attribution?}
|
|
61
|
+
*/
|
|
62
|
+
usedAttribution: import("./abstract.js").Attribution | null;
|
|
63
|
+
/**
|
|
64
|
+
*
|
|
65
|
+
* Iterate through the changes. There are two approches to iterate through changes. The
|
|
66
|
+
* following two examples achieve the same thing:
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* d.forEach(op => {
|
|
70
|
+
* if (op instanceof dmap.MapInsertOp) {
|
|
71
|
+
* console.log('content inserted:', op.key, op.value)
|
|
72
|
+
* } else if (op instanceof dmap.MapDeleteOp) {
|
|
73
|
+
* console.log('content deleted:', op.key, op.prevValue)
|
|
74
|
+
* } else if (op instanceof delta.MapModifyOp) {
|
|
75
|
+
* console.log('content was modified:', op.key, op.)
|
|
76
|
+
* op.modify
|
|
77
|
+
* }
|
|
78
|
+
* })
|
|
79
|
+
*
|
|
80
|
+
* The second approach doesn't require instanceof checks.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* d.forEach(null,
|
|
84
|
+
* (insertOp) => insertOp.insert,
|
|
85
|
+
* (retainOp) => insertOp.retain
|
|
86
|
+
* (deleteOp) => insertOp.delete
|
|
87
|
+
* (modifyOp) => insertOp.modify
|
|
88
|
+
* )
|
|
89
|
+
*
|
|
90
|
+
* @template {Vals} ValsX
|
|
91
|
+
* @param {null|((op:KeyedOps<MapOpsFromValues<ValsX>>)=>void)} changeHandler
|
|
92
|
+
* @param {null|((insertOp:Extract<KeyedOps<MapOpsFromValues<ValsX>>,ops.MapInsertOp<any,any>>)=>void)} insertHandler
|
|
93
|
+
* @param {null|((deleteOp:Extract<KeyedOps<MapOpsFromValues<ValsX>>,ops.MapDeleteOp<any,any>>)=>void)} deleteHandler
|
|
94
|
+
* @param {null|((modifyOp:Extract<KeyedOps<MapOpsFromValues<ValsX>>,ops.MapModifyOp<any,any>>)=>void)} modifyHandler
|
|
95
|
+
*/
|
|
96
|
+
forEach<ValsX extends Vals>(changeHandler?: null | ((op: KeyedOps<MapOpsFromValues<ValsX>>) => void), insertHandler?: null | ((insertOp: Extract<KeyedOps<MapOpsFromValues<ValsX>>, ops.MapInsertOp<any, any>>) => void), deleteHandler?: null | ((deleteOp: Extract<KeyedOps<MapOpsFromValues<ValsX>>, ops.MapDeleteOp<any, any>>) => void), modifyHandler?: null | ((modifyOp: Extract<KeyedOps<MapOpsFromValues<ValsX>>, ops.MapModifyOp<any, any>>) => void)): void;
|
|
97
|
+
/**
|
|
98
|
+
* @template {keyof Vals} K
|
|
99
|
+
* @param {K} key
|
|
100
|
+
* @return {MapOpsFromValues<Vals>[K] | undefined}
|
|
101
|
+
*/
|
|
102
|
+
get<K extends keyof Vals>(key: K): MapOpsFromValues<Vals>[K] | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* @param {keyof Vals} key
|
|
105
|
+
*/
|
|
106
|
+
has(key: keyof Vals): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* @param {DeltaMap<any>} other
|
|
109
|
+
* @return {boolean}
|
|
110
|
+
*/
|
|
111
|
+
equals(other: DeltaMap<any>): boolean;
|
|
112
|
+
get size(): number;
|
|
113
|
+
/**
|
|
114
|
+
* @return {s.Unwrap<$mapJson>}
|
|
115
|
+
*/
|
|
116
|
+
toJSON(): s.Unwrap<s.Schema<{
|
|
117
|
+
[x: string]: ({
|
|
118
|
+
attribution?: ({
|
|
119
|
+
insert?: string[] | undefined;
|
|
120
|
+
insertAt?: number | undefined;
|
|
121
|
+
delete?: string[] | undefined;
|
|
122
|
+
deleteAt?: number | undefined;
|
|
123
|
+
attributes?: {
|
|
124
|
+
[x: string]: string[];
|
|
125
|
+
} | undefined;
|
|
126
|
+
attributesAt?: number | undefined;
|
|
127
|
+
} & {}) | null | undefined;
|
|
128
|
+
} & {
|
|
129
|
+
type: "insert";
|
|
130
|
+
value: any;
|
|
131
|
+
}) | ({} & {
|
|
132
|
+
type: "modify";
|
|
133
|
+
value: any;
|
|
134
|
+
}) | ({
|
|
135
|
+
attribution?: ({
|
|
136
|
+
insert?: string[] | undefined;
|
|
137
|
+
insertAt?: number | undefined;
|
|
138
|
+
delete?: string[] | undefined;
|
|
139
|
+
deleteAt?: number | undefined;
|
|
140
|
+
attributes?: {
|
|
141
|
+
[x: string]: string[];
|
|
142
|
+
} | undefined;
|
|
143
|
+
attributesAt?: number | undefined;
|
|
144
|
+
} & {}) | null | undefined;
|
|
145
|
+
} & {
|
|
146
|
+
type: "delete";
|
|
147
|
+
});
|
|
148
|
+
}>>;
|
|
149
|
+
/**
|
|
150
|
+
* @template {keyof Vals} K
|
|
151
|
+
* @param {K} key
|
|
152
|
+
* @param {Extract<Vals[K], AbstractDelta>} delta
|
|
153
|
+
*/
|
|
154
|
+
modify<K extends keyof Vals>(key: K, delta: Extract<Vals[K], AbstractDelta>): this;
|
|
155
|
+
/**
|
|
156
|
+
* @template {keyof Vals} K
|
|
157
|
+
* @param {K} key
|
|
158
|
+
* @param {Vals[K]} newVal
|
|
159
|
+
* @param {Vals[K]|undefined} prevValue
|
|
160
|
+
* @param {import('./abstract.js').Attribution?} attribution
|
|
161
|
+
*/
|
|
162
|
+
set<K extends keyof Vals>(key: K, newVal: Vals[K], prevValue?: Vals[K] | undefined, attribution?: import("./abstract.js").Attribution | null): this;
|
|
163
|
+
/**
|
|
164
|
+
* @param {Partial<Vals>} kv
|
|
165
|
+
* @param {import('./abstract.js').Attribution?} attribution
|
|
166
|
+
*/
|
|
167
|
+
setMany(kv: Partial<Vals>, attribution?: import("./abstract.js").Attribution | null): this;
|
|
168
|
+
/**
|
|
169
|
+
* @template {keyof Vals} K
|
|
170
|
+
* @param {K} key
|
|
171
|
+
* @param {Vals[K]|undefined} prevValue
|
|
172
|
+
* @param {import('./abstract.js').Attribution?} attribution
|
|
173
|
+
*/
|
|
174
|
+
delete<K extends keyof Vals>(key: K, prevValue?: Vals[K] | undefined, attribution?: import("./abstract.js").Attribution | null): this;
|
|
175
|
+
/**
|
|
176
|
+
* @param {import('./abstract.js').Attribution?} attribution
|
|
177
|
+
*/
|
|
178
|
+
useAttribution(attribution: import("./abstract.js").Attribution | null): this;
|
|
179
|
+
/**
|
|
180
|
+
*
|
|
181
|
+
* - insert vs delete ⇒ insert takes precedence
|
|
182
|
+
* - insert vs modify ⇒ insert takes precedence
|
|
183
|
+
* - insert vs insert ⇒ priority decides
|
|
184
|
+
* - delete vs modify ⇒ delete takes precedence
|
|
185
|
+
* - delete vs delete ⇒ current delete op is removed because item has already been deleted
|
|
186
|
+
* - modify vs modify ⇒ rebase using priority
|
|
187
|
+
*
|
|
188
|
+
* @param {DeltaMap<Vals>} other
|
|
189
|
+
* @param {boolean} priority
|
|
190
|
+
*/
|
|
191
|
+
rebase(other: DeltaMap<Vals>, priority: boolean): void;
|
|
192
|
+
/**
|
|
193
|
+
* @param {DeltaMap<Partial<Vals>>} other
|
|
194
|
+
*/
|
|
195
|
+
apply(other: DeltaMap<Partial<Vals>>): void;
|
|
196
|
+
/**
|
|
197
|
+
* @return {this}
|
|
198
|
+
*/
|
|
199
|
+
clone(): this;
|
|
200
|
+
done(): DeltaMap<Vals>;
|
|
201
|
+
/**
|
|
202
|
+
* @param {DeltaMap<Partial<Vals>>} other
|
|
203
|
+
*/
|
|
204
|
+
[traits.EqualityTraitSymbol](other: DeltaMap<Partial<Vals>>): boolean;
|
|
205
|
+
}
|
|
206
|
+
export function map<$Vals extends s.Schema<{
|
|
207
|
+
[key: string]: any;
|
|
208
|
+
}> | {
|
|
209
|
+
[key: string]: s.Schema<any>;
|
|
210
|
+
} = s.Schema<{
|
|
211
|
+
[key: string]: any;
|
|
212
|
+
}>>($vals?: $Vals): DeltaMap<$Vals extends s.Schema<infer $V> ? $V : (s._ObjectDefToSchema<$Vals> extends s.Schema<infer $V> ? $V : never)>;
|
|
213
|
+
export function $map<Vals extends {
|
|
214
|
+
[key: string]: any;
|
|
215
|
+
}>($vals: s.Schema<Vals>): s.Schema<DeltaMap<Vals>>;
|
|
216
|
+
export const $mapAny: s.Schema<DeltaMap<{
|
|
217
|
+
[key: string]: any;
|
|
218
|
+
}>>;
|
|
219
|
+
export type KeyedOps<OPS extends {
|
|
220
|
+
[key: string]: ops.DeltaMapOps;
|
|
221
|
+
}> = { [K in keyof OPS]: (Extract<OPS[K], ops.MapInsertOp<any>> extends ops.MapInsertOp<infer V, any> ? ops.MapInsertOp<V, K> : never) | (Extract<OPS[K], ops.MapDeleteOp<any>> extends ops.MapDeleteOp<infer V, any> ? ops.MapDeleteOp<V, K> : never) | (Extract<OPS[K], ops.MapModifyOp<any>> extends ops.MapModifyOp<infer V, any> ? (ops.MapModifyOp<V, K> & OPS[K]) : never); }[keyof OPS];
|
|
222
|
+
export type MapOpsFromValues<Vals extends {
|
|
223
|
+
[key: string]: any;
|
|
224
|
+
}> = { [K in keyof Vals]: Vals[K] extends DeltaMap<infer DM> ? ops.MapInsertOp<Vals[K]> | ops.MapDeleteOp<Vals[K]> | ops.MapModifyOp<DeltaMap<DM>> : (ops.MapInsertOp<Exclude<Vals[K], undefined>> | ops.MapDeleteOp<Exclude<Vals[K], undefined>>); };
|
|
225
|
+
import * as s from '../schema.js';
|
|
226
|
+
import { AbstractDelta } from './abstract.js';
|
|
227
|
+
import * as gmap from '../map.js';
|
|
228
|
+
import * as ops from './ops.js';
|
|
229
|
+
import * as traits from '../traits.js';
|
|
230
|
+
//# sourceMappingURL=map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["map.js"],"names":[],"mappings":"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"}
|
package/delta/map.js
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import * as gmap from '../map.js'
|
|
2
|
+
import * as fun from '../function.js'
|
|
3
|
+
import * as traits from '../traits.js'
|
|
4
|
+
import * as s from '../schema.js'
|
|
5
|
+
import * as ops from './ops.js'
|
|
6
|
+
import { AbstractDelta, mergeAttrs, $delta } from './abstract.js'
|
|
7
|
+
|
|
8
|
+
export const $mapJson = s.$record(s.$string, ops.$deltaMapChangeJson)
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @template {{ [key:string]: ops.DeltaMapOps }} OPS
|
|
12
|
+
* @typedef {{ [K in keyof OPS]: (Extract<OPS[K],ops.MapInsertOp<any>> extends ops.MapInsertOp<infer V,any> ? ops.MapInsertOp<V, K> : never) | (Extract<OPS[K],ops.MapDeleteOp<any>> extends ops.MapDeleteOp<infer V,any> ? ops.MapDeleteOp<V,K> : never) | (Extract<OPS[K],ops.MapModifyOp<any>> extends ops.MapModifyOp<infer V,any> ? (ops.MapModifyOp<V,K>&OPS[K]) : never) }[keyof OPS]} KeyedOps */
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @template {{ [key: string]: any }} [Vals={[key:string]:any}]
|
|
16
|
+
* @extends AbstractDelta
|
|
17
|
+
*/
|
|
18
|
+
export class DeltaMap extends AbstractDelta {
|
|
19
|
+
/**
|
|
20
|
+
* @param {s.Schema<Vals>} $vals
|
|
21
|
+
*/
|
|
22
|
+
constructor ($vals) {
|
|
23
|
+
super()
|
|
24
|
+
this.$vals = s.$$object.check($vals) ? $vals.partial : $vals
|
|
25
|
+
/**
|
|
26
|
+
* @type {gmap.GlobalMap<any,ops.DeltaMapOps>}
|
|
27
|
+
*/
|
|
28
|
+
this._changes = gmap.create()
|
|
29
|
+
/**
|
|
30
|
+
* @type {import('./abstract.js').Attribution?}
|
|
31
|
+
*/
|
|
32
|
+
this.usedAttribution = null
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
isEmpty () {
|
|
36
|
+
return this._changes.size === 0
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* Iterate through the changes. There are two approches to iterate through changes. The
|
|
42
|
+
* following two examples achieve the same thing:
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* d.forEach(op => {
|
|
46
|
+
* if (op instanceof dmap.MapInsertOp) {
|
|
47
|
+
* console.log('content inserted:', op.key, op.value)
|
|
48
|
+
* } else if (op instanceof dmap.MapDeleteOp) {
|
|
49
|
+
* console.log('content deleted:', op.key, op.prevValue)
|
|
50
|
+
* } else if (op instanceof delta.MapModifyOp) {
|
|
51
|
+
* console.log('content was modified:', op.key, op.)
|
|
52
|
+
* op.modify
|
|
53
|
+
* }
|
|
54
|
+
* })
|
|
55
|
+
*
|
|
56
|
+
* The second approach doesn't require instanceof checks.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* d.forEach(null,
|
|
60
|
+
* (insertOp) => insertOp.insert,
|
|
61
|
+
* (retainOp) => insertOp.retain
|
|
62
|
+
* (deleteOp) => insertOp.delete
|
|
63
|
+
* (modifyOp) => insertOp.modify
|
|
64
|
+
* )
|
|
65
|
+
*
|
|
66
|
+
* @template {Vals} ValsX
|
|
67
|
+
* @param {null|((op:KeyedOps<MapOpsFromValues<ValsX>>)=>void)} changeHandler
|
|
68
|
+
* @param {null|((insertOp:Extract<KeyedOps<MapOpsFromValues<ValsX>>,ops.MapInsertOp<any,any>>)=>void)} insertHandler
|
|
69
|
+
* @param {null|((deleteOp:Extract<KeyedOps<MapOpsFromValues<ValsX>>,ops.MapDeleteOp<any,any>>)=>void)} deleteHandler
|
|
70
|
+
* @param {null|((modifyOp:Extract<KeyedOps<MapOpsFromValues<ValsX>>,ops.MapModifyOp<any,any>>)=>void)} modifyHandler
|
|
71
|
+
*/
|
|
72
|
+
forEach (changeHandler = null, insertHandler = null, deleteHandler = null, modifyHandler = null) {
|
|
73
|
+
this._changes.forEach((change) => {
|
|
74
|
+
changeHandler?.(/** @type {any} */ (change))
|
|
75
|
+
switch (change.constructor) {
|
|
76
|
+
case ops.MapDeleteOp:
|
|
77
|
+
deleteHandler?.(/** @type {any} */ (change))
|
|
78
|
+
break
|
|
79
|
+
case ops.MapInsertOp:
|
|
80
|
+
insertHandler?.(/** @type {any} */ (change))
|
|
81
|
+
break
|
|
82
|
+
case ops.MapModifyOp:
|
|
83
|
+
modifyHandler?.(/** @type {any} */ (change))
|
|
84
|
+
break
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @template {keyof Vals} K
|
|
91
|
+
* @param {K} key
|
|
92
|
+
* @return {MapOpsFromValues<Vals>[K] | undefined}
|
|
93
|
+
*/
|
|
94
|
+
get (key) {
|
|
95
|
+
return /** @type {(MapOpsFromValues<Vals>[K] & { key:K })|undefined} */ (this._changes.get(key))
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @param {keyof Vals} key
|
|
100
|
+
*/
|
|
101
|
+
has (key) {
|
|
102
|
+
return this._changes.has(key)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @param {DeltaMap<any>} other
|
|
107
|
+
* @return {boolean}
|
|
108
|
+
*/
|
|
109
|
+
equals (other) {
|
|
110
|
+
return this[traits.EqualityTraitSymbol](other)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
get size () {
|
|
114
|
+
return this._changes.size
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @return {s.Unwrap<$mapJson>}
|
|
119
|
+
*/
|
|
120
|
+
toJSON () {
|
|
121
|
+
/**
|
|
122
|
+
* @type {s.Unwrap<$mapJson>}
|
|
123
|
+
*/
|
|
124
|
+
const changes = {}
|
|
125
|
+
this._changes.forEach((change, key) => {
|
|
126
|
+
changes[/** @type {string} */ (key)] = change.toJSON()
|
|
127
|
+
})
|
|
128
|
+
return changes
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* @template {keyof Vals} K
|
|
133
|
+
* @param {K} key
|
|
134
|
+
* @param {Extract<Vals[K], AbstractDelta>} delta
|
|
135
|
+
*/
|
|
136
|
+
modify (key, delta) {
|
|
137
|
+
this._changes.set(key, /** @type {any} */ (new ops.MapModifyOp(key, valsKeySchema(this.$vals, key).cast(delta))))
|
|
138
|
+
return this
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @template {keyof Vals} K
|
|
143
|
+
* @param {K} key
|
|
144
|
+
* @param {Vals[K]} newVal
|
|
145
|
+
* @param {Vals[K]|undefined} prevValue
|
|
146
|
+
* @param {import('./abstract.js').Attribution?} attribution
|
|
147
|
+
*/
|
|
148
|
+
set (key, newVal, prevValue = undefined, attribution = null) {
|
|
149
|
+
const mergedAttribution = mergeAttrs(this.usedAttribution, attribution)
|
|
150
|
+
const $v = valsKeySchema(this.$vals, key)
|
|
151
|
+
this._changes.set(key, /** @type {any} */ (new ops.MapInsertOp(key, $v.cast(newVal), prevValue && $v.cast(prevValue), mergedAttribution)))
|
|
152
|
+
return this
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* @param {Partial<Vals>} kv
|
|
157
|
+
* @param {import('./abstract.js').Attribution?} attribution
|
|
158
|
+
*/
|
|
159
|
+
setMany (kv, attribution = null) {
|
|
160
|
+
for (const key in kv) {
|
|
161
|
+
this.set(key, /** @type {Vals[any]} */ (kv[key]), undefined, attribution)
|
|
162
|
+
}
|
|
163
|
+
return this
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* @template {keyof Vals} K
|
|
168
|
+
* @param {K} key
|
|
169
|
+
* @param {Vals[K]|undefined} prevValue
|
|
170
|
+
* @param {import('./abstract.js').Attribution?} attribution
|
|
171
|
+
*/
|
|
172
|
+
delete (key, prevValue = undefined, attribution = null) {
|
|
173
|
+
const mergedAttribution = mergeAttrs(this.usedAttribution, attribution)
|
|
174
|
+
this._changes.set(key, /** @type {any} */ (new ops.MapDeleteOp(key, prevValue === undefined ? prevValue : valsKeySchema(this.$vals, key).cast(prevValue), mergedAttribution)))
|
|
175
|
+
return this
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @param {import('./abstract.js').Attribution?} attribution
|
|
180
|
+
*/
|
|
181
|
+
useAttribution (attribution) {
|
|
182
|
+
this.usedAttribution = attribution
|
|
183
|
+
return this
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
*
|
|
188
|
+
* - insert vs delete ⇒ insert takes precedence
|
|
189
|
+
* - insert vs modify ⇒ insert takes precedence
|
|
190
|
+
* - insert vs insert ⇒ priority decides
|
|
191
|
+
* - delete vs modify ⇒ delete takes precedence
|
|
192
|
+
* - delete vs delete ⇒ current delete op is removed because item has already been deleted
|
|
193
|
+
* - modify vs modify ⇒ rebase using priority
|
|
194
|
+
*
|
|
195
|
+
* @param {DeltaMap<Vals>} other
|
|
196
|
+
* @param {boolean} priority
|
|
197
|
+
*/
|
|
198
|
+
rebase (other, priority) {
|
|
199
|
+
this.forEach(null,
|
|
200
|
+
insertOp => {
|
|
201
|
+
if (other.get(insertOp.key)?.constructor === ops.MapInsertOp && !priority) {
|
|
202
|
+
this._changes.delete(insertOp.key)
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
deleteOp => {
|
|
206
|
+
const otherOp = other.get(deleteOp.key)
|
|
207
|
+
if (otherOp?.constructor === ops.MapInsertOp) {
|
|
208
|
+
this._changes.delete(otherOp.key)
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
modifyOp => {
|
|
212
|
+
const otherOp = other.get(modifyOp.key)
|
|
213
|
+
if (otherOp == null) {
|
|
214
|
+
// nop
|
|
215
|
+
} else if (otherOp.constructor === ops.MapModifyOp) {
|
|
216
|
+
modifyOp.value.rebase(otherOp.value, priority)
|
|
217
|
+
} else {
|
|
218
|
+
this._changes.delete(otherOp.key)
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* @param {DeltaMap<Partial<Vals>>} other
|
|
226
|
+
*/
|
|
227
|
+
apply (other) {
|
|
228
|
+
/** @type {DeltaMap<Vals>} */ (other).forEach(op => {
|
|
229
|
+
const c = this._changes.get(op.key)
|
|
230
|
+
if (ops.$modifyOp.check(op)) {
|
|
231
|
+
if ($delta.check(c?.value)) {
|
|
232
|
+
/** @type {DeltaMap<any>} */ (c.value).apply(op.value)
|
|
233
|
+
} else {
|
|
234
|
+
// then this is a simple modify
|
|
235
|
+
this._changes.set(op.key, /** @type {any} */ (op))
|
|
236
|
+
}
|
|
237
|
+
} else {
|
|
238
|
+
op.prevValue = c?.value
|
|
239
|
+
this._changes.set(op.key, /** @type {any} */ (op))
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
)
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* @return {this}
|
|
247
|
+
*/
|
|
248
|
+
clone () {
|
|
249
|
+
const d = /** @type {this} */ (new DeltaMap(this.$vals))
|
|
250
|
+
this.forEach(change => {
|
|
251
|
+
d._changes.set(change.key, /** @type {any} */ (change))
|
|
252
|
+
})
|
|
253
|
+
d.origin = this.origin
|
|
254
|
+
d.isDiff = this.isDiff
|
|
255
|
+
return d
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
done () {
|
|
259
|
+
return /** @type {DeltaMap<Vals>} */ (this)
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* @param {DeltaMap<Partial<Vals>>} other
|
|
264
|
+
*/
|
|
265
|
+
[traits.EqualityTraitSymbol] (other) {
|
|
266
|
+
return fun.equalityDeep(this._changes, other._changes)
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* @template {s.Schema<{ [Key:string]: ops.DeltaMapOps }>} OPS
|
|
272
|
+
* @template {keyof s.Unwrap<OPS>} K
|
|
273
|
+
* @param {OPS} $ops
|
|
274
|
+
* @param {K} k
|
|
275
|
+
* @return {s.Schema<s.Unwrap<OPS>[K]>}
|
|
276
|
+
*/
|
|
277
|
+
const valsKeySchema = ($ops, k) => s.$$object.check($ops) ? ($ops.shape[k] || s.$never) : ((s.$$record.check($ops) && $ops.shape.keys.check(k)) ? ($ops.shape.values) : s.$never)
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* @template {{ [key:string]: any }} Vals
|
|
281
|
+
* @typedef {{ [K in keyof Vals]: Vals[K] extends DeltaMap<infer DM> ? ops.MapInsertOp<Vals[K]>|ops.MapDeleteOp<Vals[K]>|ops.MapModifyOp<DeltaMap<DM>> : (ops.MapInsertOp<Exclude<Vals[K],undefined>>|ops.MapDeleteOp<Exclude<Vals[K],undefined>>) }} MapOpsFromValues
|
|
282
|
+
*/
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Create a new DeltaMap, optionally supply a schema.
|
|
286
|
+
*
|
|
287
|
+
* @template {s.Schema<{ [key:string]: any }> | { [key:string]: s.Schema<any> }} [$Vals=s.Schema<{ [key:string]: any }>]
|
|
288
|
+
* @param {$Vals} $vals
|
|
289
|
+
* @return {DeltaMap<$Vals extends s.Schema<infer $V> ? $V : (s._ObjectDefToSchema<$Vals> extends s.Schema<infer $V> ? $V : never)>}
|
|
290
|
+
*/
|
|
291
|
+
export const map = ($vals = /** @type {any} */ (s.$record(s.$string, s.$any))) => /** @type {any} */ (new DeltaMap(/** @type {any} */ (s.$$schema.check($vals) ? $vals : s.$object($vals))))
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* @template {{ [key:string]: any }} Vals
|
|
295
|
+
* @param {s.Schema<Vals>} $vals
|
|
296
|
+
* @return {s.Schema<DeltaMap<Vals>>}
|
|
297
|
+
*/
|
|
298
|
+
export const $map = $vals => {
|
|
299
|
+
const $valsPartial = s.$$object.check($vals) ? $vals.partial : $vals
|
|
300
|
+
return /** @type {any} */ (s.$instanceOf(DeltaMap, o => Array.from(o._changes.entries()).every(([k, op]) =>
|
|
301
|
+
!ops.$insertOp.check(op) || $valsPartial.check({ [k]: op.value })
|
|
302
|
+
)))
|
|
303
|
+
}
|
|
304
|
+
export const $mapAny = s.$instanceOf(DeltaMap)
|