UNPKG

2 kBJavaScriptView Raw
1const fs = require( 'fs' );
2const validator = require( 'validator' );
3const slugify = require( 'slugify' );
4const sanitize = require( './sanitize' );
5
6const validate = {
7
8 /**
9 * Check if string is a valid email address.
10 * @param {String} suspect Email.
11 * @return {Boolean}
12 */
13 email( suspect ) {
14 if ( validator.isEmail( suspect ) ) {
15 return true;
16 }
17
18 return 'Must use a valid email address.';
19 },
20
21 /**
22 * Check if string is a valid url.
23 * @param {String} suspect Url.
24 * @return {Boolean}
25 */
26 url( suspect ) {
27 if ( validator.isURL( suspect ) ) {
28 return true;
29 }
30
31 return 'Must use a valid url.';
32 },
33
34 /**
35 * Check if string is a valid directory that exists.
36 * @param {String} suspect Absolute path to a directory.
37 * @return {Boolean}
38 */
39 path( suspect ) {
40 const sanitizedSuspect = sanitize.path( suspect );
41
42 if ( fs.existsSync( sanitizedSuspect ) && ( sanitizedSuspect !== undefined ) ) {
43 return true;
44 }
45
46 return 'Must be an existing directory.';
47 },
48
49 /**
50 * Check if string is a valid projects data source (http json).
51 * @param {String} suspect Data source.
52 * @return {Boolean}
53 */
54 jsonUrl( suspect ) {
55 if ( validate.url( suspect ) && suspect.endsWith( '.json' ) ) {
56 return true;
57 }
58
59 return 'Must be a valid remote json data source. i.e. http://example.com/projects.json';
60 },
61
62 /**
63 * Check if string is a valid name to use.
64 * Require at least 3 characters after converting name to slug.
65 * @param {String} suspect
66 * @return {Boolean}
67 */
68 name( suspect ) {
69 const suspectSlug = slugify( suspect );
70 if ( suspectSlug.length >= 3 ) {
71 return true;
72 }
73
74 return 'Must be at least 3 characters.';
75 },
76
77 /**
78 * Check if string is a valid profile name.
79 * @param {String} suspect
80 * @return {Boolean}
81 */
82 profileName( suspect ) {
83 if ( validator.isAlpha( suspect ) && validator.isLowercase( suspect ) ) {
84 return true;
85 }
86
87 return 'Profile names can only contain lowercase letters.';
88 },
89
90};
91
92module.exports = validate;