vue-ninja 0.1.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/coverage.js +1 -1
- package/dist/e2e.js +5 -5
- package/dist/hash-checker.js +2 -2
- package/dist/jest.js +3 -3
- package/dist/lint.js +3 -3
- package/dist/submit-results.js +7 -7
- package/dist/utils.js +1 -1
- package/dist/vitest.js +68 -0
- package/dist/vue-ninja.js +10 -10
- package/package.json +20 -19
package/dist/coverage.js
CHANGED
|
@@ -34,7 +34,7 @@ function handleCoverageResults(data, resolve) {
|
|
|
34
34
|
var coverage = function (options) {
|
|
35
35
|
return new Promise(function (resolve, reject) {
|
|
36
36
|
logger_1.default.log('Starting code coverage...');
|
|
37
|
-
return utils_1.readFile(RESULT_FILE).then(function (data) { return handleCoverageResults(data, resolve); }, function (error) {
|
|
37
|
+
return (0, utils_1.readFile)(RESULT_FILE).then(function (data) { return handleCoverageResults(data, resolve); }, function (error) {
|
|
38
38
|
logger_1.default.error('Error while reading the code coverage results. Try to run `npm run test:unit`.');
|
|
39
39
|
logger_1.default.debug(options, 'Error while reading the code coverage results was: ', error);
|
|
40
40
|
reject();
|
package/dist/e2e.js
CHANGED
|
@@ -18,8 +18,8 @@ function handleCypressResults(data) {
|
|
|
18
18
|
var cypressResults = { success: success, failed: failed };
|
|
19
19
|
if (failed) {
|
|
20
20
|
logger_1.default.warn('Looks like you have ' + failed + ' e2e tests failing.');
|
|
21
|
-
logger_1.default.warn('Try to launch the tests using `npm run test:e2e
|
|
22
|
-
logger_1.default.warn("E2e tests score: "
|
|
21
|
+
logger_1.default.warn('Try to launch the tests using `npm run test:e2e`.');
|
|
22
|
+
logger_1.default.warn("E2e tests score: ".concat(Math.round((success * 100) / (success + failed)), "%"));
|
|
23
23
|
}
|
|
24
24
|
else {
|
|
25
25
|
logger_1.default.success('E2e tests score: 100%');
|
|
@@ -27,7 +27,7 @@ function handleCypressResults(data) {
|
|
|
27
27
|
return cypressResults;
|
|
28
28
|
}
|
|
29
29
|
function mergeReports() {
|
|
30
|
-
return utils_1.exec("npx mochawesome-merge ./results/mochawesome/*.json -o "
|
|
30
|
+
return (0, utils_1.exec)("npx mochawesome-merge ./results/mochawesome/*.json -o ".concat(RESULT_FILE));
|
|
31
31
|
}
|
|
32
32
|
var e2e = function (options) {
|
|
33
33
|
return new Promise(function (resolve, reject) {
|
|
@@ -36,14 +36,14 @@ var e2e = function (options) {
|
|
|
36
36
|
// so we'll go into the error handler even if the execution went well
|
|
37
37
|
// and we try to read the results in both cases
|
|
38
38
|
// mode=production is a hacky way to ensure integration tests pass.
|
|
39
|
-
return utils_1.exec('npm run test:e2e
|
|
39
|
+
return (0, utils_1.exec)('npm run test:e2e:ci')
|
|
40
40
|
.then(
|
|
41
41
|
// each spec produces a report, so we need to merge them
|
|
42
42
|
function () { return mergeReports(); }, function (error) {
|
|
43
43
|
logger_1.default.debug(options, 'Error while running e2e was: ', error);
|
|
44
44
|
return mergeReports();
|
|
45
45
|
})
|
|
46
|
-
.then(function () { return utils_1.readFile(RESULT_FILE); }, function () { return utils_1.readFile(RESULT_FILE); })
|
|
46
|
+
.then(function () { return (0, utils_1.readFile)(RESULT_FILE); }, function () { return (0, utils_1.readFile)(RESULT_FILE); })
|
|
47
47
|
.then(function (data) { return handleCypressResults(data); })
|
|
48
48
|
.then(function (results) { return resolve(results); }, function (error) {
|
|
49
49
|
logger_1.default.debug(options, 'Error while reading e2e results: ', error);
|
package/dist/hash-checker.js
CHANGED
|
@@ -12,7 +12,7 @@ function findSpecIfItExists(hashes, spec) {
|
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
function listSpecs() {
|
|
15
|
-
return utils_1.listFiles('./
|
|
15
|
+
return (0, utils_1.listFiles)('./{cypress,src}/**/*.@(e2e-spec|spec).@(ts|js)');
|
|
16
16
|
}
|
|
17
17
|
function computeHash(specs) {
|
|
18
18
|
return specs.map(function (name) {
|
|
@@ -25,7 +25,7 @@ function computeHashesOfSpecs() {
|
|
|
25
25
|
var hashChecker = function (options) {
|
|
26
26
|
return new Promise(function (resolve, reject) {
|
|
27
27
|
logger_1.default.log('Checking submission...');
|
|
28
|
-
utils_1.readFile('./exercise.json')
|
|
28
|
+
(0, utils_1.readFile)('./exercise.json')
|
|
29
29
|
.then(function (exerciseData) {
|
|
30
30
|
var exercise = JSON.parse(exerciseData);
|
|
31
31
|
logger_1.default.success('Pack V' + exercise.pack + ' - Exercise ' + exercise.id + ' - ' + exercise.title);
|
package/dist/jest.js
CHANGED
|
@@ -56,10 +56,10 @@ var jest = function (options) {
|
|
|
56
56
|
// jest exit code is 1 if a test fails
|
|
57
57
|
// so we'll go into the error handler even if the execution went well
|
|
58
58
|
// and we try to read the results in both cases
|
|
59
|
-
return (utils_1.exec('npm run test:unit -- --no-cache --run-in-band --collect-coverage --reporters=default --reporters=jest-stare')
|
|
60
|
-
.then(function () { return utils_1.readFile(RESULT_FILE); }, function (error) {
|
|
59
|
+
return ((0, utils_1.exec)('npm run test:unit -- --no-cache --run-in-band --collect-coverage --reporters=default --reporters=jest-stare')
|
|
60
|
+
.then(function () { return (0, utils_1.readFile)(RESULT_FILE); }, function (error) {
|
|
61
61
|
logger_1.default.debug(options, 'Jest test failed', error);
|
|
62
|
-
return utils_1.readFile(RESULT_FILE);
|
|
62
|
+
return (0, utils_1.readFile)(RESULT_FILE);
|
|
63
63
|
})
|
|
64
64
|
// if results, great we handle them
|
|
65
65
|
// if not we warn the user
|
package/dist/lint.js
CHANGED
|
@@ -9,10 +9,10 @@ var RESULT_FILE = 'results/lint-results.json';
|
|
|
9
9
|
var lint = function (options) {
|
|
10
10
|
return new Promise(function (resolve, reject) {
|
|
11
11
|
logger_1.default.log('Starting code analysis...');
|
|
12
|
-
return utils_1.exec("npm run lint -- --no-fix --format=json --output-file="
|
|
13
|
-
.then(function () { return utils_1.readFile(RESULT_FILE); },
|
|
12
|
+
return (0, utils_1.exec)("npm run lint -- --no-fix --format=json --output-file=".concat(RESULT_FILE))
|
|
13
|
+
.then(function () { return (0, utils_1.readFile)(RESULT_FILE); },
|
|
14
14
|
// eslint will error if there is a warning
|
|
15
|
-
function () { return utils_1.readFile(RESULT_FILE); })
|
|
15
|
+
function () { return (0, utils_1.readFile)(RESULT_FILE); })
|
|
16
16
|
.then(function (data) {
|
|
17
17
|
if (data) {
|
|
18
18
|
return JSON.parse(data);
|
package/dist/submit-results.js
CHANGED
|
@@ -30,8 +30,8 @@ function login(options, loginAttempts, metadata) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
|
-
return utils_1.prompt(schema)
|
|
34
|
-
.then(function (result) { return utils_1.post((options['local-server'] ? LOCALHOST : BASE_PATH
|
|
33
|
+
return (0, utils_1.prompt)(schema)
|
|
34
|
+
.then(function (result) { return (0, utils_1.post)("".concat(options['local-server'] ? LOCALHOST : BASE_PATH, "/api/authentications"), result); })
|
|
35
35
|
.then(function (_a) {
|
|
36
36
|
var response = _a.response, body = _a.body;
|
|
37
37
|
if (response.statusCode !== 201) {
|
|
@@ -48,7 +48,7 @@ function login(options, loginAttempts, metadata) {
|
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
function computeScore(metadata, results, options) {
|
|
51
|
-
var score = 100 - results.
|
|
51
|
+
var score = 100 - results.vitest.failed * 5 - results.tslint.errors - (results.coverage.total - results.coverage.covered) - results.e2e.failed;
|
|
52
52
|
if (score < 10) {
|
|
53
53
|
score = 10;
|
|
54
54
|
}
|
|
@@ -56,7 +56,7 @@ function computeScore(metadata, results, options) {
|
|
|
56
56
|
// if we are running locally we want to return a failure
|
|
57
57
|
if (score !== 100) {
|
|
58
58
|
logger_1.default.error('Score is not perfect! ' + score + '%');
|
|
59
|
-
utils_1.exitProcessWithError(1);
|
|
59
|
+
(0, utils_1.exitProcessWithError)(1);
|
|
60
60
|
}
|
|
61
61
|
logger_1.default.success('Exercise score: ' + score + '%');
|
|
62
62
|
}
|
|
@@ -69,10 +69,10 @@ function computeScore(metadata, results, options) {
|
|
|
69
69
|
return { metadata: metadata, score: score };
|
|
70
70
|
}
|
|
71
71
|
function postScore(options, metadata) {
|
|
72
|
-
var headers = { Authorization: "Bearer: "
|
|
72
|
+
var headers = { Authorization: "Bearer: ".concat(metadata.token) };
|
|
73
73
|
var path = options['local-server'] ? LOCALHOST : BASE_PATH;
|
|
74
74
|
var bodyToSubmit = { score: metadata.score };
|
|
75
|
-
return utils_1.post(path
|
|
75
|
+
return (0, utils_1.post)("".concat(path, "/api/packs/").concat(metadata.pack, "/exercises/").concat(metadata.id, "/scores"), bodyToSubmit, headers).then(function (_a) {
|
|
76
76
|
var response = _a.response, body = _a.body;
|
|
77
77
|
// if authentication error
|
|
78
78
|
if (response.statusCode === 401) {
|
|
@@ -101,7 +101,7 @@ function postScore(options, metadata) {
|
|
|
101
101
|
});
|
|
102
102
|
}
|
|
103
103
|
var submitResults = function (results, options) {
|
|
104
|
-
return utils_1.readFile('./exercise.json')
|
|
104
|
+
return (0, utils_1.readFile)('./exercise.json')
|
|
105
105
|
.then(function (data) { return JSON.parse(data); }, function (error) {
|
|
106
106
|
logger_1.default.error('Looks like you have no exercise.json file.');
|
|
107
107
|
logger_1.default.debug(options, 'An error occurred while reading exercise.json: ', error);
|
package/dist/utils.js
CHANGED
|
@@ -46,7 +46,7 @@ var post = function (url, json, headers) {
|
|
|
46
46
|
exports.post = post;
|
|
47
47
|
var listFiles = function (pattern) {
|
|
48
48
|
return new Promise(function (resolve, reject) {
|
|
49
|
-
glob_1.default(pattern, function (err, files) {
|
|
49
|
+
(0, glob_1.default)(pattern, function (err, files) {
|
|
50
50
|
if (err) {
|
|
51
51
|
logger_1.default.error('Could not find the spec files.');
|
|
52
52
|
reject(err);
|
package/dist/vitest.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var utils_1 = require("./utils");
|
|
7
|
+
var logger_1 = __importDefault(require("./logger"));
|
|
8
|
+
var RESULT_FILE = 'results/vitest-results.json';
|
|
9
|
+
function computeScore(vitestResults) {
|
|
10
|
+
// eslint-disable-next-line no-undefined
|
|
11
|
+
if (vitestResults.failed === undefined) {
|
|
12
|
+
return 0;
|
|
13
|
+
}
|
|
14
|
+
var score = 100 - vitestResults.failed * 5;
|
|
15
|
+
return score >= 0 ? score : 0;
|
|
16
|
+
}
|
|
17
|
+
function warnUserThatSomeTestsFailed(vitestResults) {
|
|
18
|
+
var score = computeScore(vitestResults);
|
|
19
|
+
logger_1.default.warn('Unit tests score: ' + score + '%');
|
|
20
|
+
logger_1.default.warn('Looks like you have ' + (vitestResults.failed ? vitestResults.failed : 'a few') + ' unit test(s) failing.');
|
|
21
|
+
logger_1.default.warn('Launch `npm run test:unit` and try to fix them.');
|
|
22
|
+
}
|
|
23
|
+
function warnUserThatVitestFailed(reject) {
|
|
24
|
+
logger_1.default.error('Error while running unit tests.');
|
|
25
|
+
logger_1.default.error("Maybe your code doesn't compile?");
|
|
26
|
+
logger_1.default.error('Launch `npm run test:unit` to see more.');
|
|
27
|
+
return reject();
|
|
28
|
+
}
|
|
29
|
+
function handleVitestResults(data, options, resolve, reject) {
|
|
30
|
+
var results = JSON.parse(data);
|
|
31
|
+
if (!results) {
|
|
32
|
+
logger_1.default.error('An error occurred during the unit tests.');
|
|
33
|
+
logger_1.default.error('Run `npm run test:unit` to see the problem.');
|
|
34
|
+
return reject();
|
|
35
|
+
}
|
|
36
|
+
var failed = results.numFailedTests ? results.numFailedTests : results.numFailedTestSuites;
|
|
37
|
+
var vitestResults = {
|
|
38
|
+
failed: failed,
|
|
39
|
+
success: results.numPassedTests
|
|
40
|
+
};
|
|
41
|
+
if (vitestResults.failed !== 0) {
|
|
42
|
+
warnUserThatSomeTestsFailed(vitestResults);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
logger_1.default.success('Unit tests score: 100%');
|
|
46
|
+
}
|
|
47
|
+
return resolve(vitestResults);
|
|
48
|
+
}
|
|
49
|
+
var vitest = function (options) {
|
|
50
|
+
return new Promise(function (resolve, reject) {
|
|
51
|
+
logger_1.default.log('Starting unit tests...');
|
|
52
|
+
// vitest exit code is 1 if a test fails
|
|
53
|
+
// so we'll go into the error handler even if the execution went well
|
|
54
|
+
// and we try to read the results in both cases
|
|
55
|
+
return ((0, utils_1.exec)("npm run test:unit:ci")
|
|
56
|
+
.then(function () { return (0, utils_1.readFile)(RESULT_FILE); }, function (error) {
|
|
57
|
+
logger_1.default.debug(options, 'Vitest test failed', error);
|
|
58
|
+
return (0, utils_1.readFile)(RESULT_FILE);
|
|
59
|
+
})
|
|
60
|
+
// if results, great we handle them
|
|
61
|
+
// if not we warn the user
|
|
62
|
+
.then(function (data) { return handleVitestResults(data, options, resolve, reject); }, function (error) {
|
|
63
|
+
logger_1.default.debug(options, 'An error occurred while reading vitest results: ', error);
|
|
64
|
+
return warnUserThatVitestFailed(reject);
|
|
65
|
+
}));
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
exports.default = vitest;
|
package/dist/vue-ninja.js
CHANGED
|
@@ -6,7 +6,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
var command_line_args_1 = __importDefault(require("command-line-args"));
|
|
8
8
|
var rimraf_1 = __importDefault(require("rimraf"));
|
|
9
|
-
var
|
|
9
|
+
var vitest_1 = __importDefault(require("./vitest"));
|
|
10
10
|
var hash_checker_1 = __importDefault(require("./hash-checker"));
|
|
11
11
|
var coverage_1 = __importDefault(require("./coverage"));
|
|
12
12
|
var lint_1 = __importDefault(require("./lint"));
|
|
@@ -14,7 +14,7 @@ var e2e_1 = __importDefault(require("./e2e"));
|
|
|
14
14
|
var submit_results_1 = __importDefault(require("./submit-results"));
|
|
15
15
|
var logger_1 = __importDefault(require("./logger"));
|
|
16
16
|
// parse cli options
|
|
17
|
-
var options = command_line_args_1.default([
|
|
17
|
+
var options = (0, command_line_args_1.default)([
|
|
18
18
|
{ name: 'local', type: Boolean },
|
|
19
19
|
{ name: 'local-server', type: Boolean },
|
|
20
20
|
{ name: 'verbose', type: Boolean },
|
|
@@ -35,22 +35,22 @@ var results = {
|
|
|
35
35
|
errors: 0
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
hash_checker_1.default(options)
|
|
38
|
+
(0, hash_checker_1.default)(options)
|
|
39
39
|
.then(function (exercise) { return (results.exercise = exercise); })
|
|
40
40
|
.then(function () { return logger_1.default.debug(options, 'Exercise: ', results.exercise.title); })
|
|
41
|
-
.then(function () { return
|
|
42
|
-
.then(function (
|
|
43
|
-
.then(function () { return logger_1.default.debug(options, '
|
|
44
|
-
.then(function () { return coverage_1.default(options); })
|
|
41
|
+
.then(function () { return (0, vitest_1.default)(options); })
|
|
42
|
+
.then(function (vitestResults) { return (results.vitest = vitestResults); })
|
|
43
|
+
.then(function () { return logger_1.default.debug(options, 'Vitest results: ', JSON.stringify(results.vitest)); })
|
|
44
|
+
.then(function () { return (0, coverage_1.default)(options); })
|
|
45
45
|
.then(function (coverageResults) { return (results.coverage = coverageResults); })
|
|
46
46
|
.then(function () { return logger_1.default.debug(options, 'Coverage results: ', JSON.stringify(results.coverage)); })
|
|
47
|
-
.then(function () { return lint_1.default(options); })
|
|
47
|
+
.then(function () { return (0, lint_1.default)(options); })
|
|
48
48
|
.then(function (tslintResults) { return (results.tslint = tslintResults); })
|
|
49
49
|
.then(function () { return logger_1.default.debug(options, 'Linter results: ', JSON.stringify(results.tslint)); })
|
|
50
|
-
.then(function () { return e2e_1.default(options); })
|
|
50
|
+
.then(function () { return (0, e2e_1.default)(options); })
|
|
51
51
|
.then(function (e2eResults) { return (results.e2e = e2eResults); })
|
|
52
52
|
.then(function () { return logger_1.default.debug(options, 'E2e results: ', JSON.stringify(results.e2e)); })
|
|
53
|
-
.then(function () { return submit_results_1.default(results, options); })
|
|
53
|
+
.then(function () { return (0, submit_results_1.default)(results, options); })
|
|
54
54
|
.catch(function (error) {
|
|
55
55
|
logger_1.default.error('Try to fix it and retry!');
|
|
56
56
|
if (options.verbose) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue-ninja",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "CLI for the exercises of \"Become a ninja with Vue\"",
|
|
5
5
|
"main": "dist/vue-ninja.js",
|
|
6
6
|
"scripts": {
|
|
@@ -12,30 +12,31 @@
|
|
|
12
12
|
"author": "",
|
|
13
13
|
"license": "ISC",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"chalk": "4.1.
|
|
16
|
-
"command-line-args": "5.
|
|
17
|
-
"glob": "7.
|
|
15
|
+
"chalk": "4.1.2",
|
|
16
|
+
"command-line-args": "5.2.1",
|
|
17
|
+
"glob": "7.2.0",
|
|
18
18
|
"hash-files": "1.1.1",
|
|
19
|
-
"prompt": "1.1
|
|
19
|
+
"prompt": "1.2.1",
|
|
20
20
|
"request": "2.88.2",
|
|
21
21
|
"rimraf": "3.0.2"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@typescript-eslint/eslint-plugin": "
|
|
25
|
-
"@typescript-eslint/parser": "
|
|
26
|
-
"@types/command-line-args": "5.0
|
|
27
|
-
"@types/glob": "7.
|
|
28
|
-
"@types/jest": "
|
|
29
|
-
"@types/node": "
|
|
30
|
-
"@types/request": "2.48.
|
|
31
|
-
"@types/rimraf": "3.0.
|
|
32
|
-
"
|
|
24
|
+
"@typescript-eslint/eslint-plugin": "5.10.2",
|
|
25
|
+
"@typescript-eslint/parser": "5.10.2",
|
|
26
|
+
"@types/command-line-args": "5.2.0",
|
|
27
|
+
"@types/glob": "7.2.0",
|
|
28
|
+
"@types/jest": "27.4.0",
|
|
29
|
+
"@types/node": "16.11.22",
|
|
30
|
+
"@types/request": "2.48.8",
|
|
31
|
+
"@types/rimraf": "3.0.2",
|
|
32
|
+
"create-vue": "3.1.3",
|
|
33
|
+
"eslint": "8.8.0",
|
|
33
34
|
"eslint-config-prettier": "8.3.0",
|
|
34
|
-
"eslint-plugin-prettier": "
|
|
35
|
-
"jest": "27.0
|
|
36
|
-
"prettier": "2.
|
|
37
|
-
"ts-jest": "27.
|
|
38
|
-
"typescript": "4.
|
|
35
|
+
"eslint-plugin-prettier": "4.0.0",
|
|
36
|
+
"jest": "27.5.0",
|
|
37
|
+
"prettier": "2.5.1",
|
|
38
|
+
"ts-jest": "27.1.3",
|
|
39
|
+
"typescript": "4.5.5"
|
|
39
40
|
},
|
|
40
41
|
"bin": {
|
|
41
42
|
"vue-ninja": "dist/vue-ninja.js"
|