UNPKG

egg

Version:

A web application framework for Node.js

53 lines (52 loc) • 1.75 kB
import { Agent } from "./agent.js"; import { Application } from "./application.js"; import "./types.js"; import { ManifestStore } from "@eggjs/core"; import path from "node:path"; import { importModule } from "@eggjs/utils"; import { readJSON } from "utility"; //#region src/lib/start.ts async function resolveFrameworkClasses(options) { if (!options.framework) try { options.framework = (await readJSON(path.join(options.baseDir, "package.json"))).egg.framework; } catch {} let AgentClass = Agent; let ApplicationClass = Application; if (options.framework) { const framework = await importModule(options.framework, { paths: [options.baseDir] }); AgentClass = framework.Agent; ApplicationClass = framework.Application; } return { AgentClass, ApplicationClass }; } /** * Start egg with single process. * * When `options.snapshot` is true, loads application metadata for V8 startup * snapshot construction. The lifecycle stops after `configWillLoad` (no servers, * timers, or connections) and skips `egg-ready` broadcast. */ async function startEgg(options = {}) { options.baseDir = options.baseDir ?? process.cwd(); options.mode = "single"; if (!options.snapshot) ManifestStore.enableCompileCache(options.baseDir); const { AgentClass, ApplicationClass } = await resolveFrameworkClasses(options); let agent; if (!options.metadataOnly) { agent = new AgentClass({ ...options }); await agent.ready(); } const application = new ApplicationClass({ ...options }); if (agent) { application.agent = agent; agent.application = application; } await application.ready(); if (!options.metadataOnly && !options.snapshot) application.messenger.broadcast("egg-ready"); return application; } //#endregion export { startEgg };