@deot/dev-tester 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/index.cjs.js +101 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.es.js +99 -0
- package/package.json +24 -0
package/README.md
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var devShared = require('@deot/dev-shared');
|
|
4
|
+
var inquirer = require('inquirer');
|
|
5
|
+
var autocomplete = require('inquirer-autocomplete-prompt');
|
|
6
|
+
|
|
7
|
+
const ALL_PACKAGE = 'All Packages';
|
|
8
|
+
const { prompt, registerPrompt } = inquirer;
|
|
9
|
+
const getOptions = async () => {
|
|
10
|
+
const isDev = process.env.NODE_ENV === 'development';
|
|
11
|
+
const { packageFolderNames } = devShared.Locals.impl();
|
|
12
|
+
const packages$ = [ALL_PACKAGE, ...packageFolderNames];
|
|
13
|
+
const question = [
|
|
14
|
+
{
|
|
15
|
+
type: 'autocomplete',
|
|
16
|
+
message: `Select Package To ${isDev ? 'Develop' : 'Test'}:`,
|
|
17
|
+
name: 'packageFolderName',
|
|
18
|
+
default: 'cli',
|
|
19
|
+
source: (_, input) => {
|
|
20
|
+
input = input || '';
|
|
21
|
+
return new Promise(($resolve => {
|
|
22
|
+
let filter = input
|
|
23
|
+
? packages$.filter(item => item.includes(input))
|
|
24
|
+
: packages$;
|
|
25
|
+
$resolve(filter);
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
type: 'confirm',
|
|
31
|
+
message: 'Watch Mode?',
|
|
32
|
+
name: 'watch',
|
|
33
|
+
when: () => !isDev,
|
|
34
|
+
default: (answers) => {
|
|
35
|
+
return answers.packageFolderName !== ALL_PACKAGE;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
registerPrompt('autocomplete', autocomplete);
|
|
40
|
+
let result = await prompt(question);
|
|
41
|
+
result.packageFolderName = result.packageFolderName == ALL_PACKAGE
|
|
42
|
+
? undefined
|
|
43
|
+
: result.packageFolderName;
|
|
44
|
+
result.watch = result.watch || isDev;
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const run = (options) => devShared.Utils.autoCatch(async () => {
|
|
49
|
+
options = { ...options };
|
|
50
|
+
const locals = devShared.Locals.impl();
|
|
51
|
+
if (typeof options.dryRun === 'undefined') {
|
|
52
|
+
options.dryRun = process.env.NODE_ENV === 'UNIT';
|
|
53
|
+
}
|
|
54
|
+
if (locals.workspace && !options.packageName) {
|
|
55
|
+
const promptOptions = await getOptions();
|
|
56
|
+
options = {
|
|
57
|
+
...options,
|
|
58
|
+
...promptOptions
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const { cwd, workspace, packageOptionsMap, packageDirsMap } = locals;
|
|
62
|
+
const { packageName, watch, dryRun } = options;
|
|
63
|
+
options.packageFolderName = devShared.Locals.getPackageFolderName(options.packageName) || options.packageFolderName;
|
|
64
|
+
options.workspace = workspace;
|
|
65
|
+
const packageOptions = packageOptionsMap[options.packageFolderName];
|
|
66
|
+
const packageDir = packageDirsMap[options.packageFolderName];
|
|
67
|
+
if (workspace
|
|
68
|
+
&& cwd !== packageDir
|
|
69
|
+
&& packageOptions?.scripts?.['test']) {
|
|
70
|
+
await devShared.Shell.spawn(`npm`, ['run', 'test']);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (!options.packageFolderName)
|
|
74
|
+
delete options.packageFolderName;
|
|
75
|
+
if (!options.workspace)
|
|
76
|
+
delete options.workspace;
|
|
77
|
+
delete options.packageName;
|
|
78
|
+
const command = `cross-env NODE_ENV=${process.env.NODE_ENV || 'TEST'} TEST_OPTIONS=${encodeURIComponent(JSON.stringify(options))} jest `
|
|
79
|
+
+ ([
|
|
80
|
+
'--passWithNoTests',
|
|
81
|
+
`${watch ? '--watchAll' : ''}`
|
|
82
|
+
].join(' '));
|
|
83
|
+
if (dryRun)
|
|
84
|
+
return devShared.Shell.spawn(`echo ${command}`);
|
|
85
|
+
await devShared.Shell.spawn(command);
|
|
86
|
+
if (!watch)
|
|
87
|
+
return;
|
|
88
|
+
devShared.Logger.log(packageName || '', '测试已通过');
|
|
89
|
+
}, {
|
|
90
|
+
onError: (e) => {
|
|
91
|
+
if (typeof e === 'number' && e === 1) {
|
|
92
|
+
devShared.Logger.error('测试未通过');
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
devShared.Logger.error(e);
|
|
96
|
+
}
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
exports.run = run;
|
package/dist/index.d.ts
ADDED
package/dist/index.es.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Locals, Utils, Shell, Logger } from '@deot/dev-shared';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import autocomplete from 'inquirer-autocomplete-prompt';
|
|
4
|
+
|
|
5
|
+
const ALL_PACKAGE = 'All Packages';
|
|
6
|
+
const { prompt, registerPrompt } = inquirer;
|
|
7
|
+
const getOptions = async () => {
|
|
8
|
+
const isDev = process.env.NODE_ENV === 'development';
|
|
9
|
+
const { packageFolderNames } = Locals.impl();
|
|
10
|
+
const packages$ = [ALL_PACKAGE, ...packageFolderNames];
|
|
11
|
+
const question = [
|
|
12
|
+
{
|
|
13
|
+
type: 'autocomplete',
|
|
14
|
+
message: `Select Package To ${isDev ? 'Develop' : 'Test'}:`,
|
|
15
|
+
name: 'packageFolderName',
|
|
16
|
+
default: 'cli',
|
|
17
|
+
source: (_, input) => {
|
|
18
|
+
input = input || '';
|
|
19
|
+
return new Promise(($resolve => {
|
|
20
|
+
let filter = input
|
|
21
|
+
? packages$.filter(item => item.includes(input))
|
|
22
|
+
: packages$;
|
|
23
|
+
$resolve(filter);
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
type: 'confirm',
|
|
29
|
+
message: 'Watch Mode?',
|
|
30
|
+
name: 'watch',
|
|
31
|
+
when: () => !isDev,
|
|
32
|
+
default: (answers) => {
|
|
33
|
+
return answers.packageFolderName !== ALL_PACKAGE;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
registerPrompt('autocomplete', autocomplete);
|
|
38
|
+
let result = await prompt(question);
|
|
39
|
+
result.packageFolderName = result.packageFolderName == ALL_PACKAGE
|
|
40
|
+
? undefined
|
|
41
|
+
: result.packageFolderName;
|
|
42
|
+
result.watch = result.watch || isDev;
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const run = (options) => Utils.autoCatch(async () => {
|
|
47
|
+
options = { ...options };
|
|
48
|
+
const locals = Locals.impl();
|
|
49
|
+
if (typeof options.dryRun === 'undefined') {
|
|
50
|
+
options.dryRun = process.env.NODE_ENV === 'UNIT';
|
|
51
|
+
}
|
|
52
|
+
if (locals.workspace && !options.packageName) {
|
|
53
|
+
const promptOptions = await getOptions();
|
|
54
|
+
options = {
|
|
55
|
+
...options,
|
|
56
|
+
...promptOptions
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const { cwd, workspace, packageOptionsMap, packageDirsMap } = locals;
|
|
60
|
+
const { packageName, watch, dryRun } = options;
|
|
61
|
+
options.packageFolderName = Locals.getPackageFolderName(options.packageName) || options.packageFolderName;
|
|
62
|
+
options.workspace = workspace;
|
|
63
|
+
const packageOptions = packageOptionsMap[options.packageFolderName];
|
|
64
|
+
const packageDir = packageDirsMap[options.packageFolderName];
|
|
65
|
+
if (workspace
|
|
66
|
+
&& cwd !== packageDir
|
|
67
|
+
&& packageOptions?.scripts?.['test']) {
|
|
68
|
+
await Shell.spawn(`npm`, ['run', 'test']);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (!options.packageFolderName)
|
|
72
|
+
delete options.packageFolderName;
|
|
73
|
+
if (!options.workspace)
|
|
74
|
+
delete options.workspace;
|
|
75
|
+
delete options.packageName;
|
|
76
|
+
const command = `cross-env NODE_ENV=${process.env.NODE_ENV || 'TEST'} TEST_OPTIONS=${encodeURIComponent(JSON.stringify(options))} jest `
|
|
77
|
+
+ ([
|
|
78
|
+
'--passWithNoTests',
|
|
79
|
+
`${watch ? '--watchAll' : ''}`
|
|
80
|
+
].join(' '));
|
|
81
|
+
if (dryRun)
|
|
82
|
+
return Shell.spawn(`echo ${command}`);
|
|
83
|
+
await Shell.spawn(command);
|
|
84
|
+
if (!watch)
|
|
85
|
+
return;
|
|
86
|
+
Logger.log(packageName || '', '测试已通过');
|
|
87
|
+
}, {
|
|
88
|
+
onError: (e) => {
|
|
89
|
+
if (typeof e === 'number' && e === 1) {
|
|
90
|
+
Logger.error('测试未通过');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
Logger.error(e);
|
|
94
|
+
}
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
export { run };
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@deot/dev-tester",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"main": "dist/index.es.js",
|
|
5
|
+
"module": "dist/index.es.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@babel/core": "^7.21.4",
|
|
17
|
+
"@babel/preset-env": "^7.21.4",
|
|
18
|
+
"@deot/dev-extract": "^1.1.0",
|
|
19
|
+
"@deot/dev-shared": "^1.1.0",
|
|
20
|
+
"jest": "^29.5.0",
|
|
21
|
+
"jest-environment-jsdom": "^29.5.0",
|
|
22
|
+
"ts-jest": "^29.1.0"
|
|
23
|
+
}
|
|
24
|
+
}
|