1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _Schema = require('./Schema');
|
8 |
|
9 | var _Schema2 = _interopRequireDefault(_Schema);
|
10 |
|
11 | var _Error = require('../Error');
|
12 |
|
13 | var _Error2 = _interopRequireDefault(_Error);
|
14 |
|
15 | var _Reference = require('../Reference');
|
16 |
|
17 | var _Reference2 = _interopRequireDefault(_Reference);
|
18 |
|
19 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
20 |
|
21 | class 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')} \
|
130 | are 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')} \
|
136 | are 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 |
|
159 | exports.default = AnySchema; |
\ | No newline at end of file |