UNPKG

1.65 kBJavaScriptView Raw
1'use strict';
2
3const path = require('path');
4const fs = require('fs');
5const BaseCommand = require('common-bin');
6
7class Command extends BaseCommand {
8 constructor(rawArgv) {
9 super(rawArgv);
10 this.parserOptions = {
11 execArgv: true,
12 removeAlias: true,
13 };
14
15 // common-bin setter, don't care about override at sub class
16 // https://github.com/node-modules/common-bin/blob/master/lib/command.js#L158
17 this.options = {
18 typescript: {
19 description: 'whether enable typescript support, will load `ts-node/register` etc',
20 type: 'boolean',
21 alias: 'ts',
22 default: undefined,
23 },
24 };
25 }
26
27 get context() {
28 const context = super.context;
29 const { argv, debugPort, execArgvObj, cwd, env } = context;
30
31 // compatible
32 if (debugPort) context.debug = debugPort;
33
34 // remove unuse args
35 argv.$0 = undefined;
36
37 // read `egg.typescript` from package.json if not pass argv
38 if (argv.typescript === undefined) {
39 let baseDir = argv._[0] || argv.baseDir || cwd;
40 if (!path.isAbsolute(baseDir)) baseDir = path.join(cwd, baseDir);
41 const pkgFile = path.join(baseDir, 'package.json');
42 if (fs.existsSync(pkgFile)) {
43 const pkgInfo = require(pkgFile);
44 if (pkgInfo && pkgInfo.egg && pkgInfo.egg.typescript === true) {
45 argv.typescript = true;
46 }
47 }
48 }
49
50 // execArgv
51 if (argv.typescript) {
52 execArgvObj.require = execArgvObj.require || [];
53 execArgvObj.require.push(path.join(__dirname, './ts-helper.js'));
54 env.EGG_TYPESCRIPT = true;
55 }
56
57 return context;
58 }
59}
60
61module.exports = Command;