@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,12 +1,11 @@
1
1
  import { debuglog } from 'node:util';
2
- // import path from 'node:path';
3
2
  import { pathToFileURL } from 'node:url';
3
+ import path from 'node:path';
4
4
  import { fork } from 'node:child_process';
5
5
  import { Command, Flags } from '@oclif/core';
6
6
  import { importResolve } from '@eggjs/utils';
7
- import { addNodeOptionsToEnv, getSourceDirname,
8
- // readPackageJSON, hasTsConfig, getSourceFilename,
9
- } from './utils.js';
7
+ import { runScript } from 'runscript';
8
+ import { getSourceDirname, readPackageJSON, hasTsConfig, } from './utils.js';
10
9
  const debug = debuglog('@eggjs/bin/baseCommand');
11
10
  // only hook once and only when ever start any child.
12
11
  const children = new Set();
@@ -33,7 +32,7 @@ function graceful(proc) {
33
32
  });
34
33
  }
35
34
  }
36
- class ForkError extends Error {
35
+ export class ForkError extends Error {
37
36
  code;
38
37
  constructor(message, code) {
39
38
  super(message);
@@ -51,7 +50,7 @@ export class BaseCommand extends Command {
51
50
  // options: ['debug', 'warn', 'error', 'info', 'trace'] as const,
52
51
  // summary: 'Specify level for logging.',
53
52
  // })(),
54
- dryRun: Flags.boolean({
53
+ 'dry-run': Flags.boolean({
55
54
  default: false,
56
55
  helpGroup: 'GLOBAL',
57
56
  summary: 'whether show full command script only',
@@ -63,18 +62,63 @@ export class BaseCommand extends Command {
63
62
  char: 'r',
64
63
  multiple: true,
65
64
  }),
65
+ import: Flags.string({
66
+ helpGroup: 'GLOBAL',
67
+ summary: 'import the given module, only work on ESM',
68
+ multiple: true,
69
+ }),
66
70
  base: Flags.string({
67
71
  helpGroup: 'GLOBAL',
68
- summary: 'directory of application, default to `process.cwd()`',
72
+ summary: 'directory of application',
69
73
  aliases: ['baseDir'],
70
74
  default: process.cwd(),
71
75
  }),
76
+ tscompiler: Flags.string({
77
+ helpGroup: 'GLOBAL',
78
+ summary: 'TypeScript compiler, like ts-node/register',
79
+ aliases: ['tsc'],
80
+ }),
81
+ // flag with no value (--typescript)
82
+ typescript: Flags.boolean({
83
+ helpGroup: 'GLOBAL',
84
+ description: '[default: true] use TypeScript to run the test',
85
+ allowNo: true,
86
+ }),
87
+ ts: Flags.string({
88
+ helpGroup: 'GLOBAL',
89
+ description: 'shortcut for --typescript, e.g.: --ts=false',
90
+ options: ['true', 'false'],
91
+ }),
92
+ javascript: Flags.boolean({
93
+ helpGroup: 'GLOBAL',
94
+ description: 'use JavaScript to run the test',
95
+ aliases: ['js'],
96
+ }),
97
+ declarations: Flags.boolean({
98
+ helpGroup: 'GLOBAL',
99
+ description: 'whether create typings, will add `--require egg-ts-helper/register`',
100
+ aliases: ['dts'],
101
+ }),
102
+ // https://nodejs.org/dist/latest-v18.x/docs/api/cli.html#--inspect-brkhostport
103
+ inspect: Flags.boolean({
104
+ helpGroup: 'GLOBAL',
105
+ description: 'Activate inspector',
106
+ }),
107
+ 'inspect-brk': Flags.boolean({
108
+ helpGroup: 'GLOBAL',
109
+ description: 'Activate inspector and break at start of user script',
110
+ }),
72
111
  };
73
112
  flags;
74
113
  args;
75
- env = process.env;
114
+ env = { ...process.env };
115
+ pkg;
116
+ isESM;
117
+ pkgEgg;
118
+ globalExecArgv = [];
76
119
  async init() {
77
120
  await super.init();
121
+ debug('[init] raw args: %o, NODE_ENV: %o', this.argv, this.env.NODE_ENV);
78
122
  const { args, flags } = await this.parse({
79
123
  flags: this.ctor.flags,
80
124
  baseFlags: super.ctor.baseFlags,
@@ -84,18 +128,151 @@ export class BaseCommand extends Command {
84
128
  });
85
129
  this.flags = flags;
86
130
  this.args = args;
87
- // use ts-node/esm loader on esm
88
- let esmLoader = importResolve('ts-node/esm', {
89
- paths: [getSourceDirname()],
90
- });
91
- // ES Module loading with absolute path fails on windows
92
- // https://github.com/nodejs/node/issues/31710#issuecomment-583916239
93
- // https://nodejs.org/api/url.html#url_url_pathtofileurl_path
94
- // Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'd:'
95
- esmLoader = pathToFileURL(esmLoader).href;
96
- // wait for https://github.com/nodejs/node/issues/40940
97
- addNodeOptionsToEnv('--no-warnings', this.env);
98
- addNodeOptionsToEnv(`--loader ${esmLoader}`, this.env);
131
+ await this.#afterInit();
132
+ }
133
+ async #afterInit() {
134
+ const { args, flags } = this;
135
+ debug('before: args: %o, flags: %o', args, flags);
136
+ if (!path.isAbsolute(flags.base)) {
137
+ flags.base = path.join(process.cwd(), flags.base);
138
+ }
139
+ const pkg = await readPackageJSON(flags.base);
140
+ this.pkg = pkg;
141
+ this.pkgEgg = pkg.egg ?? {};
142
+ flags.tscompiler = flags.tscompiler ?? this.env.TS_COMPILER ?? this.pkgEgg.tscompiler;
143
+ let typescript = flags.typescript;
144
+ // keep compatible with old ts flag: `--ts=true` or `--ts=false`
145
+ if (flags.ts === 'true') {
146
+ typescript = true;
147
+ }
148
+ else if (flags.ts === 'false') {
149
+ typescript = false;
150
+ }
151
+ if (typescript === undefined) {
152
+ // try to ready EGG_TYPESCRIPT env first, only accept 'true' or 'false' string
153
+ if (this.env.EGG_TYPESCRIPT === 'false') {
154
+ typescript = false;
155
+ debug('detect typescript=%o from EGG_TYPESCRIPT=%o', false, this.env.EGG_TYPESCRIPT);
156
+ }
157
+ else if (this.env.EGG_TYPESCRIPT === 'true') {
158
+ typescript = true;
159
+ debug('detect typescript=%o from EGG_TYPESCRIPT=%o', true, this.env.EGG_TYPESCRIPT);
160
+ }
161
+ else if (typeof this.pkgEgg.typescript === 'boolean') {
162
+ // read `egg.typescript` from package.json if not pass argv
163
+ typescript = this.pkgEgg.typescript;
164
+ debug('detect typescript=%o from pkg.egg.typescript=%o', typescript, this.pkgEgg.typescript);
165
+ }
166
+ else if (pkg.dependencies?.typescript) {
167
+ // auto detect pkg.dependencies.typescript or pkg.devDependencies.typescript
168
+ typescript = true;
169
+ debug('detect typescript=%o from pkg.dependencies.typescript=%o', true, pkg.dependencies.typescript);
170
+ }
171
+ else if (pkg.devDependencies?.typescript) {
172
+ typescript = true;
173
+ debug('detect typescript=%o from pkg.devDependencies.typescript=%o', true, pkg.devDependencies.typescript);
174
+ }
175
+ else if (await hasTsConfig(flags.base)) {
176
+ // tsconfig.json exists
177
+ typescript = true;
178
+ debug('detect typescript=%o cause tsconfig.json exists', true);
179
+ }
180
+ else if (flags.tscompiler) {
181
+ typescript = true;
182
+ debug('detect typescript=%o from --tscompiler=%o', true, flags.tscompiler);
183
+ }
184
+ }
185
+ flags.typescript = typescript;
186
+ this.isESM = pkg.type === 'module';
187
+ if (typescript) {
188
+ const findPaths = [getSourceDirname()];
189
+ if (flags.tscompiler) {
190
+ // try app baseDir first on custom tscompiler
191
+ // then try to find tscompiler in @eggjs/bin/node_modules
192
+ findPaths.unshift(flags.base);
193
+ }
194
+ flags.tscompiler = flags.tscompiler ?? 'ts-node/register';
195
+ const tsNodeRegister = importResolve(flags.tscompiler, {
196
+ paths: findPaths,
197
+ });
198
+ flags.tscompiler = tsNodeRegister;
199
+ // should require tsNodeRegister on current process, let it can require *.ts files
200
+ // e.g.: dev command will execute egg loader to find configs and plugins
201
+ // await importModule(tsNodeRegister);
202
+ // let child process auto require ts-node too
203
+ this.addNodeOptions(this.formatImportModule(tsNodeRegister));
204
+ // tell egg loader to load ts file
205
+ // see https://github.com/eggjs/egg-core/blob/master/lib/loader/egg_loader.js#L443
206
+ this.env.EGG_TYPESCRIPT = 'true';
207
+ // set current process.env.EGG_TYPESCRIPT too
208
+ process.env.EGG_TYPESCRIPT = 'true';
209
+ // load files from tsconfig on startup
210
+ this.env.TS_NODE_FILES = process.env.TS_NODE_FILES ?? 'true';
211
+ // keep same logic with egg-core, test cmd load files need it
212
+ // see https://github.com/eggjs/egg-core/blob/master/lib/loader/egg_loader.js#L49
213
+ // addNodeOptionsToEnv(`--require ${importResolve('tsconfig-paths/register', {
214
+ // paths: [ getSourceDirname() ],
215
+ // })}`, ctx.env);
216
+ }
217
+ if (this.isESM) {
218
+ // use ts-node/esm loader on esm
219
+ let esmLoader = importResolve('ts-node/esm', {
220
+ paths: [getSourceDirname()],
221
+ });
222
+ // ES Module loading with absolute path fails on windows
223
+ // https://github.com/nodejs/node/issues/31710#issuecomment-583916239
224
+ // https://nodejs.org/api/url.html#url_url_pathtofileurl_path
225
+ // Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'd:'
226
+ esmLoader = pathToFileURL(esmLoader).href;
227
+ // wait for https://github.com/nodejs/node/issues/40940
228
+ this.addNodeOptions('--no-warnings');
229
+ this.addNodeOptions(`--loader ${esmLoader}`);
230
+ }
231
+ if (flags.declarations === undefined) {
232
+ if (typeof this.pkgEgg.declarations === 'boolean') {
233
+ // read `egg.declarations` from package.json if not pass argv
234
+ flags.declarations = this.pkgEgg.declarations;
235
+ debug('detect declarations from pkg.egg.declarations=%o', this.pkgEgg.declarations);
236
+ }
237
+ }
238
+ if (flags.declarations) {
239
+ const etsBin = importResolve('egg-ts-helper/dist/bin', {
240
+ paths: [
241
+ flags.base,
242
+ getSourceDirname(),
243
+ ],
244
+ });
245
+ debug('run ets first: %o', etsBin);
246
+ await runScript(`node ${etsBin}`);
247
+ }
248
+ if (this.pkgEgg.revert) {
249
+ const reverts = Array.isArray(this.pkgEgg.revert) ? this.pkgEgg.revert : [this.pkgEgg.revert];
250
+ for (const revert of reverts) {
251
+ this.globalExecArgv.push(`--security-revert=${revert}`);
252
+ }
253
+ }
254
+ let hasInspectOption = false;
255
+ if (flags.inspect) {
256
+ this.addNodeOptions('--inspect');
257
+ hasInspectOption = true;
258
+ }
259
+ if (flags['inspect-brk']) {
260
+ this.addNodeOptions('--inspect-brk');
261
+ hasInspectOption = true;
262
+ }
263
+ if (hasInspectOption) {
264
+ Reflect.set(flags, 'timeout', 0);
265
+ debug('set timeout = 0 when inspect enable');
266
+ }
267
+ else if (this.env.JB_DEBUG_FILE) {
268
+ // others like WebStorm 2019 will pass NODE_OPTIONS, and @eggjs/bin itself will be debug, so could detect `process.env.JB_DEBUG_FILE`.
269
+ Reflect.set(flags, 'timeout', 0);
270
+ debug('set timeout = false when process.env.JB_DEBUG_FILE=%o', this.env.JB_DEBUG_FILE);
271
+ }
272
+ debug('baseDir: %o, isESM: %o', flags.base, this.isESM);
273
+ debug('set NODE_OPTIONS: %o', this.env.NODE_OPTIONS);
274
+ debug('after: args: %o, flags: %o', args, flags);
275
+ debug('enter real command: %o', this.id);
99
276
  }
100
277
  async catch(err) {
101
278
  // add any custom logic to handle errors from the command
@@ -107,36 +284,65 @@ export class BaseCommand extends Command {
107
284
  return super.finally(_);
108
285
  }
109
286
  async formatRequires() {
110
- const requires = this.args.require ?? [];
111
- // const eggRequire = this.args.pkgEgg.require;
112
- // if (Array.isArray(eggRequire)) {
113
- // for (const r of eggRequire) {
114
- // requires.push(r);
115
- // }
116
- // } else if (typeof eggRequire === 'string' && eggRequire) {
117
- // requires.push(eggRequire);
118
- // }
119
- return requires;
287
+ const requires = this.flags.require ?? [];
288
+ const imports = this.flags.import ?? [];
289
+ let eggRequires = this.pkgEgg.require ?? [];
290
+ if (typeof eggRequires === 'string') {
291
+ eggRequires = [eggRequires];
292
+ }
293
+ let eggImports = this.pkgEgg.import ?? [];
294
+ if (typeof eggImports === 'string') {
295
+ eggImports = [eggImports];
296
+ }
297
+ return [
298
+ ...requires,
299
+ ...imports,
300
+ ...eggRequires,
301
+ ...eggImports,
302
+ ];
120
303
  }
121
- async forkNode(modulePath, forkArgs, options = {}) {
122
- const { args } = this;
123
- if (args.dryRun) {
124
- console.log('dry run: $ %o', `${process.execPath} ${modulePath} ${args.join(' ')}`);
125
- return;
304
+ formatImportModule(modulePath) {
305
+ if (this.isESM) {
306
+ return `--import ${pathToFileURL(modulePath).href}`;
307
+ }
308
+ return `--require ${modulePath}`;
309
+ }
310
+ addNodeOptions(options) {
311
+ if (this.env.NODE_OPTIONS) {
312
+ if (!this.env.NODE_OPTIONS.includes(options)) {
313
+ this.env.NODE_OPTIONS = `${this.env.NODE_OPTIONS} ${options}`;
314
+ }
315
+ }
316
+ else {
317
+ this.env.NODE_OPTIONS = options;
126
318
  }
319
+ }
320
+ async forkNode(modulePath, forkArgs, options = {}) {
321
+ const env = {
322
+ ...this.env,
323
+ ...options.env,
324
+ };
127
325
  const forkExecArgv = [
128
- // ...this.ctx.args.execArgv || [],
326
+ ...this.globalExecArgv,
129
327
  ...options.execArgv || [],
130
328
  ];
329
+ const NODE_OPTIONS = env.NODE_OPTIONS ? `NODE_OPTIONS='${env.NODE_OPTIONS}' ` : '';
330
+ const forkExecArgvString = forkExecArgv.length ? ' ' + forkExecArgv.join(' ') + ' ' : ' ';
331
+ const forkArgsString = forkArgs.map(a => `'${a}'`).join(' ');
332
+ const fullCommand = `${NODE_OPTIONS}${process.execPath}${forkExecArgvString}${modulePath} ${forkArgsString}`;
333
+ if (options.dryRun) {
334
+ console.log('dry run: $ %s', fullCommand);
335
+ return;
336
+ }
131
337
  options = {
132
338
  stdio: 'inherit',
133
- env: this.env,
134
- cwd: args.base,
339
+ env,
340
+ cwd: this.flags.base,
135
341
  ...options,
136
342
  execArgv: forkExecArgv,
137
343
  };
138
344
  const proc = fork(modulePath, forkArgs, options);
139
- debug('Run fork pid: %o\n\n$ %s%s %s %s\n\n', proc.pid, options.env?.NODE_OPTIONS ? `NODE_OPTIONS='${options.env.NODE_OPTIONS}' ` : '', process.execPath, modulePath, forkArgs.map(a => `'${a}'`).join(' '));
345
+ debug('Run fork pid: %o\n\n$ %s\n\n', proc.pid, fullCommand);
140
346
  graceful(proc);
141
347
  return new Promise((resolve, reject) => {
142
348
  proc.once('exit', code => {
@@ -153,4 +359,4 @@ export class BaseCommand extends Command {
153
359
  });
154
360
  }
155
361
  }
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZUNvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmFzZUNvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUE2QixNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFjLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixnQkFBZ0I7QUFDaEIsbURBQW1EO0VBQ3BELE1BQU0sWUFBWSxDQUFDO0FBRXBCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRWpELHFEQUFxRDtBQUNyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztBQUN6QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDcEIsU0FBUyxRQUFRLENBQUMsSUFBa0I7SUFDbEMsaUJBQWlCO0lBQ2pCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbkIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxNQUFzQixDQUFDO1FBQzNCLENBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUN2QixNQUFNLEdBQUcsS0FBdUIsQ0FBQztnQkFDakMsT0FBTyxDQUFDLElBQUks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
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZUNvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmFzZUNvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsSUFBSSxFQUE2QixNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFjLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFBRSxXQUFXLEdBQzdCLE1BQU0sWUFBWSxDQUFDO0FBR3BCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRWpELHFEQUFxRDtBQUNyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztBQUN6QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDcEIsU0FBUyxRQUFRLENBQUMsSUFBa0I7SUFDbEMsaUJBQWlCO0lBQ2pCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbkIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxNQUFzQixDQUFDO1FBQzNCLENBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxF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
@@ -1,13 +1,22 @@
1
- import { Command } from '@oclif/core';
2
- export default class Cov extends Command {
3
- static args: {
4
- file: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
5
- };
1
+ import Test from './test.js';
2
+ import { ForkNodeOptions } from '../baseCommand.js';
3
+ export default class Cov<T extends typeof Cov> extends Test<T> {
6
4
  static description: string;
7
5
  static examples: string[];
8
6
  static flags: {
9
- force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
- name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ prerequire: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ exclude: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ c8: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ bail: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'no-timeout': import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ grep: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ changed: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ mochawesome: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ parallel: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ jobs: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
18
+ 'auto-agent': import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
19
  };
12
- run(): Promise<void>;
20
+ protected get defaultExcludes(): string[];
21
+ protected forkNode(modulePath: string, forkArgs: string[], options?: ForkNodeOptions): Promise<void>;
13
22
  }
@@ -1,25 +1,91 @@
1
- import { Args, Command, Flags } from '@oclif/core';
2
- export default class Cov extends Command {
3
- static args = {
4
- file: Args.string({ description: 'file to read' }),
5
- };
6
- static description = 'describe the command here';
1
+ import path from 'node:path';
2
+ import fs from 'node:fs/promises';
3
+ import { Flags } from '@oclif/core';
4
+ import Test from './test.js';
5
+ import { importResolve } from '@eggjs/utils';
6
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
7
+ // @ts-ignore
8
+ export default class Cov extends Test {
9
+ static description = 'Run the test with coverage';
7
10
  static examples = [
8
11
  '<%= config.bin %> <%= command.id %>',
12
+ '<%= config.bin %> <%= command.id %> test/index.test.ts',
9
13
  ];
10
14
  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' }),
15
+ ...Test.flags,
16
+ // will use on egg-mock https://github.com/eggjs/egg-mock/blob/84a64bd19d0569ec94664c898fb1b28367b95d60/index.js#L7
17
+ prerequire: Flags.boolean({
18
+ description: 'prerequire files for coverage instrument',
19
+ }),
20
+ exclude: Flags.string({
21
+ description: 'coverage ignore, one or more files patterns`',
22
+ multiple: true,
23
+ char: 'x',
24
+ }),
25
+ c8: Flags.string({
26
+ description: 'c8 instruments passthrough`',
27
+ default: '--temp-directory node_modules/.c8_output -r text-summary -r json-summary -r json -r lcov -r cobertura',
28
+ }),
15
29
  };
16
- async run() {
17
- const { args, flags } = await this.parse(Cov);
18
- const name = flags.name ?? 'world';
19
- this.log(`hello ${name} from /Users/fengmk2/git/github.com/eggjs/bin/src/commands/cov.ts`);
20
- if (args.file && flags.force) {
21
- this.log(`you input --force and --file: ${args.file}`);
30
+ get defaultExcludes() {
31
+ return [
32
+ 'example/',
33
+ 'examples/',
34
+ 'mocks**/',
35
+ 'docs/',
36
+ // https://github.com/JaKXz/test-exclude/blob/620a7be412d4fc2070d50f0f63e3228314066fc9/index.js#L73
37
+ 'test/**',
38
+ 'test{,-*}.js',
39
+ '**/*.test.js',
40
+ '**/__tests__/**',
41
+ '**/node_modules/**',
42
+ 'typings',
43
+ '**/*.d.ts',
44
+ ];
45
+ }
46
+ async forkNode(modulePath, forkArgs, options = {}) {
47
+ const { flags } = this;
48
+ if (flags.prerequire) {
49
+ this.env.EGG_BIN_PREREQUIRE = 'true';
50
+ }
51
+ // add c8 args
52
+ // https://github.com/eggjs/egg/issues/3930
53
+ const c8Args = [
54
+ // '--show-process-tree',
55
+ ...flags.c8.split(' ').filter(a => a.trim()),
56
+ ];
57
+ if (flags.typescript) {
58
+ this.env.SPAWN_WRAP_SHIM_ROOT = path.join(flags.base, 'node_modules');
59
+ c8Args.push('--extension');
60
+ c8Args.push('.ts');
61
+ }
62
+ const excludes = new Set([
63
+ ...process.env.COV_EXCLUDES?.split(',') ?? [],
64
+ ...this.defaultExcludes,
65
+ ...Array.from(flags.exclude ?? []),
66
+ ]);
67
+ for (const exclude of excludes) {
68
+ c8Args.push('-x');
69
+ c8Args.push(exclude);
22
70
  }
71
+ const c8File = importResolve('c8/bin/c8.js');
72
+ const outputDir = path.join(flags.base, 'node_modules/.c8_output');
73
+ await fs.rm(outputDir, { force: true, recursive: true });
74
+ const coverageDir = path.join(flags.base, 'coverage');
75
+ await fs.rm(coverageDir, { force: true, recursive: true });
76
+ const execArgv = [
77
+ ...this.globalExecArgv,
78
+ ...options.execArgv || [],
79
+ ];
80
+ this.globalExecArgv = [];
81
+ // $ c8 node mocha
82
+ await super.forkNode(c8File, [
83
+ ...c8Args,
84
+ process.execPath,
85
+ ...execArgv,
86
+ modulePath,
87
+ ...forkArgs,
88
+ ]);
23
89
  }
24
90
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Nvdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsTUFBTSxDQUFDLE9BQU8sT0FBTyxHQUFJLFNBQVEsT0FBTztJQUN0QyxNQUFNLENBQVUsSUFBSSxHQUFHO1FBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDO0tBQ25ELENBQUM7SUFFRixNQUFNLENBQVUsV0FBVyxHQUFHLDJCQUEyQixDQUFDO0lBRTFELE1BQU0sQ0FBVSxRQUFRLEdBQUc7UUFDekIscUNBQXFDO0tBQ3RDLENBQUM7SUFFRixNQUFNLENBQVUsS0FBSyxHQUFHO1FBQ3RCLG1DQUFtQztRQUNuQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuQyx1Q0FBdUM7UUFDdkMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsQ0FBQztLQUNoRSxDQUFDO0lBRUssS0FBSyxDQUFDLEdBQUc7UUFDZCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxtRUFBbUUsQ0FBQyxDQUFDO1FBQzNGLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUMifQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Nvdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc3Qyw2REFBNkQ7QUFDN0QsYUFBYTtBQUNiLE1BQU0sQ0FBQyxPQUFPLE9BQU8sR0FBMEIsU0FBUSxJQUFPO0lBQzVELE1BQU0sQ0FBVSxXQUFXLEdBQUcsNEJBQTRCLENBQUM7SUFFM0QsTUFBTSxDQUFVLFFBQVEsR0FBRztRQUN6QixxQ0FBcUM7UUFDckMsd0RBQXdEO0tBQ3pELENBQUM7SUFFRixNQUFNLENBQVUsS0FBSyxHQUFHO1FBQ3RCLEdBQUcsSUFBSSxDQUFDLEtBQUs7UUFDYixtSEFBbUg7UUFDbkgsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDeEIsV0FBVyxFQUFFLDBDQUEwQztTQUN4RCxDQUFDO1FBQ0YsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDcEIsV0FBVyxFQUFFLDhDQUE4QztZQUMzRCxRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxHQUFHO1NBQ1YsQ0FBQztRQUNGLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2YsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxPQUFPLEVBQUUsdUdBQXVHO1NBQ2pILENBQUM7S0FDSCxDQUFDO0lBRUYsSUFBYyxlQUFlO1FBQzNCLE9BQU87WUFDTCxVQUFVO1lBQ1YsV0FBVztZQUNYLFVBQVU7WUFDVixPQUFPO1lBQ1AsbUdBQW1HO1lBQ25HLFNBQVM7WUFDVCxjQUFjO1lBQ2Qs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
@@ -1,13 +1,21 @@
1
- import { Command } from '@oclif/core';
2
- export default class Dev extends Command {
3
- static args: {
4
- file: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
5
- };
1
+ import { BaseCommand } from '../baseCommand.js';
2
+ export default class Dev<T extends typeof Dev> extends BaseCommand<T> {
6
3
  static description: string;
7
4
  static examples: string[];
8
5
  static flags: {
9
- force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
- name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
+ port: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ workers: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
8
+ framework: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ sticky: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
10
  };
12
11
  run(): Promise<void>;
12
+ protected formatEggStartOptions(): Promise<{
13
+ baseDir: string;
14
+ workers: number;
15
+ port: number;
16
+ framework: string;
17
+ typescript: boolean;
18
+ tscompiler: string | undefined;
19
+ sticky: boolean;
20
+ }>;
13
21
  }