const ProgramLive = Layer.scopedDiscard(
Effect.gen(function* () {
const eventProcessor = yield* EventProcessor;
const notificationConsumer = yield* NotificationConsumer;
const fiber = yield* Effect.forkAll([eventProcessor.start, notificationConsumer.consume.pipe(Stream.runDrain)]);
yield* Effect.addFinalizer(() =>
Effect.log('Worker shutting down').pipe(
Effect.flatMap(() => Fiber.interrupt(fiber)),
Effect.tap(exit => Effect.log('Worker shut down', { exit }))
)
);
})
).pipe(
Layer.provide(
Layer.mergeAll(
NotificationConsumer.Default,
EventProcessor.Default({ repeatSchedule: Schedule.fixed(Duration.seconds(5)) })
)
)
);
const AppLive = Layer.mergeAll(ProgramLive, Server).pipe(Layer.provide(LoggerLive));
Layer.launch(AppLive).pipe(
NodeRuntime.runMain({
disablePrettyLogger: true,
})
);
const ProgramLive = Layer.scopedDiscard(
Effect.gen(function* () {
const eventProcessor = yield* EventProcessor;
const notificationConsumer = yield* NotificationConsumer;
const fiber = yield* Effect.forkAll([eventProcessor.start, notificationConsumer.consume.pipe(Stream.runDrain)]);
yield* Effect.addFinalizer(() =>
Effect.log('Worker shutting down').pipe(
Effect.flatMap(() => Fiber.interrupt(fiber)),
Effect.tap(exit => Effect.log('Worker shut down', { exit }))
)
);
})
).pipe(
Layer.provide(
Layer.mergeAll(
NotificationConsumer.Default,
EventProcessor.Default({ repeatSchedule: Schedule.fixed(Duration.seconds(5)) })
)
)
);
const AppLive = Layer.mergeAll(ProgramLive, Server).pipe(Layer.provide(LoggerLive));
Layer.launch(AppLive).pipe(
NodeRuntime.runMain({
disablePrettyLogger: true,
})
);