lib0 0.2.115-4 → 0.2.115-6
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-32703-1763495370274-0.json → coverage-5242-1765032816888-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} +129 -38
- package/delta/delta.d.ts.map +1 -0
- package/delta/{d2.js → delta.js} +379 -66
- package/delta/{d2.test.d.ts → delta.test.d.ts} +8 -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-42bbe6e0.cjs} +2 -2
- package/dist/{broadcastchannel-d0c108a2.cjs.map → broadcastchannel-42bbe6e0.cjs.map} +1 -1
- package/dist/broadcastchannel.cjs +6 -6
- package/dist/{buffer-7f6fa8fa.cjs → buffer-54360f21.cjs} +2 -2
- package/dist/{buffer-7f6fa8fa.cjs.map → buffer-54360f21.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} +129 -38
- package/dist/delta/delta.d.ts.map +1 -0
- package/dist/delta/{d2.test.d.ts → delta.test.d.ts} +8 -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} +389 -71
- package/dist/delta.cjs.map +1 -0
- package/dist/{diff-1832cb43.cjs → diff-fab14ea6.cjs} +2 -2
- package/dist/{diff-1832cb43.cjs.map → diff-fab14ea6.cjs.map} +1 -1
- package/dist/diff.cjs +4 -4
- package/dist/{dom-f5047a64.cjs → dom-4c4b4c68.cjs} +1 -1
- package/dist/{dom-f5047a64.cjs.map → dom-4c4b4c68.cjs.map} +1 -1
- package/dist/dom.cjs +12 -5
- package/dist/dom.cjs.map +1 -1
- package/dist/{environment-90227ead.cjs → environment-ae4f6f15.cjs} +2 -2
- package/dist/{environment-90227ead.cjs.map → environment-ae4f6f15.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-618aa640.cjs} +8 -7
- package/dist/function-618aa640.cjs.map +1 -0
- package/dist/function.cjs +3 -3
- package/dist/function.d.ts.map +1 -1
- 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-96eef52a.cjs} +2 -2
- package/dist/{prng-99204216.cjs.map → prng-96eef52a.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.d.ts.map +1 -1
- package/function.js +6 -5
- 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
package/delta/map.js
DELETED
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
import * as gmap from '../map.js'
|
|
2
|
-
import * as fun from '../function.js'
|
|
3
|
-
import * as traits from '../traits.js'
|
|
4
|
-
import * as s from '../schema.js'
|
|
5
|
-
import * as ops from './ops.js'
|
|
6
|
-
import { AbstractDelta, mergeAttrs, $delta } from './abstract.js'
|
|
7
|
-
|
|
8
|
-
export const $mapJson = s.$record(s.$string, ops.$deltaMapChangeJson)
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @template {{ [key:string]: ops.DeltaMapOps }} OPS
|
|
12
|
-
* @typedef {{ [K in keyof OPS]: (Extract<OPS[K],ops.MapInsertOp<any>> extends ops.MapInsertOp<infer V,any> ? ops.MapInsertOp<V, K> : never) | (Extract<OPS[K],ops.MapDeleteOp<any>> extends ops.MapDeleteOp<infer V,any> ? ops.MapDeleteOp<V,K> : never) | (Extract<OPS[K],ops.MapModifyOp<any>> extends ops.MapModifyOp<infer V,any> ? (ops.MapModifyOp<V,K>&OPS[K]) : never) }[keyof OPS]} KeyedOps */
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @template {{ [key: string]: any }} [Vals={[key:string]:any}]
|
|
16
|
-
* @extends AbstractDelta
|
|
17
|
-
*/
|
|
18
|
-
export class DeltaMap extends AbstractDelta {
|
|
19
|
-
/**
|
|
20
|
-
* @param {s.Schema<Vals>} $vals
|
|
21
|
-
*/
|
|
22
|
-
constructor ($vals) {
|
|
23
|
-
super()
|
|
24
|
-
this.$vals = s.$$object.check($vals) ? $vals.partial : $vals
|
|
25
|
-
/**
|
|
26
|
-
* @type {gmap.GlobalMap<any,ops.DeltaMapOps>}
|
|
27
|
-
*/
|
|
28
|
-
this._changes = gmap.create()
|
|
29
|
-
/**
|
|
30
|
-
* @type {import('./abstract.js').Attribution?}
|
|
31
|
-
*/
|
|
32
|
-
this.usedAttribution = null
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
isEmpty () {
|
|
36
|
-
return this._changes.size === 0
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
* Iterate through the changes. There are two approches to iterate through changes. The
|
|
42
|
-
* following two examples achieve the same thing:
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* d.forEach(op => {
|
|
46
|
-
* if (op instanceof dmap.MapInsertOp) {
|
|
47
|
-
* console.log('content inserted:', op.key, op.value)
|
|
48
|
-
* } else if (op instanceof dmap.MapDeleteOp) {
|
|
49
|
-
* console.log('content deleted:', op.key, op.prevValue)
|
|
50
|
-
* } else if (op instanceof delta.MapModifyOp) {
|
|
51
|
-
* console.log('content was modified:', op.key, op.)
|
|
52
|
-
* op.modify
|
|
53
|
-
* }
|
|
54
|
-
* })
|
|
55
|
-
*
|
|
56
|
-
* The second approach doesn't require instanceof checks.
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* d.forEach(null,
|
|
60
|
-
* (insertOp) => insertOp.insert,
|
|
61
|
-
* (retainOp) => insertOp.retain
|
|
62
|
-
* (deleteOp) => insertOp.delete
|
|
63
|
-
* (modifyOp) => insertOp.modify
|
|
64
|
-
* )
|
|
65
|
-
*
|
|
66
|
-
* @template {Vals} ValsX
|
|
67
|
-
* @param {null|((op:KeyedOps<MapOpsFromValues<ValsX>>)=>void)} changeHandler
|
|
68
|
-
* @param {null|((insertOp:Extract<KeyedOps<MapOpsFromValues<ValsX>>,ops.MapInsertOp<any,any>>)=>void)} insertHandler
|
|
69
|
-
* @param {null|((deleteOp:Extract<KeyedOps<MapOpsFromValues<ValsX>>,ops.MapDeleteOp<any,any>>)=>void)} deleteHandler
|
|
70
|
-
* @param {null|((modifyOp:Extract<KeyedOps<MapOpsFromValues<ValsX>>,ops.MapModifyOp<any,any>>)=>void)} modifyHandler
|
|
71
|
-
*/
|
|
72
|
-
forEach (changeHandler = null, insertHandler = null, deleteHandler = null, modifyHandler = null) {
|
|
73
|
-
this._changes.forEach((change) => {
|
|
74
|
-
changeHandler?.(/** @type {any} */ (change))
|
|
75
|
-
switch (change.constructor) {
|
|
76
|
-
case ops.MapDeleteOp:
|
|
77
|
-
deleteHandler?.(/** @type {any} */ (change))
|
|
78
|
-
break
|
|
79
|
-
case ops.MapInsertOp:
|
|
80
|
-
insertHandler?.(/** @type {any} */ (change))
|
|
81
|
-
break
|
|
82
|
-
case ops.MapModifyOp:
|
|
83
|
-
modifyHandler?.(/** @type {any} */ (change))
|
|
84
|
-
break
|
|
85
|
-
}
|
|
86
|
-
})
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* @template {keyof Vals} K
|
|
91
|
-
* @param {K} key
|
|
92
|
-
* @return {MapOpsFromValues<Vals>[K] | undefined}
|
|
93
|
-
*/
|
|
94
|
-
get (key) {
|
|
95
|
-
return /** @type {(MapOpsFromValues<Vals>[K] & { key:K })|undefined} */ (this._changes.get(key))
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* @param {keyof Vals} key
|
|
100
|
-
*/
|
|
101
|
-
has (key) {
|
|
102
|
-
return this._changes.has(key)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* @param {DeltaMap<any>} other
|
|
107
|
-
* @return {boolean}
|
|
108
|
-
*/
|
|
109
|
-
equals (other) {
|
|
110
|
-
return this[traits.EqualityTraitSymbol](other)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
get size () {
|
|
114
|
-
return this._changes.size
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* @return {s.Unwrap<$mapJson>}
|
|
119
|
-
*/
|
|
120
|
-
toJSON () {
|
|
121
|
-
/**
|
|
122
|
-
* @type {s.Unwrap<$mapJson>}
|
|
123
|
-
*/
|
|
124
|
-
const changes = {}
|
|
125
|
-
this._changes.forEach((change, key) => {
|
|
126
|
-
changes[/** @type {string} */ (key)] = change.toJSON()
|
|
127
|
-
})
|
|
128
|
-
return changes
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* @template {keyof Vals} K
|
|
133
|
-
* @param {K} key
|
|
134
|
-
* @param {Extract<Vals[K], AbstractDelta>} delta
|
|
135
|
-
*/
|
|
136
|
-
modify (key, delta) {
|
|
137
|
-
this._changes.set(key, /** @type {any} */ (new ops.MapModifyOp(key, valsKeySchema(this.$vals, key).cast(delta))))
|
|
138
|
-
return this
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* @template {keyof Vals} K
|
|
143
|
-
* @param {K} key
|
|
144
|
-
* @param {Vals[K]} newVal
|
|
145
|
-
* @param {Vals[K]|undefined} prevValue
|
|
146
|
-
* @param {import('./abstract.js').Attribution?} attribution
|
|
147
|
-
*/
|
|
148
|
-
set (key, newVal, prevValue = undefined, attribution = null) {
|
|
149
|
-
const mergedAttribution = mergeAttrs(this.usedAttribution, attribution)
|
|
150
|
-
const $v = valsKeySchema(this.$vals, key)
|
|
151
|
-
this._changes.set(key, /** @type {any} */ (new ops.MapInsertOp(key, $v.cast(newVal), prevValue && $v.cast(prevValue), mergedAttribution)))
|
|
152
|
-
return this
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* @param {Partial<Vals>} kv
|
|
157
|
-
* @param {import('./abstract.js').Attribution?} attribution
|
|
158
|
-
*/
|
|
159
|
-
setMany (kv, attribution = null) {
|
|
160
|
-
for (const key in kv) {
|
|
161
|
-
this.set(key, /** @type {Vals[any]} */ (kv[key]), undefined, attribution)
|
|
162
|
-
}
|
|
163
|
-
return this
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* @template {keyof Vals} K
|
|
168
|
-
* @param {K} key
|
|
169
|
-
* @param {Vals[K]|undefined} prevValue
|
|
170
|
-
* @param {import('./abstract.js').Attribution?} attribution
|
|
171
|
-
*/
|
|
172
|
-
delete (key, prevValue = undefined, attribution = null) {
|
|
173
|
-
const mergedAttribution = mergeAttrs(this.usedAttribution, attribution)
|
|
174
|
-
this._changes.set(key, /** @type {any} */ (new ops.MapDeleteOp(key, prevValue === undefined ? prevValue : valsKeySchema(this.$vals, key).cast(prevValue), mergedAttribution)))
|
|
175
|
-
return this
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* @param {import('./abstract.js').Attribution?} attribution
|
|
180
|
-
*/
|
|
181
|
-
useAttribution (attribution) {
|
|
182
|
-
this.usedAttribution = attribution
|
|
183
|
-
return this
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
*
|
|
188
|
-
* - insert vs delete ⇒ insert takes precedence
|
|
189
|
-
* - insert vs modify ⇒ insert takes precedence
|
|
190
|
-
* - insert vs insert ⇒ priority decides
|
|
191
|
-
* - delete vs modify ⇒ delete takes precedence
|
|
192
|
-
* - delete vs delete ⇒ current delete op is removed because item has already been deleted
|
|
193
|
-
* - modify vs modify ⇒ rebase using priority
|
|
194
|
-
*
|
|
195
|
-
* @param {DeltaMap<Vals>} other
|
|
196
|
-
* @param {boolean} priority
|
|
197
|
-
*/
|
|
198
|
-
rebase (other, priority) {
|
|
199
|
-
this.forEach(null,
|
|
200
|
-
insertOp => {
|
|
201
|
-
if (other.get(insertOp.key)?.constructor === ops.MapInsertOp && !priority) {
|
|
202
|
-
this._changes.delete(insertOp.key)
|
|
203
|
-
}
|
|
204
|
-
},
|
|
205
|
-
deleteOp => {
|
|
206
|
-
const otherOp = other.get(deleteOp.key)
|
|
207
|
-
if (otherOp?.constructor === ops.MapInsertOp) {
|
|
208
|
-
this._changes.delete(otherOp.key)
|
|
209
|
-
}
|
|
210
|
-
},
|
|
211
|
-
modifyOp => {
|
|
212
|
-
const otherOp = other.get(modifyOp.key)
|
|
213
|
-
if (otherOp == null) {
|
|
214
|
-
// nop
|
|
215
|
-
} else if (otherOp.constructor === ops.MapModifyOp) {
|
|
216
|
-
modifyOp.value.rebase(otherOp.value, priority)
|
|
217
|
-
} else {
|
|
218
|
-
this._changes.delete(otherOp.key)
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
)
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* @param {DeltaMap<Partial<Vals>>} other
|
|
226
|
-
*/
|
|
227
|
-
apply (other) {
|
|
228
|
-
/** @type {DeltaMap<Vals>} */ (other).forEach(op => {
|
|
229
|
-
const c = this._changes.get(op.key)
|
|
230
|
-
if (ops.$modifyOp.check(op)) {
|
|
231
|
-
if ($delta.check(c?.value)) {
|
|
232
|
-
/** @type {DeltaMap<any>} */ (c.value).apply(op.value)
|
|
233
|
-
} else {
|
|
234
|
-
// then this is a simple modify
|
|
235
|
-
this._changes.set(op.key, /** @type {any} */ (op))
|
|
236
|
-
}
|
|
237
|
-
} else {
|
|
238
|
-
op.prevValue = c?.value
|
|
239
|
-
this._changes.set(op.key, /** @type {any} */ (op))
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
)
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* @return {this}
|
|
247
|
-
*/
|
|
248
|
-
clone () {
|
|
249
|
-
const d = /** @type {this} */ (new DeltaMap(this.$vals))
|
|
250
|
-
this.forEach(change => {
|
|
251
|
-
d._changes.set(change.key, /** @type {any} */ (change))
|
|
252
|
-
})
|
|
253
|
-
d.origin = this.origin
|
|
254
|
-
d.isDiff = this.isDiff
|
|
255
|
-
return d
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
done () {
|
|
259
|
-
return /** @type {DeltaMap<Vals>} */ (this)
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* @param {DeltaMap<Partial<Vals>>} other
|
|
264
|
-
*/
|
|
265
|
-
[traits.EqualityTraitSymbol] (other) {
|
|
266
|
-
return fun.equalityDeep(this._changes, other._changes)
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* @template {s.Schema<{ [Key:string]: ops.DeltaMapOps }>} OPS
|
|
272
|
-
* @template {keyof s.Unwrap<OPS>} K
|
|
273
|
-
* @param {OPS} $ops
|
|
274
|
-
* @param {K} k
|
|
275
|
-
* @return {s.Schema<s.Unwrap<OPS>[K]>}
|
|
276
|
-
*/
|
|
277
|
-
const valsKeySchema = ($ops, k) => s.$$object.check($ops) ? ($ops.shape[k] || s.$never) : ((s.$$record.check($ops) && $ops.shape.keys.check(k)) ? ($ops.shape.values) : s.$never)
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* @template {{ [key:string]: any }} Vals
|
|
281
|
-
* @typedef {{ [K in keyof Vals]: Vals[K] extends DeltaMap<infer DM> ? ops.MapInsertOp<Vals[K]>|ops.MapDeleteOp<Vals[K]>|ops.MapModifyOp<DeltaMap<DM>> : (ops.MapInsertOp<Exclude<Vals[K],undefined>>|ops.MapDeleteOp<Exclude<Vals[K],undefined>>) }} MapOpsFromValues
|
|
282
|
-
*/
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* Create a new DeltaMap, optionally supply a schema.
|
|
286
|
-
*
|
|
287
|
-
* @template {s.Schema<{ [key:string]: any }> | { [key:string]: s.Schema<any> }} [$Vals=s.Schema<{ [key:string]: any }>]
|
|
288
|
-
* @param {$Vals} $vals
|
|
289
|
-
* @return {DeltaMap<$Vals extends s.Schema<infer $V> ? $V : (s._ReadObjectDef<$Vals> extends s.Schema<infer $V> ? $V : never)>}
|
|
290
|
-
*/
|
|
291
|
-
export const map = ($vals = /** @type {any} */ (s.$record(s.$string, s.$any))) => /** @type {any} */ (new DeltaMap(/** @type {any} */ (s.$$schema.check($vals) ? $vals : s.$object($vals))))
|
|
292
|
-
|
|
293
|
-
/**
|
|
294
|
-
* @template {{ [key:string]: any }} Vals
|
|
295
|
-
* @param {s.Schema<Vals>} $vals
|
|
296
|
-
* @return {s.Schema<DeltaMap<Vals>>}
|
|
297
|
-
*/
|
|
298
|
-
export const $map = $vals => {
|
|
299
|
-
const $valsPartial = s.$$object.check($vals) ? $vals.partial : $vals
|
|
300
|
-
return /** @type {any} */ (s.$instanceOf(DeltaMap, o => Array.from(o._changes.entries()).every(([k, op]) =>
|
|
301
|
-
!ops.$insertOp.check(op) || $valsPartial.check({ [k]: op.value })
|
|
302
|
-
)))
|
|
303
|
-
}
|
|
304
|
-
export const $mapAny = s.$instanceOf(DeltaMap)
|
package/delta/node.d.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @template {string|undefined} [NodeName=string]
|
|
3
|
-
* @template {{[key:string]:any}} [Attrs={[key:string]:any}]
|
|
4
|
-
* @template [Children=any]
|
|
5
|
-
* @template {boolean} [WithText=true]
|
|
6
|
-
*/
|
|
7
|
-
export class DeltaNode<NodeName extends string | undefined = string, Attrs extends {
|
|
8
|
-
[key: string]: any;
|
|
9
|
-
} = {
|
|
10
|
-
[key: string]: any;
|
|
11
|
-
}, Children = any, WithText extends boolean = true> extends dabstract.AbstractDelta {
|
|
12
|
-
/**
|
|
13
|
-
* @param {NodeName} nodeName
|
|
14
|
-
* @param {dmap.DeltaMap<Attrs>} attributes
|
|
15
|
-
* @param {darray.DeltaArray<Children,WithText>} children
|
|
16
|
-
*/
|
|
17
|
-
constructor(nodeName: NodeName, attributes: dmap.DeltaMap<Attrs>, children: darray.DeltaArray<Children, WithText>);
|
|
18
|
-
name: NodeName;
|
|
19
|
-
/**
|
|
20
|
-
* @type {dmap.DeltaMap<Attrs>}
|
|
21
|
-
*/
|
|
22
|
-
attributes: dmap.DeltaMap<Attrs>;
|
|
23
|
-
/**
|
|
24
|
-
* @type {darray.DeltaArray<Children,WithText>}
|
|
25
|
-
*/
|
|
26
|
-
children: darray.DeltaArray<Children, WithText>;
|
|
27
|
-
/**
|
|
28
|
-
* @return {this}
|
|
29
|
-
*/
|
|
30
|
-
clone(): this;
|
|
31
|
-
/**
|
|
32
|
-
* @param {(WithText extends true ? string : never) | Array<Children>} insert
|
|
33
|
-
*/
|
|
34
|
-
insert(insert: (WithText extends true ? string : never) | Array<Children>): this;
|
|
35
|
-
/**
|
|
36
|
-
* @template {keyof Attrs} K
|
|
37
|
-
* @param {K} key
|
|
38
|
-
* @param {Attrs[K]} newVal
|
|
39
|
-
* @param {Attrs[K]|undefined} prevVal
|
|
40
|
-
* @param {import('./abstract.js').Attribution?} attribution
|
|
41
|
-
*/
|
|
42
|
-
set<K extends keyof Attrs>(key: K, newVal: Attrs[K], prevVal: Attrs[K] | undefined, attribution: import("./abstract.js").Attribution | null): this;
|
|
43
|
-
/**
|
|
44
|
-
* @param {import('./abstract.js').Attribution?} attribution
|
|
45
|
-
* @param {Partial<Attrs>} kv
|
|
46
|
-
*/
|
|
47
|
-
setMany(kv: Partial<Attrs>, attribution?: import("./abstract.js").Attribution | null): this;
|
|
48
|
-
toJSON(): {
|
|
49
|
-
name: NodeName;
|
|
50
|
-
attributes: {
|
|
51
|
-
[x: string]: {
|
|
52
|
-
attribution?: {
|
|
53
|
-
insert?: string[] | undefined;
|
|
54
|
-
insertAt?: number | undefined;
|
|
55
|
-
delete?: string[] | undefined;
|
|
56
|
-
deleteAt?: number | undefined;
|
|
57
|
-
attributes?: {
|
|
58
|
-
[x: string]: string[];
|
|
59
|
-
} | undefined;
|
|
60
|
-
attributesAt?: number | undefined;
|
|
61
|
-
} | null | undefined;
|
|
62
|
-
type: "insert";
|
|
63
|
-
value: any;
|
|
64
|
-
} | {
|
|
65
|
-
type: "modify";
|
|
66
|
-
value: any;
|
|
67
|
-
} | {
|
|
68
|
-
attribution?: {
|
|
69
|
-
insert?: string[] | undefined;
|
|
70
|
-
insertAt?: number | undefined;
|
|
71
|
-
delete?: string[] | undefined;
|
|
72
|
-
deleteAt?: number | undefined;
|
|
73
|
-
attributes?: {
|
|
74
|
-
[x: string]: string[];
|
|
75
|
-
} | undefined;
|
|
76
|
-
attributesAt?: number | undefined;
|
|
77
|
-
} | null | undefined;
|
|
78
|
-
type: "delete";
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
children: import("./abstract-array.js").DeltaJson;
|
|
82
|
-
};
|
|
83
|
-
/**
|
|
84
|
-
* @return {DeltaNode<NodeName, Attrs, Children, WithText>}
|
|
85
|
-
*/
|
|
86
|
-
done(): DeltaNode<NodeName, Attrs, Children, WithText>;
|
|
87
|
-
/**
|
|
88
|
-
* @param {DeltaNode<NodeName,Partial<Attrs>,Children,WithText>} other
|
|
89
|
-
*/
|
|
90
|
-
[traits.EqualityTraitSymbol](other: DeltaNode<NodeName, Partial<Attrs>, Children, WithText>): boolean;
|
|
91
|
-
}
|
|
92
|
-
export function node<NodeName extends string | undefined = string, Attrs extends {
|
|
93
|
-
[key: string]: any;
|
|
94
|
-
} | dmap.DeltaMap<any> = {
|
|
95
|
-
[key: string]: any;
|
|
96
|
-
}, Children extends Array<any> | string | darray.DeltaArray<any, any> = any[]>(nodeName: NodeName, attributes?: Attrs, children?: Children): DeltaNode<NodeName, Attrs extends dmap.DeltaMap<infer AttrsDef> ? AttrsDef : Attrs, Children extends Array<infer ChildTypes> ? ChildTypes : (Children extends darray.DeltaArray<infer ChildTypes, any> ? ChildTypes : never)>;
|
|
97
|
-
export function $node<NodeName extends string, Attributes extends {
|
|
98
|
-
[key: string]: any;
|
|
99
|
-
}, Children, Recursive extends boolean = false, WithText extends boolean = false>($nodeName: s.Schema<NodeName>, $attributes: s.Schema<Attributes>, $children: s.Schema<Children>, { recursive, withText }?: {
|
|
100
|
-
recursive?: Recursive | undefined;
|
|
101
|
-
withText?: WithText | undefined;
|
|
102
|
-
}): s.Schema<Recursive extends true ? RecursiveDeltaNode<NodeName, Partial<Attributes>, Children, WithText> : DeltaNode<NodeName, Partial<Attributes>, Children, WithText | undefined>>;
|
|
103
|
-
/**
|
|
104
|
-
* @type {s.Schema<DeltaNode<any,{[key:string]: any},any,any>>}
|
|
105
|
-
*/
|
|
106
|
-
export const $nodeAny: s.Schema<DeltaNode<any, {
|
|
107
|
-
[key: string]: any;
|
|
108
|
-
}, any, any>>;
|
|
109
|
-
export type RecursiveDeltaNode<NodeName extends string, Attributes extends {
|
|
110
|
-
[key: string]: any;
|
|
111
|
-
}, Children, WithText extends boolean> = DeltaNode<NodeName, Attributes, Children | RecursiveDeltaNode<NodeName, Attributes, Children, WithText>, WithText>;
|
|
112
|
-
import * as dabstract from './abstract.js';
|
|
113
|
-
import * as dmap from './map.js';
|
|
114
|
-
import * as darray from './array.js';
|
|
115
|
-
import * as traits from '../traits.js';
|
|
116
|
-
import * as s from '../schema.js';
|
|
117
|
-
//# sourceMappingURL=node.d.ts.map
|
package/delta/node.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["node.js"],"names":[],"mappings":"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"}
|
package/delta/node.js
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import * as traits from '../traits.js'
|
|
2
|
-
import * as dabstract from './abstract.js'
|
|
3
|
-
import * as darray from './array.js'
|
|
4
|
-
import * as dmap from './map.js'
|
|
5
|
-
import * as s from '../schema.js'
|
|
6
|
-
import * as error from '../error.js'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @template {string|undefined} [NodeName=string]
|
|
10
|
-
* @template {{[key:string]:any}} [Attrs={[key:string]:any}]
|
|
11
|
-
* @template [Children=any]
|
|
12
|
-
* @template {boolean} [WithText=true]
|
|
13
|
-
*/
|
|
14
|
-
export class DeltaNode extends dabstract.AbstractDelta {
|
|
15
|
-
/**
|
|
16
|
-
* @param {NodeName} nodeName
|
|
17
|
-
* @param {dmap.DeltaMap<Attrs>} attributes
|
|
18
|
-
* @param {darray.DeltaArray<Children,WithText>} children
|
|
19
|
-
*/
|
|
20
|
-
constructor (nodeName, attributes, children) {
|
|
21
|
-
super()
|
|
22
|
-
this.name = nodeName
|
|
23
|
-
/**
|
|
24
|
-
* @type {dmap.DeltaMap<Attrs>}
|
|
25
|
-
*/
|
|
26
|
-
this.attributes = /** @type {any} */ (attributes)
|
|
27
|
-
/**
|
|
28
|
-
* @type {darray.DeltaArray<Children,WithText>}
|
|
29
|
-
*/
|
|
30
|
-
this.children = /** @type {any} */ (children)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
isEmpty () {
|
|
34
|
-
return this.children.isEmpty() && this.attributes.isEmpty()
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* @return {this}
|
|
39
|
-
*/
|
|
40
|
-
clone () {
|
|
41
|
-
return /** @type {this} */ (new DeltaNode(this.name, this.attributes.clone(), this.children.clone()))
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @param {(WithText extends true ? string : never) | Array<Children>} insert
|
|
46
|
-
*/
|
|
47
|
-
insert (insert) {
|
|
48
|
-
// @ts-ignore
|
|
49
|
-
this.children.insert(insert)
|
|
50
|
-
return this
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* @template {keyof Attrs} K
|
|
55
|
-
* @param {K} key
|
|
56
|
-
* @param {Attrs[K]} newVal
|
|
57
|
-
* @param {Attrs[K]|undefined} prevVal
|
|
58
|
-
* @param {import('./abstract.js').Attribution?} attribution
|
|
59
|
-
*/
|
|
60
|
-
set (key, newVal, prevVal, attribution) {
|
|
61
|
-
this.attributes.set(key, newVal, prevVal, attribution)
|
|
62
|
-
return this
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* @param {import('./abstract.js').Attribution?} attribution
|
|
67
|
-
* @param {Partial<Attrs>} kv
|
|
68
|
-
*/
|
|
69
|
-
setMany (kv, attribution = null) {
|
|
70
|
-
this.attributes.setMany(kv, attribution)
|
|
71
|
-
return this
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* @param {dabstract.AbstractDelta} other
|
|
76
|
-
*/
|
|
77
|
-
apply (other) {
|
|
78
|
-
if ($nodeAny.check(other)) {
|
|
79
|
-
// @ts-ignore
|
|
80
|
-
this.attributes.apply(other.attributes)
|
|
81
|
-
// @ts-ignore
|
|
82
|
-
this.children.apply(other.children)
|
|
83
|
-
} else if (dmap.$mapAny.check(other)) {
|
|
84
|
-
// @ts-ignore
|
|
85
|
-
this.attributes.apply(other)
|
|
86
|
-
} else if (darray.$arrayAny.check(other)) {
|
|
87
|
-
// @ts-ignore
|
|
88
|
-
this.children.apply(other)
|
|
89
|
-
} else {
|
|
90
|
-
error.unexpectedCase()
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
toJSON () {
|
|
95
|
-
return {
|
|
96
|
-
name: this.name,
|
|
97
|
-
attributes: this.attributes.toJSON(),
|
|
98
|
-
children: this.children.toJSON()
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* @return {DeltaNode<NodeName, Attrs, Children, WithText>}
|
|
104
|
-
*/
|
|
105
|
-
done () {
|
|
106
|
-
/** @type {darray.DeltaArray<any>} */ (this.children).done()
|
|
107
|
-
;/** @type {dmap.DeltaMap<any>} */ (this.attributes).done()
|
|
108
|
-
return /** @type {any} */ (this)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* @param {DeltaNode<NodeName,Partial<Attrs>,Children,WithText>} other
|
|
113
|
-
*/
|
|
114
|
-
[traits.EqualityTraitSymbol] (other) {
|
|
115
|
-
return this.name === other.name && this.children[traits.EqualityTraitSymbol](other.children) && this.attributes[traits.EqualityTraitSymbol](other.attributes)
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* @template {string|undefined} [NodeName=string]
|
|
121
|
-
* @template {{[key:string]:any} | dmap.DeltaMap<any>} [Attrs={[key:string]:any}]
|
|
122
|
-
* @template {Array<any> | string | darray.DeltaArray<any,any>} [Children=Array<any>]
|
|
123
|
-
* @param {NodeName} nodeName
|
|
124
|
-
* @param {Attrs} [attributes]
|
|
125
|
-
* @param {Children} [children]
|
|
126
|
-
* @return {DeltaNode<NodeName,Attrs extends dmap.DeltaMap<infer AttrsDef> ? AttrsDef : Attrs,Children extends Array<infer ChildTypes> ? ChildTypes : (Children extends darray.DeltaArray<infer ChildTypes,any> ? ChildTypes : never)>}
|
|
127
|
-
*/
|
|
128
|
-
export const node = (nodeName, attributes, children) =>
|
|
129
|
-
new DeltaNode(
|
|
130
|
-
nodeName,
|
|
131
|
-
attributes == null
|
|
132
|
-
? dmap.map()
|
|
133
|
-
: (dmap.$mapAny.check(attributes)
|
|
134
|
-
? /** @type {dmap.DeltaMap<any>} */ (attributes)
|
|
135
|
-
: dmap.map().setMany(/** @type {any} */ (attributes))
|
|
136
|
-
),
|
|
137
|
-
children == null
|
|
138
|
-
? darray.array()
|
|
139
|
-
: (darray.$arrayAny.check(children)
|
|
140
|
-
? /** @type {darray.DeltaArray<any>} */ (children)
|
|
141
|
-
: darray.array().insert(children)
|
|
142
|
-
)
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* @template {string} NodeName
|
|
147
|
-
* @template {{ [key:string]: any }} Attributes
|
|
148
|
-
* @template Children
|
|
149
|
-
* @template {boolean} WithText
|
|
150
|
-
* @typedef {DeltaNode<NodeName, Attributes, Children | RecursiveDeltaNode<NodeName,Attributes,Children,WithText>, WithText>} RecursiveDeltaNode
|
|
151
|
-
*/
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* @template {string} NodeName
|
|
155
|
-
* @template {{ [key:string]: any }} Attributes
|
|
156
|
-
* @template Children
|
|
157
|
-
* @template {boolean} [Recursive=false]
|
|
158
|
-
* @template {boolean} [WithText=false]
|
|
159
|
-
* @param {s.Schema<NodeName>} $nodeName
|
|
160
|
-
* @param {s.Schema<Children>} $children
|
|
161
|
-
* @param {s.Schema<Attributes>} $attributes
|
|
162
|
-
* @param {object} [opts]
|
|
163
|
-
* @param {Recursive} [opts.recursive]
|
|
164
|
-
* @param {WithText} [opts.withText]
|
|
165
|
-
* @return {s.Schema<Recursive extends true ? RecursiveDeltaNode<NodeName, Partial<Attributes>, Children, WithText> : DeltaNode<NodeName, Partial<Attributes>, Children, withText>>}
|
|
166
|
-
*/
|
|
167
|
-
export const $node = ($nodeName, $attributes, $children, { recursive, withText } = {}) => {
|
|
168
|
-
/**
|
|
169
|
-
* @type {s.Schema<darray.DeltaArray<any,any>>}
|
|
170
|
-
*/
|
|
171
|
-
let $dchildren = darray.$array($children)
|
|
172
|
-
const $dattrs = dmap.$map($attributes)
|
|
173
|
-
const $nodeSchema = /** @type {s.Schema<DeltaNode<NodeName, any, any, any>>} */ (s.$instanceOf(DeltaNode, o => $nodeName.check(o.name) && $dchildren.check(o.children) && $dattrs.check(o.attributes)))
|
|
174
|
-
if (recursive) {
|
|
175
|
-
$dchildren = darray.$array(s.$union($children, $nodeSchema), withText)
|
|
176
|
-
}
|
|
177
|
-
return /** @type {any} */ ($nodeSchema)
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* @type {s.Schema<DeltaNode<any,{[key:string]: any},any,any>>}
|
|
182
|
-
*/
|
|
183
|
-
export const $nodeAny = s.$constructedBy(DeltaNode)
|
package/delta/node.test.d.ts
DELETED
package/delta/node.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node.test.d.ts","sourceRoot":"","sources":["node.test.js"],"names":[],"mappings":"AAOO,mCAFI,CAAC,CAAC,QAAQ,QAgCpB;AAEM,0CAqBN;mBA5DkB,cAAc"}
|