1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 | Object.defineProperty(exports, "__esModule", {
|
5 | value: true
|
6 | });
|
7 | exports["default"] = exports.DbModule = void 0;
|
8 | var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
9 | var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
10 | var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
11 | var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
12 | var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
13 | var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
14 | var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
15 | var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
16 | var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
17 | var _err = _interopRequireDefault(require("@lskjs/err"));
|
18 | var _module = _interopRequireDefault(require("@lskjs/module"));
|
19 | var _maskUriPassword = _interopRequireDefault(require("@lskjs/utils/maskUriPassword"));
|
20 | var _bluebird = _interopRequireDefault(require("bluebird"));
|
21 | var _pick = _interopRequireDefault(require("lodash/pick"));
|
22 | var _mongoose = _interopRequireDefault(require("mongoose"));
|
23 | var _validOptionNames = require("./mongo/validOptionNames");
|
24 | function 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; }
|
25 | function _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; }
|
26 | function _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); }; }
|
27 | function _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; } }
|
28 | require('mongoose-long')(_mongoose["default"]);
|
29 | var Mongoose = _mongoose["default"].Mongoose;
|
30 |
|
31 | var DbModule = 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 |
|
46 |
|
47 |
|
48 | connectTimeoutMS: 5000
|
49 |
|
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"])( _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);
|
83 |
|
84 |
|
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', function () {
|
93 | var _ref = (0, _asyncToGenerator2["default"])( _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;
|
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"])( _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"])( _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"])( _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"])( _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"]);
|
251 | exports.DbModule = DbModule;
|
252 | var _default = DbModule;
|
253 | exports["default"] = _default;
|
254 |
|
\ | No newline at end of file |