diff --git a/.vscode/settings.json b/.vscode/settings.json index 72446f4..723e209 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,6 @@ { - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib", + "editor.codeActionsOnSave": { + "source.fixAll.biome": "explicit" + } } diff --git a/biome.json b/biome.json index c59f6d7..ec2e9a1 100644 --- a/biome.json +++ b/biome.json @@ -1,34 +1,36 @@ { - "$schema": "https://biomejs.dev/schemas/latest/schema.json", - "vcs": { - "enabled": false, - "clientKind": "git", - "useIgnoreFile": false - }, - "files": { - "ignoreUnknown": false - }, - "formatter": { - "enabled": false, - "indentStyle": "tab" - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true - } - }, - "javascript": { - "formatter": { - "quoteStyle": "double" - } - }, - "assist": { - "enabled": true, - "actions": { - "source": { - "organizeImports": "on" - } - } + "$schema": "https://biomejs.dev/schemas/latest/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false + }, + "formatter": { + "enabled": false + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "nursery": { + "useSortedClasses": "error" + } } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + } } diff --git a/packages/common/biome.json b/packages/common/biome.json index 401b454..41d707b 100644 --- a/packages/common/biome.json +++ b/packages/common/biome.json @@ -1,8 +1,8 @@ { - "$schema": "https://biomejs.dev/schemas/latest/schema.json", - "root": false, - "extends": "//", - "files": { - "includes": ["./src/**"] - } + "$schema": "https://biomejs.dev/schemas/latest/schema.json", + "root": false, + "extends": "//", + "files": { + "includes": ["./src/**"] + } } diff --git a/packages/server/biome.json b/packages/server/biome.json index 401b454..41d707b 100644 --- a/packages/server/biome.json +++ b/packages/server/biome.json @@ -1,8 +1,8 @@ { - "$schema": "https://biomejs.dev/schemas/latest/schema.json", - "root": false, - "extends": "//", - "files": { - "includes": ["./src/**"] - } + "$schema": "https://biomejs.dev/schemas/latest/schema.json", + "root": false, + "extends": "//", + "files": { + "includes": ["./src/**"] + } } diff --git a/packages/server/src/entrypoint.node.ts b/packages/server/src/entrypoint.node.ts index baf03fe..52f1b4c 100644 --- a/packages/server/src/entrypoint.node.ts +++ b/packages/server/src/entrypoint.node.ts @@ -1,6 +1,6 @@ +import { createServer } from "node:http" import { NodeContext, NodeHttpServer, NodeRuntime } from "@effect/platform-node" import { Effect, Layer } from "effect" -import { createServer } from "node:http" import { ServerConfig } from "./config" import { Server } from "./server" diff --git a/packages/server/src/http.ts b/packages/server/src/http.ts index da02f1c..8cc3964 100644 --- a/packages/server/src/http.ts +++ b/packages/server/src/http.ts @@ -16,51 +16,41 @@ const makeWebRpcRoute = Effect.all([ Effect.provide(WebRpcLive), ) -const makeProductionWebappMiddleware = Effect.gen(function*() { +const makeProductionWebappRoute = Effect.fnUntraced(function*(route: HttpRouter.PathInput) { const path = yield* Path.Path const fs = yield* FileSystem.FileSystem const dist = path.join(yield* path.fromFileUrl(new URL(".", import.meta.resolve("@website/webapp"))), "dist") - return () => Effect.gen(function*() { + return HttpRouter.all(route, Effect.gen(function*() { const req = yield* HttpServerRequest.HttpServerRequest const source = path.join(dist, req.url) - const isValid = yield* fs.stat(source).pipe( + const exists = yield* fs.stat(source).pipe( Effect.andThen(stat => stat.type === "File"), Effect.catchAll(() => Effect.succeed(false)), ) return yield* HttpServerResponse.setHeader( - yield* HttpServerResponse.file(isValid ? source : path.join(dist, "index.html")), + yield* HttpServerResponse.file(exists ? source : path.join(dist, "index.html")), "Cache-Control", `public, max-age=${Duration.toSeconds("365 days")}, immutable` ) - }) + })) }) -export const HttpAppDevelopment = Effect.provide(makeWebRpcRoute, WebRpcSerializationDevelopment).pipe( - Effect.map(serveWebRpc => router.pipe( - serveWebRpc, - HttpServer.serve(flow( - HttpMiddleware.logger, - HttpMiddleware.xForwardedHeaders, - )), +export const HttpAppDevelopment = Layer.unwrapScoped(Effect.gen(function*() { + return router.pipe( + yield* Effect.provide(makeWebRpcRoute, WebRpcSerializationDevelopment), + HttpServer.serve(flow(HttpMiddleware.logger, HttpMiddleware.xForwardedHeaders)), HttpServer.withLogAddress, - )), + ) +})) - Layer.unwrapScoped, -) - -export const HttpAppProduction = Effect.all([ - Effect.provide(makeWebRpcRoute, WebRpcSerializationProduction), - makeProductionWebappMiddleware, -]).pipe( - Effect.map(([serveWebRpc, serveProductionWebapp]) => router.pipe( - serveWebRpc, - serveProductionWebapp, +export const HttpAppProduction = Layer.unwrapScoped(Effect.gen(function*() { + return router.pipe( + yield* Effect.provide(makeWebRpcRoute, WebRpcSerializationProduction), + yield* makeProductionWebappRoute("*"), HttpServer.serve(HttpMiddleware.xForwardedHeaders), HttpServer.withLogAddress, - )), - - Layer.unwrapScoped, -) + ) +})) diff --git a/packages/webapp/biome.json b/packages/webapp/biome.json index 0e84ec8..77ba81c 100644 --- a/packages/webapp/biome.json +++ b/packages/webapp/biome.json @@ -1,8 +1,8 @@ { - "$schema": "https://biomejs.dev/schemas/latest/schema.json", - "root": false, - "extends": "//", - "files": { - "includes": ["./src/**", "!src/routeTree.gen.ts"] - } + "$schema": "https://biomejs.dev/schemas/latest/schema.json", + "root": false, + "extends": "//", + "files": { + "includes": ["./src/**", "!src/routeTree.gen.ts"] + } } diff --git a/packages/webapp/src/components/ui/card.tsx b/packages/webapp/src/components/ui/card.tsx index 5b36c60..54bd7e7 100644 --- a/packages/webapp/src/components/ui/card.tsx +++ b/packages/webapp/src/components/ui/card.tsx @@ -7,7 +7,7 @@ function Card({ className, ...props }: React.ComponentProps<"div">) {
) { return (
) diff --git a/packages/webapp/src/routes/__root.tsx b/packages/webapp/src/routes/__root.tsx index 7a25978..9eb7cd3 100644 --- a/packages/webapp/src/routes/__root.tsx +++ b/packages/webapp/src/routes/__root.tsx @@ -1,6 +1,6 @@ -import { Card, CardContent } from "@/components/ui/card" -import { Outlet, createRootRoute } from "@tanstack/react-router" +import { createRootRoute, Outlet } from "@tanstack/react-router" import { TanStackRouterDevtools } from "@tanstack/react-router-devtools" +import { Card, CardContent } from "@/components/ui/card" export const Route = createRootRoute({ @@ -9,7 +9,7 @@ export const Route = createRootRoute({ function RootComponent() { return <> -
+
diff --git a/renovate.json b/renovate.json index 5db72dd..5cb8b95 100644 --- a/renovate.json +++ b/renovate.json @@ -2,5 +2,24 @@ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "config:recommended" + ], + "packageRules": [ + { + "matchManagers": ["npm"], + "matchPaths": ["./packages/**"], + "manager": "bun" + }, + { + "matchManagers": ["bun", "npm"], + "matchUpdateTypes": ["minor", "patch"], + "groupName": "bun minor+patch updates", + "groupSlug": "bun-minor-patch" + }, + { + "matchManagers": ["bun", "npm"], + "matchUpdateTypes": ["major"], + "groupName": "bun major updates", + "groupSlug": "bun-major" + } ] }