UNPKG

5.34 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _Schema = require('./Schema');
8
9var _Schema2 = _interopRequireDefault(_Schema);
10
11var _Error = require('../Error');
12
13var _Error2 = _interopRequireDefault(_Error);
14
15var _Reference = require('../Reference');
16
17var _Reference2 = _interopRequireDefault(_Reference);
18
19function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21class AnySchema extends _Schema2.default {
22 constructor(base) {
23 super(base);
24
25 let raw = this._rules.descriptor.pop();
26 this._rules.descriptor.push(this._allowDescriptor, raw);
27 raw = this._rules.validator.pop();
28 this._rules.validator.push(this._allowValidator, raw);
29 }
30
31 allow(...values) {
32 const set = this._setting;
33 const value = values.reduce((acc, val) => acc.concat(val), []);
34 if (value.length === 1 && value[0] === undefined) delete set.allow;else if (value.length === 1 && value[0] instanceof _Reference2.default) set.allow = value[0];else {
35 set.allow = new Set();
36 var _iteratorNormalCompletion = true;
37 var _didIteratorError = false;
38 var _iteratorError = undefined;
39
40 try {
41 for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
42 const e = _step.value;
43
44 if (value === undefined) set.required = false;
45 set.allow.add(e);
46 if (set.deny) set.deny.delete(e);
47 }
48 } catch (err) {
49 _didIteratorError = true;
50 _iteratorError = err;
51 } finally {
52 try {
53 if (!_iteratorNormalCompletion && _iterator.return) {
54 _iterator.return();
55 }
56 } finally {
57 if (_didIteratorError) {
58 throw _iteratorError;
59 }
60 }
61 }
62 }
63 return this;
64 }
65 deny(...values) {
66 const set = this._setting;
67 const value = values.reduce((acc, val) => acc.concat(val), []);
68 if (value.length === 1 && value[0] === undefined) delete set.deny;else if (value.length === 1 && value[0] instanceof _Reference2.default) set.deny = value[0];else {
69 set.deny = new Set();
70 var _iteratorNormalCompletion2 = true;
71 var _didIteratorError2 = false;
72 var _iteratorError2 = undefined;
73
74 try {
75 for (var _iterator2 = value[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
76 const e = _step2.value;
77
78 if (value === undefined) set.required = true;
79 set.deny.add(e);
80 if (set.allow) set.allow.delete(e);
81 }
82 } catch (err) {
83 _didIteratorError2 = true;
84 _iteratorError2 = err;
85 } finally {
86 try {
87 if (!_iteratorNormalCompletion2 && _iterator2.return) {
88 _iterator2.return();
89 }
90 } finally {
91 if (_didIteratorError2) {
92 throw _iteratorError2;
93 }
94 }
95 }
96 }
97 return this;
98 }
99
100 valid(value) {
101 const set = this._setting;
102 if (value === undefined) set.required = false;else if (set.allow instanceof _Reference2.default) {
103 throw new Error('No single value if complete allow() list is set as reference.');
104 } else {
105 if (!set.allow) set.allow = new Set();
106 set.allow.add(value);
107 if (set.deny && !(set.deny instanceof _Reference2.default)) set.deny.delete(value);
108 }
109 return this;
110 }
111 invalid(value) {
112 const set = this._setting;
113 if (value === undefined) set.required = true;else if (set.deny instanceof _Reference2.default) {
114 throw new Error('No single value if complete deny() list is set as reference.');
115 } else {
116 if (!set.deny) set.deny = new Set();
117 set.deny.add(value);
118 if (set.allow && !(set.allow instanceof _Reference2.default)) set.allow.delete(value);
119 }
120 return this;
121 }
122
123 _allowDescriptor() {
124 const set = this._setting;
125 let msg = '';
126 if (set.deny instanceof _Reference2.default) {
127 msg += `The values within ${set.deny.description} are not allowed. `;
128 } else if (set.deny && set.deny.size) {
129 msg += `The values ${Array.from(set.deny).join(', ').replace(/(.*),/, '$1 and')} \
130are not allowed. `;
131 }
132 if (set.allow instanceof _Reference2.default) {
133 msg += `Only the values within ${set.allow.description} are allowed. `;
134 } else if (set.allow && set.allow.size) {
135 msg += `Only the values ${Array.from(set.allow).join(', ').replace(/(.*),/, '$1 and')} \
136are allowed. `;
137 }
138 return msg.length ? `${msg.trim()}\n` : '';
139 }
140
141 _allowValidator(data) {
142 const check = this._check;
143 this._checkArray('allow');
144 this._checkArray('deny');
145
146 const datastring = JSON.stringify(data.value);
147 if (check.deny && check.deny.length && check.deny.filter(e => datastring === JSON.stringify(e)).length) {
148 return Promise.reject(new _Error2.default(this, data, 'Element found in blacklist (denyed item).'));
149 }
150
151 if (check.allow && check.allow.length && check.allow.filter(e => datastring === JSON.stringify(e)).length === 0) {
152 return Promise.reject(new _Error2.default(this, data, 'Element not in whitelist (allowed item).'));
153 }
154
155 return Promise.resolve();
156 }
157}
158
159exports.default = AnySchema;
\No newline at end of file