koa-quick-service
Version:
start koa service quickly
463 lines (372 loc) • 16.4 kB
JavaScript
'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'];