@eggjs/utils
Version:
Utils for all egg projects
127 lines • 10.5 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPlugins = getPlugins;
exports.getLoadUnits = getLoadUnits;
exports.getConfig = getConfig;
exports.getLoader = getLoader;
exports.findEggCore = findEggCore;
const node_util_1 = require("node:util");
const node_path_1 = __importDefault(require("node:path"));
const node_assert_1 = __importDefault(require("node:assert"));
const node_os_1 = __importDefault(require("node:os"));
const promises_1 = require("node:fs/promises");
const import_js_1 = require("./import.js");
const debug = (0, node_util_1.debuglog)('@eggjs/utils/plugin');
const tmpDir = node_os_1.default.tmpdir();
function noop() { }
const logger = {
debug: noop,
info: noop,
warn: noop,
error: noop,
};
/**
* @see https://github.com/eggjs/egg-core/blob/2920f6eade07959d25f5c4f96b154d3fbae877db/lib/loader/mixin/plugin.js#L203
*/
async function getPlugins(options) {
const loader = await getLoader(options);
await loader.loadPlugin();
return loader.allPlugins;
}
/**
* @see https://github.com/eggjs/egg-core/blob/2920f6eade07959d25f5c4f96b154d3fbae877db/lib/loader/egg_loader.js#L348
*/
async function getLoadUnits(options) {
const loader = await getLoader(options);
await loader.loadPlugin();
return loader.getLoadUnits();
}
async function getConfig(options) {
const loader = await getLoader(options);
await loader.loadPlugin();
await loader.loadConfig();
return loader.config;
}
async function exists(filepath) {
try {
await (0, promises_1.stat)(filepath);
return true;
}
catch {
return false;
}
}
async function getLoader(options) {
(0, node_assert_1.default)(options.framework, 'framework is required');
(0, node_assert_1.default)(await exists(options.framework), `${options.framework} should exist`);
if (!(options.baseDir && await exists(options.baseDir))) {
options.baseDir = node_path_1.default.join(tmpDir, 'egg_utils', `${Date.now()}`, 'tmp_app');
await (0, promises_1.mkdir)(options.baseDir, { recursive: true });
await (0, promises_1.writeFile)(node_path_1.default.join(options.baseDir, 'package.json'), JSON.stringify({
name: 'tmp_app',
}));
debug('[getLoader] create baseDir: %o', options.baseDir);
}
const { EggCore, EggLoader } = await findEggCore(options);
const mod = await (0, import_js_1.importModule)(options.framework);
const Application = mod.Application ?? mod.default?.Application;
(0, node_assert_1.default)(Application, `Application not export on ${options.framework}`);
if (options.env) {
process.env.EGG_SERVER_ENV = options.env;
}
return new EggLoader({
baseDir: options.baseDir,
logger,
app: Object.create(Application.prototype),
EggCoreClass: EggCore,
});
}
async function findEggCore(options) {
const baseDirRealpath = await (0, promises_1.realpath)(options.baseDir);
const frameworkRealpath = await (0, promises_1.realpath)(options.framework);
const paths = [frameworkRealpath, baseDirRealpath];
// custom framework => egg => @eggjs/core
try {
const { EggCore, EggLoader } = await (0, import_js_1.importModule)('egg', { paths });
if (EggLoader) {
return { EggCore, EggLoader };
}
}
catch (err) {
debug('[findEggCore] import "egg" from paths:%o error: %o', paths, err);
}
// egg-core 在 6.2.3 版本中更名为 @eggjs/core,为兼容老版本,支持同时查找两个包,优先使用新名字
const names = ['@eggjs/core', 'egg-core'];
for (const name of names) {
try {
const { EggCore, EggLoader } = await (0, import_js_1.importModule)(name, { paths });
if (EggLoader) {
return { EggCore, EggLoader };
}
}
catch (err) {
debug('[findEggCore] import "%s" from paths:%o error: %o', name, paths, err);
}
try {
const { EggCore, EggLoader } = await (0, import_js_1.importModule)(name);
if (EggLoader) {
return { EggCore, EggLoader };
}
}
catch (err) {
debug('[findEggCore] import "%s" error: %o', name, err);
}
let eggCorePath = node_path_1.default.join(options.baseDir, `node_modules/${name}`);
if (!(await exists(eggCorePath))) {
eggCorePath = node_path_1.default.join(options.framework, `node_modules/${name}`);
}
if (await exists(eggCorePath)) {
return await (0, import_js_1.importModule)(eggCorePath);
}
}
(0, node_assert_1.default)(false, `Can't find ${names.join(' or ')} from ${options.baseDir} and ${options.framework}`);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXlDQSxnQ0FJQztBQVVELG9DQUlDO0FBRUQsOEJBS0M7QUE0QkQsOEJBeUJDO0FBRUQsa0NBNkNDO0FBdEtELHlDQUFxQztBQUNyQywwREFBNkI7QUFDN0IsOERBQWlDO0FBQ2pDLHNEQUF5QjtBQUN6QiwrQ0FBb0U7QUFDcEUsMkNBQTJDO0FBRTNDLE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVEsRUFBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTlDLE1BQU0sTUFBTSxHQUFHLGlCQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFM0IsU0FBUyxJQUFJLEtBQUksQ0FBQztBQUVsQixNQUFNLE1BQU0sR0FBRztJQUNiLEtBQUssRUFBRSxJQUFJO0lBQ1gsSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQW9CRjs7R0FFRztBQUNJLEtBQUssVUFBVSxVQUFVLENBQUMsT0FBc0I7SUFDckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDMUIsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzNCLENBQUM7QUFPRDs7R0FFRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQUMsT0FBc0I7SUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDMUIsT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDL0IsQ0FBQztBQUVNLEtBQUssVUFBVSxTQUFTLENBQUMsT0FBc0I7SUFDcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMs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
;