interface AppLayer {
readonly init: () => Effect.Effect<never, never, unknown>;
}
const AppLayer = Context.Tag<AppLayer>("appLayer");
const AppLayerLive = Layer.succeed(
AppLayer,
AppLayer.of({
init: () =>
Effect.promise(() => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ data: "config" });
}, 1000);
});
}),
})
);
const runtime = await Effect.runPromise(
Layer.toRuntime(AppLayerLive).pipe(Scope.extend(scope))
);
const program = Effect.gen(function* (_) {
const appLayer = yield* _(AppLayer);
const config = yield* _(appLayer.init());
const serverLoadedFeed = yield* _(pipe(Effect.succeed(config)));
return serverLoadedFeed;
});
Runtime.runPromise(runtime)(program);
interface AppLayer {
readonly init: () => Effect.Effect<never, never, unknown>;
}
const AppLayer = Context.Tag<AppLayer>("appLayer");
const AppLayerLive = Layer.succeed(
AppLayer,
AppLayer.of({
init: () =>
Effect.promise(() => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ data: "config" });
}, 1000);
});
}),
})
);
const runtime = await Effect.runPromise(
Layer.toRuntime(AppLayerLive).pipe(Scope.extend(scope))
);
const program = Effect.gen(function* (_) {
const appLayer = yield* _(AppLayer);
const config = yield* _(appLayer.init());
const serverLoadedFeed = yield* _(pipe(Effect.succeed(config)));
return serverLoadedFeed;
});
Runtime.runPromise(runtime)(program);