braid-text 0.2.68 → 0.2.69

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 +500 -306
  2. package/package.json +1 -1
  3. package/test/test.html +223 -50
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "braid-text",
3
- "version": "0.2.68",
3
+ "version": "0.2.69",
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.html CHANGED
@@ -113,7 +113,7 @@ runTest(
113
113
  var x = await new Promise(done => {
114
114
  braid_text.get(new URL('http://localhost:8889/${key}'), {
115
115
  subscribe: update => {
116
- if (update.body_text) done(update.body_text)
116
+ if (update.body_text === 'yo') done(update.body_text)
117
117
  }
118
118
  })
119
119
  })
@@ -134,6 +134,33 @@ runTest(
134
134
  'yo'
135
135
  )
136
136
 
137
+ runTest(
138
+ "test braid_text.sync, key to url, where url breaks",
139
+ async () => {
140
+ var key = 'test' + Math.random().toString(36).slice(2)
141
+
142
+ var r = await braid_fetch(`/eval`, {
143
+ method: 'PUT',
144
+ body: `void (async () => {
145
+ var count = 0
146
+ var ops
147
+ braid_text.sync('/${key}', new URL('http://localhost:8889/have_error'), ops = {
148
+ on_connect: () => {
149
+ count++
150
+ if (count === 2) {
151
+ res.end('it reconnected!')
152
+ ops.my_unsync()
153
+ }
154
+ }
155
+ })
156
+ })()`
157
+ })
158
+ return await r.text()
159
+
160
+ },
161
+ 'it reconnected!'
162
+ )
163
+
137
164
  runTest(
138
165
  "test braid_text.sync, url to key",
139
166
  async () => {
@@ -163,6 +190,36 @@ runTest(
163
190
  'got: hi'
164
191
  )
165
192
 
193
+ runTest(
194
+ "test braid_text.sync, url to resource",
195
+ async () => {
196
+ var key_a = 'test-a-' + Math.random().toString(36).slice(2)
197
+ var key_b = 'test-b-' + Math.random().toString(36).slice(2)
198
+
199
+ var r = await braid_fetch(`/${key_a}`, {
200
+ method: 'PUT',
201
+ body: 'hi'
202
+ })
203
+ if (!r.ok) return 'got: ' + r.status
204
+
205
+ var r = await braid_fetch(`/eval`, {
206
+ method: 'PUT',
207
+ body: `void (async () => {
208
+ var resource = await braid_text.get_resource('/${key_b}')
209
+ braid_text.sync(new URL('http://localhost:8889/${key_a}'), resource)
210
+ res.end('')
211
+ })()`
212
+ })
213
+ if (!r.ok) return 'got: ' + r.status
214
+
215
+ await new Promise(done => setTimeout(done, 100))
216
+
217
+ var r = await braid_fetch(`/${key_b}`)
218
+ return 'got: ' + (await r.text())
219
+ },
220
+ 'got: hi'
221
+ )
222
+
166
223
  runTest(
167
224
  "test braid_text.sync, with two urls",
168
225
  async () => {
@@ -222,6 +279,117 @@ runTest(
222
279
  'got: hi'
223
280
  )
224
281
 
282
+ runTest(
283
+ "test braid_text.sync, key to url, when HEAD fails",
284
+ async () => {
285
+ var key_a = 'test-a-' + Math.random().toString(36).slice(2)
286
+
287
+ var r = await braid_fetch(`/${key_a}`, {
288
+ method: 'PUT',
289
+ body: 'hi'
290
+ })
291
+ if (!r.ok) return 'got: ' + r.status
292
+
293
+ var r = await braid_fetch(`/eval`, {
294
+ method: 'PUT',
295
+ body: `void (async () => {
296
+ var count = 0
297
+ var ops
298
+ braid_text.sync('/${key_a}', new URL('http://localhost:8889/have_error'), ops = {
299
+ on_connect: () => {
300
+ count++
301
+ if (count === 2) {
302
+ res.end('it reconnected!')
303
+ ops.my_unsync()
304
+ }
305
+ }
306
+ })
307
+ })()`
308
+ })
309
+ if (!r.ok) return 'got: ' + r.status
310
+
311
+ return await r.text()
312
+ },
313
+ 'it reconnected!'
314
+ )
315
+
316
+ runTest(
317
+ "test when remote doesn't have a fork-point that we think they have",
318
+ async () => {
319
+ var key_a = 'test-a-' + Math.random().toString(36).slice(2)
320
+ var key_b = 'test-b-' + Math.random().toString(36).slice(2)
321
+ var key_c = 'test-c-' + Math.random().toString(36).slice(2)
322
+
323
+ var r = await braid_fetch(`/${key_a}`, {
324
+ method: 'PUT',
325
+ body: 'hi'
326
+ })
327
+ if (!r.ok) return 'got: ' + r.status
328
+
329
+ var r = await braid_fetch(`/eval`, {
330
+ method: 'PUT',
331
+ body: `void (async () => {
332
+ braid_text.sync('/${key_a}', new URL('http://localhost:8889/${key_b}'))
333
+ await new Promise(done => setTimeout(done, 100))
334
+ braid_text.sync('/${key_a}', new URL('http://localhost:8889/${key_c}'))
335
+ await new Promise(done => setTimeout(done, 100))
336
+ res.end('')
337
+ })()`
338
+ })
339
+ if (!r.ok) return 'got: ' + r.status
340
+
341
+ return await (await braid_fetch(`/${key_c}`)).text()
342
+ },
343
+ 'hi'
344
+ )
345
+
346
+ runTest(
347
+ "test when we don't have a fork-point with remote, but they do have a shared version",
348
+ async () => {
349
+ var key_a = 'test-a-' + Math.random().toString(36).slice(2)
350
+ var key_b = 'test-b-' + Math.random().toString(36).slice(2)
351
+
352
+ var r = await braid_fetch(`/${key_a}`, {
353
+ method: 'PUT',
354
+ body: 'hi'
355
+ })
356
+ if (!r.ok) return 'got: ' + r.status
357
+
358
+ var r = await braid_fetch(`/eval`, {
359
+ method: 'PUT',
360
+ body: `void (async () => {
361
+ var ops = {}
362
+ braid_text.sync('/${key_a}', '/${key_b}', ops)
363
+ await new Promise(done => setTimeout(done, 100))
364
+ ops.my_unsync()
365
+ res.end('')
366
+ })()`
367
+ })
368
+ if (!r.ok) return 'got: ' + r.status
369
+
370
+ var r = await braid_fetch(`/${key_a}`, {
371
+ method: 'PUT',
372
+ body: 'yo'
373
+ })
374
+ if (!r.ok) return 'got: ' + r.status
375
+
376
+ var r = await braid_fetch(`/eval`, {
377
+ method: 'PUT',
378
+ body: `void (async () => {
379
+ var ops = {}
380
+ braid_text.sync('/${key_a}', new URL('http://localhost:8889/${key_b}'), ops)
381
+ await new Promise(done => setTimeout(done, 100))
382
+ ops.my_unsync()
383
+ res.end('')
384
+ })()`
385
+ })
386
+ if (!r.ok) return 'got: ' + r.status
387
+
388
+ return await (await braid_fetch(`/${key_b}`)).text()
389
+ },
390
+ 'yo'
391
+ )
392
+
225
393
  runTest(
226
394
  "test braid_text.sync, with two keys",
227
395
  async () => {
@@ -488,44 +656,6 @@ runTest(
488
656
  'got: yo -- version: "xyz-1"'
489
657
  )
490
658
 
491
- runTest(
492
- "test updating meta data",
493
- async () => {
494
- var key = 'test-' + Math.random().toString(36).slice(2)
495
-
496
- var r1 = await braid_fetch(`/eval`, {
497
- method: 'PUT',
498
- body: `void (async () => {
499
- var resource = await braid_text.get_resource('/${key}')
500
- resource.update_meta({ test_meta_info: 42 })
501
- res.end(JSON.stringify(resource.meta))
502
- })()`
503
- })
504
-
505
- return (await r1.text())
506
- },
507
- '{"test_meta_info":42}'
508
- )
509
-
510
- runTest(
511
- "test updating meta data when do db_folder set",
512
- async () => {
513
- var key = 'test-' + Math.random().toString(36).slice(2)
514
-
515
- var r1 = await braid_fetch(`/eval`, {
516
- method: 'PUT',
517
- body: `void (async () => {
518
- var resource = await braid_text2.get_resource('/${key}')
519
- resource.update_meta({ test_meta_info: 42 })
520
- res.end(JSON.stringify(resource.meta))
521
- })()`
522
- })
523
-
524
- return (await r1.text())
525
- },
526
- '{"test_meta_info":42}'
527
- )
528
-
529
659
  runTest(
530
660
  "test loading a meta file from disk",
531
661
  async () => {
@@ -535,7 +665,8 @@ runTest(
535
665
  method: 'PUT',
536
666
  body: `void (async () => {
537
667
  var resource = await braid_text.get_resource('/${key}')
538
- resource.update_meta({ test_meta_info: 42 })
668
+ resource.meta = { test_meta_info: 42 }
669
+ resource.change_meta()
539
670
 
540
671
  await new Promise(done => setTimeout(done, 200))
541
672
 
@@ -782,7 +913,9 @@ runTest(
782
913
  })
783
914
  if (!r.ok) throw 'got: ' + r.statusCode
784
915
 
916
+ var a = new AbortController()
785
917
  let r2 = await braid_fetch(`/${key}`, {
918
+ signal: a.signal,
786
919
  version: ['hi-0'],
787
920
  subscribe: true
788
921
  })
@@ -790,7 +923,10 @@ runTest(
790
923
  var p = new Promise(async (done, fail) => {
791
924
  r2.subscribe(update => {
792
925
  parts.push(update.extra_headers['repr-digest'])
793
- if (parts.length > 1) done()
926
+ if (parts.length > 1) {
927
+ done()
928
+ a.abort()
929
+ }
794
930
  }, fail)
795
931
  })
796
932
 
@@ -822,7 +958,9 @@ runTest(
822
958
  })
823
959
  if (!r.ok) throw 'got: ' + r.statusCode
824
960
 
961
+ var a = new AbortController()
825
962
  let r2 = await braid_fetch(`/${key}`, {
963
+ signal: a.signal,
826
964
  version: ['hi-0'],
827
965
  headers: { 'merge-type': 'dt' },
828
966
  subscribe: true
@@ -831,7 +969,10 @@ runTest(
831
969
  var p = new Promise(async (done, fail) => {
832
970
  r2.subscribe(update => {
833
971
  parts.push(update.extra_headers['repr-digest'])
834
- if (parts.length > 1) done()
972
+ if (parts.length > 1) {
973
+ done()
974
+ a.abort()
975
+ }
835
976
  }, fail)
836
977
  })
837
978
 
@@ -1075,12 +1216,16 @@ runTest(
1075
1216
  var p_done
1076
1217
  var p = new Promise(done => p_done = done)
1077
1218
 
1219
+ var a = new AbortController()
1078
1220
  var r = await braid_fetch(`/${key}`, {
1221
+ signal: a.signal,
1079
1222
  subscribe: true
1080
1223
  })
1081
1224
  r.subscribe(update => {
1082
- if (update.version[0] === 'hi-0')
1225
+ if (update.version[0] === 'hi-0') {
1083
1226
  p_done(update.patches[0].content_text)
1227
+ a.abort()
1228
+ }
1084
1229
  })
1085
1230
 
1086
1231
  var r = await braid_fetch(`/${key}`, {
@@ -1117,10 +1262,10 @@ runTest(
1117
1262
  body: 'x'
1118
1263
  })
1119
1264
 
1120
- if (!r.ok) throw 'got: ' + r.statusCode
1265
+ if (!r.ok) throw 'got: ' + r.status
1121
1266
 
1122
1267
  r = await f
1123
- if (!r.ok) throw 'got: ' + r.statusCode
1268
+ if (!r.ok) throw 'got: ' + r.status
1124
1269
 
1125
1270
  var r2 = await braid_fetch(`/${key}`)
1126
1271
  return await r2.text()
@@ -1633,13 +1778,16 @@ runTest(
1633
1778
  })
1634
1779
  if (!r.ok) throw 'got: ' + r.statusCode
1635
1780
 
1781
+ var a = new AbortController()
1636
1782
  let r2 = await braid_fetch(`/${key}`, {
1783
+ signal: a.signal,
1637
1784
  version: ['hi-0'],
1638
1785
  subscribe: true
1639
1786
  })
1640
1787
  return await new Promise(async (done, fail) => {
1641
1788
  r2.subscribe(update => {
1642
1789
  done(JSON.stringify(update.parents))
1790
+ a.abort()
1643
1791
  }, fail)
1644
1792
  })
1645
1793
  },
@@ -1659,7 +1807,9 @@ runTest(
1659
1807
  })
1660
1808
  if (!r.ok) throw 'got: ' + r.statusCode
1661
1809
 
1810
+ var a = new AbortController()
1662
1811
  let r2 = await braid_fetch(`/${key}`, {
1812
+ signal: a.signal,
1663
1813
  version: ['hi-0'],
1664
1814
  subscribe: true,
1665
1815
  headers: {
@@ -1669,6 +1819,7 @@ runTest(
1669
1819
  return r2.headers.get('merge-type') + ':' + await new Promise(async (done, fail) => {
1670
1820
  r2.subscribe(update => {
1671
1821
  done(JSON.stringify(update.parents))
1822
+ a.abort()
1672
1823
  }, fail)
1673
1824
  })
1674
1825
  },
@@ -1688,7 +1839,9 @@ runTest(
1688
1839
  })
1689
1840
  if (!r.ok) throw 'got: ' + r.statusCode
1690
1841
 
1842
+ var a = new AbortController()
1691
1843
  let r2 = await braid_fetch(`/${key}`, {
1844
+ signal: a.signal,
1692
1845
  version: ['hi-1'],
1693
1846
  subscribe: true,
1694
1847
  headers: {
@@ -1696,8 +1849,14 @@ runTest(
1696
1849
  }
1697
1850
  })
1698
1851
  return await new Promise(async (done, fail) => {
1699
- r2.subscribe(update => done('got something'), fail)
1700
- setTimeout(() => done('got nothing'), 1500)
1852
+ r2.subscribe(update => {
1853
+ done('got something')
1854
+ a.abort()
1855
+ }, fail)
1856
+ setTimeout(() => {
1857
+ done('got nothing')
1858
+ a.abort()
1859
+ }, 1500)
1701
1860
  })
1702
1861
  },
1703
1862
  'got nothing'
@@ -1716,7 +1875,9 @@ runTest(
1716
1875
  })
1717
1876
  if (!r.ok) throw 'got: ' + r.statusCode
1718
1877
 
1878
+ var a = new AbortController()
1719
1879
  let r2 = await braid_fetch(`/${key}`, {
1880
+ signal: a.signal,
1720
1881
  subscribe: true,
1721
1882
  headers: {
1722
1883
  'Merge-Type': 'dt'
@@ -1724,7 +1885,10 @@ runTest(
1724
1885
  })
1725
1886
  return r2.headers.get('merge-type') + ':' + await new Promise(async (done, fail) => {
1726
1887
  r2.subscribe(update => {
1727
- if (update.version[0] === 'hi-1') done('got it!')
1888
+ if (update.version[0] === 'hi-1') {
1889
+ done('got it!')
1890
+ a.abort()
1891
+ }
1728
1892
  }, fail)
1729
1893
  })
1730
1894
  },
@@ -1779,11 +1943,16 @@ runTest(
1779
1943
  body: JSON.stringify({a: 5, b: 6}, null, 4)
1780
1944
  })
1781
1945
 
1946
+ var a = new AbortController()
1782
1947
  let r = await braid_fetch(`/${key}`, {
1948
+ signal: a.signal,
1783
1949
  subscribe: true
1784
1950
  })
1785
1951
 
1786
- r.subscribe(update => done(update.body_text), fail)
1952
+ r.subscribe(update => {
1953
+ done(update.body_text)
1954
+ a.abort()
1955
+ }, fail)
1787
1956
  })
1788
1957
  },
1789
1958
  JSON.stringify({a: 5, b: 6}, null, 4)
@@ -2010,10 +2179,14 @@ runTest(
2010
2179
  })
2011
2180
  if (!r.ok) throw 'got: ' + r.statusCode
2012
2181
 
2182
+ var a = new AbortController()
2013
2183
  var r = await braid_fetch(`/${key}`, {
2184
+ signal: a.signal,
2014
2185
  subscribe: true
2015
2186
  })
2016
- return r.headers.get('current-version')
2187
+ var result = r.headers.get('current-version')
2188
+ a.abort()
2189
+ return result
2017
2190
  },
2018
2191
  '"hi-11"'
2019
2192
  )