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.
Files changed (3) hide show
  1. package/index.js +11 -5
  2. package/package.json +1 -1
  3. 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 == 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 == 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 == 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 != peer) client.subscribe(x)
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
- braid_text.revert = async (key, actor, seq) => {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "braid-text",
3
- "version": "0.2.17",
3
+ "version": "0.2.19",
4
4
  "description": "Library for collaborative text over http using braid.",
5
5
  "author": "Braid Working Group",
6
6
  "repository": "braid-org/braid-text",
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', 1)
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', 0)
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, (pre_seq ?? -1) + 1)
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)