UNPKG

12 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4Object.defineProperty(exports, "__esModule", {
5 value: true
6});
7exports["default"] = exports.DbModule = void 0;
8var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
14var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
16var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
17var _err = _interopRequireDefault(require("@lskjs/err"));
18var _module = _interopRequireDefault(require("@lskjs/module"));
19var _maskUriPassword = _interopRequireDefault(require("@lskjs/utils/maskUriPassword"));
20var _bluebird = _interopRequireDefault(require("bluebird"));
21var _pick = _interopRequireDefault(require("lodash/pick"));
22var _mongoose = _interopRequireDefault(require("mongoose"));
23var _validOptionNames = require("./mongo/validOptionNames");
24function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
25function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
26function _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); }; }
27function _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; } }
28require('mongoose-long')(_mongoose["default"]);
29var Mongoose = _mongoose["default"].Mongoose;
30// abstract
31var DbModule = /*#__PURE__*/function (_Module) {
32 (0, _inherits2["default"])(DbModule, _Module);
33 var _super = _createSuper(DbModule);
34 function DbModule() {
35 var _this;
36 (0, _classCallCheck2["default"])(this, DbModule);
37 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
38 args[_key] = arguments[_key];
39 }
40 _this = _super.call.apply(_super, [this].concat(args));
41 _this.config = {
42 keepAlive: true,
43 useUnifiedTopology: true,
44 useNewUrlParser: true,
45 // autoReconnect: true,
46 // reconnectTries: __DEV__ ? 10000 : 30,
47 // reconnectInterval: __DEV__ ? 30000 : 1000,
48 connectTimeoutMS: 5000
49 // sets the delay between every retry (milliseconds)
50 };
51 _this.provider = 'mongo';
52 _this.client = 'mongoose';
53 _this.Mongoose = Mongoose;
54 _this.reconnectios = 0;
55 return _this;
56 }
57 (0, _createClass2["default"])(DbModule, [{
58 key: "getOptions",
59 value: function getOptions() {
60 return _objectSpread(_objectSpread({}, (0, _pick["default"])(this.config, _validOptionNames.validOptionNames)), this.config.options || {});
61 }
62 }, {
63 key: "init",
64 value: function () {
65 var _init = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
66 var _this2 = this;
67 var uri, options, Mongoose;
68 return _regenerator["default"].wrap(function _callee2$(_context2) {
69 while (1) switch (_context2.prev = _context2.next) {
70 case 0:
71 _context2.next = 2;
72 return (0, _get2["default"])((0, _getPrototypeOf2["default"])(DbModule.prototype), "init", this).call(this);
73 case 2:
74 uri = this.config.uri;
75 options = this.getOptions();
76 if (uri) {
77 _context2.next = 6;
78 break;
79 }
80 throw new _err["default"]('!uri');
81 case 6:
82 if (this.debug) this.log.trace('config', (0, _maskUriPassword["default"])(uri), options); // finalOptions
83
84 // eslint-disable-next-line no-shadow
85 Mongoose = this.Mongoose;
86 this.client = new Mongoose();
87 this.client.Promise = Promise;
88 this.client.connection.on('connected', function () {
89 if (_this2.debug) _this2.log.trace('connected');
90 _this2.reconnectios = 0;
91 });
92 this.client.connection.on('error', /*#__PURE__*/function () {
93 var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(err) {
94 var interval;
95 return _regenerator["default"].wrap(function _callee$(_context) {
96 while (1) switch (_context.prev = _context.next) {
97 case 0:
98 _this2.log.error('error', err);
99 interval = _this2.reconnectios++ * 2000 + 1000; // eslint-disable-line no-plusplus
100 if (_this2.debug) _this2.log.warn("reconnect [delay] ".concat(interval, "ms"));
101 _context.next = 5;
102 return _bluebird["default"].delay(interval);
103 case 5:
104 setTimeout(_this2.reconnect.bind(_this2), interval);
105 case 6:
106 case "end":
107 return _context.stop();
108 }
109 }, _callee);
110 }));
111 return function (_x) {
112 return _ref.apply(this, arguments);
113 };
114 }());
115 this.client.connection.on('disconnected', function () {
116 if (_this2.debug) _this2.log.trace('disconnected');
117 });
118 this.client.set('debug', this.debug || false);
119 return _context2.abrupt("return", this.client);
120 case 15:
121 case "end":
122 return _context2.stop();
123 }
124 }, _callee2, this);
125 }));
126 function init() {
127 return _init.apply(this, arguments);
128 }
129 return init;
130 }()
131 }, {
132 key: "stop",
133 value: function () {
134 var _stop = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
135 return _regenerator["default"].wrap(function _callee3$(_context3) {
136 while (1) switch (_context3.prev = _context3.next) {
137 case 0:
138 _context3.next = 2;
139 return (0, _get2["default"])((0, _getPrototypeOf2["default"])(DbModule.prototype), "stop", this).call(this);
140 case 2:
141 if (this.client) {
142 if (this.client.connection) this.client.connection.close();
143 this.client.disconnect();
144 } else {
145 this.log.warn('!client', 'cannot client.disconnect');
146 }
147 return _context3.abrupt("return", _bluebird["default"].delay(10));
148 case 4:
149 case "end":
150 return _context3.stop();
151 }
152 }, _callee3, this);
153 }));
154 function stop() {
155 return _stop.apply(this, arguments);
156 }
157 return stop;
158 }()
159 }, {
160 key: "reconnect",
161 value: function () {
162 var _reconnect = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
163 return _regenerator["default"].wrap(function _callee4$(_context4) {
164 while (1) switch (_context4.prev = _context4.next) {
165 case 0:
166 if (this.debug) this.log.trace('reconnect');
167 if (this.client) {
168 this.client.stop();
169 this.client.run();
170 } else {
171 this.log.warn('!client', 'cannot client.stop and client.run');
172 }
173 case 2:
174 case "end":
175 return _context4.stop();
176 }
177 }, _callee4, this);
178 }));
179 function reconnect() {
180 return _reconnect.apply(this, arguments);
181 }
182 return reconnect;
183 }()
184 }, {
185 key: "run",
186 value: function () {
187 var _run = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
188 var _this3 = this;
189 var uri, options, connection;
190 return _regenerator["default"].wrap(function _callee5$(_context5) {
191 while (1) switch (_context5.prev = _context5.next) {
192 case 0:
193 _context5.next = 2;
194 return (0, _get2["default"])((0, _getPrototypeOf2["default"])(DbModule.prototype), "run", this).call(this);
195 case 2:
196 this.reconnectios = 0;
197 uri = this.config.uri;
198 options = this.getOptions();
199 _context5.next = 7;
200 return new Promise(function (resolve, reject) {
201 return _this3.client.connect(uri, options).then(resolve, reject);
202 });
203 case 7:
204 connection = _context5.sent;
205 this.log.debug('[ready]', (0, _maskUriPassword["default"])(uri));
206 return _context5.abrupt("return", connection);
207 case 10:
208 case "end":
209 return _context5.stop();
210 }
211 }, _callee5, this);
212 }));
213 function run() {
214 return _run.apply(this, arguments);
215 }
216 return run;
217 }()
218 }, {
219 key: "healthcheck",
220 value: function () {
221 var _healthcheck = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
222 return _regenerator["default"].wrap(function _callee6$(_context6) {
223 while (1) switch (_context6.prev = _context6.next) {
224 case 0:
225 if (this.client) {
226 _context6.next = 2;
227 break;
228 }
229 throw '!client';
230 case 2:
231 return _context6.abrupt("return", this.client.connection.db.command({
232 ping: 1
233 }).then(function (_ref2) {
234 var operationTime = _ref2.operationTime;
235 return operationTime;
236 }));
237 case 3:
238 case "end":
239 return _context6.stop();
240 }
241 }, _callee6, this);
242 }));
243 function healthcheck() {
244 return _healthcheck.apply(this, arguments);
245 }
246 return healthcheck;
247 }()
248 }]);
249 return DbModule;
250}(_module["default"]);
251exports.DbModule = DbModule;
252var _default = DbModule;
253exports["default"] = _default;
254//# sourceMappingURL=DbModule.js.map
\No newline at end of file