Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 36f1bd3

Browse files
committed
prepare validate packageJson
1 parent 2f884cd commit 36f1bd3

File tree

9 files changed

+99
-24
lines changed

9 files changed

+99
-24
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
All notable changes to this project will be documented in this file.
33
This project adheres to [Semantic Versioning](http://semver.org/).
44

5+
## [0.7.0] - WIP
6+
- validate packageJson function
7+
58
## [0.6.0] - 2016-06-12
69
- allow for programmatic use
710
- working `> coderoad tutorials`
8-
- validate name function
911

1012
## [0.5.0] - 2016-05-02
1113
- bug fixes

lib/cli.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,17 @@ var search_1 = require('./search');
99
var tutorials_1 = require('./tutorials');
1010
var publish_1 = require('./publish');
1111
var update_1 = require('./update');
12+
var validate_1 = require('./validate');
1213
program
13-
.version('0.6.0')
14+
.version('0.7.0')
1415
.usage('[options] <keywords>')
1516
.option('-b, --build <path/to/tutorial.md>', 'tutorial markdown file', /^.+\.md$/i)
1617
.option('-c, --create <name>', 'tutorial name')
1718
.option('-p, --publish <version>', 'publish tutorial to npm with new version number')
1819
.option('-t, --tutorials', 'list of local tutorial packages')
1920
.option('-s, --search <query>', 'search for tutorial package')
2021
.option('-r, --run', 'run tutorial')
22+
.option('-v, --validate', 'validate tutorial')
2123
.parse(process.argv);
2224
update_1.default();
2325
if (program.build) {
@@ -61,6 +63,11 @@ else if (program.publish) {
6163
var version = program.args[0];
6264
publish_1.default(version);
6365
}
66+
else if (program.validate) {
67+
if (!validate_1.default()) {
68+
result_1.fail();
69+
}
70+
}
6471
else {
6572
program.help();
6673
}

lib/validate/index.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"use strict";
2+
var chalk_1 = require('chalk');
3+
var packageJson_1 = require('./packageJson');
4+
var get_1 = require('../packageJson/get');
5+
function validate() {
6+
var pj = get_1.default(process.cwd());
7+
if (!pj) {
8+
console.log(chalk_1.red('Error: No package.json.'));
9+
return false;
10+
}
11+
var validation = packageJson_1.default(pj);
12+
getValidationMessages(validation.warnings, chalk_1.yellow);
13+
return getValidationMessages(validation.errors, chalk_1.red);
14+
}
15+
Object.defineProperty(exports, "__esModule", { value: true });
16+
exports.default = validate;
17+
function getValidationMessages(validation, color) {
18+
if (validation && validation.length) {
19+
validation.forEach(function (e) {
20+
console.log(color("\n Error: " + e.name + " " + e.msg + ".\n Example: " + e.example + "\n "));
21+
});
22+
return false;
23+
}
24+
return true;
25+
}

lib/validate/packageJson.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,10 @@ function validatePackageJson(pj) {
8888
var target = pj.config ? pj.config : pj;
8989
if (!target.hasOwnProperty(key.name) || key.validate(target[key.name])) {
9090
if (!key.optional) {
91-
errors.push({ msg: key.msg, example: key.example });
91+
errors.push({ name: key.name, msg: key.msg, example: key.example });
9292
}
9393
else {
94-
warnings.push({ msg: key.msg, example: key.example });
94+
warnings.push({ name: key.name, msg: key.msg, example: key.example });
9595
}
9696
}
9797
});

src/cli.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,20 @@ import search from './search';
1010
import tutorials from './tutorials';
1111
import publish from './publish';
1212
import checkForUpdate from './update';
13+
import validate from './validate';
1314

1415
program
15-
.version('0.6.0')
16+
.version('0.7.0')
1617
.usage('[options] <keywords>')
1718
.option('-b, --build <path/to/tutorial.md>',
18-
'tutorial markdown file', /^.+\.md$/i)
19+
'tutorial markdown file', /^.+\.md$/i)
1920
.option('-c, --create <name>', 'tutorial name')
2021
.option('-p, --publish <version>',
21-
'publish tutorial to npm with new version number')
22+
'publish tutorial to npm with new version number')
2223
.option('-t, --tutorials', 'list of local tutorial packages')
2324
.option('-s, --search <query>', 'search for tutorial package')
2425
.option('-r, --run', 'run tutorial')
26+
.option('-v, --validate', 'validate tutorial')
2527
.parse(process.argv);
2628

