@xstate/store
Advanced tools
Comparing version 2.1.0 to 2.2.0
@@ -0,1 +1,2 @@ | ||
import { InspectionEvent } from 'xstate'; | ||
export type EventPayloadMap = Record<string, {} | null | undefined>; | ||
@@ -45,2 +46,11 @@ export type ExtractEventsFromPayloadMap<T extends EventPayloadMap> = Values<{ | ||
getInitialSnapshot: () => StoreSnapshot<TContext>; | ||
/** | ||
* Subscribes to [inspection events](https://stately.ai/docs/inspection) from | ||
* the store. | ||
* | ||
* Inspectors that call `store.inspect(…)` will immediately receive an | ||
* "@xstate.actor" inspection event. | ||
*/ | ||
inspect: (observer: Observer<InspectionEvent> | ((inspectionEvent: InspectionEvent) => void)) => Subscription; | ||
sessionId: string; | ||
} | ||
@@ -47,0 +57,0 @@ export type SnapshotFromStore<TStore extends Store<any, any>> = TStore extends Store<infer TContext, any> ? StoreSnapshot<TContext> : never; |
@@ -18,2 +18,3 @@ 'use strict'; | ||
} | ||
const inspectionObservers = new WeakMap(); | ||
function createStoreCore(initialContext, transitions, updater) { | ||
@@ -31,6 +32,25 @@ let observers; | ||
currentSnapshot = transition(currentSnapshot, event); | ||
inspectionObservers.get(store)?.forEach(observer => { | ||
observer.next?.({ | ||
type: '@xstate.snapshot', | ||
event, | ||
snapshot: currentSnapshot, | ||
actorRef: store, | ||
rootId: store.sessionId | ||
}); | ||
}); | ||
observers?.forEach(o => o.next?.(currentSnapshot)); | ||
} | ||
const store = { | ||
sessionId: 'test', | ||
send(event) { | ||
inspectionObservers.get(store)?.forEach(observer => { | ||
observer.next?.({ | ||
type: '@xstate.event', | ||
event, | ||
sourceRef: undefined, | ||
actorRef: store, | ||
rootId: store.sessionId | ||
}); | ||
}); | ||
receive(event); | ||
@@ -56,2 +76,26 @@ }, | ||
return this; | ||
}, | ||
inspect: observerOrFn => { | ||
const observer = toObserver(observerOrFn); | ||
inspectionObservers.set(store, inspectionObservers.get(store) ?? new Set()); | ||
inspectionObservers.get(store).add(observer); | ||
observer.next?.({ | ||
type: '@xstate.actor', | ||
actorRef: store, | ||
rootId: store.sessionId | ||
}); | ||
observer.next?.({ | ||
type: '@xstate.snapshot', | ||
snapshot: initialSnapshot, | ||
event: { | ||
type: '@xstate.init' | ||
}, | ||
actorRef: store, | ||
rootId: store.sessionId | ||
}); | ||
return { | ||
unsubscribe() { | ||
return inspectionObservers.get(store)?.delete(observer); | ||
} | ||
}; | ||
} | ||
@@ -58,0 +102,0 @@ }; |
@@ -14,2 +14,3 @@ const symbolObservable = (() => typeof Symbol === 'function' && Symbol.observable || '@@observable')(); | ||
} | ||
const inspectionObservers = new WeakMap(); | ||
function createStoreCore(initialContext, transitions, updater) { | ||
@@ -27,6 +28,25 @@ let observers; | ||
currentSnapshot = transition(currentSnapshot, event); | ||
inspectionObservers.get(store)?.forEach(observer => { | ||
observer.next?.({ | ||
type: '@xstate.snapshot', | ||
event, | ||
snapshot: currentSnapshot, | ||
actorRef: store, | ||
rootId: store.sessionId | ||
}); | ||
}); | ||
observers?.forEach(o => o.next?.(currentSnapshot)); | ||
} | ||
const store = { | ||
sessionId: 'test', | ||
send(event) { | ||
inspectionObservers.get(store)?.forEach(observer => { | ||
observer.next?.({ | ||
type: '@xstate.event', | ||
event, | ||
sourceRef: undefined, | ||
actorRef: store, | ||
rootId: store.sessionId | ||
}); | ||
}); | ||
receive(event); | ||
@@ -52,2 +72,26 @@ }, | ||
return this; | ||
}, | ||
inspect: observerOrFn => { | ||
const observer = toObserver(observerOrFn); | ||
inspectionObservers.set(store, inspectionObservers.get(store) ?? new Set()); | ||
inspectionObservers.get(store).add(observer); | ||
observer.next?.({ | ||
type: '@xstate.actor', | ||
actorRef: store, | ||
rootId: store.sessionId | ||
}); | ||
observer.next?.({ | ||
type: '@xstate.snapshot', | ||
snapshot: initialSnapshot, | ||
event: { | ||
type: '@xstate.init' | ||
}, | ||
actorRef: store, | ||
rootId: store.sessionId | ||
}); | ||
return { | ||
unsubscribe() { | ||
return inspectionObservers.get(store)?.delete(observer); | ||
} | ||
}; | ||
} | ||
@@ -54,0 +98,0 @@ }; |
{ | ||
"name": "@xstate/store", | ||
"version": "2.1.0", | ||
"version": "2.2.0", | ||
"description": "Simple stores", | ||
@@ -56,3 +56,3 @@ "keywords": [ | ||
"react-dom": "^18.0.0", | ||
"xstate": "^5.17.0" | ||
"xstate": "^5.17.4" | ||
}, | ||
@@ -59,0 +59,0 @@ "peerDependencies": { |
35194
834