const makeServiceA = Effect.gen(function* () {
// executed once
yield* Console.log("Init makeServiceA");
return {
doSomething: (_: Request) =>
Effect.gen(function* () {
// executed on every request
yield* Console.log("Do something with request");
return "ciao";
}),
};
});
class ServiceA extends Context.Tag("ServiceA")<
ServiceA,
Effect.Effect.Success<typeof makeServiceA>
>() {
static Live = Layer.effect(this, makeServiceA);
}
const program = Effect.gen(function* () {
const serviceA = yield* ServiceA;
return (request: Request) => serviceA.doSomething(request);
}).pipe(Effect.provide(ServiceA.Live));
// init services
const handler = await Effect.runPromise(program);
export async function POST(request: NextRequest) {
const response = await pipe(handler(request), Effect.runPromise);
return new NextResponse(response);
}
const makeServiceA = Effect.gen(function* () {
// executed once
yield* Console.log("Init makeServiceA");
return {
doSomething: (_: Request) =>
Effect.gen(function* () {
// executed on every request
yield* Console.log("Do something with request");
return "ciao";
}),
};
});
class ServiceA extends Context.Tag("ServiceA")<
ServiceA,
Effect.Effect.Success<typeof makeServiceA>
>() {
static Live = Layer.effect(this, makeServiceA);
}
const program = Effect.gen(function* () {
const serviceA = yield* ServiceA;
return (request: Request) => serviceA.doSomething(request);
}).pipe(Effect.provide(ServiceA.Live));
// init services
const handler = await Effect.runPromise(program);
export async function POST(request: NextRequest) {
const response = await pipe(handler(request), Effect.runPromise);
return new NextResponse(response);
}