8000 validate packageJson · coderoad/coderoad-cli-deprecated@81603ff · GitHub
[go: up one dir, main page]

Skip to content

Commit 81603ff

Browse files
committed
validate packageJson
1 parent 5ad4d81 commit 81603ff

File tree

4 files changed

+220
-75
lines changed

4 files changed

+220
-75
lines changed

lib/validate/packageJson.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
"use strict";
2+
var pJKeys = [{< 10000 /div>
3+
name: 'name',
4+
validate: function (name) { return name.match(/^coderoad-[A-Za-z0-9\-]+$/); },
5+
msg: 'must be kebabcased and start with "coderoad"',
6+
example: 'coderoad-tutorial-name',
7+
}, {
8+
name: 'version',
9+
validate: function (version) { return version.match(/^[0-9]+\.[0-9]+\.[0-9]+$/); },
10+
msg: 'must be 3 numbers separated by dots',
11+
example: '0.1.0',
12+
}, {
13+
name: 'main',
14+
validate: function (main) { return main === 'coderoad.json'; },
15+
msg: 'must point to coderoad.json',
16+
example: 'coderoad.json',
17+
}, {
18+
name: 'description',
19+
validate: function (desc) { return typeof desc === 'string' && desc.length > 3; },
20+
msg: 'must be long enough to describe a package',
21+
example: 'CodeRoad tutorial on ES2015 new features.'
22+
}, {
23+
name: 'keywords',
24+
validate: function (keywords) { return Array.isArray(keywords) && keywords.length && keywords.includes('coderoad'); },
25+
msg: 'must be an array containing "coderoad"',
26+
example: '["coderoad", "tutorial", "js"]',
27+
}, {
28+
name: 'author',
29+
validate: function (author) { return typeof author === 'string' && author.length > 2; },
30+
msg: 'must have an author name and optional email',
31+
example: 'Shawn McKay <me@email.com> (http://blog)',
32+
}, {
33+
name: 'config',
34+
validate: function (config) { return typeof config === 'object'; },
35+
msg: 'must be an object',
36+
example: '"config": {"language": "JS", "runner": "mocha-coderoad"}',
37+
}, {
38+
name: 'files',
39+
validate: function (files) { return Array.isArray(files) && files.includes('coderoad.json') && files.includes('tutorial'); },
40+
msg: 'must be an array including "coderoad.json" & "tutorial"',
41+
example: '["coderoad.json", "tutorial"]',
42+
}, {
43+
name: 'engines',
44+
validate: function (engines) { return typeof engines === 'object' && engines.node && engines.node.match(/^[>=]?[0-9]+/); },
45+
msg: 'must specify a valid node version',
46+
example: '"engines": { "node": ">=0.10.3"}',
47+
}, {
48+
name: 'language',
49+
config: true,
50+
validate: function (lang) { return typeof lang === 'string' && lang.length; },
51+
msg: 'must specify a programming language',
52+
example: 'JS',
53+
}, {
54+
name: 'runner',
55+
config: true,
56+
validate: function (runner) { return typeof runner === 'string' && runner.length; },
57+
msg: 'must specify a test runner',
58+
example: 'mocha-coderoad',
59+
}];
60+
function validatePackageJson(pj) {
61+
var errors = [];
62+
pJKeys.forEach(function (key) {
63+
var target = pj.config ? pj.config : pj;
64+
if (!target.hasOwnProperty(key.name) || key.validate(target[key.name])) {
65+
errors.push({ msg: key.msg, example: key.example });
66+
}
67+
});
68+
return errors;
69+
}
70+
Object.defineProperty(exports, "__esModule", { value: true });
71+
exports.default = validatePackageJson;

