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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy