UNPKG

16.6 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = exports.BotsRouter = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
14var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
16var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
18var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
20var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
21
22var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
24var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
26var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
28var _env = require("@lskjs/env");
29
30var _err = _interopRequireDefault(require("@lskjs/err"));
31
32var _module = _interopRequireDefault(require("@lskjs/module"));
33
34var _bluebird = _interopRequireDefault(require("bluebird"));
35
36var _querystring = _interopRequireDefault(require("querystring"));
37
38var _universalRouter = _interopRequireDefault(require("universal-router"));
39
40var _url = _interopRequireDefault(require("url"));
41
42function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
43
44function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
45
46function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
47
48function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
49
50var BotsRouter = /*#__PURE__*/function (_Module) {
51 (0, _inherits2["default"])(BotsRouter, _Module);
52
53 var _super = _createSuper(BotsRouter);
54
55 function BotsRouter() {
56 (0, _classCallCheck2["default"])(this, BotsRouter);
57 return _super.apply(this, arguments);
58 }
59
60 (0, _createClass2["default"])(BotsRouter, [{
61 key: "init",
62 value: // debug = true;
63 function () {
64 var _init = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
65 return _regenerator["default"].wrap(function _callee$(_context) {
66 while (1) {
67 switch (_context.prev = _context.next) {
68 case 0:
69 _context.next = 2;
70 return (0, _get2["default"])((0, _getPrototypeOf2["default"])(BotsRouter.prototype), "init", this).call(this);
71
72 case 2:
73 if (this.routes) {
74 _context.next = 5;
75 break;
76 }
77
78 this.log.warn('!routes');
79 return _context.abrupt("return");
80
81 case 5:
82 if (this.bot.client) {
83 _context.next = 8;
84 break;
85 }
86
87 this.log.warn('!client');
88 return _context.abrupt("return");
89
90 case 8:
91 if (this.bot.client.use) {
92 _context.next = 11;
93 break;
94 }
95
96 this.log.warn('!client.use');
97 return _context.abrupt("return");
98
99 case 11:
100 this.log.trace('routes', this.routes.map(function (c) {
101 return c.path;
102 }).filter(Boolean));
103 this.router = new _universalRouter["default"](this.routes);
104 this.bot.client.use(this.middleware.bind(this));
105
106 case 14:
107 case "end":
108 return _context.stop();
109 }
110 }
111 }, _callee, this);
112 }));
113
114 function init() {
115 return _init.apply(this, arguments);
116 }
117
118 return init;
119 }()
120 }, {
121 key: "middleware",
122 value: function () {
123 var _middleware = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(ctx, next) {
124 var props, res;
125 return _regenerator["default"].wrap(function _callee2$(_context2) {
126 while (1) {
127 switch (_context2.prev = _context2.next) {
128 case 0:
129 // console.log('ctx.session.nextRoute', ctx.session.nextRoute);
130 // console.log('ctx.session.nextRoute', ctx.session.defaultRoute);
131 props = this.getPathFromEvent(ctx); // console.log('routerPath', { routerPath });
132
133 _context2.next = 3;
134 return this.resolve(_objectSpread({
135 ctx: ctx
136 }, props));
137
138 case 3:
139 res = _context2.sent;
140 return _context2.abrupt("return", next(ctx));
141
142 case 5:
143 case "end":
144 return _context2.stop();
145 }
146 }
147 }, _callee2, this);
148 }));
149
150 function middleware(_x, _x2) {
151 return _middleware.apply(this, arguments);
152 }
153
154 return middleware;
155 }()
156 }, {
157 key: "parsePathnameAndQuery",
158 value: function parsePathnameAndQuery(str) {
159 var _url$parse = _url["default"].parse(str),
160 pathname = _url$parse.pathname,
161 queryString = _url$parse.query;
162
163 var query = queryString && queryString.length ? _querystring["default"].decode(queryString) : undefined;
164 return {
165 pathname: pathname,
166 query: query
167 };
168 }
169 }, {
170 key: "getPathFromEvent",
171 value: function getPathFromEvent(ctx) {
172 var _ctx$session = ctx.session,
173 session = _ctx$session === void 0 ? {} : _ctx$session;
174
175 if (this.bot.isMessageCallback(ctx)) {
176 delete session.nextRoute;
177 return this.parsePathnameAndQuery(this.bot.getMessageCallbackData(ctx));
178 }
179
180 if (this.bot.isMessageCommand(ctx)) {
181 delete session.nextRoute;
182 return this.parsePathnameAndQuery(this.bot.getMessageCommand(ctx));
183 }
184
185 if (session.nextRoute) {
186 var nextRoute = session.nextRoute;
187 delete session.nextRoute;
188 if (typeof nextRoute === 'string') return this.parsePathnameAndQuery(nextRoute);
189 return nextRoute;
190 }
191
192 if (this.bot.isMessageStartsWithEmoji(ctx)) {
193 var emojies = this.bot.getMessageStartsEmojiArray(ctx);
194 if (!emojies.length) return null;
195 return {
196 path: "/".concat(emojies.join('/'))
197 };
198 }
199
200 return session.defaultRoute || null;
201 } // redirect(ctx, routerPath) {
202 // ctx.session.routerPath = routerPath;
203 // return this.resolve(ctx);
204 // }
205
206 }, {
207 key: "provide",
208 value: function () {
209 var _provide = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref) {
210 var _ref$user, locale, i18Module, i18;
211
212 return _regenerator["default"].wrap(function _callee3$(_context3) {
213 while (1) {
214 switch (_context3.prev = _context3.next) {
215 case 0:
216 _ref$user = _ref.user;
217 _ref$user = _ref$user === void 0 ? {} : _ref$user;
218 locale = _ref$user.locale;
219 _context3.next = 5;
220 return this.app.module('i18');
221
222 case 5:
223 i18Module = _context3.sent;
224 _context3.next = 8;
225 return i18Module.instance(locale, {
226 anyLocale: true,
227 throwError: false
228 });
229
230 case 8:
231 i18 = _context3.sent;
232 return _context3.abrupt("return", {
233 app: this.app,
234 router: this,
235 botsModule: this.app.botsModule,
236 bot: this.bot,
237 i18: i18,
238 module: this.app.module,
239 log: this.log
240 });
241
242 case 10:
243 case "end":
244 return _context3.stop();
245 }
246 }
247 }, _callee3, this);
248 }));
249
250 function provide(_x3) {
251 return _provide.apply(this, arguments);
252 }
253
254 return provide;
255 }()
256 }, {
257 key: "resolve",
258 value: function () {
259 var _resolve = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
260 var _this = this;
261
262 var _ref2,
263 pathname,
264 path,
265 _ref2$query,
266 query,
267 ctx,
268 provide,
269 req,
270 data,
271 _args6 = arguments;
272
273 return _regenerator["default"].wrap(function _callee6$(_context6) {
274 while (1) {
275 switch (_context6.prev = _context6.next) {
276 case 0:
277 _ref2 = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {}, pathname = _ref2.pathname, path = _ref2.path, _ref2$query = _ref2.query, query = _ref2$query === void 0 ? {} : _ref2$query, ctx = _ref2.ctx;
278 // eslint-disable-next-line no-param-reassign
279 if (!path && pathname) path = pathname; // const { routerPath: pathname } = ctx.session;
280
281 if (path) {
282 _context6.next = 5;
283 break;
284 }
285
286 if (this.debug) this.log.warn('!path');
287 return _context6.abrupt("return", null);
288
289 case 5:
290 if (ctx) {
291 _context6.next = 8;
292 break;
293 }
294
295 if (this.debug) this.log.warn('!ctx');
296 return _context6.abrupt("return", null);
297
298 case 8:
299 if (this.debug) this.log.trace('resolve', path);
300
301 ctx.nextRedirect = /*#__PURE__*/function () {
302 var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(path, query) {
303 var props;
304 return _regenerator["default"].wrap(function _callee4$(_context4) {
305 while (1) {
306 switch (_context4.prev = _context4.next) {
307 case 0:
308 if (path) {
309 _context4.next = 2;
310 break;
311 }
312
313 throw new _err["default"]('!path');
314
315 case 2:
316 props = {};
317
318 if (typeof path === 'string') {
319 props = {
320 path: path
321 };
322 } else {
323 props = path;
324 }
325
326 if (!props.query && query) props.query = query;
327 if (!ctx.session) ctx.session = {};
328 ctx.session.nextRoute = props;
329
330 if (_env.isDev) {
331 _this.log.info("nextRedirect => ".concat(JSON.stringify(props))); // await Bluebird.delay(1000);
332
333 }
334
335 return _context4.abrupt("return", props);
336
337 case 9:
338 case "end":
339 return _context4.stop();
340 }
341 }
342 }, _callee4);
343 }));
344
345 return function (_x4, _x5) {
346 return _ref3.apply(this, arguments);
347 };
348 }();
349
350 ctx.redirect = /*#__PURE__*/function () {
351 var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(path, query) {
352 var props;
353 return _regenerator["default"].wrap(function _callee5$(_context5) {
354 while (1) {
355 switch (_context5.prev = _context5.next) {
356 case 0:
357 if (path) {
358 _context5.next = 2;
359 break;
360 }
361
362 throw new _err["default"]('!path');
363
364 case 2:
365 props = {};
366
367 if (typeof path === 'string') {
368 props = {
369 path: path
370 };
371 } else {
372 props = path;
373 }
374
375 if (!props.query && query) props.query = query;
376
377 if (!_env.isDev) {
378 _context5.next = 9;
379 break;
380 }
381
382 _this.log.info("redirect => ".concat(props.path || props.pathname, " ").concat(JSON.stringify(props.query), " [delay] ", 1000));
383
384 _context5.next = 9;
385 return _bluebird["default"].delay(1000);
386
387 case 9:
388 return _context5.abrupt("return", _this.resolve(_objectSpread({
389 ctx: ctx
390 }, props)));
391
392 case 10:
393 case "end":
394 return _context5.stop();
395 }
396 }
397 }, _callee5);
398 }));
399
400 return function (_x6, _x7) {
401 return _ref4.apply(this, arguments);
402 };
403 }();
404
405 _context6.next = 13;
406 return this.provide({});
407
408 case 13:
409 provide = _context6.sent;
410 req = {
411 path: path,
412 pathname: path,
413 bot: provide.bot,
414 log: this.log,
415 ctx: ctx,
416 query: query,
417 i18: provide.i18,
418 t: provide.i18 && provide.i18.t
419 };
420 data = _objectSpread(_objectSpread({}, provide), {}, {
421 req: req,
422 path: path,
423 pathname: path,
424 query: query,
425 ctx: ctx
426 });
427 if (this.debug) this.log.trace('context', Object.keys(data));
428 return _context6.abrupt("return", this.router.resolve(data)["catch"](function (err) {
429 _this.log.error('err', err);
430
431 throw err;
432 }));
433
434 case 18:
435 case "end":
436 return _context6.stop();
437 }
438 }
439 }, _callee6, this);
440 }));
441
442 function resolve() {
443 return _resolve.apply(this, arguments);
444 }
445
446 return resolve;
447 }()
448 }]);
449 return BotsRouter;
450}(_module["default"]);
451
452exports.BotsRouter = BotsRouter;
453var _default = BotsRouter;
454exports["default"] = _default;
455//# sourceMappingURL=BotsRouter.js.map
\No newline at end of file