UNPKG

koa-quick-service

Version:
672 lines (584 loc) 30.3 kB
/** * Created by evio on 16/8/31. */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var redis = require("redis"); // const bluebird = require('bluebird'); // bluebird.promisifyAll(redis.RedisClient.prototype); // bluebird.promisifyAll(redis.Multi.prototype); var Redis = function () { function Redis(options) { (0, _classCallCheck3.default)(this, Redis); this.options = options; this.options.detect_buffers = true; this.transaction = false; this.transacte = null; this.transactions = []; } (0, _createClass3.default)(Redis, [{ key: 'begin', value: function begin() { if (this.transactions.length) { throw new Error('you should exec transations first.'); } this.transaction = true; this.transacte = this.connector.multi(); } }, { key: 'clear', value: function clear() { this.transaction = false; this.transacte = null; this.transactions = []; } }, { key: 'commit', value: function commit() { var _this = this; return new _promise2.default(function (resolve, reject) { _this.transacte.exec(function (err, replies) { if (err) return reject(err); _this.clear(); resolve(replies); }); }); } }, { key: 'rollback', value: function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() { var err, i; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: err = void 0; _context.prev = 1; i = 0; case 3: if (!(i < this.transactions.length)) { _context.next = 9; break; } _context.next = 6; return this.transactions[i].call(this); case 6: i++; _context.next = 3; break; case 9: _context.next = 14; break; case 11: _context.prev = 11; _context.t0 = _context['catch'](1); err = _context.t0; case 14: this.clear(); return _context.abrupt('return', err); case 16: case 'end': return _context.stop(); } } }, _callee, this, [[1, 11]]); })); function rollback() { return _ref.apply(this, arguments); } return rollback; }() }, { key: 'connect', value: function () { var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() { var _this2 = this; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return new _promise2.default(function (resolve, reject) { var client = redis.createClient(_this2.options); client.once("error", function (err) { return reject(err); }); client.once('ready', function () { return resolve(_this2.connector = client); }); }); case 2: return _context2.abrupt('return', this); case 3: case 'end': return _context2.stop(); } } }, _callee2, this); })); function connect() { return _ref2.apply(this, arguments); } return connect; }() }, { key: 'hgetall', value: function hgetall(id) { var _this3 = this; return new _promise2.default(function (resolve, reject) { _this3.connector.hgetall(id, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); } }, { key: 'hmset', value: function hmset(id, json) { var _this4 = this; if (this.transaction) { this.transacte.HMSET(id, json, function () { _this4.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3() { return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return _this4.exists(id); case 2: if (!_context3.sent) { _context3.next = 5; break; } _context3.next = 5; return new _promise2.default(function (resolve, reject) { _this4.connector.del(id, function (err, replies) { if (err) return reject(err); resolve(replies); }); }); case 5: case 'end': return _context3.stop(); } } }, _callee3, _this4); }))); }); } else { return new _promise2.default(function (resolve, reject) { _this4.connector.HMSET(id, json, function (err, replies) { if (err) return reject(err); resolve(replies); }); }); } } }, { key: 'get', value: function get(id) { var _this5 = this; return new _promise2.default(function (resolve, reject) { _this5.connector.get(id, function (err, value) { if (err) return reject(err); resolve(value); }); }); } }, { key: 'set', value: function set(id, value) { var _this6 = this; if (this.transaction) { this.transacte.set(id, value, function () { _this6.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() { return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return _this6.exists(id); case 2: if (!_context4.sent) { _context4.next = 5; break; } _context4.next = 5; return new _promise2.default(function (resolve, reject) { _this6.connector.del(id, function (err, replies) { if (err) return reject(err); resolve(replies); }); }); case 5: case 'end': return _context4.stop(); } } }, _callee4, _this6); }))); }); } else { return new _promise2.default(function (resolve, reject) { _this6.connector.set(id, value, function (err, replies) { if (err) return reject(err); resolve(replies); }); }); } } }, { key: 'del', value: function () { var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(id) { var _this7 = this; return _regenerator2.default.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: _context8.next = 2; return this.exists(id); case 2: if (!_context8.sent) { _context8.next = 9; break; } if (!this.transaction) { _context8.next = 7; break; } return _context8.delegateYield(_regenerator2.default.mark(function _callee7() { var data; return _regenerator2.default.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: data = void 0; _context7.prev = 1; _context7.next = 4; return _this7.get(id); case 4: data = _context7.sent; _this7.transacte.del(id, function () { _this7.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5() { return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: _context5.next = 2; return new _promise2.default(function (resolve, reject) { _this7.connector.set(id, data, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); case 2: case 'end': return _context5.stop(); } } }, _callee5, _this7); }))); }); _context7.next = 14; break; case 8: _context7.prev = 8; _context7.t0 = _context7['catch'](1); _context7.next = 12; return _this7.hgetall(id); case 12: data = _context7.sent; _this7.transacte.del(id, function () { _this7.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6() { return _regenerator2.default.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return new _promise2.default(function (resolve, reject) { _this7.connector.HMSET(id, data, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); case 2: case 'end': return _context6.stop(); } } }, _callee6, _this7); }))); }); case 14: case 'end': return _context7.stop(); } } }, _callee7, _this7, [[1, 8]]); })(), 't0', 5); case 5: _context8.next = 9; break; case 7: _context8.next = 9; return new _promise2.default(function (resolve, reject) { _this7.connector.del(id, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); case 9: case 'end': return _context8.stop(); } } }, _callee8, this); })); function del(_x) { return _ref5.apply(this, arguments); } return del; }() }, { key: 'hdel', value: function () { var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(id, key) { var _this8 = this; return _regenerator2.default.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: if (!this.transaction) { _context11.next = 4; break; } return _context11.delegateYield(_regenerator2.default.mark(function _callee10() { var data; return _regenerator2.default.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: _context10.next = 2; return new _promise2.default(function (resolve, reject) { _this8.connector.hget(id, key, function (err, value) { if (err) return reject(err); resolve(value); }); }); case 2: data = _context10.sent; _this8.transacte.hdel(id, key, function () { _this8.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9() { return _regenerator2.default.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: _context9.next = 2; return new _promise2.default(function (resolve, reject) { _this8.connector.hset(id, key, data, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); case 2: case 'end': return _context9.stop(); } } }, _callee9, _this8); }))); }); case 4: case 'end': return _context10.stop(); } } }, _callee10, _this8); })(), 't0', 2); case 2: _context11.next = 6; break; case 4: _context11.next = 6; return new _promise2.default(function (resolve, reject) { _this8.connector.hdel(id, key, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); case 6: case 'end': return _context11.stop(); } } }, _callee11, this); })); function hdel(_x2, _x3) { return _ref8.apply(this, arguments); } return hdel; }() }, { key: 'hset', value: function hset(id, key, value) { var _this9 = this; if (this.transaction) { this.transacte.hset(id, key, value, function () { _this9.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee12() { return _regenerator2.default.wrap(function _callee12$(_context12) { while (1) { switch (_context12.prev = _context12.next) { case 0: _context12.next = 2; return new _promise2.default(function (resolve, reject) { _this9.connector.hdel(id, key, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); case 2: case 'end': return _context12.stop(); } } }, _callee12, _this9); }))); }); } else { return new _promise2.default(function (resolve, reject) { _this9.connector.hset(id, key, value, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); } } }, { key: 'hget', value: function hget(id, key) { var _this10 = this; return new _promise2.default(function (resolve, reject) { _this10.connector.hget(id, key, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); } }, { key: 'exists', value: function exists(id) { var _this11 = this; return new _promise2.default(function (resolve, reject) { _this11.connector.exists(id, function (err, res) { if (err) return reject(err); resolve(res); }); }); } }, { key: 'expire', value: function expire(id, diff) { var _this12 = this; if (this.transaction) { this.transacte.expire(id, diff, function () { _this12.transactions.push((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee13() { return _regenerator2.default.wrap(function _callee13$(_context13) { while (1) { switch (_context13.prev = _context13.next) { case 0: _context13.next = 2; return new _promise2.default(function (resolve, reject) { _this12.connector.persist(id, function (err, res) { if (err) return reject(err); resolve(res); }); }); case 2: case 'end': return _context13.stop(); } } }, _callee13, _this12); }))); }); } else { return new _promise2.default(function (resolve, reject) { _this12.connector.expire(id, diff, function (err, obj) { if (err) return reject(err); resolve(obj); }); }); } } }, { key: 'end', value: function () { var _ref12 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee14() { var _this13 = this; return _regenerator2.default.wrap(function _callee14$(_context14) { while (1) { switch (_context14.prev = _context14.next) { case 0: if (!this.transactions.length) { _context14.next = 2; break; } throw new Error('transactions need be exec.'); case 2: _context14.next = 4; return new _promise2.default(function (resolve, reject) { var that = _this13; if ((0, _typeof3.default)(_this13.connector) == 'object') { _this13.connector.on('end', cb); _this13.connector.quit(); } else { reject(new Error('redis connect failed')); } function cb() { that.connector.removeListener('end', cb); that.connector = null; resolve(); } }); case 4: return _context14.abrupt('return', _context14.sent); case 5: case 'end': return _context14.stop(); } } }, _callee14, this); })); function end() { return _ref12.apply(this, arguments); } return end; }() }], [{ key: 'create', value: function create(options) { var _redis = new Redis(options); return _redis.connect(); } }]); return Redis; }(); exports.default = Redis; module.exports = exports['default'];