src/validate/name.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/validate/packageJson.ts

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
const pJKeys: PJKeys[] = [{
2+
name: 'name',
3+
validate: name => name.match(/^coderoad-[A-Za-z0-9\-]+$/),
4+
msg: 'must be kebabcased and start with "coderoad"',
5+
example: 'coderoad-tutorial-name',
6+
}, {
7+
name: 'version',
8+
validate: version => version.match(/^[0-9]+\.[0-9]+\.[0-9]+$/),
9+
msg: 'must be 3 numbers separated by dots',
10+
example: '0.1.0',
11+
}, {
12+
name: 'main',
13+
validate: main => main === 'coderoad.json',
14+
msg: 'must point to coderoad.json',
15+
example: 'coderoad.json',
16+
}, {
17+
name: 'description',
18+
validate: desc => typeof desc === 'string' && desc.length > 3,
19+
msg: 'must be long enough to describe a package',
20+
example: 'CodeRoad tutorial on ES2015 new features.'
21+
}, {
22+
name: 'keywords',
23+
validate: keywords => Array.isArray(keywords) && keywords.length && keywords.includes('coderoad'),
24+
msg: 'must be an array containing "coderoad"',
25+
example: '["coderoad", "tutorial", "js"]',
26+
}, {
27+
name: 'author',
28+
validate: author => typeof author === 'string' && author.length > 2,
29+
msg: 'must have an author name and optional email',
30+
example: 'Shawn McKay <me@email.com> (http://blog)',
31+
}, {
32+
name: 'config',
33+
validate: config => typeof config === 'object',
34+
msg: 'must be an object',
35+
example: '"config": {"language": "JS", "runner": "mocha-coderoad"}',
36+
}, {
37+
name: 'files',
38+
validate: files => Array.isArray(files) && files.includes('coderoad.json') && files.includes('tutorial'),
39+
msg: 'must be an array including "coderoad.json" & "tutorial"',
40+
example: '["coderoad.json", "tutorial"]',
41+
}, {
42+
name: 'engines',
43+
validate: engines => typeof engines === 'object' && engines.node && engines.node.match(/^[>=]?[0-9]+/),
44+
msg: 'must specify a valid node version',
45+
example: '"engines": { "node": ">=0.10.3"}',
46+
}, {
47+
name: 'language',
48+
config: true,
49+
validate: lang => typeof lang === 'string' && lang.length,
50+
msg: 'must specify a programming language',
51+
example: 'JS',
52+
}, {
53+
name: 'runner',
54+
config: true,
55+
validate: runner => typeof runner === 'string' && runner.length,
56+
msg: 'must specify a test runner',
57+
example: 'mocha-coderoad',
58+
}];
59+
60+
interface PJErrors {
61+
msg: string;
62+
example: string;
63+
}
64+
65+
interface PJKeys extends PJErrors {
66+
name: string;
67+
validate: (content: string) => boolean;
68+
config?: boolean;
69+
}
70+
71+
export default function validatePackageJson(pj: PackageJson): PJErrors[] {
72+
const errors = [];
73+
pJKeys.forEach(key => {
74+
// key on pj or pj.config
75+
const target = pj.config ? pj.config : pj;
76+
// key doesn't exist or key is invalid
77+
if (!target.hasOwnProperty(key.name) || key.validate(target[key.name])) {
78+
errors.push({ msg: key.msg, example: key.example });
79+
}
80+
});
81+
return errors;
82+
}

tsconfig.json