2729
checkForUpdate();
@@ -68,6 +70,12 @@ if (program.build) {
6870
const version = program.args[0];
6971
publish(version);
7072

73+
} else if (program.validate) {
74+
if (!validate()) {
75+
fail();
76+
}
77+
78+
// help
7179
} else {
7280
program.help();
7381
}

src/typings/cr/validate.d.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
interface PJErrors {
2+
name: string;
3+
msg: string;
4+
example: string;
5+
}
6+
7+
interface PJKeys extends PJErrors {
8+
name: string;
9+
validate: (content: string) => boolean;
10+
config?: boolean;
11+
optional?: boolean;
12+
}
13+
14+
interface ValidatePjOutput {
15+
errors: PJErrors[];
16+
warnings: PJErrors[];
17+
}

src/validate/index.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import {red, yellow} from 'chalk';
2+
import validatePackageJson from './packageJson';
3+
import getPackageJson from '../packageJson/get';
4+
5+
export default function validate(): boolean {
6+
const pj = getPackageJson(process.cwd());
7+
if (!pj) {
8+
console.log(red('Error: No package.json.'));
9+
return false;
10+
}
11+
const validation = validatePackageJson(pj);
12+
// log warnings
13+
getValidationMessages(validation.warnings, yellow);
14+
// log and return errors
15+
return getValidationMessages(validation.errors, red);
16+
}
17+
18+
function getValidationMessages(validation: PJErrors[], color: any) {
19+
if (validation && validation.length) {
20+
validation.forEach((e) => {
21+
console.log(color(`
22+
Error: ${e.name} ${e.msg}.
23+
Example: ${e.example}
24+
`));
25+
});
26+
return false;
27+
}
28+
return true;
29+
}

src/validate/packageJson.ts

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -81,22 +81,7 @@ const pJKeys: PJKeys[] = [{
8181
example: 'MIT',
8282
}];
8383

84-
interface PJErrors {
85-
msg: string;
86-
example: string;
87-
}
88-
89-
interface PJKeys extends PJErrors {
90-
name: string;
91-
validate: (content: string) => boolean;
92-
config?: boolean;
93-
optional?: boolean;
94-
}
9584

96-
interface ValidatePjOutput {
97-
errors: PJErrors[];
98-
warnings: PJErrors[];
99-
}
10085

10186
export default function validatePackageJson(pj: PackageJson): ValidatePjOutput {
10287
const errors = [];
@@ -107,9 +92,9 @@ export default function validatePackageJson(pj: PackageJson): ValidatePjOutput {
10792
// key doesn't exist or key is invalid
10893
if (!target.hasOwnProperty(key.name) || key.validate(target[key.name])) {
10994
if (!key.optional) {
110-
errors.push({ msg: key.msg, example: key.example });
95+
errors.push({ name: key.name, msg: key.msg, example: key.example });
11196
} else {
112-
warnings.push({ msg: key.msg, example: key.example });
97+
warnings.push({ name: key.name, msg: key.msg, example: key.example });
11398
}
11499
}
115100
});

tsconfig.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"src/typings/cr/globals.d.ts",
5151
"src/typings/cr/test.d.ts",
5252
"src/typings/cr/tutorial.d.ts",
53+
"src/typings/cr/validate.d.ts",
5354
"src/typings/es6-promise/es6-promise.d.ts",
5455
"src/typings/globals.d.ts",
5556
"src/typings/node-file-exists/index.d.ts",
@@ -58,6 +59,7 @@
5859
"src/typings/sort-package-json/index.d.ts",
5960
"src/typings/tsd.d.ts",
6061
"src/update/index.ts",
62+
"src/validate/index.ts",
6163
"src/validate/packageJson.ts"
6264
],
6365
"exclude": [

0 commit comments

Comments
 (0)