2025-09-25 18:59:07 +09:00
|
|
|
import "tsconfig-paths/register";
|
2025-09-18 15:18:12 +09:00
|
|
|
import { Logger, type INestApplication } from "@nestjs/common";
|
2025-08-28 16:57:57 +09:00
|
|
|
|
2025-09-18 15:18:12 +09:00
|
|
|
import { bootstrap } from "./app/bootstrap";
|
2025-08-20 18:02:50 +09:00
|
|
|
|
2025-09-18 15:18:12 +09:00
|
|
|
const logger = new Logger("Main");
|
|
|
|
|
let app: INestApplication | null = null;
|
2025-08-22 17:02:49 +09:00
|
|
|
|
2025-09-18 15:18:12 +09:00
|
|
|
const signals: NodeJS.Signals[] = ["SIGINT", "SIGTERM"];
|
|
|
|
|
for (const signal of signals) {
|
2025-09-25 13:21:11 +09:00
|
|
|
process.once(signal, () => {
|
|
|
|
|
void (async () => {
|
|
|
|
|
logger.log(`Received ${signal}. Closing Nest application...`);
|
2025-08-28 16:57:57 +09:00
|
|
|
|
2025-09-25 13:21:11 +09:00
|
|
|
if (!app) {
|
|
|
|
|
logger.warn("Nest application not initialized. Exiting immediately.");
|
|
|
|
|
process.exit(0);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-08-22 17:02:49 +09:00
|
|
|
|
2025-09-25 13:21:11 +09:00
|
|
|
try {
|
|
|
|
|
await app.close();
|
|
|
|
|
logger.log("Nest application closed gracefully.");
|
|
|
|
|
} catch (error) {
|
|
|
|
|
const resolvedError = error as Error;
|
|
|
|
|
logger.error(
|
|
|
|
|
`Error during Nest application shutdown: ${resolvedError.message}`,
|
|
|
|
|
resolvedError.stack
|
|
|
|
|
);
|
|
|
|
|
} finally {
|
|
|
|
|
process.exit(0);
|
|
|
|
|
}
|
|
|
|
|
})();
|
2025-08-20 18:02:50 +09:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-18 15:18:12 +09:00
|
|
|
void bootstrap()
|
2025-09-25 11:44:10 +09:00
|
|
|
.then(startedApp => {
|
2025-09-18 15:18:12 +09:00
|
|
|
app = startedApp;
|
|
|
|
|
})
|
2025-09-25 11:44:10 +09:00
|
|
|
.catch(error => {
|
2025-09-18 15:18:12 +09:00
|
|
|
const resolvedError = error as Error;
|
|
|
|
|
logger.error(
|
|
|
|
|
`Failed to bootstrap the Nest application: ${resolvedError.message}`,
|
|
|
|
|
resolvedError.stack
|
|
|
|
|
);
|
|
|
|
|
process.exit(1);
|
|
|
|
|
});
|