lib0 0.2.115-4 → 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.
Files changed (235) hide show
  1. package/coverage/tmp/coverage-42121-1764767245409-0.json +1 -0
  2. package/coverage/tmp/{coverage-32703-1763495370274-0.json → coverage-42122-1764767192180-0.json} +1 -1
  3. package/delta/binding.d.ts +11 -9
  4. package/delta/binding.d.ts.map +1 -1
  5. package/delta/binding.js +5 -2
  6. package/delta/binding.test.d.ts.map +1 -1
  7. package/delta/delta-pitch.test.d.ts +5 -0
  8. package/delta/delta-pitch.test.d.ts.map +1 -0
  9. package/delta/{d2.d.ts → delta.d.ts} +117 -34
  10. package/delta/delta.d.ts.map +1 -0
  11. package/delta/{d2.js → delta.js} +244 -53
  12. package/delta/{d2.test.d.ts → delta.test.d.ts} +6 -1
  13. package/delta/delta.test.d.ts.map +1 -0
  14. package/delta/t3.test.d.ts +1 -1
  15. package/delta/t3.test.d.ts.map +1 -1
  16. package/dist/array.cjs +17 -60
  17. package/dist/array.cjs.map +1 -1
  18. package/dist/binding.cjs +114 -28
  19. package/dist/binding.cjs.map +1 -1
  20. package/dist/{broadcastchannel-d0c108a2.cjs → broadcastchannel-94897809.cjs} +2 -2
  21. package/dist/{broadcastchannel-d0c108a2.cjs.map → broadcastchannel-94897809.cjs.map} +1 -1
  22. package/dist/broadcastchannel.cjs +6 -6
  23. package/dist/{buffer-7f6fa8fa.cjs → buffer-8d110bf4.cjs} +2 -2
  24. package/dist/{buffer-7f6fa8fa.cjs.map → buffer-8d110bf4.cjs.map} +1 -1
  25. package/dist/buffer.cjs +5 -5
  26. package/dist/cache.cjs +3 -3
  27. package/dist/component.cjs +12 -8
  28. package/dist/component.cjs.map +1 -1
  29. package/dist/delta/binding.d.ts +11 -9
  30. package/dist/delta/binding.d.ts.map +1 -1
  31. package/dist/delta/binding.test.d.ts.map +1 -1
  32. package/dist/delta/delta-pitch.test.d.ts +5 -0
  33. package/dist/delta/delta-pitch.test.d.ts.map +1 -0
  34. package/dist/delta/{d2.d.ts → delta.d.ts} +117 -34
  35. package/dist/delta/delta.d.ts.map +1 -0
  36. package/dist/delta/{d2.test.d.ts → delta.test.d.ts} +6 -1
  37. package/dist/delta/delta.test.d.ts.map +1 -0
  38. package/dist/delta/t3.test.d.ts +1 -1
  39. package/dist/delta/t3.test.d.ts.map +1 -1
  40. package/dist/{d2.cjs → delta.cjs} +253 -58
  41. package/dist/delta.cjs.map +1 -0
  42. package/dist/{diff-1832cb43.cjs → diff-dc7bdc65.cjs} +2 -2
  43. package/dist/{diff-1832cb43.cjs.map → diff-dc7bdc65.cjs.map} +1 -1
  44. package/dist/diff.cjs +4 -4
  45. package/dist/{dom-f5047a64.cjs → dom-cad267af.cjs} +1 -1
  46. package/dist/{dom-f5047a64.cjs.map → dom-cad267af.cjs.map} +1 -1
  47. package/dist/dom.cjs +12 -5
  48. package/dist/dom.cjs.map +1 -1
  49. package/dist/{environment-90227ead.cjs → environment-98bcf64f.cjs} +2 -2
  50. package/dist/{environment-90227ead.cjs.map → environment-98bcf64f.cjs.map} +1 -1
  51. package/dist/environment.cjs +4 -4
  52. package/dist/equality.cjs +34 -0
  53. package/dist/equality.cjs.map +1 -0
  54. package/dist/fingerprint.cjs +44 -0
  55. package/dist/fingerprint.cjs.map +1 -0
  56. package/dist/{function-e7d18feb.cjs → function-b4e49016.cjs} +6 -6
  57. package/dist/function-b4e49016.cjs.map +1 -0
  58. package/dist/function.cjs +3 -3
  59. package/dist/index.cjs +9 -9
  60. package/dist/indexeddbV2.cjs +2 -2
  61. package/dist/jwt.cjs +5 -5
  62. package/dist/list.cjs +18 -5
  63. package/dist/list.cjs.map +1 -1
  64. package/dist/list.d.ts +9 -2
  65. package/dist/list.d.ts.map +1 -1
  66. package/dist/list.test.d.ts.map +1 -1
  67. package/dist/logging.cjs +11 -5
  68. package/dist/logging.cjs.map +1 -1
  69. package/dist/logging.common.cjs +4 -4
  70. package/dist/logging.node.cjs +4 -4
  71. package/dist/map.cjs +7 -314
  72. package/dist/map.cjs.map +1 -1
  73. package/dist/{object-18980796.cjs → object-dec41ef9.cjs} +3 -3
  74. package/dist/object-dec41ef9.cjs.map +1 -0
  75. package/dist/object.cjs +2 -2
  76. package/dist/object.d.ts.map +1 -1
  77. package/dist/performance.node.cjs +3 -3
  78. package/dist/pledge.cjs +2 -2
  79. package/dist/{prng-99204216.cjs → prng-aa81e812.cjs} +2 -2
  80. package/dist/{prng-99204216.cjs.map → prng-aa81e812.cjs.map} +1 -1
  81. package/dist/prng.cjs +6 -6
  82. package/dist/rabin-gf2-polynomial.cjs +5 -5
  83. package/dist/rabin-uncached.cjs +5 -5
  84. package/dist/rabin.cjs +5 -5
  85. package/dist/schema.cjs +202 -22
  86. package/dist/schema.cjs.map +1 -1
  87. package/dist/schema.d.ts +86 -29
  88. package/dist/schema.d.ts.map +1 -1
  89. package/dist/schema.test.d.ts +4 -0
  90. package/dist/schema.test.d.ts.map +1 -1
  91. package/dist/testing.cjs +9 -9
  92. package/dist/testing.cjs.map +1 -1
  93. package/dist/{traits.d.ts → trait/equality.d.ts} +1 -1
  94. package/dist/trait/equality.d.ts.map +1 -0
  95. package/dist/trait/fingerprint.d.ts +13 -0
  96. package/dist/trait/fingerprint.d.ts.map +1 -0
  97. package/dist/trait/traits.d.ts +3 -0
  98. package/dist/trait/traits.d.ts.map +1 -0
  99. package/dist/trait/traits.test.d.ts +5 -0
  100. package/dist/trait/traits.test.d.ts.map +1 -0
  101. package/dist/traits.cjs +23 -26
  102. package/dist/traits.cjs.map +1 -1
  103. package/dist/url.cjs +2 -2
  104. package/function.js +4 -4
  105. package/list.d.ts +9 -2
  106. package/list.d.ts.map +1 -1
  107. package/list.js +17 -3
  108. package/list.test.d.ts.map +1 -1
  109. package/object.d.ts.map +1 -1
  110. package/object.js +2 -2
  111. package/package.json +8 -10
  112. package/schema.d.ts +86 -29
  113. package/schema.d.ts.map +1 -1
  114. package/schema.js +191 -20
  115. package/schema.test.d.ts +4 -0
  116. package/schema.test.d.ts.map +1 -1
  117. package/test.html +2 -4
  118. package/test.js +7 -13
  119. package/testing.js +3 -3
  120. package/{traits.d.ts → trait/equality.d.ts} +1 -1
  121. package/trait/equality.d.ts.map +1 -0
  122. package/trait/fingerprint.d.ts +13 -0
  123. package/trait/fingerprint.d.ts.map +1 -0
  124. package/trait/fingerprint.js +21 -0
  125. package/trait/traits.d.ts +3 -0
  126. package/trait/traits.d.ts.map +1 -0
  127. package/trait/traits.js +2 -0
  128. package/trait/traits.test.d.ts +5 -0
  129. package/{traits.test.d.ts.map → trait/traits.test.d.ts.map} +1 -1
  130. package/delta/abstract-array.d.ts +0 -166
  131. package/delta/abstract-array.d.ts.map +0 -1
  132. package/delta/abstract-array.js +0 -421
  133. package/delta/abstract.d.ts +0 -69
  134. package/delta/abstract.d.ts.map +0 -1
  135. package/delta/abstract.js +0 -102
  136. package/delta/array.d.ts +0 -23
  137. package/delta/array.d.ts.map +0 -1
  138. package/delta/array.js +0 -45
  139. package/delta/array.test.d.ts +0 -2
  140. package/delta/array.test.d.ts.map +0 -1
  141. package/delta/d2.d.ts.map +0 -1
  142. package/delta/d2.test.d.ts.map +0 -1
  143. package/delta/index.d.ts +0 -14
  144. package/delta/index.d.ts.map +0 -1
  145. package/delta/index.js +0 -79
  146. package/delta/map.d.ts +0 -226
  147. package/delta/map.d.ts.map +0 -1
  148. package/delta/map.js +0 -304
  149. package/delta/node.d.ts +0 -117
  150. package/delta/node.d.ts.map +0 -1
  151. package/delta/node.js +0 -183
  152. package/delta/node.test.d.ts +0 -4
  153. package/delta/node.test.d.ts.map +0 -1
  154. package/delta/ops.d.ts +0 -464
  155. package/delta/ops.d.ts.map +0 -1
  156. package/delta/ops.js +0 -544
  157. package/delta/t2.d.ts +0 -184
  158. package/delta/t2.d.ts.map +0 -1
  159. package/delta/t2.js +0 -890
  160. package/delta/text.d.ts +0 -43
  161. package/delta/text.d.ts.map +0 -1
  162. package/delta/text.js +0 -54
  163. package/delta/text.test.d.ts +0 -6
  164. package/delta/text.test.d.ts.map +0 -1
  165. package/delta/transformer.d.ts +0 -164
  166. package/delta/transformer.d.ts.map +0 -1
  167. package/delta/transformer.js +0 -888
  168. package/delta/transformer.test.d.ts +0 -13
  169. package/delta/transformer.test.d.ts.map +0 -1
  170. package/delta/value.d.ts +0 -84
  171. package/delta/value.d.ts.map +0 -1
  172. package/delta/value.js +0 -168
  173. package/dist/abstract-array.cjs +0 -433
  174. package/dist/abstract-array.cjs.map +0 -1
  175. package/dist/abstract.cjs +0 -122
  176. package/dist/abstract.cjs.map +0 -1
  177. package/dist/array2.cjs +0 -26
  178. package/dist/array2.cjs.map +0 -1
  179. package/dist/d2.cjs.map +0 -1
  180. package/dist/delta/abstract-array.d.ts +0 -166
  181. package/dist/delta/abstract-array.d.ts.map +0 -1
  182. package/dist/delta/abstract.d.ts +0 -69
  183. package/dist/delta/abstract.d.ts.map +0 -1
  184. package/dist/delta/array.d.ts +0 -23
  185. package/dist/delta/array.d.ts.map +0 -1
  186. package/dist/delta/array.test.d.ts +0 -2
  187. package/dist/delta/array.test.d.ts.map +0 -1
  188. package/dist/delta/d2.d.ts.map +0 -1
  189. package/dist/delta/d2.test.d.ts.map +0 -1
  190. package/dist/delta/index.d.ts +0 -14
  191. package/dist/delta/index.d.ts.map +0 -1
  192. package/dist/delta/map.d.ts +0 -226
  193. package/dist/delta/map.d.ts.map +0 -1
  194. package/dist/delta/node.d.ts +0 -117
  195. package/dist/delta/node.d.ts.map +0 -1
  196. package/dist/delta/node.test.d.ts +0 -4
  197. package/dist/delta/node.test.d.ts.map +0 -1
  198. package/dist/delta/ops.d.ts +0 -464
  199. package/dist/delta/ops.d.ts.map +0 -1
  200. package/dist/delta/t2.d.ts +0 -184
  201. package/dist/delta/t2.d.ts.map +0 -1
  202. package/dist/delta/text.d.ts +0 -43
  203. package/dist/delta/text.d.ts.map +0 -1
  204. package/dist/delta/text.test.d.ts +0 -6
  205. package/dist/delta/text.test.d.ts.map +0 -1
  206. package/dist/delta/transformer.d.ts +0 -164
  207. package/dist/delta/transformer.d.ts.map +0 -1
  208. package/dist/delta/transformer.test.d.ts +0 -13
  209. package/dist/delta/transformer.test.d.ts.map +0 -1
  210. package/dist/delta/value.d.ts +0 -84
  211. package/dist/delta/value.d.ts.map +0 -1
  212. package/dist/function-e7d18feb.cjs.map +0 -1
  213. package/dist/index2.cjs +0 -71
  214. package/dist/index2.cjs.map +0 -1
  215. package/dist/map2.cjs +0 -15
  216. package/dist/map2.cjs.map +0 -1
  217. package/dist/node.cjs +0 -206
  218. package/dist/node.cjs.map +0 -1
  219. package/dist/object-18980796.cjs.map +0 -1
  220. package/dist/ops.cjs +0 -575
  221. package/dist/ops.cjs.map +0 -1
  222. package/dist/t2.cjs +0 -932
  223. package/dist/t2.cjs.map +0 -1
  224. package/dist/text.cjs +0 -79
  225. package/dist/text.cjs.map +0 -1
  226. package/dist/traits.d.ts.map +0 -1
  227. package/dist/traits.test.d.ts +0 -4
  228. package/dist/traits.test.d.ts.map +0 -1
  229. package/dist/transformer.cjs +0 -930
  230. package/dist/transformer.cjs.map +0 -1
  231. package/dist/value.cjs +0 -187
  232. package/dist/value.cjs.map +0 -1
  233. package/traits.d.ts.map +0 -1
  234. package/traits.test.d.ts +0 -4
  235. /package/{traits.js → trait/equality.js} +0 -0
