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((resolve) => { kernel.on(Event.RuntimeStopRequested, resolve); process.once("SIGINT", resolve); process.once("SIGTERM", resolve); }); try { await kernel.start(); await stopped; } finally { await kernel.stop(); }