32 lines
830 B
TypeScript
32 lines
830 B
TypeScript
import { existsSync } from "node:fs";
|
|
import { loadEnvFile } from "node:process";
|
|
|
|
import { Event } from "./extensions/catalog";
|
|
import { Kernel } from "./kernel";
|
|
import { getProduct, sharedExtensions } from "./products";
|
|
|
|
if (existsSync(".env")) {
|
|
loadEnvFile();
|
|
}
|
|
|
|
const productIds = process.argv.slice(2);
|
|
const products = (productIds.length > 0 ? productIds : ["cli"]).map(getProduct);
|
|
const factories = [
|
|
...sharedExtensions,
|
|
...products.flatMap((product) => product.extensions),
|
|
];
|
|
const kernel = new Kernel().use(...factories.map((factory) => factory()));
|
|
|
|
const stopped = new Promise<void>((resolve) => {
|
|
kernel.on(Event.RuntimeStopRequested, resolve);
|
|
process.once("SIGINT", resolve);
|
|
process.once("SIGTERM", resolve);
|
|
});
|
|
|
|
try {
|
|
await kernel.start();
|
|
await stopped;
|
|
} finally {
|
|
await kernel.stop();
|
|
}
|