all backend tests passing
This commit is contained in:
parent
0a4e28a52d
commit
771c6bee18
5 changed files with 37 additions and 53 deletions
|
@ -82,9 +82,10 @@ let getChanges = (backend,other) => clean(backend).getChanges(clean(other))
|
|||
let getChangesForActor = (backend,actor) => clean(backend).getChangesForActor(actor)
|
||||
let getMissingChanges = (backend,clock) => clean(backend).getMissingChanges(clock)
|
||||
let getMissingDeps = (backend) => clean(backend).getMissingDeps()
|
||||
let _elemIds = (backend,obj_id) => clean(backend)._elemIds(obj_id)
|
||||
|
||||
module.exports = {
|
||||
init, applyChanges, applyLocalChange, getPatch,
|
||||
getChanges, getChangesForActor, getMissingChanges, getMissingDeps, merge, getClock,
|
||||
getHistory, getUndoStack, getRedoStack, loadChanges
|
||||
getHistory, getUndoStack, getRedoStack, loadChanges, _elemIds
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use automerge_backend::{ActorID, AutomergeError, Backend, Change, ChangeRequest, Clock};
|
||||
use automerge_backend::{ActorID, AutomergeError, Backend, Change, ChangeRequest, Clock, OpID};
|
||||
use serde::de::DeserializeOwned;
|
||||
use serde::Serialize;
|
||||
use wasm_bindgen::prelude::*;
|
||||
|
@ -145,7 +145,16 @@ impl State {
|
|||
self.clone()
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
#[wasm_bindgen(js_name = _elemIds)]
|
||||
pub fn get_elem_ids(&self, _object_id: JsValue) -> Result<JsValue, JsValue> {
|
||||
log!("elemids");
|
||||
let object_id: OpID = js_to_rust(_object_id)?;
|
||||
let elemids = self
|
||||
.backend.get_elem_ids(&object_id);
|
||||
// .map_err(automerge_error_to_js);
|
||||
rust_to_js(&elemids)
|
||||
}
|
||||
|
||||
#[wasm_bindgen(js_name = forkAt)]
|
||||
pub fn fork_at(&self, _clock: JsValue) -> Result<State, JsValue> {
|
||||
log!("fork_at");
|
||||
|
|
|
@ -53,13 +53,7 @@ impl Backend {
|
|||
let object_id = self.obj_alias.insert_and_get(&id, &child, &obj)?;
|
||||
let key =
|
||||
op_set.resolve_key(&id, &object_id, key, &mut elemids, false, false)?;
|
||||
let pred = op_set.get_ops(&object_id, &key).unwrap_or_else(|| {
|
||||
if let Ok(opid) = key.to_opid() {
|
||||
vec![opid]
|
||||
} else {
|
||||
vec![]
|
||||
}
|
||||
});
|
||||
let pred = op_set.get_pred(&object_id, &key, *insert);
|
||||
Operation::MakeMap {
|
||||
object_id,
|
||||
key,
|
||||
|
@ -76,13 +70,7 @@ impl Backend {
|
|||
let object_id = self.obj_alias.insert_and_get(&id, &child, &obj)?;
|
||||
let key =
|
||||
op_set.resolve_key(&id, &object_id, key, &mut elemids, false, false)?;
|
||||
let pred = op_set.get_ops(&object_id, &key).unwrap_or_else(|| {
|
||||
if let Ok(opid) = key.to_opid() {
|
||||
vec![opid]
|
||||
} else {
|
||||
vec![]
|
||||
}
|
||||
});
|
||||
let pred = op_set.get_pred(&object_id, &key, *insert);
|
||||
Operation::MakeTable {
|
||||
object_id,
|
||||
key,
|
||||
|
@ -99,13 +87,7 @@ impl Backend {
|
|||
let object_id = self.obj_alias.insert_and_get(&id, &child, &obj)?;
|
||||
let key =
|
||||
op_set.resolve_key(&id, &object_id, key, &mut elemids, false, false)?;
|
||||
let pred = op_set.get_ops(&object_id, &key).unwrap_or_else(|| {
|
||||
if let Ok(opid) = key.to_opid() {
|
||||
vec![opid]
|
||||
} else {
|
||||
vec![]
|
||||
}
|
||||
});
|
||||
let pred = op_set.get_pred(&object_id, &key, *insert);
|
||||
Operation::MakeList {
|
||||
object_id,
|
||||
key,
|
||||
|
@ -122,13 +104,7 @@ impl Backend {
|
|||
let object_id = self.obj_alias.insert_and_get(&id, &child, &obj)?;
|
||||
let key =
|
||||
op_set.resolve_key(&id, &object_id, key, &mut elemids, false, false)?;
|
||||
let pred = op_set.get_ops(&object_id, &key).unwrap_or_else(|| {
|
||||
if let Ok(opid) = key.to_opid() {
|
||||
vec![opid]
|
||||
} else {
|
||||
vec![]
|
||||
}
|
||||
});
|
||||
let pred = op_set.get_pred(&object_id, &key, *insert);
|
||||
Operation::MakeText {
|
||||
object_id,
|
||||
key,
|
||||
|
@ -140,13 +116,7 @@ impl Backend {
|
|||
let object_id = self.obj_alias.get(&obj)?;
|
||||
let key =
|
||||
op_set.resolve_key(&id, &object_id, key, &mut elemids, false, true)?;
|
||||
let pred = op_set.get_ops(&object_id, &key).unwrap_or_else(|| {
|
||||
if let Ok(opid) = key.to_opid() {
|
||||
vec![opid]
|
||||
} else {
|
||||
vec![]
|
||||
}
|
||||
});
|
||||
let pred = op_set.get_pred(&object_id, &key, false);
|
||||
Operation::Delete {
|
||||
object_id,
|
||||
key,
|
||||
|
@ -168,13 +138,7 @@ impl Backend {
|
|||
*insert,
|
||||
false,
|
||||
)?;
|
||||
let pred = op_set.get_ops(&object_id, &key).unwrap_or_else(|| {
|
||||
if let Ok(opid) = key.to_opid() {
|
||||
vec![opid]
|
||||
} else {
|
||||
vec![]
|
||||
}
|
||||
});
|
||||
let pred = op_set.get_pred(&object_id, &key, *insert);
|
||||
Operation::Increment {
|
||||
object_id,
|
||||
key,
|
||||
|
@ -198,13 +162,7 @@ impl Backend {
|
|||
*insert,
|
||||
false,
|
||||
)?;
|
||||
let pred = op_set.get_ops(&object_id, &key).unwrap_or_else(|| {
|
||||
if let Ok(opid) = key.to_opid() {
|
||||
vec![opid]
|
||||
} else {
|
||||
vec![]
|
||||
}
|
||||
});
|
||||
let pred = op_set.get_pred(&object_id, &key, *insert);
|
||||
Operation::Set {
|
||||
object_id,
|
||||
key,
|
||||
|
@ -479,6 +437,10 @@ impl Backend {
|
|||
self.op_set.get_missing_deps()
|
||||
}
|
||||
|
||||
pub fn get_elem_ids(&self, object_id: &OpID) -> Vec<OpID> {
|
||||
self.op_set.get_elem_ids(object_id)
|
||||
}
|
||||
|
||||
pub fn merge(&mut self, remote: &Backend) -> Result<Patch, AutomergeError> {
|
||||
let missing_changes = remote
|
||||
.get_missing_changes(self.op_set.clock.clone())
|
||||
|
|
|
@ -370,6 +370,18 @@ impl OpSet {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn get_pred(&self, object_id: &OpID, key: &Key, insert: bool) -> Vec<OpID> {
|
||||
if insert {
|
||||
Vec::new()
|
||||
} else if let Some(ops) = self.get_ops(&object_id, &key) {
|
||||
ops
|
||||
} else if let Ok(opid) = key.to_opid() {
|
||||
vec![opid]
|
||||
} else {
|
||||
Vec::new()
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME - omg - this function is so bad :(
|
||||
pub fn resolve_key(
|
||||
&self,
|
||||
|
|
|
@ -44,7 +44,7 @@ pub enum OpID {
|
|||
|
||||
impl Ord for OpID {
|
||||
fn cmp(&self, other: &Self) -> Ordering {
|
||||
match (self, other) {
|
||||
match (other, self) {
|
||||
(OpID::Root, OpID::Root) => Ordering::Equal,
|
||||
(_, OpID::Root) => Ordering::Greater,
|
||||
(OpID::Root, _) => Ordering::Less,
|
||||
|
|
Loading…
Add table
Reference in a new issue