dejavu-call
Version:
Intercepts a function call and stores the result with the given context. In calls that have the same parameters, it will return the stored result. The proposal is to reduce the response time for processing heavy functions, but it always has the same resul
67 lines (52 loc) • 2.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.recall = exports.remember = exports.getHash = undefined;
var _pytils = require('pytils');
var _utils = require('./utils');
var _sha = require('./sha256');
var _sha2 = _interopRequireDefault(_sha);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var limit = 20;
var inMind = {};
var memorize = (0, _utils._memorize)(inMind, limit);
var _remember = function _remember(contextId, context, contextString, Throw) {
return function (noMemo) {
contextString = contextString ? contextString : (0, _utils.stringify)(context);
if ((0, _pytils.hasProp)(inMind, contextId)) {
var keeper = inMind[contextId];
if ((0, _pytils.hasProp)(keeper.memo, contextString)) {
return keeper.memo[contextString];
}
(0, _pytils.ifThrow)(Throw, 'dejavu-call: no memory found');
}
(0, _pytils.ifThrow)(Throw, 'dejavu-call: no keeper found');
return noMemo(contextString);
};
};
var getHash = exports.getHash = function getHash(data) {
(0, _pytils.ifThrow)(!(0, _pytils.isString)(data), 'dejavu-call(getHash): data is a essential! and need to be a string');
return (0, _sha2.default)(data);
};
var remember = exports.remember = function remember(contextId, context) {
var contextString = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var Throw = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
(0, _utils.isEssential)(function () {
return null;
}, contextId, context);
return _remember(contextId, context, contextString, Throw)(function () {
return null;
});
};
var recall = exports.recall = function recall(contextId, Service, context) {
var contextString = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
var Throw = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
(0, _utils.isEssential)(Service, contextId, context);
return _remember(contextId, context, contextString, Throw)(function (contextString) {
var result = Service.apply(undefined, _toConsumableArray(context));
memorize(contextId, contextString, result);
return result;
});
};