Ethan Niser 2023-09-20 16:05:34 +00:00 committed by GitHub
parent 342d294dbc
commit 901172d43e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 66 additions and 49 deletions

@ -1,3 +0,0 @@
{
"typescript.tsdk": "node_modules/typescript/lib"
}

Binary file not shown.

@ -1,13 +1,17 @@
import type { Config } from "drizzle-kit";
import { config } from "./src/config";
const dbCredentials = {
url: config.env.DATABASE_URL,
authToken: config.env.DATABASE_AUTH_TOKEN!,
};
export default {
schema: "./src/db/schema/index.ts",
driver: "turso",
dbCredentials: {
url: config.env.DATABASE_URL,
authToken: config.env.DATABASE_AUTH_TOKEN,
},
dbCredentials,
verbose: true,
strict: true,
} satisfies Config;
tablesFilter: ["!libsql_wasm_func_table"],
} satisfies Config;

@ -21,9 +21,10 @@
"@kitajs/ts-html-plugin": "^1.0.1",
"@total-typescript/ts-reset": "^0.5.1",
"@unocss/transformer-variant-group": "^0.55.7",
"better-sqlite3": "^8.6.0",
"bun-types": "latest",
"concurrently": "^8.2.1",
"drizzle-kit": "latest",
"drizzle-kit": "^0.19.13",
"prettier": "^3.0.3",
"prettier-plugin-tailwindcss": "^0.5.4",
"typescript": "^5.2.2",
@ -42,7 +43,8 @@
"beth-stack": "0.0.20",
"drizzle-orm": "^0.28.6",
"drizzle-typebox": "^0.1.1",
"elysia": "0.7.0-beta.1",
"elysia": "0.7.1",
"libsql": "^0.1.13",
"lucia": "^2.6.0",
"pino-pretty": "^10.2.0",
"zod": "^3.22.2"

@ -1,15 +1,18 @@
import { createEnv } from "@t3-oss/env-core";
import { z } from "zod";
const env = createEnv({
server: {
LOG_LEVEL: z.enum(["debug", "info", "warn", "error"]),
DATABASE_CONNECTION_TYPE: z.enum(["local", "remote", "local-replica"]),
DATABASE_URL: z.string().min(1),
DATABASE_AUTH_TOKEN: z.string().min(1),
SYNC_URL: z.string().optional(),
DATABASE_AUTH_TOKEN: z.string().optional().refine((s) => {
// not needed for local only
const type = process.env.DATABASE_CONNECTION_TYPE;
return type === "remote" || type === "local-replica" ? s && s.length > 0 : true;
}),
NODE_ENV: z.enum(["development", "production"]),
COOKIE_SECRET: z.string().min(1),
TURSO_API_TOKEN: z.string().min(1),
},
runtimeEnv: process.env,
});

@ -1,4 +1,5 @@
import { logger } from "@bogeychan/elysia-logger";
import { cron } from "@elysiajs/cron";
import { HoltLogger } from "@tlscipher/holt";
import { bethStack } from "beth-stack/elysia";
import { Elysia } from "elysia";
@ -7,8 +8,6 @@ import { auth } from "../auth";
import { config } from "../config";
import { client, db } from "../db";
// import { cron } from "@elysiajs/cron";
const stream = pretty({
colorize: true,
});
@ -16,12 +15,12 @@ const stream = pretty({
export const ctx = new Elysia({
name: "@app/ctx",
})
.use(
bethStack({
// log: false,
returnStaleWhileRevalidate: false,
}),
)
// .use(
// bethStack({
// // log: false,
// returnStaleWhileRevalidate: false,
// }),
// )
.use(
logger({
level: config.env.LOG_LEVEL,
@ -29,22 +28,21 @@ export const ctx = new Elysia({
}),
)
.use(new HoltLogger().getLogger())
// .use(
// cron({
// name: "heartbeat",
// pattern: "*/1 * * * * *",
// run() {
// if (config.env.SYNC_URL) {
// const now = performance.now();
// console.log("Syncing database...");
// void client.sync().then(() => {
// console.log(`Database synced in ${performance.now() - now}ms`);
// });
// }
// },
// })
// )
.decorate("db", () => db)
.use(
// @ts-expect-error
cron({
name: "heartbeat",
pattern: "*/2 * * * * *",
run() {
const now = performance.now();
console.log("Syncing database...");
void client.sync().then(() => {
console.log(`Database synced in ${performance.now() - now}ms`);
});
},
}),
)
.decorate("db", db)
.decorate("config", config)
.decorate("auth", auth);
// .onStart(({ log }) => log.info("Server starting"));

@ -8,14 +8,14 @@ const remoteOptions = {
authToken: config.env.DATABASE_AUTH_TOKEN,
};
// const localOptions = {
// url: "file:local.sqlite",
// authToken: config.env.DATABASE_AUTH_TOKEN,
// syncUrl: config.env.DATABASE_URL,
// };
const localOptions = {
url: "file:local.sqlite",
authToken: config.env.DATABASE_AUTH_TOKEN,
syncUrl: config.env.DATABASE_URL,
};
export const client = createClient(remoteOptions);
export const client = createClient(localOptions);
// await client.sync();
await client.sync();
export const db = drizzle(client, { schema, logger: true });

@ -2,17 +2,30 @@ import { staticPlugin } from "@elysiajs/static";
// import { swagger } from "@elysiajs/swagger";
import { Elysia } from "elysia";
import { config } from "./config";
import { ctx } from "./context";
import { api } from "./controllers/*";
import { todos } from "./db/schema";
import { pages } from "./pages/*";
const app = new Elysia({
name: "@app/app",
})
// .use(swagger())
//@ts-expect-error
.use(staticPlugin())
.use(api)
.use(pages)
// .use(staticPlugin())
// .use(api)
// .use(pages)
.use(ctx)
.get("/create", async (ctx) => {
const todo = await ctx.db.insert(todos).values({ content: "Hello World" }).returning();
return todo;
})
.get("/all", async (ctx) => {
const result = await ctx.db.select().from(todos);
return result
})
.onStart(() => {
if (config.env.NODE_ENV === "development") {
void fetch("http://localhost:3001/restart");
@ -28,4 +41,4 @@ export type App = typeof app;
console.log(
`app is listening on http://${app.server?.hostname}:${app.server?.port}`,
);
);