|
|
@@ -33,10 +33,7 @@ type State = {
|
|
|
}
|
|
|
|
|
|
export interface Interface {
|
|
|
- readonly publish: <D extends BusEvent.Definition>(
|
|
|
- def: D,
|
|
|
- properties: BusProperties<D>,
|
|
|
- ) => Effect.Effect<void>
|
|
|
+ readonly publish: <D extends BusEvent.Definition>(def: D, properties: BusProperties<D>) => Effect.Effect<void>
|
|
|
readonly subscribe: <D extends BusEvent.Definition>(def: D) => Stream.Stream<Payload<D>>
|
|
|
readonly subscribeAll: () => Stream.Stream<Payload>
|
|
|
readonly subscribeCallback: <D extends BusEvent.Definition>(
|
|
|
@@ -85,10 +82,7 @@ export const layer = Layer.effect(
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- function publish<D extends BusEvent.Definition>(
|
|
|
- def: D,
|
|
|
- properties: BusProperties<D>,
|
|
|
- ) {
|
|
|
+ function publish<D extends BusEvent.Definition>(def: D, properties: BusProperties<D>) {
|
|
|
return Effect.gen(function* () {
|
|
|
const s = yield* InstanceState.get(state)
|
|
|
const payload: Payload = { type: def.type, properties }
|
|
|
@@ -184,17 +178,11 @@ const { runPromise, runSync } = makeRuntime(Service, layer)
|
|
|
|
|
|
// runSync is safe here because the subscribe chain (InstanceState.get, PubSub.subscribe,
|
|
|
// Scope.make, Effect.forkScoped) is entirely synchronous. If any step becomes async, this will throw.
|
|
|
-export async function publish<D extends BusEvent.Definition>(
|
|
|
- def: D,
|
|
|
- properties: BusProperties<D>,
|
|
|
-) {
|
|
|
+export async function publish<D extends BusEvent.Definition>(def: D, properties: BusProperties<D>) {
|
|
|
return runPromise((svc) => svc.publish(def, properties))
|
|
|
}
|
|
|
|
|
|
-export function subscribe<D extends BusEvent.Definition>(
|
|
|
- def: D,
|
|
|
- callback: (event: Payload<D>) => unknown,
|
|
|
-) {
|
|
|
+export function subscribe<D extends BusEvent.Definition>(def: D, callback: (event: Payload<D>) => unknown) {
|
|
|
return runSync((svc) => svc.subscribeCallback(def, callback))
|
|
|
}
|
|
|
|