@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.
Files changed (82) hide show
  1. package/README.md +5 -10
  2. package/bin/dev.js +6 -4
  3. package/bin/run.js +2 -2
  4. package/dist/commonjs/baseCommand.d.ts +49 -0
  5. package/dist/commonjs/baseCommand.js +370 -0
  6. package/dist/commonjs/commands/cov.d.ts +22 -0
  7. package/dist/commonjs/commands/cov.js +97 -0
  8. package/dist/commonjs/commands/dev.d.ts +21 -0
  9. package/dist/commonjs/commands/dev.js +95 -0
  10. package/dist/commonjs/commands/test.d.ts +23 -0
  11. package/dist/commonjs/commands/test.js +204 -0
  12. package/dist/commonjs/index.d.ts +7 -0
  13. package/dist/commonjs/index.js +30 -0
  14. package/dist/commonjs/package.json +3 -0
  15. package/dist/commonjs/types.d.ts +9 -0
  16. package/dist/commonjs/types.js +3 -0
  17. package/dist/commonjs/utils.d.ts +4 -0
  18. package/dist/commonjs/utils.js +45 -0
  19. package/dist/esm/baseCommand.d.ts +33 -6
  20. package/dist/esm/baseCommand.js +246 -40
  21. package/dist/esm/commands/cov.d.ts +17 -8
  22. package/dist/esm/commands/cov.js +83 -17
  23. package/dist/esm/commands/dev.d.ts +15 -7
  24. package/dist/esm/commands/dev.js +83 -16
  25. package/dist/esm/commands/test.d.ts +11 -5
  26. package/dist/esm/commands/test.js +89 -51
  27. package/dist/esm/index.d.ts +7 -5
  28. package/dist/esm/index.js +8 -6
  29. package/dist/esm/types.d.ts +9 -0
  30. package/dist/esm/types.js +2 -0
  31. package/dist/esm/utils.d.ts +0 -1
  32. package/dist/esm/utils.js +1 -11
  33. package/dist/package.json +1 -1
  34. package/dist/scripts/start-cluster.cjs +15 -0
  35. package/package.json +12 -28
  36. package/scripts/start-cluster.cjs +15 -0
  37. package/src/baseCommand.ts +254 -43
  38. package/src/commands/cov.ts +87 -17
  39. package/src/commands/dev.ts +84 -15
  40. package/src/commands/test.ts +92 -51
  41. package/src/index.ts +9 -5
  42. package/src/types.ts +9 -0
  43. package/src/utils.ts +0 -10
  44. package/dist/esm/bin/cli.d.ts +0 -2
  45. package/dist/esm/bin/cli.js +0 -34
  46. package/dist/esm/cmd/base.d.ts +0 -12
  47. package/dist/esm/cmd/base.js +0 -135
  48. package/dist/esm/cmd/cov.d.ts +0 -8
  49. package/dist/esm/cmd/cov.js +0 -103
  50. package/dist/esm/cmd/debug.d.ts +0 -5
  51. package/dist/esm/cmd/debug.js +0 -28
  52. package/dist/esm/cmd/dev.d.ts +0 -17
  53. package/dist/esm/cmd/dev.js +0 -118
  54. package/dist/esm/cmd/test.d.ts +0 -15
  55. package/dist/esm/cmd/test.js +0 -237
  56. package/dist/esm/commands/debug.d.ts +0 -13
  57. package/dist/esm/commands/debug.js +0 -25
  58. package/dist/esm/config/framework.d.ts +0 -4
  59. package/dist/esm/config/framework.js +0 -4
  60. package/dist/esm/config/plugin.d.ts +0 -11
  61. package/dist/esm/config/plugin.js +0 -11
  62. package/dist/esm/hooks/init/options.d.ts +0 -3
  63. package/dist/esm/hooks/init/options.js +0 -5
  64. package/dist/esm/middleware/global_options.d.ts +0 -5
  65. package/dist/esm/middleware/global_options.js +0 -182
  66. package/dist/esm/middleware/handle_error.d.ts +0 -5
  67. package/dist/esm/middleware/handle_error.js +0 -47
  68. package/dist/esm/middleware/inspect.d.ts +0 -5
  69. package/dist/esm/middleware/inspect.js +0 -69
  70. package/src/bin/cli.ts +0 -37
  71. package/src/cmd/base.ts +0 -133
  72. package/src/cmd/cov.ts +0 -89
  73. package/src/cmd/debug.ts +0 -14
  74. package/src/cmd/dev.ts +0 -102
  75. package/src/cmd/test.ts +0 -219
  76. package/src/commands/debug.ts +0 -30
  77. package/src/config/framework.ts +0 -3
  78. package/src/config/plugin.ts +0 -10
  79. package/src/hooks/init/options.ts +0 -7
  80. package/src/middleware/global_options.ts +0 -169
  81. package/src/middleware/handle_error.ts +0 -30
  82. package/src/middleware/inspect.ts +0 -54
