braid-text 0.2.17 → 0.2.19
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/index.js +11 -5
- package/package.json +1 -1
- package/test/test.js +30 -3
package/index.js
CHANGED
|
@@ -483,13 +483,16 @@ braid_text.put = async (key, options) => {
|
|
|
483
483
|
let version = resource.doc.getRemoteVersion().map((x) => x.join("-")).sort()
|
|
484
484
|
|
|
485
485
|
for (let client of resource.simpleton_clients) {
|
|
486
|
-
if (client.peer
|
|
486
|
+
if (peer && client.peer === peer) {
|
|
487
487
|
client.my_last_seen_version = [og_v]
|
|
488
488
|
}
|
|
489
489
|
|
|
490
490
|
function set_timeout(time_override) {
|
|
491
491
|
if (client.my_timeout) clearTimeout(client.my_timeout)
|
|
492
492
|
client.my_timeout = setTimeout(() => {
|
|
493
|
+
// if the doc has been freed, exit early
|
|
494
|
+
if (resource.doc.__wbg_ptr === 0) return
|
|
495
|
+
|
|
493
496
|
let version = resource.doc.getRemoteVersion().map((x) => x.join("-")).sort()
|
|
494
497
|
let x = { version }
|
|
495
498
|
x.parents = client.my_last_seen_version
|
|
@@ -507,7 +510,7 @@ braid_text.put = async (key, options) => {
|
|
|
507
510
|
}
|
|
508
511
|
|
|
509
512
|
if (client.my_timeout) {
|
|
510
|
-
if (client.peer
|
|
513
|
+
if (peer && client.peer === peer) {
|
|
511
514
|
if (!v_eq(client.my_last_sent_version, og_parents)) {
|
|
512
515
|
// note: we don't add to client.my_unused_version_count,
|
|
513
516
|
// because we're already in a timeout;
|
|
@@ -523,7 +526,7 @@ braid_text.put = async (key, options) => {
|
|
|
523
526
|
}
|
|
524
527
|
|
|
525
528
|
let x = { version }
|
|
526
|
-
if (client.peer
|
|
529
|
+
if (peer && client.peer === peer) {
|
|
527
530
|
if (!v_eq(client.my_last_sent_version, og_parents)) {
|
|
528
531
|
client.my_unused_version_count = (client.my_unused_version_count ?? 0) + 1
|
|
529
532
|
set_timeout()
|
|
@@ -571,15 +574,18 @@ braid_text.put = async (key, options) => {
|
|
|
571
574
|
patches: og_patches,
|
|
572
575
|
}
|
|
573
576
|
for (let client of resource.clients) {
|
|
574
|
-
if (client.peer
|
|
577
|
+
if (!peer || client.peer !== peer) client.subscribe(x)
|
|
575
578
|
}
|
|
576
579
|
|
|
577
580
|
await resource.db_delta(resource.doc.getPatchSince(v_before))
|
|
578
581
|
}
|
|
579
582
|
|
|
580
|
-
|
|
583
|
+
// currently version must be an array with exactly one element, e.g. ["abc-1"]
|
|
584
|
+
braid_text.revert = async (key, version) => {
|
|
581
585
|
var resource = (typeof key == 'string') ? await get_resource(key) : key
|
|
582
586
|
|
|
587
|
+
var [actor, seq] = decode_version(version[0])
|
|
588
|
+
|
|
583
589
|
// get version without actor-seq,
|
|
584
590
|
// and update actor_seqs
|
|
585
591
|
var v = []
|
package/package.json
CHANGED
package/test/test.js
CHANGED
|
@@ -17,7 +17,7 @@ async function test_revert() {
|
|
|
17
17
|
var key = Math.random().toString(36).slice(2)
|
|
18
18
|
await braid_text.put(key, {version: ['a-0'], body: 'A'})
|
|
19
19
|
await braid_text.put(key, {version: ['a-1'], parents: ['a-0'], patches: [{range: '[1:1]', content: 'B'}]})
|
|
20
|
-
await braid_text.revert(key, 'a'
|
|
20
|
+
await braid_text.revert(key, ['a-1'])
|
|
21
21
|
delete braid_text.cache[key]
|
|
22
22
|
var {version, body} = await braid_text.get(key, {})
|
|
23
23
|
if (version[0] != 'a-0') throw new Error('revert error: wrong version')
|
|
@@ -25,7 +25,7 @@ async function test_revert() {
|
|
|
25
25
|
|
|
26
26
|
await braid_text.put(key, {version: ['b-0'], parents: ['a-0'], patches: [{range: '[1:1]', content: 'C'}]})
|
|
27
27
|
if ('AC' !== await braid_text.get(key)) throw new Error('revert error: wrong text')
|
|
28
|
-
await braid_text.revert(key, 'b'
|
|
28
|
+
await braid_text.revert(key, ['b-0'])
|
|
29
29
|
if ('A' !== await braid_text.get(key)) throw new Error('revert error: wrong text')
|
|
30
30
|
delete braid_text.cache[key]
|
|
31
31
|
var {version, body} = await braid_text.get(key, {})
|
|
@@ -99,7 +99,7 @@ async function main() {
|
|
|
99
99
|
await braid_text.put(key, y)
|
|
100
100
|
|
|
101
101
|
// test revert
|
|
102
|
-
await braid_text.revert(key, actor
|
|
102
|
+
await braid_text.revert(key, [`${actor}-${(pre_seq ?? -1) + 1}`])
|
|
103
103
|
var new_text = await braid_text.get(key)
|
|
104
104
|
if (old_text !== new_text) throw new Error('revert failed!')
|
|
105
105
|
await braid_text.put(key, y)
|
|
@@ -127,6 +127,30 @@ async function main() {
|
|
|
127
127
|
console.log(`doc = `, await braid_text.get('doc', {version: middle_v}))
|
|
128
128
|
if (await braid_text.get('middle_doc') != (await braid_text.get('doc', {version: middle_v})).body) throw new Error('bad')
|
|
129
129
|
|
|
130
|
+
// test simplton
|
|
131
|
+
var first_time = true
|
|
132
|
+
await new Promise(async (done, fail) => {
|
|
133
|
+
await braid_text.get('middle_doc', {peer: 'sim', subscribe: async update => {
|
|
134
|
+
if (first_time) {
|
|
135
|
+
first_time = false
|
|
136
|
+
if (update.body !== await braid_text.get('middle_doc')) fail(new Error('test 2'))
|
|
137
|
+
|
|
138
|
+
var x = await braid_text.get('middle_doc', {})
|
|
139
|
+
await braid_text.put('middle_doc', {peer: 'sim', version: ['sim-0'], parents: x.version, patches: [{content: 'A', range: '[0:0]'}]})
|
|
140
|
+
await braid_text.put('middle_doc', {peer: 'other', merge_type: 'dt', version: ['other-0'], parents: [], patches: [{content: 'B', range: '[0:0]'}]})
|
|
141
|
+
await braid_text.put('middle_doc', {peer: 'sim', version: ['sim-1'], parents: ['sim-0'], patches: [{content: 'b', range: '[0:0]'}]})
|
|
142
|
+
await braid_text.put('middle_doc', {peer: 'sim', version: ['sim-2'], parents: ['sim-1'], patches: [{content: 'c', range: '[0:0]'}]})
|
|
143
|
+
await braid_text.revert('middle_doc', ['sim-0'])
|
|
144
|
+
await braid_text.revert('middle_doc', ['other-0'])
|
|
145
|
+
|
|
146
|
+
done()
|
|
147
|
+
}
|
|
148
|
+
}})
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
// test handler on dt
|
|
152
|
+
braid_text.get('middle_doc', {merge_type: 'dt', subscribe: async update => {}})
|
|
153
|
+
|
|
130
154
|
// try getting updates from middle_doc to doc
|
|
131
155
|
let o = {merge_type: 'dt', parents: middle_v, subscribe: update => {
|
|
132
156
|
braid_text.put('middle_doc', update)
|
|
@@ -171,6 +195,9 @@ function make_random_edit(doc) {
|
|
|
171
195
|
}
|
|
172
196
|
base_seq++
|
|
173
197
|
|
|
198
|
+
// try skipping some seqs.. to see if it breaks..
|
|
199
|
+
base_seq += Math.floor(Math.random() * 5)
|
|
200
|
+
|
|
174
201
|
console.log({agents, versions, include_versions})
|
|
175
202
|
|
|
176
203
|
let parent_doc = dt_get(doc, include_versions)
|