UNPKG

koa-quick-service

Version:
463 lines (372 loc) 16.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); 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 _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _events = require('events'); var _lgc = require('../service_supports/lgc.uri'); var _lgc2 = _interopRequireDefault(_lgc); var _index = require('../index'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var toString = Object.prototype.toString; /** * Created by evio on 2017/1/27. */ var CacheProcess = function () { function CacheProcess(EngineProcess, Cache) { (0, _classCallCheck3.default)(this, CacheProcess); this.root = Cache; this.engine = EngineProcess; } (0, _createClass3.default)(CacheProcess, [{ key: 'CREATE', value: function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(name) { var db; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.engine.create(name); case 2: db = _context.sent; return _context.abrupt('return', db[0]); case 4: case 'end': return _context.stop(); } } }, _callee, this); })); function CREATE(_x) { return _ref.apply(this, arguments); } return CREATE; }() }, { key: 'load', value: function () { var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(name) { var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var key, redis, values; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: args = this.root.filter(args); key = _lgc2.default.path(name, args); if (key) { _context2.next = 4; break; } throw new Error('can not find the key of ' + name); case 4: _context2.next = 6; return this.CREATE(_index.App.nativeConfig.db.redis.default); case 6: redis = _context2.sent; _context2.next = 9; return redis.exists(key); case 9: if (!_context2.sent) { _context2.next = 24; break; } _context2.next = 12; return redis.hgetall(key); case 12: values = _context2.sent; if (!values.__Stringify__) { _context2.next = 17; break; } return _context2.abrupt('return', values.value); case 17: if (!values.__ArrayStringify__) { _context2.next = 21; break; } return _context2.abrupt('return', JSON.parse(values.value)); case 21: return _context2.abrupt('return', this.root.parse(values)); case 22: _context2.next = 27; break; case 24: _context2.next = 26; return this.build(name, args); case 26: return _context2.abrupt('return', _context2.sent); case 27: case 'end': return _context2.stop(); } } }, _callee2, this); })); function load(_x2) { return _ref2.apply(this, arguments); } return load; }() }, { key: 'build', value: function () { var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(name, args) { var callback, key, redis, res; return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: args = this.root.filter(args); callback = this.root.stacks[name]; key = _lgc2.default.path(name, args); if (key) { _context3.next = 5; break; } throw new Error('can not find the key of ' + name); case 5: if (!(typeof callback === 'function')) { _context3.next = 35; break; } _context3.next = 8; return this.CREATE(_index.App.nativeConfig.db.redis.default); case 8: redis = _context3.sent; _context3.next = 11; return callback(this.CREATE.bind(this), args); case 11: res = _context3.sent; if (!res) { _context3.next = 35; break; } if (!(res.__Stringify__ || res.__ArrayStringify__)) { _context3.next = 15; break; } throw new Error('you can not use `__Stringify__` or `__ArrayStringify__` property, because it used by system.'); case 15: if (!((typeof res === 'undefined' ? 'undefined' : (0, _typeof3.default)(res)) === 'object')) { _context3.next = 32; break; } if (!Array.isArray(res)) { _context3.next = 22; break; } if (!(res.length > 0)) { _context3.next = 20; break; } _context3.next = 20; return redis.hmset(key, { __ArrayStringify__: true, value: (0, _stringify2.default)(res) }); case 20: _context3.next = 30; break; case 22: if (!((0, _keys2.default)(res).length > 0)) { _context3.next = 27; break; } _context3.next = 25; return redis.hmset(key, this.root.format(res)); case 25: _context3.next = 29; break; case 27: _context3.next = 29; return redis.hmset(key, {}); case 29: ; case 30: _context3.next = 34; break; case 32: _context3.next = 34; return redis.hmset(key, { __Stringify__: true, value: res }); case 34: return _context3.abrupt('return', res); case 35: case 'end': return _context3.stop(); } } }, _callee3, this); })); function build(_x4, _x5) { return _ref3.apply(this, arguments); } return build; }() }, { key: 'delete', value: function () { var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(name, args) { var key, redis; return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: args = this.root.filter(args); key = _lgc2.default.path(name, args); _context4.next = 4; return this.CREATE(_index.App.nativeConfig.db.redis.default); case 4: redis = _context4.sent; _context4.next = 7; return redis.exists(key); case 7: if (!_context4.sent) { _context4.next = 10; break; } _context4.next = 10; return redis.del(key); case 10: case 'end': return _context4.stop(); } } }, _callee4, this); })); function _delete(_x6, _x7) { return _ref4.apply(this, arguments); } return _delete; }() }]); return CacheProcess; }(); var CACHE = function (_EventEmitter) { (0, _inherits3.default)(CACHE, _EventEmitter); function CACHE() { (0, _classCallCheck3.default)(this, CACHE); var _this = (0, _possibleConstructorReturn3.default)(this, (CACHE.__proto__ || (0, _getPrototypeOf2.default)(CACHE)).call(this)); _this.stacks = {}; return _this; } (0, _createClass3.default)(CACHE, [{ key: 'process', value: function process(obj) { return new CacheProcess(obj, this); } }, { key: 'define', value: function define(name, callback) { this.stacks[name] = callback; } }, { key: 'encode', value: function encode(value) { var type = toString.call(value).replace(/\[object\s([^\]]+)\]/, '$1').toLowerCase(); switch (type) { case 'date': value = type + ':' + new Date(value).getTime(); break; case 'object': case 'array': value = type + ':' + (0, _stringify2.default)(value); break; default: value = type + ':' + value; } return value; } }, { key: 'decode', value: function decode(value) { var index = value.indexOf(':'); if (index > -1) { var type = value.substring(0, index); var _value = value.substring(index + 1); switch (type) { case 'number': value = Number(_value); break; case 'boolean': value = _value === 'true' ? true : false; break; case 'date': value = new Date(Number(_value)); break; case 'object': case 'array': value = JSON.parse(_value); break; case 'null': value = null; break; case 'undefined': value = undefined; break; default: value = _value; } } return value; } }, { key: 'format', value: function format(res) { var _res = {}; for (var i in res) { _res[i] = this.encode(res[i]); } return _res; } }, { key: 'parse', value: function parse(res) { var _res = {}; for (var i in res) { _res[i] = this.decode(res[i]); } return _res; } }, { key: 'filter', value: function filter(args) { if (!args) return; var _args = {}; for (var i in args) { if (typeof args[i] === 'string') { _args[i] = args[i] ? args[i].replace('@', '-') : args[i]; } else { _args[i] = args[i]; } } return _args; } }]); return CACHE; }(_events.EventEmitter); exports.default = CACHE; module.exports = exports['default'];