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
package/schema.js CHANGED
@@ -8,9 +8,11 @@ import * as obj from './object.js'
8
8
  import * as arr from './array.js'
9
9
  import * as error from './error.js'
10
10
  import * as env from './environment.js'
11
- import * as traits from './traits.js'
11
+ import * as equalityTraits from './trait/equality.js'
12
12
  import * as fun from './function.js'
13
13
  import * as string from './string.js'
14
+ import * as prng from './prng.js'
15
+ import * as number from './number.js'
14
16
 
15
17
  /**
16
18
  * @typedef {string|number|bigint|boolean|null|undefined|symbol} Primitive
@@ -64,7 +66,7 @@ import * as string from './string.js'
64
66
 
65
67
  const schemaSymbol = Symbol('0schema')
66
68
 
67
- class ValidationError {
69
+ export class ValidationError {
68
70
  constructor () {
69
71
  /**
70
72
  * Reverse errors
@@ -102,7 +104,7 @@ class ValidationError {
102
104
  const shapeExtends = (a, b) => {
103
105
  if (a === b) return true
104
106
  if (a == null || b == null || a.constructor !== b.constructor) return false
105
- if (a[traits.EqualityTraitSymbol]) return traits.equals(a, b) // last resort: check equality (do this before array and obj check which don't implement the equality trait)
107
+ if (a[equalityTraits.EqualityTraitSymbol]) return equalityTraits.equals(a, b) // last resort: check equality (do this before array and obj check which don't implement the equality trait)
106
108
  if (arr.isArray(a)) {
107
109
  return arr.every(a, aitem =>
108
110
  arr.some(b, bitem => shapeExtends(aitem, bitem))
@@ -118,7 +120,7 @@ const shapeExtends = (a, b) => {
118
120
 
119
121
  /**
120
122
  * @template T
121
- * @implements {traits.EqualityTrait}
123
+ * @implements {equalityTraits.EqualityTrait}
122
124
  */
