UNPKG

9.72 kBJavaScriptView Raw
1'use strict';
2
3var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
4
5var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
6
7function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
9var ChatServiceError = require('./ChatServiceError');
10var Promise = require('bluebird');
11var _ = require('lodash');
12var util = require('util');
13
14var debuglog = util.debuglog('ChatService');
15
16var asyncLimit = 32;
17
18var nameChecker = /^[^\u0000-\u001F:{}\u007F]+$/;
19
20function possiblyCallback(args) {
21 var cb = _.last(args);
22 if (_.isFunction(cb)) {
23 args = _.slice(args, 0, -1);
24 } else {
25 cb = null;
26 }
27 return [args, cb];
28}
29
30function checkNameSymbols(name) {
31 if (_.isString(name) && nameChecker.test(name)) {
32 return Promise.resolve();
33 } else {
34 return Promise.reject(new ChatServiceError('invalidName', name));
35 }
36}
37
38function execHook(hook) {
39 if (!hook) {
40 return Promise.resolve();
41 }
42 var cb = void 0,
43 callbackResults = void 0,
44 hasResults = void 0;
45 var wrapper = function wrapper() {
46 hasResults = true;
47
48 for (var _len2 = arguments.length, data = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
49 data[_key2] = arguments[_key2];
50 }
51
52 callbackResults = data;
53 if (cb) {
54 cb.apply(undefined, data);
55 }
56 };
57
58 for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
59 args[_key - 1] = arguments[_key];
60 }
61
62 var res = hook.apply(undefined, args.concat([wrapper]));
63 if (hasResults) {
64 return Promise.fromCallback(function (fn) {
65 fn.apply(undefined, (0, _toConsumableArray3.default)(callbackResults));
66 }, { multiArgs: true });
67 } else if (res != null && typeof res.then === 'function') {
68 return res;
69 } else {
70 return Promise.fromCallback(function (fn) {
71 cb = fn;
72 }, { multiArgs: true });
73 }
74}
75
76function run(self, gen) {
77 return Promise.coroutine(gen).call(self);
78}
79
80function logError(error) {
81 var isServiceError = error instanceof ChatServiceError;
82 if (!isServiceError) {
83 debuglog(error);
84 }
85 return Promise.reject(error);
86}
87
88function convertError(error, useRawErrorObjects) {
89 if (error != null) {
90 if (!useRawErrorObjects) {
91 return error.toString();
92 }
93 var isServiceError = error instanceof ChatServiceError;
94 if (!isServiceError) {
95 return new ChatServiceError('internalError', error.toString());
96 }
97 }
98 return error;
99}
100
101function resultsTransform(useRawErrorObjects, cb) {
102 if (!cb) {
103 return null;
104 }
105 return function (error, data) {
106 error = convertError(error, useRawErrorObjects);
107 if (error == null) {
108 error = null;
109 }
110 if (data == null) {
111 data = null;
112 }
113
114 for (var _len3 = arguments.length, rest = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
115 rest[_key3 - 2] = arguments[_key3];
116 }
117
118 return cb.apply(undefined, [error, data].concat(rest));
119 };
120}
121
122module.exports = {
123 asyncLimit: asyncLimit,
124 convertError: convertError,
125 checkNameSymbols: checkNameSymbols,
126 execHook: execHook,
127 logError: logError,
128 possiblyCallback: possiblyCallback,
129 resultsTransform: resultsTransform,
130 run: run
131};
132//# sourceMappingURL=data:application/json;base64,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QUMsa0JBQUwsRUFBeUI7QUFDdkIsYUFBTyxNQUFNLFFBQU4sRUFBUDtBQUNEO0FBQ0QsUUFBSSxpQkFBaUIsaUJBQWlCLGdCQUF0QztBQUNBLFFBQUksQ0FBQyxjQUFMLEVBQXFCO0FBQ25CLGFBQU8sSUFBSSxnQkFBSixDQUFxQixlQUFyQixFQUFzQyxNQUFNLFFBQU4sRUFBdEMsQ0FBUDtBQUNEO0FBQ0Y7QUFDRCxTQUFPLEtBQVA7QUFDRDs7QUFFRCxTQUFTLGdCQUFULENBQTJCLGtCQUEzQixFQUErQyxFQUEvQyxFQUFtRDtBQUNqRCxNQUFJLENBQUMsRUFBTCxFQUFTO0FBQUUsV0FBTyxJQUFQO0FBQWE7QUFDeEIsU0FBTyxVQUFVLEtBQVYsRUFBaUIsSUFBakIsRUFBZ0M7QUFDckMsWUFBUSxhQUFhLEtBQWIsRUFBb0Isa0JBQXBCLENBQVI7QUFDQSxRQUFJLFNBQVMsSUFBYixFQUFtQjtBQUFFLGNBQVEsSUFBUjtBQUFjO0FBQ25DLFFBQUksUUFBUSxJQUFaLEVBQWtCO0FBQUUsYUFBTyxJQUFQO0FBQWE7O0FBSEksdUNBQU4sSUFBTTtBQUFOLFVBQU07QUFBQTs7QUFJckMsV0FBTyxxQkFBRyxLQUFILEVBQVUsSUFBVixTQUFtQixJQUFuQixFQUFQO0FBQ0QsR0FMRDtBQU1EOztBQUVELE9BQU8sT0FBUCxHQUFpQjtBQUNmLHdCQURlO0FBRWYsNEJBRmU7QUFHZixvQ0FIZTtBQUlmLG9CQUplO0FBS2Ysb0JBTGU7QUFNZixvQ0FOZTtBQU9mLG9DQVBlO0FBUWY7QUFSZSxDQUFqQiIsImZpbGUiOiJ1dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBDaGF0U2VydmljZUVycm9yID0gcmVxdWlyZSgnLi9DaGF0U2VydmljZUVycm9yJylcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCdibHVlYmlyZCcpXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJylcblxubGV0IGRlYnVnbG9nID0gdXRpbC5kZWJ1Z2xvZygnQ2hhdFNlcnZpY2UnKVxuXG5sZXQgYXN5bmNMaW1pdCA9IDMyXG5cbmxldCBuYW1lQ2hlY2tlciA9IC9eW15cXHUwMDAwLVxcdTAwMUY6e31cXHUwMDdGXSskL1xuXG5mdW5jdGlvbiBwb3NzaWJseUNhbGxiYWNrIChhcmdzKSB7XG4gIGxldCBjYiA9IF8ubGFzdChhcmdzKVxuICBpZiAoXy5pc0Z1bmN0aW9uKGNiKSkge1xuICAgIGFyZ3MgPSBfLnNsaWNlKGFyZ3MsIDAsIC0xKVxuICB9IGVsc2Uge1xuICAgIGNiID0gbnVsbFxuICB9XG4gIHJldHVybiBbYXJncywgY2JdXG59XG5cbmZ1bmN0aW9uIGNoZWNrTmFtZVN5bWJvbHMgKG5hbWUpIHtcbiAgaWYgKF8uaXNTdHJpbmcobmFtZSkgJiYgbmFtZUNoZWNrZXIudGVzdChuYW1lKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQ2hhdFNlcnZpY2VFcnJvcignaW52YWxpZE5hbWUnLCBuYW1lKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBleGVjSG9vayAoaG9vaywgLi4uYXJncykge1xuICBpZiAoIWhvb2spIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpIH1cbiAgbGV0IGNiLCBjYWxsYmFja1Jlc3VsdHMsIGhhc1Jlc3VsdHNcbiAgbGV0IHdyYXBwZXIgPSBmdW5jdGlvbiAoLi4uZGF0YSkge1xuICAgIGhhc1Jlc3VsdHMgPSB0cnVlXG4gICAgY2FsbGJhY2tSZXN1bHRzID0gZGF0YVxuICAgIGlmIChjYikgeyBjYiguLi5kYXRhKSB9XG4gIH1cbiAgbGV0IHJlcyA9IGhvb2soLi4uYXJncywgd3JhcHBlcilcbiAgaWYgKGhhc1Jlc3VsdHMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5mcm9tQ2FsbGJhY2soXG4gICAgICBmbiA9PiB7IGZuKC4uLmNhbGxiYWNrUmVzdWx0cykgfSxcbiAgICAgIHttdWx0aUFyZ3M6IHRydWV9KVxuICB9IGVsc2UgaWYgKChyZXMgIT0gbnVsbCkgJiYgdHlwZW9mIHJlcy50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLmZyb21DYWxsYmFjayhmbiA9PiB7IGNiID0gZm4gfSwge211bHRpQXJnczogdHJ1ZX0pXG4gIH1cbn1cblxuZnVuY3Rpb24gcnVuIChzZWxmLCBnZW4pIHtcbiAgcmV0dXJuIFByb21pc2UuY29yb3V0aW5lKGdlbikuY2FsbChzZWxmKVxufVxuXG5mdW5jdGlvbiBsb2dFcnJvciAoZXJyb3IpIHtcbiAgbGV0IGlzU2VydmljZUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBDaGF0U2VydmljZUVycm9yXG4gIGlmICghaXNTZXJ2aWNlRXJyb3IpIHtcbiAgICBkZWJ1Z2xvZyhlcnJvcilcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRFcnJvciAoZXJyb3IsIHVzZVJhd0Vycm9yT2JqZWN0cykge1xuICBpZiAoZXJyb3IgIT0gbnVsbCkge1xuICAgIGlmICghdXNlUmF3RXJyb3JPYmplY3RzKSB7XG4gICAgICByZXR1cm4gZXJyb3IudG9TdHJpbmcoKVxuICAgIH1cbiAgICBsZXQgaXNTZXJ2aWNlRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIENoYXRTZXJ2aWNlRXJyb3JcbiAgICBpZiAoIWlzU2VydmljZUVycm9yKSB7XG4gICAgICByZXR1cm4gbmV3IENoYXRTZXJ2aWNlRXJyb3IoJ2ludGVybmFsRXJyb3InLCBlcnJvci50b1N0cmluZygpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gcmVzdWx0c1RyYW5zZm9ybSAodXNlUmF3RXJyb3JPYmplY3RzLCBjYikge1xuICBpZiAoIWNiKSB7IHJldHVybiBudWxsIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChlcnJvciwgZGF0YSwgLi4ucmVzdCkge1xuICAgIGVycm9yID0gY29udmVydEVycm9yKGVycm9yLCB1c2VSYXdFcnJvck9iamVjdHMpXG4gICAgaWYgKGVycm9yID09IG51bGwpIHsgZXJyb3IgPSBudWxsIH1cbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7IGRhdGEgPSBudWxsIH1cbiAgICByZXR1cm4gY2IoZXJyb3IsIGRhdGEsIC4uLnJlc3QpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFzeW5jTGltaXQsXG4gIGNvbnZlcnRFcnJvcixcbiAgY2hlY2tOYW1lU3ltYm9scyxcbiAgZXhlY0hvb2ssXG4gIGxvZ0Vycm9yLFxuICBwb3NzaWJseUNhbGxiYWNrLFxuICByZXN1bHRzVHJhbnNmb3JtLFxuICBydW5cbn1cbiJdfQ==
\No newline at end of file