'use strict'; const path = require('path'); module.exports = async (options = {}) => { if (!options.ignoreWarning) { console.warn('single process mode is still in experiment, please don\'t use it in production environment'); } options.baseDir = options.baseDir || process.cwd(); options.mode = 'single'; // get agent from options.framework and package.egg.framework if (!options.framework) { try { options.framework = require(path.join(options.baseDir, 'package.json')).egg.framework; } catch (_) { // ignore } } let Agent; let Application; if (options.framework) { Agent = require(options.framework).Agent; Application = require(options.framework).Application; } else { Application = require('./application'); Agent = require('./agent'); } const agent = new Agent(Object.assign({}, options)); await agent.ready(); const application = new Application(Object.assign({}, options)); application.agent = agent; agent.application = application; await application.ready(); // emit egg-ready message in agent and application application.messenger.broadcast('egg-ready'); return application; };