@@ -10,7 +10,8 @@
10
10
 
11
11
  import * as list from '../list.js'
12
12
  import * as object from '../object.js'
13
- import * as traits from '../traits.js'
13
+ import * as equalityTrait from '../trait/equality.js'
14
+ import * as fingerprintTrait from '../trait/fingerprint.js'
14
15
  import * as arr from '../array.js'
15
16
  import * as fun from '../function.js'
16
17
  import * as s from '../schema.js'
@@ -20,6 +21,7 @@ import * as rabin from '../hash/rabin.js'
20
21
  import * as encoding from '../encoding.js'
21
22
  import * as buffer from '../buffer.js'
22
23
  import * as patience from '../diff/patience.js'
24
+ import * as prng from '../prng.js'
23
25
 
24
26
  /**
25
27
  * @typedef {{
@@ -103,10 +105,6 @@ const _cloneAttrs = attrs => attrs == null ? attrs : { ...attrs }
103
105
  */
104
106
  const _markMaybeDeltaAsDone = maybeDelta => $deltaAny.check(maybeDelta) ? /** @type {MaybeDelta} */ (maybeDelta.done()) : maybeDelta
105
107
 
106
- /**
107
- * @typedef {unknown & DeltaAny} Q
108
- */
109
-
110
108
  export class TextOp extends list.ListNode {
111
109
  /**
112
110
  * @param {string} insert
@@ -185,7 +183,7 @@ export class TextOp extends list.ListNode {
185
183
  /**
186
184
  * @param {TextOp} other
187
185
  */
188
- [traits.EqualityTraitSymbol] (other) {
186
+ [equalityTrait.EqualityTraitSymbol] (other) {
189
187
  return fun.equalityDeep(this.insert, other.insert) && fun.equalityDeep(this.format, other.format) && fun.equalityDeep(this.attribution, other.attribution)
190
188
  }
191
189
 
@@ -198,7 +196,7 @@ export class TextOp extends list.ListNode {
198
196
  }
199
197
 
200
198
  /**
201
- * @template {encoding.AnyEncodable|DeltaAny} ArrayContent
199
+ * @template {fingerprintTrait.Fingerprintable} ArrayContent
202
200
  */
203
201
  export class InsertOp extends list.ListNode {
204
202
  /**
@@ -273,13 +271,7 @@ export class InsertOp extends list.ListNode {
273
271
  encoding.writeVarUint(encoder, 1) // insertOp type: 1
274
272
  encoding.writeVarUint(encoder, this.insert.length)
275
273
  this.insert.forEach(ins => {
276
- if ($deltaAny.check(ins)) {
277
- encoding.writeUint8(encoder, 0)
278
- encoding.writeVarString(encoder, ins.fingerprint)
279
- } else {
280
- encoding.writeUint8(encoder, 1)
281
- encoding.writeAny(encoder, ins)
282
- }
274
+ encoding.writeVarString(encoder, fingerprintTrait.fingerprint(ins))
283
275
  })
284
276
  encoding.writeAny(encoder, this.format)
285
277
  })))
@@ -308,7 +300,7 @@ export class InsertOp extends list.ListNode {
308
300
  /**
309
301
  * @param {InsertOp<ArrayContent>} other
310
302
  */
311
- [traits.EqualityTraitSymbol] (other) {
303
+ [equalityTrait.EqualityTraitSymbol] (other) {
312
304
  return fun.equalityDeep(this.insert, other.insert) && fun.equalityDeep(this.format, other.format) && fun.equalityDeep(this.attribution, other.attribution)
313
305
  }
314
306
 
@@ -321,7 +313,7 @@ export class InsertOp extends list.ListNode {
321
313
  }
322
314
 
323
315
  /**
324
- * @template {encoding.AnyEncodable|DeltaAny} [Children=never]
316
+ * @template {fingerprintTrait.Fingerprintable} [Children=never]
325
317
  * @template {string} [Text=never]
326
318
  */
327
319
  export class DeleteOp extends list.ListNode {
@@ -382,7 +374,7 @@ export class DeleteOp extends list.ListNode {
382
374
  /**
383
375
  * @param {DeleteOp} other
384
376
  */
385
- [traits.EqualityTraitSymbol] (other) {
377
+ [equalityTrait.EqualityTraitSymbol] (other) {
386
378
  return this.delete === other.delete
387
379
  }
388
380
 
@@ -463,7 +455,7 @@ export class RetainOp extends list.ListNode {
463
455
  /**
464
456
  * @param {RetainOp} other
465
457
  */
466
- [traits.EqualityTraitSymbol] (other) {
458
+ [equalityTrait.EqualityTraitSymbol] (other) {
467
459
  return this.retain === other.retain && fun.equalityDeep(this.format, other.format) && fun.equalityDeep(this.attribution, other.attribution)
468
460
  }
469
461
 
@@ -563,8 +555,8 @@ export class ModifyOp extends list.ListNode {
563
555
  /**
564
556
  * @param {ModifyOp<any>} other
565
557
  */
566
- [traits.EqualityTraitSymbol] (other) {
567
- return this.value[traits.EqualityTraitSymbol](other.value) && fun.equalityDeep(this.format, other.format) && fun.equalityDeep(this.attribution, other.attribution)
558
+ [equalityTrait.EqualityTraitSymbol] (other) {
559
+ return this.value[equalityTrait.EqualityTraitSymbol](other.value) && fun.equalityDeep(this.format, other.format) && fun.equalityDeep(this.attribution, other.attribution)
568
560
  }
569
561
 
570
562
  /**
@@ -576,7 +568,7 @@ export class ModifyOp extends list.ListNode {
576
568
  }
577
569
 
578
570
  /**
579
- * @template {encoding.AnyEncodable|DeltaAny} V
571
+ * @template {fingerprintTrait.Fingerprintable} V
580
572
  * @template {string|number} [K=any]
581
573
  */
582
574
  export class AttrInsertOp {
@@ -661,7 +653,7 @@ export class AttrInsertOp {
661
653
  /**
662
654
  * @param {AttrInsertOp<V>} other
663
655
  */
664
- [traits.EqualityTraitSymbol] (other) {
656
+ [equalityTrait.EqualityTraitSymbol] (other) {
665
657
  return this.key === other.key && fun.equalityDeep(this.value, other.value) && fun.equalityDeep(this.attribution, other.attribution)
666
658
  }
667
659
 
@@ -726,7 +718,7 @@ export class AttrDeleteOp {
726
718
  /**
727
719
  * @param {AttrDeleteOp<V>} other
728
720
  */
729
- [traits.EqualityTraitSymbol] (other) {
721
+ [equalityTrait.EqualityTraitSymbol] (other) {
730
722
  return this.key === other.key && fun.equalityDeep(this.attribution, other.attribution)
731
723
  }
732
724
 
@@ -800,8 +792,8 @@ export class AttrModifyOp {
800
792
  /**
801
793
  * @param {AttrModifyOp<Modifier>} other
802
794
  */
803
- [traits.EqualityTraitSymbol] (other) {
804
- return this.key === other.key && this.value[traits.EqualityTraitSymbol](other.value)
795
+ [equalityTrait.EqualityTraitSymbol] (other) {
796
+ return this.key === other.key && this.value[equalityTrait.EqualityTraitSymbol](other.value)
805
797
  }
806
798
 
807
799
  /**
@@ -823,7 +815,7 @@ export const $deleteOp = s.$custom(o => o != null && (o.constructor === DeleteOp
823
815
  export const $insertOp = s.$custom(o => o != null && (o.constructor === AttrInsertOp || o.constructor === InsertOp))
824
816
 
825
817
  /**
826
- * @template {encoding.AnyEncodable|DeltaAny} Content
818
+ * @template {fingerprintTrait.Fingerprintable} Content
827
819
  * @param {s.Schema<Content>} $content
828
820
  * @return {s.Schema<AttrInsertOp<Content> | InsertOp<Content>>}
829
821
  */
@@ -904,8 +896,8 @@ export const $anyOp = s.$union($insertOp, $deleteOp, $textOp, $modifyOp)
904
896
  /**
905
897
  * @template {string} [NodeName=any]
906
898
  * @template {{[k:string|number]:any}} [Attrs={}]
907
- * @template {encoding.AnyEncodable|DeltaAny|never} [Children=never]
908
- * @template {string|never} [Text=never]
899
+ * @template {fingerprintTrait.Fingerprintable} [Children=never]
900
+ * @template {string} [Text=never]
909
901
  * @template {s.Schema<Delta<any,any,any,any,any>>|null} [Schema=any]
910
902
  */
911
903
  export class Delta {
@@ -956,6 +948,7 @@ export class Delta {
956
948
  */
957
949
  get fingerprint () {
958
950
  return this._fingerprint || (this._fingerprint = buffer.toBase64(encoding.encode(encoder => {
951
+ encoding.writeUint32(encoder, 0xf2ae5680) // "magic number" that ensures that different types of content don't yield the same fingerprint
959
952
  encoding.writeAny(encoder, this.name)
960
953
  /**
961
954
  * @type {Array<number|string>}
@@ -985,6 +978,10 @@ export class Delta {
985
978
  })))
986
979
  }
987
980
 
981
+ [fingerprintTrait.FingerprintTraitSymbol] () {
982
+ return this.fingerprint
983
+ }
984
+
988
985
  isEmpty () {
989
986
  return object.isEmpty(this.attrs) && list.isEmpty(this.children)
990
987
  }
@@ -1021,14 +1018,14 @@ export class Delta {
1021
1018
  * @return {boolean}
1022
1019
  */
1023
1020
  equals (other) {
1024
- return this[traits.EqualityTraitSymbol](other)
1021
+ return this[equalityTrait.EqualityTraitSymbol](other)
1025
1022
  }
1026
1023
 
1027
1024
  /**
1028
1025
  * @param {any} other
1029
1026
  * @return {boolean}
1030
1027
  */
1031
- [traits.EqualityTraitSymbol] (other) {
1028
+ [equalityTrait.EqualityTraitSymbol] (other) {
1032
1029
  // @todo it is only necessary to compare finrerprints OR do a deep equality check (remove
1033
1030
  // childCnt as well)
1034
1031
  return this.name === other.name && fun.equalityDeep(this.attrs, other.attrs) && fun.equalityDeep(this.children, other.children) && this.childCnt === other.childCnt
@@ -1158,8 +1155,8 @@ const modDeltaCheck = d => {
1158
1155
  /**
1159
1156
  * @template {string} [NodeName=any]
1160
1157
  * @template {{[key:string|number]:any}} [Attrs={}]
1161
- * @template {encoding.AnyEncodable|DeltaAny|never} [Children=never]
1162
- * @template {string|never} [Text=never]
1158
+ * @template {fingerprintTrait.Fingerprintable} [Children=never]
1159
+ * @template {string} [Text=never]
1163
1160
  * @template {s.Schema<Delta<any,any,any,any,any>>|null} [Schema=any]
1164
1161
  * @extends {Delta<NodeName,Attrs,Children,Text,Schema>}
1165
1162
  */
@@ -1423,7 +1420,7 @@ export class DeltaBuilder extends Delta {
1423
1420
  modDeltaCheck(this)
1424
1421
  this.$schema?.expect(other)
1425
1422
  // apply attrs
1426
- for (let op of other.attrs) {
1423
+ for (const op of other.attrs) {
1427
1424
  const c = /** @type {AttrInsertOp<any,any>|AttrDeleteOp<any>|AttrModifyOp<any,any>} */ (this.attrs[op.key])
1428
1425
  if ($modifyOp.check(op)) {
1429
1426
  if ($deltaAny.check(c?.value)) {
@@ -1433,12 +1430,14 @@ export class DeltaBuilder extends Delta {
1433
1430
  // @ts-ignore
1434
1431
  this.attrs[op.key] = op.clone()
1435
1432
  }
1436
- } else {
1437
- op = /** @type {any} */ (op.clone())
1433
+ } else if ($insertOp.check(op)) {
1438
1434
  // @ts-ignore
1439
1435
  op.prevValue = c?.value
1440
1436
  // @ts-ignore
1441
- this.attrs[op.key] = op
1437
+ this.attrs[op.key] = op.clone()
1438
+ } else if ($deleteOp.check(op)) {
1439
+ op.prevValue = c?.value
1440
+ delete this.attrs[op.key]
1442
1441
  }
1443
1442
  }
1444
1443
  // apply children
@@ -1520,6 +1519,7 @@ export class DeltaBuilder extends Delta {
1520
1519
  offset = 0
1521
1520
  scheduleForMerge(opsI.next)
1522
1521
  list.remove(this.children, opsI)
1522
+ opsI = opsI.next
1523
1523
  } else if (offset === 0) {
1524
1524
  // case 2
1525
1525
  offset = 0
@@ -1734,17 +1734,135 @@ export class DeltaBuilder extends Delta {
1734
1734
  console.info('method rebaseOnInverse unimplemented')
1735
1735
  return this
1736
1736
  }
1737
+
1738
+ /**
1739
+ * Append child ops from one op to the other.
1740
+ *
1741
+ * delta.create().insert('a').append(delta.create().insert('b')) // => insert "ab"
1742
+ *
1743
+ * @template {DeltaAny} OtherDelta
1744
+ * @param {OtherDelta} other
1745
+ * @return {CastToDelta<OtherDelta> extends Delta<any,any,infer OtherChildren,infer OtherText,any> ? DeltaBuilder<NodeName,Attrs,Children|OtherChildren,Text|OtherText,Schema> : never}
1746
+ */
1747
+ append (other) {
1748
+ // @todo Investigate. Above is a typescript issue. It is necessary to cast OtherDelta to a Delta first before
1749
+ // inferring type, otherwise Children will contain Text.
1750
+ for (const child of other.children) {
1751
+ list.pushEnd(this.children, child.clone())
1752
+ }
1753
+ // @ts-ignore
1754
+ return this
1755
+ }
1737
1756
  }
1738
1757
 
1758
+ /**
1759
+ * @template {DeltaAny} D
1760
+ * @typedef {D extends DeltaBuilder<infer N,infer Attrs,infer Children,infer Text,infer Schema> ? Delta<N,Attrs,Children,Text,Schema> : D} CastToDelta
1761
+ */
1762
+
1739
1763
  /**
1740
1764
  * @template {string} NodeName
1741
1765
  * @template {{ [key: string|number]: any }} [Attrs={}]
1742
- * @template {encoding.AnyEncodable|DeltaAny|never} [Children=never]
1766
+ * @template {fingerprintTrait.Fingerprintable|never} [Children=never]
1743
1767
  * @template {string|never} [Text=never]
1744
1768
  * @typedef {Delta<NodeName,Attrs,Children|Delta<NodeName,Attrs,Children,Text>|RecursiveDelta<NodeName,Attrs,Children,Text>,Text>} RecursiveDelta
1745
1769
  */
1746
1770
 
1747
1771
  /**
1772
+ * @template {string} Name
1773
+ * @template {{[k:string|number]:any}} Attrs
1774
+ * @template {fingerprintTrait.Fingerprintable} Children
1775
+ * @template {boolean} HasText
1776
+ * @template {{ [k:string]:any }} Formats
1777
+ * @template {boolean} Recursive
1778
+ * @extends {s.Schema<Delta<
1779
+ * Name,
1780
+ * Attrs,
1781
+ * Children|(Recursive extends true ? RecursiveDelta<Name,Attrs,Children,HasText extends true ? string : never> : never),
1782
+ * HasText extends true ? string : never,
1783
+ * any>>}
1784
+ */
1785
+ export class $Delta extends s.Schema {
1786
+ /**
1787
+ * @param {s.Schema<Name>} $name
1788
+ * @param {s.Schema<Attrs>} $attrs
1789
+ * @param {s.Schema<Children>} $children
1790
+ * @param {HasText} hasText
1791
+ * @param {s.Schema<Formats>} $formats
1792
+ * @param {Recursive} recursive
1793
+ */
1794
+ constructor ($name, $attrs, $children, hasText, $formats, recursive) {
1795
+ super()
1796
+ const $attrsPartial = s.$$object.check($attrs) ? $attrs.partial : $attrs
1797
+ if (recursive) {
1798
+ // @ts-ignore
1799
+ $children = s.$union($children, this)
1800
+ }
1801
+ this.shape = { $name, $attrs: $attrsPartial, $children, hasText, $formats }
1802
+ }
1803
+
1804
+ /**
1805
+ * @param {any} o
1806
+ * @param {s.ValidationError} [err]
1807
+ * @return {o is Delta<
1808
+ * Name,
1809
+ * Attrs,
1810
+ * Children|(Recursive extends true ? RecursiveDelta<Name,Attrs,Children,HasText extends true ? string : never> : never),
1811
+ * HasText extends true ? string : never,
1812
+ * any>}
1813
+ */
1814
+ check (o, err = undefined) {
1815
+ const { $name, $attrs, $children, hasText, $formats } = this.shape
1816
+ if (!(o instanceof Delta)) {
1817
+ err?.extend(null, 'Delta', o?.constructor.name, 'Constructor match failed')
1818
+ } else if (!$name.check(o.name, err)) {
1819
+ err?.extend('Delta.name', $name.toString(), o.name, 'Constructor match failed')
1820
+ } 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))))) {
1821
+ err?.extend('Delta.children', '', '', 'Children don\'t match the schema')
1822
+ } else if (object.some(o.attrs, (op, k) => $insertOp.check(op) && !$attrs.check({ [k]: op.value }, err))) {
1823
+ err?.extend('Delta.attrs', '', '', 'Attrs don\'t match the schema')
1824
+ } else {
1825
+ return true
1826
+ }
1827
+ return false
1828
+ }
1829
+ }
1830
+
1831
+ /**
1832
+ * @template {s.Schema<string>|string|Array<string>} [NodeNameSchema=s.Schema<any>]
1833
+ * @template {s.Schema<{ [key: string|number]: any }>|{ [key:string|number]:any }} [AttrsSchema=s.Schema<{}>]
1834
+ * @template {any} [ChildrenSchema=s.Schema<never>]
1835
+ * @template {boolean} [HasText=false]
1836
+ * @template {boolean} [Recursive=false]
1837
+ * @template {{ [k:string]:any }} [Formats={[k:string]:any}]
1838
+ * @param {object} opts
1839
+ * @param {NodeNameSchema?} [opts.name]
1840
+ * @param {AttrsSchema?} [opts.attrs] What key-value pairs are included.
1841
+ * @param {ChildrenSchema?} [opts.children] The type of content in `insertOp`
1842
+ * @param {HasText} [opts.text] Whether this delta contains text using `textOp`
1843
+ * @param {Formats} [opts.formats]
1844
+ * @param {Recursive} [opts.recursive]
1845
+ * @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<
1846
+ * NodeName,
1847
+ * Attrs,
1848
+ * Children|(Recursive extends true ? RecursiveDelta<NodeName,Attrs,Children,HasText extends true ? string : never> : never),
1849
+ * HasText extends true ? string : never
1850
+ * >> : never}
1851
+ */
1852
+ export const $delta = ({ name, attrs, children, text, formats, recursive }) => /** @type {any} */ (new $Delta(
1853
+ name == null ? s.$any : s.$(name),
1854
+ /** @type {any} */ (attrs == null ? s.$object({}) : s.$(attrs)),
1855
+ /** @type {any} */ (children == null ? s.$never : s.$(children)),
1856
+ text ?? false,
1857
+ formats == null ? s.$any : s.$(formats),
1858
+ recursive ?? false
1859
+ ))
1860
+
1861
+ export const $$delta = s.$constructedBy($Delta)
1862
+
1863
+ /**
1864
+ * @todo remove this
1865
+ *
1748
1866
  * @template {s.Schema<string>|string|Array<string>} [NodeNameSchema=s.Schema<any>]
1749
1867
  * @template {s.Schema<{ [key: string|number]: any }>|{ [key:string|number]:any }} [AttrsSchema=s.Schema<{}>]
1750
1868
  * @template {any} [ChildrenSchema=s.Schema<never>]
@@ -1763,7 +1881,7 @@ export class DeltaBuilder extends Delta {
1763
1881
  * HasText extends true ? string : never
1764
1882
  * >> : never}
1765
1883
  */
1766
- export const $delta = ({ name, attrs, children, text, recursive }) => {
1884
+ export const _$delta = ({ name, attrs, children, text, recursive }) => {
1767
1885
  /**
1768
1886
  * @type {s.Schema<Array<any>>}
1769
1887
  */
@@ -1819,6 +1937,35 @@ export const mergeDeltas = (a, b) => {
1819
1937
  return a == null ? b : (a || null)
1820
1938
  }
1821
1939
 
1940
+ /**
1941
+ * @template {DeltaAny} D
1942
+ * @param {prng.PRNG} gen
1943
+ * @param {s.Schema<D>} $d
1944
+ * @return {D extends Delta<infer NodeName,infer Attrs,infer Children,infer Text,infer Schema> ? DeltaBuilder<NodeName,Attrs,Children,Text,Schema> : never}
1945
+ */
1946
+ export const random = (gen, $d) => {
1947
+ const { $name, $attrs, $children, hasText, $formats: $formats_ } = /** @type {$Delta<any,any,any,boolean,any,any>} */ (/** @type {any} */ ($d)).shape
1948
+ const d = s.$$any.check($name) ? create($deltaAny) : create(s.random(gen, $name), $deltaAny)
1949
+ const $formats = s.$$any.check($formats_) ? s.$null : $formats_
1950
+ prng.bool(gen) && d.setMany(s.random(gen, $attrs))
1951
+ for (let i = prng.uint32(gen, 0, 5); i > 0; i--) {
1952
+ if (hasText && prng.bool(gen)) {
1953
+ d.insert(prng.word(gen), s.random(gen, $formats))
1954
+ } else if (!s.$$never.check($children)) {
1955
+ /**
1956
+ * @type {Array<any>}
1957
+ */
1958
+ const ins = []
1959
+ let insN = prng.int32(gen, 0, 5)
1960
+ while (insN--) {
1961
+ ins.push(s.random(gen, $children))
1962
+ }
1963
+ d.insert(ins, s.random(gen, $formats))
1964
+ }
1965
+ }
1966
+ return /** @type {any} */ (d)
1967
+ }
1968
+
1822
1969
  /**
1823
1970
  * @overload
1824
1971
  * @return {DeltaBuilder<any,{},never,never,null>}
@@ -1879,12 +2026,12 @@ export const create = (nodeNameOrSchema, attrsOrSchema, children) => {
1879
2026
  // DELTA TEXT
1880
2027
 
1881
2028
  /**
1882
- * @template {encoding.AnyEncodable|DeltaAny} [Embeds=never]
2029
+ * @template {fingerprintTrait.Fingerprintable} [Embeds=never]
1883
2030
  * @typedef {Delta<any,{},Embeds,string>} TextDelta
1884
2031
  */
1885
2032
 
1886
2033
  /**
1887
- * @template {encoding.AnyEncodable|DeltaAny} [Embeds=never]
2034
+ * @template {fingerprintTrait.Fingerprintable} [Embeds=never]
1888
2035
  * @typedef {DeltaBuilder<any,{},Embeds,string>} TextDeltaBuilder
1889
2036
  */
1890
2037
 
@@ -1904,12 +2051,12 @@ export const $textOnly = $text()
1904
2051
  export const text = $schema => /** @type {any} */ (create($schema || $textOnly))
1905
2052
 
1906
2053
  /**
1907
- * @template {encoding.AnyEncodable|DeltaAny} Children
2054
+ * @template {fingerprintTrait.Fingerprintable} Children
1908
2055
  * @typedef {Delta<any,{},Children,never>} ArrayDelta
1909
2056
  */
1910
2057
 
1911
2058
  /**
1912
- * @template {encoding.AnyEncodable|DeltaAny} Children
2059
+ * @template {fingerprintTrait.Fingerprintable} Children
1913
2060
  * @typedef {DeltaBuilder<any,{},Children,never>} ArrayDeltaBuilder
1914
2061
  */
1915
2062
 
@@ -2009,29 +2156,73 @@ export const diff = (d1, d2) => {
2009
2156
  * @param {DeltaBuilderAny} d
2010
2157
  * @param {ChildrenOpAny[]} opsIs
2011
2158
  * @param {ChildrenOpAny[]} opsShould
2012
- *
2013
2159
  */
2014
2160
  const diffAndApply = (d, opsIs, opsShould) => {
2015
- // naive implementation
2016
- d.delete(opsIs.reduce((currLen, op) => currLen + op.length, 0))
2017
- opsShould.forEach(newIns => {
2018
- if ($insertOp.check(newIns) || $textOp.check(newIns)) {
2019
- d.insert(newIns.insert)
2020
- } else {
2021
- error.unexpectedCase()
2161
+ // @todo unoptimized implementation. Convert content to array and diff that based on
2162
+ // generated fingerprints. We probably could do better and cache more information.
2163
+ // - benchmark
2164
+ // - cache fingerprints in ops
2165
+ /**
2166
+ * @type {Array<string|DeltaAny|fingerprintTrait.Fingerprintable>}
2167
+ */
2168
+ const isContent = opsIs.flatMap(op => $insertOp.check(op) ? op.insert : ($textOp.check(op) ? op.insert.split('') : error.unexpectedCase()))
2169
+ /**
2170
+ * @type {Array<string|DeltaAny|fingerprintTrait.Fingerprintable>}
2171
+ */
2172
+ const shouldContent = opsShould.flatMap(op => $insertOp.check(op) ? op.insert : ($textOp.check(op) ? op.insert.split('') : error.unexpectedCase()))
2173
+ const isContentFingerprinted = isContent.map(c => s.$string.check(c) ? c : fingerprintTrait.fingerprint(c))
2174
+ const shouldContentFingerprinted = shouldContent.map(c => s.$string.check(c) ? c : fingerprintTrait.fingerprint(c))
2175
+ /**
2176
+ * @type {{ index: number, insert: Array<string|DeltaAny|fingerprintTrait.Fingerprintable>, remove: Array<string|DeltaAny|fingerprintTrait.Fingerprintable> }[]}
2177
+ */
2178
+ const cdiff = patience.diff(isContentFingerprinted, shouldContentFingerprinted)
2179
+ // overwrite fingerprinted content with actual content
2180
+ for (let i = 0, adj = 0; i < cdiff.length; i++) {
2181
+ const cd = cdiff[i]
2182
+ cd.remove = isContent.slice(cd.index, cd.index + cd.remove.length)
2183
+ cd.insert = shouldContent.slice(cd.index + adj, cd.index + adj + cd.insert.length)
2184
+ adj += cd.remove.length - cd.insert.length
2185
+ }
2186
+ for (let i = 0, lastIndex = 0; i < cdiff.length; i++) {
2187
+ const cd = cdiff[i]
2188
+ d.retain(cd.index - lastIndex)
2189
+ let cdii = 0
2190
+ let cdri = 0
2191
+ // try to match as much content as possible, preferring to skip over non-deltas
2192
+ for (; cdii < cd.insert.length && cdri < cd.remove.length;) {
2193
+ const a = cd.insert[cdii]
2194
+ const b = cd.remove[cdri]
2195
+ if ($deltaAny.check(a) && $deltaAny.check(b) && a.name === b.name) {
2196
+ d.modify(diff(a, b))
2197
+ cdii++
2198
+ cdri++
2199
+ } else if ($deltaAny.check(b)) {
2200
+ d.insert(s.$string.check(a) ? a : [a])
2201
+ cdii++
2202
+ } else {
2203
+ d.delete(1)
2204
+ cdri++
2205
+ }
2022
2206
  }
2023
- })
2207
+ for (; cdii < cd.insert.length; cdii++) {
2208
+ const a = cd.insert[cdii]
2209
+ d.insert(s.$string.check(a) ? a : [a])
2210
+ }
2211
+ d.delete(cd.remove.length - cdri)
2212
+ }
2024
2213
  }
2025
- diffAndApply(d, ops1.slice(change.index, change.index + change.remove.length), ops2.slice(change.index + currIndexOffset2, change.insert.length))
2214
+ diffAndApply(d, ops1.slice(change.index, change.index + change.remove.length), ops2.slice(change.index + currIndexOffset2, change.index + currIndexOffset2 + change.insert.length))
2026
2215
  lastIndex1 = change.index + change.remove.length
2027
2216
  currIndexOffset2 += change.insert.length - change.remove.length
2028
2217
  }
2029
2218
  for (const attr2 of d2.attrs) {
2030
2219
  const attr1 = d1.attrs[attr2.key]
2031
2220
  if (attr1 == null || (attr1.fingerprint !== attr2.fingerprint)) {
2221
+ /* c8 ignore else */
2032
2222
  if ($insertOp.check(attr2)) {
2033
2223
  d.set(attr2.key, attr2.value)
2034
2224
  } else {
2225
+ /* c8 ignore next 2 */
2035
2226
  error.unexpectedCase()
2036
2227
  }
2037
2228
  }
@@ -2042,5 +2233,5 @@ export const diff = (d1, d2) => {
2042
2233
  }
2043
2234
  }
2044
2235
  }
2045
- return /** @type {D} */ (d.done())
2236
+ return /** @type {D} */ (d.done(false))
2046
2237
  }
@@ -1,6 +1,7 @@
1
1
  export function testDeltaBasicApi(_tc: t.TestCase): void;
2
2
  export function testDeltaValues(_tc: t.TestCase): void;
3
3
  export function testDeltaBasicCases(): void;
4
+ export function testDeltaArrayBasics(): void;
4
5
  export function testAssignability(): void;
5
6
  export function testText(): void;
6
7
  export function testDelta(_tc: t.TestCase): void;
@@ -16,6 +17,10 @@ export function testNodeDelta(_tc: t.TestCase): void;
16
17
  export function testRecursiveNode(): void;
17
18
  export function testSimplifiedDeltaSchemaDefinition(): void;
18
19
  export function testDiffing(): void;
20
+ export function testDiffingCommonPreSuffix(): void;
19
21
  export function testSlice(): void;
22
+ export function testRepeatRandomListDiff(tc: t.TestCase): void;
23
+ export function testRepeatRandomMapDiff(tc: t.TestCase): void;
24
+ export function testDeltaAppend(tc: t.TestCase): void;
20
25
  import * as t from 'lib0/testing';
21
- //# sourceMappingURL=d2.test.d.ts.map
26
+ //# sourceMappingURL=delta.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.test.d.ts","sourceRoot":"","sources":["delta.test.js"],"names":[],"mappings":"AAqCO,uCAFI,CAAC,CAAC,QAAQ,QAWpB;AAYM,qCAFI,CAAC,CAAC,QAAQ,QAwBpB;AAEM,4CA2BN;AAEM,6CAMN;AAKM,0CAkJN;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,QA4BpB;AAKM,wCAFI,CAAC,CAAC,QAAQ,QA2CpB;AAKM,kCAFI,CAAC,CAAC,QAAQ,QAqDpB;AAKM,gDAFI,CAAC,CAAC,QAAQ,QAoEpB;AAKM,mCAFI,CAAC,CAAC,QAAQ,QAiCpB;AAEM,0CAmBN;AAEM,4DAIN;AAEM,oCAMN;AAEM,mDAMN;AAEM,kCAGN;AAKM,6CAFI,CAAC,CAAC,QAAQ,QAWpB;AAKM,4CAFI,CAAC,CAAC,QAAQ,QAWpB;AAKM,oCAFI,CAAC,CAAC,QAAQ,QAQpB;mBAzrBkB,cAAc"}
@@ -15,5 +15,5 @@ export type Transform<DeltaA extends delta.Delta, DeltaB extends delta.Delta> =
15
15
  applyA: (da: DeltaA) => TransformResult<DeltaA, DeltaB>;
16
16
  applyB: (db: DeltaB) => TransformResult<DeltaA, DeltaB>;
17
17
  };
18
- import * as delta from './d2.js';
18
+ import * as delta from './delta.js';
19
19
  //# sourceMappingURL=t3.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"t3.test.d.ts","sourceRoot":"","sources":["t3.test.js"],"names":[],"mappings":"AAoBO,gCAN4B,MAAM,SAA3B,KAAK,CAAC,YAAY,OAAE,EACC,MAAM,SAA3B,KAAK,CAAC,YAAY,OAAE,KACvB,MAAM,KACN,MAAM,GACL,eAAe,CAAC,MAAM,OAAC,EAAC,MAAM,OAAC,CAAC,CAEO;AACnD,+DAA+D;4BAbnC,MAAM,SAApB,KAAK,CAAC,KAAK,OAAE,EACC,MAAM,SAApB,KAAK,CAAC,KAAK,OAAE,IACd;IAAE,CAAC,EAAE,MAAM,OAAC,CAAC;IAAC,CAAC,EAAE,MAAM,OAAC,CAAA;CAAE;6BAiBT,MAAM,SAAtB,KAAK,CAAC,QAAS,EACC,MAAM,SAAtB,KAAK,CAAC,QAAS,IAChB,CAAC,CAAC,EAAC;IAAC,CAAC,EAAC,MAAM,OAAC,CAAC;IAAA,CAAC,EAAC,MAAM,OAAC,CAAA;CAAC,KAAG,CAAC;IAAC,CAAC,EAAC,MAAM,OAAC,CAAC;IAAA,CAAC,EAAC,MAAM,OAAC,CAAA;CAAC,CAAC;sBA2GpC,MAAM,SAAnB,KAAK,CAAC,KAAM,EACC,MAAM,SAAnB,KAAK,CAAC,KAAM,IACb;IAAE,MAAM,EAAE,CAAC,EAAE,EAAC,MAAM,KAAG,eAAe,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,EAAC,MAAM,KAAG,eAAe,CAAC,MAAM,EAAC,MAAM,CAAC,CAAA;CAAE;uBAvIlG,SAAS"}
1
+ {"version":3,"file":"t3.test.d.ts","sourceRoot":"","sources":["t3.test.js"],"names":[],"mappings":"AAoBO,gCAN4B,MAAM,SAA3B,KAAK,CAAC,YAAY,OAAE,EACC,MAAM,SAA3B,KAAK,CAAC,YAAY,OAAE,KACvB,MAAM,KACN,MAAM,GACL,eAAe,CAAC,MAAM,OAAC,EAAC,MAAM,OAAC,CAAC,CAEO;AACnD,+DAA+D;4BAbnC,MAAM,SAApB,KAAK,CAAC,KAAK,OAAE,EACC,MAAM,SAApB,KAAK,CAAC,KAAK,OAAE,IACd;IAAE,CAAC,EAAE,MAAM,OAAC,CAAC;IAAC,CAAC,EAAE,MAAM,OAAC,CAAA;CAAE;6BAiBT,MAAM,SAAtB,KAAK,CAAC,QAAS,EACC,MAAM,SAAtB,KAAK,CAAC,QAAS,IAChB,CAAC,CAAC,EAAC;IAAC,CAAC,EAAC,MAAM,OAAC,CAAC;IAAA,CAAC,EAAC,MAAM,OAAC,CAAA;CAAC,KAAG,CAAC;IAAC,CAAC,EAAC,MAAM,OAAC,CAAC;IAAA,CAAC,EAAC,MAAM,OAAC,CAAA;CAAC,CAAC;sBA2GpC,MAAM,SAAnB,KAAK,CAAC,KAAM,EACC,MAAM,SAAnB,KAAK,CAAC,KAAM,IACb;IAAE,MAAM,EAAE,CAAC,EAAE,EAAC,MAAM,KAAG,eAAe,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,EAAC,MAAM,KAAG,eAAe,CAAC,MAAM,EAAC,MAAM,CAAC,CAAA;CAAE;uBAvIlG,YAAY"}
package/dist/array.cjs CHANGED
@@ -2,68 +2,25 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var schema = require('./schema.cjs');
6
- var abstractArray = require('./abstract-array.cjs');
7
- var ops = require('./ops.cjs');
8
- require('./object-18980796.cjs');
9
- require('./traits.cjs');
10
- require('./array-78849c95.cjs');
11
5
  require('./set-5b47859e.cjs');
12
- require('./error-0c1f634f.cjs');
13
- require('./environment-90227ead.cjs');
14
- require('./map-24d263c0.cjs');
15
- require('./string-fddc5f8b.cjs');
16
- require('./conditions-f5c0c102.cjs');
17
- require('./storage.cjs');
18
- require('./function-e7d18feb.cjs');
19
- require('./abstract.cjs');
20
- require('./math-96d5e8c4.cjs');
21
- require('./list.cjs');
6
+ var array = require('./array-78849c95.cjs');
22
7
 
23
- /**
24
- * @template ArrayContent
25
- * @template {boolean} [WithText=false]
26
- * @extends AbstractDeltaArrayBuilder<'array', import('./ops.js').DeltaArrayOps<ArrayContent,WithText>>
27
- */
28
- class DeltaArray extends abstractArray.AbstractDeltaArrayBuilder {
29
- /**
30
- * @param {s.Schema<ArrayContent>} $insert
31
- * @param {WithText} withText
32
- */
33
- constructor ($insert, withText) {
34
- super('array', $insert);
35
- this.withText = withText;
36
- }
37
- }
38
8
 
39
- /**
40
- * @template ArrayContent
41
- * @template {boolean} [WithText=false]
42
- * @param {s.Schema<ArrayContent>} $insert
43
- * @param {WithText} [withText]
44
- * @return {s.Schema<DeltaArray<ArrayContent, WithText>>}
45
- */
46
- const $array = ($insert, withText) => /** @type {any} */ (schema.$instanceOf(abstractArray.AbstractDeltaArrayBuilder, o => o.type === 'array' && o.ops.every(op => {
47
- if (ops.$textOp.check(op)) return !!withText
48
- if (ops.$insertOp.check(op)) return op.insert.every(opi => $insert.check(opi))
49
- return true
50
- })));
51
- /**
52
- * @type {s.Schema<DeltaArray<any,any>>}
53
- */
54
- const $arrayAny = /** @type {any} */ (schema.$instanceOf(abstractArray.AbstractDeltaArrayBuilder, o => o.type === 'array'));
55
9
 
56
- /**
57
- * @template [V=any]
58
- * @template {boolean} [WithText=any]
59
- * @param {s.Schema<V>} $insert
60
- * @param {WithText} [withText]
61
- * @return {DeltaArray<V,WithText>}
62
- */
63
- const array = ($insert = schema.$any, withText) => /** @type {DeltaArray<V,WithText>} */ (new DeltaArray($insert, withText ?? true));
64
-
65
- exports.$array = $array;
66
- exports.$arrayAny = $arrayAny;
67
- exports.DeltaArray = DeltaArray;
68
- exports.array = array;
10
+ exports.appendTo = array.appendTo;
11
+ exports.bubblesortItem = array.bubblesortItem;
12
+ exports.copy = array.copy;
13
+ exports.create = array.create;
14
+ exports.equalFlat = array.equalFlat;
15
+ exports.every = array.every;
16
+ exports.flatten = array.flatten;
17
+ exports.fold = array.fold;
18
+ exports.from = array.from;
19
+ exports.isArray = array.isArray;
20
+ exports.last = array.last;
21
+ exports.map = array.map;
22
+ exports.some = array.some;
23
+ exports.unfold = array.unfold;
24
+ exports.unique = array.unique;
25
+ exports.uniqueBy = array.uniqueBy;
69
26
  //# sourceMappingURL=array.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.cjs","sources":["../delta/array.js"],"sourcesContent":["import * as s from '../schema.js'\nimport { AbstractDeltaArrayBuilder } from './abstract-array.js'\nimport * as ops from './ops.js'\n\n/**\n * @template ArrayContent\n * @template {boolean} [WithText=false]\n * @extends AbstractDeltaArrayBuilder<'array', import('./ops.js').DeltaArrayOps<ArrayContent,WithText>>\n */\nexport class DeltaArray extends AbstractDeltaArrayBuilder {\n /**\n * @param {s.Schema<ArrayContent>} $insert\n * @param {WithText} withText\n */\n constructor ($insert, withText) {\n super('array', $insert)\n this.withText = withText\n }\n}\n\n/**\n * @template ArrayContent\n * @template {boolean} [WithText=false]\n * @param {s.Schema<ArrayContent>} $insert\n * @param {WithText} [withText]\n * @return {s.Schema<DeltaArray<ArrayContent, WithText>>}\n */\nexport const $array = ($insert, withText) => /** @type {any} */ (s.$instanceOf(AbstractDeltaArrayBuilder, o => o.type === 'array' && o.ops.every(op => {\n if (ops.$textOp.check(op)) return !!withText\n if (ops.$insertOp.check(op)) return op.insert.every(opi => $insert.check(opi))\n return true\n})))\n/**\n * @type {s.Schema<DeltaArray<any,any>>}\n */\nexport const $arrayAny = /** @type {any} */ (s.$instanceOf(AbstractDeltaArrayBuilder, o => o.type === 'array'))\n\n/**\n * @template [V=any]\n * @template {boolean} [WithText=any]\n * @param {s.Schema<V>} $insert\n * @param {WithText} [withText]\n * @return {DeltaArray<V,WithText>}\n */\nexport const array = ($insert = s.$any, withText) => /** @type {DeltaArray<V,WithText>} */ (new DeltaArray($insert, withText ?? true))\n"],"names":["AbstractDeltaArrayBuilder","s.$instanceOf","ops.$textOp","ops.$insertOp","s.$any"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;AACO,MAAM,UAAU,SAASA,uCAAyB,CAAC;AAC1D;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE;AAClC,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,EAAC;AAC3B,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAQ;AAC5B,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,yBAAyBC,kBAAa,CAACD,uCAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI;AACvJ,EAAE,IAAIE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ;AAC9C,EAAE,IAAIC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChF,EAAE,OAAO,IAAI;AACb,CAAC,CAAC,CAAC,EAAC;AACJ;AACA;AACA;AACY,MAAC,SAAS,uBAAuBF,kBAAa,CAACD,uCAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAC;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,KAAK,GAAG,CAAC,OAAO,GAAGI,WAAM,EAAE,QAAQ,4CAA4C,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC;;;;;;;"}
1
+ {"version":3,"file":"array.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}