generated from nholtware/service-template-express
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { createApp } from "../app.js";
|
|
import { parseConfig } from "../lib/config.js";
|
|
import { createDb } from "../lib/db.js";
|
|
import { createFlags } from "../lib/flags.js";
|
|
import { createLogger } from "../lib/logger.js";
|
|
import { createCache } from "../lib/redis.js";
|
|
import { createRuntimeConfig } from "../lib/runtime-config.js";
|
|
|
|
const config = parseConfig(process.env);
|
|
const logger = createLogger(config);
|
|
const db = config.DATABASE_URL ? createDb(config.DATABASE_URL) : undefined;
|
|
const cache = config.REDIS_URL ? createCache(config.REDIS_URL) : undefined;
|
|
const flags = createFlags(config, logger);
|
|
const runtimeConfig = await createRuntimeConfig({
|
|
path: config.RUNTIME_CONFIG_PATH,
|
|
logger,
|
|
});
|
|
|
|
const server = createApp({
|
|
config,
|
|
logger,
|
|
db,
|
|
cache,
|
|
flags,
|
|
runtimeConfig,
|
|
}).listen(config.PORT, () => {
|
|
logger.info({ port: config.PORT }, "listening");
|
|
});
|
|
|
|
function shutdown(signal: string) {
|
|
logger.info({ signal }, "shutting down");
|
|
runtimeConfig.close();
|
|
server.close(async () => {
|
|
await Promise.allSettled([db?.close(), cache?.close(), flags.close()]);
|
|
process.exit(0);
|
|
});
|
|
setTimeout(() => process.exit(1), 10_000).unref();
|
|
}
|
|
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
process.on("SIGINT", () => shutdown("SIGINT"));
|