@eggjs/bin 7.0.0-beta.4 → 7.0.1
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 +208 -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 +103 -61
- 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 +15 -31
- 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 +106 -61
- 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
|
-
import { importResolve } from '@eggjs/utils';
|
|
7
|
+
import { importResolve, detectType, EggType } 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,
|
|
@@ -84,38 +105,42 @@ export default class Test extends BaseCommand {
|
|
|
84
105
|
const { args, flags } = this;
|
|
85
106
|
// collect require
|
|
86
107
|
const requires = await this.formatRequires();
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
108
|
+
const eggType = await detectType(flags.base);
|
|
109
|
+
debug('eggType: %s', eggType);
|
|
110
|
+
if (eggType === EggType.application) {
|
|
111
|
+
try {
|
|
112
|
+
const eggMockRegister = importResolve('@eggjs/mock/register', { paths: [flags.base] });
|
|
113
|
+
requires.push(eggMockRegister);
|
|
114
|
+
debug('auto register @eggjs/mock/register: %o', eggMockRegister);
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
// ignore @eggjs/mock not exists
|
|
118
|
+
debug('auto register @eggjs/mock fail, can not require @eggjs/mock on %o, error: %s', flags.base, err.message);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
96
121
|
// handle mochawesome enable
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
122
|
+
let reporter = this.env.TEST_REPORTER;
|
|
123
|
+
let reporterOptions = '';
|
|
124
|
+
if (!reporter && flags.mochawesome) {
|
|
125
|
+
// use https://github.com/node-modules/mochawesome/pull/1 instead
|
|
126
|
+
reporter = importResolve('mochawesome-with-mocha');
|
|
127
|
+
reporterOptions = 'reportDir=node_modules/.mochawesome-reports';
|
|
128
|
+
if (flags.parallel) {
|
|
129
|
+
// https://github.com/adamgruber/mochawesome#parallel-mode
|
|
130
|
+
requires.push(path.join(reporter, '../register.js'));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
108
133
|
const ext = flags.typescript ? 'ts' : 'js';
|
|
109
134
|
let pattern = args.file ? args.file.split(',') : [];
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
135
|
+
// changed
|
|
136
|
+
if (flags.changed) {
|
|
137
|
+
pattern = await this.getChangedTestFiles(flags.base, ext);
|
|
138
|
+
if (!pattern.length) {
|
|
139
|
+
console.log('No changed test files');
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
debug('changed files: %o', pattern);
|
|
143
|
+
}
|
|
119
144
|
if (!pattern.length && process.env.TESTS) {
|
|
120
145
|
pattern = process.env.TESTS.split(',');
|
|
121
146
|
}
|
|
@@ -128,7 +153,7 @@ export default class Test extends BaseCommand {
|
|
|
128
153
|
const files = globby.sync(pattern, { cwd: flags.base });
|
|
129
154
|
files.sort();
|
|
130
155
|
if (files.length === 0) {
|
|
131
|
-
console.log(
|
|
156
|
+
console.log('No test files found with pattern %o', pattern);
|
|
132
157
|
return;
|
|
133
158
|
}
|
|
134
159
|
// auto add setup file as the first test file
|
|
@@ -142,19 +167,36 @@ export default class Test extends BaseCommand {
|
|
|
142
167
|
}
|
|
143
168
|
const grep = flags.grep ? flags.grep.split(',') : [];
|
|
144
169
|
return [
|
|
145
|
-
flags.dryRun ? '--dry-run' : '',
|
|
146
170
|
// force exit
|
|
147
171
|
'--exit',
|
|
148
172
|
flags.bail ? '--bail' : '',
|
|
149
173
|
grep.map(pattern => `--grep='${pattern}'`).join(' '),
|
|
150
174
|
flags.timeout ? `--timeout=${flags.timeout}` : '--no-timeout',
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
175
|
+
flags.parallel ? '--parallel' : '',
|
|
176
|
+
flags.parallel && flags.jobs ? `--jobs=${flags.jobs}` : '',
|
|
177
|
+
reporter ? `--reporter=${reporter}` : '',
|
|
178
|
+
reporterOptions ? `--reporter-options=${reporterOptions}` : '',
|
|
155
179
|
...requires.map(r => `--require=${r}`),
|
|
156
180
|
...files,
|
|
181
|
+
flags['dry-run'] ? '--dry-run' : '',
|
|
157
182
|
].filter(a => a.trim());
|
|
158
183
|
}
|
|
184
|
+
async getChangedTestFiles(dir, ext) {
|
|
185
|
+
const res = await getChangedFilesForRoots([path.join(dir, 'test')], {});
|
|
186
|
+
const changedFiles = res.changedFiles;
|
|
187
|
+
const files = [];
|
|
188
|
+
for (let cf of changedFiles) {
|
|
189
|
+
// only find test/**/*.test.(js|ts)
|
|
190
|
+
if (cf.endsWith(`.test.${ext}`)) {
|
|
191
|
+
// Patterns MUST use forward slashes (not backslashes)
|
|
192
|
+
// This should be converted on Windows
|
|
193
|
+
if (process.platform === 'win32') {
|
|
194
|
+
cf = cf.replace(/\\/g, '/');
|
|
195
|
+
}
|
|
196
|
+
files.push(cf);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return files;
|
|
200
|
+
}
|
|
159
201
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUVuRCxNQUFNLENBQUMsT0FBTyxPQUFPLElBQTRCLFNBQVEsV0FBYztJQUNyRSxNQUFNLENBQVUsSUFBSSxHQUFHO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxpQkFBaUI7U0FDL0IsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQVUsV0FBVyxHQUFHLGNBQWMsQ0FBQztJQUU3QyxNQUFNLENBQVUsUUFBUSxHQUFHO1FBQ3pCLHFDQUFxQztRQUNyQyx3REFBd0Q7UUFDeEQsNENBQTRDO1FBQzVDLHVEQUF1RDtLQUN4RCxDQUFDO0lBRUYsTUFBTSxDQUFVLEtBQUssR0FBRztRQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNsQixXQUFXLEVBQUUseUNBQXlDO1lBQ3RELE9BQU8sRUFBRSxL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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.
|
|
3
|
+
"version": "7.0.1",
|
|
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
|
-
"@
|
|
37
|
-
"@artus-cli/plugin-autocomplete": "^0.1.1",
|
|
38
|
-
"@artus-cli/plugin-version": "^1.0.2",
|
|
39
|
-
"@eggjs/utils": "^4.1.2",
|
|
21
|
+
"@eggjs/utils": "^4.2.0",
|
|
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",
|
|
@@ -51,7 +35,7 @@
|
|
|
51
35
|
"utility": "^2.4.0"
|
|
52
36
|
},
|
|
53
37
|
"peerDependencies": {
|
|
54
|
-
"@eggjs/mock": "
|
|
38
|
+
"@eggjs/mock": "6"
|
|
55
39
|
},
|
|
56
40
|
"peerDependenciesMeta": {
|
|
57
41
|
"@eggjs/mock": {
|
|
@@ -60,11 +44,10 @@
|
|
|
60
44
|
},
|
|
61
45
|
"devDependencies": {
|
|
62
46
|
"@arethetypeswrong/cli": "^0.17.1",
|
|
63
|
-
"@eggjs/mock": "
|
|
47
|
+
"@eggjs/mock": "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
|
}
|