lib0 0.2.115-3 → 0.2.115-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/coverage/tmp/coverage-42121-1764767245409-0.json +1 -0
- package/coverage/tmp/{coverage-32703-1763495370274-0.json → coverage-42122-1764767192180-0.json} +1 -1
- package/delta/binding.d.ts +11 -9
- package/delta/binding.d.ts.map +1 -1
- package/delta/binding.js +5 -2
- package/delta/binding.test.d.ts.map +1 -1
- package/delta/delta-pitch.test.d.ts +5 -0
- package/delta/delta-pitch.test.d.ts.map +1 -0
- package/delta/{d2.d.ts → delta.d.ts} +117 -34
- package/delta/delta.d.ts.map +1 -0
- package/delta/{d2.js → delta.js} +247 -55
- package/delta/{d2.test.d.ts → delta.test.d.ts} +6 -1
- package/delta/delta.test.d.ts.map +1 -0
- package/delta/t3.test.d.ts +1 -1
- package/delta/t3.test.d.ts.map +1 -1
- package/dist/array.cjs +17 -60
- package/dist/array.cjs.map +1 -1
- package/dist/binding.cjs +114 -28
- package/dist/binding.cjs.map +1 -1
- package/dist/{broadcastchannel-d0c108a2.cjs → broadcastchannel-94897809.cjs} +2 -2
- package/dist/{broadcastchannel-d0c108a2.cjs.map → broadcastchannel-94897809.cjs.map} +1 -1
- package/dist/broadcastchannel.cjs +6 -6
- package/dist/{buffer-7f6fa8fa.cjs → buffer-8d110bf4.cjs} +2 -2
- package/dist/{buffer-7f6fa8fa.cjs.map → buffer-8d110bf4.cjs.map} +1 -1
- package/dist/buffer.cjs +5 -5
- package/dist/cache.cjs +3 -3
- package/dist/component.cjs +12 -8
- package/dist/component.cjs.map +1 -1
- package/dist/delta/binding.d.ts +11 -9
- package/dist/delta/binding.d.ts.map +1 -1
- package/dist/delta/binding.test.d.ts.map +1 -1
- package/dist/delta/delta-pitch.test.d.ts +5 -0
- package/dist/delta/delta-pitch.test.d.ts.map +1 -0
- package/dist/delta/{d2.d.ts → delta.d.ts} +117 -34
- package/dist/delta/delta.d.ts.map +1 -0
- package/dist/delta/{d2.test.d.ts → delta.test.d.ts} +6 -1
- package/dist/delta/delta.test.d.ts.map +1 -0
- package/dist/delta/t3.test.d.ts +1 -1
- package/dist/delta/t3.test.d.ts.map +1 -1
- package/dist/{d2.cjs → delta.cjs} +256 -60
- package/dist/delta.cjs.map +1 -0
- package/dist/{diff-1832cb43.cjs → diff-dc7bdc65.cjs} +2 -2
- package/dist/{diff-1832cb43.cjs.map → diff-dc7bdc65.cjs.map} +1 -1
- package/dist/diff.cjs +4 -4
- package/dist/{dom-f5047a64.cjs → dom-cad267af.cjs} +1 -1
- package/dist/{dom-f5047a64.cjs.map → dom-cad267af.cjs.map} +1 -1
- package/dist/dom.cjs +12 -5
- package/dist/dom.cjs.map +1 -1
- package/dist/{environment-90227ead.cjs → environment-98bcf64f.cjs} +2 -2
- package/dist/{environment-90227ead.cjs.map → environment-98bcf64f.cjs.map} +1 -1
- package/dist/environment.cjs +4 -4
- package/dist/equality.cjs +34 -0
- package/dist/equality.cjs.map +1 -0
- package/dist/fingerprint.cjs +44 -0
- package/dist/fingerprint.cjs.map +1 -0
- package/dist/{function-e7d18feb.cjs → function-b4e49016.cjs} +6 -6
- package/dist/function-b4e49016.cjs.map +1 -0
- package/dist/function.cjs +3 -3
- package/dist/index.cjs +9 -9
- package/dist/indexeddbV2.cjs +2 -2
- package/dist/jwt.cjs +5 -5
- package/dist/list.cjs +18 -5
- package/dist/list.cjs.map +1 -1
- package/dist/list.d.ts +9 -2
- package/dist/list.d.ts.map +1 -1
- package/dist/list.test.d.ts.map +1 -1
- package/dist/logging.cjs +11 -5
- package/dist/logging.cjs.map +1 -1
- package/dist/logging.common.cjs +4 -4
- package/dist/logging.node.cjs +4 -4
- package/dist/map.cjs +7 -314
- package/dist/map.cjs.map +1 -1
- package/dist/{object-18980796.cjs → object-dec41ef9.cjs} +3 -3
- package/dist/object-dec41ef9.cjs.map +1 -0
- package/dist/object.cjs +2 -2
- package/dist/object.d.ts.map +1 -1
- package/dist/performance.node.cjs +3 -3
- package/dist/pledge.cjs +2 -2
- package/dist/{prng-99204216.cjs → prng-aa81e812.cjs} +2 -2
- package/dist/{prng-99204216.cjs.map → prng-aa81e812.cjs.map} +1 -1
- package/dist/prng.cjs +6 -6
- package/dist/rabin-gf2-polynomial.cjs +5 -5
- package/dist/rabin-uncached.cjs +5 -5
- package/dist/rabin.cjs +5 -5
- package/dist/schema.cjs +202 -22
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.ts +86 -29
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.test.d.ts +4 -0
- package/dist/schema.test.d.ts.map +1 -1
- package/dist/testing.cjs +9 -9
- package/dist/testing.cjs.map +1 -1
- package/dist/{traits.d.ts → trait/equality.d.ts} +1 -1
- package/dist/trait/equality.d.ts.map +1 -0
- package/dist/trait/fingerprint.d.ts +13 -0
- package/dist/trait/fingerprint.d.ts.map +1 -0
- package/dist/trait/traits.d.ts +3 -0
- package/dist/trait/traits.d.ts.map +1 -0
- package/dist/trait/traits.test.d.ts +5 -0
- package/dist/trait/traits.test.d.ts.map +1 -0
- package/dist/traits.cjs +23 -26
- package/dist/traits.cjs.map +1 -1
- package/dist/url.cjs +2 -2
- package/function.js +4 -4
- package/list.d.ts +9 -2
- package/list.d.ts.map +1 -1
- package/list.js +17 -3
- package/list.test.d.ts.map +1 -1
- package/object.d.ts.map +1 -1
- package/object.js +2 -2
- package/package.json +8 -10
- package/schema.d.ts +86 -29
- package/schema.d.ts.map +1 -1
- package/schema.js +191 -20
- package/schema.test.d.ts +4 -0
- package/schema.test.d.ts.map +1 -1
- package/test.html +2 -4
- package/test.js +7 -13
- package/testing.js +3 -3
- package/{traits.d.ts → trait/equality.d.ts} +1 -1
- package/trait/equality.d.ts.map +1 -0
- package/trait/fingerprint.d.ts +13 -0
- package/trait/fingerprint.d.ts.map +1 -0
- package/trait/fingerprint.js +21 -0
- package/trait/traits.d.ts +3 -0
- package/trait/traits.d.ts.map +1 -0
- package/trait/traits.js +2 -0
- package/trait/traits.test.d.ts +5 -0
- package/{traits.test.d.ts.map → trait/traits.test.d.ts.map} +1 -1
- package/delta/abstract-array.d.ts +0 -166
- package/delta/abstract-array.d.ts.map +0 -1
- package/delta/abstract-array.js +0 -421
- package/delta/abstract.d.ts +0 -69
- package/delta/abstract.d.ts.map +0 -1
- package/delta/abstract.js +0 -102
- package/delta/array.d.ts +0 -23
- package/delta/array.d.ts.map +0 -1
- package/delta/array.js +0 -45
- package/delta/array.test.d.ts +0 -2
- package/delta/array.test.d.ts.map +0 -1
- package/delta/d2.d.ts.map +0 -1
- package/delta/d2.test.d.ts.map +0 -1
- package/delta/index.d.ts +0 -14
- package/delta/index.d.ts.map +0 -1
- package/delta/index.js +0 -79
- package/delta/map.d.ts +0 -226
- package/delta/map.d.ts.map +0 -1
- package/delta/map.js +0 -304
- package/delta/node.d.ts +0 -117
- package/delta/node.d.ts.map +0 -1
- package/delta/node.js +0 -183
- package/delta/node.test.d.ts +0 -4
- package/delta/node.test.d.ts.map +0 -1
- package/delta/ops.d.ts +0 -464
- package/delta/ops.d.ts.map +0 -1
- package/delta/ops.js +0 -544
- package/delta/t2.d.ts +0 -184
- package/delta/t2.d.ts.map +0 -1
- package/delta/t2.js +0 -890
- package/delta/text.d.ts +0 -43
- package/delta/text.d.ts.map +0 -1
- package/delta/text.js +0 -54
- package/delta/text.test.d.ts +0 -6
- package/delta/text.test.d.ts.map +0 -1
- package/delta/transformer.d.ts +0 -164
- package/delta/transformer.d.ts.map +0 -1
- package/delta/transformer.js +0 -888
- package/delta/transformer.test.d.ts +0 -13
- package/delta/transformer.test.d.ts.map +0 -1
- package/delta/value.d.ts +0 -84
- package/delta/value.d.ts.map +0 -1
- package/delta/value.js +0 -168
- package/dist/abstract-array.cjs +0 -433
- package/dist/abstract-array.cjs.map +0 -1
- package/dist/abstract.cjs +0 -122
- package/dist/abstract.cjs.map +0 -1
- package/dist/array2.cjs +0 -26
- package/dist/array2.cjs.map +0 -1
- package/dist/d2.cjs.map +0 -1
- package/dist/delta/abstract-array.d.ts +0 -166
- package/dist/delta/abstract-array.d.ts.map +0 -1
- package/dist/delta/abstract.d.ts +0 -69
- package/dist/delta/abstract.d.ts.map +0 -1
- package/dist/delta/array.d.ts +0 -23
- package/dist/delta/array.d.ts.map +0 -1
- package/dist/delta/array.test.d.ts +0 -2
- package/dist/delta/array.test.d.ts.map +0 -1
- package/dist/delta/d2.d.ts.map +0 -1
- package/dist/delta/d2.test.d.ts.map +0 -1
- package/dist/delta/index.d.ts +0 -14
- package/dist/delta/index.d.ts.map +0 -1
- package/dist/delta/map.d.ts +0 -226
- package/dist/delta/map.d.ts.map +0 -1
- package/dist/delta/node.d.ts +0 -117
- package/dist/delta/node.d.ts.map +0 -1
- package/dist/delta/node.test.d.ts +0 -4
- package/dist/delta/node.test.d.ts.map +0 -1
- package/dist/delta/ops.d.ts +0 -464
- package/dist/delta/ops.d.ts.map +0 -1
- package/dist/delta/t2.d.ts +0 -184
- package/dist/delta/t2.d.ts.map +0 -1
- package/dist/delta/text.d.ts +0 -43
- package/dist/delta/text.d.ts.map +0 -1
- package/dist/delta/text.test.d.ts +0 -6
- package/dist/delta/text.test.d.ts.map +0 -1
- package/dist/delta/transformer.d.ts +0 -164
- package/dist/delta/transformer.d.ts.map +0 -1
- package/dist/delta/transformer.test.d.ts +0 -13
- package/dist/delta/transformer.test.d.ts.map +0 -1
- package/dist/delta/value.d.ts +0 -84
- package/dist/delta/value.d.ts.map +0 -1
- package/dist/function-e7d18feb.cjs.map +0 -1
- package/dist/index2.cjs +0 -71
- package/dist/index2.cjs.map +0 -1
- package/dist/map2.cjs +0 -15
- package/dist/map2.cjs.map +0 -1
- package/dist/node.cjs +0 -206
- package/dist/node.cjs.map +0 -1
- package/dist/object-18980796.cjs.map +0 -1
- package/dist/ops.cjs +0 -575
- package/dist/ops.cjs.map +0 -1
- package/dist/t2.cjs +0 -932
- package/dist/t2.cjs.map +0 -1
- package/dist/text.cjs +0 -79
- package/dist/text.cjs.map +0 -1
- package/dist/traits.d.ts.map +0 -1
- package/dist/traits.test.d.ts +0 -4
- package/dist/traits.test.d.ts.map +0 -1
- package/dist/transformer.cjs +0 -930
- package/dist/transformer.cjs.map +0 -1
- package/dist/value.cjs +0 -187
- package/dist/value.cjs.map +0 -1
- package/traits.d.ts.map +0 -1
- package/traits.test.d.ts +0 -4
- /package/{traits.js → trait/equality.js} +0 -0
|
@@ -3,19 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var list = require('./list.cjs');
|
|
6
|
-
var object = require('./object-
|
|
7
|
-
var
|
|
6
|
+
var object = require('./object-dec41ef9.cjs');
|
|
7
|
+
var equality = require('./equality.cjs');
|
|
8
|
+
var fingerprint = require('./fingerprint.cjs');
|
|
8
9
|
var array$1 = require('./array-78849c95.cjs');
|
|
9
|
-
var _function = require('./function-
|
|
10
|
+
var _function = require('./function-b4e49016.cjs');
|
|
10
11
|
var schema = require('./schema.cjs');
|
|
11
12
|
var error = require('./error-0c1f634f.cjs');
|
|
12
13
|
var math = require('./math-96d5e8c4.cjs');
|
|
13
14
|
var rabin = require('./rabin.cjs');
|
|
14
15
|
var encoding = require('./encoding-1a745c43.cjs');
|
|
15
|
-
var buffer = require('./buffer-
|
|
16
|
+
var buffer = require('./buffer-8d110bf4.cjs');
|
|
16
17
|
var patience = require('./patience.cjs');
|
|
18
|
+
var prng = require('./prng-aa81e812.cjs');
|
|
17
19
|
require('./set-5b47859e.cjs');
|
|
18
|
-
require('./environment-
|
|
20
|
+
require('./environment-98bcf64f.cjs');
|
|
19
21
|
require('./map-24d263c0.cjs');
|
|
20
22
|
require('./string-fddc5f8b.cjs');
|
|
21
23
|
require('./conditions-f5c0c102.cjs');
|
|
@@ -116,10 +118,6 @@ const _cloneAttrs = attrs => attrs == null ? attrs : { ...attrs };
|
|
|
116
118
|
*/
|
|
117
119
|
const _markMaybeDeltaAsDone = maybeDelta => $deltaAny.check(maybeDelta) ? /** @type {MaybeDelta} */ (maybeDelta.done()) : maybeDelta;
|
|
118
120
|
|
|
119
|
-
/**
|
|
120
|
-
* @typedef {unknown & DeltaAny} Q
|
|
121
|
-
*/
|
|
122
|
-
|
|
123
121
|
class TextOp extends list.ListNode {
|
|
124
122
|
/**
|
|
125
123
|
* @param {string} insert
|
|
@@ -198,7 +196,7 @@ class TextOp extends list.ListNode {
|
|
|
198
196
|
/**
|
|
199
197
|
* @param {TextOp} other
|
|
200
198
|
*/
|
|
201
|
-
[
|
|
199
|
+
[equality.EqualityTraitSymbol] (other) {
|
|
202
200
|
return _function.equalityDeep(this.insert, other.insert) && _function.equalityDeep(this.format, other.format) && _function.equalityDeep(this.attribution, other.attribution)
|
|
203
201
|
}
|
|
204
202
|
|
|
@@ -211,7 +209,7 @@ class TextOp extends list.ListNode {
|
|
|
211
209
|
}
|
|
212
210
|
|
|
213
211
|
/**
|
|
214
|
-
* @template {
|
|
212
|
+
* @template {fingerprintTrait.Fingerprintable} ArrayContent
|
|
215
213
|
*/
|
|
216
214
|
class InsertOp extends list.ListNode {
|
|
217
215
|
/**
|
|
@@ -286,13 +284,7 @@ class InsertOp extends list.ListNode {
|
|
|
286
284
|
encoding.writeVarUint(encoder, 1); // insertOp type: 1
|
|
287
285
|
encoding.writeVarUint(encoder, this.insert.length);
|
|
288
286
|
this.insert.forEach(ins => {
|
|
289
|
-
|
|
290
|
-
encoding.writeUint8(encoder, 0);
|
|
291
|
-
encoding.writeVarString(encoder, ins.fingerprint);
|
|
292
|
-
} else {
|
|
293
|
-
encoding.writeUint8(encoder, 1);
|
|
294
|
-
encoding.writeAny(encoder, ins);
|
|
295
|
-
}
|
|
287
|
+
encoding.writeVarString(encoder, fingerprint.fingerprint(ins));
|
|
296
288
|
});
|
|
297
289
|
encoding.writeAny(encoder, this.format);
|
|
298
290
|
})))
|
|
@@ -321,7 +313,7 @@ class InsertOp extends list.ListNode {
|
|
|
321
313
|
/**
|
|
322
314
|
* @param {InsertOp<ArrayContent>} other
|
|
323
315
|
*/
|
|
324
|
-
[
|
|
316
|
+
[equality.EqualityTraitSymbol] (other) {
|
|
325
317
|
return _function.equalityDeep(this.insert, other.insert) && _function.equalityDeep(this.format, other.format) && _function.equalityDeep(this.attribution, other.attribution)
|
|
326
318
|
}
|
|
327
319
|
|
|
@@ -334,7 +326,7 @@ class InsertOp extends list.ListNode {
|
|
|
334
326
|
}
|
|
335
327
|
|
|
336
328
|
/**
|
|
337
|
-
* @template {
|
|
329
|
+
* @template {fingerprintTrait.Fingerprintable} [Children=never]
|
|
338
330
|
* @template {string} [Text=never]
|
|
339
331
|
*/
|
|
340
332
|
class DeleteOp extends list.ListNode {
|
|
@@ -395,7 +387,7 @@ class DeleteOp extends list.ListNode {
|
|
|
395
387
|
/**
|
|
396
388
|
* @param {DeleteOp} other
|
|
397
389
|
*/
|
|
398
|
-
[
|
|
390
|
+
[equality.EqualityTraitSymbol] (other) {
|
|
399
391
|
return this.delete === other.delete
|
|
400
392
|
}
|
|
401
393
|
|
|
@@ -476,7 +468,7 @@ class RetainOp extends list.ListNode {
|
|
|
476
468
|
/**
|
|
477
469
|
* @param {RetainOp} other
|
|
478
470
|
*/
|
|
479
|
-
[
|
|
471
|
+
[equality.EqualityTraitSymbol] (other) {
|
|
480
472
|
return this.retain === other.retain && _function.equalityDeep(this.format, other.format) && _function.equalityDeep(this.attribution, other.attribution)
|
|
481
473
|
}
|
|
482
474
|
|
|
@@ -576,8 +568,8 @@ class ModifyOp extends list.ListNode {
|
|
|
576
568
|
/**
|
|
577
569
|
* @param {ModifyOp<any>} other
|
|
578
570
|
*/
|
|
579
|
-
[
|
|
580
|
-
return this.value[
|
|
571
|
+
[equality.EqualityTraitSymbol] (other) {
|
|
572
|
+
return this.value[equality.EqualityTraitSymbol](other.value) && _function.equalityDeep(this.format, other.format) && _function.equalityDeep(this.attribution, other.attribution)
|
|
581
573
|
}
|
|
582
574
|
|
|
583
575
|
/**
|
|
@@ -589,7 +581,7 @@ class ModifyOp extends list.ListNode {
|
|
|
589
581
|
}
|
|
590
582
|
|
|
591
583
|
/**
|
|
592
|
-
* @template {
|
|
584
|
+
* @template {fingerprintTrait.Fingerprintable} V
|
|
593
585
|
* @template {string|number} [K=any]
|
|
594
586
|
*/
|
|
595
587
|
class AttrInsertOp {
|
|
@@ -674,7 +666,7 @@ class AttrInsertOp {
|
|
|
674
666
|
/**
|
|
675
667
|
* @param {AttrInsertOp<V>} other
|
|
676
668
|
*/
|
|
677
|
-
[
|
|
669
|
+
[equality.EqualityTraitSymbol] (other) {
|
|
678
670
|
return this.key === other.key && _function.equalityDeep(this.value, other.value) && _function.equalityDeep(this.attribution, other.attribution)
|
|
679
671
|
}
|
|
680
672
|
|
|
@@ -739,7 +731,7 @@ class AttrDeleteOp {
|
|
|
739
731
|
/**
|
|
740
732
|
* @param {AttrDeleteOp<V>} other
|
|
741
733
|
*/
|
|
742
|
-
[
|
|
734
|
+
[equality.EqualityTraitSymbol] (other) {
|
|
743
735
|
return this.key === other.key && _function.equalityDeep(this.attribution, other.attribution)
|
|
744
736
|
}
|
|
745
737
|
|
|
@@ -813,8 +805,8 @@ class AttrModifyOp {
|
|
|
813
805
|
/**
|
|
814
806
|
* @param {AttrModifyOp<Modifier>} other
|
|
815
807
|
*/
|
|
816
|
-
[
|
|
817
|
-
return this.key === other.key && this.value[
|
|
808
|
+
[equality.EqualityTraitSymbol] (other) {
|
|
809
|
+
return this.key === other.key && this.value[equality.EqualityTraitSymbol](other.value)
|
|
818
810
|
}
|
|
819
811
|
|
|
820
812
|
/**
|
|
@@ -836,7 +828,7 @@ const $deleteOp = schema.$custom(o => o != null && (o.constructor === DeleteOp |
|
|
|
836
828
|
const $insertOp = schema.$custom(o => o != null && (o.constructor === AttrInsertOp || o.constructor === InsertOp));
|
|
837
829
|
|
|
838
830
|
/**
|
|
839
|
-
* @template {
|
|
831
|
+
* @template {fingerprintTrait.Fingerprintable} Content
|
|
840
832
|
* @param {s.Schema<Content>} $content
|
|
841
833
|
* @return {s.Schema<AttrInsertOp<Content> | InsertOp<Content>>}
|
|
842
834
|
*/
|
|
@@ -917,8 +909,8 @@ const $anyOp = schema.$union($insertOp, $deleteOp, $textOp, $modifyOp);
|
|
|
917
909
|
/**
|
|
918
910
|
* @template {string} [NodeName=any]
|
|
919
911
|
* @template {{[k:string|number]:any}} [Attrs={}]
|
|
920
|
-
* @template {
|
|
921
|
-
* @template {string
|
|
912
|
+
* @template {fingerprintTrait.Fingerprintable} [Children=never]
|
|
913
|
+
* @template {string} [Text=never]
|
|
922
914
|
* @template {s.Schema<Delta<any,any,any,any,any>>|null} [Schema=any]
|
|
923
915
|
*/
|
|
924
916
|
class Delta {
|
|
@@ -969,6 +961,7 @@ class Delta {
|
|
|
969
961
|
*/
|
|
970
962
|
get fingerprint () {
|
|
971
963
|
return this._fingerprint || (this._fingerprint = buffer.toBase64(encoding.encode(encoder => {
|
|
964
|
+
encoding.writeUint32(encoder, 0xf2ae5680); // "magic number" that ensures that different types of content don't yield the same fingerprint
|
|
972
965
|
encoding.writeAny(encoder, this.name);
|
|
973
966
|
/**
|
|
974
967
|
* @type {Array<number|string>}
|
|
@@ -998,6 +991,10 @@ class Delta {
|
|
|
998
991
|
})))
|
|
999
992
|
}
|
|
1000
993
|
|
|
994
|
+
[fingerprint.FingerprintTraitSymbol] () {
|
|
995
|
+
return this.fingerprint
|
|
996
|
+
}
|
|
997
|
+
|
|
1001
998
|
isEmpty () {
|
|
1002
999
|
return object.isEmpty(this.attrs) && list.isEmpty(this.children)
|
|
1003
1000
|
}
|
|
@@ -1034,16 +1031,17 @@ class Delta {
|
|
|
1034
1031
|
* @return {boolean}
|
|
1035
1032
|
*/
|
|
1036
1033
|
equals (other) {
|
|
1037
|
-
return this[
|
|
1034
|
+
return this[equality.EqualityTraitSymbol](other)
|
|
1038
1035
|
}
|
|
1039
1036
|
|
|
1040
1037
|
/**
|
|
1041
1038
|
* @param {any} other
|
|
1042
1039
|
* @return {boolean}
|
|
1043
1040
|
*/
|
|
1044
|
-
[
|
|
1045
|
-
// @todo it is only necessary to compare finrerprints OR do a deep equality check
|
|
1046
|
-
|
|
1041
|
+
[equality.EqualityTraitSymbol] (other) {
|
|
1042
|
+
// @todo it is only necessary to compare finrerprints OR do a deep equality check (remove
|
|
1043
|
+
// childCnt as well)
|
|
1044
|
+
return this.name === other.name && _function.equalityDeep(this.attrs, other.attrs) && _function.equalityDeep(this.children, other.children) && this.childCnt === other.childCnt
|
|
1047
1045
|
}
|
|
1048
1046
|
|
|
1049
1047
|
/**
|
|
@@ -1170,8 +1168,8 @@ const modDeltaCheck = d => {
|
|
|
1170
1168
|
/**
|
|
1171
1169
|
* @template {string} [NodeName=any]
|
|
1172
1170
|
* @template {{[key:string|number]:any}} [Attrs={}]
|
|
1173
|
-
* @template {
|
|
1174
|
-
* @template {string
|
|
1171
|
+
* @template {fingerprintTrait.Fingerprintable} [Children=never]
|
|
1172
|
+
* @template {string} [Text=never]
|
|
1175
1173
|
* @template {s.Schema<Delta<any,any,any,any,any>>|null} [Schema=any]
|
|
1176
1174
|
* @extends {Delta<NodeName,Attrs,Children,Text,Schema>}
|
|
1177
1175
|
*/
|
|
@@ -1435,7 +1433,7 @@ class DeltaBuilder extends Delta {
|
|
|
1435
1433
|
modDeltaCheck(this);
|
|
1436
1434
|
this.$schema?.expect(other);
|
|
1437
1435
|
// apply attrs
|
|
1438
|
-
for (
|
|
1436
|
+
for (const op of other.attrs) {
|
|
1439
1437
|
const c = /** @type {AttrInsertOp<any,any>|AttrDeleteOp<any>|AttrModifyOp<any,any>} */ (this.attrs[op.key]);
|
|
1440
1438
|
if ($modifyOp.check(op)) {
|
|
1441
1439
|
if ($deltaAny.check(c?.value)) {
|
|
@@ -1445,12 +1443,14 @@ class DeltaBuilder extends Delta {
|
|
|
1445
1443
|
// @ts-ignore
|
|
1446
1444
|
this.attrs[op.key] = op.clone();
|
|
1447
1445
|
}
|
|
1448
|
-
} else {
|
|
1449
|
-
op = /** @type {any} */ (op.clone());
|
|
1446
|
+
} else if ($insertOp.check(op)) {
|
|
1450
1447
|
// @ts-ignore
|
|
1451
1448
|
op.prevValue = c?.value;
|
|
1452
1449
|
// @ts-ignore
|
|
1453
|
-
this.attrs[op.key] = op;
|
|
1450
|
+
this.attrs[op.key] = op.clone();
|
|
1451
|
+
} else if ($deleteOp.check(op)) {
|
|
1452
|
+
op.prevValue = c?.value;
|
|
1453
|
+
delete this.attrs[op.key];
|
|
1454
1454
|
}
|
|
1455
1455
|
}
|
|
1456
1456
|
// apply children
|
|
@@ -1532,6 +1532,7 @@ class DeltaBuilder extends Delta {
|
|
|
1532
1532
|
offset = 0;
|
|
1533
1533
|
scheduleForMerge(opsI.next);
|
|
1534
1534
|
list.remove(this.children, opsI);
|
|
1535
|
+
opsI = opsI.next;
|
|
1535
1536
|
} else if (offset === 0) {
|
|
1536
1537
|
// case 2
|
|
1537
1538
|
offset = 0;
|
|
@@ -1742,17 +1743,135 @@ class DeltaBuilder extends Delta {
|
|
|
1742
1743
|
console.info('method rebaseOnInverse unimplemented');
|
|
1743
1744
|
return this
|
|
1744
1745
|
}
|
|
1746
|
+
|
|
1747
|
+
/**
|
|
1748
|
+
* Append child ops from one op to the other.
|
|
1749
|
+
*
|
|
1750
|
+
* delta.create().insert('a').append(delta.create().insert('b')) // => insert "ab"
|
|
1751
|
+
*
|
|
1752
|
+
* @template {DeltaAny} OtherDelta
|
|
1753
|
+
* @param {OtherDelta} other
|
|
1754
|
+
* @return {CastToDelta<OtherDelta> extends Delta<any,any,infer OtherChildren,infer OtherText,any> ? DeltaBuilder<NodeName,Attrs,Children|OtherChildren,Text|OtherText,Schema> : never}
|
|
1755
|
+
*/
|
|
1756
|
+
append (other) {
|
|
1757
|
+
// @todo Investigate. Above is a typescript issue. It is necessary to cast OtherDelta to a Delta first before
|
|
1758
|
+
// inferring type, otherwise Children will contain Text.
|
|
1759
|
+
for (const child of other.children) {
|
|
1760
|
+
list.pushEnd(this.children, child.clone());
|
|
1761
|
+
}
|
|
1762
|
+
// @ts-ignore
|
|
1763
|
+
return this
|
|
1764
|
+
}
|
|
1745
1765
|
}
|
|
1746
1766
|
|
|
1767
|
+
/**
|
|
1768
|
+
* @template {DeltaAny} D
|
|
1769
|
+
* @typedef {D extends DeltaBuilder<infer N,infer Attrs,infer Children,infer Text,infer Schema> ? Delta<N,Attrs,Children,Text,Schema> : D} CastToDelta
|
|
1770
|
+
*/
|
|
1771
|
+
|
|
1747
1772
|
/**
|
|
1748
1773
|
* @template {string} NodeName
|
|
1749
1774
|
* @template {{ [key: string|number]: any }} [Attrs={}]
|
|
1750
|
-
* @template {
|
|
1775
|
+
* @template {fingerprintTrait.Fingerprintable|never} [Children=never]
|
|
1751
1776
|
* @template {string|never} [Text=never]
|
|
1752
1777
|
* @typedef {Delta<NodeName,Attrs,Children|Delta<NodeName,Attrs,Children,Text>|RecursiveDelta<NodeName,Attrs,Children,Text>,Text>} RecursiveDelta
|
|
1753
1778
|
*/
|
|
1754
1779
|
|
|
1755
1780
|
/**
|
|
1781
|
+
* @template {string} Name
|
|
1782
|
+
* @template {{[k:string|number]:any}} Attrs
|
|
1783
|
+
* @template {fingerprintTrait.Fingerprintable} Children
|
|
1784
|
+
* @template {boolean} HasText
|
|
1785
|
+
* @template {{ [k:string]:any }} Formats
|
|
1786
|
+
* @template {boolean} Recursive
|
|
1787
|
+
* @extends {s.Schema<Delta<
|
|
1788
|
+
* Name,
|
|
1789
|
+
* Attrs,
|
|
1790
|
+
* Children|(Recursive extends true ? RecursiveDelta<Name,Attrs,Children,HasText extends true ? string : never> : never),
|
|
1791
|
+
* HasText extends true ? string : never,
|
|
1792
|
+
* any>>}
|
|
1793
|
+
*/
|
|
1794
|
+
class $Delta extends schema.Schema {
|
|
1795
|
+
/**
|
|
1796
|
+
* @param {s.Schema<Name>} $name
|
|
1797
|
+
* @param {s.Schema<Attrs>} $attrs
|
|
1798
|
+
* @param {s.Schema<Children>} $children
|
|
1799
|
+
* @param {HasText} hasText
|
|
1800
|
+
* @param {s.Schema<Formats>} $formats
|
|
1801
|
+
* @param {Recursive} recursive
|
|
1802
|
+
*/
|
|
1803
|
+
constructor ($name, $attrs, $children, hasText, $formats, recursive) {
|
|
1804
|
+
super();
|
|
1805
|
+
const $attrsPartial = schema.$$object.check($attrs) ? $attrs.partial : $attrs;
|
|
1806
|
+
if (recursive) {
|
|
1807
|
+
// @ts-ignore
|
|
1808
|
+
$children = schema.$union($children, this);
|
|
1809
|
+
}
|
|
1810
|
+
this.shape = { $name, $attrs: $attrsPartial, $children, hasText, $formats };
|
|
1811
|
+
}
|
|
1812
|
+
|
|
1813
|
+
/**
|
|
1814
|
+
* @param {any} o
|
|
1815
|
+
* @param {s.ValidationError} [err]
|
|
1816
|
+
* @return {o is Delta<
|
|
1817
|
+
* Name,
|
|
1818
|
+
* Attrs,
|
|
1819
|
+
* Children|(Recursive extends true ? RecursiveDelta<Name,Attrs,Children,HasText extends true ? string : never> : never),
|
|
1820
|
+
* HasText extends true ? string : never,
|
|
1821
|
+
* any>}
|
|
1822
|
+
*/
|
|
1823
|
+
check (o, err = undefined) {
|
|
1824
|
+
const { $name, $attrs, $children, hasText, $formats } = this.shape;
|
|
1825
|
+
if (!(o instanceof Delta)) {
|
|
1826
|
+
err?.extend(null, 'Delta', o?.constructor.name, 'Constructor match failed');
|
|
1827
|
+
} else if (!$name.check(o.name, err)) {
|
|
1828
|
+
err?.extend('Delta.name', $name.toString(), o.name, 'Constructor match failed');
|
|
1829
|
+
} else if (list.toArray(o.children).some(c => (!hasText && $textOp.check(c)) || (hasText && $textOp.check(c) && c.format != null && !$formats.check(c.format)) || ($insertOp.check(c) && !c.insert.every(ins => $children.check(ins))))) {
|
|
1830
|
+
err?.extend('Delta.children', '', '', 'Children don\'t match the schema');
|
|
1831
|
+
} else if (object.some(o.attrs, (op, k) => $insertOp.check(op) && !$attrs.check({ [k]: op.value }, err))) {
|
|
1832
|
+
err?.extend('Delta.attrs', '', '', 'Attrs don\'t match the schema');
|
|
1833
|
+
} else {
|
|
1834
|
+
return true
|
|
1835
|
+
}
|
|
1836
|
+
return false
|
|
1837
|
+
}
|
|
1838
|
+
}
|
|
1839
|
+
|
|
1840
|
+
/**
|
|
1841
|
+
* @template {s.Schema<string>|string|Array<string>} [NodeNameSchema=s.Schema<any>]
|
|
1842
|
+
* @template {s.Schema<{ [key: string|number]: any }>|{ [key:string|number]:any }} [AttrsSchema=s.Schema<{}>]
|
|
1843
|
+
* @template {any} [ChildrenSchema=s.Schema<never>]
|
|
1844
|
+
* @template {boolean} [HasText=false]
|
|
1845
|
+
* @template {boolean} [Recursive=false]
|
|
1846
|
+
* @template {{ [k:string]:any }} [Formats={[k:string]:any}]
|
|
1847
|
+
* @param {object} opts
|
|
1848
|
+
* @param {NodeNameSchema?} [opts.name]
|
|
1849
|
+
* @param {AttrsSchema?} [opts.attrs] What key-value pairs are included.
|
|
1850
|
+
* @param {ChildrenSchema?} [opts.children] The type of content in `insertOp`
|
|
1851
|
+
* @param {HasText} [opts.text] Whether this delta contains text using `textOp`
|
|
1852
|
+
* @param {Formats} [opts.formats]
|
|
1853
|
+
* @param {Recursive} [opts.recursive]
|
|
1854
|
+
* @return {[s.Unwrap<s.ReadSchema<NodeNameSchema>>,s.Unwrap<s.ReadSchema<AttrsSchema>>,s.Unwrap<s.ReadSchema<ChildrenSchema>>] extends [infer NodeName, infer Attrs, infer Children] ? s.Schema<Delta<
|
|
1855
|
+
* NodeName,
|
|
1856
|
+
* Attrs,
|
|
1857
|
+
* Children|(Recursive extends true ? RecursiveDelta<NodeName,Attrs,Children,HasText extends true ? string : never> : never),
|
|
1858
|
+
* HasText extends true ? string : never
|
|
1859
|
+
* >> : never}
|
|
1860
|
+
*/
|
|
1861
|
+
const $delta = ({ name, attrs, children, text, formats, recursive }) => /** @type {any} */ (new $Delta(
|
|
1862
|
+
name == null ? schema.$any : schema.$(name),
|
|
1863
|
+
/** @type {any} */ (attrs == null ? schema.$object({}) : schema.$(attrs)),
|
|
1864
|
+
/** @type {any} */ (children == null ? schema.$never : schema.$(children)),
|
|
1865
|
+
text ?? false,
|
|
1866
|
+
formats == null ? schema.$any : schema.$(formats),
|
|
1867
|
+
recursive ?? false
|
|
1868
|
+
));
|
|
1869
|
+
|
|
1870
|
+
const $$delta = schema.$constructedBy($Delta);
|
|
1871
|
+
|
|
1872
|
+
/**
|
|
1873
|
+
* @todo remove this
|
|
1874
|
+
*
|
|
1756
1875
|
* @template {s.Schema<string>|string|Array<string>} [NodeNameSchema=s.Schema<any>]
|
|
1757
1876
|
* @template {s.Schema<{ [key: string|number]: any }>|{ [key:string|number]:any }} [AttrsSchema=s.Schema<{}>]
|
|
1758
1877
|
* @template {any} [ChildrenSchema=s.Schema<never>]
|
|
@@ -1771,7 +1890,7 @@ class DeltaBuilder extends Delta {
|
|
|
1771
1890
|
* HasText extends true ? string : never
|
|
1772
1891
|
* >> : never}
|
|
1773
1892
|
*/
|
|
1774
|
-
const $delta = ({ name, attrs, children, text, recursive }) => {
|
|
1893
|
+
const _$delta = ({ name, attrs, children, text, recursive }) => {
|
|
1775
1894
|
/**
|
|
1776
1895
|
* @type {s.Schema<Array<any>>}
|
|
1777
1896
|
*/
|
|
@@ -1827,6 +1946,35 @@ const mergeDeltas = (a, b) => {
|
|
|
1827
1946
|
return a == null ? b : (a || null)
|
|
1828
1947
|
};
|
|
1829
1948
|
|
|
1949
|
+
/**
|
|
1950
|
+
* @template {DeltaAny} D
|
|
1951
|
+
* @param {prng.PRNG} gen
|
|
1952
|
+
* @param {s.Schema<D>} $d
|
|
1953
|
+
* @return {D extends Delta<infer NodeName,infer Attrs,infer Children,infer Text,infer Schema> ? DeltaBuilder<NodeName,Attrs,Children,Text,Schema> : never}
|
|
1954
|
+
*/
|
|
1955
|
+
const random = (gen, $d) => {
|
|
1956
|
+
const { $name, $attrs, $children, hasText, $formats: $formats_ } = /** @type {$Delta<any,any,any,boolean,any,any>} */ (/** @type {any} */ ($d)).shape;
|
|
1957
|
+
const d = schema.$$any.check($name) ? create($deltaAny) : create(schema.random(gen, $name), $deltaAny);
|
|
1958
|
+
const $formats = schema.$$any.check($formats_) ? schema.$null : $formats_;
|
|
1959
|
+
prng.bool(gen) && d.setMany(schema.random(gen, $attrs));
|
|
1960
|
+
for (let i = prng.uint32(gen, 0, 5); i > 0; i--) {
|
|
1961
|
+
if (hasText && prng.bool(gen)) {
|
|
1962
|
+
d.insert(prng.word(gen), schema.random(gen, $formats));
|
|
1963
|
+
} else if (!schema.$$never.check($children)) {
|
|
1964
|
+
/**
|
|
1965
|
+
* @type {Array<any>}
|
|
1966
|
+
*/
|
|
1967
|
+
const ins = [];
|
|
1968
|
+
let insN = prng.int32(gen, 0, 5);
|
|
1969
|
+
while (insN--) {
|
|
1970
|
+
ins.push(schema.random(gen, $children));
|
|
1971
|
+
}
|
|
1972
|
+
d.insert(ins, schema.random(gen, $formats));
|
|
1973
|
+
}
|
|
1974
|
+
}
|
|
1975
|
+
return /** @type {any} */ (d)
|
|
1976
|
+
};
|
|
1977
|
+
|
|
1830
1978
|
/**
|
|
1831
1979
|
* @overload
|
|
1832
1980
|
* @return {DeltaBuilder<any,{},never,never,null>}
|
|
@@ -1887,12 +2035,12 @@ const create = (nodeNameOrSchema, attrsOrSchema, children) => {
|
|
|
1887
2035
|
// DELTA TEXT
|
|
1888
2036
|
|
|
1889
2037
|
/**
|
|
1890
|
-
* @template {
|
|
2038
|
+
* @template {fingerprintTrait.Fingerprintable} [Embeds=never]
|
|
1891
2039
|
* @typedef {Delta<any,{},Embeds,string>} TextDelta
|
|
1892
2040
|
*/
|
|
1893
2041
|
|
|
1894
2042
|
/**
|
|
1895
|
-
* @template {
|
|
2043
|
+
* @template {fingerprintTrait.Fingerprintable} [Embeds=never]
|
|
1896
2044
|
* @typedef {DeltaBuilder<any,{},Embeds,string>} TextDeltaBuilder
|
|
1897
2045
|
*/
|
|
1898
2046
|
|
|
@@ -1912,12 +2060,12 @@ const $textOnly = $text();
|
|
|
1912
2060
|
const text = $schema => /** @type {any} */ (create($schema || $textOnly));
|
|
1913
2061
|
|
|
1914
2062
|
/**
|
|
1915
|
-
* @template {
|
|
2063
|
+
* @template {fingerprintTrait.Fingerprintable} Children
|
|
1916
2064
|
* @typedef {Delta<any,{},Children,never>} ArrayDelta
|
|
1917
2065
|
*/
|
|
1918
2066
|
|
|
1919
2067
|
/**
|
|
1920
|
-
* @template {
|
|
2068
|
+
* @template {fingerprintTrait.Fingerprintable} Children
|
|
1921
2069
|
* @typedef {DeltaBuilder<any,{},Children,never>} ArrayDeltaBuilder
|
|
1922
2070
|
*/
|
|
1923
2071
|
|
|
@@ -2017,29 +2165,73 @@ const diff = (d1, d2) => {
|
|
|
2017
2165
|
* @param {DeltaBuilderAny} d
|
|
2018
2166
|
* @param {ChildrenOpAny[]} opsIs
|
|
2019
2167
|
* @param {ChildrenOpAny[]} opsShould
|
|
2020
|
-
*
|
|
2021
2168
|
*/
|
|
2022
2169
|
const diffAndApply = (d, opsIs, opsShould) => {
|
|
2023
|
-
//
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2170
|
+
// @todo unoptimized implementation. Convert content to array and diff that based on
|
|
2171
|
+
// generated fingerprints. We probably could do better and cache more information.
|
|
2172
|
+
// - benchmark
|
|
2173
|
+
// - cache fingerprints in ops
|
|
2174
|
+
/**
|
|
2175
|
+
* @type {Array<string|DeltaAny|fingerprintTrait.Fingerprintable>}
|
|
2176
|
+
*/
|
|
2177
|
+
const isContent = opsIs.flatMap(op => $insertOp.check(op) ? op.insert : ($textOp.check(op) ? op.insert.split('') : error.unexpectedCase()));
|
|
2178
|
+
/**
|
|
2179
|
+
* @type {Array<string|DeltaAny|fingerprintTrait.Fingerprintable>}
|
|
2180
|
+
*/
|
|
2181
|
+
const shouldContent = opsShould.flatMap(op => $insertOp.check(op) ? op.insert : ($textOp.check(op) ? op.insert.split('') : error.unexpectedCase()));
|
|
2182
|
+
const isContentFingerprinted = isContent.map(c => schema.$string.check(c) ? c : fingerprint.fingerprint(c));
|
|
2183
|
+
const shouldContentFingerprinted = shouldContent.map(c => schema.$string.check(c) ? c : fingerprint.fingerprint(c));
|
|
2184
|
+
/**
|
|
2185
|
+
* @type {{ index: number, insert: Array<string|DeltaAny|fingerprintTrait.Fingerprintable>, remove: Array<string|DeltaAny|fingerprintTrait.Fingerprintable> }[]}
|
|
2186
|
+
*/
|
|
2187
|
+
const cdiff = patience.diff(isContentFingerprinted, shouldContentFingerprinted);
|
|
2188
|
+
// overwrite fingerprinted content with actual content
|
|
2189
|
+
for (let i = 0, adj = 0; i < cdiff.length; i++) {
|
|
2190
|
+
const cd = cdiff[i];
|
|
2191
|
+
cd.remove = isContent.slice(cd.index, cd.index + cd.remove.length);
|
|
2192
|
+
cd.insert = shouldContent.slice(cd.index + adj, cd.index + adj + cd.insert.length);
|
|
2193
|
+
adj += cd.remove.length - cd.insert.length;
|
|
2194
|
+
}
|
|
2195
|
+
for (let i = 0, lastIndex = 0; i < cdiff.length; i++) {
|
|
2196
|
+
const cd = cdiff[i];
|
|
2197
|
+
d.retain(cd.index - lastIndex);
|
|
2198
|
+
let cdii = 0;
|
|
2199
|
+
let cdri = 0;
|
|
2200
|
+
// try to match as much content as possible, preferring to skip over non-deltas
|
|
2201
|
+
for (; cdii < cd.insert.length && cdri < cd.remove.length;) {
|
|
2202
|
+
const a = cd.insert[cdii];
|
|
2203
|
+
const b = cd.remove[cdri];
|
|
2204
|
+
if ($deltaAny.check(a) && $deltaAny.check(b) && a.name === b.name) {
|
|
2205
|
+
d.modify(diff(a, b));
|
|
2206
|
+
cdii++;
|
|
2207
|
+
cdri++;
|
|
2208
|
+
} else if ($deltaAny.check(b)) {
|
|
2209
|
+
d.insert(schema.$string.check(a) ? a : [a]);
|
|
2210
|
+
cdii++;
|
|
2211
|
+
} else {
|
|
2212
|
+
d.delete(1);
|
|
2213
|
+
cdri++;
|
|
2214
|
+
}
|
|
2030
2215
|
}
|
|
2031
|
-
|
|
2216
|
+
for (; cdii < cd.insert.length; cdii++) {
|
|
2217
|
+
const a = cd.insert[cdii];
|
|
2218
|
+
d.insert(schema.$string.check(a) ? a : [a]);
|
|
2219
|
+
}
|
|
2220
|
+
d.delete(cd.remove.length - cdri);
|
|
2221
|
+
}
|
|
2032
2222
|
};
|
|
2033
|
-
diffAndApply(d, ops1.slice(change.index, change.index + change.remove.length), ops2.slice(change.index + currIndexOffset2, change.insert.length));
|
|
2223
|
+
diffAndApply(d, ops1.slice(change.index, change.index + change.remove.length), ops2.slice(change.index + currIndexOffset2, change.index + currIndexOffset2 + change.insert.length));
|
|
2034
2224
|
lastIndex1 = change.index + change.remove.length;
|
|
2035
2225
|
currIndexOffset2 += change.insert.length - change.remove.length;
|
|
2036
2226
|
}
|
|
2037
2227
|
for (const attr2 of d2.attrs) {
|
|
2038
2228
|
const attr1 = d1.attrs[attr2.key];
|
|
2039
2229
|
if (attr1 == null || (attr1.fingerprint !== attr2.fingerprint)) {
|
|
2230
|
+
/* c8 ignore else */
|
|
2040
2231
|
if ($insertOp.check(attr2)) {
|
|
2041
2232
|
d.set(attr2.key, attr2.value);
|
|
2042
2233
|
} else {
|
|
2234
|
+
/* c8 ignore next 2 */
|
|
2043
2235
|
error.unexpectedCase();
|
|
2044
2236
|
}
|
|
2045
2237
|
}
|
|
@@ -2050,9 +2242,11 @@ const diff = (d1, d2) => {
|
|
|
2050
2242
|
}
|
|
2051
2243
|
}
|
|
2052
2244
|
}
|
|
2053
|
-
return /** @type {D} */ (d.done())
|
|
2245
|
+
return /** @type {D} */ (d.done(false))
|
|
2054
2246
|
};
|
|
2055
2247
|
|
|
2248
|
+
exports.$$delta = $$delta;
|
|
2249
|
+
exports.$Delta = $Delta;
|
|
2056
2250
|
exports.$anyOp = $anyOp;
|
|
2057
2251
|
exports.$array = $array;
|
|
2058
2252
|
exports.$attribution = $attribution;
|
|
@@ -2079,6 +2273,7 @@ exports.InsertOp = InsertOp;
|
|
|
2079
2273
|
exports.ModifyOp = ModifyOp;
|
|
2080
2274
|
exports.RetainOp = RetainOp;
|
|
2081
2275
|
exports.TextOp = TextOp;
|
|
2276
|
+
exports._$delta = _$delta;
|
|
2082
2277
|
exports.array = array;
|
|
2083
2278
|
exports.clone = clone;
|
|
2084
2279
|
exports.create = create;
|
|
@@ -2086,5 +2281,6 @@ exports.diff = diff;
|
|
|
2086
2281
|
exports.map = map;
|
|
2087
2282
|
exports.mergeAttrs = mergeAttrs;
|
|
2088
2283
|
exports.mergeDeltas = mergeDeltas;
|
|
2284
|
+
exports.random = random;
|
|
2089
2285
|
exports.text = text;
|
|
2090
|
-
//# sourceMappingURL=
|
|
2286
|
+
//# sourceMappingURL=delta.cjs.map
|