hypercore 11.27.12 → 11.27.13
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 +18 -0
- package/package.json +1 -1
package/lib/session-state.js
CHANGED
|
@@ -3,6 +3,7 @@ const b4a = require('b4a')
|
|
|
3
3
|
const assert = require('nanoassert')
|
|
4
4
|
const flat = require('flat-tree')
|
|
5
5
|
const quickbit = require('quickbit-universal')
|
|
6
|
+
const HypercoreStorage = require('hypercore-storage')
|
|
6
7
|
|
|
7
8
|
const {
|
|
8
9
|
INVALID_OPERATION,
|
|
@@ -249,6 +250,13 @@ class SessionState {
|
|
|
249
250
|
return true
|
|
250
251
|
}
|
|
251
252
|
|
|
253
|
+
_precommit(state) {
|
|
254
|
+
assert(
|
|
255
|
+
state.parent === this && state.storage.core.dataPointer === this.storage.core.dataPointer,
|
|
256
|
+
'Atomic state must flush to parent'
|
|
257
|
+
)
|
|
258
|
+
}
|
|
259
|
+
|
|
252
260
|
async _commit() {
|
|
253
261
|
await this.mutex.lock()
|
|
254
262
|
|
|
@@ -957,12 +965,21 @@ class SessionState {
|
|
|
957
965
|
return { tree, flushed }
|
|
958
966
|
}
|
|
959
967
|
|
|
968
|
+
static isParent(state, parent) {
|
|
969
|
+
// atomic batches have parent set
|
|
970
|
+
if (state.parent && state.parent === parent) return true
|
|
971
|
+
|
|
972
|
+
return HypercoreStorage.isParentStorage(state.storage, parent.storage)
|
|
973
|
+
}
|
|
974
|
+
|
|
960
975
|
async commit(state, { signature, keyPair, length = state.length, treeLength = -1 } = {}) {
|
|
961
976
|
assert(
|
|
962
977
|
this.isDefault() || (this.parent && this.parent.isDefault()),
|
|
963
978
|
'Can only commit into default state'
|
|
964
979
|
)
|
|
965
980
|
|
|
981
|
+
assert(SessionState.isParent(state, this), 'Cannot commit across cores')
|
|
982
|
+
|
|
966
983
|
if (this.core._repairMode) {
|
|
967
984
|
throw ASSERTION('Cannot commit while repair mode is on')
|
|
968
985
|
}
|
|
@@ -1180,6 +1197,7 @@ class SessionState {
|
|
|
1180
1197
|
|
|
1181
1198
|
if (atom) {
|
|
1182
1199
|
this.atomized = atom
|
|
1200
|
+
atom.preflush(this._precommit.bind(this, state))
|
|
1183
1201
|
atom.onflush(state._commit.bind(state))
|
|
1184
1202
|
}
|
|
1185
1203
|
|