()
| 28 | const serviceMap = new Map<string, AnyActor>(); |
| 29 | |
| 30 | export function createDevTools(): XStateDevInterface { |
| 31 | const services = new Set<AnyActor>(); |
| 32 | const serviceListeners = new Set<ServiceListener>(); |
| 33 | |
| 34 | const unregister: XStateDevInterface['unregister'] = (service) => { |
| 35 | services.delete(service); |
| 36 | serviceMap.delete(service.sessionId); |
| 37 | }; |
| 38 | |
| 39 | return { |
| 40 | services, |
| 41 | register: (service) => { |
| 42 | services.add(service); |
| 43 | serviceMap.set(service.sessionId, service); |
| 44 | serviceListeners.forEach((listener) => listener(service)); |
| 45 | |
| 46 | service.subscribe({ |
| 47 | complete: () => unregister(service), |
| 48 | error: () => unregister(service) |
| 49 | }); |
| 50 | }, |
| 51 | unregister, |
| 52 | onRegister: (listener) => { |
| 53 | serviceListeners.add(listener); |
| 54 | services.forEach((service) => listener(service)); |
| 55 | |
| 56 | return { |
| 57 | unsubscribe: () => { |
| 58 | serviceListeners.delete(listener); |
| 59 | } |
| 60 | }; |
| 61 | } |
| 62 | }; |
| 63 | } |
| 64 | |
| 65 | const defaultInspectorOptions = { |
| 66 | url: 'https://stately.ai/viz?inspect', |
no test coverage detected
searching dependent graphs…