@eggjs/bin 7.0.0-beta.4 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -10
- package/bin/dev.js +6 -4
- package/bin/run.js +2 -2
- package/dist/commonjs/baseCommand.d.ts +49 -0
- package/dist/commonjs/baseCommand.js +370 -0
- package/dist/commonjs/commands/cov.d.ts +22 -0
- package/dist/commonjs/commands/cov.js +97 -0
- package/dist/commonjs/commands/dev.d.ts +21 -0
- package/dist/commonjs/commands/dev.js +95 -0
- package/dist/commonjs/commands/test.d.ts +23 -0
- package/dist/commonjs/commands/test.js +204 -0
- package/dist/commonjs/index.d.ts +7 -0
- package/dist/commonjs/index.js +30 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/types.d.ts +9 -0
- package/dist/commonjs/types.js +3 -0
- package/dist/commonjs/utils.d.ts +4 -0
- package/dist/commonjs/utils.js +45 -0
- package/dist/esm/baseCommand.d.ts +33 -6
- package/dist/esm/baseCommand.js +246 -40
- package/dist/esm/commands/cov.d.ts +17 -8
- package/dist/esm/commands/cov.js +83 -17
- package/dist/esm/commands/dev.d.ts +15 -7
- package/dist/esm/commands/dev.js +83 -16
- package/dist/esm/commands/test.d.ts +11 -5
- package/dist/esm/commands/test.js +89 -51
- package/dist/esm/index.d.ts +7 -5
- package/dist/esm/index.js +8 -6
- package/dist/esm/types.d.ts +9 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/utils.d.ts +0 -1
- package/dist/esm/utils.js +1 -11
- package/dist/package.json +1 -1
- package/dist/scripts/start-cluster.cjs +15 -0
- package/package.json +12 -28
- package/scripts/start-cluster.cjs +15 -0
- package/src/baseCommand.ts +254 -43
- package/src/commands/cov.ts +87 -17
- package/src/commands/dev.ts +84 -15
- package/src/commands/test.ts +92 -51
- package/src/index.ts +9 -5
- package/src/types.ts +9 -0
- package/src/utils.ts +0 -10
- package/dist/esm/bin/cli.d.ts +0 -2
- package/dist/esm/bin/cli.js +0 -34
- package/dist/esm/cmd/base.d.ts +0 -12
- package/dist/esm/cmd/base.js +0 -135
- package/dist/esm/cmd/cov.d.ts +0 -8
- package/dist/esm/cmd/cov.js +0 -103
- package/dist/esm/cmd/debug.d.ts +0 -5
- package/dist/esm/cmd/debug.js +0 -28
- package/dist/esm/cmd/dev.d.ts +0 -17
- package/dist/esm/cmd/dev.js +0 -118
- package/dist/esm/cmd/test.d.ts +0 -15
- package/dist/esm/cmd/test.js +0 -237
- package/dist/esm/commands/debug.d.ts +0 -13
- package/dist/esm/commands/debug.js +0 -25
- package/dist/esm/config/framework.d.ts +0 -4
- package/dist/esm/config/framework.js +0 -4
- package/dist/esm/config/plugin.d.ts +0 -11
- package/dist/esm/config/plugin.js +0 -11
- package/dist/esm/hooks/init/options.d.ts +0 -3
- package/dist/esm/hooks/init/options.js +0 -5
- package/dist/esm/middleware/global_options.d.ts +0 -5
- package/dist/esm/middleware/global_options.js +0 -182
- package/dist/esm/middleware/handle_error.d.ts +0 -5
- package/dist/esm/middleware/handle_error.js +0 -47
- package/dist/esm/middleware/inspect.d.ts +0 -5
- package/dist/esm/middleware/inspect.js +0 -69
- package/src/bin/cli.ts +0 -37
- package/src/cmd/base.ts +0 -133
- package/src/cmd/cov.ts +0 -89
- package/src/cmd/debug.ts +0 -14
- package/src/cmd/dev.ts +0 -102
- package/src/cmd/test.ts +0 -219
- package/src/commands/debug.ts +0 -30
- package/src/config/framework.ts +0 -3
- package/src/config/plugin.ts +0 -10
- package/src/hooks/init/options.ts +0 -7
- package/src/middleware/global_options.ts +0 -169
- package/src/middleware/handle_error.ts +0 -30
- package/src/middleware/inspect.ts +0 -54
package/README.md
CHANGED
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
[node-version-image]: https://img.shields.io/node/v/@eggjs/bin.svg?style=flat-square
|
|
22
22
|
[node-version-url]: https://nodejs.org/en/download/
|
|
23
23
|
|
|
24
|
-
egg developer tool,
|
|
24
|
+
egg developer tool, base on [oclif](https://oclif.io/).
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
28
|
## Install
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
npm i
|
|
31
|
+
npm i @eggjs/bin --save-dev
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
## Usage
|
|
@@ -78,7 +78,7 @@ egg-bin dev
|
|
|
78
78
|
#### dev options
|
|
79
79
|
|
|
80
80
|
- `--framework` egg web framework root path.
|
|
81
|
-
- `--port` server port. If not specified, the port is obtained in the following order: [_egg.js_ configuration](https://
|
|
81
|
+
- `--port` server port. If not specified, the port is obtained in the following order: [_egg.js_ configuration](https://eggjs.org/basics/config) `config/config.*.js` > `process.env.EGG_BIN_DEFAULT_PORT` > 7001 > other available ports.
|
|
82
82
|
- `--workers` worker process number, default to `1` worker at local mode.
|
|
83
83
|
- `--sticky` start a sticky cluster server, default to `false`.
|
|
84
84
|
|
|
@@ -103,8 +103,6 @@ Create `.vscode/launch.json` file:
|
|
|
103
103
|
],
|
|
104
104
|
"console": "integratedTerminal",
|
|
105
105
|
"restart": true,
|
|
106
|
-
"protocol": "auto",
|
|
107
|
-
"port": 9229,
|
|
108
106
|
"autoAttachChildProcesses": true
|
|
109
107
|
},
|
|
110
108
|
{
|
|
@@ -118,8 +116,6 @@ Create `.vscode/launch.json` file:
|
|
|
118
116
|
"--",
|
|
119
117
|
"--inspect-brk"
|
|
120
118
|
],
|
|
121
|
-
"protocol": "auto",
|
|
122
|
-
"port": 9229,
|
|
123
119
|
"autoAttachChildProcesses": true
|
|
124
120
|
}
|
|
125
121
|
]
|
|
@@ -192,7 +188,7 @@ You can pass any mocha argv.
|
|
|
192
188
|
|
|
193
189
|
- `-x` add dir ignore coverage, support multiple argv
|
|
194
190
|
- `--prerequire` prerequire files for coverage instrument, you can use this options if load files slowly when call `mm.app` or `mm.cluster`
|
|
195
|
-
- `--typescript`
|
|
191
|
+
- `--typescript` enable typescript support. If `true`, will auto add `.ts` extension and ignore `typings` and `d.ts`.
|
|
196
192
|
- `--c8` c8 instruments passthrough. you can use this to overwrite egg-bin's default c8 instruments and add additional ones.
|
|
197
193
|
>
|
|
198
194
|
> - egg-bin have some default instruments passed to c8 like `-r` and `--temp-directory`
|
|
@@ -210,7 +206,7 @@ COV_EXCLUDES="app/plugins/c*,app/autocreate/**" egg-bin cov
|
|
|
210
206
|
|
|
211
207
|
## Custom egg-bin for your team
|
|
212
208
|
|
|
213
|
-
See <https://
|
|
209
|
+
See <https://oclif.io/docs/configuring_your_cli/>
|
|
214
210
|
|
|
215
211
|
## License
|
|
216
212
|
|
|
@@ -224,4 +220,3 @@ Made with [contributors-img](https://contrib.rocks).
|
|
|
224
220
|
|
|
225
221
|
[mocha]: https://mochajs.org
|
|
226
222
|
[glob]: https://github.com/isaacs/node-glob
|
|
227
|
-
[@artus-cli/artus-cli]: https://github.com/artus-cli/artus-cli
|
package/bin/dev.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
#!/usr/bin/env -S node --loader ts-node/esm --disable-warning=ExperimentalWarning
|
|
1
|
+
#!/usr/bin/env -S node --loader ts-node/esm --disable-warning=ExperimentalWarning --no-deprecation
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
import {execute} from '@oclif/core'
|
|
3
|
+
import { execute } from '@oclif/core';
|
|
5
4
|
|
|
6
|
-
await execute({
|
|
5
|
+
await execute({
|
|
6
|
+
// development: true,
|
|
7
|
+
dir: import.meta.url,
|
|
8
|
+
});
|
package/bin/run.js
CHANGED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ForkOptions } from 'node:child_process';
|
|
2
|
+
import { Command, Flags, Interfaces } from '@oclif/core';
|
|
3
|
+
import { PackageEgg } from './types.js';
|
|
4
|
+
export declare class ForkError extends Error {
|
|
5
|
+
code: number | null;
|
|
6
|
+
constructor(message: string, code: number | null);
|
|
7
|
+
}
|
|
8
|
+
export interface ForkNodeOptions extends ForkOptions {
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
}
|
|
11
|
+
type Flags<T extends typeof Command> = Interfaces.InferredFlags<typeof BaseCommand['baseFlags'] & T['flags']>;
|
|
12
|
+
type Args<T extends typeof Command> = Interfaces.InferredArgs<T['args']>;
|
|
13
|
+
export declare abstract class BaseCommand<T extends typeof Command> extends Command {
|
|
14
|
+
#private;
|
|
15
|
+
static enableJsonFlag: boolean;
|
|
16
|
+
static baseFlags: {
|
|
17
|
+
'dry-run': Interfaces.BooleanFlag<boolean>;
|
|
18
|
+
require: Interfaces.OptionFlag<string[] | undefined, Interfaces.CustomOptions>;
|
|
19
|
+
import: Interfaces.OptionFlag<string[] | undefined, Interfaces.CustomOptions>;
|
|
20
|
+
base: Interfaces.OptionFlag<string, Interfaces.CustomOptions>;
|
|
21
|
+
tscompiler: Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
|
|
22
|
+
typescript: Interfaces.BooleanFlag<boolean>;
|
|
23
|
+
ts: Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
|
|
24
|
+
javascript: Interfaces.BooleanFlag<boolean>;
|
|
25
|
+
declarations: Interfaces.BooleanFlag<boolean>;
|
|
26
|
+
inspect: Interfaces.BooleanFlag<boolean>;
|
|
27
|
+
'inspect-brk': Interfaces.BooleanFlag<boolean>;
|
|
28
|
+
};
|
|
29
|
+
protected flags: Flags<T>;
|
|
30
|
+
protected args: Args<T>;
|
|
31
|
+
protected env: {
|
|
32
|
+
[x: string]: string | undefined;
|
|
33
|
+
TZ?: string;
|
|
34
|
+
};
|
|
35
|
+
protected pkg: Record<string, any>;
|
|
36
|
+
protected isESM: boolean;
|
|
37
|
+
protected pkgEgg: PackageEgg;
|
|
38
|
+
protected globalExecArgv: string[];
|
|
39
|
+
init(): Promise<void>;
|
|
40
|
+
protected catch(err: Error & {
|
|
41
|
+
exitCode?: number;
|
|
42
|
+
}): Promise<any>;
|
|
43
|
+
protected finally(_: Error | undefined): Promise<any>;
|
|
44
|
+
protected formatRequires(): Promise<string[]>;
|
|
45
|
+
protected formatImportModule(modulePath: string): string;
|
|
46
|
+
protected addNodeOptions(options: string): void;
|
|
47
|
+
protected forkNode(modulePath: string, forkArgs: string[], options?: ForkNodeOptions): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BaseCommand = exports.ForkError = void 0;
|
|
7
|
+
const node_util_1 = require("node:util");
|
|
8
|
+
const node_url_1 = require("node:url");
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const node_child_process_1 = require("node:child_process");
|
|
11
|
+
const core_1 = require("@oclif/core");
|
|
12
|
+
const utils_1 = require("@eggjs/utils");
|
|
13
|
+
const runscript_1 = require("runscript");
|
|
14
|
+
const utils_js_1 = require("./utils.js");
|
|
15
|
+
const debug = (0, node_util_1.debuglog)('@eggjs/bin/baseCommand');
|
|
16
|
+
// only hook once and only when ever start any child.
|
|
17
|
+
const children = new Set();
|
|
18
|
+
let hadHook = false;
|
|
19
|
+
function graceful(proc) {
|
|
20
|
+
// save child ref
|
|
21
|
+
children.add(proc);
|
|
22
|
+
// only hook once
|
|
23
|
+
/* c8 ignore else */
|
|
24
|
+
if (!hadHook) {
|
|
25
|
+
hadHook = true;
|
|
26
|
+
let signal;
|
|
27
|
+
['SIGINT', 'SIGQUIT', 'SIGTERM'].forEach(event => {
|
|
28
|
+
process.once(event, () => {
|
|
29
|
+
signal = event;
|
|
30
|
+
process.exit(0);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
process.once('exit', (code) => {
|
|
34
|
+
for (const child of children) {
|
|
35
|
+
debug('process exit code: %o, kill child %o with %o', code, child.pid, signal);
|
|
36
|
+
child.kill(signal);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
class ForkError extends Error {
|
|
42
|
+
code;
|
|
43
|
+
constructor(message, code) {
|
|
44
|
+
super(message);
|
|
45
|
+
this.code = code;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.ForkError = ForkError;
|
|
49
|
+
class BaseCommand extends core_1.Command {
|
|
50
|
+
// add the --json flag
|
|
51
|
+
static enableJsonFlag = false;
|
|
52
|
+
// define flags that can be inherited by any command that extends BaseCommand
|
|
53
|
+
static baseFlags = {
|
|
54
|
+
// 'log-level': Flags.option({
|
|
55
|
+
// default: 'info',
|
|
56
|
+
// helpGroup: 'GLOBAL',
|
|
57
|
+
// options: ['debug', 'warn', 'error', 'info', 'trace'] as const,
|
|
58
|
+
// summary: 'Specify level for logging.',
|
|
59
|
+
// })(),
|
|
60
|
+
'dry-run': core_1.Flags.boolean({
|
|
61
|
+
default: false,
|
|
62
|
+
helpGroup: 'GLOBAL',
|
|
63
|
+
summary: 'whether show full command script only',
|
|
64
|
+
char: 'd',
|
|
65
|
+
}),
|
|
66
|
+
require: core_1.Flags.string({
|
|
67
|
+
helpGroup: 'GLOBAL',
|
|
68
|
+
summary: 'require the given module',
|
|
69
|
+
char: 'r',
|
|
70
|
+
multiple: true,
|
|
71
|
+
}),
|
|
72
|
+
import: core_1.Flags.string({
|
|
73
|
+
helpGroup: 'GLOBAL',
|
|
74
|
+
summary: 'import the given module, only work on ESM',
|
|
75
|
+
multiple: true,
|
|
76
|
+
}),
|
|
77
|
+
base: core_1.Flags.string({
|
|
78
|
+
helpGroup: 'GLOBAL',
|
|
79
|
+
summary: 'directory of application',
|
|
80
|
+
aliases: ['baseDir'],
|
|
81
|
+
default: process.cwd(),
|
|
82
|
+
}),
|
|
83
|
+
tscompiler: core_1.Flags.string({
|
|
84
|
+
helpGroup: 'GLOBAL',
|
|
85
|
+
summary: 'TypeScript compiler, like ts-node/register',
|
|
86
|
+
aliases: ['tsc'],
|
|
87
|
+
}),
|
|
88
|
+
// flag with no value (--typescript)
|
|
89
|
+
typescript: core_1.Flags.boolean({
|
|
90
|
+
helpGroup: 'GLOBAL',
|
|
91
|
+
description: '[default: true] use TypeScript to run the test',
|
|
92
|
+
allowNo: true,
|
|
93
|
+
}),
|
|
94
|
+
ts: core_1.Flags.string({
|
|
95
|
+
helpGroup: 'GLOBAL',
|
|
96
|
+
description: 'shortcut for --typescript, e.g.: --ts=false',
|
|
97
|
+
options: ['true', 'false'],
|
|
98
|
+
}),
|
|
99
|
+
javascript: core_1.Flags.boolean({
|
|
100
|
+
helpGroup: 'GLOBAL',
|
|
101
|
+
description: 'use JavaScript to run the test',
|
|
102
|
+
aliases: ['js'],
|
|
103
|
+
}),
|
|
104
|
+
declarations: core_1.Flags.boolean({
|
|
105
|
+
helpGroup: 'GLOBAL',
|
|
106
|
+
description: 'whether create typings, will add `--require egg-ts-helper/register`',
|
|
107
|
+
aliases: ['dts'],
|
|
108
|
+
}),
|
|
109
|
+
// https://nodejs.org/dist/latest-v18.x/docs/api/cli.html#--inspect-brkhostport
|
|
110
|
+
inspect: core_1.Flags.boolean({
|
|
111
|
+
helpGroup: 'GLOBAL',
|
|
112
|
+
description: 'Activate inspector',
|
|
113
|
+
}),
|
|
114
|
+
'inspect-brk': core_1.Flags.boolean({
|
|
115
|
+
helpGroup: 'GLOBAL',
|
|
116
|
+
description: 'Activate inspector and break at start of user script',
|
|
117
|
+
}),
|
|
118
|
+
};
|
|
119
|
+
flags;
|
|
120
|
+
args;
|
|
121
|
+
env = { ...process.env };
|
|
122
|
+
pkg;
|
|
123
|
+
isESM;
|
|
124
|
+
pkgEgg;
|
|
125
|
+
globalExecArgv = [];
|
|
126
|
+
async init() {
|
|
127
|
+
await super.init();
|
|
128
|
+
debug('[init] raw args: %o, NODE_ENV: %o', this.argv, this.env.NODE_ENV);
|
|
129
|
+
const { args, flags } = await this.parse({
|
|
130
|
+
flags: this.ctor.flags,
|
|
131
|
+
baseFlags: super.ctor.baseFlags,
|
|
132
|
+
enableJsonFlag: this.ctor.enableJsonFlag,
|
|
133
|
+
args: this.ctor.args,
|
|
134
|
+
strict: this.ctor.strict,
|
|
135
|
+
});
|
|
136
|
+
this.flags = flags;
|
|
137
|
+
this.args = args;
|
|
138
|
+
await this.#afterInit();
|
|
139
|
+
}
|
|
140
|
+
async #afterInit() {
|
|
141
|
+
const { args, flags } = this;
|
|
142
|
+
debug('before: args: %o, flags: %o', args, flags);
|
|
143
|
+
if (!node_path_1.default.isAbsolute(flags.base)) {
|
|
144
|
+
flags.base = node_path_1.default.join(process.cwd(), flags.base);
|
|
145
|
+
}
|
|
146
|
+
const pkg = await (0, utils_js_1.readPackageJSON)(flags.base);
|
|
147
|
+
this.pkg = pkg;
|
|
148
|
+
this.pkgEgg = pkg.egg ?? {};
|
|
149
|
+
flags.tscompiler = flags.tscompiler ?? this.env.TS_COMPILER ?? this.pkgEgg.tscompiler;
|
|
150
|
+
let typescript = flags.typescript;
|
|
151
|
+
// keep compatible with old ts flag: `--ts=true` or `--ts=false`
|
|
152
|
+
if (flags.ts === 'true') {
|
|
153
|
+
typescript = true;
|
|
154
|
+
}
|
|
155
|
+
else if (flags.ts === 'false') {
|
|
156
|
+
typescript = false;
|
|
157
|
+
}
|
|
158
|
+
if (typescript === undefined) {
|
|
159
|
+
// try to ready EGG_TYPESCRIPT env first, only accept 'true' or 'false' string
|
|
160
|
+
if (this.env.EGG_TYPESCRIPT === 'false') {
|
|
161
|
+
typescript = false;
|
|
162
|
+
debug('detect typescript=%o from EGG_TYPESCRIPT=%o', false, this.env.EGG_TYPESCRIPT);
|
|
163
|
+
}
|
|
164
|
+
else if (this.env.EGG_TYPESCRIPT === 'true') {
|
|
165
|
+
typescript = true;
|
|
166
|
+
debug('detect typescript=%o from EGG_TYPESCRIPT=%o', true, this.env.EGG_TYPESCRIPT);
|
|
167
|
+
}
|
|
168
|
+
else if (typeof this.pkgEgg.typescript === 'boolean') {
|
|
169
|
+
// read `egg.typescript` from package.json if not pass argv
|
|
170
|
+
typescript = this.pkgEgg.typescript;
|
|
171
|
+
debug('detect typescript=%o from pkg.egg.typescript=%o', typescript, this.pkgEgg.typescript);
|
|
172
|
+
}
|
|
173
|
+
else if (pkg.dependencies?.typescript) {
|
|
174
|
+
// auto detect pkg.dependencies.typescript or pkg.devDependencies.typescript
|
|
175
|
+
typescript = true;
|
|
176
|
+
debug('detect typescript=%o from pkg.dependencies.typescript=%o', true, pkg.dependencies.typescript);
|
|
177
|
+
}
|
|
178
|
+
else if (pkg.devDependencies?.typescript) {
|
|
179
|
+
typescript = true;
|
|
180
|
+
debug('detect typescript=%o from pkg.devDependencies.typescript=%o', true, pkg.devDependencies.typescript);
|
|
181
|
+
}
|
|
182
|
+
else if (await (0, utils_js_1.hasTsConfig)(flags.base)) {
|
|
183
|
+
// tsconfig.json exists
|
|
184
|
+
typescript = true;
|
|
185
|
+
debug('detect typescript=%o cause tsconfig.json exists', true);
|
|
186
|
+
}
|
|
187
|
+
else if (flags.tscompiler) {
|
|
188
|
+
typescript = true;
|
|
189
|
+
debug('detect typescript=%o from --tscompiler=%o', true, flags.tscompiler);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
flags.typescript = typescript;
|
|
193
|
+
this.isESM = pkg.type === 'module';
|
|
194
|
+
if (typescript) {
|
|
195
|
+
const findPaths = [(0, utils_js_1.getSourceDirname)()];
|
|
196
|
+
if (flags.tscompiler) {
|
|
197
|
+
// try app baseDir first on custom tscompiler
|
|
198
|
+
// then try to find tscompiler in @eggjs/bin/node_modules
|
|
199
|
+
findPaths.unshift(flags.base);
|
|
200
|
+
}
|
|
201
|
+
flags.tscompiler = flags.tscompiler ?? 'ts-node/register';
|
|
202
|
+
const tsNodeRegister = (0, utils_1.importResolve)(flags.tscompiler, {
|
|
203
|
+
paths: findPaths,
|
|
204
|
+
});
|
|
205
|
+
flags.tscompiler = tsNodeRegister;
|
|
206
|
+
// should require tsNodeRegister on current process, let it can require *.ts files
|
|
207
|
+
// e.g.: dev command will execute egg loader to find configs and plugins
|
|
208
|
+
// await importModule(tsNodeRegister);
|
|
209
|
+
// let child process auto require ts-node too
|
|
210
|
+
this.addNodeOptions(this.formatImportModule(tsNodeRegister));
|
|
211
|
+
// tell egg loader to load ts file
|
|
212
|
+
// see https://github.com/eggjs/egg-core/blob/master/lib/loader/egg_loader.js#L443
|
|
213
|
+
this.env.EGG_TYPESCRIPT = 'true';
|
|
214
|
+
// set current process.env.EGG_TYPESCRIPT too
|
|
215
|
+
process.env.EGG_TYPESCRIPT = 'true';
|
|
216
|
+
// load files from tsconfig on startup
|
|
217
|
+
this.env.TS_NODE_FILES = process.env.TS_NODE_FILES ?? 'true';
|
|
218
|
+
// keep same logic with egg-core, test cmd load files need it
|
|
219
|
+
// see https://github.com/eggjs/egg-core/blob/master/lib/loader/egg_loader.js#L49
|
|
220
|
+
// addNodeOptionsToEnv(`--require ${importResolve('tsconfig-paths/register', {
|
|
221
|
+
// paths: [ getSourceDirname() ],
|
|
222
|
+
// })}`, ctx.env);
|
|
223
|
+
}
|
|
224
|
+
if (this.isESM) {
|
|
225
|
+
// use ts-node/esm loader on esm
|
|
226
|
+
let esmLoader = (0, utils_1.importResolve)('ts-node/esm', {
|
|
227
|
+
paths: [(0, utils_js_1.getSourceDirname)()],
|
|
228
|
+
});
|
|
229
|
+
// ES Module loading with absolute path fails on windows
|
|
230
|
+
// https://github.com/nodejs/node/issues/31710#issuecomment-583916239
|
|
231
|
+
// https://nodejs.org/api/url.html#url_url_pathtofileurl_path
|
|
232
|
+
// Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'd:'
|
|
233
|
+
esmLoader = (0, node_url_1.pathToFileURL)(esmLoader).href;
|
|
234
|
+
// wait for https://github.com/nodejs/node/issues/40940
|
|
235
|
+
this.addNodeOptions('--no-warnings');
|
|
236
|
+
this.addNodeOptions(`--loader ${esmLoader}`);
|
|
237
|
+
}
|
|
238
|
+
if (flags.declarations === undefined) {
|
|
239
|
+
if (typeof this.pkgEgg.declarations === 'boolean') {
|
|
240
|
+
// read `egg.declarations` from package.json if not pass argv
|
|
241
|
+
flags.declarations = this.pkgEgg.declarations;
|
|
242
|
+
debug('detect declarations from pkg.egg.declarations=%o', this.pkgEgg.declarations);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (flags.declarations) {
|
|
246
|
+
const etsBin = (0, utils_1.importResolve)('egg-ts-helper/dist/bin', {
|
|
247
|
+
paths: [
|
|
248
|
+
flags.base,
|
|
249
|
+
(0, utils_js_1.getSourceDirname)(),
|
|
250
|
+
],
|
|
251
|
+
});
|
|
252
|
+
debug('run ets first: %o', etsBin);
|
|
253
|
+
await (0, runscript_1.runScript)(`node ${etsBin}`);
|
|
254
|
+
}
|
|
255
|
+
if (this.pkgEgg.revert) {
|
|
256
|
+
const reverts = Array.isArray(this.pkgEgg.revert) ? this.pkgEgg.revert : [this.pkgEgg.revert];
|
|
257
|
+
for (const revert of reverts) {
|
|
258
|
+
this.globalExecArgv.push(`--security-revert=${revert}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
let hasInspectOption = false;
|
|
262
|
+
if (flags.inspect) {
|
|
263
|
+
this.addNodeOptions('--inspect');
|
|
264
|
+
hasInspectOption = true;
|
|
265
|
+
}
|
|
266
|
+
if (flags['inspect-brk']) {
|
|
267
|
+
this.addNodeOptions('--inspect-brk');
|
|
268
|
+
hasInspectOption = true;
|
|
269
|
+
}
|
|
270
|
+
if (hasInspectOption) {
|
|
271
|
+
Reflect.set(flags, 'timeout', 0);
|
|
272
|
+
debug('set timeout = 0 when inspect enable');
|
|
273
|
+
}
|
|
274
|
+
else if (this.env.JB_DEBUG_FILE) {
|
|
275
|
+
// others like WebStorm 2019 will pass NODE_OPTIONS, and @eggjs/bin itself will be debug, so could detect `process.env.JB_DEBUG_FILE`.
|
|
276
|
+
Reflect.set(flags, 'timeout', 0);
|
|
277
|
+
debug('set timeout = false when process.env.JB_DEBUG_FILE=%o', this.env.JB_DEBUG_FILE);
|
|
278
|
+
}
|
|
279
|
+
debug('baseDir: %o, isESM: %o', flags.base, this.isESM);
|
|
280
|
+
debug('set NODE_OPTIONS: %o', this.env.NODE_OPTIONS);
|
|
281
|
+
debug('after: args: %o, flags: %o', args, flags);
|
|
282
|
+
debug('enter real command: %o', this.id);
|
|
283
|
+
}
|
|
284
|
+
async catch(err) {
|
|
285
|
+
// add any custom logic to handle errors from the command
|
|
286
|
+
// or simply return the parent class error handling
|
|
287
|
+
return super.catch(err);
|
|
288
|
+
}
|
|
289
|
+
async finally(_) {
|
|
290
|
+
// called after run and catch regardless of whether or not the command errored
|
|
291
|
+
return super.finally(_);
|
|
292
|
+
}
|
|
293
|
+
async formatRequires() {
|
|
294
|
+
const requires = this.flags.require ?? [];
|
|
295
|
+
const imports = this.flags.import ?? [];
|
|
296
|
+
let eggRequires = this.pkgEgg.require ?? [];
|
|
297
|
+
if (typeof eggRequires === 'string') {
|
|
298
|
+
eggRequires = [eggRequires];
|
|
299
|
+
}
|
|
300
|
+
let eggImports = this.pkgEgg.import ?? [];
|
|
301
|
+
if (typeof eggImports === 'string') {
|
|
302
|
+
eggImports = [eggImports];
|
|
303
|
+
}
|
|
304
|
+
return [
|
|
305
|
+
...requires,
|
|
306
|
+
...imports,
|
|
307
|
+
...eggRequires,
|
|
308
|
+
...eggImports,
|
|
309
|
+
];
|
|
310
|
+
}
|
|
311
|
+
formatImportModule(modulePath) {
|
|
312
|
+
if (this.isESM) {
|
|
313
|
+
return `--import ${(0, node_url_1.pathToFileURL)(modulePath).href}`;
|
|
314
|
+
}
|
|
315
|
+
return `--require ${modulePath}`;
|
|
316
|
+
}
|
|
317
|
+
addNodeOptions(options) {
|
|
318
|
+
if (this.env.NODE_OPTIONS) {
|
|
319
|
+
if (!this.env.NODE_OPTIONS.includes(options)) {
|
|
320
|
+
this.env.NODE_OPTIONS = `${this.env.NODE_OPTIONS} ${options}`;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
this.env.NODE_OPTIONS = options;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
async forkNode(modulePath, forkArgs, options = {}) {
|
|
328
|
+
const env = {
|
|
329
|
+
...this.env,
|
|
330
|
+
...options.env,
|
|
331
|
+
};
|
|
332
|
+
const forkExecArgv = [
|
|
333
|
+
...this.globalExecArgv,
|
|
334
|
+
...options.execArgv || [],
|
|
335
|
+
];
|
|
336
|
+
const NODE_OPTIONS = env.NODE_OPTIONS ? `NODE_OPTIONS='${env.NODE_OPTIONS}' ` : '';
|
|
337
|
+
const forkExecArgvString = forkExecArgv.length ? ' ' + forkExecArgv.join(' ') + ' ' : ' ';
|
|
338
|
+
const forkArgsString = forkArgs.map(a => `'${a}'`).join(' ');
|
|
339
|
+
const fullCommand = `${NODE_OPTIONS}${process.execPath}${forkExecArgvString}${modulePath} ${forkArgsString}`;
|
|
340
|
+
if (options.dryRun) {
|
|
341
|
+
console.log('dry run: $ %s', fullCommand);
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
options = {
|
|
345
|
+
stdio: 'inherit',
|
|
346
|
+
env,
|
|
347
|
+
cwd: this.flags.base,
|
|
348
|
+
...options,
|
|
349
|
+
execArgv: forkExecArgv,
|
|
350
|
+
};
|
|
351
|
+
const proc = (0, node_child_process_1.fork)(modulePath, forkArgs, options);
|
|
352
|
+
debug('Run fork pid: %o\n\n$ %s\n\n', proc.pid, fullCommand);
|
|
353
|
+
graceful(proc);
|
|
354
|
+
return new Promise((resolve, reject) => {
|
|
355
|
+
proc.once('exit', code => {
|
|
356
|
+
debug('fork pid: %o exit code %o', proc.pid, code);
|
|
357
|
+
children.delete(proc);
|
|
358
|
+
if (code !== 0) {
|
|
359
|
+
const err = new ForkError(modulePath + ' ' + forkArgs.join(' ') + ' exit with code ' + code, code);
|
|
360
|
+
reject(err);
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
resolve();
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
exports.BaseCommand = BaseCommand;
|
|
370
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZUNvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmFzZUNvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEseUNBQXFDO0FBQ3JDLHVDQUF5QztBQUN6QywwREFBNkI7QUFDN0IsMkRBQXFFO0FBQ3JFLHNDQUF5RDtBQUN6RCx3Q0FBNkM7QUFDN0MseUNBQXNDO0FBQ3RDLHlDQUdvQjtBQUdwQixNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUVqRCxxREFBcUQ7QUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7QUFDekMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLFNBQVMsUUFBUSxDQUFDLElBQWtCO0lBQ2xDLGlCQUFpQjtJQUNqQixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRW5CLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksTUFBc0IsQ0FBQztRQUMzQixDQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDdkIsTUFBTSxHQUFHLEtBQXVCLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDcEMsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsS0FBSyxDQUFDLDhDQUE4QyxFQUFF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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import Test from './test.js';
|
|
2
|
+
import { ForkNodeOptions } from '../baseCommand.js';
|
|
3
|
+
export default class Cov<T extends typeof Cov> extends Test<T> {
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static flags: {
|
|
7
|
+
prerequire: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
exclude: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
c8: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
bail: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'no-timeout': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
grep: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
changed: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
mochawesome: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
parallel: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
jobs: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
'auto-agent': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
|
+
};
|
|
20
|
+
protected get defaultExcludes(): string[];
|
|
21
|
+
protected forkNode(modulePath: string, forkArgs: string[], options?: ForkNodeOptions): Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const core_1 = require("@oclif/core");
|
|
9
|
+
const test_js_1 = __importDefault(require("./test.js"));
|
|
10
|
+
const utils_1 = require("@eggjs/utils");
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
class Cov extends test_js_1.default {
|
|
14
|
+
static description = 'Run the test with coverage';
|
|
15
|
+
static examples = [
|
|
16
|
+
'<%= config.bin %> <%= command.id %>',
|
|
17
|
+
'<%= config.bin %> <%= command.id %> test/index.test.ts',
|
|
18
|
+
];
|
|
19
|
+
static flags = {
|
|
20
|
+
...test_js_1.default.flags,
|
|
21
|
+
// will use on egg-mock https://github.com/eggjs/egg-mock/blob/84a64bd19d0569ec94664c898fb1b28367b95d60/index.js#L7
|
|
22
|
+
prerequire: core_1.Flags.boolean({
|
|
23
|
+
description: 'prerequire files for coverage instrument',
|
|
24
|
+
}),
|
|
25
|
+
exclude: core_1.Flags.string({
|
|
26
|
+
description: 'coverage ignore, one or more files patterns`',
|
|
27
|
+
multiple: true,
|
|
28
|
+
char: 'x',
|
|
29
|
+
}),
|
|
30
|
+
c8: core_1.Flags.string({
|
|
31
|
+
description: 'c8 instruments passthrough`',
|
|
32
|
+
default: '--temp-directory node_modules/.c8_output -r text-summary -r json-summary -r json -r lcov -r cobertura',
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
get defaultExcludes() {
|
|
36
|
+
return [
|
|
37
|
+
'example/',
|
|
38
|
+
'examples/',
|
|
39
|
+
'mocks**/',
|
|
40
|
+
'docs/',
|
|
41
|
+
// https://github.com/JaKXz/test-exclude/blob/620a7be412d4fc2070d50f0f63e3228314066fc9/index.js#L73
|
|
42
|
+
'test/**',
|
|
43
|
+
'test{,-*}.js',
|
|
44
|
+
'**/*.test.js',
|
|
45
|
+
'**/__tests__/**',
|
|
46
|
+
'**/node_modules/**',
|
|
47
|
+
'typings',
|
|
48
|
+
'**/*.d.ts',
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
async forkNode(modulePath, forkArgs, options = {}) {
|
|
52
|
+
const { flags } = this;
|
|
53
|
+
if (flags.prerequire) {
|
|
54
|
+
this.env.EGG_BIN_PREREQUIRE = 'true';
|
|
55
|
+
}
|
|
56
|
+
// add c8 args
|
|
57
|
+
// https://github.com/eggjs/egg/issues/3930
|
|
58
|
+
const c8Args = [
|
|
59
|
+
// '--show-process-tree',
|
|
60
|
+
...flags.c8.split(' ').filter(a => a.trim()),
|
|
61
|
+
];
|
|
62
|
+
if (flags.typescript) {
|
|
63
|
+
this.env.SPAWN_WRAP_SHIM_ROOT = node_path_1.default.join(flags.base, 'node_modules');
|
|
64
|
+
c8Args.push('--extension');
|
|
65
|
+
c8Args.push('.ts');
|
|
66
|
+
}
|
|
67
|
+
const excludes = new Set([
|
|
68
|
+
...process.env.COV_EXCLUDES?.split(',') ?? [],
|
|
69
|
+
...this.defaultExcludes,
|
|
70
|
+
...Array.from(flags.exclude ?? []),
|
|
71
|
+
]);
|
|
72
|
+
for (const exclude of excludes) {
|
|
73
|
+
c8Args.push('-x');
|
|
74
|
+
c8Args.push(exclude);
|
|
75
|
+
}
|
|
76
|
+
const c8File = (0, utils_1.importResolve)('c8/bin/c8.js');
|
|
77
|
+
const outputDir = node_path_1.default.join(flags.base, 'node_modules/.c8_output');
|
|
78
|
+
await promises_1.default.rm(outputDir, { force: true, recursive: true });
|
|
79
|
+
const coverageDir = node_path_1.default.join(flags.base, 'coverage');
|
|
80
|
+
await promises_1.default.rm(coverageDir, { force: true, recursive: true });
|
|
81
|
+
const execArgv = [
|
|
82
|
+
...this.globalExecArgv,
|
|
83
|
+
...options.execArgv || [],
|
|
84
|
+
];
|
|
85
|
+
this.globalExecArgv = [];
|
|
86
|
+
// $ c8 node mocha
|
|
87
|
+
await super.forkNode(c8File, [
|
|
88
|
+
...c8Args,
|
|
89
|
+
process.execPath,
|
|
90
|
+
...execArgv,
|
|
91
|
+
modulePath,
|
|
92
|
+
...forkArgs,
|
|
93
|
+
]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.default = Cov;
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Nvdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBEQUE2QjtBQUM3QixnRUFBa0M7QUFDbEMsc0NBQW9DO0FBQ3BDLHdEQUE2QjtBQUM3Qix3Q0FBNkM7QUFHN0MsNkRBQTZEO0FBQzdELGFBQWE7QUFDYixNQUFxQixHQUEwQixTQUFRLGlCQUFPO0lBQzVELE1BQU0sQ0FBVSxXQUFXLEdBQUcsNEJBQTRCLENBQUM7SUFFM0QsTUFBTSxDQUFVLFFBQVEsR0FBRztRQUN6QixxQ0FBcUM7UUFDckMsd0RBQXdEO0tBQ3pELENBQUM7SUFFRixNQUFNLENBQVUsS0FBSyxHQUFHO1FBQ3RCLEdBQUcsaUJBQUksQ0FBQyxLQUFLO1FBQ2IsbUhBQW1IO1FBQ25ILFVBQVUsRUFBRSxZQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3hCLFdBQVcsRUFBRSwwQ0FBMEM7U0FDeEQsQ0FBQztRQUNGLE9BQU8sRUFBRSxZQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3BCLFdBQVcsRUFBRSw4Q0FBOEM7WUFDM0QsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsR0FBRztTQUNWLENBQUM7UUFDRixFQUFFLEVBQUUsWUFBSyxDQUFDLE1BQU0sQ0FBQztZQUNmLFdBQVcsRUFBRSw2QkFBNkI7WUFDMUMsT0FBTyxFQUFFLHVHQUF1RztTQUNqSCxDQUFDO0tBQ0gsQ0FBQztJQUVGLElBQWMsZUFBZTtRQUMzQixPQUFPO1lBQ0wsVUFBVTtZQUNWLFdBQVc7WUFDWCxVQUFVO1lBQ1YsT0FBTztZQUNQLG1HQUFtRztZQUNuRyxTQUFTO1lBQ1QsY0FBYztZQUNkLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsb0JBQW9CO1lBQ3BCLFNBQVM7WUFDVCxXQUFXO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFa0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFrQixFQUFFLFFBQWtCLEVBQUUs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
|