68 lines
1.4 KiB
TypeScript
68 lines
1.4 KiB
TypeScript
import { build as esbuild } from "esbuild";
|
|
import { build as viteBuild } from "vite";
|
|
import { rm, readFile } from "fs/promises";
|
|
|
|
// server deps to bundle to reduce openat(2) syscalls
|
|
// which helps cold start times
|
|
const allowlist = [
|
|
"@google/generative-ai",
|
|
"axios",
|
|
"connect-pg-simple",
|
|
"cors",
|
|
"date-fns",
|
|
"drizzle-orm",
|
|
"drizzle-zod",
|
|
"express",
|
|
"express-rate-limit",
|
|
"express-session",
|
|
"jsonwebtoken",
|
|
"memorystore",
|
|
"multer",
|
|
"nanoid",
|
|
"nodemailer",
|
|
"openai",
|
|
"passport",
|
|
"passport-local",
|
|
"pg",
|
|
"stripe",
|
|
"uuid",
|
|
"ws",
|
|
"xlsx",
|
|
"zod",
|
|
"zod-validation-error",
|
|
];
|
|
|
|
async function buildAll() {
|
|
await rm("dist", { recursive: true, force: true });
|
|
|
|
console.log("building client...");
|
|
await viteBuild();
|
|
|
|
console.log("building server...");
|
|
const pkg = JSON.parse(await readFile("package.json", "utf-8"));
|
|
const allDeps = [
|
|
...Object.keys(pkg.dependencies || {}),
|
|
...Object.keys(pkg.devDependencies || {}),
|
|
];
|
|
const externals = allDeps.filter((dep) => !allowlist.includes(dep));
|
|
|
|
await esbuild({
|
|
entryPoints: ["server/index.ts"],
|
|
platform: "node",
|
|
bundle: true,
|
|
format: "cjs",
|
|
outfile: "dist/index.cjs",
|
|
define: {
|
|
"process.env.NODE_ENV": '"production"',
|
|
},
|
|
minify: true,
|
|
external: externals,
|
|
logLevel: "info",
|
|
});
|
|
}
|
|
|
|
buildAll().catch((err) => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|