UNPKG

12.4 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.DbModule = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
14var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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 _err = _interopRequireDefault(require("@lskjs/err"));
29
30var _module = _interopRequireDefault(require("@lskjs/module"));
31
32var _maskUriPassword = _interopRequireDefault(require("@lskjs/utils/maskUriPassword"));
33
34var _bluebird = _interopRequireDefault(require("bluebird"));
35
36var _pick = _interopRequireDefault(require("lodash/pick"));
37
38var _mongoose = require("mongoose");
39
40var _validOptionNames = require("./mongo/validOptionNames");
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
50// abstract
51var DbModule = /*#__PURE__*/function (_Module) {
52 (0, _inherits2["default"])(DbModule, _Module);
53
54 var _super = _createSuper(DbModule);
55
56 function DbModule() {
57 var _this;
58
59 (0, _classCallCheck2["default"])(this, DbModule);
60
61 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
62 args[_key] = arguments[_key];
63 }
64
65 _this = _super.call.apply(_super, [this].concat(args));
66 _this.config = {
67 keepAlive: true,
68 useUnifiedTopology: true,
69 useNewUrlParser: true,
70 // autoReconnect: true,
71 // reconnectTries: __DEV__ ? 10000 : 30,
72 // reconnectInterval: __DEV__ ? 30000 : 1000,
73 connectTimeoutMS: 5000 // sets the delay between every retry (milliseconds)
74
75 };
76 _this.provider = 'mongo';
77 _this.client = 'mongoose';
78 _this.Mongoose = _mongoose.Mongoose;
79 _this.reconnectios = 0;
80 return _this;
81 }
82
83 (0, _createClass2["default"])(DbModule, [{
84 key: "getOptions",
85 value: function getOptions() {
86 return _objectSpread(_objectSpread({}, (0, _pick["default"])(this.config, _validOptionNames.validOptionNames)), this.config.options || {});
87 }
88 }, {
89 key: "init",
90 value: function () {
91 var _init = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
92 var _this2 = this;
93
94 var uri, options, Mongoose;
95 return _regenerator["default"].wrap(function _callee2$(_context2) {
96 while (1) {
97 switch (_context2.prev = _context2.next) {
98 case 0:
99 _context2.next = 2;
100 return (0, _get2["default"])((0, _getPrototypeOf2["default"])(DbModule.prototype), "init", this).call(this);
101
102 case 2:
103 uri = this.config.uri;
104 options = this.getOptions();
105
106 if (uri) {
107 _context2.next = 6;
108 break;
109 }
110
111 throw new _err["default"]('!uri');
112
113 case 6:
114 if (this.debug) this.log.trace('config', (0, _maskUriPassword["default"])(uri), options); // finalOptions
115 // eslint-disable-next-line no-shadow
116
117 Mongoose = this.Mongoose;
118 this.client = new Mongoose();
119 this.client.Promise = Promise;
120 this.client.connection.on('connected', function () {
121 if (_this2.debug) _this2.log.trace('connected');
122 _this2.reconnectios = 0;
123 });
124 this.client.connection.on('error', /*#__PURE__*/function () {
125 var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(err) {
126 var interval;
127 return _regenerator["default"].wrap(function _callee$(_context) {
128 while (1) {
129 switch (_context.prev = _context.next) {
130 case 0:
131 _this2.log.error('error', err);
132
133 interval = _this2.reconnectios++ * 2000 + 1000; // eslint-disable-line no-plusplus
134
135 if (_this2.debug) _this2.log.warn("reconnect [delay] ".concat(interval, "ms"));
136 _context.next = 5;
137 return _bluebird["default"].delay(interval);
138
139 case 5:
140 setTimeout(_this2.reconnect.bind(_this2), interval);
141
142 case 6:
143 case "end":
144 return _context.stop();
145 }
146 }
147 }, _callee);
148 }));
149
150 return function (_x) {
151 return _ref.apply(this, arguments);
152 };
153 }());
154 this.client.connection.on('disconnected', function () {
155 if (_this2.debug) _this2.log.trace('disconnected');
156 });
157 this.client.set('debug', this.debug || false);
158 return _context2.abrupt("return", this.client);
159
160 case 15:
161 case "end":
162 return _context2.stop();
163 }
164 }
165 }, _callee2, this);
166 }));
167
168 function init() {
169 return _init.apply(this, arguments);
170 }
171
172 return init;
173 }()
174 }, {
175 key: "stop",
176 value: function () {
177 var _stop = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
178 return _regenerator["default"].wrap(function _callee3$(_context3) {
179 while (1) {
180 switch (_context3.prev = _context3.next) {
181 case 0:
182 _context3.next = 2;
183 return (0, _get2["default"])((0, _getPrototypeOf2["default"])(DbModule.prototype), "stop", this).call(this);
184
185 case 2:
186 if (this.client) {
187 if (this.client.connection) this.client.connection.close();
188 this.client.disconnect();
189 } else {
190 this.log.warn('!client', 'cannot client.disconnect');
191 }
192
193 return _context3.abrupt("return", _bluebird["default"].delay(10));
194
195 case 4:
196 case "end":
197 return _context3.stop();
198 }
199 }
200 }, _callee3, this);
201 }));
202
203 function stop() {
204 return _stop.apply(this, arguments);
205 }
206
207 return stop;
208 }()
209 }, {
210 key: "reconnect",
211 value: function () {
212 var _reconnect = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
213 return _regenerator["default"].wrap(function _callee4$(_context4) {
214 while (1) {
215 switch (_context4.prev = _context4.next) {
216 case 0:
217 if (this.debug) this.log.trace('reconnect');
218
219 if (this.client) {
220 this.client.stop();
221 this.client.run();
222 } else {
223 this.log.warn('!client', 'cannot client.stop and client.run');
224 }
225
226 case 2:
227 case "end":
228 return _context4.stop();
229 }
230 }
231 }, _callee4, this);
232 }));
233
234 function reconnect() {
235 return _reconnect.apply(this, arguments);
236 }
237
238 return reconnect;
239 }()
240 }, {
241 key: "run",
242 value: function () {
243 var _run = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
244 var _this3 = this;
245
246 var uri, options, connection;
247 return _regenerator["default"].wrap(function _callee5$(_context5) {
248 while (1) {
249 switch (_context5.prev = _context5.next) {
250 case 0:
251 _context5.next = 2;
252 return (0, _get2["default"])((0, _getPrototypeOf2["default"])(DbModule.prototype), "run", this).call(this);
253
254 case 2:
255 this.reconnectios = 0;
256 uri = this.config.uri;
257 options = this.getOptions();
258 _context5.next = 7;
259 return new Promise(function (resolve, reject) {
260 return _this3.client.connect(uri, options).then(resolve, reject);
261 });
262
263 case 7:
264 connection = _context5.sent;
265 this.log.debug('[ready]', (0, _maskUriPassword["default"])(uri));
266 return _context5.abrupt("return", connection);
267
268 case 10:
269 case "end":
270 return _context5.stop();
271 }
272 }
273 }, _callee5, this);
274 }));
275
276 function run() {
277 return _run.apply(this, arguments);
278 }
279
280 return run;
281 }()
282 }, {
283 key: "healthcheck",
284 value: function () {
285 var _healthcheck = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
286 return _regenerator["default"].wrap(function _callee6$(_context6) {
287 while (1) {
288 switch (_context6.prev = _context6.next) {
289 case 0:
290 if (this.client) {
291 _context6.next = 2;
292 break;
293 }
294
295 throw '!client';
296
297 case 2:
298 return _context6.abrupt("return", this.client.connection.db.command({
299 ping: 1
300 }).then(function (_ref2) {
301 var operationTime = _ref2.operationTime;
302 return operationTime;
303 }));
304
305 case 3:
306 case "end":
307 return _context6.stop();
308 }
309 }
310 }, _callee6, this);
311 }));
312
313 function healthcheck() {
314 return _healthcheck.apply(this, arguments);
315 }
316
317 return healthcheck;
318 }()
319 }]);
320 return DbModule;
321}(_module["default"]);
322
323exports.DbModule = DbModule;
324var _default = DbModule;
325exports["default"] = _default;
326//# sourceMappingURL=DbModule.js.map
\No newline at end of file