76 lines
1.7 KiB
TypeScript
76 lines
1.7 KiB
TypeScript
import { $ } from "execa";
|
|
import { dirAsync, existsAsync } from "fs-jetpack";
|
|
import { deploy } from "utils/deploy";
|
|
import { startDevWatcher } from "utils/dev-watcher";
|
|
import { dir } from "utils/dir";
|
|
import { ensureNotRunning } from "utils/ensure";
|
|
import { genEnv, parseEnv } from "utils/parse-env";
|
|
import { preparePrisma } from "utils/prisma";
|
|
import { generateAPIFrm } from "./server/api-frm";
|
|
import { createServer } from "./server/create";
|
|
import { prepareAPITypes } from "./server/prep-api-ts";
|
|
import { config } from "./utils/config";
|
|
import { g } from "./utils/global";
|
|
import { createLogger } from "./utils/logger";
|
|
|
|
let db_env: any = {};
|
|
try {
|
|
db_env = parseEnv(await Bun.file(dir("app/db/.env")).text());
|
|
process.env.DATABASE_URL = db_env.DATABASE_URL;
|
|
} catch (e) {}
|
|
|
|
g.compress = { mode: "all" };
|
|
g.mode = process.argv.includes("dev") ? "dev" : "prod";
|
|
g.datadir = g.mode === "prod" ? "../data" : ".data";
|
|
|
|
if (!(await existsAsync(dir("app")))) {
|
|
await dirAsync(dir("app"));
|
|
}
|
|
|
|
if (!(await existsAsync(dir("app/db")))) {
|
|
await $`unzip -o pkgs/zip/dbzip -d app`;
|
|
}
|
|
|
|
if (!(await existsAsync(dir("app/srv")))) {
|
|
await $`unzip -o pkgs/zip/srvzip -d app`;
|
|
}
|
|
|
|
if (!process.env.PORT) {
|
|
g.port = 3000;
|
|
|
|
const env = genEnv({
|
|
PORT: g.port,
|
|
});
|
|
await Bun.write(".env", env);
|
|
} else {
|
|
g.port = parseInt(process.env.PORT);
|
|
}
|
|
|
|
await preparePrisma();
|
|
await createLogger();
|
|
if (g.mode !== "prod") {
|
|
await ensureNotRunning();
|
|
}
|
|
|
|
if (g.db) {
|
|
try {
|
|
await g.db.$connect();
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
}
|
|
|
|
await config.init();
|
|
|
|
g.log.info(g.mode === "dev" ? "DEVELOPMENT" : "PRODUCTION");
|
|
|
|
await deploy.init();
|
|
if (g.mode === "dev") {
|
|
await startDevWatcher();
|
|
}
|
|
|
|
await createServer();
|
|
|
|
await generateAPIFrm();
|
|
await prepareAPITypes();
|