react-modal-promise
Version:
Promise wrapper for React components
205 lines (189 loc) • 25.5 kB
JavaScript
;
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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