botframework-webchat-component
Version:
React component of botframework-webchat
82 lines (80 loc) • 12.6 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useMemoized;
var _react = require("react");
var _useRefFrom = require("use-ref-from");
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" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) 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; }
/**
* `useMemoized` will memoize multiple calls to the same memoize function.
*
* @param {Fn<TArgs, TResult>} fn - The function to be memoized.
* @param {DependencyList} deps - Dependencies to detect for chagnes.
*/
function useMemoized(fn, deps) {
if (typeof fn !== 'function') {
throw new Error('The first argument must be a function.');
} else if (!Array.isArray(deps)) {
throw new Error('The second argument must be an array.');
}
// Hook-style inline fn: changing it won't trigger updates unless deps change
var fnRef = (0, _useRefFrom.useRefFrom)(fn);
// Use both caches to read cached values, but store only
// to the next cache, so we could distingish between values
// added during render discarding value cached previously
var cacheRef = (0, _react.useRef)();
var nextCacheRef = (0, _react.useRef)();
var memoizedFn = (0, _react.useMemo)(function () {
// Empty both caches on fresh run to avoid leakage of
// previously cached values into new memoizedFn calls
cacheRef.current = [];
nextCacheRef.current = [];
var memoizedFn = function memoizedFn() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var fn = fnRef.current;
var cache = cacheRef.current;
var nextCache = nextCacheRef.current;
var cached = cache.find(function (_ref) {
var cachedArgs = _ref.args;
return (
// index is guarented to be a number here
// eslint-disable-next-line security/detect-object-injection
args.length === cachedArgs.length && args.every(function (arg, index) {
return Object.is(arg, cachedArgs[index]);
})
);
});
if (cached) {
cached.args = args;
nextCache.push(cached);
return cached.result;
}
var nextCached = {
args: args,
result: fn.apply(void 0, args)
};
nextCache.push(nextCached);
cache.push(nextCached);
return nextCached.result;
};
return memoizedFn;
}, // Concat our deps with passed deps, so the memo callback runs when anything changes
/* eslint-disable-next-line react-hooks/exhaustive-deps */
[fnRef, cacheRef, nextCacheRef].concat(_toConsumableArray(deps)));
(0, _react.useEffect)(function () {
// At the end of each render turn around caches so that
// we keep only used in this render call cached values
cacheRef.current = nextCacheRef.current;
nextCacheRef.current = [];
});
return memoizedFn;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3VzZVJlZkZyb20iLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiVHlwZUVycm9yIiwibyIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwibiIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIml0ZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsImlzQXJyYXkiLCJsZW4iLCJsZW5ndGgiLCJpIiwiYXJyMiIsInVzZU1lbW9pemVkIiwiZm4iLCJkZXBzIiwiRXJyb3IiLCJmblJlZiIsInVzZVJlZkZyb20iLCJjYWNoZVJlZiIsInVzZVJlZiIsIm5leHRDYWNoZVJlZiIsIm1lbW9pemVkRm4iLCJ1c2VNZW1vIiwiY3VycmVudCIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImNhY2hlIiwibmV4dENhY2hlIiwiY2FjaGVkIiwiZmluZCIsIl9yZWYiLCJjYWNoZWRBcmdzIiwiZXZlcnkiLCJhcmciLCJpbmRleCIsImlzIiwicHVzaCIsInJlc3VsdCIsIm5leHRDYWNoZWQiLCJhcHBseSIsImNvbmNhdCIsInVzZUVmZmVjdCJdLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL2ludGVybmFsL3VzZU1lbW9pemVkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB0eXBlIERlcGVuZGVuY3lMaXN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUmVmRnJvbSB9IGZyb20gJ3VzZS1yZWYtZnJvbSc7XG5cbnR5cGUgQ2FjaGU8VEFyZ3MsIFRSZXN1bHQ+ID0geyBhcmdzOiBUQXJnc1tdOyByZXN1bHQ6IFRSZXN1bHQgfTtcbnR5cGUgRm48VEFyZ3MsIFRSZXN1bHQ+ID0gKC4uLmFyZ3M6IFRBcmdzW10pID0+IFRSZXN1bHQ7XG5cbi8qKlxuICogYHVzZU1lbW9pemVkYCB3aWxsIG1lbW9pemUgbXVsdGlwbGUgY2FsbHMgdG8gdGhlIHNhbWUgbWVtb2l6ZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZuPFRBcmdzLCBUUmVzdWx0Pn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmUgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0RlcGVuZGVuY3lMaXN0fSBkZXBzIC0gRGVwZW5kZW5jaWVzIHRvIGRldGVjdCBmb3IgY2hhZ25lcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlTWVtb2l6ZWQ8VEZpbmFsLCBUQXJncz4oZm46IEZuPFRBcmdzLCBURmluYWw+LCBkZXBzOiBEZXBlbmRlbmN5TGlzdCk6IEZuPFRBcmdzLCBURmluYWw+IHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShkZXBzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LicpO1xuICB9XG5cbiAgLy8gSG9vay1zdHlsZSBpbmxpbmUgZm46IGNoYW5naW5nIGl0IHdvbid0IHRyaWdnZXIgdXBkYXRlcyB1bmxlc3MgZGVwcyBjaGFuZ2VcbiAgY29uc3QgZm5SZWYgPSB1c2VSZWZGcm9tPEZuPFRBcmdzLCBURmluYWw+Pihmbik7XG4gIC8vIFVzZSBib3RoIGNhY2hlcyB0byByZWFkIGNhY2hlZCB2YWx1ZXMsIGJ1dCBzdG9yZSBvbmx5XG4gIC8vIHRvIHRoZSBuZXh0IGNhY2hlLCBzbyB3ZSBjb3VsZCBkaXN0aW5naXNoIGJldHdlZW4gdmFsdWVzXG4gIC8vIGFkZGVkIGR1cmluZyByZW5kZXIgZGlzY2FyZGluZyB2YWx1ZSBjYWNoZWQgcHJldmlvdXNseVxuICBjb25zdCBjYWNoZVJlZiA9IHVzZVJlZjxDYWNoZTxUQXJncywgVEZpbmFsPltdPigpO1xuICBjb25zdCBuZXh0Q2FjaGVSZWYgPSB1c2VSZWY8Q2FjaGU8VEFyZ3MsIFRGaW5hbD5bXT4oKTtcblxuICBjb25zdCBtZW1vaXplZEZuID0gdXNlTWVtbyhcbiAgICAoKSA9PiB7XG4gICAgICAvLyBFbXB0eSBib3RoIGNhY2hlcyBvbiBmcmVzaCBydW4gdG8gYXZvaWQgbGVha2FnZSBvZlxuICAgICAgLy8gcHJldmlvdXNseSBjYWNoZWQgdmFsdWVzIGludG8gbmV3IG1lbW9pemVkRm4gY2FsbHNcbiAgICAgIGNhY2hlUmVmLmN1cnJlbnQgPSBbXTtcbiAgICAgIG5leHRDYWNoZVJlZi5jdXJyZW50ID0gW107XG5cbiAgICAgIGNvbnN0IG1lbW9pemVkRm4gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCBmbiA9IGZuUmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gY2FjaGVSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgbmV4dENhY2hlID0gbmV4dENhY2hlUmVmLmN1cnJlbnQ7XG5cbiAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZmluZChcbiAgICAgICAgICAoeyBhcmdzOiBjYWNoZWRBcmdzIH0pID0+XG4gICAgICAgICAgICAvLyBpbmRleCBpcyBndWFyZW50ZWQgdG8gYmUgYSBudW1iZXIgaGVyZVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gY2FjaGVkQXJncy5sZW5ndGggJiYgYXJncy5ldmVyeSgoYXJnLCBpbmRleCkgPT4gT2JqZWN0LmlzKGFyZywgY2FjaGVkQXJnc1tpbmRleF0pKVxuICAgICAgICApO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgY2FjaGVkLmFyZ3MgPSBhcmdzO1xuICAgICAgICAgIG5leHRDYWNoZS5wdXNoKGNhY2hlZCk7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0Q2FjaGVkID0ge1xuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgcmVzdWx0OiBmbiguLi5hcmdzKVxuICAgICAgICB9O1xuICAgICAgICBuZXh0Q2FjaGUucHVzaChuZXh0Q2FjaGVkKTtcbiAgICAgICAgY2FjaGUucHVzaChuZXh0Q2FjaGVkKTtcblxuICAgICAgICByZXR1cm4gbmV4dENhY2hlZC5yZXN1bHQ7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gbWVtb2l6ZWRGbjtcbiAgICB9LFxuICAgIC8vIENvbmNhdCBvdXIgZGVwcyB3aXRoIHBhc3NlZCBkZXBzLCBzbyB0aGUgbWVtbyBjYWxsYmFjayBydW5zIHdoZW4gYW55dGhpbmcgY2hhbmdlc1xuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbiAgICBbZm5SZWYsIGNhY2hlUmVmLCBuZXh0Q2FjaGVSZWYsIC4uLmRlcHNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBBdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHR1cm4gYXJvdW5kIGNhY2hlcyBzbyB0aGF0XG4gICAgLy8gd2Uga2VlcCBvbmx5IHVzZWQgaW4gdGhpcyByZW5kZXIgY2FsbCBjYWNoZWQgdmFsdWVzXG4gICAgY2FjaGVSZWYuY3VycmVudCA9IG5leHRDYWNoZVJlZi5jdXJyZW50O1xuICAgIG5leHRDYWNoZVJlZi5jdXJyZW50ID0gW107XG4gIH0pO1xuXG4gIHJldHVybiBtZW1vaXplZEZuO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJ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
;