1 | ;
|
2 |
|
3 | var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
4 |
|
5 | var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
6 |
|
7 | var _getIterator2 = require('babel-runtime/core-js/get-iterator');
|
8 |
|
9 | var _getIterator3 = _interopRequireDefault(_getIterator2);
|
10 |
|
11 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
12 |
|
13 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
14 |
|
15 | var _createClass2 = require('babel-runtime/helpers/createClass');
|
16 |
|
17 | var _createClass3 = _interopRequireDefault(_createClass2);
|
18 |
|
19 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
20 |
|
21 | var ChatServiceError = require('./ChatServiceError');
|
22 | var FastMap = require('collections/fast-map');
|
23 | var Promise = require('bluebird');
|
24 | var _ = require('lodash');
|
25 | var check = require('check-types');
|
26 |
|
27 | var _require = require('./utils');
|
28 |
|
29 | var possiblyCallback = _require.possiblyCallback;
|
30 |
|
31 | // Commands arguments type and count validation.
|
32 |
|
33 | var ArgumentsValidator = function () {
|
34 | function ArgumentsValidator(server) {
|
35 | (0, _classCallCheck3.default)(this, ArgumentsValidator);
|
36 |
|
37 | this.server = server;
|
38 | this.checkers = new FastMap();
|
39 | this.directMessagesChecker = this.server.directMessagesChecker;
|
40 | this.roomMessagesChecker = this.server.roomMessagesChecker;
|
41 | this.customCheckers = {
|
42 | directMessage: [null, this.directMessagesChecker],
|
43 | roomMessage: [null, this.roomMessagesChecker]
|
44 | };
|
45 | var commands = this.server.rpcRequestsNames;
|
46 | var _iteratorNormalCompletion = true;
|
47 | var _didIteratorError = false;
|
48 | var _iteratorError = undefined;
|
49 |
|
50 | try {
|
51 | for (var _iterator = (0, _getIterator3.default)(commands), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
52 | var cmd = _step.value;
|
53 |
|
54 | this.checkers.set(cmd, this[cmd]());
|
55 | }
|
56 | } catch (err) {
|
57 | _didIteratorError = true;
|
58 | _iteratorError = err;
|
59 | } finally {
|
60 | try {
|
61 | if (!_iteratorNormalCompletion && _iterator.return) {
|
62 | _iterator.return();
|
63 | }
|
64 | } finally {
|
65 | if (_didIteratorError) {
|
66 | throw _iteratorError;
|
67 | }
|
68 | }
|
69 | }
|
70 | }
|
71 |
|
72 | (0, _createClass3.default)(ArgumentsValidator, [{
|
73 | key: 'checkArguments',
|
74 | value: function checkArguments(name) {
|
75 | var _this = this;
|
76 |
|
77 | for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
78 | args[_key - 1] = arguments[_key];
|
79 | }
|
80 |
|
81 | var _possiblyCallback = possiblyCallback(args);
|
82 |
|
83 | var _possiblyCallback2 = (0, _slicedToArray3.default)(_possiblyCallback, 2);
|
84 |
|
85 | var nargs = _possiblyCallback2[0];
|
86 | var cb = _possiblyCallback2[1];
|
87 |
|
88 | return Promise.try(function () {
|
89 | var checkers = _this.checkers.get(name);
|
90 | if (!checkers) {
|
91 | var _error = new ChatServiceError('noCommand', name);
|
92 | return Promise.reject(_error);
|
93 | }
|
94 | var error = _this.checkTypes(checkers, nargs);
|
95 | if (error) {
|
96 | return Promise.reject(error);
|
97 | }
|
98 | var customCheckers = _this.customCheckers[name] || [];
|
99 | return Promise.each(customCheckers, function (checker, idx) {
|
100 | if (checker) {
|
101 | return Promise.fromCallback(function (fn) {
|
102 | return checker(nargs[idx], fn);
|
103 | });
|
104 | } else {
|
105 | return Promise.resolve();
|
106 | }
|
107 | }).return();
|
108 | }).asCallback(cb);
|
109 | }
|
110 | }, {
|
111 | key: 'getArgsCount',
|
112 | value: function getArgsCount(name) {
|
113 | var checker = this.checkers.get(name);
|
114 | return checker ? checker.length : 0;
|
115 | }
|
116 | }, {
|
117 | key: 'splitArguments',
|
118 | value: function splitArguments(name, oargs) {
|
119 | var nargs = this.getArgsCount(name);
|
120 | var args = _.slice(oargs, 0, nargs);
|
121 | var restArgs = _.slice(oargs, nargs);
|
122 | return { args: args, restArgs: restArgs };
|
123 | }
|
124 | }, {
|
125 | key: 'checkMessage',
|
126 | value: function checkMessage(msg) {
|
127 | return check.object(msg) && check.string(msg.textMessage) && _.keys(msg).length === 1;
|
128 | }
|
129 | }, {
|
130 | key: 'checkObject',
|
131 | value: function checkObject(obj) {
|
132 | return check.object(obj);
|
133 | }
|
134 | }, {
|
135 | key: 'checkTypes',
|
136 | value: function checkTypes(checkers, args) {
|
137 | if (args.length !== checkers.length) {
|
138 | return new ChatServiceError('wrongArgumentsCount', checkers.length, args.length);
|
139 | }
|
140 | for (var idx = 0; idx < checkers.length; idx++) {
|
141 | var checker = checkers[idx];
|
142 | if (!checker(args[idx])) {
|
143 | return new ChatServiceError('badArgument', idx, args[idx]);
|
144 | }
|
145 | }
|
146 | return null;
|
147 | }
|
148 | }, {
|
149 | key: 'directAddToList',
|
150 | value: function directAddToList(listName, userNames) {
|
151 | return [check.string, check.array.of.string];
|
152 | }
|
153 | }, {
|
154 | key: 'directGetAccessList',
|
155 | value: function directGetAccessList(listName) {
|
156 | return [check.string];
|
157 | }
|
158 | }, {
|
159 | key: 'directGetWhitelistMode',
|
160 | value: function directGetWhitelistMode() {
|
161 | return [];
|
162 | }
|
163 | }, {
|
164 | key: 'directMessage',
|
165 | value: function directMessage(toUser, msg) {
|
166 | return [check.string, this.directMessagesChecker ? this.checkObject : this.checkMessage];
|
167 | }
|
168 | }, {
|
169 | key: 'directRemoveFromList',
|
170 | value: function directRemoveFromList(listName, userNames) {
|
171 | return [check.string, check.array.of.string];
|
172 | }
|
173 | }, {
|
174 | key: 'directSetWhitelistMode',
|
175 | value: function directSetWhitelistMode(mode) {
|
176 | return [check.boolean];
|
177 | }
|
178 | }, {
|
179 | key: 'listOwnSockets',
|
180 | value: function listOwnSockets() {
|
181 | return [];
|
182 | }
|
183 | }, {
|
184 | key: 'roomAddToList',
|
185 | value: function roomAddToList(roomName, listName, userNames) {
|
186 | return [check.string, check.string, check.array.of.string];
|
187 | }
|
188 | }, {
|
189 | key: 'roomCreate',
|
190 | value: function roomCreate(roomName, mode) {
|
191 | return [check.string, check.boolean];
|
192 | }
|
193 | }, {
|
194 | key: 'roomDelete',
|
195 | value: function roomDelete(roomName) {
|
196 | return [check.string];
|
197 | }
|
198 | }, {
|
199 | key: 'roomGetAccessList',
|
200 | value: function roomGetAccessList(roomName, listName) {
|
201 | return [check.string, check.string];
|
202 | }
|
203 | }, {
|
204 | key: 'roomGetOwner',
|
205 | value: function roomGetOwner(roomName) {
|
206 | return [check.string];
|
207 | }
|
208 | }, {
|
209 | key: 'roomGetWhitelistMode',
|
210 | value: function roomGetWhitelistMode(roomName) {
|
211 | return [check.string];
|
212 | }
|
213 | }, {
|
214 | key: 'roomRecentHistory',
|
215 | value: function roomRecentHistory(roomName) {
|
216 | return [check.string];
|
217 | }
|
218 | }, {
|
219 | key: 'roomHistoryGet',
|
220 | value: function roomHistoryGet(roomName, id, limit) {
|
221 | return [check.string, function (str) {
|
222 | return check.greaterOrEqual(str, 0);
|
223 | }, function (str) {
|
224 | return check.greaterOrEqual(str, 1);
|
225 | }];
|
226 | }
|
227 | }, {
|
228 | key: 'roomHistoryInfo',
|
229 | value: function roomHistoryInfo(roomName) {
|
230 | return [check.string];
|
231 | }
|
232 | }, {
|
233 | key: 'roomJoin',
|
234 | value: function roomJoin(roomName) {
|
235 | return [check.string];
|
236 | }
|
237 | }, {
|
238 | key: 'roomLeave',
|
239 | value: function roomLeave(roomName) {
|
240 | return [check.string];
|
241 | }
|
242 | }, {
|
243 | key: 'roomMessage',
|
244 | value: function roomMessage(roomName, msg) {
|
245 | return [check.string, this.roomMessagesChecker ? this.checkObject : this.checkMessage];
|
246 | }
|
247 | }, {
|
248 | key: 'roomNotificationsInfo',
|
249 | value: function roomNotificationsInfo(roomName) {
|
250 | return [check.string];
|
251 | }
|
252 | }, {
|
253 | key: 'roomRemoveFromList',
|
254 | value: function roomRemoveFromList(roomName, listName, userNames) {
|
255 | return [check.string, check.string, check.array.of.string];
|
256 | }
|
257 | }, {
|
258 | key: 'roomSetWhitelistMode',
|
259 | value: function roomSetWhitelistMode(roomName, mode) {
|
260 | return [check.string, check.boolean];
|
261 | }
|
262 | }, {
|
263 | key: 'roomUserSeen',
|
264 | value: function roomUserSeen(roomName, userName) {
|
265 | return [check.string, check.string];
|
266 | }
|
267 | }, {
|
268 | key: 'systemMessage',
|
269 | value: function systemMessage(data) {
|
270 | return [function () {
|
271 | return true;
|
272 | }];
|
273 | }
|
274 | }]);
|
275 | return ArgumentsValidator;
|
276 | }();
|
277 |
|
278 | module.exports = ArgumentsValidator;
|
279 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Bcmd1bWVudHNWYWxpZGF0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTSxtQkFBbUIsUUFBUSxvQkFBUixDQUF6QjtBQUNBLElBQU0sVUFBVSxRQUFRLHNCQUFSLENBQWhCO0FBQ0EsSUFBTSxVQUFVLFFBQVEsVUFBUixDQUFoQjtBQUNBLElBQU0sSUFBSSxRQUFRLFFBQVIsQ0FBVjtBQUNBLElBQU0sUUFBUSxRQUFRLGFBQVIsQ0FBZDs7ZUFDNkIsUUFBUSxTQUFSLEM7O0lBQXJCLGdCLFlBQUEsZ0I7O0FBRVI7O0lBQ00sa0I7QUFFSiw4QkFBYSxNQUFiLEVBQXFCO0FBQUE7O0FBQ25CLFNBQUssTUFBTCxHQUFjLE1BQWQ7QUFDQSxTQUFLLFFBQUwsR0FBZ0IsSUFBSSxPQUFKLEVBQWhCO0FBQ0EsU0FBSyxxQkFBTCxHQUE2QixLQUFLLE1BQUwsQ0FBWSxxQkFBekM7QUFDQSxTQUFLLG1CQUFMLEdBQTJCLEtBQUssTUFBTCxDQUFZLG1CQUF2QztBQUNBLFNBQUssY0FBTCxHQUFzQjtBQUNwQixxQkFBZSxDQUFFLElBQUYsRUFBUSxLQUFLLHFCQUFiLENBREs7QUFFcEIsbUJBQWEsQ0FBRSxJQUFGLEVBQVEsS0FBSyxtQkFBYjtBQUZPLEtBQXRCO0FBSUEsUUFBSSxXQUFXLEtBQUssTUFBTCxDQUFZLGdCQUEzQjtBQVRtQjtBQUFBO0FBQUE7O0FBQUE7QUFVbkIsc0RBQWdCLFFBQWhCLDRHQUEwQjtBQUFBLFlBQWpCLEdBQWlCOztBQUN4QixhQUFLLFFBQUwsQ0FBYyxHQUFkLENBQWtCLEdBQWxCLEVBQXVCLEtBQUssR0FBTCxHQUF2QjtBQUNEO0FBWmtCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhcEI7Ozs7bUNBRWUsSSxFQUFlO0FBQUE7O0FBQUEsd0NBQU4sSUFBTTtBQUFOLFlBQU07QUFB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QSxlQUFPLE1BQU0sY0FBTixDQUFxQixHQUFyQixFQUEwQixDQUExQixDQUFQO0FBQUEsT0FISyxDQUFQO0FBS0Q7OztvQ0FFZ0IsUSxFQUFVO0FBQ3pCLGFBQU8sQ0FDTCxNQUFNLE1BREQsQ0FBUDtBQUdEOzs7NkJBRVMsUSxFQUFVO0FBQ2xCLGFBQU8sQ0FDTCxNQUFNLE1BREQsQ0FBUDtBQUdEOzs7OEJBRVUsUSxFQUFVO0FBQ25CLGFBQU8sQ0FDTCxNQUFNLE1BREQsQ0FBUDtBQUdEOzs7Z0NBRVksUSxFQUFVLEcsRUFBSztBQUMxQixhQUFPLENBQ0wsTUFBTSxNQURELEVBRUwsS0FBSyxtQkFBTCxHQUEyQixLQUFLLFdBQWhDLEdBQThDLEtBQUssWUFGOUMsQ0FBUDtBQUlEOzs7MENBRXNCLFEsRUFBVTtBQUMvQixhQUFPLENBQ0wsTUFBTSxNQURELENBQVA7QUFHRDs7O3VDQUVtQixRLEVBQVUsUSxFQUFVLFMsRUFBVztBQUNqRCxhQUFPLENBQ0wsTUFBTSxNQURELEVBRUwsTUFBTSxNQUZELEVBR0wsTUFBTSxLQUFOLENBQVksRUFBWixDQUFlLE1BSFYsQ0FBUDtBQUtEOzs7eUNBRXFCLFEsRUFBVSxJLEVBQU07QUFDcEMsYUFBTyxDQUNMLE1BQU0sTUFERCxFQUVMLE1BQU0sT0FGRCxDQUFQO0FBSUQ7OztpQ0FFYSxRLEVBQVUsUSxFQUFVO0FBQ2hDLGFBQU8sQ0FDTCxNQUFNLE1BREQsRUFFTCxNQUFNLE1BRkQsQ0FBUDtBQUlEOzs7a0NBRWMsSSxFQUFNO0FBQ25CLGFBQU8sQ0FDTDtBQUFBLGVBQU0sSUFBTjtBQUFBLE9BREssQ0FBUDtBQUdEOzs7OztBQUdILE9BQU8sT0FBUCxHQUFpQixrQkFBakIiLCJmaWxlIjoiQXJndW1lbnRzVmFsaWRhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENoYXRTZXJ2aWNlRXJyb3IgPSByZXF1aXJlKCcuL0NoYXRTZXJ2aWNlRXJyb3InKVxuY29uc3QgRmFzdE1hcCA9IHJlcXVpcmUoJ2NvbGxlY3Rpb25zL2Zhc3QtbWFwJylcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCdibHVlYmlyZCcpXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJylcbmNvbnN0IGNoZWNrID0gcmVxdWlyZSgnY2hlY2stdHlwZXMnKVxuY29uc3QgeyBwb3NzaWJseUNhbGxiYWNrIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcblxuLy8gQ29tbWFuZHMgYXJndW1lbnRzIHR5cGUgYW5kIGNvdW50IHZhbGlkYXRpb24uXG5jbGFzcyBBcmd1bWVudHNWYWxpZGF0b3Ige1xuXG4gIGNvbnN0cnVjdG9yIChzZXJ2ZXIpIHtcbiAgICB0aGlzLnNlcnZlciA9IHNlcnZlclxuICAgIHRoaXMuY2hlY2tlcnMgPSBuZXcgRmFzdE1hcCgpXG4gICAgdGhpcy5kaXJlY3RNZXNzYWdlc0NoZWNrZXIgPSB0aGlzLnNlcnZlci5kaXJlY3RNZXNzYWdlc0NoZWNrZXJcbiAgICB0aGlzLnJvb21NZXNzYWdlc0NoZWNrZXIgPSB0aGlzLnNlcnZlci5yb29tTWVzc2FnZXNDaGVja2VyXG4gICAgdGhpcy5jdXN0b21DaGVja2VycyA9IHtcbiAgICAgIGRpcmVjdE1lc3NhZ2U6IFsgbnVsbCwgdGhpcy5kaXJlY3RNZXNzYWdlc0NoZWNrZXIgXSxcbiAgICAgIHJvb21NZXNzYWdlOiBbIG51bGwsIHRoaXMucm9vbU1lc3NhZ2VzQ2hlY2tlciBdXG4gICAgfVxuICAgIGxldCBjb21tYW5kcyA9IHRoaXMuc2VydmVyLnJwY1JlcXVlc3RzTmFtZXNcbiAgICBmb3IgKGxldCBjbWQgb2YgY29tbWFuZHMpIHtcbiAgICAgIHRoaXMuY2hlY2tlcnMuc2V0KGNtZCwgdGhpc1tjbWRdKCkpXG4gICAgfVxuICB9XG5cbiAgY2hlY2tBcmd1bWVudHMgKG5hbWUsIC4uLmFyZ3MpIHtcbiAgICBsZXQgW25hcmdzLCBjYl0gPSBwb3NzaWJseUNhbGxiYWNrKGFyZ3MpXG4gICAgcmV0dXJuIFByb21pc2UudHJ5KCgpID0+IHtcbiAgICAgIGxldCBjaGVja2VycyA9IHRoaXMuY2hlY2tlcnMuZ2V0KG5hbWUpXG4gICAgICBpZiAoIWNoZWNrZXJzKSB7XG4gICAgICAgIGxldCBlcnJvciA9IG5ldyBDaGF0U2VydmljZUVycm9yKCdub0NvbW1hbmQnLCBuYW1lKVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICB9XG4gICAgICBsZXQgZXJyb3IgPSB0aGlzLmNoZWNrVHlwZXMoY2hlY2tlcnMsIG5hcmdzKVxuICAgICAgaWYgKGVycm9yKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcikgfVxuICAgICAgbGV0IGN1c3RvbUNoZWNrZXJzID0gdGhpcy5jdXN0b21DaGVja2Vyc1tuYW1lXSB8fCBbXVxuICAgICAgcmV0dXJuIFByb21pc2UuZWFjaChjdXN0b21DaGVja2VycywgKGNoZWNrZXIsIGlkeCkgPT4ge1xuICAgICAgICBpZiAoY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLmZyb21DYWxsYmFjayhmbiA9PiBjaGVja2VyKG5hcmdzW2lkeF0sIGZuKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgfVxuICAgICAgfSkucmV0dXJuKClcbiAgICB9KS5hc0NhbGxiYWNrKGNiKVxuICB9XG5cbiAgZ2V0QXJnc0NvdW50IChuYW1lKSB7XG4gICAgbGV0IGNoZWNrZXIgPSB0aGlzLmNoZWNrZXJzLmdldChuYW1lKVxuICAgIHJldHVybiBjaGVja2VyID8gY2hlY2tlci5sZW5ndGggOiAwXG4gIH1cblxuICBzcGxpdEFyZ3VtZW50cyAobmFtZSwgb2FyZ3MpIHtcbiAgICBsZXQgbmFyZ3MgPSB0aGlzLmdldEFyZ3NDb3VudChuYW1lKVxuICAgIGxldCBhcmdzID0gXy5zbGljZShvYXJncywgMCwgbmFyZ3MpXG4gICAgbGV0IHJlc3RBcmdzID0gXy5zbGljZShvYXJncywgbmFyZ3MpXG4gICAgcmV0dXJuIHthcmdzLCByZXN0QXJnc31cbiAgfVxuXG4gIGNoZWNrTWVzc2FnZSAobXNnKSB7XG4gICAgcmV0dXJuIGNoZWNrLm9iamVjdChtc2cpICYmXG4gICAgICBjaGVjay5zdHJpbmcobXNnLnRleHRNZXNzYWdlKSAmJlxuICAgICAgXy5rZXlzKG1zZykubGVuZ3RoID09PSAxXG4gIH1cblxuICBjaGVja09iamVjdCAob2JqKSB7XG4gICAgcmV0dXJuIGNoZWNrLm9iamVjdChvYmopXG4gIH1cblxuICBjaGVja1R5cGVzIChjaGVja2VycywgYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gY2hlY2tlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IENoYXRTZXJ2aWNlRXJyb3IoJ3dyb25nQXJndW1lbnRzQ291bnQnXG4gICAgICAgICwgY2hlY2tlcnMubGVuZ3RoLCBhcmdzLmxlbmd0aClcbiAgICB9XG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgY2hlY2tlcnMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgbGV0IGNoZWNrZXIgPSBjaGVja2Vyc1tpZHhdXG4gICAgICBpZiAoIWNoZWNrZXIoYXJnc1tpZHhdKSkge1xuICAgICAgICByZXR1cm4gbmV3IENoYXRTZXJ2aWNlRXJyb3IoJ2JhZEFyZ3VtZW50JywgaWR4LCBhcmdzW2lkeF0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBkaXJlY3RBZGRUb0xpc3QgKGxpc3ROYW1lLCB1c2VyTmFtZXMpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY2hlY2suc3RyaW5nLFxuICAgICAgY2hlY2suYXJyYXkub2Yuc3RyaW5nXG4gICAgXVxuICB9XG5cbiAgZGlyZWN0R2V0QWNjZXNzTGlzdCAobGlzdE5hbWUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY2hlY2suc3RyaW5nXG4gICAgXVxuICB9XG5cbiAgZGlyZWN0R2V0V2hpdGVsaXN0TW9kZSAoKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBkaXJlY3RNZXNzYWdlICh0b1VzZXIsIG1zZykge1xuICAgIHJldHVybiBbXG4gICAgICBjaGVjay5zdHJpbmcsXG4gICAgICB0aGlzLmRpcmVjdE1lc3NhZ2VzQ2hlY2tlciA/IHRoaXMuY2hlY2tPYmplY3QgOiB0aGlzLmNoZWNrTWVzc2FnZVxuICAgIF1cbiAgfVxuXG4gIGRpcmVjdFJlbW92ZUZyb21MaXN0IChsaXN0TmFtZSwgdXNlck5hbWVzKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNoZWNrLnN0cmluZyxcbiAgICAgIGNoZWNrLmFycmF5Lm9mLnN0cmluZ1xuICAgIF1cbiAgfVxuXG4gIGRpcmVjdFNldFdoaXRlbGlzdE1vZGUgKG1vZGUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY2hlY2suYm9vbGVhblxuICAgIF1cbiAgfVxuXG4gIGxpc3RPd25Tb2NrZXRzICgpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJvb21BZGRUb0xpc3QgKHJvb21OYW1lLCBsaXN0TmFtZSwgdXNlck5hbWVzKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNoZWNrLnN0cmluZyxcbiAgICAgIGNoZWNrLnN0cmluZyxcbiAgICAgIGNoZWNrLmFycmF5Lm9mLnN0cmluZ1xuICAgIF1cbiAgfVxuXG4gIHJvb21DcmVhdGUgKHJvb21OYW1lLCBtb2RlKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNoZWNrLnN0cmluZyxcbiAgICAgIGNoZWNrLmJvb2xlYW5cbiAgICBdXG4gIH1cblxuICByb29tRGVsZXRlIChyb29tTmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICBjaGVjay5zdHJpbmdcbiAgICBdXG4gIH1cblxuICByb29tR2V0QWNjZXNzTGlzdCAocm9vbU5hbWUsIGxpc3ROYW1lKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNoZWNrLnN0cmluZyxcbiAgICAgIGNoZWNrLnN0cmluZ1xuICAgIF1cbiAgfVxuXG4gIHJvb21HZXRPd25lciAocm9vbU5hbWUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY2hlY2suc3RyaW5nXG4gICAgXVxuICB9XG5cbiAgcm9vbUdldFdoaXRlbGlzdE1vZGUgKHJvb21OYW1lKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNoZWNrLnN0cmluZ1xuICAgIF1cbiAgfVxuXG4gIHJvb21SZWNlbnRIaXN0b3J5IChyb29tTmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICBjaGVjay5zdHJpbmdcbiAgICBdXG4gIH1cblxuICByb29tSGlzdG9yeUdldCAocm9vbU5hbWUsIGlkLCBsaW1pdCkge1xuICAgIHJldHVybiBbXG4gICAgICBjaGVjay5zdHJpbmcsXG4gICAgICBzdHIgPT4gY2hlY2suZ3JlYXRlck9yRXF1YWwoc3RyLCAwKSxcbiAgICAgIHN0ciA9PiBjaGVjay5ncmVhdGVyT3JFcXVhbChzdHIsIDEpXG4gICAgXVxuICB9XG5cbiAgcm9vbUhpc3RvcnlJbmZvIChyb29tTmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICBjaGVjay5zdHJpbmdcbiAgICBdXG4gIH1cblxuICByb29tSm9pbiAocm9vbU5hbWUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY2hlY2suc3RyaW5nXG4gICAgXVxuICB9XG5cbiAgcm9vbUxlYXZlIChyb29tTmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICBjaGVjay5zdHJpbmdcbiAgICBdXG4gIH1cblxuICByb29tTWVzc2FnZSAocm9vbU5hbWUsIG1zZykge1xuICAgIHJldHVybiBbXG4gICAgICBjaGVjay5zdHJpbmcsXG4gICAgICB0aGlzLnJvb21NZXNzYWdlc0NoZWNrZXIgPyB0aGlzLmNoZWNrT2JqZWN0IDogdGhpcy5jaGVja01lc3NhZ2VcbiAgICBdXG4gIH1cblxuICByb29tTm90aWZpY2F0aW9uc0luZm8gKHJvb21OYW1lKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNoZWNrLnN0cmluZ1xuICAgIF1cbiAgfVxuXG4gIHJvb21SZW1vdmVGcm9tTGlzdCAocm9vbU5hbWUsIGxpc3ROYW1lLCB1c2VyTmFtZXMpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY2hlY2suc3RyaW5nLFxuICAgICAgY2hlY2suc3RyaW5nLFxuICAgICAgY2hlY2suYXJyYXkub2Yuc3RyaW5nXG4gICAgXVxuICB9XG5cbiAgcm9vbVNldFdoaXRlbGlzdE1vZGUgKHJvb21OYW1lLCBtb2RlKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGNoZWNrLnN0cmluZyxcbiAgICAgIGNoZWNrLmJvb2xlYW5cbiAgICBdXG4gIH1cblxuICByb29tVXNlclNlZW4gKHJvb21OYW1lLCB1c2VyTmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICBjaGVjay5zdHJpbmcsXG4gICAgICBjaGVjay5zdHJpbmdcbiAgICBdXG4gIH1cblxuICBzeXN0ZW1NZXNzYWdlIChkYXRhKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICgpID0+IHRydWVcbiAgICBdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBcmd1bWVudHNWYWxpZGF0b3JcbiJdfQ== |
\ | No newline at end of file |