Compare commits
13 Commits
f2e6325258
...
3180d19cd9
| Author | SHA1 | Date | |
|---|---|---|---|
| 3180d19cd9 | |||
| 8f0b319229 | |||
| dbe47272cc | |||
| 5269948e21 | |||
|
|
ca00d12a35 | ||
|
|
cf73d97896 | ||
|
|
ef3204322a | ||
|
|
9fbdeb6aa4 | ||
|
|
c15b91a3d9 | ||
|
|
29d9d6bd11 | ||
|
|
6b88f2948e | ||
|
|
fb860e8be6 | ||
|
|
0e605fb6d8 |
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@@ -1,3 +1,6 @@
|
||||
{
|
||||
"typescript.tsdk": "node_modules/typescript/lib"
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.biome": "explicit"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM oven/bun:1.2.22@sha256:66ba69deede44e3af5dc542def218fdb3bcad2205900ea761dc5623bf973d2df AS bun
|
||||
FROM oven/bun:1.2.23@sha256:6ebf306367da43ad75c4d5119563e24de9b66372929ad4fa31546be053a16f74 AS bun
|
||||
FROM node:22.19.0-trixie-slim@sha256:29942871c60d79cfa155b67136b8a26a9c635684a41484ca50fdd8dd6ca31c52
|
||||
COPY --from=bun /usr/local/bin/bun \
|
||||
/usr/local/bin/bunx \
|
||||
|
||||
64
biome.json
64
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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
4
bun.lock
4
bun.lock
@@ -5,7 +5,7 @@
|
||||
"name": "website",
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.2.4",
|
||||
"@effect/language-service": "^0.40.0",
|
||||
"@effect/language-service": "^0.41.0",
|
||||
"@types/bun": "latest",
|
||||
"npm-check-updates": "^18.1.1",
|
||||
"npm-sort": "^0.0.4",
|
||||
@@ -160,7 +160,7 @@
|
||||
|
||||
"@effect/experimental": ["@effect/experimental@0.54.6", "", { "dependencies": { "uuid": "^11.0.3" }, "peerDependencies": { "@effect/platform": "^0.90.2", "effect": "^3.17.7", "ioredis": "^5", "lmdb": "^3" }, "optionalPeers": ["ioredis", "lmdb"] }, "sha512-UqHMvCQmrZT6kUVoUC0lqyno4Yad+j9hBGCdUjW84zkLwAq08tPqySiZUKRwY+Ae5B2Ab8rISYJH7nQvct9DMQ=="],
|
||||
|
||||
"@effect/language-service": ["@effect/language-service@0.40.0", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-VHikOhYXm+ECy+mLSszHgCfP9YyKQyB9GLFGBKY2nbnru9xwgCnar8pBLA0AkSUjAgn3hc/mdcFdb/XL9uywLQ=="],
|
||||
"@effect/language-service": ["@effect/language-service@0.41.1", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-BZaFkF1JdoTIJuzT7mNfUnfQG2MLxkQtn5b9y1z0BZUIcNfs5p7yR0ekYfTkPkt+TVD+9HE12VC1SsG5DReKww=="],
|
||||
|
||||
"@effect/opentelemetry": ["@effect/opentelemetry@0.56.6", "", { "peerDependencies": { "@effect/platform": "^0.90.8", "@opentelemetry/api": "^1.9", "@opentelemetry/resources": "^2.0.0", "@opentelemetry/sdk-logs": "^0.203.0", "@opentelemetry/sdk-metrics": "^2.0.0", "@opentelemetry/sdk-trace-base": "^2.0.0", "@opentelemetry/sdk-trace-node": "^2.0.0", "@opentelemetry/sdk-trace-web": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.33.0", "effect": "^3.17.13" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/resources", "@opentelemetry/sdk-logs", "@opentelemetry/sdk-metrics", "@opentelemetry/sdk-trace-base", "@opentelemetry/sdk-trace-node", "@opentelemetry/sdk-trace-web"] }, "sha512-cBi9frXujTIEGXChkl4VdQfvDe7QvzC18SM8wK0CKYSgH9ZL7v/F5f5/3fTSTfEdO9ZyBk73s5Jbbogab0Q01g=="],
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ x-env-base: &env-base
|
||||
services:
|
||||
server:
|
||||
<<: *service-base
|
||||
image: oven/bun:1.2.22@sha256:66ba69deede44e3af5dc542def218fdb3bcad2205900ea761dc5623bf973d2df
|
||||
image: oven/bun:1.2.23@sha256:6ebf306367da43ad75c4d5119563e24de9b66372929ad4fa31546be053a16f74
|
||||
volumes:
|
||||
- *volume-app
|
||||
working_dir: /app/packages/server
|
||||
@@ -22,7 +22,7 @@ services:
|
||||
|
||||
cli:
|
||||
<<: *service-base
|
||||
image: oven/bun:1.2.22@sha256:66ba69deede44e3af5dc542def218fdb3bcad2205900ea761dc5623bf973d2df
|
||||
image: oven/bun:1.2.23@sha256:6ebf306367da43ad75c4d5119563e24de9b66372929ad4fa31546be053a16f74
|
||||
volumes:
|
||||
- *volume-app
|
||||
working_dir: /app
|
||||
@@ -48,7 +48,7 @@ services:
|
||||
|
||||
tempo:
|
||||
<<: *service-base
|
||||
image: grafana/tempo:latest@sha256:21d563828e55c2ee4e79f9a4bf9e1abfa4f585213f9f5e49d9b98e44fac92f2c
|
||||
image: grafana/tempo:latest@sha256:b613f54818081f45e20a6bdb5669f6ae583149a0bdd4a658120f9265ccdfdb39
|
||||
command: [-config.file=/etc/tempo.yaml]
|
||||
volumes:
|
||||
- ./telemetry/tempo.yaml:/etc/tempo.yaml
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.2.4",
|
||||
"@effect/language-service": "^0.40.0",
|
||||
"@effect/language-service": "^0.41.0",
|
||||
"@types/bun": "latest",
|
||||
"npm-check-updates": "^18.1.1",
|
||||
"npm-sort": "^0.0.4",
|
||||
|
||||
@@ -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/**"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"clean:modules": "rm -rf node_modules"
|
||||
},
|
||||
"dependencies": {
|
||||
"@effect/rpc": "^0.69.2",
|
||||
"@effect/rpc": "^0.71.0",
|
||||
"effect": "^3.17.13"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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/**"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
"clean:modules": "rm -rf node_modules"
|
||||
},
|
||||
"dependencies": {
|
||||
"@effect/opentelemetry": "^0.56.6",
|
||||
"@effect/platform": "^0.90.9",
|
||||
"@effect/platform-bun": "^0.79.0",
|
||||
"@effect/platform-node": "^0.96.1",
|
||||
"@effect/rpc": "^0.69.2",
|
||||
"@effect/opentelemetry": "^0.58.0",
|
||||
"@effect/platform": "^0.92.0",
|
||||
"@effect/platform-bun": "^0.81.0",
|
||||
"@effect/platform-node": "^0.98.0",
|
||||
"@effect/rpc": "^0.71.0",
|
||||
"@opentelemetry/exporter-trace-otlp-http": "^0.205.0",
|
||||
"@opentelemetry/sdk-metrics": "^2.1.0",
|
||||
"@opentelemetry/sdk-trace-base": "^2.1.0",
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
)
|
||||
}))
|
||||
|
||||
@@ -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"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
"clean:modules": "rm -rf node_modules"
|
||||
},
|
||||
"dependencies": {
|
||||
"@effect/platform": "^0.90.9",
|
||||
"@effect/platform-browser": "^0.70.0",
|
||||
"@effect/rpc": "^0.69.2",
|
||||
"@effect/platform": "^0.92.0",
|
||||
"@effect/platform-browser": "^0.72.0",
|
||||
"@effect/rpc": "^0.71.0",
|
||||
"@fontsource/work-sans": "^5.2.8",
|
||||
"@tanstack/react-router": "^1.131.48",
|
||||
"@website/common": "workspace:*",
|
||||
|
||||
@@ -7,7 +7,7 @@ function Card({ className, ...props }: React.ComponentProps<"div">) {
|
||||
<div
|
||||
data-slot="card"
|
||||
className={cn(
|
||||
"rounded-base flex flex-col shadow-shadow border-2 gap-6 py-6 border-border bg-background text-foreground font-base",
|
||||
"flex flex-col gap-6 rounded-base border-2 border-border bg-background py-6 font-base text-foreground shadow-shadow",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
@@ -42,7 +42,7 @@ function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
|
||||
return (
|
||||
<div
|
||||
data-slot="card-description"
|
||||
className={cn("text-sm font-base", className)}
|
||||
className={cn("font-base text-sm", className)}
|
||||
{...props}
|
||||
/>
|
||||
)
|
||||
|
||||
@@ -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 <>
|
||||
<div className="text-foreground mx-auto w-[750px] max-w-full px-5 pt-28 pb-10">
|
||||
<div className="mx-auto w-[750px] max-w-full px-5 pt-28 pb-10 text-foreground">
|
||||
<Card>
|
||||
<CardContent>
|
||||
<Outlet />
|
||||
|
||||
@@ -2,5 +2,19 @@
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:recommended"
|
||||
],
|
||||
"packageRules": [
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user