braid-text 0.2.66 → 0.2.67

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 +43 -5
  2. package/package.json +1 -1
  3. package/test/test.html +222 -0
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  let { Doc, OpLog, Branch } = require("@braid.org/diamond-types-node")
3
- let braidify = require("braid-http").http_server
3
+ let {http_server: braidify, fetch: braid_fetch} = require("braid-http")
4
4
  let fs = require("fs")
5
5
 
6
6
  function create_braid_text() {
@@ -291,6 +291,28 @@ function create_braid_text() {
291
291
  }
292
292
 
293
293
  braid_text.get = async (key, options) => {
294
+ if (key instanceof URL) {
295
+ if (!options) options = {}
296
+
297
+ options.my_abort = new AbortController()
298
+
299
+ var params = {
300
+ signal: options.my_abort.signal,
301
+ retry: () => true,
302
+ subscribe: !!options.subscribe,
303
+ heartbeats: 120,
304
+ }
305
+ for (var x of ['headers', 'parents', 'version', 'peer'])
306
+ if (options[x] != null) params[x] = options[x]
307
+
308
+ var res = await braid_fetch(key.href, params)
309
+
310
+ if (options.subscribe) {
311
+ res.subscribe(options.subscribe)
312
+ return res
313
+ } else return await res.text()
314
+ }
315
+
294
316
  if (!options) {
295
317
  // if it doesn't exist already, don't create it in this case
296
318
  if (!braid_text.cache[key]) return
@@ -412,6 +434,8 @@ function create_braid_text() {
412
434
  braid_text.forget = async (key, options) => {
413
435
  if (!options) throw new Error('options is required')
414
436
 
437
+ if (key instanceof URL) return options.my_abort.abort()
438
+
415
439
  let resource = (typeof key == 'string') ? await get_resource(key) : key
416
440
 
417
441
  if (options.merge_type != "dt")
@@ -420,6 +444,20 @@ function create_braid_text() {
420
444
  }
421
445
 
422
446
  braid_text.put = async (key, options) => {
447
+ if (key instanceof URL) {
448
+ options.my_abort = new AbortController()
449
+
450
+ var params = {
451
+ method: 'PUT',
452
+ signal: options.my_abort.signal,
453
+ retry: () => true,
454
+ }
455
+ for (var x of ['headers', 'parents', 'version', 'peer', 'body'])
456
+ if (options[x] != null) params[x] = options[x]
457
+
458
+ return await braid_fetch(key.href, params)
459
+ }
460
+
423
461
  let { version, patches, body, peer } = options
424
462
 
425
463
  // support for json patch puts..
@@ -894,11 +932,11 @@ function create_braid_text() {
894
932
  var meta_filename = `${braid_text.db_folder}/.meta/${encoded}`
895
933
  var meta_dirty = null
896
934
  var meta_saving = null
935
+ var meta_file_content = '{}'
897
936
  try {
898
- set_meta(JSON.parse(await fs.promises.readFile(meta_filename)))
899
- } catch (e) {
900
- console.error(`Error processing meta file: ${meta_filename}`)
901
- }
937
+ var meta_file_content = await fs.promises.readFile(meta_filename)
938
+ } catch (e) {}
939
+ set_meta(JSON.parse(meta_file_content))
902
940
 
903
941
  let chain = Promise.resolve()
904
942
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "braid-text",
3
- "version": "0.2.66",
3
+ "version": "0.2.67",
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
@@ -96,6 +96,228 @@ async function runTest(testName, testFunction, expectedResult) {
96
96
  }
97
97
  }
98
98
 
99
+ // runTest(
100
+ // "test braid_text.get(url), with no options",
101
+ // async () => {
102
+ // var key = 'test-' + Math.random().toString(36).slice(2)
103
+ // let r = await braid_fetch(`/${key}`, {
104
+ // method: 'PUT',
105
+ // body: 'hi'
106
+ // })
107
+ // if (!r.ok) return 'got: ' + r.status
108
+
109
+ // var r1 = await braid_fetch(`/eval`, {
110
+ // method: 'PUT',
111
+ // body: `void (async () => {
112
+ // res.end(await braid_text.get(new URL('http://localhost:8889/${key}')))
113
+ // })()`
114
+ // })
115
+
116
+ // return 'got: ' + (await r1.text())
117
+ // },
118
+ // 'got: hi'
119
+ // )
120
+
121
+ // runTest(
122
+ // "test braid_text.get(url), with headers",
123
+ // async () => {
124
+ // var key = 'test-' + Math.random().toString(36).slice(2)
125
+ // let r = await braid_fetch(`/${key}`, {
126
+ // method: 'PUT',
127
+ // version: ['xyz-1'],
128
+ // body: 'hi'
129
+ // })
130
+ // if (!r.ok) return 'got: ' + r.status
131
+
132
+ // var r1 = await braid_fetch(`/eval`, {
133
+ // method: 'PUT',
134
+ // body: `void (async () => {
135
+ // res.end(await braid_text.get(new URL('http://localhost:8889/${key}'), {
136
+ // headers: {
137
+ // version: '"xyz-0"'
138
+ // }
139
+ // }))
140
+ // })()`
141
+ // })
142
+
143
+ // return 'got: ' + (await r1.text())
144
+ // },
145
+ // 'got: h'
146
+ // )
147
+
148
+ // runTest(
149
+ // "test braid_text.get(url), with parents",
150
+ // async () => {
151
+ // var key = 'test-' + Math.random().toString(36).slice(2)
152
+ // let r = await braid_fetch(`/${key}`, {
153
+ // method: 'PUT',
154
+ // version: ['xyz-1'],
155
+ // body: 'hi'
156
+ // })
157
+ // if (!r.ok) return 'got: ' + r.status
158
+
159
+ // var r1 = await braid_fetch(`/eval`, {
160
+ // method: 'PUT',
161
+ // body: `void (async () => {
162
+ // res.end(await braid_text.get(new URL('http://localhost:8889/${key}'), {
163
+ // parents: ['xyz-0']
164
+ // }))
165
+ // })()`
166
+ // })
167
+
168
+ // return 'got: ' + (await r1.text())
169
+ // },
170
+ // 'got: h'
171
+ // )
172
+
173
+ // runTest(
174
+ // "test braid_text.get(url), with version and peer",
175
+ // async () => {
176
+ // var key = 'test-' + Math.random().toString(36).slice(2)
177
+ // let r = await braid_fetch(`/${key}`, {
178
+ // method: 'PUT',
179
+ // version: ['xyz-1'],
180
+ // body: 'hi'
181
+ // })
182
+ // if (!r.ok) return 'got: ' + r.status
183
+
184
+ // var r1 = await braid_fetch(`/eval`, {
185
+ // method: 'PUT',
186
+ // body: `void (async () => {
187
+ // res.end(await braid_text.get(new URL('http://localhost:8889/${key}'), {
188
+ // version: ['xyz-0'],
189
+ // peer: 'xyz'
190
+ // }))
191
+ // })()`
192
+ // })
193
+
194
+ // return 'got: ' + (await r1.text())
195
+ // },
196
+ // 'got: h'
197
+ // )
198
+
199
+ runTest(
200
+ "test braid_text.get(url) with subscription",
201
+ async () => {
202
+ var key = 'test-' + Math.random().toString(36).slice(2)
203
+ let r = await braid_fetch(`/${key}`, {
204
+ method: 'PUT',
205
+ version: ['xyz-1'],
206
+ body: 'hi'
207
+ })
208
+ if (!r.ok) return 'got: ' + r.status
209
+
210
+ var r1 = await braid_fetch(`/eval`, {
211
+ method: 'PUT',
212
+ body: `void (async () => {
213
+ var url = new URL('http://localhost:8889/${key}')
214
+ var update = await new Promise(done => {
215
+ var o = {
216
+ subscribe: update => {
217
+ braid_text.forget(url, o)
218
+ done(update)
219
+ }
220
+ }
221
+ braid_text.get(url, o)
222
+ })
223
+ res.end(update.body_text)
224
+ })()`
225
+ })
226
+
227
+ return 'got: ' + (await r1.text())
228
+ },
229
+ 'got: hi'
230
+ )
231
+
232
+ runTest(
233
+ "test braid_text.put(url), with body",
234
+ async () => {
235
+ var key = 'test-' + Math.random().toString(36).slice(2)
236
+
237
+ var r = await braid_fetch(`/eval`, {
238
+ method: 'PUT',
239
+ body: `void (async () => {
240
+ var r = await braid_text.put(new URL('http://localhost:8889/${key}'),
241
+ {body: 'yo'})
242
+ res.end('')
243
+ })()`
244
+ })
245
+ if (!r.ok) return 'got: ' + r.status
246
+
247
+ let r1 = await braid_fetch(`/${key}`)
248
+ return 'got: ' + (await r1.text())
249
+ },
250
+ 'got: yo'
251
+ )
252
+
253
+ runTest(
254
+ "test braid_text.put(url), with body and headers",
255
+ async () => {
256
+ var key = 'test-' + Math.random().toString(36).slice(2)
257
+
258
+ var r = await braid_fetch(`/eval`, {
259
+ method: 'PUT',
260
+ body: `void (async () => {
261
+ var r = await braid_text.put(new URL('http://localhost:8889/${key}'),
262
+ {body: 'yo', headers: {version: '"abc123-1"'}})
263
+ res.end('')
264
+ })()`
265
+ })
266
+ if (!r.ok) return 'got: ' + r.status
267
+
268
+ let r2 = await braid_fetch(`/${key}`)
269
+ return 'got: ' + (await r2.text()) + ' -- version: ' + r2.headers.get('version')
270
+ },
271
+ 'got: yo -- version: "abc123-1"'
272
+ )
273
+
274
+ runTest(
275
+ "test braid_text.put(url), with body and version and parents",
276
+ async () => {
277
+ var key = 'test-' + Math.random().toString(36).slice(2)
278
+ let r = await braid_fetch(`/${key}`, {
279
+ method: 'PUT',
280
+ body: 'hi',
281
+ version: ['abc-1']
282
+ })
283
+
284
+ var r1 = await braid_fetch(`/eval`, {
285
+ method: 'PUT',
286
+ body: `void (async () => {
287
+ var r = await braid_text.put(new URL('http://localhost:8889/${key}'),
288
+ {body: 'yo', version: ['xyz-3'], parents: ['abc-1']})
289
+ res.end('')
290
+ })()`
291
+ })
292
+ if (!r1.ok) return 'got: ' + r1.status
293
+
294
+ let r2 = await braid_fetch(`/${key}`)
295
+ return 'got: ' + (await r2.text()) + ' -- version: ' + r2.headers.get('version')
296
+ },
297
+ 'got: yo -- version: "xyz-3"'
298
+ )
299
+
300
+ runTest(
301
+ "test braid_text.put(url), with peer",
302
+ async () => {
303
+ var key = 'test-' + Math.random().toString(36).slice(2)
304
+
305
+ var r1 = await braid_fetch(`/eval`, {
306
+ method: 'PUT',
307
+ body: `void (async () => {
308
+ var r = await braid_text.put(new URL('http://localhost:8889/${key}'),
309
+ {body: 'yo', peer: 'xyz', parents: []})
310
+ res.end('')
311
+ })()`
312
+ })
313
+ if (!r1.ok) return 'got: ' + r1.status
314
+
315
+ let r2 = await braid_fetch(`/${key}`)
316
+ return 'got: ' + (await r2.text()) + ' -- version: ' + r2.headers.get('version')
317
+ },
318
+ 'got: yo -- version: "xyz-1"'
319
+ )
320
+
99
321
  runTest(
100
322
  "test updating meta data",
101
323
  async () => {