braid-text 0.0.16 → 0.0.18
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/braid-text-db/!.1 +0 -0
- package/braid-text-db/!favicon.ico.1 +0 -0
- package/braid-text-db/!hi.1 +0 -0
- package/braid-text-db/!hi10.1 +0 -0
- package/braid-text-db/!hi11.1 +0 -0
- package/braid-text-db/!hi2.1 +0 -0
- package/braid-text-db/!hi3.1 +0 -0
- package/braid-text-db/!hi4.1 +0 -0
- package/braid-text-db/!hi5.1 +0 -0
- package/braid-text-db/!hi6.1 +0 -0
- package/braid-text-db/!hi7.1 +0 -0
- package/braid-text-db/!hi8.1 +0 -0
- package/braid-text-db/!hi9.1 +0 -0
- package/index.js +72 -66
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/index.js
CHANGED
|
@@ -207,67 +207,8 @@ braid_text.get = async (key, options) => {
|
|
|
207
207
|
let resource = (typeof key == 'string') ? await get_resource(key) : key
|
|
208
208
|
|
|
209
209
|
if (!options.subscribe) {
|
|
210
|
-
let doc =
|
|
211
|
-
if (options.version || options.parents)
|
|
212
|
-
let frontier = {}
|
|
213
|
-
options.version?.forEach((x) => (frontier[x] = true))
|
|
214
|
-
options.parents?.forEach((x) => (frontier[x] = true))
|
|
215
|
-
|
|
216
|
-
let local_version = []
|
|
217
|
-
let [agents, versions, parentss] = parseDT([...resource.doc.toBytes()])
|
|
218
|
-
for (let i = 0; i < versions.length; i++) {
|
|
219
|
-
if (frontier[versions[i].join("-")]) {
|
|
220
|
-
local_version.push(i)
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
local_version = new Uint32Array(local_version)
|
|
224
|
-
|
|
225
|
-
let after_versions = {}
|
|
226
|
-
let [_, after_versions_array, __] = parseDT([...resource.doc.getPatchSince(local_version)])
|
|
227
|
-
for (let v of after_versions_array) after_versions[v.join("-")] = true
|
|
228
|
-
|
|
229
|
-
let new_doc = new Doc()
|
|
230
|
-
let op_runs = resource.doc.getOpsSince([])
|
|
231
|
-
let i = 0
|
|
232
|
-
op_runs.forEach((op_run) => {
|
|
233
|
-
let parents = parentss[i].map((x) => x.join("-"))
|
|
234
|
-
let start = op_run.start
|
|
235
|
-
let end = start + 1
|
|
236
|
-
let content = op_run.content?.[0]
|
|
237
|
-
|
|
238
|
-
let len = op_run.end - op_run.start
|
|
239
|
-
let base_i = i
|
|
240
|
-
for (let j = 1; j <= len; j++) {
|
|
241
|
-
let I = base_i + j
|
|
242
|
-
if (
|
|
243
|
-
j == len ||
|
|
244
|
-
parentss[I].length != 1 ||
|
|
245
|
-
parentss[I][0][0] != versions[I - 1][0] ||
|
|
246
|
-
parentss[I][0][1] != versions[I - 1][1] ||
|
|
247
|
-
versions[I][0] != versions[I - 1][0] ||
|
|
248
|
-
versions[I][1] != versions[I - 1][1] + 1
|
|
249
|
-
) {
|
|
250
|
-
for (; i < I; i++) {
|
|
251
|
-
let version = versions[i].join("-")
|
|
252
|
-
if (!after_versions[version]) {
|
|
253
|
-
new_doc.mergeBytes(
|
|
254
|
-
OpLog_create_bytes(
|
|
255
|
-
version,
|
|
256
|
-
parentss[i].map((x) => x.join("-")),
|
|
257
|
-
content ? start + (i - base_i) : start,
|
|
258
|
-
content?.[0]
|
|
259
|
-
)
|
|
260
|
-
)
|
|
261
|
-
}
|
|
262
|
-
if (op_run.content) content = content.slice(1)
|
|
263
|
-
}
|
|
264
|
-
content = ""
|
|
265
|
-
}
|
|
266
|
-
if (op_run.content) content += op_run.content[j]
|
|
267
|
-
}
|
|
268
|
-
})
|
|
269
|
-
doc = new_doc
|
|
270
|
-
} else doc = resource.doc
|
|
210
|
+
let doc = resource.doc
|
|
211
|
+
if (options.version || options.parents) doc = dt_get(doc, options.version || options.parents)
|
|
271
212
|
|
|
272
213
|
return {
|
|
273
214
|
version: doc.getRemoteVersion().map((x) => x.join("-")),
|
|
@@ -361,10 +302,17 @@ braid_text.put = async (key, options) => {
|
|
|
361
302
|
|
|
362
303
|
let resource = (typeof key == 'string') ? await get_resource(key) : key
|
|
363
304
|
|
|
305
|
+
let parents = resource.doc.getRemoteVersion().map((x) => x.join("-"))
|
|
306
|
+
let og_parents = options.parents || parents
|
|
307
|
+
|
|
308
|
+
let max_pos = count_code_points(v_eq(parents, og_parents) ?
|
|
309
|
+
resource.doc.get() :
|
|
310
|
+
dt_get(resource.doc, og_parents).get())
|
|
311
|
+
|
|
364
312
|
if (body != null) {
|
|
365
313
|
patches = [{
|
|
366
314
|
unit: 'text',
|
|
367
|
-
range: `[0:${
|
|
315
|
+
range: `[0:${max_pos}]`,
|
|
368
316
|
content: body
|
|
369
317
|
}]
|
|
370
318
|
}
|
|
@@ -377,7 +325,6 @@ braid_text.put = async (key, options) => {
|
|
|
377
325
|
})).sort((a, b) => a.range[0] - b.range[0])
|
|
378
326
|
|
|
379
327
|
// validate patch positions
|
|
380
|
-
let max_pos = resource.doc.get().length
|
|
381
328
|
let must_be_at_least = 0
|
|
382
329
|
for (let p of patches) {
|
|
383
330
|
if (p.range[0] < must_be_at_least || p.range[0] > max_pos) throw new Error(`invalid patch range position: ${p.range[0]}`)
|
|
@@ -398,8 +345,6 @@ braid_text.put = async (key, options) => {
|
|
|
398
345
|
|
|
399
346
|
v = `${v[0]}-${v[1] + 1 - change_count}`
|
|
400
347
|
|
|
401
|
-
let parents = resource.doc.getRemoteVersion().map((x) => x.join("-"))
|
|
402
|
-
let og_parents = options.parents || parents
|
|
403
348
|
let ps = og_parents
|
|
404
349
|
|
|
405
350
|
let v_before = resource.doc.getLocalVersion()
|
|
@@ -514,8 +459,9 @@ braid_text.put = async (key, options) => {
|
|
|
514
459
|
}
|
|
515
460
|
} else {
|
|
516
461
|
if (resource.simpleton_clients.size) {
|
|
462
|
+
let version = resource.doc.getRemoteVersion().map((x) => x.join("-"))
|
|
517
463
|
patches = get_xf_patches(resource.doc, v_before)
|
|
518
|
-
let x = { version
|
|
464
|
+
let x = { version, parents, patches }
|
|
519
465
|
console.log(`sending: ${JSON.stringify(x)}`)
|
|
520
466
|
for (let client of resource.simpleton_clients) {
|
|
521
467
|
if (client.my_timeout) continue
|
|
@@ -754,6 +700,66 @@ async function file_sync(key, process_delta, get_init) {
|
|
|
754
700
|
//////////////////////////////////////////////////////////////////
|
|
755
701
|
//////////////////////////////////////////////////////////////////
|
|
756
702
|
|
|
703
|
+
function dt_get(doc, version) {
|
|
704
|
+
let frontier = {}
|
|
705
|
+
version.forEach((x) => (frontier[x] = true))
|
|
706
|
+
|
|
707
|
+
let local_version = []
|
|
708
|
+
let [agents, versions, parentss] = parseDT([...doc.toBytes()])
|
|
709
|
+
for (let i = 0; i < versions.length; i++) {
|
|
710
|
+
if (frontier[versions[i].join("-")]) {
|
|
711
|
+
local_version.push(i)
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
local_version = new Uint32Array(local_version)
|
|
715
|
+
|
|
716
|
+
let after_versions = {}
|
|
717
|
+
let [_, after_versions_array, __] = parseDT([...doc.getPatchSince(local_version)])
|
|
718
|
+
for (let v of after_versions_array) after_versions[v.join("-")] = true
|
|
719
|
+
|
|
720
|
+
let new_doc = new Doc()
|
|
721
|
+
let op_runs = doc.getOpsSince([])
|
|
722
|
+
let i = 0
|
|
723
|
+
op_runs.forEach((op_run) => {
|
|
724
|
+
let parents = parentss[i].map((x) => x.join("-"))
|
|
725
|
+
let start = op_run.start
|
|
726
|
+
let end = start + 1
|
|
727
|
+
let content = op_run.content?.[0]
|
|
728
|
+
|
|
729
|
+
let len = op_run.end - op_run.start
|
|
730
|
+
let base_i = i
|
|
731
|
+
for (let j = 1; j <= len; j++) {
|
|
732
|
+
let I = base_i + j
|
|
733
|
+
if (
|
|
734
|
+
j == len ||
|
|
735
|
+
parentss[I].length != 1 ||
|
|
736
|
+
parentss[I][0][0] != versions[I - 1][0] ||
|
|
737
|
+
parentss[I][0][1] != versions[I - 1][1] ||
|
|
738
|
+
versions[I][0] != versions[I - 1][0] ||
|
|
739
|
+
versions[I][1] != versions[I - 1][1] + 1
|
|
740
|
+
) {
|
|
741
|
+
for (; i < I; i++) {
|
|
742
|
+
let version = versions[i].join("-")
|
|
743
|
+
if (!after_versions[version]) {
|
|
744
|
+
new_doc.mergeBytes(
|
|
745
|
+
OpLog_create_bytes(
|
|
746
|
+
version,
|
|
747
|
+
parentss[i].map((x) => x.join("-")),
|
|
748
|
+
content ? start + (i - base_i) : start,
|
|
749
|
+
content?.[0]
|
|
750
|
+
)
|
|
751
|
+
)
|
|
752
|
+
}
|
|
753
|
+
if (op_run.content) content = content.slice(1)
|
|
754
|
+
}
|
|
755
|
+
content = ""
|
|
756
|
+
}
|
|
757
|
+
if (op_run.content) content += op_run.content[j]
|
|
758
|
+
}
|
|
759
|
+
})
|
|
760
|
+
return new_doc
|
|
761
|
+
}
|
|
762
|
+
|
|
757
763
|
function defrag_dt(doc) {
|
|
758
764
|
let fresh_doc = new Doc("server")
|
|
759
765
|
fresh_doc.mergeBytes(doc.toBytes())
|