UNPKG

egg-bin

Version:
175 lines 16.9 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const node_util_1 = require("node:util"); const node_path_1 = __importDefault(require("node:path")); const node_url_1 = require("node:url"); const artus_cli_1 = require("@artus-cli/artus-cli"); const runscript_1 = require("runscript"); const utils_1 = require("../utils"); const debug = (0, node_util_1.debuglog)('egg-bin:midddleware:global_options'); let GlobalOptions = class GlobalOptions { program; async configDidLoad() { // add global options this.program.option({ base: { description: 'directory of application, default to `process.cwd()`', type: 'string', alias: 'baseDir', }, declarations: { description: 'whether create typings, will add `--require egg-ts-helper/register`', type: 'boolean', alias: 'dts', }, typescript: { description: 'whether enable typescript support', type: 'boolean', alias: 'ts', }, tscompiler: { description: 'ts compiler, like ts-node/register, ts-node/register/transpile-only, @swc-node/register, esbuild-register etc', type: 'string', alias: 'tsc', }, }); this.program.use(async (ctx, next) => { debug('before next'); if (!ctx.args.base) { ctx.args.base = ctx.cwd; debug('ctx.args.base not set, auto set it to cwd: %o', ctx.cwd); } if (!node_path_1.default.isAbsolute(ctx.args.base)) { ctx.args.base = node_path_1.default.join(ctx.cwd, ctx.args.base); } debug('matched cmd: %o, ctx.args.base: %o', ctx.matched?.cmd, ctx.args.base); const pkg = await (0, utils_1.readPackageJSON)(ctx.args.base); ctx.args.pkgEgg = pkg.egg ?? {}; const tscompiler = ctx.args.tscompiler ?? ctx.env.TS_COMPILER ?? ctx.args.pkgEgg.tscompiler; if (ctx.args.typescript === undefined) { // try to ready EGG_TYPESCRIPT env first, only accept 'true' or 'false' string if (ctx.env.EGG_TYPESCRIPT === 'false') { ctx.args.typescript = false; debug('detect typescript=%o from EGG_TYPESCRIPT=%o', false, ctx.env.EGG_TYPESCRIPT); } else if (ctx.env.EGG_TYPESCRIPT === 'true') { ctx.args.typescript = true; debug('detect typescript=%o from EGG_TYPESCRIPT=%o', true, ctx.env.EGG_TYPESCRIPT); } else if (typeof ctx.args.pkgEgg.typescript === 'boolean') { // read `egg.typescript` from package.json if not pass argv ctx.args.typescript = ctx.args.pkgEgg.typescript; debug('detect typescript=%o from pkg.egg.typescript=%o', true, ctx.args.pkgEgg.typescript); } else if (pkg.dependencies?.typescript) { // auto detect pkg.dependencies.typescript or pkg.devDependencies.typescript ctx.args.typescript = true; debug('detect typescript=%o from pkg.dependencies.typescript=%o', true, pkg.dependencies.typescript); } else if (pkg.devDependencies?.typescript) { ctx.args.typescript = true; debug('detect typescript=%o from pkg.devDependencies.typescript=%o', true, pkg.devDependencies.typescript); } else if (await (0, utils_1.hasTsConfig)(ctx.args.base)) { // tsconfig.json exists ctx.args.typescript = true; debug('detect typescript=%o cause tsconfig.json exists', true); } else if (tscompiler) { ctx.args.typescript = true; debug('detect typescript=%o from --tscompiler=%o', true, tscompiler); } } if (ctx.args.typescript) { const findPaths = [node_path_1.default.dirname(__dirname)]; if (tscompiler) { // try app baseDir first on custom tscompiler findPaths.unshift(ctx.args.base); } ctx.args.tscompiler = tscompiler ?? 'ts-node/register'; const tsNodeRegister = require.resolve(ctx.args.tscompiler, { paths: findPaths, }); // should require tsNodeRegister on current process, let it can require *.ts files // e.g.: dev command will execute egg loader to find configs and plugins require(tsNodeRegister); // let child process auto require ts-node too (0, utils_1.addNodeOptionsToEnv)(`--require ${tsNodeRegister}`, ctx.env); // tell egg loader to load ts file // see https://github.com/eggjs/egg-core/blob/master/lib/loader/egg_loader.js#L443 ctx.env.EGG_TYPESCRIPT = 'true'; // set current process.env.EGG_TYPESCRIPT too process.env.EGG_TYPESCRIPT = 'true'; // load files from tsconfig on startup ctx.env.TS_NODE_FILES = process.env.TS_NODE_FILES ?? 'true'; // keep same logic with egg-core, test cmd load files need it // see https://github.com/eggjs/egg-core/blob/master/lib/loader/egg_loader.js#L49 (0, utils_1.addNodeOptionsToEnv)(`--require ${require.resolve('tsconfig-paths/register')}`, ctx.env); } if (pkg.type === 'module') { // use ts-node/esm loader on esm let esmLoader = require.resolve('ts-node/esm'); if (process.platform === 'win32') { // ES Module loading with abolute path fails on windows // https://github.com/nodejs/node/issues/31710#issuecomment-583916239 // https://nodejs.org/api/url.html#url_url_pathtofileurl_path esmLoader = (0, node_url_1.pathToFileURL)(esmLoader).href; } // wait for https://github.com/nodejs/node/issues/40940 (0, utils_1.addNodeOptionsToEnv)('--no-warnings', ctx.env); (0, utils_1.addNodeOptionsToEnv)(`--loader ${esmLoader}`, ctx.env); } if (ctx.args.declarations === undefined) { if (typeof ctx.args.pkgEgg.declarations === 'boolean') { // read `egg.declarations` from package.json if not pass argv ctx.args.declarations = ctx.args.pkgEgg.declarations; debug('detect declarations from pkg.egg.declarations=%o', ctx.args.pkgEgg.declarations); } } if (ctx.args.declarations) { const etsBin = require.resolve('egg-ts-helper/dist/bin'); debug('run ets first: %o', etsBin); await (0, runscript_1.runScript)(`node ${etsBin}`); } if (ctx.args.pkgEgg.revert) { ctx.args.execArgv = ctx.args.execArgv || []; const reverts = Array.isArray(ctx.args.pkgEgg.revert) ? ctx.args.pkgEgg.revert : [ctx.args.pkgEgg.revert]; for (const revert of reverts) { ctx.args.execArgv.push(`--security-revert=${revert}`); } } debug('set NODE_OPTIONS: %o', ctx.env.NODE_OPTIONS); debug('ctx.args: %o', ctx.args); debug('enter next'); await next(); debug('after next'); }); } }; __decorate([ (0, artus_cli_1.Inject)(), __metadata("design:type", artus_cli_1.Program) ], GlobalOptions.prototype, "program", void 0); __decorate([ (0, artus_cli_1.LifecycleHook)(), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Promise) ], GlobalOptions.prototype, "configDidLoad", null); GlobalOptions = __decorate([ (0, artus_cli_1.LifecycleHookUnit)() ], GlobalOptions); exports.default = GlobalOptions; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9nbG9iYWxfb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUFxQztBQUNyQywwREFBNkI7QUFDN0IsdUNBQXlDO0FBQ3pDLG9EQUc4QjtBQUM5Qix5Q0FBc0M7QUFDdEMsb0NBQTZFO0FBRTdFLE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVEsRUFBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBRzlDLElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQWE7SUFFZixPQUFPLENBQVU7SUFHNUIsQUFBTixLQUFLLENBQUMsYUFBYTtRQUNqQixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbEIsSUFBSSxFQUFFO2dCQUNKLFdBQVcsRUFBRSxzREFBc0Q7Z0JBQ25FLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxTQUFTO2FBQ2pCO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLFdBQVcsRUFBRSxxRUFBcUU7Z0JBQ2xGLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxLQUFLO2FBQ2I7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLG1DQUFtQztnQkFDaEQsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNELFVBQVUsRUFBRTtnQkFDVixXQUFXLEVBQUUsK0dBQStHO2dCQUM1SCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsS0FBSzthQUNiO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQW1CLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDbkQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElB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