hypercore 11.6.1 → 11.6.2
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/lib/session-state.js +21 -18
- package/package.json +1 -1
package/lib/session-state.js
CHANGED
|
@@ -287,14 +287,16 @@ module.exports = class SessionState {
|
|
|
287
287
|
|
|
288
288
|
if (dependency) this.storage.setDependencyHead(dependency)
|
|
289
289
|
|
|
290
|
-
const
|
|
290
|
+
const b = bitfield
|
|
291
291
|
|
|
292
|
-
if (
|
|
293
|
-
this.ontruncate(tree,
|
|
294
|
-
if (!
|
|
292
|
+
if (b && b.truncated && b.start < currLength) {
|
|
293
|
+
this.ontruncate(tree, b.start, currLength, true)
|
|
294
|
+
if (!b || b.appends === 0) return
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
-
|
|
297
|
+
const append = b ? { start: b.start, length: b.appends, drop: false } : null
|
|
298
|
+
|
|
299
|
+
this.onappend(tree, append, true)
|
|
298
300
|
} finally {
|
|
299
301
|
this.mutex.unlock()
|
|
300
302
|
this.core.checkIfIdle()
|
|
@@ -604,35 +606,36 @@ module.exports = class SessionState {
|
|
|
604
606
|
const b = bitfield
|
|
605
607
|
|
|
606
608
|
if (b.drop) {
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
609
|
+
// truncation must be from end
|
|
610
|
+
if (p && (b.start + b.length !== p.start + p.appends)) {
|
|
611
|
+
throw INVALID_OPERATION('Atomic truncations must be contiguous')
|
|
610
612
|
}
|
|
611
613
|
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
614
|
+
// actual truncation
|
|
615
|
+
if (p === null || b.start < p.start) {
|
|
616
|
+
this._pendingBitfield = { truncated: true, start: b.start, appends: 0 }
|
|
615
617
|
return
|
|
616
618
|
}
|
|
617
619
|
|
|
618
|
-
|
|
619
|
-
p.
|
|
620
|
+
// just clearing batch data
|
|
621
|
+
p.appends = b.start - p.start
|
|
622
|
+
|
|
623
|
+
// we cleared the current batch
|
|
624
|
+
if (p.appends === 0) this._pendingBitfield = null
|
|
620
625
|
|
|
621
|
-
if (p.length === 0) this._pendingBitfield = null
|
|
622
626
|
return
|
|
623
627
|
}
|
|
624
628
|
|
|
625
629
|
if (p === null) {
|
|
626
|
-
this._pendingBitfield = { truncated:
|
|
630
|
+
this._pendingBitfield = { truncated: false, start: b.start, appends: b.length }
|
|
627
631
|
return
|
|
628
632
|
}
|
|
629
633
|
|
|
630
|
-
|
|
631
|
-
if (b.start !== start + p.length) {
|
|
634
|
+
if (b.start !== p.start + p.appends) {
|
|
632
635
|
throw INVALID_OPERATION('Atomic operations must be contiguous')
|
|
633
636
|
}
|
|
634
637
|
|
|
635
|
-
p.
|
|
638
|
+
p.appends += b.length
|
|
636
639
|
}
|
|
637
640
|
|
|
638
641
|
async catchup (length) {
|