'use strict'; var simpleIsEqual = function simpleIsEqual(a, b) { return a === b; }; function index (resultFn, isEqual) { if (isEqual === void 0) { isEqual = simpleIsEqual; } var lastThis; var lastArgs = []; var lastResult; var calledOnce = false; var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) { return isEqual(newArg, lastArgs[index]); }; var result = function result() { for (var _len = arguments.length, newArgs = new Array(_len), _key = 0; _key < _len; _key++) { newArgs[_key] = arguments[_key]; } if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) { return lastResult; } lastResult = resultFn.apply(this, newArgs); calledOnce = true; lastThis = this; lastArgs = newArgs; return lastResult; }; return result; } module.exports = index;