-
-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathvalidators.js
67 lines (57 loc) · 2.74 KB
/
validators.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
'use strict';
const semver = require('semver');
const _ = require('lodash');
const NG_MODULES_DEPENDENCIES = {
'core': ['rxjs', 'zone.js'],
'common': ['core'],
'forms': ['core', 'common'],
'http': ['core', 'platform-browser', 'rxjs'],
'compiler': ['core'],
'router': ['core', 'common', 'platform-browser', 'rxjs'],
'upgrade': ['core', 'compiler', 'platform-browser', 'platform-browser-dynamic'],
'language-service': [],
'platform-browser-dynamic': ['core', 'common', 'compiler', 'platform-browser'],
'platform-browser': ['core', 'common'],
'platform-server': ['core', 'common', 'compiler', 'platform-browser'],
'platform-webworker-dynamic': ['core', 'compiler', 'platform-browser', 'platform-webworker'],
'platform-webworker': ['core', 'platform-browser'],
'animations': ['core']
};
module.exports = {
validateAuthorName: input => {
return /^[a-zA-Z0-9 -_]+$/.test(input) ? true : 'Your author name is not valid';
},
validateAuthorEmail: input => {
return /^([\w.\-_]+)?\w+@[\w-_]+(\.\w+){1,2}$/.test(input) ? true : 'Your author email is not valid';
},
validateGithubUsername: input => {
return /^[a-zA-Z0-9]+$/.test(input) ? true : 'Your github username cannot contain special characters or a blank space';
},
validateGithubRepoName: input => {
return /^[a-zA-Z0-9-_]+$/.test(input) ? true : 'Your github repository name cannot contain special characters or a blank space';
},
validateProjectName: input => {
return /^([a-zA-Z0-9-_]+)|(@[a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+)$/.test(input) ? true : 'Your project name cannot contain special characters or a blank space';
},
validateProjectVersion: input => {
return semver.valid(input) ? true : 'Your project version does not follow semantic versioning convention (eg: X.Y.Z)';
},
validateNgPrefix: input => {
return /^[a-zA-Z0-9-_]+$/.test(input) ? true : 'Your Angular prefix name cannot contain special characters or a blank space';
},
validateNgModules: selectedModules => {
if (!selectedModules || selectedModules.indexOf('core') === -1) {
return 'Your library must at least include Angular\'s "core" module';
}
let requiredModules = [...selectedModules];
// Add all dependent modules by traversing through selected modules' dependencies
for (let ngModule of selectedModules) {
requiredModules = requiredModules.concat(NG_MODULES_DEPENDENCIES[ngModule]);
}
requiredModules = _.uniq(requiredModules);
let missingModules = _.difference(requiredModules, selectedModules);
// Remove dev dependencies
_.remove(missingModules, m => m === 'rxjs' || m === 'zone.js');
return missingModules.length === 0 ? true : `The following modules must be selected as well to satisfy dependencies: ${missingModules}`;
}
};