UNPKG

1.89 kBJavaScriptView Raw
1const fs = require('fs');
2
3const {
4 isNumber,
5 toNumber,
6 isNaN,
7 isUndefined,
8 isNull,
9 isArray,
10} = require('lodash');
11
12const {
13 log,
14 faillog,
15} = require('./log');
16
17/**
18 * 生成器
19 * 调用 fn 返回 false 的话就打印错误信息 errStr 并退出进程
20 * @param {*} value 值
21 * @param {*} errStr 错误信息
22 * @param {*} fn 检验函数
23 */
24const creator = (value, errStr, fn) => {
25 if (!fn(value)) {
26 log();
27 faillog(`${errStr}`);
28 log();
29 process.exit(0);
30 }
31};
32
33module.exports = {
34 /**
35 * fn 应该返回 true, 否则会报错
36 * 用于自定义规则函数
37 */
38 sb(fn, errStr = 'fn should return true') {
39 creator(
40 fn(),
41 errStr,
42 val => val,
43 );
44 },
45
46 /**
47 * number 应该是一个数字
48 */
49 sbNumber(value, errStr = 'should be number') {
50 creator(
51 value,
52 errStr,
53 (val) => {
54 const number = toNumber(val);
55 return isNumber(number) && !isNaN(number);
56 },
57 );
58 },
59
60 /**
61 * value 应该是一个非空值(非 null/undefined)
62 */
63 sbValidValue(value, errStr = 'should be valid value') {
64 creator(
65 value,
66 errStr,
67 val => !isNull(val) && !isUndefined(val),
68 );
69 },
70
71 /**
72 * value 应该是一个存在的目录
73 */
74 sbValidDir(value, errStr = 'should be valid directory') {
75 creator(
76 value,
77 errStr,
78 dir => fs.existsSync(dir) && fs.statSync(dir).isDirectory(dir),
79 );
80 },
81
82 /**
83 * value 应该是一个有效的数组(长度不为 0 的数组)
84 */
85 sbValidArray(value, errStr = 'should be valid array') {
86 creator(
87 value,
88 errStr,
89 val => isArray(val) && val.length,
90 );
91 },
92
93 /**
94 * value 应该是一个空数组
95 */
96 sbEmptyArray(value, errStr = 'should be empty array') {
97 creator(
98 value,
99 errStr,
100 val => isArray(val) && !val.length,
101 );
102 },
103};