123
125
  export class Schema {
124
126
  // this.shape must not be defined on Schema. Otherwise typecheck on metatypes (e.g. $$object) won't work as expected anymore
@@ -153,7 +155,7 @@ export class Schema {
153
155
  /**
154
156
  * @param {object} other
155
157
  */
156
- [traits.EqualityTraitSymbol] (other) {
158
+ [equalityTraits.EqualityTraitSymbol] (other) {
157
159
  return this.equals(/** @type {any} */ (other))
158
160
  }
159
161
 
@@ -186,6 +188,7 @@ export class Schema {
186
188
  * @type {Schema<T?>}
187
189
  */
188
190
  get nullable () {
191
+ // @ts-ignore
189
192
  return $union(this, $null)
190
193
  }
191
194
 
@@ -314,7 +317,7 @@ export class $Custom extends Schema {
314
317
  * @param {(o:any) => boolean} check
315
318
  * @return {Schema<any>}
316
319
  */
317
- export const $custom = check => new $Custom(check)
320
+ export const $custom = (check) => new $Custom(check)
318
321
  export const $$custom = $constructedBy($Custom)
319
322
 
320
323
  /**
@@ -529,7 +532,7 @@ export class $Object extends Schema {
529
532
  }
530
533
 
531
534
  /**
532
- * @template {{ [key:string|symbol|number]: Schema<any> }} S
535
+ * @template S
533
536
  * @typedef {Schema<{ [Key in keyof S as S[Key] extends $Optional<Schema<any>> ? Key : never]?: S[Key] extends $Optional<Schema<infer Type>> ? Type : never } & { [Key in keyof S as S[Key] extends $Optional<Schema<any>> ? never : Key]: S[Key] extends Schema<infer Type> ? Type : never }>} _ObjectDefToSchema
534
537
  */
535
538
 
@@ -817,12 +820,12 @@ export class $Union extends Schema {
817
820
  }
818
821
 
819
822
  /**
820
- * @template {Array<Schema<any>>} T
823
+ * @template {Array<any>} T
821
824
  * @param {T} schemas
822
- * @return {CastToSchema<$Union<T extends [] ? never : (T extends Array<Schema<infer S>> ? S : never)>>}
825
+ * @return {CastToSchema<$Union<Unwrap<ReadSchema<T>>>>}
823
826
  */
824
827
  export const $union = (...schemas) => schemas.findIndex($s => $$union.check($s)) >= 0
825
- ? $union(...schemas.map($s => $$union.check($s) ? $s.shape : [$s]).flat(1))
828
+ ? $union(...schemas.map($s => $($s)).map($s => $$union.check($s) ? $s.shape : [$s]).flat(1))
826
829
  : (schemas.length === 1
827
830
  ? schemas[0]
828
831
  : new $Union(schemas))
@@ -838,32 +841,32 @@ export const $$any = /** @type {Schema<Schema<any>>} */ ($constructedBy($Custom,
838
841
  /**
839
842
  * @type {Schema<bigint>}
840
843
  */
841
- export const $bigint = $constructedBy(BigInt)
842
- export const $$bigint = /** @type {Schema<Schema<BigInt>>} */ ($constructedBy($ConstructedBy, o => o.shape === BigInt))
844
+ export const $bigint = $custom(o => typeof o === 'bigint')
845
+ export const $$bigint = /** @type {Schema<Schema<BigInt>>} */ ($custom(o => o === $bigint))
843
846
 
844
847
  /**
845
848
  * @type {Schema<symbol>}
846
849
  */
847
- export const $symbol = $constructedBy(Symbol)
848
- export const $$symbol = /** @type {Schema<Schema<Symbol>>} */ ($constructedBy($ConstructedBy, o => o.shape === Symbol))
850
+ export const $symbol = $custom(o => typeof o === 'symbol')
851
+ export const $$symbol = /** @type {Schema<Schema<Symbol>>} */ ($custom(o => o === $symbol))
849
852
 
850
853
  /**
851
854
  * @type {Schema<number>}
852
855
  */
853
- export const $number = $constructedBy(Number)
854
- export const $$number = /** @type {Schema<Schema<number>>} */ ($constructedBy($ConstructedBy, o => o.shape === Number))
856
+ export const $number = $custom(o => typeof o === 'number')
857
+ export const $$number = /** @type {Schema<Schema<number>>} */ ($custom(o => o === $number))
855
858
 
856
859
  /**
857
860
  * @type {Schema<string>}
858
861
  */
859
- export const $string = $constructedBy(String)
860
- export const $$string = /** @type {Schema<Schema<string>>} */ ($constructedBy($ConstructedBy, o => o.shape === String))
862
+ export const $string = $custom(o => typeof o === 'string')
863
+ export const $$string = /** @type {Schema<Schema<string>>} */ ($custom(o => o === $string))
861
864
 
862
865
  /**
863
866
  * @type {Schema<boolean>}
864
867
  */
865
- export const $boolean = $constructedBy(Boolean)
866
- export const $$boolean = /** @type {Schema<Schema<Boolean>>} */ ($constructedBy($ConstructedBy, o => o.shape === Boolean))
868
+ export const $boolean = $custom(o => typeof o === 'boolean')
869
+ export const $$boolean = /** @type {Schema<Schema<Boolean>>} */ ($custom(o => o === $boolean))
867
870
 
868
871
  /**
869
872
  * @type {Schema<undefined>}
@@ -917,9 +920,26 @@ export const $json = (() => {
917
920
  * )
918
921
  * )
919
922
  * )
923
+ * } ReadSchemaOld
924
+ */
925
+
926
+ /**
927
+ * @template {any} IN
928
+ * @typedef {[Extract<IN,Schema<any>>,Extract<IN,string|number|boolean|null>,Extract<IN,new (...args:any[])=>any>,Extract<IN,any[]>,Extract<Exclude<IN,Schema<any>|string|number|boolean|null|(new (...args:any[])=>any)|any[]>,object>] extends [infer Schemas, infer Primitives, infer Constructors, infer Arrs, infer Obj]
929
+ * ? Schema<
930
+ * (Schemas extends Schema<infer S> ? S : never)
931
+ * | Primitives
932
+ * | (Constructors extends new (...args:any[])=>any ? InstanceType<Constructors> : never)
933
+ * | (Arrs extends any[] ? { [K in keyof Arrs]: Unwrap<ReadSchema<Arrs[K]>> }[number] : never)
934
+ * | (Obj extends object ? Unwrap<(_ObjectDefToSchema<{[K in keyof Obj]:ReadSchema<Obj[K]>}> extends Schema<infer S> ? Schema<{ [K in keyof S]: S[K] }> : never)> : never)>
935
+ * : never
920
936
  * } ReadSchema
921
937
  */
922
938
 
939
+ /**
940
+ * @typedef {ReadSchema<{x:42}|{y:99}|Schema<string>|[1,2,{}]>} Q
941
+ */
942
+
923
943
  /**
924
944
  * @template IN
925
945
  * @param {IN} o
@@ -944,6 +964,7 @@ export const $ = o => {
944
964
  } else if ($function.check(o)) {
945
965
  return /** @type {any} */ ($constructedBy(/** @type {any} */ (o)))
946
966
  }
967
+ /* c8 ignore next */
947
968
  error.unexpectedCase()
948
969
  }
949
970
 
@@ -963,3 +984,153 @@ export const assert = env.production
963
984
  }
964
985
  }
965
986
  /* c8 ignore end */
987
+
988
+ /**
989
+ * @template In
990
+ * @template Out
991
+ * @typedef {{ if: Schema<In>, h: (o:In,state?:any)=>Out }} Pattern
992
+ */
993
+
994
+ /**
995
+ * @template {Pattern<any,any>} P
996
+ * @template In
997
+ * @typedef {ReturnType<Extract<P,Pattern<In extends number ? number : (In extends string ? string : In),any>>['h']>} PatternMatchResult
998
+ */
999
+
1000
+ /**
1001
+ * @todo move this to separate library
1002
+ * @template {any} [State=undefined]
1003
+ * @template {Pattern<any,any>} [Patterns=never]
1004
+ */
1005
+ export class PatternMatcher {
1006
+ /**
1007
+ * @param {Schema<State>} [$state]
1008
+ */
1009
+ constructor ($state) {
1010
+ /**
1011
+ * @type {Array<Patterns>}
1012
+ */
1013
+ this.patterns = []
1014
+ this.$state = $state
1015
+ }
1016
+
1017
+ /**
1018
+ * @template P
1019
+ * @template R
1020
+ * @param {P} pattern
1021
+ * @param {(o:NoInfer<Unwrap<ReadSchema<P>>>,s:State)=>R} handler
1022
+ * @return {PatternMatcher<State,Patterns|Pattern<Unwrap<ReadSchema<P>>,R>>}
1023
+ */
1024
+ if (pattern, handler) {
1025
+ // @ts-ignore
1026
+ this.patterns.push({ if: $(pattern), h: handler })
1027
+ // @ts-ignore
1028
+ return this
1029
+ }
1030
+
1031
+ /**
1032
+ * @template R
1033
+ * @param {(o:any,s:State)=>R} h
1034
+ */
1035
+ else (h) {
1036
+ return this.if($any, h)
1037
+ }
1038
+
1039
+ /**
1040
+ * @return {State extends undefined
1041
+ * ? <In extends Unwrap<Patterns['if']>>(o:In,state?:undefined)=>PatternMatchResult<Patterns,In>
1042
+ * : <In extends Unwrap<Patterns['if']>>(o:In,state:State)=>PatternMatchResult<Patterns,In>}
1043
+ */
1044
+ done () {
1045
+ // @ts-ignore
1046
+ return /** @type {any} */ (o, s) => {
1047
+ for (let i = 0; i < this.patterns.length; i++) {
1048
+ const p = this.patterns[i]
1049
+ if (p.if.check(o)) {
1050
+ // @ts-ignore
1051
+ return p.h(o, s)
1052
+ }
1053
+ }
1054
+ throw error.create('Unhandled pattern')
1055
+ }
1056
+ }
1057
+ }
1058
+
1059
+ /**
1060
+ * @template [State=undefined]
1061
+ * @param {State} [state]
1062
+ * @return {PatternMatcher<State extends undefined ? undefined : Unwrap<ReadSchema<State>>>}
1063
+ */
1064
+ export const match = state => new PatternMatcher(/** @type {any} */ (state))
1065
+
1066
+ /**
1067
+ * Helper function to generate a (non-exhaustive) sample set from a gives schema.
1068
+ *
1069
+ * @type {<T>(o:T,gen:prng.PRNG)=>T}
1070
+ */
1071
+ const _random = /** @type {any} */ (match(/** @type {Schema<prng.PRNG>} */ ($any))
1072
+ .if($$number, (_o, gen) => prng.int53(gen, number.MIN_SAFE_INTEGER, number.MAX_SAFE_INTEGER))
1073
+ .if($$string, (_o, gen) => prng.word(gen))
1074
+ .if($$boolean, (_o, gen) => prng.bool(gen))
1075
+ .if($$bigint, (_o, gen) => BigInt(prng.int53(gen, number.MIN_SAFE_INTEGER, number.MAX_SAFE_INTEGER)))
1076
+ .if($$union, (o, gen) => random(gen, prng.oneOf(gen, o.shape)))
1077
+ .if($$object, (o, gen) => {
1078
+ /**
1079
+ * @type {any}
1080
+ */
1081
+ const res = {}
1082
+ for (const k in o.shape) {
1083
+ let prop = o.shape[k]
1084
+ if ($$optional.check(prop)) {
1085
+ if (prng.bool(gen)) { continue }
1086
+ prop = prop.shape
1087
+ }
1088
+ res[k] = _random(prop, gen)
1089
+ }
1090
+ return res
1091
+ })
1092
+ .if($$array, (o, gen) => {
1093
+ const arr = []
1094
+ const n = prng.int32(gen, 0, 42)
1095
+ for (let i = 0; i < n; i++) {
1096
+ arr.push(random(gen, o.shape))
1097
+ }
1098
+ return arr
1099
+ })
1100
+ .if($$literal, (o, gen) => {
1101
+ return prng.oneOf(gen, o.shape)
1102
+ })
1103
+ .if($$null, (o, gen) => {
1104
+ return null
1105
+ })
1106
+ .if($$lambda, (o, gen) => {
1107
+ const res = random(gen, o.res)
1108
+ return () => res
1109
+ })
1110
+ .if($$any, (o, gen) => random(gen, prng.oneOf(gen, [
1111
+ $number, $string, $null, $undefined, $bigint, $boolean,
1112
+ $array($number),
1113
+ $record($union('a', 'b', 'c'), $number)
1114
+ ])))
1115
+ .if($$record, (o, gen) => {
1116
+ /**
1117
+ * @type {any}
1118
+ */
1119
+ const res = {}
1120
+ const keysN = prng.int53(gen, 0, 3)
1121
+ for (let i = 0; i < keysN; i++) {
1122
+ const key = random(gen, o.shape.keys)
1123
+ const val = random(gen, o.shape.values)
1124
+ res[key] = val
1125
+ }
1126
+ return res
1127
+ })
1128
+ .done())
1129
+
1130
+ /**
1131
+ * @template S
1132
+ * @param {prng.PRNG} gen
1133
+ * @param {S} schema
1134
+ * @return {Unwrap<ReadSchema<S>>}
1135
+ */
1136
+ export const random = (gen, schema) => /** @type {any} */ (_random($(schema), gen))
package/schema.test.d.ts CHANGED
@@ -7,5 +7,9 @@ export function testSchemaExtends(_tc: t.TestCase): void;
7
7
  export function testSchemaErrors(_tc: t.TestCase): void;
8
8
  export function testUnionMerging(_tc: t.TestCase): void;
9
9
  export function testConvenienceHelper(): void;
10
+ export function testPatternMatcherBase(): void;
11
+ export function testPatternMatcherWithState(): void;
12
+ export function testPatternMatcherBenchmark(): void;
13
+ export function testRepeatRandomFromSchema(tc: t.TestCase): void;
10
14
  import * as t from './testing.js';
11
15
  //# sourceMappingURL=schema.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["schema.test.js"],"names":[],"mappings":"AAOO,iCAFI,CAAC,CAAC,QAAQ,QAoPpB;AAEM,yCAMN;AAKM,+CAFI,CAAC,CAAC,QAAQ,QAiBpB;AAKM,qCAFI,CAAC,CAAC,QAAQ,QA0BpB;AAKM,wCAFI,CAAC,CAAC,QAAQ,QAmBpB;AAKM,uCAFI,CAAC,CAAC,QAAQ,QAUpB;AAKM,sCAFI,CAAC,CAAC,QAAQ,QASpB;AAMM,sCAFI,CAAC,CAAC,QAAQ,QAcpB;AAEM,8CAqBN;mBA1YkB,cAAc"}
1
+ {"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["schema.test.js"],"names":[],"mappings":"AAQO,iCAFI,CAAC,CAAC,QAAQ,QAqPpB;AAEM,yCAMN;AAKM,+CAFI,CAAC,CAAC,QAAQ,QAiBpB;AAKM,qCAFI,CAAC,CAAC,QAAQ,QA0BpB;AAKM,wCAFI,CAAC,CAAC,QAAQ,QAmBpB;AAKM,uCAFI,CAAC,CAAC,QAAQ,QAUpB;AAKM,sCAFI,CAAC,CAAC,QAAQ,QASpB;AAMM,sCAFI,CAAC,CAAC,QAAQ,QAcpB;AAEM,8CAqBN;AAEM,+CAmBN;AAEM,oDAuBN;AAEM,oDA8IN;AAKM,+CAFI,CAAC,CAAC,QAAQ,QA4BpB;mBAzmBkB,cAAc"}
package/test.html CHANGED
@@ -31,7 +31,7 @@
31
31
  "lib0/conditions": "./conditions.js",
32
32
  "lib0/crypto/jwt": "./crypto/jwt.js",
33
33
  "lib0/crypto/aes-gcm": "./crypto/aes-gcm.js",
34
- "lib0/delta": "./delta/d2.js",
34
+ "lib0/delta": "./delta/delta.js",
35
35
  "lib0/crypto/ecdsa": "./crypto/ecdsa.js",
36
36
  "lib0/crypto/rsa-oaep": "./crypto/rsa-oaep.js",
37
37
  "lib0/hash/rabin": "./hash/rabin.js",
@@ -133,9 +133,7 @@
133
133
  "lib0/symbol.js": "./symbol.js",
134
134
  "lib0/dist/symbol.cjs": "./dist/symbol.cjs",
135
135
  "lib0/symbol": "./symbol.js",
136
- "lib0/traits.js": "./traits.js",
137
- "lib0/dist/traits.cjs": "./dist/traits.cjs",
138
- "lib0/traits": "./traits.js",
136
+ "lib0/traits": "./trait/traits.js",
139
137
  "lib0/testing.js": "./testing.js",
140
138
  "lib0/dist/testing.cjs": "./dist/testing.cjs",
141
139
  "lib0/testing": "./testing.js",
package/test.js CHANGED
@@ -38,14 +38,11 @@ import * as storage from './storage.test.js'
38
38
  import * as list from './list.test.js'
39
39
  import * as cache from './cache.test.js'
40
40
  import * as symbol from './symbol.test.js'
41
- import * as traits from './traits.test.js'
41
+ import * as traits from './trait/traits.test.js'
42
42
  import * as schema from './schema.test.js'
43
- import * as d2 from './delta/d2.test.js'
44
- import * as deltaArray from './delta/array.test.js'
45
- import * as deltaText from './delta/text.test.js'
46
- import * as deltaNode from './delta/node.test.js'
47
- import * as deltaTransformer from './delta/transformer.test.js'
48
- import * as deltaBinding from './delta/binding.test.js'
43
+ import * as delta from './delta/delta.test.js'
44
+ import * as deltaPitch from './delta/delta-pitch.test.js'
45
+ // import * as deltaBinding from './delta/binding.test.js'
49
46
  import * as mutex from './mutex.test.js'
50
47
  import { isBrowser, isNode } from './environment.js'
51
48
 
@@ -95,12 +92,9 @@ runTests({
95
92
  symbol,
96
93
  traits,
97
94
  schema,
98
- d2,
99
- deltaArray,
100
- deltaText,
101
- deltaNode,
102
- deltaTransformer,
103
- deltaBinding,
95
+ delta,
96
+ deltaPitch,
97
+ // deltaBinding,
104
98
  mutex
105
99
  }).then(success => {
106
100
  /* c8 ignore next */
package/testing.js CHANGED
@@ -57,7 +57,7 @@ import * as json from './json.js'
57
57
  import * as time from './time.js'
58
58
  import * as promise from './promise.js'
59
59
  import * as performance from 'lib0/performance'
60
- import * as traits from './traits.js'
60
+ import * as equalityTrait from './trait/equality.js'
61
61
 
62
62
  export { production } from './environment.js'
63
63
  export const extensive = env.hasConf('extensive')
@@ -435,8 +435,8 @@ const _compare = (a, b, path, message, customCompare) => {
435
435
  if (a == null || b == null) {
436
436
  return compareValues(null, a, b, path)
437
437
  }
438
- if (a[traits.EqualityTraitSymbol] != null) {
439
- if (a[traits.EqualityTraitSymbol](b)) {
438
+ if (a[equalityTrait.EqualityTraitSymbol] != null) {
439
+ if (a[equalityTrait.EqualityTraitSymbol](b)) {
440
440
  return true
441
441
  } else {
442
442
  _failMessage(message, 'Not equal by equality trait', path)
@@ -3,4 +3,4 @@ export function equals<T extends EqualityTrait>(a: NoInfer<T>, b: T): boolean;
3
3
  export type EqualityTrait = {
4
4
  [EqualityTraitSymbol]: (other: EqualityTrait) => boolean;
5
5
  };
6
- //# sourceMappingURL=traits.d.ts.map
6
+ //# sourceMappingURL=equality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equality.d.ts","sourceRoot":"","sources":["equality.js"],"names":[],"mappings":"AAAA,gDAAqD;AAyB9C,uBALsB,CAAC,SAAhB,aAAc,KACjB,OAAO,CAAC,CAAC,CAAC,KACV,CAAC,GACA,OAAO,CAE4D;4BAtBlE;IAAE,CAAC,mBAAmB,CAAC,EAAC,CAAC,KAAK,EAAC,aAAa,KAAG,OAAO,CAAA;CAAE"}
@@ -0,0 +1,13 @@
1
+ export const FingerprintTraitSymbol: unique symbol;
2
+ export function fingerprint(a: Fingerprintable): string;
3
+ /**
4
+ * When implementing this trait, it is recommended to write some sort of "magic number" first to
5
+ * ensure that different types of objects don't have the same fingerprint.
6
+ *
7
+ * The recommended pracice is to generate a random u32 number as your magic number. e.g. using
8
+ * `console.log(random.uint32().toString(16))`
9
+ */
10
+ export type Fingerprintable = {
11
+ [FingerprintTraitSymbol]: () => string;
12
+ } | import("../encoding.js").AnyEncodable;
13
+ //# sourceMappingURL=fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["fingerprint.js"],"names":[],"mappings":"AAIA,mDAA2D;AAgBpD,+BAHI,eAAe,GACd,MAAM,CAE6P;;;;;;;;8BAPlQ;IAAE,CAAC,sBAAsB,CAAC,EAAC,MAAI,MAAM,CAAA;CAAE,GAAG,OAAO,gBAAgB,EAAE,YAAY"}
@@ -0,0 +1,21 @@
1
+ import * as encoding from '../encoding.js'
2
+ import * as rabin from '../hash/rabin.js'
3
+ import * as buffer from '../buffer.js'
4
+
5
+ export const FingerprintTraitSymbol = Symbol('Fingerprint')
6
+
7
+ /**
8
+ * When implementing this trait, it is recommended to write some sort of "magic number" first to
9
+ * ensure that different types of objects don't have the same fingerprint.
10
+ *
11
+ * The recommended pracice is to generate a random u32 number as your magic number. e.g. using
12
+ * `console.log(random.uint32().toString(16))`
13
+ *
14
+ * @typedef {{ [FingerprintTraitSymbol]:()=>string } | import('../encoding.js').AnyEncodable} Fingerprintable
15
+ */
16
+
17
+ /**
18
+ * @param {Fingerprintable} a
19
+ * @return {string}
20
+ */
21
+ export const fingerprint = a => (a != null && /** @type {any} */ (a)[FingerprintTraitSymbol]?.()) || buffer.toBase64(rabin.fingerprint(rabin.StandardIrreducible128, encoding.encode(encoder => { encoding.writeUint32(encoder, 0x8de1c475); encoding.writeAny(encoder, a) })))
@@ -0,0 +1,3 @@
1
+ export * from "./equality.js";
2
+ export * from "./fingerprint.js";
3
+ //# sourceMappingURL=traits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["traits.js"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './equality.js'
2
+ export * from './fingerprint.js'
@@ -0,0 +1,5 @@
1
+ export function testEqualityTrait1(_tc: t.TestCase): void;
2
+ export function testEqualityTrait2(_tc: t.TestCase): void;
3
+ export function testFingerprintTrait(): void;
4
+ import * as t from '../testing.js';
5
+ //# sourceMappingURL=traits.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traits.test.d.ts","sourceRoot":"","sources":["traits.test.js"],"names":[],"mappings":"AAQO,wCAFI,CAAC,CAAC,QAAQ,QAwCpB;AAKM,wCAFI,CAAC,CAAC,QAAQ,QA2BpB;mBA5EkB,cAAc"}
1
+ {"version":3,"file":"traits.test.d.ts","sourceRoot":"","sources":["traits.test.js"],"names":[],"mappings":"AAQO,wCAFI,CAAC,CAAC,QAAQ,QAwCpB;AAKM,wCAFI,CAAC,CAAC,QAAQ,QA2BpB;AAEM,6CAMN;mBApFkB,eAAe"}
@@ -1,166 +0,0 @@
1
- /**
2
- * @typedef {Array<dops.DeltaJsonOp>} DeltaJson
3
- */
4
- /**
5
- * @template {'array' | 'text' | 'custom'} Type
6
- * @template {dops.AbstractDeltaArrayOps<any>} OPS
7
- * @extends {d.AbstractDelta}
8
- */
9
- export class AbstractDeltaArray<Type extends "array" | "text" | "custom", OPS extends dops.AbstractDeltaArrayOps<any>> extends d.AbstractDelta {
10
- /**
11
- * @param {Type} type
12
- */
13
- constructor(type: Type);
14
- type: Type;
15
- /**
16
- * @type {Array<OPS>}
17
- */
18
- ops: Array<OPS>;
19
- /**
20
- * @template M
21
- * @param {(d:OPS) => dops.AbstractDeltaArrayOps<M>} f
22
- * @return {AbstractDeltaArrayBuilder<Type,M>}
23
- */
24
- map<M>(f: (d: OPS) => dops.AbstractDeltaArrayOps<M>): AbstractDeltaArrayBuilder<Type, M>;
25
- /**
26
- *
27
- * Iterate through the changes. There are two approches to iterate through the changes. The
28
- * following examples achieve the same thing:
29
- *
30
- * @example
31
- * d.forEach((op, index) => {
32
- * if (op instanceof delta.InsertArrayOp) {
33
- * op.insert
34
- * } else if (op instanceof delta.RetainOp ) {
35
- * op.retain
36
- * } else if (op instanceof delta.DeleteOp) {
37
- * op.delete
38
- * }
39
- * })
40
- *
41
- * The second approach doesn't require instanceof checks.
42
- *
43
- * @example
44
- * d.forEach(null,
45
- * (insertOp, index) => insertOp.insert,
46
- * (retainOp, index) => insertOp.retain
47
- * (deleteOp, index) => insertOp.delete
48
- * )
49
- *
50
- * @param {null|((d:OPS,index:number)=>void)} f
51
- * @param {null|((insertOp:Extract<OPS,InsertOp<any>|TextOp>,index:number)=>void)} insertHandler
52
- * @param {null|((retainOp:RetainOp,index:number)=>void)} retainHandler
53
- * @param {null|((deleteOp:DeleteOp,index:number)=>void)} deleteHandler
54
- * @param {null|((modifyOp:OPS extends ModifyOp<infer M> ? ModifyOp<M> : never,index:number)=>void)} modifyHandler
55
- */
56
- forEach(f?: null | ((d: OPS, index: number) => void), insertHandler?: null | ((insertOp: Extract<OPS, InsertOp<any> | TextOp>, index: number) => void), retainHandler?: null | ((retainOp: RetainOp, index: number) => void), deleteHandler?: null | ((deleteOp: DeleteOp, index: number) => void), modifyHandler?: null | ((modifyOp: OPS extends ModifyOp<infer M> ? ModifyOp<M> : never, index: number) => void)): void;
57
- /**
58
- * @param {AbstractDeltaArray<Type, OPS>} other
59
- * @return {boolean}
60
- */
61
- equals(other: AbstractDeltaArray<Type, OPS>): boolean;
62
- /**
63
- * @returns {DeltaJson}
64
- */
65
- toJSON(): DeltaJson;
66
- get size(): number;
67
- /**
68
- * @param {AbstractDeltaArray<Type,OPS>} other
69
- */
70
- [traits.EqualityTraitSymbol](other: AbstractDeltaArray<Type, OPS>): boolean;
71
- }
72
- /**
73
- * @template {'text' | 'array' | 'custom'} Type
74
- * @template {dops.AbstractDeltaArrayOps<any>} OPS
75
- * @extends {AbstractDeltaArray<Type,OPS>}
76
- */
77
- export class AbstractDeltaArrayBuilder<Type extends "text" | "array" | "custom", OPS extends dops.AbstractDeltaArrayOps<any>> extends AbstractDeltaArray<Type, OPS> {
78
- /**
79
- * @param {Type} type
80
- * @param {s.Schema<OPS extends dops.AbstractDeltaArrayOps<infer V> ? V : never>} $insert
81
- */
82
- constructor(type: Type, $insert: s.Schema<OPS extends dops.AbstractDeltaArrayOps<infer V> ? V : never>);
83
- $insert: s.Schema<OPS extends dops.AbstractDeltaArrayOps<infer V extends unknown> ? V : never>;
84
- /**
85
- * @type {dops.FormattingAttributes?}
86
- */
87
- usedAttributes: dops.FormattingAttributes | null;
88
- /**
89
- * @type {d.Attribution?}
90
- */
91
- usedAttribution: d.Attribution | null;
92
- /**
93
- * @type {dops.AbstractDeltaArrayOps<any>?}
94
- */
95
- lastOp: dops.AbstractDeltaArrayOps<any> | null;
96
- /**
97
- * @return {this}
98
- */
99
- clone(): this;
100
- /**
101
- * @param {dops.FormattingAttributes?} attributes
102
- * @return {this}
103
- */
104
- useAttributes(attributes: dops.FormattingAttributes | null): this;
105
- /**
106
- * @param {string} name
107
- * @param {any} value
108
- */
109
- updateUsedAttributes(name: string, value: any): this;
110
- /**
111
- * @template {keyof d.Attribution} NAME
112
- * @param {NAME} name
113
- * @param {d.Attribution[NAME]?} value
114
- */
115
- updateUsedAttribution<NAME extends keyof d.Attribution>(name: NAME, value: d.Attribution[NAME] | null): this;
116
- /**
117
- * @param {d.Attribution?} attribution
118
- */
119
- useAttribution(attribution: d.Attribution | null): this;
120
- /**
121
- * @param {(OPS extends TextOp ? string : never) | (OPS extends InsertOp<infer Content> ? Array<Content> : never) } insert
122
- * @param {dops.FormattingAttributes?} attributes
123
- * @param {d.Attribution?} attribution
124
- * @return {this}
125
- */
126
- insert(insert: (OPS extends TextOp ? string : never) | (OPS extends InsertOp<infer Content> ? Array<Content> : never), attributes?: dops.FormattingAttributes | null, attribution?: d.Attribution | null): this;
127
- /**
128
- * @param {OPS extends ModifyOp<infer Mod> ? Mod : never } modify
129
- * @param {dops.FormattingAttributes?} attributes
130
- * @param {d.Attribution?} attribution
131
- * @return {this}
132
- */
133
- modify(modify: OPS extends ModifyOp<infer Mod> ? Mod : never, attributes?: dops.FormattingAttributes | null, attribution?: d.Attribution | null): this;
134
- /**
135
- * @param {number} retain
136
- * @param {dops.FormattingAttributes?} attributes
137
- * @param {d.Attribution?} attribution
138
- * @return {this}
139
- */
140
- retain(retain: number, attributes?: dops.FormattingAttributes | null, attribution?: d.Attribution | null): this;
141
- /**
142
- * @param {number} len
143
- * @return {this}
144
- */
145
- delete(len: number): this;
146
- /**
147
- * @todo this is basically untested and is in dire need of randomized testing.
148
- * @param {AbstractDeltaArray<Type, OPS>} other
149
- */
150
- apply(other: AbstractDeltaArray<Type, OPS>): void;
151
- /**
152
- * @return {Type extends 'array' ? (OPS extends dops.InsertOp<infer C> ? import('./array.js').DeltaArray<C> : never) : (Type extends 'text' ? (OPS extends dops.DeltaTextOps<infer Embeds> ? import('./text.js').DeltaText<Embeds> : never) : AbstractDeltaArray<Type,OPS>)}
153
- */
154
- done(): Type extends "array" ? (OPS extends dops.InsertOp<infer C> ? import("./array.js").DeltaArray<C> : never) : (Type extends "text" ? (OPS extends dops.DeltaTextOps<infer Embeds> ? import("./text.js").DeltaText<Embeds> : never) : AbstractDeltaArray<Type, OPS>);
155
- }
156
- export type DeltaJson = Array<dops.DeltaJsonOp>;
157
- import * as dops from './ops.js';
158
- import * as d from './abstract.js';
159
- import { InsertOp } from './ops.js';
160
- import { TextOp } from './ops.js';
161
- import { RetainOp } from './ops.js';
162
- import { DeleteOp } from './ops.js';
163
- import { ModifyOp } from './ops.js';
164
- import * as traits from '../traits.js';
165
- import * as s from '../schema.js';
166
- //# sourceMappingURL=abstract-array.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"abstract-array.d.ts","sourceRoot":"","sources":["abstract-array.js"],"names":[],"mappings":"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"}