@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.
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 +208 -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 +103 -61
  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 +15 -31
  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 +106 -61
  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
- 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
- // 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,
@@ -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
- // try {
88
- // const eggMockRegister = importResolve('@eggjs/mock/register', { paths: [ this.base ] });
89
- // requires.push(eggMockRegister);
90
- // debug('auto register @eggjs/mock/register: %o', eggMockRegister);
91
- // } catch (err) {
92
- // // ignore @eggjs/mock not exists
93
- // debug('auto register @eggjs/mock fail, can not require @eggjs/mock on %o, error: %s',
94
- // this.base, (err as Error).message);
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
- // 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
- // }
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
- // // 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
- // }
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(`No test files found with ${pattern}`);
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
- // this.parallel ? '--parallel' : '',
152
- // this.parallel && this.jobs ? `--jobs=${this.jobs}` : '',
153
- // reporter ? `--reporter=${reporter}` : '',
154
- // reporterOptions ? `--reporter-options=${reporterOptions}` : '',
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUVuRCxNQUFNLENBQUMsT0FBTyxPQUFPLElBQUssU0FBUSxXQUF3QjtJQUN4RCxNQUFNLENBQVUsSUFBSSxHQUFHO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsT0FBTyxFQUFFLG1CQUFtQjtTQUM3QixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBVSxXQUFXLEdBQUcsY0FBYyxDQUFDO0lBRTdDLE1BQU0sQ0FBVSxRQUFRLEdBQUc7UUFDekIscUNBQXFDO1FBQ3JDLHdEQUF3RDtRQUN4RCw0Q0FBNEM7UUFDNUMsdURBQXVEO0tBQ3hELENBQUM7SUFFRixNQUFNLENBQVUsS0FBSyxHQUFHO1FBQ3RCLDBDQUEwQztRQUMxQyxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN4QixXQUFXLEVBQUUsZ0RBQWdEO1lBQzdELE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLENBQUUsSUFBSSxDQUFFO1lBQ2pCLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztRQUNGLFVBQVUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3hCLFdBQVcsRUFBRSxnQ0FBZ0M7WUFDN0MsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUUsQ0FBRSxJQUFJLENBQUU7U0FDbEIsQ0FBQztRQUNGLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2xCLFdBQVcsRUFBRSx5Q0FBeUM7WUFDdEQsT0FBTyxFQUFFLEtBQUs7WUFDZCxJQUFJLEVBQUUsR0FBRztTQUNWLENBQUM7UUFDRix1Q0FBdUM7UUFDdkMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDcEIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsdUNBQXVDO1lBQ3BELE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxPQUFPO1NBQzdDLENBQUM7UUFDRixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSxtQ0FBbUM7U0FDakQsQ0FBQztLQUNILENBQUM7SUFFSyxLQUFLLENBQUMsR0FBRztRQUNkLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFdkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlFLHVCQUF1QjtRQUN2QixpREFBaUQ7UUFDakQsMEJBQTBCO1FBQzFCLHdDQUF3QztRQUN4QyxNQUFNO1FBQ04sSUFBSTtRQUNKLDZEQUE2RDtRQUM3RCx3REFBd0Q7UUFDeEQsa0NBQWtDO1FBQ2xDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9DLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUN2QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRTtZQUN4QyxRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxPQUFPLENBQUMsUUFBUTtnQkFDbkIsdUVBQXVFO2dCQUN2RSwrQkFBK0I7YUFDaEM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsS0FBSyxDQUFDLGVBQWU7UUFDN0IsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDN0Isa0JBQWtCO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdDLFFBQVE7UUFDUiw2RkFBNkY7UUFDN0Ysb0NBQW9DO1FBQ3BDLHNFQUFzRTtRQUN0RSxrQkFBa0I7UUFDbEIscUNBQXFDO1FBQ3JDLDBGQUEwRjtRQUMxRiwwQ0FBMEM7UUFDMUMsSUFBSTtRQUVKLDRCQUE0QjtRQUM1Qiw2Q0FBNkM7UUFDN0MsNEJBQTRCO1FBQzVCLHVDQUF1QztRQUN2QyxzRUFBc0U7UUFDdEUsd0RBQXdEO1FBQ3hELHFFQUFxRTtRQUNyRSx5QkFBeUI7UUFDekIsaUVBQWlFO1FBQ2pFLHVFQUF1RTtRQUN2RSxNQUFNO1FBQ04sSUFBSTtRQUVKLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzNDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEQsYUFBYTtRQUNiLHNCQUFzQjtRQUN0Qiw4REFBOEQ7UUFDOUQsMkJBQTJCO1FBQzNCLDRDQUE0QztRQUM1QyxjQUFjO1FBQ2QsTUFBTTtRQUNOLHlDQUF5QztRQUN6QyxJQUFJO1FBRUosSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixPQUFPLEdBQUcsQ0FBRSxrQkFBa0IsR0FBRyxFQUFFLENBQUUsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBRSxDQUFDLENBQUM7UUFFckUsaURBQWlEO1FBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUViLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELE9BQU87UUFDVCxDQUFDO1FBRUQsNkNBQTZDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxlQUFlLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNCLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVyRCxPQUFPO1lBQ0wsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9CLGFBQWE7WUFDYixRQUFRO1lBQ1IsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNwRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYztZQUM3RCxxQ0FBcUM7WUFDckMsMkRBQTJEO1lBQzNELDRDQUE0QztZQUM1QyxrRUFBa0U7WUFDbEUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxHQUFHLEtBQUs7U0FDVCxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUMifQ==
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUVuRCxNQUFNLENBQUMsT0FBTyxPQUFPLElBQTRCLFNBQVEsV0FBYztJQUNyRSxNQUFNLENBQVUsSUFBSSxHQUFHO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxpQkFBaUI7U0FDL0IsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQVUsV0FBVyxHQUFHLGNBQWMsQ0FBQztJQUU3QyxNQUFNLENBQVUsUUFBUSxHQUFHO1FBQ3pCLHFDQUFxQztRQUNyQyx3REFBd0Q7UUFDeEQsNENBQTRDO1FBQzVDLHVEQUF1RDtLQUN4RCxDQUFDO0lBRUYsTUFBTSxDQUFVLEtBQUssR0FBRztRQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNsQixXQUFXLEVBQUUseUNBQXlDO1lBQ3RELE9BQU8sRUFBRSxL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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.1"
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.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
- "@artus-cli/artus-cli": "^1.0.1",
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": "^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",
@@ -51,7 +35,7 @@
51
35
  "utility": "^2.4.0"
52
36
  },
53
37
  "peerDependencies": {
54
- "@eggjs/mock": "beta"
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": "beta",
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": "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
  }