@vue/devtools 6.0.2 → 6.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/backend.js +5 -5
- package/build/devtools.js +1 -1
- package/package.json +1 -1
package/build/backend.js
CHANGED
|
@@ -27,7 +27,7 @@ eval("/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffe
|
|
|
27
27
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
28
28
|
|
|
29
29
|
"use strict";
|
|
30
|
-
eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"setupDevtoolsPlugin\": () => (/* binding */ setupDevtoolsPlugin)\n});\n\n;// CONCATENATED MODULE: ../api/lib/esm/env.js\nfunction getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nfunction getTarget() {\n // @ts-ignore\n return typeof navigator !== 'undefined' && typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : {};\n}\nconst isProxyAvailable = typeof Proxy === 'function';\n;// CONCATENATED MODULE: ../api/lib/esm/const.js\nconst HOOK_SETUP = 'devtools-plugin:setup';\nconst HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n;// CONCATENATED MODULE: ../api/lib/esm/proxy.js\n\nclass ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n } catch (e) {// noop\n }\n\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n } catch (e) {// noop\n }\n\n currentSettings = value;\n }\n\n };\n\n if (hook) {\n hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n } else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args\n });\n };\n }\n }\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n } else if (prop === 'on') {\n return this.proxiedOn;\n } else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => {}\n });\n return this.fallbacks[prop](...args);\n };\n } else {\n return (...args) => {\n return new Promise(resolve => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve\n });\n });\n };\n }\n }\n });\n }\n\n async setRealTarget(target) {\n this.target = target;\n\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n\n}\n;// CONCATENATED MODULE: ../api/lib/esm/index.js\n\n\n\n\n\nfunction setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const target = getTarget();\n const hook = getDevtoolsGlobalHook();\n const enableProxy = isProxyAvailable && pluginDescriptor.enableEarlyProxy;\n\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n } else {\n const proxy = enableProxy ? new ApiProxy(pluginDescriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor,\n setupFn,\n proxy\n });\n if (proxy) setupFn(proxy.proxiedTarget);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBSS9DLFFBQUosQ0FBYTZDLGdCQUFiLEVBQStCMUMsSUFBL0IsQ0FBSCxHQUEwQyxJQUFuRTtBQUNBLFVBQU1pRCxJQUFJLEdBQUdoRCxNQUFNLENBQUNpRCx3QkFBUCxHQUFrQ2pELE1BQU0sQ0FBQ2lELHdCQUFQLElBQW1DLEVBQWxGO0FBQ0FELElBQUFBLElBQUksQ0FBQ2hCLElBQUwsQ0FBVTtBQUNOUyxNQUFBQSxnQkFETTtBQUVOQyxNQUFBQSxPQUZNO0FBR05LLE1BQUFBO0FBSE0sS0FBVjtBQUtBLFFBQUlBLEtBQUosRUFDSUwsT0FBTyxDQUFDSyxLQUFLLENBQUNiLGFBQVAsQ0FBUDtBQUNQO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL2FwaS9saWIvZXNtL2Vudi5qcz9jZGYzIiwid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vYXBpL2xpYi9lc20vY29uc3QuanM/MTgwNSIsIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL2FwaS9saWIvZXNtL3Byb3h5LmpzPzc1MjAiLCJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9hcGkvbGliL2VzbS9pbmRleC5qcz83MjA1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXREZXZ0b29sc0dsb2JhbEhvb2soKSB7XG4gICAgcmV0dXJuIGdldFRhcmdldCgpLl9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICA/IHdpbmRvd1xuICAgICAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IGdsb2JhbFxuICAgICAgICAgICAgOiB7fTtcbn1cbmV4cG9ydCBjb25zdCBpc1Byb3h5QXZhaWxhYmxlID0gdHlwZW9mIFByb3h5ID09PSAnZnVuY3Rpb24nO1xuIiwiZXhwb3J0IGNvbnN0IEhPT0tfU0VUVVAgPSAnZGV2dG9vbHMtcGx1Z2luOnNldHVwJztcbmV4cG9ydCBjb25zdCBIT09LX1BMVUdJTl9TRVRUSU5HU19TRVQgPSAncGx1Z2luOnNldHRpbmdzOnNldCc7XG4iLCJpbXBvcnQgeyBIT09LX1BMVUdJTl9TRVRUSU5HU19TRVQgfSBmcm9tICcuL2NvbnN0JztcbmV4cG9ydCBjbGFzcyBBcGlQcm94eSB7XG4gICAgY29uc3RydWN0b3IocGx1Z2luLCBob29rKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy50YXJnZXRRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLm9uUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgICAgIHRoaXMuaG9vayA9IGhvb2s7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9IHt9O1xuICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBsdWdpbi5zZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwbHVnaW4uc2V0dGluZ3NbaWRdO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRTZXR0aW5nc1tpZF0gPSBpdGVtLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2NhbFNldHRpbmdzU2F2ZUlkID0gYF9fdnVlLWRldnRvb2xzLXBsdWdpbi1zZXR0aW5nc19fJHtwbHVnaW4uaWR9YDtcbiAgICAgICAgbGV0IGN1cnJlbnRTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFNldHRpbmdzU2F2ZUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGN1cnJlbnRTZXR0aW5ncywgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZhbGxiYWNrcyA9IHtcbiAgICAgICAgICAgIGdldFNldHRpbmdzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2V0dGluZ3M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0U2V0dGluZ3ModmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShsb2NhbFNldHRpbmdzU2F2ZUlkLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZXR0aW5ncyA9IHZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGhvb2spIHtcbiAgICAgICAgICAgIGhvb2sub24oSE9PS19QTFVHSU5fU0VUVElOR1NfU0VULCAocGx1Z2luSWQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbklkID09PSB0aGlzLnBsdWdpbi5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhbGxiYWNrcy5zZXRTZXR0aW5ncyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm94aWVkT24gPSBuZXcgUHJveHkoe30sIHtcbiAgICAgICAgICAgIGdldDogKF90YXJnZXQsIHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0Lm9uW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBwcm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcm94aWVkVGFyZ2V0ID0gbmV3IFByb3h5KHt9LCB7XG4gICAgICAgICAgICBnZXQ6IChfdGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gJ29uJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm94aWVkT247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmFsbGJhY2tzKS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0UXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBwcm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTogKCkgPT4geyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mYWxsYmFja3NbcHJvcF0oLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldFF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHByb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgc2V0UmVhbFRhcmdldCh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm9uUXVldWUpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0Lm9uW2l0ZW0ubWV0aG9kXSguLi5pdGVtLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnRhcmdldFF1ZXVlKSB7XG4gICAgICAgICAgICBpdGVtLnJlc29sdmUoYXdhaXQgdGhpcy50YXJnZXRbaXRlbS5tZXRob2RdKC4uLml0ZW0uYXJncykpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgZ2V0VGFyZ2V0LCBnZXREZXZ0b29sc0dsb2JhbEhvb2ssIGlzUHJveHlBdmFpbGFibGUgfSBmcm9tICcuL2Vudic7XG5pbXBvcnQgeyBIT09LX1NFVFVQIH0gZnJvbSAnLi9jb25zdCc7XG5pbXBvcnQgeyBBcGlQcm94eSB9IGZyb20gJy4vcHJveHknO1xuZXhwb3J0ICogZnJvbSAnLi9hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW4nO1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwRGV2dG9vbHNQbHVnaW4ocGx1Z2luRGVzY3JpcHRvciwgc2V0dXBGbikge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldFRhcmdldCgpO1xuICAgIGNvbnN0IGhvb2sgPSBnZXREZXZ0b29sc0dsb2JhbEhvb2soKTtcbiAgICBjb25zdCBlbmFibGVQcm94eSA9IGlzUHJveHlBdmFpbGFibGUgJiYgcGx1Z2luRGVzY3JpcHRvci5lbmFibGVFYXJseVByb3h5O1xuICAgIGlmIChob29rICYmICh0YXJnZXQuX19WVUVfREVWVE9PTFNfUExVR0lOX0FQSV9BVkFJTEFCTEVfXyB8fCAhZW5hYmxlUHJveHkpKSB7XG4gICAgICAgIGhvb2suZW1pdChIT09LX1NFVFVQLCBwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHByb3h5ID0gZW5hYmxlUHJveHkgPyBuZXcgQXBpUHJveHkocGx1Z2luRGVzY3JpcHRvciwgaG9vaykgOiBudWxsO1xuICAgICAgICBjb25zdCBsaXN0ID0gdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyA9IHRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5TX18gfHwgW107XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgICBwbHVnaW5EZXNjcmlwdG9yLFxuICAgICAgICAgICAgc2V0dXBGbixcbiAgICAgICAgICAgIHByb3h5LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByb3h5KVxuICAgICAgICAgICAgc2V0dXBGbihwcm94eS5wcm94aWVkVGFyZ2V0KTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiZ2V0RGV2dG9vbHNHbG9iYWxIb29rIiwiZ2V0VGFyZ2V0IiwiX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyIsIm5hdmlnYXRvciIsIndpbmRvdyIsImdsb2JhbCIsImlzUHJveHlBdmFpbGFibGUiLCJQcm94eSIsIkhPT0tfU0VUVVAiLCJIT09LX1BMVUdJTl9TRVRUSU5HU19TRVQiLCJBcGlQcm94eSIsImNvbnN0cnVjdG9yIiwicGx1Z2luIiwiaG9vayIsInRhcmdldCIsInRhcmdldFF1ZXVlIiwib25RdWV1ZSIsImRlZmF1bHRTZXR0aW5ncyIsInNldHRpbmdzIiwiaWQiLCJpdGVtIiwiZGVmYXVsdFZhbHVlIiwibG9jYWxTZXR0aW5nc1NhdmVJZCIsImN1cnJlbnRTZXR0aW5ncyIsIk9iamVjdCIsImFzc2lnbiIsInJhdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwiZSIsImZhbGxiYWNrcyIsImdldFNldHRpbmdzIiwic2V0U2V0dGluZ3MiLCJ2YWx1ZSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJvbiIsInBsdWdpbklkIiwicHJveGllZE9uIiwiZ2V0IiwiX3RhcmdldCIsInByb3AiLCJhcmdzIiwicHVzaCIsIm1ldGhvZCIsInByb3hpZWRUYXJnZXQiLCJrZXlzIiwiaW5jbHVkZXMiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInNldFJlYWxUYXJnZXQiLCJzZXR1cERldnRvb2xzUGx1Z2luIiwicGx1Z2luRGVzY3JpcHRvciIsInNldHVwRm4iLCJlbmFibGVQcm94eSIsImVuYWJsZUVhcmx5UHJveHkiLCJfX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIiwiZW1pdCIsInByb3h5IiwibGlzdCIsIl9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72039\n");
|
|
30
|
+
eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"setupDevtoolsPlugin\": () => (/* binding */ setupDevtoolsPlugin)\n});\n\n;// CONCATENATED MODULE: ../api/lib/esm/env.js\nfunction getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nfunction getTarget() {\n // @ts-ignore\n return typeof navigator !== 'undefined' && typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : {};\n}\nconst isProxyAvailable = typeof Proxy === 'function';\n;// CONCATENATED MODULE: ../api/lib/esm/const.js\nconst HOOK_SETUP = 'devtools-plugin:setup';\nconst HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n;// CONCATENATED MODULE: ../api/lib/esm/proxy.js\n\nclass ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n } catch (e) {// noop\n }\n\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n } catch (e) {// noop\n }\n\n currentSettings = value;\n }\n\n };\n\n if (hook) {\n hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n } else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args\n });\n };\n }\n }\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n } else if (prop === 'on') {\n return this.proxiedOn;\n } else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => {}\n });\n return this.fallbacks[prop](...args);\n };\n } else {\n return (...args) => {\n return new Promise(resolve => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve\n });\n });\n };\n }\n }\n });\n }\n\n async setRealTarget(target) {\n this.target = target;\n\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n\n}\n;// CONCATENATED MODULE: ../api/lib/esm/index.js\n\n\n\n\n\nfunction setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const descriptor = pluginDescriptor;\n const target = getTarget();\n const hook = getDevtoolsGlobalHook();\n const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;\n\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n } else {\n const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor: descriptor,\n setupFn,\n proxy\n });\n if (proxy) setupFn(proxy.proxiedTarget);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VUFBTU0sS0FBSyxHQUFHSixXQUFXLEdBQUcsSUFBSWhELFFBQUosQ0FBYStDLFVBQWIsRUFBeUI1QyxJQUF6QixDQUFILEdBQW9DLElBQTdEO0FBQ0EsVUFBTWtELElBQUksR0FBR2pELE1BQU0sQ0FBQ2tELHdCQUFQLEdBQWtDbEQsTUFBTSxDQUFDa0Qsd0JBQVAsSUFBbUMsRUFBbEY7QUFDQUQsSUFBQUEsSUFBSSxDQUFDakIsSUFBTCxDQUFVO0FBQ05TLE1BQUFBLGdCQUFnQixFQUFFRSxVQURaO0FBRU5ELE1BQUFBLE9BRk07QUFHTk0sTUFBQUE7QUFITSxLQUFWO0FBS0EsUUFBSUEsS0FBSixFQUNJTixPQUFPLENBQUNNLEtBQUssQ0FBQ2QsYUFBUCxDQUFQO0FBQ1A7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vYXBpL2xpYi9lc20vZW52LmpzP2NkZjMiLCJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9hcGkvbGliL2VzbS9jb25zdC5qcz8xODA1Iiwid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vYXBpL2xpYi9lc20vcHJveHkuanM/NzUyMCIsIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL2FwaS9saWIvZXNtL2luZGV4LmpzPzcyMDUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGdldERldnRvb2xzR2xvYmFsSG9vaygpIHtcbiAgICByZXR1cm4gZ2V0VGFyZ2V0KCkuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgID8gd2luZG93XG4gICAgICAgIDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICA6IHt9O1xufVxuZXhwb3J0IGNvbnN0IGlzUHJveHlBdmFpbGFibGUgPSB0eXBlb2YgUHJveHkgPT09ICdmdW5jdGlvbic7XG4iLCJleHBvcnQgY29uc3QgSE9PS19TRVRVUCA9ICdkZXZ0b29scy1wbHVnaW46c2V0dXAnO1xuZXhwb3J0IGNvbnN0IEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCA9ICdwbHVnaW46c2V0dGluZ3M6c2V0JztcbiIsImltcG9ydCB7IEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCB9IGZyb20gJy4vY29uc3QnO1xuZXhwb3J0IGNsYXNzIEFwaVByb3h5IHtcbiAgICBjb25zdHJ1Y3RvcihwbHVnaW4sIGhvb2spIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLnRhcmdldFF1ZXVlID0gW107XG4gICAgICAgIHRoaXMub25RdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5ob29rID0gaG9vaztcbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmdzID0ge307XG4gICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gcGx1Z2luLnNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHBsdWdpbi5zZXR0aW5nc1tpZF07XG4gICAgICAgICAgICAgICAgZGVmYXVsdFNldHRpbmdzW2lkXSA9IGl0ZW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsU2V0dGluZ3NTYXZlSWQgPSBgX192dWUtZGV2dG9vbHMtcGx1Z2luLXNldHRpbmdzX18ke3BsdWdpbi5pZH1gO1xuICAgICAgICBsZXQgY3VycmVudFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudFNldHRpbmdzLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmFsbGJhY2tzID0ge1xuICAgICAgICAgICAgZ2V0U2V0dGluZ3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTZXR0aW5ncztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRTZXR0aW5ncyh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFNldHRpbmdzID0gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaG9vaykge1xuICAgICAgICAgICAgaG9vay5vbihIT09LX1BMVUdJTl9TRVRUSU5HU19TRVQsIChwbHVnaW5JZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luSWQgPT09IHRoaXMucGx1Z2luLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFsbGJhY2tzLnNldFNldHRpbmdzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3hpZWRPbiA9IG5ldyBQcm94eSh7fSwge1xuICAgICAgICAgICAgZ2V0OiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQub25bcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25RdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHByb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb3hpZWRUYXJnZXQgPSBuZXcgUHJveHkoe30sIHtcbiAgICAgICAgICAgIGdldDogKF90YXJnZXQsIHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09PSAnb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3hpZWRPbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0LmtleXModGhpcy5mYWxsYmFja3MpLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHByb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrc1twcm9wXSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0UXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBzZXRSZWFsVGFyZ2V0KHRhcmdldCkge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMub25RdWV1ZSkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXQub25baXRlbS5tZXRob2RdKC4uLml0ZW0uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMudGFyZ2V0UXVldWUpIHtcbiAgICAgICAgICAgIGl0ZW0ucmVzb2x2ZShhd2FpdCB0aGlzLnRhcmdldFtpdGVtLm1ldGhvZF0oLi4uaXRlbS5hcmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBnZXRUYXJnZXQsIGdldERldnRvb2xzR2xvYmFsSG9vaywgaXNQcm94eUF2YWlsYWJsZSB9IGZyb20gJy4vZW52JztcbmltcG9ydCB7IEhPT0tfU0VUVVAgfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7IEFwaVByb3h5IH0gZnJvbSAnLi9wcm94eSc7XG5leHBvcnQgKiBmcm9tICcuL2FwaSc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbic7XG5leHBvcnQgZnVuY3Rpb24gc2V0dXBEZXZ0b29sc1BsdWdpbihwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHBsdWdpbkRlc2NyaXB0b3I7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KCk7XG4gICAgY29uc3QgaG9vayA9IGdldERldnRvb2xzR2xvYmFsSG9vaygpO1xuICAgIGNvbnN0IGVuYWJsZVByb3h5ID0gaXNQcm94eUF2YWlsYWJsZSAmJiBkZXNjcmlwdG9yLmVuYWJsZUVhcmx5UHJveHk7XG4gICAgaWYgKGhvb2sgJiYgKHRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIHx8ICFlbmFibGVQcm94eSkpIHtcbiAgICAgICAgaG9vay5lbWl0KEhPT0tfU0VUVVAsIHBsdWdpbkRlc2NyaXB0b3IsIHNldHVwRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJveHkgPSBlbmFibGVQcm94eSA/IG5ldyBBcGlQcm94eShkZXNjcmlwdG9yLCBob29rKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfUExVR0lOU19fID0gdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyB8fCBbXTtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICAgIHBsdWdpbkRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBzZXR1cEZuLFxuICAgICAgICAgICAgcHJveHksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocHJveHkpXG4gICAgICAgICAgICBzZXR1cEZuKHByb3h5LnByb3hpZWRUYXJnZXQpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJnZXREZXZ0b29sc0dsb2JhbEhvb2siLCJnZXRUYXJnZXQiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwibmF2aWdhdG9yIiwid2luZG93IiwiZ2xvYmFsIiwiaXNQcm94eUF2YWlsYWJsZSIsIlByb3h5IiwiSE9PS19TRVRVUCIsIkhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCIsIkFwaVByb3h5IiwiY29uc3RydWN0b3IiLCJwbHVnaW4iLCJob29rIiwidGFyZ2V0IiwidGFyZ2V0UXVldWUiLCJvblF1ZXVlIiwiZGVmYXVsdFNldHRpbmdzIiwic2V0dGluZ3MiLCJpZCIsIml0ZW0iLCJkZWZhdWx0VmFsdWUiLCJsb2NhbFNldHRpbmdzU2F2ZUlkIiwiY3VycmVudFNldHRpbmdzIiwiT2JqZWN0IiwiYXNzaWduIiwicmF3IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJlIiwiZmFsbGJhY2tzIiwiZ2V0U2V0dGluZ3MiLCJzZXRTZXR0aW5ncyIsInZhbHVlIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsIm9uIiwicGx1Z2luSWQiLCJwcm94aWVkT24iLCJnZXQiLCJfdGFyZ2V0IiwicHJvcCIsImFyZ3MiLCJwdXNoIiwibWV0aG9kIiwicHJveGllZFRhcmdldCIsImtleXMiLCJpbmNsdWRlcyIsInJlc29sdmUiLCJQcm9taXNlIiwic2V0UmVhbFRhcmdldCIsInNldHVwRGV2dG9vbHNQbHVnaW4iLCJwbHVnaW5EZXNjcmlwdG9yIiwic2V0dXBGbiIsImRlc2NyaXB0b3IiLCJlbmFibGVQcm94eSIsImVuYWJsZUVhcmx5UHJveHkiLCJfX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIiwiZW1pdCIsInByb3h5IiwibGlzdCIsIl9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72039\n");
|
|
31
31
|
|
|
32
32
|
/***/ }),
|
|
33
33
|
|
|
@@ -107,7 +107,7 @@ Object.defineProperty(exports, "__esModule", ({
|
|
|
107
107
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
108
108
|
|
|
109
109
|
"use strict";
|
|
110
|
-
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports._legacy_getAndRegisterApps = exports.removeApp = exports.sendApps = exports.waitForAppsRegistration = exports.getAppRecord = exports.getAppRecordId = exports.mapAppRecord = exports.selectApp = exports.registerApp = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst speakingurl_1 = __importDefault(__webpack_require__(97500));\n\nconst queue_1 = __webpack_require__(49107);\n\nconst scan_1 = __webpack_require__(18426);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst backend_1 = __webpack_require__(36873);\n\nconst jobs = new queue_1.JobQueue();\nlet recordId = 0;\nconst appRecordPromises = new Map();\n\nasync function registerApp(options, ctx) {\n return jobs.queue(() => registerAppJob(options, ctx));\n}\n\nexports.registerApp = registerApp;\n\nasync function registerAppJob(options, ctx) {\n // Dedupe\n if (ctx.appRecords.find(a => a.options.app === options.app)) {\n return;\n } // Find correct backend\n\n\n const baseFrameworkVersion = parseInt(options.version.substring(0, options.version.indexOf('.')));\n\n for (let i = 0; i < backend_1.availableBackends.length; i++) {\n const backendOptions = backend_1.availableBackends[i];\n\n if (backendOptions.frameworkVersion === baseFrameworkVersion) {\n // Enable backend if it's not enabled\n const backend = (0, backend_1.getBackend)(backendOptions, ctx);\n await createAppRecord(options, backend, ctx);\n break;\n }\n }\n}\n\nasync function createAppRecord(options, backend, ctx) {\n var _a;\n\n const rootInstance = await backend.api.getAppRootInstance(options.app);\n\n if (rootInstance) {\n if ((await backend.api.getComponentDevtoolsOptions(rootInstance)).hide) {\n return;\n }\n\n recordId++;\n const name = await backend.api.getAppRecordName(options.app, recordId.toString());\n const id = getAppRecordId(options.app, (0, speakingurl_1.default)(name));\n const [el] = await backend.api.getComponentRootElements(rootInstance);\n const record = {\n id,\n name,\n options,\n backend,\n lastInspectedComponentId: null,\n instanceMap: new Map(),\n rootInstance,\n perfGroupIds: new Map(),\n iframe: document !== el.ownerDocument ? el.ownerDocument.location.pathname : null,\n meta: (_a = options.meta) !== null && _a !== void 0 ? _a : {}\n };\n options.app.__VUE_DEVTOOLS_APP_RECORD__ = record;\n const rootId = `${record.id}:root`;\n record.instanceMap.set(rootId, record.rootInstance);\n record.rootInstance.__VUE_DEVTOOLS_UID__ = rootId; // Timeline\n\n (0, timeline_1.addBuiltinLayers)(record, ctx);\n ctx.appRecords.push(record);\n\n if (backend.options.setupApp) {\n backend.options.setupApp(backend.api, record);\n }\n\n await backend.api.registerApplication(options.app);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_ADD, {\n appRecord: mapAppRecord(record)\n });\n\n if (appRecordPromises.has(options.app)) {\n for (const r of appRecordPromises.get(options.app)) {\n await r(record);\n }\n } // Auto select first app\n\n\n if (ctx.currentAppRecord == null) {\n await selectApp(record, ctx);\n }\n } else {\n console.warn('[Vue devtools] No root instance found for app, it might have been unmounted', options.app);\n }\n}\n\nasync function selectApp(record, ctx) {\n ctx.currentAppRecord = record;\n ctx.currentInspectedComponentId = record.lastInspectedComponentId;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_SELECTED, {\n id: record.id,\n lastInspectedComponentId: record.lastInspectedComponentId\n });\n}\n\nexports.selectApp = selectApp;\n\nfunction mapAppRecord(record) {\n return {\n id: record.id,\n name: record.name,\n version: record.options.version,\n iframe: record.iframe\n };\n}\n\nexports.mapAppRecord = mapAppRecord;\nconst appIds = new Set();\n\nfunction getAppRecordId(app, defaultId) {\n if (app.__VUE_DEVTOOLS_APP_RECORD_ID__ != null) {\n return app.__VUE_DEVTOOLS_APP_RECORD_ID__;\n }\n\n let id = defaultId !== null && defaultId !== void 0 ? defaultId : (recordId++).toString();\n\n if (defaultId && appIds.has(id)) {\n let count = 1;\n\n while (appIds.has(`${defaultId}:${count}`)) {\n count++;\n }\n\n id = `${defaultId}_${count}`;\n }\n\n appIds.add(id);\n app.__VUE_DEVTOOLS_APP_RECORD_ID__ = id;\n return id;\n}\n\nexports.getAppRecordId = getAppRecordId;\n\nasync function getAppRecord(app, ctx) {\n const record = ctx.appRecords.find(ar => ar.options.app === app);\n\n if (record) {\n return record;\n }\n\n return new Promise((resolve, reject) => {\n let resolvers = appRecordPromises.get(app);\n let timedOut = false;\n\n if (!resolvers) {\n resolvers = [];\n appRecordPromises.set(app, resolvers);\n }\n\n const fn = record => {\n if (!timedOut) {\n clearTimeout(timer);\n resolve(record);\n }\n };\n\n resolvers.push(fn);\n const timer = setTimeout(() => {\n timedOut = true;\n const index = resolvers.indexOf(fn);\n if (index !== -1) resolvers.splice(index, 1);\n\n if (shared_utils_1.SharedData.debugInfo) {\n // eslint-disable-next-line no-console\n console.log('Timed out waiting for app record', app);\n }\n\n reject(new Error(`Timed out getting app record for app`));\n }, 60000);\n });\n}\n\nexports.getAppRecord = getAppRecord;\n\nfunction waitForAppsRegistration() {\n return jobs.queue(async () => {});\n}\n\nexports.waitForAppsRegistration = waitForAppsRegistration;\n\nasync function sendApps(ctx) {\n const appRecords = [];\n\n for (const appRecord of ctx.appRecords) {\n appRecords.push(appRecord);\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_LIST, {\n apps: appRecords.map(mapAppRecord)\n });\n}\n\nexports.sendApps = sendApps;\n\nfunction removeAppRecord(appRecord, ctx) {\n try {\n appIds.delete(appRecord.id);\n const index = ctx.appRecords.indexOf(appRecord);\n if (index !== -1) ctx.appRecords.splice(index, 1);\n (0, timeline_1.removeLayersForApp)(appRecord.options.app, ctx);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_REMOVE, {\n id: appRecord.id\n });\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nasync function removeApp(app, ctx) {\n try {\n const appRecord = await getAppRecord(app, ctx);\n\n if (appRecord) {\n removeAppRecord(appRecord, ctx);\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nexports.removeApp = removeApp; // eslint-disable-next-line camelcase\n\nasync function _legacy_getAndRegisterApps(ctx) {\n // Remove apps that are legacy\n ctx.appRecords.forEach(appRecord => {\n if (appRecord.meta.Vue) {\n removeAppRecord(appRecord, ctx);\n }\n });\n const apps = (0, scan_1.scan)();\n apps.forEach(app => {\n const Vue = app.constructor;\n registerApp({\n app,\n types: {},\n version: Vue.version,\n meta: {\n Vue\n }\n }, ctx);\n });\n}\n\nexports._legacy_getAndRegisterApps = _legacy_getAndRegisterApps;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZjcxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBleHBvcnRzLnJlbW92ZUFwcCA9IGV4cG9ydHMuc2VuZEFwcHMgPSBleHBvcnRzLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uID0gZXhwb3J0cy5nZXRBcHBSZWNvcmQgPSBleHBvcnRzLmdldEFwcFJlY29yZElkID0gZXhwb3J0cy5tYXBBcHBSZWNvcmQgPSBleHBvcnRzLnNlbGVjdEFwcCA9IGV4cG9ydHMucmVnaXN0ZXJBcHAgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IHNwZWFraW5ndXJsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInNwZWFraW5ndXJsXCIpKTtcbmNvbnN0IHF1ZXVlXzEgPSByZXF1aXJlKFwiLi91dGlsL3F1ZXVlXCIpO1xuY29uc3Qgc2Nhbl8xID0gcmVxdWlyZShcIi4vbGVnYWN5L3NjYW5cIik7XG5jb25zdCB0aW1lbGluZV8xID0gcmVxdWlyZShcIi4vdGltZWxpbmVcIik7XG5jb25zdCBiYWNrZW5kXzEgPSByZXF1aXJlKFwiLi9iYWNrZW5kXCIpO1xuY29uc3Qgam9icyA9IG5ldyBxdWV1ZV8xLkpvYlF1ZXVlKCk7XG5sZXQgcmVjb3JkSWQgPSAwO1xuY29uc3QgYXBwUmVjb3JkUHJvbWlzZXMgPSBuZXcgTWFwKCk7XG5hc3luYyBmdW5jdGlvbiByZWdpc3RlckFwcChvcHRpb25zLCBjdHgpIHtcbiAgICByZXR1cm4gam9icy5xdWV1ZSgoKSA9PiByZWdpc3RlckFwcEpvYihvcHRpb25zLCBjdHgpKTtcbn1cbmV4cG9ydHMucmVnaXN0ZXJBcHAgPSByZWdpc3RlckFwcDtcbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyQXBwSm9iKG9wdGlvbnMsIGN0eCkge1xuICAgIC8vIERlZHVwZVxuICAgIGlmIChjdHguYXBwUmVjb3Jkcy5maW5kKGEgPT4gYS5vcHRpb25zLmFwcCA9PT0gb3B0aW9ucy5hcHApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmluZCBjb3JyZWN0IGJhY2tlbmRcbiAgICBjb25zdCBiYXNlRnJhbWV3b3JrVmVyc2lvbiA9IHBhcnNlSW50KG9wdGlvbnMudmVyc2lvbi5zdWJzdHJpbmcoMCwgb3B0aW9ucy52ZXJzaW9uLmluZGV4T2YoJy4nKSkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmRPcHRpb25zID0gYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzW2ldO1xuICAgICAgICBpZiAoYmFja2VuZE9wdGlvbnMuZnJhbWV3b3JrVmVyc2lvbiA9PT0gYmFzZUZyYW1ld29ya1ZlcnNpb24pIHtcbiAgICAgICAgICAgIC8vIEVuYWJsZSBiYWNrZW5kIGlmIGl0J3Mgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGNvbnN0IGJhY2tlbmQgPSAoMCwgYmFja2VuZF8xLmdldEJhY2tlbmQpKGJhY2tlbmRPcHRpb25zLCBjdHgpO1xuICAgICAgICAgICAgYXdhaXQgY3JlYXRlQXBwUmVjb3JkKG9wdGlvbnMsIGJhY2tlbmQsIGN0eCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcFJlY29yZChvcHRpb25zLCBiYWNrZW5kLCBjdHgpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgcm9vdEluc3RhbmNlID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUm9vdEluc3RhbmNlKG9wdGlvbnMuYXBwKTtcbiAgICBpZiAocm9vdEluc3RhbmNlKSB7XG4gICAgICAgIGlmICgoYXdhaXQgYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50RGV2dG9vbHNPcHRpb25zKHJvb3RJbnN0YW5jZSkpLmhpZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWNvcmRJZCsrO1xuICAgICAgICBjb25zdCBuYW1lID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUmVjb3JkTmFtZShvcHRpb25zLmFwcCwgcmVjb3JkSWQudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IGlkID0gZ2V0QXBwUmVjb3JkSWQob3B0aW9ucy5hcHAsICgwLCBzcGVha2luZ3VybF8xLmRlZmF1bHQpKG5hbWUpKTtcbiAgICAgICAgY29uc3QgW2VsXSA9IGF3YWl0IGJhY2tlbmQuYXBpLmdldENvbXBvbmVudFJvb3RFbGVtZW50cyhyb290SW5zdGFuY2UpO1xuICAgICAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgYmFja2VuZCxcbiAgICAgICAgICAgIGxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDogbnVsbCxcbiAgICAgICAgICAgIGluc3RhbmNlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgICByb290SW5zdGFuY2UsXG4gICAgICAgICAgICBwZXJmR3JvdXBJZHM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIGlmcmFtZTogZG9jdW1lbnQgIT09IGVsLm93bmVyRG9jdW1lbnQgPyBlbC5vd25lckRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lIDogbnVsbCxcbiAgICAgICAgICAgIG1ldGE6IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMuYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfXyA9IHJlY29yZDtcbiAgICAgICAgY29uc3Qgcm9vdElkID0gYCR7cmVjb3JkLmlkfTpyb290YDtcbiAgICAgICAgcmVjb3JkLmluc3RhbmNlTWFwLnNldChyb290SWQsIHJlY29yZC5yb290SW5zdGFuY2UpO1xuICAgICAgICByZWNvcmQucm9vdEluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gcm9vdElkO1xuICAgICAgICAvLyBUaW1lbGluZVxuICAgICAgICAoMCwgdGltZWxpbmVfMS5hZGRCdWlsdGluTGF5ZXJzKShyZWNvcmQsIGN0eCk7XG4gICAgICAgIGN0eC5hcHBSZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgaWYgKGJhY2tlbmQub3B0aW9ucy5zZXR1cEFwcCkge1xuICAgICAgICAgICAgYmFja2VuZC5vcHRpb25zLnNldHVwQXBwKGJhY2tlbmQuYXBpLCByZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGJhY2tlbmQuYXBpLnJlZ2lzdGVyQXBwbGljYXRpb24ob3B0aW9ucy5hcHApO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9BREQsIHtcbiAgICAgICAgICAgIGFwcFJlY29yZDogbWFwQXBwUmVjb3JkKHJlY29yZCksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYXBwUmVjb3JkUHJvbWlzZXMuaGFzKG9wdGlvbnMuYXBwKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGFwcFJlY29yZFByb21pc2VzLmdldChvcHRpb25zLmFwcCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByKHJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXV0byBzZWxlY3QgZmlyc3QgYXBwXG4gICAgICAgIGlmIChjdHguY3VycmVudEFwcFJlY29yZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBhd2FpdCBzZWxlY3RBcHAocmVjb3JkLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tWdWUgZGV2dG9vbHNdIE5vIHJvb3QgaW5zdGFuY2UgZm91bmQgZm9yIGFwcCwgaXQgbWlnaHQgaGF2ZSBiZWVuIHVubW91bnRlZCcsIG9wdGlvbnMuYXBwKTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBzZWxlY3RBcHAocmVjb3JkLCBjdHgpIHtcbiAgICBjdHguY3VycmVudEFwcFJlY29yZCA9IHJlY29yZDtcbiAgICBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkID0gcmVjb3JkLmxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9TRUxFQ1RFRCwge1xuICAgICAgICBpZDogcmVjb3JkLmlkLFxuICAgICAgICBsYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQ6IHJlY29yZC5sYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQsXG4gICAgfSk7XG59XG5leHBvcnRzLnNlbGVjdEFwcCA9IHNlbGVjdEFwcDtcbmZ1bmN0aW9uIG1hcEFwcFJlY29yZChyZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogcmVjb3JkLmlkLFxuICAgICAgICBuYW1lOiByZWNvcmQubmFtZSxcbiAgICAgICAgdmVyc2lvbjogcmVjb3JkLm9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgaWZyYW1lOiByZWNvcmQuaWZyYW1lLFxuICAgIH07XG59XG5leHBvcnRzLm1hcEFwcFJlY29yZCA9IG1hcEFwcFJlY29yZDtcbmNvbnN0IGFwcElkcyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIGdldEFwcFJlY29yZElkKGFwcCwgZGVmYXVsdElkKSB7XG4gICAgaWYgKGFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX0lEX18gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfSURfXztcbiAgICB9XG4gICAgbGV0IGlkID0gZGVmYXVsdElkICE9PSBudWxsICYmIGRlZmF1bHRJZCAhPT0gdm9pZCAwID8gZGVmYXVsdElkIDogKHJlY29yZElkKyspLnRvU3RyaW5nKCk7XG4gICAgaWYgKGRlZmF1bHRJZCAmJiBhcHBJZHMuaGFzKGlkKSkge1xuICAgICAgICBsZXQgY291bnQgPSAxO1xuICAgICAgICB3aGlsZSAoYXBwSWRzLmhhcyhgJHtkZWZhdWx0SWR9OiR7Y291bnR9YCkpIHtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWQgPSBgJHtkZWZhdWx0SWR9XyR7Y291bnR9YDtcbiAgICB9XG4gICAgYXBwSWRzLmFkZChpZCk7XG4gICAgYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfSURfXyA9IGlkO1xuICAgIHJldHVybiBpZDtcbn1cbmV4cG9ydHMuZ2V0QXBwUmVjb3JkSWQgPSBnZXRBcHBSZWNvcmRJZDtcbmFzeW5jIGZ1bmN0aW9uIGdldEFwcFJlY29yZChhcHAsIGN0eCkge1xuICAgIGNvbnN0IHJlY29yZCA9IGN0eC5hcHBSZWNvcmRzLmZpbmQoYXIgPT4gYXIub3B0aW9ucy5hcHAgPT09IGFwcCk7XG4gICAgaWYgKHJlY29yZCkge1xuICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVzb2x2ZXJzID0gYXBwUmVjb3JkUHJvbWlzZXMuZ2V0KGFwcCk7XG4gICAgICAgIGxldCB0aW1lZE91dCA9IGZhbHNlO1xuICAgICAgICBpZiAoIXJlc29sdmVycykge1xuICAgICAgICAgICAgcmVzb2x2ZXJzID0gW107XG4gICAgICAgICAgICBhcHBSZWNvcmRQcm9taXNlcy5zZXQoYXBwLCByZXNvbHZlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZuID0gKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aW1lZE91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXNvbHZlcnMucHVzaChmbik7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlc29sdmVycy5pbmRleE9mKGZuKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgYXBwIHJlY29yZCcsIGFwcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaW1lZCBvdXQgZ2V0dGluZyBhcHAgcmVjb3JkIGZvciBhcHBgKSk7XG4gICAgICAgIH0sIDYwMDAwKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0QXBwUmVjb3JkID0gZ2V0QXBwUmVjb3JkO1xuZnVuY3Rpb24gd2FpdEZvckFwcHNSZWdpc3RyYXRpb24oKSB7XG4gICAgcmV0dXJuIGpvYnMucXVldWUoYXN5bmMgKCkgPT4geyB9KTtcbn1cbmV4cG9ydHMud2FpdEZvckFwcHNSZWdpc3RyYXRpb24gPSB3YWl0Rm9yQXBwc1JlZ2lzdHJhdGlvbjtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRBcHBzKGN0eCkge1xuICAgIGNvbnN0IGFwcFJlY29yZHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGFwcFJlY29yZCBvZiBjdHguYXBwUmVjb3Jkcykge1xuICAgICAgICBhcHBSZWNvcmRzLnB1c2goYXBwUmVjb3JkKTtcbiAgICB9XG4gICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfTElTVCwge1xuICAgICAgICBhcHBzOiBhcHBSZWNvcmRzLm1hcChtYXBBcHBSZWNvcmQpLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kQXBwcyA9IHNlbmRBcHBzO1xuZnVuY3Rpb24gcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYXBwSWRzLmRlbGV0ZShhcHBSZWNvcmQuaWQpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGN0eC5hcHBSZWNvcmRzLmluZGV4T2YoYXBwUmVjb3JkKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgIGN0eC5hcHBSZWNvcmRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICgwLCB0aW1lbGluZV8xLnJlbW92ZUxheWVyc0ZvckFwcCkoYXBwUmVjb3JkLm9wdGlvbnMuYXBwLCBjdHgpO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9SRU1PVkUsIHsgaWQ6IGFwcFJlY29yZC5pZCB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQXBwKGFwcCwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgZ2V0QXBwUmVjb3JkKGFwcCwgY3R4KTtcbiAgICAgICAgaWYgKGFwcFJlY29yZCkge1xuICAgICAgICAgICAgcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnJlbW92ZUFwcCA9IHJlbW92ZUFwcDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbmFzeW5jIGZ1bmN0aW9uIF9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzKGN0eCkge1xuICAgIC8vIFJlbW92ZSBhcHBzIHRoYXQgYXJlIGxlZ2FjeVxuICAgIGN0eC5hcHBSZWNvcmRzLmZvckVhY2goYXBwUmVjb3JkID0+IHtcbiAgICAgICAgaWYgKGFwcFJlY29yZC5tZXRhLlZ1ZSkge1xuICAgICAgICAgICAgcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGFwcHMgPSAoMCwgc2Nhbl8xLnNjYW4pKCk7XG4gICAgYXBwcy5mb3JFYWNoKGFwcCA9PiB7XG4gICAgICAgIGNvbnN0IFZ1ZSA9IGFwcC5jb25zdHJ1Y3RvcjtcbiAgICAgICAgcmVnaXN0ZXJBcHAoe1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgdHlwZXM6IHt9LFxuICAgICAgICAgICAgdmVyc2lvbjogVnVlLnZlcnNpb24sXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgICAgVnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgY3R4KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBfbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///79132\n");
|
|
110
|
+
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports._legacy_getAndRegisterApps = exports.removeApp = exports.sendApps = exports.waitForAppsRegistration = exports.getAppRecord = exports.getAppRecordId = exports.mapAppRecord = exports.selectApp = exports.registerApp = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst speakingurl_1 = __importDefault(__webpack_require__(97500));\n\nconst queue_1 = __webpack_require__(49107);\n\nconst scan_1 = __webpack_require__(18426);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst backend_1 = __webpack_require__(36873);\n\nconst global_hook_js_1 = __webpack_require__(13179);\n\nconst jobs = new queue_1.JobQueue();\nlet recordId = 0;\nconst appRecordPromises = new Map();\n\nasync function registerApp(options, ctx) {\n return jobs.queue(() => registerAppJob(options, ctx));\n}\n\nexports.registerApp = registerApp;\n\nasync function registerAppJob(options, ctx) {\n // Dedupe\n if (ctx.appRecords.find(a => a.options.app === options.app)) {\n return;\n }\n\n if (!options.version) {\n throw new Error('[Vue Devtools] Vue version not found');\n } // Find correct backend\n\n\n const baseFrameworkVersion = parseInt(options.version.substring(0, options.version.indexOf('.')));\n\n for (let i = 0; i < backend_1.availableBackends.length; i++) {\n const backendOptions = backend_1.availableBackends[i];\n\n if (backendOptions.frameworkVersion === baseFrameworkVersion) {\n // Enable backend if it's not enabled\n const backend = (0, backend_1.getBackend)(backendOptions, ctx);\n await createAppRecord(options, backend, ctx);\n break;\n }\n }\n}\n\nasync function createAppRecord(options, backend, ctx) {\n var _a;\n\n const rootInstance = await backend.api.getAppRootInstance(options.app);\n\n if (rootInstance) {\n if ((await backend.api.getComponentDevtoolsOptions(rootInstance)).hide) {\n return;\n }\n\n recordId++;\n const name = await backend.api.getAppRecordName(options.app, recordId.toString());\n const id = getAppRecordId(options.app, (0, speakingurl_1.default)(name));\n const [el] = await backend.api.getComponentRootElements(rootInstance);\n const record = {\n id,\n name,\n options,\n backend,\n lastInspectedComponentId: null,\n instanceMap: new Map(),\n rootInstance,\n perfGroupIds: new Map(),\n iframe: document !== el.ownerDocument ? el.ownerDocument.location.pathname : null,\n meta: (_a = options.meta) !== null && _a !== void 0 ? _a : {}\n };\n options.app.__VUE_DEVTOOLS_APP_RECORD__ = record;\n const rootId = `${record.id}:root`;\n record.instanceMap.set(rootId, record.rootInstance);\n record.rootInstance.__VUE_DEVTOOLS_UID__ = rootId; // Timeline\n\n (0, timeline_1.addBuiltinLayers)(record, ctx);\n ctx.appRecords.push(record);\n\n if (backend.options.setupApp) {\n backend.options.setupApp(backend.api, record);\n }\n\n await backend.api.registerApplication(options.app);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_ADD, {\n appRecord: mapAppRecord(record)\n });\n\n if (appRecordPromises.has(options.app)) {\n for (const r of appRecordPromises.get(options.app)) {\n await r(record);\n }\n } // Auto select first app\n\n\n if (ctx.currentAppRecord == null) {\n await selectApp(record, ctx);\n }\n } else {\n console.warn('[Vue devtools] No root instance found for app, it might have been unmounted', options.app);\n }\n}\n\nasync function selectApp(record, ctx) {\n ctx.currentAppRecord = record;\n ctx.currentInspectedComponentId = record.lastInspectedComponentId;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_SELECTED, {\n id: record.id,\n lastInspectedComponentId: record.lastInspectedComponentId\n });\n}\n\nexports.selectApp = selectApp;\n\nfunction mapAppRecord(record) {\n return {\n id: record.id,\n name: record.name,\n version: record.options.version,\n iframe: record.iframe\n };\n}\n\nexports.mapAppRecord = mapAppRecord;\nconst appIds = new Set();\n\nfunction getAppRecordId(app, defaultId) {\n if (app.__VUE_DEVTOOLS_APP_RECORD_ID__ != null) {\n return app.__VUE_DEVTOOLS_APP_RECORD_ID__;\n }\n\n let id = defaultId !== null && defaultId !== void 0 ? defaultId : (recordId++).toString();\n\n if (defaultId && appIds.has(id)) {\n let count = 1;\n\n while (appIds.has(`${defaultId}:${count}`)) {\n count++;\n }\n\n id = `${defaultId}_${count}`;\n }\n\n appIds.add(id);\n app.__VUE_DEVTOOLS_APP_RECORD_ID__ = id;\n return id;\n}\n\nexports.getAppRecordId = getAppRecordId;\n\nasync function getAppRecord(app, ctx) {\n const record = ctx.appRecords.find(ar => ar.options.app === app);\n\n if (record) {\n return record;\n }\n\n return new Promise((resolve, reject) => {\n let resolvers = appRecordPromises.get(app);\n let timedOut = false;\n\n if (!resolvers) {\n resolvers = [];\n appRecordPromises.set(app, resolvers);\n }\n\n const fn = record => {\n if (!timedOut) {\n clearTimeout(timer);\n resolve(record);\n }\n };\n\n resolvers.push(fn);\n const timer = setTimeout(() => {\n timedOut = true;\n const index = resolvers.indexOf(fn);\n if (index !== -1) resolvers.splice(index, 1);\n\n if (shared_utils_1.SharedData.debugInfo) {\n // eslint-disable-next-line no-console\n console.log('Timed out waiting for app record', app);\n }\n\n reject(new Error(`Timed out getting app record for app`));\n }, 60000);\n });\n}\n\nexports.getAppRecord = getAppRecord;\n\nfunction waitForAppsRegistration() {\n return jobs.queue(async () => {});\n}\n\nexports.waitForAppsRegistration = waitForAppsRegistration;\n\nasync function sendApps(ctx) {\n const appRecords = [];\n\n for (const appRecord of ctx.appRecords) {\n appRecords.push(appRecord);\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_LIST, {\n apps: appRecords.map(mapAppRecord)\n });\n}\n\nexports.sendApps = sendApps;\n\nfunction removeAppRecord(appRecord, ctx) {\n try {\n appIds.delete(appRecord.id);\n const index = ctx.appRecords.indexOf(appRecord);\n if (index !== -1) ctx.appRecords.splice(index, 1);\n (0, timeline_1.removeLayersForApp)(appRecord.options.app, ctx);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_APP_REMOVE, {\n id: appRecord.id\n });\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nasync function removeApp(app, ctx) {\n try {\n const appRecord = await getAppRecord(app, ctx);\n\n if (appRecord) {\n removeAppRecord(appRecord, ctx);\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nexports.removeApp = removeApp; // eslint-disable-next-line camelcase\n\nasync function _legacy_getAndRegisterApps(ctx) {\n // Remove apps that are legacy\n ctx.appRecords.forEach(appRecord => {\n if (appRecord.meta.Vue) {\n removeAppRecord(appRecord, ctx);\n }\n });\n const apps = (0, scan_1.scan)();\n apps.forEach(app => {\n const Vue = global_hook_js_1.hook.Vue;\n registerApp({\n app,\n types: {},\n version: Vue === null || Vue === void 0 ? void 0 : Vue.version,\n meta: {\n Vue\n }\n }, ctx);\n });\n}\n\nexports._legacy_getAndRegisterApps = _legacy_getAndRegisterApps;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUU7QUFDSjtBQURJO0FBSkksS0FBRCxFQU9SLEdBUFEsQ0FBWDtBQVFELEdBVkQ7QUFXRDs7QUFwQkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL3NyYy9hcHAudHM/ZjcxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMgPSBleHBvcnRzLnJlbW92ZUFwcCA9IGV4cG9ydHMuc2VuZEFwcHMgPSBleHBvcnRzLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uID0gZXhwb3J0cy5nZXRBcHBSZWNvcmQgPSBleHBvcnRzLmdldEFwcFJlY29yZElkID0gZXhwb3J0cy5tYXBBcHBSZWNvcmQgPSBleHBvcnRzLnNlbGVjdEFwcCA9IGV4cG9ydHMucmVnaXN0ZXJBcHAgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IHNwZWFraW5ndXJsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInNwZWFraW5ndXJsXCIpKTtcbmNvbnN0IHF1ZXVlXzEgPSByZXF1aXJlKFwiLi91dGlsL3F1ZXVlXCIpO1xuY29uc3Qgc2Nhbl8xID0gcmVxdWlyZShcIi4vbGVnYWN5L3NjYW5cIik7XG5jb25zdCB0aW1lbGluZV8xID0gcmVxdWlyZShcIi4vdGltZWxpbmVcIik7XG5jb25zdCBiYWNrZW5kXzEgPSByZXF1aXJlKFwiLi9iYWNrZW5kXCIpO1xuY29uc3QgZ2xvYmFsX2hvb2tfanNfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbC1ob29rLmpzXCIpO1xuY29uc3Qgam9icyA9IG5ldyBxdWV1ZV8xLkpvYlF1ZXVlKCk7XG5sZXQgcmVjb3JkSWQgPSAwO1xuY29uc3QgYXBwUmVjb3JkUHJvbWlzZXMgPSBuZXcgTWFwKCk7XG5hc3luYyBmdW5jdGlvbiByZWdpc3RlckFwcChvcHRpb25zLCBjdHgpIHtcbiAgICByZXR1cm4gam9icy5xdWV1ZSgoKSA9PiByZWdpc3RlckFwcEpvYihvcHRpb25zLCBjdHgpKTtcbn1cbmV4cG9ydHMucmVnaXN0ZXJBcHAgPSByZWdpc3RlckFwcDtcbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyQXBwSm9iKG9wdGlvbnMsIGN0eCkge1xuICAgIC8vIERlZHVwZVxuICAgIGlmIChjdHguYXBwUmVjb3Jkcy5maW5kKGEgPT4gYS5vcHRpb25zLmFwcCA9PT0gb3B0aW9ucy5hcHApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLnZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbVnVlIERldnRvb2xzXSBWdWUgdmVyc2lvbiBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgLy8gRmluZCBjb3JyZWN0IGJhY2tlbmRcbiAgICBjb25zdCBiYXNlRnJhbWV3b3JrVmVyc2lvbiA9IHBhcnNlSW50KG9wdGlvbnMudmVyc2lvbi5zdWJzdHJpbmcoMCwgb3B0aW9ucy52ZXJzaW9uLmluZGV4T2YoJy4nKSkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmRPcHRpb25zID0gYmFja2VuZF8xLmF2YWlsYWJsZUJhY2tlbmRzW2ldO1xuICAgICAgICBpZiAoYmFja2VuZE9wdGlvbnMuZnJhbWV3b3JrVmVyc2lvbiA9PT0gYmFzZUZyYW1ld29ya1ZlcnNpb24pIHtcbiAgICAgICAgICAgIC8vIEVuYWJsZSBiYWNrZW5kIGlmIGl0J3Mgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGNvbnN0IGJhY2tlbmQgPSAoMCwgYmFja2VuZF8xLmdldEJhY2tlbmQpKGJhY2tlbmRPcHRpb25zLCBjdHgpO1xuICAgICAgICAgICAgYXdhaXQgY3JlYXRlQXBwUmVjb3JkKG9wdGlvbnMsIGJhY2tlbmQsIGN0eCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcFJlY29yZChvcHRpb25zLCBiYWNrZW5kLCBjdHgpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgcm9vdEluc3RhbmNlID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUm9vdEluc3RhbmNlKG9wdGlvbnMuYXBwKTtcbiAgICBpZiAocm9vdEluc3RhbmNlKSB7XG4gICAgICAgIGlmICgoYXdhaXQgYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50RGV2dG9vbHNPcHRpb25zKHJvb3RJbnN0YW5jZSkpLmhpZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWNvcmRJZCsrO1xuICAgICAgICBjb25zdCBuYW1lID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0QXBwUmVjb3JkTmFtZShvcHRpb25zLmFwcCwgcmVjb3JkSWQudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IGlkID0gZ2V0QXBwUmVjb3JkSWQob3B0aW9ucy5hcHAsICgwLCBzcGVha2luZ3VybF8xLmRlZmF1bHQpKG5hbWUpKTtcbiAgICAgICAgY29uc3QgW2VsXSA9IGF3YWl0IGJhY2tlbmQuYXBpLmdldENvbXBvbmVudFJvb3RFbGVtZW50cyhyb290SW5zdGFuY2UpO1xuICAgICAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgYmFja2VuZCxcbiAgICAgICAgICAgIGxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDogbnVsbCxcbiAgICAgICAgICAgIGluc3RhbmNlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgICByb290SW5zdGFuY2UsXG4gICAgICAgICAgICBwZXJmR3JvdXBJZHM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIGlmcmFtZTogZG9jdW1lbnQgIT09IGVsLm93bmVyRG9jdW1lbnQgPyBlbC5vd25lckRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lIDogbnVsbCxcbiAgICAgICAgICAgIG1ldGE6IChfYSA9IG9wdGlvbnMubWV0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMuYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfXyA9IHJlY29yZDtcbiAgICAgICAgY29uc3Qgcm9vdElkID0gYCR7cmVjb3JkLmlkfTpyb290YDtcbiAgICAgICAgcmVjb3JkLmluc3RhbmNlTWFwLnNldChyb290SWQsIHJlY29yZC5yb290SW5zdGFuY2UpO1xuICAgICAgICByZWNvcmQucm9vdEluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gcm9vdElkO1xuICAgICAgICAvLyBUaW1lbGluZVxuICAgICAgICAoMCwgdGltZWxpbmVfMS5hZGRCdWlsdGluTGF5ZXJzKShyZWNvcmQsIGN0eCk7XG4gICAgICAgIGN0eC5hcHBSZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgaWYgKGJhY2tlbmQub3B0aW9ucy5zZXR1cEFwcCkge1xuICAgICAgICAgICAgYmFja2VuZC5vcHRpb25zLnNldHVwQXBwKGJhY2tlbmQuYXBpLCByZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGJhY2tlbmQuYXBpLnJlZ2lzdGVyQXBwbGljYXRpb24ob3B0aW9ucy5hcHApO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9BREQsIHtcbiAgICAgICAgICAgIGFwcFJlY29yZDogbWFwQXBwUmVjb3JkKHJlY29yZCksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYXBwUmVjb3JkUHJvbWlzZXMuaGFzKG9wdGlvbnMuYXBwKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGFwcFJlY29yZFByb21pc2VzLmdldChvcHRpb25zLmFwcCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByKHJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXV0byBzZWxlY3QgZmlyc3QgYXBwXG4gICAgICAgIGlmIChjdHguY3VycmVudEFwcFJlY29yZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBhd2FpdCBzZWxlY3RBcHAocmVjb3JkLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tWdWUgZGV2dG9vbHNdIE5vIHJvb3QgaW5zdGFuY2UgZm91bmQgZm9yIGFwcCwgaXQgbWlnaHQgaGF2ZSBiZWVuIHVubW91bnRlZCcsIG9wdGlvbnMuYXBwKTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBzZWxlY3RBcHAocmVjb3JkLCBjdHgpIHtcbiAgICBjdHguY3VycmVudEFwcFJlY29yZCA9IHJlY29yZDtcbiAgICBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkID0gcmVjb3JkLmxhc3RJbnNwZWN0ZWRDb21wb25lbnRJZDtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9TRUxFQ1RFRCwge1xuICAgICAgICBpZDogcmVjb3JkLmlkLFxuICAgICAgICBsYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQ6IHJlY29yZC5sYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQsXG4gICAgfSk7XG59XG5leHBvcnRzLnNlbGVjdEFwcCA9IHNlbGVjdEFwcDtcbmZ1bmN0aW9uIG1hcEFwcFJlY29yZChyZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogcmVjb3JkLmlkLFxuICAgICAgICBuYW1lOiByZWNvcmQubmFtZSxcbiAgICAgICAgdmVyc2lvbjogcmVjb3JkLm9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgaWZyYW1lOiByZWNvcmQuaWZyYW1lLFxuICAgIH07XG59XG5leHBvcnRzLm1hcEFwcFJlY29yZCA9IG1hcEFwcFJlY29yZDtcbmNvbnN0IGFwcElkcyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIGdldEFwcFJlY29yZElkKGFwcCwgZGVmYXVsdElkKSB7XG4gICAgaWYgKGFwcC5fX1ZVRV9ERVZUT09MU19BUFBfUkVDT1JEX0lEX18gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfSURfXztcbiAgICB9XG4gICAgbGV0IGlkID0gZGVmYXVsdElkICE9PSBudWxsICYmIGRlZmF1bHRJZCAhPT0gdm9pZCAwID8gZGVmYXVsdElkIDogKHJlY29yZElkKyspLnRvU3RyaW5nKCk7XG4gICAgaWYgKGRlZmF1bHRJZCAmJiBhcHBJZHMuaGFzKGlkKSkge1xuICAgICAgICBsZXQgY291bnQgPSAxO1xuICAgICAgICB3aGlsZSAoYXBwSWRzLmhhcyhgJHtkZWZhdWx0SWR9OiR7Y291bnR9YCkpIHtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWQgPSBgJHtkZWZhdWx0SWR9XyR7Y291bnR9YDtcbiAgICB9XG4gICAgYXBwSWRzLmFkZChpZCk7XG4gICAgYXBwLl9fVlVFX0RFVlRPT0xTX0FQUF9SRUNPUkRfSURfXyA9IGlkO1xuICAgIHJldHVybiBpZDtcbn1cbmV4cG9ydHMuZ2V0QXBwUmVjb3JkSWQgPSBnZXRBcHBSZWNvcmRJZDtcbmFzeW5jIGZ1bmN0aW9uIGdldEFwcFJlY29yZChhcHAsIGN0eCkge1xuICAgIGNvbnN0IHJlY29yZCA9IGN0eC5hcHBSZWNvcmRzLmZpbmQoYXIgPT4gYXIub3B0aW9ucy5hcHAgPT09IGFwcCk7XG4gICAgaWYgKHJlY29yZCkge1xuICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVzb2x2ZXJzID0gYXBwUmVjb3JkUHJvbWlzZXMuZ2V0KGFwcCk7XG4gICAgICAgIGxldCB0aW1lZE91dCA9IGZhbHNlO1xuICAgICAgICBpZiAoIXJlc29sdmVycykge1xuICAgICAgICAgICAgcmVzb2x2ZXJzID0gW107XG4gICAgICAgICAgICBhcHBSZWNvcmRQcm9taXNlcy5zZXQoYXBwLCByZXNvbHZlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZuID0gKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aW1lZE91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXNvbHZlcnMucHVzaChmbik7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlc29sdmVycy5pbmRleE9mKGZuKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgYXBwIHJlY29yZCcsIGFwcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaW1lZCBvdXQgZ2V0dGluZyBhcHAgcmVjb3JkIGZvciBhcHBgKSk7XG4gICAgICAgIH0sIDYwMDAwKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0QXBwUmVjb3JkID0gZ2V0QXBwUmVjb3JkO1xuZnVuY3Rpb24gd2FpdEZvckFwcHNSZWdpc3RyYXRpb24oKSB7XG4gICAgcmV0dXJuIGpvYnMucXVldWUoYXN5bmMgKCkgPT4geyB9KTtcbn1cbmV4cG9ydHMud2FpdEZvckFwcHNSZWdpc3RyYXRpb24gPSB3YWl0Rm9yQXBwc1JlZ2lzdHJhdGlvbjtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRBcHBzKGN0eCkge1xuICAgIGNvbnN0IGFwcFJlY29yZHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGFwcFJlY29yZCBvZiBjdHguYXBwUmVjb3Jkcykge1xuICAgICAgICBhcHBSZWNvcmRzLnB1c2goYXBwUmVjb3JkKTtcbiAgICB9XG4gICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9BUFBfTElTVCwge1xuICAgICAgICBhcHBzOiBhcHBSZWNvcmRzLm1hcChtYXBBcHBSZWNvcmQpLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kQXBwcyA9IHNlbmRBcHBzO1xuZnVuY3Rpb24gcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYXBwSWRzLmRlbGV0ZShhcHBSZWNvcmQuaWQpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGN0eC5hcHBSZWNvcmRzLmluZGV4T2YoYXBwUmVjb3JkKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgIGN0eC5hcHBSZWNvcmRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICgwLCB0aW1lbGluZV8xLnJlbW92ZUxheWVyc0ZvckFwcCkoYXBwUmVjb3JkLm9wdGlvbnMuYXBwLCBjdHgpO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0FQUF9SRU1PVkUsIHsgaWQ6IGFwcFJlY29yZC5pZCB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQXBwKGFwcCwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgZ2V0QXBwUmVjb3JkKGFwcCwgY3R4KTtcbiAgICAgICAgaWYgKGFwcFJlY29yZCkge1xuICAgICAgICAgICAgcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnJlbW92ZUFwcCA9IHJlbW92ZUFwcDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbmFzeW5jIGZ1bmN0aW9uIF9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzKGN0eCkge1xuICAgIC8vIFJlbW92ZSBhcHBzIHRoYXQgYXJlIGxlZ2FjeVxuICAgIGN0eC5hcHBSZWNvcmRzLmZvckVhY2goYXBwUmVjb3JkID0+IHtcbiAgICAgICAgaWYgKGFwcFJlY29yZC5tZXRhLlZ1ZSkge1xuICAgICAgICAgICAgcmVtb3ZlQXBwUmVjb3JkKGFwcFJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGFwcHMgPSAoMCwgc2Nhbl8xLnNjYW4pKCk7XG4gICAgYXBwcy5mb3JFYWNoKGFwcCA9PiB7XG4gICAgICAgIGNvbnN0IFZ1ZSA9IGdsb2JhbF9ob29rX2pzXzEuaG9vay5WdWU7XG4gICAgICAgIHJlZ2lzdGVyQXBwKHtcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgIHR5cGVzOiB7fSxcbiAgICAgICAgICAgIHZlcnNpb246IFZ1ZSA9PT0gbnVsbCB8fCBWdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFZ1ZS52ZXJzaW9uLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAgIFZ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIGN0eCk7XG4gICAgfSk7XG59XG5leHBvcnRzLl9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzID0gX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///79132\n");
|
|
111
111
|
|
|
112
112
|
/***/ }),
|
|
113
113
|
|
|
@@ -283,7 +283,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
283
283
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
284
284
|
|
|
285
285
|
"use strict";
|
|
286
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getComponentParents = exports.walkTree = exports.functionalVnodeMap = exports.instanceMap = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst el_1 = __webpack_require__(66351);\n\nconst util_1 = __webpack_require__(95136);\n\nlet appRecord;\nlet api;\nconst consoleBoundInstances = Array(5);\nlet filter = '';\nconst functionalIds = new Map(); // Dedupe instances\n// Some instances may be both on a component and on a child abstract/functional component\n\nconst captureIds = new Map();\n\nasync function walkTree(instance, pFilter, api, ctx) {\n initCtx(api, ctx);\n filter = pFilter;\n functionalIds.clear();\n captureIds.clear();\n const result = flatten(await findQualifiedChildren(instance));\n return result;\n}\n\nexports.walkTree = walkTree;\n\nfunction getComponentParents(instance, api, ctx) {\n initCtx(api, ctx);\n const captureIds = new Map();\n\n const captureId = vm => {\n const id = (0, util_1.getUniqueId)(vm);\n if (captureIds.has(id)) return;\n captureIds.set(id, undefined);\n mark(vm);\n };\n\n const parents = [];\n captureId(instance);\n let parent = instance;\n\n while (parent = parent.$parent) {\n captureId(parent);\n parents.push(parent);\n }\n\n return parents;\n}\n\nexports.getComponentParents = getComponentParents;\n\nfunction initCtx(_api, ctx) {\n appRecord = ctx.currentAppRecord;\n api = _api;\n\n if (!appRecord.meta.instanceMap) {\n appRecord.meta.instanceMap = new Map();\n }\n\n exports.instanceMap = appRecord.meta.instanceMap;\n\n if (!appRecord.meta.functionalVnodeMap) {\n appRecord.meta.functionalVnodeMap = new Map();\n }\n\n exports.functionalVnodeMap = appRecord.meta.functionalVnodeMap;\n}\n/**\n * Iterate through an array of instances and flatten it into\n * an array of qualified instances. This is a depth-first\n * traversal - e.g. if an instance is not matched, we will\n * recursively go deeper until a qualified child is found.\n */\n\n\nfunction findQualifiedChildrenFromList(instances) {\n instances = instances.filter(child => !(0, util_1.isBeingDestroyed)(child));\n return Promise.all(!filter ? instances.map(capture) : Array.prototype.concat.apply([], instances.map(findQualifiedChildren)));\n}\n/**\n * Find qualified children from a single instance.\n * If the instance itself is qualified, just return itself.\n * This is ok because [].concat works in both cases.\n */\n\n\nasync function findQualifiedChildren(instance) {\n if (isQualified(instance)) {\n return [await capture(instance)];\n } else {\n let children = await findQualifiedChildrenFromList(instance.$children); // Find functional components in recursively in non-functional vnodes.\n\n if (instance._vnode && instance._vnode.children) {\n const list = await Promise.all(flatten(instance._vnode.children.filter(child => !child.componentInstance).map(captureChild))); // Filter qualified children.\n\n const additionalChildren = list.filter(instance => isQualified(instance));\n children = children.concat(additionalChildren);\n }\n\n return children;\n }\n}\n/**\n * Get children from a component instance.\n */\n\n\nfunction getInternalInstanceChildren(instance) {\n if (instance.$children) {\n return instance.$children;\n }\n\n return [];\n}\n/**\n * Check if an instance is qualified.\n */\n\n\nfunction isQualified(instance) {\n const name = (0, shared_utils_1.classify)((0, util_1.getInstanceName)(instance)).toLowerCase();\n return name.indexOf(filter) > -1;\n}\n\nfunction flatten(items) {\n const r = items.reduce((acc, item) => {\n if (Array.isArray(item)) {\n let children = [];\n\n for (const i of item) {\n if (Array.isArray(i)) {\n children = children.concat(flatten(i));\n } else {\n children.push(i);\n }\n }\n\n acc.push(...children);\n } else if (item) {\n acc.push(item);\n }\n\n return acc;\n }, []);\n return r;\n}\n\nfunction captureChild(child) {\n if (child.fnContext && !child.componentInstance) {\n return capture(child);\n } else if (child.componentInstance) {\n if (!(0, util_1.isBeingDestroyed)(child.componentInstance)) return capture(child.componentInstance);\n } else if (child.children) {\n return Promise.all(flatten(child.children.map(captureChild)));\n }\n}\n/**\n * Capture the meta information of an instance. (recursive)\n */\n\n\nasync function capture(instance, index, list) {\n var _a, _b, _c, _d, _e, _f;\n\n if (instance.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n instance = instance.vnode;\n }\n\n if (instance.$options && instance.$options.abstract && instance._vnode && instance._vnode.componentInstance) {\n instance = instance._vnode.componentInstance;\n }\n\n if ((_b = (_a = instance.$options) === null || _a === void 0 ? void 0 : _a.devtools) === null || _b === void 0 ? void 0 : _b.hide) return; // Functional component.\n\n if (instance.fnContext && !instance.componentInstance) {\n const contextUid = instance.fnContext.__VUE_DEVTOOLS_UID__;\n let id = functionalIds.get(contextUid);\n\n if (id == null) {\n id = 0;\n } else {\n id++;\n }\n\n functionalIds.set(contextUid, id);\n const functionalId = contextUid + ':functional:' + id;\n markFunctional(functionalId, instance);\n const childrenPromise = instance.children ? instance.children.map(child => child.fnContext ? captureChild(child) : child.componentInstance ? capture(child.componentInstance) : undefined) // router-view has both fnContext and componentInstance on vnode.\n : instance.componentInstance ? [capture(instance.componentInstance)] : []; // await all childrenCapture to-be resolved\n\n const children = (await Promise.all(childrenPromise)).filter(Boolean);\n const treeNode = {\n uid: functionalId,\n id: functionalId,\n tags: [{\n label: 'functional',\n textColor: 0x555555,\n backgroundColor: 0xeeeeee\n }],\n name: (0, util_1.getInstanceName)(instance),\n renderKey: (0, util_1.getRenderKey)(instance.key),\n children,\n hasChildren: !!children.length,\n inactive: false,\n isFragment: false // TODO: Check what is it for.\n\n };\n return api.visitComponentTree(instance, treeNode, filter, (_c = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _c === void 0 ? void 0 : _c.app);\n } // instance._uid is not reliable in devtools as there\n // may be 2 roots with same _uid which causes unexpected\n // behaviour\n\n\n instance.__VUE_DEVTOOLS_UID__ = (0, util_1.getUniqueId)(instance); // Dedupe\n\n if (captureIds.has(instance.__VUE_DEVTOOLS_UID__)) {\n return;\n } else {\n captureIds.set(instance.__VUE_DEVTOOLS_UID__, undefined);\n }\n\n mark(instance);\n const name = (0, util_1.getInstanceName)(instance);\n const children = (await Promise.all((await getInternalInstanceChildren(instance)).filter(child => !(0, util_1.isBeingDestroyed)(child)).map(capture))).filter(Boolean);\n const ret = {\n uid: instance._uid,\n id: instance.__VUE_DEVTOOLS_UID__,\n name,\n renderKey: (0, util_1.getRenderKey)(instance.$vnode ? instance.$vnode.key : null),\n inactive: !!instance._inactive,\n isFragment: !!instance._isFragment,\n children,\n hasChildren: !!children.length,\n tags: [],\n meta: {}\n };\n\n if (instance._vnode && instance._vnode.children) {\n const vnodeChildren = await Promise.all(flatten(instance._vnode.children.map(captureChild)));\n ret.children = ret.children.concat(flatten(vnodeChildren).filter(Boolean));\n ret.hasChildren = !!ret.children.length;\n } // ensure correct ordering\n\n\n const rootElements = (0, el_1.getRootElementsFromComponentInstance)(instance);\n const firstElement = rootElements[0];\n\n if (firstElement === null || firstElement === void 0 ? void 0 : firstElement.parentElement) {\n const parentInstance = instance.$parent;\n const parentRootElements = parentInstance ? (0, el_1.getRootElementsFromComponentInstance)(parentInstance) : [];\n let el = firstElement;\n const indexList = [];\n\n do {\n indexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n el = el.parentElement;\n } while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\n ret.domOrder = indexList.reverse();\n } else {\n ret.domOrder = [-1];\n } // check if instance is available in console\n\n\n const consoleId = consoleBoundInstances.indexOf(instance.__VUE_DEVTOOLS_UID__);\n ret.consoleId = consoleId > -1 ? '$vm' + consoleId : null; // check router view\n\n const isRouterView2 = (_e = (_d = instance.$vnode) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.routerView;\n\n if (instance._routerView || isRouterView2) {\n ret.isRouterView = true;\n\n if (!instance._inactive && instance.$route) {\n const matched = instance.$route.matched;\n const depth = isRouterView2 ? instance.$vnode.data.routerViewDepth : instance._routerView.depth;\n ret.meta.matchedRouteSegment = matched && matched[depth] && (isRouterView2 ? matched[depth].path : matched[depth].handler.path);\n }\n\n ret.tags.push({\n label: `router-view${ret.meta.matchedRouteSegment ? `: ${ret.meta.matchedRouteSegment}` : ''}`,\n textColor: 0x000000,\n backgroundColor: 0xff8344\n });\n }\n\n return api.visitComponentTree(instance, ret, filter, (_f = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _f === void 0 ? void 0 : _f.app);\n}\n/**\n * Mark an instance as captured and store it in the instance map.\n *\n * @param {Vue} instance\n */\n\n\nfunction mark(instance) {\n const refId = instance.__VUE_DEVTOOLS_UID__;\n\n if (!exports.instanceMap.has(refId)) {\n exports.instanceMap.set(refId, instance);\n appRecord.instanceMap.set(refId, instance);\n instance.$on('hook:beforeDestroy', function () {\n exports.instanceMap.delete(refId);\n });\n }\n}\n\nfunction markFunctional(id, vnode) {\n const refId = vnode.fnContext.__VUE_DEVTOOLS_UID__;\n\n if (!exports.functionalVnodeMap.has(refId)) {\n exports.functionalVnodeMap.set(refId, {});\n vnode.fnContext.$on('hook:beforeDestroy', function () {\n exports.functionalVnodeMap.delete(refId);\n });\n }\n\n exports.functionalVnodeMap.get(refId)[id] = vnode;\n appRecord.instanceMap.set(id, {\n __VUE_DEVTOOLS_UID__: id,\n __VUE_DEVTOOLS_FUNCTIONAL_LEGACY__: true,\n vnode\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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OEIsRUFBOUIsSUFBb0MsS0FBcEM7QUFFQSxXQUFTLENBQUMsV0FBVixDQUFzQixHQUF0QixDQUEwQixFQUExQixFQUE4QjtBQUM1Qix3QkFBb0IsRUFBRSxFQURNO0FBRTVCLHNDQUFrQyxFQUFFLElBRlI7QUFHNUI7QUFINEIsR0FBOUI7QUFLRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJlZS50cz80MDczIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDb21wb25lbnRQYXJlbnRzID0gZXhwb3J0cy53YWxrVHJlZSA9IGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwID0gZXhwb3J0cy5pbnN0YW5jZU1hcCA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgZWxfMSA9IHJlcXVpcmUoXCIuL2VsXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmxldCBhcHBSZWNvcmQ7XG5sZXQgYXBpO1xuY29uc3QgY29uc29sZUJvdW5kSW5zdGFuY2VzID0gQXJyYXkoNSk7XG5sZXQgZmlsdGVyID0gJyc7XG5jb25zdCBmdW5jdGlvbmFsSWRzID0gbmV3IE1hcCgpO1xuLy8gRGVkdXBlIGluc3RhbmNlc1xuLy8gU29tZSBpbnN0YW5jZXMgbWF5IGJlIGJvdGggb24gYSBjb21wb25lbnQgYW5kIG9uIGEgY2hpbGQgYWJzdHJhY3QvZnVuY3Rpb25hbCBjb21wb25lbnRcbmNvbnN0IGNhcHR1cmVJZHMgPSBuZXcgTWFwKCk7XG5hc3luYyBmdW5jdGlvbiB3YWxrVHJlZShpbnN0YW5jZSwgcEZpbHRlciwgYXBpLCBjdHgpIHtcbiAgICBpbml0Q3R4KGFwaSwgY3R4KTtcbiAgICBmaWx0ZXIgPSBwRmlsdGVyO1xuICAgIGZ1bmN0aW9uYWxJZHMuY2xlYXIoKTtcbiAgICBjYXB0dXJlSWRzLmNsZWFyKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbihhd2FpdCBmaW5kUXVhbGlmaWVkQ2hpbGRyZW4oaW5zdGFuY2UpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy53YWxrVHJlZSA9IHdhbGtUcmVlO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50UGFyZW50cyhpbnN0YW5jZSwgYXBpLCBjdHgpIHtcbiAgICBpbml0Q3R4KGFwaSwgY3R4KTtcbiAgICBjb25zdCBjYXB0dXJlSWRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGNhcHR1cmVJZCA9IHZtID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSAoMCwgdXRpbF8xLmdldFVuaXF1ZUlkKSh2bSk7XG4gICAgICAgIGlmIChjYXB0dXJlSWRzLmhhcyhpZCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhcHR1cmVJZHMuc2V0KGlkLCB1bmRlZmluZWQpO1xuICAgICAgICBtYXJrKHZtKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICBjYXB0dXJlSWQoaW5zdGFuY2UpO1xuICAgIGxldCBwYXJlbnQgPSBpbnN0YW5jZTtcbiAgICB3aGlsZSAoKHBhcmVudCA9IHBhcmVudC4kcGFyZW50KSkge1xuICAgICAgICBjYXB0dXJlSWQocGFyZW50KTtcbiAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufVxuZXhwb3J0cy5nZXRDb21wb25lbnRQYXJlbnRzID0gZ2V0Q29tcG9uZW50UGFyZW50cztcbmZ1bmN0aW9uIGluaXRDdHgoX2FwaSwgY3R4KSB7XG4gICAgYXBwUmVjb3JkID0gY3R4LmN1cnJlbnRBcHBSZWNvcmQ7XG4gICAgYXBpID0gX2FwaTtcbiAgICBpZiAoIWFwcFJlY29yZC5tZXRhLmluc3RhbmNlTWFwKSB7XG4gICAgICAgIGFwcFJlY29yZC5tZXRhLmluc3RhbmNlTWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBleHBvcnRzLmluc3RhbmNlTWFwID0gYXBwUmVjb3JkLm1ldGEuaW5zdGFuY2VNYXA7XG4gICAgaWYgKCFhcHBSZWNvcmQubWV0YS5mdW5jdGlvbmFsVm5vZGVNYXApIHtcbiAgICAgICAgYXBwUmVjb3JkLm1ldGEuZnVuY3Rpb25hbFZub2RlTWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcCA9IGFwcFJlY29yZC5tZXRhLmZ1bmN0aW9uYWxWbm9kZU1hcDtcbn1cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGFuIGFycmF5IG9mIGluc3RhbmNlcyBhbmQgZmxhdHRlbiBpdCBpbnRvXG4gKiBhbiBhcnJheSBvZiBxdWFsaWZpZWQgaW5zdGFuY2VzLiBUaGlzIGlzIGEgZGVwdGgtZmlyc3RcbiAqIHRyYXZlcnNhbCAtIGUuZy4gaWYgYW4gaW5zdGFuY2UgaXMgbm90IG1hdGNoZWQsIHdlIHdpbGxcbiAqIHJlY3Vyc2l2ZWx5IGdvIGRlZXBlciB1bnRpbCBhIHF1YWxpZmllZCBjaGlsZCBpcyBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gZmluZFF1YWxpZmllZENoaWxkcmVuRnJvbUxpc3QoaW5zdGFuY2VzKSB7XG4gICAgaW5zdGFuY2VzID0gaW5zdGFuY2VzXG4gICAgICAgIC5maWx0ZXIoY2hpbGQgPT4gISgwLCB1dGlsXzEuaXNCZWluZ0Rlc3Ryb3llZCkoY2hpbGQpKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoIWZpbHRlclxuICAgICAgICA/IGluc3RhbmNlcy5tYXAoY2FwdHVyZSlcbiAgICAgICAgOiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBpbnN0YW5jZXMubWFwKGZpbmRRdWFsaWZpZWRDaGlsZHJlbikpKTtcbn1cbi8qKlxuICogRmluZCBxdWFsaWZpZWQgY2hpbGRyZW4gZnJvbSBhIHNpbmdsZSBpbnN0YW5jZS5cbiAqIElmIHRoZSBpbnN0YW5jZSBpdHNlbGYgaXMgcXVhbGlmaWVkLCBqdXN0IHJldHVybiBpdHNlbGYuXG4gKiBUaGlzIGlzIG9rIGJlY2F1c2UgW10uY29uY2F0IHdvcmtzIGluIGJvdGggY2FzZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRRdWFsaWZpZWRDaGlsZHJlbihpbnN0YW5jZSkge1xuICAgIGlmIChpc1F1YWxpZmllZChpbnN0YW5jZSkpIHtcbiAgICAgICAgcmV0dXJuIFthd2FpdCBjYXB0dXJlKGluc3RhbmNlKV07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgY2hpbGRyZW4gPSBhd2FpdCBmaW5kUXVhbGlmaWVkQ2hpbGRyZW5Gcm9tTGlzdChpbnN0YW5jZS4kY2hpbGRyZW4pO1xuICAgICAgICAvLyBGaW5kIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBpbiByZWN1cnNpdmVseSBpbiBub24tZnVuY3Rpb25hbCB2bm9kZXMuXG4gICAgICAgIGlmIChpbnN0YW5jZS5fdm5vZGUgJiYgaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gYXdhaXQgUHJvbWlzZS5hbGwoZmxhdHRlbihpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+ICFjaGlsZC5jb21wb25lbnRJbnN0YW5jZSkubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICAgICAgICAgIC8vIEZpbHRlciBxdWFsaWZpZWQgY2hpbGRyZW4uXG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsQ2hpbGRyZW4gPSBsaXN0LmZpbHRlcihpbnN0YW5jZSA9PiBpc1F1YWxpZmllZChpbnN0YW5jZSkpO1xuICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoYWRkaXRpb25hbENoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxufVxuLyoqXG4gKiBHZXQgY2hpbGRyZW4gZnJvbSBhIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SW50ZXJuYWxJbnN0YW5jZUNoaWxkcmVuKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLiRjaGlsZHJlbikge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UuJGNoaWxkcmVuO1xuICAgIH1cbiAgICByZXR1cm4gW107XG59XG4vKipcbiAqIENoZWNrIGlmIGFuIGluc3RhbmNlIGlzIHF1YWxpZmllZC5cbiAqL1xuZnVuY3Rpb24gaXNRdWFsaWZpZWQoaW5zdGFuY2UpIHtcbiAgICBjb25zdCBuYW1lID0gKDAsIHNoYXJlZF91dGlsc18xLmNsYXNzaWZ5KSgoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBuYW1lLmluZGV4T2YoZmlsdGVyKSA+IC0xO1xufVxuZnVuY3Rpb24gZmxhdHRlbihpdGVtcykge1xuICAgIGNvbnN0IHIgPSBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaXRlbSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGZsYXR0ZW4oaSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2MucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXRlbSkge1xuICAgICAgICAgICAgYWNjLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBjYXB0dXJlQ2hpbGQoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQuZm5Db250ZXh0ICYmICFjaGlsZC5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gY2FwdHVyZShjaGlsZCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGlmICghKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSkpXG4gICAgICAgICAgICByZXR1cm4gY2FwdHVyZShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChmbGF0dGVuKGNoaWxkLmNoaWxkcmVuLm1hcChjYXB0dXJlQ2hpbGQpKSk7XG4gICAgfVxufVxuLyoqXG4gKiBDYXB0dXJlIHRoZSBtZXRhIGluZm9ybWF0aW9uIG9mIGFuIGluc3RhbmNlLiAocmVjdXJzaXZlKVxuICovXG5hc3luYyBmdW5jdGlvbiBjYXB0dXJlKGluc3RhbmNlLCBpbmRleCwgbGlzdCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIGlmIChpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19GVU5DVElPTkFMX0xFR0FDWV9fKSB7XG4gICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2Uudm5vZGU7XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZS4kb3B0aW9ucyAmJiBpbnN0YW5jZS4kb3B0aW9ucy5hYnN0cmFjdCAmJiBpbnN0YW5jZS5fdm5vZGUgJiYgaW5zdGFuY2UuX3Zub2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UuX3Zub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH1cbiAgICBpZiAoKF9iID0gKF9hID0gaW5zdGFuY2UuJG9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZXZ0b29scykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhpZGUpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBGdW5jdGlvbmFsIGNvbXBvbmVudC5cbiAgICBpZiAoaW5zdGFuY2UuZm5Db250ZXh0ICYmICFpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBjb250ZXh0VWlkID0gaW5zdGFuY2UuZm5Db250ZXh0Ll9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgICAgICBsZXQgaWQgPSBmdW5jdGlvbmFsSWRzLmdldChjb250ZXh0VWlkKTtcbiAgICAgICAgaWYgKGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIGlkID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlkKys7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb25hbElkcy5zZXQoY29udGV4dFVpZCwgaWQpO1xuICAgICAgICBjb25zdCBmdW5jdGlvbmFsSWQgPSBjb250ZXh0VWlkICsgJzpmdW5jdGlvbmFsOicgKyBpZDtcbiAgICAgICAgbWFya0Z1bmN0aW9uYWwoZnVuY3Rpb25hbElkLCBpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuUHJvbWlzZSA9IChpbnN0YW5jZS5jaGlsZHJlblxuICAgICAgICAgICAgPyBpbnN0YW5jZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGQuZm5Db250ZXh0XG4gICAgICAgICAgICAgICAgPyBjYXB0dXJlQ2hpbGQoY2hpbGQpXG4gICAgICAgICAgICAgICAgOiBjaGlsZC5jb21wb25lbnRJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICA/IGNhcHR1cmUoY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgLy8gcm91dGVyLXZpZXcgaGFzIGJvdGggZm5Db250ZXh0IGFuZCBjb21wb25lbnRJbnN0YW5jZSBvbiB2bm9kZS5cbiAgICAgICAgICAgIDogaW5zdGFuY2UuY29tcG9uZW50SW5zdGFuY2UgPyBbY2FwdHVyZShpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSldIDogW10pO1xuICAgICAgICAvLyBhd2FpdCBhbGwgY2hpbGRyZW5DYXB0dXJlIHRvLWJlIHJlc29sdmVkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKGF3YWl0IFByb21pc2UuYWxsKGNoaWxkcmVuUHJvbWlzZSkpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB7XG4gICAgICAgICAgICB1aWQ6IGZ1bmN0aW9uYWxJZCxcbiAgICAgICAgICAgIGlkOiBmdW5jdGlvbmFsSWQsXG4gICAgICAgICAgICB0YWdzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IDB4NTU1NTU1LFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4ZWVlZWVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbmFtZTogKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKSxcbiAgICAgICAgICAgIHJlbmRlcktleTogKDAsIHV0aWxfMS5nZXRSZW5kZXJLZXkpKGluc3RhbmNlLmtleSksXG4gICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiAhIWNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgICAgIGluYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRnJhZ21lbnQ6IGZhbHNlLCAvLyBUT0RPOiBDaGVjayB3aGF0IGlzIGl0IGZvci5cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFwaS52aXNpdENvbXBvbmVudFRyZWUoaW5zdGFuY2UsIHRyZWVOb2RlLCBmaWx0ZXIsIChfYyA9IGFwcFJlY29yZCA9PT0gbnVsbCB8fCBhcHBSZWNvcmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFwcFJlY29yZC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuYXBwKTtcbiAgICB9XG4gICAgLy8gaW5zdGFuY2UuX3VpZCBpcyBub3QgcmVsaWFibGUgaW4gZGV2dG9vbHMgYXMgdGhlcmVcbiAgICAvLyBtYXkgYmUgMiByb290cyB3aXRoIHNhbWUgX3VpZCB3aGljaCBjYXVzZXMgdW5leHBlY3RlZFxuICAgIC8vIGJlaGF2aW91clxuICAgIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gKDAsIHV0aWxfMS5nZXRVbmlxdWVJZCkoaW5zdGFuY2UpO1xuICAgIC8vIERlZHVwZVxuICAgIGlmIChjYXB0dXJlSWRzLmhhcyhpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2FwdHVyZUlkcy5zZXQoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIG1hcmsoaW5zdGFuY2UpO1xuICAgIGNvbnN0IG5hbWUgPSAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gKGF3YWl0IFByb21pc2UuYWxsKChhd2FpdCBnZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oaW5zdGFuY2UpKVxuICAgICAgICAuZmlsdGVyKGNoaWxkID0+ICEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkKSlcbiAgICAgICAgLm1hcChjYXB0dXJlKSkpLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCByZXQgPSB7XG4gICAgICAgIHVpZDogaW5zdGFuY2UuX3VpZCxcbiAgICAgICAgaWQ6IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLFxuICAgICAgICBuYW1lLFxuICAgICAgICByZW5kZXJLZXk6ICgwLCB1dGlsXzEuZ2V0UmVuZGVyS2V5KShpbnN0YW5jZS4kdm5vZGUgPyBpbnN0YW5jZS4kdm5vZGUua2V5IDogbnVsbCksXG4gICAgICAgIGluYWN0aXZlOiAhIWluc3RhbmNlLl9pbmFjdGl2ZSxcbiAgICAgICAgaXNGcmFnbWVudDogISFpbnN0YW5jZS5faXNGcmFnbWVudCxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGhhc0NoaWxkcmVuOiAhIWNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgdGFnczogW10sXG4gICAgICAgIG1ldGE6IHt9LFxuICAgIH07XG4gICAgaWYgKGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3Qgdm5vZGVDaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKGZsYXR0ZW4oaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuLm1hcChjYXB0dXJlQ2hpbGQpKSk7XG4gICAgICAgIHJldC5jaGlsZHJlbiA9IHJldC5jaGlsZHJlbi5jb25jYXQoZmxhdHRlbih2bm9kZUNoaWxkcmVuKS5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICByZXQuaGFzQ2hpbGRyZW4gPSAhIXJldC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgfVxuICAgIC8vIGVuc3VyZSBjb3JyZWN0IG9yZGVyaW5nXG4gICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShpbnN0YW5jZSk7XG4gICAgY29uc3QgZmlyc3RFbGVtZW50ID0gcm9vdEVsZW1lbnRzWzBdO1xuICAgIGlmIChmaXJzdEVsZW1lbnQgPT09IG51bGwgfHwgZmlyc3RFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaXJzdEVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZSA9IGluc3RhbmNlLiRwYXJlbnQ7XG4gICAgICAgIGNvbnN0IHBhcmVudFJvb3RFbGVtZW50cyA9IHBhcmVudEluc3RhbmNlID8gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShwYXJlbnRJbnN0YW5jZSkgOiBbXTtcbiAgICAgICAgbGV0IGVsID0gZmlyc3RFbGVtZW50O1xuICAgICAgICBjb25zdCBpbmRleExpc3QgPSBbXTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaW5kZXhMaXN0LnB1c2goQXJyYXkuZnJvbShlbC5wYXJlbnRFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoZWwpKTtcbiAgICAgICAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICAgICAgfSB3aGlsZSAoZWwucGFyZW50RWxlbWVudCAmJiBwYXJlbnRSb290RWxlbWVudHMubGVuZ3RoICYmICFwYXJlbnRSb290RWxlbWVudHMuaW5jbHVkZXMoZWwpKTtcbiAgICAgICAgcmV0LmRvbU9yZGVyID0gaW5kZXhMaXN0LnJldmVyc2UoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldC5kb21PcmRlciA9IFstMV07XG4gICAgfVxuICAgIC8vIGNoZWNrIGlmIGluc3RhbmNlIGlzIGF2YWlsYWJsZSBpbiBjb25zb2xlXG4gICAgY29uc3QgY29uc29sZUlkID0gY29uc29sZUJvdW5kSW5zdGFuY2VzLmluZGV4T2YoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18pO1xuICAgIHJldC5jb25zb2xlSWQgPSBjb25zb2xlSWQgPiAtMSA/ICckdm0nICsgY29uc29sZUlkIDogbnVsbDtcbiAgICAvLyBjaGVjayByb3V0ZXIgdmlld1xuICAgIGNvbnN0IGlzUm91dGVyVmlldzIgPSAoX2UgPSAoX2QgPSBpbnN0YW5jZS4kdm5vZGUpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5kYXRhKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Uucm91dGVyVmlldztcbiAgICBpZiAoaW5zdGFuY2UuX3JvdXRlclZpZXcgfHwgaXNSb3V0ZXJWaWV3Mikge1xuICAgICAgICByZXQuaXNSb3V0ZXJWaWV3ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFpbnN0YW5jZS5faW5hY3RpdmUgJiYgaW5zdGFuY2UuJHJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gaW5zdGFuY2UuJHJvdXRlLm1hdGNoZWQ7XG4gICAgICAgICAgICBjb25zdCBkZXB0aCA9IGlzUm91dGVyVmlldzJcbiAgICAgICAgICAgICAgICA/IGluc3RhbmNlLiR2bm9kZS5kYXRhLnJvdXRlclZpZXdEZXB0aFxuICAgICAgICAgICAgICAgIDogaW5zdGFuY2UuX3JvdXRlclZpZXcuZGVwdGg7XG4gICAgICAgICAgICByZXQubWV0YS5tYXRjaGVkUm91dGVTZWdtZW50ID1cbiAgICAgICAgICAgICAgICBtYXRjaGVkICYmXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZWRbZGVwdGhdICYmXG4gICAgICAgICAgICAgICAgICAgIChpc1JvdXRlclZpZXcyID8gbWF0Y2hlZFtkZXB0aF0ucGF0aCA6IG1hdGNoZWRbZGVwdGhdLmhhbmRsZXIucGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0LnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogYHJvdXRlci12aWV3JHtyZXQubWV0YS5tYXRjaGVkUm91dGVTZWdtZW50ID8gYDogJHtyZXQubWV0YS5tYXRjaGVkUm91dGVTZWdtZW50fWAgOiAnJ31gLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogMHhmZjgzNDQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXBpLnZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgcmV0LCBmaWx0ZXIsIChfZiA9IGFwcFJlY29yZCA9PT0gbnVsbCB8fCBhcHBSZWNvcmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFwcFJlY29yZC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YuYXBwKTtcbn1cbi8qKlxuICogTWFyayBhbiBpbnN0YW5jZSBhcyBjYXB0dXJlZCBhbmQgc3RvcmUgaXQgaW4gdGhlIGluc3RhbmNlIG1hcC5cbiAqXG4gKiBAcGFyYW0ge1Z1ZX0gaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gbWFyayhpbnN0YW5jZSkge1xuICAgIGNvbnN0IHJlZklkID0gaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX187XG4gICAgaWYgKCFleHBvcnRzLmluc3RhbmNlTWFwLmhhcyhyZWZJZCkpIHtcbiAgICAgICAgZXhwb3J0cy5pbnN0YW5jZU1hcC5zZXQocmVmSWQsIGluc3RhbmNlKTtcbiAgICAgICAgYXBwUmVjb3JkLmluc3RhbmNlTWFwLnNldChyZWZJZCwgaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS4kb24oJ2hvb2s6YmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cG9ydHMuaW5zdGFuY2VNYXAuZGVsZXRlKHJlZklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFya0Z1bmN0aW9uYWwoaWQsIHZub2RlKSB7XG4gICAgY29uc3QgcmVmSWQgPSB2bm9kZS5mbkNvbnRleHQuX19WVUVfREVWVE9PTFNfVUlEX187XG4gICAgaWYgKCFleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5oYXMocmVmSWQpKSB7XG4gICAgICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLnNldChyZWZJZCwge30pO1xuICAgICAgICB2bm9kZS5mbkNvbnRleHQuJG9uKCdob29rOmJlZm9yZURlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5kZWxldGUocmVmSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuZ2V0KHJlZklkKVtpZF0gPSB2bm9kZTtcbiAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuc2V0KGlkLCB7XG4gICAgICAgIF9fVlVFX0RFVlRPT0xTX1VJRF9fOiBpZCxcbiAgICAgICAgX19WVUVfREVWVE9PTFNfRlVOQ1RJT05BTF9MRUdBQ1lfXzogdHJ1ZSxcbiAgICAgICAgdm5vZGUsXG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmVlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///18059\n");
|
|
286
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getComponentParents = exports.walkTree = exports.functionalVnodeMap = exports.instanceMap = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst el_1 = __webpack_require__(66351);\n\nconst util_1 = __webpack_require__(95136);\n\nlet appRecord;\nlet api;\nconst consoleBoundInstances = Array(5);\nlet filter = '';\nconst functionalIds = new Map(); // Dedupe instances\n// Some instances may be both on a component and on a child abstract/functional component\n\nconst captureIds = new Map();\n\nasync function walkTree(instance, pFilter, api, ctx) {\n initCtx(api, ctx);\n filter = pFilter;\n functionalIds.clear();\n captureIds.clear();\n const result = flatten(await findQualifiedChildren(instance));\n return result;\n}\n\nexports.walkTree = walkTree;\n\nfunction getComponentParents(instance, api, ctx) {\n initCtx(api, ctx);\n const captureIds = new Map();\n\n const captureId = vm => {\n const id = (0, util_1.getUniqueId)(vm);\n if (captureIds.has(id)) return;\n captureIds.set(id, undefined);\n\n if (vm.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n markFunctional(id, vm.vnode);\n } else {\n mark(vm);\n }\n };\n\n const parents = [];\n captureId(instance);\n let parent = instance;\n\n while (parent = parent.$parent) {\n captureId(parent);\n parents.push(parent);\n }\n\n return parents;\n}\n\nexports.getComponentParents = getComponentParents;\n\nfunction initCtx(_api, ctx) {\n appRecord = ctx.currentAppRecord;\n api = _api;\n\n if (!appRecord.meta.instanceMap) {\n appRecord.meta.instanceMap = new Map();\n }\n\n exports.instanceMap = appRecord.meta.instanceMap;\n\n if (!appRecord.meta.functionalVnodeMap) {\n appRecord.meta.functionalVnodeMap = new Map();\n }\n\n exports.functionalVnodeMap = appRecord.meta.functionalVnodeMap;\n}\n/**\n * Iterate through an array of instances and flatten it into\n * an array of qualified instances. This is a depth-first\n * traversal - e.g. if an instance is not matched, we will\n * recursively go deeper until a qualified child is found.\n */\n\n\nfunction findQualifiedChildrenFromList(instances) {\n instances = instances.filter(child => !(0, util_1.isBeingDestroyed)(child));\n return Promise.all(!filter ? instances.map(capture) : Array.prototype.concat.apply([], instances.map(findQualifiedChildren)));\n}\n/**\n * Find qualified children from a single instance.\n * If the instance itself is qualified, just return itself.\n * This is ok because [].concat works in both cases.\n */\n\n\nasync function findQualifiedChildren(instance) {\n if (isQualified(instance)) {\n return [await capture(instance)];\n } else {\n let children = await findQualifiedChildrenFromList(instance.$children); // Find functional components in recursively in non-functional vnodes.\n\n if (instance._vnode && instance._vnode.children) {\n const list = await Promise.all(flatten(instance._vnode.children.filter(child => !child.componentInstance).map(captureChild))); // Filter qualified children.\n\n const additionalChildren = list.filter(instance => isQualified(instance));\n children = children.concat(additionalChildren);\n }\n\n return children;\n }\n}\n/**\n * Get children from a component instance.\n */\n\n\nfunction getInternalInstanceChildren(instance) {\n if (instance.$children) {\n return instance.$children;\n }\n\n return [];\n}\n/**\n * Check if an instance is qualified.\n */\n\n\nfunction isQualified(instance) {\n const name = (0, shared_utils_1.classify)((0, util_1.getInstanceName)(instance)).toLowerCase();\n return name.indexOf(filter) > -1;\n}\n\nfunction flatten(items) {\n const r = items.reduce((acc, item) => {\n if (Array.isArray(item)) {\n let children = [];\n\n for (const i of item) {\n if (Array.isArray(i)) {\n children = children.concat(flatten(i));\n } else {\n children.push(i);\n }\n }\n\n acc.push(...children);\n } else if (item) {\n acc.push(item);\n }\n\n return acc;\n }, []);\n return r;\n}\n\nfunction captureChild(child) {\n if (child.fnContext && !child.componentInstance) {\n return capture(child);\n } else if (child.componentInstance) {\n if (!(0, util_1.isBeingDestroyed)(child.componentInstance)) return capture(child.componentInstance);\n } else if (child.children) {\n return Promise.all(flatten(child.children.map(captureChild)));\n }\n}\n/**\n * Capture the meta information of an instance. (recursive)\n */\n\n\nasync function capture(instance, index, list) {\n var _a, _b, _c, _d, _e, _f;\n\n if (instance.__VUE_DEVTOOLS_FUNCTIONAL_LEGACY__) {\n instance = instance.vnode;\n }\n\n if (instance.$options && instance.$options.abstract && instance._vnode && instance._vnode.componentInstance) {\n instance = instance._vnode.componentInstance;\n }\n\n if ((_b = (_a = instance.$options) === null || _a === void 0 ? void 0 : _a.devtools) === null || _b === void 0 ? void 0 : _b.hide) return; // Functional component.\n\n if (instance.fnContext && !instance.componentInstance) {\n const contextUid = instance.fnContext.__VUE_DEVTOOLS_UID__;\n let id = functionalIds.get(contextUid);\n\n if (id == null) {\n id = 0;\n } else {\n id++;\n }\n\n functionalIds.set(contextUid, id);\n const functionalId = contextUid + ':functional:' + id;\n markFunctional(functionalId, instance);\n const childrenPromise = instance.children ? instance.children.map(child => child.fnContext ? captureChild(child) : child.componentInstance ? capture(child.componentInstance) : undefined) // router-view has both fnContext and componentInstance on vnode.\n : instance.componentInstance ? [capture(instance.componentInstance)] : []; // await all childrenCapture to-be resolved\n\n const children = (await Promise.all(childrenPromise)).filter(Boolean);\n const treeNode = {\n uid: functionalId,\n id: functionalId,\n tags: [{\n label: 'functional',\n textColor: 0x555555,\n backgroundColor: 0xeeeeee\n }],\n name: (0, util_1.getInstanceName)(instance),\n renderKey: (0, util_1.getRenderKey)(instance.key),\n children,\n hasChildren: !!children.length,\n inactive: false,\n isFragment: false // TODO: Check what is it for.\n\n };\n return api.visitComponentTree(instance, treeNode, filter, (_c = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _c === void 0 ? void 0 : _c.app);\n } // instance._uid is not reliable in devtools as there\n // may be 2 roots with same _uid which causes unexpected\n // behaviour\n\n\n instance.__VUE_DEVTOOLS_UID__ = (0, util_1.getUniqueId)(instance); // Dedupe\n\n if (captureIds.has(instance.__VUE_DEVTOOLS_UID__)) {\n return;\n } else {\n captureIds.set(instance.__VUE_DEVTOOLS_UID__, undefined);\n }\n\n mark(instance);\n const name = (0, util_1.getInstanceName)(instance);\n const children = (await Promise.all((await getInternalInstanceChildren(instance)).filter(child => !(0, util_1.isBeingDestroyed)(child)).map(capture))).filter(Boolean);\n const ret = {\n uid: instance._uid,\n id: instance.__VUE_DEVTOOLS_UID__,\n name,\n renderKey: (0, util_1.getRenderKey)(instance.$vnode ? instance.$vnode.key : null),\n inactive: !!instance._inactive,\n isFragment: !!instance._isFragment,\n children,\n hasChildren: !!children.length,\n tags: [],\n meta: {}\n };\n\n if (instance._vnode && instance._vnode.children) {\n const vnodeChildren = await Promise.all(flatten(instance._vnode.children.map(captureChild)));\n ret.children = ret.children.concat(flatten(vnodeChildren).filter(Boolean));\n ret.hasChildren = !!ret.children.length;\n } // ensure correct ordering\n\n\n const rootElements = (0, el_1.getRootElementsFromComponentInstance)(instance);\n const firstElement = rootElements[0];\n\n if (firstElement === null || firstElement === void 0 ? void 0 : firstElement.parentElement) {\n const parentInstance = instance.$parent;\n const parentRootElements = parentInstance ? (0, el_1.getRootElementsFromComponentInstance)(parentInstance) : [];\n let el = firstElement;\n const indexList = [];\n\n do {\n indexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n el = el.parentElement;\n } while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\n ret.domOrder = indexList.reverse();\n } else {\n ret.domOrder = [-1];\n } // check if instance is available in console\n\n\n const consoleId = consoleBoundInstances.indexOf(instance.__VUE_DEVTOOLS_UID__);\n ret.consoleId = consoleId > -1 ? '$vm' + consoleId : null; // check router view\n\n const isRouterView2 = (_e = (_d = instance.$vnode) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.routerView;\n\n if (instance._routerView || isRouterView2) {\n ret.isRouterView = true;\n\n if (!instance._inactive && instance.$route) {\n const matched = instance.$route.matched;\n const depth = isRouterView2 ? instance.$vnode.data.routerViewDepth : instance._routerView.depth;\n ret.meta.matchedRouteSegment = matched && matched[depth] && (isRouterView2 ? matched[depth].path : matched[depth].handler.path);\n }\n\n ret.tags.push({\n label: `router-view${ret.meta.matchedRouteSegment ? `: ${ret.meta.matchedRouteSegment}` : ''}`,\n textColor: 0x000000,\n backgroundColor: 0xff8344\n });\n }\n\n return api.visitComponentTree(instance, ret, filter, (_f = appRecord === null || appRecord === void 0 ? void 0 : appRecord.options) === null || _f === void 0 ? void 0 : _f.app);\n}\n/**\n * Mark an instance as captured and store it in the instance map.\n *\n * @param {Vue} instance\n */\n\n\nfunction mark(instance) {\n const refId = instance.__VUE_DEVTOOLS_UID__;\n\n if (!exports.instanceMap.has(refId)) {\n exports.instanceMap.set(refId, instance);\n appRecord.instanceMap.set(refId, instance);\n instance.$on('hook:beforeDestroy', function () {\n exports.instanceMap.delete(refId);\n });\n }\n}\n\nfunction markFunctional(id, vnode) {\n const refId = vnode.fnContext.__VUE_DEVTOOLS_UID__;\n\n if (!exports.functionalVnodeMap.has(refId)) {\n exports.functionalVnodeMap.set(refId, {});\n vnode.fnContext.$on('hook:beforeDestroy', function () {\n exports.functionalVnodeMap.delete(refId);\n });\n }\n\n exports.functionalVnodeMap.get(refId)[id] = vnode;\n appRecord.instanceMap.set(id, {\n __VUE_DEVTOOLS_UID__: id,\n __VUE_DEVTOOLS_FUNCTIONAL_LEGACY__: true,\n vnode\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQW9CLG9CQUFwQixFQUEwQztBQUN4QyxpQ0FBbUIsTUFBbkIsQ0FBMEIsS0FBMUI7QUFDRCxLQUZEO0FBR0Q7O0FBRUQsNkJBQW1CLEdBQW5CLENBQXVCLEtBQXZCLEVBQThCLEVBQTlCLElBQW9DLEtBQXBDO0FBRUEsV0FBUyxDQUFDLFdBQVYsQ0FBc0IsR0FBdEIsQ0FBMEIsRUFBMUIsRUFBOEI7QUFDNUIsd0JBQW9CLEVBQUUsRUFETTtBQUU1QixzQ0FBa0MsRUFBRSxJQUZSO0FBRzVCO0FBSDRCLEdBQTlCO0FBS0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyZWUudHM/NDA3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Q29tcG9uZW50UGFyZW50cyA9IGV4cG9ydHMud2Fsa1RyZWUgPSBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcCA9IGV4cG9ydHMuaW5zdGFuY2VNYXAgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IGVsXzEgPSByZXF1aXJlKFwiLi9lbFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5sZXQgYXBwUmVjb3JkO1xubGV0IGFwaTtcbmNvbnN0IGNvbnNvbGVCb3VuZEluc3RhbmNlcyA9IEFycmF5KDUpO1xubGV0IGZpbHRlciA9ICcnO1xuY29uc3QgZnVuY3Rpb25hbElkcyA9IG5ldyBNYXAoKTtcbi8vIERlZHVwZSBpbnN0YW5jZXNcbi8vIFNvbWUgaW5zdGFuY2VzIG1heSBiZSBib3RoIG9uIGEgY29tcG9uZW50IGFuZCBvbiBhIGNoaWxkIGFic3RyYWN0L2Z1bmN0aW9uYWwgY29tcG9uZW50XG5jb25zdCBjYXB0dXJlSWRzID0gbmV3IE1hcCgpO1xuYXN5bmMgZnVuY3Rpb24gd2Fsa1RyZWUoaW5zdGFuY2UsIHBGaWx0ZXIsIGFwaSwgY3R4KSB7XG4gICAgaW5pdEN0eChhcGksIGN0eCk7XG4gICAgZmlsdGVyID0gcEZpbHRlcjtcbiAgICBmdW5jdGlvbmFsSWRzLmNsZWFyKCk7XG4gICAgY2FwdHVyZUlkcy5jbGVhcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW4oYXdhaXQgZmluZFF1YWxpZmllZENoaWxkcmVuKGluc3RhbmNlKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMud2Fsa1RyZWUgPSB3YWxrVHJlZTtcbmZ1bmN0aW9uIGdldENvbXBvbmVudFBhcmVudHMoaW5zdGFuY2UsIGFwaSwgY3R4KSB7XG4gICAgaW5pdEN0eChhcGksIGN0eCk7XG4gICAgY29uc3QgY2FwdHVyZUlkcyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBjYXB0dXJlSWQgPSB2bSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gKDAsIHV0aWxfMS5nZXRVbmlxdWVJZCkodm0pO1xuICAgICAgICBpZiAoY2FwdHVyZUlkcy5oYXMoaWQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXB0dXJlSWRzLnNldChpZCwgdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKHZtLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgICAgIG1hcmtGdW5jdGlvbmFsKGlkLCB2bS52bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtYXJrKHZtKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgIGNhcHR1cmVJZChpbnN0YW5jZSk7XG4gICAgbGV0IHBhcmVudCA9IGluc3RhbmNlO1xuICAgIHdoaWxlICgocGFyZW50ID0gcGFyZW50LiRwYXJlbnQpKSB7XG4gICAgICAgIGNhcHR1cmVJZChwYXJlbnQpO1xuICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59XG5leHBvcnRzLmdldENvbXBvbmVudFBhcmVudHMgPSBnZXRDb21wb25lbnRQYXJlbnRzO1xuZnVuY3Rpb24gaW5pdEN0eChfYXBpLCBjdHgpIHtcbiAgICBhcHBSZWNvcmQgPSBjdHguY3VycmVudEFwcFJlY29yZDtcbiAgICBhcGkgPSBfYXBpO1xuICAgIGlmICghYXBwUmVjb3JkLm1ldGEuaW5zdGFuY2VNYXApIHtcbiAgICAgICAgYXBwUmVjb3JkLm1ldGEuaW5zdGFuY2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGV4cG9ydHMuaW5zdGFuY2VNYXAgPSBhcHBSZWNvcmQubWV0YS5pbnN0YW5jZU1hcDtcbiAgICBpZiAoIWFwcFJlY29yZC5tZXRhLmZ1bmN0aW9uYWxWbm9kZU1hcCkge1xuICAgICAgICBhcHBSZWNvcmQubWV0YS5mdW5jdGlvbmFsVm5vZGVNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwID0gYXBwUmVjb3JkLm1ldGEuZnVuY3Rpb25hbFZub2RlTWFwO1xufVxuLyoqXG4gKiBJdGVyYXRlIHRocm91Z2ggYW4gYXJyYXkgb2YgaW5zdGFuY2VzIGFuZCBmbGF0dGVuIGl0IGludG9cbiAqIGFuIGFycmF5IG9mIHF1YWxpZmllZCBpbnN0YW5jZXMuIFRoaXMgaXMgYSBkZXB0aC1maXJzdFxuICogdHJhdmVyc2FsIC0gZS5nLiBpZiBhbiBpbnN0YW5jZSBpcyBub3QgbWF0Y2hlZCwgd2Ugd2lsbFxuICogcmVjdXJzaXZlbHkgZ28gZGVlcGVyIHVudGlsIGEgcXVhbGlmaWVkIGNoaWxkIGlzIGZvdW5kLlxuICovXG5mdW5jdGlvbiBmaW5kUXVhbGlmaWVkQ2hpbGRyZW5Gcm9tTGlzdChpbnN0YW5jZXMpIHtcbiAgICBpbnN0YW5jZXMgPSBpbnN0YW5jZXNcbiAgICAgICAgLmZpbHRlcihjaGlsZCA9PiAhKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZCkpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbCghZmlsdGVyXG4gICAgICAgID8gaW5zdGFuY2VzLm1hcChjYXB0dXJlKVxuICAgICAgICA6IEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGluc3RhbmNlcy5tYXAoZmluZFF1YWxpZmllZENoaWxkcmVuKSkpO1xufVxuLyoqXG4gKiBGaW5kIHF1YWxpZmllZCBjaGlsZHJlbiBmcm9tIGEgc2luZ2xlIGluc3RhbmNlLlxuICogSWYgdGhlIGluc3RhbmNlIGl0c2VsZiBpcyBxdWFsaWZpZWQsIGp1c3QgcmV0dXJuIGl0c2VsZi5cbiAqIFRoaXMgaXMgb2sgYmVjYXVzZSBbXS5jb25jYXQgd29ya3MgaW4gYm90aCBjYXNlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZFF1YWxpZmllZENoaWxkcmVuKGluc3RhbmNlKSB7XG4gICAgaWYgKGlzUXVhbGlmaWVkKGluc3RhbmNlKSkge1xuICAgICAgICByZXR1cm4gW2F3YWl0IGNhcHR1cmUoaW5zdGFuY2UpXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBjaGlsZHJlbiA9IGF3YWl0IGZpbmRRdWFsaWZpZWRDaGlsZHJlbkZyb21MaXN0KGluc3RhbmNlLiRjaGlsZHJlbik7XG4gICAgICAgIC8vIEZpbmQgZnVuY3Rpb25hbCBjb21wb25lbnRzIGluIHJlY3Vyc2l2ZWx5IGluIG5vbi1mdW5jdGlvbmFsIHZub2Rlcy5cbiAgICAgICAgaWYgKGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBQcm9taXNlLmFsbChmbGF0dGVuKGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gIWNoaWxkLmNvbXBvbmVudEluc3RhbmNlKS5tYXAoY2FwdHVyZUNoaWxkKSkpO1xuICAgICAgICAgICAgLy8gRmlsdGVyIHF1YWxpZmllZCBjaGlsZHJlbi5cbiAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDaGlsZHJlbiA9IGxpc3QuZmlsdGVyKGluc3RhbmNlID0+IGlzUXVhbGlmaWVkKGluc3RhbmNlKSk7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdChhZGRpdGlvbmFsQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG59XG4vKipcbiAqIEdldCBjaGlsZHJlbiBmcm9tIGEgY29tcG9uZW50IGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBnZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oaW5zdGFuY2UpIHtcbiAgICBpZiAoaW5zdGFuY2UuJGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS4kY2hpbGRyZW47XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gaW5zdGFuY2UgaXMgcXVhbGlmaWVkLlxuICovXG5mdW5jdGlvbiBpc1F1YWxpZmllZChpbnN0YW5jZSkge1xuICAgIGNvbnN0IG5hbWUgPSAoMCwgc2hhcmVkX3V0aWxzXzEuY2xhc3NpZnkpKCgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIG5hbWUuaW5kZXhPZihmaWx0ZXIpID4gLTE7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGl0ZW1zKSB7XG4gICAgY29uc3QgciA9IGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoZmxhdHRlbihpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIGNhcHR1cmVDaGlsZChjaGlsZCkge1xuICAgIGlmIChjaGlsZC5mbkNvbnRleHQgJiYgIWNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSlcbiAgICAgICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZsYXR0ZW4oY2hpbGQuY2hpbGRyZW4ubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICB9XG59XG4vKipcbiAqIENhcHR1cmUgdGhlIG1ldGEgaW5mb3JtYXRpb24gb2YgYW4gaW5zdGFuY2UuIChyZWN1cnNpdmUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmUoaW5zdGFuY2UsIGluZGV4LCBsaXN0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgaWYgKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS52bm9kZTtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLiRvcHRpb25zICYmIGluc3RhbmNlLiRvcHRpb25zLmFic3RyYWN0ICYmIGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICgoX2IgPSAoX2EgPSBpbnN0YW5jZS4kb3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRldnRvb2xzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGlkZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIEZ1bmN0aW9uYWwgY29tcG9uZW50LlxuICAgIGlmIChpbnN0YW5jZS5mbkNvbnRleHQgJiYgIWluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRVaWQgPSBpbnN0YW5jZS5mbkNvbnRleHQuX19WVUVfREVWVE9PTFNfVUlEX187XG4gICAgICAgIGxldCBpZCA9IGZ1bmN0aW9uYWxJZHMuZ2V0KGNvbnRleHRVaWQpO1xuICAgICAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgaWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWQrKztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbmFsSWRzLnNldChjb250ZXh0VWlkLCBpZCk7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxJZCA9IGNvbnRleHRVaWQgKyAnOmZ1bmN0aW9uYWw6JyArIGlkO1xuICAgICAgICBtYXJrRnVuY3Rpb25hbChmdW5jdGlvbmFsSWQsIGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Qcm9taXNlID0gKGluc3RhbmNlLmNoaWxkcmVuXG4gICAgICAgICAgICA/IGluc3RhbmNlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC5mbkNvbnRleHRcbiAgICAgICAgICAgICAgICA/IGNhcHR1cmVDaGlsZChjaGlsZClcbiAgICAgICAgICAgICAgICA6IGNoaWxkLmNvbXBvbmVudEluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgID8gY2FwdHVyZShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpXG4gICAgICAgICAgICAvLyByb3V0ZXItdmlldyBoYXMgYm90aCBmbkNvbnRleHQgYW5kIGNvbXBvbmVudEluc3RhbmNlIG9uIHZub2RlLlxuICAgICAgICAgICAgOiBpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSA/IFtjYXB0dXJlKGluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKV0gOiBbXSk7XG4gICAgICAgIC8vIGF3YWl0IGFsbCBjaGlsZHJlbkNhcHR1cmUgdG8tYmUgcmVzb2x2ZWRcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgUHJvbWlzZS5hbGwoY2hpbGRyZW5Qcm9taXNlKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHtcbiAgICAgICAgICAgIHVpZDogZnVuY3Rpb25hbElkLFxuICAgICAgICAgICAgaWQ6IGZ1bmN0aW9uYWxJZCxcbiAgICAgICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMHg1NTU1NTUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogMHhlZWVlZWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBuYW1lOiAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpLFxuICAgICAgICAgICAgcmVuZGVyS2V5OiAoMCwgdXRpbF8xLmdldFJlbmRlcktleSkoaW5zdGFuY2Uua2V5KSxcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46ICEhY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICAgICAgaW5hY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgaXNGcmFnbWVudDogZmFsc2UsIC8vIFRPRE86IENoZWNrIHdoYXQgaXMgaXQgZm9yLlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYXBpLnZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIGZpbHRlciwgKF9jID0gYXBwUmVjb3JkID09PSBudWxsIHx8IGFwcFJlY29yZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXBwUmVjb3JkLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hcHApO1xuICAgIH1cbiAgICAvLyBpbnN0YW5jZS5fdWlkIGlzIG5vdCByZWxpYWJsZSBpbiBkZXZ0b29scyBhcyB0aGVyZVxuICAgIC8vIG1heSBiZSAyIHJvb3RzIHdpdGggc2FtZSBfdWlkIHdoaWNoIGNhdXNlcyB1bmV4cGVjdGVkXG4gICAgLy8gYmVoYXZpb3VyXG4gICAgaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18gPSAoMCwgdXRpbF8xLmdldFVuaXF1ZUlkKShpbnN0YW5jZSk7XG4gICAgLy8gRGVkdXBlXG4gICAgaWYgKGNhcHR1cmVJZHMuaGFzKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjYXB0dXJlSWRzLnNldChpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXywgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgbWFyayhpbnN0YW5jZSk7XG4gICAgY29uc3QgbmFtZSA9ICgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgUHJvbWlzZS5hbGwoKGF3YWl0IGdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihpbnN0YW5jZSkpXG4gICAgICAgIC5maWx0ZXIoY2hpbGQgPT4gISgwLCB1dGlsXzEuaXNCZWluZ0Rlc3Ryb3llZCkoY2hpbGQpKVxuICAgICAgICAubWFwKGNhcHR1cmUpKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgICAgdWlkOiBpbnN0YW5jZS5fdWlkLFxuICAgICAgICBpZDogaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJlbmRlcktleTogKDAsIHV0aWxfMS5nZXRSZW5kZXJLZXkpKGluc3RhbmNlLiR2bm9kZSA/IGluc3RhbmNlLiR2bm9kZS5rZXkgOiBudWxsKSxcbiAgICAgICAgaW5hY3RpdmU6ICEhaW5zdGFuY2UuX2luYWN0aXZlLFxuICAgICAgICBpc0ZyYWdtZW50OiAhIWluc3RhbmNlLl9pc0ZyYWdtZW50LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgaGFzQ2hpbGRyZW46ICEhY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICAgICAgbWV0YToge30sXG4gICAgfTtcbiAgICBpZiAoaW5zdGFuY2UuX3Zub2RlICYmIGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCB2bm9kZUNoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoZmxhdHRlbihpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4ubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICAgICAgcmV0LmNoaWxkcmVuID0gcmV0LmNoaWxkcmVuLmNvbmNhdChmbGF0dGVuKHZub2RlQ2hpbGRyZW4pLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICAgIHJldC5oYXNDaGlsZHJlbiA9ICEhcmV0LmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG4gICAgLy8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmdcbiAgICBjb25zdCByb290RWxlbWVudHMgPSAoMCwgZWxfMS5nZXRSb290RWxlbWVudHNGcm9tQ29tcG9uZW50SW5zdGFuY2UpKGluc3RhbmNlKTtcbiAgICBjb25zdCBmaXJzdEVsZW1lbnQgPSByb290RWxlbWVudHNbMF07XG4gICAgaWYgKGZpcnN0RWxlbWVudCA9PT0gbnVsbCB8fCBmaXJzdEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlID0gaW5zdGFuY2UuJHBhcmVudDtcbiAgICAgICAgY29uc3QgcGFyZW50Um9vdEVsZW1lbnRzID0gcGFyZW50SW5zdGFuY2UgPyAoMCwgZWxfMS5nZXRSb290RWxlbWVudHNGcm9tQ29tcG9uZW50SW5zdGFuY2UpKHBhcmVudEluc3RhbmNlKSA6IFtdO1xuICAgICAgICBsZXQgZWwgPSBmaXJzdEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGluZGV4TGlzdCA9IFtdO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpbmRleExpc3QucHVzaChBcnJheS5mcm9tKGVsLnBhcmVudEVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihlbCkpO1xuICAgICAgICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9IHdoaWxlIChlbC5wYXJlbnRFbGVtZW50ICYmIHBhcmVudFJvb3RFbGVtZW50cy5sZW5ndGggJiYgIXBhcmVudFJvb3RFbGVtZW50cy5pbmNsdWRlcyhlbCkpO1xuICAgICAgICByZXQuZG9tT3JkZXIgPSBpbmRleExpc3QucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0LmRvbU9yZGVyID0gWy0xXTtcbiAgICB9XG4gICAgLy8gY2hlY2sgaWYgaW5zdGFuY2UgaXMgYXZhaWxhYmxlIGluIGNvbnNvbGVcbiAgICBjb25zdCBjb25zb2xlSWQgPSBjb25zb2xlQm91bmRJbnN0YW5jZXMuaW5kZXhPZihpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyk7XG4gICAgcmV0LmNvbnNvbGVJZCA9IGNvbnNvbGVJZCA+IC0xID8gJyR2bScgKyBjb25zb2xlSWQgOiBudWxsO1xuICAgIC8vIGNoZWNrIHJvdXRlciB2aWV3XG4gICAgY29uc3QgaXNSb3V0ZXJWaWV3MiA9IChfZSA9IChfZCA9IGluc3RhbmNlLiR2bm9kZSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmRhdGEpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5yb3V0ZXJWaWV3O1xuICAgIGlmIChpbnN0YW5jZS5fcm91dGVyVmlldyB8fCBpc1JvdXRlclZpZXcyKSB7XG4gICAgICAgIHJldC5pc1JvdXRlclZpZXcgPSB0cnVlO1xuICAgICAgICBpZiAoIWluc3RhbmNlLl9pbmFjdGl2ZSAmJiBpbnN0YW5jZS4kcm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBpbnN0YW5jZS4kcm91dGUubWF0Y2hlZDtcbiAgICAgICAgICAgIGNvbnN0IGRlcHRoID0gaXNSb3V0ZXJWaWV3MlxuICAgICAgICAgICAgICAgID8gaW5zdGFuY2UuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXG4gICAgICAgICAgICAgICAgOiBpbnN0YW5jZS5fcm91dGVyVmlldy5kZXB0aDtcbiAgICAgICAgICAgIHJldC5tZXRhLm1hdGNoZWRSb3V0ZVNlZ21lbnQgPVxuICAgICAgICAgICAgICAgIG1hdGNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFtkZXB0aF0gJiZcbiAgICAgICAgICAgICAgICAgICAgKGlzUm91dGVyVmlldzIgPyBtYXRjaGVkW2RlcHRoXS5wYXRoIDogbWF0Y2hlZFtkZXB0aF0uaGFuZGxlci5wYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXQudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBgcm91dGVyLXZpZXcke3JldC5tZXRhLm1hdGNoZWRSb3V0ZVNlZ21lbnQgPyBgOiAke3JldC5tZXRhLm1hdGNoZWRSb3V0ZVNlZ21lbnR9YCA6ICcnfWAsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IDB4MDAwMDAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweGZmODM0NCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhcGkudmlzaXRDb21wb25lbnRUcmVlKGluc3RhbmNlLCByZXQsIGZpbHRlciwgKF9mID0gYXBwUmVjb3JkID09PSBudWxsIHx8IGFwcFJlY29yZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXBwUmVjb3JkLm9wdGlvbnMpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5hcHApO1xufVxuLyoqXG4gKiBNYXJrIGFuIGluc3RhbmNlIGFzIGNhcHR1cmVkIGFuZCBzdG9yZSBpdCBpbiB0aGUgaW5zdGFuY2UgbWFwLlxuICpcbiAqIEBwYXJhbSB7VnVlfSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBtYXJrKGluc3RhbmNlKSB7XG4gICAgY29uc3QgcmVmSWQgPSBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXztcbiAgICBpZiAoIWV4cG9ydHMuaW5zdGFuY2VNYXAuaGFzKHJlZklkKSkge1xuICAgICAgICBleHBvcnRzLmluc3RhbmNlTWFwLnNldChyZWZJZCwgaW5zdGFuY2UpO1xuICAgICAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuc2V0KHJlZklkLCBpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLiRvbignaG9vazpiZWZvcmVEZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwb3J0cy5pbnN0YW5jZU1hcC5kZWxldGUocmVmSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYXJrRnVuY3Rpb25hbChpZCwgdm5vZGUpIHtcbiAgICBjb25zdCByZWZJZCA9IHZub2RlLmZuQ29udGV4dC5fX1ZVRV9ERVZUT09MU19VSURfXztcbiAgICBpZiAoIWV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLmhhcyhyZWZJZCkpIHtcbiAgICAgICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuc2V0KHJlZklkLCB7fSk7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dC4kb24oJ2hvb2s6YmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLmRlbGV0ZShyZWZJZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5nZXQocmVmSWQpW2lkXSA9IHZub2RlO1xuICAgIGFwcFJlY29yZC5pbnN0YW5jZU1hcC5zZXQoaWQsIHtcbiAgICAgICAgX19WVUVfREVWVE9PTFNfVUlEX186IGlkLFxuICAgICAgICBfX1ZVRV9ERVZUT09MU19GVU5DVElPTkFMX0xFR0FDWV9fOiB0cnVlLFxuICAgICAgICB2bm9kZSxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyZWUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18059\n");
|
|
287
287
|
|
|
288
288
|
/***/ }),
|
|
289
289
|
|
|
@@ -315,7 +315,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
315
315
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
316
316
|
|
|
317
317
|
"use strict";
|
|
318
|
-
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.setupPlugin = void 0;\n\nconst devtools_api_1 = __webpack_require__(72039);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst clone_deep_1 = __importDefault(__webpack_require__(96206));\n\nlet actionId = 0;\n\nfunction setupPlugin(api, app, Vue) {\n const ROUTER_INSPECTOR_ID = 'vue2-router-inspector';\n const ROUTER_CHANGES_LAYER_ID = 'vue2-router-changes';\n const VUEX_INSPECTOR_ID = 'vue2-vuex-inspector';\n const VUEX_MUTATIONS_ID = 'vue2-vuex-mutations';\n const VUEX_ACTIONS_ID = 'vue2-vuex-actions';\n (0, devtools_api_1.setupDevtoolsPlugin)({\n app,\n id: 'org.vuejs.vue2-internal',\n label: 'Vue 2',\n homepage: 'https://vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png'\n }, api => {\n const hook = shared_utils_1.target.__VUE_DEVTOOLS_GLOBAL_HOOK__; // Vue Router\n\n if (app.$router) {\n const router = app.$router; // Inspector\n\n api.addInspector({\n id: ROUTER_INSPECTOR_ID,\n label: 'Routes',\n icon: 'book',\n treeFilterPlaceholder: 'Search routes'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n payload.rootNodes = router.options.routes.map(route => formatRouteNode(router, route, '', payload.filter)).filter(Boolean);\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n const route = router.matcher.getRoutes().find(r => getPathId(r) === payload.nodeId);\n\n if (route) {\n payload.state = {\n options: formatRouteData(route)\n };\n }\n }\n }); // Timeline\n\n api.addTimelineLayer({\n id: ROUTER_CHANGES_LAYER_ID,\n label: 'Router Navigations',\n color: 0x40a8c4\n });\n router.afterEach((to, from) => {\n api.addTimelineEvent({\n layerId: ROUTER_CHANGES_LAYER_ID,\n event: {\n time: Date.now(),\n title: to.path,\n data: {\n from,\n to\n }\n }\n });\n api.sendInspectorTree(ROUTER_INSPECTOR_ID);\n });\n } // Vuex\n\n\n if (app.$store) {\n const store = app.$store;\n api.addInspector({\n id: VUEX_INSPECTOR_ID,\n label: 'Vuex',\n icon: 'storage',\n treeFilterPlaceholder: 'Filter stores...'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n if (payload.filter) {\n const nodes = [];\n flattenStoreForInspectorTree(nodes, store._modules.root, payload.filter, '');\n payload.rootNodes = nodes;\n } else {\n payload.rootNodes = [formatStoreForInspectorTree(store._modules.root, '')];\n }\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n const modulePath = payload.nodeId;\n const module = getStoreModule(store._modules, modulePath); // Access the getters prop to init getters cache (which is lazy)\n // eslint-disable-next-line no-unused-expressions\n\n module.context.getters;\n payload.state = formatStoreForInspectorState(module, store._makeLocalGettersCache, modulePath);\n }\n });\n api.on.editInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n let path = payload.path;\n\n if (payload.nodeId !== 'root') {\n path = [...payload.nodeId.substring(0, payload.nodeId.length - 1).split('/'), ...path];\n }\n\n store._committing = true;\n payload.set(store._vm.$data.$$state, path);\n store._committing = false;\n }\n });\n api.addTimelineLayer({\n id: VUEX_MUTATIONS_ID,\n label: 'Vuex Mutations',\n color: LIME_500\n });\n api.addTimelineLayer({\n id: VUEX_ACTIONS_ID,\n label: 'Vuex Actions',\n color: LIME_500\n });\n hook.on('vuex:mutation', (mutation, state) => {\n api.sendInspectorState(VUEX_INSPECTOR_ID);\n const data = {};\n\n if (mutation.payload) {\n data.payload = mutation.payload;\n }\n\n data.state = (0, clone_deep_1.default)(state);\n api.addTimelineEvent({\n layerId: VUEX_MUTATIONS_ID,\n event: {\n time: Date.now(),\n title: mutation.type,\n data\n }\n });\n });\n store.subscribeAction({\n before: (action, state) => {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n action._id = actionId++;\n action._time = Date.now();\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: action._time,\n title: action.type,\n groupId: action._id,\n subtitle: 'start',\n data\n }\n });\n },\n after: (action, state) => {\n const data = {};\n\n const duration = Date.now() - action._time;\n\n data.duration = {\n _custom: {\n type: 'duration',\n display: `${duration}ms`,\n tooltip: 'Action duration',\n value: duration\n }\n };\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: Date.now(),\n title: action.type,\n groupId: action._id,\n subtitle: 'end',\n data\n }\n });\n }\n }, {\n prepend: true\n }); // Inspect getters on mutations\n\n api.on.inspectTimelineEvent(payload => {\n if (payload.layerId === VUEX_MUTATIONS_ID) {\n const getterKeys = Object.keys(store.getters);\n\n if (getterKeys.length) {\n const vm = new Vue({\n data: {\n $$state: payload.data.state\n },\n computed: store._vm.$options.computed\n });\n const originalVm = store._vm;\n store._vm = vm;\n const tree = transformPathsToObjectTree(store.getters);\n payload.data.getters = (0, clone_deep_1.default)(tree);\n store._vm = originalVm;\n vm.$destroy();\n }\n }\n });\n }\n });\n}\n\nexports.setupPlugin = setupPlugin;\n/**\n * Extracted from tailwind palette\n */\n\nconst BLUE_600 = 0x2563eb;\nconst LIME_500 = 0x84cc16;\nconst CYAN_400 = 0x22d3ee;\nconst ORANGE_400 = 0xfb923c;\nconst WHITE = 0xffffff;\nconst DARK = 0x666666;\n\nfunction formatRouteNode(router, route, parentPath, filter) {\n var _a, _b;\n\n const node = {\n id: parentPath + route.path,\n label: route.path,\n children: (_a = route.children) === null || _a === void 0 ? void 0 : _a.map(child => formatRouteNode(router, child, route.path, filter)).filter(Boolean),\n tags: []\n };\n if (filter && !node.id.includes(filter) && !((_b = node.children) === null || _b === void 0 ? void 0 : _b.length)) return null;\n\n if (route.name != null) {\n node.tags.push({\n label: String(route.name),\n textColor: 0,\n backgroundColor: CYAN_400\n });\n }\n\n if (route.alias != null) {\n node.tags.push({\n label: 'alias',\n textColor: 0,\n backgroundColor: ORANGE_400\n });\n }\n\n const currentPath = router.currentRoute.matched.reduce((p, m) => p + m.path, '');\n\n if (node.id === currentPath) {\n node.tags.push({\n label: 'active',\n textColor: WHITE,\n backgroundColor: BLUE_600\n });\n }\n\n if (route.redirect) {\n node.tags.push({\n label: 'redirect: ' + (typeof route.redirect === 'string' ? route.redirect : 'Object'),\n textColor: WHITE,\n backgroundColor: DARK\n });\n }\n\n return node;\n}\n\nfunction formatRouteData(route) {\n const data = [];\n data.push({\n key: 'path',\n value: route.path\n });\n\n if (route.redirect) {\n data.push({\n key: 'redirect',\n value: route.redirect\n });\n }\n\n if (route.alias) {\n data.push({\n key: 'alias',\n value: route.alias\n });\n }\n\n if (route.props) {\n data.push({\n key: 'props',\n value: route.props\n });\n }\n\n if (route.name && route.name != null) {\n data.push({\n key: 'name',\n value: route.name\n });\n }\n\n if (route.component) {\n const component = {}; // if (route.component.__file) {\n // component.file = route.component.__file\n // }\n\n if (route.component.template) {\n component.template = route.component.template;\n }\n\n if (route.component.props) {\n component.props = route.component.props;\n }\n\n if (!(0, shared_utils_1.isEmptyObject)(component)) {\n data.push({\n key: 'component',\n value: component\n });\n }\n }\n\n return data;\n}\n\nfunction getPathId(routeMatcher) {\n let path = routeMatcher.path;\n\n if (routeMatcher.parent) {\n path = getPathId(routeMatcher.parent) + path;\n }\n\n return path;\n}\n\nconst TAG_NAMESPACED = {\n label: 'namespaced',\n textColor: WHITE,\n backgroundColor: DARK\n};\n\nfunction formatStoreForInspectorTree(module, path) {\n return {\n id: path || 'root',\n // all modules end with a `/`, we want the last segment only\n // cart/ -> cart\n // nested/cart/ -> cart\n label: extractNameFromPath(path),\n tags: module.namespaced ? [TAG_NAMESPACED] : [],\n children: Object.keys(module._children).map(moduleName => formatStoreForInspectorTree(module._children[moduleName], path + moduleName + '/'))\n };\n}\n\nfunction flattenStoreForInspectorTree(result, module, filter, path) {\n if (path.includes(filter)) {\n result.push({\n id: path || 'root',\n label: path.endsWith('/') ? path.slice(0, path.length - 1) : path || 'Root',\n tags: module.namespaced ? [TAG_NAMESPACED] : []\n });\n }\n\n Object.keys(module._children).forEach(moduleName => {\n flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + '/');\n });\n}\n\nfunction extractNameFromPath(path) {\n return path && path !== 'root' ? path.split('/').slice(-2, -1)[0] : 'Root';\n}\n\nfunction formatStoreForInspectorState(module, getters, path) {\n getters = !module.namespaced || path === 'root' ? module.context.getters : getters[path];\n const gettersKeys = Object.keys(getters);\n const storeState = {\n state: Object.keys(module.state).map(key => ({\n key,\n editable: true,\n value: module.state[key]\n }))\n };\n\n if (gettersKeys.length) {\n const tree = transformPathsToObjectTree(getters);\n storeState.getters = Object.keys(tree).map(key => ({\n key: key.endsWith('/') ? extractNameFromPath(key) : key,\n editable: false,\n value: canThrow(() => tree[key])\n }));\n }\n\n return storeState;\n}\n\nfunction transformPathsToObjectTree(getters) {\n const result = {};\n Object.keys(getters).forEach(key => {\n const path = key.split('/');\n\n if (path.length > 1) {\n let target = result;\n const leafKey = path.pop();\n\n for (const p of path) {\n if (!target[p]) {\n target[p] = {\n _custom: {\n value: {},\n display: p,\n tooltip: 'Module',\n abstract: true\n }\n };\n }\n\n target = target[p]._custom.value;\n }\n\n target[leafKey] = canThrow(() => getters[key]);\n } else {\n result[key] = canThrow(() => getters[key]);\n }\n });\n return result;\n}\n\nfunction getStoreModule(moduleMap, path) {\n const names = path.split('/').filter(n => n);\n return names.reduce((module, moduleName, i) => {\n const child = module[moduleName];\n\n if (!child) {\n throw new Error(`Missing module \"${moduleName}\" for path \"${path}\".`);\n }\n\n return i === names.length - 1 ? child : child._children;\n }, path === 'root' ? moduleMap : moduleMap.root._children);\n}\n\nfunction canThrow(cb) {\n try {\n return cb();\n } catch (e) {\n return e;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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UCxFQUFVO0FBQ1YsV0FBTyxDQUFQO0FBQ0Q7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3BsdWdpbi50cz8wY2NhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHZvaWQgMDtcbmNvbnN0IGRldnRvb2xzX2FwaV8xID0gcmVxdWlyZShcIkB2dWUvZGV2dG9vbHMtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBjbG9uZV9kZWVwXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsb25lLWRlZXBcIikpO1xubGV0IGFjdGlvbklkID0gMDtcbmZ1bmN0aW9uIHNldHVwUGx1Z2luKGFwaSwgYXBwLCBWdWUpIHtcbiAgICBjb25zdCBST1VURVJfSU5TUEVDVE9SX0lEID0gJ3Z1ZTItcm91dGVyLWluc3BlY3Rvcic7XG4gICAgY29uc3QgUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQgPSAndnVlMi1yb3V0ZXItY2hhbmdlcyc7XG4gICAgY29uc3QgVlVFWF9JTlNQRUNUT1JfSUQgPSAndnVlMi12dWV4LWluc3BlY3Rvcic7XG4gICAgY29uc3QgVlVFWF9NVVRBVElPTlNfSUQgPSAndnVlMi12dWV4LW11dGF0aW9ucyc7XG4gICAgY29uc3QgVlVFWF9BQ1RJT05TX0lEID0gJ3Z1ZTItdnVleC1hY3Rpb25zJztcbiAgICAoMCwgZGV2dG9vbHNfYXBpXzEuc2V0dXBEZXZ0b29sc1BsdWdpbikoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGlkOiAnb3JnLnZ1ZWpzLnZ1ZTItaW50ZXJuYWwnLFxuICAgICAgICBsYWJlbDogJ1Z1ZSAyJyxcbiAgICAgICAgaG9tZXBhZ2U6ICdodHRwczovL3Z1ZWpzLm9yZy8nLFxuICAgICAgICBsb2dvOiAnaHR0cHM6Ly92dWVqcy5vcmcvaW1hZ2VzL2ljb25zL2Zhdmljb24tOTZ4OTYucG5nJyxcbiAgICB9LCBhcGkgPT4ge1xuICAgICAgICBjb25zdCBob29rID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gICAgICAgIC8vIFZ1ZSBSb3V0ZXJcbiAgICAgICAgaWYgKGFwcC4kcm91dGVyKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBhcHAuJHJvdXRlcjtcbiAgICAgICAgICAgIC8vIEluc3BlY3RvclxuICAgICAgICAgICAgYXBpLmFkZEluc3BlY3Rvcih7XG4gICAgICAgICAgICAgICAgaWQ6IFJPVVRFUl9JTlNQRUNUT1JfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdSb3V0ZXMnLFxuICAgICAgICAgICAgICAgIGljb246ICdib29rJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdTZWFyY2ggcm91dGVzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFJPVVRFUl9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5yb290Tm9kZXMgPSByb3V0ZXIub3B0aW9ucy5yb3V0ZXMubWFwKHJvdXRlID0+IGZvcm1hdFJvdXRlTm9kZShyb3V0ZXIsIHJvdXRlLCAnJywgcGF5bG9hZC5maWx0ZXIpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFJPVVRFUl9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSByb3V0ZXIubWF0Y2hlci5nZXRSb3V0ZXMoKS5maW5kKHIgPT4gZ2V0UGF0aElkKHIpID09PSBwYXlsb2FkLm5vZGVJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBmb3JtYXRSb3V0ZURhdGEocm91dGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVGltZWxpbmVcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdSb3V0ZXIgTmF2aWdhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAweDQwYThjNCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm91dGVyLmFmdGVyRWFjaCgodG8sIGZyb20pID0+IHtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0by5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShST1VURVJfSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZ1ZXhcbiAgICAgICAgaWYgKGFwcC4kc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gYXBwLiRzdG9yZTtcbiAgICAgICAgICAgIGFwaS5hZGRJbnNwZWN0b3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXgnLFxuICAgICAgICAgICAgICAgIGljb246ICdzdG9yYWdlJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdGaWx0ZXIgc3RvcmVzLi4uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShub2Rlcywgc3RvcmUuX21vZHVsZXMucm9vdCwgcGF5bG9hZC5maWx0ZXIsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gbm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoc3RvcmUuX21vZHVsZXMucm9vdCwgJycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFZVRVhfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSBwYXlsb2FkLm5vZGVJZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gZ2V0U3RvcmVNb2R1bGUoc3RvcmUuX21vZHVsZXMsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBY2Nlc3MgdGhlIGdldHRlcnMgcHJvcCB0byBpbml0IGdldHRlcnMgY2FjaGUgKHdoaWNoIGlzIGxhenkpXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRleHQuZ2V0dGVycztcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBzdG9yZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlLCBtb2R1bGVQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5vbi5lZGl0SW5zcGVjdG9yU3RhdGUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGggPSBwYXlsb2FkLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLm5vZGVJZCAhPT0gJ3Jvb3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBheWxvYWQubm9kZUlkLnN1YnN0cmluZygwLCBwYXlsb2FkLm5vZGVJZC5sZW5ndGggLSAxKS5zcGxpdCgnLycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLl9jb21taXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zZXQoc3RvcmUuX3ZtLiRkYXRhLiQkc3RhdGUsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5fY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX01VVEFUSU9OU19JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXggTXV0YXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVnVleCBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGhvb2sub24oJ3Z1ZXg6bXV0YXRpb24nLCAobXV0YXRpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JTdGF0ZShWVUVYX0lOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IG11dGF0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfTVVUQVRJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtdXRhdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RvcmUuc3Vic2NyaWJlQWN0aW9uKHtcbiAgICAgICAgICAgICAgICBiZWZvcmU6IChhY3Rpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uX2lkID0gYWN0aW9uSWQrKztcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLl90aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGFjdGlvbi5fdGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogYWN0aW9uLl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhZnRlcjogKGFjdGlvbiwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBhY3Rpb24uX3RpbWU7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2R1cmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBgJHtkdXJhdGlvbn1tc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ0FjdGlvbiBkdXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGR1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhLnN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogYWN0aW9uLl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCB7IHByZXBlbmQ6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBJbnNwZWN0IGdldHRlcnMgb24gbXV0YXRpb25zXG4gICAgICAgICAgICBhcGkub24uaW5zcGVjdFRpbWVsaW5lRXZlbnQocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubGF5ZXJJZCA9PT0gVlVFWF9NVVRBVElPTlNfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0dGVyS2V5cyA9IE9iamVjdC5rZXlzKHN0b3JlLmdldHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZtID0gbmV3IFZ1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJHN0YXRlOiBwYXlsb2FkLmRhdGEuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZDogc3RvcmUuX3ZtLiRvcHRpb25zLmNvbXB1dGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZtID0gc3RvcmUuX3ZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuX3ZtID0gdm07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmVlID0gdHJhbnNmb3JtUGF0aHNUb09iamVjdFRyZWUoc3RvcmUuZ2V0dGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmRhdGEuZ2V0dGVycyA9ICgwLCBjbG9uZV9kZWVwXzEuZGVmYXVsdCkodHJlZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5fdm0gPSBvcmlnaW5hbFZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdm0uJGRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLnNldHVwUGx1Z2luID0gc2V0dXBQbHVnaW47XG4vKipcbiAqIEV4dHJhY3RlZCBmcm9tIHRhaWx3aW5kIHBhbGV0dGVcbiAqL1xuY29uc3QgQkxVRV82MDAgPSAweDI1NjNlYjtcbmNvbnN0IExJTUVfNTAwID0gMHg4NGNjMTY7XG5jb25zdCBDWUFOXzQwMCA9IDB4MjJkM2VlO1xuY29uc3QgT1JBTkdFXzQwMCA9IDB4ZmI5MjNjO1xuY29uc3QgV0hJVEUgPSAweGZmZmZmZjtcbmNvbnN0IERBUksgPSAweDY2NjY2NjtcbmZ1bmN0aW9uIGZvcm1hdFJvdXRlTm9kZShyb3V0ZXIsIHJvdXRlLCBwYXJlbnRQYXRoLCBmaWx0ZXIpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgIGlkOiBwYXJlbnRQYXRoICsgcm91dGUucGF0aCxcbiAgICAgICAgbGFiZWw6IHJvdXRlLnBhdGgsXG4gICAgICAgIGNoaWxkcmVuOiAoX2EgPSByb3V0ZS5jaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcChjaGlsZCA9PiBmb3JtYXRSb3V0ZU5vZGUocm91dGVyLCBjaGlsZCwgcm91dGUucGF0aCwgZmlsdGVyKSkuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICB9O1xuICAgIGlmIChmaWx0ZXIgJiYgIW5vZGUuaWQuaW5jbHVkZXMoZmlsdGVyKSAmJiAhKChfYiA9IG5vZGUuY2hpbGRyZW4pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAocm91dGUubmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBTdHJpbmcocm91dGUubmFtZSksXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IENZQU5fNDAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLmFsaWFzICE9IG51bGwpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6ICdhbGlhcycsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IE9SQU5HRV80MDAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHJvdXRlci5jdXJyZW50Um91dGUubWF0Y2hlZC5yZWR1Y2UoKHAsIG0pID0+IHAgKyBtLnBhdGgsICcnKTtcbiAgICBpZiAobm9kZS5pZCA9PT0gY3VycmVudFBhdGgpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6ICdhY3RpdmUnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQkxVRV82MDAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUucmVkaXJlY3QpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6ICdyZWRpcmVjdDogJyArXG4gICAgICAgICAgICAgICAgKHR5cGVvZiByb3V0ZS5yZWRpcmVjdCA9PT0gJ3N0cmluZycgPyByb3V0ZS5yZWRpcmVjdCA6ICdPYmplY3QnKSxcbiAgICAgICAgICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IERBUkssXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFJvdXRlRGF0YShyb3V0ZSkge1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICBkYXRhLnB1c2goeyBrZXk6ICdwYXRoJywgdmFsdWU6IHJvdXRlLnBhdGggfSk7XG4gICAgaWYgKHJvdXRlLnJlZGlyZWN0KSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ3JlZGlyZWN0JywgdmFsdWU6IHJvdXRlLnJlZGlyZWN0IH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUuYWxpYXMpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnYWxpYXMnLCB2YWx1ZTogcm91dGUuYWxpYXMgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5wcm9wcykge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdwcm9wcycsIHZhbHVlOiByb3V0ZS5wcm9wcyB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLm5hbWUgJiYgcm91dGUubmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ25hbWUnLCB2YWx1ZTogcm91dGUubmFtZSB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLmNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB7fTtcbiAgICAgICAgLy8gaWYgKHJvdXRlLmNvbXBvbmVudC5fX2ZpbGUpIHtcbiAgICAgICAgLy8gICBjb21wb25lbnQuZmlsZSA9IHJvdXRlLmNvbXBvbmVudC5fX2ZpbGVcbiAgICAgICAgLy8gfVxuICAgICAgICBpZiAocm91dGUuY29tcG9uZW50LnRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb21wb25lbnQudGVtcGxhdGUgPSByb3V0ZS5jb21wb25lbnQudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlLmNvbXBvbmVudC5wcm9wcykge1xuICAgICAgICAgICAgY29tcG9uZW50LnByb3BzID0gcm91dGUuY29tcG9uZW50LnByb3BzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIHNoYXJlZF91dGlsc18xLmlzRW1wdHlPYmplY3QpKGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaCh7IGtleTogJ2NvbXBvbmVudCcsIHZhbHVlOiBjb21wb25lbnQgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBnZXRQYXRoSWQocm91dGVNYXRjaGVyKSB7XG4gICAgbGV0IHBhdGggPSByb3V0ZU1hdGNoZXIucGF0aDtcbiAgICBpZiAocm91dGVNYXRjaGVyLnBhcmVudCkge1xuICAgICAgICBwYXRoID0gZ2V0UGF0aElkKHJvdXRlTWF0Y2hlci5wYXJlbnQpICsgcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGg7XG59XG5jb25zdCBUQUdfTkFNRVNQQUNFRCA9IHtcbiAgICBsYWJlbDogJ25hbWVzcGFjZWQnLFxuICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgYmFja2dyb3VuZENvbG9yOiBEQVJLLFxufTtcbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShtb2R1bGUsIHBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGF0aCB8fCAncm9vdCcsXG4gICAgICAgIC8vIGFsbCBtb2R1bGVzIGVuZCB3aXRoIGEgYC9gLCB3ZSB3YW50IHRoZSBsYXN0IHNlZ21lbnQgb25seVxuICAgICAgICAvLyBjYXJ0LyAtPiBjYXJ0XG4gICAgICAgIC8vIG5lc3RlZC9jYXJ0LyAtPiBjYXJ0XG4gICAgICAgIGxhYmVsOiBleHRyYWN0TmFtZUZyb21QYXRoKHBhdGgpLFxuICAgICAgICB0YWdzOiBtb2R1bGUubmFtZXNwYWNlZCA/IFtUQUdfTkFNRVNQQUNFRF0gOiBbXSxcbiAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKG1vZHVsZS5fY2hpbGRyZW4pLm1hcCgobW9kdWxlTmFtZSkgPT4gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JUcmVlKG1vZHVsZS5fY2hpbGRyZW5bbW9kdWxlTmFtZV0sIHBhdGggKyBtb2R1bGVOYW1lICsgJy8nKSksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5TdG9yZUZvckluc3BlY3RvclRyZWUocmVzdWx0LCBtb2R1bGUsIGZpbHRlciwgcGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKGZpbHRlcikpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgaWQ6IHBhdGggfHwgJ3Jvb3QnLFxuICAgICAgICAgICAgbGFiZWw6IHBhdGguZW5kc1dpdGgoJy8nKSA/IHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSA6IHBhdGggfHwgJ1Jvb3QnLFxuICAgICAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhtb2R1bGUuX2NoaWxkcmVuKS5mb3JFYWNoKG1vZHVsZU5hbWUgPT4ge1xuICAgICAgICBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlKHJlc3VsdCwgbW9kdWxlLl9jaGlsZHJlblttb2R1bGVOYW1lXSwgZmlsdGVyLCBwYXRoICsgbW9kdWxlTmFtZSArICcvJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleHRyYWN0TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aCAmJiBwYXRoICE9PSAncm9vdCcgPyBwYXRoLnNwbGl0KCcvJykuc2xpY2UoLTIsIC0xKVswXSA6ICdSb290Jztcbn1cbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBnZXR0ZXJzLCBwYXRoKSB7XG4gICAgZ2V0dGVycyA9ICFtb2R1bGUubmFtZXNwYWNlZCB8fCBwYXRoID09PSAncm9vdCcgPyBtb2R1bGUuY29udGV4dC5nZXR0ZXJzIDogZ2V0dGVyc1twYXRoXTtcbiAgICBjb25zdCBnZXR0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKGdldHRlcnMpO1xuICAgIGNvbnN0IHN0b3JlU3RhdGUgPSB7XG4gICAgICAgIHN0YXRlOiBPYmplY3Qua2V5cyhtb2R1bGUuc3RhdGUpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbW9kdWxlLnN0YXRlW2tleV0sXG4gICAgICAgIH0pKSxcbiAgICB9O1xuICAgIGlmIChnZXR0ZXJzS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdHJlZSA9IHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlKGdldHRlcnMpO1xuICAgICAgICBzdG9yZVN0YXRlLmdldHRlcnMgPSBPYmplY3Qua2V5cyh0cmVlKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleToga2V5LmVuZHNXaXRoKCcvJykgPyBleHRyYWN0TmFtZUZyb21QYXRoKGtleSkgOiBrZXksXG4gICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogY2FuVGhyb3coKCkgPT4gdHJlZVtrZXldKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmVTdGF0ZTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlKGdldHRlcnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhnZXR0ZXJzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBrZXkuc3BsaXQoJy8nKTtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IHJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IGxlYWZLZXkgPSBwYXRoLnBvcCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldFtwXSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ01vZHVsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbcF0uX2N1c3RvbS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldFtsZWFmS2V5XSA9IGNhblRocm93KCgpID0+IGdldHRlcnNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IGNhblRocm93KCgpID0+IGdldHRlcnNba2V5XSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0U3RvcmVNb2R1bGUobW9kdWxlTWFwLCBwYXRoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKChuKSA9PiBuKTtcbiAgICByZXR1cm4gbmFtZXMucmVkdWNlKChtb2R1bGUsIG1vZHVsZU5hbWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBtb2R1bGVbbW9kdWxlTmFtZV07XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtb2R1bGUgXCIke21vZHVsZU5hbWV9XCIgZm9yIHBhdGggXCIke3BhdGh9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkgPT09IG5hbWVzLmxlbmd0aCAtIDEgPyBjaGlsZCA6IGNoaWxkLl9jaGlsZHJlbjtcbiAgICB9LCBwYXRoID09PSAncm9vdCcgPyBtb2R1bGVNYXAgOiBtb2R1bGVNYXAucm9vdC5fY2hpbGRyZW4pO1xufVxuZnVuY3Rpb24gY2FuVGhyb3coY2IpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2IoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGx1Z2luLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7725\n");
|
|
318
|
+
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.setupPlugin = void 0;\n\nconst devtools_api_1 = __webpack_require__(72039);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst clone_deep_1 = __importDefault(__webpack_require__(96206));\n\nlet actionId = 0;\n\nfunction setupPlugin(api, app, Vue) {\n const ROUTER_INSPECTOR_ID = 'vue2-router-inspector';\n const ROUTER_CHANGES_LAYER_ID = 'vue2-router-changes';\n const VUEX_INSPECTOR_ID = 'vue2-vuex-inspector';\n const VUEX_MUTATIONS_ID = 'vue2-vuex-mutations';\n const VUEX_ACTIONS_ID = 'vue2-vuex-actions';\n (0, devtools_api_1.setupDevtoolsPlugin)({\n app,\n id: 'org.vuejs.vue2-internal',\n label: 'Vue 2',\n homepage: 'https://vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png',\n settings: {\n legacyActions: {\n label: 'Legacy Actions',\n description: 'Enable this for Vuex < 3.1.0',\n type: 'boolean',\n defaultValue: false\n }\n }\n }, api => {\n var _a;\n\n const hook = shared_utils_1.target.__VUE_DEVTOOLS_GLOBAL_HOOK__; // Vue Router\n\n if (app.$router) {\n const router = app.$router; // Inspector\n\n api.addInspector({\n id: ROUTER_INSPECTOR_ID,\n label: 'Routes',\n icon: 'book',\n treeFilterPlaceholder: 'Search routes'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n payload.rootNodes = router.options.routes.map(route => formatRouteNode(router, route, '', payload.filter)).filter(Boolean);\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n const route = router.matcher.getRoutes().find(r => getPathId(r) === payload.nodeId);\n\n if (route) {\n payload.state = {\n options: formatRouteData(route)\n };\n }\n }\n }); // Timeline\n\n api.addTimelineLayer({\n id: ROUTER_CHANGES_LAYER_ID,\n label: 'Router Navigations',\n color: 0x40a8c4\n });\n router.afterEach((to, from) => {\n api.addTimelineEvent({\n layerId: ROUTER_CHANGES_LAYER_ID,\n event: {\n time: Date.now(),\n title: to.path,\n data: {\n from,\n to\n }\n }\n });\n api.sendInspectorTree(ROUTER_INSPECTOR_ID);\n });\n } // Vuex\n\n\n if (app.$store) {\n const store = app.$store;\n api.addInspector({\n id: VUEX_INSPECTOR_ID,\n label: 'Vuex',\n icon: 'storage',\n treeFilterPlaceholder: 'Filter stores...'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n if (payload.filter) {\n const nodes = [];\n flattenStoreForInspectorTree(nodes, store._modules.root, payload.filter, '');\n payload.rootNodes = nodes;\n } else {\n payload.rootNodes = [formatStoreForInspectorTree(store._modules.root, 'Root', '')];\n }\n }\n });\n api.on.getInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n const modulePath = payload.nodeId;\n const module = getStoreModule(store._modules, modulePath); // Access the getters prop to init getters cache (which is lazy)\n // eslint-disable-next-line no-unused-expressions\n\n module.context.getters;\n payload.state = formatStoreForInspectorState(module, store._makeLocalGettersCache, modulePath);\n }\n });\n api.on.editInspectorState(payload => {\n if (payload.inspectorId === VUEX_INSPECTOR_ID) {\n let path = payload.path;\n\n if (payload.nodeId !== VUEX_ROOT_PATH) {\n path = [...payload.nodeId.substring(0, payload.nodeId.length - 1).split('/'), ...path];\n }\n\n store._committing = true;\n payload.set(store._vm.$data.$$state, path);\n store._committing = false;\n }\n });\n api.addTimelineLayer({\n id: VUEX_MUTATIONS_ID,\n label: 'Vuex Mutations',\n color: LIME_500\n });\n api.addTimelineLayer({\n id: VUEX_ACTIONS_ID,\n label: 'Vuex Actions',\n color: LIME_500\n });\n hook.on('vuex:mutation', (mutation, state) => {\n api.sendInspectorState(VUEX_INSPECTOR_ID);\n const data = {};\n\n if (mutation.payload) {\n data.payload = mutation.payload;\n }\n\n data.state = (0, clone_deep_1.default)(state);\n api.addTimelineEvent({\n layerId: VUEX_MUTATIONS_ID,\n event: {\n time: Date.now(),\n title: mutation.type,\n data\n }\n });\n });\n\n function legacySingleActionSub(action, state) {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: Date.now(),\n title: action.type,\n data\n }\n });\n }\n\n (_a = store.subscribeAction) === null || _a === void 0 ? void 0 : _a.call(store, api.getSettings().legacyActions ? legacySingleActionSub : {\n before: (action, state) => {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n action._id = actionId++;\n action._time = Date.now();\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: action._time,\n title: action.type,\n groupId: action._id,\n subtitle: 'start',\n data\n }\n });\n },\n after: (action, state) => {\n const data = {};\n\n const duration = Date.now() - action._time;\n\n data.duration = {\n _custom: {\n type: 'duration',\n display: `${duration}ms`,\n tooltip: 'Action duration',\n value: duration\n }\n };\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: Date.now(),\n title: action.type,\n groupId: action._id,\n subtitle: 'end',\n data\n }\n });\n }\n }, {\n prepend: true\n }); // Inspect getters on mutations\n\n api.on.inspectTimelineEvent(payload => {\n if (payload.layerId === VUEX_MUTATIONS_ID) {\n const getterKeys = Object.keys(store.getters);\n\n if (getterKeys.length) {\n const vm = new Vue({\n data: {\n $$state: payload.data.state\n },\n computed: store._vm.$options.computed\n });\n const originalVm = store._vm;\n store._vm = vm;\n const tree = transformPathsToObjectTree(store.getters);\n payload.data.getters = (0, clone_deep_1.default)(tree);\n store._vm = originalVm;\n vm.$destroy();\n }\n }\n });\n }\n });\n}\n\nexports.setupPlugin = setupPlugin;\n/**\n * Extracted from tailwind palette\n */\n\nconst BLUE_600 = 0x2563eb;\nconst LIME_500 = 0x84cc16;\nconst CYAN_400 = 0x22d3ee;\nconst ORANGE_400 = 0xfb923c;\nconst WHITE = 0xffffff;\nconst DARK = 0x666666;\n\nfunction formatRouteNode(router, route, parentPath, filter) {\n var _a, _b;\n\n const node = {\n id: parentPath + route.path,\n label: route.path,\n children: (_a = route.children) === null || _a === void 0 ? void 0 : _a.map(child => formatRouteNode(router, child, route.path, filter)).filter(Boolean),\n tags: []\n };\n if (filter && !node.id.includes(filter) && !((_b = node.children) === null || _b === void 0 ? void 0 : _b.length)) return null;\n\n if (route.name != null) {\n node.tags.push({\n label: String(route.name),\n textColor: 0,\n backgroundColor: CYAN_400\n });\n }\n\n if (route.alias != null) {\n node.tags.push({\n label: 'alias',\n textColor: 0,\n backgroundColor: ORANGE_400\n });\n }\n\n const currentPath = router.currentRoute.matched.reduce((p, m) => p + m.path, '');\n\n if (node.id === currentPath) {\n node.tags.push({\n label: 'active',\n textColor: WHITE,\n backgroundColor: BLUE_600\n });\n }\n\n if (route.redirect) {\n node.tags.push({\n label: 'redirect: ' + (typeof route.redirect === 'string' ? route.redirect : 'Object'),\n textColor: WHITE,\n backgroundColor: DARK\n });\n }\n\n return node;\n}\n\nfunction formatRouteData(route) {\n const data = [];\n data.push({\n key: 'path',\n value: route.path\n });\n\n if (route.redirect) {\n data.push({\n key: 'redirect',\n value: route.redirect\n });\n }\n\n if (route.alias) {\n data.push({\n key: 'alias',\n value: route.alias\n });\n }\n\n if (route.props) {\n data.push({\n key: 'props',\n value: route.props\n });\n }\n\n if (route.name && route.name != null) {\n data.push({\n key: 'name',\n value: route.name\n });\n }\n\n if (route.component) {\n const component = {}; // if (route.component.__file) {\n // component.file = route.component.__file\n // }\n\n if (route.component.template) {\n component.template = route.component.template;\n }\n\n if (route.component.props) {\n component.props = route.component.props;\n }\n\n if (!(0, shared_utils_1.isEmptyObject)(component)) {\n data.push({\n key: 'component',\n value: component\n });\n }\n }\n\n return data;\n}\n\nfunction getPathId(routeMatcher) {\n let path = routeMatcher.path;\n\n if (routeMatcher.parent) {\n path = getPathId(routeMatcher.parent) + path;\n }\n\n return path;\n}\n\nconst TAG_NAMESPACED = {\n label: 'namespaced',\n textColor: WHITE,\n backgroundColor: DARK\n};\nconst VUEX_ROOT_PATH = '__vdt_root';\nconst VUEX_MODULE_PATH_SEPARATOR = '[vdt]';\nconst VUEX_MODULE_PATH_SEPARATOR_REG = /\\[vdt\\]/g;\n\nfunction formatStoreForInspectorTree(module, moduleName, path) {\n return {\n id: path !== null && path !== void 0 ? path : VUEX_ROOT_PATH,\n // all modules end with a `/`, we want the last segment only\n // cart/ -> cart\n // nested/cart/ -> cart\n label: moduleName,\n tags: module.namespaced ? [TAG_NAMESPACED] : [],\n children: Object.keys(module._children).map(key => formatStoreForInspectorTree(module._children[key], key, `${path}${key}${VUEX_MODULE_PATH_SEPARATOR}`))\n };\n}\n\nfunction flattenStoreForInspectorTree(result, module, filter, path) {\n if (path.includes(filter)) {\n result.push({\n id: path || VUEX_ROOT_PATH,\n label: path.endsWith(VUEX_MODULE_PATH_SEPARATOR) ? path.slice(0, path.length - 1) : path || 'Root',\n tags: module.namespaced ? [TAG_NAMESPACED] : []\n });\n }\n\n Object.keys(module._children).forEach(moduleName => {\n flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + VUEX_MODULE_PATH_SEPARATOR);\n });\n}\n\nfunction extractNameFromPath(path) {\n return path && path !== VUEX_ROOT_PATH ? path.split(VUEX_MODULE_PATH_SEPARATOR).slice(-2, -1)[0] : 'Root';\n}\n\nfunction formatStoreForInspectorState(module, getters, path) {\n var _a;\n\n const storeState = {\n state: Object.keys(module.context.state).map(key => ({\n key,\n editable: true,\n value: module.context.state[key]\n }))\n };\n const pathWithSlashes = path.replace(VUEX_MODULE_PATH_SEPARATOR_REG, '/');\n getters = !module.namespaced || path === VUEX_ROOT_PATH ? module.context.getters : getters[pathWithSlashes];\n let gettersKeys = Object.keys(getters);\n const shouldPickGetters = !module.namespaced && path !== VUEX_ROOT_PATH;\n\n if (shouldPickGetters) {\n // Only pick the getters defined in the non-namespaced module\n const definedGettersKeys = Object.keys((_a = module._rawModule.getters) !== null && _a !== void 0 ? _a : {});\n gettersKeys = gettersKeys.filter(key => definedGettersKeys.includes(key));\n }\n\n if (gettersKeys.length) {\n let moduleGetters;\n\n if (shouldPickGetters) {\n // Only pick the getters defined in the non-namespaced module\n moduleGetters = {};\n\n for (const key of gettersKeys) {\n moduleGetters[key] = getters[key];\n }\n } else {\n moduleGetters = getters;\n }\n\n const tree = transformPathsToObjectTree(moduleGetters);\n storeState.getters = Object.keys(tree).map(key => ({\n key: key.endsWith('/') ? extractNameFromPath(key) : key,\n editable: false,\n value: canThrow(() => tree[key])\n }));\n }\n\n return storeState;\n}\n\nfunction transformPathsToObjectTree(getters) {\n const result = {};\n Object.keys(getters).forEach(key => {\n const path = key.split('/');\n\n if (path.length > 1) {\n let target = result;\n const leafKey = path.pop();\n\n for (const p of path) {\n if (!target[p]) {\n target[p] = {\n _custom: {\n value: {},\n display: p,\n tooltip: 'Module',\n abstract: true\n }\n };\n }\n\n target = target[p]._custom.value;\n }\n\n target[leafKey] = canThrow(() => getters[key]);\n } else {\n result[key] = canThrow(() => getters[key]);\n }\n });\n return result;\n}\n\nfunction getStoreModule(moduleMap, path) {\n const names = path.split(VUEX_MODULE_PATH_SEPARATOR).filter(n => n);\n return names.reduce((module, moduleName, i) => {\n const child = module[moduleName === VUEX_ROOT_PATH ? 'root' : moduleName];\n\n if (!child) {\n throw new Error(`Missing module \"${moduleName}\" for path \"${path}\".`);\n }\n\n return i === names.length - 1 ? child : child._children;\n }, path === VUEX_ROOT_PATH ? moduleMap : moduleMap.root._children);\n}\n\nfunction canThrow(cb) {\n try {\n return cb();\n } catch (e) {\n return e;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFVBQVQsRUFBcUIsQ0FBckIsS0FBMEI7QUFDeEIsVUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsS0FBSyxjQUFmLEdBQWdDLE1BQWhDLEdBQXlDLFVBQTFDLENBQXBCOztBQUNBLFFBQUksQ0FBQyxLQUFMLEVBQVk7QUFDVixZQUFNLElBQUksS0FBSixDQUFVLG1CQUFtQixVQUFVLGVBQWUsSUFBSSxJQUExRCxDQUFOO0FBQ0Q7O0FBQ0QsV0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLE1BQU4sR0FBZSxDQUFyQixHQUF5QixLQUF6QixHQUFpQyxLQUFLLENBQUMsU0FBOUM7QUFDRCxHQVBJLEVBUUwsSUFBSSxLQUFLLGNBQVQsR0FBMEIsU0FBMUIsR0FBc0MsU0FBUyxDQUFDLElBQVYsQ0FBZSxTQVJoRCxDQUFQO0FBVUQ7O0FBRUQsU0FBUyxRQUFULENBQW1CLEVBQW5CLEVBQWdDO0FBQzlCLE1BQUk7QUFDRixXQUFPLEVBQUUsRUFBVDtBQUNELEdBRkQsQ0FFRSxPQUFPLENBQVAsRUFBVTtBQUNWLFdBQU8sQ0FBUDtBQUNEO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL3NyYy9wbHVnaW4udHM/MGNjYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2V0dXBQbHVnaW4gPSB2b2lkIDA7XG5jb25zdCBkZXZ0b29sc19hcGlfMSA9IHJlcXVpcmUoXCJAdnVlL2RldnRvb2xzLWFwaVwiKTtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgY2xvbmVfZGVlcF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJjbG9uZS1kZWVwXCIpKTtcbmxldCBhY3Rpb25JZCA9IDA7XG5mdW5jdGlvbiBzZXR1cFBsdWdpbihhcGksIGFwcCwgVnVlKSB7XG4gICAgY29uc3QgUk9VVEVSX0lOU1BFQ1RPUl9JRCA9ICd2dWUyLXJvdXRlci1pbnNwZWN0b3InO1xuICAgIGNvbnN0IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lEID0gJ3Z1ZTItcm91dGVyLWNoYW5nZXMnO1xuICAgIGNvbnN0IFZVRVhfSU5TUEVDVE9SX0lEID0gJ3Z1ZTItdnVleC1pbnNwZWN0b3InO1xuICAgIGNvbnN0IFZVRVhfTVVUQVRJT05TX0lEID0gJ3Z1ZTItdnVleC1tdXRhdGlvbnMnO1xuICAgIGNvbnN0IFZVRVhfQUNUSU9OU19JRCA9ICd2dWUyLXZ1ZXgtYWN0aW9ucyc7XG4gICAgKDAsIGRldnRvb2xzX2FwaV8xLnNldHVwRGV2dG9vbHNQbHVnaW4pKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBpZDogJ29yZy52dWVqcy52dWUyLWludGVybmFsJyxcbiAgICAgICAgbGFiZWw6ICdWdWUgMicsXG4gICAgICAgIGhvbWVwYWdlOiAnaHR0cHM6Ly92dWVqcy5vcmcvJyxcbiAgICAgICAgbG9nbzogJ2h0dHBzOi8vdnVlanMub3JnL2ltYWdlcy9pY29ucy9mYXZpY29uLTk2eDk2LnBuZycsXG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgICBsZWdhY3lBY3Rpb25zOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdMZWdhY3kgQWN0aW9ucycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFbmFibGUgdGhpcyBmb3IgVnVleCA8IDMuMS4wJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSwgYXBpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBob29rID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gICAgICAgIC8vIFZ1ZSBSb3V0ZXJcbiAgICAgICAgaWYgKGFwcC4kcm91dGVyKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBhcHAuJHJvdXRlcjtcbiAgICAgICAgICAgIC8vIEluc3BlY3RvclxuICAgICAgICAgICAgYXBpLmFkZEluc3BlY3Rvcih7XG4gICAgICAgICAgICAgICAgaWQ6IFJPVVRFUl9JTlNQRUNUT1JfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdSb3V0ZXMnLFxuICAgICAgICAgICAgICAgIGljb246ICdib29rJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdTZWFyY2ggcm91dGVzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFJPVVRFUl9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5yb290Tm9kZXMgPSByb3V0ZXIub3B0aW9ucy5yb3V0ZXMubWFwKHJvdXRlID0+IGZvcm1hdFJvdXRlTm9kZShyb3V0ZXIsIHJvdXRlLCAnJywgcGF5bG9hZC5maWx0ZXIpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFJPVVRFUl9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSByb3V0ZXIubWF0Y2hlci5nZXRSb3V0ZXMoKS5maW5kKHIgPT4gZ2V0UGF0aElkKHIpID09PSBwYXlsb2FkLm5vZGVJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBmb3JtYXRSb3V0ZURhdGEocm91dGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVGltZWxpbmVcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdSb3V0ZXIgTmF2aWdhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAweDQwYThjNCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm91dGVyLmFmdGVyRWFjaCgodG8sIGZyb20pID0+IHtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0by5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShST1VURVJfSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZ1ZXhcbiAgICAgICAgaWYgKGFwcC4kc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gYXBwLiRzdG9yZTtcbiAgICAgICAgICAgIGFwaS5hZGRJbnNwZWN0b3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXgnLFxuICAgICAgICAgICAgICAgIGljb246ICdzdG9yYWdlJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdGaWx0ZXIgc3RvcmVzLi4uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShub2Rlcywgc3RvcmUuX21vZHVsZXMucm9vdCwgcGF5bG9hZC5maWx0ZXIsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gbm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoc3RvcmUuX21vZHVsZXMucm9vdCwgJ1Jvb3QnLCAnJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlUGF0aCA9IHBheWxvYWQubm9kZUlkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBnZXRTdG9yZU1vZHVsZShzdG9yZS5fbW9kdWxlcywgbW9kdWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFjY2VzcyB0aGUgZ2V0dGVycyBwcm9wIHRvIGluaXQgZ2V0dGVycyBjYWNoZSAod2hpY2ggaXMgbGF6eSlcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuY29udGV4dC5nZXR0ZXJzO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnN0YXRlID0gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JTdGF0ZShtb2R1bGUsIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGUsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmVkaXRJbnNwZWN0b3JTdGF0ZSgocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBWVUVYX0lOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IHBheWxvYWQucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubm9kZUlkICE9PSBWVUVYX1JPT1RfUEFUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLm5vZGVJZC5zdWJzdHJpbmcoMCwgcGF5bG9hZC5ub2RlSWQubGVuZ3RoIC0gMSkuc3BsaXQoJy8nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdG9yZS5fY29tbWl0dGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuc2V0KHN0b3JlLl92bS4kZGF0YS4kJHN0YXRlLCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuX2NvbW1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogVlVFWF9NVVRBVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdWdWV4IE11dGF0aW9ucycsXG4gICAgICAgICAgICAgICAgY29sb3I6IExJTUVfNTAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVMYXllcih7XG4gICAgICAgICAgICAgICAgaWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXggQWN0aW9ucycsXG4gICAgICAgICAgICAgICAgY29sb3I6IExJTUVfNTAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBob29rLm9uKCd2dWV4Om11dGF0aW9uJywgKG11dGF0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yU3RhdGUoVlVFWF9JTlNQRUNUT1JfSUQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24ucGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBtdXRhdGlvbi5wYXlsb2FkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhLnN0YXRlID0gKDAsIGNsb25lX2RlZXBfMS5kZWZhdWx0KShzdGF0ZSk7XG4gICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX01VVEFUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbXV0YXRpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGxlZ2FjeVNpbmdsZUFjdGlvblN1YihhY3Rpb24sIHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJJZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX2EgPSBzdG9yZS5zdWJzY3JpYmVBY3Rpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHN0b3JlLCBhcGkuZ2V0U2V0dGluZ3MoKS5sZWdhY3lBY3Rpb25zXG4gICAgICAgICAgICAgICAgPyBsZWdhY3lTaW5nbGVBY3Rpb25TdWJcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlOiAoYWN0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uX2lkID0gYWN0aW9uSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5fdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJJZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGFjdGlvbi5fdGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFjdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cElkOiBhY3Rpb24uX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyOiAoYWN0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gYWN0aW9uLl90aW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5kdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkdXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGAke2R1cmF0aW9ufW1zYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ0FjdGlvbiBkdXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSwgeyBwcmVwZW5kOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSW5zcGVjdCBnZXR0ZXJzIG9uIG11dGF0aW9uc1xuICAgICAgICAgICAgYXBpLm9uLmluc3BlY3RUaW1lbGluZUV2ZW50KHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmxheWVySWQgPT09IFZVRVhfTVVUQVRJT05TX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldHRlcktleXMgPSBPYmplY3Qua2V5cyhzdG9yZS5nZXR0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldHRlcktleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2bSA9IG5ldyBWdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRzdGF0ZTogcGF5bG9hZC5kYXRhLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHN0b3JlLl92bS4kb3B0aW9ucy5jb21wdXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWbSA9IHN0b3JlLl92bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLl92bSA9IHZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJlZSA9IHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlKHN0b3JlLmdldHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5kYXRhLmdldHRlcnMgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHRyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuX3ZtID0gb3JpZ2luYWxWbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZtLiRkZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHNldHVwUGx1Z2luO1xuLyoqXG4gKiBFeHRyYWN0ZWQgZnJvbSB0YWlsd2luZCBwYWxldHRlXG4gKi9cbmNvbnN0IEJMVUVfNjAwID0gMHgyNTYzZWI7XG5jb25zdCBMSU1FXzUwMCA9IDB4ODRjYzE2O1xuY29uc3QgQ1lBTl80MDAgPSAweDIyZDNlZTtcbmNvbnN0IE9SQU5HRV80MDAgPSAweGZiOTIzYztcbmNvbnN0IFdISVRFID0gMHhmZmZmZmY7XG5jb25zdCBEQVJLID0gMHg2NjY2NjY7XG5mdW5jdGlvbiBmb3JtYXRSb3V0ZU5vZGUocm91dGVyLCByb3V0ZSwgcGFyZW50UGF0aCwgZmlsdGVyKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgICBpZDogcGFyZW50UGF0aCArIHJvdXRlLnBhdGgsXG4gICAgICAgIGxhYmVsOiByb3V0ZS5wYXRoLFxuICAgICAgICBjaGlsZHJlbjogKF9hID0gcm91dGUuY2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoY2hpbGQgPT4gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgY2hpbGQsIHJvdXRlLnBhdGgsIGZpbHRlcikpLmZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgdGFnczogW10sXG4gICAgfTtcbiAgICBpZiAoZmlsdGVyICYmICFub2RlLmlkLmluY2x1ZGVzKGZpbHRlcikgJiYgISgoX2IgPSBub2RlLmNoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubGVuZ3RoKSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKHJvdXRlLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogU3RyaW5nKHJvdXRlLm5hbWUpLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDWUFOXzQwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5hbGlhcyAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYWxpYXMnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBPUkFOR0VfNDAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudFBhdGggPSByb3V0ZXIuY3VycmVudFJvdXRlLm1hdGNoZWQucmVkdWNlKChwLCBtKSA9PiBwICsgbS5wYXRoLCAnJyk7XG4gICAgaWYgKG5vZGUuaWQgPT09IGN1cnJlbnRQYXRoKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0aXZlJyxcbiAgICAgICAgICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IEJMVUVfNjAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnJlZGlyZWN0KSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAncmVkaXJlY3Q6ICcgK1xuICAgICAgICAgICAgICAgICh0eXBlb2Ygcm91dGUucmVkaXJlY3QgPT09ICdzdHJpbmcnID8gcm91dGUucmVkaXJlY3QgOiAnT2JqZWN0JyksXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBEQVJLLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiBmb3JtYXRSb3V0ZURhdGEocm91dGUpIHtcbiAgICBjb25zdCBkYXRhID0gW107XG4gICAgZGF0YS5wdXNoKHsga2V5OiAncGF0aCcsIHZhbHVlOiByb3V0ZS5wYXRoIH0pO1xuICAgIGlmIChyb3V0ZS5yZWRpcmVjdCkge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdyZWRpcmVjdCcsIHZhbHVlOiByb3V0ZS5yZWRpcmVjdCB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLmFsaWFzKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ2FsaWFzJywgdmFsdWU6IHJvdXRlLmFsaWFzIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUucHJvcHMpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAncHJvcHMnLCB2YWx1ZTogcm91dGUucHJvcHMgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5uYW1lICYmIHJvdXRlLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICduYW1lJywgdmFsdWU6IHJvdXRlLm5hbWUgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5jb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0ge307XG4gICAgICAgIC8vIGlmIChyb3V0ZS5jb21wb25lbnQuX19maWxlKSB7XG4gICAgICAgIC8vICAgY29tcG9uZW50LmZpbGUgPSByb3V0ZS5jb21wb25lbnQuX19maWxlXG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKHJvdXRlLmNvbXBvbmVudC50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgY29tcG9uZW50LnRlbXBsYXRlID0gcm91dGUuY29tcG9uZW50LnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZS5jb21wb25lbnQucHJvcHMpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyA9IHJvdXRlLmNvbXBvbmVudC5wcm9wcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoISgwLCBzaGFyZWRfdXRpbHNfMS5pc0VtcHR5T2JqZWN0KShjb21wb25lbnQpKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdjb21wb25lbnQnLCB2YWx1ZTogY29tcG9uZW50IH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gZ2V0UGF0aElkKHJvdXRlTWF0Y2hlcikge1xuICAgIGxldCBwYXRoID0gcm91dGVNYXRjaGVyLnBhdGg7XG4gICAgaWYgKHJvdXRlTWF0Y2hlci5wYXJlbnQpIHtcbiAgICAgICAgcGF0aCA9IGdldFBhdGhJZChyb3V0ZU1hdGNoZXIucGFyZW50KSArIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufVxuY29uc3QgVEFHX05BTUVTUEFDRUQgPSB7XG4gICAgbGFiZWw6ICduYW1lc3BhY2VkJyxcbiAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgIGJhY2tncm91bmRDb2xvcjogREFSSyxcbn07XG5jb25zdCBWVUVYX1JPT1RfUEFUSCA9ICdfX3ZkdF9yb290JztcbmNvbnN0IFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SID0gJ1t2ZHRdJztcbmNvbnN0IFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SX1JFRyA9IC9cXFt2ZHRcXF0vZztcbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShtb2R1bGUsIG1vZHVsZU5hbWUsIHBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGF0aCAhPT0gbnVsbCAmJiBwYXRoICE9PSB2b2lkIDAgPyBwYXRoIDogVlVFWF9ST09UX1BBVEgsXG4gICAgICAgIC8vIGFsbCBtb2R1bGVzIGVuZCB3aXRoIGEgYC9gLCB3ZSB3YW50IHRoZSBsYXN0IHNlZ21lbnQgb25seVxuICAgICAgICAvLyBjYXJ0LyAtPiBjYXJ0XG4gICAgICAgIC8vIG5lc3RlZC9jYXJ0LyAtPiBjYXJ0XG4gICAgICAgIGxhYmVsOiBtb2R1bGVOYW1lLFxuICAgICAgICB0YWdzOiBtb2R1bGUubmFtZXNwYWNlZCA/IFtUQUdfTkFNRVNQQUNFRF0gOiBbXSxcbiAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKG1vZHVsZS5fY2hpbGRyZW4pLm1hcCgoa2V5KSA9PiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUobW9kdWxlLl9jaGlsZHJlbltrZXldLCBrZXksIGAke3BhdGh9JHtrZXl9JHtWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUn1gKSksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5TdG9yZUZvckluc3BlY3RvclRyZWUocmVzdWx0LCBtb2R1bGUsIGZpbHRlciwgcGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKGZpbHRlcikpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgaWQ6IHBhdGggfHwgVlVFWF9ST09UX1BBVEgsXG4gICAgICAgICAgICBsYWJlbDogcGF0aC5lbmRzV2l0aChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikgPyBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gMSkgOiBwYXRoIHx8ICdSb290JyxcbiAgICAgICAgICAgIHRhZ3M6IG1vZHVsZS5uYW1lc3BhY2VkID8gW1RBR19OQU1FU1BBQ0VEXSA6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMobW9kdWxlLl9jaGlsZHJlbikuZm9yRWFjaChtb2R1bGVOYW1lID0+IHtcbiAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShyZXN1bHQsIG1vZHVsZS5fY2hpbGRyZW5bbW9kdWxlTmFtZV0sIGZpbHRlciwgcGF0aCArIG1vZHVsZU5hbWUgKyBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleHRyYWN0TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aCAmJiBwYXRoICE9PSBWVUVYX1JPT1RfUEFUSCA/IHBhdGguc3BsaXQoVlVFWF9NT0RVTEVfUEFUSF9TRVBBUkFUT1IpLnNsaWNlKC0yLCAtMSlbMF0gOiAnUm9vdCc7XG59XG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclN0YXRlKG1vZHVsZSwgZ2V0dGVycywgcGF0aCkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBzdG9yZVN0YXRlID0ge1xuICAgICAgICBzdGF0ZTogT2JqZWN0LmtleXMobW9kdWxlLmNvbnRleHQuc3RhdGUpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbW9kdWxlLmNvbnRleHQuc3RhdGVba2V5XSxcbiAgICAgICAgfSkpLFxuICAgIH07XG4gICAgY29uc3QgcGF0aFdpdGhTbGFzaGVzID0gcGF0aC5yZXBsYWNlKFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SX1JFRywgJy8nKTtcbiAgICBnZXR0ZXJzID0gIW1vZHVsZS5uYW1lc3BhY2VkIHx8IHBhdGggPT09IFZVRVhfUk9PVF9QQVRIID8gbW9kdWxlLmNvbnRleHQuZ2V0dGVycyA6IGdldHRlcnNbcGF0aFdpdGhTbGFzaGVzXTtcbiAgICBsZXQgZ2V0dGVyc0tleXMgPSBPYmplY3Qua2V5cyhnZXR0ZXJzKTtcbiAgICBjb25zdCBzaG91bGRQaWNrR2V0dGVycyA9ICFtb2R1bGUubmFtZXNwYWNlZCAmJiBwYXRoICE9PSBWVUVYX1JPT1RfUEFUSDtcbiAgICBpZiAoc2hvdWxkUGlja0dldHRlcnMpIHtcbiAgICAgICAgLy8gT25seSBwaWNrIHRoZSBnZXR0ZXJzIGRlZmluZWQgaW4gdGhlIG5vbi1uYW1lc3BhY2VkIG1vZHVsZVxuICAgICAgICBjb25zdCBkZWZpbmVkR2V0dGVyc0tleXMgPSBPYmplY3Qua2V5cygoX2EgPSBtb2R1bGUuX3Jhd01vZHVsZS5nZXR0ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSk7XG4gICAgICAgIGdldHRlcnNLZXlzID0gZ2V0dGVyc0tleXMuZmlsdGVyKGtleSA9PiBkZWZpbmVkR2V0dGVyc0tleXMuaW5jbHVkZXMoa2V5KSk7XG4gICAgfVxuICAgIGlmIChnZXR0ZXJzS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbGV0IG1vZHVsZUdldHRlcnM7XG4gICAgICAgIGlmIChzaG91bGRQaWNrR2V0dGVycykge1xuICAgICAgICAgICAgLy8gT25seSBwaWNrIHRoZSBnZXR0ZXJzIGRlZmluZWQgaW4gdGhlIG5vbi1uYW1lc3BhY2VkIG1vZHVsZVxuICAgICAgICAgICAgbW9kdWxlR2V0dGVycyA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZ2V0dGVyc0tleXMpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVHZXR0ZXJzW2tleV0gPSBnZXR0ZXJzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtb2R1bGVHZXR0ZXJzID0gZ2V0dGVycztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmVlID0gdHJhbnNmb3JtUGF0aHNUb09iamVjdFRyZWUobW9kdWxlR2V0dGVycyk7XG4gICAgICAgIHN0b3JlU3RhdGUuZ2V0dGVycyA9IE9iamVjdC5rZXlzKHRyZWUpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAga2V5OiBrZXkuZW5kc1dpdGgoJy8nKSA/IGV4dHJhY3ROYW1lRnJvbVBhdGgoa2V5KSA6IGtleSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBjYW5UaHJvdygoKSA9PiB0cmVlW2tleV0pLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBzdG9yZVN0YXRlO1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aHNUb09iamVjdFRyZWUoZ2V0dGVycykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGdldHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGtleS5zcGxpdCgnLycpO1xuICAgICAgICBpZiAocGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgbGVhZktleSA9IHBhdGgucG9wKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3BdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnTW9kdWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFtwXS5fY3VzdG9tLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0W2xlYWZLZXldID0gY2FuVGhyb3coKCkgPT4gZ2V0dGVyc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gY2FuVGhyb3coKCkgPT4gZ2V0dGVyc1trZXldKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRTdG9yZU1vZHVsZShtb2R1bGVNYXAsIHBhdGgpIHtcbiAgICBjb25zdCBuYW1lcyA9IHBhdGguc3BsaXQoVlVFWF9NT0RVTEVfUEFUSF9TRVBBUkFUT1IpLmZpbHRlcigobikgPT4gbik7XG4gICAgcmV0dXJuIG5hbWVzLnJlZHVjZSgobW9kdWxlLCBtb2R1bGVOYW1lLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbW9kdWxlW21vZHVsZU5hbWUgPT09IFZVRVhfUk9PVF9QQVRIID8gJ3Jvb3QnIDogbW9kdWxlTmFtZV07XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtb2R1bGUgXCIke21vZHVsZU5hbWV9XCIgZm9yIHBhdGggXCIke3BhdGh9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkgPT09IG5hbWVzLmxlbmd0aCAtIDEgPyBjaGlsZCA6IGNoaWxkLl9jaGlsZHJlbjtcbiAgICB9LCBwYXRoID09PSBWVUVYX1JPT1RfUEFUSCA/IG1vZHVsZU1hcCA6IG1vZHVsZU1hcC5yb290Ll9jaGlsZHJlbik7XG59XG5mdW5jdGlvbiBjYW5UaHJvdyhjYikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjYigpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wbHVnaW4uanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7725\n");
|
|
319
319
|
|
|
320
320
|
/***/ }),
|
|
321
321
|
|
|
@@ -347,7 +347,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
347
347
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
348
348
|
|
|
349
349
|
"use strict";
|
|
350
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.ComponentWalker = void 0;\n\nconst util_1 = __webpack_require__(33756);\n\nconst filter_1 = __webpack_require__(72396);\n\nconst el_1 = __webpack_require__(88722);\n\nclass ComponentWalker {\n constructor(maxDepth, filter, api, ctx) {\n this.ctx = ctx;\n this.api = api;\n this.maxDepth = maxDepth;\n this.componentFilter = new filter_1.ComponentFilter(filter);\n }\n\n getComponentTree(instance) {\n this.captureIds = new Map();\n return this.findQualifiedChildren(instance, 0);\n }\n\n getComponentParents(instance) {\n this.captureIds = new Map();\n const parents = [];\n this.captureId(instance);\n let parent = instance;\n\n while (parent = parent.parent) {\n this.captureId(parent);\n parents.push(parent);\n }\n\n return parents;\n }\n /**\n * Find qualified children from a single instance.\n * If the instance itself is qualified, just return itself.\n * This is ok because [].concat works in both cases.\n *\n * @param {Vue|Vnode} instance\n * @return {Vue|Array}\n */\n\n\n async findQualifiedChildren(instance, depth) {\n var _a;\n\n if (this.componentFilter.isQualified(instance) && !((_a = instance.type.devtools) === null || _a === void 0 ? void 0 : _a.hide)) {\n return [await this.capture(instance, null, depth)];\n } else if (instance.subTree) {\n // TODO functional components\n return this.findQualifiedChildrenFromList(this.getInternalInstanceChildren(instance.subTree), depth);\n } else {\n return [];\n }\n }\n /**\n * Iterate through an array of instances and flatten it into\n * an array of qualified instances. This is a depth-first\n * traversal - e.g. if an instance is not matched, we will\n * recursively go deeper until a qualified child is found.\n *\n * @param {Array} instances\n * @return {Array}\n */\n\n\n async findQualifiedChildrenFromList(instances, depth) {\n instances = instances.filter(child => {\n var _a;\n\n return !(0, util_1.isBeingDestroyed)(child) && !((_a = child.type.devtools) === null || _a === void 0 ? void 0 : _a.hide);\n });\n\n if (!this.componentFilter.filter) {\n return Promise.all(instances.map((child, index, list) => this.capture(child, list, depth)));\n } else {\n return Array.prototype.concat.apply([], await Promise.all(instances.map(i => this.findQualifiedChildren(i, depth))));\n }\n }\n /**\n * Get children from a component instance.\n */\n\n\n getInternalInstanceChildren(subTree, suspense = null) {\n const list = [];\n\n if (subTree.component) {\n !suspense ? list.push(subTree.component) : list.push({ ...subTree.component,\n suspense\n });\n } else if (subTree.suspense) {\n const suspenseKey = !subTree.suspense.isInFallback ? 'suspense default' : 'suspense fallback';\n list.push(...this.getInternalInstanceChildren(subTree.suspense.activeBranch, { ...subTree.suspense,\n suspenseKey\n }));\n } else if (Array.isArray(subTree.children)) {\n subTree.children.forEach(childSubTree => {\n if (childSubTree.component) {\n !suspense ? list.push(childSubTree.component) : list.push({ ...childSubTree.component,\n suspense\n });\n } else {\n list.push(...this.getInternalInstanceChildren(childSubTree, suspense));\n }\n });\n }\n\n return list.filter(child => {\n var _a;\n\n return !(0, util_1.isBeingDestroyed)(child) && !((_a = child.type.devtools) === null || _a === void 0 ? void 0 : _a.hide);\n });\n }\n\n captureId(instance) {\n if (!instance) return null; // instance.uid is not reliable in devtools as there\n // may be 2 roots with same uid which causes unexpected\n // behaviour\n\n const id = instance.__VUE_DEVTOOLS_UID__ != null ? instance.__VUE_DEVTOOLS_UID__ : (0, util_1.getUniqueComponentId)(instance, this.ctx);\n instance.__VUE_DEVTOOLS_UID__ = id; // Dedupe\n\n if (this.captureIds.has(id)) {\n return;\n } else {\n this.captureIds.set(id, undefined);\n }\n\n this.mark(instance);\n return id;\n }\n /**\n * Capture the meta information of an instance. (recursive)\n *\n * @param {Vue} instance\n * @return {Object}\n */\n\n\n async capture(instance, list, depth) {\n var _a;\n\n const id = this.captureId(instance);\n const name = (0, util_1.getInstanceName)(instance);\n const children = this.getInternalInstanceChildren(instance.subTree).filter(child => !(0, util_1.isBeingDestroyed)(child));\n const parents = this.getComponentParents(instance) || [];\n const inactive = !!instance.isDeactivated || parents.some(parent => parent.isDeactivated);\n const treeNode = {\n uid: instance.uid,\n id,\n name,\n renderKey: (0, util_1.getRenderKey)(instance.vnode ? instance.vnode.key : null),\n inactive,\n hasChildren: !!children.length,\n children: [],\n isFragment: (0, util_1.isFragment)(instance),\n tags: []\n }; // capture children\n\n if (depth < this.maxDepth || instance.type.__isKeepAlive || parents.some(parent => parent.type.__isKeepAlive)) {\n treeNode.children = await Promise.all(children.map((child, index, list) => this.capture(child, list, depth + 1)).filter(Boolean));\n } // keep-alive\n\n\n if (instance.type.__isKeepAlive && instance.__v_cache) {\n const cachedComponents = Array.from(instance.__v_cache.values()).map(vnode => vnode.component).filter(Boolean);\n const childrenIds = children.map(child => child.__VUE_DEVTOOLS_UID__);\n\n for (const cachedChild of cachedComponents) {\n if (!childrenIds.includes(cachedChild.__VUE_DEVTOOLS_UID__)) {\n const node = await this.capture({ ...cachedChild,\n isDeactivated: true\n }, null, depth + 1);\n\n if (node) {\n treeNode.children.push(node);\n }\n }\n }\n } // ensure correct ordering\n\n\n const rootElements = (0, el_1.getRootElementsFromComponentInstance)(instance);\n const firstElement = rootElements[0];\n\n if (firstElement === null || firstElement === void 0 ? void 0 : firstElement.parentElement) {\n const parentInstance = instance.parent;\n const parentRootElements = parentInstance ? (0, el_1.getRootElementsFromComponentInstance)(parentInstance) : [];\n let el = firstElement;\n const indexList = [];\n\n do {\n indexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n el = el.parentElement;\n } while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\n treeNode.domOrder = indexList.reverse();\n } else {\n treeNode.domOrder = [-1];\n }\n\n if ((_a = instance.suspense) === null || _a === void 0 ? void 0 : _a.suspenseKey) {\n treeNode.tags.push({\n label: instance.suspense.suspenseKey,\n backgroundColor: 0xe492e4,\n textColor: 0xffffff\n }); // update instanceMap\n\n this.mark(instance, true);\n }\n\n return this.api.visitComponentTree(instance, treeNode, this.componentFilter.filter, this.ctx.currentAppRecord.options.app);\n }\n /**\n * Mark an instance as captured and store it in the instance map.\n *\n * @param {Vue} instance\n */\n\n\n mark(instance, force = false) {\n const instanceMap = this.ctx.currentAppRecord.instanceMap;\n\n if (force || !instanceMap.has(instance.__VUE_DEVTOOLS_UID__)) {\n instanceMap.set(instance.__VUE_DEVTOOLS_UID__, instance);\n }\n }\n\n}\n\nexports.ComponentWalker = ComponentWalker;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkzOTkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUdBOztBQUVBLE1BQWEsZUFBYixDQUE0QjtBQVMxQixjQUFhLFFBQWIsRUFBK0IsTUFBL0IsRUFBK0MsR0FBL0MsRUFBaUUsR0FBakUsRUFBb0Y7QUFDbEYsU0FBSyxHQUFMLEdBQVcsR0FBWDtBQUNBLFNBQUssR0FBTCxHQUFXLEdBQVg7QUFDQSxTQUFLLFFBQUwsR0FBZ0IsUUFBaEI7QUFDQSxTQUFLLGVBQUwsR0FBdUIsSUFBSSx3QkFBSixDQUFvQixNQUFwQixDQUF2QjtBQUNEOztBQUVELGtCQUFnQixDQUFFLFFBQUYsRUFBZTtBQUM3QixTQUFLLFVBQUwsR0FBa0IsSUFBSSxHQUFKLEVBQWxCO0FBQ0EsV0FBTyxLQUFLLHFCQUFMLENBQTJCLFFBQTNCLEVBQXFDLENBQXJDLENBQVA7QUFDRDs7QUFFRCxxQkFBbUIsQ0FBRSxRQUFGLEVBQWU7QUFDaEMsU0FBSyxVQUFMLEdBQWtCLElBQUksR0FBSixFQUFsQjtBQUNBLFVBQU0sT0FBTyxHQUFHLEVBQWhCO0FBQ0EsU0FBSyxTQUFMLENBQWUsUUFBZjtBQUNBLFFBQUksTUFBTSxHQUFHLFFBQWI7O0FBQ0EsV0FBUSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQXhCLEVBQWlDO0FBQy9CLFdBQUssU0FBTCxDQUFlLE1BQWY7QUFDQSxhQUFPLENBQUMsSUFBUixDQUFhLE1BQWI7QUFDRDs7QUFDRCxXQUFPLE9BQVA7QUFDRDtBQUVEOzs7Ozs7O0FBT0c7OztBQUNnQyxRQUFyQixxQkFBcUIsQ0FBRSxRQUFGLEVBQWlCLEtBQWpCLEVBQThCOzs7QUFDL0QsUUFBSSxLQUFLLGVBQUwsQ0FBcUIsV0FBckIsQ0FBaUMsUUFBakMsS0FBOEMsRUFBQyxjQUFRLENBQUMsSUFBVCxDQUFjLFFBQWQsTUFBc0IsSUFBdEIsSUFBc0IsYUFBdEIsR0FBc0IsTUFBdEIsR0FBc0IsR0FBRSxJQUF6QixDQUFsRCxFQUFpRjtBQUMvRSxhQUFPLENBQUMsTUFBTSxLQUFLLE9BQUwsQ0FBYSxRQUFiLEVBQXVCLElBQXZCLEVBQTZCLEtBQTdCLENBQVAsQ0FBUDtBQUNELEtBRkQsTUFFTyxJQUFJLFFBQVEsQ0FBQyxPQUFiLEVBQXNCO0FBQzNCO0FBQ0EsYUFBTyxLQUFLLDZCQUFMLENBQW1DLEtBQUssMkJBQUwsQ0FBaUMsUUFBUSxDQUFDLE9BQTFDLENBQW5DLEVBQXVGLEtBQXZGLENBQVA7QUFDRCxLQUhNLE1BR0E7QUFDTCxhQUFPLEVBQVA7QUFDRDtBQUNGO0FBRUQ7Ozs7Ozs7O0FBUUc7OztBQUN3QyxRQUE3Qiw2QkFBNkIsQ0FBRSxTQUFGLEVBQWEsS0FBYixFQUEwQjtBQUNuRSxhQUFTLEdBQUcsU0FBUyxDQUNsQixNQURTLENBQ0YsS0FBSyxJQUFHO0FBQUE7O0FBQUMsY0FBQyw2QkFBaUIsS0FBakIsQ0FBRCxJQUE0QixFQUFDLFdBQUssQ0FBQyxJQUFOLENBQVcsUUFBWCxNQUFtQixJQUFuQixJQUFtQixhQUFuQixHQUFtQixNQUFuQixHQUFtQixHQUFFLElBQXRCLENBQTVCO0FBQXNELEtBRDdELENBQVo7O0FBRUEsUUFBSSxDQUFDLEtBQUssZUFBTCxDQUFxQixNQUExQixFQUFrQztBQUNoQyxhQUFPLE9BQU8sQ0FBQyxHQUFSLENBQVksU0FBUyxDQUFDLEdBQVYsQ0FBYyxDQUFDLEtBQUQsRUFBUSxLQUFSLEVBQWUsSUFBZixLQUF3QixLQUFLLE9BQUwsQ0FBYSxLQUFiLEVBQW9CLElBQXBCLEVBQTBCLEtBQTFCLENBQXRDLENBQVosQ0FBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU8sS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsTUFBaEIsQ0FBdUIsS0FBdkIsQ0FBNkIsRUFBN0IsRUFBaUMsTUFBTSxPQUFPLENBQUMsR0FBUixDQUFZLFNBQVMsQ0FBQyxHQUFWLENBQWMsQ0FBQyxJQUFJLEtBQUsscUJBQUwsQ0FBMkIsQ0FBM0IsRUFBOEIsS0FBOUIsQ0FBbkIsQ0FBWixDQUF2QyxDQUFQO0FBQ0Q7QUFDRjtBQUVEOztBQUVHOzs7QUFDSyw2QkFBMkIsQ0FBRSxPQUFGLEVBQVcsUUFBUSxHQUFHLElBQXRCLEVBQTBCO0FBQzNELFVBQU0sSUFBSSxHQUFHLEVBQWI7O0FBQ0EsUUFBSSxPQUFPLENBQUMsU0FBWixFQUF1QjtBQUNyQixPQUFDLFFBQUQsR0FBWSxJQUFJLENBQUMsSUFBTCxDQUFVLE9BQU8sQ0FBQyxTQUFsQixDQUFaLEdBQTJDLElBQUksQ0FBQyxJQUFMLENBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFiO0FBQXdCO0FBQXhCLE9BQVYsQ0FBM0M7QUFDRCxLQUZELE1BRU8sSUFBSSxPQUFPLENBQUMsUUFBWixFQUFzQjtBQUMzQixZQUFNLFdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFSLENBQWlCLFlBQWxCLEdBQWlDLGtCQUFqQyxHQUFzRCxtQkFBMUU7QUFDQSxVQUFJLENBQUMsSUFBTCxDQUFVLEdBQUcsS0FBSywyQkFBTCxDQUFpQyxPQUFPLENBQUMsUUFBUixDQUFpQixZQUFsRCxFQUFnRSxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQWI7QUFBdUI7QUFBdkIsT0FBaEUsQ0FBYjtBQUNELEtBSE0sTUFHQSxJQUFJLEtBQUssQ0FBQyxPQUFOLENBQWMsT0FBTyxDQUFDLFFBQXRCLENBQUosRUFBcUM7QUFDMUMsYUFBTyxDQUFDLFFBQVIsQ0FBaUIsT0FBakIsQ0FBeUIsWUFBWSxJQUFHO0FBQ3RDLFlBQUksWUFBWSxDQUFDLFNBQWpCLEVBQTRCO0FBQzFCLFdBQUMsUUFBRCxHQUFZLElBQUksQ0FBQyxJQUFMLENBQVUsWUFBWSxDQUFDLFNBQXZCLENBQVosR0FBZ0QsSUFBSSxDQUFDLElBQUwsQ0FBVSxFQUFFLEdBQUcsWUFBWSxDQUFDLFNBQWxCO0FBQTZCO0FBQTdCLFdBQVYsQ0FBaEQ7QUFDRCxTQUZELE1BRU87QUFDTCxjQUFJLENBQUMsSUFBTCxDQUFVLEdBQUcsS0FBSywyQkFBTCxDQUFpQyxZQUFqQyxFQUErQyxRQUEvQyxDQUFiO0FBQ0Q7QUFDRixPQU5EO0FBT0Q7O0FBQ0QsV0FBTyxJQUFJLENBQUMsTUFBTCxDQUFZLEtBQUssSUFBRztBQUFBOztBQUFDLGNBQUMsNkJBQWlCLEtBQWpCLENBQUQsSUFBNEIsRUFBQyxXQUFLLENBQUMsSUFBTixDQUFXLFFBQVgsTUFBbUIsSUFBbkIsSUFBbUIsYUFBbkIsR0FBbUIsTUFBbkIsR0FBbUIsR0FBRSxJQUF0QixDQUE1QjtBQUFzRCxLQUEzRSxDQUFQO0FBQ0Q7O0FBRU8sV0FBUyxDQUFFLFFBQUYsRUFBVTtBQUN6QixRQUFJLENBQUMsUUFBTCxFQUFlLE9BQU8sSUFBUCxDQURVLENBR3pCO0FBQ0E7QUFDQTs7QUFDQSxVQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsb0JBQVQsSUFBaUMsSUFBakMsR0FBd0MsUUFBUSxDQUFDLG9CQUFqRCxHQUF3RSxpQ0FBcUIsUUFBckIsRUFBK0IsS0FBSyxHQUFwQyxDQUFuRjtBQUNBLFlBQVEsQ0FBQyxvQkFBVCxHQUFnQyxFQUFoQyxDQVB5QixDQVN6Qjs7QUFDQSxRQUFJLEtBQUssVUFBTCxDQUFnQixHQUFoQixDQUFvQixFQUFwQixDQUFKLEVBQTZCO0FBQzNCO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsV0FBSyxVQUFMLENBQWdCLEdBQWhCLENBQW9CLEVBQXBCLEVBQXdCLFNBQXhCO0FBQ0Q7O0FBRUQsU0FBSyxJQUFMLENBQVUsUUFBVjtBQUVBLFdBQU8sRUFBUDtBQUNEO0FBRUQ7Ozs7O0FBS0c7OztBQUNrQixRQUFQLE9BQU8sQ0FBRSxRQUFGLEVBQWlCLElBQWpCLEVBQThCLEtBQTlCLEVBQTJDOzs7QUFDOUQsVUFBTSxFQUFFLEdBQUcsS0FBSyxTQUFMLENBQWUsUUFBZixDQUFYO0FBRUEsVUFBTSxJQUFJLEdBQUcsNEJBQWdCLFFBQWhCLENBQWI7QUFFQSxVQUFNLFFBQVEsR0FBRyxLQUFLLDJCQUFMLENBQWlDLFFBQVEsQ0FBQyxPQUExQyxFQUNkLE1BRGMsQ0FDUCxLQUFLLElBQUksQ0FBQyw2QkFBaUIsS0FBakIsQ0FESCxDQUFqQjtBQUdBLFVBQU0sT0FBTyxHQUFHLEtBQUssbUJBQUwsQ0FBeUIsUUFBekIsS0FBc0MsRUFBdEQ7QUFFQSxVQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQVgsSUFBNEIsT0FBTyxDQUFDLElBQVIsQ0FBYSxNQUFNLElBQUksTUFBTSxDQUFDLGFBQTlCLENBQTdDO0FBRUEsVUFBTSxRQUFRLEdBQXNCO0FBQ2xDLFNBQUcsRUFBRSxRQUFRLENBQUMsR0FEb0I7QUFFbEMsUUFGa0M7QUFHbEMsVUFIa0M7QUFJbEMsZUFBUyxFQUFFLHlCQUFhLFFBQVEsQ0FBQyxLQUFULEdBQWlCLFFBQVEsQ0FBQyxLQUFULENBQWUsR0FBaEMsR0FBc0MsSUFBbkQsQ0FKdUI7QUFLbEMsY0FMa0M7QUFNbEMsaUJBQVcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BTlU7QUFPbEMsY0FBUSxFQUFFLEVBUHdCO0FBUWxDLGdCQUFVLEVBQUUsdUJBQVcsUUFBWCxDQVJzQjtBQVNsQyxVQUFJLEVBQUU7QUFUNEIsS0FBcEMsQ0FaOEQsQ0F3QjlEOztBQUNBLFFBQUksS0FBSyxHQUFHLEtBQUssUUFBYixJQUF5QixRQUFRLENBQUMsSUFBVCxDQUFjLGFBQXZDLElBQXdELE9BQU8sQ0FBQyxJQUFSLENBQWEsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFQLENBQVksYUFBbkMsQ0FBNUQsRUFBK0c7QUFDN0csY0FBUSxDQUFDLFFBQVQsR0FBb0IsTUFBTSxPQUFPLENBQUMsR0FBUixDQUFZLFFBQVEsQ0FDM0MsR0FEbUMsQ0FDL0IsQ0FBQyxLQUFELEVBQVEsS0FBUixFQUFlLElBQWYsS0FBd0IsS0FBSyxPQUFMLENBQWEsS0FBYixFQUFvQixJQUFwQixFQUEwQixLQUFLLEdBQUcsQ0FBbEMsQ0FETyxFQUVuQyxNQUZtQyxDQUU1QixPQUY0QixDQUFaLENBQTFCO0FBR0QsS0E3QjZELENBK0I5RDs7O0FBQ0EsUUFBSSxRQUFRLENBQUMsSUFBVCxDQUFjLGFBQWQsSUFBK0IsUUFBUSxDQUFDLFNBQTVDLEVBQXVEO0FBQ3JELFlBQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQU4sQ0FBVyxRQUFRLENBQUMsU0FBVCxDQUFtQixNQUFuQixFQUFYLEVBQXdDLEdBQXhDLENBQTZDLEtBQUQsSUFBZ0IsS0FBSyxDQUFDLFNBQWxFLEVBQTZFLE1BQTdFLENBQW9GLE9BQXBGLENBQXpCO0FBQ0EsWUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQVQsQ0FBYSxLQUFLLElBQUksS0FBSyxDQUFDLG9CQUE1QixDQUFwQjs7QUFDQSxXQUFLLE1BQU0sV0FBWCxJQUEwQixnQkFBMUIsRUFBNEM7QUFDMUMsWUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFaLENBQXFCLFdBQVcsQ0FBQyxvQkFBakMsQ0FBTCxFQUE2RDtBQUMzRCxnQkFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLE9BQUwsQ0FBYSxFQUFFLEdBQUcsV0FBTDtBQUFrQix5QkFBYSxFQUFFO0FBQWpDLFdBQWIsRUFBc0QsSUFBdEQsRUFBNEQsS0FBSyxHQUFHLENBQXBFLENBQW5COztBQUNBLGNBQUksSUFBSixFQUFVO0FBQ1Isb0JBQVEsQ0FBQyxRQUFULENBQWtCLElBQWxCLENBQXVCLElBQXZCO0FBQ0Q7QUFDRjtBQUNGO0FBQ0YsS0EzQzZELENBNkM5RDs7O0FBQ0EsVUFBTSxZQUFZLEdBQUcsK0NBQXFDLFFBQXJDLENBQXJCO0FBQ0EsVUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLENBQUQsQ0FBakM7O0FBQ0EsUUFBSSxZQUFZLFNBQVosZ0JBQVksV0FBWixHQUFZLE1BQVosZUFBWSxDQUFFLGFBQWxCLEVBQWlDO0FBQy9CLFlBQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxNQUFoQztBQUNBLFlBQU0sa0JBQWtCLEdBQUcsY0FBYyxHQUFHLCtDQUFxQyxjQUFyQyxDQUFILEdBQTBELEVBQW5HO0FBQ0EsVUFBSSxFQUFFLEdBQUcsWUFBVDtBQUNBLFlBQU0sU0FBUyxHQUFHLEVBQWxCOztBQUNBLFNBQUc7QUFDRCxpQkFBUyxDQUFDLElBQVYsQ0FBZSxLQUFLLENBQUMsSUFBTixDQUFXLEVBQUUsQ0FBQyxhQUFILENBQWlCLFVBQTVCLEVBQXdDLE9BQXhDLENBQWdELEVBQWhELENBQWY7QUFDQSxVQUFFLEdBQUcsRUFBRSxDQUFDLGFBQVI7QUFDRCxPQUhELFFBR1MsRUFBRSxDQUFDLGFBQUgsSUFBb0Isa0JBQWtCLENBQUMsTUFBdkMsSUFBaUQsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFuQixDQUE0QixFQUE1QixDQUgzRDs7QUFJQSxjQUFRLENBQUMsUUFBVCxHQUFvQixTQUFTLENBQUMsT0FBVixFQUFwQjtBQUNELEtBVkQsTUFVTztBQUNMLGNBQVEsQ0FBQyxRQUFULEdBQW9CLENBQUMsQ0FBQyxDQUFGLENBQXBCO0FBQ0Q7O0FBRUQsUUFBSSxjQUFRLENBQUMsUUFBVCxNQUFpQixJQUFqQixJQUFpQixhQUFqQixHQUFpQixNQUFqQixHQUFpQixHQUFFLFdBQXZCLEVBQW9DO0FBQ2xDLGNBQVEsQ0FBQyxJQUFULENBQWMsSUFBZCxDQUFtQjtBQUNqQixhQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVQsQ0FBa0IsV0FEUjtBQUVqQix1QkFBZSxFQUFFLFFBRkE7QUFHakIsaUJBQVMsRUFBRTtBQUhNLE9BQW5CLEVBRGtDLENBTWxDOztBQUNBLFdBQUssSUFBTCxDQUFVLFFBQVYsRUFBb0IsSUFBcEI7QUFDRDs7QUFFRCxXQUFPLEtBQUssR0FBTCxDQUFTLGtCQUFULENBQTRCLFFBQTVCLEVBQXNDLFFBQXRDLEVBQWdELEtBQUssZUFBTCxDQUFxQixNQUFyRSxFQUE2RSxLQUFLLEdBQUwsQ0FBUyxnQkFBVCxDQUEwQixPQUExQixDQUFrQyxHQUEvRyxDQUFQO0FBQ0Q7QUFFRDs7OztBQUlHOzs7QUFDSyxNQUFJLENBQUUsUUFBRixFQUFZLEtBQUssR0FBRyxLQUFwQixFQUF5QjtBQUNuQyxVQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUwsQ0FBUyxnQkFBVCxDQUEwQixXQUE5Qzs7QUFDQSxRQUFJLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFaLENBQWdCLFFBQVEsQ0FBQyxvQkFBekIsQ0FBZCxFQUE4RDtBQUM1RCxpQkFBVyxDQUFDLEdBQVosQ0FBZ0IsUUFBUSxDQUFDLG9CQUF6QixFQUErQyxRQUEvQztBQUNEO0FBQ0Y7O0FBN015Qjs7QUFBNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyZWUudHM/NDA3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29tcG9uZW50V2Fsa2VyID0gdm9pZCAwO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IGZpbHRlcl8xID0gcmVxdWlyZShcIi4vZmlsdGVyXCIpO1xuY29uc3QgZWxfMSA9IHJlcXVpcmUoXCIuL2VsXCIpO1xuY2xhc3MgQ29tcG9uZW50V2Fsa2VyIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhEZXB0aCwgZmlsdGVyLCBhcGksIGN0eCkge1xuICAgICAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICAgICAgdGhpcy5hcGkgPSBhcGk7XG4gICAgICAgIHRoaXMubWF4RGVwdGggPSBtYXhEZXB0aDtcbiAgICAgICAgdGhpcy5jb21wb25lbnRGaWx0ZXIgPSBuZXcgZmlsdGVyXzEuQ29tcG9uZW50RmlsdGVyKGZpbHRlcik7XG4gICAgfVxuICAgIGdldENvbXBvbmVudFRyZWUoaW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5jYXB0dXJlSWRzID0gbmV3IE1hcCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kUXVhbGlmaWVkQ2hpbGRyZW4oaW5zdGFuY2UsIDApO1xuICAgIH1cbiAgICBnZXRDb21wb25lbnRQYXJlbnRzKGluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMuY2FwdHVyZUlkcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgICAgICB0aGlzLmNhcHR1cmVJZChpbnN0YW5jZSk7XG4gICAgICAgIGxldCBwYXJlbnQgPSBpbnN0YW5jZTtcbiAgICAgICAgd2hpbGUgKChwYXJlbnQgPSBwYXJlbnQucGFyZW50KSkge1xuICAgICAgICAgICAgdGhpcy5jYXB0dXJlSWQocGFyZW50KTtcbiAgICAgICAgICAgIHBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kIHF1YWxpZmllZCBjaGlsZHJlbiBmcm9tIGEgc2luZ2xlIGluc3RhbmNlLlxuICAgICAqIElmIHRoZSBpbnN0YW5jZSBpdHNlbGYgaXMgcXVhbGlmaWVkLCBqdXN0IHJldHVybiBpdHNlbGYuXG4gICAgICogVGhpcyBpcyBvayBiZWNhdXNlIFtdLmNvbmNhdCB3b3JrcyBpbiBib3RoIGNhc2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtWdWV8Vm5vZGV9IGluc3RhbmNlXG4gICAgICogQHJldHVybiB7VnVlfEFycmF5fVxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRRdWFsaWZpZWRDaGlsZHJlbihpbnN0YW5jZSwgZGVwdGgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRGaWx0ZXIuaXNRdWFsaWZpZWQoaW5zdGFuY2UpICYmICEoKF9hID0gaW5zdGFuY2UudHlwZS5kZXZ0b29scykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhpZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gW2F3YWl0IHRoaXMuY2FwdHVyZShpbnN0YW5jZSwgbnVsbCwgZGVwdGgpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbnN0YW5jZS5zdWJUcmVlKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZFF1YWxpZmllZENoaWxkcmVuRnJvbUxpc3QodGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oaW5zdGFuY2Uuc3ViVHJlZSksIGRlcHRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlIHRocm91Z2ggYW4gYXJyYXkgb2YgaW5zdGFuY2VzIGFuZCBmbGF0dGVuIGl0IGludG9cbiAgICAgKiBhbiBhcnJheSBvZiBxdWFsaWZpZWQgaW5zdGFuY2VzLiBUaGlzIGlzIGEgZGVwdGgtZmlyc3RcbiAgICAgKiB0cmF2ZXJzYWwgLSBlLmcuIGlmIGFuIGluc3RhbmNlIGlzIG5vdCBtYXRjaGVkLCB3ZSB3aWxsXG4gICAgICogcmVjdXJzaXZlbHkgZ28gZGVlcGVyIHVudGlsIGEgcXVhbGlmaWVkIGNoaWxkIGlzIGZvdW5kLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheX0gaW5zdGFuY2VzXG4gICAgICogQHJldHVybiB7QXJyYXl9XG4gICAgICovXG4gICAgYXN5bmMgZmluZFF1YWxpZmllZENoaWxkcmVuRnJvbUxpc3QoaW5zdGFuY2VzLCBkZXB0aCkge1xuICAgICAgICBpbnN0YW5jZXMgPSBpbnN0YW5jZXNcbiAgICAgICAgICAgIC5maWx0ZXIoY2hpbGQgPT4geyB2YXIgX2E7IHJldHVybiAhKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZCkgJiYgISgoX2EgPSBjaGlsZC50eXBlLmRldnRvb2xzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGlkZSk7IH0pO1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50RmlsdGVyLmZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGluc3RhbmNlcy5tYXAoKGNoaWxkLCBpbmRleCwgbGlzdCkgPT4gdGhpcy5jYXB0dXJlKGNoaWxkLCBsaXN0LCBkZXB0aCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhd2FpdCBQcm9taXNlLmFsbChpbnN0YW5jZXMubWFwKGkgPT4gdGhpcy5maW5kUXVhbGlmaWVkQ2hpbGRyZW4oaSwgZGVwdGgpKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBjaGlsZHJlbiBmcm9tIGEgY29tcG9uZW50IGluc3RhbmNlLlxuICAgICAqL1xuICAgIGdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihzdWJUcmVlLCBzdXNwZW5zZSA9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IFtdO1xuICAgICAgICBpZiAoc3ViVHJlZS5jb21wb25lbnQpIHtcbiAgICAgICAgICAgICFzdXNwZW5zZSA/IGxpc3QucHVzaChzdWJUcmVlLmNvbXBvbmVudCkgOiBsaXN0LnB1c2goeyAuLi5zdWJUcmVlLmNvbXBvbmVudCwgc3VzcGVuc2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3ViVHJlZS5zdXNwZW5zZSkge1xuICAgICAgICAgICAgY29uc3Qgc3VzcGVuc2VLZXkgPSAhc3ViVHJlZS5zdXNwZW5zZS5pc0luRmFsbGJhY2sgPyAnc3VzcGVuc2UgZGVmYXVsdCcgOiAnc3VzcGVuc2UgZmFsbGJhY2snO1xuICAgICAgICAgICAgbGlzdC5wdXNoKC4uLnRoaXMuZ2V0SW50ZXJuYWxJbnN0YW5jZUNoaWxkcmVuKHN1YlRyZWUuc3VzcGVuc2UuYWN0aXZlQnJhbmNoLCB7IC4uLnN1YlRyZWUuc3VzcGVuc2UsIHN1c3BlbnNlS2V5IH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHN1YlRyZWUuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBzdWJUcmVlLmNoaWxkcmVuLmZvckVhY2goY2hpbGRTdWJUcmVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRTdWJUcmVlLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAhc3VzcGVuc2UgPyBsaXN0LnB1c2goY2hpbGRTdWJUcmVlLmNvbXBvbmVudCkgOiBsaXN0LnB1c2goeyAuLi5jaGlsZFN1YlRyZWUuY29tcG9uZW50LCBzdXNwZW5zZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaCguLi50aGlzLmdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihjaGlsZFN1YlRyZWUsIHN1c3BlbnNlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKGNoaWxkID0+IHsgdmFyIF9hOyByZXR1cm4gISgwLCB1dGlsXzEuaXNCZWluZ0Rlc3Ryb3llZCkoY2hpbGQpICYmICEoKF9hID0gY2hpbGQudHlwZS5kZXZ0b29scykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhpZGUpOyB9KTtcbiAgICB9XG4gICAgY2FwdHVyZUlkKGluc3RhbmNlKSB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gaW5zdGFuY2UudWlkIGlzIG5vdCByZWxpYWJsZSBpbiBkZXZ0b29scyBhcyB0aGVyZVxuICAgICAgICAvLyBtYXkgYmUgMiByb290cyB3aXRoIHNhbWUgdWlkIHdoaWNoIGNhdXNlcyB1bmV4cGVjdGVkXG4gICAgICAgIC8vIGJlaGF2aW91clxuICAgICAgICBjb25zdCBpZCA9IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fICE9IG51bGwgPyBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyA6ICgwLCB1dGlsXzEuZ2V0VW5pcXVlQ29tcG9uZW50SWQpKGluc3RhbmNlLCB0aGlzLmN0eCk7XG4gICAgICAgIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gaWQ7XG4gICAgICAgIC8vIERlZHVwZVxuICAgICAgICBpZiAodGhpcy5jYXB0dXJlSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZUlkcy5zZXQoaWQsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXJrKGluc3RhbmNlKTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYXB0dXJlIHRoZSBtZXRhIGluZm9ybWF0aW9uIG9mIGFuIGluc3RhbmNlLiAocmVjdXJzaXZlKVxuICAgICAqXG4gICAgICogQHBhcmFtIHtWdWV9IGluc3RhbmNlXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqL1xuICAgIGFzeW5jIGNhcHR1cmUoaW5zdGFuY2UsIGxpc3QsIGRlcHRoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmNhcHR1cmVJZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0SW50ZXJuYWxJbnN0YW5jZUNoaWxkcmVuKGluc3RhbmNlLnN1YlRyZWUpXG4gICAgICAgICAgICAuZmlsdGVyKGNoaWxkID0+ICEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkKSk7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldENvbXBvbmVudFBhcmVudHMoaW5zdGFuY2UpIHx8IFtdO1xuICAgICAgICBjb25zdCBpbmFjdGl2ZSA9ICEhaW5zdGFuY2UuaXNEZWFjdGl2YXRlZCB8fCBwYXJlbnRzLnNvbWUocGFyZW50ID0+IHBhcmVudC5pc0RlYWN0aXZhdGVkKTtcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB7XG4gICAgICAgICAgICB1aWQ6IGluc3RhbmNlLnVpZCxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHJlbmRlcktleTogKDAsIHV0aWxfMS5nZXRSZW5kZXJLZXkpKGluc3RhbmNlLnZub2RlID8gaW5zdGFuY2Uudm5vZGUua2V5IDogbnVsbCksXG4gICAgICAgICAgICBpbmFjdGl2ZSxcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiAhIWNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIGlzRnJhZ21lbnQ6ICgwLCB1dGlsXzEuaXNGcmFnbWVudCkoaW5zdGFuY2UpLFxuICAgICAgICAgICAgdGFnczogW10sXG4gICAgICAgIH07XG4gICAgICAgIC8vIGNhcHR1cmUgY2hpbGRyZW5cbiAgICAgICAgaWYgKGRlcHRoIDwgdGhpcy5tYXhEZXB0aCB8fCBpbnN0YW5jZS50eXBlLl9faXNLZWVwQWxpdmUgfHwgcGFyZW50cy5zb21lKHBhcmVudCA9PiBwYXJlbnQudHlwZS5fX2lzS2VlcEFsaXZlKSkge1xuICAgICAgICAgICAgdHJlZU5vZGUuY2hpbGRyZW4gPSBhd2FpdCBQcm9taXNlLmFsbChjaGlsZHJlblxuICAgICAgICAgICAgICAgIC5tYXAoKGNoaWxkLCBpbmRleCwgbGlzdCkgPT4gdGhpcy5jYXB0dXJlKGNoaWxkLCBsaXN0LCBkZXB0aCArIDEpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGtlZXAtYWxpdmVcbiAgICAgICAgaWYgKGluc3RhbmNlLnR5cGUuX19pc0tlZXBBbGl2ZSAmJiBpbnN0YW5jZS5fX3ZfY2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlZENvbXBvbmVudHMgPSBBcnJheS5mcm9tKGluc3RhbmNlLl9fdl9jYWNoZS52YWx1ZXMoKSkubWFwKCh2bm9kZSkgPT4gdm5vZGUuY29tcG9uZW50KS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbklkcyA9IGNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC5fX1ZVRV9ERVZUT09MU19VSURfXyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoaWxkIG9mIGNhY2hlZENvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuSWRzLmluY2x1ZGVzKGNhY2hlZENoaWxkLl9fVlVFX0RFVlRPT0xTX1VJRF9fKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gYXdhaXQgdGhpcy5jYXB0dXJlKHsgLi4uY2FjaGVkQ2hpbGQsIGlzRGVhY3RpdmF0ZWQ6IHRydWUgfSwgbnVsbCwgZGVwdGggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVOb2RlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmdcbiAgICAgICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IGZpcnN0RWxlbWVudCA9IHJvb3RFbGVtZW50c1swXTtcbiAgICAgICAgaWYgKGZpcnN0RWxlbWVudCA9PT0gbnVsbCB8fCBmaXJzdEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZSA9IGluc3RhbmNlLnBhcmVudDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFJvb3RFbGVtZW50cyA9IHBhcmVudEluc3RhbmNlID8gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShwYXJlbnRJbnN0YW5jZSkgOiBbXTtcbiAgICAgICAgICAgIGxldCBlbCA9IGZpcnN0RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4TGlzdCA9IFtdO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGluZGV4TGlzdC5wdXNoKEFycmF5LmZyb20oZWwucGFyZW50RWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKGVsKSk7XG4gICAgICAgICAgICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgfSB3aGlsZSAoZWwucGFyZW50RWxlbWVudCAmJiBwYXJlbnRSb290RWxlbWVudHMubGVuZ3RoICYmICFwYXJlbnRSb290RWxlbWVudHMuaW5jbHVkZXMoZWwpKTtcbiAgICAgICAgICAgIHRyZWVOb2RlLmRvbU9yZGVyID0gaW5kZXhMaXN0LnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRyZWVOb2RlLmRvbU9yZGVyID0gWy0xXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKF9hID0gaW5zdGFuY2Uuc3VzcGVuc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdXNwZW5zZUtleSkge1xuICAgICAgICAgICAgdHJlZU5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogaW5zdGFuY2Uuc3VzcGVuc2Uuc3VzcGVuc2VLZXksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweGU0OTJlNCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IDB4ZmZmZmZmLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB1cGRhdGUgaW5zdGFuY2VNYXBcbiAgICAgICAgICAgIHRoaXMubWFyayhpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIHRoaXMuY29tcG9uZW50RmlsdGVyLmZpbHRlciwgdGhpcy5jdHguY3VycmVudEFwcFJlY29yZC5vcHRpb25zLmFwcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmsgYW4gaW5zdGFuY2UgYXMgY2FwdHVyZWQgYW5kIHN0b3JlIGl0IGluIHRoZSBpbnN0YW5jZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Z1ZX0gaW5zdGFuY2VcbiAgICAgKi9cbiAgICBtYXJrKGluc3RhbmNlLCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlTWFwID0gdGhpcy5jdHguY3VycmVudEFwcFJlY29yZC5pbnN0YW5jZU1hcDtcbiAgICAgICAgaWYgKGZvcmNlIHx8ICFpbnN0YW5jZU1hcC5oYXMoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18pKSB7XG4gICAgICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sIGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQ29tcG9uZW50V2Fsa2VyID0gQ29tcG9uZW50V2Fsa2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJlZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///89399\n");
|
|
350
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.ComponentWalker = void 0;\n\nconst util_1 = __webpack_require__(33756);\n\nconst filter_1 = __webpack_require__(72396);\n\nconst el_1 = __webpack_require__(88722);\n\nclass ComponentWalker {\n constructor(maxDepth, filter, api, ctx) {\n this.ctx = ctx;\n this.api = api;\n this.maxDepth = maxDepth;\n this.componentFilter = new filter_1.ComponentFilter(filter);\n }\n\n getComponentTree(instance) {\n this.captureIds = new Map();\n return this.findQualifiedChildren(instance, 0);\n }\n\n getComponentParents(instance) {\n this.captureIds = new Map();\n const parents = [];\n this.captureId(instance);\n let parent = instance;\n\n while (parent = parent.parent) {\n this.captureId(parent);\n parents.push(parent);\n }\n\n return parents;\n }\n /**\n * Find qualified children from a single instance.\n * If the instance itself is qualified, just return itself.\n * This is ok because [].concat works in both cases.\n *\n * @param {Vue|Vnode} instance\n * @return {Vue|Array}\n */\n\n\n async findQualifiedChildren(instance, depth) {\n var _a;\n\n if (this.componentFilter.isQualified(instance) && !((_a = instance.type.devtools) === null || _a === void 0 ? void 0 : _a.hide)) {\n return [await this.capture(instance, null, depth)];\n } else if (instance.subTree) {\n // TODO functional components\n return this.findQualifiedChildrenFromList(this.getInternalInstanceChildren(instance.subTree), depth);\n } else {\n return [];\n }\n }\n /**\n * Iterate through an array of instances and flatten it into\n * an array of qualified instances. This is a depth-first\n * traversal - e.g. if an instance is not matched, we will\n * recursively go deeper until a qualified child is found.\n *\n * @param {Array} instances\n * @return {Array}\n */\n\n\n async findQualifiedChildrenFromList(instances, depth) {\n instances = instances.filter(child => {\n var _a;\n\n return !(0, util_1.isBeingDestroyed)(child) && !((_a = child.type.devtools) === null || _a === void 0 ? void 0 : _a.hide);\n });\n\n if (!this.componentFilter.filter) {\n return Promise.all(instances.map((child, index, list) => this.capture(child, list, depth)));\n } else {\n return Array.prototype.concat.apply([], await Promise.all(instances.map(i => this.findQualifiedChildren(i, depth))));\n }\n }\n /**\n * Get children from a component instance.\n */\n\n\n getInternalInstanceChildren(subTree, suspense = null) {\n const list = [];\n\n if (subTree.component) {\n !suspense ? list.push(subTree.component) : list.push({ ...subTree.component,\n suspense\n });\n } else if (subTree.suspense) {\n const suspenseKey = !subTree.suspense.isInFallback ? 'suspense default' : 'suspense fallback';\n list.push(...this.getInternalInstanceChildren(subTree.suspense.activeBranch, { ...subTree.suspense,\n suspenseKey\n }));\n } else if (Array.isArray(subTree.children)) {\n subTree.children.forEach(childSubTree => {\n if (childSubTree.component) {\n !suspense ? list.push(childSubTree.component) : list.push({ ...childSubTree.component,\n suspense\n });\n } else {\n list.push(...this.getInternalInstanceChildren(childSubTree, suspense));\n }\n });\n }\n\n return list.filter(child => {\n var _a;\n\n return !(0, util_1.isBeingDestroyed)(child) && !((_a = child.type.devtools) === null || _a === void 0 ? void 0 : _a.hide);\n });\n }\n\n captureId(instance) {\n if (!instance) return null; // instance.uid is not reliable in devtools as there\n // may be 2 roots with same uid which causes unexpected\n // behaviour\n\n const id = instance.__VUE_DEVTOOLS_UID__ != null ? instance.__VUE_DEVTOOLS_UID__ : (0, util_1.getUniqueComponentId)(instance, this.ctx);\n instance.__VUE_DEVTOOLS_UID__ = id; // Dedupe\n\n if (this.captureIds.has(id)) {\n return;\n } else {\n this.captureIds.set(id, undefined);\n }\n\n this.mark(instance);\n return id;\n }\n /**\n * Capture the meta information of an instance. (recursive)\n *\n * @param {Vue} instance\n * @return {Object}\n */\n\n\n async capture(instance, list, depth) {\n var _a;\n\n const id = this.captureId(instance);\n const name = (0, util_1.getInstanceName)(instance);\n const children = this.getInternalInstanceChildren(instance.subTree).filter(child => !(0, util_1.isBeingDestroyed)(child));\n const parents = this.getComponentParents(instance) || [];\n const inactive = !!instance.isDeactivated || parents.some(parent => parent.isDeactivated);\n const treeNode = {\n uid: instance.uid,\n id,\n name,\n renderKey: (0, util_1.getRenderKey)(instance.vnode ? instance.vnode.key : null),\n inactive,\n hasChildren: !!children.length,\n children: [],\n isFragment: (0, util_1.isFragment)(instance),\n tags: typeof instance.type !== 'function' ? [] : [{\n label: 'functional',\n textColor: 0x555555,\n backgroundColor: 0xeeeeee\n }]\n }; // capture children\n\n if (depth < this.maxDepth || instance.type.__isKeepAlive || parents.some(parent => parent.type.__isKeepAlive)) {\n treeNode.children = await Promise.all(children.map((child, index, list) => this.capture(child, list, depth + 1)).filter(Boolean));\n } // keep-alive\n\n\n if (instance.type.__isKeepAlive && instance.__v_cache) {\n const cachedComponents = Array.from(instance.__v_cache.values()).map(vnode => vnode.component).filter(Boolean);\n const childrenIds = children.map(child => child.__VUE_DEVTOOLS_UID__);\n\n for (const cachedChild of cachedComponents) {\n if (!childrenIds.includes(cachedChild.__VUE_DEVTOOLS_UID__)) {\n const node = await this.capture({ ...cachedChild,\n isDeactivated: true\n }, null, depth + 1);\n\n if (node) {\n treeNode.children.push(node);\n }\n }\n }\n } // ensure correct ordering\n\n\n const rootElements = (0, el_1.getRootElementsFromComponentInstance)(instance);\n const firstElement = rootElements[0];\n\n if (firstElement === null || firstElement === void 0 ? void 0 : firstElement.parentElement) {\n const parentInstance = instance.parent;\n const parentRootElements = parentInstance ? (0, el_1.getRootElementsFromComponentInstance)(parentInstance) : [];\n let el = firstElement;\n const indexList = [];\n\n do {\n indexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n el = el.parentElement;\n } while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\n treeNode.domOrder = indexList.reverse();\n } else {\n treeNode.domOrder = [-1];\n }\n\n if ((_a = instance.suspense) === null || _a === void 0 ? void 0 : _a.suspenseKey) {\n treeNode.tags.push({\n label: instance.suspense.suspenseKey,\n backgroundColor: 0xe492e4,\n textColor: 0xffffff\n }); // update instanceMap\n\n this.mark(instance, true);\n }\n\n return this.api.visitComponentTree(instance, treeNode, this.componentFilter.filter, this.ctx.currentAppRecord.options.app);\n }\n /**\n * Mark an instance as captured and store it in the instance map.\n *\n * @param {Vue} instance\n */\n\n\n mark(instance, force = false) {\n const instanceMap = this.ctx.currentAppRecord.instanceMap;\n\n if (force || !instanceMap.has(instance.__VUE_DEVTOOLS_UID__)) {\n instanceMap.set(instance.__VUE_DEVTOOLS_UID__, instance);\n }\n }\n\n}\n\nexports.ComponentWalker = ComponentWalker;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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MEIsV0FBOUM7O0FBQ0EsUUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBWixDQUFnQixRQUFRLENBQUMsb0JBQXpCLENBQWQsRUFBOEQ7QUFDNUQsaUJBQVcsQ0FBQyxHQUFaLENBQWdCLFFBQVEsQ0FBQyxvQkFBekIsRUFBK0MsUUFBL0M7QUFDRDtBQUNGOztBQXJOeUI7O0FBQTVCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi8uLi9zcmMvY29tcG9uZW50cy90cmVlLnRzPzQwNzMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbXBvbmVudFdhbGtlciA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBmaWx0ZXJfMSA9IHJlcXVpcmUoXCIuL2ZpbHRlclwiKTtcbmNvbnN0IGVsXzEgPSByZXF1aXJlKFwiLi9lbFwiKTtcbmNsYXNzIENvbXBvbmVudFdhbGtlciB7XG4gICAgY29uc3RydWN0b3IobWF4RGVwdGgsIGZpbHRlciwgYXBpLCBjdHgpIHtcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XG4gICAgICAgIHRoaXMuYXBpID0gYXBpO1xuICAgICAgICB0aGlzLm1heERlcHRoID0gbWF4RGVwdGg7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RmlsdGVyID0gbmV3IGZpbHRlcl8xLkNvbXBvbmVudEZpbHRlcihmaWx0ZXIpO1xuICAgIH1cbiAgICBnZXRDb21wb25lbnRUcmVlKGluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMuY2FwdHVyZUlkcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFF1YWxpZmllZENoaWxkcmVuKGluc3RhbmNlLCAwKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50UGFyZW50cyhpbnN0YW5jZSkge1xuICAgICAgICB0aGlzLmNhcHR1cmVJZHMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5jYXB0dXJlSWQoaW5zdGFuY2UpO1xuICAgICAgICBsZXQgcGFyZW50ID0gaW5zdGFuY2U7XG4gICAgICAgIHdoaWxlICgocGFyZW50ID0gcGFyZW50LnBhcmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZUlkKHBhcmVudCk7XG4gICAgICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyZW50cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmluZCBxdWFsaWZpZWQgY2hpbGRyZW4gZnJvbSBhIHNpbmdsZSBpbnN0YW5jZS5cbiAgICAgKiBJZiB0aGUgaW5zdGFuY2UgaXRzZWxmIGlzIHF1YWxpZmllZCwganVzdCByZXR1cm4gaXRzZWxmLlxuICAgICAqIFRoaXMgaXMgb2sgYmVjYXVzZSBbXS5jb25jYXQgd29ya3MgaW4gYm90aCBjYXNlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VnVlfFZub2RlfSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm4ge1Z1ZXxBcnJheX1cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kUXVhbGlmaWVkQ2hpbGRyZW4oaW5zdGFuY2UsIGRlcHRoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50RmlsdGVyLmlzUXVhbGlmaWVkKGluc3RhbmNlKSAmJiAhKChfYSA9IGluc3RhbmNlLnR5cGUuZGV2dG9vbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oaWRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFthd2FpdCB0aGlzLmNhcHR1cmUoaW5zdGFuY2UsIG51bGwsIGRlcHRoKV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2Uuc3ViVHJlZSkge1xuICAgICAgICAgICAgLy8gVE9ETyBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRRdWFsaWZpZWRDaGlsZHJlbkZyb21MaXN0KHRoaXMuZ2V0SW50ZXJuYWxJbnN0YW5jZUNoaWxkcmVuKGluc3RhbmNlLnN1YlRyZWUpLCBkZXB0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0ZSB0aHJvdWdoIGFuIGFycmF5IG9mIGluc3RhbmNlcyBhbmQgZmxhdHRlbiBpdCBpbnRvXG4gICAgICogYW4gYXJyYXkgb2YgcXVhbGlmaWVkIGluc3RhbmNlcy4gVGhpcyBpcyBhIGRlcHRoLWZpcnN0XG4gICAgICogdHJhdmVyc2FsIC0gZS5nLiBpZiBhbiBpbnN0YW5jZSBpcyBub3QgbWF0Y2hlZCwgd2Ugd2lsbFxuICAgICAqIHJlY3Vyc2l2ZWx5IGdvIGRlZXBlciB1bnRpbCBhIHF1YWxpZmllZCBjaGlsZCBpcyBmb3VuZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGluc3RhbmNlc1xuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRRdWFsaWZpZWRDaGlsZHJlbkZyb21MaXN0KGluc3RhbmNlcywgZGVwdGgpIHtcbiAgICAgICAgaW5zdGFuY2VzID0gaW5zdGFuY2VzXG4gICAgICAgICAgICAuZmlsdGVyKGNoaWxkID0+IHsgdmFyIF9hOyByZXR1cm4gISgwLCB1dGlsXzEuaXNCZWluZ0Rlc3Ryb3llZCkoY2hpbGQpICYmICEoKF9hID0gY2hpbGQudHlwZS5kZXZ0b29scykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhpZGUpOyB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudEZpbHRlci5maWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChpbnN0YW5jZXMubWFwKChjaGlsZCwgaW5kZXgsIGxpc3QpID0+IHRoaXMuY2FwdHVyZShjaGlsZCwgbGlzdCwgZGVwdGgpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXdhaXQgUHJvbWlzZS5hbGwoaW5zdGFuY2VzLm1hcChpID0+IHRoaXMuZmluZFF1YWxpZmllZENoaWxkcmVuKGksIGRlcHRoKSkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgY2hpbGRyZW4gZnJvbSBhIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBnZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oc3ViVHJlZSwgc3VzcGVuc2UgPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICAgICAgaWYgKHN1YlRyZWUuY29tcG9uZW50KSB7XG4gICAgICAgICAgICAhc3VzcGVuc2UgPyBsaXN0LnB1c2goc3ViVHJlZS5jb21wb25lbnQpIDogbGlzdC5wdXNoKHsgLi4uc3ViVHJlZS5jb21wb25lbnQsIHN1c3BlbnNlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN1YlRyZWUuc3VzcGVuc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1c3BlbnNlS2V5ID0gIXN1YlRyZWUuc3VzcGVuc2UuaXNJbkZhbGxiYWNrID8gJ3N1c3BlbnNlIGRlZmF1bHQnIDogJ3N1c3BlbnNlIGZhbGxiYWNrJztcbiAgICAgICAgICAgIGxpc3QucHVzaCguLi50aGlzLmdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihzdWJUcmVlLnN1c3BlbnNlLmFjdGl2ZUJyYW5jaCwgeyAuLi5zdWJUcmVlLnN1c3BlbnNlLCBzdXNwZW5zZUtleSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzdWJUcmVlLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgc3ViVHJlZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkU3ViVHJlZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkU3ViVHJlZS5jb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgIXN1c3BlbnNlID8gbGlzdC5wdXNoKGNoaWxkU3ViVHJlZS5jb21wb25lbnQpIDogbGlzdC5wdXNoKHsgLi4uY2hpbGRTdWJUcmVlLmNvbXBvbmVudCwgc3VzcGVuc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goLi4udGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oY2hpbGRTdWJUcmVlLCBzdXNwZW5zZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXN0LmZpbHRlcihjaGlsZCA9PiB7IHZhciBfYTsgcmV0dXJuICEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkKSAmJiAhKChfYSA9IGNoaWxkLnR5cGUuZGV2dG9vbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oaWRlKTsgfSk7XG4gICAgfVxuICAgIGNhcHR1cmVJZChpbnN0YW5jZSkge1xuICAgICAgICBpZiAoIWluc3RhbmNlKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIGluc3RhbmNlLnVpZCBpcyBub3QgcmVsaWFibGUgaW4gZGV2dG9vbHMgYXMgdGhlcmVcbiAgICAgICAgLy8gbWF5IGJlIDIgcm9vdHMgd2l0aCBzYW1lIHVpZCB3aGljaCBjYXVzZXMgdW5leHBlY3RlZFxuICAgICAgICAvLyBiZWhhdmlvdXJcbiAgICAgICAgY29uc3QgaWQgPSBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyAhPSBudWxsID8gaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18gOiAoMCwgdXRpbF8xLmdldFVuaXF1ZUNvbXBvbmVudElkKShpbnN0YW5jZSwgdGhpcy5jdHgpO1xuICAgICAgICBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyA9IGlkO1xuICAgICAgICAvLyBEZWR1cGVcbiAgICAgICAgaWYgKHRoaXMuY2FwdHVyZUlkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhcHR1cmVJZHMuc2V0KGlkLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFyayhpbnN0YW5jZSk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FwdHVyZSB0aGUgbWV0YSBpbmZvcm1hdGlvbiBvZiBhbiBpbnN0YW5jZS4gKHJlY3Vyc2l2ZSlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VnVlfSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKi9cbiAgICBhc3luYyBjYXB0dXJlKGluc3RhbmNlLCBsaXN0LCBkZXB0aCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5jYXB0dXJlSWQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zdCBuYW1lID0gKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihpbnN0YW5jZS5zdWJUcmVlKVxuICAgICAgICAgICAgLmZpbHRlcihjaGlsZCA9PiAhKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZCkpO1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gdGhpcy5nZXRDb21wb25lbnRQYXJlbnRzKGluc3RhbmNlKSB8fCBbXTtcbiAgICAgICAgY29uc3QgaW5hY3RpdmUgPSAhIWluc3RhbmNlLmlzRGVhY3RpdmF0ZWQgfHwgcGFyZW50cy5zb21lKHBhcmVudCA9PiBwYXJlbnQuaXNEZWFjdGl2YXRlZCk7XG4gICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgdWlkOiBpbnN0YW5jZS51aWQsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICByZW5kZXJLZXk6ICgwLCB1dGlsXzEuZ2V0UmVuZGVyS2V5KShpbnN0YW5jZS52bm9kZSA/IGluc3RhbmNlLnZub2RlLmtleSA6IG51bGwpLFxuICAgICAgICAgICAgaW5hY3RpdmUsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogISFjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBpc0ZyYWdtZW50OiAoMCwgdXRpbF8xLmlzRnJhZ21lbnQpKGluc3RhbmNlKSxcbiAgICAgICAgICAgIHRhZ3M6IHR5cGVvZiBpbnN0YW5jZS50eXBlICE9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbG9yOiAweDU1NTU1NSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogMHhlZWVlZWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gY2FwdHVyZSBjaGlsZHJlblxuICAgICAgICBpZiAoZGVwdGggPCB0aGlzLm1heERlcHRoIHx8IGluc3RhbmNlLnR5cGUuX19pc0tlZXBBbGl2ZSB8fCBwYXJlbnRzLnNvbWUocGFyZW50ID0+IHBhcmVudC50eXBlLl9faXNLZWVwQWxpdmUpKSB7XG4gICAgICAgICAgICB0cmVlTm9kZS5jaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgLm1hcCgoY2hpbGQsIGluZGV4LCBsaXN0KSA9PiB0aGlzLmNhcHR1cmUoY2hpbGQsIGxpc3QsIGRlcHRoICsgMSkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8ga2VlcC1hbGl2ZVxuICAgICAgICBpZiAoaW5zdGFuY2UudHlwZS5fX2lzS2VlcEFsaXZlICYmIGluc3RhbmNlLl9fdl9jYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGVkQ29tcG9uZW50cyA9IEFycmF5LmZyb20oaW5zdGFuY2UuX192X2NhY2hlLnZhbHVlcygpKS5tYXAoKHZub2RlKSA9PiB2bm9kZS5jb21wb25lbnQpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuSWRzID0gY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLl9fVlVFX0RFVlRPT0xTX1VJRF9fKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FjaGVkQ2hpbGQgb2YgY2FjaGVkQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW5JZHMuaW5jbHVkZXMoY2FjaGVkQ2hpbGQuX19WVUVfREVWVE9PTFNfVUlEX18pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBhd2FpdCB0aGlzLmNhcHR1cmUoeyAuLi5jYWNoZWRDaGlsZCwgaXNEZWFjdGl2YXRlZDogdHJ1ZSB9LCBudWxsLCBkZXB0aCArIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZU5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBlbnN1cmUgY29ycmVjdCBvcmRlcmluZ1xuICAgICAgICBjb25zdCByb290RWxlbWVudHMgPSAoMCwgZWxfMS5nZXRSb290RWxlbWVudHNGcm9tQ29tcG9uZW50SW5zdGFuY2UpKGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgZmlyc3RFbGVtZW50ID0gcm9vdEVsZW1lbnRzWzBdO1xuICAgICAgICBpZiAoZmlyc3RFbGVtZW50ID09PSBudWxsIHx8IGZpcnN0RWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmlyc3RFbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlID0gaW5zdGFuY2UucGFyZW50O1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Um9vdEVsZW1lbnRzID0gcGFyZW50SW5zdGFuY2UgPyAoMCwgZWxfMS5nZXRSb290RWxlbWVudHNGcm9tQ29tcG9uZW50SW5zdGFuY2UpKHBhcmVudEluc3RhbmNlKSA6IFtdO1xuICAgICAgICAgICAgbGV0IGVsID0gZmlyc3RFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgaW5kZXhMaXN0ID0gW107XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaW5kZXhMaXN0LnB1c2goQXJyYXkuZnJvbShlbC5wYXJlbnRFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoZWwpKTtcbiAgICAgICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChlbC5wYXJlbnRFbGVtZW50ICYmIHBhcmVudFJvb3RFbGVtZW50cy5sZW5ndGggJiYgIXBhcmVudFJvb3RFbGVtZW50cy5pbmNsdWRlcyhlbCkpO1xuICAgICAgICAgICAgdHJlZU5vZGUuZG9tT3JkZXIgPSBpbmRleExpc3QucmV2ZXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdHJlZU5vZGUuZG9tT3JkZXIgPSBbLTFdO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoX2EgPSBpbnN0YW5jZS5zdXNwZW5zZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1c3BlbnNlS2V5KSB7XG4gICAgICAgICAgICB0cmVlTm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBpbnN0YW5jZS5zdXNwZW5zZS5zdXNwZW5zZUtleSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4ZTQ5MmU0LFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMHhmZmZmZmYsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBpbnN0YW5jZU1hcFxuICAgICAgICAgICAgdGhpcy5tYXJrKGluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcGkudmlzaXRDb21wb25lbnRUcmVlKGluc3RhbmNlLCB0cmVlTm9kZSwgdGhpcy5jb21wb25lbnRGaWx0ZXIuZmlsdGVyLCB0aGlzLmN0eC5jdXJyZW50QXBwUmVjb3JkLm9wdGlvbnMuYXBwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFyayBhbiBpbnN0YW5jZSBhcyBjYXB0dXJlZCBhbmQgc3RvcmUgaXQgaW4gdGhlIGluc3RhbmNlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VnVlfSBpbnN0YW5jZVxuICAgICAqL1xuICAgIG1hcmsoaW5zdGFuY2UsIGZvcmNlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VNYXAgPSB0aGlzLmN0eC5jdXJyZW50QXBwUmVjb3JkLmluc3RhbmNlTWFwO1xuICAgICAgICBpZiAoZm9yY2UgfHwgIWluc3RhbmNlTWFwLmhhcyhpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXykpIHtcbiAgICAgICAgICAgIGluc3RhbmNlTWFwLnNldChpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXywgaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Db21wb25lbnRXYWxrZXIgPSBDb21wb25lbnRXYWxrZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmVlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///89399\n");
|
|
351
351
|
|
|
352
352
|
/***/ }),
|
|
353
353
|
|