@@ -1,25 +1,92 @@
1
- import { Args, Command, Flags } from '@oclif/core';
2
- export default class Dev extends Command {
3
- static args = {
4
- file: Args.string({ description: 'file to read' }),
5
- };
6
- static description = 'describe the command here';
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
- // flag with no value (-f, --force)
12
- force: Flags.boolean({ char: 'f' }),
13
- // flag with a value (-n, --name=VALUE)
14
- name: Flags.string({ char: 'n', description: 'name to print' }),
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
- const { args, flags } = await this.parse(Dev);
18
- const name = flags.name ?? 'world';
19
- this.log(`hello ${name} from /Users/fengmk2/git/github.com/eggjs/bin/src/commands/dev.ts`);
20
- if (args.file && flags.force) {
21
- this.log(`you input --force and --file: ${args.file}`);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Rldi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsTUFBTSxDQUFDLE9BQU8sT0FBTyxHQUFJLFNBQVEsT0FBTztJQUN0QyxNQUFNLENBQVUsSUFBSSxHQUFHO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDO0tBQ25ELENBQUM7SUFFRixNQUFNLENBQVUsV0FBVyxHQUFHLDJCQUEyQixDQUFDO0lBRTFELE1BQU0sQ0FBVSxRQUFRLEdBQUc7UUFDekIscUNBQXFDO0tBQ3RDLENBQUM7SUFFRixNQUFNLENBQVUsS0FBSyxHQUFHO1FBQ3RCLG1DQUFtQztRQUNuQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuQyx1Q0FBdUM7UUFDdkMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsQ0FBQztLQUNoRSxDQUFDO0lBRUssS0FBSyxDQUFDLEdBQUc7UUFDZCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxtRUFBbUUsQ0FBQyxDQUFDO1FBQzNGLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUMifQ==
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 BaseCommand<typeof Test> {
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<string, import("@oclif/core/interfaces").CustomOptions>;
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
- // flag with a value (-n, --name=VALUE)
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
- // if (this.parallel) {
63
- // this.ctx.env.ENABLE_MOCHA_PARALLEL = 'true';
64
- // if (this.autoAgent) {
65
- // this.ctx.env.AUTO_AGENT = 'true';
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
- // this.ctx.env.NODE_ENV = 'test';
71
- debug('run test: %s %o', mochaFile, this.args);
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
- // let reporter = this.ctx.env.TEST_REPORTER;
98
- // let reporterOptions = '';
99
- // if (!reporter && this.mochawesome) {
100
- // // use https://github.com/node-modules/mochawesome/pull/1 instead
101
- // reporter = importResolve('mochawesome-with-mocha');
102
- // reporterOptions = 'reportDir=node_modules/.mochawesome-reports';
103
- // if (this.parallel) {
104
- // // https://github.com/adamgruber/mochawesome#parallel-mode
105
- // requires.push(importResolve('mochawesome-with-mocha/register'));
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
- // // changed
111
- // if (this.changed) {
112
- // pattern = await this.getChangedTestFiles(this.base, ext);
113
- // if (!pattern.length) {
114
- // console.log('No changed test files');
115
- // return;
116
- // }
117
- // debug('changed files: %o', pattern);
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(`No test files found with ${pattern}`);
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
- // this.parallel ? '--parallel' : '',
152
- // this.parallel && this.jobs ? `--jobs=${this.jobs}` : '',
153
- // reporter ? `--reporter=${reporter}` : '',
154
- // reporterOptions ? `--reporter-options=${reporterOptions}` : '',
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUVuRCxNQUFNLENBQUMsT0FBTyxPQUFPLElBQUssU0FBUSxXQUF3QjtJQUN4RCxNQUFNLENBQVUsSUFBSSxHQUFHO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsT0FBTyxFQUFFLG1CQUFtQjtTQUM3QixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBVSxXQUFXLEdBQUcsY0FBYyxDQUFDO0lBRTdDLE1BQU0sQ0FBVSxRQUFRLEdBQUc7UUFDekIscUNBQXFDO1FBQ3JDLHdEQUF3RDtRQUN4RCw0Q0FBNEM7UUFDNUMsdURBQXVEO0tBQ3hELENBQUM7SUFFRixNQUFNLENBQVUsS0FBSyxHQUFHO1FBQ3RCLDBDQUEwQztRQUMxQyxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN4QixXQUFXLEVBQUUsZ0RBQWdEO1lBQzdELE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLENBQUUsSUFBSSxDQUFFO1lBQ2pCLE9BQU8sRUFBRSxJQUFJO1NBQ2Qs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
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFbkQsTUFBTSxDQUFDLE9BQU8sT0FBTyxJQUE0QixTQUFRLFdBQWM7SUFDckUsTUFBTSxDQUFVLElBQUksR0FBRztRQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNoQixXQUFXLEVBQUUsaUJBQWlCO1NBQy9CLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFVLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFFN0MsTUFBTSxDQUFVLFFBQVEsR0FBRztRQUN6QixxQ0FBcUM7UUFDckMsd0RBQXdEO1FBQ3hELDRDQUE0QztRQUM1Qyx1REFBdUQ7S0FDeEQsQ0FBQztJQUVGLE1BQU0sQ0FBVSxLQUFLLEdBQUc7UUFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDbEIsV0FBVyxFQUFFLHlDQUF5QztZQUN0RCxPQUFPLEVBQUUsS0FBSztZQUNkLElBQUksRUFBRSxH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
@@ -1,5 +1,7 @@
1
- export * from './cmd/dev.js';
2
- export * from './cmd/debug.js';
3
- export * from './cmd/test.js';
4
- export * from './cmd/cov.js';
5
- export * from './cmd/base.js';
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
- export * from './cmd/dev.js';
2
- export * from './cmd/debug.js';
3
- export * from './cmd/test.js';
4
- export * from './cmd/cov.js';
5
- export * from './cmd/base.js';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQyJ9
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
@@ -0,0 +1,9 @@
1
+ export interface PackageEgg {
2
+ framework?: boolean;
3
+ typescript?: boolean;
4
+ tscompiler?: string;
5
+ declarations?: boolean;
6
+ revert?: string | string[];
7
+ require?: string | string[];
8
+ import?: string | string[];
9
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxHQUF3QjtJQUMzRSxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxDQUFDLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixHQUFHLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLE9BQWU7SUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxPQUFlO0lBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCw2REFBNkQ7SUFDN0QsYUFBYTtJQUNiLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQWdCO0lBQ2hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELENBQUMifQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQUMsT0FBZTtJQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNuRCxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLE9BQWU7SUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELDZEQUE2RDtJQUM3RCxhQUFhO0lBQ2IsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakQsQ0FBQyJ9
package/dist/package.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@eggjs/bin",
3
- "version": "7.0.0-beta.4"
3
+ "version": "7.0.0"
4
4
  }
@@ -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-beta.4",
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": "^10.2.0",
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": "npm run test-local",
89
- "test-local": "cross-env NODE_DEBUG=* node bin/dev.js test",
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 && rimraf dist/commonjs && npm run copyScripts"
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
- "hooks": {
135
- "init": "./dist/esm/hooks/init/options"
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();