@vue/devtools 6.0.11 → 6.1.0
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 +49 -18
- package/build/devtools.js +1 -1
- package/build/hook.js +1 -1
- package/package.json +1 -1
package/build/backend.js
CHANGED
|
@@ -23,11 +23,11 @@ eval("/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffe
|
|
|
23
23
|
|
|
24
24
|
/***/ }),
|
|
25
25
|
|
|
26
|
-
/***/
|
|
26
|
+
/***/ 13508:
|
|
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 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");
|
|
30
|
+
eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"now\": () => (/* reexport */ now),\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/time.js\nlet supported;\nlet perf;\n\nfunction isSupported() {\n if (supported !== undefined) {\n return supported;\n }\n\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n } else {\n supported = false;\n }\n\n return supported;\n}\n\nfunction now() {\n return isSupported() ? perf.now() : Date.now();\n}\n;// CONCATENATED MODULE: ../api/lib/esm/proxy.js\n\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 now() {\n return now();\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\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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TCxDQUFZTSxJQUFJLENBQUMyQixNQUFqQixFQUF5QixHQUFHM0IsSUFBSSxDQUFDeUIsSUFBakMsQ0FBbkI7QUFDSDtBQUNKOztBQXZHaUIsQzs7QUNGdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU1MsbUJBQVQsQ0FBNkJDLGdCQUE3QixFQUErQ0MsT0FBL0MsRUFBd0Q7QUFDM0QsUUFBTUMsVUFBVSxHQUFHRixnQkFBbkI7QUFDQSxRQUFNekMsTUFBTSxHQUFHcEIsU0FBUyxFQUF4QjtBQUNBLFFBQU1tQixJQUFJLEdBQUdwQixxQkFBcUIsRUFBbEM7QUFDQSxRQUFNaUUsV0FBVyxHQUFHM0QsZ0JBQWdCLElBQUkwRCxVQUFVLENBQUNFLGdCQUFuRDs7QUFDQSxNQUFJOUMsSUFBSSxLQUFLQyxNQUFNLENBQUM4QyxxQ0FBUCxJQUFnRCxDQUFDRixXQUF0RCxDQUFSLEVBQTRFO0FBQ3hFN0MsSUFBQUEsSUFBSSxDQUFDZ0QsSUFBTCxDQUFVNUQsVUFBVixFQUFzQnNELGdCQUF0QixFQUF3Q0MsT0FBeEM7QUFDSCxHQUZELE1BR0s7QUFDRCxVQUFNTSxLQUFLLEdBQUdKLFdBQVcsR0FBRyxJQUFJaEQsUUFBSixDQUFhK0MsVUFBYixFQUF5QjVDLElBQXpCLENBQUgsR0FBb0MsSUFBN0Q7QUFDQSxVQUFNa0QsSUFBSSxHQUFHakQsTUFBTSxDQUFDa0Qsd0JBQVAsR0FBa0NsRCxNQUFNLENBQUNrRCx3QkFBUCxJQUFtQyxFQUFsRjtBQUNBRCxJQUFBQSxJQUFJLENBQUNqQixJQUFMLENBQVU7QUFDTlMsTUFBQUEsZ0JBQWdCLEVBQUVFLFVBRFo7QUFFTkQsTUFBQUEsT0FGTTtBQUdOTSxNQUFBQTtBQUhNLEtBQVY7QUFLQSxRQUFJQSxLQUFKLEVBQ0lOLE9BQU8sQ0FBQ00sS0FBSyxDQUFDZCxhQUFQLENBQVA7QUFDUDtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9hcGkvbGliL2VzbS9lbnYuanM/Y2RmMyIsIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL2FwaS9saWIvZXNtL2NvbnN0LmpzPzE4MDUiLCJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9hcGkvbGliL2VzbS90aW1lLmpzP2FhNGIiLCJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9hcGkvbGliL2VzbS9wcm94eS5qcz83NTIwIiwid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vYXBpL2xpYi9lc20vaW5kZXguanM/NzIwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0RGV2dG9vbHNHbG9iYWxIb29rKCkge1xuICAgIHJldHVybiBnZXRUYXJnZXQoKS5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldCgpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylcbiAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBnbG9iYWxcbiAgICAgICAgICAgIDoge307XG59XG5leHBvcnQgY29uc3QgaXNQcm94eUF2YWlsYWJsZSA9IHR5cGVvZiBQcm94eSA9PT0gJ2Z1bmN0aW9uJztcbiIsImV4cG9ydCBjb25zdCBIT09LX1NFVFVQID0gJ2RldnRvb2xzLXBsdWdpbjpzZXR1cCc7XG5leHBvcnQgY29uc3QgSE9PS19QTFVHSU5fU0VUVElOR1NfU0VUID0gJ3BsdWdpbjpzZXR0aW5nczpzZXQnO1xuIiwibGV0IHN1cHBvcnRlZDtcbmxldCBwZXJmO1xuZnVuY3Rpb24gaXNTdXBwb3J0ZWQoKSB7XG4gICAgaWYgKHN1cHBvcnRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGVyZm9ybWFuY2UpIHtcbiAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcGVyZiA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwcG9ydGVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gaXNTdXBwb3J0ZWQoKSA/IHBlcmYubm93KCkgOiBEYXRlLm5vdygpO1xufVxuIiwiaW1wb3J0IHsgSE9PS19QTFVHSU5fU0VUVElOR1NfU0VUIH0gZnJvbSAnLi9jb25zdCc7XG5pbXBvcnQgeyBub3cgfSBmcm9tICcuL3RpbWUnO1xuZXhwb3J0IGNsYXNzIEFwaVByb3h5IHtcbiAgICBjb25zdHJ1Y3RvcihwbHVnaW4sIGhvb2spIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLnRhcmdldFF1ZXVlID0gW107XG4gICAgICAgIHRoaXMub25RdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5ob29rID0gaG9vaztcbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmdzID0ge307XG4gICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gcGx1Z2luLnNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHBsdWdpbi5zZXR0aW5nc1tpZF07XG4gICAgICAgICAgICAgICAgZGVmYXVsdFNldHRpbmdzW2lkXSA9IGl0ZW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsU2V0dGluZ3NTYXZlSWQgPSBgX192dWUtZGV2dG9vbHMtcGx1Z2luLXNldHRpbmdzX18ke3BsdWdpbi5pZH1gO1xuICAgICAgICBsZXQgY3VycmVudFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudFNldHRpbmdzLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmFsbGJhY2tzID0ge1xuICAgICAgICAgICAgZ2V0U2V0dGluZ3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTZXR0aW5ncztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRTZXR0aW5ncyh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU2V0dGluZ3NTYXZlSWQsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFNldHRpbmdzID0gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm93KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub3coKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChob29rKSB7XG4gICAgICAgICAgICBob29rLm9uKEhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCwgKHBsdWdpbklkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwbHVnaW5JZCA9PT0gdGhpcy5wbHVnaW4uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWxsYmFja3Muc2V0U2V0dGluZ3ModmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJveGllZE9uID0gbmV3IFByb3h5KHt9LCB7XG4gICAgICAgICAgICBnZXQ6IChfdGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldC5vbltwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJveGllZFRhcmdldCA9IG5ldyBQcm94eSh7fSwge1xuICAgICAgICAgICAgZ2V0OiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09ICdvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJveGllZE9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChPYmplY3Qua2V5cyh0aGlzLmZhbGxiYWNrcykuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldFF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcHJvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6ICgpID0+IHsgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2tzW3Byb3BdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBwcm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHNldFJlYWxUYXJnZXQodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5vblF1ZXVlKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5vbltpdGVtLm1ldGhvZF0oLi4uaXRlbS5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy50YXJnZXRRdWV1ZSkge1xuICAgICAgICAgICAgaXRlbS5yZXNvbHZlKGF3YWl0IHRoaXMudGFyZ2V0W2l0ZW0ubWV0aG9kXSguLi5pdGVtLmFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IGdldFRhcmdldCwgZ2V0RGV2dG9vbHNHbG9iYWxIb29rLCBpc1Byb3h5QXZhaWxhYmxlIH0gZnJvbSAnLi9lbnYnO1xuaW1wb3J0IHsgSE9PS19TRVRVUCB9IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IHsgQXBpUHJveHkgfSBmcm9tICcuL3Byb3h5JztcbmV4cG9ydCAqIGZyb20gJy4vYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vdGltZSc7XG5leHBvcnQgZnVuY3Rpb24gc2V0dXBEZXZ0b29sc1BsdWdpbihwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHBsdWdpbkRlc2NyaXB0b3I7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KCk7XG4gICAgY29uc3QgaG9vayA9IGdldERldnRvb2xzR2xvYmFsSG9vaygpO1xuICAgIGNvbnN0IGVuYWJsZVByb3h5ID0gaXNQcm94eUF2YWlsYWJsZSAmJiBkZXNjcmlwdG9yLmVuYWJsZUVhcmx5UHJveHk7XG4gICAgaWYgKGhvb2sgJiYgKHRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIHx8ICFlbmFibGVQcm94eSkpIHtcbiAgICAgICAgaG9vay5lbWl0KEhPT0tfU0VUVVAsIHBsdWdpbkRlc2NyaXB0b3IsIHNldHVwRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJveHkgPSBlbmFibGVQcm94eSA/IG5ldyBBcGlQcm94eShkZXNjcmlwdG9yLCBob29rKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfUExVR0lOU19fID0gdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyB8fCBbXTtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICAgIHBsdWdpbkRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBzZXR1cEZuLFxuICAgICAgICAgICAgcHJveHksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocHJveHkpXG4gICAgICAgICAgICBzZXR1cEZuKHByb3h5LnByb3hpZWRUYXJnZXQpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJnZXREZXZ0b29sc0dsb2JhbEhvb2siLCJnZXRUYXJnZXQiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwibmF2aWdhdG9yIiwid2luZG93IiwiZ2xvYmFsIiwiaXNQcm94eUF2YWlsYWJsZSIsIlByb3h5IiwiSE9PS19TRVRVUCIsIkhPT0tfUExVR0lOX1NFVFRJTkdTX1NFVCIsInN1cHBvcnRlZCIsInBlcmYiLCJpc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsIkFwaVByb3h5IiwiY29uc3RydWN0b3IiLCJwbHVnaW4iLCJob29rIiwidGFyZ2V0IiwidGFyZ2V0UXVldWUiLCJvblF1ZXVlIiwiZGVmYXVsdFNldHRpbmdzIiwic2V0dGluZ3MiLCJpZCIsIml0ZW0iLCJkZWZhdWx0VmFsdWUiLCJsb2NhbFNldHRpbmdzU2F2ZUlkIiwiY3VycmVudFNldHRpbmdzIiwiT2JqZWN0IiwiYXNzaWduIiwicmF3IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJlIiwiZmFsbGJhY2tzIiwiZ2V0U2V0dGluZ3MiLCJzZXRTZXR0aW5ncyIsInZhbHVlIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsIm9uIiwicGx1Z2luSWQiLCJwcm94aWVkT24iLCJnZXQiLCJfdGFyZ2V0IiwicHJvcCIsImFyZ3MiLCJwdXNoIiwibWV0aG9kIiwicHJveGllZFRhcmdldCIsImtleXMiLCJpbmNsdWRlcyIsInJlc29sdmUiLCJQcm9taXNlIiwic2V0UmVhbFRhcmdldCIsInNldHVwRGV2dG9vbHNQbHVnaW4iLCJwbHVnaW5EZXNjcmlwdG9yIiwic2V0dXBGbiIsImRlc2NyaXB0b3IiLCJlbmFibGVQcm94eSIsImVuYWJsZUVhcmx5UHJveHkiLCJfX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fIiwiZW1pdCIsInByb3h5IiwibGlzdCIsIl9fVlVFX0RFVlRPT0xTX1BMVUdJTlNfXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///13508\n");
|
|
31
31
|
|
|
32
32
|
/***/ }),
|
|
33
33
|
|
|
@@ -35,7 +35,7 @@ eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPO
|
|
|
35
35
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
36
36
|
|
|
37
37
|
"use strict";
|
|
38
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.DevtoolsPluginApiInstance = exports.DevtoolsApi = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst hooks_1 = __webpack_require__(29618);\n\nconst pluginOn = [];\n\nclass DevtoolsApi {\n constructor(backend, ctx) {\n this.stateEditor = new shared_utils_1.StateEditor();\n this.backend = backend;\n this.ctx = ctx;\n this.bridge = ctx.bridge;\n this.on = new hooks_1.DevtoolsHookable(ctx);\n }\n\n async callHook(eventType, payload, ctx = this.ctx) {\n payload = await this.on.callHandlers(eventType, payload, ctx);\n\n for (const on of pluginOn) {\n payload = await on.callHandlers(eventType, payload, ctx);\n }\n\n return payload;\n }\n\n async transformCall(callName, ...args) {\n const payload = await this.callHook(\"transformCall\"\n /* TRANSFORM_CALL */\n , {\n callName,\n inArgs: args,\n outArgs: args.slice()\n });\n return payload.outArgs;\n }\n\n async getAppRecordName(app, defaultName) {\n const payload = await this.callHook(\"getAppRecordName\"\n /* GET_APP_RECORD_NAME */\n , {\n app,\n name: null\n });\n\n if (payload.name) {\n return payload.name;\n } else {\n return `App ${defaultName}`;\n }\n }\n\n async getAppRootInstance(app) {\n const payload = await this.callHook(\"getAppRootInstance\"\n /* GET_APP_ROOT_INSTANCE */\n , {\n app,\n root: null\n });\n return payload.root;\n }\n\n async registerApplication(app) {\n await this.callHook(\"registerApplication\"\n /* REGISTER_APPLICATION */\n , {\n app\n });\n }\n\n async walkComponentTree(instance, maxDepth = -1, filter = null) {\n const payload = await this.callHook(\"walkComponentTree\"\n /* WALK_COMPONENT_TREE */\n , {\n componentInstance: instance,\n componentTreeData: null,\n maxDepth,\n filter\n });\n return payload.componentTreeData;\n }\n\n async visitComponentTree(instance, treeNode, filter = null, app) {\n const payload = await this.callHook(\"visitComponentTree\"\n /* VISIT_COMPONENT_TREE */\n , {\n app,\n componentInstance: instance,\n treeNode,\n filter\n });\n return payload.treeNode;\n }\n\n async walkComponentParents(instance) {\n const payload = await this.callHook(\"walkComponentParents\"\n /* WALK_COMPONENT_PARENTS */\n , {\n componentInstance: instance,\n parentInstances: []\n });\n return payload.parentInstances;\n }\n\n async inspectComponent(instance, app) {\n const payload = await this.callHook(\"inspectComponent\"\n /* INSPECT_COMPONENT */\n , {\n app,\n componentInstance: instance,\n instanceData: null\n });\n return payload.instanceData;\n }\n\n async getComponentBounds(instance) {\n const payload = await this.callHook(\"getComponentBounds\"\n /* GET_COMPONENT_BOUNDS */\n , {\n componentInstance: instance,\n bounds: null\n });\n return payload.bounds;\n }\n\n async getComponentName(instance) {\n const payload = await this.callHook(\"getComponentName\"\n /* GET_COMPONENT_NAME */\n , {\n componentInstance: instance,\n name: null\n });\n return payload.name;\n }\n\n async getComponentInstances(app) {\n const payload = await this.callHook(\"getComponentInstances\"\n /* GET_COMPONENT_INSTANCES */\n , {\n app,\n componentInstances: []\n });\n return payload.componentInstances;\n }\n\n async getElementComponent(element) {\n const payload = await this.callHook(\"getElementComponent\"\n /* GET_ELEMENT_COMPONENT */\n , {\n element,\n componentInstance: null\n });\n return payload.componentInstance;\n }\n\n async getComponentRootElements(instance) {\n const payload = await this.callHook(\"getComponentRootElements\"\n /* GET_COMPONENT_ROOT_ELEMENTS */\n , {\n componentInstance: instance,\n rootElements: []\n });\n return payload.rootElements;\n }\n\n async editComponentState(instance, dotPath, type, state, app) {\n const arrayPath = dotPath.split('.');\n const payload = await this.callHook(\"editComponentState\"\n /* EDIT_COMPONENT_STATE */\n , {\n app,\n componentInstance: instance,\n path: arrayPath,\n type,\n state,\n set: (object, path = arrayPath, value = state.value, cb) => this.stateEditor.set(object, path, value, cb || this.stateEditor.createDefaultSetCallback(state))\n });\n return payload.componentInstance;\n }\n\n async getComponentDevtoolsOptions(instance) {\n const payload = await this.callHook(\"getAppDevtoolsOptions\"\n /* GET_COMPONENT_DEVTOOLS_OPTIONS */\n , {\n componentInstance: instance,\n options: null\n });\n return payload.options || {};\n }\n\n async getComponentRenderCode(instance) {\n const payload = await this.callHook(\"getComponentRenderCode\"\n /* GET_COMPONENT_RENDER_CODE */\n , {\n componentInstance: instance,\n code: null\n });\n return {\n code: payload.code\n };\n }\n\n async inspectTimelineEvent(eventData, app) {\n const payload = await this.callHook(\"inspectTimelineEvent\"\n /* INSPECT_TIMELINE_EVENT */\n , {\n event: eventData.event,\n layerId: eventData.layerId,\n app,\n data: eventData.event.data,\n all: eventData.all\n });\n return payload.data;\n }\n\n async clearTimeline() {\n await this.callHook(\"timelineCleared\"\n /* TIMELINE_CLEARED */\n , {});\n }\n\n async getInspectorTree(inspectorId, app, filter) {\n const payload = await this.callHook(\"getInspectorTree\"\n /* GET_INSPECTOR_TREE */\n , {\n inspectorId,\n app,\n filter,\n rootNodes: []\n });\n return payload.rootNodes;\n }\n\n async getInspectorState(inspectorId, app, nodeId) {\n const payload = await this.callHook(\"getInspectorState\"\n /* GET_INSPECTOR_STATE */\n , {\n inspectorId,\n app,\n nodeId,\n state: null\n });\n return payload.state;\n }\n\n async editInspectorState(inspectorId, app, nodeId, dotPath, type, state) {\n const arrayPath = dotPath.split('.');\n await this.callHook(\"editInspectorState\"\n /* EDIT_INSPECTOR_STATE */\n , {\n inspectorId,\n app,\n nodeId,\n path: arrayPath,\n type,\n state,\n set: (object, path = arrayPath, value = state.value, cb) => this.stateEditor.set(object, path, value, cb || this.stateEditor.createDefaultSetCallback(state))\n });\n }\n\n}\n\nexports.DevtoolsApi = DevtoolsApi;\n\nclass DevtoolsPluginApiInstance {\n constructor(plugin, appRecord, ctx) {\n this.bridge = ctx.bridge;\n this.ctx = ctx;\n this.plugin = plugin;\n this.appRecord = appRecord;\n this.backendApi = appRecord.backend.api;\n this.defaultSettings = (0, shared_utils_1.getPluginDefaultSettings)(plugin.descriptor.settings);\n this.on = new hooks_1.DevtoolsHookable(ctx, plugin);\n pluginOn.push(this.on);\n } // Plugin API\n\n\n async notifyComponentUpdate(instance = null) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return;\n\n if (instance) {\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UPDATED, ...(await this.backendApi.transformCall(shared_utils_1.HookEvents.COMPONENT_UPDATED, instance)));\n } else {\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UPDATED);\n }\n }\n\n addTimelineLayer(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.TIMELINE)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.TIMELINE_LAYER_ADDED, options, this.plugin);\n return true;\n }\n\n addTimelineEvent(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.TIMELINE)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.TIMELINE_EVENT_ADDED, options, this.plugin);\n return true;\n }\n\n addInspector(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_ADD, options, this.plugin);\n return true;\n }\n\n sendInspectorTree(inspectorId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_TREE, inspectorId, this.plugin);\n return true;\n }\n\n sendInspectorState(inspectorId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_STATE, inspectorId, this.plugin);\n return true;\n }\n\n selectInspectorNode(inspectorId, nodeId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SELECT_NODE, inspectorId, nodeId, this.plugin);\n return true;\n }\n\n getComponentBounds(instance) {\n return this.backendApi.getComponentBounds(instance);\n }\n\n getComponentName(instance) {\n return this.backendApi.getComponentName(instance);\n }\n\n getComponentInstances(app) {\n return this.backendApi.getComponentInstances(app);\n }\n\n highlightElement(instance) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_HIGHLIGHT, instance.__VUE_DEVTOOLS_UID__, this.plugin);\n return true;\n }\n\n unhighlightElement() {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UNHIGHLIGHT, this.plugin);\n return true;\n }\n\n getSettings(pluginId) {\n return (0, shared_utils_1.getPluginSettings)(pluginId !== null && pluginId !== void 0 ? pluginId : this.plugin.descriptor.id, this.defaultSettings);\n }\n\n setSettings(value, pluginId) {\n (0, shared_utils_1.setPluginSettings)(pluginId !== null && pluginId !== void 0 ? pluginId : this.plugin.descriptor.id, value);\n }\n\n get enabled() {\n return (0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, shared_utils_1.PluginPermission.ENABLED);\n }\n\n hasPermission(permission) {\n return (0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, permission);\n }\n\n}\n\nexports.DevtoolsPluginApiInstance = DevtoolsPluginApiInstance;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUwsQ0FBUyxJQUFULENBQWMsSUFBZCxDQUFtQiwwQkFBVyxxQkFBOUIsRUFBcUQsS0FBSyxNQUExRDtBQUNBLFdBQU8sSUFBUDtBQUNEOztBQUVELGFBQVcsQ0FBRSxRQUFGLEVBQW1CO0FBQzVCLFdBQU8sc0NBQWtCLFFBQVEsU0FBUixZQUFRLFdBQVIsY0FBWSxLQUFLLE1BQUwsQ0FBWSxVQUFaLENBQXVCLEVBQXJELEVBQXlELEtBQUssZUFBOUQsQ0FBUDtBQUNEOztBQUVELGFBQVcsQ0FBRSxLQUFGLEVBQW9CLFFBQXBCLEVBQXFDO0FBQzlDLDBDQUFrQixRQUFRLFNBQVIsWUFBUSxXQUFSLGNBQVksS0FBSyxNQUFMLENBQVksVUFBWixDQUF1QixFQUFyRCxFQUF5RCxLQUF6RDtBQUNEOztBQUVrQixNQUFQLE9BQU87QUFDakIsV0FBTyx3Q0FBb0IsS0FBSyxNQUFMLENBQVksVUFBWixDQUF1QixFQUEzQyxFQUErQyxnQ0FBaUIsT0FBaEUsQ0FBUDtBQUNEOztBQUVPLGVBQWEsQ0FBRSxVQUFGLEVBQThCO0FBQ2pELFdBQU8sd0NBQW9CLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsRUFBM0MsRUFBK0MsVUFBL0MsQ0FBUDtBQUNEOztBQWxIbUM7O0FBQXRDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvYXBpLnRzP2FkMTUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRldnRvb2xzUGx1Z2luQXBpSW5zdGFuY2UgPSBleHBvcnRzLkRldnRvb2xzQXBpID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBob29rc18xID0gcmVxdWlyZShcIi4vaG9va3NcIik7XG5jb25zdCBwbHVnaW5PbiA9IFtdO1xuY2xhc3MgRGV2dG9vbHNBcGkge1xuICAgIGNvbnN0cnVjdG9yKGJhY2tlbmQsIGN0eCkge1xuICAgICAgICB0aGlzLnN0YXRlRWRpdG9yID0gbmV3IHNoYXJlZF91dGlsc18xLlN0YXRlRWRpdG9yKCk7XG4gICAgICAgIHRoaXMuYmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgICAgICB0aGlzLmJyaWRnZSA9IGN0eC5icmlkZ2U7XG4gICAgICAgIHRoaXMub24gPSBuZXcgaG9va3NfMS5EZXZ0b29sc0hvb2thYmxlKGN0eCk7XG4gICAgfVxuICAgIGFzeW5jIGNhbGxIb29rKGV2ZW50VHlwZSwgcGF5bG9hZCwgY3R4ID0gdGhpcy5jdHgpIHtcbiAgICAgICAgcGF5bG9hZCA9IGF3YWl0IHRoaXMub24uY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgcGF5bG9hZCwgY3R4KTtcbiAgICAgICAgZm9yIChjb25zdCBvbiBvZiBwbHVnaW5Pbikge1xuICAgICAgICAgICAgcGF5bG9hZCA9IGF3YWl0IG9uLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfVxuICAgIGFzeW5jIHRyYW5zZm9ybUNhbGwoY2FsbE5hbWUsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJ0cmFuc2Zvcm1DYWxsXCIgLyogVFJBTlNGT1JNX0NBTEwgKi8sIHtcbiAgICAgICAgICAgIGNhbGxOYW1lLFxuICAgICAgICAgICAgaW5BcmdzOiBhcmdzLFxuICAgICAgICAgICAgb3V0QXJnczogYXJncy5zbGljZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQub3V0QXJncztcbiAgICB9XG4gICAgYXN5bmMgZ2V0QXBwUmVjb3JkTmFtZShhcHAsIGRlZmF1bHROYW1lKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0QXBwUmVjb3JkTmFtZVwiIC8qIEdFVF9BUFBfUkVDT1JEX05BTUUgKi8sIHtcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGF5bG9hZC5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZC5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGBBcHAgJHtkZWZhdWx0TmFtZX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGdldEFwcFJvb3RJbnN0YW5jZShhcHApIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRBcHBSb290SW5zdGFuY2VcIiAvKiBHRVRfQVBQX1JPT1RfSU5TVEFOQ0UgKi8sIHtcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgIHJvb3Q6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5yb290O1xuICAgIH1cbiAgICBhc3luYyByZWdpc3RlckFwcGxpY2F0aW9uKGFwcCkge1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGxIb29rKFwicmVnaXN0ZXJBcHBsaWNhdGlvblwiIC8qIFJFR0lTVEVSX0FQUExJQ0FUSU9OICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyB3YWxrQ29tcG9uZW50VHJlZShpbnN0YW5jZSwgbWF4RGVwdGggPSAtMSwgZmlsdGVyID0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcIndhbGtDb21wb25lbnRUcmVlXCIgLyogV0FMS19DT01QT05FTlRfVFJFRSAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgY29tcG9uZW50VHJlZURhdGE6IG51bGwsXG4gICAgICAgICAgICBtYXhEZXB0aCxcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLmNvbXBvbmVudFRyZWVEYXRhO1xuICAgIH1cbiAgICBhc3luYyB2aXNpdENvbXBvbmVudFRyZWUoaW5zdGFuY2UsIHRyZWVOb2RlLCBmaWx0ZXIgPSBudWxsLCBhcHApIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJ2aXNpdENvbXBvbmVudFRyZWVcIiAvKiBWSVNJVF9DT01QT05FTlRfVFJFRSAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgdHJlZU5vZGUsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC50cmVlTm9kZTtcbiAgICB9XG4gICAgYXN5bmMgd2Fsa0NvbXBvbmVudFBhcmVudHMoaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJ3YWxrQ29tcG9uZW50UGFyZW50c1wiIC8qIFdBTEtfQ09NUE9ORU5UX1BBUkVOVFMgKi8sIHtcbiAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIHBhcmVudEluc3RhbmNlczogW10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5wYXJlbnRJbnN0YW5jZXM7XG4gICAgfVxuICAgIGFzeW5jIGluc3BlY3RDb21wb25lbnQoaW5zdGFuY2UsIGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImluc3BlY3RDb21wb25lbnRcIiAvKiBJTlNQRUNUX0NPTVBPTkVOVCAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgaW5zdGFuY2VEYXRhOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuaW5zdGFuY2VEYXRhO1xuICAgIH1cbiAgICBhc3luYyBnZXRDb21wb25lbnRCb3VuZHMoaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRDb21wb25lbnRCb3VuZHNcIiAvKiBHRVRfQ09NUE9ORU5UX0JPVU5EUyAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgYm91bmRzOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuYm91bmRzO1xuICAgIH1cbiAgICBhc3luYyBnZXRDb21wb25lbnROYW1lKGluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0Q29tcG9uZW50TmFtZVwiIC8qIEdFVF9DT01QT05FTlRfTkFNRSAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLm5hbWU7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudEluc3RhbmNlcyhhcHApIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRDb21wb25lbnRJbnN0YW5jZXNcIiAvKiBHRVRfQ09NUE9ORU5UX0lOU1RBTkNFUyAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2VzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlcztcbiAgICB9XG4gICAgYXN5bmMgZ2V0RWxlbWVudENvbXBvbmVudChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0RWxlbWVudENvbXBvbmVudFwiIC8qIEdFVF9FTEVNRU5UX0NPTVBPTkVOVCAqLywge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudFJvb3RFbGVtZW50cyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldENvbXBvbmVudFJvb3RFbGVtZW50c1wiIC8qIEdFVF9DT01QT05FTlRfUk9PVF9FTEVNRU5UUyAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgcm9vdEVsZW1lbnRzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnJvb3RFbGVtZW50cztcbiAgICB9XG4gICAgYXN5bmMgZWRpdENvbXBvbmVudFN0YXRlKGluc3RhbmNlLCBkb3RQYXRoLCB0eXBlLCBzdGF0ZSwgYXBwKSB7XG4gICAgICAgIGNvbnN0IGFycmF5UGF0aCA9IGRvdFBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJlZGl0Q29tcG9uZW50U3RhdGVcIiAvKiBFRElUX0NPTVBPTkVOVF9TVEFURSAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgcGF0aDogYXJyYXlQYXRoLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc2V0OiAob2JqZWN0LCBwYXRoID0gYXJyYXlQYXRoLCB2YWx1ZSA9IHN0YXRlLnZhbHVlLCBjYikgPT4gdGhpcy5zdGF0ZUVkaXRvci5zZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY2IgfHwgdGhpcy5zdGF0ZUVkaXRvci5jcmVhdGVEZWZhdWx0U2V0Q2FsbGJhY2soc3RhdGUpKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH1cbiAgICBhc3luYyBnZXRDb21wb25lbnREZXZ0b29sc09wdGlvbnMoaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRBcHBEZXZ0b29sc09wdGlvbnNcIiAvKiBHRVRfQ09NUE9ORU5UX0RFVlRPT0xTX09QVElPTlMgKi8sIHtcbiAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5vcHRpb25zIHx8IHt9O1xuICAgIH1cbiAgICBhc3luYyBnZXRDb21wb25lbnRSZW5kZXJDb2RlKGluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0Q29tcG9uZW50UmVuZGVyQ29kZVwiIC8qIEdFVF9DT01QT05FTlRfUkVOREVSX0NPREUgKi8sIHtcbiAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIGNvZGU6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZTogcGF5bG9hZC5jb2RlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBpbnNwZWN0VGltZWxpbmVFdmVudChldmVudERhdGEsIGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImluc3BlY3RUaW1lbGluZUV2ZW50XCIgLyogSU5TUEVDVF9USU1FTElORV9FVkVOVCAqLywge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50RGF0YS5ldmVudCxcbiAgICAgICAgICAgIGxheWVySWQ6IGV2ZW50RGF0YS5sYXllcklkLFxuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgZGF0YTogZXZlbnREYXRhLmV2ZW50LmRhdGEsXG4gICAgICAgICAgICBhbGw6IGV2ZW50RGF0YS5hbGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5kYXRhO1xuICAgIH1cbiAgICBhc3luYyBjbGVhclRpbWVsaW5lKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGxIb29rKFwidGltZWxpbmVDbGVhcmVkXCIgLyogVElNRUxJTkVfQ0xFQVJFRCAqLywge30pO1xuICAgIH1cbiAgICBhc3luYyBnZXRJbnNwZWN0b3JUcmVlKGluc3BlY3RvcklkLCBhcHAsIGZpbHRlcikge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldEluc3BlY3RvclRyZWVcIiAvKiBHRVRfSU5TUEVDVE9SX1RSRUUgKi8sIHtcbiAgICAgICAgICAgIGluc3BlY3RvcklkLFxuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgcm9vdE5vZGVzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnJvb3ROb2RlcztcbiAgICB9XG4gICAgYXN5bmMgZ2V0SW5zcGVjdG9yU3RhdGUoaW5zcGVjdG9ySWQsIGFwcCwgbm9kZUlkKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0SW5zcGVjdG9yU3RhdGVcIiAvKiBHRVRfSU5TUEVDVE9SX1NUQVRFICovLCB7XG4gICAgICAgICAgICBpbnNwZWN0b3JJZCxcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICAgIHN0YXRlOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuc3RhdGU7XG4gICAgfVxuICAgIGFzeW5jIGVkaXRJbnNwZWN0b3JTdGF0ZShpbnNwZWN0b3JJZCwgYXBwLCBub2RlSWQsIGRvdFBhdGgsIHR5cGUsIHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IGFycmF5UGF0aCA9IGRvdFBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsSG9vayhcImVkaXRJbnNwZWN0b3JTdGF0ZVwiIC8qIEVESVRfSU5TUEVDVE9SX1NUQVRFICovLCB7XG4gICAgICAgICAgICBpbnNwZWN0b3JJZCxcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICAgIHBhdGg6IGFycmF5UGF0aCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHNldDogKG9iamVjdCwgcGF0aCA9IGFycmF5UGF0aCwgdmFsdWUgPSBzdGF0ZS52YWx1ZSwgY2IpID0+IHRoaXMuc3RhdGVFZGl0b3Iuc2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGNiIHx8IHRoaXMuc3RhdGVFZGl0b3IuY3JlYXRlRGVmYXVsdFNldENhbGxiYWNrKHN0YXRlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRGV2dG9vbHNBcGkgPSBEZXZ0b29sc0FwaTtcbmNsYXNzIERldnRvb2xzUGx1Z2luQXBpSW5zdGFuY2Uge1xuICAgIGNvbnN0cnVjdG9yKHBsdWdpbiwgYXBwUmVjb3JkLCBjdHgpIHtcbiAgICAgICAgdGhpcy5icmlkZ2UgPSBjdHguYnJpZGdlO1xuICAgICAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgICAgIHRoaXMuYXBwUmVjb3JkID0gYXBwUmVjb3JkO1xuICAgICAgICB0aGlzLmJhY2tlbmRBcGkgPSBhcHBSZWNvcmQuYmFja2VuZC5hcGk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0gKDAsIHNoYXJlZF91dGlsc18xLmdldFBsdWdpbkRlZmF1bHRTZXR0aW5ncykocGx1Z2luLmRlc2NyaXB0b3Iuc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLm9uID0gbmV3IGhvb2tzXzEuRGV2dG9vbHNIb29rYWJsZShjdHgsIHBsdWdpbik7XG4gICAgICAgIHBsdWdpbk9uLnB1c2godGhpcy5vbik7XG4gICAgfVxuICAgIC8vIFBsdWdpbiBBUElcbiAgICBhc3luYyBub3RpZnlDb21wb25lbnRVcGRhdGUoaW5zdGFuY2UgPSBudWxsKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfVVBEQVRFRCwgLi4uYXdhaXQgdGhpcy5iYWNrZW5kQXBpLnRyYW5zZm9ybUNhbGwoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfVVBEQVRFRCwgaW5zdGFuY2UpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VUERBVEVEKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRUaW1lbGluZUxheWVyKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLlRJTUVMSU5FKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuVElNRUxJTkVfTEFZRVJfQURERUQsIG9wdGlvbnMsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGFkZFRpbWVsaW5lRXZlbnQob3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uVElNRUxJTkUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5USU1FTElORV9FVkVOVF9BRERFRCwgb3B0aW9ucywgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYWRkSW5zcGVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNVU1RPTV9JTlNQRUNUT1IpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX0FERCwgb3B0aW9ucywgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2VuZEluc3BlY3RvclRyZWUoaW5zcGVjdG9ySWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNVU1RPTV9JTlNQRUNUT1IpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX1NFTkRfVFJFRSwgaW5zcGVjdG9ySWQsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNlbmRJbnNwZWN0b3JTdGF0ZShpbnNwZWN0b3JJZCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VORF9TVEFURSwgaW5zcGVjdG9ySWQsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNlbGVjdEluc3BlY3Rvck5vZGUoaW5zcGVjdG9ySWQsIG5vZGVJZCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VMRUNUX05PREUsIGluc3BlY3RvcklkLCBub2RlSWQsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldENvbXBvbmVudEJvdW5kcyhpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kQXBpLmdldENvbXBvbmVudEJvdW5kcyhpbnN0YW5jZSk7XG4gICAgfVxuICAgIGdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZEFwaS5nZXRDb21wb25lbnROYW1lKGluc3RhbmNlKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50SW5zdGFuY2VzKGFwcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kQXBpLmdldENvbXBvbmVudEluc3RhbmNlcyhhcHApO1xuICAgIH1cbiAgICBoaWdobGlnaHRFbGVtZW50KGluc3RhbmNlKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX0hJR0hMSUdIVCwgaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHVuaGlnaGxpZ2h0RWxlbWVudCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfVU5ISUdITElHSFQsIHRoaXMucGx1Z2luKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldFNldHRpbmdzKHBsdWdpbklkKSB7XG4gICAgICAgIHJldHVybiAoMCwgc2hhcmVkX3V0aWxzXzEuZ2V0UGx1Z2luU2V0dGluZ3MpKHBsdWdpbklkICE9PSBudWxsICYmIHBsdWdpbklkICE9PSB2b2lkIDAgPyBwbHVnaW5JZCA6IHRoaXMucGx1Z2luLmRlc2NyaXB0b3IuaWQsIHRoaXMuZGVmYXVsdFNldHRpbmdzKTtcbiAgICB9XG4gICAgc2V0U2V0dGluZ3ModmFsdWUsIHBsdWdpbklkKSB7XG4gICAgICAgICgwLCBzaGFyZWRfdXRpbHNfMS5zZXRQbHVnaW5TZXR0aW5ncykocGx1Z2luSWQgIT09IG51bGwgJiYgcGx1Z2luSWQgIT09IHZvaWQgMCA/IHBsdWdpbklkIDogdGhpcy5wbHVnaW4uZGVzY3JpcHRvci5pZCwgdmFsdWUpO1xuICAgIH1cbiAgICBnZXQgZW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBzaGFyZWRfdXRpbHNfMS5oYXNQbHVnaW5QZXJtaXNzaW9uKSh0aGlzLnBsdWdpbi5kZXNjcmlwdG9yLmlkLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkVOQUJMRUQpO1xuICAgIH1cbiAgICBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb24pIHtcbiAgICAgICAgcmV0dXJuICgwLCBzaGFyZWRfdXRpbHNfMS5oYXNQbHVnaW5QZXJtaXNzaW9uKSh0aGlzLnBsdWdpbi5kZXNjcmlwdG9yLmlkLCBwZXJtaXNzaW9uKTtcbiAgICB9XG59XG5leHBvcnRzLkRldnRvb2xzUGx1Z2luQXBpSW5zdGFuY2UgPSBEZXZ0b29sc1BsdWdpbkFwaUluc3RhbmNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBpLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32423\n");
|
|
38
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.DevtoolsPluginApiInstance = exports.DevtoolsApi = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst devtools_api_1 = __webpack_require__(13508);\n\nconst hooks_1 = __webpack_require__(29618);\n\nconst pluginOn = [];\n\nclass DevtoolsApi {\n constructor(backend, ctx) {\n this.stateEditor = new shared_utils_1.StateEditor();\n this.backend = backend;\n this.ctx = ctx;\n this.bridge = ctx.bridge;\n this.on = new hooks_1.DevtoolsHookable(ctx);\n }\n\n async callHook(eventType, payload, ctx = this.ctx) {\n payload = await this.on.callHandlers(eventType, payload, ctx);\n\n for (const on of pluginOn) {\n payload = await on.callHandlers(eventType, payload, ctx);\n }\n\n return payload;\n }\n\n async transformCall(callName, ...args) {\n const payload = await this.callHook(\"transformCall\"\n /* TRANSFORM_CALL */\n , {\n callName,\n inArgs: args,\n outArgs: args.slice()\n });\n return payload.outArgs;\n }\n\n async getAppRecordName(app, defaultName) {\n const payload = await this.callHook(\"getAppRecordName\"\n /* GET_APP_RECORD_NAME */\n , {\n app,\n name: null\n });\n\n if (payload.name) {\n return payload.name;\n } else {\n return `App ${defaultName}`;\n }\n }\n\n async getAppRootInstance(app) {\n const payload = await this.callHook(\"getAppRootInstance\"\n /* GET_APP_ROOT_INSTANCE */\n , {\n app,\n root: null\n });\n return payload.root;\n }\n\n async registerApplication(app) {\n await this.callHook(\"registerApplication\"\n /* REGISTER_APPLICATION */\n , {\n app\n });\n }\n\n async walkComponentTree(instance, maxDepth = -1, filter = null) {\n const payload = await this.callHook(\"walkComponentTree\"\n /* WALK_COMPONENT_TREE */\n , {\n componentInstance: instance,\n componentTreeData: null,\n maxDepth,\n filter\n });\n return payload.componentTreeData;\n }\n\n async visitComponentTree(instance, treeNode, filter = null, app) {\n const payload = await this.callHook(\"visitComponentTree\"\n /* VISIT_COMPONENT_TREE */\n , {\n app,\n componentInstance: instance,\n treeNode,\n filter\n });\n return payload.treeNode;\n }\n\n async walkComponentParents(instance) {\n const payload = await this.callHook(\"walkComponentParents\"\n /* WALK_COMPONENT_PARENTS */\n , {\n componentInstance: instance,\n parentInstances: []\n });\n return payload.parentInstances;\n }\n\n async inspectComponent(instance, app) {\n const payload = await this.callHook(\"inspectComponent\"\n /* INSPECT_COMPONENT */\n , {\n app,\n componentInstance: instance,\n instanceData: null\n });\n return payload.instanceData;\n }\n\n async getComponentBounds(instance) {\n const payload = await this.callHook(\"getComponentBounds\"\n /* GET_COMPONENT_BOUNDS */\n , {\n componentInstance: instance,\n bounds: null\n });\n return payload.bounds;\n }\n\n async getComponentName(instance) {\n const payload = await this.callHook(\"getComponentName\"\n /* GET_COMPONENT_NAME */\n , {\n componentInstance: instance,\n name: null\n });\n return payload.name;\n }\n\n async getComponentInstances(app) {\n const payload = await this.callHook(\"getComponentInstances\"\n /* GET_COMPONENT_INSTANCES */\n , {\n app,\n componentInstances: []\n });\n return payload.componentInstances;\n }\n\n async getElementComponent(element) {\n const payload = await this.callHook(\"getElementComponent\"\n /* GET_ELEMENT_COMPONENT */\n , {\n element,\n componentInstance: null\n });\n return payload.componentInstance;\n }\n\n async getComponentRootElements(instance) {\n const payload = await this.callHook(\"getComponentRootElements\"\n /* GET_COMPONENT_ROOT_ELEMENTS */\n , {\n componentInstance: instance,\n rootElements: []\n });\n return payload.rootElements;\n }\n\n async editComponentState(instance, dotPath, type, state, app) {\n const arrayPath = dotPath.split('.');\n const payload = await this.callHook(\"editComponentState\"\n /* EDIT_COMPONENT_STATE */\n , {\n app,\n componentInstance: instance,\n path: arrayPath,\n type,\n state,\n set: (object, path = arrayPath, value = state.value, cb) => this.stateEditor.set(object, path, value, cb || this.stateEditor.createDefaultSetCallback(state))\n });\n return payload.componentInstance;\n }\n\n async getComponentDevtoolsOptions(instance) {\n const payload = await this.callHook(\"getAppDevtoolsOptions\"\n /* GET_COMPONENT_DEVTOOLS_OPTIONS */\n , {\n componentInstance: instance,\n options: null\n });\n return payload.options || {};\n }\n\n async getComponentRenderCode(instance) {\n const payload = await this.callHook(\"getComponentRenderCode\"\n /* GET_COMPONENT_RENDER_CODE */\n , {\n componentInstance: instance,\n code: null\n });\n return {\n code: payload.code\n };\n }\n\n async inspectTimelineEvent(eventData, app) {\n const payload = await this.callHook(\"inspectTimelineEvent\"\n /* INSPECT_TIMELINE_EVENT */\n , {\n event: eventData.event,\n layerId: eventData.layerId,\n app,\n data: eventData.event.data,\n all: eventData.all\n });\n return payload.data;\n }\n\n async clearTimeline() {\n await this.callHook(\"timelineCleared\"\n /* TIMELINE_CLEARED */\n , {});\n }\n\n async getInspectorTree(inspectorId, app, filter) {\n const payload = await this.callHook(\"getInspectorTree\"\n /* GET_INSPECTOR_TREE */\n , {\n inspectorId,\n app,\n filter,\n rootNodes: []\n });\n return payload.rootNodes;\n }\n\n async getInspectorState(inspectorId, app, nodeId) {\n const payload = await this.callHook(\"getInspectorState\"\n /* GET_INSPECTOR_STATE */\n , {\n inspectorId,\n app,\n nodeId,\n state: null\n });\n return payload.state;\n }\n\n async editInspectorState(inspectorId, app, nodeId, dotPath, type, state) {\n const arrayPath = dotPath.split('.');\n await this.callHook(\"editInspectorState\"\n /* EDIT_INSPECTOR_STATE */\n , {\n inspectorId,\n app,\n nodeId,\n path: arrayPath,\n type,\n state,\n set: (object, path = arrayPath, value = state.value, cb) => this.stateEditor.set(object, path, value, cb || this.stateEditor.createDefaultSetCallback(state))\n });\n }\n\n now() {\n return (0, devtools_api_1.now)();\n }\n\n}\n\nexports.DevtoolsApi = DevtoolsApi;\n\nclass DevtoolsPluginApiInstance {\n constructor(plugin, appRecord, ctx) {\n this.bridge = ctx.bridge;\n this.ctx = ctx;\n this.plugin = plugin;\n this.appRecord = appRecord;\n this.backendApi = appRecord.backend.api;\n this.defaultSettings = (0, shared_utils_1.getPluginDefaultSettings)(plugin.descriptor.settings);\n this.on = new hooks_1.DevtoolsHookable(ctx, plugin);\n pluginOn.push(this.on);\n } // Plugin API\n\n\n async notifyComponentUpdate(instance = null) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return;\n\n if (instance) {\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UPDATED, ...(await this.backendApi.transformCall(shared_utils_1.HookEvents.COMPONENT_UPDATED, instance)));\n } else {\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UPDATED);\n }\n }\n\n addTimelineLayer(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.TIMELINE)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.TIMELINE_LAYER_ADDED, options, this.plugin);\n return true;\n }\n\n addTimelineEvent(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.TIMELINE)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.TIMELINE_EVENT_ADDED, options, this.plugin);\n return true;\n }\n\n addInspector(options) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_ADD, options, this.plugin);\n return true;\n }\n\n sendInspectorTree(inspectorId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_TREE, inspectorId, this.plugin);\n return true;\n }\n\n sendInspectorState(inspectorId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_STATE, inspectorId, this.plugin);\n return true;\n }\n\n selectInspectorNode(inspectorId, nodeId) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.CUSTOM_INSPECTOR)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SELECT_NODE, inspectorId, nodeId, this.plugin);\n return true;\n }\n\n getComponentBounds(instance) {\n return this.backendApi.getComponentBounds(instance);\n }\n\n getComponentName(instance) {\n return this.backendApi.getComponentName(instance);\n }\n\n getComponentInstances(app) {\n return this.backendApi.getComponentInstances(app);\n }\n\n highlightElement(instance) {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_HIGHLIGHT, instance.__VUE_DEVTOOLS_UID__, this.plugin);\n return true;\n }\n\n unhighlightElement() {\n if (!this.enabled || !this.hasPermission(shared_utils_1.PluginPermission.COMPONENTS)) return false;\n this.ctx.hook.emit(shared_utils_1.HookEvents.COMPONENT_UNHIGHLIGHT, this.plugin);\n return true;\n }\n\n getSettings(pluginId) {\n return (0, shared_utils_1.getPluginSettings)(pluginId !== null && pluginId !== void 0 ? pluginId : this.plugin.descriptor.id, this.defaultSettings);\n }\n\n setSettings(value, pluginId) {\n (0, shared_utils_1.setPluginSettings)(pluginId !== null && pluginId !== void 0 ? pluginId : this.plugin.descriptor.id, value);\n }\n\n now() {\n return (0, devtools_api_1.now)();\n }\n\n get enabled() {\n return (0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, shared_utils_1.PluginPermission.ENABLED);\n }\n\n hasPermission(permission) {\n return (0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, permission);\n }\n\n}\n\nexports.DevtoolsPluginApiInstance = DevtoolsPluginApiInstance;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxDQUF0QixFQUF1RSxPQUFPLEtBQVA7QUFFdkUsU0FBSyxHQUFMLENBQVMsSUFBVCxDQUFjLElBQWQsQ0FBbUIsMEJBQVcscUJBQTlCLEVBQXFELEtBQUssTUFBMUQ7QUFDQSxXQUFPLElBQVA7QUFDRDs7QUFFRCxhQUFXLENBQUUsUUFBRixFQUFtQjtBQUM1QixXQUFPLHNDQUFrQixRQUFRLFNBQVIsWUFBUSxXQUFSLGNBQVksS0FBSyxNQUFMLENBQVksVUFBWixDQUF1QixFQUFyRCxFQUF5RCxLQUFLLGVBQTlELENBQVA7QUFDRDs7QUFFRCxhQUFXLENBQUUsS0FBRixFQUFvQixRQUFwQixFQUFxQztBQUM5QywwQ0FBa0IsUUFBUSxTQUFSLFlBQVEsV0FBUixjQUFZLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsRUFBckQsRUFBeUQsS0FBekQ7QUFDRDs7QUFFRCxLQUFHO0FBQ0QsV0FBTyx5QkFBUDtBQUNEOztBQUVrQixNQUFQLE9BQU87QUFDakIsV0FBTyx3Q0FBb0IsS0FBSyxNQUFMLENBQVksVUFBWixDQUF1QixFQUEzQyxFQUErQyxnQ0FBaUIsT0FBaEUsQ0FBUDtBQUNEOztBQUVPLGVBQWEsQ0FBRSxVQUFGLEVBQThCO0FBQ2pELFdBQU8sd0NBQW9CLEtBQUssTUFBTCxDQUFZLFVBQVosQ0FBdUIsRUFBM0MsRUFBK0MsVUFBL0MsQ0FBUDtBQUNEOztBQXRIbUM7O0FBQXRDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvYXBpLnRzP2FkMTUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRldnRvb2xzUGx1Z2luQXBpSW5zdGFuY2UgPSBleHBvcnRzLkRldnRvb2xzQXBpID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBkZXZ0b29sc19hcGlfMSA9IHJlcXVpcmUoXCJAdnVlL2RldnRvb2xzLWFwaVwiKTtcbmNvbnN0IGhvb2tzXzEgPSByZXF1aXJlKFwiLi9ob29rc1wiKTtcbmNvbnN0IHBsdWdpbk9uID0gW107XG5jbGFzcyBEZXZ0b29sc0FwaSB7XG4gICAgY29uc3RydWN0b3IoYmFja2VuZCwgY3R4KSB7XG4gICAgICAgIHRoaXMuc3RhdGVFZGl0b3IgPSBuZXcgc2hhcmVkX3V0aWxzXzEuU3RhdGVFZGl0b3IoKTtcbiAgICAgICAgdGhpcy5iYWNrZW5kID0gYmFja2VuZDtcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XG4gICAgICAgIHRoaXMuYnJpZGdlID0gY3R4LmJyaWRnZTtcbiAgICAgICAgdGhpcy5vbiA9IG5ldyBob29rc18xLkRldnRvb2xzSG9va2FibGUoY3R4KTtcbiAgICB9XG4gICAgYXN5bmMgY2FsbEhvb2soZXZlbnRUeXBlLCBwYXlsb2FkLCBjdHggPSB0aGlzLmN0eCkge1xuICAgICAgICBwYXlsb2FkID0gYXdhaXQgdGhpcy5vbi5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBwYXlsb2FkLCBjdHgpO1xuICAgICAgICBmb3IgKGNvbnN0IG9uIG9mIHBsdWdpbk9uKSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gYXdhaXQgb24uY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgcGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgYXN5bmMgdHJhbnNmb3JtQ2FsbChjYWxsTmFtZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcInRyYW5zZm9ybUNhbGxcIiAvKiBUUkFOU0ZPUk1fQ0FMTCAqLywge1xuICAgICAgICAgICAgY2FsbE5hbWUsXG4gICAgICAgICAgICBpbkFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICBvdXRBcmdzOiBhcmdzLnNsaWNlKCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5vdXRBcmdzO1xuICAgIH1cbiAgICBhc3luYyBnZXRBcHBSZWNvcmROYW1lKGFwcCwgZGVmYXVsdE5hbWUpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRBcHBSZWNvcmROYW1lXCIgLyogR0VUX0FQUF9SRUNPUkRfTkFNRSAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwYXlsb2FkLm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYEFwcCAke2RlZmF1bHROYW1lfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0QXBwUm9vdEluc3RhbmNlKGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldEFwcFJvb3RJbnN0YW5jZVwiIC8qIEdFVF9BUFBfUk9PVF9JTlNUQU5DRSAqLywge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgcm9vdDogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnJvb3Q7XG4gICAgfVxuICAgIGFzeW5jIHJlZ2lzdGVyQXBwbGljYXRpb24oYXBwKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbEhvb2soXCJyZWdpc3RlckFwcGxpY2F0aW9uXCIgLyogUkVHSVNURVJfQVBQTElDQVRJT04gKi8sIHtcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHdhbGtDb21wb25lbnRUcmVlKGluc3RhbmNlLCBtYXhEZXB0aCA9IC0xLCBmaWx0ZXIgPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwid2Fsa0NvbXBvbmVudFRyZWVcIiAvKiBXQUxLX0NPTVBPTkVOVF9UUkVFICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBjb21wb25lbnRUcmVlRGF0YTogbnVsbCxcbiAgICAgICAgICAgIG1heERlcHRoLFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50VHJlZURhdGE7XG4gICAgfVxuICAgIGFzeW5jIHZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIGZpbHRlciA9IG51bGwsIGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcInZpc2l0Q29tcG9uZW50VHJlZVwiIC8qIFZJU0lUX0NPTVBPTkVOVF9UUkVFICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICB0cmVlTm9kZSxcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnRyZWVOb2RlO1xuICAgIH1cbiAgICBhc3luYyB3YWxrQ29tcG9uZW50UGFyZW50cyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcIndhbGtDb21wb25lbnRQYXJlbnRzXCIgLyogV0FMS19DT01QT05FTlRfUEFSRU5UUyAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgcGFyZW50SW5zdGFuY2VzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLnBhcmVudEluc3RhbmNlcztcbiAgICB9XG4gICAgYXN5bmMgaW5zcGVjdENvbXBvbmVudChpbnN0YW5jZSwgYXBwKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiaW5zcGVjdENvbXBvbmVudFwiIC8qIElOU1BFQ1RfQ09NUE9ORU5UICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBpbnN0YW5jZURhdGE6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5pbnN0YW5jZURhdGE7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudEJvdW5kcyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldENvbXBvbmVudEJvdW5kc1wiIC8qIEdFVF9DT01QT05FTlRfQk9VTkRTICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBib3VuZHM6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5ib3VuZHM7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRDb21wb25lbnROYW1lXCIgLyogR0VUX0NPTVBPTkVOVF9OQU1FICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQubmFtZTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q29tcG9uZW50SW5zdGFuY2VzKGFwcCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldENvbXBvbmVudEluc3RhbmNlc1wiIC8qIEdFVF9DT01QT05FTlRfSU5TVEFOQ0VTICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZXM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2VzO1xuICAgIH1cbiAgICBhc3luYyBnZXRFbGVtZW50Q29tcG9uZW50KGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRFbGVtZW50Q29tcG9uZW50XCIgLyogR0VUX0VMRU1FTlRfQ09NUE9ORU5UICovLCB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKGluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzXCIgLyogR0VUX0NPTVBPTkVOVF9ST09UX0VMRU1FTlRTICovLCB7XG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICByb290RWxlbWVudHM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQucm9vdEVsZW1lbnRzO1xuICAgIH1cbiAgICBhc3luYyBlZGl0Q29tcG9uZW50U3RhdGUoaW5zdGFuY2UsIGRvdFBhdGgsIHR5cGUsIHN0YXRlLCBhcHApIHtcbiAgICAgICAgY29uc3QgYXJyYXlQYXRoID0gZG90UGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImVkaXRDb21wb25lbnRTdGF0ZVwiIC8qIEVESVRfQ09NUE9ORU5UX1NUQVRFICovLCB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBwYXRoOiBhcnJheVBhdGgsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBzZXQ6IChvYmplY3QsIHBhdGggPSBhcnJheVBhdGgsIHZhbHVlID0gc3RhdGUudmFsdWUsIGNiKSA9PiB0aGlzLnN0YXRlRWRpdG9yLnNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjYiB8fCB0aGlzLnN0YXRlRWRpdG9yLmNyZWF0ZURlZmF1bHRTZXRDYWxsYmFjayhzdGF0ZSkpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudERldnRvb2xzT3B0aW9ucyhpbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5jYWxsSG9vayhcImdldEFwcERldnRvb2xzT3B0aW9uc1wiIC8qIEdFVF9DT01QT05FTlRfREVWVE9PTFNfT1BUSU9OUyAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLm9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIGFzeW5jIGdldENvbXBvbmVudFJlbmRlckNvZGUoaW5zdGFuY2UpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRDb21wb25lbnRSZW5kZXJDb2RlXCIgLyogR0VUX0NPTVBPTkVOVF9SRU5ERVJfQ09ERSAqLywge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgY29kZTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiBwYXlsb2FkLmNvZGUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGluc3BlY3RUaW1lbGluZUV2ZW50KGV2ZW50RGF0YSwgYXBwKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiaW5zcGVjdFRpbWVsaW5lRXZlbnRcIiAvKiBJTlNQRUNUX1RJTUVMSU5FX0VWRU5UICovLCB7XG4gICAgICAgICAgICBldmVudDogZXZlbnREYXRhLmV2ZW50LFxuICAgICAgICAgICAgbGF5ZXJJZDogZXZlbnREYXRhLmxheWVySWQsXG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBkYXRhOiBldmVudERhdGEuZXZlbnQuZGF0YSxcbiAgICAgICAgICAgIGFsbDogZXZlbnREYXRhLmFsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkLmRhdGE7XG4gICAgfVxuICAgIGFzeW5jIGNsZWFyVGltZWxpbmUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbEhvb2soXCJ0aW1lbGluZUNsZWFyZWRcIiAvKiBUSU1FTElORV9DTEVBUkVEICovLCB7fSk7XG4gICAgfVxuICAgIGFzeW5jIGdldEluc3BlY3RvclRyZWUoaW5zcGVjdG9ySWQsIGFwcCwgZmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZ2V0SW5zcGVjdG9yVHJlZVwiIC8qIEdFVF9JTlNQRUNUT1JfVFJFRSAqLywge1xuICAgICAgICAgICAgaW5zcGVjdG9ySWQsXG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICByb290Tm9kZXM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQucm9vdE5vZGVzO1xuICAgIH1cbiAgICBhc3luYyBnZXRJbnNwZWN0b3JTdGF0ZShpbnNwZWN0b3JJZCwgYXBwLCBub2RlSWQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHRoaXMuY2FsbEhvb2soXCJnZXRJbnNwZWN0b3JTdGF0ZVwiIC8qIEdFVF9JTlNQRUNUT1JfU1RBVEUgKi8sIHtcbiAgICAgICAgICAgIGluc3BlY3RvcklkLFxuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgICAgc3RhdGU6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZC5zdGF0ZTtcbiAgICB9XG4gICAgYXN5bmMgZWRpdEluc3BlY3RvclN0YXRlKGluc3BlY3RvcklkLCBhcHAsIG5vZGVJZCwgZG90UGF0aCwgdHlwZSwgc3RhdGUpIHtcbiAgICAgICAgY29uc3QgYXJyYXlQYXRoID0gZG90UGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGxIb29rKFwiZWRpdEluc3BlY3RvclN0YXRlXCIgLyogRURJVF9JTlNQRUNUT1JfU1RBVEUgKi8sIHtcbiAgICAgICAgICAgIGluc3BlY3RvcklkLFxuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgICAgcGF0aDogYXJyYXlQYXRoLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc2V0OiAob2JqZWN0LCBwYXRoID0gYXJyYXlQYXRoLCB2YWx1ZSA9IHN0YXRlLnZhbHVlLCBjYikgPT4gdGhpcy5zdGF0ZUVkaXRvci5zZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY2IgfHwgdGhpcy5zdGF0ZUVkaXRvci5jcmVhdGVEZWZhdWx0U2V0Q2FsbGJhY2soc3RhdGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vdygpIHtcbiAgICAgICAgcmV0dXJuICgwLCBkZXZ0b29sc19hcGlfMS5ub3cpKCk7XG4gICAgfVxufVxuZXhwb3J0cy5EZXZ0b29sc0FwaSA9IERldnRvb2xzQXBpO1xuY2xhc3MgRGV2dG9vbHNQbHVnaW5BcGlJbnN0YW5jZSB7XG4gICAgY29uc3RydWN0b3IocGx1Z2luLCBhcHBSZWNvcmQsIGN0eCkge1xuICAgICAgICB0aGlzLmJyaWRnZSA9IGN0eC5icmlkZ2U7XG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5hcHBSZWNvcmQgPSBhcHBSZWNvcmQ7XG4gICAgICAgIHRoaXMuYmFja2VuZEFwaSA9IGFwcFJlY29yZC5iYWNrZW5kLmFwaTtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSAoMCwgc2hhcmVkX3V0aWxzXzEuZ2V0UGx1Z2luRGVmYXVsdFNldHRpbmdzKShwbHVnaW4uZGVzY3JpcHRvci5zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMub24gPSBuZXcgaG9va3NfMS5EZXZ0b29sc0hvb2thYmxlKGN0eCwgcGx1Z2luKTtcbiAgICAgICAgcGx1Z2luT24ucHVzaCh0aGlzLm9uKTtcbiAgICB9XG4gICAgLy8gUGx1Z2luIEFQSVxuICAgIGFzeW5jIG5vdGlmeUNvbXBvbmVudFVwZGF0ZShpbnN0YW5jZSA9IG51bGwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VUERBVEVELCAuLi5hd2FpdCB0aGlzLmJhY2tlbmRBcGkudHJhbnNmb3JtQ2FsbChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VUERBVEVELCBpbnN0YW5jZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX1VQREFURUQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZFRpbWVsaW5lTGF5ZXIob3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uVElNRUxJTkUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5USU1FTElORV9MQVlFUl9BRERFRCwgb3B0aW9ucywgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYWRkVGltZWxpbmVFdmVudChvcHRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5USU1FTElORSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRJTUVMSU5FX0VWRU5UX0FEREVELCBvcHRpb25zLCB0aGlzLnBsdWdpbik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhZGRJbnNwZWN0b3Iob3B0aW9ucykge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfQURELCBvcHRpb25zLCB0aGlzLnBsdWdpbik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzZW5kSW5zcGVjdG9yVHJlZShpbnNwZWN0b3JJZCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VORF9UUkVFLCBpbnNwZWN0b3JJZCwgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2VuZEluc3BlY3RvclN0YXRlKGluc3BlY3RvcklkKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DVVNUT01fSU5TUEVDVE9SKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ1VTVE9NX0lOU1BFQ1RPUl9TRU5EX1NUQVRFLCBpbnNwZWN0b3JJZCwgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2VsZWN0SW5zcGVjdG9yTm9kZShpbnNwZWN0b3JJZCwgbm9kZUlkKSB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8ICF0aGlzLmhhc1Blcm1pc3Npb24oc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DVVNUT01fSU5TUEVDVE9SKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5jdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ1VTVE9NX0lOU1BFQ1RPUl9TRUxFQ1RfTk9ERSwgaW5zcGVjdG9ySWQsIG5vZGVJZCwgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhY2tlbmRBcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50TmFtZShpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kQXBpLmdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpO1xuICAgIH1cbiAgICBnZXRDb21wb25lbnRJbnN0YW5jZXMoYXBwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhY2tlbmRBcGkuZ2V0Q29tcG9uZW50SW5zdGFuY2VzKGFwcCk7XG4gICAgfVxuICAgIGhpZ2hsaWdodEVsZW1lbnQoaW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgIXRoaXMuaGFzUGVybWlzc2lvbihzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmN0eC5ob29rLmVtaXQoc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfSElHSExJR0hULCBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXywgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdW5oaWdobGlnaHRFbGVtZW50KCkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5oYXNQZXJtaXNzaW9uKHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VTkhJR0hMSUdIVCwgdGhpcy5wbHVnaW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0U2V0dGluZ3MocGx1Z2luSWQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBzaGFyZWRfdXRpbHNfMS5nZXRQbHVnaW5TZXR0aW5ncykocGx1Z2luSWQgIT09IG51bGwgJiYgcGx1Z2luSWQgIT09IHZvaWQgMCA/IHBsdWdpbklkIDogdGhpcy5wbHVnaW4uZGVzY3JpcHRvci5pZCwgdGhpcy5kZWZhdWx0U2V0dGluZ3MpO1xuICAgIH1cbiAgICBzZXRTZXR0aW5ncyh2YWx1ZSwgcGx1Z2luSWQpIHtcbiAgICAgICAgKDAsIHNoYXJlZF91dGlsc18xLnNldFBsdWdpblNldHRpbmdzKShwbHVnaW5JZCAhPT0gbnVsbCAmJiBwbHVnaW5JZCAhPT0gdm9pZCAwID8gcGx1Z2luSWQgOiB0aGlzLnBsdWdpbi5kZXNjcmlwdG9yLmlkLCB2YWx1ZSk7XG4gICAgfVxuICAgIG5vdygpIHtcbiAgICAgICAgcmV0dXJuICgwLCBkZXZ0b29sc19hcGlfMS5ub3cpKCk7XG4gICAgfVxuICAgIGdldCBlbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gKDAsIHNoYXJlZF91dGlsc18xLmhhc1BsdWdpblBlcm1pc3Npb24pKHRoaXMucGx1Z2luLmRlc2NyaXB0b3IuaWQsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uRU5BQkxFRCk7XG4gICAgfVxuICAgIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbikge1xuICAgICAgICByZXR1cm4gKDAsIHNoYXJlZF91dGlsc18xLmhhc1BsdWdpblBlcm1pc3Npb24pKHRoaXMucGx1Z2luLmRlc2NyaXB0b3IuaWQsIHBlcm1pc3Npb24pO1xuICAgIH1cbn1cbmV4cG9ydHMuRGV2dG9vbHNQbHVnaW5BcGlJbnN0YW5jZSA9IERldnRvb2xzUGx1Z2luQXBpSW5zdGFuY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcGkuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///32423\n");
|
|
39
39
|
|
|
40
40
|
/***/ }),
|
|
41
41
|
|
|
@@ -131,7 +131,15 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
131
131
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
132
132
|
|
|
133
133
|
"use strict";
|
|
134
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getComponentInstance = exports.getComponentId = exports.editComponentState = exports.sendEmptyComponentData = exports.markSelectedInstance = exports.sendSelectedComponentData = exports.sendComponentTreeData = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst app_1 = __webpack_require__(79132);\n\nconst MAX_$VM = 10;\nconst $vmQueue = [];\n\nasync function sendComponentTreeData(appRecord, instanceId, filter = '', maxDepth = null, ctx) {\n if (!instanceId || appRecord !== ctx.currentAppRecord) return; // Flush will send all components in the tree\n // So we skip individiual tree updates\n\n if (instanceId !== '_root' && ctx.currentAppRecord.backend.options.features.includes(app_backend_api_1.BuiltinBackendFeature.FLUSH)) {\n return;\n }\n\n const instance = getComponentInstance(appRecord, instanceId, ctx);\n\n if (!instance) {\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_TREE, {\n instanceId,\n treeData: null,\n notFound: true\n });\n } else {\n if (filter) filter = filter.toLowerCase();\n\n if (maxDepth == null) {\n maxDepth = instance === ctx.currentAppRecord.rootInstance ? 2 : 1;\n }\n\n const data = await appRecord.backend.api.walkComponentTree(instance, maxDepth, filter);\n const payload = {\n instanceId,\n treeData: (0, shared_utils_1.stringify)(data)\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_TREE, payload);\n }\n}\n\nexports.sendComponentTreeData = sendComponentTreeData;\n\nasync function sendSelectedComponentData(appRecord, instanceId, ctx) {\n if (!instanceId || appRecord !== ctx.currentAppRecord) return;\n const instance = getComponentInstance(appRecord, instanceId, ctx);\n\n if (!instance) {\n sendEmptyComponentData(instanceId, ctx);\n } else {\n // Expose instance on window\n if (typeof window !== 'undefined') {\n const win = window;\n win.$vm = instance; // $vm0, $vm1, $vm2, ...\n\n if ($vmQueue[0] !== instance) {\n if ($vmQueue.length >= MAX_$VM) {\n $vmQueue.pop();\n }\n\n for (let i = $vmQueue.length; i > 0; i--) {\n win[`$vm${i}`] = $vmQueue[i] = $vmQueue[i - 1];\n }\n\n win.$vm0 = $vmQueue[0] = instance;\n }\n }\n\n if (shared_utils_1.SharedData.debugInfo) {\n // eslint-disable-next-line no-console\n console.log('[DEBUG] inspect', instance);\n }\n\n const parentInstances = await appRecord.backend.api.walkComponentParents(instance);\n const payload = {\n instanceId,\n data: (0, shared_utils_1.stringify)(await appRecord.backend.api.inspectComponent(instance, ctx.currentAppRecord.options.app)),\n parentIds: parentInstances.map(i => i.__VUE_DEVTOOLS_UID__)\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_SELECTED_DATA, payload);\n markSelectedInstance(instanceId, ctx);\n }\n}\n\nexports.sendSelectedComponentData = sendSelectedComponentData;\n\nfunction markSelectedInstance(instanceId, ctx) {\n ctx.currentInspectedComponentId = instanceId;\n ctx.currentAppRecord.lastInspectedComponentId = instanceId;\n}\n\nexports.markSelectedInstance = markSelectedInstance;\n\nfunction sendEmptyComponentData(instanceId, ctx) {\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_SELECTED_DATA, {\n instanceId,\n data: null\n });\n}\n\nexports.sendEmptyComponentData = sendEmptyComponentData;\n\nasync function editComponentState(instanceId, dotPath, type, state, ctx) {\n if (!instanceId) return;\n const instance = getComponentInstance(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n if ('value' in state && state.value != null) {\n state.value = (0, shared_utils_1.parse)(state.value, true);\n }\n\n await ctx.currentAppRecord.backend.api.editComponentState(instance, dotPath, type, state, ctx.currentAppRecord.options.app);\n await sendSelectedComponentData(ctx.currentAppRecord, instanceId, ctx);\n }\n}\n\nexports.editComponentState = editComponentState;\n\nasync function getComponentId(app, uid, instance, ctx) {\n try {\n if (instance.__VUE_DEVTOOLS_UID__) return instance.__VUE_DEVTOOLS_UID__;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n if (!appRecord) return null;\n const isRoot = appRecord.rootInstance === instance;\n return `${appRecord.id}:${isRoot ? 'root' : uid}`;\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n\n return null;\n }\n}\n\nexports.getComponentId = getComponentId;\n\nfunction getComponentInstance(appRecord, instanceId, ctx) {\n if (instanceId === '_root') {\n instanceId = `${appRecord.id}:root`;\n }\n\n const instance = appRecord.instanceMap.get(instanceId);\n\n if (!instance && shared_utils_1.SharedData.debugInfo) {\n console.warn(`Instance uid=${instanceId} not found`);\n }\n\n return instance;\n}\n\nexports.getComponentInstance = getComponentInstance;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDVixRQUFJLDBCQUFXLFNBQWYsRUFBMEI7QUFDeEIsYUFBTyxDQUFDLEtBQVIsQ0FBYyxDQUFkO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7QUFDRjs7QUFiRDs7QUFlQSxTQUFnQixvQkFBaEIsQ0FBc0MsU0FBdEMsRUFBNEQsVUFBNUQsRUFBZ0YsR0FBaEYsRUFBbUc7QUFDakcsTUFBSSxVQUFVLEtBQUssT0FBbkIsRUFBNEI7QUFDMUIsY0FBVSxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsT0FBNUI7QUFDRDs7QUFDRCxRQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsV0FBVixDQUFzQixHQUF0QixDQUEwQixVQUExQixDQUFqQjs7QUFDQSxNQUFJLENBQUMsUUFBRCxJQUFhLDBCQUFXLFNBQTVCLEVBQXVDO0FBQ3JDLFdBQU8sQ0FBQyxJQUFSLENBQWEsZ0JBQWdCLFVBQVUsWUFBdkM7QUFDRDs7QUFDRCxTQUFPLFFBQVA7QUFDRDs7QUFURCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2NvbXBvbmVudC50cz9hNzZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDb21wb25lbnRJbnN0YW5jZSA9IGV4cG9ydHMuZ2V0Q29tcG9uZW50SWQgPSBleHBvcnRzLmVkaXRDb21wb25lbnRTdGF0ZSA9IGV4cG9ydHMuc2VuZEVtcHR5Q29tcG9uZW50RGF0YSA9IGV4cG9ydHMubWFya1NlbGVjdGVkSW5zdGFuY2UgPSBleHBvcnRzLnNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEgPSBleHBvcnRzLnNlbmRDb21wb25lbnRUcmVlRGF0YSA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgYXBwX2JhY2tlbmRfYXBpXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9hcHAtYmFja2VuZC1hcGlcIik7XG5jb25zdCBhcHBfMSA9IHJlcXVpcmUoXCIuL2FwcFwiKTtcbmNvbnN0IE1BWF8kVk0gPSAxMDtcbmNvbnN0ICR2bVF1ZXVlID0gW107XG5hc3luYyBmdW5jdGlvbiBzZW5kQ29tcG9uZW50VHJlZURhdGEoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBmaWx0ZXIgPSAnJywgbWF4RGVwdGggPSBudWxsLCBjdHgpIHtcbiAgICBpZiAoIWluc3RhbmNlSWQgfHwgYXBwUmVjb3JkICE9PSBjdHguY3VycmVudEFwcFJlY29yZClcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIEZsdXNoIHdpbGwgc2VuZCBhbGwgY29tcG9uZW50cyBpbiB0aGUgdHJlZVxuICAgIC8vIFNvIHdlIHNraXAgaW5kaXZpZGl1YWwgdHJlZSB1cGRhdGVzXG4gICAgaWYgKGluc3RhbmNlSWQgIT09ICdfcm9vdCcgJiZcbiAgICAgICAgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5vcHRpb25zLmZlYXR1cmVzLmluY2x1ZGVzKGFwcF9iYWNrZW5kX2FwaV8xLkJ1aWx0aW5CYWNrZW5kRmVhdHVyZS5GTFVTSCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldENvbXBvbmVudEluc3RhbmNlKGFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ09NUE9ORU5UX1RSRUUsIHtcbiAgICAgICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgICAgICB0cmVlRGF0YTogbnVsbCxcbiAgICAgICAgICAgIG5vdEZvdW5kOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChmaWx0ZXIpXG4gICAgICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1heERlcHRoID09IG51bGwpIHtcbiAgICAgICAgICAgIG1heERlcHRoID0gaW5zdGFuY2UgPT09IGN0eC5jdXJyZW50QXBwUmVjb3JkLnJvb3RJbnN0YW5jZSA/IDIgOiAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkud2Fsa0NvbXBvbmVudFRyZWUoaW5zdGFuY2UsIG1heERlcHRoLCBmaWx0ZXIpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICAgIHRyZWVEYXRhOiAoMCwgc2hhcmVkX3V0aWxzXzEuc3RyaW5naWZ5KShkYXRhKSxcbiAgICAgICAgfTtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DT01QT05FTlRfVFJFRSwgcGF5bG9hZCk7XG4gICAgfVxufVxuZXhwb3J0cy5zZW5kQ29tcG9uZW50VHJlZURhdGEgPSBzZW5kQ29tcG9uZW50VHJlZURhdGE7XG5hc3luYyBmdW5jdGlvbiBzZW5kU2VsZWN0ZWRDb21wb25lbnREYXRhKGFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KSB7XG4gICAgaWYgKCFpbnN0YW5jZUlkIHx8IGFwcFJlY29yZCAhPT0gY3R4LmN1cnJlbnRBcHBSZWNvcmQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldENvbXBvbmVudEluc3RhbmNlKGFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgIHNlbmRFbXB0eUNvbXBvbmVudERhdGEoaW5zdGFuY2VJZCwgY3R4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIEV4cG9zZSBpbnN0YW5jZSBvbiB3aW5kb3dcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCB3aW4gPSB3aW5kb3c7XG4gICAgICAgICAgICB3aW4uJHZtID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAvLyAkdm0wLCAkdm0xLCAkdm0yLCAuLi5cbiAgICAgICAgICAgIGlmICgkdm1RdWV1ZVswXSAhPT0gaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoJHZtUXVldWUubGVuZ3RoID49IE1BWF8kVk0pIHtcbiAgICAgICAgICAgICAgICAgICAgJHZtUXVldWUucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAkdm1RdWV1ZS5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgd2luW2Akdm0ke2l9YF0gPSAkdm1RdWV1ZVtpXSA9ICR2bVF1ZXVlW2kgLSAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2luLiR2bTAgPSAkdm1RdWV1ZVswXSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbREVCVUddIGluc3BlY3QnLCBpbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2VzID0gYXdhaXQgYXBwUmVjb3JkLmJhY2tlbmQuYXBpLndhbGtDb21wb25lbnRQYXJlbnRzKGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgICAgICBkYXRhOiAoMCwgc2hhcmVkX3V0aWxzXzEuc3RyaW5naWZ5KShhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkuaW5zcGVjdENvbXBvbmVudChpbnN0YW5jZSwgY3R4LmN1cnJlbnRBcHBSZWNvcmQub3B0aW9ucy5hcHApKSxcbiAgICAgICAgICAgIHBhcmVudElkczogcGFyZW50SW5zdGFuY2VzLm1hcChpID0+IGkuX19WVUVfREVWVE9PTFNfVUlEX18pLFxuICAgICAgICB9O1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NPTVBPTkVOVF9TRUxFQ1RFRF9EQVRBLCBwYXlsb2FkKTtcbiAgICAgICAgbWFya1NlbGVjdGVkSW5zdGFuY2UoaW5zdGFuY2VJZCwgY3R4KTtcbiAgICB9XG59XG5leHBvcnRzLnNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEgPSBzZW5kU2VsZWN0ZWRDb21wb25lbnREYXRhO1xuZnVuY3Rpb24gbWFya1NlbGVjdGVkSW5zdGFuY2UoaW5zdGFuY2VJZCwgY3R4KSB7XG4gICAgY3R4LmN1cnJlbnRJbnNwZWN0ZWRDb21wb25lbnRJZCA9IGluc3RhbmNlSWQ7XG4gICAgY3R4LmN1cnJlbnRBcHBSZWNvcmQubGFzdEluc3BlY3RlZENvbXBvbmVudElkID0gaW5zdGFuY2VJZDtcbn1cbmV4cG9ydHMubWFya1NlbGVjdGVkSW5zdGFuY2UgPSBtYXJrU2VsZWN0ZWRJbnN0YW5jZTtcbmZ1bmN0aW9uIHNlbmRFbXB0eUNvbXBvbmVudERhdGEoaW5zdGFuY2VJZCwgY3R4KSB7XG4gICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DT01QT05FTlRfU0VMRUNURURfREFUQSwge1xuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICBkYXRhOiBudWxsLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kRW1wdHlDb21wb25lbnREYXRhID0gc2VuZEVtcHR5Q29tcG9uZW50RGF0YTtcbmFzeW5jIGZ1bmN0aW9uIGVkaXRDb21wb25lbnRTdGF0ZShpbnN0YW5jZUlkLCBkb3RQYXRoLCB0eXBlLCBzdGF0ZSwgY3R4KSB7XG4gICAgaWYgKCFpbnN0YW5jZUlkKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgaW5zdGFuY2UgPSBnZXRDb21wb25lbnRJbnN0YW5jZShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCd2YWx1ZScgaW4gc3RhdGUgJiYgc3RhdGUudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUudmFsdWUgPSAoMCwgc2hhcmVkX3V0aWxzXzEucGFyc2UpKHN0YXRlLnZhbHVlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLmFwaS5lZGl0Q29tcG9uZW50U3RhdGUoaW5zdGFuY2UsIGRvdFBhdGgsIHR5cGUsIHN0YXRlLCBjdHguY3VycmVudEFwcFJlY29yZC5vcHRpb25zLmFwcCk7XG4gICAgICAgIGF3YWl0IHNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEoY3R4LmN1cnJlbnRBcHBSZWNvcmQsIGluc3RhbmNlSWQsIGN0eCk7XG4gICAgfVxufVxuZXhwb3J0cy5lZGl0Q29tcG9uZW50U3RhdGUgPSBlZGl0Q29tcG9uZW50U3RhdGU7XG5hc3luYyBmdW5jdGlvbiBnZXRDb21wb25lbnRJZChhcHAsIHVpZCwgaW5zdGFuY2UsIGN0eCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXylcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXztcbiAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkoYXBwLCBjdHgpO1xuICAgICAgICBpZiAoIWFwcFJlY29yZClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBpc1Jvb3QgPSBhcHBSZWNvcmQucm9vdEluc3RhbmNlID09PSBpbnN0YW5jZTtcbiAgICAgICAgcmV0dXJuIGAke2FwcFJlY29yZC5pZH06JHtpc1Jvb3QgPyAncm9vdCcgOiB1aWR9YDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0Q29tcG9uZW50SWQgPSBnZXRDb21wb25lbnRJZDtcbmZ1bmN0aW9uIGdldENvbXBvbmVudEluc3RhbmNlKGFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KSB7XG4gICAgaWYgKGluc3RhbmNlSWQgPT09ICdfcm9vdCcpIHtcbiAgICAgICAgaW5zdGFuY2VJZCA9IGAke2FwcFJlY29yZC5pZH06cm9vdGA7XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlID0gYXBwUmVjb3JkLmluc3RhbmNlTWFwLmdldChpbnN0YW5jZUlkKTtcbiAgICBpZiAoIWluc3RhbmNlICYmIHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgSW5zdGFuY2UgdWlkPSR7aW5zdGFuY2VJZH0gbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbn1cbmV4cG9ydHMuZ2V0Q29tcG9uZW50SW5zdGFuY2UgPSBnZXRDb21wb25lbnRJbnN0YW5jZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBvbmVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63304\n");
|
|
134
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.sendComponentUpdateTracking = exports.refreshComponentTreeSearch = exports.getComponentInstance = exports.getComponentId = exports.editComponentState = exports.sendEmptyComponentData = exports.markSelectedInstance = exports.sendSelectedComponentData = exports.sendComponentTreeData = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst app_1 = __webpack_require__(79132);\n\nconst MAX_$VM = 10;\nconst $vmQueue = [];\n\nasync function sendComponentTreeData(appRecord, instanceId, filter = '', maxDepth = null, ctx) {\n if (!instanceId || appRecord !== ctx.currentAppRecord) return; // Flush will send all components in the tree\n // So we skip individiual tree updates\n\n if (instanceId !== '_root' && ctx.currentAppRecord.backend.options.features.includes(app_backend_api_1.BuiltinBackendFeature.FLUSH)) {\n return;\n }\n\n const instance = getComponentInstance(appRecord, instanceId, ctx);\n\n if (!instance) {\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_TREE, {\n instanceId,\n treeData: null,\n notFound: true\n });\n } else {\n if (filter) filter = filter.toLowerCase();\n\n if (maxDepth == null) {\n maxDepth = instance === ctx.currentAppRecord.rootInstance ? 2 : 1;\n }\n\n const data = await appRecord.backend.api.walkComponentTree(instance, maxDepth, filter);\n const payload = {\n instanceId,\n treeData: (0, shared_utils_1.stringify)(data)\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_TREE, payload);\n }\n}\n\nexports.sendComponentTreeData = sendComponentTreeData;\n\nasync function sendSelectedComponentData(appRecord, instanceId, ctx) {\n if (!instanceId || appRecord !== ctx.currentAppRecord) return;\n const instance = getComponentInstance(appRecord, instanceId, ctx);\n\n if (!instance) {\n sendEmptyComponentData(instanceId, ctx);\n } else {\n // Expose instance on window\n if (typeof window !== 'undefined') {\n const win = window;\n win.$vm = instance; // $vm0, $vm1, $vm2, ...\n\n if ($vmQueue[0] !== instance) {\n if ($vmQueue.length >= MAX_$VM) {\n $vmQueue.pop();\n }\n\n for (let i = $vmQueue.length; i > 0; i--) {\n win[`$vm${i}`] = $vmQueue[i] = $vmQueue[i - 1];\n }\n\n win.$vm0 = $vmQueue[0] = instance;\n }\n }\n\n if (shared_utils_1.SharedData.debugInfo) {\n // eslint-disable-next-line no-console\n console.log('[DEBUG] inspect', instance);\n }\n\n const parentInstances = await appRecord.backend.api.walkComponentParents(instance);\n const payload = {\n instanceId,\n data: (0, shared_utils_1.stringify)(await appRecord.backend.api.inspectComponent(instance, ctx.currentAppRecord.options.app)),\n parentIds: parentInstances.map(i => i.__VUE_DEVTOOLS_UID__)\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_SELECTED_DATA, payload);\n markSelectedInstance(instanceId, ctx);\n }\n}\n\nexports.sendSelectedComponentData = sendSelectedComponentData;\n\nfunction markSelectedInstance(instanceId, ctx) {\n ctx.currentInspectedComponentId = instanceId;\n ctx.currentAppRecord.lastInspectedComponentId = instanceId;\n}\n\nexports.markSelectedInstance = markSelectedInstance;\n\nfunction sendEmptyComponentData(instanceId, ctx) {\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_SELECTED_DATA, {\n instanceId,\n data: null\n });\n}\n\nexports.sendEmptyComponentData = sendEmptyComponentData;\n\nasync function editComponentState(instanceId, dotPath, type, state, ctx) {\n if (!instanceId) return;\n const instance = getComponentInstance(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n if ('value' in state && state.value != null) {\n state.value = (0, shared_utils_1.parse)(state.value, true);\n }\n\n await ctx.currentAppRecord.backend.api.editComponentState(instance, dotPath, type, state, ctx.currentAppRecord.options.app);\n await sendSelectedComponentData(ctx.currentAppRecord, instanceId, ctx);\n }\n}\n\nexports.editComponentState = editComponentState;\n\nasync function getComponentId(app, uid, instance, ctx) {\n try {\n if (instance.__VUE_DEVTOOLS_UID__) return instance.__VUE_DEVTOOLS_UID__;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n if (!appRecord) return null;\n const isRoot = appRecord.rootInstance === instance;\n return `${appRecord.id}:${isRoot ? 'root' : uid}`;\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n\n return null;\n }\n}\n\nexports.getComponentId = getComponentId;\n\nfunction getComponentInstance(appRecord, instanceId, ctx) {\n if (instanceId === '_root') {\n instanceId = `${appRecord.id}:root`;\n }\n\n const instance = appRecord.instanceMap.get(instanceId);\n\n if (!instance && shared_utils_1.SharedData.debugInfo) {\n console.warn(`Instance uid=${instanceId} not found`);\n }\n\n return instance;\n}\n\nexports.getComponentInstance = getComponentInstance;\n\nasync function refreshComponentTreeSearch(ctx) {\n if (!ctx.currentAppRecord.componentFilter) return;\n await sendComponentTreeData(ctx.currentAppRecord, '_root', ctx.currentAppRecord.componentFilter, null, ctx);\n}\n\nexports.refreshComponentTreeSearch = refreshComponentTreeSearch;\n\nasync function sendComponentUpdateTracking(instanceId, ctx) {\n if (!instanceId) return;\n const payload = {\n instanceId,\n time: Date.now() // Use normal date\n\n };\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_UPDATED, payload);\n}\n\nexports.sendComponentUpdateTracking = sendComponentUpdateTracking;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Li9zcmMvY29tcG9uZW50LnRzP2E3NmMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlbmRDb21wb25lbnRVcGRhdGVUcmFja2luZyA9IGV4cG9ydHMucmVmcmVzaENvbXBvbmVudFRyZWVTZWFyY2ggPSBleHBvcnRzLmdldENvbXBvbmVudEluc3RhbmNlID0gZXhwb3J0cy5nZXRDb21wb25lbnRJZCA9IGV4cG9ydHMuZWRpdENvbXBvbmVudFN0YXRlID0gZXhwb3J0cy5zZW5kRW1wdHlDb21wb25lbnREYXRhID0gZXhwb3J0cy5tYXJrU2VsZWN0ZWRJbnN0YW5jZSA9IGV4cG9ydHMuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSA9IGV4cG9ydHMuc2VuZENvbXBvbmVudFRyZWVEYXRhID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBhcHBfYmFja2VuZF9hcGlfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL2FwcC1iYWNrZW5kLWFwaVwiKTtcbmNvbnN0IGFwcF8xID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuY29uc3QgTUFYXyRWTSA9IDEwO1xuY29uc3QgJHZtUXVldWUgPSBbXTtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRDb21wb25lbnRUcmVlRGF0YShhcHBSZWNvcmQsIGluc3RhbmNlSWQsIGZpbHRlciA9ICcnLCBtYXhEZXB0aCA9IG51bGwsIGN0eCkge1xuICAgIGlmICghaW5zdGFuY2VJZCB8fCBhcHBSZWNvcmQgIT09IGN0eC5jdXJyZW50QXBwUmVjb3JkKVxuICAgICAgICByZXR1cm47XG4gICAgLy8gRmx1c2ggd2lsbCBzZW5kIGFsbCBjb21wb25lbnRzIGluIHRoZSB0cmVlXG4gICAgLy8gU28gd2Ugc2tpcCBpbmRpdmlkaXVhbCB0cmVlIHVwZGF0ZXNcbiAgICBpZiAoaW5zdGFuY2VJZCAhPT0gJ19yb290JyAmJlxuICAgICAgICBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLm9wdGlvbnMuZmVhdHVyZXMuaW5jbHVkZXMoYXBwX2JhY2tlbmRfYXBpXzEuQnVpbHRpbkJhY2tlbmRGZWF0dXJlLkZMVVNIKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q29tcG9uZW50SW5zdGFuY2UoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DT01QT05FTlRfVFJFRSwge1xuICAgICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICAgIHRyZWVEYXRhOiBudWxsLFxuICAgICAgICAgICAgbm90Rm91bmQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGZpbHRlcilcbiAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF4RGVwdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgbWF4RGVwdGggPSBpbnN0YW5jZSA9PT0gY3R4LmN1cnJlbnRBcHBSZWNvcmQucm9vdEluc3RhbmNlID8gMiA6IDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS53YWxrQ29tcG9uZW50VHJlZShpbnN0YW5jZSwgbWF4RGVwdGgsIGZpbHRlcik7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICAgICAgdHJlZURhdGE6ICgwLCBzaGFyZWRfdXRpbHNfMS5zdHJpbmdpZnkpKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NPTVBPTkVOVF9UUkVFLCBwYXlsb2FkKTtcbiAgICB9XG59XG5leHBvcnRzLnNlbmRDb21wb25lbnRUcmVlRGF0YSA9IHNlbmRDb21wb25lbnRUcmVlRGF0YTtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBpZiAoIWluc3RhbmNlSWQgfHwgYXBwUmVjb3JkICE9PSBjdHguY3VycmVudEFwcFJlY29yZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q29tcG9uZW50SW5zdGFuY2UoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgc2VuZEVtcHR5Q29tcG9uZW50RGF0YShpbnN0YW5jZUlkLCBjdHgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gRXhwb3NlIGluc3RhbmNlIG9uIHdpbmRvd1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdztcbiAgICAgICAgICAgIHdpbi4kdm0gPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIC8vICR2bTAsICR2bTEsICR2bTIsIC4uLlxuICAgICAgICAgICAgaWYgKCR2bVF1ZXVlWzBdICE9PSBpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGlmICgkdm1RdWV1ZS5sZW5ndGggPj0gTUFYXyRWTSkge1xuICAgICAgICAgICAgICAgICAgICAkdm1RdWV1ZS5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9ICR2bVF1ZXVlLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5bYCR2bSR7aX1gXSA9ICR2bVF1ZXVlW2ldID0gJHZtUXVldWVbaSAtIDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aW4uJHZtMCA9ICR2bVF1ZXVlWzBdID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tERUJVR10gaW5zcGVjdCcsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZXMgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkud2Fsa0NvbXBvbmVudFBhcmVudHMoaW5zdGFuY2UpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICAgIGRhdGE6ICgwLCBzaGFyZWRfdXRpbHNfMS5zdHJpbmdpZnkpKGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS5pbnNwZWN0Q29tcG9uZW50KGluc3RhbmNlLCBjdHguY3VycmVudEFwcFJlY29yZC5vcHRpb25zLmFwcCkpLFxuICAgICAgICAgICAgcGFyZW50SWRzOiBwYXJlbnRJbnN0YW5jZXMubWFwKGkgPT4gaS5fX1ZVRV9ERVZUT09MU19VSURfXyksXG4gICAgICAgIH07XG4gICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEEsIHBheWxvYWQpO1xuICAgICAgICBtYXJrU2VsZWN0ZWRJbnN0YW5jZShpbnN0YW5jZUlkLCBjdHgpO1xuICAgIH1cbn1cbmV4cG9ydHMuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSA9IHNlbmRTZWxlY3RlZENvbXBvbmVudERhdGE7XG5mdW5jdGlvbiBtYXJrU2VsZWN0ZWRJbnN0YW5jZShpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkID0gaW5zdGFuY2VJZDtcbiAgICBjdHguY3VycmVudEFwcFJlY29yZC5sYXN0SW5zcGVjdGVkQ29tcG9uZW50SWQgPSBpbnN0YW5jZUlkO1xufVxuZXhwb3J0cy5tYXJrU2VsZWN0ZWRJbnN0YW5jZSA9IG1hcmtTZWxlY3RlZEluc3RhbmNlO1xuZnVuY3Rpb24gc2VuZEVtcHR5Q29tcG9uZW50RGF0YShpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NPTVBPTkVOVF9TRUxFQ1RFRF9EQVRBLCB7XG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIGRhdGE6IG51bGwsXG4gICAgfSk7XG59XG5leHBvcnRzLnNlbmRFbXB0eUNvbXBvbmVudERhdGEgPSBzZW5kRW1wdHlDb21wb25lbnREYXRhO1xuYXN5bmMgZnVuY3Rpb24gZWRpdENvbXBvbmVudFN0YXRlKGluc3RhbmNlSWQsIGRvdFBhdGgsIHR5cGUsIHN0YXRlLCBjdHgpIHtcbiAgICBpZiAoIWluc3RhbmNlSWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldENvbXBvbmVudEluc3RhbmNlKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBpZiAoJ3ZhbHVlJyBpbiBzdGF0ZSAmJiBzdGF0ZS52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS52YWx1ZSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5wYXJzZSkoc3RhdGUudmFsdWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmVkaXRDb21wb25lbnRTdGF0ZShpbnN0YW5jZSwgZG90UGF0aCwgdHlwZSwgc3RhdGUsIGN0eC5jdXJyZW50QXBwUmVjb3JkLm9wdGlvbnMuYXBwKTtcbiAgICAgICAgYXdhaXQgc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICB9XG59XG5leHBvcnRzLmVkaXRDb21wb25lbnRTdGF0ZSA9IGVkaXRDb21wb25lbnRTdGF0ZTtcbmFzeW5jIGZ1bmN0aW9uIGdldENvbXBvbmVudElkKGFwcCwgdWlkLCBpbnN0YW5jZSwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fKVxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgIGlmICghYXBwUmVjb3JkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGlzUm9vdCA9IGFwcFJlY29yZC5yb290SW5zdGFuY2UgPT09IGluc3RhbmNlO1xuICAgICAgICByZXR1cm4gYCR7YXBwUmVjb3JkLmlkfToke2lzUm9vdCA/ICdyb290JyA6IHVpZH1gO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnRJZCA9IGdldENvbXBvbmVudElkO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50SW5zdGFuY2UoYXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBpZiAoaW5zdGFuY2VJZCA9PT0gJ19yb290Jykge1xuICAgICAgICBpbnN0YW5jZUlkID0gYCR7YXBwUmVjb3JkLmlkfTpyb290YDtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2UgPSBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlSWQpO1xuICAgIGlmICghaW5zdGFuY2UgJiYgc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnN0YW5jZSB1aWQ9JHtpbnN0YW5jZUlkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xufVxuZXhwb3J0cy5nZXRDb21wb25lbnRJbnN0YW5jZSA9IGdldENvbXBvbmVudEluc3RhbmNlO1xuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaENvbXBvbmVudFRyZWVTZWFyY2goY3R4KSB7XG4gICAgaWYgKCFjdHguY3VycmVudEFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIpXG4gICAgICAgIHJldHVybjtcbiAgICBhd2FpdCBzZW5kQ29tcG9uZW50VHJlZURhdGEoY3R4LmN1cnJlbnRBcHBSZWNvcmQsICdfcm9vdCcsIGN0eC5jdXJyZW50QXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciwgbnVsbCwgY3R4KTtcbn1cbmV4cG9ydHMucmVmcmVzaENvbXBvbmVudFRyZWVTZWFyY2ggPSByZWZyZXNoQ29tcG9uZW50VHJlZVNlYXJjaDtcbmFzeW5jIGZ1bmN0aW9uIHNlbmRDb21wb25lbnRVcGRhdGVUcmFja2luZyhpbnN0YW5jZUlkLCBjdHgpIHtcbiAgICBpZiAoIWluc3RhbmNlSWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICB0aW1lOiBEYXRlLm5vdygpLCAvLyBVc2Ugbm9ybWFsIGRhdGVcbiAgICB9O1xuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ09NUE9ORU5UX1VQREFURUQsIHBheWxvYWQpO1xufVxuZXhwb3J0cy5zZW5kQ29tcG9uZW50VXBkYXRlVHJhY2tpbmcgPSBzZW5kQ29tcG9uZW50VXBkYXRlVHJhY2tpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wb25lbnQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///63304\n");
|
|
135
|
+
|
|
136
|
+
/***/ }),
|
|
137
|
+
|
|
138
|
+
/***/ 78693:
|
|
139
|
+
/***/ ((__unused_webpack_module, exports) => {
|
|
140
|
+
|
|
141
|
+
"use strict";
|
|
142
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.flashComponent = void 0;\n\nasync function flashComponent(instance, backend) {\n const bounds = await backend.api.getComponentBounds(instance);\n\n if (bounds) {\n let overlay = instance.__VUE_DEVTOOLS_FLASH;\n\n if (!overlay) {\n overlay = document.createElement('div');\n instance.__VUE_DEVTOOLS_FLASH = overlay;\n overlay.style.border = '2px rgba(65, 184, 131, 0.7) solid';\n overlay.style.position = 'fixed';\n overlay.style.zIndex = '99999999999998';\n overlay.style.pointerEvents = 'none';\n overlay.style.borderRadius = '3px';\n overlay.style.boxSizing = 'border-box';\n document.body.appendChild(overlay);\n }\n\n overlay.style.opacity = '1';\n overlay.style.transition = null;\n overlay.style.width = Math.round(bounds.width) + 'px';\n overlay.style.height = Math.round(bounds.height) + 'px';\n overlay.style.left = Math.round(bounds.left) + 'px';\n overlay.style.top = Math.round(bounds.top) + 'px';\n requestAnimationFrame(() => {\n overlay.style.transition = 'opacity 1s';\n overlay.style.opacity = '0';\n });\n clearTimeout(overlay._timer);\n overlay._timer = setTimeout(() => {\n document.body.removeChild(overlay);\n instance.__VUE_DEVTOOLS_FLASH = null;\n }, 1000);\n }\n}\n\nexports.flashComponent = flashComponent;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg2OTMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdPLGVBQWUsY0FBZixDQUErQixRQUEvQixFQUE0RCxPQUE1RCxFQUFvRjtBQUN6RixRQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFSLENBQVksa0JBQVosQ0FBK0IsUUFBL0IsQ0FBckI7O0FBQ0EsTUFBSSxNQUFKLEVBQVk7QUFDVixRQUFJLE9BQU8sR0FBbUIsUUFBUSxDQUFDLG9CQUF2Qzs7QUFDQSxRQUFJLENBQUMsT0FBTCxFQUFjO0FBQ1osYUFBTyxHQUFHLFFBQVEsQ0FBQyxhQUFULENBQXVCLEtBQXZCLENBQVY7QUFDQSxjQUFRLENBQUMsb0JBQVQsR0FBZ0MsT0FBaEM7QUFDQSxhQUFPLENBQUMsS0FBUixDQUFjLE1BQWQsR0FBdUIsbUNBQXZCO0FBQ0EsYUFBTyxDQUFDLEtBQVIsQ0FBYyxRQUFkLEdBQXlCLE9BQXpCO0FBQ0EsYUFBTyxDQUFDLEtBQVIsQ0FBYyxNQUFkLEdBQXVCLGdCQUF2QjtBQUNBLGFBQU8sQ0FBQyxLQUFSLENBQWMsYUFBZCxHQUE4QixNQUE5QjtBQUNBLGFBQU8sQ0FBQyxLQUFSLENBQWMsWUFBZCxHQUE2QixLQUE3QjtBQUNBLGFBQU8sQ0FBQyxLQUFSLENBQWMsU0FBZCxHQUEwQixZQUExQjtBQUNBLGNBQVEsQ0FBQyxJQUFULENBQWMsV0FBZCxDQUEwQixPQUExQjtBQUNEOztBQUNELFdBQU8sQ0FBQyxLQUFSLENBQWMsT0FBZCxHQUF3QixHQUF4QjtBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsVUFBZCxHQUEyQixJQUEzQjtBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsS0FBZCxHQUFzQixJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxLQUFsQixJQUEyQixJQUFqRDtBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsTUFBZCxHQUF1QixJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxNQUFsQixJQUE0QixJQUFuRDtBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsSUFBZCxHQUFxQixJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxJQUFsQixJQUEwQixJQUEvQztBQUNBLFdBQU8sQ0FBQyxLQUFSLENBQWMsR0FBZCxHQUFvQixJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxHQUFsQixJQUF5QixJQUE3QztBQUNBLHlCQUFxQixDQUFDLE1BQUs7QUFDekIsYUFBTyxDQUFDLEtBQVIsQ0FBYyxVQUFkLEdBQTJCLFlBQTNCO0FBQ0EsYUFBTyxDQUFDLEtBQVIsQ0FBYyxPQUFkLEdBQXdCLEdBQXhCO0FBQ0QsS0FIb0IsQ0FBckI7QUFJQSxnQkFBWSxDQUFFLE9BQWUsQ0FBQyxNQUFsQixDQUFaO0FBQ0UsV0FBZSxDQUFDLE1BQWhCLEdBQXlCLFVBQVUsQ0FBQyxNQUFLO0FBQ3pDLGNBQVEsQ0FBQyxJQUFULENBQWMsV0FBZCxDQUEwQixPQUExQjtBQUNBLGNBQVEsQ0FBQyxvQkFBVCxHQUFnQyxJQUFoQztBQUNELEtBSG9DLEVBR2xDLElBSGtDLENBQW5DO0FBSUg7QUFDRjs7QUEvQkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL3NyYy9mbGFzaC50cz9kNzU3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mbGFzaENvbXBvbmVudCA9IHZvaWQgMDtcbmFzeW5jIGZ1bmN0aW9uIGZsYXNoQ29tcG9uZW50KGluc3RhbmNlLCBiYWNrZW5kKSB7XG4gICAgY29uc3QgYm91bmRzID0gYXdhaXQgYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICAgIGxldCBvdmVybGF5ID0gaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfRkxBU0g7XG4gICAgICAgIGlmICghb3ZlcmxheSkge1xuICAgICAgICAgICAgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfRkxBU0ggPSBvdmVybGF5O1xuICAgICAgICAgICAgb3ZlcmxheS5zdHlsZS5ib3JkZXIgPSAnMnB4IHJnYmEoNjUsIDE4NCwgMTMxLCAwLjcpIHNvbGlkJztcbiAgICAgICAgICAgIG92ZXJsYXkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgICAgICAgb3ZlcmxheS5zdHlsZS56SW5kZXggPSAnOTk5OTk5OTk5OTk5OTgnO1xuICAgICAgICAgICAgb3ZlcmxheS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgb3ZlcmxheS5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnM3B4JztcbiAgICAgICAgICAgIG92ZXJsYXkuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdmVybGF5KTtcbiAgICAgICAgfVxuICAgICAgICBvdmVybGF5LnN0eWxlLm9wYWNpdHkgPSAnMSc7XG4gICAgICAgIG92ZXJsYXkuc3R5bGUudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICAgIG92ZXJsYXkuc3R5bGUud2lkdGggPSBNYXRoLnJvdW5kKGJvdW5kcy53aWR0aCkgKyAncHgnO1xuICAgICAgICBvdmVybGF5LnN0eWxlLmhlaWdodCA9IE1hdGgucm91bmQoYm91bmRzLmhlaWdodCkgKyAncHgnO1xuICAgICAgICBvdmVybGF5LnN0eWxlLmxlZnQgPSBNYXRoLnJvdW5kKGJvdW5kcy5sZWZ0KSArICdweCc7XG4gICAgICAgIG92ZXJsYXkuc3R5bGUudG9wID0gTWF0aC5yb3VuZChib3VuZHMudG9wKSArICdweCc7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBvdmVybGF5LnN0eWxlLnRyYW5zaXRpb24gPSAnb3BhY2l0eSAxcyc7XG4gICAgICAgICAgICBvdmVybGF5LnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICAgIH0pO1xuICAgICAgICBjbGVhclRpbWVvdXQob3ZlcmxheS5fdGltZXIpO1xuICAgICAgICBvdmVybGF5Ll90aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdmVybGF5KTtcbiAgICAgICAgICAgIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX0ZMQVNIID0gbnVsbDtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgfVxufVxuZXhwb3J0cy5mbGFzaENvbXBvbmVudCA9IGZsYXNoQ29tcG9uZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zmxhc2guanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78693\n");
|
|
135
143
|
|
|
136
144
|
/***/ }),
|
|
137
145
|
|
|
@@ -155,7 +163,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
155
163
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
156
164
|
|
|
157
165
|
"use strict";
|
|
158
|
-
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nvar _a, _b;\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.initBackend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst debounce_1 = __importDefault(__webpack_require__(54073));\n\nconst global_hook_1 = __webpack_require__(13179);\n\nconst subscriptions_1 = __webpack_require__(19815);\n\nconst highlighter_1 = __webpack_require__(44877);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst component_pick_1 = __importDefault(__webpack_require__(76794));\n\nconst component_1 = __webpack_require__(63304);\n\nconst plugin_1 = __webpack_require__(42989);\n\nconst app_1 = __webpack_require__(79132);\n\nconst inspector_1 = __webpack_require__(96048);\n\nconst timeline_screenshot_1 = __webpack_require__(11354);\n\nconst perf_1 = __webpack_require__(75552);\n\nconst page_config_1 = __webpack_require__(26639);\n\nconst timeline_marker_1 = __webpack_require__(72063);\n\nlet ctx = (_a = shared_utils_1.target.__vdevtools_ctx) !== null && _a !== void 0 ? _a : null;\nlet connected = (_b = shared_utils_1.target.__vdevtools_connected) !== null && _b !== void 0 ? _b : false;\n\nasync function initBackend(bridge) {\n await (0, shared_utils_1.initSharedData)({\n bridge,\n persist: false\n });\n (0, page_config_1.initOnPageConfig)();\n\n if (!connected) {\n // connected = false\n ctx = shared_utils_1.target.__vdevtools_ctx = (0, app_backend_api_1.createBackendContext)({\n bridge,\n hook: global_hook_1.hook\n });\n shared_utils_1.SharedData.legacyApps = false;\n\n if (global_hook_1.hook.Vue) {\n connect();\n (0, app_1._legacy_getAndRegisterApps)(ctx, true);\n shared_utils_1.SharedData.legacyApps = true;\n }\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.INIT, () => {\n (0, app_1._legacy_getAndRegisterApps)(ctx, true);\n shared_utils_1.SharedData.legacyApps = true;\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.APP_ADD, async app => {\n await (0, app_1.registerApp)(app, ctx);\n connect();\n }); // Add apps that already sent init\n\n if (global_hook_1.hook.apps.length) {\n global_hook_1.hook.apps.forEach(app => {\n (0, app_1.registerApp)(app, ctx);\n connect();\n });\n }\n } else {\n ctx.bridge = bridge;\n connectBridge();\n }\n}\n\nexports.initBackend = initBackend;\n\nasync function connect() {\n if (connected) {\n return;\n }\n\n connected = shared_utils_1.target.__vdevtools_connected = true;\n await (0, app_1.waitForAppsRegistration)();\n connectBridge();\n ctx.currentTab = shared_utils_1.BuiltinTabs.COMPONENTS; // Apps\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.APP_UNMOUNT, async app => {\n await (0, app_1.removeApp)(app, ctx);\n }); // Components\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_UPDATED, async (app, uid, parentUid, component) => {\n try {\n let id;\n let appRecord;\n\n if (app && uid != null) {\n id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n appRecord = await (0, app_1.getAppRecord)(app, ctx);\n } else {\n id = ctx.currentInspectedComponentId;\n appRecord = ctx.currentAppRecord;\n } // Update component inspector\n\n\n if (id && (0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.SELECTED_COMPONENT_DATA, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendSelectedComponentData)(appRecord, id, ctx);\n } // Update tree (tags)\n\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendComponentTreeData)(appRecord, id, appRecord.componentFilter, 0, ctx);\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_ADDED, async (app, uid, parentUid, component) => {\n try {\n const id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n\n if (component) {\n if (component.__VUE_DEVTOOLS_UID__ == null) {\n component.__VUE_DEVTOOLS_UID__ = id;\n }\n\n if (!appRecord.instanceMap.has(id)) {\n appRecord.instanceMap.set(id, component);\n }\n }\n\n if (parentUid != null) {\n const parentInstances = await appRecord.backend.api.walkComponentParents(component);\n\n if (parentInstances.length) {\n // Check two parents level to update `hasChildren\n for (let i = 0; i < 2 && i < parentInstances.length; i++) {\n const parentId = await (0, component_1.getComponentId)(app, parentUid, parentInstances[i], ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === parentId)) {\n requestAnimationFrame(() => {\n (0, component_1.sendComponentTreeData)(appRecord, parentId, appRecord.componentFilter, null, ctx);\n });\n }\n }\n }\n }\n\n if (ctx.currentInspectedComponentId === id) {\n (0, component_1.sendSelectedComponentData)(appRecord, id, ctx);\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_REMOVED, async (app, uid, parentUid, component) => {\n try {\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n\n if (parentUid != null) {\n const parentInstances = await appRecord.backend.api.walkComponentParents(component);\n\n if (parentInstances.length) {\n const parentId = await (0, component_1.getComponentId)(app, parentUid, parentInstances[0], ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === parentId)) {\n requestAnimationFrame(async () => {\n try {\n (0, component_1.sendComponentTreeData)(await (0, app_1.getAppRecord)(app, ctx), parentId, appRecord.componentFilter, null, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n }\n }\n }\n\n const id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.SELECTED_COMPONENT_DATA, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendEmptyComponentData)(id, ctx);\n }\n\n appRecord.instanceMap.delete(id);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n }); // Component perf\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.PERFORMANCE_START, async (app, uid, vm, type, time) => {\n await (0, perf_1.performanceMarkStart)(app, uid, vm, type, time, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.PERFORMANCE_END, async (app, uid, vm, type, time) => {\n await (0, perf_1.performanceMarkEnd)(app, uid, vm, type, time, ctx);\n }); // Highlighter\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_HIGHLIGHT, async instanceId => {\n await (0, highlighter_1.highlight)(ctx.currentAppRecord.instanceMap.get(instanceId), ctx.currentAppRecord.backend, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_UNHIGHLIGHT, async () => {\n await (0, highlighter_1.unHighlight)();\n }); // Timeline\n\n (0, timeline_1.setupTimeline)(ctx);\n global_hook_1.hook.on(shared_utils_1.HookEvents.TIMELINE_LAYER_ADDED, async (options, plugin) => {\n const appRecord = await (0, app_1.getAppRecord)(plugin.descriptor.app, ctx);\n ctx.timelineLayers.push({ ...options,\n appRecord,\n plugin,\n events: []\n });\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_ADD, {});\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.TIMELINE_EVENT_ADDED, async (options, plugin) => {\n await (0, timeline_1.addTimelineEvent)(options, plugin.descriptor.app, ctx);\n }); // Custom inspectors\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_ADD, async (options, plugin) => {\n const appRecord = await (0, app_1.getAppRecord)(plugin.descriptor.app, ctx);\n ctx.customInspectors.push({ ...options,\n appRecord,\n plugin,\n treeFilter: '',\n selectedNodeId: null\n });\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_CUSTOM_INSPECTOR_ADD, {});\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_TREE, async (inspectorId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.sendInspectorTree)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_STATE, async (inspectorId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SELECT_NODE, async (inspectorId, nodeId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.selectInspectorNode)(inspector, nodeId, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n }); // Plugins\n\n try {\n await (0, plugin_1.addPreviouslyRegisteredPlugins)(ctx);\n } catch (e) {\n console.error(`Error adding previously registered plugins:`);\n console.error(e);\n }\n\n try {\n await (0, plugin_1.addQueuedPlugins)(ctx);\n } catch (e) {\n console.error(`Error adding queued plugins:`);\n console.error(e);\n }\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.SETUP_DEVTOOLS_PLUGIN, async (pluginDescriptor, setupFn) => {\n await (0, plugin_1.addPlugin)({\n pluginDescriptor,\n setupFn\n }, ctx);\n });\n shared_utils_1.target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ = true; // Legacy flush\n\n const handleFlush = (0, debounce_1.default)(async () => {\n var _a;\n\n if ((_a = ctx.currentAppRecord) === null || _a === void 0 ? void 0 : _a.backend.options.features.includes(app_backend_api_1.BuiltinBackendFeature.FLUSH)) {\n await (0, component_1.sendComponentTreeData)(ctx.currentAppRecord, '_root', ctx.currentAppRecord.componentFilter, null, ctx);\n\n if (ctx.currentInspectedComponentId) {\n await (0, component_1.sendSelectedComponentData)(ctx.currentAppRecord, ctx.currentInspectedComponentId, ctx);\n }\n }\n }, 500);\n global_hook_1.hook.off(shared_utils_1.HookEvents.FLUSH);\n global_hook_1.hook.on(shared_utils_1.HookEvents.FLUSH, handleFlush); // Connect done\n\n try {\n await (0, timeline_marker_1.addTimelineMarker)({\n id: 'vue-devtools-init-backend',\n time: Date.now(),\n label: 'Vue Devtools connected',\n color: 0x41B883,\n all: true\n }, ctx);\n } catch (e) {\n console.error(`Error while adding devtools connected timeline marker:`);\n console.error(e);\n }\n}\n\nfunction connectBridge() {\n // Subscriptions\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_SUBSCRIBE, ({\n type,\n payload\n }) => {\n (0, subscriptions_1.subscribe)(type, payload);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_UNSUBSCRIBE, ({\n type,\n payload\n }) => {\n (0, subscriptions_1.unsubscribe)(type, payload);\n }); // Tabs\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TAB_SWITCH, async tab => {\n ctx.currentTab = tab;\n await (0, highlighter_1.unHighlight)();\n }); // Apps\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_APP_LIST, async () => {\n await (0, app_1.sendApps)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_APP_SELECT, async id => {\n if (id == null) return;\n const record = ctx.appRecords.find(r => r.id === id);\n\n if (record) {\n await (0, app_1.selectApp)(record, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`App with id ${id} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_SCAN_LEGACY_APPS, () => {\n if (global_hook_1.hook.Vue) {\n (0, app_1._legacy_getAndRegisterApps)(ctx);\n }\n }); // Components\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_TREE, async ({\n instanceId,\n filter\n }) => {\n ctx.currentAppRecord.componentFilter = filter;\n (0, subscriptions_1.subscribe)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, {\n instanceId\n });\n await (0, component_1.sendComponentTreeData)(ctx.currentAppRecord, instanceId, filter, null, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_SELECTED_DATA, async instanceId => {\n await (0, component_1.sendSelectedComponentData)(ctx.currentAppRecord, instanceId, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_EDIT_STATE, async ({\n instanceId,\n dotPath,\n type,\n value,\n newKey,\n remove\n }) => {\n await (0, component_1.editComponentState)(instanceId, dotPath, type, {\n value,\n newKey,\n remove\n }, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_INSPECT_DOM, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const [el] = await ctx.currentAppRecord.backend.api.getComponentRootElements(instance);\n\n if (el) {\n // @ts-ignore\n window.__VUE_DEVTOOLS_INSPECT_TARGET__ = el;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_INSPECT_DOM, null);\n }\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_SCROLL_TO, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const [el] = await ctx.currentAppRecord.backend.api.getComponentRootElements(instance);\n\n if (el) {\n if (typeof el.scrollIntoView === 'function') {\n el.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n } else {\n // Handle nodes that don't implement scrollIntoView\n const bounds = await ctx.currentAppRecord.backend.api.getComponentBounds(instance);\n const scrollTarget = document.createElement('div');\n scrollTarget.style.position = 'absolute';\n scrollTarget.style.width = `${bounds.width}px`;\n scrollTarget.style.height = `${bounds.height}px`;\n scrollTarget.style.top = `${bounds.top}px`;\n scrollTarget.style.left = `${bounds.left}px`;\n document.body.appendChild(scrollTarget);\n scrollTarget.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n setTimeout(() => {\n document.body.removeChild(scrollTarget);\n }, 2000);\n }\n\n (0, highlighter_1.highlight)(instance, ctx.currentAppRecord.backend, ctx);\n setTimeout(() => {\n (0, highlighter_1.unHighlight)();\n }, 2000);\n }\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_RENDER_CODE, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const {\n code\n } = await ctx.currentAppRecord.backend.api.getComponentRenderCode(instance);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_RENDER_CODE, {\n instanceId,\n code\n });\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_STATE_ACTION, async ({\n value,\n actionIndex\n }) => {\n const rawAction = value._custom.actions[actionIndex];\n const action = (0, shared_utils_1.revive)(rawAction === null || rawAction === void 0 ? void 0 : rawAction.action);\n\n if (action) {\n try {\n await action();\n } catch (e) {\n console.error(e);\n }\n } else {\n console.warn(`Couldn't revive action ${actionIndex} from`, value);\n }\n }); // Highlighter\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_MOUSE_OVER, async instanceId => {\n await (0, highlighter_1.highlight)(ctx.currentAppRecord.instanceMap.get(instanceId), ctx.currentAppRecord.backend, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_MOUSE_OUT, async () => {\n await (0, highlighter_1.unHighlight)();\n }); // Component picker\n\n const componentPicker = new component_pick_1.default(ctx);\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_PICK, () => {\n componentPicker.startSelecting();\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_PICK_CANCELED, () => {\n componentPicker.stopSelecting();\n }); // Timeline\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LAYER_LIST, async () => {\n await (0, timeline_1.sendTimelineLayers)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_SHOW_SCREENSHOT, async ({\n screenshot\n }) => {\n await (0, timeline_screenshot_1.showScreenshot)(screenshot, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_CLEAR, async () => {\n await (0, timeline_1.clearTimeline)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_EVENT_DATA, async ({\n id\n }) => {\n await (0, timeline_1.sendTimelineEventData)(id, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LAYER_LOAD_EVENTS, async ({\n appId,\n layerId\n }) => {\n await (0, timeline_1.sendTimelineLayerEvents)(appId, layerId, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LOAD_MARKERS, async () => {\n await (0, timeline_marker_1.sendTimelineMarkers)(ctx);\n }); // Custom inspectors\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_LIST, async () => {\n await (0, inspector_1.sendCustomInspectors)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_TREE, async ({\n inspectorId,\n appId,\n treeFilter\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n inspector.treeFilter = treeFilter;\n (0, inspector_1.sendInspectorTree)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_STATE, async ({\n inspectorId,\n appId,\n nodeId\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n inspector.selectedNodeId = nodeId;\n (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE, async ({\n inspectorId,\n appId,\n nodeId,\n path,\n type,\n payload\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n await (0, inspector_1.editInspectorState)(inspector, nodeId, path, type, payload, ctx);\n inspector.selectedNodeId = nodeId;\n await (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_ACTION, async ({\n inspectorId,\n appId,\n actionIndex\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n const action = inspector.actions[actionIndex];\n\n try {\n await action.action();\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n }); // Misc\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_LOG, payload => {\n let value = payload.value;\n\n if (payload.serialized) {\n value = (0, shared_utils_1.parse)(value, payload.revive);\n } else if (payload.revive) {\n value = (0, shared_utils_1.revive)(value);\n } // eslint-disable-next-line no-console\n\n\n console[payload.level](value);\n }); // Plugins\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_DEVTOOLS_PLUGIN_LIST, async () => {\n await (0, plugin_1.sendPluginList)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED, ({\n pluginId,\n key,\n newValue,\n oldValue\n }) => {\n const settings = (0, shared_utils_1.getPluginSettings)(pluginId);\n ctx.hook.emit(shared_utils_1.HookEvents.PLUGIN_SETTINGS_SET, pluginId, settings);\n ctx.currentAppRecord.backend.api.callHook(\"setPluginSettings\"\n /* SET_PLUGIN_SETTINGS */\n , {\n app: ctx.currentAppRecord.options.app,\n pluginId,\n key,\n newValue,\n oldValue,\n settings\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFZLE9BQVo7QUFBaUIsWUFBakI7QUFBMkI7QUFBM0IsR0FBRCxLQUEwQztBQUM1RyxVQUFNLFFBQVEsR0FBRyxzQ0FBa0IsUUFBbEIsQ0FBakI7QUFDQSxPQUFHLENBQUMsSUFBSixDQUFTLElBQVQsQ0FBYywwQkFBVyxtQkFBekIsRUFBOEMsUUFBOUMsRUFBd0QsUUFBeEQ7QUFDQSxPQUFHLENBQUMsZ0JBQUosQ0FBcUIsT0FBckIsQ0FBNkIsR0FBN0IsQ0FBaUMsUUFBakMsQ0FBeUM7QUFBQTtBQUF6QyxNQUFxRTtBQUNuRSxTQUFHLEVBQUUsR0FBRyxDQUFDLGdCQUFKLENBQXFCLE9BQXJCLENBQTZCLEdBRGlDO0FBRW5FLGNBRm1FO0FBR25FLFNBSG1FO0FBSW5FLGNBSm1FO0FBS25FLGNBTG1FO0FBTW5FO0FBTm1FLEtBQXJFO0FBUUQsR0FYRDtBQVlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvaW5kZXgudHM/NmYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbnZhciBfYSwgX2I7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmluaXRCYWNrZW5kID0gdm9pZCAwO1xuY29uc3QgYXBwX2JhY2tlbmRfYXBpXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9hcHAtYmFja2VuZC1hcGlcIik7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IGRlYm91bmNlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImxvZGFzaC9kZWJvdW5jZVwiKSk7XG5jb25zdCBnbG9iYWxfaG9va18xID0gcmVxdWlyZShcIi4vZ2xvYmFsLWhvb2tcIik7XG5jb25zdCBzdWJzY3JpcHRpb25zXzEgPSByZXF1aXJlKFwiLi91dGlsL3N1YnNjcmlwdGlvbnNcIik7XG5jb25zdCBoaWdobGlnaHRlcl8xID0gcmVxdWlyZShcIi4vaGlnaGxpZ2h0ZXJcIik7XG5jb25zdCB0aW1lbGluZV8xID0gcmVxdWlyZShcIi4vdGltZWxpbmVcIik7XG5jb25zdCBjb21wb25lbnRfcGlja18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvbmVudC1waWNrXCIpKTtcbmNvbnN0IGNvbXBvbmVudF8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50XCIpO1xuY29uc3QgcGx1Z2luXzEgPSByZXF1aXJlKFwiLi9wbHVnaW5cIik7XG5jb25zdCBhcHBfMSA9IHJlcXVpcmUoXCIuL2FwcFwiKTtcbmNvbnN0IGluc3BlY3Rvcl8xID0gcmVxdWlyZShcIi4vaW5zcGVjdG9yXCIpO1xuY29uc3QgdGltZWxpbmVfc2NyZWVuc2hvdF8xID0gcmVxdWlyZShcIi4vdGltZWxpbmUtc2NyZWVuc2hvdFwiKTtcbmNvbnN0IHBlcmZfMSA9IHJlcXVpcmUoXCIuL3BlcmZcIik7XG5jb25zdCBwYWdlX2NvbmZpZ18xID0gcmVxdWlyZShcIi4vcGFnZS1jb25maWdcIik7XG5jb25zdCB0aW1lbGluZV9tYXJrZXJfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lLW1hcmtlclwiKTtcbmxldCBjdHggPSAoX2EgPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX192ZGV2dG9vbHNfY3R4KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xubGV0IGNvbm5lY3RlZCA9IChfYiA9IHNoYXJlZF91dGlsc18xLnRhcmdldC5fX3ZkZXZ0b29sc19jb25uZWN0ZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlO1xuYXN5bmMgZnVuY3Rpb24gaW5pdEJhY2tlbmQoYnJpZGdlKSB7XG4gICAgYXdhaXQgKDAsIHNoYXJlZF91dGlsc18xLmluaXRTaGFyZWREYXRhKSh7XG4gICAgICAgIGJyaWRnZSxcbiAgICAgICAgcGVyc2lzdDogZmFsc2UsXG4gICAgfSk7XG4gICAgKDAsIHBhZ2VfY29uZmlnXzEuaW5pdE9uUGFnZUNvbmZpZykoKTtcbiAgICBpZiAoIWNvbm5lY3RlZCkge1xuICAgICAgICAvLyBjb25uZWN0ZWQgPSBmYWxzZVxuICAgICAgICBjdHggPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX192ZGV2dG9vbHNfY3R4ID0gKDAsIGFwcF9iYWNrZW5kX2FwaV8xLmNyZWF0ZUJhY2tlbmRDb250ZXh0KSh7XG4gICAgICAgICAgICBicmlkZ2UsXG4gICAgICAgICAgICBob29rOiBnbG9iYWxfaG9va18xLmhvb2ssXG4gICAgICAgIH0pO1xuICAgICAgICBzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmxlZ2FjeUFwcHMgPSBmYWxzZTtcbiAgICAgICAgaWYgKGdsb2JhbF9ob29rXzEuaG9vay5WdWUpIHtcbiAgICAgICAgICAgIGNvbm5lY3QoKTtcbiAgICAgICAgICAgICgwLCBhcHBfMS5fbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcykoY3R4LCB0cnVlKTtcbiAgICAgICAgICAgIHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEubGVnYWN5QXBwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuSU5JVCwgKCkgPT4ge1xuICAgICAgICAgICAgKDAsIGFwcF8xLl9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzKShjdHgsIHRydWUpO1xuICAgICAgICAgICAgc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5sZWdhY3lBcHBzID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkFQUF9BREQsIGFzeW5jIChhcHApID0+IHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBhcHBfMS5yZWdpc3RlckFwcCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgY29ubmVjdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gQWRkIGFwcHMgdGhhdCBhbHJlYWR5IHNlbnQgaW5pdFxuICAgICAgICBpZiAoZ2xvYmFsX2hvb2tfMS5ob29rLmFwcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBnbG9iYWxfaG9va18xLmhvb2suYXBwcy5mb3JFYWNoKGFwcCA9PiB7XG4gICAgICAgICAgICAgICAgKDAsIGFwcF8xLnJlZ2lzdGVyQXBwKShhcHAsIGN0eCk7XG4gICAgICAgICAgICAgICAgY29ubmVjdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGN0eC5icmlkZ2UgPSBicmlkZ2U7XG4gICAgICAgIGNvbm5lY3RCcmlkZ2UoKTtcbiAgICB9XG59XG5leHBvcnRzLmluaXRCYWNrZW5kID0gaW5pdEJhY2tlbmQ7XG5hc3luYyBmdW5jdGlvbiBjb25uZWN0KCkge1xuICAgIGlmIChjb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25uZWN0ZWQgPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX192ZGV2dG9vbHNfY29ubmVjdGVkID0gdHJ1ZTtcbiAgICBhd2FpdCAoMCwgYXBwXzEud2FpdEZvckFwcHNSZWdpc3RyYXRpb24pKCk7XG4gICAgY29ubmVjdEJyaWRnZSgpO1xuICAgIGN0eC5jdXJyZW50VGFiID0gc2hhcmVkX3V0aWxzXzEuQnVpbHRpblRhYnMuQ09NUE9ORU5UUztcbiAgICAvLyBBcHBzXG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQVBQX1VOTU9VTlQsIGFzeW5jIChhcHApID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGFwcF8xLnJlbW92ZUFwcCkoYXBwLCBjdHgpO1xuICAgIH0pO1xuICAgIC8vIENvbXBvbmVudHNcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfVVBEQVRFRCwgYXN5bmMgKGFwcCwgdWlkLCBwYXJlbnRVaWQsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGlkO1xuICAgICAgICAgICAgbGV0IGFwcFJlY29yZDtcbiAgICAgICAgICAgIGlmIChhcHAgJiYgdWlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGF3YWl0ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJZCkoYXBwLCB1aWQsIGNvbXBvbmVudCwgY3R4KTtcbiAgICAgICAgICAgICAgICBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZCA9IGN0eC5jdXJyZW50SW5zcGVjdGVkQ29tcG9uZW50SWQ7XG4gICAgICAgICAgICAgICAgYXBwUmVjb3JkID0gY3R4LmN1cnJlbnRBcHBSZWNvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50IGluc3BlY3RvclxuICAgICAgICAgICAgaWYgKGlkICYmICgwLCBzdWJzY3JpcHRpb25zXzEuaXNTdWJzY3JpYmVkKShzaGFyZWRfdXRpbHNfMS5CcmlkZ2VTdWJzY3JpcHRpb25zLlNFTEVDVEVEX0NPTVBPTkVOVF9EQVRBLCBzdWIgPT4gc3ViLnBheWxvYWQuaW5zdGFuY2VJZCA9PT0gaWQpKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEpKGFwcFJlY29yZCwgaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVcGRhdGUgdHJlZSAodGFncylcbiAgICAgICAgICAgIGlmICgoMCwgc3Vic2NyaXB0aW9uc18xLmlzU3Vic2NyaWJlZCkoc2hhcmVkX3V0aWxzXzEuQnJpZGdlU3Vic2NyaXB0aW9ucy5DT01QT05FTlRfVFJFRSwgc3ViID0+IHN1Yi5wYXlsb2FkLmluc3RhbmNlSWQgPT09IGlkKSkge1xuICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kQ29tcG9uZW50VHJlZURhdGEpKGFwcFJlY29yZCwgaWQsIGFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIsIDAsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfQURERUQsIGFzeW5jIChhcHAsIHVpZCwgcGFyZW50VWlkLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYXdhaXQgKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudElkKShhcHAsIHVpZCwgY29tcG9uZW50LCBjdHgpO1xuICAgICAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuX19WVUVfREVWVE9PTFNfVUlEX18gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuX19WVUVfREVWVE9PTFNfVUlEX18gPSBpZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBSZWNvcmQuaW5zdGFuY2VNYXAuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuc2V0KGlkLCBjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJlbnRVaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlcyA9IGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS53YWxrQ29tcG9uZW50UGFyZW50cyhjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHR3byBwYXJlbnRzIGxldmVsIHRvIHVwZGF0ZSBgaGFzQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyICYmIGkgPCBwYXJlbnRJbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gYXdhaXQgKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudElkKShhcHAsIHBhcmVudFVpZCwgcGFyZW50SW5zdGFuY2VzW2ldLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBzdWJzY3JpcHRpb25zXzEuaXNTdWJzY3JpYmVkKShzaGFyZWRfdXRpbHNfMS5CcmlkZ2VTdWJzY3JpcHRpb25zLkNPTVBPTkVOVF9UUkVFLCBzdWIgPT4gc3ViLnBheWxvYWQuaW5zdGFuY2VJZCA9PT0gcGFyZW50SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoYXBwUmVjb3JkLCBwYXJlbnRJZCwgYXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciwgbnVsbCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkID09PSBpZCkge1xuICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kU2VsZWN0ZWRDb21wb25lbnREYXRhKShhcHBSZWNvcmQsIGlkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX1JFTU9WRUQsIGFzeW5jIChhcHAsIHVpZCwgcGFyZW50VWlkLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcFJlY29yZCA9IGF3YWl0ICgwLCBhcHBfMS5nZXRBcHBSZWNvcmQpKGFwcCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRVaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlcyA9IGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS53YWxrQ29tcG9uZW50UGFyZW50cyhjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gYXdhaXQgKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudElkKShhcHAsIHBhcmVudFVpZCwgcGFyZW50SW5zdGFuY2VzWzBdLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIHN1YnNjcmlwdGlvbnNfMS5pc1N1YnNjcmliZWQpKHNoYXJlZF91dGlsc18xLkJyaWRnZVN1YnNjcmlwdGlvbnMuQ09NUE9ORU5UX1RSRUUsIHN1YiA9PiBzdWIucGF5bG9hZC5pbnN0YW5jZUlkID09PSBwYXJlbnRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkoYXBwLCBjdHgpLCBwYXJlbnRJZCwgYXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciwgbnVsbCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZCA9IGF3YWl0ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJZCkoYXBwLCB1aWQsIGNvbXBvbmVudCwgY3R4KTtcbiAgICAgICAgICAgIGlmICgoMCwgc3Vic2NyaXB0aW9uc18xLmlzU3Vic2NyaWJlZCkoc2hhcmVkX3V0aWxzXzEuQnJpZGdlU3Vic2NyaXB0aW9ucy5TRUxFQ1RFRF9DT01QT05FTlRfREFUQSwgc3ViID0+IHN1Yi5wYXlsb2FkLmluc3RhbmNlSWQgPT09IGlkKSkge1xuICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kRW1wdHlDb21wb25lbnREYXRhKShpZCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFwcFJlY29yZC5pbnN0YW5jZU1hcC5kZWxldGUoaWQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQ29tcG9uZW50IHBlcmZcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5QRVJGT1JNQU5DRV9TVEFSVCwgYXN5bmMgKGFwcCwgdWlkLCB2bSwgdHlwZSwgdGltZSkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgcGVyZl8xLnBlcmZvcm1hbmNlTWFya1N0YXJ0KShhcHAsIHVpZCwgdm0sIHR5cGUsIHRpbWUsIGN0eCk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuUEVSRk9STUFOQ0VfRU5ELCBhc3luYyAoYXBwLCB1aWQsIHZtLCB0eXBlLCB0aW1lKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBwZXJmXzEucGVyZm9ybWFuY2VNYXJrRW5kKShhcHAsIHVpZCwgdm0sIHR5cGUsIHRpbWUsIGN0eCk7XG4gICAgfSk7XG4gICAgLy8gSGlnaGxpZ2h0ZXJcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfSElHSExJR0hULCBhc3luYyAoaW5zdGFuY2VJZCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgaGlnaGxpZ2h0ZXJfMS5oaWdobGlnaHQpKGN0eC5jdXJyZW50QXBwUmVjb3JkLmluc3RhbmNlTWFwLmdldChpbnN0YW5jZUlkKSwgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZCwgY3R4KTtcbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfVU5ISUdITElHSFQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGhpZ2hsaWdodGVyXzEudW5IaWdobGlnaHQpKCk7XG4gICAgfSk7XG4gICAgLy8gVGltZWxpbmVcbiAgICAoMCwgdGltZWxpbmVfMS5zZXR1cFRpbWVsaW5lKShjdHgpO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRJTUVMSU5FX0xBWUVSX0FEREVELCBhc3luYyAob3B0aW9ucywgcGx1Z2luKSA9PiB7XG4gICAgICAgIGNvbnN0IGFwcFJlY29yZCA9IGF3YWl0ICgwLCBhcHBfMS5nZXRBcHBSZWNvcmQpKHBsdWdpbi5kZXNjcmlwdG9yLmFwcCwgY3R4KTtcbiAgICAgICAgY3R4LnRpbWVsaW5lTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIGFwcFJlY29yZCxcbiAgICAgICAgICAgIHBsdWdpbixcbiAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgIH0pO1xuICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0FERCwge30pO1xuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRJTUVMSU5FX0VWRU5UX0FEREVELCBhc3luYyAob3B0aW9ucywgcGx1Z2luKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV8xLmFkZFRpbWVsaW5lRXZlbnQpKG9wdGlvbnMsIHBsdWdpbi5kZXNjcmlwdG9yLmFwcCwgY3R4KTtcbiAgICB9KTtcbiAgICAvLyBDdXN0b20gaW5zcGVjdG9yc1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfQURELCBhc3luYyAob3B0aW9ucywgcGx1Z2luKSA9PiB7XG4gICAgICAgIGNvbnN0IGFwcFJlY29yZCA9IGF3YWl0ICgwLCBhcHBfMS5nZXRBcHBSZWNvcmQpKHBsdWdpbi5kZXNjcmlwdG9yLmFwcCwgY3R4KTtcbiAgICAgICAgY3R4LmN1c3RvbUluc3BlY3RvcnMucHVzaCh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgYXBwUmVjb3JkLFxuICAgICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgICAgdHJlZUZpbHRlcjogJycsXG4gICAgICAgICAgICBzZWxlY3RlZE5vZGVJZDogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ1VTVE9NX0lOU1BFQ1RPUl9BREQsIHt9KTtcbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX1NFTkRfVFJFRSwgYXN5bmMgKGluc3BlY3RvcklkLCBwbHVnaW4pID0+IHtcbiAgICAgICAgY29uc3QgaW5zcGVjdG9yID0gKDAsIGluc3BlY3Rvcl8xLmdldEluc3BlY3RvcikoaW5zcGVjdG9ySWQsIHBsdWdpbi5kZXNjcmlwdG9yLmFwcCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgYXdhaXQgKDAsIGluc3BlY3Rvcl8xLnNlbmRJbnNwZWN0b3JUcmVlKShpbnNwZWN0b3IsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW5zcGVjdG9yICR7aW5zcGVjdG9ySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ1VTVE9NX0lOU1BFQ1RPUl9TRU5EX1NUQVRFLCBhc3luYyAoaW5zcGVjdG9ySWQsIHBsdWdpbikgPT4ge1xuICAgICAgICBjb25zdCBpbnNwZWN0b3IgPSAoMCwgaW5zcGVjdG9yXzEuZ2V0SW5zcGVjdG9yKShpbnNwZWN0b3JJZCwgcGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgICAgICBpZiAoaW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuc2VuZEluc3BlY3RvclN0YXRlKShpbnNwZWN0b3IsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW5zcGVjdG9yICR7aW5zcGVjdG9ySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ1VTVE9NX0lOU1BFQ1RPUl9TRUxFQ1RfTk9ERSwgYXN5bmMgKGluc3BlY3RvcklkLCBub2RlSWQsIHBsdWdpbikgPT4ge1xuICAgICAgICBjb25zdCBpbnNwZWN0b3IgPSAoMCwgaW5zcGVjdG9yXzEuZ2V0SW5zcGVjdG9yKShpbnNwZWN0b3JJZCwgcGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgICAgICBpZiAoaW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuc2VsZWN0SW5zcGVjdG9yTm9kZSkoaW5zcGVjdG9yLCBub2RlSWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW5zcGVjdG9yICR7aW5zcGVjdG9ySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gUGx1Z2luc1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0ICgwLCBwbHVnaW5fMS5hZGRQcmV2aW91c2x5UmVnaXN0ZXJlZFBsdWdpbnMpKGN0eCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGFkZGluZyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgcGx1Z2luczpgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgKDAsIHBsdWdpbl8xLmFkZFF1ZXVlZFBsdWdpbnMpKGN0eCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGFkZGluZyBxdWV1ZWQgcGx1Z2luczpgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuU0VUVVBfREVWVE9PTFNfUExVR0lOLCBhc3luYyAocGx1Z2luRGVzY3JpcHRvciwgc2V0dXBGbikgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgcGx1Z2luXzEuYWRkUGx1Z2luKSh7IHBsdWdpbkRlc2NyaXB0b3IsIHNldHVwRm4gfSwgY3R4KTtcbiAgICB9KTtcbiAgICBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX19WVUVfREVWVE9PTFNfUExVR0lOX0FQSV9BVkFJTEFCTEVfXyA9IHRydWU7XG4gICAgLy8gTGVnYWN5IGZsdXNoXG4gICAgY29uc3QgaGFuZGxlRmx1c2ggPSAoMCwgZGVib3VuY2VfMS5kZWZhdWx0KShhc3luYyAoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKChfYSA9IGN0eC5jdXJyZW50QXBwUmVjb3JkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYmFja2VuZC5vcHRpb25zLmZlYXR1cmVzLmluY2x1ZGVzKGFwcF9iYWNrZW5kX2FwaV8xLkJ1aWx0aW5CYWNrZW5kRmVhdHVyZS5GTFVTSCkpIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5zZW5kQ29tcG9uZW50VHJlZURhdGEpKGN0eC5jdXJyZW50QXBwUmVjb3JkLCAnX3Jvb3QnLCBjdHguY3VycmVudEFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIsIG51bGwsIGN0eCk7XG4gICAgICAgICAgICBpZiAoY3R4LmN1cnJlbnRJbnNwZWN0ZWRDb21wb25lbnRJZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5zZW5kU2VsZWN0ZWRDb21wb25lbnREYXRhKShjdHguY3VycmVudEFwcFJlY29yZCwgY3R4LmN1cnJlbnRJbnNwZWN0ZWRDb21wb25lbnRJZCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIDUwMCk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9mZihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkZMVVNIKTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5GTFVTSCwgaGFuZGxlRmx1c2gpO1xuICAgIC8vIENvbm5lY3QgZG9uZVxuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV9tYXJrZXJfMS5hZGRUaW1lbGluZU1hcmtlcikoe1xuICAgICAgICAgICAgaWQ6ICd2dWUtZGV2dG9vbHMtaW5pdC1iYWNrZW5kJyxcbiAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICBsYWJlbDogJ1Z1ZSBEZXZ0b29scyBjb25uZWN0ZWQnLFxuICAgICAgICAgICAgY29sb3I6IDB4NDFCODgzLFxuICAgICAgICAgICAgYWxsOiB0cnVlLFxuICAgICAgICB9LCBjdHgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB3aGlsZSBhZGRpbmcgZGV2dG9vbHMgY29ubmVjdGVkIHRpbWVsaW5lIG1hcmtlcjpgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb25uZWN0QnJpZGdlKCkge1xuICAgIC8vIFN1YnNjcmlwdGlvbnNcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1NVQlNDUklCRSwgKHsgdHlwZSwgcGF5bG9hZCB9KSA9PiB7XG4gICAgICAgICgwLCBzdWJzY3JpcHRpb25zXzEuc3Vic2NyaWJlKSh0eXBlLCBwYXlsb2FkKTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1VOU1VCU0NSSUJFLCAoeyB0eXBlLCBwYXlsb2FkIH0pID0+IHtcbiAgICAgICAgKDAsIHN1YnNjcmlwdGlvbnNfMS51bnN1YnNjcmliZSkodHlwZSwgcGF5bG9hZCk7XG4gICAgfSk7XG4gICAgLy8gVGFic1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVEFCX1NXSVRDSCwgYXN5bmMgKHRhYikgPT4ge1xuICAgICAgICBjdHguY3VycmVudFRhYiA9IHRhYjtcbiAgICAgICAgYXdhaXQgKDAsIGhpZ2hsaWdodGVyXzEudW5IaWdobGlnaHQpKCk7XG4gICAgfSk7XG4gICAgLy8gQXBwc1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQVBQX0xJU1QsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGFwcF8xLnNlbmRBcHBzKShjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQVBQX1NFTEVDVCwgYXN5bmMgKGlkKSA9PiB7XG4gICAgICAgIGlmIChpZCA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCByZWNvcmQgPSBjdHguYXBwUmVjb3Jkcy5maW5kKHIgPT4gci5pZCA9PT0gaWQpO1xuICAgICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgYXBwXzEuc2VsZWN0QXBwKShyZWNvcmQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQXBwIHdpdGggaWQgJHtpZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1NDQU5fTEVHQUNZX0FQUFMsICgpID0+IHtcbiAgICAgICAgaWYgKGdsb2JhbF9ob29rXzEuaG9vay5WdWUpIHtcbiAgICAgICAgICAgICgwLCBhcHBfMS5fbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcykoY3R4KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIENvbXBvbmVudHNcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9UUkVFLCBhc3luYyAoeyBpbnN0YW5jZUlkLCBmaWx0ZXIgfSkgPT4ge1xuICAgICAgICBjdHguY3VycmVudEFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgICgwLCBzdWJzY3JpcHRpb25zXzEuc3Vic2NyaWJlKShzaGFyZWRfdXRpbHNfMS5CcmlkZ2VTdWJzY3JpcHRpb25zLkNPTVBPTkVOVF9UUkVFLCB7IGluc3RhbmNlSWQgfSk7XG4gICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5zZW5kQ29tcG9uZW50VHJlZURhdGEpKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBmaWx0ZXIsIG51bGwsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfU0VMRUNURURfREFUQSwgYXN5bmMgKGluc3RhbmNlSWQpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGNvbXBvbmVudF8xLnNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEpKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBpbnN0YW5jZUlkLCBjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX0VESVRfU1RBVEUsIGFzeW5jICh7IGluc3RhbmNlSWQsIGRvdFBhdGgsIHR5cGUsIHZhbHVlLCBuZXdLZXksIHJlbW92ZSB9KSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5lZGl0Q29tcG9uZW50U3RhdGUpKGluc3RhbmNlSWQsIGRvdFBhdGgsIHR5cGUsIHsgdmFsdWUsIG5ld0tleSwgcmVtb3ZlIH0sIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfSU5TUEVDVF9ET00sIGFzeW5jICh7IGluc3RhbmNlSWQgfSkgPT4ge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJbnN0YW5jZSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsIGluc3RhbmNlSWQsIGN0eCk7XG4gICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgY29uc3QgW2VsXSA9IGF3YWl0IGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmdldENvbXBvbmVudFJvb3RFbGVtZW50cyhpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0lOU1BFQ1RfVEFSR0VUX18gPSBlbDtcbiAgICAgICAgICAgICAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX0NPTVBPTkVOVF9JTlNQRUNUX0RPTSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9TQ1JPTExfVE8sIGFzeW5jICh7IGluc3RhbmNlSWQgfSkgPT4ge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJbnN0YW5jZSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsIGluc3RhbmNlSWQsIGN0eCk7XG4gICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgY29uc3QgW2VsXSA9IGF3YWl0IGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmdldENvbXBvbmVudFJvb3RFbGVtZW50cyhpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsLnNjcm9sbEludG9WaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZTogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG5vZGVzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHNjcm9sbEludG9WaWV3XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGF3YWl0IGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmdldENvbXBvbmVudEJvdW5kcyhpbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRhcmdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUYXJnZXQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUYXJnZXQuc3R5bGUud2lkdGggPSBgJHtib3VuZHMud2lkdGh9cHhgO1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUYXJnZXQuc3R5bGUuaGVpZ2h0ID0gYCR7Ym91bmRzLmhlaWdodH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRhcmdldC5zdHlsZS50b3AgPSBgJHtib3VuZHMudG9wfXB4YDtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVGFyZ2V0LnN0eWxlLmxlZnQgPSBgJHtib3VuZHMubGVmdH1weGA7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2Nyb2xsVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVGFyZ2V0LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZTogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2Nyb2xsVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICgwLCBoaWdobGlnaHRlcl8xLmhpZ2hsaWdodCkoaW5zdGFuY2UsIGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQsIGN0eCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBoaWdobGlnaHRlcl8xLnVuSGlnaGxpZ2h0KSgpO1xuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfUkVOREVSX0NPREUsIGFzeW5jICh7IGluc3RhbmNlSWQgfSkgPT4ge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJbnN0YW5jZSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsIGluc3RhbmNlSWQsIGN0eCk7XG4gICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLmFwaS5nZXRDb21wb25lbnRSZW5kZXJDb2RlKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ09NUE9ORU5UX1JFTkRFUl9DT0RFLCB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NVU1RPTV9TVEFURV9BQ1RJT04sIGFzeW5jICh7IHZhbHVlLCBhY3Rpb25JbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHJhd0FjdGlvbiA9IHZhbHVlLl9jdXN0b20uYWN0aW9uc1thY3Rpb25JbmRleF07XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9ICgwLCBzaGFyZWRfdXRpbHNfMS5yZXZpdmUpKHJhd0FjdGlvbiA9PT0gbnVsbCB8fCByYXdBY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJhd0FjdGlvbi5hY3Rpb24pO1xuICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGFjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBDb3VsZG4ndCByZXZpdmUgYWN0aW9uICR7YWN0aW9uSW5kZXh9IGZyb21gLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBIaWdobGlnaHRlclxuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX01PVVNFX09WRVIsIGFzeW5jIChpbnN0YW5jZUlkKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBoaWdobGlnaHRlcl8xLmhpZ2hsaWdodCkoY3R4LmN1cnJlbnRBcHBSZWNvcmQuaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlSWQpLCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLCBjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX01PVVNFX09VVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgaGlnaGxpZ2h0ZXJfMS51bkhpZ2hsaWdodCkoKTtcbiAgICB9KTtcbiAgICAvLyBDb21wb25lbnQgcGlja2VyXG4gICAgY29uc3QgY29tcG9uZW50UGlja2VyID0gbmV3IGNvbXBvbmVudF9waWNrXzEuZGVmYXVsdChjdHgpO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX1BJQ0ssICgpID0+IHtcbiAgICAgICAgY29tcG9uZW50UGlja2VyLnN0YXJ0U2VsZWN0aW5nKCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfUElDS19DQU5DRUxFRCwgKCkgPT4ge1xuICAgICAgICBjb21wb25lbnRQaWNrZXIuc3RvcFNlbGVjdGluZygpO1xuICAgIH0pO1xuICAgIC8vIFRpbWVsaW5lXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19USU1FTElORV9MQVlFUl9MSVNULCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV8xLnNlbmRUaW1lbGluZUxheWVycykoY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1RJTUVMSU5FX1NIT1dfU0NSRUVOU0hPVCwgYXN5bmMgKHsgc2NyZWVuc2hvdCB9KSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV9zY3JlZW5zaG90XzEuc2hvd1NjcmVlbnNob3QpKHNjcmVlbnNob3QsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19USU1FTElORV9DTEVBUiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfMS5jbGVhclRpbWVsaW5lKShjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVElNRUxJTkVfRVZFTlRfREFUQSwgYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfMS5zZW5kVGltZWxpbmVFdmVudERhdGEpKGlkLCBjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVElNRUxJTkVfTEFZRVJfTE9BRF9FVkVOVFMsIGFzeW5jICh7IGFwcElkLCBsYXllcklkIH0pID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lXzEuc2VuZFRpbWVsaW5lTGF5ZXJFdmVudHMpKGFwcElkLCBsYXllcklkLCBjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVElNRUxJTkVfTE9BRF9NQVJLRVJTLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV9tYXJrZXJfMS5zZW5kVGltZWxpbmVNYXJrZXJzKShjdHgpO1xuICAgIH0pO1xuICAgIC8vIEN1c3RvbSBpbnNwZWN0b3JzXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0xJU1QsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGluc3BlY3Rvcl8xLnNlbmRDdXN0b21JbnNwZWN0b3JzKShjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9UUkVFLCBhc3luYyAoeyBpbnNwZWN0b3JJZCwgYXBwSWQsIHRyZWVGaWx0ZXIgfSkgPT4ge1xuICAgICAgICBjb25zdCBpbnNwZWN0b3IgPSBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuZ2V0SW5zcGVjdG9yV2l0aEFwcElkKShpbnNwZWN0b3JJZCwgYXBwSWQsIGN0eCk7XG4gICAgICAgIGlmIChpbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGluc3BlY3Rvci50cmVlRmlsdGVyID0gdHJlZUZpbHRlcjtcbiAgICAgICAgICAgICgwLCBpbnNwZWN0b3JfMS5zZW5kSW5zcGVjdG9yVHJlZSkoaW5zcGVjdG9yLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEluc3BlY3RvciAke2luc3BlY3RvcklkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9TVEFURSwgYXN5bmMgKHsgaW5zcGVjdG9ySWQsIGFwcElkLCBub2RlSWQgfSkgPT4ge1xuICAgICAgICBjb25zdCBpbnNwZWN0b3IgPSBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuZ2V0SW5zcGVjdG9yV2l0aEFwcElkKShpbnNwZWN0b3JJZCwgYXBwSWQsIGN0eCk7XG4gICAgICAgIGlmIChpbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGluc3BlY3Rvci5zZWxlY3RlZE5vZGVJZCA9IG5vZGVJZDtcbiAgICAgICAgICAgICgwLCBpbnNwZWN0b3JfMS5zZW5kSW5zcGVjdG9yU3RhdGUpKGluc3BlY3RvciwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfRURJVF9TVEFURSwgYXN5bmMgKHsgaW5zcGVjdG9ySWQsIGFwcElkLCBub2RlSWQsIHBhdGgsIHR5cGUsIHBheWxvYWQgfSkgPT4ge1xuICAgICAgICBjb25zdCBpbnNwZWN0b3IgPSBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuZ2V0SW5zcGVjdG9yV2l0aEFwcElkKShpbnNwZWN0b3JJZCwgYXBwSWQsIGN0eCk7XG4gICAgICAgIGlmIChpbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5lZGl0SW5zcGVjdG9yU3RhdGUpKGluc3BlY3Rvciwgbm9kZUlkLCBwYXRoLCB0eXBlLCBwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaW5zcGVjdG9yLnNlbGVjdGVkTm9kZUlkID0gbm9kZUlkO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGluc3BlY3Rvcl8xLnNlbmRJbnNwZWN0b3JTdGF0ZSkoaW5zcGVjdG9yLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEluc3BlY3RvciAke2luc3BlY3RvcklkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9BQ1RJT04sIGFzeW5jICh7IGluc3BlY3RvcklkLCBhcHBJZCwgYWN0aW9uSW5kZXggfSkgPT4ge1xuICAgICAgICBjb25zdCBpbnNwZWN0b3IgPSBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuZ2V0SW5zcGVjdG9yV2l0aEFwcElkKShpbnNwZWN0b3JJZCwgYXBwSWQsIGN0eCk7XG4gICAgICAgIGlmIChpbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGluc3BlY3Rvci5hY3Rpb25zW2FjdGlvbkluZGV4XTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW5zcGVjdG9yICR7aW5zcGVjdG9ySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gTWlzY1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfTE9HLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAocGF5bG9hZC5zZXJpYWxpemVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5wYXJzZSkodmFsdWUsIHBheWxvYWQucmV2aXZlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXlsb2FkLnJldml2ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSAoMCwgc2hhcmVkX3V0aWxzXzEucmV2aXZlKSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZVtwYXlsb2FkLmxldmVsXSh2YWx1ZSk7XG4gICAgfSk7XG4gICAgLy8gUGx1Z2luc1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfREVWVE9PTFNfUExVR0lOX0xJU1QsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHBsdWdpbl8xLnNlbmRQbHVnaW5MaXN0KShjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfREVWVE9PTFNfUExVR0lOX1NFVFRJTkdfVVBEQVRFRCwgKHsgcGx1Z2luSWQsIGtleSwgbmV3VmFsdWUsIG9sZFZhbHVlIH0pID0+IHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSAoMCwgc2hhcmVkX3V0aWxzXzEuZ2V0UGx1Z2luU2V0dGluZ3MpKHBsdWdpbklkKTtcbiAgICAgICAgY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlBMVUdJTl9TRVRUSU5HU19TRVQsIHBsdWdpbklkLCBzZXR0aW5ncyk7XG4gICAgICAgIGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmNhbGxIb29rKFwic2V0UGx1Z2luU2V0dGluZ3NcIiAvKiBTRVRfUExVR0lOX1NFVFRJTkdTICovLCB7XG4gICAgICAgICAgICBhcHA6IGN0eC5jdXJyZW50QXBwUmVjb3JkLm9wdGlvbnMuYXBwLFxuICAgICAgICAgICAgcGx1Z2luSWQsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgICAgIG9sZFZhbHVlLFxuICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6895\n");
|
|
166
|
+
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nvar _a, _b;\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.initBackend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst debounce_1 = __importDefault(__webpack_require__(54073));\n\nconst throttle_1 = __importDefault(__webpack_require__(12436));\n\nconst global_hook_1 = __webpack_require__(13179);\n\nconst subscriptions_1 = __webpack_require__(19815);\n\nconst highlighter_1 = __webpack_require__(44877);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst component_pick_1 = __importDefault(__webpack_require__(76794));\n\nconst component_1 = __webpack_require__(63304);\n\nconst plugin_1 = __webpack_require__(42989);\n\nconst devtools_api_1 = __webpack_require__(13508);\n\nconst app_1 = __webpack_require__(79132);\n\nconst inspector_1 = __webpack_require__(96048);\n\nconst timeline_screenshot_1 = __webpack_require__(11354);\n\nconst perf_1 = __webpack_require__(75552);\n\nconst page_config_1 = __webpack_require__(26639);\n\nconst timeline_marker_1 = __webpack_require__(72063);\n\nconst flash_js_1 = __webpack_require__(78693);\n\nlet ctx = (_a = shared_utils_1.target.__vdevtools_ctx) !== null && _a !== void 0 ? _a : null;\nlet connected = (_b = shared_utils_1.target.__vdevtools_connected) !== null && _b !== void 0 ? _b : false;\n\nasync function initBackend(bridge) {\n await (0, shared_utils_1.initSharedData)({\n bridge,\n persist: false\n });\n (0, page_config_1.initOnPageConfig)();\n\n if (!connected) {\n // connected = false\n ctx = shared_utils_1.target.__vdevtools_ctx = (0, app_backend_api_1.createBackendContext)({\n bridge,\n hook: global_hook_1.hook\n });\n shared_utils_1.SharedData.legacyApps = false;\n\n if (global_hook_1.hook.Vue) {\n connect();\n (0, app_1._legacy_getAndRegisterApps)(ctx, true);\n shared_utils_1.SharedData.legacyApps = true;\n }\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.INIT, () => {\n (0, app_1._legacy_getAndRegisterApps)(ctx, true);\n shared_utils_1.SharedData.legacyApps = true;\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.APP_ADD, async app => {\n await (0, app_1.registerApp)(app, ctx);\n connect();\n }); // Add apps that already sent init\n\n if (global_hook_1.hook.apps.length) {\n global_hook_1.hook.apps.forEach(app => {\n (0, app_1.registerApp)(app, ctx);\n connect();\n });\n }\n } else {\n ctx.bridge = bridge;\n connectBridge();\n }\n}\n\nexports.initBackend = initBackend;\n\nasync function connect() {\n if (connected) {\n return;\n }\n\n connected = shared_utils_1.target.__vdevtools_connected = true;\n await (0, app_1.waitForAppsRegistration)();\n connectBridge();\n ctx.currentTab = shared_utils_1.BuiltinTabs.COMPONENTS; // Apps\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.APP_UNMOUNT, async app => {\n await (0, app_1.removeApp)(app, ctx);\n }); // Components\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_UPDATED, (0, throttle_1.default)(async (app, uid, parentUid, component) => {\n try {\n let id;\n let appRecord;\n\n if (app && uid != null) {\n id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n appRecord = await (0, app_1.getAppRecord)(app, ctx);\n } else {\n id = ctx.currentInspectedComponentId;\n appRecord = ctx.currentAppRecord;\n } // Update component inspector\n\n\n if (id && (0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.SELECTED_COMPONENT_DATA, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendSelectedComponentData)(appRecord, id, ctx);\n } // Update tree (tags)\n\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendComponentTreeData)(appRecord, id, appRecord.componentFilter, 0, ctx);\n }\n\n if (shared_utils_1.SharedData.trackUpdates) {\n (0, component_1.sendComponentUpdateTracking)(id, ctx);\n }\n\n if (shared_utils_1.SharedData.flashUpdates) {\n (0, flash_js_1.flashComponent)(component, appRecord.backend);\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n }, 1000 / 10));\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_ADDED, async (app, uid, parentUid, component) => {\n try {\n const id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n\n if (component) {\n if (component.__VUE_DEVTOOLS_UID__ == null) {\n component.__VUE_DEVTOOLS_UID__ = id;\n }\n\n if (!appRecord.instanceMap.has(id)) {\n appRecord.instanceMap.set(id, component);\n }\n }\n\n if (parentUid != null) {\n const parentInstances = await appRecord.backend.api.walkComponentParents(component);\n\n if (parentInstances.length) {\n // Check two parents level to update `hasChildren\n for (let i = 0; i < parentInstances.length; i++) {\n const parentId = await (0, component_1.getComponentId)(app, parentUid, parentInstances[i], ctx);\n\n if (i < 2 && (0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === parentId)) {\n requestAnimationFrame(() => {\n (0, component_1.sendComponentTreeData)(appRecord, parentId, appRecord.componentFilter, null, ctx);\n });\n }\n\n if (shared_utils_1.SharedData.trackUpdates) {\n (0, component_1.sendComponentUpdateTracking)(parentId, ctx);\n }\n }\n }\n }\n\n if (ctx.currentInspectedComponentId === id) {\n (0, component_1.sendSelectedComponentData)(appRecord, id, ctx);\n }\n\n if (shared_utils_1.SharedData.trackUpdates) {\n (0, component_1.sendComponentUpdateTracking)(id, ctx);\n }\n\n if (shared_utils_1.SharedData.flashUpdates) {\n (0, flash_js_1.flashComponent)(component, appRecord.backend);\n }\n\n await (0, component_1.refreshComponentTreeSearch)(ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_REMOVED, async (app, uid, parentUid, component) => {\n try {\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n\n if (parentUid != null) {\n const parentInstances = await appRecord.backend.api.walkComponentParents(component);\n\n if (parentInstances.length) {\n const parentId = await (0, component_1.getComponentId)(app, parentUid, parentInstances[0], ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === parentId)) {\n requestAnimationFrame(async () => {\n try {\n (0, component_1.sendComponentTreeData)(await (0, app_1.getAppRecord)(app, ctx), parentId, appRecord.componentFilter, null, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n }\n }\n }\n\n const id = await (0, component_1.getComponentId)(app, uid, component, ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.SELECTED_COMPONENT_DATA, sub => sub.payload.instanceId === id)) {\n (0, component_1.sendEmptyComponentData)(id, ctx);\n }\n\n appRecord.instanceMap.delete(id);\n await (0, component_1.refreshComponentTreeSearch)(ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.TRACK_UPDATE, (id, ctx) => {\n (0, component_1.sendComponentUpdateTracking)(id, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.FLASH_UPDATE, (instance, backend) => {\n (0, flash_js_1.flashComponent)(instance, backend);\n }); // Component perf\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.PERFORMANCE_START, async (app, uid, vm, type, time) => {\n await (0, perf_1.performanceMarkStart)(app, uid, vm, type, time, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.PERFORMANCE_END, async (app, uid, vm, type, time) => {\n await (0, perf_1.performanceMarkEnd)(app, uid, vm, type, time, ctx);\n }); // Highlighter\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_HIGHLIGHT, async instanceId => {\n await (0, highlighter_1.highlight)(ctx.currentAppRecord.instanceMap.get(instanceId), ctx.currentAppRecord.backend, ctx);\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_UNHIGHLIGHT, async () => {\n await (0, highlighter_1.unHighlight)();\n }); // Timeline\n\n (0, timeline_1.setupTimeline)(ctx);\n global_hook_1.hook.on(shared_utils_1.HookEvents.TIMELINE_LAYER_ADDED, async (options, plugin) => {\n const appRecord = await (0, app_1.getAppRecord)(plugin.descriptor.app, ctx);\n ctx.timelineLayers.push({ ...options,\n appRecord,\n plugin,\n events: []\n });\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_ADD, {});\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.TIMELINE_EVENT_ADDED, async (options, plugin) => {\n await (0, timeline_1.addTimelineEvent)(options, plugin.descriptor.app, ctx);\n }); // Custom inspectors\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_ADD, async (options, plugin) => {\n const appRecord = await (0, app_1.getAppRecord)(plugin.descriptor.app, ctx);\n ctx.customInspectors.push({ ...options,\n appRecord,\n plugin,\n treeFilter: '',\n selectedNodeId: null\n });\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_CUSTOM_INSPECTOR_ADD, {});\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_TREE, async (inspectorId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.sendInspectorTree)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SEND_STATE, async (inspectorId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.CUSTOM_INSPECTOR_SELECT_NODE, async (inspectorId, nodeId, plugin) => {\n const inspector = (0, inspector_1.getInspector)(inspectorId, plugin.descriptor.app, ctx);\n\n if (inspector) {\n await (0, inspector_1.selectInspectorNode)(inspector, nodeId, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n }); // Plugins\n\n try {\n await (0, plugin_1.addPreviouslyRegisteredPlugins)(ctx);\n } catch (e) {\n console.error(`Error adding previously registered plugins:`);\n console.error(e);\n }\n\n try {\n await (0, plugin_1.addQueuedPlugins)(ctx);\n } catch (e) {\n console.error(`Error adding queued plugins:`);\n console.error(e);\n }\n\n global_hook_1.hook.on(shared_utils_1.HookEvents.SETUP_DEVTOOLS_PLUGIN, async (pluginDescriptor, setupFn) => {\n await (0, plugin_1.addPlugin)({\n pluginDescriptor,\n setupFn\n }, ctx);\n });\n shared_utils_1.target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ = true; // Legacy flush\n\n const handleFlush = (0, debounce_1.default)(async () => {\n var _a;\n\n if ((_a = ctx.currentAppRecord) === null || _a === void 0 ? void 0 : _a.backend.options.features.includes(app_backend_api_1.BuiltinBackendFeature.FLUSH)) {\n await (0, component_1.sendComponentTreeData)(ctx.currentAppRecord, '_root', ctx.currentAppRecord.componentFilter, null, ctx);\n\n if (ctx.currentInspectedComponentId) {\n await (0, component_1.sendSelectedComponentData)(ctx.currentAppRecord, ctx.currentInspectedComponentId, ctx);\n }\n }\n }, 500);\n global_hook_1.hook.off(shared_utils_1.HookEvents.FLUSH);\n global_hook_1.hook.on(shared_utils_1.HookEvents.FLUSH, handleFlush); // Connect done\n\n try {\n await (0, timeline_marker_1.addTimelineMarker)({\n id: 'vue-devtools-init-backend',\n time: (0, devtools_api_1.now)(),\n label: 'Vue Devtools connected',\n color: 0x41B883,\n all: true\n }, ctx);\n } catch (e) {\n console.error(`Error while adding devtools connected timeline marker:`);\n console.error(e);\n }\n}\n\nfunction connectBridge() {\n // Subscriptions\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_SUBSCRIBE, ({\n type,\n payload\n }) => {\n (0, subscriptions_1.subscribe)(type, payload);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_UNSUBSCRIBE, ({\n type,\n payload\n }) => {\n (0, subscriptions_1.unsubscribe)(type, payload);\n }); // Tabs\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TAB_SWITCH, async tab => {\n ctx.currentTab = tab;\n await (0, highlighter_1.unHighlight)();\n }); // Apps\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_APP_LIST, async () => {\n await (0, app_1.sendApps)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_APP_SELECT, async id => {\n if (id == null) return;\n const record = ctx.appRecords.find(r => r.id === id);\n\n if (record) {\n await (0, app_1.selectApp)(record, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`App with id ${id} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_SCAN_LEGACY_APPS, () => {\n if (global_hook_1.hook.Vue) {\n (0, app_1._legacy_getAndRegisterApps)(ctx);\n }\n }); // Components\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_TREE, async ({\n instanceId,\n filter\n }) => {\n ctx.currentAppRecord.componentFilter = filter;\n (0, subscriptions_1.subscribe)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, {\n instanceId\n });\n await (0, component_1.sendComponentTreeData)(ctx.currentAppRecord, instanceId, filter, null, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_SELECTED_DATA, async instanceId => {\n await (0, component_1.sendSelectedComponentData)(ctx.currentAppRecord, instanceId, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_EDIT_STATE, async ({\n instanceId,\n dotPath,\n type,\n value,\n newKey,\n remove\n }) => {\n await (0, component_1.editComponentState)(instanceId, dotPath, type, {\n value,\n newKey,\n remove\n }, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_INSPECT_DOM, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const [el] = await ctx.currentAppRecord.backend.api.getComponentRootElements(instance);\n\n if (el) {\n // @ts-ignore\n window.__VUE_DEVTOOLS_INSPECT_TARGET__ = el;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_INSPECT_DOM, null);\n }\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_SCROLL_TO, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const [el] = await ctx.currentAppRecord.backend.api.getComponentRootElements(instance);\n\n if (el) {\n if (typeof el.scrollIntoView === 'function') {\n el.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n } else {\n // Handle nodes that don't implement scrollIntoView\n const bounds = await ctx.currentAppRecord.backend.api.getComponentBounds(instance);\n const scrollTarget = document.createElement('div');\n scrollTarget.style.position = 'absolute';\n scrollTarget.style.width = `${bounds.width}px`;\n scrollTarget.style.height = `${bounds.height}px`;\n scrollTarget.style.top = `${bounds.top}px`;\n scrollTarget.style.left = `${bounds.left}px`;\n document.body.appendChild(scrollTarget);\n scrollTarget.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n setTimeout(() => {\n document.body.removeChild(scrollTarget);\n }, 2000);\n }\n\n (0, highlighter_1.highlight)(instance, ctx.currentAppRecord.backend, ctx);\n setTimeout(() => {\n (0, highlighter_1.unHighlight)();\n }, 2000);\n }\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_RENDER_CODE, async ({\n instanceId\n }) => {\n const instance = (0, component_1.getComponentInstance)(ctx.currentAppRecord, instanceId, ctx);\n\n if (instance) {\n const {\n code\n } = await ctx.currentAppRecord.backend.api.getComponentRenderCode(instance);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_COMPONENT_RENDER_CODE, {\n instanceId,\n code\n });\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_STATE_ACTION, async ({\n value,\n actionIndex\n }) => {\n const rawAction = value._custom.actions[actionIndex];\n const action = (0, shared_utils_1.revive)(rawAction === null || rawAction === void 0 ? void 0 : rawAction.action);\n\n if (action) {\n try {\n await action();\n } catch (e) {\n console.error(e);\n }\n } else {\n console.warn(`Couldn't revive action ${actionIndex} from`, value);\n }\n }); // Highlighter\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_MOUSE_OVER, async instanceId => {\n await (0, highlighter_1.highlight)(ctx.currentAppRecord.instanceMap.get(instanceId), ctx.currentAppRecord.backend, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_MOUSE_OUT, async () => {\n await (0, highlighter_1.unHighlight)();\n }); // Component picker\n\n const componentPicker = new component_pick_1.default(ctx);\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_PICK, () => {\n componentPicker.startSelecting();\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_COMPONENT_PICK_CANCELED, () => {\n componentPicker.stopSelecting();\n }); // Timeline\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LAYER_LIST, async () => {\n await (0, timeline_1.sendTimelineLayers)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_SHOW_SCREENSHOT, async ({\n screenshot\n }) => {\n await (0, timeline_screenshot_1.showScreenshot)(screenshot, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_CLEAR, async () => {\n await (0, timeline_1.clearTimeline)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_EVENT_DATA, async ({\n id\n }) => {\n await (0, timeline_1.sendTimelineEventData)(id, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LAYER_LOAD_EVENTS, async ({\n appId,\n layerId\n }) => {\n await (0, timeline_1.sendTimelineLayerEvents)(appId, layerId, ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_TIMELINE_LOAD_MARKERS, async () => {\n await (0, timeline_marker_1.sendTimelineMarkers)(ctx);\n }); // Custom inspectors\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_LIST, async () => {\n await (0, inspector_1.sendCustomInspectors)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_TREE, async ({\n inspectorId,\n appId,\n treeFilter\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n inspector.treeFilter = treeFilter;\n (0, inspector_1.sendInspectorTree)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_STATE, async ({\n inspectorId,\n appId,\n nodeId\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n inspector.selectedNodeId = nodeId;\n (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE, async ({\n inspectorId,\n appId,\n nodeId,\n path,\n type,\n payload\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n await (0, inspector_1.editInspectorState)(inspector, nodeId, path, type, payload, ctx);\n inspector.selectedNodeId = nodeId;\n await (0, inspector_1.sendInspectorState)(inspector, ctx);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_CUSTOM_INSPECTOR_ACTION, async ({\n inspectorId,\n appId,\n actionIndex\n }) => {\n const inspector = await (0, inspector_1.getInspectorWithAppId)(inspectorId, appId, ctx);\n\n if (inspector) {\n const action = inspector.actions[actionIndex];\n\n try {\n await action.action();\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Inspector ${inspectorId} not found`);\n }\n }); // Misc\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_LOG, payload => {\n let value = payload.value;\n\n if (payload.serialized) {\n value = (0, shared_utils_1.parse)(value, payload.revive);\n } else if (payload.revive) {\n value = (0, shared_utils_1.revive)(value);\n } // eslint-disable-next-line no-console\n\n\n console[payload.level](value);\n }); // Plugins\n\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_DEVTOOLS_PLUGIN_LIST, async () => {\n await (0, plugin_1.sendPluginList)(ctx);\n });\n ctx.bridge.on(shared_utils_1.BridgeEvents.TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED, ({\n pluginId,\n key,\n newValue,\n oldValue\n }) => {\n const settings = (0, shared_utils_1.getPluginSettings)(pluginId);\n ctx.hook.emit(shared_utils_1.HookEvents.PLUGIN_SETTINGS_SET, pluginId, settings);\n ctx.currentAppRecord.backend.api.callHook(\"setPluginSettings\"\n /* SET_PLUGIN_SETTINGS */\n , {\n app: ctx.currentAppRecord.options.app,\n pluginId,\n key,\n newValue,\n oldValue,\n settings\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxnQkFBSixDQUFxQixPQUFyQixDQUE2QixHQURpQztBQUVuRSxjQUZtRTtBQUduRSxTQUhtRTtBQUluRSxjQUptRTtBQUtuRSxjQUxtRTtBQU1uRTtBQU5tRSxLQUFyRTtBQVFELEdBWEQ7QUFZRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG52YXIgX2EsIF9iO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbml0QmFja2VuZCA9IHZvaWQgMDtcbmNvbnN0IGFwcF9iYWNrZW5kX2FwaV8xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvYXBwLWJhY2tlbmQtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBkZWJvdW5jZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJsb2Rhc2gvZGVib3VuY2VcIikpO1xuY29uc3QgdGhyb3R0bGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibG9kYXNoL3Rocm90dGxlXCIpKTtcbmNvbnN0IGdsb2JhbF9ob29rXzEgPSByZXF1aXJlKFwiLi9nbG9iYWwtaG9va1wiKTtcbmNvbnN0IHN1YnNjcmlwdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3V0aWwvc3Vic2NyaXB0aW9uc1wiKTtcbmNvbnN0IGhpZ2hsaWdodGVyXzEgPSByZXF1aXJlKFwiLi9oaWdobGlnaHRlclwiKTtcbmNvbnN0IHRpbWVsaW5lXzEgPSByZXF1aXJlKFwiLi90aW1lbGluZVwiKTtcbmNvbnN0IGNvbXBvbmVudF9waWNrXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY29tcG9uZW50LXBpY2tcIikpO1xuY29uc3QgY29tcG9uZW50XzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRcIik7XG5jb25zdCBwbHVnaW5fMSA9IHJlcXVpcmUoXCIuL3BsdWdpblwiKTtcbmNvbnN0IGRldnRvb2xzX2FwaV8xID0gcmVxdWlyZShcIkB2dWUvZGV2dG9vbHMtYXBpXCIpO1xuY29uc3QgYXBwXzEgPSByZXF1aXJlKFwiLi9hcHBcIik7XG5jb25zdCBpbnNwZWN0b3JfMSA9IHJlcXVpcmUoXCIuL2luc3BlY3RvclwiKTtcbmNvbnN0IHRpbWVsaW5lX3NjcmVlbnNob3RfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lLXNjcmVlbnNob3RcIik7XG5jb25zdCBwZXJmXzEgPSByZXF1aXJlKFwiLi9wZXJmXCIpO1xuY29uc3QgcGFnZV9jb25maWdfMSA9IHJlcXVpcmUoXCIuL3BhZ2UtY29uZmlnXCIpO1xuY29uc3QgdGltZWxpbmVfbWFya2VyXzEgPSByZXF1aXJlKFwiLi90aW1lbGluZS1tYXJrZXJcIik7XG5jb25zdCBmbGFzaF9qc18xID0gcmVxdWlyZShcIi4vZmxhc2guanNcIik7XG5sZXQgY3R4ID0gKF9hID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fdmRldnRvb2xzX2N0eCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbmxldCBjb25uZWN0ZWQgPSAoX2IgPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX192ZGV2dG9vbHNfY29ubmVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcbmFzeW5jIGZ1bmN0aW9uIGluaXRCYWNrZW5kKGJyaWRnZSkge1xuICAgIGF3YWl0ICgwLCBzaGFyZWRfdXRpbHNfMS5pbml0U2hhcmVkRGF0YSkoe1xuICAgICAgICBicmlkZ2UsXG4gICAgICAgIHBlcnNpc3Q6IGZhbHNlLFxuICAgIH0pO1xuICAgICgwLCBwYWdlX2NvbmZpZ18xLmluaXRPblBhZ2VDb25maWcpKCk7XG4gICAgaWYgKCFjb25uZWN0ZWQpIHtcbiAgICAgICAgLy8gY29ubmVjdGVkID0gZmFsc2VcbiAgICAgICAgY3R4ID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fdmRldnRvb2xzX2N0eCA9ICgwLCBhcHBfYmFja2VuZF9hcGlfMS5jcmVhdGVCYWNrZW5kQ29udGV4dCkoe1xuICAgICAgICAgICAgYnJpZGdlLFxuICAgICAgICAgICAgaG9vazogZ2xvYmFsX2hvb2tfMS5ob29rLFxuICAgICAgICB9KTtcbiAgICAgICAgc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5sZWdhY3lBcHBzID0gZmFsc2U7XG4gICAgICAgIGlmIChnbG9iYWxfaG9va18xLmhvb2suVnVlKSB7XG4gICAgICAgICAgICBjb25uZWN0KCk7XG4gICAgICAgICAgICAoMCwgYXBwXzEuX2xlZ2FjeV9nZXRBbmRSZWdpc3RlckFwcHMpKGN0eCwgdHJ1ZSk7XG4gICAgICAgICAgICBzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmxlZ2FjeUFwcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLklOSVQsICgpID0+IHtcbiAgICAgICAgICAgICgwLCBhcHBfMS5fbGVnYWN5X2dldEFuZFJlZ2lzdGVyQXBwcykoY3R4LCB0cnVlKTtcbiAgICAgICAgICAgIHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEubGVnYWN5QXBwcyA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5BUFBfQURELCBhc3luYyAoYXBwKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgYXBwXzEucmVnaXN0ZXJBcHApKGFwcCwgY3R4KTtcbiAgICAgICAgICAgIGNvbm5lY3QoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFkZCBhcHBzIHRoYXQgYWxyZWFkeSBzZW50IGluaXRcbiAgICAgICAgaWYgKGdsb2JhbF9ob29rXzEuaG9vay5hcHBzLmxlbmd0aCkge1xuICAgICAgICAgICAgZ2xvYmFsX2hvb2tfMS5ob29rLmFwcHMuZm9yRWFjaChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICgwLCBhcHBfMS5yZWdpc3RlckFwcCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgICAgIGNvbm5lY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjdHguYnJpZGdlID0gYnJpZGdlO1xuICAgICAgICBjb25uZWN0QnJpZGdlKCk7XG4gICAgfVxufVxuZXhwb3J0cy5pbml0QmFja2VuZCA9IGluaXRCYWNrZW5kO1xuYXN5bmMgZnVuY3Rpb24gY29ubmVjdCgpIHtcbiAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29ubmVjdGVkID0gc2hhcmVkX3V0aWxzXzEudGFyZ2V0Ll9fdmRldnRvb2xzX2Nvbm5lY3RlZCA9IHRydWU7XG4gICAgYXdhaXQgKDAsIGFwcF8xLndhaXRGb3JBcHBzUmVnaXN0cmF0aW9uKSgpO1xuICAgIGNvbm5lY3RCcmlkZ2UoKTtcbiAgICBjdHguY3VycmVudFRhYiA9IHNoYXJlZF91dGlsc18xLkJ1aWx0aW5UYWJzLkNPTVBPTkVOVFM7XG4gICAgLy8gQXBwc1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkFQUF9VTk1PVU5ULCBhc3luYyAoYXBwKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBhcHBfMS5yZW1vdmVBcHApKGFwcCwgY3R4KTtcbiAgICB9KTtcbiAgICAvLyBDb21wb25lbnRzXG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX1VQREFURUQsICgwLCB0aHJvdHRsZV8xLmRlZmF1bHQpKGFzeW5jIChhcHAsIHVpZCwgcGFyZW50VWlkLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBpZDtcbiAgICAgICAgICAgIGxldCBhcHBSZWNvcmQ7XG4gICAgICAgICAgICBpZiAoYXBwICYmIHVpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBhd2FpdCAoMCwgY29tcG9uZW50XzEuZ2V0Q29tcG9uZW50SWQpKGFwcCwgdWlkLCBjb21wb25lbnQsIGN0eCk7XG4gICAgICAgICAgICAgICAgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWQgPSBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkO1xuICAgICAgICAgICAgICAgIGFwcFJlY29yZCA9IGN0eC5jdXJyZW50QXBwUmVjb3JkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBpbnNwZWN0b3JcbiAgICAgICAgICAgIGlmIChpZCAmJiAoMCwgc3Vic2NyaXB0aW9uc18xLmlzU3Vic2NyaWJlZCkoc2hhcmVkX3V0aWxzXzEuQnJpZGdlU3Vic2NyaXB0aW9ucy5TRUxFQ1RFRF9DT01QT05FTlRfREFUQSwgc3ViID0+IHN1Yi5wYXlsb2FkLmluc3RhbmNlSWQgPT09IGlkKSkge1xuICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kU2VsZWN0ZWRDb21wb25lbnREYXRhKShhcHBSZWNvcmQsIGlkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIHRyZWUgKHRhZ3MpXG4gICAgICAgICAgICBpZiAoKDAsIHN1YnNjcmlwdGlvbnNfMS5pc1N1YnNjcmliZWQpKHNoYXJlZF91dGlsc18xLkJyaWRnZVN1YnNjcmlwdGlvbnMuQ09NUE9ORU5UX1RSRUUsIHN1YiA9PiBzdWIucGF5bG9hZC5pbnN0YW5jZUlkID09PSBpZCkpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29tcG9uZW50XzEuc2VuZENvbXBvbmVudFRyZWVEYXRhKShhcHBSZWNvcmQsIGlkLCBhcHBSZWNvcmQuY29tcG9uZW50RmlsdGVyLCAwLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEudHJhY2tVcGRhdGVzKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRVcGRhdGVUcmFja2luZykoaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5mbGFzaFVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAoMCwgZmxhc2hfanNfMS5mbGFzaENvbXBvbmVudCkoY29tcG9uZW50LCBhcHBSZWNvcmQuYmFja2VuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCAxMDAwIC8gMTApKTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfQURERUQsIGFzeW5jIChhcHAsIHVpZCwgcGFyZW50VWlkLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYXdhaXQgKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudElkKShhcHAsIHVpZCwgY29tcG9uZW50LCBjdHgpO1xuICAgICAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkoYXBwLCBjdHgpO1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuX19WVUVfREVWVE9PTFNfVUlEX18gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuX19WVUVfREVWVE9PTFNfVUlEX18gPSBpZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBSZWNvcmQuaW5zdGFuY2VNYXAuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuc2V0KGlkLCBjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJlbnRVaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlcyA9IGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS53YWxrQ29tcG9uZW50UGFyZW50cyhjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJbnN0YW5jZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHR3byBwYXJlbnRzIGxldmVsIHRvIHVwZGF0ZSBgaGFzQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRJbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gYXdhaXQgKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudElkKShhcHAsIHBhcmVudFVpZCwgcGFyZW50SW5zdGFuY2VzW2ldLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAyICYmICgwLCBzdWJzY3JpcHRpb25zXzEuaXNTdWJzY3JpYmVkKShzaGFyZWRfdXRpbHNfMS5CcmlkZ2VTdWJzY3JpcHRpb25zLkNPTVBPTkVOVF9UUkVFLCBzdWIgPT4gc3ViLnBheWxvYWQuaW5zdGFuY2VJZCA9PT0gcGFyZW50SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoYXBwUmVjb3JkLCBwYXJlbnRJZCwgYXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciwgbnVsbCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLnRyYWNrVXBkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kQ29tcG9uZW50VXBkYXRlVHJhY2tpbmcpKHBhcmVudElkLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN0eC5jdXJyZW50SW5zcGVjdGVkQ29tcG9uZW50SWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEpKGFwcFJlY29yZCwgaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS50cmFja1VwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29tcG9uZW50XzEuc2VuZENvbXBvbmVudFVwZGF0ZVRyYWNraW5nKShpZCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmZsYXNoVXBkYXRlcykge1xuICAgICAgICAgICAgICAgICgwLCBmbGFzaF9qc18xLmZsYXNoQ29tcG9uZW50KShjb21wb25lbnQsIGFwcFJlY29yZC5iYWNrZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5yZWZyZXNoQ29tcG9uZW50VHJlZVNlYXJjaCkoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9SRU1PVkVELCBhc3luYyAoYXBwLCB1aWQsIHBhcmVudFVpZCwgY29tcG9uZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgICAgICBpZiAocGFyZW50VWlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZXMgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkud2Fsa0NvbXBvbmVudFBhcmVudHMoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IGF3YWl0ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJZCkoYXBwLCBwYXJlbnRVaWQsIHBhcmVudEluc3RhbmNlc1swXSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBzdWJzY3JpcHRpb25zXzEuaXNTdWJzY3JpYmVkKShzaGFyZWRfdXRpbHNfMS5CcmlkZ2VTdWJzY3JpcHRpb25zLkNPTVBPTkVOVF9UUkVFLCBzdWIgPT4gc3ViLnBheWxvYWQuaW5zdGFuY2VJZCA9PT0gcGFyZW50SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjb21wb25lbnRfMS5zZW5kQ29tcG9uZW50VHJlZURhdGEpKGF3YWl0ICgwLCBhcHBfMS5nZXRBcHBSZWNvcmQpKGFwcCwgY3R4KSwgcGFyZW50SWQsIGFwcFJlY29yZC5jb21wb25lbnRGaWx0ZXIsIG51bGwsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaWQgPSBhd2FpdCAoMCwgY29tcG9uZW50XzEuZ2V0Q29tcG9uZW50SWQpKGFwcCwgdWlkLCBjb21wb25lbnQsIGN0eCk7XG4gICAgICAgICAgICBpZiAoKDAsIHN1YnNjcmlwdGlvbnNfMS5pc1N1YnNjcmliZWQpKHNoYXJlZF91dGlsc18xLkJyaWRnZVN1YnNjcmlwdGlvbnMuU0VMRUNURURfQ09NUE9ORU5UX0RBVEEsIHN1YiA9PiBzdWIucGF5bG9hZC5pbnN0YW5jZUlkID09PSBpZCkpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29tcG9uZW50XzEuc2VuZEVtcHR5Q29tcG9uZW50RGF0YSkoaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBjb21wb25lbnRfMS5yZWZyZXNoQ29tcG9uZW50VHJlZVNlYXJjaCkoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRSQUNLX1VQREFURSwgKGlkLCBjdHgpID0+IHtcbiAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRVcGRhdGVUcmFja2luZykoaWQsIGN0eCk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuRkxBU0hfVVBEQVRFLCAoaW5zdGFuY2UsIGJhY2tlbmQpID0+IHtcbiAgICAgICAgKDAsIGZsYXNoX2pzXzEuZmxhc2hDb21wb25lbnQpKGluc3RhbmNlLCBiYWNrZW5kKTtcbiAgICB9KTtcbiAgICAvLyBDb21wb25lbnQgcGVyZlxuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlBFUkZPUk1BTkNFX1NUQVJULCBhc3luYyAoYXBwLCB1aWQsIHZtLCB0eXBlLCB0aW1lKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBwZXJmXzEucGVyZm9ybWFuY2VNYXJrU3RhcnQpKGFwcCwgdWlkLCB2bSwgdHlwZSwgdGltZSwgY3R4KTtcbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5QRVJGT1JNQU5DRV9FTkQsIGFzeW5jIChhcHAsIHVpZCwgdm0sIHR5cGUsIHRpbWUpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHBlcmZfMS5wZXJmb3JtYW5jZU1hcmtFbmQpKGFwcCwgdWlkLCB2bSwgdHlwZSwgdGltZSwgY3R4KTtcbiAgICB9KTtcbiAgICAvLyBIaWdobGlnaHRlclxuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9ISUdITElHSFQsIGFzeW5jIChpbnN0YW5jZUlkKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBoaWdobGlnaHRlcl8xLmhpZ2hsaWdodCkoY3R4LmN1cnJlbnRBcHBSZWNvcmQuaW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlSWQpLCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLCBjdHgpO1xuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNPTVBPTkVOVF9VTkhJR0hMSUdIVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgaGlnaGxpZ2h0ZXJfMS51bkhpZ2hsaWdodCkoKTtcbiAgICB9KTtcbiAgICAvLyBUaW1lbGluZVxuICAgICgwLCB0aW1lbGluZV8xLnNldHVwVGltZWxpbmUpKGN0eCk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuVElNRUxJTkVfTEFZRVJfQURERUQsIGFzeW5jIChvcHRpb25zLCBwbHVnaW4pID0+IHtcbiAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkocGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgICAgICBjdHgudGltZWxpbmVMYXllcnMucHVzaCh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgYXBwUmVjb3JkLFxuICAgICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgICAgZXZlbnRzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfTEFZRVJfQURELCB7fSk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuVElNRUxJTkVfRVZFTlRfQURERUQsIGFzeW5jIChvcHRpb25zLCBwbHVnaW4pID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lXzEuYWRkVGltZWxpbmVFdmVudCkob3B0aW9ucywgcGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgIH0pO1xuICAgIC8vIEN1c3RvbSBpbnNwZWN0b3JzXG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ1VTVE9NX0lOU1BFQ1RPUl9BREQsIGFzeW5jIChvcHRpb25zLCBwbHVnaW4pID0+IHtcbiAgICAgICAgY29uc3QgYXBwUmVjb3JkID0gYXdhaXQgKDAsIGFwcF8xLmdldEFwcFJlY29yZCkocGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgICAgICBjdHguY3VzdG9tSW5zcGVjdG9ycy5wdXNoKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBhcHBSZWNvcmQsXG4gICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICB0cmVlRmlsdGVyOiAnJyxcbiAgICAgICAgICAgIHNlbGVjdGVkTm9kZUlkOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX0FERCwge30pO1xuICAgIH0pO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkNVU1RPTV9JTlNQRUNUT1JfU0VORF9UUkVFLCBhc3luYyAoaW5zcGVjdG9ySWQsIHBsdWdpbikgPT4ge1xuICAgICAgICBjb25zdCBpbnNwZWN0b3IgPSAoMCwgaW5zcGVjdG9yXzEuZ2V0SW5zcGVjdG9yKShpbnNwZWN0b3JJZCwgcGx1Z2luLmRlc2NyaXB0b3IuYXBwLCBjdHgpO1xuICAgICAgICBpZiAoaW5zcGVjdG9yKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuc2VuZEluc3BlY3RvclRyZWUpKGluc3BlY3RvciwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX1NFTkRfU1RBVEUsIGFzeW5jIChpbnNwZWN0b3JJZCwgcGx1Z2luKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3IpKGluc3BlY3RvcklkLCBwbHVnaW4uZGVzY3JpcHRvci5hcHAsIGN0eCk7XG4gICAgICAgIGlmIChpbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5zZW5kSW5zcGVjdG9yU3RhdGUpKGluc3BlY3RvciwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFLCBhc3luYyAoaW5zcGVjdG9ySWQsIG5vZGVJZCwgcGx1Z2luKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3IpKGluc3BlY3RvcklkLCBwbHVnaW4uZGVzY3JpcHRvci5hcHAsIGN0eCk7XG4gICAgICAgIGlmIChpbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5zZWxlY3RJbnNwZWN0b3JOb2RlKShpbnNwZWN0b3IsIG5vZGVJZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBQbHVnaW5zXG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgKDAsIHBsdWdpbl8xLmFkZFByZXZpb3VzbHlSZWdpc3RlcmVkUGx1Z2lucykoY3R4KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgYWRkaW5nIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwbHVnaW5zOmApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBhd2FpdCAoMCwgcGx1Z2luXzEuYWRkUXVldWVkUGx1Z2lucykoY3R4KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgYWRkaW5nIHF1ZXVlZCBwbHVnaW5zOmApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgICBnbG9iYWxfaG9va18xLmhvb2sub24oc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5TRVRVUF9ERVZUT09MU19QTFVHSU4sIGFzeW5jIChwbHVnaW5EZXNjcmlwdG9yLCBzZXR1cEZuKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBwbHVnaW5fMS5hZGRQbHVnaW4pKHsgcGx1Z2luRGVzY3JpcHRvciwgc2V0dXBGbiB9LCBjdHgpO1xuICAgIH0pO1xuICAgIHNoYXJlZF91dGlsc18xLnRhcmdldC5fX1ZVRV9ERVZUT09MU19QTFVHSU5fQVBJX0FWQUlMQUJMRV9fID0gdHJ1ZTtcbiAgICAvLyBMZWdhY3kgZmx1c2hcbiAgICBjb25zdCBoYW5kbGVGbHVzaCA9ICgwLCBkZWJvdW5jZV8xLmRlZmF1bHQpKGFzeW5jICgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKF9hID0gY3R4LmN1cnJlbnRBcHBSZWNvcmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5iYWNrZW5kLm9wdGlvbnMuZmVhdHVyZXMuaW5jbHVkZXMoYXBwX2JhY2tlbmRfYXBpXzEuQnVpbHRpbkJhY2tlbmRGZWF0dXJlLkZMVVNIKSkge1xuICAgICAgICAgICAgYXdhaXQgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsICdfcm9vdCcsIGN0eC5jdXJyZW50QXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciwgbnVsbCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgKDAsIGNvbXBvbmVudF8xLnNlbmRTZWxlY3RlZENvbXBvbmVudERhdGEpKGN0eC5jdXJyZW50QXBwUmVjb3JkLCBjdHguY3VycmVudEluc3BlY3RlZENvbXBvbmVudElkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgNTAwKTtcbiAgICBnbG9iYWxfaG9va18xLmhvb2sub2ZmKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuRkxVU0gpO1xuICAgIGdsb2JhbF9ob29rXzEuaG9vay5vbihzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkZMVVNILCBoYW5kbGVGbHVzaCk7XG4gICAgLy8gQ29ubmVjdCBkb25lXG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lX21hcmtlcl8xLmFkZFRpbWVsaW5lTWFya2VyKSh7XG4gICAgICAgICAgICBpZDogJ3Z1ZS1kZXZ0b29scy1pbml0LWJhY2tlbmQnLFxuICAgICAgICAgICAgdGltZTogKDAsIGRldnRvb2xzX2FwaV8xLm5vdykoKSxcbiAgICAgICAgICAgIGxhYmVsOiAnVnVlIERldnRvb2xzIGNvbm5lY3RlZCcsXG4gICAgICAgICAgICBjb2xvcjogMHg0MUI4ODMsXG4gICAgICAgICAgICBhbGw6IHRydWUsXG4gICAgICAgIH0sIGN0eCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHdoaWxlIGFkZGluZyBkZXZ0b29scyBjb25uZWN0ZWQgdGltZWxpbmUgbWFya2VyOmApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbm5lY3RCcmlkZ2UoKSB7XG4gICAgLy8gU3Vic2NyaXB0aW9uc1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfU1VCU0NSSUJFLCAoeyB0eXBlLCBwYXlsb2FkIH0pID0+IHtcbiAgICAgICAgKDAsIHN1YnNjcmlwdGlvbnNfMS5zdWJzY3JpYmUpKHR5cGUsIHBheWxvYWQpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVU5TVUJTQ1JJQkUsICh7IHR5cGUsIHBheWxvYWQgfSkgPT4ge1xuICAgICAgICAoMCwgc3Vic2NyaXB0aW9uc18xLnVuc3Vic2NyaWJlKSh0eXBlLCBwYXlsb2FkKTtcbiAgICB9KTtcbiAgICAvLyBUYWJzXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19UQUJfU1dJVENILCBhc3luYyAodGFiKSA9PiB7XG4gICAgICAgIGN0eC5jdXJyZW50VGFiID0gdGFiO1xuICAgICAgICBhd2FpdCAoMCwgaGlnaGxpZ2h0ZXJfMS51bkhpZ2hsaWdodCkoKTtcbiAgICB9KTtcbiAgICAvLyBBcHBzXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19BUFBfTElTVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgYXBwXzEuc2VuZEFwcHMpKGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19BUFBfU0VMRUNULCBhc3luYyAoaWQpID0+IHtcbiAgICAgICAgaWYgKGlkID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGN0eC5hcHBSZWNvcmRzLmZpbmQociA9PiByLmlkID09PSBpZCk7XG4gICAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBhcHBfMS5zZWxlY3RBcHApKHJlY29yZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBBcHAgd2l0aCBpZCAke2lkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfU0NBTl9MRUdBQ1lfQVBQUywgKCkgPT4ge1xuICAgICAgICBpZiAoZ2xvYmFsX2hvb2tfMS5ob29rLlZ1ZSkge1xuICAgICAgICAgICAgKDAsIGFwcF8xLl9sZWdhY3lfZ2V0QW5kUmVnaXN0ZXJBcHBzKShjdHgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQ29tcG9uZW50c1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX1RSRUUsIGFzeW5jICh7IGluc3RhbmNlSWQsIGZpbHRlciB9KSA9PiB7XG4gICAgICAgIGN0eC5jdXJyZW50QXBwUmVjb3JkLmNvbXBvbmVudEZpbHRlciA9IGZpbHRlcjtcbiAgICAgICAgKDAsIHN1YnNjcmlwdGlvbnNfMS5zdWJzY3JpYmUpKHNoYXJlZF91dGlsc18xLkJyaWRnZVN1YnNjcmlwdGlvbnMuQ09NUE9ORU5UX1RSRUUsIHsgaW5zdGFuY2VJZCB9KTtcbiAgICAgICAgYXdhaXQgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsIGluc3RhbmNlSWQsIGZpbHRlciwgbnVsbCwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9TRUxFQ1RFRF9EQVRBLCBhc3luYyAoaW5zdGFuY2VJZCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgY29tcG9uZW50XzEuc2VuZFNlbGVjdGVkQ29tcG9uZW50RGF0YSkoY3R4LmN1cnJlbnRBcHBSZWNvcmQsIGluc3RhbmNlSWQsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfRURJVF9TVEFURSwgYXN5bmMgKHsgaW5zdGFuY2VJZCwgZG90UGF0aCwgdHlwZSwgdmFsdWUsIG5ld0tleSwgcmVtb3ZlIH0pID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGNvbXBvbmVudF8xLmVkaXRDb21wb25lbnRTdGF0ZSkoaW5zdGFuY2VJZCwgZG90UGF0aCwgdHlwZSwgeyB2YWx1ZSwgbmV3S2V5LCByZW1vdmUgfSwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9JTlNQRUNUX0RPTSwgYXN5bmMgKHsgaW5zdGFuY2VJZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudEluc3RhbmNlKShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBbZWxdID0gYXdhaXQgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB3aW5kb3cuX19WVUVfREVWVE9PTFNfSU5TUEVDVF9UQVJHRVRfXyA9IGVsO1xuICAgICAgICAgICAgICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfQ09NUE9ORU5UX0lOU1BFQ1RfRE9NLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ09NUE9ORU5UX1NDUk9MTF9UTywgYXN5bmMgKHsgaW5zdGFuY2VJZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudEluc3RhbmNlKShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBbZWxdID0gYXdhaXQgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWwuc2Nyb2xsSW50b1ZpZXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBkb24ndCBpbXBsZW1lbnQgc2Nyb2xsSW50b1ZpZXdcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gYXdhaXQgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVGFyZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRhcmdldC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRhcmdldC5zdHlsZS53aWR0aCA9IGAke2JvdW5kcy53aWR0aH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHtib3VuZHMuaGVpZ2h0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVGFyZ2V0LnN0eWxlLnRvcCA9IGAke2JvdW5kcy50b3B9cHhgO1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUYXJnZXQuc3R5bGUubGVmdCA9IGAke2JvdW5kcy5sZWZ0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JvbGxUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUYXJnZXQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzY3JvbGxUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIGhpZ2hsaWdodGVyXzEuaGlnaGxpZ2h0KShpbnN0YW5jZSwgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZCwgY3R4KTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGhpZ2hsaWdodGVyXzEudW5IaWdobGlnaHQpKCk7XG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9SRU5ERVJfQ09ERSwgYXN5bmMgKHsgaW5zdGFuY2VJZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gKDAsIGNvbXBvbmVudF8xLmdldENvbXBvbmVudEluc3RhbmNlKShjdHguY3VycmVudEFwcFJlY29yZCwgaW5zdGFuY2VJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmdldENvbXBvbmVudFJlbmRlckNvZGUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9DT01QT05FTlRfUkVOREVSX0NPREUsIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUlkLFxuICAgICAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ1VTVE9NX1NUQVRFX0FDVElPTiwgYXN5bmMgKHsgdmFsdWUsIGFjdGlvbkluZGV4IH0pID0+IHtcbiAgICAgICAgY29uc3QgcmF3QWN0aW9uID0gdmFsdWUuX2N1c3RvbS5hY3Rpb25zW2FjdGlvbkluZGV4XTtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gKDAsIHNoYXJlZF91dGlsc18xLnJldml2ZSkocmF3QWN0aW9uID09PSBudWxsIHx8IHJhd0FjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmF3QWN0aW9uLmFjdGlvbik7XG4gICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYENvdWxkbid0IHJldml2ZSBhY3Rpb24gJHthY3Rpb25JbmRleH0gZnJvbWAsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEhpZ2hsaWdodGVyXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfTU9VU0VfT1ZFUiwgYXN5bmMgKGluc3RhbmNlSWQpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIGhpZ2hsaWdodGVyXzEuaGlnaGxpZ2h0KShjdHguY3VycmVudEFwcFJlY29yZC5pbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2VJZCksIGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfTU9VU0VfT1VULCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCBoaWdobGlnaHRlcl8xLnVuSGlnaGxpZ2h0KSgpO1xuICAgIH0pO1xuICAgIC8vIENvbXBvbmVudCBwaWNrZXJcbiAgICBjb25zdCBjb21wb25lbnRQaWNrZXIgPSBuZXcgY29tcG9uZW50X3BpY2tfMS5kZWZhdWx0KGN0eCk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DT01QT05FTlRfUElDSywgKCkgPT4ge1xuICAgICAgICBjb21wb25lbnRQaWNrZXIuc3RhcnRTZWxlY3RpbmcoKTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NPTVBPTkVOVF9QSUNLX0NBTkNFTEVELCAoKSA9PiB7XG4gICAgICAgIGNvbXBvbmVudFBpY2tlci5zdG9wU2VsZWN0aW5nKCk7XG4gICAgfSk7XG4gICAgLy8gVGltZWxpbmVcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1RJTUVMSU5FX0xBWUVSX0xJU1QsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lXzEuc2VuZFRpbWVsaW5lTGF5ZXJzKShjdHgpO1xuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfVElNRUxJTkVfU0hPV19TQ1JFRU5TSE9ULCBhc3luYyAoeyBzY3JlZW5zaG90IH0pID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lX3NjcmVlbnNob3RfMS5zaG93U2NyZWVuc2hvdCkoc2NyZWVuc2hvdCwgY3R4KTtcbiAgICB9KTtcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX1RJTUVMSU5FX0NMRUFSLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV8xLmNsZWFyVGltZWxpbmUpKGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19USU1FTElORV9FVkVOVF9EQVRBLCBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV8xLnNlbmRUaW1lbGluZUV2ZW50RGF0YSkoaWQsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19USU1FTElORV9MQVlFUl9MT0FEX0VWRU5UUywgYXN5bmMgKHsgYXBwSWQsIGxheWVySWQgfSkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfMS5zZW5kVGltZWxpbmVMYXllckV2ZW50cykoYXBwSWQsIGxheWVySWQsIGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19USU1FTElORV9MT0FEX01BUktFUlMsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgKDAsIHRpbWVsaW5lX21hcmtlcl8xLnNlbmRUaW1lbGluZU1hcmtlcnMpKGN0eCk7XG4gICAgfSk7XG4gICAgLy8gQ3VzdG9tIGluc3BlY3RvcnNcbiAgICBjdHguYnJpZGdlLm9uKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfTElTVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuc2VuZEN1c3RvbUluc3BlY3RvcnMpKGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX1RSRUUsIGFzeW5jICh7IGluc3BlY3RvcklkLCBhcHBJZCwgdHJlZUZpbHRlciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9IGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3JXaXRoQXBwSWQpKGluc3BlY3RvcklkLCBhcHBJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgaW5zcGVjdG9yLnRyZWVGaWx0ZXIgPSB0cmVlRmlsdGVyO1xuICAgICAgICAgICAgKDAsIGluc3BlY3Rvcl8xLnNlbmRJbnNwZWN0b3JUcmVlKShpbnNwZWN0b3IsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW5zcGVjdG9yICR7aW5zcGVjdG9ySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX1NUQVRFLCBhc3luYyAoeyBpbnNwZWN0b3JJZCwgYXBwSWQsIG5vZGVJZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9IGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3JXaXRoQXBwSWQpKGluc3BlY3RvcklkLCBhcHBJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgaW5zcGVjdG9yLnNlbGVjdGVkTm9kZUlkID0gbm9kZUlkO1xuICAgICAgICAgICAgKDAsIGluc3BlY3Rvcl8xLnNlbmRJbnNwZWN0b3JTdGF0ZSkoaW5zcGVjdG9yLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEluc3BlY3RvciAke2luc3BlY3RvcklkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGN0eC5icmlkZ2Uub24oc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9FRElUX1NUQVRFLCBhc3luYyAoeyBpbnNwZWN0b3JJZCwgYXBwSWQsIG5vZGVJZCwgcGF0aCwgdHlwZSwgcGF5bG9hZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9IGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3JXaXRoQXBwSWQpKGluc3BlY3RvcklkLCBhcHBJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgYXdhaXQgKDAsIGluc3BlY3Rvcl8xLmVkaXRJbnNwZWN0b3JTdGF0ZSkoaW5zcGVjdG9yLCBub2RlSWQsIHBhdGgsIHR5cGUsIHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpbnNwZWN0b3Iuc2VsZWN0ZWROb2RlSWQgPSBub2RlSWQ7XG4gICAgICAgICAgICBhd2FpdCAoMCwgaW5zcGVjdG9yXzEuc2VuZEluc3BlY3RvclN0YXRlKShpbnNwZWN0b3IsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW5zcGVjdG9yICR7aW5zcGVjdG9ySWR9IG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0FDVElPTiwgYXN5bmMgKHsgaW5zcGVjdG9ySWQsIGFwcElkLCBhY3Rpb25JbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3BlY3RvciA9IGF3YWl0ICgwLCBpbnNwZWN0b3JfMS5nZXRJbnNwZWN0b3JXaXRoQXBwSWQpKGluc3BlY3RvcklkLCBhcHBJZCwgY3R4KTtcbiAgICAgICAgaWYgKGluc3BlY3Rvcikge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gaW5zcGVjdG9yLmFjdGlvbnNbYWN0aW9uSW5kZXhdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhY3Rpb24uYWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnNwZWN0b3IgJHtpbnNwZWN0b3JJZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBNaXNjXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19MT0csIChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmIChwYXlsb2FkLnNlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKDAsIHNoYXJlZF91dGlsc18xLnBhcnNlKSh2YWx1ZSwgcGF5bG9hZC5yZXZpdmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBheWxvYWQucmV2aXZlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5yZXZpdmUpKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlW3BheWxvYWQubGV2ZWxdKHZhbHVlKTtcbiAgICB9KTtcbiAgICAvLyBQbHVnaW5zXG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19ERVZUT09MU19QTFVHSU5fTElTVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCAoMCwgcGx1Z2luXzEuc2VuZFBsdWdpbkxpc3QpKGN0eCk7XG4gICAgfSk7XG4gICAgY3R4LmJyaWRnZS5vbihzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fQkFDS19ERVZUT09MU19QTFVHSU5fU0VUVElOR19VUERBVEVELCAoeyBwbHVnaW5JZCwga2V5LCBuZXdWYWx1ZSwgb2xkVmFsdWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9ICgwLCBzaGFyZWRfdXRpbHNfMS5nZXRQbHVnaW5TZXR0aW5ncykocGx1Z2luSWQpO1xuICAgICAgICBjdHguaG9vay5lbWl0KHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuUExVR0lOX1NFVFRJTkdTX1NFVCwgcGx1Z2luSWQsIHNldHRpbmdzKTtcbiAgICAgICAgY3R4LmN1cnJlbnRBcHBSZWNvcmQuYmFja2VuZC5hcGkuY2FsbEhvb2soXCJzZXRQbHVnaW5TZXR0aW5nc1wiIC8qIFNFVF9QTFVHSU5fU0VUVElOR1MgKi8sIHtcbiAgICAgICAgICAgIGFwcDogY3R4LmN1cnJlbnRBcHBSZWNvcmQub3B0aW9ucy5hcHAsXG4gICAgICAgICAgICBwbHVnaW5JZCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6895\n");
|
|
159
167
|
|
|
160
168
|
/***/ }),
|
|
161
169
|
|
|
@@ -187,7 +195,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
187
195
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
188
196
|
|
|
189
197
|
"use strict";
|
|
190
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.handleAddPerformanceTag = exports.performanceMarkEnd = exports.performanceMarkStart = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst app_1 = __webpack_require__(79132);\n\nconst component_1 = __webpack_require__(63304);\n\nconst subscriptions_1 = __webpack_require__(19815);\n\nasync function performanceMarkStart(app, uid, instance, type, time, ctx) {\n try {\n if (!shared_utils_1.SharedData.performanceMonitoringEnabled) return;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n const componentName = await appRecord.backend.api.getComponentName(instance);\n const groupId = ctx.perfUniqueGroupId++;\n const groupKey = `${uid}-${type}`;\n appRecord.perfGroupIds.set(groupKey, {\n groupId,\n time\n });\n await (0, timeline_1.addTimelineEvent)({\n layerId: 'performance',\n event: {\n time,\n data: {\n component: componentName,\n type,\n measure: 'start'\n },\n title: componentName,\n subtitle: type,\n groupId\n }\n }, app, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nexports.performanceMarkStart = performanceMarkStart;\n\nasync function performanceMarkEnd(app, uid, instance, type, time, ctx) {\n try {\n if (!shared_utils_1.SharedData.performanceMonitoringEnabled) return;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n const componentName = await appRecord.backend.api.getComponentName(instance);\n const groupKey = `${uid}-${type}`;\n const {\n groupId,\n time: startTime\n } = appRecord.perfGroupIds.get(groupKey);\n const duration = time - startTime;\n await (0, timeline_1.addTimelineEvent)({\n layerId: 'performance',\n event: {\n time,\n data: {\n component: componentName,\n type,\n measure: 'end',\n duration: {\n _custom: {\n type: 'Duration',\n value: duration,\n display: `${duration} ms`\n }\n }\n },\n title: componentName,\n subtitle: type,\n groupId\n }\n }, app, ctx); // Mark on component\n\n const tooSlow = duration > 10;\n\n if (tooSlow || instance.__VUE_DEVTOOLS_SLOW__) {\n let change = false;\n\n if (tooSlow && !instance.__VUE_DEVTOOLS_SLOW__) {\n instance.__VUE_DEVTOOLS_SLOW__ = {\n duration: null,\n measures: {}\n };\n }\n\n const data = instance.__VUE_DEVTOOLS_SLOW__;\n\n if (tooSlow && (data.duration == null || data.duration < duration)) {\n data.duration = duration;\n change = true;\n }\n\n if (data.measures[type] == null || data.measures[type] < duration) {\n data.measures[type] = duration;\n change = true;\n }\n\n if (change) {\n // Update component tree\n const id = await (0, component_1.getComponentId)(app, uid, instance, ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === id)) {\n requestAnimationFrame(() => {\n (0, component_1.sendComponentTreeData)(appRecord, id, ctx.currentAppRecord.componentFilter, null, ctx);\n });\n }\n }\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nexports.performanceMarkEnd = performanceMarkEnd;\n\nfunction handleAddPerformanceTag(backend, ctx) {\n backend.api.on.visitComponentTree(payload => {\n if (payload.componentInstance.__VUE_DEVTOOLS_SLOW__) {\n const {\n duration,\n measures\n } = payload.componentInstance.__VUE_DEVTOOLS_SLOW__;\n let tooltip = '<div class=\"grid grid-cols-2 gap-2 font-mono text-xs\">';\n\n for (const type in measures) {\n const d = measures[type];\n tooltip += `<div>${type}</div><div class=\"text-right text-black rounded px-1 ${d > 30 ? 'bg-red-400' : d > 10 ? 'bg-yellow-400' : 'bg-green-400'}\">${d} ms</div>`;\n }\n\n tooltip += '</div>';\n payload.treeNode.tags.push({\n backgroundColor: duration > 30 ? 0xF87171 : 0xFBBF24,\n textColor: 0x000000,\n label: `${duration} ms`,\n tooltip\n });\n }\n });\n}\n\nexports.handleAddPerformanceTag = handleAddPerformanceTag;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dUJBQWhCLENBQXlDLE9BQXpDLEVBQW1FLEdBQW5FLEVBQXNGO0FBQ3BGLFNBQU8sQ0FBQyxHQUFSLENBQVksRUFBWixDQUFlLGtCQUFmLENBQWtDLE9BQU8sSUFBRztBQUMxQyxRQUFJLE9BQU8sQ0FBQyxpQkFBUixDQUEwQixxQkFBOUIsRUFBcUQ7QUFDbkQsWUFBTTtBQUFFLGdCQUFGO0FBQVk7QUFBWixVQUF5QixPQUFPLENBQUMsaUJBQVIsQ0FBMEIscUJBQXpEO0FBRUEsVUFBSSxPQUFPLEdBQUcsd0RBQWQ7O0FBQ0EsV0FBSyxNQUFNLElBQVgsSUFBbUIsUUFBbkIsRUFBNkI7QUFDM0IsY0FBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUQsQ0FBbEI7QUFDQSxlQUFPLElBQUksUUFBUSxJQUFJLHdEQUF3RCxDQUFDLEdBQUcsRUFBSixHQUFTLFlBQVQsR0FBd0IsQ0FBQyxHQUFHLEVBQUosR0FBUyxlQUFULEdBQTJCLGNBQWMsS0FBSyxDQUFDLFdBQXRKO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFJLFFBQVg7QUFFQSxhQUFPLENBQUMsUUFBUixDQUFpQixJQUFqQixDQUFzQixJQUF0QixDQUEyQjtBQUN6Qix1QkFBZSxFQUFFLFFBQVEsR0FBRyxFQUFYLEdBQWdCLFFBQWhCLEdBQTJCLFFBRG5CO0FBRXpCLGlCQUFTLEVBQUUsUUFGYztBQUd6QixhQUFLLEVBQUUsR0FBRyxRQUFRLEtBSE87QUFJekI7QUFKeUIsT0FBM0I7QUFNRDtBQUNGLEdBbEJEO0FBbUJEOztBQXBCRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3BlcmYudHM/MjZhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaGFuZGxlQWRkUGVyZm9ybWFuY2VUYWcgPSBleHBvcnRzLnBlcmZvcm1hbmNlTWFya0VuZCA9IGV4cG9ydHMucGVyZm9ybWFuY2VNYXJrU3RhcnQgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IHRpbWVsaW5lXzEgPSByZXF1aXJlKFwiLi90aW1lbGluZVwiKTtcbmNvbnN0IGFwcF8xID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuY29uc3QgY29tcG9uZW50XzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRcIik7XG5jb25zdCBzdWJzY3JpcHRpb25zXzEgPSByZXF1aXJlKFwiLi91dGlsL3N1YnNjcmlwdGlvbnNcIik7XG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtYW5jZU1hcmtTdGFydChhcHAsIHVpZCwgaW5zdGFuY2UsIHR5cGUsIHRpbWUsIGN0eCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICghc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5wZXJmb3JtYW5jZU1vbml0b3JpbmdFbmFibGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50TmFtZShpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSBjdHgucGVyZlVuaXF1ZUdyb3VwSWQrKztcbiAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSBgJHt1aWR9LSR7dHlwZX1gO1xuICAgICAgICBhcHBSZWNvcmQucGVyZkdyb3VwSWRzLnNldChncm91cEtleSwgeyBncm91cElkLCB0aW1lIH0pO1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfMS5hZGRUaW1lbGluZUV2ZW50KSh7XG4gICAgICAgICAgICBsYXllcklkOiAncGVyZm9ybWFuY2UnLFxuICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICB0aW1lLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBtZWFzdXJlOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGl0bGU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgc3VidGl0bGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIGFwcCwgY3R4KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5wZXJmb3JtYW5jZU1hcmtTdGFydCA9IHBlcmZvcm1hbmNlTWFya1N0YXJ0O1xuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybWFuY2VNYXJrRW5kKGFwcCwgdWlkLCBpbnN0YW5jZSwgdHlwZSwgdGltZSwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKCFzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLnBlcmZvcm1hbmNlTW9uaXRvcmluZ0VuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGFwcFJlY29yZCA9IGF3YWl0ICgwLCBhcHBfMS5nZXRBcHBSZWNvcmQpKGFwcCwgY3R4KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS5nZXRDb21wb25lbnROYW1lKGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSBgJHt1aWR9LSR7dHlwZX1gO1xuICAgICAgICBjb25zdCB7IGdyb3VwSWQsIHRpbWU6IHN0YXJ0VGltZSB9ID0gYXBwUmVjb3JkLnBlcmZHcm91cElkcy5nZXQoZ3JvdXBLZXkpO1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRpbWUgLSBzdGFydFRpbWU7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV8xLmFkZFRpbWVsaW5lRXZlbnQpKHtcbiAgICAgICAgICAgIGxheWVySWQ6ICdwZXJmb3JtYW5jZScsXG4gICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgIHRpbWUsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG1lYXN1cmU6ICdlbmQnLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdEdXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGR1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGAke2R1cmF0aW9ufSBtc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGl0bGU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgc3VidGl0bGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIGFwcCwgY3R4KTtcbiAgICAgICAgLy8gTWFyayBvbiBjb21wb25lbnRcbiAgICAgICAgY29uc3QgdG9vU2xvdyA9IGR1cmF0aW9uID4gMTA7XG4gICAgICAgIGlmICh0b29TbG93IHx8IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXykge1xuICAgICAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRvb1Nsb3cgJiYgIWluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXykge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1lYXN1cmVzOiB7fSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXztcbiAgICAgICAgICAgIGlmICh0b29TbG93ICYmIChkYXRhLmR1cmF0aW9uID09IG51bGwgfHwgZGF0YS5kdXJhdGlvbiA8IGR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICAgICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubWVhc3VyZXNbdHlwZV0gPT0gbnVsbCB8fCBkYXRhLm1lYXN1cmVzW3R5cGVdIDwgZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBkYXRhLm1lYXN1cmVzW3R5cGVdID0gZHVyYXRpb247XG4gICAgICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50IHRyZWVcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGF3YWl0ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJZCkoYXBwLCB1aWQsIGluc3RhbmNlLCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmICgoMCwgc3Vic2NyaXB0aW9uc18xLmlzU3Vic2NyaWJlZCkoc2hhcmVkX3V0aWxzXzEuQnJpZGdlU3Vic2NyaXB0aW9ucy5DT01QT05FTlRfVFJFRSwgc3ViID0+IHN1Yi5wYXlsb2FkLmluc3RhbmNlSWQgPT09IGlkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoYXBwUmVjb3JkLCBpZCwgY3R4LmN1cnJlbnRBcHBSZWNvcmQuY29tcG9uZW50RmlsdGVyLCBudWxsLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5wZXJmb3JtYW5jZU1hcmtFbmQgPSBwZXJmb3JtYW5jZU1hcmtFbmQ7XG5mdW5jdGlvbiBoYW5kbGVBZGRQZXJmb3JtYW5jZVRhZyhiYWNrZW5kLCBjdHgpIHtcbiAgICBiYWNrZW5kLmFwaS5vbi52aXNpdENvbXBvbmVudFRyZWUocGF5bG9hZCA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXykge1xuICAgICAgICAgICAgY29uc3QgeyBkdXJhdGlvbiwgbWVhc3VyZXMgfSA9IHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UuX19WVUVfREVWVE9PTFNfU0xPV19fO1xuICAgICAgICAgICAgbGV0IHRvb2x0aXAgPSAnPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgZm9udC1tb25vIHRleHQteHNcIj4nO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIGluIG1lYXN1cmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IG1lYXN1cmVzW3R5cGVdO1xuICAgICAgICAgICAgICAgIHRvb2x0aXAgKz0gYDxkaXY+JHt0eXBlfTwvZGl2PjxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0IHRleHQtYmxhY2sgcm91bmRlZCBweC0xICR7ZCA+IDMwID8gJ2JnLXJlZC00MDAnIDogZCA+IDEwID8gJ2JnLXllbGxvdy00MDAnIDogJ2JnLWdyZWVuLTQwMCd9XCI+JHtkfSBtczwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b29sdGlwICs9ICc8L2Rpdj4nO1xuICAgICAgICAgICAgcGF5bG9hZC50cmVlTm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogZHVyYXRpb24gPiAzMCA/IDB4Rjg3MTcxIDogMHhGQkJGMjQsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgICAgICAgICBsYWJlbDogYCR7ZHVyYXRpb259IG1zYCxcbiAgICAgICAgICAgICAgICB0b29sdGlwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMuaGFuZGxlQWRkUGVyZm9ybWFuY2VUYWcgPSBoYW5kbGVBZGRQZXJmb3JtYW5jZVRhZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBlcmYuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75552\n");
|
|
198
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.handleAddPerformanceTag = exports.performanceMarkEnd = exports.performanceMarkStart = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst timeline_1 = __webpack_require__(41515);\n\nconst app_1 = __webpack_require__(79132);\n\nconst component_1 = __webpack_require__(63304);\n\nconst subscriptions_1 = __webpack_require__(19815);\n\nasync function performanceMarkStart(app, uid, instance, type, time, ctx) {\n try {\n if (!shared_utils_1.SharedData.performanceMonitoringEnabled) return;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n const componentName = await appRecord.backend.api.getComponentName(instance);\n const groupId = ctx.perfUniqueGroupId++;\n const groupKey = `${uid}-${type}`;\n appRecord.perfGroupIds.set(groupKey, {\n groupId,\n time\n });\n await (0, timeline_1.addTimelineEvent)({\n layerId: 'performance',\n event: {\n time,\n data: {\n component: componentName,\n type,\n measure: 'start'\n },\n title: componentName,\n subtitle: type,\n groupId\n }\n }, app, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nexports.performanceMarkStart = performanceMarkStart;\n\nasync function performanceMarkEnd(app, uid, instance, type, time, ctx) {\n try {\n if (!shared_utils_1.SharedData.performanceMonitoringEnabled) return;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n const componentName = await appRecord.backend.api.getComponentName(instance);\n const groupKey = `${uid}-${type}`;\n const {\n groupId,\n time: startTime\n } = appRecord.perfGroupIds.get(groupKey);\n const duration = time - startTime;\n await (0, timeline_1.addTimelineEvent)({\n layerId: 'performance',\n event: {\n time,\n data: {\n component: componentName,\n type,\n measure: 'end',\n duration: {\n _custom: {\n type: 'Duration',\n value: duration,\n display: `${duration} ms`\n }\n }\n },\n title: componentName,\n subtitle: type,\n groupId\n }\n }, app, ctx); // Mark on component\n\n const tooSlow = duration > 10;\n\n if (tooSlow || instance.__VUE_DEVTOOLS_SLOW__) {\n let change = false;\n\n if (tooSlow && !instance.__VUE_DEVTOOLS_SLOW__) {\n instance.__VUE_DEVTOOLS_SLOW__ = {\n duration: null,\n measures: {}\n };\n }\n\n const data = instance.__VUE_DEVTOOLS_SLOW__;\n\n if (tooSlow && (data.duration == null || data.duration < duration)) {\n data.duration = duration;\n change = true;\n }\n\n if (data.measures[type] == null || data.measures[type] < duration) {\n data.measures[type] = duration;\n change = true;\n }\n\n if (change) {\n // Update component tree\n const id = await (0, component_1.getComponentId)(app, uid, instance, ctx);\n\n if ((0, subscriptions_1.isSubscribed)(shared_utils_1.BridgeSubscriptions.COMPONENT_TREE, sub => sub.payload.instanceId === id)) {\n requestAnimationFrame(() => {\n (0, component_1.sendComponentTreeData)(appRecord, id, ctx.currentAppRecord.componentFilter, null, ctx);\n });\n }\n }\n }\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n}\n\nexports.performanceMarkEnd = performanceMarkEnd;\n\nfunction handleAddPerformanceTag(backend, ctx) {\n backend.api.on.visitComponentTree(payload => {\n if (payload.componentInstance.__VUE_DEVTOOLS_SLOW__) {\n const {\n duration,\n measures\n } = payload.componentInstance.__VUE_DEVTOOLS_SLOW__;\n let tooltip = '<div class=\"grid grid-cols-2 gap-2 font-mono text-xs\">';\n\n for (const type in measures) {\n const d = measures[type];\n tooltip += `<div>${type}</div><div class=\"text-right text-black rounded px-1 ${d > 30 ? 'bg-red-400' : d > 10 ? 'bg-yellow-400' : 'bg-green-400'}\">${Math.round(d * 1000) / 1000} ms</div>`;\n }\n\n tooltip += '</div>';\n payload.treeNode.tags.push({\n backgroundColor: duration > 30 ? 0xF87171 : 0xFBBF24,\n textColor: 0x000000,\n label: `${Math.round(duration * 1000) / 1000} ms`,\n tooltip\n });\n }\n });\n}\n\nexports.handleAddPerformanceTag = handleAddPerformanceTag;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dUJBQWhCLENBQXlDLE9BQXpDLEVBQW1FLEdBQW5FLEVBQXNGO0FBQ3BGLFNBQU8sQ0FBQyxHQUFSLENBQVksRUFBWixDQUFlLGtCQUFmLENBQWtDLE9BQU8sSUFBRztBQUMxQyxRQUFJLE9BQU8sQ0FBQyxpQkFBUixDQUEwQixxQkFBOUIsRUFBcUQ7QUFDbkQsWUFBTTtBQUFFLGdCQUFGO0FBQVk7QUFBWixVQUF5QixPQUFPLENBQUMsaUJBQVIsQ0FBMEIscUJBQXpEO0FBRUEsVUFBSSxPQUFPLEdBQUcsd0RBQWQ7O0FBQ0EsV0FBSyxNQUFNLElBQVgsSUFBbUIsUUFBbkIsRUFBNkI7QUFDM0IsY0FBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUQsQ0FBbEI7QUFDQSxlQUFPLElBQUksUUFBUSxJQUFJLHdEQUF3RCxDQUFDLEdBQUcsRUFBSixHQUFTLFlBQVQsR0FBd0IsQ0FBQyxHQUFHLEVBQUosR0FBUyxlQUFULEdBQTJCLGNBQWMsS0FBSyxJQUFJLENBQUMsS0FBTCxDQUFXLENBQUMsR0FBRyxJQUFmLElBQXVCLElBQUksV0FBaEw7QUFDRDs7QUFDRCxhQUFPLElBQUksUUFBWDtBQUVBLGFBQU8sQ0FBQyxRQUFSLENBQWlCLElBQWpCLENBQXNCLElBQXRCLENBQTJCO0FBQ3pCLHVCQUFlLEVBQUUsUUFBUSxHQUFHLEVBQVgsR0FBZ0IsUUFBaEIsR0FBMkIsUUFEbkI7QUFFekIsaUJBQVMsRUFBRSxRQUZjO0FBR3pCLGFBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFMLENBQVcsUUFBUSxHQUFHLElBQXRCLElBQThCLElBQUksS0FIbkI7QUFJekI7QUFKeUIsT0FBM0I7QUFNRDtBQUNGLEdBbEJEO0FBbUJEOztBQXBCRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3BlcmYudHM/MjZhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaGFuZGxlQWRkUGVyZm9ybWFuY2VUYWcgPSBleHBvcnRzLnBlcmZvcm1hbmNlTWFya0VuZCA9IGV4cG9ydHMucGVyZm9ybWFuY2VNYXJrU3RhcnQgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IHRpbWVsaW5lXzEgPSByZXF1aXJlKFwiLi90aW1lbGluZVwiKTtcbmNvbnN0IGFwcF8xID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuY29uc3QgY29tcG9uZW50XzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRcIik7XG5jb25zdCBzdWJzY3JpcHRpb25zXzEgPSByZXF1aXJlKFwiLi91dGlsL3N1YnNjcmlwdGlvbnNcIik7XG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtYW5jZU1hcmtTdGFydChhcHAsIHVpZCwgaW5zdGFuY2UsIHR5cGUsIHRpbWUsIGN0eCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICghc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5wZXJmb3JtYW5jZU1vbml0b3JpbmdFbmFibGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50TmFtZShpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSBjdHgucGVyZlVuaXF1ZUdyb3VwSWQrKztcbiAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSBgJHt1aWR9LSR7dHlwZX1gO1xuICAgICAgICBhcHBSZWNvcmQucGVyZkdyb3VwSWRzLnNldChncm91cEtleSwgeyBncm91cElkLCB0aW1lIH0pO1xuICAgICAgICBhd2FpdCAoMCwgdGltZWxpbmVfMS5hZGRUaW1lbGluZUV2ZW50KSh7XG4gICAgICAgICAgICBsYXllcklkOiAncGVyZm9ybWFuY2UnLFxuICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICB0aW1lLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBtZWFzdXJlOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGl0bGU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgc3VidGl0bGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIGFwcCwgY3R4KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5wZXJmb3JtYW5jZU1hcmtTdGFydCA9IHBlcmZvcm1hbmNlTWFya1N0YXJ0O1xuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybWFuY2VNYXJrRW5kKGFwcCwgdWlkLCBpbnN0YW5jZSwgdHlwZSwgdGltZSwgY3R4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKCFzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLnBlcmZvcm1hbmNlTW9uaXRvcmluZ0VuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGFwcFJlY29yZCA9IGF3YWl0ICgwLCBhcHBfMS5nZXRBcHBSZWNvcmQpKGFwcCwgY3R4KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGF3YWl0IGFwcFJlY29yZC5iYWNrZW5kLmFwaS5nZXRDb21wb25lbnROYW1lKGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSBgJHt1aWR9LSR7dHlwZX1gO1xuICAgICAgICBjb25zdCB7IGdyb3VwSWQsIHRpbWU6IHN0YXJ0VGltZSB9ID0gYXBwUmVjb3JkLnBlcmZHcm91cElkcy5nZXQoZ3JvdXBLZXkpO1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRpbWUgLSBzdGFydFRpbWU7XG4gICAgICAgIGF3YWl0ICgwLCB0aW1lbGluZV8xLmFkZFRpbWVsaW5lRXZlbnQpKHtcbiAgICAgICAgICAgIGxheWVySWQ6ICdwZXJmb3JtYW5jZScsXG4gICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgIHRpbWUsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG1lYXN1cmU6ICdlbmQnLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdEdXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGR1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGAke2R1cmF0aW9ufSBtc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGl0bGU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgc3VidGl0bGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIGFwcCwgY3R4KTtcbiAgICAgICAgLy8gTWFyayBvbiBjb21wb25lbnRcbiAgICAgICAgY29uc3QgdG9vU2xvdyA9IGR1cmF0aW9uID4gMTA7XG4gICAgICAgIGlmICh0b29TbG93IHx8IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXykge1xuICAgICAgICAgICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRvb1Nsb3cgJiYgIWluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXykge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1lYXN1cmVzOiB7fSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXztcbiAgICAgICAgICAgIGlmICh0b29TbG93ICYmIChkYXRhLmR1cmF0aW9uID09IG51bGwgfHwgZGF0YS5kdXJhdGlvbiA8IGR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICAgICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubWVhc3VyZXNbdHlwZV0gPT0gbnVsbCB8fCBkYXRhLm1lYXN1cmVzW3R5cGVdIDwgZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBkYXRhLm1lYXN1cmVzW3R5cGVdID0gZHVyYXRpb247XG4gICAgICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50IHRyZWVcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGF3YWl0ICgwLCBjb21wb25lbnRfMS5nZXRDb21wb25lbnRJZCkoYXBwLCB1aWQsIGluc3RhbmNlLCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmICgoMCwgc3Vic2NyaXB0aW9uc18xLmlzU3Vic2NyaWJlZCkoc2hhcmVkX3V0aWxzXzEuQnJpZGdlU3Vic2NyaXB0aW9ucy5DT01QT05FTlRfVFJFRSwgc3ViID0+IHN1Yi5wYXlsb2FkLmluc3RhbmNlSWQgPT09IGlkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvbXBvbmVudF8xLnNlbmRDb21wb25lbnRUcmVlRGF0YSkoYXBwUmVjb3JkLCBpZCwgY3R4LmN1cnJlbnRBcHBSZWNvcmQuY29tcG9uZW50RmlsdGVyLCBudWxsLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5wZXJmb3JtYW5jZU1hcmtFbmQgPSBwZXJmb3JtYW5jZU1hcmtFbmQ7XG5mdW5jdGlvbiBoYW5kbGVBZGRQZXJmb3JtYW5jZVRhZyhiYWNrZW5kLCBjdHgpIHtcbiAgICBiYWNrZW5kLmFwaS5vbi52aXNpdENvbXBvbmVudFRyZWUocGF5bG9hZCA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1NMT1dfXykge1xuICAgICAgICAgICAgY29uc3QgeyBkdXJhdGlvbiwgbWVhc3VyZXMgfSA9IHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UuX19WVUVfREVWVE9PTFNfU0xPV19fO1xuICAgICAgICAgICAgbGV0IHRvb2x0aXAgPSAnPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgZm9udC1tb25vIHRleHQteHNcIj4nO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIGluIG1lYXN1cmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IG1lYXN1cmVzW3R5cGVdO1xuICAgICAgICAgICAgICAgIHRvb2x0aXAgKz0gYDxkaXY+JHt0eXBlfTwvZGl2PjxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0IHRleHQtYmxhY2sgcm91bmRlZCBweC0xICR7ZCA+IDMwID8gJ2JnLXJlZC00MDAnIDogZCA+IDEwID8gJ2JnLXllbGxvdy00MDAnIDogJ2JnLWdyZWVuLTQwMCd9XCI+JHtNYXRoLnJvdW5kKGQgKiAxMDAwKSAvIDEwMDB9IG1zPC9kaXY+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvb2x0aXAgKz0gJzwvZGl2Pic7XG4gICAgICAgICAgICBwYXlsb2FkLnRyZWVOb2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBkdXJhdGlvbiA+IDMwID8gMHhGODcxNzEgOiAweEZCQkYyNCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IDB4MDAwMDAwLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBgJHtNYXRoLnJvdW5kKGR1cmF0aW9uICogMTAwMCkgLyAxMDAwfSBtc2AsXG4gICAgICAgICAgICAgICAgdG9vbHRpcCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmhhbmRsZUFkZFBlcmZvcm1hbmNlVGFnID0gaGFuZGxlQWRkUGVyZm9ybWFuY2VUYWc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///75552\n");
|
|
191
199
|
|
|
192
200
|
/***/ }),
|
|
193
201
|
|
|
@@ -211,7 +219,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
211
219
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
212
220
|
|
|
213
221
|
"use strict";
|
|
214
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.sendTimelineMarkers = exports.addTimelineMarker = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nasync function addTimelineMarker(options, ctx) {\n var _a;\n\n if (!ctx.currentAppRecord) {\n options.all = true;\n }\n\n const marker = { ...options,\n appRecord: options.all ? null : ctx.currentAppRecord\n };\n ctx.timelineMarkers.push(marker);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_MARKER, {\n marker: await serializeMarker(marker),\n appId: (_a = ctx.currentAppRecord) === null || _a === void 0 ? void 0 : _a.id\n });\n}\n\nexports.addTimelineMarker = addTimelineMarker;\n\nasync function sendTimelineMarkers(ctx) {\n if (!ctx.currentAppRecord) return;\n const markers = ctx.timelineMarkers.filter(marker => marker.all || marker.appRecord === ctx.currentAppRecord);\n const result = [];\n\n for (const marker of markers) {\n result.push(await serializeMarker(marker));\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LOAD_MARKERS, {\n markers: result,\n appId: ctx.currentAppRecord.id\n });\n}\n\nexports.sendTimelineMarkers = sendTimelineMarkers;\n\nasync function serializeMarker(marker) {\n var _a;\n\n return {\n id: marker.id,\n appId: (_a = marker.appRecord) === null || _a === void 0 ? void 0 : _a.id,\n all: marker.all,\n time: marker.time,\n label: marker.label,\n color: marker.color\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
222
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.sendTimelineMarkers = exports.addTimelineMarker = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nasync function addTimelineMarker(options, ctx) {\n var _a;\n\n if (!ctx.currentAppRecord) {\n options.all = true;\n }\n\n const marker = { ...options,\n appRecord: options.all ? null : ctx.currentAppRecord\n };\n ctx.timelineMarkers.push(marker);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_MARKER, {\n marker: await serializeMarker(marker),\n appId: (_a = ctx.currentAppRecord) === null || _a === void 0 ? void 0 : _a.id\n });\n}\n\nexports.addTimelineMarker = addTimelineMarker;\n\nasync function sendTimelineMarkers(ctx) {\n if (!ctx.currentAppRecord) return;\n const markers = ctx.timelineMarkers.filter(marker => marker.all || marker.appRecord === ctx.currentAppRecord);\n const result = [];\n\n for (const marker of markers) {\n result.push(await serializeMarker(marker));\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LOAD_MARKERS, {\n markers: result,\n appId: ctx.currentAppRecord.id\n });\n}\n\nexports.sendTimelineMarkers = sendTimelineMarkers;\n\nasync function serializeMarker(marker) {\n var _a;\n\n return {\n id: marker.id,\n appId: (_a = marker.appRecord) === null || _a === void 0 ? void 0 : _a.id,\n all: marker.all,\n time: Math.round(marker.time * 1000),\n label: marker.label,\n color: marker.color\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwNjMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUdPLGVBQWUsaUJBQWYsQ0FBa0MsT0FBbEMsRUFBa0UsR0FBbEUsRUFBcUY7OztBQUMxRixNQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFULEVBQTJCO0FBQ3pCLFdBQU8sQ0FBQyxHQUFSLEdBQWMsSUFBZDtBQUNEOztBQUNELFFBQU0sTUFBTSxHQUFtQixFQUM3QixHQUFHLE9BRDBCO0FBRTdCLGFBQVMsRUFBRSxPQUFPLENBQUMsR0FBUixHQUFjLElBQWQsR0FBcUIsR0FBRyxDQUFDO0FBRlAsR0FBL0I7QUFJQSxLQUFHLENBQUMsZUFBSixDQUFvQixJQUFwQixDQUF5QixNQUF6QjtBQUNBLEtBQUcsQ0FBQyxNQUFKLENBQVcsSUFBWCxDQUFnQiw0QkFBYSx3QkFBN0IsRUFBdUQ7QUFDckQsVUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDLE1BQUQsQ0FEd0I7QUFFckQsU0FBSyxFQUFFLFNBQUcsQ0FBQyxnQkFBSixNQUFvQixJQUFwQixJQUFvQixhQUFwQixHQUFvQixNQUFwQixHQUFvQixHQUFFO0FBRndCLEdBQXZEO0FBSUQ7O0FBYkQ7O0FBZU8sZUFBZSxtQkFBZixDQUFvQyxHQUFwQyxFQUF1RDtBQUM1RCxNQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFULEVBQTJCO0FBQzNCLFFBQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxlQUFKLENBQW9CLE1BQXBCLENBQTJCLE1BQU0sSUFBSSxNQUFNLENBQUMsR0FBUCxJQUFjLE1BQU0sQ0FBQyxTQUFQLEtBQXFCLEdBQUcsQ0FBQyxnQkFBNUUsQ0FBaEI7QUFDQSxRQUFNLE1BQU0sR0FBRyxFQUFmOztBQUNBLE9BQUssTUFBTSxNQUFYLElBQXFCLE9BQXJCLEVBQThCO0FBQzVCLFVBQU0sQ0FBQyxJQUFQLENBQVksTUFBTSxlQUFlLENBQUMsTUFBRCxDQUFqQztBQUNEOztBQUNELEtBQUcsQ0FBQyxNQUFKLENBQVcsSUFBWCxDQUFnQiw0QkFBYSw4QkFBN0IsRUFBNkQ7QUFDM0QsV0FBTyxFQUFFLE1BRGtEO0FBRTNELFNBQUssRUFBRSxHQUFHLENBQUMsZ0JBQUosQ0FBcUI7QUFGK0IsR0FBN0Q7QUFJRDs7QUFYRDs7QUFhQSxlQUFlLGVBQWYsQ0FBZ0MsTUFBaEMsRUFBc0Q7OztBQUNwRCxTQUFPO0FBQ0wsTUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUROO0FBRUwsU0FBSyxFQUFFLFlBQU0sQ0FBQyxTQUFQLE1BQWdCLElBQWhCLElBQWdCLGFBQWhCLEdBQWdCLE1BQWhCLEdBQWdCLEdBQUUsRUFGcEI7QUFHTCxPQUFHLEVBQUUsTUFBTSxDQUFDLEdBSFA7QUFJTCxRQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUwsQ0FBVyxNQUFNLENBQUMsSUFBUCxHQUFjLElBQXpCLENBSkQ7QUFLTCxTQUFLLEVBQUUsTUFBTSxDQUFDLEtBTFQ7QUFNTCxTQUFLLEVBQUUsTUFBTSxDQUFDO0FBTlQsR0FBUDtBQVFEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvdGltZWxpbmUtbWFya2VyLnRzPzQ0OGQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlbmRUaW1lbGluZU1hcmtlcnMgPSBleHBvcnRzLmFkZFRpbWVsaW5lTWFya2VyID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5hc3luYyBmdW5jdGlvbiBhZGRUaW1lbGluZU1hcmtlcihvcHRpb25zLCBjdHgpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCFjdHguY3VycmVudEFwcFJlY29yZCkge1xuICAgICAgICBvcHRpb25zLmFsbCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG1hcmtlciA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgYXBwUmVjb3JkOiBvcHRpb25zLmFsbCA/IG51bGwgOiBjdHguY3VycmVudEFwcFJlY29yZCxcbiAgICB9O1xuICAgIGN0eC50aW1lbGluZU1hcmtlcnMucHVzaChtYXJrZXIpO1xuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfTUFSS0VSLCB7XG4gICAgICAgIG1hcmtlcjogYXdhaXQgc2VyaWFsaXplTWFya2VyKG1hcmtlciksXG4gICAgICAgIGFwcElkOiAoX2EgPSBjdHguY3VycmVudEFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlkLFxuICAgIH0pO1xufVxuZXhwb3J0cy5hZGRUaW1lbGluZU1hcmtlciA9IGFkZFRpbWVsaW5lTWFya2VyO1xuYXN5bmMgZnVuY3Rpb24gc2VuZFRpbWVsaW5lTWFya2VycyhjdHgpIHtcbiAgICBpZiAoIWN0eC5jdXJyZW50QXBwUmVjb3JkKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbWFya2VycyA9IGN0eC50aW1lbGluZU1hcmtlcnMuZmlsdGVyKG1hcmtlciA9PiBtYXJrZXIuYWxsIHx8IG1hcmtlci5hcHBSZWNvcmQgPT09IGN0eC5jdXJyZW50QXBwUmVjb3JkKTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG1hcmtlciBvZiBtYXJrZXJzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGF3YWl0IHNlcmlhbGl6ZU1hcmtlcihtYXJrZXIpKTtcbiAgICB9XG4gICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9USU1FTElORV9MT0FEX01BUktFUlMsIHtcbiAgICAgICAgbWFya2VyczogcmVzdWx0LFxuICAgICAgICBhcHBJZDogY3R4LmN1cnJlbnRBcHBSZWNvcmQuaWQsXG4gICAgfSk7XG59XG5leHBvcnRzLnNlbmRUaW1lbGluZU1hcmtlcnMgPSBzZW5kVGltZWxpbmVNYXJrZXJzO1xuYXN5bmMgZnVuY3Rpb24gc2VyaWFsaXplTWFya2VyKG1hcmtlcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogbWFya2VyLmlkLFxuICAgICAgICBhcHBJZDogKF9hID0gbWFya2VyLmFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlkLFxuICAgICAgICBhbGw6IG1hcmtlci5hbGwsXG4gICAgICAgIHRpbWU6IE1hdGgucm91bmQobWFya2VyLnRpbWUgKiAxMDAwKSxcbiAgICAgICAgbGFiZWw6IG1hcmtlci5sYWJlbCxcbiAgICAgICAgY29sb3I6IG1hcmtlci5jb2xvcixcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZWxpbmUtbWFya2VyLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///72063\n");
|
|
215
223
|
|
|
216
224
|
/***/ }),
|
|
217
225
|
|
|
@@ -227,7 +235,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
227
235
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
228
236
|
|
|
229
237
|
"use strict";
|
|
230
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.sendTimelineLayerEvents = exports.removeLayersForApp = exports.sendTimelineEventData = exports.clearTimeline = exports.addTimelineEvent = exports.sendTimelineLayers = exports.addBuiltinLayers = exports.setupTimeline = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst global_hook_1 = __webpack_require__(13179);\n\nconst app_1 = __webpack_require__(79132);\n\nconst timeline_builtins_1 = __webpack_require__(78096);\n\nfunction setupTimeline(ctx) {\n setupBuiltinLayers(ctx);\n}\n\nexports.setupTimeline = setupTimeline;\n\nfunction addBuiltinLayers(appRecord, ctx) {\n for (const layerDef of timeline_builtins_1.builtinLayers) {\n ctx.timelineLayers.push({ ...layerDef,\n appRecord,\n plugin: null,\n events: []\n });\n }\n}\n\nexports.addBuiltinLayers = addBuiltinLayers;\n\nfunction setupBuiltinLayers(ctx) {\n ['mousedown', 'mouseup', 'click', 'dblclick'].forEach(eventType => {\n // @ts-ignore\n window.addEventListener(eventType, async event => {\n await addTimelineEvent({\n layerId: 'mouse',\n event: {\n time: Date.now(),\n data: {\n type: eventType,\n x: event.clientX,\n y: event.clientY\n },\n title: eventType\n }\n }, null, ctx);\n }, {\n capture: true,\n passive: true\n });\n });\n ['keyup', 'keydown', 'keypress'].forEach(eventType => {\n // @ts-ignore\n window.addEventListener(eventType, async event => {\n await addTimelineEvent({\n layerId: 'keyboard',\n event: {\n time: Date.now(),\n data: {\n type: eventType,\n key: event.key,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey\n },\n title: event.key\n }\n }, null, ctx);\n }, {\n capture: true,\n passive: true\n });\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_EMIT, async (app, instance, event, params) => {\n try {\n if (!shared_utils_1.SharedData.componentEventsEnabled) return;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n const componentId = `${appRecord.id}:${instance.uid}`;\n const componentDisplay = (await appRecord.backend.api.getComponentName(instance)) || '<i>Unknown Component</i>';\n await addTimelineEvent({\n layerId: 'component-event',\n event: {\n time: Date.now(),\n data: {\n component: {\n _custom: {\n type: 'component-definition',\n display: componentDisplay\n }\n },\n event,\n params\n },\n title: event,\n subtitle: `by ${componentDisplay}`,\n meta: {\n componentId,\n bounds: await appRecord.backend.api.getComponentBounds(instance)\n }\n }\n }, app, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n}\n\nasync function sendTimelineLayers(ctx) {\n var _a, _b;\n\n const layers = [];\n\n for (const layer of ctx.timelineLayers) {\n try {\n layers.push({\n id: layer.id,\n label: layer.label,\n color: layer.color,\n appId: (_a = layer.appRecord) === null || _a === void 0 ? void 0 : _a.id,\n pluginId: (_b = layer.plugin) === null || _b === void 0 ? void 0 : _b.descriptor.id,\n groupsOnly: layer.groupsOnly,\n skipScreenshots: layer.skipScreenshots,\n ignoreNoDurationGroups: layer.ignoreNoDurationGroups\n });\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_LIST, {\n layers\n });\n}\n\nexports.sendTimelineLayers = sendTimelineLayers;\n\nasync function addTimelineEvent(options, app, ctx) {\n const appId = app ? (0, app_1.getAppRecordId)(app) : null;\n const isAllApps = options.all || !app || appId == null;\n const id = ctx.nextTimelineEventId++;\n const eventData = {\n id,\n ...options,\n all: isAllApps\n };\n ctx.timelineEventMap.set(eventData.id, eventData);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_EVENT, {\n appId: eventData.all ? 'all' : appId,\n layerId: eventData.layerId,\n event: mapTimelineEvent(eventData)\n });\n const layer = ctx.timelineLayers.find(l => {\n var _a;\n\n return (isAllApps || ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app) && l.id === options.layerId;\n });\n\n if (layer) {\n layer.events.push(eventData);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Timeline layer ${options.layerId} not found`);\n }\n}\n\nexports.addTimelineEvent = addTimelineEvent;\n\nfunction mapTimelineEvent(eventData) {\n return {\n id: eventData.id,\n time: eventData.event.time,\n logType: eventData.event.logType,\n groupId: eventData.event.groupId,\n title: eventData.event.title,\n subtitle: eventData.event.subtitle\n };\n}\n\nasync function clearTimeline(ctx) {\n ctx.timelineEventMap.clear();\n\n for (const layer of ctx.timelineLayers) {\n layer.events = [];\n }\n\n for (const backend of ctx.backends) {\n await backend.api.clearTimeline();\n }\n}\n\nexports.clearTimeline = clearTimeline;\n\nasync function sendTimelineEventData(id, ctx) {\n let data = null;\n const eventData = ctx.timelineEventMap.get(id);\n\n if (eventData) {\n data = await ctx.currentAppRecord.backend.api.inspectTimelineEvent(eventData, ctx.currentAppRecord.options.app);\n data = (0, shared_utils_1.stringify)(data);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Event ${id} not found`, ctx.timelineEventMap.keys());\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_EVENT_DATA, {\n eventId: id,\n data\n });\n}\n\nexports.sendTimelineEventData = sendTimelineEventData;\n\nfunction removeLayersForApp(app, ctx) {\n const layers = ctx.timelineLayers.filter(l => {\n var _a;\n\n return ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app;\n });\n\n for (const layer of layers) {\n const index = ctx.timelineLayers.indexOf(layer);\n if (index !== -1) ctx.timelineLayers.splice(index, 1);\n\n for (const e of layer.events) {\n ctx.timelineEventMap.delete(e.id);\n }\n }\n}\n\nexports.removeLayersForApp = removeLayersForApp;\n\nfunction sendTimelineLayerEvents(appId, layerId, ctx) {\n var _a;\n\n const app = (_a = ctx.appRecords.find(ar => ar.id === appId)) === null || _a === void 0 ? void 0 : _a.options.app;\n if (!app) return;\n const layer = ctx.timelineLayers.find(l => {\n var _a;\n\n return ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app && l.id === layerId;\n });\n if (!layer) return;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS, {\n appId,\n layerId,\n events: layer.events.map(e => mapTimelineEvent(e))\n });\n}\n\nexports.sendTimelineLayerEvents = sendTimelineLayerEvents;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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c291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvdGltZWxpbmUudHM/OTJmZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2VuZFRpbWVsaW5lTGF5ZXJFdmVudHMgPSBleHBvcnRzLnJlbW92ZUxheWVyc0ZvckFwcCA9IGV4cG9ydHMuc2VuZFRpbWVsaW5lRXZlbnREYXRhID0gZXhwb3J0cy5jbGVhclRpbWVsaW5lID0gZXhwb3J0cy5hZGRUaW1lbGluZUV2ZW50ID0gZXhwb3J0cy5zZW5kVGltZWxpbmVMYXllcnMgPSBleHBvcnRzLmFkZEJ1aWx0aW5MYXllcnMgPSBleHBvcnRzLnNldHVwVGltZWxpbmUgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IGdsb2JhbF9ob29rXzEgPSByZXF1aXJlKFwiLi9nbG9iYWwtaG9va1wiKTtcbmNvbnN0IGFwcF8xID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuY29uc3QgdGltZWxpbmVfYnVpbHRpbnNfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lLWJ1aWx0aW5zXCIpO1xuZnVuY3Rpb24gc2V0dXBUaW1lbGluZShjdHgpIHtcbiAgICBzZXR1cEJ1aWx0aW5MYXllcnMoY3R4KTtcbn1cbmV4cG9ydHMuc2V0dXBUaW1lbGluZSA9IHNldHVwVGltZWxpbmU7XG5mdW5jdGlvbiBhZGRCdWlsdGluTGF5ZXJzKGFwcFJlY29yZCwgY3R4KSB7XG4gICAgZm9yIChjb25zdCBsYXllckRlZiBvZiB0aW1lbGluZV9idWlsdGluc18xLmJ1aWx0aW5MYXllcnMpIHtcbiAgICAgICAgY3R4LnRpbWVsaW5lTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgLi4ubGF5ZXJEZWYsXG4gICAgICAgICAgICBhcHBSZWNvcmQsXG4gICAgICAgICAgICBwbHVnaW46IG51bGwsXG4gICAgICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmFkZEJ1aWx0aW5MYXllcnMgPSBhZGRCdWlsdGluTGF5ZXJzO1xuZnVuY3Rpb24gc2V0dXBCdWlsdGluTGF5ZXJzKGN0eCkge1xuICAgIFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnY2xpY2snLCAnZGJsY2xpY2snXS5mb3JFYWNoKGV2ZW50VHlwZSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdtb3VzZScsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sIG51bGwsIGN0eCk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBbJ2tleXVwJywgJ2tleWRvd24nLCAna2V5cHJlc3MnXS5mb3JFYWNoKGV2ZW50VHlwZSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdrZXlib2FyZCcsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHJsS2V5OiBldmVudC5jdHJsS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0S2V5OiBldmVudC5hbHRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhS2V5OiBldmVudC5tZXRhS2V5LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBudWxsLCBjdHgpO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX0VNSVQsIGFzeW5jIChhcHAsIGluc3RhbmNlLCBldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuY29tcG9uZW50RXZlbnRzRW5hYmxlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke2FwcFJlY29yZC5pZH06JHtpbnN0YW5jZS51aWR9YDtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudERpc3BsYXkgPSAoYXdhaXQgYXBwUmVjb3JkLmJhY2tlbmQuYXBpLmdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpKSB8fCAnPGk+VW5rbm93biBDb21wb25lbnQ8L2k+JztcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdjb21wb25lbnQtZXZlbnQnLFxuICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudC1kZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogY29tcG9uZW50RGlzcGxheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBgYnkgJHtjb21wb25lbnREaXNwbGF5fWAsXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzOiBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgYXBwLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBzZW5kVGltZWxpbmVMYXllcnMoY3R4KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBsYXllcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGN0eC50aW1lbGluZUxheWVycykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBsYXllci5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGF5ZXIubGFiZWwsXG4gICAgICAgICAgICAgICAgY29sb3I6IGxheWVyLmNvbG9yLFxuICAgICAgICAgICAgICAgIGFwcElkOiAoX2EgPSBsYXllci5hcHBSZWNvcmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5JZDogKF9iID0gbGF5ZXIucGx1Z2luKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVzY3JpcHRvci5pZCxcbiAgICAgICAgICAgICAgICBncm91cHNPbmx5OiBsYXllci5ncm91cHNPbmx5LFxuICAgICAgICAgICAgICAgIHNraXBTY3JlZW5zaG90czogbGF5ZXIuc2tpcFNjcmVlbnNob3RzLFxuICAgICAgICAgICAgICAgIGlnbm9yZU5vRHVyYXRpb25Hcm91cHM6IGxheWVyLmlnbm9yZU5vRHVyYXRpb25Hcm91cHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xJU1QsIHtcbiAgICAgICAgbGF5ZXJzLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kVGltZWxpbmVMYXllcnMgPSBzZW5kVGltZWxpbmVMYXllcnM7XG5hc3luYyBmdW5jdGlvbiBhZGRUaW1lbGluZUV2ZW50KG9wdGlvbnMsIGFwcCwgY3R4KSB7XG4gICAgY29uc3QgYXBwSWQgPSBhcHAgPyAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkSWQpKGFwcCkgOiBudWxsO1xuICAgIGNvbnN0IGlzQWxsQXBwcyA9IG9wdGlvbnMuYWxsIHx8ICFhcHAgfHwgYXBwSWQgPT0gbnVsbDtcbiAgICBjb25zdCBpZCA9IGN0eC5uZXh0VGltZWxpbmVFdmVudElkKys7XG4gICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgICBpZCxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgYWxsOiBpc0FsbEFwcHMsXG4gICAgfTtcbiAgICBjdHgudGltZWxpbmVFdmVudE1hcC5zZXQoZXZlbnREYXRhLmlkLCBldmVudERhdGEpO1xuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfRVZFTlQsIHtcbiAgICAgICAgYXBwSWQ6IGV2ZW50RGF0YS5hbGwgPyAnYWxsJyA6IGFwcElkLFxuICAgICAgICBsYXllcklkOiBldmVudERhdGEubGF5ZXJJZCxcbiAgICAgICAgZXZlbnQ6IG1hcFRpbWVsaW5lRXZlbnQoZXZlbnREYXRhKSxcbiAgICB9KTtcbiAgICBjb25zdCBsYXllciA9IGN0eC50aW1lbGluZUxheWVycy5maW5kKGwgPT4geyB2YXIgX2E7IHJldHVybiAoaXNBbGxBcHBzIHx8ICgoX2EgPSBsLmFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnMuYXBwKSA9PT0gYXBwKSAmJiBsLmlkID09PSBvcHRpb25zLmxheWVySWQ7IH0pO1xuICAgIGlmIChsYXllcikge1xuICAgICAgICBsYXllci5ldmVudHMucHVzaChldmVudERhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICBjb25zb2xlLndhcm4oYFRpbWVsaW5lIGxheWVyICR7b3B0aW9ucy5sYXllcklkfSBub3QgZm91bmRgKTtcbiAgICB9XG59XG5leHBvcnRzLmFkZFRpbWVsaW5lRXZlbnQgPSBhZGRUaW1lbGluZUV2ZW50O1xuZnVuY3Rpb24gbWFwVGltZWxpbmVFdmVudChldmVudERhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogZXZlbnREYXRhLmlkLFxuICAgICAgICB0aW1lOiBldmVudERhdGEuZXZlbnQudGltZSxcbiAgICAgICAgbG9nVHlwZTogZXZlbnREYXRhLmV2ZW50LmxvZ1R5cGUsXG4gICAgICAgIGdyb3VwSWQ6IGV2ZW50RGF0YS5ldmVudC5ncm91cElkLFxuICAgICAgICB0aXRsZTogZXZlbnREYXRhLmV2ZW50LnRpdGxlLFxuICAgICAgICBzdWJ0aXRsZTogZXZlbnREYXRhLmV2ZW50LnN1YnRpdGxlLFxuICAgIH07XG59XG5hc3luYyBmdW5jdGlvbiBjbGVhclRpbWVsaW5lKGN0eCkge1xuICAgIGN0eC50aW1lbGluZUV2ZW50TWFwLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBjdHgudGltZWxpbmVMYXllcnMpIHtcbiAgICAgICAgbGF5ZXIuZXZlbnRzID0gW107XG4gICAgfVxuICAgIGZvciAoY29uc3QgYmFja2VuZCBvZiBjdHguYmFja2VuZHMpIHtcbiAgICAgICAgYXdhaXQgYmFja2VuZC5hcGkuY2xlYXJUaW1lbGluZSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuY2xlYXJUaW1lbGluZSA9IGNsZWFyVGltZWxpbmU7XG5hc3luYyBmdW5jdGlvbiBzZW5kVGltZWxpbmVFdmVudERhdGEoaWQsIGN0eCkge1xuICAgIGxldCBkYXRhID0gbnVsbDtcbiAgICBjb25zdCBldmVudERhdGEgPSBjdHgudGltZWxpbmVFdmVudE1hcC5nZXQoaWQpO1xuICAgIGlmIChldmVudERhdGEpIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGN0eC5jdXJyZW50QXBwUmVjb3JkLmJhY2tlbmQuYXBpLmluc3BlY3RUaW1lbGluZUV2ZW50KGV2ZW50RGF0YSwgY3R4LmN1cnJlbnRBcHBSZWNvcmQub3B0aW9ucy5hcHApO1xuICAgICAgICBkYXRhID0gKDAsIHNoYXJlZF91dGlsc18xLnN0cmluZ2lmeSkoZGF0YSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRXZlbnQgJHtpZH0gbm90IGZvdW5kYCwgY3R4LnRpbWVsaW5lRXZlbnRNYXAua2V5cygpKTtcbiAgICB9XG4gICAgY3R4LmJyaWRnZS5zZW5kKHNoYXJlZF91dGlsc18xLkJyaWRnZUV2ZW50cy5UT19GUk9OVF9USU1FTElORV9FVkVOVF9EQVRBLCB7XG4gICAgICAgIGV2ZW50SWQ6IGlkLFxuICAgICAgICBkYXRhLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kVGltZWxpbmVFdmVudERhdGEgPSBzZW5kVGltZWxpbmVFdmVudERhdGE7XG5mdW5jdGlvbiByZW1vdmVMYXllcnNGb3JBcHAoYXBwLCBjdHgpIHtcbiAgICBjb25zdCBsYXllcnMgPSBjdHgudGltZWxpbmVMYXllcnMuZmlsdGVyKGwgPT4geyB2YXIgX2E7IHJldHVybiAoKF9hID0gbC5hcHBSZWNvcmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpb25zLmFwcCkgPT09IGFwcDsgfSk7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdHgudGltZWxpbmVMYXllcnMuaW5kZXhPZihsYXllcik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBjdHgudGltZWxpbmVMYXllcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgZm9yIChjb25zdCBlIG9mIGxheWVyLmV2ZW50cykge1xuICAgICAgICAgICAgY3R4LnRpbWVsaW5lRXZlbnRNYXAuZGVsZXRlKGUuaWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5yZW1vdmVMYXllcnNGb3JBcHAgPSByZW1vdmVMYXllcnNGb3JBcHA7XG5mdW5jdGlvbiBzZW5kVGltZWxpbmVMYXllckV2ZW50cyhhcHBJZCwgbGF5ZXJJZCwgY3R4KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGFwcCA9IChfYSA9IGN0eC5hcHBSZWNvcmRzLmZpbmQoYXIgPT4gYXIuaWQgPT09IGFwcElkKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnMuYXBwO1xuICAgIGlmICghYXBwKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbGF5ZXIgPSBjdHgudGltZWxpbmVMYXllcnMuZmluZChsID0+IHsgdmFyIF9hOyByZXR1cm4gKChfYSA9IGwuYXBwUmVjb3JkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucy5hcHApID09PSBhcHAgJiYgbC5pZCA9PT0gbGF5ZXJJZDsgfSk7XG4gICAgaWYgKCFsYXllcilcbiAgICAgICAgcmV0dXJuO1xuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfTEFZRVJfTE9BRF9FVkVOVFMsIHtcbiAgICAgICAgYXBwSWQsXG4gICAgICAgIGxheWVySWQsXG4gICAgICAgIGV2ZW50czogbGF5ZXIuZXZlbnRzLm1hcChlID0+IG1hcFRpbWVsaW5lRXZlbnQoZSkpLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kVGltZWxpbmVMYXllckV2ZW50cyA9IHNlbmRUaW1lbGluZUxheWVyRXZlbnRzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZWxpbmUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41515\n");
|
|
238
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.sendTimelineLayerEvents = exports.removeLayersForApp = exports.sendTimelineEventData = exports.clearTimeline = exports.addTimelineEvent = exports.sendTimelineLayers = exports.addBuiltinLayers = exports.setupTimeline = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst devtools_api_1 = __webpack_require__(13508);\n\nconst global_hook_1 = __webpack_require__(13179);\n\nconst app_1 = __webpack_require__(79132);\n\nconst timeline_builtins_1 = __webpack_require__(78096);\n\nfunction setupTimeline(ctx) {\n setupBuiltinLayers(ctx);\n}\n\nexports.setupTimeline = setupTimeline;\n\nfunction addBuiltinLayers(appRecord, ctx) {\n for (const layerDef of timeline_builtins_1.builtinLayers) {\n ctx.timelineLayers.push({ ...layerDef,\n appRecord,\n plugin: null,\n events: []\n });\n }\n}\n\nexports.addBuiltinLayers = addBuiltinLayers;\n\nfunction setupBuiltinLayers(ctx) {\n ['mousedown', 'mouseup', 'click', 'dblclick'].forEach(eventType => {\n // @ts-ignore\n window.addEventListener(eventType, async event => {\n await addTimelineEvent({\n layerId: 'mouse',\n event: {\n time: (0, devtools_api_1.now)(),\n data: {\n type: eventType,\n x: event.clientX,\n y: event.clientY\n },\n title: eventType\n }\n }, null, ctx);\n }, {\n capture: true,\n passive: true\n });\n });\n ['keyup', 'keydown', 'keypress'].forEach(eventType => {\n // @ts-ignore\n window.addEventListener(eventType, async event => {\n await addTimelineEvent({\n layerId: 'keyboard',\n event: {\n time: (0, devtools_api_1.now)(),\n data: {\n type: eventType,\n key: event.key,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey\n },\n title: event.key\n }\n }, null, ctx);\n }, {\n capture: true,\n passive: true\n });\n });\n global_hook_1.hook.on(shared_utils_1.HookEvents.COMPONENT_EMIT, async (app, instance, event, params) => {\n try {\n if (!shared_utils_1.SharedData.componentEventsEnabled) return;\n const appRecord = await (0, app_1.getAppRecord)(app, ctx);\n const componentId = `${appRecord.id}:${instance.uid}`;\n const componentDisplay = (await appRecord.backend.api.getComponentName(instance)) || '<i>Unknown Component</i>';\n await addTimelineEvent({\n layerId: 'component-event',\n event: {\n time: (0, devtools_api_1.now)(),\n data: {\n component: {\n _custom: {\n type: 'component-definition',\n display: componentDisplay\n }\n },\n event,\n params\n },\n title: event,\n subtitle: `by ${componentDisplay}`,\n meta: {\n componentId,\n bounds: await appRecord.backend.api.getComponentBounds(instance)\n }\n }\n }, app, ctx);\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n });\n}\n\nasync function sendTimelineLayers(ctx) {\n var _a, _b;\n\n const layers = [];\n\n for (const layer of ctx.timelineLayers) {\n try {\n layers.push({\n id: layer.id,\n label: layer.label,\n color: layer.color,\n appId: (_a = layer.appRecord) === null || _a === void 0 ? void 0 : _a.id,\n pluginId: (_b = layer.plugin) === null || _b === void 0 ? void 0 : _b.descriptor.id,\n groupsOnly: layer.groupsOnly,\n skipScreenshots: layer.skipScreenshots,\n ignoreNoDurationGroups: layer.ignoreNoDurationGroups\n });\n } catch (e) {\n if (shared_utils_1.SharedData.debugInfo) {\n console.error(e);\n }\n }\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_LIST, {\n layers\n });\n}\n\nexports.sendTimelineLayers = sendTimelineLayers;\n\nasync function addTimelineEvent(options, app, ctx) {\n const appId = app ? (0, app_1.getAppRecordId)(app) : null;\n const isAllApps = options.all || !app || appId == null;\n const id = ctx.nextTimelineEventId++;\n const eventData = {\n id,\n ...options,\n all: isAllApps\n };\n ctx.timelineEventMap.set(eventData.id, eventData);\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_EVENT, {\n appId: eventData.all ? 'all' : appId,\n layerId: eventData.layerId,\n event: mapTimelineEvent(eventData)\n });\n const layer = ctx.timelineLayers.find(l => {\n var _a;\n\n return (isAllApps || ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app) && l.id === options.layerId;\n });\n\n if (layer) {\n layer.events.push(eventData);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Timeline layer ${options.layerId} not found`);\n }\n}\n\nexports.addTimelineEvent = addTimelineEvent;\n\nfunction mapTimelineEvent(eventData) {\n return {\n id: eventData.id,\n time: Math.round(eventData.event.time * 1000),\n logType: eventData.event.logType,\n groupId: eventData.event.groupId,\n title: eventData.event.title,\n subtitle: eventData.event.subtitle\n };\n}\n\nasync function clearTimeline(ctx) {\n ctx.timelineEventMap.clear();\n\n for (const layer of ctx.timelineLayers) {\n layer.events = [];\n }\n\n for (const backend of ctx.backends) {\n await backend.api.clearTimeline();\n }\n}\n\nexports.clearTimeline = clearTimeline;\n\nasync function sendTimelineEventData(id, ctx) {\n let data = null;\n const eventData = ctx.timelineEventMap.get(id);\n\n if (eventData) {\n data = await ctx.currentAppRecord.backend.api.inspectTimelineEvent(eventData, ctx.currentAppRecord.options.app);\n data = (0, shared_utils_1.stringify)(data);\n } else if (shared_utils_1.SharedData.debugInfo) {\n console.warn(`Event ${id} not found`, ctx.timelineEventMap.keys());\n }\n\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_EVENT_DATA, {\n eventId: id,\n data\n });\n}\n\nexports.sendTimelineEventData = sendTimelineEventData;\n\nfunction removeLayersForApp(app, ctx) {\n const layers = ctx.timelineLayers.filter(l => {\n var _a;\n\n return ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app;\n });\n\n for (const layer of layers) {\n const index = ctx.timelineLayers.indexOf(layer);\n if (index !== -1) ctx.timelineLayers.splice(index, 1);\n\n for (const e of layer.events) {\n ctx.timelineEventMap.delete(e.id);\n }\n }\n}\n\nexports.removeLayersForApp = removeLayersForApp;\n\nfunction sendTimelineLayerEvents(appId, layerId, ctx) {\n var _a;\n\n const app = (_a = ctx.appRecords.find(ar => ar.id === appId)) === null || _a === void 0 ? void 0 : _a.options.app;\n if (!app) return;\n const layer = ctx.timelineLayers.find(l => {\n var _a;\n\n return ((_a = l.appRecord) === null || _a === void 0 ? void 0 : _a.options.app) === app && l.id === layerId;\n });\n if (!layer) return;\n ctx.bridge.send(shared_utils_1.BridgeEvents.TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS, {\n appId,\n layerId,\n events: layer.events.map(e => mapTimelineEvent(e))\n });\n}\n\nexports.sendTimelineLayerEvents = sendTimelineLayerEvents;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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InNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3RpbWVsaW5lLnRzPzkyZmQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlbmRUaW1lbGluZUxheWVyRXZlbnRzID0gZXhwb3J0cy5yZW1vdmVMYXllcnNGb3JBcHAgPSBleHBvcnRzLnNlbmRUaW1lbGluZUV2ZW50RGF0YSA9IGV4cG9ydHMuY2xlYXJUaW1lbGluZSA9IGV4cG9ydHMuYWRkVGltZWxpbmVFdmVudCA9IGV4cG9ydHMuc2VuZFRpbWVsaW5lTGF5ZXJzID0gZXhwb3J0cy5hZGRCdWlsdGluTGF5ZXJzID0gZXhwb3J0cy5zZXR1cFRpbWVsaW5lID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBkZXZ0b29sc19hcGlfMSA9IHJlcXVpcmUoXCJAdnVlL2RldnRvb2xzLWFwaVwiKTtcbmNvbnN0IGdsb2JhbF9ob29rXzEgPSByZXF1aXJlKFwiLi9nbG9iYWwtaG9va1wiKTtcbmNvbnN0IGFwcF8xID0gcmVxdWlyZShcIi4vYXBwXCIpO1xuY29uc3QgdGltZWxpbmVfYnVpbHRpbnNfMSA9IHJlcXVpcmUoXCIuL3RpbWVsaW5lLWJ1aWx0aW5zXCIpO1xuZnVuY3Rpb24gc2V0dXBUaW1lbGluZShjdHgpIHtcbiAgICBzZXR1cEJ1aWx0aW5MYXllcnMoY3R4KTtcbn1cbmV4cG9ydHMuc2V0dXBUaW1lbGluZSA9IHNldHVwVGltZWxpbmU7XG5mdW5jdGlvbiBhZGRCdWlsdGluTGF5ZXJzKGFwcFJlY29yZCwgY3R4KSB7XG4gICAgZm9yIChjb25zdCBsYXllckRlZiBvZiB0aW1lbGluZV9idWlsdGluc18xLmJ1aWx0aW5MYXllcnMpIHtcbiAgICAgICAgY3R4LnRpbWVsaW5lTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgLi4ubGF5ZXJEZWYsXG4gICAgICAgICAgICBhcHBSZWNvcmQsXG4gICAgICAgICAgICBwbHVnaW46IG51bGwsXG4gICAgICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmFkZEJ1aWx0aW5MYXllcnMgPSBhZGRCdWlsdGluTGF5ZXJzO1xuZnVuY3Rpb24gc2V0dXBCdWlsdGluTGF5ZXJzKGN0eCkge1xuICAgIFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnY2xpY2snLCAnZGJsY2xpY2snXS5mb3JFYWNoKGV2ZW50VHlwZSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdtb3VzZScsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogKDAsIGRldnRvb2xzX2FwaV8xLm5vdykoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sIG51bGwsIGN0eCk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBbJ2tleXVwJywgJ2tleWRvd24nLCAna2V5cHJlc3MnXS5mb3JFYWNoKGV2ZW50VHlwZSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdrZXlib2FyZCcsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogKDAsIGRldnRvb2xzX2FwaV8xLm5vdykoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHJsS2V5OiBldmVudC5jdHJsS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0S2V5OiBldmVudC5hbHRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhS2V5OiBldmVudC5tZXRhS2V5LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBudWxsLCBjdHgpO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZ2xvYmFsX2hvb2tfMS5ob29rLm9uKHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX0VNSVQsIGFzeW5jIChhcHAsIGluc3RhbmNlLCBldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuY29tcG9uZW50RXZlbnRzRW5hYmxlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcHBSZWNvcmQgPSBhd2FpdCAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkKShhcHAsIGN0eCk7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke2FwcFJlY29yZC5pZH06JHtpbnN0YW5jZS51aWR9YDtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudERpc3BsYXkgPSAoYXdhaXQgYXBwUmVjb3JkLmJhY2tlbmQuYXBpLmdldENvbXBvbmVudE5hbWUoaW5zdGFuY2UpKSB8fCAnPGk+VW5rbm93biBDb21wb25lbnQ8L2k+JztcbiAgICAgICAgICAgIGF3YWl0IGFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6ICdjb21wb25lbnQtZXZlbnQnLFxuICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWU6ICgwLCBkZXZ0b29sc19hcGlfMS5ub3cpKCksXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudC1kZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogY29tcG9uZW50RGlzcGxheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBgYnkgJHtjb21wb25lbnREaXNwbGF5fWAsXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzOiBhd2FpdCBhcHBSZWNvcmQuYmFja2VuZC5hcGkuZ2V0Q29tcG9uZW50Qm91bmRzKGluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgYXBwLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5kZWJ1Z0luZm8pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBzZW5kVGltZWxpbmVMYXllcnMoY3R4KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBsYXllcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGN0eC50aW1lbGluZUxheWVycykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBsYXllci5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGF5ZXIubGFiZWwsXG4gICAgICAgICAgICAgICAgY29sb3I6IGxheWVyLmNvbG9yLFxuICAgICAgICAgICAgICAgIGFwcElkOiAoX2EgPSBsYXllci5hcHBSZWNvcmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5JZDogKF9iID0gbGF5ZXIucGx1Z2luKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVzY3JpcHRvci5pZCxcbiAgICAgICAgICAgICAgICBncm91cHNPbmx5OiBsYXllci5ncm91cHNPbmx5LFxuICAgICAgICAgICAgICAgIHNraXBTY3JlZW5zaG90czogbGF5ZXIuc2tpcFNjcmVlbnNob3RzLFxuICAgICAgICAgICAgICAgIGlnbm9yZU5vRHVyYXRpb25Hcm91cHM6IGxheWVyLmlnbm9yZU5vRHVyYXRpb25Hcm91cHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZGVidWdJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xJU1QsIHtcbiAgICAgICAgbGF5ZXJzLFxuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kVGltZWxpbmVMYXllcnMgPSBzZW5kVGltZWxpbmVMYXllcnM7XG5hc3luYyBmdW5jdGlvbiBhZGRUaW1lbGluZUV2ZW50KG9wdGlvbnMsIGFwcCwgY3R4KSB7XG4gICAgY29uc3QgYXBwSWQgPSBhcHAgPyAoMCwgYXBwXzEuZ2V0QXBwUmVjb3JkSWQpKGFwcCkgOiBudWxsO1xuICAgIGNvbnN0IGlzQWxsQXBwcyA9IG9wdGlvbnMuYWxsIHx8ICFhcHAgfHwgYXBwSWQgPT0gbnVsbDtcbiAgICBjb25zdCBpZCA9IGN0eC5uZXh0VGltZWxpbmVFdmVudElkKys7XG4gICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgICBpZCxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgYWxsOiBpc0FsbEFwcHMsXG4gICAgfTtcbiAgICBjdHgudGltZWxpbmVFdmVudE1hcC5zZXQoZXZlbnREYXRhLmlkLCBldmVudERhdGEpO1xuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfRVZFTlQsIHtcbiAgICAgICAgYXBwSWQ6IGV2ZW50RGF0YS5hbGwgPyAnYWxsJyA6IGFwcElkLFxuICAgICAgICBsYXllcklkOiBldmVudERhdGEubGF5ZXJJZCxcbiAgICAgICAgZXZlbnQ6IG1hcFRpbWVsaW5lRXZlbnQoZXZlbnREYXRhKSxcbiAgICB9KTtcbiAgICBjb25zdCBsYXllciA9IGN0eC50aW1lbGluZUxheWVycy5maW5kKGwgPT4geyB2YXIgX2E7IHJldHVybiAoaXNBbGxBcHBzIHx8ICgoX2EgPSBsLmFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnMuYXBwKSA9PT0gYXBwKSAmJiBsLmlkID09PSBvcHRpb25zLmxheWVySWQ7IH0pO1xuICAgIGlmIChsYXllcikge1xuICAgICAgICBsYXllci5ldmVudHMucHVzaChldmVudERhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICBjb25zb2xlLndhcm4oYFRpbWVsaW5lIGxheWVyICR7b3B0aW9ucy5sYXllcklkfSBub3QgZm91bmRgKTtcbiAgICB9XG59XG5leHBvcnRzLmFkZFRpbWVsaW5lRXZlbnQgPSBhZGRUaW1lbGluZUV2ZW50O1xuZnVuY3Rpb24gbWFwVGltZWxpbmVFdmVudChldmVudERhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogZXZlbnREYXRhLmlkLFxuICAgICAgICB0aW1lOiBNYXRoLnJvdW5kKGV2ZW50RGF0YS5ldmVudC50aW1lICogMTAwMCksXG4gICAgICAgIGxvZ1R5cGU6IGV2ZW50RGF0YS5ldmVudC5sb2dUeXBlLFxuICAgICAgICBncm91cElkOiBldmVudERhdGEuZXZlbnQuZ3JvdXBJZCxcbiAgICAgICAgdGl0bGU6IGV2ZW50RGF0YS5ldmVudC50aXRsZSxcbiAgICAgICAgc3VidGl0bGU6IGV2ZW50RGF0YS5ldmVudC5zdWJ0aXRsZSxcbiAgICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gY2xlYXJUaW1lbGluZShjdHgpIHtcbiAgICBjdHgudGltZWxpbmVFdmVudE1hcC5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgY3R4LnRpbWVsaW5lTGF5ZXJzKSB7XG4gICAgICAgIGxheWVyLmV2ZW50cyA9IFtdO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGJhY2tlbmQgb2YgY3R4LmJhY2tlbmRzKSB7XG4gICAgICAgIGF3YWl0IGJhY2tlbmQuYXBpLmNsZWFyVGltZWxpbmUoKTtcbiAgICB9XG59XG5leHBvcnRzLmNsZWFyVGltZWxpbmUgPSBjbGVhclRpbWVsaW5lO1xuYXN5bmMgZnVuY3Rpb24gc2VuZFRpbWVsaW5lRXZlbnREYXRhKGlkLCBjdHgpIHtcbiAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgY29uc3QgZXZlbnREYXRhID0gY3R4LnRpbWVsaW5lRXZlbnRNYXAuZ2V0KGlkKTtcbiAgICBpZiAoZXZlbnREYXRhKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBjdHguY3VycmVudEFwcFJlY29yZC5iYWNrZW5kLmFwaS5pbnNwZWN0VGltZWxpbmVFdmVudChldmVudERhdGEsIGN0eC5jdXJyZW50QXBwUmVjb3JkLm9wdGlvbnMuYXBwKTtcbiAgICAgICAgZGF0YSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5zdHJpbmdpZnkpKGRhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaGFyZWRfdXRpbHNfMS5TaGFyZWREYXRhLmRlYnVnSW5mbykge1xuICAgICAgICBjb25zb2xlLndhcm4oYEV2ZW50ICR7aWR9IG5vdCBmb3VuZGAsIGN0eC50aW1lbGluZUV2ZW50TWFwLmtleXMoKSk7XG4gICAgfVxuICAgIGN0eC5icmlkZ2Uuc2VuZChzaGFyZWRfdXRpbHNfMS5CcmlkZ2VFdmVudHMuVE9fRlJPTlRfVElNRUxJTkVfRVZFTlRfREFUQSwge1xuICAgICAgICBldmVudElkOiBpZCxcbiAgICAgICAgZGF0YSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2VuZFRpbWVsaW5lRXZlbnREYXRhID0gc2VuZFRpbWVsaW5lRXZlbnREYXRhO1xuZnVuY3Rpb24gcmVtb3ZlTGF5ZXJzRm9yQXBwKGFwcCwgY3R4KSB7XG4gICAgY29uc3QgbGF5ZXJzID0gY3R4LnRpbWVsaW5lTGF5ZXJzLmZpbHRlcihsID0+IHsgdmFyIF9hOyByZXR1cm4gKChfYSA9IGwuYXBwUmVjb3JkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW9ucy5hcHApID09PSBhcHA7IH0pO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY3R4LnRpbWVsaW5lTGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgY3R4LnRpbWVsaW5lTGF5ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBsYXllci5ldmVudHMpIHtcbiAgICAgICAgICAgIGN0eC50aW1lbGluZUV2ZW50TWFwLmRlbGV0ZShlLmlkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMucmVtb3ZlTGF5ZXJzRm9yQXBwID0gcmVtb3ZlTGF5ZXJzRm9yQXBwO1xuZnVuY3Rpb24gc2VuZFRpbWVsaW5lTGF5ZXJFdmVudHMoYXBwSWQsIGxheWVySWQsIGN0eCkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBhcHAgPSAoX2EgPSBjdHguYXBwUmVjb3Jkcy5maW5kKGFyID0+IGFyLmlkID09PSBhcHBJZCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpb25zLmFwcDtcbiAgICBpZiAoIWFwcClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGxheWVyID0gY3R4LnRpbWVsaW5lTGF5ZXJzLmZpbmQobCA9PiB7IHZhciBfYTsgcmV0dXJuICgoX2EgPSBsLmFwcFJlY29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGlvbnMuYXBwKSA9PT0gYXBwICYmIGwuaWQgPT09IGxheWVySWQ7IH0pO1xuICAgIGlmICghbGF5ZXIpXG4gICAgICAgIHJldHVybjtcbiAgICBjdHguYnJpZGdlLnNlbmQoc2hhcmVkX3V0aWxzXzEuQnJpZGdlRXZlbnRzLlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTLCB7XG4gICAgICAgIGFwcElkLFxuICAgICAgICBsYXllcklkLFxuICAgICAgICBldmVudHM6IGxheWVyLmV2ZW50cy5tYXAoZSA9PiBtYXBUaW1lbGluZUV2ZW50KGUpKSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuc2VuZFRpbWVsaW5lTGF5ZXJFdmVudHMgPSBzZW5kVGltZWxpbmVMYXllckV2ZW50cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVsaW5lLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///41515\n");
|
|
231
239
|
|
|
232
240
|
/***/ }),
|
|
233
241
|
|
|
@@ -279,11 +287,27 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
279
287
|
|
|
280
288
|
/***/ }),
|
|
281
289
|
|
|
290
|
+
/***/ 82639:
|
|
291
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
292
|
+
|
|
293
|
+
"use strict";
|
|
294
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.applyPerfHooks = exports.initPerf = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst tree_1 = __webpack_require__(18059);\n\nconst COMPONENT_HOOKS = {\n beforeCreate: {\n start: 'create'\n },\n created: {\n end: 'create'\n },\n beforeMount: {\n start: 'mount'\n },\n mounted: {\n end: 'mount'\n },\n beforeUpdate: {\n start: 'update'\n },\n updated: {\n end: 'update'\n },\n beforeDestroyed: {\n start: 'destroy'\n },\n destroyed: {\n end: 'destroy'\n }\n};\n\nfunction initPerf(api, app, Vue) {\n // Global mixin\n Vue.mixin({\n beforeCreate() {\n applyPerfHooks(api, this, app);\n }\n\n }); // Apply to existing components\n\n tree_1.instanceMap === null || tree_1.instanceMap === void 0 ? void 0 : tree_1.instanceMap.forEach(vm => applyPerfHooks(api, vm, app));\n}\n\nexports.initPerf = initPerf;\n\nfunction applyPerfHooks(api, vm, app) {\n if (vm.$options.$_devtoolsPerfHooks) return;\n vm.$options.$_devtoolsPerfHooks = true;\n\n for (const hook in COMPONENT_HOOKS) {\n const {\n start,\n end\n } = COMPONENT_HOOKS[hook];\n\n const handler = function () {\n if (shared_utils_1.SharedData.performanceMonitoringEnabled) {\n api.ctx.hook.emit(start ? shared_utils_1.HookEvents.PERFORMANCE_START : shared_utils_1.HookEvents.PERFORMANCE_END, app, this._uid, this, start !== null && start !== void 0 ? start : end, api.now());\n }\n };\n\n const currentValue = vm.$options[hook];\n\n if (Array.isArray(currentValue)) {\n vm.$options[hook] = [handler, ...currentValue];\n } else if (typeof currentValue === 'function') {\n vm.$options[hook] = [handler, currentValue];\n } else {\n vm.$options[hook] = [handler];\n }\n }\n}\n\nexports.applyPerfHooks = applyPerfHooks;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI2MzkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUNBOztBQUVBLE1BQU0sZUFBZSxHQUFHO0FBQ3RCLGNBQVksRUFBRTtBQUFFLFNBQUssRUFBRTtBQUFULEdBRFE7QUFFdEIsU0FBTyxFQUFFO0FBQUUsT0FBRyxFQUFFO0FBQVAsR0FGYTtBQUd0QixhQUFXLEVBQUU7QUFBRSxTQUFLLEVBQUU7QUFBVCxHQUhTO0FBSXRCLFNBQU8sRUFBRTtBQUFFLE9BQUcsRUFBRTtBQUFQLEdBSmE7QUFLdEIsY0FBWSxFQUFFO0FBQUUsU0FBSyxFQUFFO0FBQVQsR0FMUTtBQU10QixTQUFPLEVBQUU7QUFBRSxPQUFHLEVBQUU7QUFBUCxHQU5hO0FBT3RCLGlCQUFlLEVBQUU7QUFBRSxTQUFLLEVBQUU7QUFBVCxHQVBLO0FBUXRCLFdBQVMsRUFBRTtBQUFFLE9BQUcsRUFBRTtBQUFQO0FBUlcsQ0FBeEI7O0FBV0EsU0FBZ0IsUUFBaEIsQ0FBMEIsR0FBMUIsRUFBNEMsR0FBNUMsRUFBaUQsR0FBakQsRUFBb0Q7QUFDbEQ7QUFDQSxLQUFHLENBQUMsS0FBSixDQUFVO0FBQ1IsZ0JBQVk7QUFDVixvQkFBYyxDQUFDLEdBQUQsRUFBTSxJQUFOLEVBQVksR0FBWixDQUFkO0FBQ0Q7O0FBSE8sR0FBVixFQUZrRCxDQVFsRDs7QUFDQSx5QkFBVyxJQUFYLDJCQUFXLE1BQVgsR0FBVyxNQUFYLHNCQUFhLE9BQWIsQ0FBcUIsRUFBRSxJQUFJLGNBQWMsQ0FBQyxHQUFELEVBQU0sRUFBTixFQUFVLEdBQVYsQ0FBekM7QUFDRDs7QUFWRDs7QUFZQSxTQUFnQixjQUFoQixDQUFnQyxHQUFoQyxFQUFrRCxFQUFsRCxFQUFzRCxHQUF0RCxFQUF5RDtBQUN2RCxNQUFJLEVBQUUsQ0FBQyxRQUFILENBQVksbUJBQWhCLEVBQXFDO0FBQ3JDLElBQUUsQ0FBQyxRQUFILENBQVksbUJBQVosR0FBa0MsSUFBbEM7O0FBRUEsT0FBSyxNQUFNLElBQVgsSUFBbUIsZUFBbkIsRUFBb0M7QUFDbEMsVUFBTTtBQUFFLFdBQUY7QUFBUztBQUFULFFBQWlCLGVBQWUsQ0FBQyxJQUFELENBQXRDOztBQUNBLFVBQU0sT0FBTyxHQUFHO0FBQ2QsVUFBSSwwQkFBVyw0QkFBZixFQUE2QztBQUMzQyxXQUFHLENBQUMsR0FBSixDQUFRLElBQVIsQ0FBYSxJQUFiLENBQ0UsS0FBSyxHQUFHLDBCQUFXLGlCQUFkLEdBQWtDLDBCQUFXLGVBRHBELEVBRUUsR0FGRixFQUdFLEtBQUssSUFIUCxFQUlFLElBSkYsRUFLRSxLQUFLLFNBQUwsU0FBSyxXQUFMLFdBQVMsR0FMWCxFQU1FLEdBQUcsQ0FBQyxHQUFKLEVBTkY7QUFRRDtBQUNGLEtBWEQ7O0FBWUEsVUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLFFBQUgsQ0FBWSxJQUFaLENBQXJCOztBQUNBLFFBQUksS0FBSyxDQUFDLE9BQU4sQ0FBYyxZQUFkLENBQUosRUFBaUM7QUFDL0IsUUFBRSxDQUFDLFFBQUgsQ0FBWSxJQUFaLElBQW9CLENBQUMsT0FBRCxFQUFVLEdBQUcsWUFBYixDQUFwQjtBQUNELEtBRkQsTUFFTyxJQUFJLE9BQU8sWUFBUCxLQUF3QixVQUE1QixFQUF3QztBQUM3QyxRQUFFLENBQUMsUUFBSCxDQUFZLElBQVosSUFBb0IsQ0FBQyxPQUFELEVBQVUsWUFBVixDQUFwQjtBQUNELEtBRk0sTUFFQTtBQUNMLFFBQUUsQ0FBQyxRQUFILENBQVksSUFBWixJQUFvQixDQUFDLE9BQUQsQ0FBcEI7QUFDRDtBQUNGO0FBQ0Y7O0FBM0JEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi8uLi9zcmMvY29tcG9uZW50cy9wZXJmLnRzP2E0ZTYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFwcGx5UGVyZkhvb2tzID0gZXhwb3J0cy5pbml0UGVyZiA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgdHJlZV8xID0gcmVxdWlyZShcIi4vdHJlZVwiKTtcbmNvbnN0IENPTVBPTkVOVF9IT09LUyA9IHtcbiAgICBiZWZvcmVDcmVhdGU6IHsgc3RhcnQ6ICdjcmVhdGUnIH0sXG4gICAgY3JlYXRlZDogeyBlbmQ6ICdjcmVhdGUnIH0sXG4gICAgYmVmb3JlTW91bnQ6IHsgc3RhcnQ6ICdtb3VudCcgfSxcbiAgICBtb3VudGVkOiB7IGVuZDogJ21vdW50JyB9LFxuICAgIGJlZm9yZVVwZGF0ZTogeyBzdGFydDogJ3VwZGF0ZScgfSxcbiAgICB1cGRhdGVkOiB7IGVuZDogJ3VwZGF0ZScgfSxcbiAgICBiZWZvcmVEZXN0cm95ZWQ6IHsgc3RhcnQ6ICdkZXN0cm95JyB9LFxuICAgIGRlc3Ryb3llZDogeyBlbmQ6ICdkZXN0cm95JyB9LFxufTtcbmZ1bmN0aW9uIGluaXRQZXJmKGFwaSwgYXBwLCBWdWUpIHtcbiAgICAvLyBHbG9iYWwgbWl4aW5cbiAgICBWdWUubWl4aW4oe1xuICAgICAgICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgICAgICAgICBhcHBseVBlcmZIb29rcyhhcGksIHRoaXMsIGFwcCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gQXBwbHkgdG8gZXhpc3RpbmcgY29tcG9uZW50c1xuICAgIHRyZWVfMS5pbnN0YW5jZU1hcCA9PT0gbnVsbCB8fCB0cmVlXzEuaW5zdGFuY2VNYXAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRyZWVfMS5pbnN0YW5jZU1hcC5mb3JFYWNoKHZtID0+IGFwcGx5UGVyZkhvb2tzKGFwaSwgdm0sIGFwcCkpO1xufVxuZXhwb3J0cy5pbml0UGVyZiA9IGluaXRQZXJmO1xuZnVuY3Rpb24gYXBwbHlQZXJmSG9va3MoYXBpLCB2bSwgYXBwKSB7XG4gICAgaWYgKHZtLiRvcHRpb25zLiRfZGV2dG9vbHNQZXJmSG9va3MpXG4gICAgICAgIHJldHVybjtcbiAgICB2bS4kb3B0aW9ucy4kX2RldnRvb2xzUGVyZkhvb2tzID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGhvb2sgaW4gQ09NUE9ORU5UX0hPT0tTKSB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gQ09NUE9ORU5UX0hPT0tTW2hvb2tdO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEucGVyZm9ybWFuY2VNb25pdG9yaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGFwaS5jdHguaG9vay5lbWl0KHN0YXJ0ID8gc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5QRVJGT1JNQU5DRV9TVEFSVCA6IHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuUEVSRk9STUFOQ0VfRU5ELCBhcHAsIHRoaXMuX3VpZCwgdGhpcywgc3RhcnQgIT09IG51bGwgJiYgc3RhcnQgIT09IHZvaWQgMCA/IHN0YXJ0IDogZW5kLCBhcGkubm93KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgdm0uJG9wdGlvbnNbaG9va10gPSBbaGFuZGxlciwgLi4uY3VycmVudFZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2bS4kb3B0aW9uc1tob29rXSA9IFtoYW5kbGVyLCBjdXJyZW50VmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdm0uJG9wdGlvbnNbaG9va10gPSBbaGFuZGxlcl07XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmFwcGx5UGVyZkhvb2tzID0gYXBwbHlQZXJmSG9va3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///82639\n");
|
|
295
|
+
|
|
296
|
+
/***/ }),
|
|
297
|
+
|
|
282
298
|
/***/ 18059:
|
|
283
299
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
284
300
|
|
|
285
301
|
"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\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) {\n appRecord.meta = {};\n }\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, util_1.getInstanceName)(instance);\n return (0, shared_utils_1.classify)(name).toLowerCase().indexOf(filter) > -1 || (0, shared_utils_1.kebabize)(name).toLowerCase().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, appRecord); // 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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SyxDQUFDLFNBQU4sQ0FBZ0Isb0JBQTlCOztBQUNBLE1BQUksQ0FBQywyQkFBbUIsR0FBbkIsQ0FBdUIsS0FBdkIsQ0FBTCxFQUFvQztBQUNsQywrQkFBbUIsR0FBbkIsQ0FBdUIsS0FBdkIsRUFBOEIsRUFBOUI7QUFDQSxTQUFLLENBQUMsU0FBTixDQUFnQixHQUFoQixDQUFvQixvQkFBcEIsRUFBMEM7QUFDeEMsaUNBQW1CLE1BQW5CLENBQTBCLEtBQTFCO0FBQ0QsS0FGRDtBQUdEOztBQUVELDZCQUFtQixHQUFuQixDQUF1QixLQUF2QixFQUE4QixFQUE5QixJQUFvQyxLQUFwQztBQUVBLFdBQVMsQ0FBQyxXQUFWLENBQXNCLEdBQXRCLENBQTBCLEVBQTFCLEVBQThCO0FBQzVCLHdCQUFvQixFQUFFLEVBRE07QUFFNUIsc0NBQWtDLEVBQUUsSUFGUjtBQUc1QjtBQUg0QixHQUE5QjtBQUtEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi8uLi9zcmMvY29tcG9uZW50cy90cmVlLnRzPzQwNzMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENvbXBvbmVudFBhcmVudHMgPSBleHBvcnRzLndhbGtUcmVlID0gZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAgPSBleHBvcnRzLmluc3RhbmNlTWFwID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBlbF8xID0gcmVxdWlyZShcIi4vZWxcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xubGV0IGFwcFJlY29yZDtcbmxldCBhcGk7XG5jb25zdCBjb25zb2xlQm91bmRJbnN0YW5jZXMgPSBBcnJheSg1KTtcbmxldCBmaWx0ZXIgPSAnJztcbmNvbnN0IGZ1bmN0aW9uYWxJZHMgPSBuZXcgTWFwKCk7XG4vLyBEZWR1cGUgaW5zdGFuY2VzXG4vLyBTb21lIGluc3RhbmNlcyBtYXkgYmUgYm90aCBvbiBhIGNvbXBvbmVudCBhbmQgb24gYSBjaGlsZCBhYnN0cmFjdC9mdW5jdGlvbmFsIGNvbXBvbmVudFxuY29uc3QgY2FwdHVyZUlkcyA9IG5ldyBNYXAoKTtcbmFzeW5jIGZ1bmN0aW9uIHdhbGtUcmVlKGluc3RhbmNlLCBwRmlsdGVyLCBhcGksIGN0eCkge1xuICAgIGluaXRDdHgoYXBpLCBjdHgpO1xuICAgIGZpbHRlciA9IHBGaWx0ZXI7XG4gICAgZnVuY3Rpb25hbElkcy5jbGVhcigpO1xuICAgIGNhcHR1cmVJZHMuY2xlYXIoKTtcbiAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuKGF3YWl0IGZpbmRRdWFsaWZpZWRDaGlsZHJlbihpbnN0YW5jZSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLndhbGtUcmVlID0gd2Fsa1RyZWU7XG5mdW5jdGlvbiBnZXRDb21wb25lbnRQYXJlbnRzKGluc3RhbmNlLCBhcGksIGN0eCkge1xuICAgIGluaXRDdHgoYXBpLCBjdHgpO1xuICAgIGNvbnN0IGNhcHR1cmVJZHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgY2FwdHVyZUlkID0gdm0gPT4ge1xuICAgICAgICBjb25zdCBpZCA9ICgwLCB1dGlsXzEuZ2V0VW5pcXVlSWQpKHZtKTtcbiAgICAgICAgaWYgKGNhcHR1cmVJZHMuaGFzKGlkKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FwdHVyZUlkcy5zZXQoaWQsIHVuZGVmaW5lZCk7XG4gICAgICAgIGlmICh2bS5fX1ZVRV9ERVZUT09MU19GVU5DVElPTkFMX0xFR0FDWV9fKSB7XG4gICAgICAgICAgICBtYXJrRnVuY3Rpb25hbChpZCwgdm0udm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWFyayh2bSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICBjYXB0dXJlSWQoaW5zdGFuY2UpO1xuICAgIGxldCBwYXJlbnQgPSBpbnN0YW5jZTtcbiAgICB3aGlsZSAoKHBhcmVudCA9IHBhcmVudC4kcGFyZW50KSkge1xuICAgICAgICBjYXB0dXJlSWQocGFyZW50KTtcbiAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufVxuZXhwb3J0cy5nZXRDb21wb25lbnRQYXJlbnRzID0gZ2V0Q29tcG9uZW50UGFyZW50cztcbmZ1bmN0aW9uIGluaXRDdHgoX2FwaSwgY3R4KSB7XG4gICAgYXBwUmVjb3JkID0gY3R4LmN1cnJlbnRBcHBSZWNvcmQ7XG4gICAgYXBpID0gX2FwaTtcbiAgICBpZiAoIWFwcFJlY29yZC5tZXRhKSB7XG4gICAgICAgIGFwcFJlY29yZC5tZXRhID0ge307XG4gICAgfVxuICAgIGlmICghYXBwUmVjb3JkLm1ldGEuaW5zdGFuY2VNYXApIHtcbiAgICAgICAgYXBwUmVjb3JkLm1ldGEuaW5zdGFuY2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGV4cG9ydHMuaW5zdGFuY2VNYXAgPSBhcHBSZWNvcmQubWV0YS5pbnN0YW5jZU1hcDtcbiAgICBpZiAoIWFwcFJlY29yZC5tZXRhLmZ1bmN0aW9uYWxWbm9kZU1hcCkge1xuICAgICAgICBhcHBSZWNvcmQubWV0YS5mdW5jdGlvbmFsVm5vZGVNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwID0gYXBwUmVjb3JkLm1ldGEuZnVuY3Rpb25hbFZub2RlTWFwO1xufVxuLyoqXG4gKiBJdGVyYXRlIHRocm91Z2ggYW4gYXJyYXkgb2YgaW5zdGFuY2VzIGFuZCBmbGF0dGVuIGl0IGludG9cbiAqIGFuIGFycmF5IG9mIHF1YWxpZmllZCBpbnN0YW5jZXMuIFRoaXMgaXMgYSBkZXB0aC1maXJzdFxuICogdHJhdmVyc2FsIC0gZS5nLiBpZiBhbiBpbnN0YW5jZSBpcyBub3QgbWF0Y2hlZCwgd2Ugd2lsbFxuICogcmVjdXJzaXZlbHkgZ28gZGVlcGVyIHVudGlsIGEgcXVhbGlmaWVkIGNoaWxkIGlzIGZvdW5kLlxuICovXG5mdW5jdGlvbiBmaW5kUXVhbGlmaWVkQ2hpbGRyZW5Gcm9tTGlzdChpbnN0YW5jZXMpIHtcbiAgICBpbnN0YW5jZXMgPSBpbnN0YW5jZXNcbiAgICAgICAgLmZpbHRlcihjaGlsZCA9PiAhKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZCkpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbCghZmlsdGVyXG4gICAgICAgID8gaW5zdGFuY2VzLm1hcChjYXB0dXJlKVxuICAgICAgICA6IEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGluc3RhbmNlcy5tYXAoZmluZFF1YWxpZmllZENoaWxkcmVuKSkpO1xufVxuLyoqXG4gKiBGaW5kIHF1YWxpZmllZCBjaGlsZHJlbiBmcm9tIGEgc2luZ2xlIGluc3RhbmNlLlxuICogSWYgdGhlIGluc3RhbmNlIGl0c2VsZiBpcyBxdWFsaWZpZWQsIGp1c3QgcmV0dXJuIGl0c2VsZi5cbiAqIFRoaXMgaXMgb2sgYmVjYXVzZSBbXS5jb25jYXQgd29ya3MgaW4gYm90aCBjYXNlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZFF1YWxpZmllZENoaWxkcmVuKGluc3RhbmNlKSB7XG4gICAgaWYgKGlzUXVhbGlmaWVkKGluc3RhbmNlKSkge1xuICAgICAgICByZXR1cm4gW2F3YWl0IGNhcHR1cmUoaW5zdGFuY2UpXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBjaGlsZHJlbiA9IGF3YWl0IGZpbmRRdWFsaWZpZWRDaGlsZHJlbkZyb21MaXN0KGluc3RhbmNlLiRjaGlsZHJlbik7XG4gICAgICAgIC8vIEZpbmQgZnVuY3Rpb25hbCBjb21wb25lbnRzIGluIHJlY3Vyc2l2ZWx5IGluIG5vbi1mdW5jdGlvbmFsIHZub2Rlcy5cbiAgICAgICAgaWYgKGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBQcm9taXNlLmFsbChmbGF0dGVuKGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gIWNoaWxkLmNvbXBvbmVudEluc3RhbmNlKS5tYXAoY2FwdHVyZUNoaWxkKSkpO1xuICAgICAgICAgICAgLy8gRmlsdGVyIHF1YWxpZmllZCBjaGlsZHJlbi5cbiAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDaGlsZHJlbiA9IGxpc3QuZmlsdGVyKGluc3RhbmNlID0+IGlzUXVhbGlmaWVkKGluc3RhbmNlKSk7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdChhZGRpdGlvbmFsQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG59XG4vKipcbiAqIEdldCBjaGlsZHJlbiBmcm9tIGEgY29tcG9uZW50IGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBnZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oaW5zdGFuY2UpIHtcbiAgICBpZiAoaW5zdGFuY2UuJGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS4kY2hpbGRyZW47XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gaW5zdGFuY2UgaXMgcXVhbGlmaWVkLlxuICovXG5mdW5jdGlvbiBpc1F1YWxpZmllZChpbnN0YW5jZSkge1xuICAgIGNvbnN0IG5hbWUgPSAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpO1xuICAgIHJldHVybiAoMCwgc2hhcmVkX3V0aWxzXzEuY2xhc3NpZnkpKG5hbWUpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXIpID4gLTEgfHxcbiAgICAgICAgKDAsIHNoYXJlZF91dGlsc18xLmtlYmFiaXplKShuYW1lKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyKSA+IC0xO1xufVxuZnVuY3Rpb24gZmxhdHRlbihpdGVtcykge1xuICAgIGNvbnN0IHIgPSBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaXRlbSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGZsYXR0ZW4oaSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2MucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXRlbSkge1xuICAgICAgICAgICAgYWNjLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBjYXB0dXJlQ2hpbGQoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQuZm5Db250ZXh0ICYmICFjaGlsZC5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gY2FwdHVyZShjaGlsZCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGlmICghKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSkpXG4gICAgICAgICAgICByZXR1cm4gY2FwdHVyZShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChmbGF0dGVuKGNoaWxkLmNoaWxkcmVuLm1hcChjYXB0dXJlQ2hpbGQpKSk7XG4gICAgfVxufVxuLyoqXG4gKiBDYXB0dXJlIHRoZSBtZXRhIGluZm9ybWF0aW9uIG9mIGFuIGluc3RhbmNlLiAocmVjdXJzaXZlKVxuICovXG5hc3luYyBmdW5jdGlvbiBjYXB0dXJlKGluc3RhbmNlLCBpbmRleCwgbGlzdCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgIGlmIChpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19GVU5DVElPTkFMX0xFR0FDWV9fKSB7XG4gICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2Uudm5vZGU7XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZS4kb3B0aW9ucyAmJiBpbnN0YW5jZS4kb3B0aW9ucy5hYnN0cmFjdCAmJiBpbnN0YW5jZS5fdm5vZGUgJiYgaW5zdGFuY2UuX3Zub2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UuX3Zub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH1cbiAgICBpZiAoKF9iID0gKF9hID0gaW5zdGFuY2UuJG9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZXZ0b29scykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhpZGUpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBGdW5jdGlvbmFsIGNvbXBvbmVudC5cbiAgICBpZiAoaW5zdGFuY2UuZm5Db250ZXh0ICYmICFpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBjb250ZXh0VWlkID0gaW5zdGFuY2UuZm5Db250ZXh0Ll9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgICAgICBsZXQgaWQgPSBmdW5jdGlvbmFsSWRzLmdldChjb250ZXh0VWlkKTtcbiAgICAgICAgaWYgKGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIGlkID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlkKys7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb25hbElkcy5zZXQoY29udGV4dFVpZCwgaWQpO1xuICAgICAgICBjb25zdCBmdW5jdGlvbmFsSWQgPSBjb250ZXh0VWlkICsgJzpmdW5jdGlvbmFsOicgKyBpZDtcbiAgICAgICAgbWFya0Z1bmN0aW9uYWwoZnVuY3Rpb25hbElkLCBpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuUHJvbWlzZSA9IChpbnN0YW5jZS5jaGlsZHJlblxuICAgICAgICAgICAgPyBpbnN0YW5jZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGQuZm5Db250ZXh0XG4gICAgICAgICAgICAgICAgPyBjYXB0dXJlQ2hpbGQoY2hpbGQpXG4gICAgICAgICAgICAgICAgOiBjaGlsZC5jb21wb25lbnRJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICA/IGNhcHR1cmUoY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgLy8gcm91dGVyLXZpZXcgaGFzIGJvdGggZm5Db250ZXh0IGFuZCBjb21wb25lbnRJbnN0YW5jZSBvbiB2bm9kZS5cbiAgICAgICAgICAgIDogaW5zdGFuY2UuY29tcG9uZW50SW5zdGFuY2UgPyBbY2FwdHVyZShpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSldIDogW10pO1xuICAgICAgICAvLyBhd2FpdCBhbGwgY2hpbGRyZW5DYXB0dXJlIHRvLWJlIHJlc29sdmVkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKGF3YWl0IFByb21pc2UuYWxsKGNoaWxkcmVuUHJvbWlzZSkpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB7XG4gICAgICAgICAgICB1aWQ6IGZ1bmN0aW9uYWxJZCxcbiAgICAgICAgICAgIGlkOiBmdW5jdGlvbmFsSWQsXG4gICAgICAgICAgICB0YWdzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IDB4NTU1NTU1LFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4ZWVlZWVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbmFtZTogKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKSxcbiAgICAgICAgICAgIHJlbmRlcktleTogKDAsIHV0aWxfMS5nZXRSZW5kZXJLZXkpKGluc3RhbmNlLmtleSksXG4gICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiAhIWNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgICAgIGluYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRnJhZ21lbnQ6IGZhbHNlLCAvLyBUT0RPOiBDaGVjayB3aGF0IGlzIGl0IGZvci5cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFwaS52aXNpdENvbXBvbmVudFRyZWUoaW5zdGFuY2UsIHRyZWVOb2RlLCBmaWx0ZXIsIChfYyA9IGFwcFJlY29yZCA9PT0gbnVsbCB8fCBhcHBSZWNvcmQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFwcFJlY29yZC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuYXBwKTtcbiAgICB9XG4gICAgLy8gaW5zdGFuY2UuX3VpZCBpcyBub3QgcmVsaWFibGUgaW4gZGV2dG9vbHMgYXMgdGhlcmVcbiAgICAvLyBtYXkgYmUgMiByb290cyB3aXRoIHNhbWUgX3VpZCB3aGljaCBjYXVzZXMgdW5leHBlY3RlZFxuICAgIC8vIGJlaGF2aW91clxuICAgIGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gKDAsIHV0aWxfMS5nZXRVbmlxdWVJZCkoaW5zdGFuY2UsIGFwcFJlY29yZCk7XG4gICAgLy8gRGVkdXBlXG4gICAgaWYgKGNhcHR1cmVJZHMuaGFzKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjYXB0dXJlSWRzLnNldChpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXywgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgbWFyayhpbnN0YW5jZSk7XG4gICAgY29uc3QgbmFtZSA9ICgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgUHJvbWlzZS5hbGwoKGF3YWl0IGdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihpbnN0YW5jZSkpXG4gICAgICAgIC5maWx0ZXIoY2hpbGQgPT4gISgwLCB1dGlsXzEuaXNCZWluZ0Rlc3Ryb3llZCkoY2hpbGQpKVxuICAgICAgICAubWFwKGNhcHR1cmUpKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgICAgdWlkOiBpbnN0YW5jZS5fdWlkLFxuICAgICAgICBpZDogaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJlbmRlcktleTogKDAsIHV0aWxfMS5nZXRSZW5kZXJLZXkpKGluc3RhbmNlLiR2bm9kZSA/IGluc3RhbmNlLiR2bm9kZS5rZXkgOiBudWxsKSxcbiAgICAgICAgaW5hY3RpdmU6ICEhaW5zdGFuY2UuX2luYWN0aXZlLFxuICAgICAgICBpc0ZyYWdtZW50OiAhIWluc3RhbmNlLl9pc0ZyYWdtZW50LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgaGFzQ2hpbGRyZW46ICEhY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICAgICAgbWV0YToge30sXG4gICAgfTtcbiAgICBpZiAoaW5zdGFuY2UuX3Zub2RlICYmIGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCB2bm9kZUNoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoZmxhdHRlbihpbnN0YW5jZS5fdm5vZGUuY2hpbGRyZW4ubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICAgICAgcmV0LmNoaWxkcmVuID0gcmV0LmNoaWxkcmVuLmNvbmNhdChmbGF0dGVuKHZub2RlQ2hpbGRyZW4pLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICAgIHJldC5oYXNDaGlsZHJlbiA9ICEhcmV0LmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG4gICAgLy8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmdcbiAgICBjb25zdCByb290RWxlbWVudHMgPSAoMCwgZWxfMS5nZXRSb290RWxlbWVudHNGcm9tQ29tcG9uZW50SW5zdGFuY2UpKGluc3RhbmNlKTtcbiAgICBjb25zdCBmaXJzdEVsZW1lbnQgPSByb290RWxlbWVudHNbMF07XG4gICAgaWYgKGZpcnN0RWxlbWVudCA9PT0gbnVsbCB8fCBmaXJzdEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlID0gaW5zdGFuY2UuJHBhcmVudDtcbiAgICAgICAgY29uc3QgcGFyZW50Um9vdEVsZW1lbnRzID0gcGFyZW50SW5zdGFuY2UgPyAoMCwgZWxfMS5nZXRSb290RWxlbWVudHNGcm9tQ29tcG9uZW50SW5zdGFuY2UpKHBhcmVudEluc3RhbmNlKSA6IFtdO1xuICAgICAgICBsZXQgZWwgPSBmaXJzdEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGluZGV4TGlzdCA9IFtdO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpbmRleExpc3QucHVzaChBcnJheS5mcm9tKGVsLnBhcmVudEVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihlbCkpO1xuICAgICAgICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9IHdoaWxlIChlbC5wYXJlbnRFbGVtZW50ICYmIHBhcmVudFJvb3RFbGVtZW50cy5sZW5ndGggJiYgIXBhcmVudFJvb3RFbGVtZW50cy5pbmNsdWRlcyhlbCkpO1xuICAgICAgICByZXQuZG9tT3JkZXIgPSBpbmRleExpc3QucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0LmRvbU9yZGVyID0gWy0xXTtcbiAgICB9XG4gICAgLy8gY2hlY2sgaWYgaW5zdGFuY2UgaXMgYXZhaWxhYmxlIGluIGNvbnNvbGVcbiAgICBjb25zdCBjb25zb2xlSWQgPSBjb25zb2xlQm91bmRJbnN0YW5jZXMuaW5kZXhPZihpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyk7XG4gICAgcmV0LmNvbnNvbGVJZCA9IGNvbnNvbGVJZCA+IC0xID8gJyR2bScgKyBjb25zb2xlSWQgOiBudWxsO1xuICAgIC8vIGNoZWNrIHJvdXRlciB2aWV3XG4gICAgY29uc3QgaXNSb3V0ZXJWaWV3MiA9IChfZSA9IChfZCA9IGluc3RhbmNlLiR2bm9kZSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmRhdGEpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5yb3V0ZXJWaWV3O1xuICAgIGlmIChpbnN0YW5jZS5fcm91dGVyVmlldyB8fCBpc1JvdXRlclZpZXcyKSB7XG4gICAgICAgIHJldC5pc1JvdXRlclZpZXcgPSB0cnVlO1xuICAgICAgICBpZiAoIWluc3RhbmNlLl9pbmFjdGl2ZSAmJiBpbnN0YW5jZS4kcm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBpbnN0YW5jZS4kcm91dGUubWF0Y2hlZDtcbiAgICAgICAgICAgIGNvbnN0IGRlcHRoID0gaXNSb3V0ZXJWaWV3MlxuICAgICAgICAgICAgICAgID8gaW5zdGFuY2UuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXG4gICAgICAgICAgICAgICAgOiBpbnN0YW5jZS5fcm91dGVyVmlldy5kZXB0aDtcbiAgICAgICAgICAgIHJldC5tZXRhLm1hdGNoZWRSb3V0ZVNlZ21lbnQgPVxuICAgICAgICAgICAgICAgIG1hdGNoZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFtkZXB0aF0gJiZcbiAgICAgICAgICAgICAgICAgICAgKGlzUm91dGVyVmlldzIgPyBtYXRjaGVkW2RlcHRoXS5wYXRoIDogbWF0Y2hlZFtkZXB0aF0uaGFuZGxlci5wYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXQudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBgcm91dGVyLXZpZXcke3JldC5tZXRhLm1hdGNoZWRSb3V0ZVNlZ21lbnQgPyBgOiAke3JldC5tZXRhLm1hdGNoZWRSb3V0ZVNlZ21lbnR9YCA6ICcnfWAsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IDB4MDAwMDAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweGZmODM0NCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhcGkudmlzaXRDb21wb25lbnRUcmVlKGluc3RhbmNlLCByZXQsIGZpbHRlciwgKF9mID0gYXBwUmVjb3JkID09PSBudWxsIHx8IGFwcFJlY29yZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXBwUmVjb3JkLm9wdGlvbnMpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5hcHApO1xufVxuLyoqXG4gKiBNYXJrIGFuIGluc3RhbmNlIGFzIGNhcHR1cmVkIGFuZCBzdG9yZSBpdCBpbiB0aGUgaW5zdGFuY2UgbWFwLlxuICpcbiAqIEBwYXJhbSB7VnVlfSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBtYXJrKGluc3RhbmNlKSB7XG4gICAgY29uc3QgcmVmSWQgPSBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXztcbiAgICBpZiAoIWV4cG9ydHMuaW5zdGFuY2VNYXAuaGFzKHJlZklkKSkge1xuICAgICAgICBleHBvcnRzLmluc3RhbmNlTWFwLnNldChyZWZJZCwgaW5zdGFuY2UpO1xuICAgICAgICBhcHBSZWNvcmQuaW5zdGFuY2VNYXAuc2V0KHJlZklkLCBpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLiRvbignaG9vazpiZWZvcmVEZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwb3J0cy5pbnN0YW5jZU1hcC5kZWxldGUocmVmSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYXJrRnVuY3Rpb25hbChpZCwgdm5vZGUpIHtcbiAgICBjb25zdCByZWZJZCA9IHZub2RlLmZuQ29udGV4dC5fX1ZVRV9ERVZUT09MU19VSURfXztcbiAgICBpZiAoIWV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLmhhcyhyZWZJZCkpIHtcbiAgICAgICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuc2V0KHJlZklkLCB7fSk7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dC4kb24oJ2hvb2s6YmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLmRlbGV0ZShyZWZJZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5nZXQocmVmSWQpW2lkXSA9IHZub2RlO1xuICAgIGFwcFJlY29yZC5pbnN0YW5jZU1hcC5zZXQoaWQsIHtcbiAgICAgICAgX19WVUVfREVWVE9PTFNfVUlEX186IGlkLFxuICAgICAgICBfX1ZVRV9ERVZUT09MU19GVU5DVElPTkFMX0xFR0FDWV9fOiB0cnVlLFxuICAgICAgICB2bm9kZSxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyZWUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18059\n");
|
|
302
|
+
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 perf_js_1 = __webpack_require__(82639);\n\nconst update_tracking_js_1 = __webpack_require__(44615);\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 = vm.__VUE_DEVTOOLS_UID__ = (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) {\n appRecord.meta = {};\n }\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, util_1.getInstanceName)(instance);\n return (0, shared_utils_1.classify)(name).toLowerCase().indexOf(filter) > -1 || (0, shared_utils_1.kebabize)(name).toLowerCase().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, appRecord); // 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 (0, perf_js_1.applyPerfHooks)(api, instance, appRecord.options.app);\n (0, update_tracking_js_1.applyTrackingUpdateHook)(api, instance);\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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QUFWLENBQWtCLEdBQWhEO0FBQ0Esc0RBQXdCLEdBQXhCLEVBQTZCLFFBQTdCO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTLGNBQVQsQ0FBeUIsRUFBekIsRUFBNkIsS0FBN0IsRUFBa0M7QUFDaEMsUUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQU4sQ0FBZ0Isb0JBQTlCOztBQUNBLE1BQUksQ0FBQywyQkFBbUIsR0FBbkIsQ0FBdUIsS0FBdkIsQ0FBTCxFQUFvQztBQUNsQywrQkFBbUIsR0FBbkIsQ0FBdUIsS0FBdkIsRUFBOEIsRUFBOUI7QUFDQSxTQUFLLENBQUMsU0FBTixDQUFnQixHQUFoQixDQUFvQixvQkFBcEIsRUFBMEM7QUFDeEMsaUNBQW1CLE1BQW5CLENBQTBCLEtBQTFCO0FBQ0QsS0FGRDtBQUdEOztBQUVELDZCQUFtQixHQUFuQixDQUF1QixLQUF2QixFQUE4QixFQUE5QixJQUFvQyxLQUFwQztBQUVBLFdBQVMsQ0FBQyxXQUFWLENBQXNCLEdBQXRCLENBQTBCLEVBQTFCLEVBQThCO0FBQzVCLHdCQUFvQixFQUFFLEVBRE07QUFFNUIsc0NBQWtDLEVBQUUsSUFGUjtBQUc1QjtBQUg0QixHQUE5QjtBQUtEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi8uLi9zcmMvY29tcG9uZW50cy90cmVlLnRzPzQwNzMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENvbXBvbmVudFBhcmVudHMgPSBleHBvcnRzLndhbGtUcmVlID0gZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAgPSBleHBvcnRzLmluc3RhbmNlTWFwID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBlbF8xID0gcmVxdWlyZShcIi4vZWxcIik7XG5jb25zdCBwZXJmX2pzXzEgPSByZXF1aXJlKFwiLi9wZXJmLmpzXCIpO1xuY29uc3QgdXBkYXRlX3RyYWNraW5nX2pzXzEgPSByZXF1aXJlKFwiLi91cGRhdGUtdHJhY2tpbmcuanNcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xubGV0IGFwcFJlY29yZDtcbmxldCBhcGk7XG5jb25zdCBjb25zb2xlQm91bmRJbnN0YW5jZXMgPSBBcnJheSg1KTtcbmxldCBmaWx0ZXIgPSAnJztcbmNvbnN0IGZ1bmN0aW9uYWxJZHMgPSBuZXcgTWFwKCk7XG4vLyBEZWR1cGUgaW5zdGFuY2VzXG4vLyBTb21lIGluc3RhbmNlcyBtYXkgYmUgYm90aCBvbiBhIGNvbXBvbmVudCBhbmQgb24gYSBjaGlsZCBhYnN0cmFjdC9mdW5jdGlvbmFsIGNvbXBvbmVudFxuY29uc3QgY2FwdHVyZUlkcyA9IG5ldyBNYXAoKTtcbmFzeW5jIGZ1bmN0aW9uIHdhbGtUcmVlKGluc3RhbmNlLCBwRmlsdGVyLCBhcGksIGN0eCkge1xuICAgIGluaXRDdHgoYXBpLCBjdHgpO1xuICAgIGZpbHRlciA9IHBGaWx0ZXI7XG4gICAgZnVuY3Rpb25hbElkcy5jbGVhcigpO1xuICAgIGNhcHR1cmVJZHMuY2xlYXIoKTtcbiAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuKGF3YWl0IGZpbmRRdWFsaWZpZWRDaGlsZHJlbihpbnN0YW5jZSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLndhbGtUcmVlID0gd2Fsa1RyZWU7XG5mdW5jdGlvbiBnZXRDb21wb25lbnRQYXJlbnRzKGluc3RhbmNlLCBhcGksIGN0eCkge1xuICAgIGluaXRDdHgoYXBpLCBjdHgpO1xuICAgIGNvbnN0IGNhcHR1cmVJZHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgY2FwdHVyZUlkID0gdm0gPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHZtLl9fVlVFX0RFVlRPT0xTX1VJRF9fID0gKDAsIHV0aWxfMS5nZXRVbmlxdWVJZCkodm0pO1xuICAgICAgICBpZiAoY2FwdHVyZUlkcy5oYXMoaWQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXB0dXJlSWRzLnNldChpZCwgdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKHZtLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgICAgIG1hcmtGdW5jdGlvbmFsKGlkLCB2bS52bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtYXJrKHZtKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgIGNhcHR1cmVJZChpbnN0YW5jZSk7XG4gICAgbGV0IHBhcmVudCA9IGluc3RhbmNlO1xuICAgIHdoaWxlICgocGFyZW50ID0gcGFyZW50LiRwYXJlbnQpKSB7XG4gICAgICAgIGNhcHR1cmVJZChwYXJlbnQpO1xuICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59XG5leHBvcnRzLmdldENvbXBvbmVudFBhcmVudHMgPSBnZXRDb21wb25lbnRQYXJlbnRzO1xuZnVuY3Rpb24gaW5pdEN0eChfYXBpLCBjdHgpIHtcbiAgICBhcHBSZWNvcmQgPSBjdHguY3VycmVudEFwcFJlY29yZDtcbiAgICBhcGkgPSBfYXBpO1xuICAgIGlmICghYXBwUmVjb3JkLm1ldGEpIHtcbiAgICAgICAgYXBwUmVjb3JkLm1ldGEgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFhcHBSZWNvcmQubWV0YS5pbnN0YW5jZU1hcCkge1xuICAgICAgICBhcHBSZWNvcmQubWV0YS5pbnN0YW5jZU1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZXhwb3J0cy5pbnN0YW5jZU1hcCA9IGFwcFJlY29yZC5tZXRhLmluc3RhbmNlTWFwO1xuICAgIGlmICghYXBwUmVjb3JkLm1ldGEuZnVuY3Rpb25hbFZub2RlTWFwKSB7XG4gICAgICAgIGFwcFJlY29yZC5tZXRhLmZ1bmN0aW9uYWxWbm9kZU1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAgPSBhcHBSZWNvcmQubWV0YS5mdW5jdGlvbmFsVm5vZGVNYXA7XG59XG4vKipcbiAqIEl0ZXJhdGUgdGhyb3VnaCBhbiBhcnJheSBvZiBpbnN0YW5jZXMgYW5kIGZsYXR0ZW4gaXQgaW50b1xuICogYW4gYXJyYXkgb2YgcXVhbGlmaWVkIGluc3RhbmNlcy4gVGhpcyBpcyBhIGRlcHRoLWZpcnN0XG4gKiB0cmF2ZXJzYWwgLSBlLmcuIGlmIGFuIGluc3RhbmNlIGlzIG5vdCBtYXRjaGVkLCB3ZSB3aWxsXG4gKiByZWN1cnNpdmVseSBnbyBkZWVwZXIgdW50aWwgYSBxdWFsaWZpZWQgY2hpbGQgaXMgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRRdWFsaWZpZWRDaGlsZHJlbkZyb21MaXN0KGluc3RhbmNlcykge1xuICAgIGluc3RhbmNlcyA9IGluc3RhbmNlc1xuICAgICAgICAuZmlsdGVyKGNoaWxkID0+ICEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkKSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKCFmaWx0ZXJcbiAgICAgICAgPyBpbnN0YW5jZXMubWFwKGNhcHR1cmUpXG4gICAgICAgIDogQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgaW5zdGFuY2VzLm1hcChmaW5kUXVhbGlmaWVkQ2hpbGRyZW4pKSk7XG59XG4vKipcbiAqIEZpbmQgcXVhbGlmaWVkIGNoaWxkcmVuIGZyb20gYSBzaW5nbGUgaW5zdGFuY2UuXG4gKiBJZiB0aGUgaW5zdGFuY2UgaXRzZWxmIGlzIHF1YWxpZmllZCwganVzdCByZXR1cm4gaXRzZWxmLlxuICogVGhpcyBpcyBvayBiZWNhdXNlIFtdLmNvbmNhdCB3b3JrcyBpbiBib3RoIGNhc2VzLlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kUXVhbGlmaWVkQ2hpbGRyZW4oaW5zdGFuY2UpIHtcbiAgICBpZiAoaXNRdWFsaWZpZWQoaW5zdGFuY2UpKSB7XG4gICAgICAgIHJldHVybiBbYXdhaXQgY2FwdHVyZShpbnN0YW5jZSldO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gYXdhaXQgZmluZFF1YWxpZmllZENoaWxkcmVuRnJvbUxpc3QoaW5zdGFuY2UuJGNoaWxkcmVuKTtcbiAgICAgICAgLy8gRmluZCBmdW5jdGlvbmFsIGNvbXBvbmVudHMgaW4gcmVjdXJzaXZlbHkgaW4gbm9uLWZ1bmN0aW9uYWwgdm5vZGVzLlxuICAgICAgICBpZiAoaW5zdGFuY2UuX3Zub2RlICYmIGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IFByb21pc2UuYWxsKGZsYXR0ZW4oaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiAhY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpLm1hcChjYXB0dXJlQ2hpbGQpKSk7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgcXVhbGlmaWVkIGNoaWxkcmVuLlxuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbENoaWxkcmVuID0gbGlzdC5maWx0ZXIoaW5zdGFuY2UgPT4gaXNRdWFsaWZpZWQoaW5zdGFuY2UpKTtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGFkZGl0aW9uYWxDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbn1cbi8qKlxuICogR2V0IGNoaWxkcmVuIGZyb20gYSBjb21wb25lbnQgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihpbnN0YW5jZSkge1xuICAgIGlmIChpbnN0YW5jZS4kY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLiRjaGlsZHJlbjtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhbiBpbnN0YW5jZSBpcyBxdWFsaWZpZWQuXG4gKi9cbmZ1bmN0aW9uIGlzUXVhbGlmaWVkKGluc3RhbmNlKSB7XG4gICAgY29uc3QgbmFtZSA9ICgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSk7XG4gICAgcmV0dXJuICgwLCBzaGFyZWRfdXRpbHNfMS5jbGFzc2lmeSkobmFtZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlcikgPiAtMSB8fFxuICAgICAgICAoMCwgc2hhcmVkX3V0aWxzXzEua2ViYWJpemUpKG5hbWUpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXIpID4gLTE7XG59XG5mdW5jdGlvbiBmbGF0dGVuKGl0ZW1zKSB7XG4gICAgY29uc3QgciA9IGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQoZmxhdHRlbihpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIGNhcHR1cmVDaGlsZChjaGlsZCkge1xuICAgIGlmIChjaGlsZC5mbkNvbnRleHQgJiYgIWNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKSlcbiAgICAgICAgICAgIHJldHVybiBjYXB0dXJlKGNoaWxkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZsYXR0ZW4oY2hpbGQuY2hpbGRyZW4ubWFwKGNhcHR1cmVDaGlsZCkpKTtcbiAgICB9XG59XG4vKipcbiAqIENhcHR1cmUgdGhlIG1ldGEgaW5mb3JtYXRpb24gb2YgYW4gaW5zdGFuY2UuIChyZWN1cnNpdmUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmUoaW5zdGFuY2UsIGluZGV4LCBsaXN0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgaWYgKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX18pIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS52bm9kZTtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLiRvcHRpb25zICYmIGluc3RhbmNlLiRvcHRpb25zLmFic3RyYWN0ICYmIGluc3RhbmNlLl92bm9kZSAmJiBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5fdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICgoX2IgPSAoX2EgPSBpbnN0YW5jZS4kb3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRldnRvb2xzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGlkZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIEZ1bmN0aW9uYWwgY29tcG9uZW50LlxuICAgIGlmIChpbnN0YW5jZS5mbkNvbnRleHQgJiYgIWluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRVaWQgPSBpbnN0YW5jZS5mbkNvbnRleHQuX19WVUVfREVWVE9PTFNfVUlEX187XG4gICAgICAgIGxldCBpZCA9IGZ1bmN0aW9uYWxJZHMuZ2V0KGNvbnRleHRVaWQpO1xuICAgICAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgaWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWQrKztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbmFsSWRzLnNldChjb250ZXh0VWlkLCBpZCk7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uYWxJZCA9IGNvbnRleHRVaWQgKyAnOmZ1bmN0aW9uYWw6JyArIGlkO1xuICAgICAgICBtYXJrRnVuY3Rpb25hbChmdW5jdGlvbmFsSWQsIGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Qcm9taXNlID0gKGluc3RhbmNlLmNoaWxkcmVuXG4gICAgICAgICAgICA/IGluc3RhbmNlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC5mbkNvbnRleHRcbiAgICAgICAgICAgICAgICA/IGNhcHR1cmVDaGlsZChjaGlsZClcbiAgICAgICAgICAgICAgICA6IGNoaWxkLmNvbXBvbmVudEluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgID8gY2FwdHVyZShjaGlsZC5jb21wb25lbnRJbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpXG4gICAgICAgICAgICAvLyByb3V0ZXItdmlldyBoYXMgYm90aCBmbkNvbnRleHQgYW5kIGNvbXBvbmVudEluc3RhbmNlIG9uIHZub2RlLlxuICAgICAgICAgICAgOiBpbnN0YW5jZS5jb21wb25lbnRJbnN0YW5jZSA/IFtjYXB0dXJlKGluc3RhbmNlLmNvbXBvbmVudEluc3RhbmNlKV0gOiBbXSk7XG4gICAgICAgIC8vIGF3YWl0IGFsbCBjaGlsZHJlbkNhcHR1cmUgdG8tYmUgcmVzb2x2ZWRcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgUHJvbWlzZS5hbGwoY2hpbGRyZW5Qcm9taXNlKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHtcbiAgICAgICAgICAgIHVpZDogZnVuY3Rpb25hbElkLFxuICAgICAgICAgICAgaWQ6IGZ1bmN0aW9uYWxJZCxcbiAgICAgICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnZnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMHg1NTU1NTUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogMHhlZWVlZWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBuYW1lOiAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpLFxuICAgICAgICAgICAgcmVuZGVyS2V5OiAoMCwgdXRpbF8xLmdldFJlbmRlcktleSkoaW5zdGFuY2Uua2V5KSxcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46ICEhY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICAgICAgaW5hY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgaXNGcmFnbWVudDogZmFsc2UsIC8vIFRPRE86IENoZWNrIHdoYXQgaXMgaXQgZm9yLlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYXBpLnZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIGZpbHRlciwgKF9jID0gYXBwUmVjb3JkID09PSBudWxsIHx8IGFwcFJlY29yZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXBwUmVjb3JkLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hcHApO1xuICAgIH1cbiAgICAvLyBpbnN0YW5jZS5fdWlkIGlzIG5vdCByZWxpYWJsZSBpbiBkZXZ0b29scyBhcyB0aGVyZVxuICAgIC8vIG1heSBiZSAyIHJvb3RzIHdpdGggc2FtZSBfdWlkIHdoaWNoIGNhdXNlcyB1bmV4cGVjdGVkXG4gICAgLy8gYmVoYXZpb3VyXG4gICAgaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18gPSAoMCwgdXRpbF8xLmdldFVuaXF1ZUlkKShpbnN0YW5jZSwgYXBwUmVjb3JkKTtcbiAgICAvLyBEZWR1cGVcbiAgICBpZiAoY2FwdHVyZUlkcy5oYXMoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNhcHR1cmVJZHMuc2V0KGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBtYXJrKGluc3RhbmNlKTtcbiAgICBjb25zdCBuYW1lID0gKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IChhd2FpdCBQcm9taXNlLmFsbCgoYXdhaXQgZ2V0SW50ZXJuYWxJbnN0YW5jZUNoaWxkcmVuKGluc3RhbmNlKSlcbiAgICAgICAgLmZpbHRlcihjaGlsZCA9PiAhKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZCkpXG4gICAgICAgIC5tYXAoY2FwdHVyZSkpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgY29uc3QgcmV0ID0ge1xuICAgICAgICB1aWQ6IGluc3RhbmNlLl91aWQsXG4gICAgICAgIGlkOiBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcmVuZGVyS2V5OiAoMCwgdXRpbF8xLmdldFJlbmRlcktleSkoaW5zdGFuY2UuJHZub2RlID8gaW5zdGFuY2UuJHZub2RlLmtleSA6IG51bGwpLFxuICAgICAgICBpbmFjdGl2ZTogISFpbnN0YW5jZS5faW5hY3RpdmUsXG4gICAgICAgIGlzRnJhZ21lbnQ6ICEhaW5zdGFuY2UuX2lzRnJhZ21lbnQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBoYXNDaGlsZHJlbjogISFjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICBtZXRhOiB7fSxcbiAgICB9O1xuICAgIGlmIChpbnN0YW5jZS5fdm5vZGUgJiYgaW5zdGFuY2UuX3Zub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IHZub2RlQ2hpbGRyZW4gPSBhd2FpdCBQcm9taXNlLmFsbChmbGF0dGVuKGluc3RhbmNlLl92bm9kZS5jaGlsZHJlbi5tYXAoY2FwdHVyZUNoaWxkKSkpO1xuICAgICAgICByZXQuY2hpbGRyZW4gPSByZXQuY2hpbGRyZW4uY29uY2F0KGZsYXR0ZW4odm5vZGVDaGlsZHJlbikuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgcmV0Lmhhc0NoaWxkcmVuID0gISFyZXQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH1cbiAgICAvLyBlbnN1cmUgY29ycmVjdCBvcmRlcmluZ1xuICAgIGNvbnN0IHJvb3RFbGVtZW50cyA9ICgwLCBlbF8xLmdldFJvb3RFbGVtZW50c0Zyb21Db21wb25lbnRJbnN0YW5jZSkoaW5zdGFuY2UpO1xuICAgIGNvbnN0IGZpcnN0RWxlbWVudCA9IHJvb3RFbGVtZW50c1swXTtcbiAgICBpZiAoZmlyc3RFbGVtZW50ID09PSBudWxsIHx8IGZpcnN0RWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmlyc3RFbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSBpbnN0YW5jZS4kcGFyZW50O1xuICAgICAgICBjb25zdCBwYXJlbnRSb290RWxlbWVudHMgPSBwYXJlbnRJbnN0YW5jZSA/ICgwLCBlbF8xLmdldFJvb3RFbGVtZW50c0Zyb21Db21wb25lbnRJbnN0YW5jZSkocGFyZW50SW5zdGFuY2UpIDogW107XG4gICAgICAgIGxldCBlbCA9IGZpcnN0RWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5kZXhMaXN0ID0gW107XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGluZGV4TGlzdC5wdXNoKEFycmF5LmZyb20oZWwucGFyZW50RWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKGVsKSk7XG4gICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH0gd2hpbGUgKGVsLnBhcmVudEVsZW1lbnQgJiYgcGFyZW50Um9vdEVsZW1lbnRzLmxlbmd0aCAmJiAhcGFyZW50Um9vdEVsZW1lbnRzLmluY2x1ZGVzKGVsKSk7XG4gICAgICAgIHJldC5kb21PcmRlciA9IGluZGV4TGlzdC5yZXZlcnNlKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXQuZG9tT3JkZXIgPSBbLTFdO1xuICAgIH1cbiAgICAvLyBjaGVjayBpZiBpbnN0YW5jZSBpcyBhdmFpbGFibGUgaW4gY29uc29sZVxuICAgIGNvbnN0IGNvbnNvbGVJZCA9IGNvbnNvbGVCb3VuZEluc3RhbmNlcy5pbmRleE9mKGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fKTtcbiAgICByZXQuY29uc29sZUlkID0gY29uc29sZUlkID4gLTEgPyAnJHZtJyArIGNvbnNvbGVJZCA6IG51bGw7XG4gICAgLy8gY2hlY2sgcm91dGVyIHZpZXdcbiAgICBjb25zdCBpc1JvdXRlclZpZXcyID0gKF9lID0gKF9kID0gaW5zdGFuY2UuJHZub2RlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZGF0YSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLnJvdXRlclZpZXc7XG4gICAgaWYgKGluc3RhbmNlLl9yb3V0ZXJWaWV3IHx8IGlzUm91dGVyVmlldzIpIHtcbiAgICAgICAgcmV0LmlzUm91dGVyVmlldyA9IHRydWU7XG4gICAgICAgIGlmICghaW5zdGFuY2UuX2luYWN0aXZlICYmIGluc3RhbmNlLiRyb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGluc3RhbmNlLiRyb3V0ZS5tYXRjaGVkO1xuICAgICAgICAgICAgY29uc3QgZGVwdGggPSBpc1JvdXRlclZpZXcyXG4gICAgICAgICAgICAgICAgPyBpbnN0YW5jZS4kdm5vZGUuZGF0YS5yb3V0ZXJWaWV3RGVwdGhcbiAgICAgICAgICAgICAgICA6IGluc3RhbmNlLl9yb3V0ZXJWaWV3LmRlcHRoO1xuICAgICAgICAgICAgcmV0Lm1ldGEubWF0Y2hlZFJvdXRlU2VnbWVudCA9XG4gICAgICAgICAgICAgICAgbWF0Y2hlZCAmJlxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkW2RlcHRoXSAmJlxuICAgICAgICAgICAgICAgICAgICAoaXNSb3V0ZXJWaWV3MiA/IG1hdGNoZWRbZGVwdGhdLnBhdGggOiBtYXRjaGVkW2RlcHRoXS5oYW5kbGVyLnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldC50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IGByb3V0ZXItdmlldyR7cmV0Lm1ldGEubWF0Y2hlZFJvdXRlU2VnbWVudCA/IGA6ICR7cmV0Lm1ldGEubWF0Y2hlZFJvdXRlU2VnbWVudH1gIDogJyd9YCxcbiAgICAgICAgICAgIHRleHRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IDB4ZmY4MzQ0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFwaS52aXNpdENvbXBvbmVudFRyZWUoaW5zdGFuY2UsIHJldCwgZmlsdGVyLCAoX2YgPSBhcHBSZWNvcmQgPT09IG51bGwgfHwgYXBwUmVjb3JkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhcHBSZWNvcmQub3B0aW9ucykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmFwcCk7XG59XG4vKipcbiAqIE1hcmsgYW4gaW5zdGFuY2UgYXMgY2FwdHVyZWQgYW5kIHN0b3JlIGl0IGluIHRoZSBpbnN0YW5jZSBtYXAuXG4gKlxuICogQHBhcmFtIHtWdWV9IGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIG1hcmsoaW5zdGFuY2UpIHtcbiAgICBjb25zdCByZWZJZCA9IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgIGlmICghZXhwb3J0cy5pbnN0YW5jZU1hcC5oYXMocmVmSWQpKSB7XG4gICAgICAgIGV4cG9ydHMuaW5zdGFuY2VNYXAuc2V0KHJlZklkLCBpbnN0YW5jZSk7XG4gICAgICAgIGFwcFJlY29yZC5pbnN0YW5jZU1hcC5zZXQocmVmSWQsIGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2UuJG9uKCdob29rOmJlZm9yZURlc3Ryb3knLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBvcnRzLmluc3RhbmNlTWFwLmRlbGV0ZShyZWZJZCk7XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgcGVyZl9qc18xLmFwcGx5UGVyZkhvb2tzKShhcGksIGluc3RhbmNlLCBhcHBSZWNvcmQub3B0aW9ucy5hcHApO1xuICAgICAgICAoMCwgdXBkYXRlX3RyYWNraW5nX2pzXzEuYXBwbHlUcmFja2luZ1VwZGF0ZUhvb2spKGFwaSwgaW5zdGFuY2UpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbmFsKGlkLCB2bm9kZSkge1xuICAgIGNvbnN0IHJlZklkID0gdm5vZGUuZm5Db250ZXh0Ll9fVlVFX0RFVlRPT0xTX1VJRF9fO1xuICAgIGlmICghZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuaGFzKHJlZklkKSkge1xuICAgICAgICBleHBvcnRzLmZ1bmN0aW9uYWxWbm9kZU1hcC5zZXQocmVmSWQsIHt9KTtcbiAgICAgICAgdm5vZGUuZm5Db250ZXh0LiRvbignaG9vazpiZWZvcmVEZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwb3J0cy5mdW5jdGlvbmFsVm5vZGVNYXAuZGVsZXRlKHJlZklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4cG9ydHMuZnVuY3Rpb25hbFZub2RlTWFwLmdldChyZWZJZClbaWRdID0gdm5vZGU7XG4gICAgYXBwUmVjb3JkLmluc3RhbmNlTWFwLnNldChpZCwge1xuICAgICAgICBfX1ZVRV9ERVZUT09MU19VSURfXzogaWQsXG4gICAgICAgIF9fVlVFX0RFVlRPT0xTX0ZVTkNUSU9OQUxfTEVHQUNZX186IHRydWUsXG4gICAgICAgIHZub2RlLFxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJlZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18059\n");
|
|
303
|
+
|
|
304
|
+
/***/ }),
|
|
305
|
+
|
|
306
|
+
/***/ 44615:
|
|
307
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
308
|
+
|
|
309
|
+
"use strict";
|
|
310
|
+
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.applyTrackingUpdateHook = exports.initUpdateTracking = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst throttle_1 = __importDefault(__webpack_require__(12436));\n\nconst util_js_1 = __webpack_require__(95136);\n\nfunction initUpdateTracking(api, Vue) {\n // Global mixin\n Vue.mixin({\n beforeCreate() {\n applyTrackingUpdateHook(api, this);\n }\n\n });\n}\n\nexports.initUpdateTracking = initUpdateTracking;\nconst COMPONENT_HOOKS = ['created', 'updated'];\n\nfunction applyTrackingUpdateHook(api, vm) {\n if (vm.$options.$_devtoolsUpdateTrackingHooks) return;\n vm.$options.$_devtoolsUpdateTrackingHooks = true;\n const handler = (0, throttle_1.default)(async function () {\n if (shared_utils_1.SharedData.trackUpdates) {\n api.ctx.hook.emit(shared_utils_1.HookEvents.TRACK_UPDATE, (0, util_js_1.getUniqueId)(this), api.ctx);\n const parents = await api.walkComponentParents(this);\n\n for (const parent of parents) {\n api.ctx.hook.emit(shared_utils_1.HookEvents.TRACK_UPDATE, (0, util_js_1.getUniqueId)(parent), api.ctx);\n }\n }\n\n if (shared_utils_1.SharedData.flashUpdates) {\n api.ctx.hook.emit(shared_utils_1.HookEvents.FLASH_UPDATE, this, api.backend);\n }\n }, 100);\n\n for (const hook of COMPONENT_HOOKS) {\n const currentValue = vm.$options[hook];\n\n if (Array.isArray(currentValue)) {\n vm.$options[hook] = [handler, ...currentValue];\n } else if (typeof currentValue === 'function') {\n vm.$options[hook] = [handler, currentValue];\n } else {\n vm.$options[hook] = [handler];\n }\n }\n}\n\nexports.applyTrackingUpdateHook = applyTrackingUpdateHook;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ2MTUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUVBLFNBQWdCLGtCQUFoQixDQUFvQyxHQUFwQyxFQUFzRCxHQUF0RCxFQUF5RDtBQUN2RDtBQUNBLEtBQUcsQ0FBQyxLQUFKLENBQVU7QUFDUixnQkFBWTtBQUNWLDZCQUF1QixDQUFDLEdBQUQsRUFBTSxJQUFOLENBQXZCO0FBQ0Q7O0FBSE8sR0FBVjtBQUtEOztBQVBEO0FBU0EsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsU0FEc0IsRUFFdEIsU0FGc0IsQ0FBeEI7O0FBS0EsU0FBZ0IsdUJBQWhCLENBQXlDLEdBQXpDLEVBQTJELEVBQTNELEVBQTZEO0FBQzNELE1BQUksRUFBRSxDQUFDLFFBQUgsQ0FBWSw2QkFBaEIsRUFBK0M7QUFDL0MsSUFBRSxDQUFDLFFBQUgsQ0FBWSw2QkFBWixHQUE0QyxJQUE1QztBQUVBLFFBQU0sT0FBTyxHQUFHLHdCQUFTLGtCQUFLO0FBQzVCLFFBQUksMEJBQVcsWUFBZixFQUE2QjtBQUMzQixTQUFHLENBQUMsR0FBSixDQUFRLElBQVIsQ0FBYSxJQUFiLENBQWtCLDBCQUFXLFlBQTdCLEVBQTJDLDJCQUFZLElBQVosQ0FBM0MsRUFBOEQsR0FBRyxDQUFDLEdBQWxFO0FBRUEsWUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsb0JBQUosQ0FBeUIsSUFBekIsQ0FBdEI7O0FBQ0EsV0FBSyxNQUFNLE1BQVgsSUFBcUIsT0FBckIsRUFBOEI7QUFDNUIsV0FBRyxDQUFDLEdBQUosQ0FBUSxJQUFSLENBQWEsSUFBYixDQUFrQiwwQkFBVyxZQUE3QixFQUEyQywyQkFBWSxNQUFaLENBQTNDLEVBQWdFLEdBQUcsQ0FBQyxHQUFwRTtBQUNEO0FBQ0Y7O0FBRUQsUUFBSSwwQkFBVyxZQUFmLEVBQTZCO0FBQzNCLFNBQUcsQ0FBQyxHQUFKLENBQVEsSUFBUixDQUFhLElBQWIsQ0FBa0IsMEJBQVcsWUFBN0IsRUFBMkMsSUFBM0MsRUFBaUQsR0FBRyxDQUFDLE9BQXJEO0FBQ0Q7QUFDRixHQWJlLEVBYWIsR0FiYSxDQUFoQjs7QUFjQSxPQUFLLE1BQU0sSUFBWCxJQUFtQixlQUFuQixFQUFvQztBQUNsQyxVQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsUUFBSCxDQUFZLElBQVosQ0FBckI7O0FBQ0EsUUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLFlBQWQsQ0FBSixFQUFpQztBQUMvQixRQUFFLENBQUMsUUFBSCxDQUFZLElBQVosSUFBb0IsQ0FBQyxPQUFELEVBQVUsR0FBRyxZQUFiLENBQXBCO0FBQ0QsS0FGRCxNQUVPLElBQUksT0FBTyxZQUFQLEtBQXdCLFVBQTVCLEVBQXdDO0FBQzdDLFFBQUUsQ0FBQyxRQUFILENBQVksSUFBWixJQUFvQixDQUFDLE9BQUQsRUFBVSxZQUFWLENBQXBCO0FBQ0QsS0FGTSxNQUVBO0FBQ0wsUUFBRSxDQUFDLFFBQUgsQ0FBWSxJQUFaLElBQW9CLENBQUMsT0FBRCxDQUFwQjtBQUNEO0FBQ0Y7QUFDRjs7QUE1QkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uLy4uL3NyYy9jb21wb25lbnRzL3VwZGF0ZS10cmFja2luZy50cz85MzIzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hcHBseVRyYWNraW5nVXBkYXRlSG9vayA9IGV4cG9ydHMuaW5pdFVwZGF0ZVRyYWNraW5nID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCB0aHJvdHRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJsb2Rhc2gvdGhyb3R0bGVcIikpO1xuY29uc3QgdXRpbF9qc18xID0gcmVxdWlyZShcIi4vdXRpbC5qc1wiKTtcbmZ1bmN0aW9uIGluaXRVcGRhdGVUcmFja2luZyhhcGksIFZ1ZSkge1xuICAgIC8vIEdsb2JhbCBtaXhpblxuICAgIFZ1ZS5taXhpbih7XG4gICAgICAgIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICAgICAgICAgIGFwcGx5VHJhY2tpbmdVcGRhdGVIb29rKGFwaSwgdGhpcyk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5leHBvcnRzLmluaXRVcGRhdGVUcmFja2luZyA9IGluaXRVcGRhdGVUcmFja2luZztcbmNvbnN0IENPTVBPTkVOVF9IT09LUyA9IFtcbiAgICAnY3JlYXRlZCcsXG4gICAgJ3VwZGF0ZWQnLFxuXTtcbmZ1bmN0aW9uIGFwcGx5VHJhY2tpbmdVcGRhdGVIb29rKGFwaSwgdm0pIHtcbiAgICBpZiAodm0uJG9wdGlvbnMuJF9kZXZ0b29sc1VwZGF0ZVRyYWNraW5nSG9va3MpXG4gICAgICAgIHJldHVybjtcbiAgICB2bS4kb3B0aW9ucy4kX2RldnRvb2xzVXBkYXRlVHJhY2tpbmdIb29rcyA9IHRydWU7XG4gICAgY29uc3QgaGFuZGxlciA9ICgwLCB0aHJvdHRsZV8xLmRlZmF1bHQpKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEudHJhY2tVcGRhdGVzKSB7XG4gICAgICAgICAgICBhcGkuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRSQUNLX1VQREFURSwgKDAsIHV0aWxfanNfMS5nZXRVbmlxdWVJZCkodGhpcyksIGFwaS5jdHgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IGF3YWl0IGFwaS53YWxrQ29tcG9uZW50UGFyZW50cyh0aGlzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50IG9mIHBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICBhcGkuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLlRSQUNLX1VQREFURSwgKDAsIHV0aWxfanNfMS5nZXRVbmlxdWVJZCkocGFyZW50KSwgYXBpLmN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZmxhc2hVcGRhdGVzKSB7XG4gICAgICAgICAgICBhcGkuY3R4Lmhvb2suZW1pdChzaGFyZWRfdXRpbHNfMS5Ib29rRXZlbnRzLkZMQVNIX1VQREFURSwgdGhpcywgYXBpLmJhY2tlbmQpO1xuICAgICAgICB9XG4gICAgfSwgMTAwKTtcbiAgICBmb3IgKGNvbnN0IGhvb2sgb2YgQ09NUE9ORU5UX0hPT0tTKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZtLiRvcHRpb25zW2hvb2tdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICB2bS4kb3B0aW9uc1tob29rXSA9IFtoYW5kbGVyLCAuLi5jdXJyZW50VmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZtLiRvcHRpb25zW2hvb2tdID0gW2hhbmRsZXIsIGN1cnJlbnRWYWx1ZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bS4kb3B0aW9uc1tob29rXSA9IFtoYW5kbGVyXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuYXBwbHlUcmFja2luZ1VwZGF0ZUhvb2sgPSBhcHBseVRyYWNraW5nVXBkYXRlSG9vaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVwZGF0ZS10cmFja2luZy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///44615\n");
|
|
287
311
|
|
|
288
312
|
/***/ }),
|
|
289
313
|
|
|
@@ -307,7 +331,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
307
331
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
308
332
|
|
|
309
333
|
"use strict";
|
|
310
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.backend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst data_1 = __webpack_require__(4465);\n\nconst el_1 = __webpack_require__(66351);\n\nconst tree_1 = __webpack_require__(18059);\n\nconst util_1 = __webpack_require__(95136);\n\nconst events_1 = __webpack_require__(16935);\n\nconst plugin_1 = __webpack_require__(7725);\n\nexports.backend = (0, app_backend_api_1.defineBackend)({\n frameworkVersion: 2,\n features: [app_backend_api_1.BuiltinBackendFeature.FLUSH],\n\n setup(api) {\n api.on.getAppRecordName(payload => {\n if (payload.app.name) {\n payload.name = payload.app.name;\n } else if (payload.app.$options.name) {\n payload.name = payload.app.$options.name;\n }\n });\n api.on.getAppRootInstance(payload => {\n payload.root = payload.app;\n });\n api.on.walkComponentTree(async (payload, ctx) => {\n payload.componentTreeData = await (0, tree_1.walkTree)(payload.componentInstance, payload.filter, api, ctx);\n });\n api.on.walkComponentParents((payload, ctx) => {\n payload.parentInstances = (0, tree_1.getComponentParents)(payload.componentInstance, api, ctx);\n });\n api.on.inspectComponent(payload => {\n injectToUtils();\n payload.instanceData = (0, data_1.getInstanceDetails)(payload.componentInstance);\n });\n api.on.getComponentBounds(payload => {\n payload.bounds = (0, el_1.getInstanceOrVnodeRect)(payload.componentInstance);\n });\n api.on.getComponentName(payload => {\n const instance = payload.componentInstance;\n payload.name = instance.fnContext ? (0, shared_utils_1.getComponentName)(instance.fnOptions) : (0, util_1.getInstanceName)(instance);\n });\n api.on.getElementComponent(payload => {\n payload.componentInstance = (0, el_1.findRelatedComponent)(payload.element);\n });\n api.on.editComponentState(payload => {\n (0, data_1.editState)(payload, api.stateEditor);\n });\n api.on.getComponentRootElements(payload => {\n payload.rootElements = (0, el_1.getRootElementsFromComponentInstance)(payload.componentInstance);\n });\n api.on.getComponentDevtoolsOptions(payload => {\n payload.options = payload.componentInstance.$options.devtools;\n });\n api.on.getComponentRenderCode(payload => {\n payload.code = payload.componentInstance.$options.render.toString();\n });\n api.on.getComponentInstances(() => {\n console.warn('on.getComponentInstances is not implemented for Vue 2');\n });\n },\n\n setupApp(api, appRecord) {\n const {\n Vue\n } = appRecord.options.meta;\n const app = appRecord.options.app; // State editor overrides\n\n api.stateEditor.createDefaultSetCallback = state => {\n return (obj, field, value) => {\n if (state.remove || state.newKey) Vue.delete(obj, field);\n if (!state.remove) Vue.set(obj, state.newKey || field, value);\n };\n }; // Utils\n\n\n injectToUtils();\n (0, events_1.wrapVueForEvents)(app, Vue, api.ctx); // Plugin\n\n (0, plugin_1.setupPlugin)(api, app, Vue);\n }\n\n}); // @TODO refactor\n\nfunction injectToUtils() {\n shared_utils_1.backendInjections.getCustomInstanceDetails = data_1.getCustomInstanceDetails;\n shared_utils_1.backendInjections.instanceMap = tree_1.instanceMap;\n\n shared_utils_1.backendInjections.isVueInstance = val => val._isVue;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFrQix3QkFBbEIsR0FBNkMsK0JBQTdDO0FBQ0EsbUNBQWtCLFdBQWxCLEdBQWdDLGtCQUFoQzs7QUFDQSxtQ0FBa0IsYUFBbEIsR0FBa0MsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUE3QztBQUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvaW5kZXgudHM/NmYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmFja2VuZCA9IHZvaWQgMDtcbmNvbnN0IGFwcF9iYWNrZW5kX2FwaV8xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvYXBwLWJhY2tlbmQtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBkYXRhXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL2RhdGFcIik7XG5jb25zdCBlbF8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9lbFwiKTtcbmNvbnN0IHRyZWVfMSA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvdHJlZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvdXRpbFwiKTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcIi4vZXZlbnRzXCIpO1xuY29uc3QgcGx1Z2luXzEgPSByZXF1aXJlKFwiLi9wbHVnaW5cIik7XG5leHBvcnRzLmJhY2tlbmQgPSAoMCwgYXBwX2JhY2tlbmRfYXBpXzEuZGVmaW5lQmFja2VuZCkoe1xuICAgIGZyYW1ld29ya1ZlcnNpb246IDIsXG4gICAgZmVhdHVyZXM6IFtcbiAgICAgICAgYXBwX2JhY2tlbmRfYXBpXzEuQnVpbHRpbkJhY2tlbmRGZWF0dXJlLkZMVVNILFxuICAgIF0sXG4gICAgc2V0dXAoYXBpKSB7XG4gICAgICAgIGFwaS5vbi5nZXRBcHBSZWNvcmROYW1lKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheWxvYWQuYXBwLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLm5hbWUgPSBwYXlsb2FkLmFwcC5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocGF5bG9hZC5hcHAuJG9wdGlvbnMubmFtZSkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQubmFtZSA9IHBheWxvYWQuYXBwLiRvcHRpb25zLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0QXBwUm9vdEluc3RhbmNlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5yb290ID0gcGF5bG9hZC5hcHA7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24ud2Fsa0NvbXBvbmVudFRyZWUoYXN5bmMgKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5jb21wb25lbnRUcmVlRGF0YSA9IGF3YWl0ICgwLCB0cmVlXzEud2Fsa1RyZWUpKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UsIHBheWxvYWQuZmlsdGVyLCBhcGksIGN0eCk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24ud2Fsa0NvbXBvbmVudFBhcmVudHMoKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5wYXJlbnRJbnN0YW5jZXMgPSAoMCwgdHJlZV8xLmdldENvbXBvbmVudFBhcmVudHMpKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UsIGFwaSwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5pbnNwZWN0Q29tcG9uZW50KHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgaW5qZWN0VG9VdGlscygpO1xuICAgICAgICAgICAgcGF5bG9hZC5pbnN0YW5jZURhdGEgPSAoMCwgZGF0YV8xLmdldEluc3RhbmNlRGV0YWlscykocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50Qm91bmRzKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5ib3VuZHMgPSAoMCwgZWxfMS5nZXRJbnN0YW5jZU9yVm5vZGVSZWN0KShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnROYW1lKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAgICAgcGF5bG9hZC5uYW1lID0gaW5zdGFuY2UuZm5Db250ZXh0ID8gKDAsIHNoYXJlZF91dGlsc18xLmdldENvbXBvbmVudE5hbWUpKGluc3RhbmNlLmZuT3B0aW9ucykgOiAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldEVsZW1lbnRDb21wb25lbnQocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlID0gKDAsIGVsXzEuZmluZFJlbGF0ZWRDb21wb25lbnQpKHBheWxvYWQuZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZWRpdENvbXBvbmVudFN0YXRlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgKDAsIGRhdGFfMS5lZGl0U3RhdGUpKHBheWxvYWQsIGFwaS5zdGF0ZUVkaXRvcik7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5yb290RWxlbWVudHMgPSAoMCwgZWxfMS5nZXRSb290RWxlbWVudHNGcm9tQ29tcG9uZW50SW5zdGFuY2UpKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudERldnRvb2xzT3B0aW9ucyhwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQub3B0aW9ucyA9IHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UuJG9wdGlvbnMuZGV2dG9vbHM7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50UmVuZGVyQ29kZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQuY29kZSA9IHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UuJG9wdGlvbnMucmVuZGVyLnRvU3RyaW5nKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50SW5zdGFuY2VzKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybignb24uZ2V0Q29tcG9uZW50SW5zdGFuY2VzIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgVnVlIDInKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBzZXR1cEFwcChhcGksIGFwcFJlY29yZCkge1xuICAgICAgICBjb25zdCB7IFZ1ZSB9ID0gYXBwUmVjb3JkLm9wdGlvbnMubWV0YTtcbiAgICAgICAgY29uc3QgYXBwID0gYXBwUmVjb3JkLm9wdGlvbnMuYXBwO1xuICAgICAgICAvLyBTdGF0ZSBlZGl0b3Igb3ZlcnJpZGVzXG4gICAgICAgIGFwaS5zdGF0ZUVkaXRvci5jcmVhdGVEZWZhdWx0U2V0Q2FsbGJhY2sgPSBzdGF0ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKG9iaiwgZmllbGQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlbW92ZSB8fCBzdGF0ZS5uZXdLZXkpXG4gICAgICAgICAgICAgICAgICAgIFZ1ZS5kZWxldGUob2JqLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5yZW1vdmUpXG4gICAgICAgICAgICAgICAgICAgIFZ1ZS5zZXQob2JqLCBzdGF0ZS5uZXdLZXkgfHwgZmllbGQsIHZhbHVlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIC8vIFV0aWxzXG4gICAgICAgIGluamVjdFRvVXRpbHMoKTtcbiAgICAgICAgKDAsIGV2ZW50c18xLndyYXBWdWVGb3JFdmVudHMpKGFwcCwgVnVlLCBhcGkuY3R4KTtcbiAgICAgICAgLy8gUGx1Z2luXG4gICAgICAgICgwLCBwbHVnaW5fMS5zZXR1cFBsdWdpbikoYXBpLCBhcHAsIFZ1ZSk7XG4gICAgfSxcbn0pO1xuLy8gQFRPRE8gcmVmYWN0b3JcbmZ1bmN0aW9uIGluamVjdFRvVXRpbHMoKSB7XG4gICAgc2hhcmVkX3V0aWxzXzEuYmFja2VuZEluamVjdGlvbnMuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzID0gZGF0YV8xLmdldEN1c3RvbUluc3RhbmNlRGV0YWlscztcbiAgICBzaGFyZWRfdXRpbHNfMS5iYWNrZW5kSW5qZWN0aW9ucy5pbnN0YW5jZU1hcCA9IHRyZWVfMS5pbnN0YW5jZU1hcDtcbiAgICBzaGFyZWRfdXRpbHNfMS5iYWNrZW5kSW5qZWN0aW9ucy5pc1Z1ZUluc3RhbmNlID0gdmFsID0+IHZhbC5faXNWdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///88690\n");
|
|
334
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.backend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst data_1 = __webpack_require__(4465);\n\nconst el_1 = __webpack_require__(66351);\n\nconst perf_js_1 = __webpack_require__(82639);\n\nconst tree_1 = __webpack_require__(18059);\n\nconst update_tracking_js_1 = __webpack_require__(44615);\n\nconst util_1 = __webpack_require__(95136);\n\nconst events_1 = __webpack_require__(16935);\n\nconst plugin_1 = __webpack_require__(7725);\n\nexports.backend = (0, app_backend_api_1.defineBackend)({\n frameworkVersion: 2,\n features: [app_backend_api_1.BuiltinBackendFeature.FLUSH],\n\n setup(api) {\n api.on.getAppRecordName(payload => {\n if (payload.app.name) {\n payload.name = payload.app.name;\n } else if (payload.app.$options.name) {\n payload.name = payload.app.$options.name;\n }\n });\n api.on.getAppRootInstance(payload => {\n payload.root = payload.app;\n });\n api.on.walkComponentTree(async (payload, ctx) => {\n payload.componentTreeData = await (0, tree_1.walkTree)(payload.componentInstance, payload.filter, api, ctx);\n });\n api.on.walkComponentParents((payload, ctx) => {\n payload.parentInstances = (0, tree_1.getComponentParents)(payload.componentInstance, api, ctx);\n });\n api.on.inspectComponent(payload => {\n injectToUtils();\n payload.instanceData = (0, data_1.getInstanceDetails)(payload.componentInstance);\n });\n api.on.getComponentBounds(payload => {\n payload.bounds = (0, el_1.getInstanceOrVnodeRect)(payload.componentInstance);\n });\n api.on.getComponentName(payload => {\n const instance = payload.componentInstance;\n payload.name = instance.fnContext ? (0, shared_utils_1.getComponentName)(instance.fnOptions) : (0, util_1.getInstanceName)(instance);\n });\n api.on.getElementComponent(payload => {\n payload.componentInstance = (0, el_1.findRelatedComponent)(payload.element);\n });\n api.on.editComponentState(payload => {\n (0, data_1.editState)(payload, api.stateEditor);\n });\n api.on.getComponentRootElements(payload => {\n payload.rootElements = (0, el_1.getRootElementsFromComponentInstance)(payload.componentInstance);\n });\n api.on.getComponentDevtoolsOptions(payload => {\n payload.options = payload.componentInstance.$options.devtools;\n });\n api.on.getComponentRenderCode(payload => {\n payload.code = payload.componentInstance.$options.render.toString();\n });\n api.on.getComponentInstances(() => {\n console.warn('on.getComponentInstances is not implemented for Vue 2');\n });\n },\n\n setupApp(api, appRecord) {\n const {\n Vue\n } = appRecord.options.meta;\n const app = appRecord.options.app; // State editor overrides\n\n api.stateEditor.createDefaultSetCallback = state => {\n return (obj, field, value) => {\n if (state.remove || state.newKey) Vue.delete(obj, field);\n if (!state.remove) Vue.set(obj, state.newKey || field, value);\n };\n }; // Utils\n\n\n injectToUtils();\n (0, events_1.wrapVueForEvents)(app, Vue, api.ctx); // Plugin\n\n (0, plugin_1.setupPlugin)(api, app, Vue); // Perf\n\n (0, perf_js_1.initPerf)(api, app, Vue); // Update tracking\n\n (0, update_tracking_js_1.initUpdateTracking)(api, Vue);\n }\n\n}); // @TODO refactor\n\nfunction injectToUtils() {\n shared_utils_1.backendInjections.getCustomInstanceDetails = data_1.getCustomInstanceDetails;\n\n shared_utils_1.backendInjections.getCustomObjectDetails = () => undefined;\n\n shared_utils_1.backendInjections.instanceMap = tree_1.instanceMap;\n\n shared_utils_1.backendInjections.isVueInstance = val => val._isVue;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QW5CLEVBcEJzQixDQXFCdEI7O0FBQ0EsaURBQW1CLEdBQW5CLEVBQXdCLEdBQXhCO0FBQ0Q7O0FBeEZrQyxDQUFkLENBQVYsQyxDQTJGYjs7QUFDQSxTQUFTLGFBQVQsR0FBc0I7QUFDcEIsbUNBQWtCLHdCQUFsQixHQUE2QywrQkFBN0M7O0FBQ0EsbUNBQWtCLHNCQUFsQixHQUEyQyxNQUFNLFNBQWpEOztBQUNBLG1DQUFrQixXQUFsQixHQUFnQyxrQkFBaEM7O0FBQ0EsbUNBQWtCLGFBQWxCLEdBQWtDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBN0M7QUFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2luZGV4LnRzPzZmMzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJhY2tlbmQgPSB2b2lkIDA7XG5jb25zdCBhcHBfYmFja2VuZF9hcGlfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL2FwcC1iYWNrZW5kLWFwaVwiKTtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgZGF0YV8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9kYXRhXCIpO1xuY29uc3QgZWxfMSA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvZWxcIik7XG5jb25zdCBwZXJmX2pzXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3BlcmYuanNcIik7XG5jb25zdCB0cmVlXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3RyZWVcIik7XG5jb25zdCB1cGRhdGVfdHJhY2tpbmdfanNfMSA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvdXBkYXRlLXRyYWNraW5nLmpzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy91dGlsXCIpO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiLi9ldmVudHNcIik7XG5jb25zdCBwbHVnaW5fMSA9IHJlcXVpcmUoXCIuL3BsdWdpblwiKTtcbmV4cG9ydHMuYmFja2VuZCA9ICgwLCBhcHBfYmFja2VuZF9hcGlfMS5kZWZpbmVCYWNrZW5kKSh7XG4gICAgZnJhbWV3b3JrVmVyc2lvbjogMixcbiAgICBmZWF0dXJlczogW1xuICAgICAgICBhcHBfYmFja2VuZF9hcGlfMS5CdWlsdGluQmFja2VuZEZlYXR1cmUuRkxVU0gsXG4gICAgXSxcbiAgICBzZXR1cChhcGkpIHtcbiAgICAgICAgYXBpLm9uLmdldEFwcFJlY29yZE5hbWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bG9hZC5hcHAubmFtZSkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQubmFtZSA9IHBheWxvYWQuYXBwLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYXlsb2FkLmFwcC4kb3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5uYW1lID0gcGF5bG9hZC5hcHAuJG9wdGlvbnMubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRBcHBSb290SW5zdGFuY2UocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLnJvb3QgPSBwYXlsb2FkLmFwcDtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi53YWxrQ29tcG9uZW50VHJlZShhc3luYyAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLmNvbXBvbmVudFRyZWVEYXRhID0gYXdhaXQgKDAsIHRyZWVfMS53YWxrVHJlZSkocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSwgcGF5bG9hZC5maWx0ZXIsIGFwaSwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi53YWxrQ29tcG9uZW50UGFyZW50cygocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLnBhcmVudEluc3RhbmNlcyA9ICgwLCB0cmVlXzEuZ2V0Q29tcG9uZW50UGFyZW50cykocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSwgYXBpLCBjdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmluc3BlY3RDb21wb25lbnQocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBpbmplY3RUb1V0aWxzKCk7XG4gICAgICAgICAgICBwYXlsb2FkLmluc3RhbmNlRGF0YSA9ICgwLCBkYXRhXzEuZ2V0SW5zdGFuY2VEZXRhaWxzKShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnRCb3VuZHMocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLmJvdW5kcyA9ICgwLCBlbF8xLmdldEluc3RhbmNlT3JWbm9kZVJlY3QpKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudE5hbWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgICAgICBwYXlsb2FkLm5hbWUgPSBpbnN0YW5jZS5mbkNvbnRleHQgPyAoMCwgc2hhcmVkX3V0aWxzXzEuZ2V0Q29tcG9uZW50TmFtZSkoaW5zdGFuY2UuZm5PcHRpb25zKSA6ICgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0RWxlbWVudENvbXBvbmVudChwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UgPSAoMCwgZWxfMS5maW5kUmVsYXRlZENvbXBvbmVudCkocGF5bG9hZC5lbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5lZGl0Q29tcG9uZW50U3RhdGUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAoMCwgZGF0YV8xLmVkaXRTdGF0ZSkocGF5bG9hZCwgYXBpLnN0YXRlRWRpdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnRSb290RWxlbWVudHMocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLnJvb3RFbGVtZW50cyA9ICgwLCBlbF8xLmdldFJvb3RFbGVtZW50c0Zyb21Db21wb25lbnRJbnN0YW5jZSkocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50RGV2dG9vbHNPcHRpb25zKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5vcHRpb25zID0gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZS4kb3B0aW9ucy5kZXZ0b29scztcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnRSZW5kZXJDb2RlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5jb2RlID0gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZS4kb3B0aW9ucy5yZW5kZXIudG9TdHJpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnRJbnN0YW5jZXMoKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdvbi5nZXRDb21wb25lbnRJbnN0YW5jZXMgaXMgbm90IGltcGxlbWVudGVkIGZvciBWdWUgMicpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHNldHVwQXBwKGFwaSwgYXBwUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHsgVnVlIH0gPSBhcHBSZWNvcmQub3B0aW9ucy5tZXRhO1xuICAgICAgICBjb25zdCBhcHAgPSBhcHBSZWNvcmQub3B0aW9ucy5hcHA7XG4gICAgICAgIC8vIFN0YXRlIGVkaXRvciBvdmVycmlkZXNcbiAgICAgICAgYXBpLnN0YXRlRWRpdG9yLmNyZWF0ZURlZmF1bHRTZXRDYWxsYmFjayA9IHN0YXRlID0+IHtcbiAgICAgICAgICAgIHJldHVybiAob2JqLCBmaWVsZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucmVtb3ZlIHx8IHN0YXRlLm5ld0tleSlcbiAgICAgICAgICAgICAgICAgICAgVnVlLmRlbGV0ZShvYmosIGZpZWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLnJlbW92ZSlcbiAgICAgICAgICAgICAgICAgICAgVnVlLnNldChvYmosIHN0YXRlLm5ld0tleSB8fCBmaWVsZCwgdmFsdWUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVXRpbHNcbiAgICAgICAgaW5qZWN0VG9VdGlscygpO1xuICAgICAgICAoMCwgZXZlbnRzXzEud3JhcFZ1ZUZvckV2ZW50cykoYXBwLCBWdWUsIGFwaS5jdHgpO1xuICAgICAgICAvLyBQbHVnaW5cbiAgICAgICAgKDAsIHBsdWdpbl8xLnNldHVwUGx1Z2luKShhcGksIGFwcCwgVnVlKTtcbiAgICAgICAgLy8gUGVyZlxuICAgICAgICAoMCwgcGVyZl9qc18xLmluaXRQZXJmKShhcGksIGFwcCwgVnVlKTtcbiAgICAgICAgLy8gVXBkYXRlIHRyYWNraW5nXG4gICAgICAgICgwLCB1cGRhdGVfdHJhY2tpbmdfanNfMS5pbml0VXBkYXRlVHJhY2tpbmcpKGFwaSwgVnVlKTtcbiAgICB9LFxufSk7XG4vLyBAVE9ETyByZWZhY3RvclxuZnVuY3Rpb24gaW5qZWN0VG9VdGlscygpIHtcbiAgICBzaGFyZWRfdXRpbHNfMS5iYWNrZW5kSW5qZWN0aW9ucy5nZXRDdXN0b21JbnN0YW5jZURldGFpbHMgPSBkYXRhXzEuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzO1xuICAgIHNoYXJlZF91dGlsc18xLmJhY2tlbmRJbmplY3Rpb25zLmdldEN1c3RvbU9iamVjdERldGFpbHMgPSAoKSA9PiB1bmRlZmluZWQ7XG4gICAgc2hhcmVkX3V0aWxzXzEuYmFja2VuZEluamVjdGlvbnMuaW5zdGFuY2VNYXAgPSB0cmVlXzEuaW5zdGFuY2VNYXA7XG4gICAgc2hhcmVkX3V0aWxzXzEuYmFja2VuZEluamVjdGlvbnMuaXNWdWVJbnN0YW5jZSA9IHZhbCA9PiB2YWwuX2lzVnVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///88690\n");
|
|
311
335
|
|
|
312
336
|
/***/ }),
|
|
313
337
|
|
|
@@ -315,7 +339,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
315
339
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
316
340
|
|
|
317
341
|
"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 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 if (router.options.routes) {\n payload.rootNodes = router.options.routes.map(route => formatRouteNode(router, route, '', payload.filter)).filter(Boolean);\n } else {\n console.warn(`[Vue Devtools] No routes found in router`, router.options);\n }\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.split(VUEX_MODULE_PATH_SEPARATOR).slice(0, -1), ...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 var _a;\n\n return {\n id: 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((_a = module._children) !== null && _a !== void 0 ? _a : {}).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, _b;\n\n const storeState = {\n state: Object.keys((_a = module.context.state) !== null && _a !== void 0 ? _a : {}).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((_b = module._rawModule.getters) !== null && _b !== void 0 ? _b : {});\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] = canThrow(() => 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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QSxTQUFPLE1BQVA7QUFDRDs7QUFFRCxTQUFTLGNBQVQsQ0FBeUIsU0FBekIsRUFBb0MsSUFBcEMsRUFBd0M7QUFDdEMsUUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUwsQ0FBVywwQkFBWCxFQUF1QyxNQUF2QyxDQUErQyxDQUFELElBQU8sQ0FBckQsQ0FBZDtBQUNBLFNBQU8sS0FBSyxDQUFDLE1BQU4sQ0FDTCxDQUFDLE1BQUQsRUFBUyxVQUFULEVBQXFCLENBQXJCLEtBQTBCO0FBQ3hCLFVBQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEtBQUssY0FBZixHQUFnQyxNQUFoQyxHQUF5QyxVQUExQyxDQUFwQjs7QUFDQSxRQUFJLENBQUMsS0FBTCxFQUFZO0FBQ1YsWUFBTSxJQUFJLEtBQUosQ0FBVSxtQkFBbUIsVUFBVSxlQUFlLElBQUksSUFBMUQsQ0FBTjtBQUNEOztBQUNELFdBQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFOLEdBQWUsQ0FBckIsR0FBeUIsS0FBekIsR0FBaUMsS0FBSyxDQUFDLFNBQTlDO0FBQ0QsR0FQSSxFQVFMLElBQUksS0FBSyxjQUFULEdBQTBCLFNBQTFCLEdBQXNDLFNBQVMsQ0FBQyxJQUFWLENBQWUsU0FSaEQsQ0FBUDtBQVVEOztBQUVELFNBQVMsUUFBVCxDQUFtQixFQUFuQixFQUFnQztBQUM5QixNQUFJO0FBQ0YsV0FBTyxFQUFFLEVBQVQ7QUFDRCxHQUZELENBRUUsT0FBTyxDQUFQLEVBQVU7QUFDVixXQUFPLENBQVA7QUFDRDtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvcGx1Z2luLnRzPzBjY2EiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNldHVwUGx1Z2luID0gdm9pZCAwO1xuY29uc3QgZGV2dG9vbHNfYXBpXzEgPSByZXF1aXJlKFwiQHZ1ZS9kZXZ0b29scy1hcGlcIik7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IGNsb25lX2RlZXBfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiY2xvbmUtZGVlcFwiKSk7XG5sZXQgYWN0aW9uSWQgPSAwO1xuZnVuY3Rpb24gc2V0dXBQbHVnaW4oYXBpLCBhcHAsIFZ1ZSkge1xuICAgIGNvbnN0IFJPVVRFUl9JTlNQRUNUT1JfSUQgPSAndnVlMi1yb3V0ZXItaW5zcGVjdG9yJztcbiAgICBjb25zdCBST1VURVJfQ0hBTkdFU19MQVlFUl9JRCA9ICd2dWUyLXJvdXRlci1jaGFuZ2VzJztcbiAgICBjb25zdCBWVUVYX0lOU1BFQ1RPUl9JRCA9ICd2dWUyLXZ1ZXgtaW5zcGVjdG9yJztcbiAgICBjb25zdCBWVUVYX01VVEFUSU9OU19JRCA9ICd2dWUyLXZ1ZXgtbXV0YXRpb25zJztcbiAgICBjb25zdCBWVUVYX0FDVElPTlNfSUQgPSAndnVlMi12dWV4LWFjdGlvbnMnO1xuICAgICgwLCBkZXZ0b29sc19hcGlfMS5zZXR1cERldnRvb2xzUGx1Z2luKSh7XG4gICAgICAgIGFwcCxcbiAgICAgICAgaWQ6ICdvcmcudnVlanMudnVlMi1pbnRlcm5hbCcsXG4gICAgICAgIGxhYmVsOiAnVnVlIDInLFxuICAgICAgICBob21lcGFnZTogJ2h0dHBzOi8vdnVlanMub3JnLycsXG4gICAgICAgIGxvZ286ICdodHRwczovL3Z1ZWpzLm9yZy9pbWFnZXMvaWNvbnMvZmF2aWNvbi05Nng5Ni5wbmcnLFxuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgICAgbGVnYWN5QWN0aW9uczoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTGVnYWN5IEFjdGlvbnMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRW5hYmxlIHRoaXMgZm9yIFZ1ZXggPCAzLjEuMCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sIGFwaSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgaG9vayA9IHNoYXJlZF91dGlsc18xLnRhcmdldC5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuICAgICAgICAvLyBWdWUgUm91dGVyXG4gICAgICAgIGlmIChhcHAuJHJvdXRlcikge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyID0gYXBwLiRyb3V0ZXI7XG4gICAgICAgICAgICAvLyBJbnNwZWN0b3JcbiAgICAgICAgICAgIGFwaS5hZGRJbnNwZWN0b3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBST1VURVJfSU5TUEVDVE9SX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnUm91dGVzJyxcbiAgICAgICAgICAgICAgICBpY29uOiAnYm9vaycsXG4gICAgICAgICAgICAgICAgdHJlZUZpbHRlclBsYWNlaG9sZGVyOiAnU2VhcmNoIHJvdXRlcycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5vbi5nZXRJbnNwZWN0b3JUcmVlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBST1VURVJfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZXIub3B0aW9ucy5yb3V0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gcm91dGVyLm9wdGlvbnMucm91dGVzLm1hcChyb3V0ZSA9PiBmb3JtYXRSb3V0ZU5vZGUocm91dGVyLCByb3V0ZSwgJycsIHBheWxvYWQuZmlsdGVyKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBbVnVlIERldnRvb2xzXSBObyByb3V0ZXMgZm91bmQgaW4gcm91dGVyYCwgcm91dGVyLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFJPVVRFUl9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSByb3V0ZXIubWF0Y2hlci5nZXRSb3V0ZXMoKS5maW5kKHIgPT4gZ2V0UGF0aElkKHIpID09PSBwYXlsb2FkLm5vZGVJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBmb3JtYXRSb3V0ZURhdGEocm91dGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVGltZWxpbmVcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdSb3V0ZXIgTmF2aWdhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAweDQwYThjNCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm91dGVyLmFmdGVyRWFjaCgodG8sIGZyb20pID0+IHtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0by5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShST1VURVJfSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZ1ZXhcbiAgICAgICAgaWYgKGFwcC4kc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gYXBwLiRzdG9yZTtcbiAgICAgICAgICAgIGFwaS5hZGRJbnNwZWN0b3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXgnLFxuICAgICAgICAgICAgICAgIGljb246ICdzdG9yYWdlJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdGaWx0ZXIgc3RvcmVzLi4uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShub2Rlcywgc3RvcmUuX21vZHVsZXMucm9vdCwgcGF5bG9hZC5maWx0ZXIsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gbm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoc3RvcmUuX21vZHVsZXMucm9vdCwgJ1Jvb3QnLCAnJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlUGF0aCA9IHBheWxvYWQubm9kZUlkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBnZXRTdG9yZU1vZHVsZShzdG9yZS5fbW9kdWxlcywgbW9kdWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFjY2VzcyB0aGUgZ2V0dGVycyBwcm9wIHRvIGluaXQgZ2V0dGVycyBjYWNoZSAod2hpY2ggaXMgbGF6eSlcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuY29udGV4dC5nZXR0ZXJzO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnN0YXRlID0gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JTdGF0ZShtb2R1bGUsIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGUsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmVkaXRJbnNwZWN0b3JTdGF0ZSgocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBWVUVYX0lOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IHBheWxvYWQucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubm9kZUlkICE9PSBWVUVYX1JPT1RfUEFUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLm5vZGVJZC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuc2xpY2UoMCwgLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLl9jb21taXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zZXQoc3RvcmUuX3ZtLiRkYXRhLiQkc3RhdGUsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5fY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX01VVEFUSU9OU19JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXggTXV0YXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVnVleCBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGhvb2sub24oJ3Z1ZXg6bXV0YXRpb24nLCAobXV0YXRpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JTdGF0ZShWVUVYX0lOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IG11dGF0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfTVVUQVRJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtdXRhdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZnVuY3Rpb24gbGVnYWN5U2luZ2xlQWN0aW9uU3ViKGFjdGlvbiwgc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhLnN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFjdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChfYSA9IHN0b3JlLnN1YnNjcmliZUFjdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoc3RvcmUsIGFwaS5nZXRTZXR0aW5ncygpLmxlZ2FjeUFjdGlvbnNcbiAgICAgICAgICAgICAgICA/IGxlZ2FjeVNpbmdsZUFjdGlvblN1YlxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmU6IChhY3Rpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5faWQgPSBhY3Rpb25JZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLl90aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYWN0aW9uLl90aW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IChhY3Rpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBhY3Rpb24uX3RpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2R1cmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYCR7ZHVyYXRpb259bXNgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnQWN0aW9uIGR1cmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGR1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJJZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogYWN0aW9uLl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6ICdlbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LCB7IHByZXBlbmQ6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBJbnNwZWN0IGdldHRlcnMgb24gbXV0YXRpb25zXG4gICAgICAgICAgICBhcGkub24uaW5zcGVjdFRpbWVsaW5lRXZlbnQocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubGF5ZXJJZCA9PT0gVlVFWF9NVVRBVElPTlNfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0dGVyS2V5cyA9IE9iamVjdC5rZXlzKHN0b3JlLmdldHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZtID0gbmV3IFZ1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJHN0YXRlOiBwYXlsb2FkLmRhdGEuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZDogc3RvcmUuX3ZtLiRvcHRpb25zLmNvbXB1dGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFZtID0gc3RvcmUuX3ZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuX3ZtID0gdm07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmVlID0gdHJhbnNmb3JtUGF0aHNUb09iamVjdFRyZWUoc3RvcmUuZ2V0dGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmRhdGEuZ2V0dGVycyA9ICgwLCBjbG9uZV9kZWVwXzEuZGVmYXVsdCkodHJlZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5fdm0gPSBvcmlnaW5hbFZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdm0uJGRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLnNldHVwUGx1Z2luID0gc2V0dXBQbHVnaW47XG4vKipcbiAqIEV4dHJhY3RlZCBmcm9tIHRhaWx3aW5kIHBhbGV0dGVcbiAqL1xuY29uc3QgQkxVRV82MDAgPSAweDI1NjNlYjtcbmNvbnN0IExJTUVfNTAwID0gMHg4NGNjMTY7XG5jb25zdCBDWUFOXzQwMCA9IDB4MjJkM2VlO1xuY29uc3QgT1JBTkdFXzQwMCA9IDB4ZmI5MjNjO1xuY29uc3QgV0hJVEUgPSAweGZmZmZmZjtcbmNvbnN0IERBUksgPSAweDY2NjY2NjtcbmZ1bmN0aW9uIGZvcm1hdFJvdXRlTm9kZShyb3V0ZXIsIHJvdXRlLCBwYXJlbnRQYXRoLCBmaWx0ZXIpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgIGlkOiBwYXJlbnRQYXRoICsgcm91dGUucGF0aCxcbiAgICAgICAgbGFiZWw6IHJvdXRlLnBhdGgsXG4gICAgICAgIGNoaWxkcmVuOiAoX2EgPSByb3V0ZS5jaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcChjaGlsZCA9PiBmb3JtYXRSb3V0ZU5vZGUocm91dGVyLCBjaGlsZCwgcm91dGUucGF0aCwgZmlsdGVyKSkuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICB9O1xuICAgIGlmIChmaWx0ZXIgJiYgIW5vZGUuaWQuaW5jbHVkZXMoZmlsdGVyKSAmJiAhKChfYiA9IG5vZGUuY2hpbGRyZW4pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAocm91dGUubmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBTdHJpbmcocm91dGUubmFtZSksXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IENZQU5fNDAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLmFsaWFzICE9IG51bGwpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6ICdhbGlhcycsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IE9SQU5HRV80MDAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHJvdXRlci5jdXJyZW50Um91dGUubWF0Y2hlZC5yZWR1Y2UoKHAsIG0pID0+IHAgKyBtLnBhdGgsICcnKTtcbiAgICBpZiAobm9kZS5pZCA9PT0gY3VycmVudFBhdGgpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6ICdhY3RpdmUnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQkxVRV82MDAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUucmVkaXJlY3QpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6ICdyZWRpcmVjdDogJyArXG4gICAgICAgICAgICAgICAgKHR5cGVvZiByb3V0ZS5yZWRpcmVjdCA9PT0gJ3N0cmluZycgPyByb3V0ZS5yZWRpcmVjdCA6ICdPYmplY3QnKSxcbiAgICAgICAgICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IERBUkssXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFJvdXRlRGF0YShyb3V0ZSkge1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICBkYXRhLnB1c2goeyBrZXk6ICdwYXRoJywgdmFsdWU6IHJvdXRlLnBhdGggfSk7XG4gICAgaWYgKHJvdXRlLnJlZGlyZWN0KSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ3JlZGlyZWN0JywgdmFsdWU6IHJvdXRlLnJlZGlyZWN0IH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUuYWxpYXMpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnYWxpYXMnLCB2YWx1ZTogcm91dGUuYWxpYXMgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5wcm9wcykge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdwcm9wcycsIHZhbHVlOiByb3V0ZS5wcm9wcyB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLm5hbWUgJiYgcm91dGUubmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ25hbWUnLCB2YWx1ZTogcm91dGUubmFtZSB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLmNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB7fTtcbiAgICAgICAgLy8gaWYgKHJvdXRlLmNvbXBvbmVudC5fX2ZpbGUpIHtcbiAgICAgICAgLy8gICBjb21wb25lbnQuZmlsZSA9IHJvdXRlLmNvbXBvbmVudC5fX2ZpbGVcbiAgICAgICAgLy8gfVxuICAgICAgICBpZiAocm91dGUuY29tcG9uZW50LnRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb21wb25lbnQudGVtcGxhdGUgPSByb3V0ZS5jb21wb25lbnQudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlLmNvbXBvbmVudC5wcm9wcykge1xuICAgICAgICAgICAgY29tcG9uZW50LnByb3BzID0gcm91dGUuY29tcG9uZW50LnByb3BzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIHNoYXJlZF91dGlsc18xLmlzRW1wdHlPYmplY3QpKGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaCh7IGtleTogJ2NvbXBvbmVudCcsIHZhbHVlOiBjb21wb25lbnQgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBnZXRQYXRoSWQocm91dGVNYXRjaGVyKSB7XG4gICAgbGV0IHBhdGggPSByb3V0ZU1hdGNoZXIucGF0aDtcbiAgICBpZiAocm91dGVNYXRjaGVyLnBhcmVudCkge1xuICAgICAgICBwYXRoID0gZ2V0UGF0aElkKHJvdXRlTWF0Y2hlci5wYXJlbnQpICsgcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGg7XG59XG5jb25zdCBUQUdfTkFNRVNQQUNFRCA9IHtcbiAgICBsYWJlbDogJ25hbWVzcGFjZWQnLFxuICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgYmFja2dyb3VuZENvbG9yOiBEQVJLLFxufTtcbmNvbnN0IFZVRVhfUk9PVF9QQVRIID0gJ19fdmR0X3Jvb3QnO1xuY29uc3QgVlVFWF9NT0RVTEVfUEFUSF9TRVBBUkFUT1IgPSAnW3ZkdF0nO1xuY29uc3QgVlVFWF9NT0RVTEVfUEFUSF9TRVBBUkFUT1JfUkVHID0gL1xcW3ZkdFxcXS9nO1xuZnVuY3Rpb24gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JUcmVlKG1vZHVsZSwgbW9kdWxlTmFtZSwgcGF0aCkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGF0aCB8fCBWVUVYX1JPT1RfUEFUSCxcbiAgICAgICAgLy8gYWxsIG1vZHVsZXMgZW5kIHdpdGggYSBgL2AsIHdlIHdhbnQgdGhlIGxhc3Qgc2VnbWVudCBvbmx5XG4gICAgICAgIC8vIGNhcnQvIC0+IGNhcnRcbiAgICAgICAgLy8gbmVzdGVkL2NhcnQvIC0+IGNhcnRcbiAgICAgICAgbGFiZWw6IG1vZHVsZU5hbWUsXG4gICAgICAgIHRhZ3M6IG1vZHVsZS5uYW1lc3BhY2VkID8gW1RBR19OQU1FU1BBQ0VEXSA6IFtdLFxuICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoKF9hID0gbW9kdWxlLl9jaGlsZHJlbikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pLm1hcCgoa2V5KSA9PiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUobW9kdWxlLl9jaGlsZHJlbltrZXldLCBrZXksIGAke3BhdGh9JHtrZXl9JHtWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUn1gKSksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGZsYXR0ZW5TdG9yZUZvckluc3BlY3RvclRyZWUocmVzdWx0LCBtb2R1bGUsIGZpbHRlciwgcGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKGZpbHRlcikpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgaWQ6IHBhdGggfHwgVlVFWF9ST09UX1BBVEgsXG4gICAgICAgICAgICBsYWJlbDogcGF0aC5lbmRzV2l0aChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikgPyBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gMSkgOiBwYXRoIHx8ICdSb290JyxcbiAgICAgICAgICAgIHRhZ3M6IG1vZHVsZS5uYW1lc3BhY2VkID8gW1RBR19OQU1FU1BBQ0VEXSA6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMobW9kdWxlLl9jaGlsZHJlbikuZm9yRWFjaChtb2R1bGVOYW1lID0+IHtcbiAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShyZXN1bHQsIG1vZHVsZS5fY2hpbGRyZW5bbW9kdWxlTmFtZV0sIGZpbHRlciwgcGF0aCArIG1vZHVsZU5hbWUgKyBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleHRyYWN0TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aCAmJiBwYXRoICE9PSBWVUVYX1JPT1RfUEFUSCA/IHBhdGguc3BsaXQoVlVFWF9NT0RVTEVfUEFUSF9TRVBBUkFUT1IpLnNsaWNlKC0yLCAtMSlbMF0gOiAnUm9vdCc7XG59XG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclN0YXRlKG1vZHVsZSwgZ2V0dGVycywgcGF0aCkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3Qgc3RvcmVTdGF0ZSA9IHtcbiAgICAgICAgc3RhdGU6IE9iamVjdC5rZXlzKChfYSA9IG1vZHVsZS5jb250ZXh0LnN0YXRlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBtb2R1bGUuY29udGV4dC5zdGF0ZVtrZXldLFxuICAgICAgICB9KSksXG4gICAgfTtcbiAgICBjb25zdCBwYXRoV2l0aFNsYXNoZXMgPSBwYXRoLnJlcGxhY2UoVlVFWF9NT0RVTEVfUEFUSF9TRVBBUkFUT1JfUkVHLCAnLycpO1xuICAgIGdldHRlcnMgPSAhbW9kdWxlLm5hbWVzcGFjZWQgfHwgcGF0aCA9PT0gVlVFWF9ST09UX1BBVEggPyBtb2R1bGUuY29udGV4dC5nZXR0ZXJzIDogZ2V0dGVyc1twYXRoV2l0aFNsYXNoZXNdO1xuICAgIGxldCBnZXR0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKGdldHRlcnMpO1xuICAgIGNvbnN0IHNob3VsZFBpY2tHZXR0ZXJzID0gIW1vZHVsZS5uYW1lc3BhY2VkICYmIHBhdGggIT09IFZVRVhfUk9PVF9QQVRIO1xuICAgIGlmIChzaG91bGRQaWNrR2V0dGVycykge1xuICAgICAgICAvLyBPbmx5IHBpY2sgdGhlIGdldHRlcnMgZGVmaW5lZCBpbiB0aGUgbm9uLW5hbWVzcGFjZWQgbW9kdWxlXG4gICAgICAgIGNvbnN0IGRlZmluZWRHZXR0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKChfYiA9IG1vZHVsZS5fcmF3TW9kdWxlLmdldHRlcnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9KTtcbiAgICAgICAgZ2V0dGVyc0tleXMgPSBnZXR0ZXJzS2V5cy5maWx0ZXIoa2V5ID0+IGRlZmluZWRHZXR0ZXJzS2V5cy5pbmNsdWRlcyhrZXkpKTtcbiAgICB9XG4gICAgaWYgKGdldHRlcnNLZXlzLmxlbmd0aCkge1xuICAgICAgICBsZXQgbW9kdWxlR2V0dGVycztcbiAgICAgICAgaWYgKHNob3VsZFBpY2tHZXR0ZXJzKSB7XG4gICAgICAgICAgICAvLyBPbmx5IHBpY2sgdGhlIGdldHRlcnMgZGVmaW5lZCBpbiB0aGUgbm9uLW5hbWVzcGFjZWQgbW9kdWxlXG4gICAgICAgICAgICBtb2R1bGVHZXR0ZXJzID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBnZXR0ZXJzS2V5cykge1xuICAgICAgICAgICAgICAgIG1vZHVsZUdldHRlcnNba2V5XSA9IGNhblRocm93KCgpID0+IGdldHRlcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtb2R1bGVHZXR0ZXJzID0gZ2V0dGVycztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmVlID0gdHJhbnNmb3JtUGF0aHNUb09iamVjdFRyZWUobW9kdWxlR2V0dGVycyk7XG4gICAgICAgIHN0b3JlU3RhdGUuZ2V0dGVycyA9IE9iamVjdC5rZXlzKHRyZWUpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAga2V5OiBrZXkuZW5kc1dpdGgoJy8nKSA/IGV4dHJhY3ROYW1lRnJvbVBhdGgoa2V5KSA6IGtleSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBjYW5UaHJvdygoKSA9PiB0cmVlW2tleV0pLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBzdG9yZVN0YXRlO1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtUGF0aHNUb09iamVjdFRyZWUoZ2V0dGVycykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGdldHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGtleS5zcGxpdCgnLycpO1xuICAgICAgICBpZiAocGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgbGVhZktleSA9IHBhdGgucG9wKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3BdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnTW9kdWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFtwXS5fY3VzdG9tLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0W2xlYWZLZXldID0gY2FuVGhyb3coKCkgPT4gZ2V0dGVyc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gY2FuVGhyb3coKCkgPT4gZ2V0dGVyc1trZXldKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRTdG9yZU1vZHVsZShtb2R1bGVNYXAsIHBhdGgpIHtcbiAgICBjb25zdCBuYW1lcyA9IHBhdGguc3BsaXQoVlVFWF9NT0RVTEVfUEFUSF9TRVBBUkFUT1IpLmZpbHRlcigobikgPT4gbik7XG4gICAgcmV0dXJuIG5hbWVzLnJlZHVjZSgobW9kdWxlLCBtb2R1bGVOYW1lLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbW9kdWxlW21vZHVsZU5hbWUgPT09IFZVRVhfUk9PVF9QQVRIID8gJ3Jvb3QnIDogbW9kdWxlTmFtZV07XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtb2R1bGUgXCIke21vZHVsZU5hbWV9XCIgZm9yIHBhdGggXCIke3BhdGh9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkgPT09IG5hbWVzLmxlbmd0aCAtIDEgPyBjaGlsZCA6IGNoaWxkLl9jaGlsZHJlbjtcbiAgICB9LCBwYXRoID09PSBWVUVYX1JPT1RfUEFUSCA/IG1vZHVsZU1hcCA6IG1vZHVsZU1hcC5yb290Ll9jaGlsZHJlbik7XG59XG5mdW5jdGlvbiBjYW5UaHJvdyhjYikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjYigpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wbHVnaW4uanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7725\n");
|
|
342
|
+
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__(13508);\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 if (router.options.routes) {\n payload.rootNodes = router.options.routes.map(route => formatRouteNode(router, route, '', payload.filter)).filter(Boolean);\n } else {\n console.warn(`[Vue Devtools] No routes found in router`, router.options);\n }\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: api.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.split(VUEX_MODULE_PATH_SEPARATOR).slice(0, -1), ...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: api.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: api.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 = api.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 = api.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: api.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: route.path.startsWith('/') ? route.path : `${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 if (node.id === router.currentRoute.path) {\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 var _a;\n\n return {\n id: 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((_a = module._children) !== null && _a !== void 0 ? _a : {}).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, _b;\n\n const storeState = {\n state: Object.keys((_a = module.context.state) !== null && _a !== void 0 ? _a : {}).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((_b = module._rawModule.getters) !== null && _b !== void 0 ? _b : {});\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] = canThrow(() => 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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LFNBQXpCLEVBQW9DLElBQXBDLEVBQXdDO0FBQ3RDLFFBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFMLENBQVcsMEJBQVgsRUFBdUMsTUFBdkMsQ0FBK0MsQ0FBRCxJQUFPLENBQXJELENBQWQ7QUFDQSxTQUFPLEtBQUssQ0FBQyxNQUFOLENBQ0wsQ0FBQyxNQUFELEVBQVMsVUFBVCxFQUFxQixDQUFyQixLQUEwQjtBQUN4QixVQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxLQUFLLGNBQWYsR0FBZ0MsTUFBaEMsR0FBeUMsVUFBMUMsQ0FBcEI7O0FBQ0EsUUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNWLFlBQU0sSUFBSSxLQUFKLENBQVUsbUJBQW1CLFVBQVUsZUFBZSxJQUFJLElBQTFELENBQU47QUFDRDs7QUFDRCxXQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTixHQUFlLENBQXJCLEdBQXlCLEtBQXpCLEdBQWlDLEtBQUssQ0FBQyxTQUE5QztBQUNELEdBUEksRUFRTCxJQUFJLEtBQUssY0FBVCxHQUEwQixTQUExQixHQUFzQyxTQUFTLENBQUMsSUFBVixDQUFlLFNBUmhELENBQVA7QUFVRDs7QUFFRCxTQUFTLFFBQVQsQ0FBbUIsRUFBbkIsRUFBZ0M7QUFDOUIsTUFBSTtBQUNGLFdBQU8sRUFBRSxFQUFUO0FBQ0QsR0FGRCxDQUVFLE9BQU8sQ0FBUCxFQUFVO0FBQ1YsV0FBTyxDQUFQO0FBQ0Q7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3BsdWdpbi50cz8wY2NhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHZvaWQgMDtcbmNvbnN0IGRldnRvb2xzX2FwaV8xID0gcmVxdWlyZShcIkB2dWUvZGV2dG9vbHMtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBjbG9uZV9kZWVwXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsb25lLWRlZXBcIikpO1xubGV0IGFjdGlvbklkID0gMDtcbmZ1bmN0aW9uIHNldHVwUGx1Z2luKGFwaSwgYXBwLCBWdWUpIHtcbiAgICBjb25zdCBST1VURVJfSU5TUEVDVE9SX0lEID0gJ3Z1ZTItcm91dGVyLWluc3BlY3Rvcic7XG4gICAgY29uc3QgUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQgPSAndnVlMi1yb3V0ZXItY2hhbmdlcyc7XG4gICAgY29uc3QgVlVFWF9JTlNQRUNUT1JfSUQgPSAndnVlMi12dWV4LWluc3BlY3Rvcic7XG4gICAgY29uc3QgVlVFWF9NVVRBVElPTlNfSUQgPSAndnVlMi12dWV4LW11dGF0aW9ucyc7XG4gICAgY29uc3QgVlVFWF9BQ1RJT05TX0lEID0gJ3Z1ZTItdnVleC1hY3Rpb25zJztcbiAgICAoMCwgZGV2dG9vbHNfYXBpXzEuc2V0dXBEZXZ0b29sc1BsdWdpbikoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGlkOiAnb3JnLnZ1ZWpzLnZ1ZTItaW50ZXJuYWwnLFxuICAgICAgICBsYWJlbDogJ1Z1ZSAyJyxcbiAgICAgICAgaG9tZXBhZ2U6ICdodHRwczovL3Z1ZWpzLm9yZy8nLFxuICAgICAgICBsb2dvOiAnaHR0cHM6Ly92dWVqcy5vcmcvaW1hZ2VzL2ljb25zL2Zhdmljb24tOTZ4OTYucG5nJyxcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGxlZ2FjeUFjdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0xlZ2FjeSBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VuYWJsZSB0aGlzIGZvciBWdWV4IDwgMy4xLjAnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LCBhcGkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGhvb2sgPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbiAgICAgICAgLy8gVnVlIFJvdXRlclxuICAgICAgICBpZiAoYXBwLiRyb3V0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9IGFwcC4kcm91dGVyO1xuICAgICAgICAgICAgLy8gSW5zcGVjdG9yXG4gICAgICAgICAgICBhcGkuYWRkSW5zcGVjdG9yKHtcbiAgICAgICAgICAgICAgICBpZDogUk9VVEVSX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1JvdXRlcycsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2Jvb2snLFxuICAgICAgICAgICAgICAgIHRyZWVGaWx0ZXJQbGFjZWhvbGRlcjogJ1NlYXJjaCByb3V0ZXMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yVHJlZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gUk9VVEVSX0lOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVyLm9wdGlvbnMucm91dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IHJvdXRlci5vcHRpb25zLnJvdXRlcy5tYXAocm91dGUgPT4gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgcm91dGUsICcnLCBwYXlsb2FkLmZpbHRlcikpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgW1Z1ZSBEZXZ0b29sc10gTm8gcm91dGVzIGZvdW5kIGluIHJvdXRlcmAsIHJvdXRlci5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBST1VURVJfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gcm91dGVyLm1hdGNoZXIuZ2V0Um91dGVzKCkuZmluZChyID0+IGdldFBhdGhJZChyKSA9PT0gcGF5bG9hZC5ub2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZm9ybWF0Um91dGVEYXRhKHJvdXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRpbWVsaW5lXG4gICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVMYXllcih7XG4gICAgICAgICAgICAgICAgaWQ6IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnUm91dGVyIE5hdmlnYXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogMHg0MGE4YzQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvdXRlci5hZnRlckVhY2goKHRvLCBmcm9tKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBST1VURVJfQ0hBTkdFU19MQVlFUl9JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGFwaS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0by5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShST1VURVJfSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZ1ZXhcbiAgICAgICAgaWYgKGFwcC4kc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gYXBwLiRzdG9yZTtcbiAgICAgICAgICAgIGFwaS5hZGRJbnNwZWN0b3Ioe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXgnLFxuICAgICAgICAgICAgICAgIGljb246ICdzdG9yYWdlJyxcbiAgICAgICAgICAgICAgICB0cmVlRmlsdGVyUGxhY2Vob2xkZXI6ICdGaWx0ZXIgc3RvcmVzLi4uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclRyZWUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShub2Rlcywgc3RvcmUuX21vZHVsZXMucm9vdCwgcGF5bG9hZC5maWx0ZXIsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdE5vZGVzID0gbm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUoc3RvcmUuX21vZHVsZXMucm9vdCwgJ1Jvb3QnLCAnJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlUGF0aCA9IHBheWxvYWQubm9kZUlkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBnZXRTdG9yZU1vZHVsZShzdG9yZS5fbW9kdWxlcywgbW9kdWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFjY2VzcyB0aGUgZ2V0dGVycyBwcm9wIHRvIGluaXQgZ2V0dGVycyBjYWNoZSAod2hpY2ggaXMgbGF6eSlcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuY29udGV4dC5nZXR0ZXJzO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnN0YXRlID0gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JTdGF0ZShtb2R1bGUsIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGUsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmVkaXRJbnNwZWN0b3JTdGF0ZSgocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBWVUVYX0lOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IHBheWxvYWQucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubm9kZUlkICE9PSBWVUVYX1JPT1RfUEFUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLm5vZGVJZC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuc2xpY2UoMCwgLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLl9jb21taXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zZXQoc3RvcmUuX3ZtLiRkYXRhLiQkc3RhdGUsIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5fY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX01VVEFUSU9OU19JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Z1ZXggTXV0YXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUxheWVyKHtcbiAgICAgICAgICAgICAgICBpZDogVlVFWF9BQ1RJT05TX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVnVleCBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogTElNRV81MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGhvb2sub24oJ3Z1ZXg6bXV0YXRpb24nLCAobXV0YXRpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JTdGF0ZShWVUVYX0lOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IG11dGF0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfTVVUQVRJT05TX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYXBpLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG11dGF0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmdW5jdGlvbiBsZWdhY3lTaW5nbGVBY3Rpb25TdWIoYWN0aW9uLCBzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGFwaS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX2EgPSBzdG9yZS5zdWJzY3JpYmVBY3Rpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHN0b3JlLCBhcGkuZ2V0U2V0dGluZ3MoKS5sZWdhY3lBY3Rpb25zXG4gICAgICAgICAgICAgICAgPyBsZWdhY3lTaW5nbGVBY3Rpb25TdWJcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlOiAoYWN0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uX2lkID0gYWN0aW9uSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5fdGltZSA9IGFwaS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYWN0aW9uLl90aW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6IChhY3Rpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGFwaS5ub3coKSAtIGFjdGlvbi5fdGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZHVyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBgJHtkdXJhdGlvbn1tc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBY3Rpb24gZHVyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogYXBpLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGlvbi5faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSwgeyBwcmVwZW5kOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSW5zcGVjdCBnZXR0ZXJzIG9uIG11dGF0aW9uc1xuICAgICAgICAgICAgYXBpLm9uLmluc3BlY3RUaW1lbGluZUV2ZW50KHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmxheWVySWQgPT09IFZVRVhfTVVUQVRJT05TX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldHRlcktleXMgPSBPYmplY3Qua2V5cyhzdG9yZS5nZXR0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldHRlcktleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2bSA9IG5ldyBWdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCRzdGF0ZTogcGF5bG9hZC5kYXRhLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHN0b3JlLl92bS4kb3B0aW9ucy5jb21wdXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWbSA9IHN0b3JlLl92bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLl92bSA9IHZtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJlZSA9IHRyYW5zZm9ybVBhdGhzVG9PYmplY3RUcmVlKHN0b3JlLmdldHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5kYXRhLmdldHRlcnMgPSAoMCwgY2xvbmVfZGVlcF8xLmRlZmF1bHQpKHRyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuX3ZtID0gb3JpZ2luYWxWbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZtLiRkZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHNldHVwUGx1Z2luO1xuLyoqXG4gKiBFeHRyYWN0ZWQgZnJvbSB0YWlsd2luZCBwYWxldHRlXG4gKi9cbmNvbnN0IEJMVUVfNjAwID0gMHgyNTYzZWI7XG5jb25zdCBMSU1FXzUwMCA9IDB4ODRjYzE2O1xuY29uc3QgQ1lBTl80MDAgPSAweDIyZDNlZTtcbmNvbnN0IE9SQU5HRV80MDAgPSAweGZiOTIzYztcbmNvbnN0IFdISVRFID0gMHhmZmZmZmY7XG5jb25zdCBEQVJLID0gMHg2NjY2NjY7XG5mdW5jdGlvbiBmb3JtYXRSb3V0ZU5vZGUocm91dGVyLCByb3V0ZSwgcGFyZW50UGF0aCwgZmlsdGVyKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgICBpZDogcm91dGUucGF0aC5zdGFydHNXaXRoKCcvJykgPyByb3V0ZS5wYXRoIDogYCR7cGFyZW50UGF0aH0vJHtyb3V0ZS5wYXRofWAsXG4gICAgICAgIGxhYmVsOiByb3V0ZS5wYXRoLFxuICAgICAgICBjaGlsZHJlbjogKF9hID0gcm91dGUuY2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoY2hpbGQgPT4gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgY2hpbGQsIHJvdXRlLnBhdGgsIGZpbHRlcikpLmZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgdGFnczogW10sXG4gICAgfTtcbiAgICBpZiAoZmlsdGVyICYmICFub2RlLmlkLmluY2x1ZGVzKGZpbHRlcikgJiYgISgoX2IgPSBub2RlLmNoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubGVuZ3RoKSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKHJvdXRlLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogU3RyaW5nKHJvdXRlLm5hbWUpLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDWUFOXzQwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5hbGlhcyAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAnYWxpYXMnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBPUkFOR0VfNDAwLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG5vZGUuaWQgPT09IHJvdXRlci5jdXJyZW50Um91dGUucGF0aCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogJ2FjdGl2ZScsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBCTFVFXzYwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5yZWRpcmVjdCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogJ3JlZGlyZWN0OiAnICtcbiAgICAgICAgICAgICAgICAodHlwZW9mIHJvdXRlLnJlZGlyZWN0ID09PSAnc3RyaW5nJyA/IHJvdXRlLnJlZGlyZWN0IDogJ09iamVjdCcpLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogREFSSyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gZm9ybWF0Um91dGVEYXRhKHJvdXRlKSB7XG4gICAgY29uc3QgZGF0YSA9IFtdO1xuICAgIGRhdGEucHVzaCh7IGtleTogJ3BhdGgnLCB2YWx1ZTogcm91dGUucGF0aCB9KTtcbiAgICBpZiAocm91dGUucmVkaXJlY3QpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAncmVkaXJlY3QnLCB2YWx1ZTogcm91dGUucmVkaXJlY3QgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5hbGlhcykge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdhbGlhcycsIHZhbHVlOiByb3V0ZS5hbGlhcyB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnByb3BzKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ3Byb3BzJywgdmFsdWU6IHJvdXRlLnByb3BzIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUubmFtZSAmJiByb3V0ZS5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnbmFtZScsIHZhbHVlOiByb3V0ZS5uYW1lIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUuY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHt9O1xuICAgICAgICAvLyBpZiAocm91dGUuY29tcG9uZW50Ll9fZmlsZSkge1xuICAgICAgICAvLyAgIGNvbXBvbmVudC5maWxlID0gcm91dGUuY29tcG9uZW50Ll9fZmlsZVxuICAgICAgICAvLyB9XG4gICAgICAgIGlmIChyb3V0ZS5jb21wb25lbnQudGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC50ZW1wbGF0ZSA9IHJvdXRlLmNvbXBvbmVudC50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUuY29tcG9uZW50LnByb3BzKSB7XG4gICAgICAgICAgICBjb21wb25lbnQucHJvcHMgPSByb3V0ZS5jb21wb25lbnQucHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgc2hhcmVkX3V0aWxzXzEuaXNFbXB0eU9iamVjdCkoY29tcG9uZW50KSkge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnY29tcG9uZW50JywgdmFsdWU6IGNvbXBvbmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIGdldFBhdGhJZChyb3V0ZU1hdGNoZXIpIHtcbiAgICBsZXQgcGF0aCA9IHJvdXRlTWF0Y2hlci5wYXRoO1xuICAgIGlmIChyb3V0ZU1hdGNoZXIucGFyZW50KSB7XG4gICAgICAgIHBhdGggPSBnZXRQYXRoSWQocm91dGVNYXRjaGVyLnBhcmVudCkgKyBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn1cbmNvbnN0IFRBR19OQU1FU1BBQ0VEID0ge1xuICAgIGxhYmVsOiAnbmFtZXNwYWNlZCcsXG4gICAgdGV4dENvbG9yOiBXSElURSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IERBUkssXG59O1xuY29uc3QgVlVFWF9ST09UX1BBVEggPSAnX192ZHRfcm9vdCc7XG5jb25zdCBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUiA9ICdbdmR0XSc7XG5jb25zdCBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUl9SRUcgPSAvXFxbdmR0XFxdL2c7XG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUobW9kdWxlLCBtb2R1bGVOYW1lLCBwYXRoKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwYXRoIHx8IFZVRVhfUk9PVF9QQVRILFxuICAgICAgICAvLyBhbGwgbW9kdWxlcyBlbmQgd2l0aCBhIGAvYCwgd2Ugd2FudCB0aGUgbGFzdCBzZWdtZW50IG9ubHlcbiAgICAgICAgLy8gY2FydC8gLT4gY2FydFxuICAgICAgICAvLyBuZXN0ZWQvY2FydC8gLT4gY2FydFxuICAgICAgICBsYWJlbDogbW9kdWxlTmFtZSxcbiAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cygoX2EgPSBtb2R1bGUuX2NoaWxkcmVuKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSkubWFwKChrZXkpID0+IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShtb2R1bGUuX2NoaWxkcmVuW2tleV0sIGtleSwgYCR7cGF0aH0ke2tleX0ke1ZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SfWApKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShyZXN1bHQsIG1vZHVsZSwgZmlsdGVyLCBwYXRoKSB7XG4gICAgaWYgKHBhdGguaW5jbHVkZXMoZmlsdGVyKSkge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICBpZDogcGF0aCB8fCBWVUVYX1JPT1RfUEFUSCxcbiAgICAgICAgICAgIGxhYmVsOiBwYXRoLmVuZHNXaXRoKFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SKSA/IHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSA6IHBhdGggfHwgJ1Jvb3QnLFxuICAgICAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhtb2R1bGUuX2NoaWxkcmVuKS5mb3JFYWNoKG1vZHVsZU5hbWUgPT4ge1xuICAgICAgICBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlKHJlc3VsdCwgbW9kdWxlLl9jaGlsZHJlblttb2R1bGVOYW1lXSwgZmlsdGVyLCBwYXRoICsgbW9kdWxlTmFtZSArIFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICAgIHJldHVybiBwYXRoICYmIHBhdGggIT09IFZVRVhfUk9PVF9QQVRIID8gcGF0aC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuc2xpY2UoLTIsIC0xKVswXSA6ICdSb290Jztcbn1cbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBnZXR0ZXJzLCBwYXRoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBzdG9yZVN0YXRlID0ge1xuICAgICAgICBzdGF0ZTogT2JqZWN0LmtleXMoKF9hID0gbW9kdWxlLmNvbnRleHQuc3RhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9KS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG1vZHVsZS5jb250ZXh0LnN0YXRlW2tleV0sXG4gICAgICAgIH0pKSxcbiAgICB9O1xuICAgIGNvbnN0IHBhdGhXaXRoU2xhc2hlcyA9IHBhdGgucmVwbGFjZShWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUl9SRUcsICcvJyk7XG4gICAgZ2V0dGVycyA9ICFtb2R1bGUubmFtZXNwYWNlZCB8fCBwYXRoID09PSBWVUVYX1JPT1RfUEFUSCA/IG1vZHVsZS5jb250ZXh0LmdldHRlcnMgOiBnZXR0ZXJzW3BhdGhXaXRoU2xhc2hlc107XG4gICAgbGV0IGdldHRlcnNLZXlzID0gT2JqZWN0LmtleXMoZ2V0dGVycyk7XG4gICAgY29uc3Qgc2hvdWxkUGlja0dldHRlcnMgPSAhbW9kdWxlLm5hbWVzcGFjZWQgJiYgcGF0aCAhPT0gVlVFWF9ST09UX1BBVEg7XG4gICAgaWYgKHNob3VsZFBpY2tHZXR0ZXJzKSB7XG4gICAgICAgIC8vIE9ubHkgcGljayB0aGUgZ2V0dGVycyBkZWZpbmVkIGluIHRoZSBub24tbmFtZXNwYWNlZCBtb2R1bGVcbiAgICAgICAgY29uc3QgZGVmaW5lZEdldHRlcnNLZXlzID0gT2JqZWN0LmtleXMoKF9iID0gbW9kdWxlLl9yYXdNb2R1bGUuZ2V0dGVycykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge30pO1xuICAgICAgICBnZXR0ZXJzS2V5cyA9IGdldHRlcnNLZXlzLmZpbHRlcihrZXkgPT4gZGVmaW5lZEdldHRlcnNLZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgIH1cbiAgICBpZiAoZ2V0dGVyc0tleXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBtb2R1bGVHZXR0ZXJzO1xuICAgICAgICBpZiAoc2hvdWxkUGlja0dldHRlcnMpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgcGljayB0aGUgZ2V0dGVycyBkZWZpbmVkIGluIHRoZSBub24tbmFtZXNwYWNlZCBtb2R1bGVcbiAgICAgICAgICAgIG1vZHVsZUdldHRlcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGdldHRlcnNLZXlzKSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlR2V0dGVyc1trZXldID0gY2FuVGhyb3coKCkgPT4gZ2V0dGVyc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1vZHVsZUdldHRlcnMgPSBnZXR0ZXJzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyZWUgPSB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShtb2R1bGVHZXR0ZXJzKTtcbiAgICAgICAgc3RvcmVTdGF0ZS5nZXR0ZXJzID0gT2JqZWN0LmtleXModHJlZSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXk6IGtleS5lbmRzV2l0aCgnLycpID8gZXh0cmFjdE5hbWVGcm9tUGF0aChrZXkpIDoga2V5LFxuICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IGNhblRocm93KCgpID0+IHRyZWVba2V5XSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JlU3RhdGU7XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShnZXR0ZXJzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmtleXMoZ2V0dGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0ga2V5LnNwbGl0KCcvJyk7XG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBsZWFmS2V5ID0gcGF0aC5wb3AoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3BdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdNb2R1bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3BdLl9jdXN0b20udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRbbGVhZktleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFN0b3JlTW9kdWxlKG1vZHVsZU1hcCwgcGF0aCkge1xuICAgIGNvbnN0IG5hbWVzID0gcGF0aC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuZmlsdGVyKChuKSA9PiBuKTtcbiAgICByZXR1cm4gbmFtZXMucmVkdWNlKChtb2R1bGUsIG1vZHVsZU5hbWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBtb2R1bGVbbW9kdWxlTmFtZSA9PT0gVlVFWF9ST09UX1BBVEggPyAncm9vdCcgOiBtb2R1bGVOYW1lXTtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG1vZHVsZSBcIiR7bW9kdWxlTmFtZX1cIiBmb3IgcGF0aCBcIiR7cGF0aH1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaSA9PT0gbmFtZXMubGVuZ3RoIC0gMSA/IGNoaWxkIDogY2hpbGQuX2NoaWxkcmVuO1xuICAgIH0sIHBhdGggPT09IFZVRVhfUk9PVF9QQVRIID8gbW9kdWxlTWFwIDogbW9kdWxlTWFwLnJvb3QuX2NoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIGNhblRocm93KGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsdWdpbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7725\n");
|
|
319
343
|
|
|
320
344
|
/***/ }),
|
|
321
345
|
|
|
@@ -323,7 +347,7 @@ eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {
|
|
|
323
347
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
324
348
|
|
|
325
349
|
"use strict";
|
|
326
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getCustomInstanceDetails = exports.editState = exports.getInstanceDetails = void 0;\n\nconst util_1 = __webpack_require__(33756);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst util_2 = __webpack_require__(77858);\n/**\n * Get the detailed information of an inspected instance.\n */\n\n\nfunction getInstanceDetails(instance, ctx) {\n var _a;\n\n return {\n id: (0, util_1.getUniqueComponentId)(instance, ctx),\n name: (0, util_1.getInstanceName)(instance),\n file: (_a = instance.type) === null || _a === void 0 ? void 0 : _a.__file,\n state: getInstanceState(instance)\n };\n}\n\nexports.getInstanceDetails = getInstanceDetails;\n\nfunction getInstanceState(instance) {\n const mergedType = resolveMergedOptions(instance);\n return processProps(instance).concat(processState(instance), processSetupState(instance), processComputed(instance, mergedType), processAttrs(instance), processProvide(instance), processInject(instance, mergedType), processRefs(instance));\n}\n/**\n * Process the props of an instance.\n * Make sure return a plain object because window.postMessage()\n * will throw an Error if the passed object contains Functions.\n *\n * @param {Vue} instance\n * @return {Array}\n */\n\n\nfunction processProps(instance) {\n const propsData = [];\n const propDefinitions = instance.type.props;\n\n for (let key in instance.props) {\n const propDefinition = propDefinitions ? propDefinitions[key] : null;\n key = (0, shared_utils_1.camelize)(key);\n propsData.push({\n type: 'props',\n key,\n value: (0, util_2.returnError)(() => instance.props[key]),\n meta: propDefinition ? {\n type: propDefinition.type ? getPropType(propDefinition.type) : 'any',\n required: !!propDefinition.required,\n ...(propDefinition.default != null ? {\n default: propDefinition.default.toString()\n } : {})\n } : {\n type: 'invalid'\n },\n editable: shared_utils_1.SharedData.editableProps\n });\n }\n\n return propsData;\n}\n\nconst fnTypeRE = /^(?:function|class) (\\w+)/;\n/**\n * Convert prop type constructor to string.\n */\n\nfunction getPropType(type) {\n if (Array.isArray(type)) {\n return type.map(t => getPropType(t)).join(' or ');\n }\n\n if (type == null) {\n return 'null';\n }\n\n const match = type.toString().match(fnTypeRE);\n return typeof type === 'function' ? match && match[1] || 'any' : 'any';\n}\n/**\n * Process state, filtering out props and \"clean\" the result\n * with a JSON dance. This removes functions which can cause\n * errors during structured clone used by window.postMessage.\n *\n * @param {Vue} instance\n * @return {Array}\n */\n\n\nfunction processState(instance) {\n const type = instance.type;\n const props = type.props;\n const getters = type.vuex && type.vuex.getters;\n const computedDefs = type.computed;\n const data = { ...instance.data,\n ...instance.renderContext\n };\n return Object.keys(data).filter(key => !(props && key in props) && !(getters && key in getters) && !(computedDefs && key in computedDefs)).map(key => ({\n key,\n type: 'data',\n value: (0, util_2.returnError)(() => data[key]),\n editable: true\n }));\n}\n\nfunction processSetupState(instance) {\n const raw = instance.devtoolsRawSetupState || {};\n return Object.keys(instance.setupState).map(key => {\n var _a, _b, _c, _d;\n\n const value = (0, util_2.returnError)(() => instance.setupState[key]);\n const rawData = raw[key];\n let result;\n\n if (rawData) {\n const info = getSetupStateInfo(rawData);\n const objectType = info.computed ? 'Computed' : info.ref ? 'Ref' : info.reactive ? 'Reactive' : null;\n const isState = info.ref || info.computed || info.reactive;\n const isOther = typeof value === 'function' || typeof (value === null || value === void 0 ? void 0 : value.render) === 'function';\n const raw = ((_b = (_a = rawData.effect) === null || _a === void 0 ? void 0 : _a.raw) === null || _b === void 0 ? void 0 : _b.toString()) || ((_d = (_c = rawData.effect) === null || _c === void 0 ? void 0 : _c.fn) === null || _d === void 0 ? void 0 : _d.toString());\n result = { ...(objectType ? {\n objectType\n } : {}),\n ...(raw ? {\n raw\n } : {}),\n editable: isState && !info.readonly,\n type: isOther ? 'setup (other)' : 'setup'\n };\n } else {\n result = {\n type: 'setup'\n };\n }\n\n return {\n key,\n value,\n ...result\n };\n });\n}\n\nfunction isRef(raw) {\n return !!raw.__v_isRef;\n}\n\nfunction isComputed(raw) {\n return isRef(raw) && !!raw.effect;\n}\n\nfunction isReactive(raw) {\n return !!raw.__v_isReactive;\n}\n\nfunction isReadOnly(raw) {\n return !!raw.__v_isReadonly;\n}\n\nfunction getSetupStateInfo(raw) {\n return {\n ref: isRef(raw),\n computed: isComputed(raw),\n reactive: isReactive(raw),\n readonly: isReadOnly(raw)\n };\n}\n/**\n * Process the computed properties of an instance.\n *\n * @param {Vue} instance\n * @return {Array}\n */\n\n\nfunction processComputed(instance, mergedType) {\n const type = mergedType;\n const computed = [];\n const defs = type.computed || {}; // use for...in here because if 'computed' is not defined\n // on component, computed properties will be placed in prototype\n // and Object.keys does not include\n // properties from object's prototype\n\n for (const key in defs) {\n const def = defs[key];\n const type = typeof def === 'function' && def.vuex ? 'vuex bindings' : 'computed';\n computed.push({\n type,\n key,\n value: (0, util_2.returnError)(() => instance.proxy[key]),\n editable: typeof def.set === 'function'\n });\n }\n\n return computed;\n}\n\nfunction processAttrs(instance) {\n return Object.keys(instance.attrs).map(key => ({\n type: 'attrs',\n key,\n value: (0, util_2.returnError)(() => instance.attrs[key])\n }));\n}\n\nfunction processProvide(instance) {\n return Reflect.ownKeys(instance.provides).map(key => ({\n type: 'provided',\n key: key.toString(),\n value: (0, util_2.returnError)(() => instance.provides[key])\n }));\n}\n\nfunction processInject(instance, mergedType) {\n if (!(mergedType === null || mergedType === void 0 ? void 0 : mergedType.inject)) return [];\n let keys = [];\n let defaultValue;\n\n if (Array.isArray(mergedType.inject)) {\n keys = mergedType.inject.map(key => ({\n key,\n originalKey: key\n }));\n } else {\n keys = Reflect.ownKeys(mergedType.inject).map(key => {\n const value = mergedType.inject[key];\n let originalKey;\n\n if (typeof value === 'string' || typeof value === 'symbol') {\n originalKey = value;\n } else {\n originalKey = value.from;\n defaultValue = value.default;\n }\n\n return {\n key,\n originalKey\n };\n });\n }\n\n return keys.map(({\n key,\n originalKey\n }) => ({\n type: 'injected',\n key: originalKey && key !== originalKey ? `${originalKey.toString()} ➞ ${key.toString()}` : key.toString(),\n value: (0, util_2.returnError)(() => instance.ctx[key] || instance.provides[originalKey] || defaultValue)\n }));\n}\n\nfunction processRefs(instance) {\n return Object.keys(instance.refs).map(key => ({\n type: 'refs',\n key,\n value: (0, util_2.returnError)(() => instance.refs[key])\n }));\n}\n\nfunction editState({\n componentInstance,\n path,\n state,\n type\n}, stateEditor, ctx) {\n if (!['data', 'props', 'computed', 'setup'].includes(type)) return;\n let target;\n const targetPath = path.slice();\n\n if (Object.keys(componentInstance.props).includes(path[0])) {\n // Props\n target = componentInstance.props;\n } else if (componentInstance.devtoolsRawSetupState && Object.keys(componentInstance.devtoolsRawSetupState).includes(path[0])) {\n // Setup\n target = componentInstance.devtoolsRawSetupState;\n const currentValue = stateEditor.get(componentInstance.devtoolsRawSetupState, path);\n\n if (currentValue != null) {\n const info = getSetupStateInfo(currentValue);\n if (info.readonly) return;\n }\n } else {\n target = componentInstance.proxy;\n }\n\n if (target && targetPath) {\n stateEditor.set(target, targetPath, 'value' in state ? state.value : undefined, stateEditor.createDefaultSetCallback(state));\n }\n}\n\nexports.editState = editState;\n\nfunction reduceStateList(list) {\n if (!list.length) {\n return undefined;\n }\n\n return list.reduce((map, item) => {\n const key = item.type || 'data';\n const obj = map[key] = map[key] || {};\n obj[item.key] = item.value;\n return map;\n }, {});\n}\n\nfunction getCustomInstanceDetails(instance) {\n if (instance._) instance = instance._;\n const state = getInstanceState(instance);\n return {\n _custom: {\n type: 'component',\n id: instance.__VUE_DEVTOOLS_UID__,\n display: (0, util_1.getInstanceName)(instance),\n tooltip: 'Component instance',\n value: reduceStateList(state),\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomInstanceDetails = getCustomInstanceDetails;\n\nfunction resolveMergedOptions(instance) {\n const raw = instance.type;\n const {\n mixins,\n extends: extendsOptions\n } = raw;\n const globalMixins = instance.appContext.mixins;\n if (!globalMixins.length && !mixins && !extendsOptions) return raw;\n const options = {};\n globalMixins.forEach(m => mergeOptions(options, m, instance));\n mergeOptions(options, raw, instance);\n return options;\n}\n\nfunction mergeOptions(to, from, instance) {\n if (typeof from === 'function') {\n from = from.options;\n }\n\n if (!from) return to;\n const {\n mixins,\n extends: extendsOptions\n } = from;\n extendsOptions && mergeOptions(to, extendsOptions, instance);\n mixins && mixins.forEach(m => mergeOptions(to, m, instance));\n\n for (const key of ['computed', 'inject']) {\n if (Object.prototype.hasOwnProperty.call(from, key)) {\n if (!to[key]) {\n to[key] = from[key];\n } else {\n Object.assign(to[key], from[key]);\n }\n }\n }\n\n return to;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU0sSUFDSixNQUFNLENBQUMsT0FBUCxDQUFnQixDQUFELElBQ2IsWUFBWSxDQUFDLEVBQUQsRUFBSyxDQUFMLEVBQVEsUUFBUixDQURkLENBREY7O0FBS0EsT0FBSyxNQUFNLEdBQVgsSUFBa0IsQ0FBQyxVQUFELEVBQWEsUUFBYixDQUFsQixFQUEwQztBQUN4QyxRQUFJLE1BQU0sQ0FBQyxTQUFQLENBQWlCLGNBQWpCLENBQWdDLElBQWhDLENBQXFDLElBQXJDLEVBQTJDLEdBQTNDLENBQUosRUFBcUQ7QUFDbkQsVUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFELENBQVAsRUFBYztBQUNaLFVBQUUsQ0FBQyxHQUFELENBQUYsR0FBVSxJQUFJLENBQUMsR0FBRCxDQUFkO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsY0FBTSxDQUFDLE1BQVAsQ0FBYyxFQUFFLENBQUMsR0FBRCxDQUFoQixFQUF1QixJQUFJLENBQUMsR0FBRCxDQUEzQjtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPLEVBQVA7QUFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vLi4vc3JjL2NvbXBvbmVudHMvZGF0YS50cz9kMTZlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDdXN0b21JbnN0YW5jZURldGFpbHMgPSBleHBvcnRzLmVkaXRTdGF0ZSA9IGV4cG9ydHMuZ2V0SW5zdGFuY2VEZXRhaWxzID0gdm9pZCAwO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY29uc3QgdXRpbF8yID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG4vKipcbiAqIEdldCB0aGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb2YgYW4gaW5zcGVjdGVkIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBnZXRJbnN0YW5jZURldGFpbHMoaW5zdGFuY2UsIGN0eCkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogKDAsIHV0aWxfMS5nZXRVbmlxdWVDb21wb25lbnRJZCkoaW5zdGFuY2UsIGN0eCksXG4gICAgICAgIG5hbWU6ICgwLCB1dGlsXzEuZ2V0SW5zdGFuY2VOYW1lKShpbnN0YW5jZSksXG4gICAgICAgIGZpbGU6IChfYSA9IGluc3RhbmNlLnR5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5fX2ZpbGUsXG4gICAgICAgIHN0YXRlOiBnZXRJbnN0YW5jZVN0YXRlKGluc3RhbmNlKSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRJbnN0YW5jZURldGFpbHMgPSBnZXRJbnN0YW5jZURldGFpbHM7XG5mdW5jdGlvbiBnZXRJbnN0YW5jZVN0YXRlKGluc3RhbmNlKSB7XG4gICAgY29uc3QgbWVyZ2VkVHlwZSA9IHJlc29sdmVNZXJnZWRPcHRpb25zKGluc3RhbmNlKTtcbiAgICByZXR1cm4gcHJvY2Vzc1Byb3BzKGluc3RhbmNlKS5jb25jYXQocHJvY2Vzc1N0YXRlKGluc3RhbmNlKSwgcHJvY2Vzc1NldHVwU3RhdGUoaW5zdGFuY2UpLCBwcm9jZXNzQ29tcHV0ZWQoaW5zdGFuY2UsIG1lcmdlZFR5cGUpLCBwcm9jZXNzQXR0cnMoaW5zdGFuY2UpLCBwcm9jZXNzUHJvdmlkZShpbnN0YW5jZSksIHByb2Nlc3NJbmplY3QoaW5zdGFuY2UsIG1lcmdlZFR5cGUpLCBwcm9jZXNzUmVmcyhpbnN0YW5jZSkpO1xufVxuLyoqXG4gKiBQcm9jZXNzIHRoZSBwcm9wcyBvZiBhbiBpbnN0YW5jZS5cbiAqIE1ha2Ugc3VyZSByZXR1cm4gYSBwbGFpbiBvYmplY3QgYmVjYXVzZSB3aW5kb3cucG9zdE1lc3NhZ2UoKVxuICogd2lsbCB0aHJvdyBhbiBFcnJvciBpZiB0aGUgcGFzc2VkIG9iamVjdCBjb250YWlucyBGdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtWdWV9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1Byb3BzKGluc3RhbmNlKSB7XG4gICAgY29uc3QgcHJvcHNEYXRhID0gW107XG4gICAgY29uc3QgcHJvcERlZmluaXRpb25zID0gaW5zdGFuY2UudHlwZS5wcm9wcztcbiAgICBmb3IgKGxldCBrZXkgaW4gaW5zdGFuY2UucHJvcHMpIHtcbiAgICAgICAgY29uc3QgcHJvcERlZmluaXRpb24gPSBwcm9wRGVmaW5pdGlvbnMgPyBwcm9wRGVmaW5pdGlvbnNba2V5XSA6IG51bGw7XG4gICAgICAgIGtleSA9ICgwLCBzaGFyZWRfdXRpbHNfMS5jYW1lbGl6ZSkoa2V5KTtcbiAgICAgICAgcHJvcHNEYXRhLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3Byb3BzJyxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlOiAoMCwgdXRpbF8yLnJldHVybkVycm9yKSgoKSA9PiBpbnN0YW5jZS5wcm9wc1trZXldKSxcbiAgICAgICAgICAgIG1ldGE6IHByb3BEZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHByb3BEZWZpbml0aW9uLnR5cGUgPyBnZXRQcm9wVHlwZShwcm9wRGVmaW5pdGlvbi50eXBlKSA6ICdhbnknLFxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogISFwcm9wRGVmaW5pdGlvbi5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJvcERlZmluaXRpb24uZGVmYXVsdCAhPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBwcm9wRGVmaW5pdGlvbi5kZWZhdWx0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ludmFsaWQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlZGl0YWJsZTogc2hhcmVkX3V0aWxzXzEuU2hhcmVkRGF0YS5lZGl0YWJsZVByb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3BzRGF0YTtcbn1cbmNvbnN0IGZuVHlwZVJFID0gL14oPzpmdW5jdGlvbnxjbGFzcykgKFxcdyspLztcbi8qKlxuICogQ29udmVydCBwcm9wIHR5cGUgY29uc3RydWN0b3IgdG8gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRQcm9wVHlwZSh0eXBlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUubWFwKHQgPT4gZ2V0UHJvcFR5cGUodCkpLmpvaW4oJyBvciAnKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaCA9IHR5cGUudG9TdHJpbmcoKS5tYXRjaChmblR5cGVSRSk7XG4gICAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCAnYW55J1xuICAgICAgICA6ICdhbnknO1xufVxuLyoqXG4gKiBQcm9jZXNzIHN0YXRlLCBmaWx0ZXJpbmcgb3V0IHByb3BzIGFuZCBcImNsZWFuXCIgdGhlIHJlc3VsdFxuICogd2l0aCBhIEpTT04gZGFuY2UuIFRoaXMgcmVtb3ZlcyBmdW5jdGlvbnMgd2hpY2ggY2FuIGNhdXNlXG4gKiBlcnJvcnMgZHVyaW5nIHN0cnVjdHVyZWQgY2xvbmUgdXNlZCBieSB3aW5kb3cucG9zdE1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHtWdWV9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1N0YXRlKGluc3RhbmNlKSB7XG4gICAgY29uc3QgdHlwZSA9IGluc3RhbmNlLnR5cGU7XG4gICAgY29uc3QgcHJvcHMgPSB0eXBlLnByb3BzO1xuICAgIGNvbnN0IGdldHRlcnMgPSB0eXBlLnZ1ZXggJiZcbiAgICAgICAgdHlwZS52dWV4LmdldHRlcnM7XG4gICAgY29uc3QgY29tcHV0ZWREZWZzID0gdHlwZS5jb21wdXRlZDtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAuLi5pbnN0YW5jZS5kYXRhLFxuICAgICAgICAuLi5pbnN0YW5jZS5yZW5kZXJDb250ZXh0LFxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGRhdGEpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+ICghKHByb3BzICYmIGtleSBpbiBwcm9wcykgJiZcbiAgICAgICAgIShnZXR0ZXJzICYmIGtleSBpbiBnZXR0ZXJzKSAmJlxuICAgICAgICAhKGNvbXB1dGVkRGVmcyAmJiBrZXkgaW4gY29tcHV0ZWREZWZzKSkpXG4gICAgICAgIC5tYXAoa2V5ID0+ICh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdHlwZTogJ2RhdGEnLFxuICAgICAgICB2YWx1ZTogKDAsIHV0aWxfMi5yZXR1cm5FcnJvcikoKCkgPT4gZGF0YVtrZXldKSxcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgfSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1NldHVwU3RhdGUoaW5zdGFuY2UpIHtcbiAgICBjb25zdCByYXcgPSBpbnN0YW5jZS5kZXZ0b29sc1Jhd1NldHVwU3RhdGUgfHwge307XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGluc3RhbmNlLnNldHVwU3RhdGUpXG4gICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBjb25zdCB2YWx1ZSA9ICgwLCB1dGlsXzIucmV0dXJuRXJyb3IpKCgpID0+IGluc3RhbmNlLnNldHVwU3RhdGVba2V5XSk7XG4gICAgICAgIGNvbnN0IHJhd0RhdGEgPSByYXdba2V5XTtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgaWYgKHJhd0RhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBnZXRTZXR1cFN0YXRlSW5mbyhyYXdEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSBpbmZvLmNvbXB1dGVkID8gJ0NvbXB1dGVkJyA6IGluZm8ucmVmID8gJ1JlZicgOiBpbmZvLnJlYWN0aXZlID8gJ1JlYWN0aXZlJyA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBpc1N0YXRlID0gaW5mby5yZWYgfHwgaW5mby5jb21wdXRlZCB8fCBpbmZvLnJlYWN0aXZlO1xuICAgICAgICAgICAgY29uc3QgaXNPdGhlciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS5yZW5kZXIpID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgY29uc3QgcmF3ID0gKChfYiA9IChfYSA9IHJhd0RhdGEuZWZmZWN0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmF3KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudG9TdHJpbmcoKSkgfHwgKChfZCA9IChfYyA9IHJhd0RhdGEuZWZmZWN0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuZm4pID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAuLi5vYmplY3RUeXBlID8geyBvYmplY3RUeXBlIH0gOiB7fSxcbiAgICAgICAgICAgICAgICAuLi5yYXcgPyB7IHJhdyB9IDoge30sXG4gICAgICAgICAgICAgICAgZWRpdGFibGU6IGlzU3RhdGUgJiYgIWluZm8ucmVhZG9ubHksXG4gICAgICAgICAgICAgICAgdHlwZTogaXNPdGhlciA/ICdzZXR1cCAob3RoZXIpJyA6ICdzZXR1cCcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzZXR1cCcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVmKHJhdykge1xuICAgIHJldHVybiAhIXJhdy5fX3ZfaXNSZWY7XG59XG5mdW5jdGlvbiBpc0NvbXB1dGVkKHJhdykge1xuICAgIHJldHVybiBpc1JlZihyYXcpICYmICEhcmF3LmVmZmVjdDtcbn1cbmZ1bmN0aW9uIGlzUmVhY3RpdmUocmF3KSB7XG4gICAgcmV0dXJuICEhcmF3Ll9fdl9pc1JlYWN0aXZlO1xufVxuZnVuY3Rpb24gaXNSZWFkT25seShyYXcpIHtcbiAgICByZXR1cm4gISFyYXcuX192X2lzUmVhZG9ubHk7XG59XG5mdW5jdGlvbiBnZXRTZXR1cFN0YXRlSW5mbyhyYXcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICByZWY6IGlzUmVmKHJhdyksXG4gICAgICAgIGNvbXB1dGVkOiBpc0NvbXB1dGVkKHJhdyksXG4gICAgICAgIHJlYWN0aXZlOiBpc1JlYWN0aXZlKHJhdyksXG4gICAgICAgIHJlYWRvbmx5OiBpc1JlYWRPbmx5KHJhdyksXG4gICAgfTtcbn1cbi8qKlxuICogUHJvY2VzcyB0aGUgY29tcHV0ZWQgcHJvcGVydGllcyBvZiBhbiBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge1Z1ZX0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29tcHV0ZWQoaW5zdGFuY2UsIG1lcmdlZFR5cGUpIHtcbiAgICBjb25zdCB0eXBlID0gbWVyZ2VkVHlwZTtcbiAgICBjb25zdCBjb21wdXRlZCA9IFtdO1xuICAgIGNvbnN0IGRlZnMgPSB0eXBlLmNvbXB1dGVkIHx8IHt9O1xuICAgIC8vIHVzZSBmb3IuLi5pbiBoZXJlIGJlY2F1c2UgaWYgJ2NvbXB1dGVkJyBpcyBub3QgZGVmaW5lZFxuICAgIC8vIG9uIGNvbXBvbmVudCwgY29tcHV0ZWQgcHJvcGVydGllcyB3aWxsIGJlIHBsYWNlZCBpbiBwcm90b3R5cGVcbiAgICAvLyBhbmQgT2JqZWN0LmtleXMgZG9lcyBub3QgaW5jbHVkZVxuICAgIC8vIHByb3BlcnRpZXMgZnJvbSBvYmplY3QncyBwcm90b3R5cGVcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkZWZzKSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IGRlZnNba2V5XTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZGVmLnZ1ZXhcbiAgICAgICAgICAgID8gJ3Z1ZXggYmluZGluZ3MnXG4gICAgICAgICAgICA6ICdjb21wdXRlZCc7XG4gICAgICAgIGNvbXB1dGVkLnB1c2goe1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlOiAoMCwgdXRpbF8yLnJldHVybkVycm9yKSgoKSA9PiBpbnN0YW5jZS5wcm94eVtrZXldKSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0eXBlb2YgZGVmLnNldCA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb21wdXRlZDtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NBdHRycyhpbnN0YW5jZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhpbnN0YW5jZS5hdHRycylcbiAgICAgICAgLm1hcChrZXkgPT4gKHtcbiAgICAgICAgdHlwZTogJ2F0dHJzJyxcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZTogKDAsIHV0aWxfMi5yZXR1cm5FcnJvcikoKCkgPT4gaW5zdGFuY2UuYXR0cnNba2V5XSksXG4gICAgfSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1Byb3ZpZGUoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKGluc3RhbmNlLnByb3ZpZGVzKVxuICAgICAgICAubWFwKGtleSA9PiAoe1xuICAgICAgICB0eXBlOiAncHJvdmlkZWQnLFxuICAgICAgICBrZXk6IGtleS50b1N0cmluZygpLFxuICAgICAgICB2YWx1ZTogKDAsIHV0aWxfMi5yZXR1cm5FcnJvcikoKCkgPT4gaW5zdGFuY2UucHJvdmlkZXNba2V5XSksXG4gICAgfSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0luamVjdChpbnN0YW5jZSwgbWVyZ2VkVHlwZSkge1xuICAgIGlmICghKG1lcmdlZFR5cGUgPT09IG51bGwgfHwgbWVyZ2VkVHlwZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVyZ2VkVHlwZS5pbmplY3QpKVxuICAgICAgICByZXR1cm4gW107XG4gICAgbGV0IGtleXMgPSBbXTtcbiAgICBsZXQgZGVmYXVsdFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1lcmdlZFR5cGUuaW5qZWN0KSkge1xuICAgICAgICBrZXlzID0gbWVyZ2VkVHlwZS5pbmplY3QubWFwKGtleSA9PiAoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgb3JpZ2luYWxLZXk6IGtleSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhtZXJnZWRUeXBlLmluamVjdCkubWFwKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1lcmdlZFR5cGUuaW5qZWN0W2tleV07XG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxLZXk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxLZXkgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsS2V5ID0gdmFsdWUuZnJvbTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB2YWx1ZS5kZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxLZXksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXMubWFwKCh7IGtleSwgb3JpZ2luYWxLZXkgfSkgPT4gKHtcbiAgICAgICAgdHlwZTogJ2luamVjdGVkJyxcbiAgICAgICAga2V5OiBvcmlnaW5hbEtleSAmJiBrZXkgIT09IG9yaWdpbmFsS2V5ID8gYCR7b3JpZ2luYWxLZXkudG9TdHJpbmcoKX0g4p6eICR7a2V5LnRvU3RyaW5nKCl9YCA6IGtleS50b1N0cmluZygpLFxuICAgICAgICB2YWx1ZTogKDAsIHV0aWxfMi5yZXR1cm5FcnJvcikoKCkgPT4gaW5zdGFuY2UuY3R4W2tleV0gfHwgaW5zdGFuY2UucHJvdmlkZXNbb3JpZ2luYWxLZXldIHx8IGRlZmF1bHRWYWx1ZSksXG4gICAgfSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1JlZnMoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaW5zdGFuY2UucmVmcylcbiAgICAgICAgLm1hcChrZXkgPT4gKHtcbiAgICAgICAgdHlwZTogJ3JlZnMnLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiAoMCwgdXRpbF8yLnJldHVybkVycm9yKSgoKSA9PiBpbnN0YW5jZS5yZWZzW2tleV0pLFxuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIGVkaXRTdGF0ZSh7IGNvbXBvbmVudEluc3RhbmNlLCBwYXRoLCBzdGF0ZSwgdHlwZSB9LCBzdGF0ZUVkaXRvciwgY3R4KSB7XG4gICAgaWYgKCFbJ2RhdGEnLCAncHJvcHMnLCAnY29tcHV0ZWQnLCAnc2V0dXAnXS5pbmNsdWRlcyh0eXBlKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCB0YXJnZXQ7XG4gICAgY29uc3QgdGFyZ2V0UGF0aCA9IHBhdGguc2xpY2UoKTtcbiAgICBpZiAoT2JqZWN0LmtleXMoY29tcG9uZW50SW5zdGFuY2UucHJvcHMpLmluY2x1ZGVzKHBhdGhbMF0pKSB7XG4gICAgICAgIC8vIFByb3BzXG4gICAgICAgIHRhcmdldCA9IGNvbXBvbmVudEluc3RhbmNlLnByb3BzO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb21wb25lbnRJbnN0YW5jZS5kZXZ0b29sc1Jhd1NldHVwU3RhdGUgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50SW5zdGFuY2UuZGV2dG9vbHNSYXdTZXR1cFN0YXRlKS5pbmNsdWRlcyhwYXRoWzBdKSkge1xuICAgICAgICAvLyBTZXR1cFxuICAgICAgICB0YXJnZXQgPSBjb21wb25lbnRJbnN0YW5jZS5kZXZ0b29sc1Jhd1NldHVwU3RhdGU7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHN0YXRlRWRpdG9yLmdldChjb21wb25lbnRJbnN0YW5jZS5kZXZ0b29sc1Jhd1NldHVwU3RhdGUsIHBhdGgpO1xuICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBnZXRTZXR1cFN0YXRlSW5mbyhjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgaWYgKGluZm8ucmVhZG9ubHkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YXJnZXQgPSBjb21wb25lbnRJbnN0YW5jZS5wcm94eTtcbiAgICB9XG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXRQYXRoKSB7XG4gICAgICAgIHN0YXRlRWRpdG9yLnNldCh0YXJnZXQsIHRhcmdldFBhdGgsICd2YWx1ZScgaW4gc3RhdGUgPyBzdGF0ZS52YWx1ZSA6IHVuZGVmaW5lZCwgc3RhdGVFZGl0b3IuY3JlYXRlRGVmYXVsdFNldENhbGxiYWNrKHN0YXRlKSk7XG4gICAgfVxufVxuZXhwb3J0cy5lZGl0U3RhdGUgPSBlZGl0U3RhdGU7XG5mdW5jdGlvbiByZWR1Y2VTdGF0ZUxpc3QobGlzdCkge1xuICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3QucmVkdWNlKChtYXAsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gaXRlbS50eXBlIHx8ICdkYXRhJztcbiAgICAgICAgY29uc3Qgb2JqID0gbWFwW2tleV0gPSBtYXBba2V5XSB8fCB7fTtcbiAgICAgICAgb2JqW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWU7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfSwge30pO1xufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLl8pXG4gICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UuXztcbiAgICBjb25zdCBzdGF0ZSA9IGdldEluc3RhbmNlU3RhdGUoaW5zdGFuY2UpO1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdjb21wb25lbnQnLFxuICAgICAgICAgICAgaWQ6IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLFxuICAgICAgICAgICAgZGlzcGxheTogKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKSxcbiAgICAgICAgICAgIHRvb2x0aXA6ICdDb21wb25lbnQgaW5zdGFuY2UnLFxuICAgICAgICAgICAgdmFsdWU6IHJlZHVjZVN0YXRlTGlzdChzdGF0ZSksXG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzID0gZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzO1xuZnVuY3Rpb24gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoaW5zdGFuY2UpIHtcbiAgICBjb25zdCByYXcgPSBpbnN0YW5jZS50eXBlO1xuICAgIGNvbnN0IHsgbWl4aW5zLCBleHRlbmRzOiBleHRlbmRzT3B0aW9ucyB9ID0gcmF3O1xuICAgIGNvbnN0IGdsb2JhbE1peGlucyA9IGluc3RhbmNlLmFwcENvbnRleHQubWl4aW5zO1xuICAgIGlmICghZ2xvYmFsTWl4aW5zLmxlbmd0aCAmJiAhbWl4aW5zICYmICFleHRlbmRzT3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHJhdztcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgZ2xvYmFsTWl4aW5zLmZvckVhY2gobSA9PiBtZXJnZU9wdGlvbnMob3B0aW9ucywgbSwgaW5zdGFuY2UpKTtcbiAgICBtZXJnZU9wdGlvbnMob3B0aW9ucywgcmF3LCBpbnN0YW5jZSk7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20sIGluc3RhbmNlKSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZyb20gPSBmcm9tLm9wdGlvbnM7XG4gICAgfVxuICAgIGlmICghZnJvbSlcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIGNvbnN0IHsgbWl4aW5zLCBleHRlbmRzOiBleHRlbmRzT3B0aW9ucyB9ID0gZnJvbTtcbiAgICBleHRlbmRzT3B0aW9ucyAmJiBtZXJnZU9wdGlvbnModG8sIGV4dGVuZHNPcHRpb25zLCBpbnN0YW5jZSk7XG4gICAgbWl4aW5zICYmXG4gICAgICAgIG1peGlucy5mb3JFYWNoKChtKSA9PiBtZXJnZU9wdGlvbnModG8sIG0sIGluc3RhbmNlKSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgWydjb21wdXRlZCcsICdpbmplY3QnXSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcbiAgICAgICAgICAgIGlmICghdG9ba2V5XSkge1xuICAgICAgICAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRvW2tleV0sIGZyb21ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42054\n");
|
|
350
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getCustomInstanceDetails = exports.editState = exports.getCustomObjectDetails = exports.getInstanceDetails = void 0;\n\nconst util_1 = __webpack_require__(33756);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst util_2 = __webpack_require__(77858);\n/**\n * Get the detailed information of an inspected instance.\n */\n\n\nfunction getInstanceDetails(instance, ctx) {\n var _a;\n\n return {\n id: (0, util_1.getUniqueComponentId)(instance, ctx),\n name: (0, util_1.getInstanceName)(instance),\n file: (_a = instance.type) === null || _a === void 0 ? void 0 : _a.__file,\n state: getInstanceState(instance)\n };\n}\n\nexports.getInstanceDetails = getInstanceDetails;\n\nfunction getInstanceState(instance) {\n const mergedType = resolveMergedOptions(instance);\n return processProps(instance).concat(processState(instance), processSetupState(instance), processComputed(instance, mergedType), processAttrs(instance), processProvide(instance), processInject(instance, mergedType), processRefs(instance));\n}\n/**\n * Process the props of an instance.\n * Make sure return a plain object because window.postMessage()\n * will throw an Error if the passed object contains Functions.\n *\n * @param {Vue} instance\n * @return {Array}\n */\n\n\nfunction processProps(instance) {\n const propsData = [];\n const propDefinitions = instance.type.props;\n\n for (let key in instance.props) {\n const propDefinition = propDefinitions ? propDefinitions[key] : null;\n key = (0, shared_utils_1.camelize)(key);\n propsData.push({\n type: 'props',\n key,\n value: (0, util_2.returnError)(() => instance.props[key]),\n meta: propDefinition ? {\n type: propDefinition.type ? getPropType(propDefinition.type) : 'any',\n required: !!propDefinition.required,\n ...(propDefinition.default != null ? {\n default: propDefinition.default.toString()\n } : {})\n } : {\n type: 'invalid'\n },\n editable: shared_utils_1.SharedData.editableProps\n });\n }\n\n return propsData;\n}\n\nconst fnTypeRE = /^(?:function|class) (\\w+)/;\n/**\n * Convert prop type constructor to string.\n */\n\nfunction getPropType(type) {\n if (Array.isArray(type)) {\n return type.map(t => getPropType(t)).join(' or ');\n }\n\n if (type == null) {\n return 'null';\n }\n\n const match = type.toString().match(fnTypeRE);\n return typeof type === 'function' ? match && match[1] || 'any' : 'any';\n}\n/**\n * Process state, filtering out props and \"clean\" the result\n * with a JSON dance. This removes functions which can cause\n * errors during structured clone used by window.postMessage.\n *\n * @param {Vue} instance\n * @return {Array}\n */\n\n\nfunction processState(instance) {\n const type = instance.type;\n const props = type.props;\n const getters = type.vuex && type.vuex.getters;\n const computedDefs = type.computed;\n const data = { ...instance.data,\n ...instance.renderContext\n };\n return Object.keys(data).filter(key => !(props && key in props) && !(getters && key in getters) && !(computedDefs && key in computedDefs)).map(key => ({\n key,\n type: 'data',\n value: (0, util_2.returnError)(() => data[key]),\n editable: true\n }));\n}\n\nfunction processSetupState(instance) {\n const raw = instance.devtoolsRawSetupState || {};\n return Object.keys(instance.setupState).map(key => {\n var _a, _b, _c, _d;\n\n const value = (0, util_2.returnError)(() => toRaw(instance.setupState[key]));\n const rawData = raw[key];\n let result;\n\n if (rawData) {\n const info = getSetupStateInfo(rawData);\n const objectType = info.computed ? 'Computed' : info.ref ? 'Ref' : info.reactive ? 'Reactive' : null;\n const isState = info.ref || info.computed || info.reactive;\n const isOther = typeof value === 'function' || typeof (value === null || value === void 0 ? void 0 : value.render) === 'function';\n const raw = ((_b = (_a = rawData.effect) === null || _a === void 0 ? void 0 : _a.raw) === null || _b === void 0 ? void 0 : _b.toString()) || ((_d = (_c = rawData.effect) === null || _c === void 0 ? void 0 : _c.fn) === null || _d === void 0 ? void 0 : _d.toString());\n result = { ...(objectType ? {\n objectType\n } : {}),\n ...(raw ? {\n raw\n } : {}),\n editable: isState && !info.readonly,\n type: isOther ? 'setup (other)' : 'setup'\n };\n } else {\n result = {\n type: 'setup'\n };\n }\n\n return {\n key,\n value,\n ...result\n };\n });\n}\n\nfunction isRef(raw) {\n return !!raw.__v_isRef;\n}\n\nfunction isComputed(raw) {\n return isRef(raw) && !!raw.effect;\n}\n\nfunction isReactive(raw) {\n return !!raw.__v_isReactive;\n}\n\nfunction isReadOnly(raw) {\n return !!raw.__v_isReadonly;\n}\n\nfunction toRaw(value) {\n if (value === null || value === void 0 ? void 0 : value.__v_raw) {\n return value.__v_raw;\n }\n\n return value;\n}\n\nfunction getSetupStateInfo(raw) {\n return {\n ref: isRef(raw),\n computed: isComputed(raw),\n reactive: isReactive(raw),\n readonly: isReadOnly(raw)\n };\n}\n\nfunction getCustomObjectDetails(object, proto) {\n var _a, _b, _c, _d;\n\n const info = getSetupStateInfo(object);\n const isState = info.ref || info.computed || info.reactive;\n\n if (isState) {\n const objectType = info.computed ? 'Computed' : info.ref ? 'Ref' : info.reactive ? 'Reactive' : null;\n const value = toRaw(info.reactive ? object : object._value);\n const raw = ((_b = (_a = object.effect) === null || _a === void 0 ? void 0 : _a.raw) === null || _b === void 0 ? void 0 : _b.toString()) || ((_d = (_c = object.effect) === null || _c === void 0 ? void 0 : _c.fn) === null || _d === void 0 ? void 0 : _d.toString());\n return {\n _custom: {\n type: objectType.toLowerCase(),\n objectType,\n readOnly: true,\n value,\n ...(raw ? {\n tooltip: `<span class=\"font-mono\">${raw}</span>`\n } : {})\n }\n };\n }\n}\n\nexports.getCustomObjectDetails = getCustomObjectDetails;\n/**\n * Process the computed properties of an instance.\n *\n * @param {Vue} instance\n * @return {Array}\n */\n\nfunction processComputed(instance, mergedType) {\n const type = mergedType;\n const computed = [];\n const defs = type.computed || {}; // use for...in here because if 'computed' is not defined\n // on component, computed properties will be placed in prototype\n // and Object.keys does not include\n // properties from object's prototype\n\n for (const key in defs) {\n const def = defs[key];\n const type = typeof def === 'function' && def.vuex ? 'vuex bindings' : 'computed';\n computed.push({\n type,\n key,\n value: (0, util_2.returnError)(() => instance.proxy[key]),\n editable: typeof def.set === 'function'\n });\n }\n\n return computed;\n}\n\nfunction processAttrs(instance) {\n return Object.keys(instance.attrs).map(key => ({\n type: 'attrs',\n key,\n value: (0, util_2.returnError)(() => instance.attrs[key])\n }));\n}\n\nfunction processProvide(instance) {\n return Reflect.ownKeys(instance.provides).map(key => ({\n type: 'provided',\n key: key.toString(),\n value: (0, util_2.returnError)(() => instance.provides[key])\n }));\n}\n\nfunction processInject(instance, mergedType) {\n if (!(mergedType === null || mergedType === void 0 ? void 0 : mergedType.inject)) return [];\n let keys = [];\n let defaultValue;\n\n if (Array.isArray(mergedType.inject)) {\n keys = mergedType.inject.map(key => ({\n key,\n originalKey: key\n }));\n } else {\n keys = Reflect.ownKeys(mergedType.inject).map(key => {\n const value = mergedType.inject[key];\n let originalKey;\n\n if (typeof value === 'string' || typeof value === 'symbol') {\n originalKey = value;\n } else {\n originalKey = value.from;\n defaultValue = value.default;\n }\n\n return {\n key,\n originalKey\n };\n });\n }\n\n return keys.map(({\n key,\n originalKey\n }) => ({\n type: 'injected',\n key: originalKey && key !== originalKey ? `${originalKey.toString()} ➞ ${key.toString()}` : key.toString(),\n value: (0, util_2.returnError)(() => instance.ctx[key] || instance.provides[originalKey] || defaultValue)\n }));\n}\n\nfunction processRefs(instance) {\n return Object.keys(instance.refs).map(key => ({\n type: 'refs',\n key,\n value: (0, util_2.returnError)(() => instance.refs[key])\n }));\n}\n\nfunction editState({\n componentInstance,\n path,\n state,\n type\n}, stateEditor, ctx) {\n if (!['data', 'props', 'computed', 'setup'].includes(type)) return;\n let target;\n const targetPath = path.slice();\n\n if (Object.keys(componentInstance.props).includes(path[0])) {\n // Props\n target = componentInstance.props;\n } else if (componentInstance.devtoolsRawSetupState && Object.keys(componentInstance.devtoolsRawSetupState).includes(path[0])) {\n // Setup\n target = componentInstance.devtoolsRawSetupState;\n const currentValue = stateEditor.get(componentInstance.devtoolsRawSetupState, path);\n\n if (currentValue != null) {\n const info = getSetupStateInfo(currentValue);\n if (info.readonly) return;\n }\n } else {\n target = componentInstance.proxy;\n }\n\n if (target && targetPath) {\n stateEditor.set(target, targetPath, 'value' in state ? state.value : undefined, stateEditor.createDefaultSetCallback(state));\n }\n}\n\nexports.editState = editState;\n\nfunction reduceStateList(list) {\n if (!list.length) {\n return undefined;\n }\n\n return list.reduce((map, item) => {\n const key = item.type || 'data';\n const obj = map[key] = map[key] || {};\n obj[item.key] = item.value;\n return map;\n }, {});\n}\n\nfunction getCustomInstanceDetails(instance) {\n if (instance._) instance = instance._;\n const state = getInstanceState(instance);\n return {\n _custom: {\n type: 'component',\n id: instance.__VUE_DEVTOOLS_UID__,\n display: (0, util_1.getInstanceName)(instance),\n tooltip: 'Component instance',\n value: reduceStateList(state),\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomInstanceDetails = getCustomInstanceDetails;\n\nfunction resolveMergedOptions(instance) {\n const raw = instance.type;\n const {\n mixins,\n extends: extendsOptions\n } = raw;\n const globalMixins = instance.appContext.mixins;\n if (!globalMixins.length && !mixins && !extendsOptions) return raw;\n const options = {};\n globalMixins.forEach(m => mergeOptions(options, m, instance));\n mergeOptions(options, raw, instance);\n return options;\n}\n\nfunction mergeOptions(to, from, instance) {\n if (typeof from === 'function') {\n from = from.options;\n }\n\n if (!from) return to;\n const {\n mixins,\n extends: extendsOptions\n } = from;\n extendsOptions && mergeOptions(to, extendsOptions, instance);\n mixins && mixins.forEach(m => mergeOptions(to, m, instance));\n\n for (const key of ['computed', 'inject']) {\n if (Object.prototype.hasOwnProperty.call(from, key)) {\n if (!to[key]) {\n to[key] = from[key];\n } else {\n Object.assign(to[key], from[key]);\n }\n }\n }\n\n return to;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBTCxFQUFXLE9BQU8sRUFBUDtBQUVYLFFBQU07QUFBRSxVQUFGO0FBQVUsV0FBTyxFQUFFO0FBQW5CLE1BQXNDLElBQTVDO0FBRUEsZ0JBQWMsSUFBSSxZQUFZLENBQUMsRUFBRCxFQUFLLGNBQUwsRUFBcUIsUUFBckIsQ0FBOUI7QUFDQSxRQUFNLElBQ0osTUFBTSxDQUFDLE9BQVAsQ0FBZ0IsQ0FBRCxJQUNiLFlBQVksQ0FBQyxFQUFELEVBQUssQ0FBTCxFQUFRLFFBQVIsQ0FEZCxDQURGOztBQUtBLE9BQUssTUFBTSxHQUFYLElBQWtCLENBQUMsVUFBRCxFQUFhLFFBQWIsQ0FBbEIsRUFBMEM7QUFDeEMsUUFBSSxNQUFNLENBQUMsU0FBUCxDQUFpQixjQUFqQixDQUFnQyxJQUFoQyxDQUFxQyxJQUFyQyxFQUEyQyxHQUEzQyxDQUFKLEVBQXFEO0FBQ25ELFVBQUksQ0FBQyxFQUFFLENBQUMsR0FBRCxDQUFQLEVBQWM7QUFDWixVQUFFLENBQUMsR0FBRCxDQUFGLEdBQVUsSUFBSSxDQUFDLEdBQUQsQ0FBZDtBQUNELE9BRkQsTUFFTztBQUNMLGNBQU0sQ0FBQyxNQUFQLENBQWMsRUFBRSxDQUFDLEdBQUQsQ0FBaEIsRUFBdUIsSUFBSSxDQUFDLEdBQUQsQ0FBM0I7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsU0FBTyxFQUFQO0FBQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uLy4uL3NyYy9jb21wb25lbnRzL2RhdGEudHM/ZDE2ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzID0gZXhwb3J0cy5lZGl0U3RhdGUgPSBleHBvcnRzLmdldEN1c3RvbU9iamVjdERldGFpbHMgPSBleHBvcnRzLmdldEluc3RhbmNlRGV0YWlscyA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuLyoqXG4gKiBHZXQgdGhlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9mIGFuIGluc3BlY3RlZCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SW5zdGFuY2VEZXRhaWxzKGluc3RhbmNlLCBjdHgpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6ICgwLCB1dGlsXzEuZ2V0VW5pcXVlQ29tcG9uZW50SWQpKGluc3RhbmNlLCBjdHgpLFxuICAgICAgICBuYW1lOiAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkoaW5zdGFuY2UpLFxuICAgICAgICBmaWxlOiAoX2EgPSBpbnN0YW5jZS50eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuX19maWxlLFxuICAgICAgICBzdGF0ZTogZ2V0SW5zdGFuY2VTdGF0ZShpbnN0YW5jZSksXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0SW5zdGFuY2VEZXRhaWxzID0gZ2V0SW5zdGFuY2VEZXRhaWxzO1xuZnVuY3Rpb24gZ2V0SW5zdGFuY2VTdGF0ZShpbnN0YW5jZSkge1xuICAgIGNvbnN0IG1lcmdlZFR5cGUgPSByZXNvbHZlTWVyZ2VkT3B0aW9ucyhpbnN0YW5jZSk7XG4gICAgcmV0dXJuIHByb2Nlc3NQcm9wcyhpbnN0YW5jZSkuY29uY2F0KHByb2Nlc3NTdGF0ZShpbnN0YW5jZSksIHByb2Nlc3NTZXR1cFN0YXRlKGluc3RhbmNlKSwgcHJvY2Vzc0NvbXB1dGVkKGluc3RhbmNlLCBtZXJnZWRUeXBlKSwgcHJvY2Vzc0F0dHJzKGluc3RhbmNlKSwgcHJvY2Vzc1Byb3ZpZGUoaW5zdGFuY2UpLCBwcm9jZXNzSW5qZWN0KGluc3RhbmNlLCBtZXJnZWRUeXBlKSwgcHJvY2Vzc1JlZnMoaW5zdGFuY2UpKTtcbn1cbi8qKlxuICogUHJvY2VzcyB0aGUgcHJvcHMgb2YgYW4gaW5zdGFuY2UuXG4gKiBNYWtlIHN1cmUgcmV0dXJuIGEgcGxhaW4gb2JqZWN0IGJlY2F1c2Ugd2luZG93LnBvc3RNZXNzYWdlKClcbiAqIHdpbGwgdGhyb3cgYW4gRXJyb3IgaWYgdGhlIHBhc3NlZCBvYmplY3QgY29udGFpbnMgRnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7VnVlfSBpbnN0YW5jZVxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NQcm9wcyhpbnN0YW5jZSkge1xuICAgIGNvbnN0IHByb3BzRGF0YSA9IFtdO1xuICAgIGNvbnN0IHByb3BEZWZpbml0aW9ucyA9IGluc3RhbmNlLnR5cGUucHJvcHM7XG4gICAgZm9yIChsZXQga2V5IGluIGluc3RhbmNlLnByb3BzKSB7XG4gICAgICAgIGNvbnN0IHByb3BEZWZpbml0aW9uID0gcHJvcERlZmluaXRpb25zID8gcHJvcERlZmluaXRpb25zW2tleV0gOiBudWxsO1xuICAgICAgICBrZXkgPSAoMCwgc2hhcmVkX3V0aWxzXzEuY2FtZWxpemUpKGtleSk7XG4gICAgICAgIHByb3BzRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwcm9wcycsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZTogKDAsIHV0aWxfMi5yZXR1cm5FcnJvcikoKCkgPT4gaW5zdGFuY2UucHJvcHNba2V5XSksXG4gICAgICAgICAgICBtZXRhOiBwcm9wRGVmaW5pdGlvblxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBwcm9wRGVmaW5pdGlvbi50eXBlID8gZ2V0UHJvcFR5cGUocHJvcERlZmluaXRpb24udHlwZSkgOiAnYW55JyxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICEhcHJvcERlZmluaXRpb24ucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BEZWZpbml0aW9uLmRlZmF1bHQgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcHJvcERlZmluaXRpb24uZGVmYXVsdC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdpbnZhbGlkJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgZWRpdGFibGU6IHNoYXJlZF91dGlsc18xLlNoYXJlZERhdGEuZWRpdGFibGVQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwcm9wc0RhdGE7XG59XG5jb25zdCBmblR5cGVSRSA9IC9eKD86ZnVuY3Rpb258Y2xhc3MpIChcXHcrKS87XG4vKipcbiAqIENvbnZlcnQgcHJvcCB0eXBlIGNvbnN0cnVjdG9yIHRvIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcFR5cGUodHlwZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlLm1hcCh0ID0+IGdldFByb3BUeXBlKHQpKS5qb2luKCcgb3IgJyk7XG4gICAgfVxuICAgIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSB0eXBlLnRvU3RyaW5nKCkubWF0Y2goZm5UeXBlUkUpO1xuICAgIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgJ2FueSdcbiAgICAgICAgOiAnYW55Jztcbn1cbi8qKlxuICogUHJvY2VzcyBzdGF0ZSwgZmlsdGVyaW5nIG91dCBwcm9wcyBhbmQgXCJjbGVhblwiIHRoZSByZXN1bHRcbiAqIHdpdGggYSBKU09OIGRhbmNlLiBUaGlzIHJlbW92ZXMgZnVuY3Rpb25zIHdoaWNoIGNhbiBjYXVzZVxuICogZXJyb3JzIGR1cmluZyBzdHJ1Y3R1cmVkIGNsb25lIHVzZWQgYnkgd2luZG93LnBvc3RNZXNzYWdlLlxuICpcbiAqIEBwYXJhbSB7VnVlfSBpbnN0YW5jZVxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NTdGF0ZShpbnN0YW5jZSkge1xuICAgIGNvbnN0IHR5cGUgPSBpbnN0YW5jZS50eXBlO1xuICAgIGNvbnN0IHByb3BzID0gdHlwZS5wcm9wcztcbiAgICBjb25zdCBnZXR0ZXJzID0gdHlwZS52dWV4ICYmXG4gICAgICAgIHR5cGUudnVleC5nZXR0ZXJzO1xuICAgIGNvbnN0IGNvbXB1dGVkRGVmcyA9IHR5cGUuY29tcHV0ZWQ7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgLi4uaW5zdGFuY2UuZGF0YSxcbiAgICAgICAgLi4uaW5zdGFuY2UucmVuZGVyQ29udGV4dCxcbiAgICB9O1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhkYXRhKVxuICAgICAgICAuZmlsdGVyKGtleSA9PiAoIShwcm9wcyAmJiBrZXkgaW4gcHJvcHMpICYmXG4gICAgICAgICEoZ2V0dGVycyAmJiBrZXkgaW4gZ2V0dGVycykgJiZcbiAgICAgICAgIShjb21wdXRlZERlZnMgJiYga2V5IGluIGNvbXB1dGVkRGVmcykpKVxuICAgICAgICAubWFwKGtleSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIHR5cGU6ICdkYXRhJyxcbiAgICAgICAgdmFsdWU6ICgwLCB1dGlsXzIucmV0dXJuRXJyb3IpKCgpID0+IGRhdGFba2V5XSksXG4gICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NTZXR1cFN0YXRlKGluc3RhbmNlKSB7XG4gICAgY29uc3QgcmF3ID0gaW5zdGFuY2UuZGV2dG9vbHNSYXdTZXR1cFN0YXRlIHx8IHt9O1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhpbnN0YW5jZS5zZXR1cFN0YXRlKVxuICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoMCwgdXRpbF8yLnJldHVybkVycm9yKSgoKSA9PiB0b1JhdyhpbnN0YW5jZS5zZXR1cFN0YXRlW2tleV0pKTtcbiAgICAgICAgY29uc3QgcmF3RGF0YSA9IHJhd1trZXldO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBpZiAocmF3RGF0YSkge1xuICAgICAgICAgICAgY29uc3QgaW5mbyA9IGdldFNldHVwU3RhdGVJbmZvKHJhd0RhdGEpO1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGluZm8uY29tcHV0ZWQgPyAnQ29tcHV0ZWQnIDogaW5mby5yZWYgPyAnUmVmJyA6IGluZm8ucmVhY3RpdmUgPyAnUmVhY3RpdmUnIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGlzU3RhdGUgPSBpbmZvLnJlZiB8fCBpbmZvLmNvbXB1dGVkIHx8IGluZm8ucmVhY3RpdmU7XG4gICAgICAgICAgICBjb25zdCBpc090aGVyID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnJlbmRlcikgPT09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICBjb25zdCByYXcgPSAoKF9iID0gKF9hID0gcmF3RGF0YS5lZmZlY3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yYXcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b1N0cmluZygpKSB8fCAoKF9kID0gKF9jID0gcmF3RGF0YS5lZmZlY3QpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5mbikgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIC4uLm9iamVjdFR5cGUgPyB7IG9iamVjdFR5cGUgfSA6IHt9LFxuICAgICAgICAgICAgICAgIC4uLnJhdyA/IHsgcmF3IH0gOiB7fSxcbiAgICAgICAgICAgICAgICBlZGl0YWJsZTogaXNTdGF0ZSAmJiAhaW5mby5yZWFkb25seSxcbiAgICAgICAgICAgICAgICB0eXBlOiBpc090aGVyID8gJ3NldHVwIChvdGhlciknIDogJ3NldHVwJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3NldHVwJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWYocmF3KSB7XG4gICAgcmV0dXJuICEhcmF3Ll9fdl9pc1JlZjtcbn1cbmZ1bmN0aW9uIGlzQ29tcHV0ZWQocmF3KSB7XG4gICAgcmV0dXJuIGlzUmVmKHJhdykgJiYgISFyYXcuZWZmZWN0O1xufVxuZnVuY3Rpb24gaXNSZWFjdGl2ZShyYXcpIHtcbiAgICByZXR1cm4gISFyYXcuX192X2lzUmVhY3RpdmU7XG59XG5mdW5jdGlvbiBpc1JlYWRPbmx5KHJhdykge1xuICAgIHJldHVybiAhIXJhdy5fX3ZfaXNSZWFkb25seTtcbn1cbmZ1bmN0aW9uIHRvUmF3KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS5fX3ZfcmF3KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5fX3ZfcmF3O1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTZXR1cFN0YXRlSW5mbyhyYXcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICByZWY6IGlzUmVmKHJhdyksXG4gICAgICAgIGNvbXB1dGVkOiBpc0NvbXB1dGVkKHJhdyksXG4gICAgICAgIHJlYWN0aXZlOiBpc1JlYWN0aXZlKHJhdyksXG4gICAgICAgIHJlYWRvbmx5OiBpc1JlYWRPbmx5KHJhdyksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldEN1c3RvbU9iamVjdERldGFpbHMob2JqZWN0LCBwcm90bykge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICBjb25zdCBpbmZvID0gZ2V0U2V0dXBTdGF0ZUluZm8ob2JqZWN0KTtcbiAgICBjb25zdCBpc1N0YXRlID0gaW5mby5yZWYgfHwgaW5mby5jb21wdXRlZCB8fCBpbmZvLnJlYWN0aXZlO1xuICAgIGlmIChpc1N0YXRlKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdFR5cGUgPSBpbmZvLmNvbXB1dGVkID8gJ0NvbXB1dGVkJyA6IGluZm8ucmVmID8gJ1JlZicgOiBpbmZvLnJlYWN0aXZlID8gJ1JlYWN0aXZlJyA6IG51bGw7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdG9SYXcoaW5mby5yZWFjdGl2ZSA/IG9iamVjdCA6IG9iamVjdC5fdmFsdWUpO1xuICAgICAgICBjb25zdCByYXcgPSAoKF9iID0gKF9hID0gb2JqZWN0LmVmZmVjdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhdykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRvU3RyaW5nKCkpIHx8ICgoX2QgPSAoX2MgPSBvYmplY3QuZWZmZWN0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuZm4pID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBvYmplY3RUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgb2JqZWN0VHlwZSxcbiAgICAgICAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAuLi5yYXcgPyB7IHRvb2x0aXA6IGA8c3BhbiBjbGFzcz1cImZvbnQtbW9ub1wiPiR7cmF3fTwvc3Bhbj5gIH0gOiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDdXN0b21PYmplY3REZXRhaWxzID0gZ2V0Q3VzdG9tT2JqZWN0RGV0YWlscztcbi8qKlxuICogUHJvY2VzcyB0aGUgY29tcHV0ZWQgcHJvcGVydGllcyBvZiBhbiBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge1Z1ZX0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29tcHV0ZWQoaW5zdGFuY2UsIG1lcmdlZFR5cGUpIHtcbiAgICBjb25zdCB0eXBlID0gbWVyZ2VkVHlwZTtcbiAgICBjb25zdCBjb21wdXRlZCA9IFtdO1xuICAgIGNvbnN0IGRlZnMgPSB0eXBlLmNvbXB1dGVkIHx8IHt9O1xuICAgIC8vIHVzZSBmb3IuLi5pbiBoZXJlIGJlY2F1c2UgaWYgJ2NvbXB1dGVkJyBpcyBub3QgZGVmaW5lZFxuICAgIC8vIG9uIGNvbXBvbmVudCwgY29tcHV0ZWQgcHJvcGVydGllcyB3aWxsIGJlIHBsYWNlZCBpbiBwcm90b3R5cGVcbiAgICAvLyBhbmQgT2JqZWN0LmtleXMgZG9lcyBub3QgaW5jbHVkZVxuICAgIC8vIHByb3BlcnRpZXMgZnJvbSBvYmplY3QncyBwcm90b3R5cGVcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkZWZzKSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IGRlZnNba2V5XTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZGVmLnZ1ZXhcbiAgICAgICAgICAgID8gJ3Z1ZXggYmluZGluZ3MnXG4gICAgICAgICAgICA6ICdjb21wdXRlZCc7XG4gICAgICAgIGNvbXB1dGVkLnB1c2goe1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlOiAoMCwgdXRpbF8yLnJldHVybkVycm9yKSgoKSA9PiBpbnN0YW5jZS5wcm94eVtrZXldKSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0eXBlb2YgZGVmLnNldCA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb21wdXRlZDtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NBdHRycyhpbnN0YW5jZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhpbnN0YW5jZS5hdHRycylcbiAgICAgICAgLm1hcChrZXkgPT4gKHtcbiAgICAgICAgdHlwZTogJ2F0dHJzJyxcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZTogKDAsIHV0aWxfMi5yZXR1cm5FcnJvcikoKCkgPT4gaW5zdGFuY2UuYXR0cnNba2V5XSksXG4gICAgfSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1Byb3ZpZGUoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKGluc3RhbmNlLnByb3ZpZGVzKVxuICAgICAgICAubWFwKGtleSA9PiAoe1xuICAgICAgICB0eXBlOiAncHJvdmlkZWQnLFxuICAgICAgICBrZXk6IGtleS50b1N0cmluZygpLFxuICAgICAgICB2YWx1ZTogKDAsIHV0aWxfMi5yZXR1cm5FcnJvcikoKCkgPT4gaW5zdGFuY2UucHJvdmlkZXNba2V5XSksXG4gICAgfSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0luamVjdChpbnN0YW5jZSwgbWVyZ2VkVHlwZSkge1xuICAgIGlmICghKG1lcmdlZFR5cGUgPT09IG51bGwgfHwgbWVyZ2VkVHlwZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVyZ2VkVHlwZS5pbmplY3QpKVxuICAgICAgICByZXR1cm4gW107XG4gICAgbGV0IGtleXMgPSBbXTtcbiAgICBsZXQgZGVmYXVsdFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1lcmdlZFR5cGUuaW5qZWN0KSkge1xuICAgICAgICBrZXlzID0gbWVyZ2VkVHlwZS5pbmplY3QubWFwKGtleSA9PiAoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgb3JpZ2luYWxLZXk6IGtleSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhtZXJnZWRUeXBlLmluamVjdCkubWFwKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1lcmdlZFR5cGUuaW5qZWN0W2tleV07XG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxLZXk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxLZXkgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsS2V5ID0gdmFsdWUuZnJvbTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB2YWx1ZS5kZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxLZXksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXMubWFwKCh7IGtleSwgb3JpZ2luYWxLZXkgfSkgPT4gKHtcbiAgICAgICAgdHlwZTogJ2luamVjdGVkJyxcbiAgICAgICAga2V5OiBvcmlnaW5hbEtleSAmJiBrZXkgIT09IG9yaWdpbmFsS2V5ID8gYCR7b3JpZ2luYWxLZXkudG9TdHJpbmcoKX0g4p6eICR7a2V5LnRvU3RyaW5nKCl9YCA6IGtleS50b1N0cmluZygpLFxuICAgICAgICB2YWx1ZTogKDAsIHV0aWxfMi5yZXR1cm5FcnJvcikoKCkgPT4gaW5zdGFuY2UuY3R4W2tleV0gfHwgaW5zdGFuY2UucHJvdmlkZXNbb3JpZ2luYWxLZXldIHx8IGRlZmF1bHRWYWx1ZSksXG4gICAgfSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1JlZnMoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaW5zdGFuY2UucmVmcylcbiAgICAgICAgLm1hcChrZXkgPT4gKHtcbiAgICAgICAgdHlwZTogJ3JlZnMnLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiAoMCwgdXRpbF8yLnJldHVybkVycm9yKSgoKSA9PiBpbnN0YW5jZS5yZWZzW2tleV0pLFxuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIGVkaXRTdGF0ZSh7IGNvbXBvbmVudEluc3RhbmNlLCBwYXRoLCBzdGF0ZSwgdHlwZSB9LCBzdGF0ZUVkaXRvciwgY3R4KSB7XG4gICAgaWYgKCFbJ2RhdGEnLCAncHJvcHMnLCAnY29tcHV0ZWQnLCAnc2V0dXAnXS5pbmNsdWRlcyh0eXBlKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGxldCB0YXJnZXQ7XG4gICAgY29uc3QgdGFyZ2V0UGF0aCA9IHBhdGguc2xpY2UoKTtcbiAgICBpZiAoT2JqZWN0LmtleXMoY29tcG9uZW50SW5zdGFuY2UucHJvcHMpLmluY2x1ZGVzKHBhdGhbMF0pKSB7XG4gICAgICAgIC8vIFByb3BzXG4gICAgICAgIHRhcmdldCA9IGNvbXBvbmVudEluc3RhbmNlLnByb3BzO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb21wb25lbnRJbnN0YW5jZS5kZXZ0b29sc1Jhd1NldHVwU3RhdGUgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50SW5zdGFuY2UuZGV2dG9vbHNSYXdTZXR1cFN0YXRlKS5pbmNsdWRlcyhwYXRoWzBdKSkge1xuICAgICAgICAvLyBTZXR1cFxuICAgICAgICB0YXJnZXQgPSBjb21wb25lbnRJbnN0YW5jZS5kZXZ0b29sc1Jhd1NldHVwU3RhdGU7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHN0YXRlRWRpdG9yLmdldChjb21wb25lbnRJbnN0YW5jZS5kZXZ0b29sc1Jhd1NldHVwU3RhdGUsIHBhdGgpO1xuICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBnZXRTZXR1cFN0YXRlSW5mbyhjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgaWYgKGluZm8ucmVhZG9ubHkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YXJnZXQgPSBjb21wb25lbnRJbnN0YW5jZS5wcm94eTtcbiAgICB9XG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXRQYXRoKSB7XG4gICAgICAgIHN0YXRlRWRpdG9yLnNldCh0YXJnZXQsIHRhcmdldFBhdGgsICd2YWx1ZScgaW4gc3RhdGUgPyBzdGF0ZS52YWx1ZSA6IHVuZGVmaW5lZCwgc3RhdGVFZGl0b3IuY3JlYXRlRGVmYXVsdFNldENhbGxiYWNrKHN0YXRlKSk7XG4gICAgfVxufVxuZXhwb3J0cy5lZGl0U3RhdGUgPSBlZGl0U3RhdGU7XG5mdW5jdGlvbiByZWR1Y2VTdGF0ZUxpc3QobGlzdCkge1xuICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3QucmVkdWNlKChtYXAsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gaXRlbS50eXBlIHx8ICdkYXRhJztcbiAgICAgICAgY29uc3Qgb2JqID0gbWFwW2tleV0gPSBtYXBba2V5XSB8fCB7fTtcbiAgICAgICAgb2JqW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWU7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfSwge30pO1xufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLl8pXG4gICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UuXztcbiAgICBjb25zdCBzdGF0ZSA9IGdldEluc3RhbmNlU3RhdGUoaW5zdGFuY2UpO1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdjb21wb25lbnQnLFxuICAgICAgICAgICAgaWQ6IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLFxuICAgICAgICAgICAgZGlzcGxheTogKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKSxcbiAgICAgICAgICAgIHRvb2x0aXA6ICdDb21wb25lbnQgaW5zdGFuY2UnLFxuICAgICAgICAgICAgdmFsdWU6IHJlZHVjZVN0YXRlTGlzdChzdGF0ZSksXG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzID0gZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzO1xuZnVuY3Rpb24gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoaW5zdGFuY2UpIHtcbiAgICBjb25zdCByYXcgPSBpbnN0YW5jZS50eXBlO1xuICAgIGNvbnN0IHsgbWl4aW5zLCBleHRlbmRzOiBleHRlbmRzT3B0aW9ucyB9ID0gcmF3O1xuICAgIGNvbnN0IGdsb2JhbE1peGlucyA9IGluc3RhbmNlLmFwcENvbnRleHQubWl4aW5zO1xuICAgIGlmICghZ2xvYmFsTWl4aW5zLmxlbmd0aCAmJiAhbWl4aW5zICYmICFleHRlbmRzT3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHJhdztcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgZ2xvYmFsTWl4aW5zLmZvckVhY2gobSA9PiBtZXJnZU9wdGlvbnMob3B0aW9ucywgbSwgaW5zdGFuY2UpKTtcbiAgICBtZXJnZU9wdGlvbnMob3B0aW9ucywgcmF3LCBpbnN0YW5jZSk7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20sIGluc3RhbmNlKSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZyb20gPSBmcm9tLm9wdGlvbnM7XG4gICAgfVxuICAgIGlmICghZnJvbSlcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIGNvbnN0IHsgbWl4aW5zLCBleHRlbmRzOiBleHRlbmRzT3B0aW9ucyB9ID0gZnJvbTtcbiAgICBleHRlbmRzT3B0aW9ucyAmJiBtZXJnZU9wdGlvbnModG8sIGV4dGVuZHNPcHRpb25zLCBpbnN0YW5jZSk7XG4gICAgbWl4aW5zICYmXG4gICAgICAgIG1peGlucy5mb3JFYWNoKChtKSA9PiBtZXJnZU9wdGlvbnModG8sIG0sIGluc3RhbmNlKSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgWydjb21wdXRlZCcsICdpbmplY3QnXSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcbiAgICAgICAgICAgIGlmICghdG9ba2V5XSkge1xuICAgICAgICAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRvW2tleV0sIGZyb21ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42054\n");
|
|
327
351
|
|
|
328
352
|
/***/ }),
|
|
329
353
|
|
|
@@ -347,7 +371,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
347
371
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
348
372
|
|
|
349
373
|
"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: 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");
|
|
374
|
+
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 const list = this.isKeepAlive(instance) ? this.getKeepAliveCachedInstances(instance) : this.getInternalInstanceChildren(instance.subTree);\n return this.findQualifiedChildrenFromList(list, 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 (this.isKeepAlive(instance)) {\n const cachedComponents = this.getKeepAliveCachedInstances(instance);\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 isKeepAlive(instance) {\n return instance.type.__isKeepAlive && instance.__v_cache;\n }\n\n getKeepAliveCachedInstances(instance) {\n return Array.from(instance.__v_cache.values()).map(vnode => vnode.component).filter(Boolean);\n }\n\n}\n\nexports.ComponentWalker = ComponentWalker;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxXQUFXLENBQUMsR0FBWixDQUFnQixRQUFRLENBQUMsb0JBQXpCLENBQWQsRUFBOEQ7QUFDNUQsaUJBQVcsQ0FBQyxHQUFaLENBQWdCLFFBQVEsQ0FBQyxvQkFBekIsRUFBK0MsUUFBL0M7QUFDRDtBQUNGOztBQUVPLGFBQVcsQ0FBRSxRQUFGLEVBQVU7QUFDM0IsV0FBTyxRQUFRLENBQUMsSUFBVCxDQUFjLGFBQWQsSUFBK0IsUUFBUSxDQUFDLFNBQS9DO0FBQ0Q7O0FBRU8sNkJBQTJCLENBQUUsUUFBRixFQUFVO0FBQzNDLFdBQU8sS0FBSyxDQUFDLElBQU4sQ0FBVyxRQUFRLENBQUMsU0FBVCxDQUFtQixNQUFuQixFQUFYLEVBQXdDLEdBQXhDLENBQTZDLEtBQUQsSUFBZ0IsS0FBSyxDQUFDLFNBQWxFLEVBQTZFLE1BQTdFLENBQW9GLE9BQXBGLENBQVA7QUFDRDs7QUFoT3lCOztBQUE1QiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJlZS50cz80MDczIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db21wb25lbnRXYWxrZXIgPSB2b2lkIDA7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi9maWx0ZXJcIik7XG5jb25zdCBlbF8xID0gcmVxdWlyZShcIi4vZWxcIik7XG5jbGFzcyBDb21wb25lbnRXYWxrZXIge1xuICAgIGNvbnN0cnVjdG9yKG1heERlcHRoLCBmaWx0ZXIsIGFwaSwgY3R4KSB7XG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgICAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9IG1heERlcHRoO1xuICAgICAgICB0aGlzLmNvbXBvbmVudEZpbHRlciA9IG5ldyBmaWx0ZXJfMS5Db21wb25lbnRGaWx0ZXIoZmlsdGVyKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50VHJlZShpbnN0YW5jZSkge1xuICAgICAgICB0aGlzLmNhcHR1cmVJZHMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRRdWFsaWZpZWRDaGlsZHJlbihpbnN0YW5jZSwgMCk7XG4gICAgfVxuICAgIGdldENvbXBvbmVudFBhcmVudHMoaW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5jYXB0dXJlSWRzID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgICAgIHRoaXMuY2FwdHVyZUlkKGluc3RhbmNlKTtcbiAgICAgICAgbGV0IHBhcmVudCA9IGluc3RhbmNlO1xuICAgICAgICB3aGlsZSAoKHBhcmVudCA9IHBhcmVudC5wYXJlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHR1cmVJZChwYXJlbnQpO1xuICAgICAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpbmQgcXVhbGlmaWVkIGNoaWxkcmVuIGZyb20gYSBzaW5nbGUgaW5zdGFuY2UuXG4gICAgICogSWYgdGhlIGluc3RhbmNlIGl0c2VsZiBpcyBxdWFsaWZpZWQsIGp1c3QgcmV0dXJuIGl0c2VsZi5cbiAgICAgKiBUaGlzIGlzIG9rIGJlY2F1c2UgW10uY29uY2F0IHdvcmtzIGluIGJvdGggY2FzZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Z1ZXxWbm9kZX0gaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJuIHtWdWV8QXJyYXl9XG4gICAgICovXG4gICAgYXN5bmMgZmluZFF1YWxpZmllZENoaWxkcmVuKGluc3RhbmNlLCBkZXB0aCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudEZpbHRlci5pc1F1YWxpZmllZChpbnN0YW5jZSkgJiYgISgoX2EgPSBpbnN0YW5jZS50eXBlLmRldnRvb2xzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGlkZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbYXdhaXQgdGhpcy5jYXB0dXJlKGluc3RhbmNlLCBudWxsLCBkZXB0aCldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGluc3RhbmNlLnN1YlRyZWUpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5pc0tlZXBBbGl2ZShpbnN0YW5jZSlcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0S2VlcEFsaXZlQ2FjaGVkSW5zdGFuY2VzKGluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oaW5zdGFuY2Uuc3ViVHJlZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kUXVhbGlmaWVkQ2hpbGRyZW5Gcm9tTGlzdChsaXN0LCBkZXB0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlcmF0ZSB0aHJvdWdoIGFuIGFycmF5IG9mIGluc3RhbmNlcyBhbmQgZmxhdHRlbiBpdCBpbnRvXG4gICAgICogYW4gYXJyYXkgb2YgcXVhbGlmaWVkIGluc3RhbmNlcy4gVGhpcyBpcyBhIGRlcHRoLWZpcnN0XG4gICAgICogdHJhdmVyc2FsIC0gZS5nLiBpZiBhbiBpbnN0YW5jZSBpcyBub3QgbWF0Y2hlZCwgd2Ugd2lsbFxuICAgICAqIHJlY3Vyc2l2ZWx5IGdvIGRlZXBlciB1bnRpbCBhIHF1YWxpZmllZCBjaGlsZCBpcyBmb3VuZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGluc3RhbmNlc1xuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRRdWFsaWZpZWRDaGlsZHJlbkZyb21MaXN0KGluc3RhbmNlcywgZGVwdGgpIHtcbiAgICAgICAgaW5zdGFuY2VzID0gaW5zdGFuY2VzXG4gICAgICAgICAgICAuZmlsdGVyKGNoaWxkID0+IHsgdmFyIF9hOyByZXR1cm4gISgwLCB1dGlsXzEuaXNCZWluZ0Rlc3Ryb3llZCkoY2hpbGQpICYmICEoKF9hID0gY2hpbGQudHlwZS5kZXZ0b29scykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhpZGUpOyB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudEZpbHRlci5maWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChpbnN0YW5jZXMubWFwKChjaGlsZCwgaW5kZXgsIGxpc3QpID0+IHRoaXMuY2FwdHVyZShjaGlsZCwgbGlzdCwgZGVwdGgpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXdhaXQgUHJvbWlzZS5hbGwoaW5zdGFuY2VzLm1hcChpID0+IHRoaXMuZmluZFF1YWxpZmllZENoaWxkcmVuKGksIGRlcHRoKSkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgY2hpbGRyZW4gZnJvbSBhIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBnZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oc3ViVHJlZSwgc3VzcGVuc2UgPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICAgICAgaWYgKHN1YlRyZWUuY29tcG9uZW50KSB7XG4gICAgICAgICAgICAhc3VzcGVuc2UgPyBsaXN0LnB1c2goc3ViVHJlZS5jb21wb25lbnQpIDogbGlzdC5wdXNoKHsgLi4uc3ViVHJlZS5jb21wb25lbnQsIHN1c3BlbnNlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN1YlRyZWUuc3VzcGVuc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1c3BlbnNlS2V5ID0gIXN1YlRyZWUuc3VzcGVuc2UuaXNJbkZhbGxiYWNrID8gJ3N1c3BlbnNlIGRlZmF1bHQnIDogJ3N1c3BlbnNlIGZhbGxiYWNrJztcbiAgICAgICAgICAgIGxpc3QucHVzaCguLi50aGlzLmdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihzdWJUcmVlLnN1c3BlbnNlLmFjdGl2ZUJyYW5jaCwgeyAuLi5zdWJUcmVlLnN1c3BlbnNlLCBzdXNwZW5zZUtleSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzdWJUcmVlLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgc3ViVHJlZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkU3ViVHJlZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkU3ViVHJlZS5jb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgIXN1c3BlbnNlID8gbGlzdC5wdXNoKGNoaWxkU3ViVHJlZS5jb21wb25lbnQpIDogbGlzdC5wdXNoKHsgLi4uY2hpbGRTdWJUcmVlLmNvbXBvbmVudCwgc3VzcGVuc2UgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goLi4udGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlQ2hpbGRyZW4oY2hpbGRTdWJUcmVlLCBzdXNwZW5zZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXN0LmZpbHRlcihjaGlsZCA9PiB7IHZhciBfYTsgcmV0dXJuICEoMCwgdXRpbF8xLmlzQmVpbmdEZXN0cm95ZWQpKGNoaWxkKSAmJiAhKChfYSA9IGNoaWxkLnR5cGUuZGV2dG9vbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oaWRlKTsgfSk7XG4gICAgfVxuICAgIGNhcHR1cmVJZChpbnN0YW5jZSkge1xuICAgICAgICBpZiAoIWluc3RhbmNlKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIGluc3RhbmNlLnVpZCBpcyBub3QgcmVsaWFibGUgaW4gZGV2dG9vbHMgYXMgdGhlcmVcbiAgICAgICAgLy8gbWF5IGJlIDIgcm9vdHMgd2l0aCBzYW1lIHVpZCB3aGljaCBjYXVzZXMgdW5leHBlY3RlZFxuICAgICAgICAvLyBiZWhhdmlvdXJcbiAgICAgICAgY29uc3QgaWQgPSBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyAhPSBudWxsID8gaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18gOiAoMCwgdXRpbF8xLmdldFVuaXF1ZUNvbXBvbmVudElkKShpbnN0YW5jZSwgdGhpcy5jdHgpO1xuICAgICAgICBpbnN0YW5jZS5fX1ZVRV9ERVZUT09MU19VSURfXyA9IGlkO1xuICAgICAgICAvLyBEZWR1cGVcbiAgICAgICAgaWYgKHRoaXMuY2FwdHVyZUlkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhcHR1cmVJZHMuc2V0KGlkLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFyayhpbnN0YW5jZSk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FwdHVyZSB0aGUgbWV0YSBpbmZvcm1hdGlvbiBvZiBhbiBpbnN0YW5jZS4gKHJlY3Vyc2l2ZSlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VnVlfSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKi9cbiAgICBhc3luYyBjYXB0dXJlKGluc3RhbmNlLCBsaXN0LCBkZXB0aCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5jYXB0dXJlSWQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zdCBuYW1lID0gKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKGluc3RhbmNlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldEludGVybmFsSW5zdGFuY2VDaGlsZHJlbihpbnN0YW5jZS5zdWJUcmVlKVxuICAgICAgICAgICAgLmZpbHRlcihjaGlsZCA9PiAhKDAsIHV0aWxfMS5pc0JlaW5nRGVzdHJveWVkKShjaGlsZCkpO1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gdGhpcy5nZXRDb21wb25lbnRQYXJlbnRzKGluc3RhbmNlKSB8fCBbXTtcbiAgICAgICAgY29uc3QgaW5hY3RpdmUgPSAhIWluc3RhbmNlLmlzRGVhY3RpdmF0ZWQgfHwgcGFyZW50cy5zb21lKHBhcmVudCA9PiBwYXJlbnQuaXNEZWFjdGl2YXRlZCk7XG4gICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgdWlkOiBpbnN0YW5jZS51aWQsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICByZW5kZXJLZXk6ICgwLCB1dGlsXzEuZ2V0UmVuZGVyS2V5KShpbnN0YW5jZS52bm9kZSA/IGluc3RhbmNlLnZub2RlLmtleSA6IG51bGwpLFxuICAgICAgICAgICAgaW5hY3RpdmUsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogISFjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBpc0ZyYWdtZW50OiAoMCwgdXRpbF8xLmlzRnJhZ21lbnQpKGluc3RhbmNlKSxcbiAgICAgICAgICAgIHRhZ3M6IHR5cGVvZiBpbnN0YW5jZS50eXBlICE9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbG9yOiAweDU1NTU1NSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogMHhlZWVlZWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gY2FwdHVyZSBjaGlsZHJlblxuICAgICAgICBpZiAoZGVwdGggPCB0aGlzLm1heERlcHRoIHx8IGluc3RhbmNlLnR5cGUuX19pc0tlZXBBbGl2ZSB8fCBwYXJlbnRzLnNvbWUocGFyZW50ID0+IHBhcmVudC50eXBlLl9faXNLZWVwQWxpdmUpKSB7XG4gICAgICAgICAgICB0cmVlTm9kZS5jaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgLm1hcCgoY2hpbGQsIGluZGV4LCBsaXN0KSA9PiB0aGlzLmNhcHR1cmUoY2hpbGQsIGxpc3QsIGRlcHRoICsgMSkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8ga2VlcC1hbGl2ZVxuICAgICAgICBpZiAodGhpcy5pc0tlZXBBbGl2ZShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlZENvbXBvbmVudHMgPSB0aGlzLmdldEtlZXBBbGl2ZUNhY2hlZEluc3RhbmNlcyhpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbklkcyA9IGNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC5fX1ZVRV9ERVZUT09MU19VSURfXyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoaWxkIG9mIGNhY2hlZENvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuSWRzLmluY2x1ZGVzKGNhY2hlZENoaWxkLl9fVlVFX0RFVlRPT0xTX1VJRF9fKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gYXdhaXQgdGhpcy5jYXB0dXJlKHsgLi4uY2FjaGVkQ2hpbGQsIGlzRGVhY3RpdmF0ZWQ6IHRydWUgfSwgbnVsbCwgZGVwdGggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVOb2RlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmdcbiAgICAgICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShpbnN0YW5jZSk7XG4gICAgICAgIGNvbnN0IGZpcnN0RWxlbWVudCA9IHJvb3RFbGVtZW50c1swXTtcbiAgICAgICAgaWYgKGZpcnN0RWxlbWVudCA9PT0gbnVsbCB8fCBmaXJzdEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZSA9IGluc3RhbmNlLnBhcmVudDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFJvb3RFbGVtZW50cyA9IHBhcmVudEluc3RhbmNlID8gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShwYXJlbnRJbnN0YW5jZSkgOiBbXTtcbiAgICAgICAgICAgIGxldCBlbCA9IGZpcnN0RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4TGlzdCA9IFtdO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGluZGV4TGlzdC5wdXNoKEFycmF5LmZyb20oZWwucGFyZW50RWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKGVsKSk7XG4gICAgICAgICAgICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgfSB3aGlsZSAoZWwucGFyZW50RWxlbWVudCAmJiBwYXJlbnRSb290RWxlbWVudHMubGVuZ3RoICYmICFwYXJlbnRSb290RWxlbWVudHMuaW5jbHVkZXMoZWwpKTtcbiAgICAgICAgICAgIHRyZWVOb2RlLmRvbU9yZGVyID0gaW5kZXhMaXN0LnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRyZWVOb2RlLmRvbU9yZGVyID0gWy0xXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKF9hID0gaW5zdGFuY2Uuc3VzcGVuc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdXNwZW5zZUtleSkge1xuICAgICAgICAgICAgdHJlZU5vZGUudGFncy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogaW5zdGFuY2Uuc3VzcGVuc2Uuc3VzcGVuc2VLZXksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweGU0OTJlNCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IDB4ZmZmZmZmLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB1cGRhdGUgaW5zdGFuY2VNYXBcbiAgICAgICAgICAgIHRoaXMubWFyayhpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnZpc2l0Q29tcG9uZW50VHJlZShpbnN0YW5jZSwgdHJlZU5vZGUsIHRoaXMuY29tcG9uZW50RmlsdGVyLmZpbHRlciwgdGhpcy5jdHguY3VycmVudEFwcFJlY29yZC5vcHRpb25zLmFwcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmsgYW4gaW5zdGFuY2UgYXMgY2FwdHVyZWQgYW5kIHN0b3JlIGl0IGluIHRoZSBpbnN0YW5jZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Z1ZX0gaW5zdGFuY2VcbiAgICAgKi9cbiAgICBtYXJrKGluc3RhbmNlLCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlTWFwID0gdGhpcy5jdHguY3VycmVudEFwcFJlY29yZC5pbnN0YW5jZU1hcDtcbiAgICAgICAgaWYgKGZvcmNlIHx8ICFpbnN0YW5jZU1hcC5oYXMoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18pKSB7XG4gICAgICAgICAgICBpbnN0YW5jZU1hcC5zZXQoaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sIGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc0tlZXBBbGl2ZShpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudHlwZS5fX2lzS2VlcEFsaXZlICYmIGluc3RhbmNlLl9fdl9jYWNoZTtcbiAgICB9XG4gICAgZ2V0S2VlcEFsaXZlQ2FjaGVkSW5zdGFuY2VzKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGluc3RhbmNlLl9fdl9jYWNoZS52YWx1ZXMoKSkubWFwKCh2bm9kZSkgPT4gdm5vZGUuY29tcG9uZW50KS5maWx0ZXIoQm9vbGVhbik7XG4gICAgfVxufVxuZXhwb3J0cy5Db21wb25lbnRXYWxrZXIgPSBDb21wb25lbnRXYWxrZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmVlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///89399\n");
|
|
351
375
|
|
|
352
376
|
/***/ }),
|
|
353
377
|
|
|
@@ -363,7 +387,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
363
387
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
364
388
|
|
|
365
389
|
"use strict";
|
|
366
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.backend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst tree_1 = __webpack_require__(89399);\n\nconst data_1 = __webpack_require__(42054);\n\nconst util_1 = __webpack_require__(33756);\n\nconst el_1 = __webpack_require__(88722);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nexports.backend = (0, app_backend_api_1.defineBackend)({\n frameworkVersion: 3,\n features: [],\n\n setup(api) {\n api.on.getAppRecordName(payload => {\n if (payload.app._component) {\n payload.name = payload.app._component.name;\n }\n });\n api.on.getAppRootInstance(payload => {\n var _a, _b, _c, _d;\n\n if (payload.app._instance) {\n payload.root = payload.app._instance;\n } else if ((_b = (_a = payload.app._container) === null || _a === void 0 ? void 0 : _a._vnode) === null || _b === void 0 ? void 0 : _b.component) {\n payload.root = (_d = (_c = payload.app._container) === null || _c === void 0 ? void 0 : _c._vnode) === null || _d === void 0 ? void 0 : _d.component;\n }\n });\n api.on.walkComponentTree(async (payload, ctx) => {\n const walker = new tree_1.ComponentWalker(payload.maxDepth, payload.filter, api, ctx);\n payload.componentTreeData = await walker.getComponentTree(payload.componentInstance);\n });\n api.on.walkComponentParents((payload, ctx) => {\n const walker = new tree_1.ComponentWalker(0, null, api, ctx);\n payload.parentInstances = walker.getComponentParents(payload.componentInstance);\n });\n api.on.inspectComponent((payload, ctx) => {\n // @TODO refactor\n shared_utils_1.backendInjections.getCustomInstanceDetails = data_1.getCustomInstanceDetails;\n shared_utils_1.backendInjections.instanceMap = ctx.currentAppRecord.instanceMap;\n\n shared_utils_1.backendInjections.isVueInstance = val => val._ && Object.keys(val._).includes('vnode');\n\n payload.instanceData = (0, data_1.getInstanceDetails)(payload.componentInstance, ctx);\n });\n api.on.getComponentName(payload => {\n payload.name = (0, util_1.getInstanceName)(payload.componentInstance);\n });\n api.on.getComponentBounds(payload => {\n payload.bounds = (0, el_1.getInstanceOrVnodeRect)(payload.componentInstance);\n });\n api.on.getElementComponent(payload => {\n payload.componentInstance = (0, el_1.getComponentInstanceFromElement)(payload.element);\n });\n api.on.getComponentInstances(payload => {\n payload.componentInstances = (0, util_1.getComponentInstances)(payload.app);\n });\n api.on.getComponentRootElements(payload => {\n payload.rootElements = (0, el_1.getRootElementsFromComponentInstance)(payload.componentInstance);\n });\n api.on.editComponentState((payload, ctx) => {\n (0, data_1.editState)(payload, api.stateEditor, ctx);\n });\n api.on.getComponentDevtoolsOptions(payload => {\n payload.options = payload.componentInstance.type.devtools;\n });\n api.on.getComponentRenderCode(payload => {\n payload.code = !(payload.componentInstance.type instanceof Function) ? payload.componentInstance.render.toString() : payload.componentInstance.type.toString();\n });\n api.on.transformCall(payload => {\n if (payload.callName === shared_utils_1.HookEvents.COMPONENT_UPDATED) {\n const component = payload.inArgs[0];\n payload.outArgs = [component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component];\n }\n });\n\n api.stateEditor.isRef = value => !!value.__v_isRef;\n\n api.stateEditor.getRefValue = ref => ref.value;\n\n api.stateEditor.setRefValue = (ref, value) => {\n ref.value = value;\n };\n }\n\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBRkQ7QUFJQSxPQUFHLENBQUMsRUFBSixDQUFPLGFBQVAsQ0FBcUIsT0FBTyxJQUFHO0FBQzdCLFVBQUksT0FBTyxDQUFDLFFBQVIsS0FBcUIsMEJBQVcsaUJBQXBDLEVBQXVEO0FBQ3JELGNBQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFSLENBQWUsQ0FBZixDQUFsQjtBQUNBLGVBQU8sQ0FBQyxPQUFSLEdBQWtCLENBQ2hCLFNBQVMsQ0FBQyxVQUFWLENBQXFCLEdBREwsRUFFaEIsU0FBUyxDQUFDLEdBRk0sRUFHaEIsU0FBUyxDQUFDLE1BQVYsR0FBbUIsU0FBUyxDQUFDLE1BQVYsQ0FBaUIsR0FBcEMsR0FBMEMsU0FIMUIsRUFJaEIsU0FKZ0IsQ0FBbEI7QUFNRDtBQUNGLEtBVkQ7O0FBWUEsT0FBRyxDQUFDLFdBQUosQ0FBZ0IsS0FBaEIsR0FBd0IsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBekM7O0FBQ0EsT0FBRyxDQUFDLFdBQUosQ0FBZ0IsV0FBaEIsR0FBOEIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUF6Qzs7QUFDQSxPQUFHLENBQUMsV0FBSixDQUFnQixXQUFoQixHQUE4QixDQUFDLEdBQUQsRUFBTSxLQUFOLEtBQWU7QUFDM0MsU0FBRyxDQUFDLEtBQUosR0FBWSxLQUFaO0FBQ0QsS0FGRDtBQUdEOztBQXZGa0MsQ0FBZCxDQUFWIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvaW5kZXgudHM/NmYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmFja2VuZCA9IHZvaWQgMDtcbmNvbnN0IGFwcF9iYWNrZW5kX2FwaV8xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvYXBwLWJhY2tlbmQtYXBpXCIpO1xuY29uc3QgdHJlZV8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy90cmVlXCIpO1xuY29uc3QgZGF0YV8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9kYXRhXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy91dGlsXCIpO1xuY29uc3QgZWxfMSA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvZWxcIik7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmV4cG9ydHMuYmFja2VuZCA9ICgwLCBhcHBfYmFja2VuZF9hcGlfMS5kZWZpbmVCYWNrZW5kKSh7XG4gICAgZnJhbWV3b3JrVmVyc2lvbjogMyxcbiAgICBmZWF0dXJlczogW10sXG4gICAgc2V0dXAoYXBpKSB7XG4gICAgICAgIGFwaS5vbi5nZXRBcHBSZWNvcmROYW1lKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheWxvYWQuYXBwLl9jb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLm5hbWUgPSBwYXlsb2FkLmFwcC5fY29tcG9uZW50Lm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0QXBwUm9vdEluc3RhbmNlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICAgICAgaWYgKHBheWxvYWQuYXBwLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdCA9IHBheWxvYWQuYXBwLl9pbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChfYiA9IChfYSA9IHBheWxvYWQuYXBwLl9jb250YWluZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5fdm5vZGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3QgPSAoX2QgPSAoX2MgPSBwYXlsb2FkLmFwcC5fY29udGFpbmVyKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuX3Zub2RlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY29tcG9uZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLndhbGtDb21wb25lbnRUcmVlKGFzeW5jIChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyB0cmVlXzEuQ29tcG9uZW50V2Fsa2VyKHBheWxvYWQubWF4RGVwdGgsIHBheWxvYWQuZmlsdGVyLCBhcGksIGN0eCk7XG4gICAgICAgICAgICBwYXlsb2FkLmNvbXBvbmVudFRyZWVEYXRhID0gYXdhaXQgd2Fsa2VyLmdldENvbXBvbmVudFRyZWUocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24ud2Fsa0NvbXBvbmVudFBhcmVudHMoKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IHRyZWVfMS5Db21wb25lbnRXYWxrZXIoMCwgbnVsbCwgYXBpLCBjdHgpO1xuICAgICAgICAgICAgcGF5bG9hZC5wYXJlbnRJbnN0YW5jZXMgPSB3YWxrZXIuZ2V0Q29tcG9uZW50UGFyZW50cyhwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5pbnNwZWN0Q29tcG9uZW50KChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgICAgIC8vIEBUT0RPIHJlZmFjdG9yXG4gICAgICAgICAgICBzaGFyZWRfdXRpbHNfMS5iYWNrZW5kSW5qZWN0aW9ucy5nZXRDdXN0b21JbnN0YW5jZURldGFpbHMgPSBkYXRhXzEuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzO1xuICAgICAgICAgICAgc2hhcmVkX3V0aWxzXzEuYmFja2VuZEluamVjdGlvbnMuaW5zdGFuY2VNYXAgPSBjdHguY3VycmVudEFwcFJlY29yZC5pbnN0YW5jZU1hcDtcbiAgICAgICAgICAgIHNoYXJlZF91dGlsc18xLmJhY2tlbmRJbmplY3Rpb25zLmlzVnVlSW5zdGFuY2UgPSB2YWwgPT4gdmFsLl8gJiYgT2JqZWN0LmtleXModmFsLl8pLmluY2x1ZGVzKCd2bm9kZScpO1xuICAgICAgICAgICAgcGF5bG9hZC5pbnN0YW5jZURhdGEgPSAoMCwgZGF0YV8xLmdldEluc3RhbmNlRGV0YWlscykocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnROYW1lKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5uYW1lID0gKDAsIHV0aWxfMS5nZXRJbnN0YW5jZU5hbWUpKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudEJvdW5kcyhwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQuYm91bmRzID0gKDAsIGVsXzEuZ2V0SW5zdGFuY2VPclZub2RlUmVjdCkocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0RWxlbWVudENvbXBvbmVudChwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UgPSAoMCwgZWxfMS5nZXRDb21wb25lbnRJbnN0YW5jZUZyb21FbGVtZW50KShwYXlsb2FkLmVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudEluc3RhbmNlcyhwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2VzID0gKDAsIHV0aWxfMS5nZXRDb21wb25lbnRJbnN0YW5jZXMpKHBheWxvYWQuYXBwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnRSb290RWxlbWVudHMocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLnJvb3RFbGVtZW50cyA9ICgwLCBlbF8xLmdldFJvb3RFbGVtZW50c0Zyb21Db21wb25lbnRJbnN0YW5jZSkocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZWRpdENvbXBvbmVudFN0YXRlKChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgICAgICgwLCBkYXRhXzEuZWRpdFN0YXRlKShwYXlsb2FkLCBhcGkuc3RhdGVFZGl0b3IsIGN0eCk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50RGV2dG9vbHNPcHRpb25zKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5vcHRpb25zID0gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZS50eXBlLmRldnRvb2xzO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudFJlbmRlckNvZGUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLmNvZGUgPSAhKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UudHlwZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSA/IHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UucmVuZGVyLnRvU3RyaW5nKCkgOiBwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlLnR5cGUudG9TdHJpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi50cmFuc2Zvcm1DYWxsKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheWxvYWQuY2FsbE5hbWUgPT09IHNoYXJlZF91dGlsc18xLkhvb2tFdmVudHMuQ09NUE9ORU5UX1VQREFURUQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBwYXlsb2FkLmluQXJnc1swXTtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLm91dEFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hcHBDb250ZXh0LmFwcCxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnVpZCxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnBhcmVudCA/IGNvbXBvbmVudC5wYXJlbnQudWlkIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5zdGF0ZUVkaXRvci5pc1JlZiA9IHZhbHVlID0+ICEhdmFsdWUuX192X2lzUmVmO1xuICAgICAgICBhcGkuc3RhdGVFZGl0b3IuZ2V0UmVmVmFsdWUgPSByZWYgPT4gcmVmLnZhbHVlO1xuICAgICAgICBhcGkuc3RhdGVFZGl0b3Iuc2V0UmVmVmFsdWUgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgfSxcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///64964\n");
|
|
390
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.backend = void 0;\n\nconst app_backend_api_1 = __webpack_require__(64803);\n\nconst tree_1 = __webpack_require__(89399);\n\nconst data_1 = __webpack_require__(42054);\n\nconst util_1 = __webpack_require__(33756);\n\nconst el_1 = __webpack_require__(88722);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nexports.backend = (0, app_backend_api_1.defineBackend)({\n frameworkVersion: 3,\n features: [],\n\n setup(api) {\n api.on.getAppRecordName(payload => {\n if (payload.app._component) {\n payload.name = payload.app._component.name;\n }\n });\n api.on.getAppRootInstance(payload => {\n var _a, _b, _c, _d;\n\n if (payload.app._instance) {\n payload.root = payload.app._instance;\n } else if ((_b = (_a = payload.app._container) === null || _a === void 0 ? void 0 : _a._vnode) === null || _b === void 0 ? void 0 : _b.component) {\n payload.root = (_d = (_c = payload.app._container) === null || _c === void 0 ? void 0 : _c._vnode) === null || _d === void 0 ? void 0 : _d.component;\n }\n });\n api.on.walkComponentTree(async (payload, ctx) => {\n const walker = new tree_1.ComponentWalker(payload.maxDepth, payload.filter, api, ctx);\n payload.componentTreeData = await walker.getComponentTree(payload.componentInstance);\n });\n api.on.walkComponentParents((payload, ctx) => {\n const walker = new tree_1.ComponentWalker(0, null, api, ctx);\n payload.parentInstances = walker.getComponentParents(payload.componentInstance);\n });\n api.on.inspectComponent((payload, ctx) => {\n // @TODO refactor\n shared_utils_1.backendInjections.getCustomInstanceDetails = data_1.getCustomInstanceDetails;\n shared_utils_1.backendInjections.getCustomObjectDetails = data_1.getCustomObjectDetails;\n shared_utils_1.backendInjections.instanceMap = ctx.currentAppRecord.instanceMap;\n\n shared_utils_1.backendInjections.isVueInstance = val => val._ && Object.keys(val._).includes('vnode');\n\n payload.instanceData = (0, data_1.getInstanceDetails)(payload.componentInstance, ctx);\n });\n api.on.getComponentName(payload => {\n payload.name = (0, util_1.getInstanceName)(payload.componentInstance);\n });\n api.on.getComponentBounds(payload => {\n payload.bounds = (0, el_1.getInstanceOrVnodeRect)(payload.componentInstance);\n });\n api.on.getElementComponent(payload => {\n payload.componentInstance = (0, el_1.getComponentInstanceFromElement)(payload.element);\n });\n api.on.getComponentInstances(payload => {\n payload.componentInstances = (0, util_1.getComponentInstances)(payload.app);\n });\n api.on.getComponentRootElements(payload => {\n payload.rootElements = (0, el_1.getRootElementsFromComponentInstance)(payload.componentInstance);\n });\n api.on.editComponentState((payload, ctx) => {\n (0, data_1.editState)(payload, api.stateEditor, ctx);\n });\n api.on.getComponentDevtoolsOptions(payload => {\n payload.options = payload.componentInstance.type.devtools;\n });\n api.on.getComponentRenderCode(payload => {\n payload.code = !(payload.componentInstance.type instanceof Function) ? payload.componentInstance.render.toString() : payload.componentInstance.type.toString();\n });\n api.on.transformCall(payload => {\n if (payload.callName === shared_utils_1.HookEvents.COMPONENT_UPDATED) {\n const component = payload.inArgs[0];\n payload.outArgs = [component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component];\n }\n });\n\n api.stateEditor.isRef = value => !!value.__v_isRef;\n\n api.stateEditor.getRefValue = ref => ref.value;\n\n api.stateEditor.setRefValue = (ref, value) => {\n ref.value = value;\n };\n }\n\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTBCLElBQTFCLENBQStCLFFBQS9CLEVBQXJIO0FBQ0QsS0FGRDtBQUlBLE9BQUcsQ0FBQyxFQUFKLENBQU8sYUFBUCxDQUFxQixPQUFPLElBQUc7QUFDN0IsVUFBSSxPQUFPLENBQUMsUUFBUixLQUFxQiwwQkFBVyxpQkFBcEMsRUFBdUQ7QUFDckQsY0FBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQVIsQ0FBZSxDQUFmLENBQWxCO0FBQ0EsZUFBTyxDQUFDLE9BQVIsR0FBa0IsQ0FDaEIsU0FBUyxDQUFDLFVBQVYsQ0FBcUIsR0FETCxFQUVoQixTQUFTLENBQUMsR0FGTSxFQUdoQixTQUFTLENBQUMsTUFBVixHQUFtQixTQUFTLENBQUMsTUFBVixDQUFpQixHQUFwQyxHQUEwQyxTQUgxQixFQUloQixTQUpnQixDQUFsQjtBQU1EO0FBQ0YsS0FWRDs7QUFZQSxPQUFHLENBQUMsV0FBSixDQUFnQixLQUFoQixHQUF3QixLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUF6Qzs7QUFDQSxPQUFHLENBQUMsV0FBSixDQUFnQixXQUFoQixHQUE4QixHQUFHLElBQUksR0FBRyxDQUFDLEtBQXpDOztBQUNBLE9BQUcsQ0FBQyxXQUFKLENBQWdCLFdBQWhCLEdBQThCLENBQUMsR0FBRCxFQUFNLEtBQU4sS0FBZTtBQUMzQyxTQUFHLENBQUMsS0FBSixHQUFZLEtBQVo7QUFDRCxLQUZEO0FBR0Q7O0FBeEZrQyxDQUFkLENBQVYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uL3NyYy9pbmRleC50cz82ZjM3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5iYWNrZW5kID0gdm9pZCAwO1xuY29uc3QgYXBwX2JhY2tlbmRfYXBpXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9hcHAtYmFja2VuZC1hcGlcIik7XG5jb25zdCB0cmVlXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3RyZWVcIik7XG5jb25zdCBkYXRhXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL2RhdGFcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3V0aWxcIik7XG5jb25zdCBlbF8xID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9lbFwiKTtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuZXhwb3J0cy5iYWNrZW5kID0gKDAsIGFwcF9iYWNrZW5kX2FwaV8xLmRlZmluZUJhY2tlbmQpKHtcbiAgICBmcmFtZXdvcmtWZXJzaW9uOiAzLFxuICAgIGZlYXR1cmVzOiBbXSxcbiAgICBzZXR1cChhcGkpIHtcbiAgICAgICAgYXBpLm9uLmdldEFwcFJlY29yZE5hbWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bG9hZC5hcHAuX2NvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQubmFtZSA9IHBheWxvYWQuYXBwLl9jb21wb25lbnQubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRBcHBSb290SW5zdGFuY2UocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgICAgICBpZiAocGF5bG9hZC5hcHAuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5yb290ID0gcGF5bG9hZC5hcHAuX2luc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKF9iID0gKF9hID0gcGF5bG9hZC5hcHAuX2NvbnRhaW5lcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLl92bm9kZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQucm9vdCA9IChfZCA9IChfYyA9IHBheWxvYWQuYXBwLl9jb250YWluZXIpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5fdm5vZGUpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5jb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24ud2Fsa0NvbXBvbmVudFRyZWUoYXN5bmMgKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2Fsa2VyID0gbmV3IHRyZWVfMS5Db21wb25lbnRXYWxrZXIocGF5bG9hZC5tYXhEZXB0aCwgcGF5bG9hZC5maWx0ZXIsIGFwaSwgY3R4KTtcbiAgICAgICAgICAgIHBheWxvYWQuY29tcG9uZW50VHJlZURhdGEgPSBhd2FpdCB3YWxrZXIuZ2V0Q29tcG9uZW50VHJlZShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi53YWxrQ29tcG9uZW50UGFyZW50cygocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3YWxrZXIgPSBuZXcgdHJlZV8xLkNvbXBvbmVudFdhbGtlcigwLCBudWxsLCBhcGksIGN0eCk7XG4gICAgICAgICAgICBwYXlsb2FkLnBhcmVudEluc3RhbmNlcyA9IHdhbGtlci5nZXRDb21wb25lbnRQYXJlbnRzKHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmluc3BlY3RDb21wb25lbnQoKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAgICAgLy8gQFRPRE8gcmVmYWN0b3JcbiAgICAgICAgICAgIHNoYXJlZF91dGlsc18xLmJhY2tlbmRJbmplY3Rpb25zLmdldEN1c3RvbUluc3RhbmNlRGV0YWlscyA9IGRhdGFfMS5nZXRDdXN0b21JbnN0YW5jZURldGFpbHM7XG4gICAgICAgICAgICBzaGFyZWRfdXRpbHNfMS5iYWNrZW5kSW5qZWN0aW9ucy5nZXRDdXN0b21PYmplY3REZXRhaWxzID0gZGF0YV8xLmdldEN1c3RvbU9iamVjdERldGFpbHM7XG4gICAgICAgICAgICBzaGFyZWRfdXRpbHNfMS5iYWNrZW5kSW5qZWN0aW9ucy5pbnN0YW5jZU1hcCA9IGN0eC5jdXJyZW50QXBwUmVjb3JkLmluc3RhbmNlTWFwO1xuICAgICAgICAgICAgc2hhcmVkX3V0aWxzXzEuYmFja2VuZEluamVjdGlvbnMuaXNWdWVJbnN0YW5jZSA9IHZhbCA9PiB2YWwuXyAmJiBPYmplY3Qua2V5cyh2YWwuXykuaW5jbHVkZXMoJ3Zub2RlJyk7XG4gICAgICAgICAgICBwYXlsb2FkLmluc3RhbmNlRGF0YSA9ICgwLCBkYXRhXzEuZ2V0SW5zdGFuY2VEZXRhaWxzKShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlLCBjdHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudE5hbWUocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLm5hbWUgPSAoMCwgdXRpbF8xLmdldEluc3RhbmNlTmFtZSkocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50Qm91bmRzKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5ib3VuZHMgPSAoMCwgZWxfMS5nZXRJbnN0YW5jZU9yVm5vZGVSZWN0KShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRFbGVtZW50Q29tcG9uZW50KHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZSA9ICgwLCBlbF8xLmdldENvbXBvbmVudEluc3RhbmNlRnJvbUVsZW1lbnQpKHBheWxvYWQuZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50SW5zdGFuY2VzKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZXMgPSAoMCwgdXRpbF8xLmdldENvbXBvbmVudEluc3RhbmNlcykocGF5bG9hZC5hcHApO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLmdldENvbXBvbmVudFJvb3RFbGVtZW50cyhwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQucm9vdEVsZW1lbnRzID0gKDAsIGVsXzEuZ2V0Um9vdEVsZW1lbnRzRnJvbUNvbXBvbmVudEluc3RhbmNlKShwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5lZGl0Q29tcG9uZW50U3RhdGUoKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAgICAgKDAsIGRhdGFfMS5lZGl0U3RhdGUpKHBheWxvYWQsIGFwaS5zdGF0ZUVkaXRvciwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaS5vbi5nZXRDb21wb25lbnREZXZ0b29sc09wdGlvbnMocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBwYXlsb2FkLm9wdGlvbnMgPSBwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlLnR5cGUuZGV2dG9vbHM7XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0Q29tcG9uZW50UmVuZGVyQ29kZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHBheWxvYWQuY29kZSA9ICEocGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZS50eXBlIGluc3RhbmNlb2YgRnVuY3Rpb24pID8gcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZS5yZW5kZXIudG9TdHJpbmcoKSA6IHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UudHlwZS50b1N0cmluZygpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpLm9uLnRyYW5zZm9ybUNhbGwocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bG9hZC5jYWxsTmFtZSA9PT0gc2hhcmVkX3V0aWxzXzEuSG9va0V2ZW50cy5DT01QT05FTlRfVVBEQVRFRCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHBheWxvYWQuaW5BcmdzWzBdO1xuICAgICAgICAgICAgICAgIHBheWxvYWQub3V0QXJncyA9IFtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmFwcENvbnRleHQuYXBwLFxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQudWlkLFxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQucGFyZW50ID8gY29tcG9uZW50LnBhcmVudC51aWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXBpLnN0YXRlRWRpdG9yLmlzUmVmID0gdmFsdWUgPT4gISF2YWx1ZS5fX3ZfaXNSZWY7XG4gICAgICAgIGFwaS5zdGF0ZUVkaXRvci5nZXRSZWZWYWx1ZSA9IHJlZiA9PiByZWYudmFsdWU7XG4gICAgICAgIGFwaS5zdGF0ZUVkaXRvci5zZXRSZWZWYWx1ZSA9IChyZWYsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZWYudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9LFxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64964\n");
|
|
367
391
|
|
|
368
392
|
/***/ }),
|
|
369
393
|
|
|
@@ -379,7 +403,7 @@ eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {
|
|
|
379
403
|
/***/ ((__unused_webpack_module, exports) => {
|
|
380
404
|
|
|
381
405
|
"use strict";
|
|
382
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getCatchedGetters = exports.getCustomStoreDetails = exports.getCustomRouterDetails = exports.isVueInstance = exports.getCustomInstanceDetails = exports.getInstanceMap = exports.backendInjections = void 0;\nexports.backendInjections = {\n instanceMap: new Map(),\n isVueInstance: () => false,\n getCustomInstanceDetails: () => ({})\n};\n\nfunction getInstanceMap() {\n return exports.backendInjections.instanceMap;\n}\n\nexports.getInstanceMap = getInstanceMap;\n\nfunction getCustomInstanceDetails(instance) {\n return exports.backendInjections.getCustomInstanceDetails(instance);\n}\n\nexports.getCustomInstanceDetails = getCustomInstanceDetails;\n\nfunction isVueInstance(value) {\n return exports.backendInjections.isVueInstance(value);\n}\n\nexports.isVueInstance = isVueInstance; // @TODO refactor\n\nfunction getCustomRouterDetails(router) {\n return {\n _custom: {\n type: 'router',\n display: 'VueRouter',\n value: {\n options: router.options,\n currentRoute: router.currentRoute\n },\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomRouterDetails = getCustomRouterDetails; // @TODO refactor\n\nfunction getCustomStoreDetails(store) {\n return {\n _custom: {\n type: 'store',\n display: 'Store',\n value: {\n state: store.state,\n getters: getCatchedGetters(store)\n },\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomStoreDetails = getCustomStoreDetails; // @TODO refactor\n\nfunction getCatchedGetters(store) {\n const getters = {};\n const origGetters = store.getters || {};\n const keys = Object.keys(origGetters);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n Object.defineProperty(getters, key, {\n enumerable: true,\n get: () => {\n try {\n return origGetters[key];\n } catch (e) {\n return e;\n }\n }\n });\n }\n\n return getters;\n}\n\nexports.getCatchedGetters = getCatchedGetters;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
406
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.getCatchedGetters = exports.getCustomStoreDetails = exports.getCustomRouterDetails = exports.isVueInstance = exports.getCustomObjectDetails = exports.getCustomInstanceDetails = exports.getInstanceMap = exports.backendInjections = void 0;\nexports.backendInjections = {\n instanceMap: new Map(),\n isVueInstance: () => false,\n getCustomInstanceDetails: () => ({}),\n getCustomObjectDetails: () => undefined\n};\n\nfunction getInstanceMap() {\n return exports.backendInjections.instanceMap;\n}\n\nexports.getInstanceMap = getInstanceMap;\n\nfunction getCustomInstanceDetails(instance) {\n return exports.backendInjections.getCustomInstanceDetails(instance);\n}\n\nexports.getCustomInstanceDetails = getCustomInstanceDetails;\n\nfunction getCustomObjectDetails(value, proto) {\n return exports.backendInjections.getCustomObjectDetails(value, proto);\n}\n\nexports.getCustomObjectDetails = getCustomObjectDetails;\n\nfunction isVueInstance(value) {\n return exports.backendInjections.isVueInstance(value);\n}\n\nexports.isVueInstance = isVueInstance; // @TODO refactor\n\nfunction getCustomRouterDetails(router) {\n return {\n _custom: {\n type: 'router',\n display: 'VueRouter',\n value: {\n options: router.options,\n currentRoute: router.currentRoute\n },\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomRouterDetails = getCustomRouterDetails; // @TODO refactor\n\nfunction getCustomStoreDetails(store) {\n return {\n _custom: {\n type: 'store',\n display: 'Store',\n value: {\n state: store.state,\n getters: getCatchedGetters(store)\n },\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomStoreDetails = getCustomStoreDetails; // @TODO refactor\n\nfunction getCatchedGetters(store) {\n const getters = {};\n const origGetters = store.getters || {};\n const keys = Object.keys(origGetters);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n Object.defineProperty(getters, key, {\n enumerable: true,\n get: () => {\n try {\n return origGetters[key];\n } catch (e) {\n return e;\n }\n }\n });\n }\n\n return getters;\n}\n\nexports.getCatchedGetters = getCatchedGetters;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkzMTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWEsNEJBQW9CO0FBQy9CLGFBQVcsRUFBRSxJQUFJLEdBQUosRUFEa0I7QUFFL0IsZUFBYSxFQUFHLE1BQU0sS0FGUztBQUcvQiwwQkFBd0IsRUFBRyxPQUFPLEVBQVAsQ0FISTtBQUkvQix3QkFBc0IsRUFBRyxNQUFNO0FBSkEsQ0FBcEI7O0FBT2IsU0FBZ0IsY0FBaEIsR0FBOEI7QUFDNUIsU0FBTywwQkFBa0IsV0FBekI7QUFDRDs7QUFGRDs7QUFJQSxTQUFnQix3QkFBaEIsQ0FBMEMsUUFBMUMsRUFBa0Q7QUFDaEQsU0FBTywwQkFBa0Isd0JBQWxCLENBQTJDLFFBQTNDLENBQVA7QUFDRDs7QUFGRDs7QUFJQSxTQUFnQixzQkFBaEIsQ0FBd0MsS0FBeEMsRUFBK0MsS0FBL0MsRUFBNEQ7QUFDMUQsU0FBTywwQkFBa0Isc0JBQWxCLENBQXlDLEtBQXpDLEVBQWdELEtBQWhELENBQVA7QUFDRDs7QUFGRDs7QUFJQSxTQUFnQixhQUFoQixDQUErQixLQUEvQixFQUFvQztBQUNsQyxTQUFPLDBCQUFrQixhQUFsQixDQUFnQyxLQUFoQyxDQUFQO0FBQ0Q7O0FBRkQsc0MsQ0FJQTs7QUFDQSxTQUFnQixzQkFBaEIsQ0FBd0MsTUFBeEMsRUFBOEM7QUFDNUMsU0FBTztBQUNMLFdBQU8sRUFBRTtBQUNQLFVBQUksRUFBRSxRQURDO0FBRVAsYUFBTyxFQUFFLFdBRkY7QUFHUCxXQUFLLEVBQUU7QUFDTCxlQUFPLEVBQUUsTUFBTSxDQUFDLE9BRFg7QUFFTCxvQkFBWSxFQUFFLE1BQU0sQ0FBQztBQUZoQixPQUhBO0FBT1AsWUFBTSxFQUFFO0FBQ04sZ0JBQVEsRUFBRTtBQURKO0FBUEQ7QUFESixHQUFQO0FBYUQ7O0FBZEQsd0QsQ0FnQkE7O0FBQ0EsU0FBZ0IscUJBQWhCLENBQXVDLEtBQXZDLEVBQTRDO0FBQzFDLFNBQU87QUFDTCxXQUFPLEVBQUU7QUFDUCxVQUFJLEVBQUUsT0FEQztBQUVQLGFBQU8sRUFBRSxPQUZGO0FBR1AsV0FBSyxFQUFFO0FBQ0wsYUFBSyxFQUFFLEtBQUssQ0FBQyxLQURSO0FBRUwsZUFBTyxFQUFFLGlCQUFpQixDQUFDLEtBQUQ7QUFGckIsT0FIQTtBQU9QLFlBQU0sRUFBRTtBQUNOLGdCQUFRLEVBQUU7QUFESjtBQVBEO0FBREosR0FBUDtBQWFEOztBQWRELHNELENBZ0JBOztBQUNBLFNBQWdCLGlCQUFoQixDQUFtQyxLQUFuQyxFQUF3QztBQUN0QyxRQUFNLE9BQU8sR0FBRyxFQUFoQjtBQUVBLFFBQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFOLElBQWlCLEVBQXJDO0FBQ0EsUUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQVAsQ0FBWSxXQUFaLENBQWI7O0FBQ0EsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFiLEVBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBekIsRUFBaUMsQ0FBQyxFQUFsQyxFQUFzQztBQUNwQyxVQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBRCxDQUFoQjtBQUNBLFVBQU0sQ0FBQyxjQUFQLENBQXNCLE9BQXRCLEVBQStCLEdBQS9CLEVBQW9DO0FBQ2xDLGdCQUFVLEVBQUUsSUFEc0I7QUFFbEMsU0FBRyxFQUFFLE1BQUs7QUFDUixZQUFJO0FBQ0YsaUJBQU8sV0FBVyxDQUFDLEdBQUQsQ0FBbEI7QUFDRCxTQUZELENBRUUsT0FBTyxDQUFQLEVBQVU7QUFDVixpQkFBTyxDQUFQO0FBQ0Q7QUFDRjtBQVJpQyxLQUFwQztBQVVEOztBQUVELFNBQU8sT0FBUDtBQUNEOztBQXBCRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2JhY2tlbmQudHM/YzY0NiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Q2F0Y2hlZEdldHRlcnMgPSBleHBvcnRzLmdldEN1c3RvbVN0b3JlRGV0YWlscyA9IGV4cG9ydHMuZ2V0Q3VzdG9tUm91dGVyRGV0YWlscyA9IGV4cG9ydHMuaXNWdWVJbnN0YW5jZSA9IGV4cG9ydHMuZ2V0Q3VzdG9tT2JqZWN0RGV0YWlscyA9IGV4cG9ydHMuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzID0gZXhwb3J0cy5nZXRJbnN0YW5jZU1hcCA9IGV4cG9ydHMuYmFja2VuZEluamVjdGlvbnMgPSB2b2lkIDA7XG5leHBvcnRzLmJhY2tlbmRJbmplY3Rpb25zID0ge1xuICAgIGluc3RhbmNlTWFwOiBuZXcgTWFwKCksXG4gICAgaXNWdWVJbnN0YW5jZTogKCgpID0+IGZhbHNlKSxcbiAgICBnZXRDdXN0b21JbnN0YW5jZURldGFpbHM6ICgoKSA9PiAoe30pKSxcbiAgICBnZXRDdXN0b21PYmplY3REZXRhaWxzOiAoKCkgPT4gdW5kZWZpbmVkKSxcbn07XG5mdW5jdGlvbiBnZXRJbnN0YW5jZU1hcCgpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5iYWNrZW5kSW5qZWN0aW9ucy5pbnN0YW5jZU1hcDtcbn1cbmV4cG9ydHMuZ2V0SW5zdGFuY2VNYXAgPSBnZXRJbnN0YW5jZU1hcDtcbmZ1bmN0aW9uIGdldEN1c3RvbUluc3RhbmNlRGV0YWlscyhpbnN0YW5jZSkge1xuICAgIHJldHVybiBleHBvcnRzLmJhY2tlbmRJbmplY3Rpb25zLmdldEN1c3RvbUluc3RhbmNlRGV0YWlscyhpbnN0YW5jZSk7XG59XG5leHBvcnRzLmdldEN1c3RvbUluc3RhbmNlRGV0YWlscyA9IGdldEN1c3RvbUluc3RhbmNlRGV0YWlscztcbmZ1bmN0aW9uIGdldEN1c3RvbU9iamVjdERldGFpbHModmFsdWUsIHByb3RvKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuYmFja2VuZEluamVjdGlvbnMuZ2V0Q3VzdG9tT2JqZWN0RGV0YWlscyh2YWx1ZSwgcHJvdG8pO1xufVxuZXhwb3J0cy5nZXRDdXN0b21PYmplY3REZXRhaWxzID0gZ2V0Q3VzdG9tT2JqZWN0RGV0YWlscztcbmZ1bmN0aW9uIGlzVnVlSW5zdGFuY2UodmFsdWUpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5iYWNrZW5kSW5qZWN0aW9ucy5pc1Z1ZUluc3RhbmNlKHZhbHVlKTtcbn1cbmV4cG9ydHMuaXNWdWVJbnN0YW5jZSA9IGlzVnVlSW5zdGFuY2U7XG4vLyBAVE9ETyByZWZhY3RvclxuZnVuY3Rpb24gZ2V0Q3VzdG9tUm91dGVyRGV0YWlscyhyb3V0ZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICB0eXBlOiAncm91dGVyJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdWdWVSb3V0ZXInLFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiByb3V0ZXIub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBjdXJyZW50Um91dGU6IHJvdXRlci5jdXJyZW50Um91dGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbVJvdXRlckRldGFpbHMgPSBnZXRDdXN0b21Sb3V0ZXJEZXRhaWxzO1xuLy8gQFRPRE8gcmVmYWN0b3JcbmZ1bmN0aW9uIGdldEN1c3RvbVN0b3JlRGV0YWlscyhzdG9yZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdG9yZScsXG4gICAgICAgICAgICBkaXNwbGF5OiAnU3RvcmUnLFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogc3RvcmUuc3RhdGUsXG4gICAgICAgICAgICAgICAgZ2V0dGVyczogZ2V0Q2F0Y2hlZEdldHRlcnMoc3RvcmUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICAgIGFic3RyYWN0OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRDdXN0b21TdG9yZURldGFpbHMgPSBnZXRDdXN0b21TdG9yZURldGFpbHM7XG4vLyBAVE9ETyByZWZhY3RvclxuZnVuY3Rpb24gZ2V0Q2F0Y2hlZEdldHRlcnMoc3RvcmUpIHtcbiAgICBjb25zdCBnZXR0ZXJzID0ge307XG4gICAgY29uc3Qgb3JpZ0dldHRlcnMgPSBzdG9yZS5nZXR0ZXJzIHx8IHt9O1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcmlnR2V0dGVycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnZXR0ZXJzLCBrZXksIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ0dldHRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBnZXR0ZXJzO1xufVxuZXhwb3J0cy5nZXRDYXRjaGVkR2V0dGVycyA9IGdldENhdGNoZWRHZXR0ZXJzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFja2VuZC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///79310\n");
|
|
383
407
|
|
|
384
408
|
/***/ }),
|
|
385
409
|
|
|
@@ -395,7 +419,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
395
419
|
/***/ ((__unused_webpack_module, exports) => {
|
|
396
420
|
|
|
397
421
|
"use strict";
|
|
398
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.HookEvents = exports.BridgeSubscriptions = exports.BridgeEvents = exports.BuiltinTabs = void 0;\nvar BuiltinTabs;\n\n(function (BuiltinTabs) {\n BuiltinTabs[\"COMPONENTS\"] = \"components\";\n BuiltinTabs[\"TIMELINE\"] = \"timeline\";\n BuiltinTabs[\"PLUGINS\"] = \"plugins\";\n BuiltinTabs[\"SETTINGS\"] = \"settings\";\n})(BuiltinTabs = exports.BuiltinTabs || (exports.BuiltinTabs = {}));\n\nvar BridgeEvents;\n\n(function (BridgeEvents) {\n // Misc\n BridgeEvents[\"TO_BACK_SUBSCRIBE\"] = \"b:subscribe\";\n BridgeEvents[\"TO_BACK_UNSUBSCRIBE\"] = \"b:unsubscribe\";\n /** Backend is ready */\n\n BridgeEvents[\"TO_FRONT_READY\"] = \"f:ready\";\n /** Displays the \"detected Vue\" console log */\n\n BridgeEvents[\"TO_BACK_LOG_DETECTED_VUE\"] = \"b:log-detected-vue\";\n /** Force refresh */\n\n BridgeEvents[\"TO_BACK_REFRESH\"] = \"b:refresh\";\n /** Tab was switched */\n\n BridgeEvents[\"TO_BACK_TAB_SWITCH\"] = \"b:tab:switch\";\n BridgeEvents[\"TO_BACK_LOG\"] = \"b:log\"; // Apps\n\n /** App was registered */\n\n BridgeEvents[\"TO_FRONT_APP_ADD\"] = \"f:app:add\";\n /** Get app list */\n\n BridgeEvents[\"TO_BACK_APP_LIST\"] = \"b:app:list\";\n BridgeEvents[\"TO_FRONT_APP_LIST\"] = \"f:app:list\";\n BridgeEvents[\"TO_FRONT_APP_REMOVE\"] = \"f:app:remove\";\n BridgeEvents[\"TO_BACK_APP_SELECT\"] = \"b:app:select\";\n BridgeEvents[\"TO_FRONT_APP_SELECTED\"] = \"f:app:selected\";\n BridgeEvents[\"TO_BACK_SCAN_LEGACY_APPS\"] = \"b:app:scan-legacy\"; // Components\n\n BridgeEvents[\"TO_BACK_COMPONENT_TREE\"] = \"b:component:tree\";\n BridgeEvents[\"TO_FRONT_COMPONENT_TREE\"] = \"f:component:tree\";\n BridgeEvents[\"TO_BACK_COMPONENT_SELECTED_DATA\"] = \"b:component:selected-data\";\n BridgeEvents[\"TO_FRONT_COMPONENT_SELECTED_DATA\"] = \"f:component:selected-data\";\n BridgeEvents[\"TO_BACK_COMPONENT_EXPAND\"] = \"b:component:expand\";\n BridgeEvents[\"TO_FRONT_COMPONENT_EXPAND\"] = \"f:component:expand\";\n BridgeEvents[\"TO_BACK_COMPONENT_SCROLL_TO\"] = \"b:component:scroll-to\";\n BridgeEvents[\"TO_BACK_COMPONENT_FILTER\"] = \"b:component:filter\";\n BridgeEvents[\"TO_BACK_COMPONENT_MOUSE_OVER\"] = \"b:component:mouse-over\";\n BridgeEvents[\"TO_BACK_COMPONENT_MOUSE_OUT\"] = \"b:component:mouse-out\";\n BridgeEvents[\"TO_BACK_COMPONENT_CONTEXT_MENU_TARGET\"] = \"b:component:context-menu-target\";\n BridgeEvents[\"TO_BACK_COMPONENT_EDIT_STATE\"] = \"b:component:edit-state\";\n BridgeEvents[\"TO_BACK_COMPONENT_PICK\"] = \"b:component:pick\";\n BridgeEvents[\"TO_FRONT_COMPONENT_PICK\"] = \"f:component:pick\";\n BridgeEvents[\"TO_BACK_COMPONENT_PICK_CANCELED\"] = \"b:component:pick-canceled\";\n BridgeEvents[\"TO_FRONT_COMPONENT_PICK_CANCELED\"] = \"f:component:pick-canceled\";\n BridgeEvents[\"TO_BACK_COMPONENT_INSPECT_DOM\"] = \"b:component:inspect-dom\";\n BridgeEvents[\"TO_FRONT_COMPONENT_INSPECT_DOM\"] = \"f:component:inspect-dom\";\n BridgeEvents[\"TO_BACK_COMPONENT_RENDER_CODE\"] = \"b:component:render-code\";\n BridgeEvents[\"TO_FRONT_COMPONENT_RENDER_CODE\"] = \"f:component:render-code\"; // Timeline\n\n BridgeEvents[\"TO_FRONT_TIMELINE_EVENT\"] = \"f:timeline:event\";\n BridgeEvents[\"TO_BACK_TIMELINE_LAYER_LIST\"] = \"b:timeline:layer-list\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_LIST\"] = \"f:timeline:layer-list\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_ADD\"] = \"f:timeline:layer-add\";\n BridgeEvents[\"TO_BACK_TIMELINE_SHOW_SCREENSHOT\"] = \"b:timeline:show-screenshot\";\n BridgeEvents[\"TO_BACK_TIMELINE_CLEAR\"] = \"b:timeline:clear\";\n BridgeEvents[\"TO_BACK_TIMELINE_EVENT_DATA\"] = \"b:timeline:event-data\";\n BridgeEvents[\"TO_FRONT_TIMELINE_EVENT_DATA\"] = \"f:timeline:event-data\";\n BridgeEvents[\"TO_BACK_TIMELINE_LAYER_LOAD_EVENTS\"] = \"b:timeline:layer-load-events\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS\"] = \"f:timeline:layer-load-events\";\n BridgeEvents[\"TO_BACK_TIMELINE_LOAD_MARKERS\"] = \"b:timeline:load-markers\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LOAD_MARKERS\"] = \"f:timeline:load-markers\";\n BridgeEvents[\"TO_FRONT_TIMELINE_MARKER\"] = \"f:timeline:marker\"; // Plugins\n\n BridgeEvents[\"TO_BACK_DEVTOOLS_PLUGIN_LIST\"] = \"b:devtools-plugin:list\";\n BridgeEvents[\"TO_FRONT_DEVTOOLS_PLUGIN_LIST\"] = \"f:devtools-plugin:list\";\n BridgeEvents[\"TO_FRONT_DEVTOOLS_PLUGIN_ADD\"] = \"f:devtools-plugin:add\";\n BridgeEvents[\"TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED\"] = \"b:devtools-plugin:setting-updated\"; // Custom inspectors\n\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_LIST\"] = \"b:custom-inspector:list\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_LIST\"] = \"f:custom-inspector:list\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_ADD\"] = \"f:custom-inspector:add\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_TREE\"] = \"b:custom-inspector:tree\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_TREE\"] = \"f:custom-inspector:tree\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_STATE\"] = \"b:custom-inspector:state\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_STATE\"] = \"f:custom-inspector:state\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE\"] = \"b:custom-inspector:edit-state\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_ACTION\"] = \"b:custom-inspector:action\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_SELECT_NODE\"] = \"f:custom-inspector:select-node\"; // Custom state\n\n BridgeEvents[\"TO_BACK_CUSTOM_STATE_ACTION\"] = \"b:custom-state:action\";\n})(BridgeEvents = exports.BridgeEvents || (exports.BridgeEvents = {}));\n\nvar BridgeSubscriptions;\n\n(function (BridgeSubscriptions) {\n BridgeSubscriptions[\"SELECTED_COMPONENT_DATA\"] = \"component:selected-data\";\n BridgeSubscriptions[\"COMPONENT_TREE\"] = \"component:tree\";\n})(BridgeSubscriptions = exports.BridgeSubscriptions || (exports.BridgeSubscriptions = {}));\n\nvar HookEvents;\n\n(function (HookEvents) {\n HookEvents[\"INIT\"] = \"init\";\n HookEvents[\"APP_INIT\"] = \"app:init\";\n HookEvents[\"APP_ADD\"] = \"app:add\";\n HookEvents[\"APP_UNMOUNT\"] = \"app:unmount\";\n HookEvents[\"COMPONENT_UPDATED\"] = \"component:updated\";\n HookEvents[\"COMPONENT_ADDED\"] = \"component:added\";\n HookEvents[\"COMPONENT_REMOVED\"] = \"component:removed\";\n HookEvents[\"COMPONENT_EMIT\"] = \"component:emit\";\n HookEvents[\"COMPONENT_HIGHLIGHT\"] = \"component:highlight\";\n HookEvents[\"COMPONENT_UNHIGHLIGHT\"] = \"component:unhighlight\";\n HookEvents[\"SETUP_DEVTOOLS_PLUGIN\"] = \"devtools-plugin:setup\";\n HookEvents[\"TIMELINE_LAYER_ADDED\"] = \"timeline:layer-added\";\n HookEvents[\"TIMELINE_EVENT_ADDED\"] = \"timeline:event-added\";\n HookEvents[\"CUSTOM_INSPECTOR_ADD\"] = \"custom-inspector:add\";\n HookEvents[\"CUSTOM_INSPECTOR_SEND_TREE\"] = \"custom-inspector:send-tree\";\n HookEvents[\"CUSTOM_INSPECTOR_SEND_STATE\"] = \"custom-inspector:send-state\";\n HookEvents[\"CUSTOM_INSPECTOR_SELECT_NODE\"] = \"custom-inspector:select-node\";\n HookEvents[\"PERFORMANCE_START\"] = \"perf:start\";\n HookEvents[\"PERFORMANCE_END\"] = \"perf:end\";\n HookEvents[\"PLUGIN_SETTINGS_SET\"] = \"plugin:settings:set\";\n /**\n * @deprecated\n */\n\n HookEvents[\"FLUSH\"] = \"flush\";\n})(HookEvents = exports.HookEvents || (exports.HookEvents = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk0MTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBWSxXQUFaOztBQUFBLFdBQVksV0FBWixFQUF1QjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNELENBTEQsRUFBWSxXQUFXLEdBQVgsOENBQVcsRUFBWCxDQUFaOztBQU9BLElBQVksWUFBWjs7QUFBQSxXQUFZLFlBQVosRUFBd0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQSx3Q0Fac0IsQ0FjdEI7O0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBdkJzQixDQXlCdEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUE3Q3NCLENBK0N0Qjs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUE1RHNCLENBOER0Qjs7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnR0FsRXNCLENBb0V0Qjs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkE5RXNCLENBZ0Z0Qjs7QUFDQTtBQUNELENBbEZELEVBQVksWUFBWSxHQUFaLGdEQUFZLEVBQVosQ0FBWjs7QUFvRkEsSUFBWSxtQkFBWjs7QUFBQSxXQUFZLG1CQUFaLEVBQStCO0FBQzdCO0FBQ0E7QUFDRCxDQUhELEVBQVksbUJBQW1CLEdBQW5CLDhEQUFtQixFQUFuQixDQUFaOztBQUtBLElBQVksVUFBWjs7QUFBQSxXQUFZLFVBQVosRUFBc0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVHOztBQUNIO0FBQ0QsQ0F6QkQsRUFBWSxVQUFVLEdBQVYsNENBQVUsRUFBVixDQUFaIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvY29uc3RzLnRzP2Q5MTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhvb2tFdmVudHMgPSBleHBvcnRzLkJyaWRnZVN1YnNjcmlwdGlvbnMgPSBleHBvcnRzLkJyaWRnZUV2ZW50cyA9IGV4cG9ydHMuQnVpbHRpblRhYnMgPSB2b2lkIDA7XG52YXIgQnVpbHRpblRhYnM7XG4oZnVuY3Rpb24gKEJ1aWx0aW5UYWJzKSB7XG4gICAgQnVpbHRpblRhYnNbXCJDT01QT05FTlRTXCJdID0gXCJjb21wb25lbnRzXCI7XG4gICAgQnVpbHRpblRhYnNbXCJUSU1FTElORVwiXSA9IFwidGltZWxpbmVcIjtcbiAgICBCdWlsdGluVGFic1tcIlBMVUdJTlNcIl0gPSBcInBsdWdpbnNcIjtcbiAgICBCdWlsdGluVGFic1tcIlNFVFRJTkdTXCJdID0gXCJzZXR0aW5nc1wiO1xufSkoQnVpbHRpblRhYnMgPSBleHBvcnRzLkJ1aWx0aW5UYWJzIHx8IChleHBvcnRzLkJ1aWx0aW5UYWJzID0ge30pKTtcbnZhciBCcmlkZ2VFdmVudHM7XG4oZnVuY3Rpb24gKEJyaWRnZUV2ZW50cykge1xuICAgIC8vIE1pc2NcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NVQlNDUklCRVwiXSA9IFwiYjpzdWJzY3JpYmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1VOU1VCU0NSSUJFXCJdID0gXCJiOnVuc3Vic2NyaWJlXCI7XG4gICAgLyoqIEJhY2tlbmQgaXMgcmVhZHkgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9SRUFEWVwiXSA9IFwiZjpyZWFkeVwiO1xuICAgIC8qKiBEaXNwbGF5cyB0aGUgXCJkZXRlY3RlZCBWdWVcIiBjb25zb2xlIGxvZyAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfTE9HX0RFVEVDVEVEX1ZVRVwiXSA9IFwiYjpsb2ctZGV0ZWN0ZWQtdnVlXCI7XG4gICAgLyoqIEZvcmNlIHJlZnJlc2ggKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1JFRlJFU0hcIl0gPSBcImI6cmVmcmVzaFwiO1xuICAgIC8qKiBUYWIgd2FzIHN3aXRjaGVkICovXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19UQUJfU1dJVENIXCJdID0gXCJiOnRhYjpzd2l0Y2hcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0xPR1wiXSA9IFwiYjpsb2dcIjtcbiAgICAvLyBBcHBzXG4gICAgLyoqIEFwcCB3YXMgcmVnaXN0ZXJlZCAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9BRERcIl0gPSBcImY6YXBwOmFkZFwiO1xuICAgIC8qKiBHZXQgYXBwIGxpc3QgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9MSVNUXCJdID0gXCJiOmFwcDpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQVBQX0xJU1RcIl0gPSBcImY6YXBwOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9BUFBfUkVNT1ZFXCJdID0gXCJmOmFwcDpyZW1vdmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9TRUxFQ1RcIl0gPSBcImI6YXBwOnNlbGVjdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9TRUxFQ1RFRFwiXSA9IFwiZjphcHA6c2VsZWN0ZWRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NDQU5fTEVHQUNZX0FQUFNcIl0gPSBcImI6YXBwOnNjYW4tbGVnYWN5XCI7XG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1RSRUVcIl0gPSBcImI6Y29tcG9uZW50OnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfVFJFRVwiXSA9IFwiZjpjb21wb25lbnQ6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEFcIl0gPSBcImI6Y29tcG9uZW50OnNlbGVjdGVkLWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfU0VMRUNURURfREFUQVwiXSA9IFwiZjpjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiYjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiZjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfU0NST0xMX1RPXCJdID0gXCJiOmNvbXBvbmVudDpzY3JvbGwtdG9cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9GSUxURVJcIl0gPSBcImI6Y29tcG9uZW50OmZpbHRlclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX01PVVNFX09WRVJcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW92ZXJcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9NT1VTRV9PVVRcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW91dFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0NPTlRFWFRfTUVOVV9UQVJHRVRcIl0gPSBcImI6Y29tcG9uZW50OmNvbnRleHQtbWVudS10YXJnZXRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9FRElUX1NUQVRFXCJdID0gXCJiOmNvbXBvbmVudDplZGl0LXN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS1wiXSA9IFwiYjpjb21wb25lbnQ6cGlja1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS19DQU5DRUxFRFwiXSA9IFwiYjpjb21wb25lbnQ6cGljay1jYW5jZWxlZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLX0NBTkNFTEVEXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrLWNhbmNlbGVkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfSU5TUEVDVF9ET01cIl0gPSBcImI6Y29tcG9uZW50Omluc3BlY3QtZG9tXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0lOU1BFQ1RfRE9NXCJdID0gXCJmOmNvbXBvbmVudDppbnNwZWN0LWRvbVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1JFTkRFUl9DT0RFXCJdID0gXCJiOmNvbXBvbmVudDpyZW5kZXItY29kZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9SRU5ERVJfQ09ERVwiXSA9IFwiZjpjb21wb25lbnQ6cmVuZGVyLWNvZGVcIjtcbiAgICAvLyBUaW1lbGluZVxuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0VWRU5UXCJdID0gXCJmOnRpbWVsaW5lOmV2ZW50XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MQVlFUl9MSVNUXCJdID0gXCJiOnRpbWVsaW5lOmxheWVyLWxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MQVlFUl9MSVNUXCJdID0gXCJmOnRpbWVsaW5lOmxheWVyLWxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MQVlFUl9BRERcIl0gPSBcImY6dGltZWxpbmU6bGF5ZXItYWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9TSE9XX1NDUkVFTlNIT1RcIl0gPSBcImI6dGltZWxpbmU6c2hvdy1zY3JlZW5zaG90XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9DTEVBUlwiXSA9IFwiYjp0aW1lbGluZTpjbGVhclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfVElNRUxJTkVfRVZFTlRfREFUQVwiXSA9IFwiYjp0aW1lbGluZTpldmVudC1kYXRhXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfRVZFTlRfREFUQVwiXSA9IFwiZjp0aW1lbGluZTpldmVudC1kYXRhXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MQVlFUl9MT0FEX0VWRU5UU1wiXSA9IFwiYjp0aW1lbGluZTpsYXllci1sb2FkLWV2ZW50c1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTXCJdID0gXCJmOnRpbWVsaW5lOmxheWVyLWxvYWQtZXZlbnRzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9MT0FEX01BUktFUlNcIl0gPSBcImI6dGltZWxpbmU6bG9hZC1tYXJrZXJzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfTE9BRF9NQVJLRVJTXCJdID0gXCJmOnRpbWVsaW5lOmxvYWQtbWFya2Vyc1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX01BUktFUlwiXSA9IFwiZjp0aW1lbGluZTptYXJrZXJcIjtcbiAgICAvLyBQbHVnaW5zXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19ERVZUT09MU19QTFVHSU5fTElTVFwiXSA9IFwiYjpkZXZ0b29scy1wbHVnaW46bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0RFVlRPT0xTX1BMVUdJTl9MSVNUXCJdID0gXCJmOmRldnRvb2xzLXBsdWdpbjpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfREVWVE9PTFNfUExVR0lOX0FERFwiXSA9IFwiZjpkZXZ0b29scy1wbHVnaW46YWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19ERVZUT09MU19QTFVHSU5fU0VUVElOR19VUERBVEVEXCJdID0gXCJiOmRldnRvb2xzLXBsdWdpbjpzZXR0aW5nLXVwZGF0ZWRcIjtcbiAgICAvLyBDdXN0b20gaW5zcGVjdG9yc1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9MSVNUXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfTElTVFwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX0FERFwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOmFkZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9UUkVFXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfVFJFRVwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NVU1RPTV9JTlNQRUNUT1JfU1RBVEVcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjpzdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfU1RBVEVcIl0gPSBcImY6Y3VzdG9tLWluc3BlY3RvcjpzdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9FRElUX1NUQVRFXCJdID0gXCJiOmN1c3RvbS1pbnNwZWN0b3I6ZWRpdC1zdGF0ZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9BQ1RJT05cIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjphY3Rpb25cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6c2VsZWN0LW5vZGVcIjtcbiAgICAvLyBDdXN0b20gc3RhdGVcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NVU1RPTV9TVEFURV9BQ1RJT05cIl0gPSBcImI6Y3VzdG9tLXN0YXRlOmFjdGlvblwiO1xufSkoQnJpZGdlRXZlbnRzID0gZXhwb3J0cy5CcmlkZ2VFdmVudHMgfHwgKGV4cG9ydHMuQnJpZGdlRXZlbnRzID0ge30pKTtcbnZhciBCcmlkZ2VTdWJzY3JpcHRpb25zO1xuKGZ1bmN0aW9uIChCcmlkZ2VTdWJzY3JpcHRpb25zKSB7XG4gICAgQnJpZGdlU3Vic2NyaXB0aW9uc1tcIlNFTEVDVEVEX0NPTVBPTkVOVF9EQVRBXCJdID0gXCJjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZVN1YnNjcmlwdGlvbnNbXCJDT01QT05FTlRfVFJFRVwiXSA9IFwiY29tcG9uZW50OnRyZWVcIjtcbn0pKEJyaWRnZVN1YnNjcmlwdGlvbnMgPSBleHBvcnRzLkJyaWRnZVN1YnNjcmlwdGlvbnMgfHwgKGV4cG9ydHMuQnJpZGdlU3Vic2NyaXB0aW9ucyA9IHt9KSk7XG52YXIgSG9va0V2ZW50cztcbihmdW5jdGlvbiAoSG9va0V2ZW50cykge1xuICAgIEhvb2tFdmVudHNbXCJJTklUXCJdID0gXCJpbml0XCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9JTklUXCJdID0gXCJhcHA6aW5pdFwiO1xuICAgIEhvb2tFdmVudHNbXCJBUFBfQUREXCJdID0gXCJhcHA6YWRkXCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9VTk1PVU5UXCJdID0gXCJhcHA6dW5tb3VudFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfVVBEQVRFRFwiXSA9IFwiY29tcG9uZW50OnVwZGF0ZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX0FEREVEXCJdID0gXCJjb21wb25lbnQ6YWRkZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX1JFTU9WRURcIl0gPSBcImNvbXBvbmVudDpyZW1vdmVkXCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9FTUlUXCJdID0gXCJjb21wb25lbnQ6ZW1pdFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfSElHSExJR0hUXCJdID0gXCJjb21wb25lbnQ6aGlnaGxpZ2h0XCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9VTkhJR0hMSUdIVFwiXSA9IFwiY29tcG9uZW50OnVuaGlnaGxpZ2h0XCI7XG4gICAgSG9va0V2ZW50c1tcIlNFVFVQX0RFVlRPT0xTX1BMVUdJTlwiXSA9IFwiZGV2dG9vbHMtcGx1Z2luOnNldHVwXCI7XG4gICAgSG9va0V2ZW50c1tcIlRJTUVMSU5FX0xBWUVSX0FEREVEXCJdID0gXCJ0aW1lbGluZTpsYXllci1hZGRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJUSU1FTElORV9FVkVOVF9BRERFRFwiXSA9IFwidGltZWxpbmU6ZXZlbnQtYWRkZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ1VTVE9NX0lOU1BFQ1RPUl9BRERcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6YWRkXCI7XG4gICAgSG9va0V2ZW50c1tcIkNVU1RPTV9JTlNQRUNUT1JfU0VORF9UUkVFXCJdID0gXCJjdXN0b20taW5zcGVjdG9yOnNlbmQtdHJlZVwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX1NFTkRfU1RBVEVcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6c2VuZC1zdGF0ZVwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX1NFTEVDVF9OT0RFXCJdID0gXCJjdXN0b20taW5zcGVjdG9yOnNlbGVjdC1ub2RlXCI7XG4gICAgSG9va0V2ZW50c1tcIlBFUkZPUk1BTkNFX1NUQVJUXCJdID0gXCJwZXJmOnN0YXJ0XCI7XG4gICAgSG9va0V2ZW50c1tcIlBFUkZPUk1BTkNFX0VORFwiXSA9IFwicGVyZjplbmRcIjtcbiAgICBIb29rRXZlbnRzW1wiUExVR0lOX1NFVFRJTkdTX1NFVFwiXSA9IFwicGx1Z2luOnNldHRpbmdzOnNldFwiO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgSG9va0V2ZW50c1tcIkZMVVNIXCJdID0gXCJmbHVzaFwiO1xufSkoSG9va0V2ZW50cyA9IGV4cG9ydHMuSG9va0V2ZW50cyB8fCAoZXhwb3J0cy5Ib29rRXZlbnRzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0cy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///79410\n");
|
|
422
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.HookEvents = exports.BridgeSubscriptions = exports.BridgeEvents = exports.BuiltinTabs = void 0;\nvar BuiltinTabs;\n\n(function (BuiltinTabs) {\n BuiltinTabs[\"COMPONENTS\"] = \"components\";\n BuiltinTabs[\"TIMELINE\"] = \"timeline\";\n BuiltinTabs[\"PLUGINS\"] = \"plugins\";\n BuiltinTabs[\"SETTINGS\"] = \"settings\";\n})(BuiltinTabs = exports.BuiltinTabs || (exports.BuiltinTabs = {}));\n\nvar BridgeEvents;\n\n(function (BridgeEvents) {\n // Misc\n BridgeEvents[\"TO_BACK_SUBSCRIBE\"] = \"b:subscribe\";\n BridgeEvents[\"TO_BACK_UNSUBSCRIBE\"] = \"b:unsubscribe\";\n /** Backend is ready */\n\n BridgeEvents[\"TO_FRONT_READY\"] = \"f:ready\";\n /** Displays the \"detected Vue\" console log */\n\n BridgeEvents[\"TO_BACK_LOG_DETECTED_VUE\"] = \"b:log-detected-vue\";\n /** Force refresh */\n\n BridgeEvents[\"TO_BACK_REFRESH\"] = \"b:refresh\";\n /** Tab was switched */\n\n BridgeEvents[\"TO_BACK_TAB_SWITCH\"] = \"b:tab:switch\";\n BridgeEvents[\"TO_BACK_LOG\"] = \"b:log\"; // Apps\n\n /** App was registered */\n\n BridgeEvents[\"TO_FRONT_APP_ADD\"] = \"f:app:add\";\n /** Get app list */\n\n BridgeEvents[\"TO_BACK_APP_LIST\"] = \"b:app:list\";\n BridgeEvents[\"TO_FRONT_APP_LIST\"] = \"f:app:list\";\n BridgeEvents[\"TO_FRONT_APP_REMOVE\"] = \"f:app:remove\";\n BridgeEvents[\"TO_BACK_APP_SELECT\"] = \"b:app:select\";\n BridgeEvents[\"TO_FRONT_APP_SELECTED\"] = \"f:app:selected\";\n BridgeEvents[\"TO_BACK_SCAN_LEGACY_APPS\"] = \"b:app:scan-legacy\"; // Components\n\n BridgeEvents[\"TO_BACK_COMPONENT_TREE\"] = \"b:component:tree\";\n BridgeEvents[\"TO_FRONT_COMPONENT_TREE\"] = \"f:component:tree\";\n BridgeEvents[\"TO_BACK_COMPONENT_SELECTED_DATA\"] = \"b:component:selected-data\";\n BridgeEvents[\"TO_FRONT_COMPONENT_SELECTED_DATA\"] = \"f:component:selected-data\";\n BridgeEvents[\"TO_BACK_COMPONENT_EXPAND\"] = \"b:component:expand\";\n BridgeEvents[\"TO_FRONT_COMPONENT_EXPAND\"] = \"f:component:expand\";\n BridgeEvents[\"TO_BACK_COMPONENT_SCROLL_TO\"] = \"b:component:scroll-to\";\n BridgeEvents[\"TO_BACK_COMPONENT_FILTER\"] = \"b:component:filter\";\n BridgeEvents[\"TO_BACK_COMPONENT_MOUSE_OVER\"] = \"b:component:mouse-over\";\n BridgeEvents[\"TO_BACK_COMPONENT_MOUSE_OUT\"] = \"b:component:mouse-out\";\n BridgeEvents[\"TO_BACK_COMPONENT_CONTEXT_MENU_TARGET\"] = \"b:component:context-menu-target\";\n BridgeEvents[\"TO_BACK_COMPONENT_EDIT_STATE\"] = \"b:component:edit-state\";\n BridgeEvents[\"TO_BACK_COMPONENT_PICK\"] = \"b:component:pick\";\n BridgeEvents[\"TO_FRONT_COMPONENT_PICK\"] = \"f:component:pick\";\n BridgeEvents[\"TO_BACK_COMPONENT_PICK_CANCELED\"] = \"b:component:pick-canceled\";\n BridgeEvents[\"TO_FRONT_COMPONENT_PICK_CANCELED\"] = \"f:component:pick-canceled\";\n BridgeEvents[\"TO_BACK_COMPONENT_INSPECT_DOM\"] = \"b:component:inspect-dom\";\n BridgeEvents[\"TO_FRONT_COMPONENT_INSPECT_DOM\"] = \"f:component:inspect-dom\";\n BridgeEvents[\"TO_BACK_COMPONENT_RENDER_CODE\"] = \"b:component:render-code\";\n BridgeEvents[\"TO_FRONT_COMPONENT_RENDER_CODE\"] = \"f:component:render-code\";\n BridgeEvents[\"TO_FRONT_COMPONENT_UPDATED\"] = \"f:component:updated\"; // Timeline\n\n BridgeEvents[\"TO_FRONT_TIMELINE_EVENT\"] = \"f:timeline:event\";\n BridgeEvents[\"TO_BACK_TIMELINE_LAYER_LIST\"] = \"b:timeline:layer-list\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_LIST\"] = \"f:timeline:layer-list\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_ADD\"] = \"f:timeline:layer-add\";\n BridgeEvents[\"TO_BACK_TIMELINE_SHOW_SCREENSHOT\"] = \"b:timeline:show-screenshot\";\n BridgeEvents[\"TO_BACK_TIMELINE_CLEAR\"] = \"b:timeline:clear\";\n BridgeEvents[\"TO_BACK_TIMELINE_EVENT_DATA\"] = \"b:timeline:event-data\";\n BridgeEvents[\"TO_FRONT_TIMELINE_EVENT_DATA\"] = \"f:timeline:event-data\";\n BridgeEvents[\"TO_BACK_TIMELINE_LAYER_LOAD_EVENTS\"] = \"b:timeline:layer-load-events\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LAYER_LOAD_EVENTS\"] = \"f:timeline:layer-load-events\";\n BridgeEvents[\"TO_BACK_TIMELINE_LOAD_MARKERS\"] = \"b:timeline:load-markers\";\n BridgeEvents[\"TO_FRONT_TIMELINE_LOAD_MARKERS\"] = \"f:timeline:load-markers\";\n BridgeEvents[\"TO_FRONT_TIMELINE_MARKER\"] = \"f:timeline:marker\"; // Plugins\n\n BridgeEvents[\"TO_BACK_DEVTOOLS_PLUGIN_LIST\"] = \"b:devtools-plugin:list\";\n BridgeEvents[\"TO_FRONT_DEVTOOLS_PLUGIN_LIST\"] = \"f:devtools-plugin:list\";\n BridgeEvents[\"TO_FRONT_DEVTOOLS_PLUGIN_ADD\"] = \"f:devtools-plugin:add\";\n BridgeEvents[\"TO_BACK_DEVTOOLS_PLUGIN_SETTING_UPDATED\"] = \"b:devtools-plugin:setting-updated\"; // Custom inspectors\n\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_LIST\"] = \"b:custom-inspector:list\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_LIST\"] = \"f:custom-inspector:list\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_ADD\"] = \"f:custom-inspector:add\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_TREE\"] = \"b:custom-inspector:tree\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_TREE\"] = \"f:custom-inspector:tree\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_STATE\"] = \"b:custom-inspector:state\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_STATE\"] = \"f:custom-inspector:state\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_EDIT_STATE\"] = \"b:custom-inspector:edit-state\";\n BridgeEvents[\"TO_BACK_CUSTOM_INSPECTOR_ACTION\"] = \"b:custom-inspector:action\";\n BridgeEvents[\"TO_FRONT_CUSTOM_INSPECTOR_SELECT_NODE\"] = \"f:custom-inspector:select-node\"; // Custom state\n\n BridgeEvents[\"TO_BACK_CUSTOM_STATE_ACTION\"] = \"b:custom-state:action\";\n})(BridgeEvents = exports.BridgeEvents || (exports.BridgeEvents = {}));\n\nvar BridgeSubscriptions;\n\n(function (BridgeSubscriptions) {\n BridgeSubscriptions[\"SELECTED_COMPONENT_DATA\"] = \"component:selected-data\";\n BridgeSubscriptions[\"COMPONENT_TREE\"] = \"component:tree\";\n})(BridgeSubscriptions = exports.BridgeSubscriptions || (exports.BridgeSubscriptions = {}));\n\nvar HookEvents;\n\n(function (HookEvents) {\n HookEvents[\"INIT\"] = \"init\";\n HookEvents[\"APP_INIT\"] = \"app:init\";\n HookEvents[\"APP_ADD\"] = \"app:add\";\n HookEvents[\"APP_UNMOUNT\"] = \"app:unmount\";\n HookEvents[\"COMPONENT_UPDATED\"] = \"component:updated\";\n HookEvents[\"COMPONENT_ADDED\"] = \"component:added\";\n HookEvents[\"COMPONENT_REMOVED\"] = \"component:removed\";\n HookEvents[\"COMPONENT_EMIT\"] = \"component:emit\";\n HookEvents[\"COMPONENT_HIGHLIGHT\"] = \"component:highlight\";\n HookEvents[\"COMPONENT_UNHIGHLIGHT\"] = \"component:unhighlight\";\n HookEvents[\"SETUP_DEVTOOLS_PLUGIN\"] = \"devtools-plugin:setup\";\n HookEvents[\"TIMELINE_LAYER_ADDED\"] = \"timeline:layer-added\";\n HookEvents[\"TIMELINE_EVENT_ADDED\"] = \"timeline:event-added\";\n HookEvents[\"CUSTOM_INSPECTOR_ADD\"] = \"custom-inspector:add\";\n HookEvents[\"CUSTOM_INSPECTOR_SEND_TREE\"] = \"custom-inspector:send-tree\";\n HookEvents[\"CUSTOM_INSPECTOR_SEND_STATE\"] = \"custom-inspector:send-state\";\n HookEvents[\"CUSTOM_INSPECTOR_SELECT_NODE\"] = \"custom-inspector:select-node\";\n HookEvents[\"PERFORMANCE_START\"] = \"perf:start\";\n HookEvents[\"PERFORMANCE_END\"] = \"perf:end\";\n HookEvents[\"PLUGIN_SETTINGS_SET\"] = \"plugin:settings:set\";\n /**\n * @deprecated\n */\n\n HookEvents[\"FLUSH\"] = \"flush\";\n /**\n * @deprecated\n */\n\n HookEvents[\"TRACK_UPDATE\"] = \"_track-update\";\n /**\n * @deprecated\n */\n\n HookEvents[\"FLASH_UPDATE\"] = \"_flash-update\";\n})(HookEvents = exports.HookEvents || (exports.HookEvents = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk0MTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBWSxXQUFaOztBQUFBLFdBQVksV0FBWixFQUF1QjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNELENBTEQsRUFBWSxXQUFXLEdBQVgsOENBQVcsRUFBWCxDQUFaOztBQU9BLElBQVksWUFBWjs7QUFBQSxXQUFZLFlBQVosRUFBd0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQSx3Q0Fac0IsQ0FjdEI7O0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBdkJzQixDQXlCdEI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQTlDc0IsQ0FnRHRCOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQTdEc0IsQ0ErRHRCOztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdHQW5Fc0IsQ0FxRXRCOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJGQS9Fc0IsQ0FpRnRCOztBQUNBO0FBQ0QsQ0FuRkQsRUFBWSxZQUFZLEdBQVosZ0RBQVksRUFBWixDQUFaOztBQXFGQSxJQUFZLG1CQUFaOztBQUFBLFdBQVksbUJBQVosRUFBK0I7QUFDN0I7QUFDQTtBQUNELENBSEQsRUFBWSxtQkFBbUIsR0FBbkIsOERBQW1CLEVBQW5CLENBQVo7O0FBS0EsSUFBWSxVQUFaOztBQUFBLFdBQVksVUFBWixFQUFzQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUc7O0FBQ0g7QUFDQTs7QUFFRzs7QUFDSDtBQUNBOztBQUVHOztBQUNIO0FBQ0QsQ0FqQ0QsRUFBWSxVQUFVLEdBQVYsNENBQVUsRUFBVixDQUFaIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvY29uc3RzLnRzP2Q5MTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhvb2tFdmVudHMgPSBleHBvcnRzLkJyaWRnZVN1YnNjcmlwdGlvbnMgPSBleHBvcnRzLkJyaWRnZUV2ZW50cyA9IGV4cG9ydHMuQnVpbHRpblRhYnMgPSB2b2lkIDA7XG52YXIgQnVpbHRpblRhYnM7XG4oZnVuY3Rpb24gKEJ1aWx0aW5UYWJzKSB7XG4gICAgQnVpbHRpblRhYnNbXCJDT01QT05FTlRTXCJdID0gXCJjb21wb25lbnRzXCI7XG4gICAgQnVpbHRpblRhYnNbXCJUSU1FTElORVwiXSA9IFwidGltZWxpbmVcIjtcbiAgICBCdWlsdGluVGFic1tcIlBMVUdJTlNcIl0gPSBcInBsdWdpbnNcIjtcbiAgICBCdWlsdGluVGFic1tcIlNFVFRJTkdTXCJdID0gXCJzZXR0aW5nc1wiO1xufSkoQnVpbHRpblRhYnMgPSBleHBvcnRzLkJ1aWx0aW5UYWJzIHx8IChleHBvcnRzLkJ1aWx0aW5UYWJzID0ge30pKTtcbnZhciBCcmlkZ2VFdmVudHM7XG4oZnVuY3Rpb24gKEJyaWRnZUV2ZW50cykge1xuICAgIC8vIE1pc2NcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NVQlNDUklCRVwiXSA9IFwiYjpzdWJzY3JpYmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1VOU1VCU0NSSUJFXCJdID0gXCJiOnVuc3Vic2NyaWJlXCI7XG4gICAgLyoqIEJhY2tlbmQgaXMgcmVhZHkgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9SRUFEWVwiXSA9IFwiZjpyZWFkeVwiO1xuICAgIC8qKiBEaXNwbGF5cyB0aGUgXCJkZXRlY3RlZCBWdWVcIiBjb25zb2xlIGxvZyAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfTE9HX0RFVEVDVEVEX1ZVRVwiXSA9IFwiYjpsb2ctZGV0ZWN0ZWQtdnVlXCI7XG4gICAgLyoqIEZvcmNlIHJlZnJlc2ggKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1JFRlJFU0hcIl0gPSBcImI6cmVmcmVzaFwiO1xuICAgIC8qKiBUYWIgd2FzIHN3aXRjaGVkICovXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19UQUJfU1dJVENIXCJdID0gXCJiOnRhYjpzd2l0Y2hcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0xPR1wiXSA9IFwiYjpsb2dcIjtcbiAgICAvLyBBcHBzXG4gICAgLyoqIEFwcCB3YXMgcmVnaXN0ZXJlZCAqL1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9BRERcIl0gPSBcImY6YXBwOmFkZFwiO1xuICAgIC8qKiBHZXQgYXBwIGxpc3QgKi9cbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9MSVNUXCJdID0gXCJiOmFwcDpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQVBQX0xJU1RcIl0gPSBcImY6YXBwOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9BUFBfUkVNT1ZFXCJdID0gXCJmOmFwcDpyZW1vdmVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0FQUF9TRUxFQ1RcIl0gPSBcImI6YXBwOnNlbGVjdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0FQUF9TRUxFQ1RFRFwiXSA9IFwiZjphcHA6c2VsZWN0ZWRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1NDQU5fTEVHQUNZX0FQUFNcIl0gPSBcImI6YXBwOnNjYW4tbGVnYWN5XCI7XG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1RSRUVcIl0gPSBcImI6Y29tcG9uZW50OnRyZWVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfVFJFRVwiXSA9IFwiZjpjb21wb25lbnQ6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1NFTEVDVEVEX0RBVEFcIl0gPSBcImI6Y29tcG9uZW50OnNlbGVjdGVkLWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfU0VMRUNURURfREFUQVwiXSA9IFwiZjpjb21wb25lbnQ6c2VsZWN0ZWQtZGF0YVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiYjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0VYUEFORFwiXSA9IFwiZjpjb21wb25lbnQ6ZXhwYW5kXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfU0NST0xMX1RPXCJdID0gXCJiOmNvbXBvbmVudDpzY3JvbGwtdG9cIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9GSUxURVJcIl0gPSBcImI6Y29tcG9uZW50OmZpbHRlclwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX01PVVNFX09WRVJcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW92ZXJcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9NT1VTRV9PVVRcIl0gPSBcImI6Y29tcG9uZW50Om1vdXNlLW91dFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX0NPTlRFWFRfTUVOVV9UQVJHRVRcIl0gPSBcImI6Y29tcG9uZW50OmNvbnRleHQtbWVudS10YXJnZXRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0NPTVBPTkVOVF9FRElUX1NUQVRFXCJdID0gXCJiOmNvbXBvbmVudDplZGl0LXN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS1wiXSA9IFwiYjpjb21wb25lbnQ6cGlja1wiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfUElDS19DQU5DRUxFRFwiXSA9IFwiYjpjb21wb25lbnQ6cGljay1jYW5jZWxlZFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9QSUNLX0NBTkNFTEVEXCJdID0gXCJmOmNvbXBvbmVudDpwaWNrLWNhbmNlbGVkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DT01QT05FTlRfSU5TUEVDVF9ET01cIl0gPSBcImI6Y29tcG9uZW50Omluc3BlY3QtZG9tXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ09NUE9ORU5UX0lOU1BFQ1RfRE9NXCJdID0gXCJmOmNvbXBvbmVudDppbnNwZWN0LWRvbVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ09NUE9ORU5UX1JFTkRFUl9DT0RFXCJdID0gXCJiOmNvbXBvbmVudDpyZW5kZXItY29kZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NPTVBPTkVOVF9SRU5ERVJfQ09ERVwiXSA9IFwiZjpjb21wb25lbnQ6cmVuZGVyLWNvZGVcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9DT01QT05FTlRfVVBEQVRFRFwiXSA9IFwiZjpjb21wb25lbnQ6dXBkYXRlZFwiO1xuICAgIC8vIFRpbWVsaW5lXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfRVZFTlRcIl0gPSBcImY6dGltZWxpbmU6ZXZlbnRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX0xBWUVSX0xJU1RcIl0gPSBcImI6dGltZWxpbmU6bGF5ZXItbGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0xJU1RcIl0gPSBcImY6dGltZWxpbmU6bGF5ZXItbGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX1RJTUVMSU5FX0xBWUVSX0FERFwiXSA9IFwiZjp0aW1lbGluZTpsYXllci1hZGRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX1NIT1dfU0NSRUVOU0hPVFwiXSA9IFwiYjp0aW1lbGluZTpzaG93LXNjcmVlbnNob3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX0NMRUFSXCJdID0gXCJiOnRpbWVsaW5lOmNsZWFyXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19USU1FTElORV9FVkVOVF9EQVRBXCJdID0gXCJiOnRpbWVsaW5lOmV2ZW50LWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9FVkVOVF9EQVRBXCJdID0gXCJmOnRpbWVsaW5lOmV2ZW50LWRhdGFcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX0xBWUVSX0xPQURfRVZFTlRTXCJdID0gXCJiOnRpbWVsaW5lOmxheWVyLWxvYWQtZXZlbnRzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfTEFZRVJfTE9BRF9FVkVOVFNcIl0gPSBcImY6dGltZWxpbmU6bGF5ZXItbG9hZC1ldmVudHNcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX1RJTUVMSU5FX0xPQURfTUFSS0VSU1wiXSA9IFwiYjp0aW1lbGluZTpsb2FkLW1hcmtlcnNcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9USU1FTElORV9MT0FEX01BUktFUlNcIl0gPSBcImY6dGltZWxpbmU6bG9hZC1tYXJrZXJzXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfVElNRUxJTkVfTUFSS0VSXCJdID0gXCJmOnRpbWVsaW5lOm1hcmtlclwiO1xuICAgIC8vIFBsdWdpbnNcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0RFVlRPT0xTX1BMVUdJTl9MSVNUXCJdID0gXCJiOmRldnRvb2xzLXBsdWdpbjpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfREVWVE9PTFNfUExVR0lOX0xJU1RcIl0gPSBcImY6ZGV2dG9vbHMtcGx1Z2luOmxpc3RcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19GUk9OVF9ERVZUT09MU19QTFVHSU5fQUREXCJdID0gXCJmOmRldnRvb2xzLXBsdWdpbjphZGRcIjtcbiAgICBCcmlkZ2VFdmVudHNbXCJUT19CQUNLX0RFVlRPT0xTX1BMVUdJTl9TRVRUSU5HX1VQREFURURcIl0gPSBcImI6ZGV2dG9vbHMtcGx1Z2luOnNldHRpbmctdXBkYXRlZFwiO1xuICAgIC8vIEN1c3RvbSBpbnNwZWN0b3JzXG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0xJU1RcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjpsaXN0XCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ1VTVE9NX0lOU1BFQ1RPUl9MSVNUXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6bGlzdFwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfQUREXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6YWRkXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX1RSRUVcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3Rvcjp0cmVlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ1VTVE9NX0lOU1BFQ1RPUl9UUkVFXCJdID0gXCJmOmN1c3RvbS1pbnNwZWN0b3I6dHJlZVwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX0lOU1BFQ1RPUl9TVEFURVwiXSA9IFwiYjpjdXN0b20taW5zcGVjdG9yOnN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fRlJPTlRfQ1VTVE9NX0lOU1BFQ1RPUl9TVEFURVwiXSA9IFwiZjpjdXN0b20taW5zcGVjdG9yOnN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0VESVRfU1RBVEVcIl0gPSBcImI6Y3VzdG9tLWluc3BlY3RvcjplZGl0LXN0YXRlXCI7XG4gICAgQnJpZGdlRXZlbnRzW1wiVE9fQkFDS19DVVNUT01fSU5TUEVDVE9SX0FDVElPTlwiXSA9IFwiYjpjdXN0b20taW5zcGVjdG9yOmFjdGlvblwiO1xuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0ZST05UX0NVU1RPTV9JTlNQRUNUT1JfU0VMRUNUX05PREVcIl0gPSBcImY6Y3VzdG9tLWluc3BlY3RvcjpzZWxlY3Qtbm9kZVwiO1xuICAgIC8vIEN1c3RvbSBzdGF0ZVxuICAgIEJyaWRnZUV2ZW50c1tcIlRPX0JBQ0tfQ1VTVE9NX1NUQVRFX0FDVElPTlwiXSA9IFwiYjpjdXN0b20tc3RhdGU6YWN0aW9uXCI7XG59KShCcmlkZ2VFdmVudHMgPSBleHBvcnRzLkJyaWRnZUV2ZW50cyB8fCAoZXhwb3J0cy5CcmlkZ2VFdmVudHMgPSB7fSkpO1xudmFyIEJyaWRnZVN1YnNjcmlwdGlvbnM7XG4oZnVuY3Rpb24gKEJyaWRnZVN1YnNjcmlwdGlvbnMpIHtcbiAgICBCcmlkZ2VTdWJzY3JpcHRpb25zW1wiU0VMRUNURURfQ09NUE9ORU5UX0RBVEFcIl0gPSBcImNvbXBvbmVudDpzZWxlY3RlZC1kYXRhXCI7XG4gICAgQnJpZGdlU3Vic2NyaXB0aW9uc1tcIkNPTVBPTkVOVF9UUkVFXCJdID0gXCJjb21wb25lbnQ6dHJlZVwiO1xufSkoQnJpZGdlU3Vic2NyaXB0aW9ucyA9IGV4cG9ydHMuQnJpZGdlU3Vic2NyaXB0aW9ucyB8fCAoZXhwb3J0cy5CcmlkZ2VTdWJzY3JpcHRpb25zID0ge30pKTtcbnZhciBIb29rRXZlbnRzO1xuKGZ1bmN0aW9uIChIb29rRXZlbnRzKSB7XG4gICAgSG9va0V2ZW50c1tcIklOSVRcIl0gPSBcImluaXRcIjtcbiAgICBIb29rRXZlbnRzW1wiQVBQX0lOSVRcIl0gPSBcImFwcDppbml0XCI7XG4gICAgSG9va0V2ZW50c1tcIkFQUF9BRERcIl0gPSBcImFwcDphZGRcIjtcbiAgICBIb29rRXZlbnRzW1wiQVBQX1VOTU9VTlRcIl0gPSBcImFwcDp1bm1vdW50XCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9VUERBVEVEXCJdID0gXCJjb21wb25lbnQ6dXBkYXRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfQURERURcIl0gPSBcImNvbXBvbmVudDphZGRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJDT01QT05FTlRfUkVNT1ZFRFwiXSA9IFwiY29tcG9uZW50OnJlbW92ZWRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX0VNSVRcIl0gPSBcImNvbXBvbmVudDplbWl0XCI7XG4gICAgSG9va0V2ZW50c1tcIkNPTVBPTkVOVF9ISUdITElHSFRcIl0gPSBcImNvbXBvbmVudDpoaWdobGlnaHRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ09NUE9ORU5UX1VOSElHSExJR0hUXCJdID0gXCJjb21wb25lbnQ6dW5oaWdobGlnaHRcIjtcbiAgICBIb29rRXZlbnRzW1wiU0VUVVBfREVWVE9PTFNfUExVR0lOXCJdID0gXCJkZXZ0b29scy1wbHVnaW46c2V0dXBcIjtcbiAgICBIb29rRXZlbnRzW1wiVElNRUxJTkVfTEFZRVJfQURERURcIl0gPSBcInRpbWVsaW5lOmxheWVyLWFkZGVkXCI7XG4gICAgSG9va0V2ZW50c1tcIlRJTUVMSU5FX0VWRU5UX0FEREVEXCJdID0gXCJ0aW1lbGluZTpldmVudC1hZGRlZFwiO1xuICAgIEhvb2tFdmVudHNbXCJDVVNUT01fSU5TUEVDVE9SX0FERFwiXSA9IFwiY3VzdG9tLWluc3BlY3RvcjphZGRcIjtcbiAgICBIb29rRXZlbnRzW1wiQ1VTVE9NX0lOU1BFQ1RPUl9TRU5EX1RSRUVcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6c2VuZC10cmVlXCI7XG4gICAgSG9va0V2ZW50c1tcIkNVU1RPTV9JTlNQRUNUT1JfU0VORF9TVEFURVwiXSA9IFwiY3VzdG9tLWluc3BlY3RvcjpzZW5kLXN0YXRlXCI7XG4gICAgSG9va0V2ZW50c1tcIkNVU1RPTV9JTlNQRUNUT1JfU0VMRUNUX05PREVcIl0gPSBcImN1c3RvbS1pbnNwZWN0b3I6c2VsZWN0LW5vZGVcIjtcbiAgICBIb29rRXZlbnRzW1wiUEVSRk9STUFOQ0VfU1RBUlRcIl0gPSBcInBlcmY6c3RhcnRcIjtcbiAgICBIb29rRXZlbnRzW1wiUEVSRk9STUFOQ0VfRU5EXCJdID0gXCJwZXJmOmVuZFwiO1xuICAgIEhvb2tFdmVudHNbXCJQTFVHSU5fU0VUVElOR1NfU0VUXCJdID0gXCJwbHVnaW46c2V0dGluZ3M6c2V0XCI7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBIb29rRXZlbnRzW1wiRkxVU0hcIl0gPSBcImZsdXNoXCI7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBIb29rRXZlbnRzW1wiVFJBQ0tfVVBEQVRFXCJdID0gXCJfdHJhY2stdXBkYXRlXCI7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBIb29rRXZlbnRzW1wiRkxBU0hfVVBEQVRFXCJdID0gXCJfZmxhc2gtdXBkYXRlXCI7XG59KShIb29rRXZlbnRzID0gZXhwb3J0cy5Ib29rRXZlbnRzIHx8IChleHBvcnRzLkhvb2tFdmVudHMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79410\n");
|
|
399
423
|
|
|
400
424
|
/***/ }),
|
|
401
425
|
|
|
@@ -443,7 +467,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
443
467
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
444
468
|
|
|
445
469
|
"use strict";
|
|
446
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.SharedData = exports.watchSharedData = exports.destroySharedData = exports.onSharedDataInit = exports.initSharedData = void 0;\n\nconst storage_1 = __webpack_require__(58561);\n\nconst env_1 = __webpack_require__(66210); // Initial state\n\n\nconst internalSharedData = {\n openInEditorHost: '/',\n componentNameStyle: 'class',\n theme: 'auto',\n displayDensity: 'low',\n timeFormat: 'default',\n recordVuex: true,\n cacheVuexSnapshotsEvery: 50,\n cacheVuexSnapshotsLimit: 10,\n snapshotLoading: false,\n componentEventsEnabled: true,\n performanceMonitoringEnabled: true,\n editableProps: false,\n logDetected: true,\n vuexNewBackend: false,\n vuexAutoload: false,\n vuexGroupGettersByModule: true,\n showMenuScrollTip: true,\n timelineTimeGrid: true,\n timelineScreenshots: true,\n menuStepScrolling: env_1.isMac,\n pluginPermissions: {},\n pluginSettings: {},\n pageConfig: {},\n legacyApps: false,\n debugInfo: false\n};\nconst persisted = ['componentNameStyle', 'theme', 'displayDensity', 'recordVuex', 'editableProps', 'logDetected', 'vuexNewBackend', 'vuexAutoload', 'vuexGroupGettersByModule', 'timeFormat', 'showMenuScrollTip', 'timelineTimeGrid', 'timelineScreenshots', 'menuStepScrolling', 'pluginPermissions', 'pluginSettings', 'performanceMonitoringEnabled', 'componentEventsEnabled', 'debugInfo'];\nconst storageVersion = '6.0.0-alpha.1'; // ---- INTERNALS ---- //\n\nlet bridge; // List of fields to persist to storage (disabled if 'false')\n// This should be unique to each shared data client to prevent conflicts\n\nlet persist = false;\nlet data;\nlet initRetryInterval;\nlet initRetryCount = 0;\nconst initCbs = [];\n\nfunction initSharedData(params) {\n return new Promise(resolve => {\n // Mandatory params\n bridge = params.bridge;\n persist = !!params.persist;\n\n if (persist) {\n if (false) {} // Load persisted fields\n\n\n persisted.forEach(key => {\n const value = (0, storage_1.getStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`);\n\n if (value !== null) {\n internalSharedData[key] = value;\n }\n });\n bridge.on('shared-data:load', () => {\n // Send all fields\n Object.keys(internalSharedData).forEach(key => {\n sendValue(key, internalSharedData[key]);\n });\n bridge.send('shared-data:load-complete');\n });\n bridge.on('shared-data:init-complete', () => {\n if (false) {}\n\n clearInterval(initRetryInterval);\n resolve();\n });\n bridge.send('shared-data:master-init-waiting'); // In case backend init is executed after frontend\n\n bridge.on('shared-data:minion-init-waiting', () => {\n bridge.send('shared-data:master-init-waiting');\n });\n initRetryCount = 0;\n clearInterval(initRetryInterval);\n initRetryInterval = setInterval(() => {\n if (false) {}\n\n bridge.send('shared-data:master-init-waiting');\n initRetryCount++;\n\n if (initRetryCount > 30) {\n clearInterval(initRetryInterval);\n console.error('[shared data] Master init failed');\n }\n }, 2000);\n } else {\n if (false) {}\n\n bridge.on('shared-data:master-init-waiting', () => {\n if (false) {} // Load all persisted shared data\n\n\n bridge.send('shared-data:load');\n bridge.once('shared-data:load-complete', () => {\n if (false) {}\n\n bridge.send('shared-data:init-complete');\n resolve();\n });\n });\n bridge.send('shared-data:minion-init-waiting');\n }\n\n data = { ...internalSharedData\n };\n\n if (params.Vue) {\n data = params.Vue.observable(data);\n } // Update value from other shared data clients\n\n\n bridge.on('shared-data:set', ({\n key,\n value\n }) => {\n setValue(key, value);\n });\n initCbs.forEach(cb => cb());\n });\n}\n\nexports.initSharedData = initSharedData;\n\nfunction onSharedDataInit(cb) {\n initCbs.push(cb);\n return () => {\n const index = initCbs.indexOf(cb);\n if (index !== -1) initCbs.splice(index, 1);\n };\n}\n\nexports.onSharedDataInit = onSharedDataInit;\n\nfunction destroySharedData() {\n bridge.removeAllListeners('shared-data:set');\n watchers = {};\n}\n\nexports.destroySharedData = destroySharedData;\nlet watchers = {};\n\nfunction setValue(key, value) {\n // Storage\n if (persist && persisted.includes(key)) {\n (0, storage_1.setStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`, value);\n }\n\n const oldValue = data[key];\n data[key] = value;\n const handlers = watchers[key];\n\n if (handlers) {\n handlers.forEach(h => h(value, oldValue));\n } // Validate Proxy set trap\n\n\n return true;\n}\n\nfunction sendValue(key, value) {\n bridge && bridge.send('shared-data:set', {\n key,\n value\n });\n}\n\nfunction watchSharedData(prop, handler) {\n const list = watchers[prop] || (watchers[prop] = []);\n list.push(handler);\n return () => {\n const index = list.indexOf(handler);\n if (index !== -1) list.splice(index, 1);\n };\n}\n\nexports.watchSharedData = watchSharedData;\nconst proxy = {};\nObject.keys(internalSharedData).forEach(key => {\n Object.defineProperty(proxy, key, {\n configurable: false,\n get: () => data[key],\n set: value => {\n sendValue(key, value);\n setValue(key, value);\n }\n });\n});\nexports.SharedData = proxy;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZXZ0b29scy8uLi9zcmMvc2hhcmVkLWRhdGEudHM/ZDBiYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2hhcmVkRGF0YSA9IGV4cG9ydHMud2F0Y2hTaGFyZWREYXRhID0gZXhwb3J0cy5kZXN0cm95U2hhcmVkRGF0YSA9IGV4cG9ydHMub25TaGFyZWREYXRhSW5pdCA9IGV4cG9ydHMuaW5pdFNoYXJlZERhdGEgPSB2b2lkIDA7XG5jb25zdCBzdG9yYWdlXzEgPSByZXF1aXJlKFwiLi9zdG9yYWdlXCIpO1xuY29uc3QgZW52XzEgPSByZXF1aXJlKFwiLi9lbnZcIik7XG4vLyBJbml0aWFsIHN0YXRlXG5jb25zdCBpbnRlcm5hbFNoYXJlZERhdGEgPSB7XG4gICAgb3BlbkluRWRpdG9ySG9zdDogJy8nLFxuICAgIGNvbXBvbmVudE5hbWVTdHlsZTogJ2NsYXNzJyxcbiAgICB0aGVtZTogJ2F1dG8nLFxuICAgIGRpc3BsYXlEZW5zaXR5OiAnbG93JyxcbiAgICB0aW1lRm9ybWF0OiAnZGVmYXVsdCcsXG4gICAgcmVjb3JkVnVleDogdHJ1ZSxcbiAgICBjYWNoZVZ1ZXhTbmFwc2hvdHNFdmVyeTogNTAsXG4gICAgY2FjaGVWdWV4U25hcHNob3RzTGltaXQ6IDEwLFxuICAgIHNuYXBzaG90TG9hZGluZzogZmFsc2UsXG4gICAgY29tcG9uZW50RXZlbnRzRW5hYmxlZDogdHJ1ZSxcbiAgICBwZXJmb3JtYW5jZU1vbml0b3JpbmdFbmFibGVkOiB0cnVlLFxuICAgIGVkaXRhYmxlUHJvcHM6IGZhbHNlLFxuICAgIGxvZ0RldGVjdGVkOiB0cnVlLFxuICAgIHZ1ZXhOZXdCYWNrZW5kOiBmYWxzZSxcbiAgICB2dWV4QXV0b2xvYWQ6IGZhbHNlLFxuICAgIHZ1ZXhHcm91cEdldHRlcnNCeU1vZHVsZTogdHJ1ZSxcbiAgICBzaG93TWVudVNjcm9sbFRpcDogdHJ1ZSxcbiAgICB0aW1lbGluZVRpbWVHcmlkOiB0cnVlLFxuICAgIHRpbWVsaW5lU2NyZWVuc2hvdHM6IHRydWUsXG4gICAgbWVudVN0ZXBTY3JvbGxpbmc6IGVudl8xLmlzTWFjLFxuICAgIHBsdWdpblBlcm1pc3Npb25zOiB7fSxcbiAgICBwbHVnaW5TZXR0aW5nczoge30sXG4gICAgcGFnZUNvbmZpZzoge30sXG4gICAgbGVnYWN5QXBwczogZmFsc2UsXG4gICAgZGVidWdJbmZvOiBmYWxzZSxcbn07XG5jb25zdCBwZXJzaXN0ZWQgPSBbXG4gICAgJ2NvbXBvbmVudE5hbWVTdHlsZScsXG4gICAgJ3RoZW1lJyxcbiAgICAnZGlzcGxheURlbnNpdHknLFxuICAgICdyZWNvcmRWdWV4JyxcbiAgICAnZWRpdGFibGVQcm9wcycsXG4gICAgJ2xvZ0RldGVjdGVkJyxcbiAgICAndnVleE5ld0JhY2tlbmQnLFxuICAgICd2dWV4QXV0b2xvYWQnLFxuICAgICd2dWV4R3JvdXBHZXR0ZXJzQnlNb2R1bGUnLFxuICAgICd0aW1lRm9ybWF0JyxcbiAgICAnc2hvd01lbnVTY3JvbGxUaXAnLFxuICAgICd0aW1lbGluZVRpbWVHcmlkJyxcbiAgICAndGltZWxpbmVTY3JlZW5zaG90cycsXG4gICAgJ21lbnVTdGVwU2Nyb2xsaW5nJyxcbiAgICAncGx1Z2luUGVybWlzc2lvbnMnLFxuICAgICdwbHVnaW5TZXR0aW5ncycsXG4gICAgJ3BlcmZvcm1hbmNlTW9uaXRvcmluZ0VuYWJsZWQnLFxuICAgICdjb21wb25lbnRFdmVudHNFbmFibGVkJyxcbiAgICAnZGVidWdJbmZvJyxcbl07XG5jb25zdCBzdG9yYWdlVmVyc2lvbiA9ICc2LjAuMC1hbHBoYS4xJztcbi8vIC0tLS0gSU5URVJOQUxTIC0tLS0gLy9cbmxldCBicmlkZ2U7XG4vLyBMaXN0IG9mIGZpZWxkcyB0byBwZXJzaXN0IHRvIHN0b3JhZ2UgKGRpc2FibGVkIGlmICdmYWxzZScpXG4vLyBUaGlzIHNob3VsZCBiZSB1bmlxdWUgdG8gZWFjaCBzaGFyZWQgZGF0YSBjbGllbnQgdG8gcHJldmVudCBjb25mbGljdHNcbmxldCBwZXJzaXN0ID0gZmFsc2U7XG5sZXQgZGF0YTtcbmxldCBpbml0UmV0cnlJbnRlcnZhbDtcbmxldCBpbml0UmV0cnlDb3VudCA9IDA7XG5jb25zdCBpbml0Q2JzID0gW107XG5mdW5jdGlvbiBpbml0U2hhcmVkRGF0YShwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgLy8gTWFuZGF0b3J5IHBhcmFtc1xuICAgICAgICBicmlkZ2UgPSBwYXJhbXMuYnJpZGdlO1xuICAgICAgICBwZXJzaXN0ID0gISFwYXJhbXMucGVyc2lzdDtcbiAgICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCBpbiBwcm9ncmVzcy4uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTG9hZCBwZXJzaXN0ZWQgZmllbGRzXG4gICAgICAgICAgICBwZXJzaXN0ZWQuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKDAsIHN0b3JhZ2VfMS5nZXRTdG9yYWdlKShgdnVlLWRldnRvb2xzLSR7c3RvcmFnZVZlcnNpb259OnNoYXJlZC1kYXRhOiR7a2V5fWApO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFNoYXJlZERhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTpsb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNlbmQgYWxsIGZpZWxkc1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGludGVybmFsU2hhcmVkRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZW5kVmFsdWUoa2V5LCBpbnRlcm5hbFNoYXJlZERhdGFba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOmxvYWQtY29tcGxldGUnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTppbml0LWNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbc2hhcmVkIGRhdGFdIE1hc3RlciBpbml0IGNvbXBsZXRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW5pdFJldHJ5SW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgIC8vIEluIGNhc2UgYmFja2VuZCBpbml0IGlzIGV4ZWN1dGVkIGFmdGVyIGZyb250ZW5kXG4gICAgICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOm1pbmlvbi1pbml0LXdhaXRpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5pdFJldHJ5Q291bnQgPSAwO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbml0UmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgICBpbml0UmV0cnlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCByZXRyeWluZy4uLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6bWFzdGVyLWluaXQtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIGluaXRSZXRyeUNvdW50Kys7XG4gICAgICAgICAgICAgICAgaWYgKGluaXRSZXRyeUNvdW50ID4gMzApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbml0UmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tzaGFyZWQgZGF0YV0gTWFzdGVyIGluaXQgZmFpbGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGluaXQgaW4gcHJvZ3Jlc3MuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyaWRnZS5vbignc2hhcmVkLWRhdGE6bWFzdGVyLWluaXQtd2FpdGluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNaW5pb24gbG9hZGluZyBkYXRhLi4uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIExvYWQgYWxsIHBlcnNpc3RlZCBzaGFyZWQgZGF0YVxuICAgICAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTpsb2FkJyk7XG4gICAgICAgICAgICAgICAgYnJpZGdlLm9uY2UoJ3NoYXJlZC1kYXRhOmxvYWQtY29tcGxldGUnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGluaXQgY29tcGxldGUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6aW5pdC1jb21wbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTptaW5pb24taW5pdC13YWl0aW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLmludGVybmFsU2hhcmVkRGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHBhcmFtcy5WdWUpIHtcbiAgICAgICAgICAgIGRhdGEgPSBwYXJhbXMuVnVlLm9ic2VydmFibGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHZhbHVlIGZyb20gb3RoZXIgc2hhcmVkIGRhdGEgY2xpZW50c1xuICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOnNldCcsICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgc2V0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbml0Q2JzLmZvckVhY2goY2IgPT4gY2IoKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmluaXRTaGFyZWREYXRhID0gaW5pdFNoYXJlZERhdGE7XG5mdW5jdGlvbiBvblNoYXJlZERhdGFJbml0KGNiKSB7XG4gICAgaW5pdENicy5wdXNoKGNiKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGluaXRDYnMuaW5kZXhPZihjYik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBpbml0Q2JzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfTtcbn1cbmV4cG9ydHMub25TaGFyZWREYXRhSW5pdCA9IG9uU2hhcmVkRGF0YUluaXQ7XG5mdW5jdGlvbiBkZXN0cm95U2hhcmVkRGF0YSgpIHtcbiAgICBicmlkZ2UucmVtb3ZlQWxsTGlzdGVuZXJzKCdzaGFyZWQtZGF0YTpzZXQnKTtcbiAgICB3YXRjaGVycyA9IHt9O1xufVxuZXhwb3J0cy5kZXN0cm95U2hhcmVkRGF0YSA9IGRlc3Ryb3lTaGFyZWREYXRhO1xubGV0IHdhdGNoZXJzID0ge307XG5mdW5jdGlvbiBzZXRWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgLy8gU3RvcmFnZVxuICAgIGlmIChwZXJzaXN0ICYmIHBlcnNpc3RlZC5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICgwLCBzdG9yYWdlXzEuc2V0U3RvcmFnZSkoYHZ1ZS1kZXZ0b29scy0ke3N0b3JhZ2VWZXJzaW9ufTpzaGFyZWQtZGF0YToke2tleX1gLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IG9sZFZhbHVlID0gZGF0YVtrZXldO1xuICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgIGNvbnN0IGhhbmRsZXJzID0gd2F0Y2hlcnNba2V5XTtcbiAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgaGFuZGxlcnMuZm9yRWFjaChoID0+IGgodmFsdWUsIG9sZFZhbHVlKSk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIFByb3h5IHNldCB0cmFwXG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBzZW5kVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGJyaWRnZSAmJiBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6c2V0Jywge1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgIH0pO1xufVxuZnVuY3Rpb24gd2F0Y2hTaGFyZWREYXRhKHByb3AsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBsaXN0ID0gd2F0Y2hlcnNbcHJvcF0gfHwgKHdhdGNoZXJzW3Byb3BdID0gW10pO1xuICAgIGxpc3QucHVzaChoYW5kbGVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihoYW5kbGVyKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xufVxuZXhwb3J0cy53YXRjaFNoYXJlZERhdGEgPSB3YXRjaFNoYXJlZERhdGE7XG5jb25zdCBwcm94eSA9IHt9O1xuT2JqZWN0LmtleXMoaW50ZXJuYWxTaGFyZWREYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZ2V0OiAoKSA9PiBkYXRhW2tleV0sXG4gICAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBzZW5kVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn0pO1xuZXhwb3J0cy5TaGFyZWREYXRhID0gcHJveHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZWQtZGF0YS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29556\n");
|
|
470
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.SharedData = exports.watchSharedData = exports.destroySharedData = exports.onSharedDataInit = exports.initSharedData = void 0;\n\nconst storage_1 = __webpack_require__(58561);\n\nconst env_1 = __webpack_require__(66210); // Initial state\n\n\nconst internalSharedData = {\n openInEditorHost: '/',\n componentNameStyle: 'class',\n theme: 'auto',\n displayDensity: 'low',\n timeFormat: 'default',\n recordVuex: true,\n cacheVuexSnapshotsEvery: 50,\n cacheVuexSnapshotsLimit: 10,\n snapshotLoading: false,\n componentEventsEnabled: true,\n performanceMonitoringEnabled: true,\n editableProps: false,\n logDetected: true,\n vuexNewBackend: false,\n vuexAutoload: false,\n vuexGroupGettersByModule: true,\n showMenuScrollTip: true,\n timelineTimeGrid: true,\n timelineScreenshots: true,\n menuStepScrolling: env_1.isMac,\n pluginPermissions: {},\n pluginSettings: {},\n pageConfig: {},\n legacyApps: false,\n trackUpdates: true,\n flashUpdates: false,\n debugInfo: false\n};\nconst persisted = ['componentNameStyle', 'theme', 'displayDensity', 'recordVuex', 'editableProps', 'logDetected', 'vuexNewBackend', 'vuexAutoload', 'vuexGroupGettersByModule', 'timeFormat', 'showMenuScrollTip', 'timelineTimeGrid', 'timelineScreenshots', 'menuStepScrolling', 'pluginPermissions', 'pluginSettings', 'performanceMonitoringEnabled', 'componentEventsEnabled', 'trackUpdates', 'flashUpdates', 'debugInfo'];\nconst storageVersion = '6.0.0-alpha.1'; // ---- INTERNALS ---- //\n\nlet bridge; // List of fields to persist to storage (disabled if 'false')\n// This should be unique to each shared data client to prevent conflicts\n\nlet persist = false;\nlet data;\nlet initRetryInterval;\nlet initRetryCount = 0;\nconst initCbs = [];\n\nfunction initSharedData(params) {\n return new Promise(resolve => {\n // Mandatory params\n bridge = params.bridge;\n persist = !!params.persist;\n\n if (persist) {\n if (false) {} // Load persisted fields\n\n\n persisted.forEach(key => {\n const value = (0, storage_1.getStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`);\n\n if (value !== null) {\n internalSharedData[key] = value;\n }\n });\n bridge.on('shared-data:load', () => {\n // Send all fields\n Object.keys(internalSharedData).forEach(key => {\n sendValue(key, internalSharedData[key]);\n });\n bridge.send('shared-data:load-complete');\n });\n bridge.on('shared-data:init-complete', () => {\n if (false) {}\n\n clearInterval(initRetryInterval);\n resolve();\n });\n bridge.send('shared-data:master-init-waiting'); // In case backend init is executed after frontend\n\n bridge.on('shared-data:minion-init-waiting', () => {\n bridge.send('shared-data:master-init-waiting');\n });\n initRetryCount = 0;\n clearInterval(initRetryInterval);\n initRetryInterval = setInterval(() => {\n if (false) {}\n\n bridge.send('shared-data:master-init-waiting');\n initRetryCount++;\n\n if (initRetryCount > 30) {\n clearInterval(initRetryInterval);\n console.error('[shared data] Master init failed');\n }\n }, 2000);\n } else {\n if (false) {}\n\n bridge.on('shared-data:master-init-waiting', () => {\n if (false) {} // Load all persisted shared data\n\n\n bridge.send('shared-data:load');\n bridge.once('shared-data:load-complete', () => {\n if (false) {}\n\n bridge.send('shared-data:init-complete');\n resolve();\n });\n });\n bridge.send('shared-data:minion-init-waiting');\n }\n\n data = { ...internalSharedData\n };\n\n if (params.Vue) {\n data = params.Vue.observable(data);\n } // Update value from other shared data clients\n\n\n bridge.on('shared-data:set', ({\n key,\n value\n }) => {\n setValue(key, value);\n });\n initCbs.forEach(cb => cb());\n });\n}\n\nexports.initSharedData = initSharedData;\n\nfunction onSharedDataInit(cb) {\n initCbs.push(cb);\n return () => {\n const index = initCbs.indexOf(cb);\n if (index !== -1) initCbs.splice(index, 1);\n };\n}\n\nexports.onSharedDataInit = onSharedDataInit;\n\nfunction destroySharedData() {\n bridge.removeAllListeners('shared-data:set');\n watchers = {};\n}\n\nexports.destroySharedData = destroySharedData;\nlet watchers = {};\n\nfunction setValue(key, value) {\n // Storage\n if (persist && persisted.includes(key)) {\n (0, storage_1.setStorage)(`vue-devtools-${storageVersion}:shared-data:${key}`, value);\n }\n\n const oldValue = data[key];\n data[key] = value;\n const handlers = watchers[key];\n\n if (handlers) {\n handlers.forEach(h => h(value, oldValue));\n } // Validate Proxy set trap\n\n\n return true;\n}\n\nfunction sendValue(key, value) {\n bridge && bridge.send('shared-data:set', {\n key,\n value\n });\n}\n\nfunction watchSharedData(prop, handler) {\n const list = watchers[prop] || (watchers[prop] = []);\n list.push(handler);\n return () => {\n const index = list.indexOf(handler);\n if (index !== -1) list.splice(index, 1);\n };\n}\n\nexports.watchSharedData = watchSharedData;\nconst proxy = {};\nObject.keys(internalSharedData).forEach(key => {\n Object.defineProperty(proxy, key, {\n configurable: false,\n get: () => data[key],\n set: value => {\n sendValue(key, value);\n setValue(key, value);\n }\n });\n});\nexports.SharedData = proxy;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDRDtBQU4rQixHQUFsQztBQVFELENBVEQ7QUFXYSxxQkFBYSxLQUFiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvc2hhcmVkLWRhdGEudHM/ZDBiYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2hhcmVkRGF0YSA9IGV4cG9ydHMud2F0Y2hTaGFyZWREYXRhID0gZXhwb3J0cy5kZXN0cm95U2hhcmVkRGF0YSA9IGV4cG9ydHMub25TaGFyZWREYXRhSW5pdCA9IGV4cG9ydHMuaW5pdFNoYXJlZERhdGEgPSB2b2lkIDA7XG5jb25zdCBzdG9yYWdlXzEgPSByZXF1aXJlKFwiLi9zdG9yYWdlXCIpO1xuY29uc3QgZW52XzEgPSByZXF1aXJlKFwiLi9lbnZcIik7XG4vLyBJbml0aWFsIHN0YXRlXG5jb25zdCBpbnRlcm5hbFNoYXJlZERhdGEgPSB7XG4gICAgb3BlbkluRWRpdG9ySG9zdDogJy8nLFxuICAgIGNvbXBvbmVudE5hbWVTdHlsZTogJ2NsYXNzJyxcbiAgICB0aGVtZTogJ2F1dG8nLFxuICAgIGRpc3BsYXlEZW5zaXR5OiAnbG93JyxcbiAgICB0aW1lRm9ybWF0OiAnZGVmYXVsdCcsXG4gICAgcmVjb3JkVnVleDogdHJ1ZSxcbiAgICBjYWNoZVZ1ZXhTbmFwc2hvdHNFdmVyeTogNTAsXG4gICAgY2FjaGVWdWV4U25hcHNob3RzTGltaXQ6IDEwLFxuICAgIHNuYXBzaG90TG9hZGluZzogZmFsc2UsXG4gICAgY29tcG9uZW50RXZlbnRzRW5hYmxlZDogdHJ1ZSxcbiAgICBwZXJmb3JtYW5jZU1vbml0b3JpbmdFbmFibGVkOiB0cnVlLFxuICAgIGVkaXRhYmxlUHJvcHM6IGZhbHNlLFxuICAgIGxvZ0RldGVjdGVkOiB0cnVlLFxuICAgIHZ1ZXhOZXdCYWNrZW5kOiBmYWxzZSxcbiAgICB2dWV4QXV0b2xvYWQ6IGZhbHNlLFxuICAgIHZ1ZXhHcm91cEdldHRlcnNCeU1vZHVsZTogdHJ1ZSxcbiAgICBzaG93TWVudVNjcm9sbFRpcDogdHJ1ZSxcbiAgICB0aW1lbGluZVRpbWVHcmlkOiB0cnVlLFxuICAgIHRpbWVsaW5lU2NyZWVuc2hvdHM6IHRydWUsXG4gICAgbWVudVN0ZXBTY3JvbGxpbmc6IGVudl8xLmlzTWFjLFxuICAgIHBsdWdpblBlcm1pc3Npb25zOiB7fSxcbiAgICBwbHVnaW5TZXR0aW5nczoge30sXG4gICAgcGFnZUNvbmZpZzoge30sXG4gICAgbGVnYWN5QXBwczogZmFsc2UsXG4gICAgdHJhY2tVcGRhdGVzOiB0cnVlLFxuICAgIGZsYXNoVXBkYXRlczogZmFsc2UsXG4gICAgZGVidWdJbmZvOiBmYWxzZSxcbn07XG5jb25zdCBwZXJzaXN0ZWQgPSBbXG4gICAgJ2NvbXBvbmVudE5hbWVTdHlsZScsXG4gICAgJ3RoZW1lJyxcbiAgICAnZGlzcGxheURlbnNpdHknLFxuICAgICdyZWNvcmRWdWV4JyxcbiAgICAnZWRpdGFibGVQcm9wcycsXG4gICAgJ2xvZ0RldGVjdGVkJyxcbiAgICAndnVleE5ld0JhY2tlbmQnLFxuICAgICd2dWV4QXV0b2xvYWQnLFxuICAgICd2dWV4R3JvdXBHZXR0ZXJzQnlNb2R1bGUnLFxuICAgICd0aW1lRm9ybWF0JyxcbiAgICAnc2hvd01lbnVTY3JvbGxUaXAnLFxuICAgICd0aW1lbGluZVRpbWVHcmlkJyxcbiAgICAndGltZWxpbmVTY3JlZW5zaG90cycsXG4gICAgJ21lbnVTdGVwU2Nyb2xsaW5nJyxcbiAgICAncGx1Z2luUGVybWlzc2lvbnMnLFxuICAgICdwbHVnaW5TZXR0aW5ncycsXG4gICAgJ3BlcmZvcm1hbmNlTW9uaXRvcmluZ0VuYWJsZWQnLFxuICAgICdjb21wb25lbnRFdmVudHNFbmFibGVkJyxcbiAgICAndHJhY2tVcGRhdGVzJyxcbiAgICAnZmxhc2hVcGRhdGVzJyxcbiAgICAnZGVidWdJbmZvJyxcbl07XG5jb25zdCBzdG9yYWdlVmVyc2lvbiA9ICc2LjAuMC1hbHBoYS4xJztcbi8vIC0tLS0gSU5URVJOQUxTIC0tLS0gLy9cbmxldCBicmlkZ2U7XG4vLyBMaXN0IG9mIGZpZWxkcyB0byBwZXJzaXN0IHRvIHN0b3JhZ2UgKGRpc2FibGVkIGlmICdmYWxzZScpXG4vLyBUaGlzIHNob3VsZCBiZSB1bmlxdWUgdG8gZWFjaCBzaGFyZWQgZGF0YSBjbGllbnQgdG8gcHJldmVudCBjb25mbGljdHNcbmxldCBwZXJzaXN0ID0gZmFsc2U7XG5sZXQgZGF0YTtcbmxldCBpbml0UmV0cnlJbnRlcnZhbDtcbmxldCBpbml0UmV0cnlDb3VudCA9IDA7XG5jb25zdCBpbml0Q2JzID0gW107XG5mdW5jdGlvbiBpbml0U2hhcmVkRGF0YShwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgLy8gTWFuZGF0b3J5IHBhcmFtc1xuICAgICAgICBicmlkZ2UgPSBwYXJhbXMuYnJpZGdlO1xuICAgICAgICBwZXJzaXN0ID0gISFwYXJhbXMucGVyc2lzdDtcbiAgICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCBpbiBwcm9ncmVzcy4uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTG9hZCBwZXJzaXN0ZWQgZmllbGRzXG4gICAgICAgICAgICBwZXJzaXN0ZWQuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKDAsIHN0b3JhZ2VfMS5nZXRTdG9yYWdlKShgdnVlLWRldnRvb2xzLSR7c3RvcmFnZVZlcnNpb259OnNoYXJlZC1kYXRhOiR7a2V5fWApO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFNoYXJlZERhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTpsb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNlbmQgYWxsIGZpZWxkc1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGludGVybmFsU2hhcmVkRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZW5kVmFsdWUoa2V5LCBpbnRlcm5hbFNoYXJlZERhdGFba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOmxvYWQtY29tcGxldGUnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLm9uKCdzaGFyZWQtZGF0YTppbml0LWNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbc2hhcmVkIGRhdGFdIE1hc3RlciBpbml0IGNvbXBsZXRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW5pdFJldHJ5SW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgIC8vIEluIGNhc2UgYmFja2VuZCBpbml0IGlzIGV4ZWN1dGVkIGFmdGVyIGZyb250ZW5kXG4gICAgICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOm1pbmlvbi1pbml0LXdhaXRpbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYnJpZGdlLnNlbmQoJ3NoYXJlZC1kYXRhOm1hc3Rlci1pbml0LXdhaXRpbmcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5pdFJldHJ5Q291bnQgPSAwO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbml0UmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgICBpbml0UmV0cnlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNYXN0ZXIgaW5pdCByZXRyeWluZy4uLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6bWFzdGVyLWluaXQtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIGluaXRSZXRyeUNvdW50Kys7XG4gICAgICAgICAgICAgICAgaWYgKGluaXRSZXRyeUNvdW50ID4gMzApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbml0UmV0cnlJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tzaGFyZWQgZGF0YV0gTWFzdGVyIGluaXQgZmFpbGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGluaXQgaW4gcHJvZ3Jlc3MuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyaWRnZS5vbignc2hhcmVkLWRhdGE6bWFzdGVyLWluaXQtd2FpdGluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3NoYXJlZCBkYXRhXSBNaW5pb24gbG9hZGluZyBkYXRhLi4uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIExvYWQgYWxsIHBlcnNpc3RlZCBzaGFyZWQgZGF0YVxuICAgICAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTpsb2FkJyk7XG4gICAgICAgICAgICAgICAgYnJpZGdlLm9uY2UoJ3NoYXJlZC1kYXRhOmxvYWQtY29tcGxldGUnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzaGFyZWQgZGF0YV0gTWluaW9uIGluaXQgY29tcGxldGUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6aW5pdC1jb21wbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyaWRnZS5zZW5kKCdzaGFyZWQtZGF0YTptaW5pb24taW5pdC13YWl0aW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLmludGVybmFsU2hhcmVkRGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHBhcmFtcy5WdWUpIHtcbiAgICAgICAgICAgIGRhdGEgPSBwYXJhbXMuVnVlLm9ic2VydmFibGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHZhbHVlIGZyb20gb3RoZXIgc2hhcmVkIGRhdGEgY2xpZW50c1xuICAgICAgICBicmlkZ2Uub24oJ3NoYXJlZC1kYXRhOnNldCcsICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgc2V0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbml0Q2JzLmZvckVhY2goY2IgPT4gY2IoKSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmluaXRTaGFyZWREYXRhID0gaW5pdFNoYXJlZERhdGE7XG5mdW5jdGlvbiBvblNoYXJlZERhdGFJbml0KGNiKSB7XG4gICAgaW5pdENicy5wdXNoKGNiKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGluaXRDYnMuaW5kZXhPZihjYik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICBpbml0Q2JzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfTtcbn1cbmV4cG9ydHMub25TaGFyZWREYXRhSW5pdCA9IG9uU2hhcmVkRGF0YUluaXQ7XG5mdW5jdGlvbiBkZXN0cm95U2hhcmVkRGF0YSgpIHtcbiAgICBicmlkZ2UucmVtb3ZlQWxsTGlzdGVuZXJzKCdzaGFyZWQtZGF0YTpzZXQnKTtcbiAgICB3YXRjaGVycyA9IHt9O1xufVxuZXhwb3J0cy5kZXN0cm95U2hhcmVkRGF0YSA9IGRlc3Ryb3lTaGFyZWREYXRhO1xubGV0IHdhdGNoZXJzID0ge307XG5mdW5jdGlvbiBzZXRWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgLy8gU3RvcmFnZVxuICAgIGlmIChwZXJzaXN0ICYmIHBlcnNpc3RlZC5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICgwLCBzdG9yYWdlXzEuc2V0U3RvcmFnZSkoYHZ1ZS1kZXZ0b29scy0ke3N0b3JhZ2VWZXJzaW9ufTpzaGFyZWQtZGF0YToke2tleX1gLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IG9sZFZhbHVlID0gZGF0YVtrZXldO1xuICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgIGNvbnN0IGhhbmRsZXJzID0gd2F0Y2hlcnNba2V5XTtcbiAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgaGFuZGxlcnMuZm9yRWFjaChoID0+IGgodmFsdWUsIG9sZFZhbHVlKSk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIFByb3h5IHNldCB0cmFwXG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBzZW5kVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGJyaWRnZSAmJiBicmlkZ2Uuc2VuZCgnc2hhcmVkLWRhdGE6c2V0Jywge1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgIH0pO1xufVxuZnVuY3Rpb24gd2F0Y2hTaGFyZWREYXRhKHByb3AsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBsaXN0ID0gd2F0Y2hlcnNbcHJvcF0gfHwgKHdhdGNoZXJzW3Byb3BdID0gW10pO1xuICAgIGxpc3QucHVzaChoYW5kbGVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihoYW5kbGVyKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xufVxuZXhwb3J0cy53YXRjaFNoYXJlZERhdGEgPSB3YXRjaFNoYXJlZERhdGE7XG5jb25zdCBwcm94eSA9IHt9O1xuT2JqZWN0LmtleXMoaW50ZXJuYWxTaGFyZWREYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZ2V0OiAoKSA9PiBkYXRhW2tleV0sXG4gICAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBzZW5kVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn0pO1xuZXhwb3J0cy5TaGFyZWREYXRhID0gcHJveHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZWQtZGF0YS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29556\n");
|
|
447
471
|
|
|
448
472
|
/***/ }),
|
|
449
473
|
|
|
@@ -479,7 +503,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
479
503
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
480
504
|
|
|
481
505
|
"use strict";
|
|
482
|
-
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.isEmptyObject = exports.copyToClipboard = exports.escape = exports.openInEditor = exports.focusInput = exports.simpleGet = exports.sortByKey = exports.searchDeepInObject = exports.isPlainObject = exports.revive = exports.parse = exports.getCustomRefDetails = exports.getCustomHTMLElementDetails = exports.getCustomFunctionDetails = exports.getCustomComponentDefinitionDetails = exports.getComponentName = exports.reviveSet = exports.getCustomSetDetails = exports.reviveMap = exports.getCustomMapDetails = exports.stringify = exports.specialTokenToString = exports.MAX_ARRAY_SIZE = exports.MAX_STRING_SIZE = exports.SPECIAL_TOKENS = exports.NAN = exports.NEGATIVE_INFINITY = exports.INFINITY = exports.UNDEFINED = exports.inDoc = exports.getComponentDisplayName = exports.kebabize = exports.camelize = exports.classify = void 0;\n\nconst path_1 = __importDefault(__webpack_require__(21023));\n\nconst transfer_1 = __webpack_require__(34723);\n\nconst backend_1 = __webpack_require__(79310);\n\nconst shared_data_1 = __webpack_require__(29556);\n\nconst env_1 = __webpack_require__(66210);\n\nfunction cached(fn) {\n const cache = Object.create(null);\n return function cachedFn(str) {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n\nconst classifyRE = /(?:^|[-_/])(\\w)/g;\nexports.classify = cached(str => {\n // fix: str.replace may causes '\"replace\" is not a function' exception.\n // This bug may causes the UI 'Component Filter' to not work properly\n // e.g. The type of 'str' is Number.\n // So need cover 'str' to String.\n return str && ('' + str).replace(classifyRE, toUpper);\n});\nconst camelizeRE = /-(\\w)/g;\nexports.camelize = cached(str => {\n return str && str.replace(camelizeRE, toUpper);\n});\nconst kebabizeRE = /([a-z0-9])([A-Z])/g;\nexports.kebabize = cached(str => {\n return str && str.replace(kebabizeRE, (_, lowerCaseCharacter, upperCaseLetter) => {\n return `${lowerCaseCharacter}-${upperCaseLetter}`;\n }).toLowerCase();\n});\n\nfunction toUpper(_, c) {\n return c ? c.toUpperCase() : '';\n}\n\nfunction getComponentDisplayName(originalName, style = 'class') {\n switch (style) {\n case 'class':\n return (0, exports.classify)(originalName);\n\n case 'kebab':\n return (0, exports.kebabize)(originalName);\n\n case 'original':\n default:\n return originalName;\n }\n}\n\nexports.getComponentDisplayName = getComponentDisplayName;\n\nfunction inDoc(node) {\n if (!node) return false;\n const doc = node.ownerDocument.documentElement;\n const parent = node.parentNode;\n return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent));\n}\n\nexports.inDoc = inDoc;\n/**\n * Stringify/parse data using CircularJSON.\n */\n\nexports.UNDEFINED = '__vue_devtool_undefined__';\nexports.INFINITY = '__vue_devtool_infinity__';\nexports.NEGATIVE_INFINITY = '__vue_devtool_negative_infinity__';\nexports.NAN = '__vue_devtool_nan__';\nexports.SPECIAL_TOKENS = {\n true: true,\n false: false,\n undefined: exports.UNDEFINED,\n null: null,\n '-Infinity': exports.NEGATIVE_INFINITY,\n Infinity: exports.INFINITY,\n NaN: exports.NAN\n};\nexports.MAX_STRING_SIZE = 10000;\nexports.MAX_ARRAY_SIZE = 5000;\n\nfunction specialTokenToString(value) {\n if (value === null) {\n return 'null';\n } else if (value === exports.UNDEFINED) {\n return 'undefined';\n } else if (value === exports.NAN) {\n return 'NaN';\n } else if (value === exports.INFINITY) {\n return 'Infinity';\n } else if (value === exports.NEGATIVE_INFINITY) {\n return '-Infinity';\n }\n\n return false;\n}\n\nexports.specialTokenToString = specialTokenToString;\n/**\n * Needed to prevent stack overflow\n * while replacing complex objects\n * like components because we create\n * new objects with the CustomValue API\n * (.i.e `{ _custom: { ... } }`)\n */\n\nclass EncodeCache {\n constructor() {\n this.map = new Map();\n }\n /**\n * Returns a result unique to each input data\n * @param {*} data Input data\n * @param {*} factory Function used to create the unique result\n */\n\n\n cache(data, factory) {\n const cached = this.map.get(data);\n\n if (cached) {\n return cached;\n } else {\n const result = factory(data);\n this.map.set(data, result);\n return result;\n }\n }\n\n clear() {\n this.map.clear();\n }\n\n}\n\nconst encodeCache = new EncodeCache();\n\nclass ReviveCache {\n constructor(maxSize) {\n this.maxSize = maxSize;\n this.map = new Map();\n this.index = 0;\n this.size = 0;\n }\n\n cache(value) {\n const currentIndex = this.index;\n this.map.set(currentIndex, value);\n this.size++;\n\n if (this.size > this.maxSize) {\n this.map.delete(currentIndex - this.size);\n this.size--;\n }\n\n this.index++;\n return currentIndex;\n }\n\n read(id) {\n return this.map.get(id);\n }\n\n}\n\nconst reviveCache = new ReviveCache(1000);\n\nfunction stringify(data) {\n // Create a fresh cache for each serialization\n encodeCache.clear();\n return (0, transfer_1.stringifyCircularAutoChunks)(data, replacer);\n}\n\nexports.stringify = stringify;\n\nfunction replacer(key) {\n // @ts-ignore\n const val = this[key];\n const type = typeof val;\n\n if (Array.isArray(val)) {\n const l = val.length;\n\n if (l > exports.MAX_ARRAY_SIZE) {\n return {\n _isArray: true,\n length: l,\n items: val.slice(0, exports.MAX_ARRAY_SIZE)\n };\n }\n\n return val;\n } else if (typeof val === 'string') {\n if (val.length > exports.MAX_STRING_SIZE) {\n return val.substring(0, exports.MAX_STRING_SIZE) + `... (${val.length} total length)`;\n } else {\n return val;\n }\n } else if (type === 'undefined') {\n return exports.UNDEFINED;\n } else if (val === Infinity) {\n return exports.INFINITY;\n } else if (val === -Infinity) {\n return exports.NEGATIVE_INFINITY;\n } else if (type === 'function') {\n return getCustomFunctionDetails(val);\n } else if (type === 'symbol') {\n return `[native Symbol ${Symbol.prototype.toString.call(val)}]`;\n } else if (val !== null && type === 'object') {\n const proto = Object.prototype.toString.call(val);\n\n if (proto === '[object Map]') {\n return encodeCache.cache(val, () => getCustomMapDetails(val));\n } else if (proto === '[object Set]') {\n return encodeCache.cache(val, () => getCustomSetDetails(val));\n } else if (proto === '[object RegExp]') {\n // special handling of native type\n return `[native RegExp ${RegExp.prototype.toString.call(val)}]`;\n } else if (proto === '[object Date]') {\n return `[native Date ${Date.prototype.toString.call(val)}]`;\n } else if (proto === '[object Error]') {\n return `[native Error ${val.message}<>${val.stack}]`;\n } else if (val.state && val._vm) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomStoreDetails)(val));\n } else if (val.constructor && val.constructor.name === 'VueRouter') {\n return encodeCache.cache(val, () => (0, backend_1.getCustomRouterDetails)(val));\n } else if ((0, backend_1.isVueInstance)(val)) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomInstanceDetails)(val));\n } else if (typeof val.render === 'function') {\n return encodeCache.cache(val, () => getCustomComponentDefinitionDetails(val));\n } else if (val.constructor && val.constructor.name === 'VNode') {\n return `[native VNode <${val.tag}>]`;\n } else if (val instanceof HTMLElement) {\n return encodeCache.cache(val, () => getCustomHTMLElementDetails(val));\n }\n } else if (Number.isNaN(val)) {\n return exports.NAN;\n }\n\n return sanitize(val);\n}\n\nfunction getCustomMapDetails(val) {\n const list = [];\n val.forEach((value, key) => list.push({\n key,\n value\n }));\n return {\n _custom: {\n type: 'map',\n display: 'Map',\n value: list,\n readOnly: true,\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomMapDetails = getCustomMapDetails;\n\nfunction reviveMap(val) {\n const result = new Map();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const {\n key,\n value\n } = list[i];\n result.set(key, revive(value));\n }\n\n return result;\n}\n\nexports.reviveMap = reviveMap;\n\nfunction getCustomSetDetails(val) {\n const list = Array.from(val);\n return {\n _custom: {\n type: 'set',\n display: `Set[${list.length}]`,\n value: list,\n readOnly: true\n }\n };\n}\n\nexports.getCustomSetDetails = getCustomSetDetails;\n\nfunction reviveSet(val) {\n const result = new Set();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const value = list[i];\n result.add(revive(value));\n }\n\n return result;\n}\n\nexports.reviveSet = reviveSet; // Use a custom basename functions instead of the shimed version\n// because it doesn't work on Windows\n\nfunction basename(filename, ext) {\n return path_1.default.basename(filename.replace(/^[a-zA-Z]:/, '').replace(/\\\\/g, '/'), ext);\n}\n\nfunction getComponentName(options) {\n const name = options.displayName || options.name || options._componentTag;\n\n if (name) {\n return name;\n }\n\n const file = options.__file; // injected by vue-loader\n\n if (file) {\n return (0, exports.classify)(basename(file, '.vue'));\n }\n}\n\nexports.getComponentName = getComponentName;\n\nfunction getCustomComponentDefinitionDetails(def) {\n let display = getComponentName(def);\n\n if (display) {\n if (def.name && def.__file) {\n display += ` <span>(${def.__file})</span>`;\n }\n } else {\n display = '<i>Unknown Component</i>';\n }\n\n return {\n _custom: {\n type: 'component-definition',\n display,\n tooltip: 'Component definition',\n ...(def.__file ? {\n file: def.__file\n } : {})\n }\n };\n}\n\nexports.getCustomComponentDefinitionDetails = getCustomComponentDefinitionDetails; // eslint-disable-next-line @typescript-eslint/ban-types\n\nfunction getCustomFunctionDetails(func) {\n let string = '';\n let matches = null;\n\n try {\n string = Function.prototype.toString.call(func);\n matches = String.prototype.match.call(string, /\\([\\s\\S]*?\\)/);\n } catch (e) {// Func is probably a Proxy, which can break Function.prototype.toString()\n } // Trim any excess whitespace from the argument string\n\n\n const match = matches && matches[0];\n const args = typeof match === 'string' ? `(${match.substring(1, match.length - 2).split(',').map(a => a.trim()).join(', ')})` : '(?)';\n const name = typeof func.name === 'string' ? func.name : '';\n return {\n _custom: {\n type: 'function',\n display: `<span>f</span> ${escape(name)}${args}`,\n _reviveId: reviveCache.cache(func)\n }\n };\n}\n\nexports.getCustomFunctionDetails = getCustomFunctionDetails;\n\nfunction getCustomHTMLElementDetails(value) {\n try {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"opacity-30\"><</span><span class=\"text-blue-500\">${value.tagName.toLowerCase()}</span><span class=\"opacity-30\">></span>`,\n value: namedNodeMapToObject(value.attributes),\n actions: [{\n icon: 'input',\n tooltip: 'Log element to console',\n action: () => {\n // eslint-disable-next-line no-console\n console.log(value);\n }\n }]\n }\n };\n } catch (e) {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"text-blue-500\">${String(value)}</span>`\n }\n };\n }\n}\n\nexports.getCustomHTMLElementDetails = getCustomHTMLElementDetails;\n\nfunction namedNodeMapToObject(map) {\n const result = {};\n const l = map.length;\n\n for (let i = 0; i < l; i++) {\n const node = map.item(i);\n result[node.name] = node.value;\n }\n\n return result;\n}\n\nfunction getCustomRefDetails(instance, key, ref) {\n let value;\n\n if (Array.isArray(ref)) {\n value = ref.map(r => getCustomRefDetails(instance, key, r)).map(data => data.value);\n } else {\n let name;\n\n if (ref._isVue) {\n name = getComponentName(ref.$options);\n } else {\n name = ref.tagName.toLowerCase();\n }\n\n value = {\n _custom: {\n display: `<${name}` + (ref.id ? ` <span class=\"attr-title\">id</span>=\"${ref.id}\"` : '') + (ref.className ? ` <span class=\"attr-title\">class</span>=\"${ref.className}\"` : '') + '>',\n uid: instance.__VUE_DEVTOOLS_UID__,\n type: 'reference'\n }\n };\n }\n\n return {\n type: '$refs',\n key: key,\n value,\n editable: false\n };\n}\n\nexports.getCustomRefDetails = getCustomRefDetails;\n\nfunction parse(data, revive = false) {\n return revive ? (0, transfer_1.parseCircularAutoChunks)(data, reviver) : (0, transfer_1.parseCircularAutoChunks)(data);\n}\n\nexports.parse = parse;\nconst specialTypeRE = /^\\[native (\\w+) (.*?)(<>((.|\\s)*))?\\]$/;\nconst symbolRE = /^\\[native Symbol Symbol\\((.*)\\)\\]$/;\n\nfunction reviver(key, val) {\n return revive(val);\n}\n\nfunction revive(val) {\n if (val === exports.UNDEFINED) {\n return undefined;\n } else if (val === exports.INFINITY) {\n return Infinity;\n } else if (val === exports.NEGATIVE_INFINITY) {\n return -Infinity;\n } else if (val === exports.NAN) {\n return NaN;\n } else if (val && val._custom) {\n const {\n _custom: custom\n } = val;\n\n if (custom.type === 'component') {\n return (0, backend_1.getInstanceMap)().get(custom.id);\n } else if (custom.type === 'map') {\n return reviveMap(val);\n } else if (custom.type === 'set') {\n return reviveSet(val);\n } else if (custom._reviveId) {\n return reviveCache.read(custom._reviveId);\n } else {\n return revive(custom.value);\n }\n } else if (symbolRE.test(val)) {\n const [, string] = symbolRE.exec(val);\n return Symbol.for(string);\n } else if (specialTypeRE.test(val)) {\n const [, type, string,, details] = specialTypeRE.exec(val);\n const result = new window[type](string);\n\n if (type === 'Error' && details) {\n result.stack = details;\n }\n\n return result;\n } else {\n return val;\n }\n}\n\nexports.revive = revive;\n/**\n * Sanitize data to be posted to the other side.\n * Since the message posted is sent with structured clone,\n * we need to filter out any types that might cause an error.\n *\n * @param {*} data\n * @return {*}\n */\n\nfunction sanitize(data) {\n if (!isPrimitive(data) && !Array.isArray(data) && !isPlainObject(data)) {\n // handle types that will probably cause issues in\n // the structured clone\n return Object.prototype.toString.call(data);\n } else {\n return data;\n }\n}\n\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexports.isPlainObject = isPlainObject;\n\nfunction isPrimitive(data) {\n if (data == null) {\n return true;\n }\n\n const type = typeof data;\n return type === 'string' || type === 'number' || type === 'boolean';\n}\n/**\n * Searches a key or value in the object, with a maximum deepness\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction searchDeepInObject(obj, searchTerm) {\n const seen = new Map();\n const result = internalSearchObject(obj, searchTerm.toLowerCase(), seen, 0);\n seen.clear();\n return result;\n}\n\nexports.searchDeepInObject = searchDeepInObject;\nconst SEARCH_MAX_DEPTH = 10;\n/**\n * Executes a search on each field of the provided object\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\nfunction internalSearchObject(obj, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n const keys = Object.keys(obj);\n let key, value;\n\n for (let i = 0; i < keys.length; i++) {\n key = keys[i];\n value = obj[key];\n match = internalSearchCheck(searchTerm, key, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Executes a search on each value of the provided array\n * @param {*} array Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchArray(array, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n let value;\n\n for (let i = 0; i < array.length; i++) {\n value = array[i];\n match = internalSearchCheck(searchTerm, null, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Checks if the provided field matches the search terms\n * @param {string} searchTerm Search string\n * @param {string} key Field key (null if from array)\n * @param {*} value Field value\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchCheck(searchTerm, key, value, seen, depth) {\n let match = false;\n let result;\n\n if (key === '_custom') {\n key = value.display;\n value = value.value;\n }\n\n (result = specialTokenToString(value)) && (value = result);\n\n if (key && compare(key, searchTerm)) {\n match = true;\n seen.set(value, true);\n } else if (seen.has(value)) {\n match = seen.get(value);\n } else if (Array.isArray(value)) {\n seen.set(value, null);\n match = internalSearchArray(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (isPlainObject(value)) {\n seen.set(value, null);\n match = internalSearchObject(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (compare(value, searchTerm)) {\n match = true;\n seen.set(value, true);\n }\n\n return match;\n}\n/**\n * Compares two values\n * @param {*} value Mixed type value that will be cast to string\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction compare(value, searchTerm) {\n return ('' + value).toLowerCase().indexOf(searchTerm) !== -1;\n}\n\nfunction sortByKey(state) {\n return state && state.slice().sort((a, b) => {\n if (a.key < b.key) return -1;\n if (a.key > b.key) return 1;\n return 0;\n });\n}\n\nexports.sortByKey = sortByKey;\n\nfunction simpleGet(object, path) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n for (let i = 0; i < sections.length; i++) {\n object = object[sections[i]];\n\n if (!object) {\n return undefined;\n }\n }\n\n return object;\n}\n\nexports.simpleGet = simpleGet;\n\nfunction focusInput(el) {\n el.focus();\n el.setSelectionRange(0, el.value.length);\n}\n\nexports.focusInput = focusInput;\n\nfunction openInEditor(file) {\n // Console display\n const fileName = file.replace(/\\\\/g, '\\\\\\\\');\n const src = `fetch('${shared_data_1.SharedData.openInEditorHost}__open-in-editor?file=${encodeURI(file)}').then(response => {\n if (response.ok) {\n console.log('File ${fileName} opened in editor')\n } else {\n const msg = 'Opening component ${fileName} failed'\n const target = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}\n if (target.__VUE_DEVTOOLS_TOAST__) {\n target.__VUE_DEVTOOLS_TOAST__(msg, 'error')\n } else {\n console.log('%c' + msg, 'color:red')\n }\n console.log('Check the setup of your project, see https://devtools.vuejs.org/guide/open-in-editor.html')\n }\n })`;\n\n if (env_1.isChrome) {\n env_1.target.chrome.devtools.inspectedWindow.eval(src);\n } else {\n // eslint-disable-next-line no-eval\n eval(src);\n }\n}\n\nexports.openInEditor = openInEditor;\nconst ESC = {\n '<': '<',\n '>': '>',\n '\"': '"',\n '&': '&'\n};\n\nfunction escape(s) {\n return s.replace(/[<>\"&]/g, escapeChar);\n}\n\nexports.escape = escape;\n\nfunction escapeChar(a) {\n return ESC[a] || a;\n}\n\nfunction copyToClipboard(state) {\n if (typeof document === 'undefined') return;\n const dummyTextArea = document.createElement('textarea');\n dummyTextArea.textContent = stringify(state);\n document.body.appendChild(dummyTextArea);\n dummyTextArea.select();\n document.execCommand('copy');\n document.body.removeChild(dummyTextArea);\n}\n\nexports.copyToClipboard = copyToClipboard;\n\nfunction isEmptyObject(obj) {\n return obj === exports.UNDEFINED || !obj || Object.keys(obj).length === 0;\n}\n\nexports.isEmptyObject = isEmptyObject;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzYyMDMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUNBOztBQU9BOztBQUNBOztBQUVBLFNBQVMsTUFBVCxDQUFpQixFQUFqQixFQUFtQjtBQUNqQixRQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBUCxDQUFjLElBQWQsQ0FBZDtBQUNBLFNBQU8sU0FBUyxRQUFULENBQW1CLEdBQW5CLEVBQXNCO0FBQzNCLFVBQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFELENBQWpCO0FBQ0EsV0FBTyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUQsQ0FBTCxHQUFhLEVBQUUsQ0FBQyxHQUFELENBQXBCLENBQVY7QUFDRCxHQUhEO0FBSUQ7O0FBRUQsTUFBTSxVQUFVLEdBQUcsa0JBQW5CO0FBQ2EsbUJBQVcsTUFBTSxDQUFFLEdBQUQsSUFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFOLEVBQVcsT0FBWCxDQUFtQixVQUFuQixFQUErQixPQUEvQixDQUFkO0FBQ0QsQ0FONkIsQ0FBakI7QUFRYixNQUFNLFVBQVUsR0FBRyxRQUFuQjtBQUNhLG1CQUFXLE1BQU0sQ0FBRSxHQUFELElBQVE7QUFDckMsU0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQUosQ0FBWSxVQUFaLEVBQXdCLE9BQXhCLENBQWQ7QUFDRCxDQUY2QixDQUFqQjtBQUliLE1BQU0sVUFBVSxHQUFHLG9CQUFuQjtBQUNhLG1CQUFXLE1BQU0sQ0FBRSxHQUFELElBQVE7QUFDckMsU0FBTyxHQUFHLElBQUksR0FBRyxDQUNkLE9BRFcsQ0FDSCxVQURHLEVBQ1MsQ0FBQyxDQUFELEVBQUksa0JBQUosRUFBd0IsZUFBeEIsS0FBMkM7QUFDOUQsV0FBTyxHQUFHLGtCQUFrQixJQUFJLGVBQWUsRUFBL0M7QUFDRCxHQUhXLEVBSVgsV0FKVyxFQUFkO0FBS0QsQ0FONkIsQ0FBakI7O0FBUWIsU0FBUyxPQUFULENBQWtCLENBQWxCLEVBQXFCLENBQXJCLEVBQXNCO0FBQ3BCLFNBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFGLEVBQUgsR0FBcUIsRUFBN0I7QUFDRDs7QUFFRCxTQUFnQix1QkFBaEIsQ0FBeUMsWUFBekMsRUFBdUQsS0FBSyxHQUFHLE9BQS9ELEVBQXNFO0FBQ3BFLFVBQVEsS0FBUjtBQUNFLFNBQUssT0FBTDtBQUNFLGFBQU8sc0JBQVMsWUFBVCxDQUFQOztBQUNGLFNBQUssT0FBTDtBQUNFLGFBQU8sc0JBQVMsWUFBVCxDQUFQOztBQUNGLFNBQUssVUFBTDtBQUNBO0FBQ0UsYUFBTyxZQUFQO0FBUEo7QUFTRDs7QUFWRDs7QUFZQSxTQUFnQixLQUFoQixDQUF1QixJQUF2QixFQUEyQjtBQUN6QixNQUFJLENBQUMsSUFBTCxFQUFXLE9BQU8sS0FBUDtBQUNYLFFBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFMLENBQW1CLGVBQS9CO0FBQ0EsUUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQXBCO0FBQ0EsU0FBTyxHQUFHLEtBQUssSUFBUixJQUNMLEdBQUcsS0FBSyxNQURILElBRUwsQ0FBQyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUCxLQUFvQixDQUE5QixJQUFvQyxHQUFHLENBQUMsUUFBSixDQUFhLE1BQWIsQ0FBdEMsQ0FGSDtBQUdEOztBQVBEO0FBU0E7O0FBRUc7O0FBRVUsb0JBQVksMkJBQVo7QUFDQSxtQkFBVywwQkFBWDtBQUNBLDRCQUFvQixtQ0FBcEI7QUFDQSxjQUFNLHFCQUFOO0FBRUEseUJBQWlCO0FBQzVCLE1BQUksRUFBRSxJQURzQjtBQUU1QixPQUFLLEVBQUUsS0FGcUI7QUFHNUIsV0FBUyxFQUFFLGlCQUhpQjtBQUk1QixNQUFJLEVBQUUsSUFKc0I7QUFLNUIsZUFBYSx5QkFMZTtBQU01QixVQUFRLEVBQUUsZ0JBTmtCO0FBTzVCLEtBQUcsRUFBRTtBQVB1QixDQUFqQjtBQVVBLDBCQUFrQixLQUFsQjtBQUNBLHlCQUFpQixJQUFqQjs7QUFFYixTQUFnQixvQkFBaEIsQ0FBc0MsS0FBdEMsRUFBMkM7QUFDekMsTUFBSSxLQUFLLEtBQUssSUFBZCxFQUFvQjtBQUNsQixXQUFPLE1BQVA7QUFDRCxHQUZELE1BRU8sSUFBSSxLQUFLLEtBQUssaUJBQWQsRUFBeUI7QUFDOUIsV0FBTyxXQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUksS0FBSyxLQUFLLFdBQWQsRUFBbUI7QUFDeEIsV0FBTyxLQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUksS0FBSyxLQUFLLGdCQUFkLEVBQXdCO0FBQzdCLFdBQU8sVUFBUDtBQUNELEdBRk0sTUFFQSxJQUFJLEtBQUssS0FBSyx5QkFBZCxFQUFpQztBQUN0QyxXQUFPLFdBQVA7QUFDRDs7QUFDRCxTQUFPLEtBQVA7QUFDRDs7QUFiRDtBQWVBOzs7Ozs7QUFNRzs7QUFDSCxNQUFNLFdBQU4sQ0FBaUI7QUFHZjtBQUNFLFNBQUssR0FBTCxHQUFXLElBQUksR0FBSixFQUFYO0FBQ0Q7QUFFRDs7OztBQUlHOzs7QUFDSCxPQUFLLENBQWtCLElBQWxCLEVBQStCLE9BQS9CLEVBQWdFO0FBQ25FLFVBQU0sTUFBTSxHQUFZLEtBQUssR0FBTCxDQUFTLEdBQVQsQ0FBYSxJQUFiLENBQXhCOztBQUNBLFFBQUksTUFBSixFQUFZO0FBQ1YsYUFBTyxNQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsWUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUQsQ0FBdEI7QUFDQSxXQUFLLEdBQUwsQ0FBUyxHQUFULENBQWEsSUFBYixFQUFtQixNQUFuQjtBQUNBLGFBQU8sTUFBUDtBQUNEO0FBQ0Y7O0FBRUQsT0FBSztBQUNILFNBQUssR0FBTCxDQUFTLEtBQVQ7QUFDRDs7QUF6QmM7O0FBNEJqQixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQUosRUFBcEI7O0FBRUEsTUFBTSxXQUFOLENBQWlCO0FBTWYsY0FBYSxPQUFiLEVBQTRCO0FBQzFCLFNBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxTQUFLLEdBQUwsR0FBVyxJQUFJLEdBQUosRUFBWDtBQUNBLFNBQUssS0FBTCxHQUFhLENBQWI7QUFDQSxTQUFLLElBQUwsR0FBWSxDQUFaO0FBQ0Q7O0FBRUQsT0FBSyxDQUFFLEtBQUYsRUFBWTtBQUNmLFVBQU0sWUFBWSxHQUFHLEtBQUssS0FBMUI7QUFDQSxTQUFLLEdBQUwsQ0FBUyxHQUFULENBQWEsWUFBYixFQUEyQixLQUEzQjtBQUNBLFNBQUssSUFBTDs7QUFDQSxRQUFJLEtBQUssSUFBTCxHQUFZLEtBQUssT0FBckIsRUFBOEI7QUFDNUIsV0FBSyxHQUFMLENBQVMsTUFBVCxDQUFnQixZQUFZLEdBQUcsS0FBSyxJQUFwQztBQUNBLFdBQUssSUFBTDtBQUNEOztBQUNELFNBQUssS0FBTDtBQUNBLFdBQU8sWUFBUDtBQUNEOztBQUVELE1BQUksQ0FBRSxFQUFGLEVBQVk7QUFDZCxXQUFPLEtBQUssR0FBTCxDQUFTLEdBQVQsQ0FBYSxFQUFiLENBQVA7QUFDRDs7QUEzQmM7O0FBOEJqQixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQUosQ0FBZ0IsSUFBaEIsQ0FBcEI7O0FBRUEsU0FBZ0IsU0FBaEIsQ0FBMkIsSUFBM0IsRUFBK0I7QUFDN0I7QUFDQSxhQUFXLENBQUMsS0FBWjtBQUNBLFNBQU8sNENBQTRCLElBQTVCLEVBQWtDLFFBQWxDLENBQVA7QUFDRDs7QUFKRDs7QUFNQSxTQUFTLFFBQVQsQ0FBbUIsR0FBbkIsRUFBc0I7QUFDcEI7QUFDQSxRQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUwsQ0FBWjtBQUNBLFFBQU0sSUFBSSxHQUFHLE9BQU8sR0FBcEI7O0FBQ0EsTUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUN0QixVQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBZDs7QUFDQSxRQUFJLENBQUMsR0FBRyxzQkFBUixFQUF3QjtBQUN0QixhQUFPO0FBQ0wsZ0JBQVEsRUFBRSxJQURMO0FBRUwsY0FBTSxFQUFFLENBRkg7QUFHTCxhQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUosQ0FBVSxDQUFWLEVBQWEsc0JBQWI7QUFIRixPQUFQO0FBS0Q7O0FBQ0QsV0FBTyxHQUFQO0FBQ0QsR0FWRCxNQVVPLElBQUksT0FBTyxHQUFQLEtBQWUsUUFBbkIsRUFBNkI7QUFDbEMsUUFBSSxHQUFHLENBQUMsTUFBSixHQUFhLHVCQUFqQixFQUFrQztBQUNoQyxhQUFPLEdBQUcsQ0FBQyxTQUFKLENBQWMsQ0FBZCxFQUFpQix1QkFBakIsSUFBb0MsUUFBUyxHQUFHLENBQUMsTUFBTyxnQkFBL0Q7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPLEdBQVA7QUFDRDtBQUNGLEdBTk0sTUFNQSxJQUFJLElBQUksS0FBSyxXQUFiLEVBQTBCO0FBQy9CLFdBQU8saUJBQVA7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLEtBQUssUUFBWixFQUFzQjtBQUMzQixXQUFPLGdCQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUksR0FBRyxLQUFLLENBQUMsUUFBYixFQUF1QjtBQUM1QixXQUFPLHlCQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUksSUFBSSxLQUFLLFVBQWIsRUFBeUI7QUFDOUIsV0FBTyx3QkFBd0IsQ0FBQyxHQUFELENBQS9CO0FBQ0QsR0FGTSxNQUVBLElBQUksSUFBSSxLQUFLLFFBQWIsRUFBdUI7QUFDNUIsV0FBTyxrQkFBa0IsTUFBTSxDQUFDLFNBQVAsQ0FBaUIsUUFBakIsQ0FBMEIsSUFBMUIsQ0FBK0IsR0FBL0IsQ0FBbUMsR0FBNUQ7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLEtBQUssSUFBUixJQUFnQixJQUFJLEtBQUssUUFBN0IsRUFBdUM7QUFDNUMsVUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVAsQ0FBaUIsUUFBakIsQ0FBMEIsSUFBMUIsQ0FBK0IsR0FBL0IsQ0FBZDs7QUFDQSxRQUFJLEtBQUssS0FBSyxjQUFkLEVBQThCO0FBQzVCLGFBQU8sV0FBVyxDQUFDLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsTUFBTSxtQkFBbUIsQ0FBQyxHQUFELENBQWhELENBQVA7QUFDRCxLQUZELE1BRU8sSUFBSSxLQUFLLEtBQUssY0FBZCxFQUE4QjtBQUNuQyxhQUFPLFdBQVcsQ0FBQyxLQUFaLENBQWtCLEdBQWxCLEVBQXVCLE1BQU0sbUJBQW1CLENBQUMsR0FBRCxDQUFoRCxDQUFQO0FBQ0QsS0FGTSxNQUVBLElBQUksS0FBSyxLQUFLLGlCQUFkLEVBQWlDO0FBQ3RDO0FBQ0EsYUFBTyxrQkFBa0IsTUFBTSxDQUFDLFNBQVAsQ0FBaUIsUUFBakIsQ0FBMEIsSUFBMUIsQ0FBK0IsR0FBL0IsQ0FBbUMsR0FBNUQ7QUFDRCxLQUhNLE1BR0EsSUFBSSxLQUFLLEtBQUssZUFBZCxFQUErQjtBQUNwQyxhQUFPLGdCQUFnQixJQUFJLENBQUMsU0FBTCxDQUFlLFFBQWYsQ0FBd0IsSUFBeEIsQ0FBNkIsR0FBN0IsQ0FBaUMsR0FBeEQ7QUFDRCxLQUZNLE1BRUEsSUFBSSxLQUFLLEtBQUssZ0JBQWQsRUFBZ0M7QUFDckMsYUFBTyxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFqRDtBQUNELEtBRk0sTUFFQSxJQUFJLEdBQUcsQ0FBQyxLQUFKLElBQWEsR0FBRyxDQUFDLEdBQXJCLEVBQTBCO0FBQy9CLGFBQU8sV0FBVyxDQUFDLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsTUFBTSxxQ0FBc0IsR0FBdEIsQ0FBN0IsQ0FBUDtBQUNELEtBRk0sTUFFQSxJQUFJLEdBQUcsQ0FBQyxXQUFKLElBQW1CLEdBQUcsQ0FBQyxXQUFKLENBQWdCLElBQWhCLEtBQXlCLFdBQWhELEVBQTZEO0FBQ2xFLGFBQU8sV0FBVyxDQUFDLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsTUFBTSxzQ0FBdUIsR0FBdkIsQ0FBN0IsQ0FBUDtBQUNELEtBRk0sTUFFQSxJQUFJLDZCQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUM3QixhQUFPLFdBQVcsQ0FBQyxLQUFaLENBQWtCLEdBQWxCLEVBQXVCLE1BQU0sd0NBQXlCLEdBQXpCLENBQTdCLENBQVA7QUFDRCxLQUZNLE1BRUEsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFYLEtBQXNCLFVBQTFCLEVBQXNDO0FBQzNDLGFBQU8sV0FBVyxDQUFDLEtBQVosQ0FBa0IsR0FBbEIsRUFBdUIsTUFBTSxtQ0FBbUMsQ0FBQyxHQUFELENBQWhFLENBQVA7QUFDRCxLQUZNLE1BRUEsSUFBSSxHQUFHLENBQUMsV0FBSixJQUFtQixHQUFHLENBQUMsV0FBSixDQUFnQixJQUFoQixLQUF5QixPQUFoRCxFQUF5RDtBQUM5RCxhQUFPLGtCQUFrQixHQUFHLENBQUMsR0FBRyxJQUFoQztBQUNELEtBRk0sTUFFQSxJQUFJLEdBQUcsWUFBWSxXQUFuQixFQUFnQztBQUNyQyxhQUFPLFdBQVcsQ0FBQyxLQUFaLENBQWtCLEdBQWxCLEVBQXVCLE1BQU0sMkJBQTJCLENBQUMsR0FBRCxDQUF4RCxDQUFQO0FBQ0Q7QUFDRixHQTFCTSxNQTBCQSxJQUFJLE1BQU0sQ0FBQyxLQUFQLENBQWEsR0FBYixDQUFKLEVBQXVCO0FBQzVCLFdBQU8sV0FBUDtBQUNEOztBQUNELFNBQU8sUUFBUSxDQUFDLEdBQUQsQ0FBZjtBQUNEOztBQUVELFNBQWdCLG1CQUFoQixDQUFxQyxHQUFyQyxFQUF3QztBQUN0QyxRQUFNLElBQUksR0FBRyxFQUFiO0FBQ0EsS0FBRyxDQUFDLE9BQUosQ0FDRSxDQUFDLEtBQUQsRUFBUSxHQUFSLEtBQWdCLElBQUksQ0FBQyxJQUFMLENBQVU7QUFDeEIsT0FEd0I7QUFFeEI7QUFGd0IsR0FBVixDQURsQjtBQU1BLFNBQU87QUFDTCxXQUFPLEVBQUU7QUFDUCxVQUFJLEVBQUUsS0FEQztBQUVQLGFBQU8sRUFBRSxLQUZGO0FBR1AsV0FBSyxFQUFFLElBSEE7QUFJUCxjQUFRLEVBQUUsSUFKSDtBQUtQLFlBQU0sRUFBRTtBQUNOLGdCQUFRLEVBQUU7QUFESjtBQUxEO0FBREosR0FBUDtBQVdEOztBQW5CRDs7QUFxQkEsU0FBZ0IsU0FBaEIsQ0FBMkIsR0FBM0IsRUFBOEI7QUFDNUIsUUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFKLEVBQWY7QUFDQSxRQUFNLElBQUksR0FBRyxHQUFHLENBQUMsT0FBSixDQUFZLEtBQXpCOztBQUNBLE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBYixFQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQXpCLEVBQWlDLENBQUMsRUFBbEMsRUFBc0M7QUFDcEMsVUFBTTtBQUFFLFNBQUY7QUFBTztBQUFQLFFBQWlCLElBQUksQ0FBQyxDQUFELENBQTNCO0FBQ0EsVUFBTSxDQUFDLEdBQVAsQ0FBVyxHQUFYLEVBQWdCLE1BQU0sQ0FBQyxLQUFELENBQXRCO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFQO0FBQ0Q7O0FBUkQ7O0FBVUEsU0FBZ0IsbUJBQWhCLENBQXFDLEdBQXJDLEVBQXdDO0FBQ3RDLFFBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFOLENBQVcsR0FBWCxDQUFiO0FBQ0EsU0FBTztBQUNMLFdBQU8sRUFBRTtBQUNQLFVBQUksRUFBRSxLQURDO0FBRVAsYUFBTyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FGcEI7QUFHUCxXQUFLLEVBQUUsSUFIQTtBQUlQLGNBQVEsRUFBRTtBQUpIO0FBREosR0FBUDtBQVFEOztBQVZEOztBQVlBLFNBQWdCLFNBQWhCLENBQTJCLEdBQTNCLEVBQThCO0FBQzVCLFFBQU0sTUFBTSxHQUFHLElBQUksR0FBSixFQUFmO0FBQ0EsUUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQUosQ0FBWSxLQUF6Qjs7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLENBQWIsRUFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUF6QixFQUFpQyxDQUFDLEVBQWxDLEVBQXNDO0FBQ3BDLFVBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFELENBQWxCO0FBQ0EsVUFBTSxDQUFDLEdBQVAsQ0FBVyxNQUFNLENBQUMsS0FBRCxDQUFqQjtBQUNEOztBQUNELFNBQU8sTUFBUDtBQUNEOztBQVJELDhCLENBVUE7QUFDQTs7QUFDQSxTQUFTLFFBQVQsQ0FBbUIsUUFBbkIsRUFBNkIsR0FBN0IsRUFBZ0M7QUFDOUIsU0FBTyxlQUFLLFFBQUwsQ0FDTCxRQUFRLENBQUMsT0FBVCxDQUFpQixZQUFqQixFQUErQixFQUEvQixFQUFtQyxPQUFuQyxDQUEyQyxLQUEzQyxFQUFrRCxHQUFsRCxDQURLLEVBRUwsR0FGSyxDQUFQO0FBSUQ7O0FBRUQsU0FBZ0IsZ0JBQWhCLENBQWtDLE9BQWxDLEVBQXlDO0FBQ3ZDLFFBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFSLElBQXVCLE9BQU8sQ0FBQyxJQUEvQixJQUF1QyxPQUFPLENBQUMsYUFBNUQ7O0FBQ0EsTUFBSSxJQUFKLEVBQVU7QUFDUixXQUFPLElBQVA7QUFDRDs7QUFDRCxRQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBckIsQ0FMdUMsQ0FLWDs7QUFDNUIsTUFBSSxJQUFKLEVBQVU7QUFDUixXQUFPLHNCQUFTLFFBQVEsQ0FBQyxJQUFELEVBQU8sTUFBUCxDQUFqQixDQUFQO0FBQ0Q7QUFDRjs7QUFURDs7QUFXQSxTQUFnQixtQ0FBaEIsQ0FBcUQsR0FBckQsRUFBd0Q7QUFDdEQsTUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsR0FBRCxDQUE5Qjs7QUFDQSxNQUFJLE9BQUosRUFBYTtBQUNYLFFBQUksR0FBRyxDQUFDLElBQUosSUFBWSxHQUFHLENBQUMsTUFBcEIsRUFBNEI7QUFDMUIsYUFBTyxJQUFJLFdBQVcsR0FBRyxDQUFDLE1BQU0sVUFBaEM7QUFDRDtBQUNGLEdBSkQsTUFJTztBQUNMLFdBQU8sR0FBRywwQkFBVjtBQUNEOztBQUNELFNBQU87QUFDTCxXQUFPLEVBQUU7QUFDUCxVQUFJLEVBQUUsc0JBREM7QUFFUCxhQUZPO0FBR1AsYUFBTyxFQUFFLHNCQUhGO0FBSVAsVUFBRyxHQUFHLENBQUMsTUFBSixHQUNDO0FBQ0UsWUFBSSxFQUFFLEdBQUcsQ0FBQztBQURaLE9BREQsR0FJQyxFQUpKO0FBSk87QUFESixHQUFQO0FBWUQ7O0FBckJELGtGLENBdUJBOztBQUNBLFNBQWdCLHdCQUFoQixDQUEwQyxJQUExQyxFQUF3RDtBQUN0RCxNQUFJLE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSSxPQUFPLEdBQUcsSUFBZDs7QUFDQSxNQUFJO0FBQ0YsVUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFULENBQW1CLFFBQW5CLENBQTRCLElBQTVCLENBQWlDLElBQWpDLENBQVQ7QUFDQSxXQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVAsQ0FBaUIsS0FBakIsQ0FBdUIsSUFBdkIsQ0FBNEIsTUFBNUIsRUFBb0MsY0FBcEMsQ0FBVjtBQUNELEdBSEQsQ0FHRSxPQUFPLENBQVAsRUFBVSxDQUNWO0FBQ0QsR0FScUQsQ0FTdEQ7OztBQUNBLFFBQU0sS0FBSyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBRCxDQUFoQztBQUNBLFFBQU0sSUFBSSxHQUFHLE9BQU8sS0FBUCxLQUFpQixRQUFqQixHQUNULElBQUksS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsQ0FBaEIsRUFBbUIsS0FBSyxDQUFDLE1BQU4sR0FBZSxDQUFsQyxFQUFxQyxLQUFyQyxDQUEyQyxHQUEzQyxFQUFnRCxHQUFoRCxDQUFvRCxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUYsRUFBekQsRUFBbUUsSUFBbkUsQ0FBd0UsSUFBeEUsQ0FBNkUsR0FEeEUsR0FFVCxLQUZKO0FBR0EsUUFBTSxJQUFJLEdBQUcsT0FBTyxJQUFJLENBQUMsSUFBWixLQUFxQixRQUFyQixHQUFnQyxJQUFJLENBQUMsSUFBckMsR0FBNEMsRUFBekQ7QUFDQSxTQUFPO0FBQ0wsV0FBTyxFQUFFO0FBQ1AsVUFBSSxFQUFFLFVBREM7QUFFUCxhQUFPLEVBQUUsa0JBQWtCLE1BQU0sQ0FBQyxJQUFELENBQU0sR0FBRyxJQUFJLEVBRnZDO0FBR1AsZUFBUyxFQUFFLFdBQVcsQ0FBQyxLQUFaLENBQWtCLElBQWxCO0FBSEo7QUFESixHQUFQO0FBT0Q7O0FBdEJEOztBQXdCQSxTQUFnQiwyQkFBaEIsQ0FBNkMsS0FBN0MsRUFBK0Q7QUFDN0QsTUFBSTtBQUNGLFdBQU87QUFDTCxhQUFPLEVBQUU7QUFDUCxZQUFJLEVBQUUsYUFEQztBQUVQLGVBQU8sRUFBRSxtRUFBbUUsS0FBSyxDQUFDLE9BQU4sQ0FBYyxXQUFkLEVBQTJCLDZDQUZoRztBQUdQLGFBQUssRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsVUFBUCxDQUhwQjtBQUlQLGVBQU8sRUFBRSxDQUNQO0FBQ0UsY0FBSSxFQUFFLE9BRFI7QUFFRSxpQkFBTyxFQUFFLHdCQUZYO0FBR0UsZ0JBQU0sRUFBRSxNQUFLO0FBQ1g7QUFDQSxtQkFBTyxDQUFDLEdBQVIsQ0FBWSxLQUFaO0FBQ0Q7QUFOSCxTQURPO0FBSkY7QUFESixLQUFQO0FBaUJELEdBbEJELENBa0JFLE9BQU8sQ0FBUCxFQUFVO0FBQ1YsV0FBTztBQUNMLGFBQU8sRUFBRTtBQUNQLFlBQUksRUFBRSxhQURDO0FBRVAsZUFBTyxFQUFFLCtCQUErQixNQUFNLENBQUMsS0FBRCxDQUFPO0FBRjlDO0FBREosS0FBUDtBQU1EO0FBQ0Y7O0FBM0JEOztBQTZCQSxTQUFTLG9CQUFULENBQStCLEdBQS9CLEVBQWdEO0FBQzlDLFFBQU0sTUFBTSxHQUFRLEVBQXBCO0FBQ0EsUUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQWQ7O0FBQ0EsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFiLEVBQWdCLENBQUMsR0FBRyxDQUFwQixFQUF1QixDQUFDLEVBQXhCLEVBQTRCO0FBQzFCLFVBQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFKLENBQVMsQ0FBVCxDQUFiO0FBQ0EsVUFBTSxDQUFDLElBQUksQ0FBQyxJQUFOLENBQU4sR0FBb0IsSUFBSSxDQUFDLEtBQXpCO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFQO0FBQ0Q7O0FBRUQsU0FBZ0IsbUJBQWhCLENBQXFDLFFBQXJDLEVBQStDLEdBQS9DLEVBQW9ELEdBQXBELEVBQXVEO0FBQ3JELE1BQUksS0FBSjs7QUFDQSxNQUFJLEtBQUssQ0FBQyxPQUFOLENBQWMsR0FBZCxDQUFKLEVBQXdCO0FBQ3RCLFNBQUssR0FBRyxHQUFHLENBQUMsR0FBSixDQUFTLENBQUQsSUFBTyxtQkFBbUIsQ0FBQyxRQUFELEVBQVcsR0FBWCxFQUFnQixDQUFoQixDQUFsQyxFQUFzRCxHQUF0RCxDQUEwRCxJQUFJLElBQUksSUFBSSxDQUFDLEtBQXZFLENBQVI7QUFDRCxHQUZELE1BRU87QUFDTCxRQUFJLElBQUo7O0FBQ0EsUUFBSSxHQUFHLENBQUMsTUFBUixFQUFnQjtBQUNkLFVBQUksR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBTCxDQUF2QjtBQUNELEtBRkQsTUFFTztBQUNMLFVBQUksR0FBRyxHQUFHLENBQUMsT0FBSixDQUFZLFdBQVosRUFBUDtBQUNEOztBQUVELFNBQUssR0FBRztBQUNOLGFBQU8sRUFBRTtBQUNQLGVBQU8sRUFBRSxPQUFPLElBQUksRUFBWCxJQUNOLEdBQUcsQ0FBQyxFQUFKLEdBQVMsd0NBQXdDLEdBQUcsQ0FBQyxFQUFFLEdBQXZELEdBQTZELEVBRHZELEtBRU4sR0FBRyxDQUFDLFNBQUosR0FBZ0IsMkNBQTJDLEdBQUcsQ0FBQyxTQUFTLEdBQXhFLEdBQThFLEVBRnhFLElBRThFLE1BSGhGO0FBSVAsV0FBRyxFQUFFLFFBQVEsQ0FBQyxvQkFKUDtBQUtQLFlBQUksRUFBRTtBQUxDO0FBREgsS0FBUjtBQVNEOztBQUNELFNBQU87QUFDTCxRQUFJLEVBQUUsT0FERDtBQUVMLE9BQUcsRUFBRSxHQUZBO0FBR0wsU0FISztBQUlMLFlBQVEsRUFBRTtBQUpMLEdBQVA7QUFNRDs7QUE1QkQ7O0FBOEJBLFNBQWdCLEtBQWhCLENBQXVCLElBQXZCLEVBQWtDLE1BQU0sR0FBRyxLQUEzQyxFQUFnRDtBQUM5QyxTQUFPLE1BQU0sR0FDVCx3Q0FBd0IsSUFBeEIsRUFBOEIsT0FBOUIsQ0FEUyxHQUVULHdDQUF3QixJQUF4QixDQUZKO0FBR0Q7O0FBSkQ7QUFNQSxNQUFNLGFBQWEsR0FBRyx3Q0FBdEI7QUFDQSxNQUFNLFFBQVEsR0FBRyxvQ0FBakI7O0FBRUEsU0FBUyxPQUFULENBQWtCLEdBQWxCLEVBQXVCLEdBQXZCLEVBQTBCO0FBQ3hCLFNBQU8sTUFBTSxDQUFDLEdBQUQsQ0FBYjtBQUNEOztBQUVELFNBQWdCLE1BQWhCLENBQXdCLEdBQXhCLEVBQTJCO0FBQ3pCLE1BQUksR0FBRyxLQUFLLGlCQUFaLEVBQXVCO0FBQ3JCLFdBQU8sU0FBUDtBQUNELEdBRkQsTUFFTyxJQUFJLEdBQUcsS0FBSyxnQkFBWixFQUFzQjtBQUMzQixXQUFPLFFBQVA7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLEtBQUsseUJBQVosRUFBK0I7QUFDcEMsV0FBTyxDQUFDLFFBQVI7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLEtBQUssV0FBWixFQUFpQjtBQUN0QixXQUFPLEdBQVA7QUFDRCxHQUZNLE1BRUEsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQWYsRUFBd0I7QUFDN0IsVUFBTTtBQUFFLGFBQU8sRUFBRTtBQUFYLFFBQW1DLEdBQXpDOztBQUNBLFFBQUksTUFBTSxDQUFDLElBQVAsS0FBZ0IsV0FBcEIsRUFBaUM7QUFDL0IsYUFBTyxnQ0FBaUIsR0FBakIsQ0FBcUIsTUFBTSxDQUFDLEVBQTVCLENBQVA7QUFDRCxLQUZELE1BRU8sSUFBSSxNQUFNLENBQUMsSUFBUCxLQUFnQixLQUFwQixFQUEyQjtBQUNoQyxhQUFPLFNBQVMsQ0FBQyxHQUFELENBQWhCO0FBQ0QsS0FGTSxNQUVBLElBQUksTUFBTSxDQUFDLElBQVAsS0FBZ0IsS0FBcEIsRUFBMkI7QUFDaEMsYUFBTyxTQUFTLENBQUMsR0FBRCxDQUFoQjtBQUNELEtBRk0sTUFFQSxJQUFJLE1BQU0sQ0FBQyxTQUFYLEVBQXNCO0FBQzNCLGFBQU8sV0FBVyxDQUFDLElBQVosQ0FBaUIsTUFBTSxDQUFDLFNBQXhCLENBQVA7QUFDRCxLQUZNLE1BRUE7QUFDTCxhQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBUixDQUFiO0FBQ0Q7QUFDRixHQWJNLE1BYUEsSUFBSSxRQUFRLENBQUMsSUFBVCxDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUM3QixVQUFNLEdBQUcsTUFBSCxJQUFhLFFBQVEsQ0FBQyxJQUFULENBQWMsR0FBZCxDQUFuQjtBQUNBLFdBQU8sTUFBTSxDQUFDLEdBQVAsQ0FBVyxNQUFYLENBQVA7QUFDRCxHQUhNLE1BR0EsSUFBSSxhQUFhLENBQUMsSUFBZCxDQUFtQixHQUFuQixDQUFKLEVBQTZCO0FBQ2xDLFVBQU0sR0FBRyxJQUFILEVBQVMsTUFBVCxHQUFrQixPQUFsQixJQUE2QixhQUFhLENBQUMsSUFBZCxDQUFtQixHQUFuQixDQUFuQztBQUNBLFVBQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUQsQ0FBVixDQUFpQixNQUFqQixDQUFmOztBQUNBLFFBQUksSUFBSSxLQUFLLE9BQVQsSUFBb0IsT0FBeEIsRUFBaUM7QUFDL0IsWUFBTSxDQUFDLEtBQVAsR0FBZSxPQUFmO0FBQ0Q7O0FBQ0QsV0FBTyxNQUFQO0FBQ0QsR0FQTSxNQU9BO0FBQ0wsV0FBTyxHQUFQO0FBQ0Q7QUFDRjs7QUFuQ0Q7QUFxQ0E7Ozs7Ozs7QUFPRzs7QUFFSCxTQUFTLFFBQVQsQ0FBbUIsSUFBbkIsRUFBdUI7QUFDckIsTUFDRSxDQUFDLFdBQVcsQ0FBQyxJQUFELENBQVosSUFDQSxDQUFDLEtBQUssQ0FBQyxPQUFOLENBQWMsSUFBZCxDQURELElBRUEsQ0FBQyxhQUFhLENBQUMsSUFBRCxDQUhoQixFQUlFO0FBQ0E7QUFDQTtBQUNBLFdBQU8sTUFBTSxDQUFDLFNBQVAsQ0FBaUIsUUFBakIsQ0FBMEIsSUFBMUIsQ0FBK0IsSUFBL0IsQ0FBUDtBQUNELEdBUkQsTUFRTztBQUNMLFdBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBZ0IsYUFBaEIsQ0FBK0IsR0FBL0IsRUFBa0M7QUFDaEMsU0FBTyxNQUFNLENBQUMsU0FBUCxDQUFpQixRQUFqQixDQUEwQixJQUExQixDQUErQixHQUEvQixNQUF3QyxpQkFBL0M7QUFDRDs7QUFGRDs7QUFJQSxTQUFTLFdBQVQsQ0FBc0IsSUFBdEIsRUFBMEI7QUFDeEIsTUFBSSxJQUFJLElBQUksSUFBWixFQUFrQjtBQUNoQixXQUFPLElBQVA7QUFDRDs7QUFDRCxRQUFNLElBQUksR0FBRyxPQUFPLElBQXBCO0FBQ0EsU0FDRSxJQUFJLEtBQUssUUFBVCxJQUNBLElBQUksS0FBSyxRQURULElBRUEsSUFBSSxLQUFLLFNBSFg7QUFLRDtBQUVEOzs7OztBQUtHOzs7QUFDSCxTQUFnQixrQkFBaEIsQ0FBb0MsR0FBcEMsRUFBeUMsVUFBekMsRUFBbUQ7QUFDakQsUUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFKLEVBQWI7QUFDQSxRQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxHQUFELEVBQU0sVUFBVSxDQUFDLFdBQVgsRUFBTixFQUFnQyxJQUFoQyxFQUFzQyxDQUF0QyxDQUFuQztBQUNBLE1BQUksQ0FBQyxLQUFMO0FBQ0EsU0FBTyxNQUFQO0FBQ0Q7O0FBTEQ7QUFPQSxNQUFNLGdCQUFnQixHQUFHLEVBQXpCO0FBRUE7Ozs7Ozs7QUFPRzs7QUFDSCxTQUFTLG9CQUFULENBQStCLEdBQS9CLEVBQW9DLFVBQXBDLEVBQWdELElBQWhELEVBQXNELEtBQXRELEVBQTJEO0FBQ3pELE1BQUksS0FBSyxHQUFHLGdCQUFaLEVBQThCO0FBQzVCLFdBQU8sS0FBUDtBQUNEOztBQUNELE1BQUksS0FBSyxHQUFHLEtBQVo7QUFDQSxRQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBUCxDQUFZLEdBQVosQ0FBYjtBQUNBLE1BQUksR0FBSixFQUFTLEtBQVQ7O0FBQ0EsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFiLEVBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBekIsRUFBaUMsQ0FBQyxFQUFsQyxFQUFzQztBQUNwQyxPQUFHLEdBQUcsSUFBSSxDQUFDLENBQUQsQ0FBVjtBQUNBLFNBQUssR0FBRyxHQUFHLENBQUMsR0FBRCxDQUFYO0FBQ0EsU0FBSyxHQUFHLG1CQUFtQixDQUFDLFVBQUQsRUFBYSxHQUFiLEVBQWtCLEtBQWxCLEVBQXlCLElBQXpCLEVBQStCLEtBQUssR0FBRyxDQUF2QyxDQUEzQjs7QUFDQSxRQUFJLEtBQUosRUFBVztBQUNUO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPLEtBQVA7QUFDRDtBQUVEOzs7Ozs7O0FBT0c7OztBQUNILFNBQVMsbUJBQVQsQ0FBOEIsS0FBOUIsRUFBcUMsVUFBckMsRUFBaUQsSUFBakQsRUFBdUQsS0FBdkQsRUFBNEQ7QUFDMUQsTUFBSSxLQUFLLEdBQUcsZ0JBQVosRUFBOEI7QUFDNUIsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxLQUFLLEdBQUcsS0FBWjtBQUNBLE1BQUksS0FBSjs7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLENBQWIsRUFBZ0IsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUExQixFQUFrQyxDQUFDLEVBQW5DLEVBQXVDO0FBQ3JDLFNBQUssR0FBRyxLQUFLLENBQUMsQ0FBRCxDQUFiO0FBQ0EsU0FBSyxHQUFHLG1CQUFtQixDQUFDLFVBQUQsRUFBYSxJQUFiLEVBQW1CLEtBQW5CLEVBQTBCLElBQTFCLEVBQWdDLEtBQUssR0FBRyxDQUF4QyxDQUEzQjs7QUFDQSxRQUFJLEtBQUosRUFBVztBQUNUO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPLEtBQVA7QUFDRDtBQUVEOzs7Ozs7OztBQVFHOzs7QUFDSCxTQUFTLG1CQUFULENBQThCLFVBQTlCLEVBQTBDLEdBQTFDLEVBQStDLEtBQS9DLEVBQXNELElBQXRELEVBQTRELEtBQTVELEVBQWlFO0FBQy9ELE1BQUksS0FBSyxHQUFHLEtBQVo7QUFDQSxNQUFJLE1BQUo7O0FBQ0EsTUFBSSxHQUFHLEtBQUssU0FBWixFQUF1QjtBQUNyQixPQUFHLEdBQUcsS0FBSyxDQUFDLE9BQVo7QUFDQSxTQUFLLEdBQUcsS0FBSyxDQUFDLEtBQWQ7QUFDRDs7QUFDRCxHQUFDLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxLQUFELENBQTlCLE1BQTJDLEtBQUssR0FBRyxNQUFuRDs7QUFDQSxNQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRCxFQUFNLFVBQU4sQ0FBbEIsRUFBcUM7QUFDbkMsU0FBSyxHQUFHLElBQVI7QUFDQSxRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsSUFBaEI7QUFDRCxHQUhELE1BR08sSUFBSSxJQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsQ0FBSixFQUFxQjtBQUMxQixTQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUwsQ0FBUyxLQUFULENBQVI7QUFDRCxHQUZNLE1BRUEsSUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLEtBQWQsQ0FBSixFQUEwQjtBQUMvQixRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsSUFBaEI7QUFDQSxTQUFLLEdBQUcsbUJBQW1CLENBQUMsS0FBRCxFQUFRLFVBQVIsRUFBb0IsSUFBcEIsRUFBMEIsS0FBMUIsQ0FBM0I7QUFDQSxRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsS0FBaEI7QUFDRCxHQUpNLE1BSUEsSUFBSSxhQUFhLENBQUMsS0FBRCxDQUFqQixFQUEwQjtBQUMvQixRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsSUFBaEI7QUFDQSxTQUFLLEdBQUcsb0JBQW9CLENBQUMsS0FBRCxFQUFRLFVBQVIsRUFBb0IsSUFBcEIsRUFBMEIsS0FBMUIsQ0FBNUI7QUFDQSxRQUFJLENBQUMsR0FBTCxDQUFTLEtBQVQsRUFBZ0IsS0FBaEI7QUFDRCxHQUpNLE1BSUEsSUFBSSxPQUFPLENBQUMsS0FBRCxFQUFRLFVBQVIsQ0FBWCxFQUFnQztBQUNyQyxTQUFLLEdBQUcsSUFBUjtBQUNBLFFBQUksQ0FBQyxHQUFMLENBQVMsS0FBVCxFQUFnQixJQUFoQjtBQUNEOztBQUNELFNBQU8sS0FBUDtBQUNEO0FBRUQ7Ozs7O0FBS0c7OztBQUNILFNBQVMsT0FBVCxDQUFrQixLQUFsQixFQUF5QixVQUF6QixFQUFtQztBQUNqQyxTQUFPLENBQUMsS0FBSyxLQUFOLEVBQWEsV0FBYixHQUEyQixPQUEzQixDQUFtQyxVQUFuQyxNQUFtRCxDQUFDLENBQTNEO0FBQ0Q7O0FBRUQsU0FBZ0IsU0FBaEIsQ0FBMkIsS0FBM0IsRUFBZ0M7QUFDOUIsU0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQU4sR0FBYyxJQUFkLENBQW1CLENBQUMsQ0FBRCxFQUFJLENBQUosS0FBUztBQUMxQyxRQUFJLENBQUMsQ0FBQyxHQUFGLEdBQVEsQ0FBQyxDQUFDLEdBQWQsRUFBbUIsT0FBTyxDQUFDLENBQVI7QUFDbkIsUUFBSSxDQUFDLENBQUMsR0FBRixHQUFRLENBQUMsQ0FBQyxHQUFkLEVBQW1CLE9BQU8sQ0FBUDtBQUNuQixXQUFPLENBQVA7QUFDRCxHQUplLENBQWhCO0FBS0Q7O0FBTkQ7O0FBUUEsU0FBZ0IsU0FBaEIsQ0FBMkIsTUFBM0IsRUFBbUMsSUFBbkMsRUFBdUM7QUFDckMsUUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFkLElBQXNCLElBQXRCLEdBQTZCLElBQUksQ0FBQyxLQUFMLENBQVcsR0FBWCxDQUE5Qzs7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLENBQWIsRUFBZ0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUE3QixFQUFxQyxDQUFDLEVBQXRDLEVBQTBDO0FBQ3hDLFVBQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUQsQ0FBVCxDQUFmOztBQUNBLFFBQUksQ0FBQyxNQUFMLEVBQWE7QUFDWCxhQUFPLFNBQVA7QUFDRDtBQUNGOztBQUNELFNBQU8sTUFBUDtBQUNEOztBQVREOztBQVdBLFNBQWdCLFVBQWhCLENBQTRCLEVBQTVCLEVBQThCO0FBQzVCLElBQUUsQ0FBQyxLQUFIO0FBQ0EsSUFBRSxDQUFDLGlCQUFILENBQXFCLENBQXJCLEVBQXdCLEVBQUUsQ0FBQyxLQUFILENBQVMsTUFBakM7QUFDRDs7QUFIRDs7QUFLQSxTQUFnQixZQUFoQixDQUE4QixJQUE5QixFQUFrQztBQUNoQztBQUNBLFFBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFqQjtBQUNBLFFBQU0sR0FBRyxHQUFHLFVBQVUseUJBQVcsZ0JBQWdCLHlCQUF5QixTQUFTLENBQUMsSUFBRCxDQUFNOzswQkFFakUsUUFBUTs7dUNBRUssUUFBUTs7Ozs7Ozs7O0FBUzFDLEtBYkg7O0FBY0EsTUFBSSxjQUFKLEVBQWM7QUFDWixpQkFBTyxNQUFQLENBQWMsUUFBZCxDQUF1QixlQUF2QixDQUF1QyxJQUF2QyxDQUE0QyxHQUE1QztBQUNELEdBRkQsTUFFTztBQUNMO0FBQ0EsUUFBSSxDQUFDLEdBQUQsQ0FBSjtBQUNEO0FBQ0Y7O0FBdkJEO0FBeUJBLE1BQU0sR0FBRyxHQUFHO0FBQ1YsT0FBSyxNQURLO0FBRVYsT0FBSyxNQUZLO0FBR1YsT0FBSyxRQUhLO0FBSVYsT0FBSztBQUpLLENBQVo7O0FBT0EsU0FBZ0IsTUFBaEIsQ0FBd0IsQ0FBeEIsRUFBeUI7QUFDdkIsU0FBTyxDQUFDLENBQUMsT0FBRixDQUFVLFNBQVYsRUFBcUIsVUFBckIsQ0FBUDtBQUNEOztBQUZEOztBQUlBLFNBQVMsVUFBVCxDQUFxQixDQUFyQixFQUFzQjtBQUNwQixTQUFPLEdBQUcsQ0FBQyxDQUFELENBQUgsSUFBVSxDQUFqQjtBQUNEOztBQUVELFNBQWdCLGVBQWhCLENBQWlDLEtBQWpDLEVBQXNDO0FBQ3BDLE1BQUksT0FBTyxRQUFQLEtBQW9CLFdBQXhCLEVBQXFDO0FBQ3JDLFFBQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFULENBQXVCLFVBQXZCLENBQXRCO0FBQ0EsZUFBYSxDQUFDLFdBQWQsR0FBNEIsU0FBUyxDQUFDLEtBQUQsQ0FBckM7QUFDQSxVQUFRLENBQUMsSUFBVCxDQUFjLFdBQWQsQ0FBMEIsYUFBMUI7QUFDQSxlQUFhLENBQUMsTUFBZDtBQUNBLFVBQVEsQ0FBQyxXQUFULENBQXFCLE1BQXJCO0FBQ0EsVUFBUSxDQUFDLElBQVQsQ0FBYyxXQUFkLENBQTBCLGFBQTFCO0FBQ0Q7O0FBUkQ7O0FBVUEsU0FBZ0IsYUFBaEIsQ0FBK0IsR0FBL0IsRUFBa0M7QUFDaEMsU0FBTyxHQUFHLEtBQUssaUJBQVIsSUFBcUIsQ0FBQyxHQUF0QixJQUE2QixNQUFNLENBQUMsSUFBUCxDQUFZLEdBQVosRUFBaUIsTUFBakIsS0FBNEIsQ0FBaEU7QUFDRDs7QUFGRCIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3V0aWwudHM/YTY0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNFbXB0eU9iamVjdCA9IGV4cG9ydHMuY29weVRvQ2xpcGJvYXJkID0gZXhwb3J0cy5lc2NhcGUgPSBleHBvcnRzLm9wZW5JbkVkaXRvciA9IGV4cG9ydHMuZm9jdXNJbnB1dCA9IGV4cG9ydHMuc2ltcGxlR2V0ID0gZXhwb3J0cy5zb3J0QnlLZXkgPSBleHBvcnRzLnNlYXJjaERlZXBJbk9iamVjdCA9IGV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGV4cG9ydHMucmV2aXZlID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuZ2V0Q3VzdG9tUmVmRGV0YWlscyA9IGV4cG9ydHMuZ2V0Q3VzdG9tSFRNTEVsZW1lbnREZXRhaWxzID0gZXhwb3J0cy5nZXRDdXN0b21GdW5jdGlvbkRldGFpbHMgPSBleHBvcnRzLmdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzID0gZXhwb3J0cy5nZXRDb21wb25lbnROYW1lID0gZXhwb3J0cy5yZXZpdmVTZXQgPSBleHBvcnRzLmdldEN1c3RvbVNldERldGFpbHMgPSBleHBvcnRzLnJldml2ZU1hcCA9IGV4cG9ydHMuZ2V0Q3VzdG9tTWFwRGV0YWlscyA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zcGVjaWFsVG9rZW5Ub1N0cmluZyA9IGV4cG9ydHMuTUFYX0FSUkFZX1NJWkUgPSBleHBvcnRzLk1BWF9TVFJJTkdfU0laRSA9IGV4cG9ydHMuU1BFQ0lBTF9UT0tFTlMgPSBleHBvcnRzLk5BTiA9IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkgPSBleHBvcnRzLklORklOSVRZID0gZXhwb3J0cy5VTkRFRklORUQgPSBleHBvcnRzLmluRG9jID0gZXhwb3J0cy5nZXRDb21wb25lbnREaXNwbGF5TmFtZSA9IGV4cG9ydHMua2ViYWJpemUgPSBleHBvcnRzLmNhbWVsaXplID0gZXhwb3J0cy5jbGFzc2lmeSA9IHZvaWQgMDtcbmNvbnN0IHBhdGhfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicGF0aFwiKSk7XG5jb25zdCB0cmFuc2Zlcl8xID0gcmVxdWlyZShcIi4vdHJhbnNmZXJcIik7XG5jb25zdCBiYWNrZW5kXzEgPSByZXF1aXJlKFwiLi9iYWNrZW5kXCIpO1xuY29uc3Qgc2hhcmVkX2RhdGFfMSA9IHJlcXVpcmUoXCIuL3NoYXJlZC1kYXRhXCIpO1xuY29uc3QgZW52XzEgPSByZXF1aXJlKFwiLi9lbnZcIik7XG5mdW5jdGlvbiBjYWNoZWQoZm4pIHtcbiAgICBjb25zdCBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZEZuKHN0cikge1xuICAgICAgICBjb25zdCBoaXQgPSBjYWNoZVtzdHJdO1xuICAgICAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSk7XG4gICAgfTtcbn1cbmNvbnN0IGNsYXNzaWZ5UkUgPSAvKD86XnxbLV8vXSkoXFx3KS9nO1xuZXhwb3J0cy5jbGFzc2lmeSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgLy8gZml4OiBzdHIucmVwbGFjZSBtYXkgY2F1c2VzICdcInJlcGxhY2VcIiBpcyBub3QgYSBmdW5jdGlvbicgZXhjZXB0aW9uLlxuICAgIC8vIFRoaXMgYnVnIG1heSBjYXVzZXMgdGhlIFVJICdDb21wb25lbnQgRmlsdGVyJyB0byBub3Qgd29yayBwcm9wZXJseVxuICAgIC8vIGUuZy4gVGhlIHR5cGUgb2YgJ3N0cicgaXMgTnVtYmVyLlxuICAgIC8vIFNvIG5lZWQgY292ZXIgJ3N0cicgdG8gU3RyaW5nLlxuICAgIHJldHVybiBzdHIgJiYgKCcnICsgc3RyKS5yZXBsYWNlKGNsYXNzaWZ5UkUsIHRvVXBwZXIpO1xufSk7XG5jb25zdCBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xuZXhwb3J0cy5jYW1lbGl6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCB0b1VwcGVyKTtcbn0pO1xuY29uc3Qga2ViYWJpemVSRSA9IC8oW2EtejAtOV0pKFtBLVpdKS9nO1xuZXhwb3J0cy5rZWJhYml6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0ciAmJiBzdHJcbiAgICAgICAgLnJlcGxhY2Uoa2ViYWJpemVSRSwgKF8sIGxvd2VyQ2FzZUNoYXJhY3RlciwgdXBwZXJDYXNlTGV0dGVyKSA9PiB7XG4gICAgICAgIHJldHVybiBgJHtsb3dlckNhc2VDaGFyYWN0ZXJ9LSR7dXBwZXJDYXNlTGV0dGVyfWA7XG4gICAgfSlcbiAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG59KTtcbmZ1bmN0aW9uIHRvVXBwZXIoXywgYykge1xuICAgIHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7XG59XG5mdW5jdGlvbiBnZXRDb21wb25lbnREaXNwbGF5TmFtZShvcmlnaW5hbE5hbWUsIHN0eWxlID0gJ2NsYXNzJykge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmNsYXNzaWZ5KShvcmlnaW5hbE5hbWUpO1xuICAgICAgICBjYXNlICdrZWJhYic6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMua2ViYWJpemUpKG9yaWdpbmFsTmFtZSk7XG4gICAgICAgIGNhc2UgJ29yaWdpbmFsJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWU7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnREaXNwbGF5TmFtZSA9IGdldENvbXBvbmVudERpc3BsYXlOYW1lO1xuZnVuY3Rpb24gaW5Eb2Mobm9kZSkge1xuICAgIGlmICghbm9kZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRvYyA9IG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIHJldHVybiBkb2MgPT09IG5vZGUgfHxcbiAgICAgICAgZG9jID09PSBwYXJlbnQgfHxcbiAgICAgICAgISEocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMSAmJiAoZG9jLmNvbnRhaW5zKHBhcmVudCkpKTtcbn1cbmV4cG9ydHMuaW5Eb2MgPSBpbkRvYztcbi8qKlxuICogU3RyaW5naWZ5L3BhcnNlIGRhdGEgdXNpbmcgQ2lyY3VsYXJKU09OLlxuICovXG5leHBvcnRzLlVOREVGSU5FRCA9ICdfX3Z1ZV9kZXZ0b29sX3VuZGVmaW5lZF9fJztcbmV4cG9ydHMuSU5GSU5JVFkgPSAnX192dWVfZGV2dG9vbF9pbmZpbml0eV9fJztcbmV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkgPSAnX192dWVfZGV2dG9vbF9uZWdhdGl2ZV9pbmZpbml0eV9fJztcbmV4cG9ydHMuTkFOID0gJ19fdnVlX2RldnRvb2xfbmFuX18nO1xuZXhwb3J0cy5TUEVDSUFMX1RPS0VOUyA9IHtcbiAgICB0cnVlOiB0cnVlLFxuICAgIGZhbHNlOiBmYWxzZSxcbiAgICB1bmRlZmluZWQ6IGV4cG9ydHMuVU5ERUZJTkVELFxuICAgIG51bGw6IG51bGwsXG4gICAgJy1JbmZpbml0eSc6IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFksXG4gICAgSW5maW5pdHk6IGV4cG9ydHMuSU5GSU5JVFksXG4gICAgTmFOOiBleHBvcnRzLk5BTixcbn07XG5leHBvcnRzLk1BWF9TVFJJTkdfU0laRSA9IDEwMDAwO1xuZXhwb3J0cy5NQVhfQVJSQVlfU0laRSA9IDUwMDA7XG5mdW5jdGlvbiBzcGVjaWFsVG9rZW5Ub1N0cmluZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5VTkRFRklORUQpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5OQU4pIHtcbiAgICAgICAgcmV0dXJuICdOYU4nO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gJ0luZmluaXR5JztcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT09IGV4cG9ydHMuTkVHQVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgICAgcmV0dXJuICctSW5maW5pdHknO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNwZWNpYWxUb2tlblRvU3RyaW5nID0gc3BlY2lhbFRva2VuVG9TdHJpbmc7XG4vKipcbiAqIE5lZWRlZCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93XG4gKiB3aGlsZSByZXBsYWNpbmcgY29tcGxleCBvYmplY3RzXG4gKiBsaWtlIGNvbXBvbmVudHMgYmVjYXVzZSB3ZSBjcmVhdGVcbiAqIG5ldyBvYmplY3RzIHdpdGggdGhlIEN1c3RvbVZhbHVlIEFQSVxuICogKC5pLmUgYHsgX2N1c3RvbTogeyAuLi4gfSB9YClcbiAqL1xuY2xhc3MgRW5jb2RlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJlc3VsdCB1bmlxdWUgdG8gZWFjaCBpbnB1dCBkYXRhXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIElucHV0IGRhdGFcbiAgICAgKiBAcGFyYW0geyp9IGZhY3RvcnkgRnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVuaXF1ZSByZXN1bHRcbiAgICAgKi9cbiAgICBjYWNoZShkYXRhLCBmYWN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubWFwLmdldChkYXRhKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZhY3RvcnkoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXQoZGF0YSwgcmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubWFwLmNsZWFyKCk7XG4gICAgfVxufVxuY29uc3QgZW5jb2RlQ2FjaGUgPSBuZXcgRW5jb2RlQ2FjaGUoKTtcbmNsYXNzIFJldml2ZUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplKSB7XG4gICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG4gICAgY2FjaGUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgdGhpcy5tYXAuc2V0KGN1cnJlbnRJbmRleCwgdmFsdWUpO1xuICAgICAgICB0aGlzLnNpemUrKztcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSA+IHRoaXMubWF4U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5tYXAuZGVsZXRlKGN1cnJlbnRJbmRleCAtIHRoaXMuc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLnNpemUtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgfVxuICAgIHJlYWQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldChpZCk7XG4gICAgfVxufVxuY29uc3QgcmV2aXZlQ2FjaGUgPSBuZXcgUmV2aXZlQ2FjaGUoMTAwMCk7XG5mdW5jdGlvbiBzdHJpbmdpZnkoZGF0YSkge1xuICAgIC8vIENyZWF0ZSBhIGZyZXNoIGNhY2hlIGZvciBlYWNoIHNlcmlhbGl6YXRpb25cbiAgICBlbmNvZGVDYWNoZS5jbGVhcigpO1xuICAgIHJldHVybiAoMCwgdHJhbnNmZXJfMS5zdHJpbmdpZnlDaXJjdWxhckF1dG9DaHVua3MpKGRhdGEsIHJlcGxhY2VyKTtcbn1cbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZnVuY3Rpb24gcmVwbGFjZXIoa2V5KSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHZhbCA9IHRoaXNba2V5XTtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGNvbnN0IGwgPSB2YWwubGVuZ3RoO1xuICAgICAgICBpZiAobCA+IGV4cG9ydHMuTUFYX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgX2lzQXJyYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiBsLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiB2YWwuc2xpY2UoMCwgZXhwb3J0cy5NQVhfQVJSQVlfU0laRSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh2YWwubGVuZ3RoID4gZXhwb3J0cy5NQVhfU1RSSU5HX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwuc3Vic3RyaW5nKDAsIGV4cG9ydHMuTUFYX1NUUklOR19TSVpFKSArIGAuLi4gKCR7KHZhbC5sZW5ndGgpfSB0b3RhbCBsZW5ndGgpYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVU5ERUZJTkVEO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLklORklOSVRZO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZ2V0Q3VzdG9tRnVuY3Rpb25EZXRhaWxzKHZhbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiBgW25hdGl2ZSBTeW1ib2wgJHtTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKX1dYDtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsICE9PSBudWxsICYmIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCk7XG4gICAgICAgIGlmIChwcm90byA9PT0gJ1tvYmplY3QgTWFwXScpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbU1hcERldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IFNldF0nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiBnZXRDdXN0b21TZXREZXRhaWxzKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgICAgICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBvZiBuYXRpdmUgdHlwZVxuICAgICAgICAgICAgcmV0dXJuIGBbbmF0aXZlIFJlZ0V4cCAke1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAgICAgICAgIHJldHVybiBgW25hdGl2ZSBEYXRlICR7RGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvID09PSAnW29iamVjdCBFcnJvcl0nKSB7XG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgRXJyb3IgJHt2YWwubWVzc2FnZX08PiR7dmFsLnN0YWNrfV1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbC5zdGF0ZSAmJiB2YWwuX3ZtKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiAoMCwgYmFja2VuZF8xLmdldEN1c3RvbVN0b3JlRGV0YWlscykodmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLmNvbnN0cnVjdG9yICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVnVlUm91dGVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gKDAsIGJhY2tlbmRfMS5nZXRDdXN0b21Sb3V0ZXJEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoMCwgYmFja2VuZF8xLmlzVnVlSW5zdGFuY2UpKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+ICgwLCBiYWNrZW5kXzEuZ2V0Q3VzdG9tSW5zdGFuY2VEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLmNvbnN0cnVjdG9yICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVk5vZGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgVk5vZGUgPCR7dmFsLnRhZ30+XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscyh2YWwpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChOdW1iZXIuaXNOYU4odmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5OQU47XG4gICAgfVxuICAgIHJldHVybiBzYW5pdGl6ZSh2YWwpO1xufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tTWFwRGV0YWlscyh2YWwpIHtcbiAgICBjb25zdCBsaXN0ID0gW107XG4gICAgdmFsLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGxpc3QucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgfSkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdtYXAnLFxuICAgICAgICAgICAgZGlzcGxheTogJ01hcCcsXG4gICAgICAgICAgICB2YWx1ZTogbGlzdCxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbU1hcERldGFpbHMgPSBnZXRDdXN0b21NYXBEZXRhaWxzO1xuZnVuY3Rpb24gcmV2aXZlTWFwKHZhbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBsaXN0ID0gdmFsLl9jdXN0b20udmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gbGlzdFtpXTtcbiAgICAgICAgcmVzdWx0LnNldChrZXksIHJldml2ZSh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5yZXZpdmVNYXAgPSByZXZpdmVNYXA7XG5mdW5jdGlvbiBnZXRDdXN0b21TZXREZXRhaWxzKHZhbCkge1xuICAgIGNvbnN0IGxpc3QgPSBBcnJheS5mcm9tKHZhbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ3NldCcsXG4gICAgICAgICAgICBkaXNwbGF5OiBgU2V0WyR7bGlzdC5sZW5ndGh9XWAsXG4gICAgICAgICAgICB2YWx1ZTogbGlzdCxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbVNldERldGFpbHMgPSBnZXRDdXN0b21TZXREZXRhaWxzO1xuZnVuY3Rpb24gcmV2aXZlU2V0KHZhbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBsaXN0ID0gdmFsLl9jdXN0b20udmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbGlzdFtpXTtcbiAgICAgICAgcmVzdWx0LmFkZChyZXZpdmUodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucmV2aXZlU2V0ID0gcmV2aXZlU2V0O1xuLy8gVXNlIGEgY3VzdG9tIGJhc2VuYW1lIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBzaGltZWQgdmVyc2lvblxuLy8gYmVjYXVzZSBpdCBkb2Vzbid0IHdvcmsgb24gV2luZG93c1xuZnVuY3Rpb24gYmFzZW5hbWUoZmlsZW5hbWUsIGV4dCkge1xuICAgIHJldHVybiBwYXRoXzEuZGVmYXVsdC5iYXNlbmFtZShmaWxlbmFtZS5yZXBsYWNlKC9eW2EtekEtWl06LywgJycpLnJlcGxhY2UoL1xcXFwvZywgJy8nKSwgZXh0KTtcbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUob3B0aW9ucykge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IG9wdGlvbnMubmFtZSB8fCBvcHRpb25zLl9jb21wb25lbnRUYWc7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGNvbnN0IGZpbGUgPSBvcHRpb25zLl9fZmlsZTsgLy8gaW5qZWN0ZWQgYnkgdnVlLWxvYWRlclxuICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5jbGFzc2lmeSkoYmFzZW5hbWUoZmlsZSwgJy52dWUnKSk7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZTtcbmZ1bmN0aW9uIGdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzKGRlZikge1xuICAgIGxldCBkaXNwbGF5ID0gZ2V0Q29tcG9uZW50TmFtZShkZWYpO1xuICAgIGlmIChkaXNwbGF5KSB7XG4gICAgICAgIGlmIChkZWYubmFtZSAmJiBkZWYuX19maWxlKSB7XG4gICAgICAgICAgICBkaXNwbGF5ICs9IGAgPHNwYW4+KCR7ZGVmLl9fZmlsZX0pPC9zcGFuPmA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRpc3BsYXkgPSAnPGk+VW5rbm93biBDb21wb25lbnQ8L2k+JztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudC1kZWZpbml0aW9uJyxcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICB0b29sdGlwOiAnQ29tcG9uZW50IGRlZmluaXRpb24nLFxuICAgICAgICAgICAgLi4uZGVmLl9fZmlsZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBmaWxlOiBkZWYuX19maWxlLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbUNvbXBvbmVudERlZmluaXRpb25EZXRhaWxzID0gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHM7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZnVuY3Rpb24gZ2V0Q3VzdG9tRnVuY3Rpb25EZXRhaWxzKGZ1bmMpIHtcbiAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgbGV0IG1hdGNoZXMgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICAgIHN0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgICAgICBtYXRjaGVzID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaC5jYWxsKHN0cmluZywgL1xcKFtcXHNcXFNdKj9cXCkvKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRnVuYyBpcyBwcm9iYWJseSBhIFByb3h5LCB3aGljaCBjYW4gYnJlYWsgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKClcbiAgICB9XG4gICAgLy8gVHJpbSBhbnkgZXhjZXNzIHdoaXRlc3BhY2UgZnJvbSB0aGUgYXJndW1lbnQgc3RyaW5nXG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG4gICAgY29uc3QgYXJncyA9IHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBgKCR7bWF0Y2guc3Vic3RyaW5nKDEsIG1hdGNoLmxlbmd0aCAtIDIpLnNwbGl0KCcsJykubWFwKGEgPT4gYS50cmltKCkpLmpvaW4oJywgJyl9KWBcbiAgICAgICAgOiAnKD8pJztcbiAgICBjb25zdCBuYW1lID0gdHlwZW9mIGZ1bmMubmFtZSA9PT0gJ3N0cmluZycgPyBmdW5jLm5hbWUgOiAnJztcbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuPmY8L3NwYW4+ICR7ZXNjYXBlKG5hbWUpfSR7YXJnc31gLFxuICAgICAgICAgICAgX3Jldml2ZUlkOiByZXZpdmVDYWNoZS5jYWNoZShmdW5jKSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRDdXN0b21GdW5jdGlvbkRldGFpbHMgPSBnZXRDdXN0b21GdW5jdGlvbkRldGFpbHM7XG5mdW5jdGlvbiBnZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHModmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuIGNsYXNzPVwib3BhY2l0eS0zMFwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9XCJ0ZXh0LWJsdWUtNTAwXCI+JHt2YWx1ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PC9zcGFuPjxzcGFuIGNsYXNzPVwib3BhY2l0eS0zMFwiPiZndDs8L3NwYW4+YCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmFtZWROb2RlTWFwVG9PYmplY3QodmFsdWUuYXR0cmlidXRlcyksXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ0xvZyBlbGVtZW50IHRvIGNvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYDxzcGFuIGNsYXNzPVwidGV4dC1ibHVlLTUwMFwiPiR7U3RyaW5nKHZhbHVlKX08L3NwYW4+YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHMgPSBnZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHM7XG5mdW5jdGlvbiBuYW1lZE5vZGVNYXBUb09iamVjdChtYXApIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBsID0gbWFwLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gbWFwLml0ZW0oaSk7XG4gICAgICAgIHJlc3VsdFtub2RlLm5hbWVdID0gbm9kZS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldEN1c3RvbVJlZkRldGFpbHMoaW5zdGFuY2UsIGtleSwgcmVmKSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZikpIHtcbiAgICAgICAgdmFsdWUgPSByZWYubWFwKChyKSA9PiBnZXRDdXN0b21SZWZEZXRhaWxzKGluc3RhbmNlLCBrZXksIHIpKS5tYXAoZGF0YSA9PiBkYXRhLnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBuYW1lO1xuICAgICAgICBpZiAocmVmLl9pc1Z1ZSkge1xuICAgICAgICAgICAgbmFtZSA9IGdldENvbXBvbmVudE5hbWUocmVmLiRvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUgPSByZWYudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGAmbHQ7JHtuYW1lfWAgK1xuICAgICAgICAgICAgICAgICAgICAocmVmLmlkID8gYCA8c3BhbiBjbGFzcz1cImF0dHItdGl0bGVcIj5pZDwvc3Bhbj49XCIke3JlZi5pZH1cImAgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVmLmNsYXNzTmFtZSA/IGAgPHNwYW4gY2xhc3M9XCJhdHRyLXRpdGxlXCI+Y2xhc3M8L3NwYW4+PVwiJHtyZWYuY2xhc3NOYW1lfVwiYCA6ICcnKSArICcmZ3Q7JyxcbiAgICAgICAgICAgICAgICB1aWQ6IGluc3RhbmNlLl9fVlVFX0RFVlRPT0xTX1VJRF9fLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdyZWZlcmVuY2UnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJyRyZWZzJyxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tUmVmRGV0YWlscyA9IGdldEN1c3RvbVJlZkRldGFpbHM7XG5mdW5jdGlvbiBwYXJzZShkYXRhLCByZXZpdmUgPSBmYWxzZSkge1xuICAgIHJldHVybiByZXZpdmVcbiAgICAgICAgPyAoMCwgdHJhbnNmZXJfMS5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSwgcmV2aXZlcilcbiAgICAgICAgOiAoMCwgdHJhbnNmZXJfMS5wYXJzZUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSk7XG59XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5jb25zdCBzcGVjaWFsVHlwZVJFID0gL15cXFtuYXRpdmUgKFxcdyspICguKj8pKDw+KCgufFxccykqKSk/XFxdJC87XG5jb25zdCBzeW1ib2xSRSA9IC9eXFxbbmF0aXZlIFN5bWJvbCBTeW1ib2xcXCgoLiopXFwpXFxdJC87XG5mdW5jdGlvbiByZXZpdmVyKGtleSwgdmFsKSB7XG4gICAgcmV0dXJuIHJldml2ZSh2YWwpO1xufVxuZnVuY3Rpb24gcmV2aXZlKHZhbCkge1xuICAgIGlmICh2YWwgPT09IGV4cG9ydHMuVU5ERUZJTkVEKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgPT09IGV4cG9ydHMuTkFOKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCAmJiB2YWwuX2N1c3RvbSkge1xuICAgICAgICBjb25zdCB7IF9jdXN0b206IGN1c3RvbSB9ID0gdmFsO1xuICAgICAgICBpZiAoY3VzdG9tLnR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGJhY2tlbmRfMS5nZXRJbnN0YW5jZU1hcCkoKS5nZXQoY3VzdG9tLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20udHlwZSA9PT0gJ21hcCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVNYXAodmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20udHlwZSA9PT0gJ3NldCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVTZXQodmFsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXN0b20uX3Jldml2ZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV2aXZlQ2FjaGUucmVhZChjdXN0b20uX3Jldml2ZUlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmUoY3VzdG9tLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChzeW1ib2xSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgY29uc3QgWywgc3RyaW5nXSA9IHN5bWJvbFJFLmV4ZWModmFsKTtcbiAgICAgICAgcmV0dXJuIFN5bWJvbC5mb3Ioc3RyaW5nKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3BlY2lhbFR5cGVSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgY29uc3QgWywgdHlwZSwgc3RyaW5nLCAsIGRldGFpbHNdID0gc3BlY2lhbFR5cGVSRS5leGVjKHZhbCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyB3aW5kb3dbdHlwZV0oc3RyaW5nKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdFcnJvcicgJiYgZGV0YWlscykge1xuICAgICAgICAgICAgcmVzdWx0LnN0YWNrID0gZGV0YWlscztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG59XG5leHBvcnRzLnJldml2ZSA9IHJldml2ZTtcbi8qKlxuICogU2FuaXRpemUgZGF0YSB0byBiZSBwb3N0ZWQgdG8gdGhlIG90aGVyIHNpZGUuXG4gKiBTaW5jZSB0aGUgbWVzc2FnZSBwb3N0ZWQgaXMgc2VudCB3aXRoIHN0cnVjdHVyZWQgY2xvbmUsXG4gKiB3ZSBuZWVkIHRvIGZpbHRlciBvdXQgYW55IHR5cGVzIHRoYXQgbWlnaHQgY2F1c2UgYW4gZXJyb3IuXG4gKlxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZShkYXRhKSB7XG4gICAgaWYgKCFpc1ByaW1pdGl2ZShkYXRhKSAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShkYXRhKSAmJlxuICAgICAgICAhaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgICAgICAvLyBoYW5kbGUgdHlwZXMgdGhhdCB3aWxsIHByb2JhYmx5IGNhdXNlIGlzc3VlcyBpblxuICAgICAgICAvLyB0aGUgc3RydWN0dXJlZCBjbG9uZVxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGRhdGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGE7XG4gICAgcmV0dXJuICh0eXBlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICB0eXBlID09PSAnYm9vbGVhbicpO1xufVxuLyoqXG4gKiBTZWFyY2hlcyBhIGtleSBvciB2YWx1ZSBpbiB0aGUgb2JqZWN0LCB3aXRoIGEgbWF4aW11bSBkZWVwbmVzc1xuICogQHBhcmFtIHsqfSBvYmogU2VhcmNoIHRhcmdldFxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm0gU2VhcmNoIHN0cmluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBzZWFyY2hEZWVwSW5PYmplY3Qob2JqLCBzZWFyY2hUZXJtKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCByZXN1bHQgPSBpbnRlcm5hbFNlYXJjaE9iamVjdChvYmosIHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSwgc2VlbiwgMCk7XG4gICAgc2Vlbi5jbGVhcigpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnNlYXJjaERlZXBJbk9iamVjdCA9IHNlYXJjaERlZXBJbk9iamVjdDtcbmNvbnN0IFNFQVJDSF9NQVhfREVQVEggPSAxMDtcbi8qKlxuICogRXhlY3V0ZXMgYSBzZWFyY2ggb24gZWFjaCBmaWVsZCBvZiB0aGUgcHJvdmlkZWQgb2JqZWN0XG4gKiBAcGFyYW0geyp9IG9iaiBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hPYmplY3Qob2JqLCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCkge1xuICAgIGlmIChkZXB0aCA+IFNFQVJDSF9NQVhfREVQVEgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgbWF0Y2ggPSBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIGtleSwgdmFsdWUsIHNlZW4sIGRlcHRoICsgMSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xufVxuLyoqXG4gKiBFeGVjdXRlcyBhIHNlYXJjaCBvbiBlYWNoIHZhbHVlIG9mIHRoZSBwcm92aWRlZCBhcnJheVxuICogQHBhcmFtIHsqfSBhcnJheSBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hBcnJheShhcnJheSwgc2VhcmNoVGVybSwgc2VlbiwgZGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBTRUFSQ0hfTUFYX0RFUFRIKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG1hdGNoID0gZmFsc2U7XG4gICAgbGV0IHZhbHVlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBhcnJheVtpXTtcbiAgICAgICAgbWF0Y2ggPSBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIG51bGwsIHZhbHVlLCBzZWVuLCBkZXB0aCArIDEpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRjaDtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBmaWVsZCBtYXRjaGVzIHRoZSBzZWFyY2ggdGVybXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgRmllbGQga2V5IChudWxsIGlmIGZyb20gYXJyYXkpXG4gKiBAcGFyYW0geyp9IHZhbHVlIEZpZWxkIHZhbHVlXG4gKiBAcGFyYW0ge01hcDxhbnksYm9vbGVhbj59IHNlZW4gTWFwIGNvbnRhaW5pbmcgdGhlIHNlYXJjaCByZXN1bHQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBieSB3YWxraW5nIG9uIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIERlZXAgc2VhcmNoIGRlcHRoIGxldmVsLCB3aGljaCBpcyBjYXBwZWQgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gaW50ZXJuYWxTZWFyY2hDaGVjayhzZWFyY2hUZXJtLCBrZXksIHZhbHVlLCBzZWVuLCBkZXB0aCkge1xuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKGtleSA9PT0gJ19jdXN0b20nKSB7XG4gICAgICAgIGtleSA9IHZhbHVlLmRpc3BsYXk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgfVxuICAgIChyZXN1bHQgPSBzcGVjaWFsVG9rZW5Ub1N0cmluZyh2YWx1ZSkpICYmICh2YWx1ZSA9IHJlc3VsdCk7XG4gICAgaWYgKGtleSAmJiBjb21wYXJlKGtleSwgc2VhcmNoVGVybSkpIHtcbiAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICBtYXRjaCA9IHNlZW4uZ2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG51bGwpO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoQXJyYXkodmFsdWUsIHNlYXJjaFRlcm0sIHNlZW4sIGRlcHRoKTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG1hdGNoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG51bGwpO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoT2JqZWN0KHZhbHVlLCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCk7XG4gICAgICAgIHNlZW4uc2V0KHZhbHVlLCBtYXRjaCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbXBhcmUodmFsdWUsIHNlYXJjaFRlcm0pKSB7XG4gICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59XG4vKipcbiAqIENvbXBhcmVzIHR3byB2YWx1ZXNcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgTWl4ZWQgdHlwZSB2YWx1ZSB0aGF0IHdpbGwgYmUgY2FzdCB0byBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBTZWFyY2ggbWF0Y2hcbiAqL1xuZnVuY3Rpb24gY29tcGFyZSh2YWx1ZSwgc2VhcmNoVGVybSkge1xuICAgIHJldHVybiAoJycgKyB2YWx1ZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRlcm0pICE9PSAtMTtcbn1cbmZ1bmN0aW9uIHNvcnRCeUtleShzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZSAmJiBzdGF0ZS5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEua2V5IDwgYi5rZXkpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhLmtleSA+IGIua2V5KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zb3J0QnlLZXkgPSBzb3J0QnlLZXk7XG5mdW5jdGlvbiBzaW1wbGVHZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy4nKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFtzZWN0aW9uc1tpXV07XG4gICAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5leHBvcnRzLnNpbXBsZUdldCA9IHNpbXBsZUdldDtcbmZ1bmN0aW9uIGZvY3VzSW5wdXQoZWwpIHtcbiAgICBlbC5mb2N1cygpO1xuICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKDAsIGVsLnZhbHVlLmxlbmd0aCk7XG59XG5leHBvcnRzLmZvY3VzSW5wdXQgPSBmb2N1c0lucHV0O1xuZnVuY3Rpb24gb3BlbkluRWRpdG9yKGZpbGUpIHtcbiAgICAvLyBDb25zb2xlIGRpc3BsYXlcbiAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKTtcbiAgICBjb25zdCBzcmMgPSBgZmV0Y2goJyR7c2hhcmVkX2RhdGFfMS5TaGFyZWREYXRhLm9wZW5JbkVkaXRvckhvc3R9X19vcGVuLWluLWVkaXRvcj9maWxlPSR7ZW5jb2RlVVJJKGZpbGUpfScpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5sb2coJ0ZpbGUgJHtmaWxlTmFtZX0gb3BlbmVkIGluIGVkaXRvcicpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1zZyA9ICdPcGVuaW5nIGNvbXBvbmVudCAke2ZpbGVOYW1lfSBmYWlsZWQnXG4gICAgICBjb25zdCB0YXJnZXQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDoge31cbiAgICAgIGlmICh0YXJnZXQuX19WVUVfREVWVE9PTFNfVE9BU1RfXykge1xuICAgICAgICB0YXJnZXQuX19WVUVfREVWVE9PTFNfVE9BU1RfXyhtc2csICdlcnJvcicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnJWMnICsgbXNnLCAnY29sb3I6cmVkJylcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdDaGVjayB0aGUgc2V0dXAgb2YgeW91ciBwcm9qZWN0LCBzZWUgaHR0cHM6Ly9kZXZ0b29scy52dWVqcy5vcmcvZ3VpZGUvb3Blbi1pbi1lZGl0b3IuaHRtbCcpXG4gICAgfVxuICB9KWA7XG4gICAgaWYgKGVudl8xLmlzQ2hyb21lKSB7XG4gICAgICAgIGVudl8xLnRhcmdldC5jaHJvbWUuZGV2dG9vbHMuaW5zcGVjdGVkV2luZG93LmV2YWwoc3JjKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1ldmFsXG4gICAgICAgIGV2YWwoc3JjKTtcbiAgICB9XG59XG5leHBvcnRzLm9wZW5JbkVkaXRvciA9IG9wZW5JbkVkaXRvcjtcbmNvbnN0IEVTQyA9IHtcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICAnJic6ICcmYW1wOycsXG59O1xuZnVuY3Rpb24gZXNjYXBlKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC9bPD5cIiZdL2csIGVzY2FwZUNoYXIpO1xufVxuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XG5mdW5jdGlvbiBlc2NhcGVDaGFyKGEpIHtcbiAgICByZXR1cm4gRVNDW2FdIHx8IGE7XG59XG5mdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQoc3RhdGUpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGR1bW15VGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGR1bW15VGV4dEFyZWEudGV4dENvbnRlbnQgPSBzdHJpbmdpZnkoc3RhdGUpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHVtbXlUZXh0QXJlYSk7XG4gICAgZHVtbXlUZXh0QXJlYS5zZWxlY3QoKTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZHVtbXlUZXh0QXJlYSk7XG59XG5leHBvcnRzLmNvcHlUb0NsaXBib2FyZCA9IGNvcHlUb0NsaXBib2FyZDtcbmZ1bmN0aW9uIGlzRW1wdHlPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gZXhwb3J0cy5VTkRFRklORUQgfHwgIW9iaiB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydHMuaXNFbXB0eU9iamVjdCA9IGlzRW1wdHlPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///76203\n");
|
|
506
|
+
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.isEmptyObject = exports.copyToClipboard = exports.escape = exports.openInEditor = exports.focusInput = exports.simpleGet = exports.sortByKey = exports.searchDeepInObject = exports.isPlainObject = exports.revive = exports.parse = exports.getCustomRefDetails = exports.getCustomHTMLElementDetails = exports.getCustomFunctionDetails = exports.getCustomComponentDefinitionDetails = exports.getComponentName = exports.reviveSet = exports.getCustomSetDetails = exports.reviveMap = exports.getCustomMapDetails = exports.stringify = exports.specialTokenToString = exports.MAX_ARRAY_SIZE = exports.MAX_STRING_SIZE = exports.SPECIAL_TOKENS = exports.NAN = exports.NEGATIVE_INFINITY = exports.INFINITY = exports.UNDEFINED = exports.inDoc = exports.getComponentDisplayName = exports.kebabize = exports.camelize = exports.classify = void 0;\n\nconst path_1 = __importDefault(__webpack_require__(21023));\n\nconst transfer_1 = __webpack_require__(34723);\n\nconst backend_1 = __webpack_require__(79310);\n\nconst shared_data_1 = __webpack_require__(29556);\n\nconst env_1 = __webpack_require__(66210);\n\nfunction cached(fn) {\n const cache = Object.create(null);\n return function cachedFn(str) {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n\nconst classifyRE = /(?:^|[-_/])(\\w)/g;\nexports.classify = cached(str => {\n // fix: str.replace may causes '\"replace\" is not a function' exception.\n // This bug may causes the UI 'Component Filter' to not work properly\n // e.g. The type of 'str' is Number.\n // So need cover 'str' to String.\n return str && ('' + str).replace(classifyRE, toUpper);\n});\nconst camelizeRE = /-(\\w)/g;\nexports.camelize = cached(str => {\n return str && str.replace(camelizeRE, toUpper);\n});\nconst kebabizeRE = /([a-z0-9])([A-Z])/g;\nexports.kebabize = cached(str => {\n return str && str.replace(kebabizeRE, (_, lowerCaseCharacter, upperCaseLetter) => {\n return `${lowerCaseCharacter}-${upperCaseLetter}`;\n }).toLowerCase();\n});\n\nfunction toUpper(_, c) {\n return c ? c.toUpperCase() : '';\n}\n\nfunction getComponentDisplayName(originalName, style = 'class') {\n switch (style) {\n case 'class':\n return (0, exports.classify)(originalName);\n\n case 'kebab':\n return (0, exports.kebabize)(originalName);\n\n case 'original':\n default:\n return originalName;\n }\n}\n\nexports.getComponentDisplayName = getComponentDisplayName;\n\nfunction inDoc(node) {\n if (!node) return false;\n const doc = node.ownerDocument.documentElement;\n const parent = node.parentNode;\n return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent));\n}\n\nexports.inDoc = inDoc;\n/**\n * Stringify/parse data using CircularJSON.\n */\n\nexports.UNDEFINED = '__vue_devtool_undefined__';\nexports.INFINITY = '__vue_devtool_infinity__';\nexports.NEGATIVE_INFINITY = '__vue_devtool_negative_infinity__';\nexports.NAN = '__vue_devtool_nan__';\nexports.SPECIAL_TOKENS = {\n true: true,\n false: false,\n undefined: exports.UNDEFINED,\n null: null,\n '-Infinity': exports.NEGATIVE_INFINITY,\n Infinity: exports.INFINITY,\n NaN: exports.NAN\n};\nexports.MAX_STRING_SIZE = 10000;\nexports.MAX_ARRAY_SIZE = 5000;\n\nfunction specialTokenToString(value) {\n if (value === null) {\n return 'null';\n } else if (value === exports.UNDEFINED) {\n return 'undefined';\n } else if (value === exports.NAN) {\n return 'NaN';\n } else if (value === exports.INFINITY) {\n return 'Infinity';\n } else if (value === exports.NEGATIVE_INFINITY) {\n return '-Infinity';\n }\n\n return false;\n}\n\nexports.specialTokenToString = specialTokenToString;\n/**\n * Needed to prevent stack overflow\n * while replacing complex objects\n * like components because we create\n * new objects with the CustomValue API\n * (.i.e `{ _custom: { ... } }`)\n */\n\nclass EncodeCache {\n constructor() {\n this.map = new Map();\n }\n /**\n * Returns a result unique to each input data\n * @param {*} data Input data\n * @param {*} factory Function used to create the unique result\n */\n\n\n cache(data, factory) {\n const cached = this.map.get(data);\n\n if (cached) {\n return cached;\n } else {\n const result = factory(data);\n this.map.set(data, result);\n return result;\n }\n }\n\n clear() {\n this.map.clear();\n }\n\n}\n\nconst encodeCache = new EncodeCache();\n\nclass ReviveCache {\n constructor(maxSize) {\n this.maxSize = maxSize;\n this.map = new Map();\n this.index = 0;\n this.size = 0;\n }\n\n cache(value) {\n const currentIndex = this.index;\n this.map.set(currentIndex, value);\n this.size++;\n\n if (this.size > this.maxSize) {\n this.map.delete(currentIndex - this.size);\n this.size--;\n }\n\n this.index++;\n return currentIndex;\n }\n\n read(id) {\n return this.map.get(id);\n }\n\n}\n\nconst reviveCache = new ReviveCache(1000);\n\nfunction stringify(data) {\n // Create a fresh cache for each serialization\n encodeCache.clear();\n return (0, transfer_1.stringifyCircularAutoChunks)(data, replacer);\n}\n\nexports.stringify = stringify;\n\nfunction replacer(key) {\n // @ts-ignore\n const val = this[key];\n const type = typeof val;\n\n if (Array.isArray(val)) {\n const l = val.length;\n\n if (l > exports.MAX_ARRAY_SIZE) {\n return {\n _isArray: true,\n length: l,\n items: val.slice(0, exports.MAX_ARRAY_SIZE)\n };\n }\n\n return val;\n } else if (typeof val === 'string') {\n if (val.length > exports.MAX_STRING_SIZE) {\n return val.substring(0, exports.MAX_STRING_SIZE) + `... (${val.length} total length)`;\n } else {\n return val;\n }\n } else if (type === 'undefined') {\n return exports.UNDEFINED;\n } else if (val === Infinity) {\n return exports.INFINITY;\n } else if (val === -Infinity) {\n return exports.NEGATIVE_INFINITY;\n } else if (type === 'function') {\n return getCustomFunctionDetails(val);\n } else if (type === 'symbol') {\n return `[native Symbol ${Symbol.prototype.toString.call(val)}]`;\n } else if (val !== null && type === 'object') {\n const proto = Object.prototype.toString.call(val);\n\n if (proto === '[object Map]') {\n return encodeCache.cache(val, () => getCustomMapDetails(val));\n } else if (proto === '[object Set]') {\n return encodeCache.cache(val, () => getCustomSetDetails(val));\n } else if (proto === '[object RegExp]') {\n // special handling of native type\n return `[native RegExp ${RegExp.prototype.toString.call(val)}]`;\n } else if (proto === '[object Date]') {\n return `[native Date ${Date.prototype.toString.call(val)}]`;\n } else if (proto === '[object Error]') {\n return `[native Error ${val.message}<>${val.stack}]`;\n } else if (val.state && val._vm) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomStoreDetails)(val));\n } else if (val.constructor && val.constructor.name === 'VueRouter') {\n return encodeCache.cache(val, () => (0, backend_1.getCustomRouterDetails)(val));\n } else if ((0, backend_1.isVueInstance)(val)) {\n return encodeCache.cache(val, () => (0, backend_1.getCustomInstanceDetails)(val));\n } else if (typeof val.render === 'function') {\n return encodeCache.cache(val, () => getCustomComponentDefinitionDetails(val));\n } else if (val.constructor && val.constructor.name === 'VNode') {\n return `[native VNode <${val.tag}>]`;\n } else if (val instanceof HTMLElement) {\n return encodeCache.cache(val, () => getCustomHTMLElementDetails(val));\n }\n\n const customDetails = (0, backend_1.getCustomObjectDetails)(val, proto);\n if (customDetails != null) return customDetails;\n } else if (Number.isNaN(val)) {\n return exports.NAN;\n }\n\n return sanitize(val);\n}\n\nfunction getCustomMapDetails(val) {\n const list = [];\n val.forEach((value, key) => list.push({\n key,\n value\n }));\n return {\n _custom: {\n type: 'map',\n display: 'Map',\n value: list,\n readOnly: true,\n fields: {\n abstract: true\n }\n }\n };\n}\n\nexports.getCustomMapDetails = getCustomMapDetails;\n\nfunction reviveMap(val) {\n const result = new Map();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const {\n key,\n value\n } = list[i];\n result.set(key, revive(value));\n }\n\n return result;\n}\n\nexports.reviveMap = reviveMap;\n\nfunction getCustomSetDetails(val) {\n const list = Array.from(val);\n return {\n _custom: {\n type: 'set',\n display: `Set[${list.length}]`,\n value: list,\n readOnly: true\n }\n };\n}\n\nexports.getCustomSetDetails = getCustomSetDetails;\n\nfunction reviveSet(val) {\n const result = new Set();\n const list = val._custom.value;\n\n for (let i = 0; i < list.length; i++) {\n const value = list[i];\n result.add(revive(value));\n }\n\n return result;\n}\n\nexports.reviveSet = reviveSet; // Use a custom basename functions instead of the shimed version\n// because it doesn't work on Windows\n\nfunction basename(filename, ext) {\n return path_1.default.basename(filename.replace(/^[a-zA-Z]:/, '').replace(/\\\\/g, '/'), ext);\n}\n\nfunction getComponentName(options) {\n const name = options.displayName || options.name || options._componentTag;\n\n if (name) {\n return name;\n }\n\n const file = options.__file; // injected by vue-loader\n\n if (file) {\n return (0, exports.classify)(basename(file, '.vue'));\n }\n}\n\nexports.getComponentName = getComponentName;\n\nfunction getCustomComponentDefinitionDetails(def) {\n let display = getComponentName(def);\n\n if (display) {\n if (def.name && def.__file) {\n display += ` <span>(${def.__file})</span>`;\n }\n } else {\n display = '<i>Unknown Component</i>';\n }\n\n return {\n _custom: {\n type: 'component-definition',\n display,\n tooltip: 'Component definition',\n ...(def.__file ? {\n file: def.__file\n } : {})\n }\n };\n}\n\nexports.getCustomComponentDefinitionDetails = getCustomComponentDefinitionDetails; // eslint-disable-next-line @typescript-eslint/ban-types\n\nfunction getCustomFunctionDetails(func) {\n let string = '';\n let matches = null;\n\n try {\n string = Function.prototype.toString.call(func);\n matches = String.prototype.match.call(string, /\\([\\s\\S]*?\\)/);\n } catch (e) {// Func is probably a Proxy, which can break Function.prototype.toString()\n } // Trim any excess whitespace from the argument string\n\n\n const match = matches && matches[0];\n const args = typeof match === 'string' ? `(${match.substring(1, match.length - 2).split(',').map(a => a.trim()).join(', ')})` : '(?)';\n const name = typeof func.name === 'string' ? func.name : '';\n return {\n _custom: {\n type: 'function',\n display: `<span>f</span> ${escape(name)}${args}`,\n _reviveId: reviveCache.cache(func)\n }\n };\n}\n\nexports.getCustomFunctionDetails = getCustomFunctionDetails;\n\nfunction getCustomHTMLElementDetails(value) {\n try {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"opacity-30\"><</span><span class=\"text-blue-500\">${value.tagName.toLowerCase()}</span><span class=\"opacity-30\">></span>`,\n value: namedNodeMapToObject(value.attributes),\n actions: [{\n icon: 'input',\n tooltip: 'Log element to console',\n action: () => {\n // eslint-disable-next-line no-console\n console.log(value);\n }\n }]\n }\n };\n } catch (e) {\n return {\n _custom: {\n type: 'HTMLElement',\n display: `<span class=\"text-blue-500\">${String(value)}</span>`\n }\n };\n }\n}\n\nexports.getCustomHTMLElementDetails = getCustomHTMLElementDetails;\n\nfunction namedNodeMapToObject(map) {\n const result = {};\n const l = map.length;\n\n for (let i = 0; i < l; i++) {\n const node = map.item(i);\n result[node.name] = node.value;\n }\n\n return result;\n}\n\nfunction getCustomRefDetails(instance, key, ref) {\n let value;\n\n if (Array.isArray(ref)) {\n value = ref.map(r => getCustomRefDetails(instance, key, r)).map(data => data.value);\n } else {\n let name;\n\n if (ref._isVue) {\n name = getComponentName(ref.$options);\n } else {\n name = ref.tagName.toLowerCase();\n }\n\n value = {\n _custom: {\n display: `<${name}` + (ref.id ? ` <span class=\"attr-title\">id</span>=\"${ref.id}\"` : '') + (ref.className ? ` <span class=\"attr-title\">class</span>=\"${ref.className}\"` : '') + '>',\n uid: instance.__VUE_DEVTOOLS_UID__,\n type: 'reference'\n }\n };\n }\n\n return {\n type: '$refs',\n key: key,\n value,\n editable: false\n };\n}\n\nexports.getCustomRefDetails = getCustomRefDetails;\n\nfunction parse(data, revive = false) {\n return revive ? (0, transfer_1.parseCircularAutoChunks)(data, reviver) : (0, transfer_1.parseCircularAutoChunks)(data);\n}\n\nexports.parse = parse;\nconst specialTypeRE = /^\\[native (\\w+) (.*?)(<>((.|\\s)*))?\\]$/;\nconst symbolRE = /^\\[native Symbol Symbol\\((.*)\\)\\]$/;\n\nfunction reviver(key, val) {\n return revive(val);\n}\n\nfunction revive(val) {\n if (val === exports.UNDEFINED) {\n return undefined;\n } else if (val === exports.INFINITY) {\n return Infinity;\n } else if (val === exports.NEGATIVE_INFINITY) {\n return -Infinity;\n } else if (val === exports.NAN) {\n return NaN;\n } else if (val && val._custom) {\n const {\n _custom: custom\n } = val;\n\n if (custom.type === 'component') {\n return (0, backend_1.getInstanceMap)().get(custom.id);\n } else if (custom.type === 'map') {\n return reviveMap(val);\n } else if (custom.type === 'set') {\n return reviveSet(val);\n } else if (custom._reviveId) {\n return reviveCache.read(custom._reviveId);\n } else {\n return revive(custom.value);\n }\n } else if (symbolRE.test(val)) {\n const [, string] = symbolRE.exec(val);\n return Symbol.for(string);\n } else if (specialTypeRE.test(val)) {\n const [, type, string,, details] = specialTypeRE.exec(val);\n const result = new window[type](string);\n\n if (type === 'Error' && details) {\n result.stack = details;\n }\n\n return result;\n } else {\n return val;\n }\n}\n\nexports.revive = revive;\n/**\n * Sanitize data to be posted to the other side.\n * Since the message posted is sent with structured clone,\n * we need to filter out any types that might cause an error.\n *\n * @param {*} data\n * @return {*}\n */\n\nfunction sanitize(data) {\n if (!isPrimitive(data) && !Array.isArray(data) && !isPlainObject(data)) {\n // handle types that will probably cause issues in\n // the structured clone\n return Object.prototype.toString.call(data);\n } else {\n return data;\n }\n}\n\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexports.isPlainObject = isPlainObject;\n\nfunction isPrimitive(data) {\n if (data == null) {\n return true;\n }\n\n const type = typeof data;\n return type === 'string' || type === 'number' || type === 'boolean';\n}\n/**\n * Searches a key or value in the object, with a maximum deepness\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction searchDeepInObject(obj, searchTerm) {\n const seen = new Map();\n const result = internalSearchObject(obj, searchTerm.toLowerCase(), seen, 0);\n seen.clear();\n return result;\n}\n\nexports.searchDeepInObject = searchDeepInObject;\nconst SEARCH_MAX_DEPTH = 10;\n/**\n * Executes a search on each field of the provided object\n * @param {*} obj Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\nfunction internalSearchObject(obj, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n const keys = Object.keys(obj);\n let key, value;\n\n for (let i = 0; i < keys.length; i++) {\n key = keys[i];\n value = obj[key];\n match = internalSearchCheck(searchTerm, key, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Executes a search on each value of the provided array\n * @param {*} array Search target\n * @param {string} searchTerm Search string\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchArray(array, searchTerm, seen, depth) {\n if (depth > SEARCH_MAX_DEPTH) {\n return false;\n }\n\n let match = false;\n let value;\n\n for (let i = 0; i < array.length; i++) {\n value = array[i];\n match = internalSearchCheck(searchTerm, null, value, seen, depth + 1);\n\n if (match) {\n break;\n }\n }\n\n return match;\n}\n/**\n * Checks if the provided field matches the search terms\n * @param {string} searchTerm Search string\n * @param {string} key Field key (null if from array)\n * @param {*} value Field value\n * @param {Map<any,boolean>} seen Map containing the search result to prevent stack overflow by walking on the same object multiple times\n * @param {number} depth Deep search depth level, which is capped to prevent performance issues\n * @returns {boolean} Search match\n */\n\n\nfunction internalSearchCheck(searchTerm, key, value, seen, depth) {\n let match = false;\n let result;\n\n if (key === '_custom') {\n key = value.display;\n value = value.value;\n }\n\n (result = specialTokenToString(value)) && (value = result);\n\n if (key && compare(key, searchTerm)) {\n match = true;\n seen.set(value, true);\n } else if (seen.has(value)) {\n match = seen.get(value);\n } else if (Array.isArray(value)) {\n seen.set(value, null);\n match = internalSearchArray(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (isPlainObject(value)) {\n seen.set(value, null);\n match = internalSearchObject(value, searchTerm, seen, depth);\n seen.set(value, match);\n } else if (compare(value, searchTerm)) {\n match = true;\n seen.set(value, true);\n }\n\n return match;\n}\n/**\n * Compares two values\n * @param {*} value Mixed type value that will be cast to string\n * @param {string} searchTerm Search string\n * @returns {boolean} Search match\n */\n\n\nfunction compare(value, searchTerm) {\n return ('' + value).toLowerCase().indexOf(searchTerm) !== -1;\n}\n\nfunction sortByKey(state) {\n return state && state.slice().sort((a, b) => {\n if (a.key < b.key) return -1;\n if (a.key > b.key) return 1;\n return 0;\n });\n}\n\nexports.sortByKey = sortByKey;\n\nfunction simpleGet(object, path) {\n const sections = Array.isArray(path) ? path : path.split('.');\n\n for (let i = 0; i < sections.length; i++) {\n object = object[sections[i]];\n\n if (!object) {\n return undefined;\n }\n }\n\n return object;\n}\n\nexports.simpleGet = simpleGet;\n\nfunction focusInput(el) {\n el.focus();\n el.setSelectionRange(0, el.value.length);\n}\n\nexports.focusInput = focusInput;\n\nfunction openInEditor(file) {\n // Console display\n const fileName = file.replace(/\\\\/g, '\\\\\\\\');\n const src = `fetch('${shared_data_1.SharedData.openInEditorHost}__open-in-editor?file=${encodeURI(file)}').then(response => {\n if (response.ok) {\n console.log('File ${fileName} opened in editor')\n } else {\n const msg = 'Opening component ${fileName} failed'\n const target = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}\n if (target.__VUE_DEVTOOLS_TOAST__) {\n target.__VUE_DEVTOOLS_TOAST__(msg, 'error')\n } else {\n console.log('%c' + msg, 'color:red')\n }\n console.log('Check the setup of your project, see https://devtools.vuejs.org/guide/open-in-editor.html')\n }\n })`;\n\n if (env_1.isChrome) {\n env_1.target.chrome.devtools.inspectedWindow.eval(src);\n } else {\n // eslint-disable-next-line no-eval\n eval(src);\n }\n}\n\nexports.openInEditor = openInEditor;\nconst ESC = {\n '<': '<',\n '>': '>',\n '\"': '"',\n '&': '&'\n};\n\nfunction escape(s) {\n return s.replace(/[<>\"&]/g, escapeChar);\n}\n\nexports.escape = escape;\n\nfunction escapeChar(a) {\n return ESC[a] || a;\n}\n\nfunction copyToClipboard(state) {\n if (typeof document === 'undefined') return;\n const dummyTextArea = document.createElement('textarea');\n dummyTextArea.textContent = stringify(state);\n document.body.appendChild(dummyTextArea);\n dummyTextArea.select();\n document.execCommand('copy');\n document.body.removeChild(dummyTextArea);\n}\n\nexports.copyToClipboard = copyToClipboard;\n\nfunction isEmptyObject(obj) {\n return obj === exports.UNDEFINED || !obj || Object.keys(obj).length === 0;\n}\n\nexports.isEmptyObject = isEmptyObject;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bC50cz9hNjQzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gZXhwb3J0cy5jb3B5VG9DbGlwYm9hcmQgPSBleHBvcnRzLmVzY2FwZSA9IGV4cG9ydHMub3BlbkluRWRpdG9yID0gZXhwb3J0cy5mb2N1c0lucHV0ID0gZXhwb3J0cy5zaW1wbGVHZXQgPSBleHBvcnRzLnNvcnRCeUtleSA9IGV4cG9ydHMuc2VhcmNoRGVlcEluT2JqZWN0ID0gZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gZXhwb3J0cy5yZXZpdmUgPSBleHBvcnRzLnBhcnNlID0gZXhwb3J0cy5nZXRDdXN0b21SZWZEZXRhaWxzID0gZXhwb3J0cy5nZXRDdXN0b21IVE1MRWxlbWVudERldGFpbHMgPSBleHBvcnRzLmdldEN1c3RvbUZ1bmN0aW9uRGV0YWlscyA9IGV4cG9ydHMuZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHMgPSBleHBvcnRzLmdldENvbXBvbmVudE5hbWUgPSBleHBvcnRzLnJldml2ZVNldCA9IGV4cG9ydHMuZ2V0Q3VzdG9tU2V0RGV0YWlscyA9IGV4cG9ydHMucmV2aXZlTWFwID0gZXhwb3J0cy5nZXRDdXN0b21NYXBEZXRhaWxzID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnNwZWNpYWxUb2tlblRvU3RyaW5nID0gZXhwb3J0cy5NQVhfQVJSQVlfU0laRSA9IGV4cG9ydHMuTUFYX1NUUklOR19TSVpFID0gZXhwb3J0cy5TUEVDSUFMX1RPS0VOUyA9IGV4cG9ydHMuTkFOID0gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSA9IGV4cG9ydHMuSU5GSU5JVFkgPSBleHBvcnRzLlVOREVGSU5FRCA9IGV4cG9ydHMuaW5Eb2MgPSBleHBvcnRzLmdldENvbXBvbmVudERpc3BsYXlOYW1lID0gZXhwb3J0cy5rZWJhYml6ZSA9IGV4cG9ydHMuY2FtZWxpemUgPSBleHBvcnRzLmNsYXNzaWZ5ID0gdm9pZCAwO1xuY29uc3QgcGF0aF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwYXRoXCIpKTtcbmNvbnN0IHRyYW5zZmVyXzEgPSByZXF1aXJlKFwiLi90cmFuc2ZlclwiKTtcbmNvbnN0IGJhY2tlbmRfMSA9IHJlcXVpcmUoXCIuL2JhY2tlbmRcIik7XG5jb25zdCBzaGFyZWRfZGF0YV8xID0gcmVxdWlyZShcIi4vc2hhcmVkLWRhdGFcIik7XG5jb25zdCBlbnZfMSA9IHJlcXVpcmUoXCIuL2VudlwiKTtcbmZ1bmN0aW9uIGNhY2hlZChmbikge1xuICAgIGNvbnN0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2FjaGVkRm4oc3RyKSB7XG4gICAgICAgIGNvbnN0IGhpdCA9IGNhY2hlW3N0cl07XG4gICAgICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKTtcbiAgICB9O1xufVxuY29uc3QgY2xhc3NpZnlSRSA9IC8oPzpefFstXy9dKShcXHcpL2c7XG5leHBvcnRzLmNsYXNzaWZ5ID0gY2FjaGVkKChzdHIpID0+IHtcbiAgICAvLyBmaXg6IHN0ci5yZXBsYWNlIG1heSBjYXVzZXMgJ1wicmVwbGFjZVwiIGlzIG5vdCBhIGZ1bmN0aW9uJyBleGNlcHRpb24uXG4gICAgLy8gVGhpcyBidWcgbWF5IGNhdXNlcyB0aGUgVUkgJ0NvbXBvbmVudCBGaWx0ZXInIHRvIG5vdCB3b3JrIHByb3Blcmx5XG4gICAgLy8gZS5nLiBUaGUgdHlwZSBvZiAnc3RyJyBpcyBOdW1iZXIuXG4gICAgLy8gU28gbmVlZCBjb3ZlciAnc3RyJyB0byBTdHJpbmcuXG4gICAgcmV0dXJuIHN0ciAmJiAoJycgKyBzdHIpLnJlcGxhY2UoY2xhc3NpZnlSRSwgdG9VcHBlcik7XG59KTtcbmNvbnN0IGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG5leHBvcnRzLmNhbWVsaXplID0gY2FjaGVkKChzdHIpID0+IHtcbiAgICByZXR1cm4gc3RyICYmIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIHRvVXBwZXIpO1xufSk7XG5jb25zdCBrZWJhYml6ZVJFID0gLyhbYS16MC05XSkoW0EtWl0pL2c7XG5leHBvcnRzLmtlYmFiaXplID0gY2FjaGVkKChzdHIpID0+IHtcbiAgICByZXR1cm4gc3RyICYmIHN0clxuICAgICAgICAucmVwbGFjZShrZWJhYml6ZVJFLCAoXywgbG93ZXJDYXNlQ2hhcmFjdGVyLCB1cHBlckNhc2VMZXR0ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGAke2xvd2VyQ2FzZUNoYXJhY3Rlcn0tJHt1cHBlckNhc2VMZXR0ZXJ9YDtcbiAgICB9KVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbn0pO1xuZnVuY3Rpb24gdG9VcHBlcihfLCBjKSB7XG4gICAgcmV0dXJuIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJztcbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudERpc3BsYXlOYW1lKG9yaWdpbmFsTmFtZSwgc3R5bGUgPSAnY2xhc3MnKSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuY2xhc3NpZnkpKG9yaWdpbmFsTmFtZSk7XG4gICAgICAgIGNhc2UgJ2tlYmFiJzpcbiAgICAgICAgICAgIHJldHVybiAoMCwgZXhwb3J0cy5rZWJhYml6ZSkob3JpZ2luYWxOYW1lKTtcbiAgICAgICAgY2FzZSAnb3JpZ2luYWwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZTtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbXBvbmVudERpc3BsYXlOYW1lID0gZ2V0Q29tcG9uZW50RGlzcGxheU5hbWU7XG5mdW5jdGlvbiBpbkRvYyhub2RlKSB7XG4gICAgaWYgKCFub2RlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZG9jID0gbm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgcmV0dXJuIGRvYyA9PT0gbm9kZSB8fFxuICAgICAgICBkb2MgPT09IHBhcmVudCB8fFxuICAgICAgICAhIShwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSAxICYmIChkb2MuY29udGFpbnMocGFyZW50KSkpO1xufVxuZXhwb3J0cy5pbkRvYyA9IGluRG9jO1xuLyoqXG4gKiBTdHJpbmdpZnkvcGFyc2UgZGF0YSB1c2luZyBDaXJjdWxhckpTT04uXG4gKi9cbmV4cG9ydHMuVU5ERUZJTkVEID0gJ19fdnVlX2RldnRvb2xfdW5kZWZpbmVkX18nO1xuZXhwb3J0cy5JTkZJTklUWSA9ICdfX3Z1ZV9kZXZ0b29sX2luZmluaXR5X18nO1xuZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSA9ICdfX3Z1ZV9kZXZ0b29sX25lZ2F0aXZlX2luZmluaXR5X18nO1xuZXhwb3J0cy5OQU4gPSAnX192dWVfZGV2dG9vbF9uYW5fXyc7XG5leHBvcnRzLlNQRUNJQUxfVE9LRU5TID0ge1xuICAgIHRydWU6IHRydWUsXG4gICAgZmFsc2U6IGZhbHNlLFxuICAgIHVuZGVmaW5lZDogZXhwb3J0cy5VTkRFRklORUQsXG4gICAgbnVsbDogbnVsbCxcbiAgICAnLUluZmluaXR5JzogZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSxcbiAgICBJbmZpbml0eTogZXhwb3J0cy5JTkZJTklUWSxcbiAgICBOYU46IGV4cG9ydHMuTkFOLFxufTtcbmV4cG9ydHMuTUFYX1NUUklOR19TSVpFID0gMTAwMDA7XG5leHBvcnRzLk1BWF9BUlJBWV9TSVpFID0gNTAwMDtcbmZ1bmN0aW9uIHNwZWNpYWxUb2tlblRvU3RyaW5nKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlID09PSBleHBvcnRzLlVOREVGSU5FRCkge1xuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlID09PSBleHBvcnRzLk5BTikge1xuICAgICAgICByZXR1cm4gJ05hTic7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlID09PSBleHBvcnRzLklORklOSVRZKSB7XG4gICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gZXhwb3J0cy5ORUdBVElWRV9JTkZJTklUWSkge1xuICAgICAgICByZXR1cm4gJy1JbmZpbml0eSc7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc3BlY2lhbFRva2VuVG9TdHJpbmcgPSBzcGVjaWFsVG9rZW5Ub1N0cmluZztcbi8qKlxuICogTmVlZGVkIHRvIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3dcbiAqIHdoaWxlIHJlcGxhY2luZyBjb21wbGV4IG9iamVjdHNcbiAqIGxpa2UgY29tcG9uZW50cyBiZWNhdXNlIHdlIGNyZWF0ZVxuICogbmV3IG9iamVjdHMgd2l0aCB0aGUgQ3VzdG9tVmFsdWUgQVBJXG4gKiAoLmkuZSBgeyBfY3VzdG9tOiB7IC4uLiB9IH1gKVxuICovXG5jbGFzcyBFbmNvZGVDYWNoZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcmVzdWx0IHVuaXF1ZSB0byBlYWNoIGlucHV0IGRhdGFcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgSW5wdXQgZGF0YVxuICAgICAqIEBwYXJhbSB7Kn0gZmFjdG9yeSBGdW5jdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdW5pcXVlIHJlc3VsdFxuICAgICAqL1xuICAgIGNhY2hlKGRhdGEsIGZhY3RvcnkpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5tYXAuZ2V0KGRhdGEpO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZmFjdG9yeShkYXRhKTtcbiAgICAgICAgICAgIHRoaXMubWFwLnNldChkYXRhLCByZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5tYXAuY2xlYXIoKTtcbiAgICB9XG59XG5jb25zdCBlbmNvZGVDYWNoZSA9IG5ldyBFbmNvZGVDYWNoZSgpO1xuY2xhc3MgUmV2aXZlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKG1heFNpemUpIHtcbiAgICAgICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5tYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cbiAgICBjYWNoZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICB0aGlzLm1hcC5zZXQoY3VycmVudEluZGV4LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2l6ZSsrO1xuICAgICAgICBpZiAodGhpcy5zaXplID4gdGhpcy5tYXhTaXplKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5kZWxldGUoY3VycmVudEluZGV4IC0gdGhpcy5zaXplKTtcbiAgICAgICAgICAgIHRoaXMuc2l6ZS0tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICB9XG4gICAgcmVhZChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KGlkKTtcbiAgICB9XG59XG5jb25zdCByZXZpdmVDYWNoZSA9IG5ldyBSZXZpdmVDYWNoZSgxMDAwKTtcbmZ1bmN0aW9uIHN0cmluZ2lmeShkYXRhKSB7XG4gICAgLy8gQ3JlYXRlIGEgZnJlc2ggY2FjaGUgZm9yIGVhY2ggc2VyaWFsaXphdGlvblxuICAgIGVuY29kZUNhY2hlLmNsZWFyKCk7XG4gICAgcmV0dXJuICgwLCB0cmFuc2Zlcl8xLnN0cmluZ2lmeUNpcmN1bGFyQXV0b0NodW5rcykoZGF0YSwgcmVwbGFjZXIpO1xufVxuZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG5mdW5jdGlvbiByZXBsYWNlcihrZXkpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgdmFsID0gdGhpc1trZXldO1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgY29uc3QgbCA9IHZhbC5sZW5ndGg7XG4gICAgICAgIGlmIChsID4gZXhwb3J0cy5NQVhfQVJSQVlfU0laRSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBfaXNBcnJheTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsZW5ndGg6IGwsXG4gICAgICAgICAgICAgICAgaXRlbXM6IHZhbC5zbGljZSgwLCBleHBvcnRzLk1BWF9BUlJBWV9TSVpFKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHZhbC5sZW5ndGggPiBleHBvcnRzLk1BWF9TVFJJTkdfU0laRSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5zdWJzdHJpbmcoMCwgZXhwb3J0cy5NQVhfU1RSSU5HX1NJWkUpICsgYC4uLiAoJHsodmFsLmxlbmd0aCl9IHRvdGFsIGxlbmd0aClgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5VTkRFRklORUQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuSU5GSU5JVFk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLk5FR0FUSVZFX0lORklOSVRZO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBnZXRDdXN0b21GdW5jdGlvbkRldGFpbHModmFsKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIGBbbmF0aXZlIFN5bWJvbCAke1N5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpfV1gO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWwgIT09IG51bGwgJiYgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgcHJvdG8gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKTtcbiAgICAgICAgaWYgKHByb3RvID09PSAnW29iamVjdCBNYXBdJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gZ2V0Q3VzdG9tTWFwRGV0YWlscyh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm90byA9PT0gJ1tvYmplY3QgU2V0XScpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+IGdldEN1c3RvbVNldERldGFpbHModmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgICAgICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIG9mIG5hdGl2ZSB0eXBlXG4gICAgICAgICAgICByZXR1cm4gYFtuYXRpdmUgUmVnRXhwICR7UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCl9XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgICAgcmV0dXJuIGBbbmF0aXZlIERhdGUgJHtEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCl9XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvdG8gPT09ICdbb2JqZWN0IEVycm9yXScpIHtcbiAgICAgICAgICAgIHJldHVybiBgW25hdGl2ZSBFcnJvciAke3ZhbC5tZXNzYWdlfTw+JHt2YWwuc3RhY2t9XWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsLnN0YXRlICYmIHZhbC5fdm0pIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVDYWNoZS5jYWNoZSh2YWwsICgpID0+ICgwLCBiYWNrZW5kXzEuZ2V0Q3VzdG9tU3RvcmVEZXRhaWxzKSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwuY29uc3RydWN0b3IgJiYgdmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdWdWVSb3V0ZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiAoMCwgYmFja2VuZF8xLmdldEN1c3RvbVJvdXRlckRldGFpbHMpKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgwLCBiYWNrZW5kXzEuaXNWdWVJbnN0YW5jZSkodmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gKDAsIGJhY2tlbmRfMS5nZXRDdXN0b21JbnN0YW5jZURldGFpbHMpKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQ2FjaGUuY2FjaGUodmFsLCAoKSA9PiBnZXRDdXN0b21Db21wb25lbnREZWZpbml0aW9uRGV0YWlscyh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwuY29uc3RydWN0b3IgJiYgdmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdWTm9kZScpIHtcbiAgICAgICAgICAgIHJldHVybiBgW25hdGl2ZSBWTm9kZSA8JHt2YWwudGFnfT5dYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUNhY2hlLmNhY2hlKHZhbCwgKCkgPT4gZ2V0Q3VzdG9tSFRNTEVsZW1lbnREZXRhaWxzKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1c3RvbURldGFpbHMgPSAoMCwgYmFja2VuZF8xLmdldEN1c3RvbU9iamVjdERldGFpbHMpKHZhbCwgcHJvdG8pO1xuICAgICAgICBpZiAoY3VzdG9tRGV0YWlscyAhPSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbURldGFpbHM7XG4gICAgfVxuICAgIGVsc2UgaWYgKE51bWJlci5pc05hTih2YWwpKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLk5BTjtcbiAgICB9XG4gICAgcmV0dXJuIHNhbml0aXplKHZhbCk7XG59XG5mdW5jdGlvbiBnZXRDdXN0b21NYXBEZXRhaWxzKHZhbCkge1xuICAgIGNvbnN0IGxpc3QgPSBbXTtcbiAgICB2YWwuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gbGlzdC5wdXNoKHtcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgdHlwZTogJ21hcCcsXG4gICAgICAgICAgICBkaXNwbGF5OiAnTWFwJyxcbiAgICAgICAgICAgIHZhbHVlOiBsaXN0LFxuICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tTWFwRGV0YWlscyA9IGdldEN1c3RvbU1hcERldGFpbHM7XG5mdW5jdGlvbiByZXZpdmVNYXAodmFsKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGxpc3QgPSB2YWwuX2N1c3RvbS52YWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSBsaXN0W2ldO1xuICAgICAgICByZXN1bHQuc2V0KGtleSwgcmV2aXZlKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnJldml2ZU1hcCA9IHJldml2ZU1hcDtcbmZ1bmN0aW9uIGdldEN1c3RvbVNldERldGFpbHModmFsKSB7XG4gICAgY29uc3QgbGlzdCA9IEFycmF5LmZyb20odmFsKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICB0eXBlOiAnc2V0JyxcbiAgICAgICAgICAgIGRpc3BsYXk6IGBTZXRbJHtsaXN0Lmxlbmd0aH1dYCxcbiAgICAgICAgICAgIHZhbHVlOiBsaXN0LFxuICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tU2V0RGV0YWlscyA9IGdldEN1c3RvbVNldERldGFpbHM7XG5mdW5jdGlvbiByZXZpdmVTZXQodmFsKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IGxpc3QgPSB2YWwuX2N1c3RvbS52YWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBsaXN0W2ldO1xuICAgICAgICByZXN1bHQuYWRkKHJldml2ZSh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5yZXZpdmVTZXQgPSByZXZpdmVTZXQ7XG4vLyBVc2UgYSBjdXN0b20gYmFzZW5hbWUgZnVuY3Rpb25zIGluc3RlYWQgb2YgdGhlIHNoaW1lZCB2ZXJzaW9uXG4vLyBiZWNhdXNlIGl0IGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzXG5mdW5jdGlvbiBiYXNlbmFtZShmaWxlbmFtZSwgZXh0KSB7XG4gICAgcmV0dXJuIHBhdGhfMS5kZWZhdWx0LmJhc2VuYW1lKGZpbGVuYW1lLnJlcGxhY2UoL15bYS16QS1aXTovLCAnJykucmVwbGFjZSgvXFxcXC9nLCAnLycpLCBleHQpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZShvcHRpb25zKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWUgfHwgb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZSA9IG9wdGlvbnMuX19maWxlOyAvLyBpbmplY3RlZCBieSB2dWUtbG9hZGVyXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmNsYXNzaWZ5KShiYXNlbmFtZShmaWxlLCAnLnZ1ZScpKTtcbiAgICB9XG59XG5leHBvcnRzLmdldENvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lO1xuZnVuY3Rpb24gZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHMoZGVmKSB7XG4gICAgbGV0IGRpc3BsYXkgPSBnZXRDb21wb25lbnROYW1lKGRlZik7XG4gICAgaWYgKGRpc3BsYXkpIHtcbiAgICAgICAgaWYgKGRlZi5uYW1lICYmIGRlZi5fX2ZpbGUpIHtcbiAgICAgICAgICAgIGRpc3BsYXkgKz0gYCA8c3Bhbj4oJHtkZWYuX19maWxlfSk8L3NwYW4+YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGlzcGxheSA9ICc8aT5Vbmtub3duIENvbXBvbmVudDwvaT4nO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICB0eXBlOiAnY29tcG9uZW50LWRlZmluaXRpb24nLFxuICAgICAgICAgICAgZGlzcGxheSxcbiAgICAgICAgICAgIHRvb2x0aXA6ICdDb21wb25lbnQgZGVmaW5pdGlvbicsXG4gICAgICAgICAgICAuLi5kZWYuX19maWxlXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGU6IGRlZi5fX2ZpbGUsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q3VzdG9tQ29tcG9uZW50RGVmaW5pdGlvbkRldGFpbHMgPSBnZXRDdXN0b21Db21wb25lbnREZWZpbml0aW9uRGV0YWlscztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5mdW5jdGlvbiBnZXRDdXN0b21GdW5jdGlvbkRldGFpbHMoZnVuYykge1xuICAgIGxldCBzdHJpbmcgPSAnJztcbiAgICBsZXQgbWF0Y2hlcyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgICAgc3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgICAgIG1hdGNoZXMgPSBTdHJpbmcucHJvdG90eXBlLm1hdGNoLmNhbGwoc3RyaW5nLCAvXFwoW1xcc1xcU10qP1xcKS8pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICAvLyBGdW5jIGlzIHByb2JhYmx5IGEgUHJveHksIHdoaWNoIGNhbiBicmVhayBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcoKVxuICAgIH1cbiAgICAvLyBUcmltIGFueSBleGNlc3Mgd2hpdGVzcGFjZSBmcm9tIHRoZSBhcmd1bWVudCBzdHJpbmdcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoZXMgJiYgbWF0Y2hlc1swXTtcbiAgICBjb25zdCBhcmdzID0gdHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGAoJHttYXRjaC5zdWJzdHJpbmcoMSwgbWF0Y2gubGVuZ3RoIC0gMikuc3BsaXQoJywnKS5tYXAoYSA9PiBhLnRyaW0oKSkuam9pbignLCAnKX0pYFxuICAgICAgICA6ICcoPyknO1xuICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgZnVuYy5uYW1lID09PSAnc3RyaW5nJyA/IGZ1bmMubmFtZSA6ICcnO1xuICAgIHJldHVybiB7XG4gICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgIHR5cGU6ICdmdW5jdGlvbicsXG4gICAgICAgICAgICBkaXNwbGF5OiBgPHNwYW4+Zjwvc3Bhbj4gJHtlc2NhcGUobmFtZSl9JHthcmdzfWAsXG4gICAgICAgICAgICBfcmV2aXZlSWQ6IHJldml2ZUNhY2hlLmNhY2hlKGZ1bmMpLFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmdldEN1c3RvbUZ1bmN0aW9uRGV0YWlscyA9IGdldEN1c3RvbUZ1bmN0aW9uRGV0YWlscztcbmZ1bmN0aW9uIGdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscyh2YWx1ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0hUTUxFbGVtZW50JyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBgPHNwYW4gY2xhc3M9XCJvcGFjaXR5LTMwXCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1cInRleHQtYmx1ZS01MDBcIj4ke3ZhbHVlLnRhZ05hbWUudG9Mb3dlckNhc2UoKX08L3NwYW4+PHNwYW4gY2xhc3M9XCJvcGFjaXR5LTMwXCI+Jmd0Ozwvc3Bhbj5gLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lZE5vZGVNYXBUb09iamVjdCh2YWx1ZS5hdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdpbnB1dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnTG9nIGVsZW1lbnQgdG8gY29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0hUTUxFbGVtZW50JyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsdWUtNTAwXCI+JHtTdHJpbmcodmFsdWUpfTwvc3Bhbj5gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLmdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscyA9IGdldEN1c3RvbUhUTUxFbGVtZW50RGV0YWlscztcbmZ1bmN0aW9uIG5hbWVkTm9kZU1hcFRvT2JqZWN0KG1hcCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IGwgPSBtYXAubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBtYXAuaXRlbShpKTtcbiAgICAgICAgcmVzdWx0W25vZGUubmFtZV0gPSBub2RlLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0Q3VzdG9tUmVmRGV0YWlscyhpbnN0YW5jZSwga2V5LCByZWYpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVmKSkge1xuICAgICAgICB2YWx1ZSA9IHJlZi5tYXAoKHIpID0+IGdldEN1c3RvbVJlZkRldGFpbHMoaW5zdGFuY2UsIGtleSwgcikpLm1hcChkYXRhID0+IGRhdGEudmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IG5hbWU7XG4gICAgICAgIGlmIChyZWYuX2lzVnVlKSB7XG4gICAgICAgICAgICBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZWYuJG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmFtZSA9IHJlZi50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYCZsdDske25hbWV9YCArXG4gICAgICAgICAgICAgICAgICAgIChyZWYuaWQgPyBgIDxzcGFuIGNsYXNzPVwiYXR0ci10aXRsZVwiPmlkPC9zcGFuPj1cIiR7cmVmLmlkfVwiYCA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZWYuY2xhc3NOYW1lID8gYCA8c3BhbiBjbGFzcz1cImF0dHItdGl0bGVcIj5jbGFzczwvc3Bhbj49XCIke3JlZi5jbGFzc05hbWV9XCJgIDogJycpICsgJyZndDsnLFxuICAgICAgICAgICAgICAgIHVpZDogaW5zdGFuY2UuX19WVUVfREVWVE9PTFNfVUlEX18sXG4gICAgICAgICAgICAgICAgdHlwZTogJ3JlZmVyZW5jZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnJHJlZnMnLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRDdXN0b21SZWZEZXRhaWxzID0gZ2V0Q3VzdG9tUmVmRGV0YWlscztcbmZ1bmN0aW9uIHBhcnNlKGRhdGEsIHJldml2ZSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHJldml2ZVxuICAgICAgICA/ICgwLCB0cmFuc2Zlcl8xLnBhcnNlQ2lyY3VsYXJBdXRvQ2h1bmtzKShkYXRhLCByZXZpdmVyKVxuICAgICAgICA6ICgwLCB0cmFuc2Zlcl8xLnBhcnNlQ2lyY3VsYXJBdXRvQ2h1bmtzKShkYXRhKTtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbmNvbnN0IHNwZWNpYWxUeXBlUkUgPSAvXlxcW25hdGl2ZSAoXFx3KykgKC4qPykoPD4oKC58XFxzKSopKT9cXF0kLztcbmNvbnN0IHN5bWJvbFJFID0gL15cXFtuYXRpdmUgU3ltYm9sIFN5bWJvbFxcKCguKilcXClcXF0kLztcbmZ1bmN0aW9uIHJldml2ZXIoa2V5LCB2YWwpIHtcbiAgICByZXR1cm4gcmV2aXZlKHZhbCk7XG59XG5mdW5jdGlvbiByZXZpdmUodmFsKSB7XG4gICAgaWYgKHZhbCA9PT0gZXhwb3J0cy5VTkRFRklORUQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsID09PSBleHBvcnRzLklORklOSVRZKSB7XG4gICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsID09PSBleHBvcnRzLk5FR0FUSVZFX0lORklOSVRZKSB7XG4gICAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbCA9PT0gZXhwb3J0cy5OQU4pIHtcbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsICYmIHZhbC5fY3VzdG9tKSB7XG4gICAgICAgIGNvbnN0IHsgX2N1c3RvbTogY3VzdG9tIH0gPSB2YWw7XG4gICAgICAgIGlmIChjdXN0b20udHlwZSA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgYmFja2VuZF8xLmdldEluc3RhbmNlTWFwKSgpLmdldChjdXN0b20uaWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1c3RvbS50eXBlID09PSAnbWFwJykge1xuICAgICAgICAgICAgcmV0dXJuIHJldml2ZU1hcCh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1c3RvbS50eXBlID09PSAnc2V0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHJldml2ZVNldCh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1c3RvbS5fcmV2aXZlSWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXZpdmVDYWNoZS5yZWFkKGN1c3RvbS5fcmV2aXZlSWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJldml2ZShjdXN0b20udmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHN5bWJvbFJFLnRlc3QodmFsKSkge1xuICAgICAgICBjb25zdCBbLCBzdHJpbmddID0gc3ltYm9sUkUuZXhlYyh2YWwpO1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihzdHJpbmcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzcGVjaWFsVHlwZVJFLnRlc3QodmFsKSkge1xuICAgICAgICBjb25zdCBbLCB0eXBlLCBzdHJpbmcsICwgZGV0YWlsc10gPSBzcGVjaWFsVHlwZVJFLmV4ZWModmFsKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IHdpbmRvd1t0eXBlXShzdHJpbmcpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0Vycm9yJyAmJiBkZXRhaWxzKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhY2sgPSBkZXRhaWxzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbn1cbmV4cG9ydHMucmV2aXZlID0gcmV2aXZlO1xuLyoqXG4gKiBTYW5pdGl6ZSBkYXRhIHRvIGJlIHBvc3RlZCB0byB0aGUgb3RoZXIgc2lkZS5cbiAqIFNpbmNlIHRoZSBtZXNzYWdlIHBvc3RlZCBpcyBzZW50IHdpdGggc3RydWN0dXJlZCBjbG9uZSxcbiAqIHdlIG5lZWQgdG8gZmlsdGVyIG91dCBhbnkgdHlwZXMgdGhhdCBtaWdodCBjYXVzZSBhbiBlcnJvci5cbiAqXG4gKiBAcGFyYW0geyp9IGRhdGFcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIHNhbml0aXplKGRhdGEpIHtcbiAgICBpZiAoIWlzUHJpbWl0aXZlKGRhdGEpICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGRhdGEpICYmXG4gICAgICAgICFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgIC8vIGhhbmRsZSB0eXBlcyB0aGF0IHdpbGwgcHJvYmFibHkgY2F1c2UgaXNzdWVzIGluXG4gICAgICAgIC8vIHRoZSBzdHJ1Y3R1cmVkIGNsb25lXG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0YSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuZnVuY3Rpb24gaXNQcmltaXRpdmUoZGF0YSkge1xuICAgIGlmIChkYXRhID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgZGF0YTtcbiAgICByZXR1cm4gKHR5cGUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgIHR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGUgPT09ICdib29sZWFuJyk7XG59XG4vKipcbiAqIFNlYXJjaGVzIGEga2V5IG9yIHZhbHVlIGluIHRoZSBvYmplY3QsIHdpdGggYSBtYXhpbXVtIGRlZXBuZXNzXG4gKiBAcGFyYW0geyp9IG9iaiBTZWFyY2ggdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSBTZWFyY2ggc3RyaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gU2VhcmNoIG1hdGNoXG4gKi9cbmZ1bmN0aW9uIHNlYXJjaERlZXBJbk9iamVjdChvYmosIHNlYXJjaFRlcm0pIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGludGVybmFsU2VhcmNoT2JqZWN0KG9iaiwgc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpLCBzZWVuLCAwKTtcbiAgICBzZWVuLmNsZWFyKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuc2VhcmNoRGVlcEluT2JqZWN0ID0gc2VhcmNoRGVlcEluT2JqZWN0O1xuY29uc3QgU0VBUkNIX01BWF9ERVBUSCA9IDEwO1xuLyoqXG4gKiBFeGVjdXRlcyBhIHNlYXJjaCBvbiBlYWNoIGZpZWxkIG9mIHRoZSBwcm92aWRlZCBvYmplY3RcbiAqIEBwYXJhbSB7Kn0gb2JqIFNlYXJjaCB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEBwYXJhbSB7TWFwPGFueSxib29sZWFuPn0gc2VlbiBNYXAgY29udGFpbmluZyB0aGUgc2VhcmNoIHJlc3VsdCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IGJ5IHdhbGtpbmcgb24gdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggRGVlcCBzZWFyY2ggZGVwdGggbGV2ZWwsIHdoaWNoIGlzIGNhcHBlZCB0byBwcmV2ZW50IHBlcmZvcm1hbmNlIGlzc3Vlc1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBpbnRlcm5hbFNlYXJjaE9iamVjdChvYmosIHNlYXJjaFRlcm0sIHNlZW4sIGRlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gU0VBUkNIX01BWF9ERVBUSCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGxldCBrZXksIHZhbHVlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoQ2hlY2soc2VhcmNoVGVybSwga2V5LCB2YWx1ZSwgc2VlbiwgZGVwdGggKyAxKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59XG4vKipcbiAqIEV4ZWN1dGVzIGEgc2VhcmNoIG9uIGVhY2ggdmFsdWUgb2YgdGhlIHByb3ZpZGVkIGFycmF5XG4gKiBAcGFyYW0geyp9IGFycmF5IFNlYXJjaCB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXJtIFNlYXJjaCBzdHJpbmdcbiAqIEBwYXJhbSB7TWFwPGFueSxib29sZWFuPn0gc2VlbiBNYXAgY29udGFpbmluZyB0aGUgc2VhcmNoIHJlc3VsdCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IGJ5IHdhbGtpbmcgb24gdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggRGVlcCBzZWFyY2ggZGVwdGggbGV2ZWwsIHdoaWNoIGlzIGNhcHBlZCB0byBwcmV2ZW50IHBlcmZvcm1hbmNlIGlzc3Vlc1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBpbnRlcm5hbFNlYXJjaEFycmF5KGFycmF5LCBzZWFyY2hUZXJtLCBzZWVuLCBkZXB0aCkge1xuICAgIGlmIChkZXB0aCA+IFNFQVJDSF9NQVhfREVQVEgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgICBsZXQgdmFsdWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IGFycmF5W2ldO1xuICAgICAgICBtYXRjaCA9IGludGVybmFsU2VhcmNoQ2hlY2soc2VhcmNoVGVybSwgbnVsbCwgdmFsdWUsIHNlZW4sIGRlcHRoICsgMSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGZpZWxkIG1hdGNoZXMgdGhlIHNlYXJjaCB0ZXJtc1xuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm0gU2VhcmNoIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBGaWVsZCBrZXkgKG51bGwgaWYgZnJvbSBhcnJheSlcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgRmllbGQgdmFsdWVcbiAqIEBwYXJhbSB7TWFwPGFueSxib29sZWFuPn0gc2VlbiBNYXAgY29udGFpbmluZyB0aGUgc2VhcmNoIHJlc3VsdCB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IGJ5IHdhbGtpbmcgb24gdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggRGVlcCBzZWFyY2ggZGVwdGggbGV2ZWwsIHdoaWNoIGlzIGNhcHBlZCB0byBwcmV2ZW50IHBlcmZvcm1hbmNlIGlzc3Vlc1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBpbnRlcm5hbFNlYXJjaENoZWNrKHNlYXJjaFRlcm0sIGtleSwgdmFsdWUsIHNlZW4sIGRlcHRoKSB7XG4gICAgbGV0IG1hdGNoID0gZmFsc2U7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoa2V5ID09PSAnX2N1c3RvbScpIHtcbiAgICAgICAga2V5ID0gdmFsdWUuZGlzcGxheTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICB9XG4gICAgKHJlc3VsdCA9IHNwZWNpYWxUb2tlblRvU3RyaW5nKHZhbHVlKSkgJiYgKHZhbHVlID0gcmVzdWx0KTtcbiAgICBpZiAoa2V5ICYmIGNvbXBhcmUoa2V5LCBzZWFyY2hUZXJtKSkge1xuICAgICAgICBtYXRjaCA9IHRydWU7XG4gICAgICAgIHNlZW4uc2V0KHZhbHVlLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgIG1hdGNoID0gc2Vlbi5nZXQodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgbnVsbCk7XG4gICAgICAgIG1hdGNoID0gaW50ZXJuYWxTZWFyY2hBcnJheSh2YWx1ZSwgc2VhcmNoVGVybSwgc2VlbiwgZGVwdGgpO1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgbWF0Y2gpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgbnVsbCk7XG4gICAgICAgIG1hdGNoID0gaW50ZXJuYWxTZWFyY2hPYmplY3QodmFsdWUsIHNlYXJjaFRlcm0sIHNlZW4sIGRlcHRoKTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG1hdGNoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29tcGFyZSh2YWx1ZSwgc2VhcmNoVGVybSkpIHtcbiAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaDtcbn1cbi8qKlxuICogQ29tcGFyZXMgdHdvIHZhbHVlc1xuICogQHBhcmFtIHsqfSB2YWx1ZSBNaXhlZCB0eXBlIHZhbHVlIHRoYXQgd2lsbCBiZSBjYXN0IHRvIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm0gU2VhcmNoIHN0cmluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IFNlYXJjaCBtYXRjaFxuICovXG5mdW5jdGlvbiBjb21wYXJlKHZhbHVlLCBzZWFyY2hUZXJtKSB7XG4gICAgcmV0dXJuICgnJyArIHZhbHVlKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVGVybSkgIT09IC0xO1xufVxuZnVuY3Rpb24gc29ydEJ5S2V5KHN0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLnNsaWNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5rZXkgPCBiLmtleSlcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEua2V5ID4gYi5rZXkpXG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG59XG5leHBvcnRzLnNvcnRCeUtleSA9IHNvcnRCeUtleTtcbmZ1bmN0aW9uIHNpbXBsZUdldChvYmplY3QsIHBhdGgpIHtcbiAgICBjb25zdCBzZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5zcGxpdCgnLicpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0W3NlY3Rpb25zW2ldXTtcbiAgICAgICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbmV4cG9ydHMuc2ltcGxlR2V0ID0gc2ltcGxlR2V0O1xuZnVuY3Rpb24gZm9jdXNJbnB1dChlbCkge1xuICAgIGVsLmZvY3VzKCk7XG4gICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgZWwudmFsdWUubGVuZ3RoKTtcbn1cbmV4cG9ydHMuZm9jdXNJbnB1dCA9IGZvY3VzSW5wdXQ7XG5mdW5jdGlvbiBvcGVuSW5FZGl0b3IoZmlsZSkge1xuICAgIC8vIENvbnNvbGUgZGlzcGxheVxuICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpO1xuICAgIGNvbnN0IHNyYyA9IGBmZXRjaCgnJHtzaGFyZWRfZGF0YV8xLlNoYXJlZERhdGEub3BlbkluRWRpdG9ySG9zdH1fX29wZW4taW4tZWRpdG9yP2ZpbGU9JHtlbmNvZGVVUkkoZmlsZSl9JykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zb2xlLmxvZygnRmlsZSAke2ZpbGVOYW1lfSBvcGVuZWQgaW4gZWRpdG9yJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbXNnID0gJ09wZW5pbmcgY29tcG9uZW50ICR7ZmlsZU5hbWV9IGZhaWxlZCdcbiAgICAgIGNvbnN0IHRhcmdldCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB7fVxuICAgICAgaWYgKHRhcmdldC5fX1ZVRV9ERVZUT09MU19UT0FTVF9fKSB7XG4gICAgICAgIHRhcmdldC5fX1ZVRV9ERVZUT09MU19UT0FTVF9fKG1zZywgJ2Vycm9yJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCclYycgKyBtc2csICdjb2xvcjpyZWQnKVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ0NoZWNrIHRoZSBzZXR1cCBvZiB5b3VyIHByb2plY3QsIHNlZSBodHRwczovL2RldnRvb2xzLnZ1ZWpzLm9yZy9ndWlkZS9vcGVuLWluLWVkaXRvci5odG1sJylcbiAgICB9XG4gIH0pYDtcbiAgICBpZiAoZW52XzEuaXNDaHJvbWUpIHtcbiAgICAgICAgZW52XzEudGFyZ2V0LmNocm9tZS5kZXZ0b29scy5pbnNwZWN0ZWRXaW5kb3cuZXZhbChzcmMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV2YWxcbiAgICAgICAgZXZhbChzcmMpO1xuICAgIH1cbn1cbmV4cG9ydHMub3BlbkluRWRpdG9yID0gb3BlbkluRWRpdG9yO1xuY29uc3QgRVNDID0ge1xuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgICcmJzogJyZhbXA7Jyxcbn07XG5mdW5jdGlvbiBlc2NhcGUocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1s8PlwiJl0vZywgZXNjYXBlQ2hhcik7XG59XG5leHBvcnRzLmVzY2FwZSA9IGVzY2FwZTtcbmZ1bmN0aW9uIGVzY2FwZUNoYXIoYSkge1xuICAgIHJldHVybiBFU0NbYV0gfHwgYTtcbn1cbmZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZChzdGF0ZSkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgZHVtbXlUZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgZHVtbXlUZXh0QXJlYS50ZXh0Q29udGVudCA9IHN0cmluZ2lmeShzdGF0ZSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkdW1teVRleHRBcmVhKTtcbiAgICBkdW1teVRleHRBcmVhLnNlbGVjdCgpO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkdW1teVRleHRBcmVhKTtcbn1cbmV4cG9ydHMuY29weVRvQ2xpcGJvYXJkID0gY29weVRvQ2xpcGJvYXJkO1xuZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBleHBvcnRzLlVOREVGSU5FRCB8fCAhb2JqIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0cy5pc0VtcHR5T2JqZWN0ID0gaXNFbXB0eU9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///76203\n");
|
|
483
507
|
|
|
484
508
|
/***/ }),
|
|
485
509
|
|
|
@@ -1252,6 +1276,13 @@ eval("var root = __webpack_require__(37772);\n\n/**\n * Gets the timestamp of th
|
|
|
1252
1276
|
|
|
1253
1277
|
/***/ }),
|
|
1254
1278
|
|
|
1279
|
+
/***/ 12436:
|
|
1280
|
+
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
1281
|
+
|
|
1282
|
+
eval("var debounce = __webpack_require__(54073),\n isObject = __webpack_require__(29259);\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI0MzYuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEtBQVk7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEtBQVk7O0FBRW5DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVEsV0FBVztBQUM5QixXQUFXLFNBQVM7QUFDcEI7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQSxhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELG1CQUFtQjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdnVlL2RldnRvb2xzLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdGhyb3R0bGUuanM/MDVjYSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVib3VuY2UgPSByZXF1aXJlKCcuL2RlYm91bmNlJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRocm90dGxlZCBmdW5jdGlvbiB0aGF0IG9ubHkgaW52b2tlcyBgZnVuY2AgYXQgbW9zdCBvbmNlIHBlclxuICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG9cbiAqIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYFxuICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICogdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZVxuICogdGhyb3R0bGVkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gcmV0dXJuIHRoZVxuICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgaW52b2NhdGlvbnMgdG8uXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBleGNlc3NpdmVseSB1cGRhdGluZyB0aGUgcG9zaXRpb24gd2hpbGUgc2Nyb2xsaW5nLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICpcbiAqIC8vIEludm9rZSBgcmVuZXdUb2tlbmAgd2hlbiB0aGUgY2xpY2sgZXZlbnQgaXMgZmlyZWQsIGJ1dCBub3QgbW9yZSB0aGFuIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsZWFkaW5nID0gdHJ1ZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gJ2xlYWRpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMubGVhZGluZyA6IGxlYWRpbmc7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuICByZXR1cm4gZGVib3VuY2UoZnVuYywgd2FpdCwge1xuICAgICdsZWFkaW5nJzogbGVhZGluZyxcbiAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgJ3RyYWlsaW5nJzogdHJhaWxpbmdcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdGhyb3R0bGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///12436\n");
|
|
1283
|
+
|
|
1284
|
+
/***/ }),
|
|
1285
|
+
|
|
1255
1286
|
/***/ 7642:
|
|
1256
1287
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
1257
1288
|
|