This commit is contained in:
Rizky 2024-06-26 15:03:13 +07:00
parent 96dbca0e55
commit 2b9c84270f
7 changed files with 22 additions and 20 deletions

BIN
bun.lockb

Binary file not shown.

View File

@ -16,12 +16,13 @@
"bun-types": "latest" "bun-types": "latest"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "^5.0.0" "typescript": "^5.5.2"
}, },
"dependencies": { "dependencies": {
"brotli-wasm": "^2.0.1", "brotli-wasm": "^2.0.1",
"dotenv": "^16.4.5",
"exit-hook": "^4.0.0", "exit-hook": "^4.0.0",
"firebase-admin": "^12.0.0", "firebase-admin": "^12.2.0",
"prisma": "^5.8.1" "prisma": "^5.16.0"
} }
} }

View File

@ -5,7 +5,7 @@ import { apiContext } from "service-srv";
import { deploy } from "utils/deploy"; import { deploy } from "utils/deploy";
import { dir } from "utils/dir"; import { dir } from "utils/dir";
import { g } from "utils/global"; import { g } from "utils/global";
import { parse } from "utils/parse-env"; import { genEnv, parseEnv } from "utils/parse-env";
import { restartServer } from "utils/restart"; import { restartServer } from "utils/restart";
export const _ = { export const _ = {
@ -68,12 +68,11 @@ export const _ = {
case "db-update": case "db-update":
if (action.url) { if (action.url) {
g.dburl = action.url; g.dburl = action.url;
await Bun.write( const env = genEnv({
dir("app/db/.env"), ...parseEnv(await Bun.file(dir(".env")).text()),
`\ DATABASE_URL: action.url,
DATABASE_URL="${action.url}" });
` await Bun.write(dir(".env"), env);
);
} }
return "ok"; return "ok";
case "db-gen": case "db-gen":
@ -88,9 +87,9 @@ DATABASE_URL="${action.url}"
break; break;
case "db-pull": case "db-pull":
{ {
const env = await readAsync(dir("app/db/.env")); const env = await readAsync(dir(".env"));
if (env) { if (env) {
const ENV = parse(env); const ENV = parseEnv(env);
if (typeof ENV.DATABASE_URL === "string") { if (typeof ENV.DATABASE_URL === "string") {
const type = ENV.DATABASE_URL.split("://").shift(); const type = ENV.DATABASE_URL.split("://").shift();
if (type) { if (type) {
@ -194,7 +193,7 @@ export const downloadFile = async (
_url.hostname = "127.0.0.1"; _url.hostname = "127.0.0.1";
} }
g.log.info(`Downloading ${url} to ${filePath}`); g.log.info(`Downloading ${url} to ${filePath}`);
const res = await fetch(_url); const res = await fetch(_url as any);
if (res.body) { if (res.body) {
const file = Bun.file(filePath); const file = Bun.file(filePath);

View File

@ -11,6 +11,7 @@ import { prepareAPITypes } from "./server/prep-api-ts";
import { config } from "./utils/config"; import { config } from "./utils/config";
import { g } from "./utils/global"; import { g } from "./utils/global";
import { createLogger } from "./utils/logger"; import { createLogger } from "./utils/logger";
import { genEnv, parseEnv } from "utils/parse-env";
g.mode = process.argv.includes("dev") ? "dev" : "prod"; g.mode = process.argv.includes("dev") ? "dev" : "prod";
g.datadir = g.mode === "prod" ? "../data" : ".data"; g.datadir = g.mode === "prod" ? "../data" : ".data";
@ -29,7 +30,8 @@ if (!(await existsAsync(dir("app/srv")))) {
if (!process.env.PORT) { if (!process.env.PORT) {
g.port = 3000; g.port = 3000;
await Bun.write(".env", `PORT=${g.port}`); const env = genEnv({ ...parseEnv(".env"), PORT: g.port });
await Bun.write(".env", env);
} else { } else {
g.port = parseInt(process.env.PORT); g.port = parseInt(process.env.PORT);
} }
@ -46,7 +48,6 @@ await config.init();
g.log.info(g.mode === "dev" ? "DEVELOPMENT" : "PRODUCTION"); g.log.info(g.mode === "dev" ? "DEVELOPMENT" : "PRODUCTION");
await deploy.init(); await deploy.init();
if (g.mode === "dev") { if (g.mode === "dev") {
await startDevWatcher(); await startDevWatcher();

View File

@ -4,6 +4,7 @@ import exitHook from "exit-hook";
import { existsAsync } from "fs-jetpack"; import { existsAsync } from "fs-jetpack";
import { dir } from "utils/dir"; import { dir } from "utils/dir";
import { checkPort, randomBetween } from "utils/ensure"; import { checkPort, randomBetween } from "utils/ensure";
import "dotenv/config";
let port = 0; let port = 0;
@ -35,7 +36,7 @@ const main = {
console.log("Process Manager running at port:", port); console.log("Process Manager running at port:", port);
if (await existsAsync(dir("app/db/.env"))) { if (process.env.DATABASE_URL) {
if (!(await existsAsync(dir("node_modules/.prisma")))) { if (!(await existsAsync(dir("node_modules/.prisma")))) {
try { try {
await $({ cwd: dir(`app/db`) })`bun install`; await $({ cwd: dir(`app/db`) })`bun install`;

View File

@ -20,7 +20,7 @@ function removeQuotes(str: string) {
} }
/** Parse an envfile string. */ /** Parse an envfile string. */
export function parse(src: string): Data { export function parseEnv(src: string): Data {
const result: Data = {}; const result: Data = {};
const lines = splitInLines(src); const lines = splitInLines(src);
for (const line of lines) { for (const line of lines) {
@ -35,7 +35,7 @@ export function parse(src: string): Data {
} }
/** Turn an object into an envfile string. */ /** Turn an object into an envfile string. */
export function stringify(obj: Input): string { export function genEnv(obj: Input): string {
let result = ""; let result = "";
for (const [key, value] of Object.entries(obj)) { for (const [key, value] of Object.entries(obj)) {
if (key) { if (key) {

View File

@ -4,12 +4,12 @@ import { $ } from "execa";
import { g } from "./global"; import { g } from "./global";
export const preparePrisma = async () => { export const preparePrisma = async () => {
if ((await existsAsync(dir("app/db/.env"))) && !g.db) { if (process.env.DATABASE_URL && !g.db) {
try { try {
if (g.mode !== "dev") { if (g.mode !== "dev") {
await $({ cwd: dir(`app/db`) })`bun prisma generate`; await $({ cwd: dir(`app/db`) })`bun prisma generate`;
} }
const { PrismaClient } = await import("../../app/db/db"); const { PrismaClient } = await import("../../app/db/db");
g.db = new PrismaClient(); g.db = new PrismaClient();
} catch (e) { } catch (e) {