-
Notifications
You must be signed in to change notification settings - Fork 444
Expand file tree
/
Copy patheffect-platform.ts
More file actions
69 lines (57 loc) · 1.82 KB
/
Copy patheffect-platform.ts
File metadata and controls
69 lines (57 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { createServer } from "node:http";
import {
FetchHttpClient,
Headers,
HttpMiddleware,
HttpRouter,
HttpServer,
HttpServerRequest,
HttpServerResponse,
} from "@effect/platform";
import { NodeHttpServer, NodeRuntime } from "@effect/platform-node";
import { Config, Effect, Layer, Logger, LogLevel } from "effect";
import { createRouteHandler } from "uploadthing/effect-platform";
import { uploadRouter } from "./router.ts";
const uploadthingRouter = createRouteHandler({
router: uploadRouter,
});
/**
* Simple CORS middleware that allows everything
* Adjust to your needs.
*/
const cors = HttpMiddleware.make((app) =>
Effect.gen(function* () {
const req = yield* HttpServerRequest.HttpServerRequest;
const corsHeaders = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "*",
"Access-Control-Allow-Headers": "*",
};
if (req.method === "OPTIONS") {
return HttpServerResponse.empty({
status: 204,
headers: Headers.fromInput(corsHeaders),
});
}
const response = yield* app;
return response.pipe(HttpServerResponse.setHeaders(corsHeaders));
}),
);
const router = HttpRouter.empty.pipe(
HttpRouter.get("/api", HttpServerResponse.text("Hello from Effect")),
// @ts-expect-error - FIXME!!!
HttpRouter.mount("/api/uploadthing", uploadthingRouter),
);
const app = router.pipe(
cors,
HttpServer.serve(HttpMiddleware.logger),
HttpServer.withLogAddress,
Layer.provide(FetchHttpClient.layer),
);
const Port = Config.integer("PORT").pipe(Config.withDefault(3000));
const ServerLive = Layer.unwrapEffect(
Effect.map(Port, (port) =>
NodeHttpServer.layer(() => createServer(), { port }),
).pipe(Effect.provide(Logger.minimumLogLevel(LogLevel.Debug))),
);
NodeRuntime.runMain(Layer.launch(Layer.provide(app, ServerLive)));