UNPKG

react-modal-promise

Version:
189 lines (177 loc) 24.8 kB
import React, { forwardRef, useRef, useState, useCallback, useEffect, useImperativeHandle, useMemo } from '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 = useRef(props); var _b = useState({}), instances = _b[0], setInstances = _b[1]; var _c = useState([]), hashStack = _c[0], setHashStack = _c[1]; var resolve = 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 = useCallback(function (v) { return Object.values(instances).forEach(function (i) { return i.resolve(v); }); }, [instances]); var reject = 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 = useCallback(function (r) { return Object.values(instances).forEach(function (i) { return i.reject(r); }); }, [instances]); var hasInstance = useCallback(function (hash) { return !!hashStack.find(function (id) { return id === hash; }); }, [hashStack]); var getInstance = 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 = useRef(remove); var createRef = useRef(create); useEffect(function () { propsRef.current = props; removeRef.current = remove; createRef.current = create; }); useImperativeHandle(ref, function () { return ({ create: createRef.current, resolve: resolve, reject: reject, resolveAll: resolveAll, rejectAll: rejectAll, hasInstance: hasInstance, getInstance: getInstance, }); }); 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 = 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.createElement(Component, __assign({}, props, { key: key, isOpen: isOpen, onReject: reject, onResolve: resolve, /** @deprecated **/ close: resolve, /** @deprecated **/ open: isOpen }))); }); }, [instances, hashStack]); return React.createElement(React.Fragment, null, mapKeys); }; var Container = 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); }; }; export default Container; export { Container, DEFAULT_SCOPE, SCOPE_KEY, create, createModal, getContainer, hexGen, registerContainer, unregisterContainer }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXMuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9oZXgtZ2VuLnRzIiwiLi4vc3JjL3V0aWxzL3JlZ2lzdGVyLXNjb3BlLnRzIiwiLi4vc3JjL0NvbnRhaW5lci50c3giLCIuLi9zcmMvY3JlYXRlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBIZXggPSBzdHJpbmdcblxuZXhwb3J0IGNvbnN0IGhleEdlbiA9IChsZW46IG51bWJlciA9IDEyKTogSGV4ID0+IHtcbiAgY29uc3QgbWF4bGVuID0gOFxuICBjb25zdCBtaW4gPSBNYXRoLnBvdygxNiwgTWF0aC5taW4obGVuLCBtYXhsZW4pIC0gMSlcbiAgY29uc3QgbWF4ID0gTWF0aC5wb3coMTYsIE1hdGgubWluKGxlbiwgbWF4bGVuKSkgLSAxXG4gIGNvbnN0IG4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluXG4gIGxldCByID0gbi50b1N0cmluZygxNilcbiAgd2hpbGUgKHIubGVuZ3RoIDwgbGVuKSB7XG4gICAgciA9IHIgKyBoZXhHZW4obGVuIC0gbWF4bGVuKVxuICB9XG4gIHJldHVybiByXG59XG4iLCJpbXBvcnQgeyBTY29wZSwgU2NvcGVNb2RlbCwgQ29udGFpbmVyUmVmIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDT1BFID0gJ3N0YWNrJ1xuZXhwb3J0IGNvbnN0IFNDT1BFX0tFWSA9ICdmYWN0b3J5U3RhY2snXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIFtTQ09QRV9LRVldOiBTY29wZU1vZGVsXG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIGlmICghd2luZG93W1NDT1BFX0tFWV0pIHtcbiAgICB3aW5kb3dbU0NPUEVfS0VZXSA9IHt9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyQ29udGFpbmVyID0gKHNjb3BlOiBTY29wZSwgcmVmOiBDb250YWluZXJSZWYpID0+IHtcbiAgd2luZG93W1NDT1BFX0tFWV1bc2NvcGVdID0gcmVmXG5cbiAgcmV0dXJuIHJlZlxufVxuXG5leHBvcnQgY29uc3QgdW5yZWdpc3RlckNvbnRhaW5lciA9IChzY29wZTogU2NvcGUpID0+IHtcbiAgZGVsZXRlIHdpbmRvd1tTQ09QRV9LRVldW3Njb3BlXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0Q29udGFpbmVyID0gKHNjb3BlPzogU2NvcGUpID0+XG4gIHdpbmRvd1tTQ09QRV9LRVldW3Njb3BlIHx8IERFRkFVTFRfU0NPUEVdXG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlUmVmLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICBmb3J3YXJkUmVmLFxuICB1c2VTdGF0ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VDYWxsYmFjayxcbn0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7XG4gIGhleEdlbixcbiAgSGV4LFxuICByZWdpc3RlckNvbnRhaW5lcixcbiAgdW5yZWdpc3RlckNvbnRhaW5lcixcbiAgREVGQVVMVF9TQ09QRSxcbn0gZnJvbSAnLi91dGlscydcblxuaW1wb3J0IHtcbiAgQ29udGFpbmVyUmVmLFxuICBDb250YWluZXJQcm9wcyxcbiAgSW5zdGFuY2UsXG4gIEluc3RhbmNlSWQsXG4gIEluc3RhbmNlQ3JlYXRvcixcbiAgSW5zdGFuY2VPcHRpb25zLFxufSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBJbnN0YW5jZUNvbnRhaW5lcjogUmVhY3QuRm9yd2FyZFJlZlJlbmRlckZ1bmN0aW9uPFxuICBDb250YWluZXJSZWYsXG4gIENvbnRhaW5lclByb3BzXG4+ID0gKHByb3BzLCByZWYpID0+IHtcbiAgY29uc3QgeyBzY29wZSA9IERFRkFVTFRfU0NPUEUgfSA9IHByb3BzIHx8IHt9XG5cbiAgY29uc3QgcHJvcHNSZWYgPSB1c2VSZWYocHJvcHMpXG5cbiAgY29uc3QgW2luc3RhbmNlcywgc2V0SW5zdGFuY2VzXSA9IHVzZVN0YXRlPHsgW2tleTogc3RyaW5nXTogSW5zdGFuY2UgfT4oe30pXG4gIGNvbnN0IFtoYXNoU3RhY2ssIHNldEhhc2hTdGFja10gPSB1c2VTdGF0ZTxIZXhbXT4oW10pXG5cbiAgY29uc3QgcmVzb2x2ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChoYXNoOiBJbnN0YW5jZUlkLCB2KSA9PiBpbnN0YW5jZXM/LltoYXNoXT8ucmVzb2x2ZSh2KSxcbiAgICBbaW5zdGFuY2VzXVxuICApXG4gIGNvbnN0IHJlc29sdmVBbGwgPSB1c2VDYWxsYmFjayhcbiAgICB2ID0+IE9iamVjdC52YWx1ZXMoaW5zdGFuY2VzKS5mb3JFYWNoKGkgPT4gaS5yZXNvbHZlKHYpKSxcbiAgICBbaW5zdGFuY2VzXVxuICApXG5cbiAgY29uc3QgcmVqZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGhhc2g6IEluc3RhbmNlSWQsIHIpID0+IGluc3RhbmNlcz8uW2hhc2hdPy5yZWplY3QociksXG4gICAgW2luc3RhbmNlc11cbiAgKVxuICBjb25zdCByZWplY3RBbGwgPSB1c2VDYWxsYmFjayhcbiAgICByID0+IE9iamVjdC52YWx1ZXMoaW5zdGFuY2VzKS5mb3JFYWNoKGkgPT4gaS5yZWplY3QocikpLFxuICAgIFtpbnN0YW5jZXNdXG4gIClcbiAgY29uc3QgaGFzSW5zdGFuY2UgPSB1c2VDYWxsYmFjayhcbiAgICAoaGFzaDogSW5zdGFuY2VJZCkgPT4gISFoYXNoU3RhY2suZmluZChpZCA9PiBpZCA9PT0gaGFzaCksXG4gICAgW2hhc2hTdGFja11cbiAgKVxuICBjb25zdCBnZXRJbnN0YW5jZSA9IHVzZUNhbGxiYWNrKChoYXNoOiBJbnN0YW5jZUlkKSA9PiBpbnN0YW5jZXM/LltoYXNoXSwgW1xuICAgIGluc3RhbmNlcyxcbiAgXSlcblxuICBjb25zdCByZW1vdmUgPSAoaGFzaDogSW5zdGFuY2VJZCwgb3B0aW9uczogSW5zdGFuY2VPcHRpb25zKTogdm9pZCA9PiB7XG4gICAgc2V0SGFzaFN0YWNrKHN0YWNrID0+IHN0YWNrLmZpbHRlcihzID0+IHMgIT09IGhhc2gpKVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJbnN0YW5jZXMoaW5zdGFuY2VzID0+IHtcbiAgICAgICAgY29uc3QgeyBbaGFzaF06IF8sIC4uLm9taXRIYXNoIH0gPSBpbnN0YW5jZXNcblxuICAgICAgICByZXR1cm4gb21pdEhhc2hcbiAgICAgIH0pXG4gICAgfSwgb3B0aW9ucz8uZXhpdFRpbWVvdXQpXG5cbiAgICBwcm9wcy5vblJlbW92ZT8uKGhhc2gpXG4gIH1cblxuICBjb25zdCBjcmVhdGU6IEluc3RhbmNlQ3JlYXRvciA9IChDb21wb25lbnQsIG9wdGlvbnMgPSB7fSwgaW5zdGFuY2VQcm9wcykgPT5cbiAgICBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIGNvbnN0IGhhc2ggPSBpbnN0YW5jZVByb3BzPy5pbnN0YW5jZUlkIHx8IGhleEdlbigpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZW50ZXJUaW1lb3V0LFxuICAgICAgICBleGl0VGltZW91dCxcbiAgICAgICAgaXNBcHBlbmRJbnRhbmNlcyxcbiAgICAgICAgb25SZXNvbHZlLFxuICAgICAgICBvblJlamVjdCxcbiAgICAgIH0gPSBwcm9wc1JlZi5jdXJyZW50XG5cbiAgICAgIGNvbnN0IGluc3RhbmNlT3B0aW9ucyA9IHtcbiAgICAgICAgZW50ZXJUaW1lb3V0LFxuICAgICAgICBleGl0VGltZW91dCxcbiAgICAgICAgaW5zdGFuY2VJZDogaGFzaCxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5zdGFuY2U6IEluc3RhbmNlID0ge1xuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHByb3BzOiB7IC4uLm9wdGlvbnMsIC4uLmluc3RhbmNlUHJvcHMgfSxcbiAgICAgICAgcmVzb2x2ZTogdiA9PiB7XG4gICAgICAgICAgcmVtb3ZlUmVmLmN1cnJlbnQoaGFzaCwgaW5zdGFuY2VPcHRpb25zKVxuICAgICAgICAgIHJlcyh2KVxuICAgICAgICAgIG9uUmVzb2x2ZT8uKHYsIGhhc2gpXG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdDogciA9PiB7XG4gICAgICAgICAgcmVtb3ZlUmVmLmN1cnJlbnQoaGFzaCwgaW5zdGFuY2VPcHRpb25zKVxuICAgICAgICAgIHJlaihyKVxuICAgICAgICAgIG9uUmVqZWN0Py4ociwgaGFzaClcbiAgICAgICAgfSxcbiAgICAgICAgLi4uaW5zdGFuY2VPcHRpb25zLFxuICAgICAgfVxuXG4gICAgICBzZXRJbnN0YW5jZXMoaW5zdGFuY2VzID0+XG4gICAgICAgIGlzQXBwZW5kSW50YW5jZXNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uaW5zdGFuY2VzLFxuICAgICAgICAgICAgICBbaGFzaF06IGluc3RhbmNlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBbaGFzaF06IGluc3RhbmNlLFxuICAgICAgICAgICAgICAuLi5pbnN0YW5jZXMsXG4gICAgICAgICAgICB9XG4gICAgICApXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRIYXNoU3RhY2soc3RhY2sgPT4gWy4uLnN0YWNrLCBoYXNoXSlcbiAgICAgICAgcHJvcHNSZWYuY3VycmVudC5vbk9wZW4/LihoYXNoLCBpbnN0YW5jZSlcbiAgICAgIH0sIGluc3RhbmNlT3B0aW9ucy5lbnRlclRpbWVvdXQpXG4gICAgfSlcblxuICBjb25zdCByZW1vdmVSZWYgPSB1c2VSZWYocmVtb3ZlKVxuICBjb25zdCBjcmVhdGVSZWYgPSB1c2VSZWYoY3JlYXRlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJvcHNSZWYuY3VycmVudCA9IHByb3BzXG4gICAgcmVtb3ZlUmVmLmN1cnJlbnQgPSByZW1vdmVcbiAgICBjcmVhdGVSZWYuY3VycmVudCA9IGNyZWF0ZVxuICB9KVxuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIGNyZWF0ZTogY3JlYXRlUmVmLmN1cnJlbnQsXG4gICAgcmVzb2x2ZSxcbiAgICByZWplY3QsXG4gICAgcmVzb2x2ZUFsbCxcbiAgICByZWplY3RBbGwsXG4gICAgaGFzSW5zdGFuY2UsXG4gICAgZ2V0SW5zdGFuY2UsXG4gIH0pKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVnaXN0ZXJDb250YWluZXIoc2NvcGUsIHtcbiAgICAgIGNyZWF0ZTogY3JlYXRlUmVmLmN1cnJlbnQsXG4gICAgICByZXNvbHZlLFxuICAgICAgcmVqZWN0LFxuICAgICAgcmVzb2x2ZUFsbCxcbiAgICAgIHJlamVjdEFsbCxcbiAgICAgIGhhc0luc3RhbmNlLFxuICAgICAgZ2V0SW5zdGFuY2UsXG4gICAgfSlcblxuICAgIHJldHVybiAoKSA9PiB1bnJlZ2lzdGVyQ29udGFpbmVyKHNjb3BlKVxuICB9LCBbc2NvcGVdKVxuXG4gIGNvbnN0IG1hcEtleXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5zdGFuY2VzKVxuXG4gICAgcmV0dXJuIGtleXMubWFwKGtleSA9PiB7XG4gICAgICBjb25zdCB7IENvbXBvbmVudCwgcHJvcHMsIHJlc29sdmUsIHJlamVjdCB9ID0gaW5zdGFuY2VzW2tleV1cblxuICAgICAgY29uc3QgaXNPcGVuID0gISFoYXNoU3RhY2suZmluZChoID0+IGggPT09IGtleSlcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbXBvbmVudFxuICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgICBvblJlamVjdD17cmVqZWN0fVxuICAgICAgICAgIG9uUmVzb2x2ZT17cmVzb2x2ZX1cbiAgICAgICAgICAvKiogQGRlcHJlY2F0ZWQgKiovXG4gICAgICAgICAgY2xvc2U9e3Jlc29sdmV9XG4gICAgICAgICAgLyoqIEBkZXByZWNhdGVkICoqL1xuICAgICAgICAgIG9wZW49e2lzT3Blbn1cbiAgICAgICAgLz5cbiAgICAgIClcbiAgICB9KVxuICB9LCBbaW5zdGFuY2VzLCBoYXNoU3RhY2tdKVxuXG4gIHJldHVybiA8PnttYXBLZXlzfTwvPlxufVxuXG5leHBvcnQgY29uc3QgQ29udGFpbmVyID0gZm9yd2FyZFJlZihJbnN0YW5jZUNvbnRhaW5lcilcblxuQ29udGFpbmVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZXhpdFRpbWVvdXQ6IDUwMCxcbiAgZW50ZXJUaW1lb3V0OiA1MCxcbn1cbiIsImltcG9ydCB7IGdldENvbnRhaW5lciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBDcmVhdGVJbnN0YW5jZSB9IGZyb20gJy4vdHlwZXMnXG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU1vZGFsOiBDcmVhdGVJbnN0YW5jZSA9IChDb21wb25lbnQsIG9wdGlvbnMpID0+IHByb3BzID0+XG4gIGdldENvbnRhaW5lcihvcHRpb25zPy5zY29wZSkuY3JlYXRlKENvbXBvbmVudCwgb3B0aW9ucywgcHJvcHMpXG5cbmV4cG9ydCBjb25zdCBjcmVhdGU6IENyZWF0ZUluc3RhbmNlID0gKENvbXBvbmVudCwgb3B0aW9ucykgPT4gcHJvcHMgPT5cbiAgZ2V0Q29udGFpbmVyKG9wdGlvbnM/LnNjb3BlKS5jcmVhdGUoQ29tcG9uZW50LCBvcHRpb25zLCBwcm9wcylcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRWEsTUFBTSxHQUFHLFVBQUMsR0FBZ0I7SUFBaEIsb0JBQUEsRUFBQSxRQUFnQjtJQUNyQyxJQUFNLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDaEIsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FB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