botframework-webchat-component
Version:
React component of botframework-webchat
64 lines (51 loc) • 6.61 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useMemoize;
var _react = require("react");
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function useMemoize(fn, callback, deps) {
if (typeof fn !== 'function') {
throw new Error('The first argument must be a function.');
} else if (typeof callback !== 'function') {
throw new Error('The second argument must be a function.');
} else if (!Array.isArray(deps)) {
throw new Error('The third argument must be an array.');
}
var memoizedFn = (0, _react.useMemo)(function () {
var cache = [];
return function (run) {
var nextCache = [];
var result = run(function () {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var _ref = [].concat(_toConsumableArray(cache), nextCache).find(function (_ref2) {
var cachedArgs = _ref2.args;
return args.length === cachedArgs.length && args.every(function (arg, index) {
return Object.is(arg, cachedArgs[index]);
});
}) || {
result: fn.apply(void 0, args)
},
result = _ref.result;
nextCache.push({
args: args,
result: result
});
return result;
});
cache = nextCache;
return result;
}; // We are manually creating the deps here. The "callback" arg is also designed not to be impact deps, similar to useEffect(fn), where "fn" is not in deps.
/* eslint-disable-next-line react-hooks/exhaustive-deps */
}, [fn].concat(_toConsumableArray(deps)));
return memoizedFn(callback);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9pbnRlcm5hbC91c2VNZW1vaXplLmpzIl0sIm5hbWVzIjpbInVzZU1lbW9pemUiLCJmbiIsImNhbGxiYWNrIiwiZGVwcyIsIkVycm9yIiwiQXJyYXkiLCJpc0FycmF5IiwibWVtb2l6ZWRGbiIsImNhY2hlIiwicnVuIiwibmV4dENhY2hlIiwicmVzdWx0IiwiYXJncyIsImZpbmQiLCJjYWNoZWRBcmdzIiwibGVuZ3RoIiwiZXZlcnkiLCJhcmciLCJpbmRleCIsIk9iamVjdCIsImlzIiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7OztBQUVlLFNBQVNBLFVBQVQsQ0FBb0JDLEVBQXBCLEVBQXdCQyxRQUF4QixFQUFrQ0MsSUFBbEMsRUFBd0M7QUFDckQsTUFBSSxPQUFPRixFQUFQLEtBQWMsVUFBbEIsRUFBOEI7QUFDNUIsVUFBTSxJQUFJRyxLQUFKLENBQVUsd0NBQVYsQ0FBTjtBQUNELEdBRkQsTUFFTyxJQUFJLE9BQU9GLFFBQVAsS0FBb0IsVUFBeEIsRUFBb0M7QUFDekMsVUFBTSxJQUFJRSxLQUFKLENBQVUseUNBQVYsQ0FBTjtBQUNELEdBRk0sTUFFQSxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTixDQUFjSCxJQUFkLENBQUwsRUFBMEI7QUFDL0IsVUFBTSxJQUFJQyxLQUFKLENBQVUsc0NBQVYsQ0FBTjtBQUNEOztBQUVELE1BQU1HLFVBQVUsR0FBRyxvQkFBUSxZQUFNO0FBQy9CLFFBQUlDLEtBQUssR0FBRyxFQUFaO0FBRUEsV0FBTyxVQUFBQyxHQUFHLEVBQUk7QUFDWixVQUFNQyxTQUFTLEdBQUcsRUFBbEI7QUFDQSxVQUFNQyxNQUFNLEdBQUdGLEdBQUcsQ0FBQyxZQUFhO0FBQUEsMENBQVRHLElBQVM7QUFBVEEsVUFBQUEsSUFBUztBQUFBOztBQUFBLG1CQUNYLDZCQUFJSixLQUFKLEdBQWNFLFNBQWQsRUFBeUJHLElBQXpCLENBQ2pCO0FBQUEsY0FBU0MsVUFBVCxTQUFHRixJQUFIO0FBQUEsaUJBQ0VBLElBQUksQ0FBQ0csTUFBTCxLQUFnQkQsVUFBVSxDQUFDQyxNQUEzQixJQUFxQ0gsSUFBSSxDQUFDSSxLQUFMLENBQVcsVUFBQ0MsR0FBRCxFQUFNQyxLQUFOO0FBQUEsbUJBQWdCQyxNQUFNLENBQUNDLEVBQVAsQ0FBVUgsR0FBVixFQUFlSCxVQUFVLENBQUNJLEtBQUQsQ0FBekIsQ0FBaEI7QUFBQSxXQUFYLENBRHZDO0FBQUEsU0FEaUIsS0FHZDtBQUFFUCxVQUFBQSxNQUFNLEVBQUVWLEVBQUUsTUFBRixTQUFNVyxJQUFOO0FBQVYsU0FKeUI7QUFBQSxZQUN0QkQsTUFEc0IsUUFDdEJBLE1BRHNCOztBQU05QkQsUUFBQUEsU0FBUyxDQUFDVyxJQUFWLENBQWU7QUFBRVQsVUFBQUEsSUFBSSxFQUFKQSxJQUFGO0FBQVFELFVBQUFBLE1BQU0sRUFBTkE7QUFBUixTQUFmO0FBRUEsZUFBT0EsTUFBUDtBQUNELE9BVGlCLENBQWxCO0FBV0FILE1BQUFBLEtBQUssR0FBR0UsU0FBUjtBQUVBLGFBQU9DLE1BQVA7QUFDRCxLQWhCRCxDQUgrQixDQW9CL0I7O0FBQ0E7QUFDRCxHQXRCa0IsR0FzQmZWLEVBdEJlLDRCQXNCUkUsSUF0QlEsR0FBbkI7QUF3QkEsU0FBT0ksVUFBVSxDQUFDTCxRQUFELENBQWpCO0FBQ0QiLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU1lbW9pemUoZm4sIGNhbGxiYWNrLCBkZXBzKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShkZXBzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIHRoaXJkIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkuJyk7XG4gIH1cblxuICBjb25zdCBtZW1vaXplZEZuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IGNhY2hlID0gW107XG5cbiAgICByZXR1cm4gcnVuID0+IHtcbiAgICAgIGNvbnN0IG5leHRDYWNoZSA9IFtdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcnVuKCguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBbLi4uY2FjaGUsIC4uLm5leHRDYWNoZV0uZmluZChcbiAgICAgICAgICAoeyBhcmdzOiBjYWNoZWRBcmdzIH0pID0+XG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gY2FjaGVkQXJncy5sZW5ndGggJiYgYXJncy5ldmVyeSgoYXJnLCBpbmRleCkgPT4gT2JqZWN0LmlzKGFyZywgY2FjaGVkQXJnc1tpbmRleF0pKVxuICAgICAgICApIHx8IHsgcmVzdWx0OiBmbiguLi5hcmdzKSB9O1xuXG4gICAgICAgIG5leHRDYWNoZS5wdXNoKHsgYXJncywgcmVzdWx0IH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcblxuICAgICAgY2FjaGUgPSBuZXh0Q2FjaGU7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICAvLyBXZSBhcmUgbWFudWFsbHkgY3JlYXRpbmcgdGhlIGRlcHMgaGVyZS4gVGhlIFwiY2FsbGJhY2tcIiBhcmcgaXMgYWxzbyBkZXNpZ25lZCBub3QgdG8gYmUgaW1wYWN0IGRlcHMsIHNpbWlsYXIgdG8gdXNlRWZmZWN0KGZuKSwgd2hlcmUgXCJmblwiIGlzIG5vdCBpbiBkZXBzLlxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbiAgfSwgW2ZuLCAuLi5kZXBzXSk7XG5cbiAgcmV0dXJuIG1lbW9pemVkRm4oY2FsbGJhY2spO1xufVxuIl19
;