diff --git a/crates/loro-wasm/src/lib.rs b/crates/loro-wasm/src/lib.rs index f11518ed..af28ac7f 100644 --- a/crates/loro-wasm/src/lib.rs +++ b/crates/loro-wasm/src/lib.rs @@ -592,6 +592,7 @@ fn call_subscriber(ob: observer::Observer, e: DiffEvent) { origin: e.doc.origin.to_string(), target: e.container.id.clone(), diff: e.container.diff.to_owned(), + from_checkout: e.doc.from_checkout, } // PERF: converting the events into js values may hurt performance .into_js(); @@ -609,6 +610,7 @@ fn call_after_micro_task(ob: observer::Observer, e: DiffEvent) { let copy = drop_handler.clone(); let event = Event { from_children: e.from_children, + from_checkout: e.doc.from_checkout, local: e.doc.local, origin: e.doc.origin.to_string(), target: e.container.id.clone(), @@ -643,6 +645,7 @@ pub struct Event { pub from_children: bool, origin: String, target: ContainerID, + from_checkout: bool, diff: Diff, path: JsValue, } @@ -651,6 +654,7 @@ impl Event { fn into_js(self) -> JsValue { let obj = js_sys::Object::new(); Reflect::set(&obj, &"local".into(), &self.local.into()).unwrap(); + Reflect::set(&obj, &"fromCheckout".into(), &self.from_checkout.into()).unwrap(); Reflect::set(&obj, &"fromChildren".into(), &self.from_children.into()).unwrap(); Reflect::set(&obj, &"origin".into(), &self.origin.into()).unwrap(); Reflect::set(&obj, &"target".into(), &self.target.to_string().into()).unwrap(); diff --git a/loro-js/src/index.ts b/loro-js/src/index.ts index 2fec902b..49af68bb 100644 --- a/loro-js/src/index.ts +++ b/loro-js/src/index.ts @@ -64,8 +64,19 @@ export type MapDiff = { export type Diff = ListDiff | TextDiff | MapDiff; export interface LoroEvent { + /** + * If true, this event was triggered by a local change. + */ local: boolean; origin?: string; + /** + * If true, this event was triggered by a child container. + */ + fromChildren: boolean; + /** + * If true, this event was triggered by a checkout. + */ + fromCheckout: boolean; diff: Diff; target: ContainerID; path: Path;