@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/dist/esm/commands/dev.js
CHANGED
|
@@ -1,25 +1,92 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import { Flags } from '@oclif/core';
|
|
3
|
+
import { getConfig, getFrameworkPath } from '@eggjs/utils';
|
|
4
|
+
import { detect } from 'detect-port';
|
|
5
|
+
import { getSourceFilename } from '../utils.js';
|
|
6
|
+
import { BaseCommand } from '../baseCommand.js';
|
|
7
|
+
const debug = debuglog('@eggjs/bin/commands/dev');
|
|
8
|
+
export default class Dev extends BaseCommand {
|
|
9
|
+
static description = 'Start server at local dev mode';
|
|
7
10
|
static examples = [
|
|
8
11
|
'<%= config.bin %> <%= command.id %>',
|
|
9
12
|
];
|
|
10
13
|
static flags = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
port: Flags.integer({
|
|
15
|
+
description: 'listening port, default to 7001',
|
|
16
|
+
char: 'p',
|
|
17
|
+
}),
|
|
18
|
+
workers: Flags.integer({
|
|
19
|
+
char: 'c',
|
|
20
|
+
aliases: ['cluster'],
|
|
21
|
+
description: 'numbers of app workers',
|
|
22
|
+
default: 1,
|
|
23
|
+
}),
|
|
24
|
+
framework: Flags.string({
|
|
25
|
+
description: 'specify framework that can be absolute path or npm package, default is "egg"',
|
|
26
|
+
}),
|
|
27
|
+
sticky: Flags.boolean({
|
|
28
|
+
description: 'start a sticky cluster server',
|
|
29
|
+
}),
|
|
15
30
|
};
|
|
16
31
|
async run() {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this.
|
|
20
|
-
|
|
21
|
-
|
|
32
|
+
debug('NODE_ENV: %o', this.env);
|
|
33
|
+
this.env.NODE_ENV = this.env.NODE_ENV ?? 'development';
|
|
34
|
+
this.env.EGG_MASTER_CLOSE_TIMEOUT = '1000';
|
|
35
|
+
const ext = this.isESM ? 'mjs' : 'cjs';
|
|
36
|
+
const serverBin = getSourceFilename(`../scripts/start-cluster.${ext}`);
|
|
37
|
+
const eggStartOptions = await this.formatEggStartOptions();
|
|
38
|
+
const args = [JSON.stringify(eggStartOptions)];
|
|
39
|
+
const requires = await this.formatRequires();
|
|
40
|
+
const execArgv = [];
|
|
41
|
+
for (const r of requires) {
|
|
42
|
+
const imports = this.formatImportModule(r).split(' ');
|
|
43
|
+
execArgv.push(...imports);
|
|
44
|
+
}
|
|
45
|
+
await this.forkNode(serverBin, args, { execArgv });
|
|
46
|
+
}
|
|
47
|
+
async formatEggStartOptions() {
|
|
48
|
+
const { flags } = this;
|
|
49
|
+
flags.framework = getFrameworkPath({
|
|
50
|
+
framework: flags.framework,
|
|
51
|
+
baseDir: flags.base,
|
|
52
|
+
});
|
|
53
|
+
if (!flags.port) {
|
|
54
|
+
let configuredPort;
|
|
55
|
+
try {
|
|
56
|
+
const configuration = await getConfig({
|
|
57
|
+
framework: flags.framework,
|
|
58
|
+
baseDir: flags.base,
|
|
59
|
+
env: 'local',
|
|
60
|
+
});
|
|
61
|
+
configuredPort = configuration?.cluster?.listen?.port;
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
/** skip when failing to read the configuration */
|
|
65
|
+
debug('getConfig error: %s, framework: %o, baseDir: %o, env: local', err, flags.framework, flags.base);
|
|
66
|
+
}
|
|
67
|
+
if (configuredPort) {
|
|
68
|
+
flags.port = configuredPort;
|
|
69
|
+
debug(`use port ${flags.port} from configuration file`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const defaultPort = parseInt(process.env.EGG_BIN_DEFAULT_PORT ?? '7001');
|
|
73
|
+
debug('detect available port');
|
|
74
|
+
flags.port = await detect(defaultPort);
|
|
75
|
+
if (flags.port !== defaultPort) {
|
|
76
|
+
console.warn('[@eggjs/bin] server port %o is unavailable, now using port %o', defaultPort, flags.port);
|
|
77
|
+
}
|
|
78
|
+
debug(`use available port ${flags.port}`);
|
|
79
|
+
}
|
|
22
80
|
}
|
|
81
|
+
return {
|
|
82
|
+
baseDir: flags.base,
|
|
83
|
+
workers: flags.workers,
|
|
84
|
+
port: flags.port,
|
|
85
|
+
framework: flags.framework,
|
|
86
|
+
typescript: flags.typescript,
|
|
87
|
+
tscompiler: flags.tscompiler,
|
|
88
|
+
sticky: flags.sticky,
|
|
89
|
+
};
|
|
23
90
|
}
|
|
24
91
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Rldi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFFbEQsTUFBTSxDQUFDLE9BQU8sT0FBTyxHQUEwQixTQUFRLFdBQWM7SUFDbkUsTUFBTSxDQUFVLFdBQVcsR0FBRyxnQ0FBZ0MsQ0FBQztJQUUvRCxNQUFNLENBQVUsUUFBUSxHQUFHO1FBQ3pCLHFDQUFxQztLQUN0QyxDQUFDO0lBRUYsTUFBTSxDQUFVLEtBQUssR0FBRztRQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNsQixXQUFXLEVBQUUsaUNBQWlDO1lBQzlDLElBQUksRUFBRSxHQUFHO1NBQ1YsQ0FBQztRQUNGLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3JCLElBQUksRUFBRSxHQUFHO1lBQ1QsT0FBTyxFQUFFLENBQUUsU0FBUyxDQUFFO1lBQ3RCLFdBQVcsRUFBRSx3QkFBd0I7WUFDckMsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDO1FBQ0YsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDdEIsV0FBVyxFQUFFLDhFQUE4RTtTQUM1RixDQUFDO1FBQ0YsTUFBTSxFQUFFLEtBQUssQ0FBQyxP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
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import { BaseCommand } from '../baseCommand.js';
|
|
2
|
-
export default class Test extends
|
|
2
|
+
export default class Test<T extends typeof Test> extends BaseCommand<T> {
|
|
3
3
|
static args: {
|
|
4
|
-
file: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
4
|
+
file: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
5
5
|
};
|
|
6
6
|
static description: string;
|
|
7
7
|
static examples: string[];
|
|
8
8
|
static flags: {
|
|
9
|
-
typescript: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
-
javascript: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
9
|
bail: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
-
timeout: import("@oclif/core/interfaces").OptionFlag<
|
|
10
|
+
timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'no-timeout': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
12
|
grep: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
changed: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
mochawesome: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
parallel: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
jobs: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
'auto-agent': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
18
|
};
|
|
15
19
|
run(): Promise<void>;
|
|
20
|
+
protected runMocha(mochaFile: string, mochaArgs: string[]): Promise<void>;
|
|
16
21
|
protected formatMochaArgs(): Promise<string[] | undefined>;
|
|
22
|
+
protected getChangedTestFiles(dir: string, ext: string): Promise<string[]>;
|
|
17
23
|
}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { debuglog } from 'node:util';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
3
4
|
import fs from 'node:fs/promises';
|
|
4
5
|
import { Args, Flags } from '@oclif/core';
|
|
5
6
|
import globby from 'globby';
|
|
6
7
|
import { importResolve } from '@eggjs/utils';
|
|
8
|
+
import { getChangedFilesForRoots } from 'jest-changed-files';
|
|
7
9
|
import { BaseCommand } from '../baseCommand.js';
|
|
8
10
|
const debug = debuglog('@eggjs/bin/commands/test');
|
|
9
11
|
export default class Test extends BaseCommand {
|
|
10
12
|
static args = {
|
|
11
13
|
file: Args.string({
|
|
12
14
|
description: 'file(s) to test',
|
|
13
|
-
default: 'test/**/*.test.ts',
|
|
14
15
|
}),
|
|
15
16
|
};
|
|
16
17
|
static description = 'Run the test';
|
|
@@ -21,33 +22,47 @@ export default class Test extends BaseCommand {
|
|
|
21
22
|
'<%= config.bin %> <%= command.id %> --log-level debug',
|
|
22
23
|
];
|
|
23
24
|
static flags = {
|
|
24
|
-
// flag with no value (--ts, --typescript)
|
|
25
|
-
typescript: Flags.boolean({
|
|
26
|
-
description: '[default: true] use TypeScript to run the test',
|
|
27
|
-
default: true,
|
|
28
|
-
aliases: ['ts'],
|
|
29
|
-
allowNo: true,
|
|
30
|
-
}),
|
|
31
|
-
javascript: Flags.boolean({
|
|
32
|
-
description: 'use JavaScript to run the test',
|
|
33
|
-
default: false,
|
|
34
|
-
aliases: ['js'],
|
|
35
|
-
}),
|
|
36
25
|
bail: Flags.boolean({
|
|
37
26
|
description: 'bbort ("bail") after first test failure',
|
|
38
27
|
default: false,
|
|
39
28
|
char: 'b',
|
|
40
29
|
}),
|
|
41
|
-
|
|
42
|
-
timeout: Flags.string({
|
|
30
|
+
timeout: Flags.integer({
|
|
43
31
|
char: 't',
|
|
44
32
|
description: 'set test-case timeout in milliseconds',
|
|
45
|
-
default: process.env.TEST_TIMEOUT ?? '60000',
|
|
33
|
+
default: parseInt(process.env.TEST_TIMEOUT ?? '60000'),
|
|
34
|
+
}),
|
|
35
|
+
'no-timeout': Flags.boolean({
|
|
36
|
+
description: 'disable timeout',
|
|
46
37
|
}),
|
|
47
38
|
grep: Flags.string({
|
|
48
39
|
char: 'g',
|
|
49
40
|
description: 'only run tests matching <pattern>',
|
|
50
41
|
}),
|
|
42
|
+
changed: Flags.boolean({
|
|
43
|
+
description: 'only test with changed files and match test/**/*.test.(js|ts)',
|
|
44
|
+
char: 'c',
|
|
45
|
+
}),
|
|
46
|
+
mochawesome: Flags.boolean({
|
|
47
|
+
description: '[default: true] enable mochawesome reporter',
|
|
48
|
+
default: true,
|
|
49
|
+
allowNo: true,
|
|
50
|
+
}),
|
|
51
|
+
parallel: Flags.boolean({
|
|
52
|
+
description: 'mocha parallel mode',
|
|
53
|
+
default: false,
|
|
54
|
+
char: 'p',
|
|
55
|
+
}),
|
|
56
|
+
jobs: Flags.integer({
|
|
57
|
+
char: 't',
|
|
58
|
+
description: 'number of jobs to run in parallel',
|
|
59
|
+
default: os.cpus().length - 1,
|
|
60
|
+
}),
|
|
61
|
+
'auto-agent': Flags.boolean({
|
|
62
|
+
description: '[default: true] auto bootstrap agent in mocha master process',
|
|
63
|
+
default: true,
|
|
64
|
+
allowNo: true,
|
|
65
|
+
}),
|
|
51
66
|
};
|
|
52
67
|
async run() {
|
|
53
68
|
const { flags } = this;
|
|
@@ -59,19 +74,25 @@ export default class Test extends BaseCommand {
|
|
|
59
74
|
throw err;
|
|
60
75
|
}
|
|
61
76
|
const mochaFile = process.env.MOCHA_FILE || importResolve('mocha/bin/_mocha');
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
77
|
+
if (flags.parallel) {
|
|
78
|
+
this.env.ENABLE_MOCHA_PARALLEL = 'true';
|
|
79
|
+
if (flags['auto-agent']) {
|
|
80
|
+
this.env.AUTO_AGENT = 'true';
|
|
81
|
+
}
|
|
82
|
+
}
|
|
68
83
|
// set NODE_ENV=test, let egg application load unittest logic
|
|
69
84
|
// https://eggjs.org/basics/env#difference-from-node_env
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
this.env.NODE_ENV = 'test';
|
|
86
|
+
if (flags['no-timeout']) {
|
|
87
|
+
flags.timeout = 0;
|
|
88
|
+
}
|
|
89
|
+
debug('run test: %s %o flags: %o', mochaFile, this.args, flags);
|
|
72
90
|
const mochaArgs = await this.formatMochaArgs();
|
|
73
91
|
if (!mochaArgs)
|
|
74
92
|
return;
|
|
93
|
+
await this.runMocha(mochaFile, mochaArgs);
|
|
94
|
+
}
|
|
95
|
+
async runMocha(mochaFile, mochaArgs) {
|
|
75
96
|
await this.forkNode(mochaFile, mochaArgs, {
|
|
76
97
|
execArgv: [
|
|
77
98
|
...process.execArgv,
|
|
@@ -94,28 +115,28 @@ export default class Test extends BaseCommand {
|
|
|
94
115
|
// this.base, (err as Error).message);
|
|
95
116
|
// }
|
|
96
117
|
// handle mochawesome enable
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
118
|
+
let reporter = this.env.TEST_REPORTER;
|
|
119
|
+
let reporterOptions = '';
|
|
120
|
+
if (!reporter && flags.mochawesome) {
|
|
121
|
+
// use https://github.com/node-modules/mochawesome/pull/1 instead
|
|
122
|
+
reporter = importResolve('mochawesome-with-mocha');
|
|
123
|
+
reporterOptions = 'reportDir=node_modules/.mochawesome-reports';
|
|
124
|
+
if (flags.parallel) {
|
|
125
|
+
// https://github.com/adamgruber/mochawesome#parallel-mode
|
|
126
|
+
requires.push(path.join(reporter, '../register.js'));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
108
129
|
const ext = flags.typescript ? 'ts' : 'js';
|
|
109
130
|
let pattern = args.file ? args.file.split(',') : [];
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
131
|
+
// changed
|
|
132
|
+
if (flags.changed) {
|
|
133
|
+
pattern = await this.getChangedTestFiles(flags.base, ext);
|
|
134
|
+
if (!pattern.length) {
|
|
135
|
+
console.log('No changed test files');
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
debug('changed files: %o', pattern);
|
|
139
|
+
}
|
|
119
140
|
if (!pattern.length && process.env.TESTS) {
|
|
120
141
|
pattern = process.env.TESTS.split(',');
|
|
121
142
|
}
|
|
@@ -128,7 +149,7 @@ export default class Test extends BaseCommand {
|
|
|
128
149
|
const files = globby.sync(pattern, { cwd: flags.base });
|
|
129
150
|
files.sort();
|
|
130
151
|
if (files.length === 0) {
|
|
131
|
-
console.log(
|
|
152
|
+
console.log('No test files found with pattern %o', pattern);
|
|
132
153
|
return;
|
|
133
154
|
}
|
|
134
155
|
// auto add setup file as the first test file
|
|
@@ -142,19 +163,36 @@ export default class Test extends BaseCommand {
|
|
|
142
163
|
}
|
|
143
164
|
const grep = flags.grep ? flags.grep.split(',') : [];
|
|
144
165
|
return [
|
|
145
|
-
flags.dryRun ? '--dry-run' : '',
|
|
146
166
|
// force exit
|
|
147
167
|
'--exit',
|
|
148
168
|
flags.bail ? '--bail' : '',
|
|
149
169
|
grep.map(pattern => `--grep='${pattern}'`).join(' '),
|
|
150
170
|
flags.timeout ? `--timeout=${flags.timeout}` : '--no-timeout',
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
171
|
+
flags.parallel ? '--parallel' : '',
|
|
172
|
+
flags.parallel && flags.jobs ? `--jobs=${flags.jobs}` : '',
|
|
173
|
+
reporter ? `--reporter=${reporter}` : '',
|
|
174
|
+
reporterOptions ? `--reporter-options=${reporterOptions}` : '',
|
|
155
175
|
...requires.map(r => `--require=${r}`),
|
|
156
176
|
...files,
|
|
177
|
+
flags['dry-run'] ? '--dry-run' : '',
|
|
157
178
|
].filter(a => a.trim());
|
|
158
179
|
}
|
|
180
|
+
async getChangedTestFiles(dir, ext) {
|
|
181
|
+
const res = await getChangedFilesForRoots([path.join(dir, 'test')], {});
|
|
182
|
+
const changedFiles = res.changedFiles;
|
|
183
|
+
const files = [];
|
|
184
|
+
for (let cf of changedFiles) {
|
|
185
|
+
// only find test/**/*.test.(js|ts)
|
|
186
|
+
if (cf.endsWith(`.test.${ext}`)) {
|
|
187
|
+
// Patterns MUST use forward slashes (not backslashes)
|
|
188
|
+
// This should be converted on Windows
|
|
189
|
+
if (process.platform === 'win32') {
|
|
190
|
+
cf = cf.replace(/\\/g, '/');
|
|
191
|
+
}
|
|
192
|
+
files.push(cf);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return files;
|
|
196
|
+
}
|
|
159
197
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFbkQsTUFBTSxDQUFDLE9BQU8sT0FBTyxJQUE0QixTQUFRLFdBQWM7SUFDckUsTUFBTSxDQUFVLElBQUksR0FBRztRQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNoQixXQUFXLEVBQUUsaUJBQWlCO1NBQy9CLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFVLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFFN0MsTUFBTSxDQUFVLFFBQVEsR0FBRztRQUN6QixxQ0FBcUM7UUFDckMsd0RBQXdEO1FBQ3hELDRDQUE0QztRQUM1Qyx1REFBdUQ7S0FDeEQsQ0FBQztJQUVGLE1BQU0sQ0FBVSxLQUFLLEdBQUc7UUFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDbEIsV0FBVyxFQUFFLHlDQUF5QztZQUN0RCxPQUFPLEVBQUUsS0FBSztZQUNkLElBQUksRUFBRSxH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
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
export * from './
|
|
1
|
+
import Test from './commands/test.js';
|
|
2
|
+
import Cov from './commands/cov.js';
|
|
3
|
+
import Dev from './commands/dev.js';
|
|
4
|
+
export { Test, Cov, Dev };
|
|
5
|
+
export * from './baseCommand.js';
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export * from '@oclif/core';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
export * from './
|
|
6
|
-
|
|
1
|
+
import Test from './commands/test.js';
|
|
2
|
+
import Cov from './commands/cov.js';
|
|
3
|
+
import Dev from './commands/dev.js';
|
|
4
|
+
export { Test, Cov, Dev };
|
|
5
|
+
export * from './baseCommand.js';
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export * from '@oclif/core';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sb0JBQW9CLENBQUM7QUFDdEMsT0FBTyxHQUFHLE1BQU0sbUJBQW1CLENBQUM7QUFDcEMsT0FBTyxHQUFHLE1BQU0sbUJBQW1CLENBQUM7QUFFcEMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFMUIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQyJ9
|
package/dist/esm/utils.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export declare function addNodeOptionsToEnv(options: string, env: Record<string, any>): void;
|
|
2
1
|
export declare function readPackageJSON(baseDir: string): Promise<any>;
|
|
3
2
|
export declare function hasTsConfig(baseDir: string): Promise<boolean>;
|
|
4
3
|
export declare function getSourceDirname(): string;
|
package/dist/esm/utils.js
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
|
-
export function addNodeOptionsToEnv(options, env) {
|
|
5
|
-
if (env.NODE_OPTIONS) {
|
|
6
|
-
if (!env.NODE_OPTIONS.includes(options)) {
|
|
7
|
-
env.NODE_OPTIONS = `${env.NODE_OPTIONS} ${options}`;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
else {
|
|
11
|
-
env.NODE_OPTIONS = options;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
4
|
export async function readPackageJSON(baseDir) {
|
|
15
5
|
const pkgFile = path.join(baseDir, 'package.json');
|
|
16
6
|
try {
|
|
@@ -43,4 +33,4 @@ export function getSourceDirname() {
|
|
|
43
33
|
export function getSourceFilename(filename) {
|
|
44
34
|
return path.join(getSourceDirname(), filename);
|
|
45
35
|
}
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQUMsT0FBZTtJQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNuRCxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLE9BQWU7SUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELDZEQUE2RDtJQUM3RCxhQUFhO0lBQ2IsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakQsQ0FBQyJ9
|
package/dist/package.json
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
+
const { debuglog } = require('node:util');
|
|
3
|
+
const { importModule } = require('@eggjs/utils');
|
|
4
|
+
|
|
5
|
+
const debug = debuglog('@eggjs/bin/scripts/start-cluster');
|
|
6
|
+
|
|
7
|
+
async function main() {
|
|
8
|
+
debug('argv: %o', process.argv);
|
|
9
|
+
const options = JSON.parse(process.argv[2]);
|
|
10
|
+
debug('start cluster options: %o', options);
|
|
11
|
+
const { startCluster } = await importModule(options.framework);
|
|
12
|
+
await startCluster(options);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
main();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/bin",
|
|
3
|
-
"version": "7.0.0
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -14,36 +14,20 @@
|
|
|
14
14
|
},
|
|
15
15
|
"homepage": "https://github.com/eggjs/bin",
|
|
16
16
|
"author": "fengmk2 <fengmk2@gmail.com> (https://github.com/fengmk2)",
|
|
17
|
-
"scripts2": {
|
|
18
|
-
"postinstall": "node scripts/postinstall.js",
|
|
19
|
-
"lint": "eslint . --cache --ext ts",
|
|
20
|
-
"test": "npm run lint -- --fix && npm run test-local",
|
|
21
|
-
"test-local": "npm run tsc && node dist/bin/cli.js test",
|
|
22
|
-
"test-local-with-ts-node-transpile-only": "node -r ts-node/register/transpile-only src/bin/cli.ts test",
|
|
23
|
-
"test-local-with-swc": "node -r @swc-node/register src/bin/cli.ts test",
|
|
24
|
-
"test-local-with-esbuild": "node -r esbuild-register src/bin/cli.ts test",
|
|
25
|
-
"test-tsc": "npm run clean && npm run tsc && node dist/bin/cli.js && node dist/bin/cli.js test --base test/fixtures/example-ts && node dist/bin/cli.js dev --base test/fixtures/example-ts",
|
|
26
|
-
"cov": "c8 -r lcov -r text-summary -x 'test/**' npm run test-local -- --timeout 120000",
|
|
27
|
-
"ci": "npm run lint && npm run test-local && npm run test-tsc",
|
|
28
|
-
"prepublishOnly": "npm run clean && npm run tsc",
|
|
29
|
-
"tsc": "tsc",
|
|
30
|
-
"clean": "rm -rf dist"
|
|
31
|
-
},
|
|
32
17
|
"engines": {
|
|
33
18
|
"node": ">= 18.19.0"
|
|
34
19
|
},
|
|
35
20
|
"dependencies": {
|
|
36
|
-
"@artus-cli/artus-cli": "^1.0.1",
|
|
37
|
-
"@artus-cli/plugin-autocomplete": "^0.1.1",
|
|
38
|
-
"@artus-cli/plugin-version": "^1.0.2",
|
|
39
21
|
"@eggjs/utils": "^4.1.2",
|
|
40
22
|
"@oclif/core": "^4.2.0",
|
|
23
|
+
"@types/mocha": "^10.0.10",
|
|
24
|
+
"@types/supertest": "^6.0.2",
|
|
41
25
|
"c8": "^10.0.0",
|
|
42
26
|
"detect-port": "^2.0.0",
|
|
43
27
|
"egg-ts-helper": "^2.1.0",
|
|
44
28
|
"globby": "^11.1.0",
|
|
45
29
|
"jest-changed-files": "^29.4.2",
|
|
46
|
-
"mocha": "^
|
|
30
|
+
"mocha": "^11.0.1",
|
|
47
31
|
"mochawesome-with-mocha": "^7.1.3",
|
|
48
32
|
"runscript": "^2.0.0",
|
|
49
33
|
"ts-node": "^10.9.2",
|
|
@@ -64,7 +48,6 @@
|
|
|
64
48
|
"@eggjs/tsconfig": "1",
|
|
65
49
|
"@swc-node/register": "^1.6.1",
|
|
66
50
|
"@swc/core": "^1.3.35",
|
|
67
|
-
"@types/mocha": "10",
|
|
68
51
|
"@types/node": "22",
|
|
69
52
|
"assert-file": "^1.0.0",
|
|
70
53
|
"coffee": "^5.5.1",
|
|
@@ -76,7 +59,9 @@
|
|
|
76
59
|
"esbuild-register": "^3.4.2",
|
|
77
60
|
"eslint": "8",
|
|
78
61
|
"eslint-config-egg": "14",
|
|
62
|
+
"npminstall": "^7.12.0",
|
|
79
63
|
"rimraf": "6",
|
|
64
|
+
"supertest": "^7.0.0",
|
|
80
65
|
"tshy": "3",
|
|
81
66
|
"tshy-after": "1",
|
|
82
67
|
"typescript": "5"
|
|
@@ -85,14 +70,13 @@
|
|
|
85
70
|
"postinstall-skip": "node scripts/postinstall.mjs",
|
|
86
71
|
"lint": "eslint --cache src test --ext .ts",
|
|
87
72
|
"pretest": "npm run clean && npm run lint -- --fix && npm run prepublishOnly",
|
|
88
|
-
"test": "
|
|
89
|
-
"
|
|
73
|
+
"test": "node bin/run.js test",
|
|
74
|
+
"cov": "c8 --temp-directory node_modules/.c8_output -r text-summary -r json-summary -r json -r lcov -r cobertura node bin/run.js test",
|
|
90
75
|
"preci": "npm run clean && npm run lint && npm run prepublishOnly",
|
|
91
|
-
"cov": "c8 -r lcov -r text-summary -x 'test/**' npm run test-local -- --timeout 120000",
|
|
92
76
|
"ci": "npm run cov",
|
|
93
77
|
"clean": "rimraf dist",
|
|
94
78
|
"copyScripts": "rimraf dist/scripts && cpy scripts dist",
|
|
95
|
-
"prepublishOnly": "tshy && tshy-after && attw --pack &&
|
|
79
|
+
"prepublishOnly": "tshy && tshy-after && attw --pack && npm run copyScripts"
|
|
96
80
|
},
|
|
97
81
|
"type": "module",
|
|
98
82
|
"tshy": {
|
|
@@ -131,8 +115,8 @@
|
|
|
131
115
|
"commands": "./dist/esm/commands",
|
|
132
116
|
"dirname": "egg-bin",
|
|
133
117
|
"topicSeparator": " ",
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
|
|
118
|
+
"additionalHelpFlags": [
|
|
119
|
+
"-h"
|
|
120
|
+
]
|
|
137
121
|
}
|
|
138
122
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
+
const { debuglog } = require('node:util');
|
|
3
|
+
const { importModule } = require('@eggjs/utils');
|
|
4
|
+
|
|
5
|
+
const debug = debuglog('@eggjs/bin/scripts/start-cluster');
|
|
6
|
+
|
|
7
|
+
async function main() {
|
|
8
|
+
debug('argv: %o', process.argv);
|
|
9
|
+
const options = JSON.parse(process.argv[2]);
|
|
10
|
+
debug('start cluster options: %o', options);
|
|
11
|
+
const { startCluster } = await importModule(options.framework);
|
|
12
|
+
await startCluster(options);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
main();
|