UNPKG

react-modal-promise

Version:
205 lines (189 loc) 25.5 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); /*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ var __assign = function() { __assign = Object.assign || function __assign(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; function __rest(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; } function __spreadArray(to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; } var hexGen = function (len) { if (len === void 0) { len = 12; } var maxlen = 8; var min = Math.pow(16, Math.min(len, maxlen) - 1); var max = Math.pow(16, Math.min(len, maxlen)) - 1; var n = Math.floor(Math.random() * (max - min + 1)) + min; var r = n.toString(16); while (r.length < len) { r = r + hexGen(len - maxlen); } return r; }; var DEFAULT_SCOPE = 'stack'; var SCOPE_KEY = 'factoryStack'; if (typeof window !== 'undefined') { if (!window[SCOPE_KEY]) { window[SCOPE_KEY] = {}; } } var registerContainer = function (scope, ref) { window[SCOPE_KEY][scope] = ref; return ref; }; var unregisterContainer = function (scope) { delete window[SCOPE_KEY][scope]; }; var getContainer = function (scope) { return window[SCOPE_KEY][scope || DEFAULT_SCOPE]; }; var InstanceContainer = function (props, ref) { var _a = (props || {}).scope, scope = _a === void 0 ? DEFAULT_SCOPE : _a; var propsRef = React.useRef(props); var _b = React.useState({}), instances = _b[0], setInstances = _b[1]; var _c = React.useState([]), hashStack = _c[0], setHashStack = _c[1]; var resolve = React.useCallback(function (hash, v) { var _a; return (_a = instances === null || instances === void 0 ? void 0 : instances[hash]) === null || _a === void 0 ? void 0 : _a.resolve(v); }, [instances]); var resolveAll = React.useCallback(function (v) { return Object.values(instances).forEach(function (i) { return i.resolve(v); }); }, [instances]); var reject = React.useCallback(function (hash, r) { var _a; return (_a = instances === null || instances === void 0 ? void 0 : instances[hash]) === null || _a === void 0 ? void 0 : _a.reject(r); }, [instances]); var rejectAll = React.useCallback(function (r) { return Object.values(instances).forEach(function (i) { return i.reject(r); }); }, [instances]); var hasInstance = React.useCallback(function (hash) { return !!hashStack.find(function (id) { return id === hash; }); }, [hashStack]); var getInstance = React.useCallback(function (hash) { return instances === null || instances === void 0 ? void 0 : instances[hash]; }, [ instances, ]); var remove = function (hash, options) { var _a; setHashStack(function (stack) { return stack.filter(function (s) { return s !== hash; }); }); setTimeout(function () { setInstances(function (instances) { var _a = instances, _b = hash; _a[_b]; var omitHash = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]); return omitHash; }); }, options === null || options === void 0 ? void 0 : options.exitTimeout); (_a = props.onRemove) === null || _a === void 0 ? void 0 : _a.call(props, hash); }; var create = function (Component, options, instanceProps) { if (options === void 0) { options = {}; } return new Promise(function (res, rej) { var hash = (instanceProps === null || instanceProps === void 0 ? void 0 : instanceProps.instanceId) || hexGen(); var _a = propsRef.current, enterTimeout = _a.enterTimeout, exitTimeout = _a.exitTimeout, isAppendIntances = _a.isAppendIntances, onResolve = _a.onResolve, onReject = _a.onReject; var instanceOptions = __assign({ enterTimeout: enterTimeout, exitTimeout: exitTimeout, instanceId: hash }, options); var instance = __assign({ Component: Component, props: __assign(__assign({}, options), instanceProps), resolve: function (v) { removeRef.current(hash, instanceOptions); res(v); onResolve === null || onResolve === void 0 ? void 0 : onResolve(v, hash); }, reject: function (r) { removeRef.current(hash, instanceOptions); rej(r); onReject === null || onReject === void 0 ? void 0 : onReject(r, hash); } }, instanceOptions); setInstances(function (instances) { var _a, _b; return isAppendIntances ? __assign(__assign({}, instances), (_a = {}, _a[hash] = instance, _a)) : __assign((_b = {}, _b[hash] = instance, _b), instances); }); setTimeout(function () { var _a, _b; setHashStack(function (stack) { return __spreadArray(__spreadArray([], stack), [hash]); }); (_b = (_a = propsRef.current).onOpen) === null || _b === void 0 ? void 0 : _b.call(_a, hash, instance); }, instanceOptions.enterTimeout); }); }; var removeRef = React.useRef(remove); var createRef = React.useRef(create); React.useEffect(function () { propsRef.current = props; removeRef.current = remove; createRef.current = create; }); React.useImperativeHandle(ref, function () { return ({ create: createRef.current, resolve: resolve, reject: reject, resolveAll: resolveAll, rejectAll: rejectAll, hasInstance: hasInstance, getInstance: getInstance, }); }); React.useEffect(function () { registerContainer(scope, { create: createRef.current, resolve: resolve, reject: reject, resolveAll: resolveAll, rejectAll: rejectAll, hasInstance: hasInstance, getInstance: getInstance, }); return function () { return unregisterContainer(scope); }; }, [scope]); var mapKeys = React.useMemo(function () { var keys = Object.keys(instances); return keys.map(function (key) { var _a = instances[key], Component = _a.Component, props = _a.props, resolve = _a.resolve, reject = _a.reject; var isOpen = !!hashStack.find(function (h) { return h === key; }); return (React__default['default'].createElement(Component, __assign({}, props, { key: key, isOpen: isOpen, onReject: reject, onResolve: resolve, /** @deprecated **/ close: resolve, /** @deprecated **/ open: isOpen }))); }); }, [instances, hashStack]); return React__default['default'].createElement(React__default['default'].Fragment, null, mapKeys); }; var Container = React.forwardRef(InstanceContainer); Container.defaultProps = { exitTimeout: 500, enterTimeout: 50, }; /** @deprecated */ var createModal = function (Component, options) { return function (props) { return getContainer(options === null || options === void 0 ? void 0 : options.scope).create(Component, options, props); }; }; var create = function (Component, options) { return function (props) { return getContainer(options === null || options === void 0 ? void 0 : options.scope).create(Component, options, props); }; }; exports.Container = Container; exports.DEFAULT_SCOPE = DEFAULT_SCOPE; exports.SCOPE_KEY = SCOPE_KEY; exports.create = create; exports.createModal = createModal; exports.default = Container; exports.getContainer = getContainer; exports.hexGen = hexGen; exports.registerContainer = registerContainer; exports.unregisterContainer = unregisterContainer; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9oZXgtZ2VuLnRzIiwiLi4vc3JjL3V0aWxzL3JlZ2lzdGVyLXNjb3BlLnRzIiwiLi4vc3JjL0NvbnRhaW5lci50c3giLCIuLi9zcmMvY3JlYXRlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBIZXggPSBzdHJpbmdcblxuZXhwb3J0IGNvbnN0IGhleEdlbiA9IChsZW46IG51bWJlciA9IDEyKTogSGV4ID0+IHtcbiAgY29uc3QgbWF4bGVuID0gOFxuICBjb25zdCBtaW4gPSBNYXRoLnBvdygxNiwgTWF0aC5taW4obGVuLCBtYXhsZW4pIC0gMSlcbiAgY29uc3QgbWF4ID0gTWF0aC5wb3coMTYsIE1hdGgubWluKGxlbiwgbWF4bGVuKSkgLSAxXG4gIGNvbnN0IG4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluXG4gIGxldCByID0gbi50b1N0cmluZygxNilcbiAgd2hpbGUgKHIubGVuZ3RoIDwgbGVuKSB7XG4gICAgciA9IHIgKyBoZXhHZW4obGVuIC0gbWF4bGVuKVxuICB9XG4gIHJldHVybiByXG59XG4iLCJpbXBvcnQgeyBTY29wZSwgU2NvcGVNb2RlbCwgQ29udGFpbmVyUmVmIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDT1BFID0gJ3N0YWNrJ1xuZXhwb3J0IGNvbnN0IFNDT1BFX0tFWSA9ICdmYWN0b3J5U3RhY2snXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIFtTQ09QRV9LRVldOiBTY29wZU1vZGVsXG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIGlmICghd2luZG93W1NDT1BFX0tFWV0pIHtcbiAgICB3aW5kb3dbU0NPUEVfS0VZXSA9IHt9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyQ29udGFpbmVyID0gKHNjb3BlOiBTY29wZSwgcmVmOiBDb250YWluZXJSZWYpID0+IHtcbiAgd2luZG93W1NDT1BFX0tFWV1bc2NvcGVdID0gcmVmXG5cbiAgcmV0dXJuIHJlZlxufVxuXG5leHBvcnQgY29uc3QgdW5yZWdpc3RlckNvbnRhaW5lciA9IChzY29wZTogU2NvcGUpID0+IHtcbiAgZGVsZXRlIHdpbmRvd1tTQ09QRV9LRVldW3Njb3BlXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmVyID0gKHNjb3BlPzogU2NvcGUpID0+XG4gIHdpbmRvd1tTQ09QRV9LRVldW3Njb3BlIHx8IERFRkFVTFRfU0NPUEVdXG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlUmVmLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICBmb3J3YXJkUmVmLFxuICB1c2VTdGF0ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VDYWxsYmFjayxcbn0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7XG4gIGhleEdlbixcbiAgSGV4LFxuICByZWdpc3RlckNvbnRhaW5lcixcbiAgdW5yZWdpc3RlckNvbnRhaW5lcixcbiAgREVGQVVMVF9TQ09QRSxcbn0gZnJvbSAnLi91dGlscydcblxuaW1wb3J0IHtcbiAgQ29udGFpbmVyUmVmLFxuICBDb250YWluZXJQcm9wcyxcbiAgSW5zdGFuY2UsXG4gIEluc3RhbmNlSWQsXG4gIEluc3RhbmNlQ3JlYXRvcixcbiAgSW5zdGFuY2VPcHRpb25zLFxufSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBJbnN0YW5jZUNvbnRhaW5lcjogUmVhY3QuRm9yd2FyZFJlZlJlbmRlckZ1bmN0aW9uPFxuICBDb250YWluZXJSZWYsXG4gIENvbnRhaW5lclByb3BzXG4+ID0gKHByb3BzLCByZWYpID0+IHtcbiAgY29uc3QgeyBzY29wZSA9IERFRkFVTFRfU0NPUEUgfSA9IHByb3BzIHx8IHt9XG5cbiAgY29uc3QgcHJvcHNSZWYgPSB1c2VSZWYocHJvcHMpXG5cbiAgY29uc3QgW2luc3RhbmNlcywgc2V0SW5zdGFuY2VzXSA9IHVzZVN0YXRlPHsgW2tleTogc3RyaW5nXTogSW5zdGFuY2UgfT4oe30pXG4gIGNvbnN0IFtoYXNoU3RhY2ssIHNldEhhc2hTdGFja10gPSB1c2VTdGF0ZTxIZXhbXT4oW10pXG5cbiAgY29uc3QgcmVzb2x2ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChoYXNoOiBJbnN0YW5jZUlkLCB2KSA9PiBpbnN0YW5jZXM/LltoYXNoXT8ucmVzb2x2ZSh2KSxcbiAgICBbaW5zdGFuY2VzXVxuICApXG4gIGNvbnN0IHJlc29sdmVBbGwgPSB1c2VDYWxsYmFjayhcbiAgICB2ID0+IE9iamVjdC52YWx1ZXMoaW5zdGFuY2VzKS5mb3JFYWNoKGkgPT4gaS5yZXNvbHZlKHYpKSxcbiAgICBbaW5zdGFuY2VzXVxuICApXG5cbiAgY29uc3QgcmVqZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGhhc2g6IEluc3RhbmNlSWQsIHIpID0+IGluc3RhbmNlcz8uW2hhc2hdPy5yZWplY3QociksXG4gICAgW2luc3RhbmNlc11cbiAgKVxuICBjb25zdCByZWplY3RBbGwgPSB1c2VDYWxsYmFjayhcbiAgICByID0+IE9iamVjdC52YWx1ZXMoaW5zdGFuY2VzKS5mb3JFYWNoKGkgPT4gaS5yZWplY3QocikpLFxuICAgIFtpbnN0YW5jZXNdXG4gIClcbiAgY29uc3QgaGFzSW5zdGFuY2UgPSB1c2VDYWxsYmFjayhcbiAgICAoaGFzaDogSW5zdGFuY2VJZCkgPT4gISFoYXNoU3RhY2suZmluZChpZCA9PiBpZCA9PT0gaGFzaCksXG4gICAgW2hhc2hTdGFja11cbiAgKVxuICBjb25zdCBnZXRJbnN0YW5jZSA9IHVzZUNhbGxiYWNrKChoYXNoOiBJbnN0YW5jZUlkKSA9PiBpbnN0YW5jZXM/LltoYXNoXSwgW1xuICAgIGluc3RhbmNlcyxcbiAgXSlcblxuICBjb25zdCByZW1vdmUgPSAoaGFzaDogSW5zdGFuY2VJZCwgb3B0aW9uczogSW5zdGFuY2VPcHRpb25zKTogdm9pZCA9PiB7XG4gICAgc2V0SGFzaFN0YWNrKHN0YWNrID0+IHN0YWNrLmZpbHRlcihzID0+IHMgIT09IGhhc2gpKVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJbnN0YW5jZXMoaW5zdGFuY2VzID0+IHtcbiAgICAgICAgY29uc3QgeyBbaGFzaF06IF8sIC4uLm9taXRIYXNoIH0gPSBpbnN0YW5jZXNcblxuICAgICAgICByZXR1cm4gb21pdEhhc2hcbiAgICAgIH0pXG4gICAgfSwgb3B0aW9ucz8uZXhpdFRpbWVvdXQpXG5cbiAgICBwcm9wcy5vblJlbW92ZT8uKGhhc2gpXG4gIH1cblxuICBjb25zdCBjcmVhdGU6IEluc3RhbmNlQ3JlYXRvciA9IChDb21wb25lbnQsIG9wdGlvbnMgPSB7fSwgaW5zdGFuY2VQcm9wcykgPT5cbiAgICBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIGNvbnN0IGhhc2ggPSBpbnN0YW5jZVByb3BzPy5pbnN0YW5jZUlkIHx8IGhleEdlbigpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZW50ZXJUaW1lb3V0LFxuICAgICAgICBleGl0VGltZW91dCxcbiAgICAgICAgaXNBcHBlbmRJbnRhbmNlcyxcbiAgICAgICAgb25SZXNvbHZlLFxuICAgICAgICBvblJlamVjdCxcbiAgICAgIH0gPSBwcm9wc1JlZi5jdXJyZW50XG5cbiAgICAgIGNvbnN0IGluc3RhbmNlT3B0aW9ucyA9IHtcbiAgICAgICAgZW50ZXJUaW1lb3V0LFxuICAgICAgICBleGl0VGltZW91dCxcbiAgICAgICAgaW5zdGFuY2VJZDogaGFzaCxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5zdGFuY2U6IEluc3RhbmNlID0ge1xuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHByb3BzOiB7IC4uLm9wdGlvbnMsIC4uLmluc3RhbmNlUHJvcHMgfSxcbiAgICAgICAgcmVzb2x2ZTogdiA9PiB7XG4gICAgICAgICAgcmVtb3ZlUmVmLmN1cnJlbnQoaGFzaCwgaW5zdGFuY2VPcHRpb25zKVxuICAgICAgICAgIHJlcyh2KVxuICAgICAgICAgIG9uUmVzb2x2ZT8uKHYsIGhhc2gpXG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdDogciA9PiB7XG4gICAgICAgICAgcmVtb3ZlUmVmLmN1cnJlbnQoaGFzaCwgaW5zdGFuY2VPcHRpb25zKVxuICAgICAgICAgIHJlaihyKVxuICAgICAgICAgIG9uUmVqZWN0Py4ociwgaGFzaClcbiAgICAgICAgfSxcbiAgICAgICAgLi4uaW5zdGFuY2VPcHRpb25zLFxuICAgICAgfVxuXG4gICAgICBzZXRJbnN0YW5jZXMoaW5zdGFuY2VzID0+XG4gICAgICAgIGlzQXBwZW5kSW50YW5jZXNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uaW5zdGFuY2VzLFxuICAgICAgICAgICAgICBbaGFzaF06IGluc3RhbmNlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBbaGFzaF06IGluc3RhbmNlLFxuICAgICAgICAgICAgICAuLi5pbnN0YW5jZXMsXG4gICAgICAgICAgICB9XG4gICAgICApXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRIYXNoU3RhY2soc3RhY2sgPT4gWy4uLnN0YWNrLCBoYXNoXSlcbiAgICAgICAgcHJvcHNSZWYuY3VycmVudC5vbk9wZW4/LihoYXNoLCBpbnN0YW5jZSlcbiAgICAgIH0sIGluc3RhbmNlT3B0aW9ucy5lbnRlclRpbWVvdXQpXG4gICAgfSlcblxuICBjb25zdCByZW1vdmVSZWYgPSB1c2VSZWYocmVtb3ZlKVxuICBjb25zdCBjcmVhdGVSZWYgPSB1c2VSZWYoY3JlYXRlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJvcHNSZWYuY3VycmVudCA9IHByb3BzXG4gICAgcmVtb3ZlUmVmLmN1cnJlbnQgPSByZW1vdmVcbiAgICBjcmVhdGVSZWYuY3VycmVudCA9IGNyZWF0ZVxuICB9KVxuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIGNyZWF0ZTogY3JlYXRlUmVmLmN1cnJlbnQsXG4gICAgcmVzb2x2ZSxcbiAgICByZWplY3QsXG4gICAgcmVzb2x2ZUFsbCxcbiAgICByZWplY3RBbGwsXG4gICAgaGFzSW5zdGFuY2UsXG4gICAgZ2V0SW5zdGFuY2UsXG4gIH0pKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVnaXN0ZXJDb250YWluZXIoc2NvcGUsIHtcbiAgICAgIGNyZWF0ZTogY3JlYXRlUmVmLmN1cnJlbnQsXG4gICAgICByZXNvbHZlLFxuICAgICAgcmVqZWN0LFxuICAgICAgcmVzb2x2ZUFsbCxcbiAgICAgIHJlamVjdEFsbCxcbiAgICAgIGhhc0luc3RhbmNlLFxuICAgICAgZ2V0SW5zdGFuY2UsXG4gICAgfSlcblxuICAgIHJldHVybiAoKSA9PiB1bnJlZ2lzdGVyQ29udGFpbmVyKHNjb3BlKVxuICB9LCBbc2NvcGVdKVxuXG4gIGNvbnN0IG1hcEtleXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5zdGFuY2VzKVxuXG4gICAgcmV0dXJuIGtleXMubWFwKGtleSA9PiB7XG4gICAgICBjb25zdCB7IENvbXBvbmVudCwgcHJvcHMsIHJlc29sdmUsIHJlamVjdCB9ID0gaW5zdGFuY2VzW2tleV1cblxuICAgICAgY29uc3QgaXNPcGVuID0gISFoYXNoU3RhY2suZmluZChoID0+IGggPT09IGtleSlcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbXBvbmVudFxuICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgICBvblJlamVjdD17cmVqZWN0fVxuICAgICAgICAgIG9uUmVzb2x2ZT17cmVzb2x2ZX1cbiAgICAgICAgICAvKiogQGRlcHJlY2F0ZWQgKiovXG4gICAgICAgICAgY2xvc2U9e3Jlc29sdmV9XG4gICAgICAgICAgLyoqIEBkZXByZWNhdGVkICoqL1xuICAgICAgICAgIG9wZW49e2lzT3Blbn1cbiAgICAgICAgLz5cbiAgICAgIClcbiAgICB9KVxuICB9LCBbaW5zdGFuY2VzLCBoYXNoU3RhY2tdKVxuXG4gIHJldHVybiA8PnttYXBLZXlzfTwvPlxufVxuXG5leHBvcnQgY29uc3QgQ29udGFpbmVyID0gZm9yd2FyZFJlZihJbnN0YW5jZUNvbnRhaW5lcilcblxuQ29udGFpbmVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZXhpdFRpbWVvdXQ6IDUwMCxcbiAgZW50ZXJUaW1lb3V0OiA1MCxcbn1cbiIsImltcG9ydCB7IGdldENvbnRhaW5lciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBDcmVhdGVJbnN0YW5jZSB9IGZyb20gJy4vdHlwZXMnXG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU1vZGFsOiBDcmVhdGVJbnN0YW5jZSA9IChDb21wb25lbnQsIG9wdGlvbnMpID0+IHByb3BzID0+XG4gIGdldENvbnRhaW5lcihvcHRpb25zPy5zY29wZSkuY3JlYXRlKENvbXBvbmVudCwgb3B0aW9ucywgcHJvcHMpXG5cbmV4cG9ydCBjb25zdCBjcmVhdGU6IENyZWF0ZUluc3RhbmNlID0gKENvbXBvbmVudCwgb3B0aW9ucykgPT4gcHJvcHMgPT5cbiAgZ2V0Q29udGFpbmVyKG9wdGlvbnM/LnNjb3BlKS5jcmVhdGUoQ29tcG9uZW50LCBvcHRpb25zLCBwcm9wcylcbiJdLCJuYW1lcyI6WyJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZU1lbW8iLCJSZWFjdCIsImZvcndhcmRSZWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVhLE1BQU0sR0FBRyxVQUFDLEdBQWdCO0lBQWhCLG9CQUFBLEVBQUEsUUFBZ0I7SUFDckMsSUFBTSxNQUFNLEdBQUcsQ0FBQyxD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