UNPKG

botframework-webchat-component

Version:
64 lines (51 loc) 6.61 kB
"use strict"; 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