1import { Function } from "@/Neon/Function";
2import { InvokeFunction } from "@/Neon/InvokeFunction";
3import { InvokeFunctionHttp } from "@/Neon/InvokeFunctionHttp";
4import * as Effect from "effect/Effect";
5import * as HttpServerResponse from "effect/http/HttpServerResponse";
6import Constructor from "./function-constructor.ts";
7import { project } from "./function-form-resources.ts";
8export class LayerFunction extends Function<LayerFunction>()("LayerFunction") {}
9export default LayerFunction.make(
10 Effect.gen(function* () {
11 return { project: yield* project, main: import.meta.url };
12 }),
13 Effect.gen(function* () {
14 const invoke = yield* InvokeFunction(yield* Constructor);
15 return {
16 fetch: Effect.gen(function* () {
17 const response = yield* invoke.fetch().pipe(Effect.orDie);
18 const text = yield* Effect.tryPromise(() => response.text()).pipe(
19 Effect.orDie,
20 );
21 return HttpServerResponse.text(`layer:${text}`);
22 }),
23 };
24 }).pipe(Effect.provide(InvokeFunctionHttp)),
25);