Lines changed: 67 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,69 @@
11
{
2-
"compilerOptions": {
3-
"target": "ES5",
4-
"module": "commonjs",
5-
"removeComments": true,
6-
"noResolve": true,
7-
"outDir": "lib"
8-
},
9-
"compileOnSave": true,
10-
"buildOnSave": true,
11-
"filesGlob": [
12-
"src/*.ts",
13-
"src/**/*.ts"
14-
],
15-
"files": [
16-
"src/cli.ts",
17-
"src/index.ts",
18-
"src/result.ts",
19-
"src/build/index.ts",
20-
"src/build/lint.ts",
21-
"src/build/parser/actions.ts",
22-
"src/build/parser/cleanup.ts",
23-
"src/build/parser/import.ts",
24-
"src/build/parser/info.ts",
25-
"src/build/parser/match.ts",
26-
"src/build/parser/page.ts",
27-
"src/build/parser/settings.ts",
28-
"src/build/parser/task.ts",
29-
"src/build/readme.ts",
30-
"src/build/validators.ts",
31-
"src/create/index.ts",
32-
"src/create/validate.ts",
33-
"src/create/write-demo.ts",
34-
"src/packageJson/get.ts",
35-
"src/publish/index.ts",
36-
"src/publish/validate.ts",
37-
"src/search/index.ts",
38-
"src/search/validate.ts",
39-
"src/tutorials/find-tutorials.ts",
40-
"src/tutorials/index.ts",
41-
"src/tutorials/is-tutorial.ts",
42-
"src/tutorials/update.ts",
43-
"src/typings/atom-plugin-command-line/index.d.ts",
44-
"src/typings/chalk/chalk.d.ts",
45-
"src/typings/commander/commander.d.ts",
46-
"src/typings/cr.d.ts",
47-
"src/typings/cr/cli.d.ts",
48-
"src/typings/cr/core.d.ts",
49-
"src/typings/cr/cr.d.ts",
50-
"src/typings/cr/globals.d.ts",
51-
"src/typings/cr/test.d.ts",
52-
"src/typings/cr/tutorial.d.ts",
53-
"src/typings/es6-promise/es6-promise.d.ts",
54-
"src/typings/globals.d.ts",
55-
"src/typings/node-file-exists/index.d.ts",
56-
"src/typings/node/node.d.ts",
57-
"src/typings/prompt/prompt.d.ts",
58-
"src/typings/sort-package-json/index.d.ts",
59-
"src/typings/tsd.d.ts",
60-
"src/update/index.ts",
61-
"src/validate/name.ts"
62-
],
63-
"exclude": [
64-
"node_modules"
65-
],
66-
"atom": {
67-
"rewriteTsconfig": true
68-
}
2+
"compilerOptions": {
3+
"target": "ES5",
4+
"module": "commonjs",
5+
"removeComments": true,
6+
"noResolve": true,
7+
"outDir": "lib"
8+
},
9+
"compileOnSave": true,
10+
"buildOnSave": true,
11+
"filesGlob": [
12+
"src/*.ts",
13+
"src/**/*.ts"
14+
],
15+
"files": [
16+
"src/cli.ts",
17+
"src/index.ts",
18+
"src/result.ts",
19+
"src/build/index.ts",
20+
"src/build/lint.ts",
21+
"src/build/parser/actions.ts",
22+
"src/build/parser/cleanup.ts",
23+
"src/build/parser/import.ts",
24+
"src/build/parser/info.ts",
25+
"src/build/parser/match.ts",
26+
"src/build/parser/page.ts",
27+
"src/build/parser/settings.ts",
28+
"src/build/parser/task.ts",
29+
"src/build/readme.ts",
30+
"src/build/validators.ts",
31+
"src/create/index.ts",
32+
"src/create/validate.ts",
33+
"src/create/write-demo.ts",
34+
"src/packageJson/get.ts",
35+
"src/publish/index.ts",
36+
"src/publish/validate.ts",
37+
"src/search/index.ts",
38+
"src/search/validate.ts",
39+
"src/tutorials/find-tutorials.ts",
40+
"src/tutorials/index.ts",
41+
"src/tutorials/is-tutorial.ts",
42+
"src/tutorials/update.ts",
43+
"src/typings/atom-plugin-command-line/index.d.ts",
44+
"src/typings/chalk/chalk.d.ts",
45+
"src/typings/commander/commander.d.ts",
46+
"src/typings/cr.d.ts",
47+
"src/typings/cr/cli.d.ts",
48+
"src/typings/cr/core.d.ts",
49+
"src/typings/cr/cr.d.ts",
50+
"src/typings/cr/globals.d.ts",
51+
"src/typings/cr/test.d.ts",
52+
"src/typings/cr/tutorial.d.ts",
53+
"src/typings/es6-promise/es6-promise.d.ts",
54+
"src/typings/globals.d.ts",
55+
"src/typings/node-file-exists/index.d.ts",
56+
"src/typings/node/node.d.ts",
57+
"src/typings/prompt/prompt.d.ts",
58+
"src/typings/sort-package-json/index.d.ts",
59+
"src/typings/tsd.d.ts",
60+
"src/update/index.ts",
61+
"src/validate/packageJson.ts"
62+
],
63+
"exclude": [
64+
"node_modules"
65+
],
66+
"atom": {
67+
"rewriteTsconfig": true
68+
}
6969
}

0 commit comments

Comments
 (0)
0